@doujins/payments-ui 0.1.0 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +140 -0
- package/dist/index.cjs +238 -134
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +8 -10
- package/dist/index.d.ts +8 -10
- package/dist/index.js +237 -133
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +2 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/collect.ts","../src/lib/client.ts","../src/lib/utils.ts","../src/ui/dialog.tsx","../src/data/countries.ts","../src/ui/button.tsx","../src/ui/input.tsx","../src/ui/label.tsx","../src/ui/select.tsx","../src/constants/billing.ts","../src/components/CardDetailsForm.tsx","../src/hooks/usePaymentMethods.ts","../src/ui/badge.tsx","../src/ui/scroll-area.tsx","../src/components/StoredPaymentMethods.tsx","../src/ui/tabs.tsx","../src/hooks/usePaymentNotifications.ts","../src/hooks/useSolanaQrPayment.ts","../src/ui/card.tsx","../src/components/QRCodePayment.tsx","../src/components/PaymentStatus.tsx","../src/hooks/useSupportedTokens.ts","../src/components/SolanaPaymentView.tsx","../src/components/PaymentExperience.tsx","../src/components/checkout/SubscriptionSuccessDialog.tsx","../src/hooks/useSubscriptionActions.ts","../src/components/checkout/SubscriptionCheckoutModal.tsx","../src/components/subscribe/WalletModal.tsx","../src/context/PaymentsDialogContext.tsx","../src/context/PaymentContext.tsx","../src/components/PaymentsUIRoot.tsx","../src/components/SolanaPaymentSelector.tsx","../src/ui/table.tsx","../src/ui/alert-dialog.tsx","../src/ui/textarea.tsx","../src/components/account/CancelMembershipDialog.tsx","../src/components/account/BillingHistory.tsx","../src/components/account/PaymentMethodsSection.tsx","../src/ui/checkbox.tsx","../src/components/subscribe/WalletDialog.tsx","../src/hooks/useTokenBalance.ts","../src/hooks/usePaymentStatus.ts"],"names":["twMerge","clsx","DialogPrimitive","React","jsx","jsxs","X","countryList","cva","React2","Slot","React3","React4","LabelPrimitive","SelectPrimitive","React5","ChevronDown","ChevronUp","Check","useMemo","useState","useEffect","User","MapPin","Fragment","Loader2","CreditCard","useQueryClient","useQuery","useMutation","React7","ScrollAreaPrimitive","WalletCards","Trash2","TabsPrimitive","React9","useCallback","useRef","QRCode","React10","RefreshCw","CheckCircle","XCircle","RotateCcw","tokens","error","ArrowLeft","Sparkles","AlertCircle","Wallet","createContext","useContext","QueryClient","WalletAdapterNetwork","clusterApiUrl","PhantomWalletAdapter","SolflareWalletAdapter","TrustWalletAdapter","CoinbaseWalletAdapter","QueryClientProvider","ConnectionProvider","WalletProvider","WalletModalProvider","React17","AlertDialogPrimitive","React18","React19","Ban","TriangleAlert","notifyDefault","defaultTranslations","useInfiniteQuery","formatCardLabel","React20","CheckboxPrimitive","Shield","UserRound","Calendar","KeyRound","useWallet","useConnection","PublicKey","getAssociatedTokenAddress","getAccount"],"mappings":"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","file":"index.cjs","sourcesContent":["const SCRIPT_SRC = 'https://secure.networkmerchants.com/token/Collect.js'\n\nexport const loadCollectJs = (tokenizationKey: string): void => {\n if (typeof document === 'undefined') return\n const trimmed = tokenizationKey?.trim()\n if (!trimmed || trimmed.length < 10) {\n console.warn('payments-ui: invalid Collect.js key, skipping load')\n return\n }\n\n const existing = document.querySelector(`script[src=\"${SCRIPT_SRC}\"]`)\n if (existing) return\n\n const script = document.createElement('script')\n script.src = SCRIPT_SRC\n script.setAttribute('data-tokenization-key', trimmed)\n script.setAttribute('data-field-ccnumber-placeholder', '0000 0000 0000 0000')\n script.setAttribute('data-field-ccexp-placeholder', '10 / 25')\n script.setAttribute('data-field-cvv-placeholder', '123')\n script.setAttribute('data-variant', 'inline')\n script.async = true\n script.addEventListener('load', () => {\n console.log('payments-ui: Collect.js loaded')\n })\n script.addEventListener('error', (event) => {\n console.error('payments-ui: failed to load Collect.js', event)\n })\n document.head.appendChild(script)\n}\n","/**\n * Minimal Billing API client used by the payments UI.\n *\n * Usage:\n * ```ts\n * const client = createClient({\n * billingBaseUrl: 'https://billing.example.com',\n * getAuthToken: () => authStore.token,\n * })\n *\n * const methods = await client.listPaymentMethods({ limit: 10 })\n * const checkout = await client.checkout({ price_id: 'price_123', processor: 'mobius' })\n * ```\n */\nimport type {\n CheckoutRequestPayload,\n CheckoutResponse,\n} from '../types/subscription'\nimport type {\n CreatePaymentMethodPayload,\n Payment,\n PaymentMethod,\n} from '../types/billing'\nimport type {\n TokenInfo,\n PaymentStatusResponse,\n SolanaPayQRCodeIntent,\n SolanaPayStatusResponse,\n} from '../types/solana-pay'\n\nexport type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE'\n\nexport interface ClientConfig {\n billingBaseUrl: string\n billingBasePath?: string\n accountBaseUrl?: string\n accountBasePath?: string\n getAuthToken?: () => string | null | Promise<string | null>\n defaultHeaders?: Record<string, string>\n fetch?: typeof fetch\n}\n\nexport interface RequestOptions {\n query?: Record<string, string | number | boolean | undefined>\n body?: unknown\n headers?: Record<string, string>\n target?: 'billing' | 'account'\n}\n\nexport interface PaginatedResponse<T> {\n data: T[]\n total: number\n limit: number\n offset: number\n hasMore: boolean\n}\n\nexport class ClientApiError extends Error {\n status: number\n body: unknown\n request: { method: HttpMethod; url: string }\n\n constructor(\n message: string,\n status: number,\n body: unknown,\n request: { method: HttpMethod; url: string }\n ) {\n super(message)\n this.name = 'ClientApiError'\n this.status = status\n this.body = body\n this.request = request\n }\n}\n\ninterface ListResponse<T> {\n object?: string\n data?: T[]\n total?: number\n total_items?: number\n limit?: number\n offset?: number\n has_more?: boolean\n}\n\nconst ensureFetch = (fetchImpl?: typeof fetch): typeof fetch => {\n if (fetchImpl) return fetchImpl\n if (typeof globalThis.fetch === 'function') {\n return globalThis.fetch.bind(globalThis)\n }\n throw new Error('payments-ui: global fetch is not available')\n}\n\nexport const createClient = (config: ClientConfig) => {\n const fetchImpl = ensureFetch(config.fetch)\n const normalizeBase = (value: string) => value.replace(/\\/$/, '')\n const normalizePath = (value?: string, fallback = '/v1') => {\n if (!value) return fallback\n return value.startsWith('/') ? value : `/${value}`\n }\n\n const billingBaseUrl = normalizeBase(config.billingBaseUrl)\n const accountBaseUrl = normalizeBase(\n config.accountBaseUrl ?? config.billingBaseUrl\n )\n const billingBasePath = normalizePath(config.billingBasePath ?? '/v1')\n const accountBasePath = normalizePath(\n config.accountBasePath ?? config.billingBasePath ?? '/v1'\n )\n const defaultHeaders = config.defaultHeaders ?? {}\n\n const resolveAuthToken = async (): Promise<string | null> => {\n if (!config.getAuthToken) return null\n try {\n const result = config.getAuthToken()\n return result instanceof Promise ? await result : result\n } catch (error) {\n console.warn('payments-ui: failed to resolve auth token', error)\n return null\n }\n }\n\n const buildUrl = (\n path: string,\n query: Record<string, string | number | boolean | undefined> | undefined,\n target: 'billing' | 'account'\n ): string => {\n const normalizedPath = path.startsWith('/') ? path : `/${path}`\n const basePath = target === 'account' ? accountBasePath : billingBasePath\n const baseUrl = target === 'account' ? accountBaseUrl : billingBaseUrl\n const needsBasePrefix = !normalizedPath.startsWith(basePath)\n const finalPath = needsBasePrefix ? `${basePath}${normalizedPath}` : normalizedPath\n const url = new URL(`${baseUrl}${finalPath}`)\n if (query) {\n Object.entries(query).forEach(([key, value]) => {\n if (value === undefined || value === null) return\n url.searchParams.append(key, String(value))\n })\n }\n return url.toString()\n }\n\n const request = async <T>(\n method: HttpMethod,\n path: string,\n options?: RequestOptions\n ): Promise<T> => {\n const target = options?.target ?? 'billing'\n const url = buildUrl(path, options?.query, target)\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...defaultHeaders,\n ...(options?.headers ?? {}),\n }\n\n const token = await resolveAuthToken()\n if (token) {\n headers.Authorization = `Bearer ${token}`\n }\n\n const response = await fetchImpl(url, {\n method,\n headers,\n body: options?.body ? JSON.stringify(options.body) : undefined,\n })\n\n if (!response.ok) {\n let payload: unknown = null\n try {\n payload = await response.json()\n } catch {\n payload = await response.text()\n }\n throw new ClientApiError(\n payload && typeof payload === 'object' && 'message' in payload\n ? String((payload as { message?: string }).message)\n : response.statusText || 'Request failed',\n response.status,\n payload,\n { method, url }\n )\n }\n\n if (response.status === 204) {\n return undefined as T\n }\n\n return (await response.json()) as T\n }\n\n const normalizeList = <T>(payload: ListResponse<T>): PaginatedResponse<T> => {\n const data = payload.data ?? []\n const total = payload.total ?? payload.total_items ?? data.length\n const limit = payload.limit ?? data.length\n const offset = payload.offset ?? 0\n const hasMore =\n typeof payload.has_more === 'boolean'\n ? payload.has_more\n : offset + data.length < total\n return { data, total, limit, offset, hasMore }\n }\n\n return {\n async listPaymentMethods(params?: {\n limit?: number\n offset?: number\n includeInactive?: boolean\n }): Promise<PaginatedResponse<PaymentMethod>> {\n const result = await request<ListResponse<PaymentMethod>>(\n 'GET',\n '/me/payment-methods',\n {\n query: {\n limit: params?.limit,\n offset: params?.offset,\n include_inactive: params?.includeInactive,\n },\n target: 'account',\n }\n )\n return normalizeList(result)\n },\n\n createPaymentMethod(payload: CreatePaymentMethodPayload): Promise<PaymentMethod> {\n return request('POST', '/me/payment-methods', {\n body: payload,\n target: 'account',\n })\n },\n\n updatePaymentMethod(\n id: string,\n payload: CreatePaymentMethodPayload\n ): Promise<PaymentMethod> {\n return request('PUT', `/me/payment-methods/${id}`, {\n body: payload,\n target: 'account',\n })\n },\n\n deletePaymentMethod(id: string): Promise<void> {\n return request<void>('DELETE', `/me/payment-methods/${id}`, {\n target: 'account',\n })\n },\n\n activatePaymentMethod(id: string): Promise<void> {\n return request<void>('PUT', `/me/payment-methods/${id}/activate`, {\n target: 'account',\n })\n },\n\n checkout(payload: CheckoutRequestPayload): Promise<CheckoutResponse> {\n return request('POST', '/me/checkout', {\n body: payload,\n })\n },\n\n cancelSubscription(feedback?: string): Promise<{ message: string; success: boolean }> {\n return request('POST', '/me/subscriptions/cancel', {\n body: feedback ? { feedback } : undefined,\n })\n },\n\n async getPaymentHistory(params?: {\n limit?: number\n offset?: number\n type?: string\n }): Promise<PaginatedResponse<Payment>> {\n const result = await request<ListResponse<Payment>>('GET', '/me/payments', {\n query: {\n limit: params?.limit,\n offset: params?.offset,\n type: params?.type,\n },\n })\n return normalizeList(result)\n },\n\n async getSolanaTokens(): Promise<TokenInfo[]> {\n const response = await request<{ tokens?: TokenInfo[] } | TokenInfo[]>(\n 'GET',\n '/solana/tokens'\n )\n if (Array.isArray(response)) {\n return response\n }\n return response.tokens ?? []\n },\n\n async createSolanaPayIntent(payload: {\n priceId: string\n token: string\n userWallet?: string\n }): Promise<SolanaPayQRCodeIntent> {\n const response = await request<any>('POST', '/solana/pay', {\n body: {\n price_id: payload.priceId,\n token: payload.token,\n ...(payload.userWallet ? { user_wallet: payload.userWallet } : {}),\n },\n })\n\n return response as SolanaPayQRCodeIntent\n },\n\n async getSolanaPayStatus(reference: string): Promise<SolanaPayStatusResponse> {\n const response = await request<{\n status: string\n payment_id?: string\n signature?: string\n intent_id?: string\n }>(\n 'GET',\n `/solana/pay/${reference}`\n )\n\n if (response.status === 'confirmed') {\n return {\n status: 'confirmed',\n payment_id: response.payment_id ?? '',\n transaction: response.signature ?? null,\n intent_id: response.intent_id,\n }\n }\n\n if (response.status === 'expired') {\n return {\n status: 'failed',\n payment_id: response.payment_id ?? '',\n transaction: response.signature ?? null,\n intent_id: response.intent_id,\n error_message: 'Payment intent expired',\n }\n }\n\n return {\n status: 'pending',\n payment_id: response.payment_id ?? '',\n transaction: response.signature ?? null,\n intent_id: response.intent_id,\n }\n },\n\n async getPaymentStatus(id: string): Promise<PaymentStatusResponse | null> {\n try {\n return await request<PaymentStatusResponse>('GET', `/payment/status/${id}`)\n } catch (error) {\n if (error instanceof ClientApiError && error.status === 404) {\n return null\n }\n throw error\n }\n },\n }\n}\n\nexport type Client = ReturnType<typeof createClient>\n","import { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"lucide-react\";\n\nimport { cn } from \"../lib/utils\";\n\nconst Dialog = DialogPrimitive.Root;\n\nconst DialogTrigger = DialogPrimitive.Trigger;\n\nconst DialogPortal = DialogPrimitive.Portal;\n\nconst DialogClose = DialogPrimitive.Close;\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <div className=\"payments-ui-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-[calc(100vw-40px)] sm:w-[calc(100vw-60px)] max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-white/10 bg-[#161b22] text-white p-6 shadow-lg duration-200 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-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] rounded-lg\",\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-5 rounded-full bg-white/10 p-1 opacity-70 transition-opacity hover:opacity-100 hover:bg-white/20 focus:outline-none disabled:pointer-events-none\">\n <X className=\"h-3 w-3 text-white\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </div>\n </DialogPortal>\n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...props}\n />\n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-white/60 text-sm\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogTrigger,\n DialogClose,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n};\n","// Use country-list package for standard country data\nimport countryList from 'country-list'\n\n// Define our interfaces for TypeScript support\nexport interface Country {\n code: string\n name: string\n}\n\n// Some countries that need customization or that might be missing from the base package\nconst customCountries: Country[] = [\n { code: 'TW', name: 'Taiwan, Province of China' },\n { code: 'KR', name: 'Korea' },\n { code: 'KP', name: 'North Korea' },\n { code: 'PS', name: 'Palestine, State of' },\n { code: 'VA', name: 'Holy See (Vatican City State)' },\n { code: 'BQ', name: 'Bonaire, Sint Eustatius and Saba' },\n { code: 'SX', name: 'Sint Maarten (Dutch part)' },\n { code: 'MK', name: 'North Macedonia' },\n { code: 'SZ', name: 'Eswatini' },\n { code: 'FM', name: 'Micronesia, Federated States Of' },\n { code: 'TR', name: 'Türkiye' },\n]\n\n// Apply customizations to the country list\ncountryList.overwrite(customCountries)\n\n// Get the countries from the package and sort them alphabetically by name\nexport const countries: Country[] = countryList\n .getData()\n .sort((a: Country, b: Country) => a.name.localeCompare(b.name))\n","import * as React from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '../lib/utils'\n\nconst buttonVariants = cva(\n 'inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/20 disabled:pointer-events-none disabled:opacity-50',\n {\n variants: {\n variant: {\n default: 'bg-[#28a745] text-white shadow hover:bg-[#16a34a]',\n secondary: 'bg-white/10 text-white hover:bg-white/20',\n outline:\n 'border border-white/10 bg-transparent text-white hover:bg-white/10',\n ghost: 'text-white/80 hover:bg-white/10 hover:text-white',\n destructive:\n 'bg-red-600 text-white hover:bg-red-700',\n link: 'text-blue-400 underline-offset-4 hover:underline',\n },\n size: {\n default: 'h-10 px-4 py-2',\n sm: 'h-9 rounded-md px-3',\n lg: 'h-11 rounded-md px-8',\n icon: 'h-10 w-10',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : 'button'\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n )\n }\n)\nButton.displayName = 'Button'\n\nexport { Button, buttonVariants }\n","import * as React from 'react'\n\nimport { cn } from '../lib/utils'\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n 'flex h-10 w-full rounded-md border border-white/10 bg-white/5 px-3 py-2 text-sm text-white placeholder:text-white/40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/20 focus-visible:border-white/20 disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n ref={ref}\n {...props}\n />\n )\n }\n)\nInput.displayName = 'Input'\n\nexport { Input }\n","import * as React from 'react'\nimport * as LabelPrimitive from '@radix-ui/react-label'\nimport { cn } from '../lib/utils'\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(\n 'text-sm font-medium leading-none text-white peer-disabled:cursor-not-allowed peer-disabled:opacity-70',\n className\n )}\n {...props}\n />\n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }\n","import * as React from 'react'\nimport * as SelectPrimitive from '@radix-ui/react-select'\nimport { Check, ChevronDown, ChevronUp } from 'lucide-react'\nimport { cn } from '../lib/utils'\n\nconst Select = SelectPrimitive.Root\n\nconst SelectGroup = SelectPrimitive.Group\n\nconst SelectValue = SelectPrimitive.Value\n\nconst SelectTrigger = React.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-white/10 bg-white/5 px-3 py-2 text-sm text-white placeholder:text-white/40 focus:outline-none focus:ring-2 focus:ring-white/20 disabled:cursor-not-allowed disabled:opacity-50',\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 = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = 'popper', ...props }, ref) => (\n <SelectPrimitive.Portal>\n {/* Wrap portal content with payments-ui-portal for scoped styles */}\n <div className=\"payments-ui-portal\">\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n 'relative z-50 min-w-[8rem] overflow-hidden rounded-md border border-white/10 bg-[#1a1f26] text-white 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 className\n )}\n position={position}\n {...props}\n >\n <SelectPrimitive.ScrollUpButton className=\"flex cursor-default items-center justify-center py-1 text-white/60\">\n <ChevronUp className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollUpButton>\n <SelectPrimitive.Viewport className=\"p-1\">\n {children}\n </SelectPrimitive.Viewport>\n <SelectPrimitive.ScrollDownButton className=\"flex cursor-default items-center justify-center py-1 text-white/60\">\n <ChevronDown className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollDownButton>\n </SelectPrimitive.Content>\n </div>\n </SelectPrimitive.Portal>\n))\nSelectContent.displayName = SelectPrimitive.Content.displayName\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn('px-2 py-1.5 text-sm font-semibold text-white/60', className)}\n {...props}\n />\n))\nSelectLabel.displayName = SelectPrimitive.Label.displayName\n\nconst SelectItem = React.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 text-white outline-none focus:bg-white/10 focus:text-white 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\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn('mx-1 my-1 h-px bg-white/10', className)}\n {...props}\n />\n))\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n}\n","import type { BillingDetails } from '../types'\n\nexport const defaultBillingDetails: BillingDetails = {\n firstName: '',\n lastName: '',\n address1: '',\n city: '',\n stateRegion: '',\n postalCode: '',\n country: 'US',\n email: '',\n provider: 'mobius',\n}\n","import React, { useEffect, useMemo, useState } from 'react'\nimport { CreditCard, Loader2, MapPin, User } from 'lucide-react'\nimport type { BillingDetails } from '../types'\nimport type { CollectJSResponse } from '../types/collect'\nimport { usePaymentContext } from '../context/PaymentContext'\nimport { countries } from '../data/countries'\nimport { Button } from '../ui/button'\nimport { Input } from '../ui/input'\nimport { Label } from '../ui/label'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../ui/select'\nimport { cn } from '../lib/utils'\nimport { defaultBillingDetails } from '../constants/billing'\n\nexport interface CardDetailsFormProps {\n visible: boolean\n onTokenize: (token: string, billing: BillingDetails) => void\n submitLabel: string\n submitting?: boolean\n defaultValues?: Partial<BillingDetails>\n externalError?: string | null\n collectPrefix?: string\n className?: string\n onBillingChange?: (billing: BillingDetails) => void\n submitDisabled?: boolean\n}\n\nconst buildSelector = (prefix: string, field: string) => `#${prefix}-${field}`\n\nexport const CardDetailsForm: React.FC<CardDetailsFormProps> = ({\n visible,\n onTokenize,\n submitLabel,\n submitting = false,\n defaultValues,\n externalError,\n collectPrefix = 'card-form',\n className,\n onBillingChange,\n submitDisabled = false,\n}) => {\n const { config } = usePaymentContext()\n const defaultValuesKey = useMemo(() => JSON.stringify(defaultValues ?? {}), [defaultValues])\n\n\tconst mergedDefaults: BillingDetails = useMemo(\n\t\t() => ({\n\t\t\t...defaultBillingDetails,\n\t\t\t...defaultValues,\n\t\t\temail:\n\t\t\t\tdefaultValues?.email ?? config.defaultUser?.email ?? defaultBillingDetails.email,\n\t\t}),\n\t\t[defaultValuesKey, config.defaultUser?.email]\n\t)\n\n const [firstName, setFirstName] = useState(mergedDefaults.firstName)\n const [lastName, setLastName] = useState(mergedDefaults.lastName)\n const [address1, setAddress1] = useState(mergedDefaults.address1)\n const [city, setCity] = useState(mergedDefaults.city)\n const [stateRegion, setStateRegion] = useState(mergedDefaults.stateRegion ?? '')\n const [postalCode, setPostalCode] = useState(mergedDefaults.postalCode)\n const [country, setCountry] = useState(mergedDefaults.country)\n const [email, setEmail] = useState(mergedDefaults.email ?? '')\n const [localError, setLocalError] = useState<string | null>(null)\n const [isTokenizing, setIsTokenizing] = useState(false)\n\n useEffect(() => {\n if (!visible) {\n setLocalError(null)\n setIsTokenizing(false)\n }\n }, [visible])\n\n useEffect(() => {\n if (!visible) return\n setFirstName(mergedDefaults.firstName)\n setLastName(mergedDefaults.lastName)\n setAddress1(mergedDefaults.address1)\n setCity(mergedDefaults.city)\n setStateRegion(mergedDefaults.stateRegion ?? '')\n setPostalCode(mergedDefaults.postalCode)\n setCountry(mergedDefaults.country)\n setEmail(mergedDefaults.email ?? '')\n }, [defaultValuesKey, mergedDefaults, visible])\n\n useEffect(() => {\n if (!onBillingChange) return\n onBillingChange({\n firstName,\n lastName,\n address1,\n city,\n stateRegion,\n postalCode,\n country,\n email,\n provider: mergedDefaults.provider ?? 'mobius',\n })\n }, [\n firstName,\n lastName,\n address1,\n city,\n stateRegion,\n postalCode,\n country,\n email,\n mergedDefaults.provider,\n onBillingChange,\n ])\n\n useEffect(() => {\n if (typeof window === 'undefined' || !window.CollectJS || !visible) {\n return\n }\n\n const handlers = (window.__doujinsCollectHandlers ||= {})\n handlers[collectPrefix] = (response: CollectJSResponse) => {\n setIsTokenizing(false)\n if (!response.token) {\n setLocalError('Payment tokenization failed. Please try again.')\n return\n }\n\n const billing: BillingDetails = {\n firstName,\n lastName,\n address1,\n city,\n stateRegion,\n postalCode,\n country,\n email,\n provider: mergedDefaults.provider ?? 'mobius',\n }\n\n onTokenize(response.token, billing)\n }\n\n const configured = (window.__doujinsCollectConfigured ||= {})\n if (!configured[collectPrefix]) {\n window.CollectJS.configure({\n variant: 'inline',\n fields: {\n ccnumber: { selector: buildSelector(collectPrefix, 'ccnumber') },\n ccexp: { selector: buildSelector(collectPrefix, 'ccexp') },\n cvv: { selector: buildSelector(collectPrefix, 'cvv') },\n },\n callback: (response: CollectJSResponse) => {\n const fn = window.__doujinsCollectHandlers?.[collectPrefix]\n fn?.(response)\n },\n })\n configured[collectPrefix] = true\n }\n }, [\n collectPrefix,\n firstName,\n lastName,\n address1,\n city,\n stateRegion,\n postalCode,\n country,\n email,\n mergedDefaults.provider,\n onTokenize,\n visible,\n ])\n\n const validate = (): boolean => {\n if (\n !firstName.trim() ||\n !lastName.trim() ||\n !address1.trim() ||\n !city.trim() ||\n !postalCode.trim() ||\n !country.trim() ||\n !email.trim()\n ) {\n setLocalError('Please complete all required billing fields.')\n return false\n }\n setLocalError(null)\n return true\n }\n\n const handleSubmit = (event: React.FormEvent) => {\n event.preventDefault()\n if (!validate()) return\n if (!window.CollectJS) {\n setLocalError('Payment form is not ready. Please try again later.')\n return\n }\n setIsTokenizing(true)\n window.CollectJS.startPaymentRequest()\n }\n\n const errorMessage = localError ?? externalError\n const collectFieldClass =\n 'flex h-11 w-full items-center rounded-md border border-white/10 bg-white/5 px-3 text-sm text-white'\n\n return (\n <form\n className={cn('space-y-5', className)}\n onSubmit={handleSubmit}\n noValidate\n >\n {errorMessage && (\n <div className=\"rounded-md border border-red-500/40 bg-red-500/10 px-4 py-2 text-sm text-red-400\">\n {errorMessage}\n </div>\n )}\n\n <div className=\"grid gap-5 md:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"payments-first\" className=\"flex items-center gap-2 text-white/70\">\n <User className=\"h-4 w-4\" /> First name\n </Label>\n <Input\n id=\"payments-first\"\n value={firstName}\n onChange={(e) => setFirstName(e.target.value)}\n required\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"payments-last\" className=\"flex items-center gap-2 text-white/70\">\n <User className=\"h-4 w-4\" /> Last name\n </Label>\n <Input\n id=\"payments-last\"\n value={lastName}\n onChange={(e) => setLastName(e.target.value)}\n required\n />\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"payments-email\">Email</Label>\n <Input\n id=\"payments-email\"\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n required\n />\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"payments-address1\">Address</Label>\n <Input\n id=\"payments-address1\"\n value={address1}\n onChange={(e) => setAddress1(e.target.value)}\n required\n />\n </div>\n\n <div className=\"grid gap-5 md:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"payments-city\">City</Label>\n <Input\n id=\"payments-city\"\n value={city}\n onChange={(e) => setCity(e.target.value)}\n required\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"payments-state\">State / Region</Label>\n <Input\n id=\"payments-state\"\n value={stateRegion}\n onChange={(e) => setStateRegion(e.target.value)}\n />\n </div>\n </div>\n\n <div className=\"grid gap-5 md:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"payments-postal\" className=\"flex items-center gap-2 text-white/70\">\n <MapPin className=\"h-4 w-4\" /> Postal code\n </Label>\n <Input\n id=\"payments-postal\"\n value={postalCode}\n onChange={(e) => setPostalCode(e.target.value)}\n required\n />\n </div>\n <div className=\"space-y-2\">\n <Label>Country</Label>\n <Select value={country} onValueChange={setCountry}>\n <SelectTrigger>\n <SelectValue placeholder=\"Select a country\" />\n </SelectTrigger>\n <SelectContent className=\"max-h-64 w-full\">\n {countries.map((option) => (\n <SelectItem key={option.code} value={option.code}>\n {option.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <Label>Card number</Label>\n <div id={buildSelector(collectPrefix, 'ccnumber').slice(1)} className={collectFieldClass} />\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label>Expiry</Label>\n <div id={buildSelector(collectPrefix, 'ccexp').slice(1)} className={collectFieldClass} />\n </div>\n <div className=\"space-y-2\">\n <Label>CVV</Label>\n <div id={buildSelector(collectPrefix, 'cvv').slice(1)} className={collectFieldClass} />\n </div>\n </div>\n\n <Button\n type=\"submit\"\n className=\"w-full\"\n disabled={submitting || submitDisabled || isTokenizing}\n >\n {submitting || isTokenizing ? (\n <>\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" /> Processing…\n </>\n ) : (\n <>\n <CreditCard className=\"mr-2 h-4 w-4\" /> {submitLabel}\n </>\n )}\n </Button>\n\n <p className=\"flex items-center gap-2 text-xs text-white/50\">\n <CreditCard className=\"h-4 w-4\" /> Your payment information is encrypted and processed securely.\n </p>\n </form>\n )\n}\n","import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'\nimport type {\n BillingDetails,\n CreatePaymentMethodPayload,\n PaymentMethod,\n PaginatedPaymentMethods,\n} from '../types'\nimport { usePaymentContext } from '../context/PaymentContext'\n\nconst PAYMENT_METHODS_KEY = ['payments-ui', 'payment-methods']\n\nexport const usePaymentMethods = () => {\n const { client } = usePaymentContext()\n const queryClient = useQueryClient()\n\n const listQuery = useQuery<PaginatedPaymentMethods>({\n queryKey: PAYMENT_METHODS_KEY,\n queryFn: async () => {\n const response = await client.listPaymentMethods({ limit: 50 })\n return {\n data: response.data,\n total_items: response.total,\n limit: response.limit,\n offset: response.offset,\n page: response.limit > 0 ? Math.floor(response.offset / response.limit) + 1 : 1,\n page_size: response.limit,\n total_pages:\n response.limit > 0 ? Math.ceil(response.total / response.limit) : undefined,\n }\n },\n })\n\n const createMutation = useMutation<\n PaymentMethod,\n Error,\n { token: string; billing: BillingDetails }\n >({\n mutationFn: ({ token, billing }) => {\n const payload: CreatePaymentMethodPayload = {\n payment_token: token,\n first_name: billing.firstName,\n last_name: billing.lastName,\n address1: billing.address1,\n address2: billing.address2,\n city: billing.city,\n state: billing.stateRegion,\n zip: billing.postalCode,\n country: billing.country,\n email: billing.email,\n provider: billing.provider,\n }\n return client.createPaymentMethod(payload)\n },\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: PAYMENT_METHODS_KEY })\n },\n })\n\n const deleteMutation = useMutation<void, Error, { id: string }>({\n mutationFn: ({ id }) => client.deletePaymentMethod(id),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: PAYMENT_METHODS_KEY })\n },\n })\n\n return {\n listQuery,\n createMutation,\n deleteMutation,\n }\n}\n","import * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../lib/utils'\n\nconst badgeVariants = cva(\n 'inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none',\n {\n variants: {\n variant: {\n default: 'border-transparent bg-emerald-500/20 text-emerald-400',\n secondary: 'border-transparent bg-white/10 text-white/70',\n outline: 'border-white/20 text-white/80',\n destructive: 'border-transparent bg-red-500/20 text-red-400',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n)\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return (\n <div className={cn(badgeVariants({ variant }), className)} {...props} />\n )\n}\n\nexport { Badge, badgeVariants }\n","import * as React from 'react'\nimport * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area'\nimport { cn } from '../lib/utils'\n\nconst ScrollArea = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>\n>(({ className, children, ...props }, ref) => (\n <ScrollAreaPrimitive.Root\n ref={ref}\n className={cn('relative overflow-hidden', className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport className=\"h-full w-full rounded-[inherit]\">\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n))\nScrollArea.displayName = ScrollAreaPrimitive.Root.displayName\n\nconst ScrollBar = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>\n>(({ className, orientation = 'vertical', ...props }, ref) => (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n 'flex touch-none select-none transition-colors',\n orientation === 'vertical' && 'h-full w-2.5 border-l border-l-transparent p-[1px]',\n orientation === 'horizontal' && 'h-2.5 border-t border-t-transparent p-[1px]',\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb className=\"relative flex-1 rounded-full bg-border\" />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n))\nScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName\n\nexport { ScrollArea, ScrollBar }\n","import React, { useMemo, useState } from 'react'\nimport { CreditCard, Loader2, Trash2, WalletCards } from 'lucide-react'\nimport { CardDetailsForm } from './CardDetailsForm'\nimport { usePaymentMethods } from '../hooks/usePaymentMethods'\nimport type { BillingDetails, PaymentMethod } from '../types'\nimport { Button } from '../ui/button'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from '../ui/dialog'\nimport { Badge } from '../ui/badge'\nimport { ScrollArea } from '../ui/scroll-area'\nimport { cn } from '../lib/utils'\n\nconst formatCardLabel = (method: PaymentMethod): string => {\n const brand = method.card_type ? method.card_type.toUpperCase() : 'CARD'\n const lastFour = method.last_four ? `•••• ${method.last_four}` : ''\n return `${brand} ${lastFour}`.trim()\n}\n\nexport interface StoredPaymentMethodsProps {\n selectedMethodId?: string | null\n onMethodSelect?: (method: PaymentMethod) => void\n showAddButton?: boolean\n heading?: string\n description?: string\n}\n\nexport const StoredPaymentMethods: React.FC<StoredPaymentMethodsProps> = ({\n selectedMethodId,\n onMethodSelect,\n showAddButton = true,\n heading = 'Payment Methods',\n description = 'Manage your saved cards',\n}) => {\n const { listQuery, createMutation, deleteMutation } = usePaymentMethods()\n const [isModalOpen, setIsModalOpen] = useState(false)\n const [deletingId, setDeletingId] = useState<string | null>(null)\n\n const payments = useMemo(() => listQuery.data?.data ?? [], [listQuery.data])\n\n const handleCardTokenize = (token: string, billing: BillingDetails) => {\n createMutation.mutate({ token, billing })\n }\n\n const handleDelete = (method: PaymentMethod) => {\n setDeletingId(method.id)\n deleteMutation.mutate(\n { id: method.id },\n {\n onSettled: () => setDeletingId(null),\n }\n )\n }\n\n return (\n <div className=\"space-y-4\">\n <div className=\"flex items-start justify-between\">\n <div>\n <p className=\"flex items-center gap-2 text-sm font-medium text-muted-foreground\">\n <WalletCards className=\"h-4 w-4\" /> {heading}\n </p>\n <p className=\"text-xs text-muted-foreground\">{description}</p>\n </div>\n {showAddButton && (\n <Button size=\"sm\" variant=\"outline\" onClick={() => setIsModalOpen(true)}>\n <CreditCard className=\"mr-2 h-4 w-4\" /> Add card\n </Button>\n )}\n </div>\n {listQuery.isLoading ? (\n <div className=\"flex items-center justify-center rounded-lg border border-dashed border-border/60 bg-muted/10 py-8 text-sm text-muted-foreground\">\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" /> Loading cards…\n </div>\n ) : payments.length === 0 ? (\n <div className=\"rounded-lg border border-dashed border-border/60 bg-muted/10 px-4 py-6 text-sm text-muted-foreground\">\n No saved payment methods yet.\n </div>\n ) : (\n <ScrollArea className=\"max-h-[320px] pr-2\">\n <div className=\"space-y-3\">\n {payments.map((method) => {\n const isSelected = selectedMethodId === method.id\n return (\n <div\n key={method.id}\n className={cn(\n 'flex flex-col gap-3 rounded-lg border px-4 py-3 transition-colors md:flex-row md:items-center md:justify-between',\n isSelected\n ? 'border-primary/60 bg-primary/5'\n : 'border-border/60 bg-background'\n )}\n >\n <div className=\"space-y-1\">\n <p className=\"text-sm font-semibold text-foreground\">\n {formatCardLabel(method)}\n </p>\n <p className=\"text-xs text-muted-foreground\">\n Added on{' '}\n {method.created_at\n ? new Date(method.created_at).toLocaleDateString()\n : 'unknown'}\n </p>\n </div>\n <div className=\"flex flex-wrap items-center gap-2\">\n <Badge\n variant={method.is_active ? 'default' : 'secondary'}\n className={cn(\n method.is_active\n ? 'bg-primary/20 text-primary'\n : 'bg-muted text-muted-foreground'\n )}\n >\n {method.is_active ? 'Active' : 'Inactive'}\n </Badge>\n {method.failure_reason && (\n <Badge variant=\"destructive\">{method.failure_reason}</Badge>\n )}\n {onMethodSelect && (\n <Button\n size=\"sm\"\n variant={isSelected ? 'default' : 'outline'}\n onClick={() => onMethodSelect(method)}\n >\n {isSelected ? 'Selected' : 'Use card'}\n </Button>\n )}\n <Button\n size=\"icon\"\n variant=\"outline\"\n className=\"text-destructive\"\n onClick={() => handleDelete(method)}\n disabled={deletingId === method.id && deleteMutation.isPending}\n >\n {deletingId === method.id && deleteMutation.isPending ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : (\n <Trash2 className=\"h-4 w-4\" />\n )}\n </Button>\n </div>\n </div>\n )\n })}\n </div>\n </ScrollArea>\n )}\n <Dialog open={isModalOpen} onOpenChange={setIsModalOpen}>\n <DialogContent className=\"max-h-[85vh] overflow-y-auto\">\n <DialogHeader>\n <DialogTitle>Add a new card</DialogTitle>\n <DialogDescription>\n Your card details are tokenized securely via our payment provider.\n </DialogDescription>\n </DialogHeader>\n <CardDetailsForm\n visible={isModalOpen}\n collectPrefix=\"payments-ui-card\"\n submitting={createMutation.isPending}\n submitLabel=\"Save card\"\n externalError={createMutation.error?.message ?? null}\n onTokenize={handleCardTokenize}\n />\n </DialogContent>\n </Dialog>\n </div>\n )\n}\n","import * as TabsPrimitive from '@radix-ui/react-tabs'\nimport { cn } from '../lib/utils'\nimport * as React from 'react'\n\nconst Tabs = TabsPrimitive.Root\n\nconst TabsList = React.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-white/5 border border-white/10 p-1 text-white/60',\n className\n )}\n {...props}\n />\n))\nTabsList.displayName = TabsPrimitive.List.displayName\n\nconst TabsTrigger = React.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 transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/20 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-white/10 data-[state=active]:text-white data-[state=active]:shadow',\n className\n )}\n {...props}\n />\n))\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName\n\nconst TabsContent = React.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 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/20',\n className\n )}\n {...props}\n />\n))\nTabsContent.displayName = TabsPrimitive.Content.displayName\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent }\n","import { useCallback } from 'react'\nimport { usePaymentContext } from '../context/PaymentContext'\nimport type {\n PaymentStatusPayload,\n PaymentSuccessPayload,\n} from '../types/config'\n\nexport const usePaymentNotifications = () => {\n const { config } = usePaymentContext()\n\n const notifyStatus = useCallback(\n (status: PaymentStatusPayload['status'], context?: Record<string, unknown>) => {\n config.callbacks?.onStatusChange?.({ status, context })\n },\n [config.callbacks]\n )\n\n const notifySuccess = useCallback(\n (payload?: PaymentSuccessPayload) => {\n config.callbacks?.onSuccess?.(payload ?? {})\n },\n [config.callbacks]\n )\n\n const notifyError = useCallback(\n (error: string | Error) => {\n config.callbacks?.onError?.(\n typeof error === 'string' ? new Error(error) : error\n )\n },\n [config.callbacks]\n )\n\n return {\n notifyStatus,\n notifySuccess,\n notifyError,\n }\n}\n","import { useCallback, useEffect, useRef, useState } from 'react'\nimport QRCode from 'qrcode'\nimport type { TokenInfo } from '../types'\nimport type {\n SolanaPayQRCodeIntent,\n SolanaPayStatusResponse,\n} from '../types/solana-pay'\nimport { usePaymentContext } from '../context/PaymentContext'\n\ninterface UseSolanaQrPaymentOptions {\n priceId: string\n selectedToken: TokenInfo | null\n onSuccess: (paymentId: string | undefined, txId: string | undefined) => void\n onError: (error: string) => void\n}\n\ninterface UseSolanaQrPaymentState {\n intent: SolanaPayQRCodeIntent | null\n qrDataUri: string | null\n isLoading: boolean\n error: string | null\n timeRemaining: number\n refresh: () => void\n}\n\nexport const useSolanaQrPayment = (\n options: UseSolanaQrPaymentOptions\n): UseSolanaQrPaymentState => {\n const { priceId, selectedToken, onSuccess, onError } = options\n const { client } = usePaymentContext()\n const tokenSymbol = selectedToken?.symbol ?? null\n const onSuccessRef = useRef(onSuccess)\n const onErrorRef = useRef(onError)\n\n const [intent, setIntent] = useState<SolanaPayQRCodeIntent | null>(null)\n const [qrDataUri, setQrDataUri] = useState<string | null>(null)\n const [isLoading, setIsLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [timeRemaining, setTimeRemaining] = useState(0)\n const [refreshNonce, setRefreshNonce] = useState(0)\n\n const pollRef = useRef<NodeJS.Timeout | null>(null)\n const countdownRef = useRef<NodeJS.Timeout | null>(null)\n\n const clearTimers = useCallback(() => {\n if (pollRef.current) {\n clearInterval(pollRef.current)\n pollRef.current = null\n }\n if (countdownRef.current) {\n clearInterval(countdownRef.current)\n countdownRef.current = null\n }\n }, [])\n\n useEffect(() => {\n return () => {\n clearTimers()\n }\n }, [clearTimers])\n\n const resetState = useCallback(\n (message?: string | null) => {\n clearTimers()\n setIntent(null)\n setQrDataUri(null)\n setTimeRemaining(0)\n setError(message ?? null)\n },\n [clearTimers]\n )\n\n useEffect(() => {\n onSuccessRef.current = onSuccess\n }, [onSuccess])\n\n useEffect(() => {\n onErrorRef.current = onError\n }, [onError])\n\n const handleError = useCallback(\n (message: string, notifyParent = false) => {\n console.error('[payments-ui] Solana Pay QR error:', message)\n clearTimers()\n resetState(message)\n if (notifyParent) {\n onErrorRef.current?.(message)\n }\n },\n [clearTimers, resetState]\n )\n\n const handleSuccess = useCallback(\n (status: SolanaPayStatusResponse) => {\n clearTimers()\n resetState(null)\n console.log('[payments-ui] Solana Pay QR confirmed', {\n paymentId: status.payment_id,\n intentId: status.intent_id,\n })\n const paymentId = status.payment_id ?? undefined\n const txId = status.transaction ?? undefined\n onSuccessRef.current?.(paymentId, txId)\n },\n [clearTimers, resetState]\n )\n\n const pollStatus = useCallback(\n async (reference: string) => {\n try {\n const status = await client.getSolanaPayStatus(reference)\n\n if (status.status === 'confirmed') {\n handleSuccess(status)\n }\n\n if (status.status === 'failed') {\n handleError(\n status.error_message || 'Payment failed. Please try again.',\n true\n )\n }\n } catch (err) {\n console.error('Failed to poll Solana Pay status:', err)\n }\n },\n [handleError, handleSuccess, client]\n )\n\n const startCountdown = useCallback(\n (expiresAt: number, reference: string) => {\n const updateTime = () => {\n const remaining = Math.max(0, Math.floor(expiresAt - Date.now() / 1000))\n setTimeRemaining(remaining)\n\n if (remaining === 0) {\n handleError('Payment intent expired. Please generate a new QR code.')\n }\n }\n\n updateTime()\n\n countdownRef.current = setInterval(updateTime, 1000)\n pollRef.current = setInterval(() => void pollStatus(reference), 4000)\n },\n [handleError, pollStatus]\n )\n\n const renderQr = useCallback(async (qrIntent: SolanaPayQRCodeIntent) => {\n try {\n const dataUri = await QRCode.toDataURL(qrIntent.url, {\n width: 320,\n margin: 1,\n color: {\n dark: '#0f1116',\n light: '#ffffff',\n },\n })\n setQrDataUri(dataUri)\n } catch (err) {\n console.error('Failed to render QR code:', err)\n handleError('Unable to render QR code')\n }\n }, [handleError])\n\n useEffect(() => {\n let cancelled = false\n\n const generateIntent = async () => {\n clearTimers()\n\n if (!tokenSymbol || !priceId) {\n resetState(null)\n setIsLoading((prev) => (prev ? false : prev))\n return\n }\n\n try {\n setIsLoading(true)\n setError(null)\n console.log('[payments-ui] Requesting Solana Pay QR intent', {\n priceId,\n token: tokenSymbol,\n })\n const nextIntent = await client.createSolanaPayIntent({\n priceId,\n token: tokenSymbol,\n })\n if (cancelled) return\n setIntent(nextIntent)\n setTimeRemaining(\n Math.max(0, Math.floor(nextIntent.expires_at - Date.now() / 1000))\n )\n await renderQr(nextIntent)\n console.log('[payments-ui] Solana Pay QR ready', {\n reference: nextIntent.reference,\n })\n\n const reference = nextIntent.reference\n if (typeof reference === 'string' && reference.length > 0) {\n startCountdown(nextIntent.expires_at, reference)\n pollStatus(reference)\n } else {\n handleError('Payment reference missing from intent', true)\n }\n } catch (err) {\n if (cancelled) return\n console.error('Failed to generate Solana Pay QR intent:', err)\n const message =\n err instanceof Error\n ? err.message\n : 'Unable to create Solana Pay QR code'\n handleError(message)\n } finally {\n if (!cancelled) {\n setIsLoading(false)\n }\n }\n }\n\n void generateIntent()\n\n return () => {\n cancelled = true\n clearTimers()\n }\n }, [\n clearTimers,\n handleError,\n pollStatus,\n priceId,\n renderQr,\n resetState,\n client,\n startCountdown,\n tokenSymbol,\n refreshNonce,\n ])\n\n const refresh = useCallback(() => {\n setRefreshNonce((value) => value + 1)\n }, [])\n\n return {\n intent,\n qrDataUri,\n isLoading,\n error,\n timeRemaining,\n refresh,\n }\n}\n","import * as React from 'react'\n\nimport { cn } from '../lib/utils'\n\nconst Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('rounded-xl border border-white/10 bg-[#161b22] text-white shadow', className)}\n {...props}\n />\n )\n)\nCard.displayName = 'Card'\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('flex flex-col space-y-1.5 p-6', className)}\n {...props}\n />\n))\nCardHeader.displayName = 'CardHeader'\n\nconst CardTitle = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h3 ref={ref} className={cn('text-xl font-semibold leading-none tracking-tight text-white', className)} {...props} />\n )\n)\nCardTitle.displayName = 'CardTitle'\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p ref={ref} className={cn('text-sm text-white/60', className)} {...props} />\n))\nCardDescription.displayName = 'CardDescription'\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn('p-6 pt-0', className)} {...props} />\n))\nCardContent.displayName = 'CardContent'\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('flex items-center p-6 pt-0', className)}\n {...props}\n />\n))\nCardFooter.displayName = 'CardFooter'\n\nexport { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter }\n","import React from 'react'\nimport { Loader2, RefreshCw } from 'lucide-react'\nimport type { SubmitPaymentResponse, TokenInfo } from '../types'\nimport { useSolanaQrPayment } from '../hooks/useSolanaQrPayment'\nimport { Button } from '../ui/button'\nimport { Card } from '../ui/card'\n\ninterface QRCodePaymentProps {\n priceId: string\n selectedToken: TokenInfo | null\n onPaymentError: (error: string) => void\n onPaymentSuccess: (result: SubmitPaymentResponse | string, txId?: string) => void\n}\n\nexport const QRCodePayment: React.FC<QRCodePaymentProps> = ({\n priceId,\n selectedToken,\n onPaymentError,\n onPaymentSuccess,\n}) => {\n const handleQrSuccess = React.useCallback(\n (paymentId?: string, txId?: string) => {\n if (!paymentId && !txId) {\n onPaymentError('Missing payment confirmation details')\n return\n }\n\n const resolvedResult = paymentId ?? txId ?? ''\n onPaymentSuccess(resolvedResult, txId)\n },\n [onPaymentError, onPaymentSuccess]\n )\n\n const { intent, qrDataUri, isLoading, error, timeRemaining, refresh } =\n useSolanaQrPayment({\n priceId,\n selectedToken,\n onError: onPaymentError,\n onSuccess: handleQrSuccess,\n })\n\n if (!selectedToken) {\n return (\n <div className=\"rounded-md border border-dashed border-border/60 bg-muted/10 px-4 py-6 text-center text-sm text-muted-foreground\">\n Select a token to continue.\n </div>\n )\n }\n\n return (\n <Card className=\"space-y-4 border border-border/60 bg-background/80 p-6 shadow-none rounded-md\">\n <div className=\"flex items-start justify-between\">\n <div>\n <p className=\"text-sm font-semibold text-foreground\">Scan with Solana Pay</p>\n <p className=\"text-sm text-muted-foreground\">\n Use any Solana Pay compatible wallet to scan and confirm.\n </p>\n </div>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon\"\n onClick={() => refresh()}\n disabled={isLoading}\n >\n {isLoading ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : (\n <RefreshCw className=\"h-4 w-4\" />\n )}\n </Button>\n </div>\n\n {error && (\n <div className=\"rounded-md border border-destructive/40 bg-destructive/10 px-4 py-2 text-sm text-destructive\">\n {error}\n </div>\n )}\n\n <div className=\"flex items-center justify-center rounded-2xl border border-dashed border-border/70 bg-muted/5 p-6\">\n {qrDataUri ? (\n <img src={qrDataUri} alt=\"Solana Pay QR\" className=\"h-72 w-72 rounded-lg border border-border/40 bg-card\" />\n ) : (\n <div className=\"flex flex-col items-center gap-2 text-sm text-muted-foreground\">\n {isLoading ? (\n <>\n <Loader2 className=\"h-5 w-5 animate-spin\" /> Generating QR code…\n </>\n ) : (\n 'QR code unavailable'\n )}\n </div>\n )}\n </div>\n\n {intent && (\n <div className=\"text-center text-sm text-muted-foreground\">\n Expires in {timeRemaining}s · {intent.token_amount} {intent.token_symbol}\n </div>\n )}\n </Card>\n )\n}\n","import React from 'react'\nimport { CheckCircle, Loader2, RotateCcw, XCircle } from 'lucide-react'\nimport { Button } from '../ui/button'\n\ninterface PaymentStatusProps {\n state: 'selecting' | 'processing' | 'confirming' | 'success' | 'error'\n usdAmount: number\n solAmount?: number\n transactionId?: string | null\n errorMessage?: string | null\n onRetry?: () => void\n onClose?: () => void\n}\n\nexport const PaymentStatus: React.FC<PaymentStatusProps> = ({\n state,\n usdAmount,\n solAmount,\n transactionId,\n errorMessage,\n onRetry,\n onClose,\n}) => {\n if (state === 'processing' || state === 'confirming') {\n return (\n <div className=\"flex flex-col items-center gap-3 text-center\">\n <Loader2 className=\"h-10 w-10 animate-spin text-primary\" />\n <div>\n <p className=\"text-lg font-semibold text-foreground\">\n {state === 'processing' ? 'Processing payment…' : 'Awaiting confirmation…'}\n </p>\n <p className=\"text-sm text-muted-foreground\">\n ${usdAmount.toFixed(2)} {solAmount ? `· ≈ ${solAmount.toFixed(4)} SOL` : ''}\n </p>\n </div>\n </div>\n )\n }\n\n if (state === 'success') {\n return (\n <div className=\"flex flex-col items-center gap-4 text-center\">\n <CheckCircle className=\"h-12 w-12 text-primary\" />\n <div>\n <p className=\"text-lg font-semibold text-foreground\">Payment complete</p>\n {transactionId && (\n <p className=\"text-xs text-muted-foreground\">Txn: {transactionId}</p>\n )}\n </div>\n <Button variant=\"secondary\" onClick={onClose} className=\"w-full\">\n Close\n </Button>\n </div>\n )\n }\n\n if (state === 'error') {\n return (\n <div className=\"flex flex-col items-center gap-4 text-center\">\n <XCircle className=\"h-12 w-12 text-destructive\" />\n <div>\n <p className=\"text-lg font-semibold text-foreground\">Payment failed</p>\n {errorMessage && (\n <p className=\"text-sm text-muted-foreground\">{errorMessage}</p>\n )}\n </div>\n <div className=\"flex w-full flex-col gap-2 sm:flex-row\">\n {onRetry && (\n <Button variant=\"secondary\" className=\"flex-1\" onClick={onRetry}>\n <RotateCcw className=\"mr-2 h-4 w-4\" /> Try again\n </Button>\n )}\n <Button className=\"flex-1\" onClick={onClose}>\n Close\n </Button>\n </div>\n </div>\n )\n }\n\n return null\n}\n","import { useState, useEffect, useCallback, useRef } from 'react'\nimport { TokenInfo } from '../types'\nimport { usePaymentContext } from '../context/PaymentContext'\n\nexport const useSupportedTokens = () => {\n const { client } = usePaymentContext()\n const [tokens, setTokens] = useState<TokenInfo[]>([])\n const [isLoading, setIsLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [lastFetched, setLastFetched] = useState<number | null>(null)\n\n // Cache duration: 5 minutes\n const CACHE_DURATION = 5 * 60 * 1000\n\n // Use refs to avoid dependency issues\n const tokensRef = useRef(tokens)\n const lastFetchedRef = useRef(lastFetched)\n\n // Update refs when state changes\n tokensRef.current = tokens\n lastFetchedRef.current = lastFetched\n\n // Fetch supported tokens from backend\n const fetchSupportedTokens = useCallback(async () => {\n // Check if we have fresh cached data\n if (\n tokensRef.current.length > 0 &&\n lastFetchedRef.current &&\n Date.now() - lastFetchedRef.current < CACHE_DURATION\n ) {\n return tokensRef.current\n }\n\n setIsLoading(true)\n setError(null)\n\n try {\n console.log('payments-ui: fetching supported Solana tokens')\n const tokens = await client.getSolanaTokens()\n\n // Sort tokens by symbol for consistent ordering\n const sortedTokens = [...tokens].sort((a, b) =>\n a.symbol.localeCompare(b.symbol)\n )\n\n setTokens(sortedTokens)\n console.log('payments-ui: loaded supported tokens', {\n count: sortedTokens.length,\n })\n setLastFetched(Date.now())\n return sortedTokens\n } catch (error) {\n const errorMessage =\n error instanceof Error\n ? error.message\n : 'Failed to fetch supported tokens'\n setError(errorMessage)\n console.error('Failed to fetch supported tokens:', error)\n\n // Return empty array on error\n return []\n } finally {\n setIsLoading(false)\n }\n }, [client])\n\n // Auto-fetch on mount\n useEffect(() => {\n if (tokens.length === 0) {\n fetchSupportedTokens()\n }\n }, [tokens.length, fetchSupportedTokens])\n\n // Get token by symbol\n const getTokenBySymbol = useCallback(\n (symbol: string): TokenInfo | undefined => {\n return tokens.find((token) => token.symbol === symbol)\n },\n [tokens]\n )\n\n // Get token by mint address\n const getTokenByMint = useCallback(\n (mintAddress: string): TokenInfo | undefined => {\n return tokens.find((token) => token.mint === mintAddress)\n },\n [tokens]\n )\n\n // Check if a token is supported\n const isTokenSupported = useCallback(\n (symbol: string): boolean => {\n return tokens.some((token) => token.symbol === symbol)\n },\n [tokens]\n )\n\n // Get USDC token (primary stablecoin)\n const getUSDCToken = useCallback((): TokenInfo | undefined => {\n return getTokenBySymbol('USDC')\n }, [getTokenBySymbol])\n\n // Get PYUSD token (secondary stablecoin)\n const getPYUSDToken = useCallback((): TokenInfo | undefined => {\n return getTokenBySymbol('PYUSD')\n }, [getTokenBySymbol])\n\n // Get SOL token (native token)\n const getSOLToken = useCallback((): TokenInfo | undefined => {\n return getTokenBySymbol('SOL')\n }, [getTokenBySymbol])\n\n // Get all stablecoins\n const getStablecoins = useCallback((): TokenInfo[] => {\n return tokens.filter((token) => ['USDC', 'PYUSD'].includes(token.symbol))\n }, [tokens])\n\n // Refresh tokens (bypass cache)\n const refreshTokens = useCallback(async () => {\n setLastFetched(null) // Clear cache\n return await fetchSupportedTokens()\n }, [fetchSupportedTokens])\n\n // Check if cache is stale\n const isCacheStale = useCallback((): boolean => {\n if (!lastFetched) return true\n return Date.now() - lastFetched > CACHE_DURATION\n }, [lastFetched])\n\n // Get token with formatted info for display\n const getTokenDisplayInfo = useCallback((token: TokenInfo) => {\n return {\n ...token,\n displayName: `${token.name} (${token.symbol})`,\n shortAddress: `${token.mint.slice(0, 4)}...${token.mint.slice(-4)}`,\n decimalPlaces: token.decimals,\n }\n }, [])\n\n const getTokenPrice = useCallback(\n (symbol: string): number => {\n const token = getTokenBySymbol(symbol)\n if (!token) return 0\n const price =\n token.price ?? 0\n return typeof price === 'number' ? price : Number(price)\n },\n [getTokenBySymbol]\n )\n\n // Calculate token amount from USD amount\n const calculateTokenAmount = useCallback(\n (usdAmount: number, tokenSymbol: string): string => {\n const token = getTokenBySymbol(tokenSymbol)\n const price = getTokenPrice(tokenSymbol)\n\n if (!token || price === 0) return '0'\n\n const tokenAmount = usdAmount / price\n const tokenAmountInSmallestUnit =\n tokenAmount * Math.pow(10, token.decimals)\n\n return Math.floor(tokenAmountInSmallestUnit).toString()\n },\n [getTokenBySymbol, getTokenPrice]\n )\n\n // Format token amount for display\n const formatTokenAmount = useCallback(\n (amount: string, tokenSymbol: string): string => {\n const token = getTokenBySymbol(tokenSymbol)\n if (!token) return '0'\n\n const numericAmount = parseFloat(amount)\n const displayAmount = numericAmount / Math.pow(10, token.decimals)\n\n return displayAmount.toFixed(token.decimals <= 6 ? token.decimals : 6)\n },\n [getTokenBySymbol]\n )\n\n return {\n tokens,\n isLoading,\n error,\n lastFetched,\n fetchSupportedTokens,\n refreshTokens,\n getTokenBySymbol,\n getTokenByMint,\n isTokenSupported,\n getUSDCToken,\n getPYUSDToken,\n getSOLToken,\n getStablecoins,\n getTokenDisplayInfo,\n getTokenPrice,\n calculateTokenAmount,\n formatTokenAmount,\n isCacheStale,\n hasTokens: tokens.length > 0,\n tokenCount: tokens.length,\n }\n}\n","import React, { useCallback, useEffect, useMemo, useState } from 'react'\nimport { ArrowLeft, Loader2 } from 'lucide-react'\nimport type { SubmitPaymentResponse, TokenInfo } from '../types'\nimport { QRCodePayment } from './QRCodePayment'\nimport { PaymentStatus } from './PaymentStatus'\nimport { useSupportedTokens } from '../hooks/useSupportedTokens'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../ui/select'\nimport { Button } from '../ui/button'\nimport { usePaymentNotifications } from '../hooks/usePaymentNotifications'\n\ntype SolanaFlowState = 'selecting' | 'processing' | 'confirming' | 'success' | 'error'\n\nexport interface SolanaPaymentViewProps {\n priceId: string\n usdAmount: number\n onSuccess: (result: SubmitPaymentResponse | string) => void\n onError?: (error: string) => void\n onClose?: () => void\n}\n\nexport const SolanaPaymentView: React.FC<SolanaPaymentViewProps> = ({\n priceId,\n usdAmount,\n onSuccess,\n onError,\n onClose,\n}) => {\n const { notifyStatus, notifyError, notifySuccess } = usePaymentNotifications()\n const [paymentState, setPaymentState] = useState<SolanaFlowState>('selecting')\n const [errorMessage, setErrorMessage] = useState<string | null>(null)\n const [transactionId, setTransactionId] = useState<string | null>(null)\n const [tokenAmount, setTokenAmount] = useState(0)\n const [selectedTokenSymbol, setSelectedTokenSymbol] = useState<string | null>(null)\n\n const {\n tokens,\n isLoading: tokensLoading,\n error: tokensError,\n } = useSupportedTokens()\n\n const selectedToken = useMemo<TokenInfo | null>(() => {\n if (!tokens.length) return null\n const explicit = tokens.find((token) => token.symbol === selectedTokenSymbol)\n return explicit || tokens[0]\n }, [tokens, selectedTokenSymbol])\n\n useEffect(() => {\n if (!selectedTokenSymbol && tokens.length) {\n const defaultToken =\n tokens.find((token) => token.symbol === 'SOL') || tokens[0]\n setSelectedTokenSymbol(defaultToken.symbol)\n }\n }, [tokens, selectedTokenSymbol])\n\n const handlePaymentSuccess = useCallback(\n (result: SubmitPaymentResponse | string, txId?: string) => {\n const resolvedTx = txId || (typeof result === 'string' ? result : result.transaction_id)\n setTransactionId(resolvedTx)\n setPaymentState('success')\n setErrorMessage(null)\n\n const payload =\n typeof result === 'string'\n ? {\n transactionId: resolvedTx,\n processor: 'solana',\n metadata: { source: 'solana-pay' },\n }\n : {\n transactionId: result.transaction_id,\n intentId: result.intent_id,\n processor: 'solana',\n metadata: {\n purchaseId: result.purchase_id,\n amount: result.amount,\n currency: result.currency,\n },\n }\n\n notifyStatus('success', { source: 'solana' })\n notifySuccess(payload)\n\n setTimeout(() => {\n onSuccess(result)\n }, 1500)\n },\n [notifyStatus, notifySuccess, onSuccess]\n )\n\n const handlePaymentError = useCallback(\n (error: string) => {\n setPaymentState('error')\n setErrorMessage(error)\n notifyStatus('error', { source: 'solana' })\n notifyError(error)\n onError?.(error)\n },\n [notifyError, notifyStatus, onError]\n )\n\n const resetState = useCallback(() => {\n setPaymentState('selecting')\n setErrorMessage(null)\n setTransactionId(null)\n }, [])\n\n const handleRetry = useCallback(() => {\n resetState()\n }, [resetState])\n\n const handleClose = useCallback(() => {\n if (paymentState === 'processing' || paymentState === 'confirming') {\n return\n }\n\n resetState()\n onClose?.()\n }, [paymentState, onClose, resetState])\n\n useEffect(() => {\n if (!selectedToken || usdAmount === 0) {\n setTokenAmount(0)\n return\n }\n\n const price = selectedToken.price ?? 0\n if (!price || price <= 0) {\n setTokenAmount(0)\n return\n }\n\n setTokenAmount(usdAmount / price)\n }, [usdAmount, selectedToken])\n\n const handleTokenChange = useCallback((value: string) => {\n setSelectedTokenSymbol(value)\n }, [])\n\n const renderBody = () => {\n if (paymentState !== 'selecting') {\n return (\n <PaymentStatus\n state={paymentState}\n usdAmount={usdAmount}\n solAmount={tokenAmount}\n onRetry={handleRetry}\n onClose={handleClose}\n errorMessage={errorMessage}\n transactionId={transactionId}\n />\n )\n }\n\n if (tokensLoading) {\n return (\n <div className=\"flex items-center justify-center py-10 text-sm text-muted-foreground\">\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" /> Loading supported tokens…\n </div>\n )\n }\n\n if (tokensError) {\n return <p className=\"text-sm text-destructive\">{tokensError}</p>\n }\n\n if (!tokens.length) {\n return <p className=\"text-sm text-muted-foreground\">No payment tokens available.</p>\n }\n\n return (\n <div className=\"space-y-6\">\n <div className=\"space-y-1 text-center\">\n <p className=\"text-sm text-muted-foreground\">Amount due</p>\n <p className=\"text-3xl font-semibold text-foreground\">${usdAmount.toFixed(2)} USD</p>\n {selectedToken && tokenAmount > 0 && (\n <p className=\"text-sm text-muted-foreground\">\n ≈ {tokenAmount.toFixed(selectedToken.symbol === 'SOL' ? 4 : 2)} {selectedToken.symbol}\n </p>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium text-foreground\">Select token</p>\n <Select value={selectedToken?.symbol ?? ''} onValueChange={handleTokenChange}>\n <SelectTrigger>\n <SelectValue placeholder=\"Select token\" />\n </SelectTrigger>\n <SelectContent className=\"max-h-64\">\n {tokens.map((token) => (\n <SelectItem key={token.symbol} value={token.symbol}>\n {token.name} ({token.symbol})\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n <QRCodePayment\n priceId={priceId}\n selectedToken={selectedToken}\n onPaymentError={handlePaymentError}\n onPaymentSuccess={handlePaymentSuccess}\n />\n </div>\n )\n }\n\n return (\n <div className=\"space-y-6\">\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"space-y-1\">\n <p className=\"text-xs uppercase tracking-wide text-muted-foreground\">Solana Pay checkout</p>\n <p className=\"text-2xl font-semibold text-foreground\">Pay with Solana</p>\n <p className=\"text-sm text-muted-foreground\">\n Choose a supported token and send the payment via Solana Pay QR code.\n </p>\n </div>\n {onClose && (\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n onClick={handleClose}\n disabled={paymentState === 'processing' || paymentState === 'confirming'}\n className=\"h-8 px-2 text-sm\"\n >\n <ArrowLeft className=\"mr-2 h-4 w-4\" /> Back\n </Button>\n )}\n </div>\n {renderBody()}\n </div>\n )\n}\n","import React, { useCallback, useEffect, useState } from 'react'\nimport { Sparkles } from 'lucide-react'\nimport type { BillingDetails, PaymentMethod, SubmitPaymentResponse } from '../types'\nimport { CardDetailsForm } from './CardDetailsForm'\nimport { StoredPaymentMethods } from './StoredPaymentMethods'\nimport { Button } from '../ui/button'\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '../ui/tabs'\nimport { usePaymentNotifications } from '../hooks/usePaymentNotifications'\nimport { SolanaPaymentView } from './SolanaPaymentView'\n\ntype AsyncStatus = 'idle' | 'processing' | 'success' | 'error'\n\nexport interface PaymentExperienceProps {\n priceId: string\n usdAmount: number\n onNewCardPayment?: (payload: {\n token: string\n billing: BillingDetails\n }) => Promise<void> | void\n onSavedMethodPayment?: (payload: {\n paymentMethodId: string\n amount: number\n }) => Promise<void> | void\n enableNewCard?: boolean\n enableStoredMethods?: boolean\n enableSolanaPay?: boolean\n onSolanaSuccess?: (result: SubmitPaymentResponse | string) => void\n onSolanaError?: (error: string) => void\n initialMode?: 'cards' | 'solana'\n}\n\nexport const PaymentExperience: React.FC<PaymentExperienceProps> = ({\n priceId,\n usdAmount,\n onNewCardPayment,\n onSavedMethodPayment,\n enableNewCard = true,\n enableStoredMethods = true,\n enableSolanaPay = true,\n onSolanaSuccess,\n onSolanaError,\n initialMode = 'cards',\n}) => {\n const showNewCard = enableNewCard && Boolean(onNewCardPayment)\n const showStored = enableStoredMethods && Boolean(onSavedMethodPayment)\n const defaultTab = showStored ? 'saved' : 'new'\n const [activeTab, setActiveTab] = useState<'saved' | 'new'>(defaultTab)\n const [mode, setMode] = useState<'cards' | 'solana'>(() =>\n initialMode === 'solana' && enableSolanaPay ? 'solana' : 'cards'\n )\n const [selectedMethodId, setSelectedMethodId] = useState<string | null>(null)\n const [savedStatus, setSavedStatus] = useState<AsyncStatus>('idle')\n const [savedError, setSavedError] = useState<string | null>(null)\n const [newCardStatus, setNewCardStatus] = useState<AsyncStatus>('idle')\n const [newCardError, setNewCardError] = useState<string | null>(null)\n const { notifyStatus, notifySuccess, notifyError } = usePaymentNotifications()\n\n useEffect(() => {\n setActiveTab(showStored ? 'saved' : 'new')\n }, [showStored])\n\n useEffect(() => {\n if (!enableSolanaPay) {\n setMode('cards')\n return\n }\n\n if (initialMode === 'solana') {\n setMode('solana')\n } else {\n setMode('cards')\n }\n }, [enableSolanaPay, initialMode])\n\n const handleMethodSelect = useCallback((method: PaymentMethod) => {\n setSelectedMethodId(method.id)\n setSavedStatus('idle')\n setSavedError(null)\n }, [])\n\n const handleSavedPayment = useCallback(async () => {\n if (!onSavedMethodPayment || !selectedMethodId) return\n try {\n setSavedStatus('processing')\n setSavedError(null)\n notifyStatus('processing', { source: 'saved-payment' })\n await onSavedMethodPayment({\n paymentMethodId: selectedMethodId,\n amount: usdAmount,\n })\n setSavedStatus('success')\n notifyStatus('success', { source: 'saved-payment' })\n } catch (error) {\n const message =\n error instanceof Error\n ? error.message\n : 'Unable to complete payment with saved card'\n setSavedStatus('error')\n setSavedError(message)\n notifyStatus('error', { source: 'saved-payment' })\n notifyError(message)\n }\n }, [notifyError, notifyStatus, onSavedMethodPayment, selectedMethodId, usdAmount])\n\n const handleNewCardTokenize = useCallback(\n async (token: string, billing: BillingDetails) => {\n if (!onNewCardPayment) return\n try {\n setNewCardStatus('processing')\n setNewCardError(null)\n notifyStatus('processing', { source: 'new-card' })\n await onNewCardPayment({ token, billing })\n setNewCardStatus('success')\n notifyStatus('success', { source: 'new-card' })\n } catch (error) {\n const message =\n error instanceof Error ? error.message : 'Unable to complete payment'\n setNewCardStatus('error')\n setNewCardError(message)\n notifyStatus('error', { source: 'new-card' })\n notifyError(message)\n }\n },\n [notifyError, notifyStatus, onNewCardPayment]\n )\n\n const showSolanaView = useCallback(() => {\n if (!enableSolanaPay) return\n setMode('solana')\n }, [enableSolanaPay])\n\n const exitSolanaView = useCallback(() => {\n setMode('cards')\n }, [])\n\n const handleSolanaSuccess = useCallback(\n (result: SubmitPaymentResponse | string) => {\n onSolanaSuccess?.(result)\n exitSolanaView()\n },\n [exitSolanaView, onSolanaSuccess]\n )\n\n const handleSolanaError = useCallback(\n (error: string) => {\n onSolanaError?.(error)\n },\n [onSolanaError]\n )\n\n const renderSavedTab = () => {\n if (!showStored) {\n return (\n <p className=\"text-sm text-muted-foreground\">\n Saved payment methods are unavailable right now. Add a new card to get started.\n </p>\n )\n }\n\n return (\n <div className=\"space-y-4\">\n <StoredPaymentMethods\n heading=\"Saved cards\"\n selectedMethodId={selectedMethodId}\n onMethodSelect={handleMethodSelect}\n description=\"Select one of your stored payment methods.\"\n showAddButton={false}\n />\n\n <Button\n className=\"w-full\"\n disabled={!selectedMethodId || savedStatus === 'processing'}\n onClick={handleSavedPayment}\n >\n {savedStatus === 'processing' ? 'Processing…' : 'Pay with selected card'}\n </Button>\n {savedError && <p className=\"text-sm text-destructive\">{savedError}</p>}\n </div>\n )\n }\n\n const renderNewTab = () => {\n if (!showNewCard) {\n return (\n <p className=\"text-sm text-muted-foreground\">\n Select a subscription plan to add a new card.\n </p>\n )\n }\n\n return (\n <CardDetailsForm\n visible\n submitLabel=\"Pay now\"\n externalError={newCardError}\n onTokenize={handleNewCardTokenize}\n submitting={newCardStatus === 'processing'}\n />\n )\n }\n\n const renderCardExperience = () => (\n <>\n <Tabs\n value={activeTab}\n onValueChange={(value) => setActiveTab(value as 'saved' | 'new')}\n className=\"space-y-3\"\n >\n <TabsList className=\"grid w-full grid-cols-2 border border-border/60\">\n <TabsTrigger value=\"saved\" disabled={!showStored}>\n Use saved card\n </TabsTrigger>\n <TabsTrigger value=\"new\" disabled={!showNewCard}>\n Add new card\n </TabsTrigger>\n </TabsList>\n <TabsContent value=\"saved\" className=\"space-y-4\">\n {renderSavedTab()}\n </TabsContent>\n <TabsContent value=\"new\" className=\"space-y-4\">\n {renderNewTab()}\n </TabsContent>\n </Tabs>\n\n {enableSolanaPay && (\n <Button className=\"w-full\" variant=\"secondary\" onClick={showSolanaView}>\n <Sparkles className=\"mr-2 h-4 w-4\" /> Pay with Solana\n </Button>\n )}\n </>\n )\n\n\treturn (\n\t\t<div className=\"space-y-6 pt-4\">\n\t\t\t{mode === 'cards' && renderCardExperience()}\n\t\t\t{mode === 'solana' && enableSolanaPay && (\n\t\t\t\t<SolanaPaymentView\n\t\t\t\t\tpriceId={priceId}\n\t\t\t\t\tusdAmount={usdAmount}\n\t\t\t\t\tonSuccess={handleSolanaSuccess}\n\t\t\t\t\tonError={handleSolanaError}\n\t\t\t\t\tonClose={exitSolanaView}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n","import React from 'react'\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n} from '../../ui/dialog'\nimport { Button } from '../../ui/button'\nimport { CheckCircle } from 'lucide-react'\n\ninterface SubscriptionSuccessDialogProps {\n open: boolean\n planName?: string\n amountLabel?: string\n billingPeriodLabel?: string\n onClose: () => void\n}\n\nexport const SubscriptionSuccessDialog: React.FC<SubscriptionSuccessDialogProps> = ({\n open,\n planName = 'Premium Plan',\n amountLabel = '$0.00',\n billingPeriodLabel = 'billing period',\n onClose,\n}) => {\n return (\n <Dialog open={open} onOpenChange={(value) => {\n if (!value) onClose()\n }}>\n <DialogContent className=\"w-full max-w-md overflow-hidden border border-border/70 bg-background/95 p-0 shadow-2xl\">\n <div className=\"bg-gradient-to-b from-primary/25 via-primary/10 to-background px-6 py-8 text-center\">\n <div className=\"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-background/60\">\n <CheckCircle className=\"h-10 w-10 text-primary\" />\n </div>\n <DialogHeader>\n <DialogTitle className=\"text-2xl font-semibold text-foreground\">\n Subscription activated\n </DialogTitle>\n <DialogDescription className=\"text-base text-muted-foreground\">\n You now have access to {planName}. Billing: {amountLabel} / {billingPeriodLabel}.\n </DialogDescription>\n </DialogHeader>\n </div>\n <div className=\"px-6 py-6\">\n <Button className=\"w-full\" onClick={onClose}>\n Continue exploring\n </Button>\n </div>\n </DialogContent>\n </Dialog>\n )\n}\n","import { useCallback } from 'react'\nimport { usePaymentContext } from '../context/PaymentContext'\nimport type { BillingDetails } from '../types/billing'\nimport type {\n CheckoutRequestPayload,\n CheckoutResponse,\n} from '../types/subscription'\n\nexport interface SubscribeWithCardParams {\n priceId?: string | null\n processor?: string\n provider?: string\n paymentToken: string\n billing: BillingDetails\n}\n\nexport interface SubscribeWithSavedMethodParams {\n priceId?: string | null\n processor?: string\n provider?: string\n paymentMethodId: string\n email?: string\n}\n\nexport interface SubscribeWithCCBillParams {\n priceId?: string | null\n email: string\n firstName: string\n lastName: string\n zipCode: string\n country: string\n processor?: string\n}\n\nexport const useSubscriptionActions = () => {\n const { client } = usePaymentContext()\n\n const ensurePrice = (priceId?: string | null) => {\n if (!priceId) {\n throw new Error('payments-ui: priceId is required for subscription actions')\n }\n return priceId\n }\n\n const subscribeWithCard = useCallback(\n async ({\n priceId,\n processor = 'nmi',\n provider,\n paymentToken,\n billing,\n }: SubscribeWithCardParams): Promise<CheckoutResponse> => {\n const payload: CheckoutRequestPayload = {\n price_id: ensurePrice(priceId),\n processor,\n provider,\n payment_token: paymentToken,\n email: billing.email,\n first_name: billing.firstName,\n last_name: billing.lastName,\n address1: billing.address1,\n city: billing.city,\n state: billing.stateRegion,\n zip: billing.postalCode,\n country: billing.country,\n }\n return client.checkout(payload)\n },\n [client]\n )\n\n const subscribeWithSavedMethod = useCallback(\n async ({\n priceId,\n processor = 'nmi',\n provider,\n paymentMethodId,\n email,\n }: SubscribeWithSavedMethodParams): Promise<CheckoutResponse> => {\n const payload: CheckoutRequestPayload = {\n price_id: ensurePrice(priceId),\n processor,\n provider,\n payment_method_id: paymentMethodId,\n email,\n }\n return client.checkout(payload)\n },\n [client]\n )\n\n const subscribeWithCCBill = useCallback(\n async ({\n priceId,\n email,\n firstName,\n lastName,\n zipCode,\n country,\n processor = 'ccbill',\n }: SubscribeWithCCBillParams): Promise<CheckoutResponse> => {\n const payload: CheckoutRequestPayload = {\n price_id: ensurePrice(priceId),\n processor,\n email,\n first_name: firstName,\n last_name: lastName,\n zip: zipCode,\n country,\n }\n return client.checkout(payload)\n },\n [client]\n )\n\n return {\n subscribeWithCard,\n subscribeWithSavedMethod,\n subscribeWithCCBill,\n }\n}\n","import React, { useCallback, useState } from 'react'\nimport { Dialog, DialogContent } from '../../ui/dialog'\nimport { AlertCircle } from 'lucide-react'\nimport { PaymentExperience } from '../PaymentExperience'\nimport { SubscriptionSuccessDialog } from './SubscriptionSuccessDialog'\nimport { useSubscriptionActions } from '../../hooks/useSubscriptionActions'\nimport type { BillingDetails, SubmitPaymentResponse } from '../../types'\n\nexport interface SubscriptionCheckoutModalProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n priceId?: string | null\n usdAmount?: number\n planName?: string\n amountLabel?: string\n billingPeriodLabel?: string\n userEmail?: string | null\n provider?: string\n onSuccess?: () => void\n enableSolanaPay?: boolean\n onSolanaSuccess?: (result: SubmitPaymentResponse | string) => void\n onSolanaError?: (error: string) => void\n initialMode?: 'cards' | 'solana'\n}\n\nexport const SubscriptionCheckoutModal: React.FC<SubscriptionCheckoutModalProps> = ({\n open,\n onOpenChange,\n priceId,\n usdAmount = 0,\n planName,\n amountLabel,\n billingPeriodLabel,\n userEmail,\n provider = 'mobius',\n onSuccess,\n enableSolanaPay = true,\n onSolanaSuccess,\n onSolanaError,\n initialMode = 'cards',\n}) => {\n const [showSuccess, setShowSuccess] = useState(false)\n const { subscribeWithCard, subscribeWithSavedMethod } = useSubscriptionActions()\n\n const handleClose = useCallback(\n (nextOpen: boolean) => {\n onOpenChange(nextOpen)\n if (!nextOpen) setShowSuccess(false)\n },\n [onOpenChange]\n )\n\n const ensurePrice = () => {\n if (!priceId) throw new Error('Select a plan before subscribing.')\n return priceId\n }\n\n const notifySuccess = (result?: SubmitPaymentResponse | string) => {\n setShowSuccess(true)\n onSuccess?.()\n if (result && typeof window !== 'undefined') {\n console.debug('[payments-ui] subscription success', result)\n }\n }\n\n const assertCheckoutSuccess = (status: string, message?: string) => {\n if (status === 'blocked') {\n throw new Error(message || 'This subscription cannot be completed right now.')\n }\n if (status === 'redirect_required') {\n throw new Error(message || 'Additional action required in an alternate flow.')\n }\n }\n\n const handleNewCardPayment = async ({ token, billing }: { token: string; billing: BillingDetails }) => {\n const response = await subscribeWithCard({\n priceId: ensurePrice(),\n provider,\n paymentToken: token,\n billing,\n })\n assertCheckoutSuccess(response.status, response.message)\n notifySuccess()\n }\n\n const handleSavedMethodPayment = async ({ paymentMethodId }: { paymentMethodId: string }) => {\n const response = await subscribeWithSavedMethod({\n priceId: ensurePrice(),\n provider,\n paymentMethodId,\n email: userEmail ?? '',\n })\n assertCheckoutSuccess(response.status, response.message)\n notifySuccess()\n }\n\n const solanaSuccess = (result: SubmitPaymentResponse | string) => {\n notifySuccess(result)\n onSolanaSuccess?.(result)\n onOpenChange(false)\n }\n\n const solanaError = (error: string) => {\n onSolanaError?.(error)\n }\n\n return (\n <>\n <Dialog open={open} onOpenChange={handleClose}>\n <DialogContent \n className=\"max-w-3xl max-h-[90vh] overflow-y-auto p-0 [&::-webkit-scrollbar]:hidden\"\n >\n <div className=\"p-6 space-y-6\">\n {!priceId && (\n <div className=\"flex items-center gap-2 rounded-lg border border-destructive/40 bg-destructive/10 px-3 py-2 text-sm text-destructive\">\n <AlertCircle className=\"h-4 w-4\" /> Select a subscription plan to continue.\n </div>\n )}\n <PaymentExperience\n usdAmount={usdAmount}\n priceId={priceId ?? ''}\n onSolanaSuccess={solanaSuccess}\n onSolanaError={solanaError}\n enableNewCard={Boolean(priceId)}\n enableStoredMethods={Boolean(priceId)}\n enableSolanaPay={enableSolanaPay && Boolean(priceId)}\n onNewCardPayment={priceId ? handleNewCardPayment : undefined}\n onSavedMethodPayment={priceId ? handleSavedMethodPayment : undefined}\n initialMode={initialMode}\n />\n </div>\n </DialogContent>\n </Dialog>\n <SubscriptionSuccessDialog\n open={showSuccess}\n onClose={() => setShowSuccess(false)}\n planName={planName}\n amountLabel={amountLabel ?? `$${usdAmount.toFixed(2)}`}\n billingPeriodLabel={billingPeriodLabel}\n />\n </>\n )\n}\n","import { useState } from 'react'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from '../../ui/dialog'\nimport { ChevronDown, ChevronUp, Wallet } from 'lucide-react'\nimport { Button } from '../../ui/button'\n\ninterface WalletDefinition {\n id: string\n name: string\n icon: string\n}\n\nconst wallets: WalletDefinition[] = [\n {\n id: 'phantom',\n name: 'Phantom',\n icon: 'https://phantom.app/img/logo.png',\n },\n {\n id: 'solflare',\n name: 'Solflare',\n icon: 'https://solflare.com/favicon.ico',\n },\n]\n\nexport interface WalletModalProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n}\n\nexport const WalletModal: React.FC<WalletModalProps> = ({ open, onOpenChange }) => {\n const [expandedWallet, setExpandedWallet] = useState<string | null>(null)\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"w-full max-w-lg max-h-[90vh] overflow-y-auto rounded-md border border-border/70 bg-background/95 p-0 shadow-2xl [&::-webkit-scrollbar]:hidden\">\n <DialogHeader className=\"border-b border-border/40 bg-gradient-to-r from-primary/10 via-background to-background px-6 py-5 text-left\">\n <DialogTitle className=\"flex items-center gap-2 text-foreground\">\n <Wallet className=\"h-5 w-5 text-primary\" /> Connect a Solana wallet\n </DialogTitle>\n <DialogDescription className=\"text-sm text-muted-foreground\">\n Pick a supported wallet to link with Doujins. Verified wallets unlock Solana payments and withdrawals.\n </DialogDescription>\n </DialogHeader>\n <div className=\"p-6 space-y-4\">\n {wallets.map((wallet) => (\n <div\n key={wallet.id}\n className=\"rounded-2xl border border-border/60 bg-background/80 p-4 shadow-sm\"\n >\n <button\n className=\"flex w-full items-center justify-between\"\n onClick={() =>\n setExpandedWallet((prev) => (prev === wallet.id ? null : wallet.id))\n }\n >\n <div className=\"flex items-center gap-3 text-left\">\n <img src={wallet.icon} alt={wallet.name} className=\"h-10 w-10 rounded-full\" />\n <div>\n <p className=\"text-base font-semibold text-foreground\">{wallet.name}</p>\n <p className=\"text-sm text-muted-foreground\">Browser extension or mobile app</p>\n </div>\n </div>\n {expandedWallet === wallet.id ? (\n <ChevronUp className=\"h-4 w-4 text-muted-foreground\" />\n ) : (\n <ChevronDown className=\"h-4 w-4 text-muted-foreground\" />\n )}\n </button>\n {expandedWallet === wallet.id && (\n <div className=\"mt-4 space-y-3 text-sm text-muted-foreground\">\n <p>\n Open the {wallet.name} wallet, approve the connection request, and confirm the signature prompt to finish linking.\n </p>\n <Button className=\"w-full\" variant=\"outline\" disabled>\n Connect with {wallet.name} (coming soon)\n </Button>\n </div>\n )}\n </div>\n ))}\n <div className=\"rounded-2xl border border-border/60 bg-muted/10 p-4 text-xs text-muted-foreground\">\n Don’t see your wallet? Additional providers will be added soon. Contact support if you need manual verification.\n </div>\n </div>\n </DialogContent>\n </Dialog>\n )\n}\n","import React, { createContext, useContext, useMemo, useState } from 'react'\nimport {\n SubscriptionCheckoutModal,\n type SubscriptionCheckoutModalProps,\n} from '../components/checkout/SubscriptionCheckoutModal'\nimport type { SolanaPaymentSelectorProps } from '../components/SolanaPaymentSelector'\nimport {\n WalletModal,\n type WalletModalProps,\n} from '../components/subscribe/WalletModal'\n\ntype CheckoutOptions = Omit<SubscriptionCheckoutModalProps, 'open' | 'onOpenChange'>\ntype SolanaOptions = Omit<SolanaPaymentSelectorProps, 'isOpen' | 'onClose'>\ntype WalletOptions = Omit<WalletModalProps, 'open' | 'onOpenChange'>\n\ninterface DialogState<T> {\n isOpen: boolean\n props: T | null\n}\n\nconst createDialogState = <T,>(): DialogState<T> => ({\n isOpen: false,\n props: null,\n})\n\ninterface PaymentsDialogContextValue {\n checkout: {\n open: (options: CheckoutOptions) => void\n close: () => void\n isOpen: boolean\n }\n solana: {\n open: (options: SolanaOptions) => void\n close: () => void\n isOpen: boolean\n }\n wallet: {\n open: (options?: WalletOptions) => void\n close: () => void\n isOpen: boolean\n }\n}\n\nconst PaymentsDialogContext =\n createContext<PaymentsDialogContextValue | undefined>(undefined)\n\nexport const PaymentsDialogProvider: React.FC<React.PropsWithChildren> = ({\n children,\n}) => {\n const [checkoutState, setCheckoutState] = useState<DialogState<CheckoutOptions>>(\n () => createDialogState<CheckoutOptions>()\n )\n const [walletState, setWalletState] = useState<DialogState<WalletOptions>>(\n () => createDialogState<WalletOptions>()\n )\n\n const contextValue = useMemo<PaymentsDialogContextValue>(() => {\n const openCheckout = (options: CheckoutOptions) =>\n setCheckoutState({\n isOpen: true,\n props: options,\n })\n\n return {\n checkout: {\n isOpen: checkoutState.isOpen,\n open: openCheckout,\n close: () => setCheckoutState(createDialogState<CheckoutOptions>()),\n },\n solana: {\n isOpen:\n checkoutState.isOpen && checkoutState.props?.initialMode === 'solana',\n open: (options) =>\n openCheckout({\n priceId: options.priceId,\n usdAmount: options.usdAmount,\n enableSolanaPay: true,\n initialMode: 'solana',\n onSolanaSuccess: options.onSuccess,\n onSolanaError: options.onError,\n }),\n close: () => setCheckoutState(createDialogState<CheckoutOptions>()),\n },\n wallet: {\n isOpen: walletState.isOpen,\n open: (options) =>\n setWalletState({\n isOpen: true,\n props: options ?? null,\n }),\n close: () => setWalletState(createDialogState<WalletOptions>()),\n },\n }\n }, [checkoutState, walletState.isOpen])\n\n return (\n <PaymentsDialogContext.Provider value={contextValue}>\n {children}\n {checkoutState.props && (\n <SubscriptionCheckoutModal\n open={checkoutState.isOpen}\n onOpenChange={(open) =>\n open\n ? setCheckoutState((prev) => ({ ...prev, isOpen: true }))\n : setCheckoutState(createDialogState<CheckoutOptions>())\n }\n {...checkoutState.props}\n />\n )}\n\n <WalletModal\n open={walletState.isOpen}\n onOpenChange={(open) =>\n open\n ? setWalletState((prev) => ({ ...prev, isOpen: true }))\n : setWalletState(createDialogState<WalletOptions>())\n }\n {...(walletState.props ?? {})}\n />\n </PaymentsDialogContext.Provider>\n )\n}\n\nexport const usePaymentDialogs = (): PaymentsDialogContextValue => {\n const context = useContext(PaymentsDialogContext)\n if (!context) {\n throw new Error('usePaymentDialogs must be used within PaymentProvider')\n }\n return context\n}\n","import React, { createContext, useContext, useEffect, useMemo } from 'react'\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query'\nimport type { PaymentConfig } from '../types/config'\nimport { loadCollectJs } from '../utils/collect'\nimport { createClient, type Client } from '../lib/client'\nimport {\n ConnectionProvider,\n WalletProvider,\n} from '@solana/wallet-adapter-react'\nimport { WalletModalProvider } from '@solana/wallet-adapter-react-ui'\nimport '@solana/wallet-adapter-react-ui/styles.css'\nimport {\n WalletAdapterNetwork,\n type WalletAdapter,\n} from '@solana/wallet-adapter-base'\nimport { clusterApiUrl } from '@solana/web3.js'\nimport { PhantomWalletAdapter } from '@solana/wallet-adapter-phantom'\nimport { SolflareWalletAdapter } from '@solana/wallet-adapter-solflare'\nimport { TrustWalletAdapter } from '@solana/wallet-adapter-trust'\nimport { CoinbaseWalletAdapter } from '@solana/wallet-adapter-coinbase'\nimport { PaymentsDialogProvider } from './PaymentsDialogContext'\n\nexport interface PaymentContextValue {\n config: PaymentConfig\n client: Client\n queryClient: QueryClient\n}\n\nexport const PaymentContext = createContext<PaymentContextValue | undefined>(undefined)\n\nexport interface PaymentProviderProps {\n config: PaymentConfig\n children: React.ReactNode\n}\n\nexport const PaymentProvider: React.FC<PaymentProviderProps> = ({\n config,\n children,\n}) => {\n const queryClient = useMemo(() => {\n return new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: 30_000,\n gcTime: 5 * 60_000,\n refetchOnWindowFocus: false,\n retry: 1,\n },\n mutations: {\n retry: 1,\n },\n },\n })\n }, [])\n\n const client = useMemo(() => {\n const authProvider = config.getAuthToken\n ? async () => {\n try {\n const result = config.getAuthToken?.()\n if (result instanceof Promise) {\n return (await result) ?? null\n }\n return result ?? null\n } catch (error) {\n console.warn('payments-ui: failed to resolve auth token', error)\n return null\n }\n }\n : undefined\n\n const wrappedFetch = config.fetcher\n ? ((input: RequestInfo | URL, init?: RequestInit) => {\n const normalizedInput = input instanceof URL ? input.toString() : input\n return config.fetcher!(normalizedInput as RequestInfo, init)\n })\n : undefined\n\n return createClient({\n billingBaseUrl: config.endpoints.billingBaseUrl,\n billingBasePath: config.endpoints.billingBasePath,\n accountBaseUrl: config.endpoints.accountBaseUrl,\n accountBasePath: config.endpoints.accountBasePath,\n getAuthToken: authProvider,\n defaultHeaders: config.defaultHeaders,\n fetch: wrappedFetch,\n })\n }, [config])\n\n const solanaEndpoint = useMemo(() => {\n if (config.solana?.endpoint) return config.solana.endpoint\n const network = config.solana?.network ?? WalletAdapterNetwork.Mainnet\n return clusterApiUrl(network)\n }, [config.solana?.endpoint, config.solana?.network])\n\n const walletAdapters = useMemo<WalletAdapter[]>(() => {\n if (config.solana?.wallets?.length) {\n return config.solana.wallets\n }\n \n return [\n new PhantomWalletAdapter(),\n new SolflareWalletAdapter(),\n new TrustWalletAdapter(),\n new CoinbaseWalletAdapter(),\n ]\n }, [config.solana?.wallets])\n\n const autoConnect = config.solana?.autoConnect ?? true\n\n const value = useMemo<PaymentContextValue>(() => {\n return {\n config,\n client,\n queryClient,\n }\n }, [client, config, queryClient])\n\n useEffect(() => {\n if (!config.collectJsKey) return\n loadCollectJs(config.collectJsKey)\n }, [config.collectJsKey])\n\n return (\n <PaymentContext.Provider value={value}>\n <QueryClientProvider client={queryClient}>\n <ConnectionProvider endpoint={solanaEndpoint} config={{ commitment: 'confirmed' }}>\n <WalletProvider wallets={walletAdapters} autoConnect={autoConnect}>\n <WalletModalProvider>\n <PaymentsDialogProvider>{children}</PaymentsDialogProvider>\n </WalletModalProvider>\n </WalletProvider>\n </ConnectionProvider>\n </QueryClientProvider>\n </PaymentContext.Provider>\n )\n}\n\nexport const usePaymentContext = (): PaymentContextValue => {\n const context = useContext(PaymentContext)\n if (!context) {\n throw new Error('usePaymentContext must be used within a PaymentProvider')\n }\n return context\n}\n","import React from 'react'\nimport { cn } from '../lib/utils'\n\nexport interface PaymentsUIRootProps {\n children: React.ReactNode\n className?: string\n /**\n * When true, applies the dark theme variant\n * @default false\n */\n dark?: boolean\n}\n\n/**\n * Root wrapper component that provides scoped CSS variables for payments-ui.\n * Use this to wrap any payments-ui components to ensure styles don't conflict\n * with the consuming application.\n * \n * @example\n * ```tsx\n * <PaymentsUIRoot>\n * <SubscriptionCheckoutModal ... />\n * </PaymentsUIRoot>\n * ```\n */\nexport const PaymentsUIRoot: React.FC<PaymentsUIRootProps> = ({\n children,\n className,\n dark = false,\n}) => {\n return (\n <div\n className={cn(\n 'payments-ui-root',\n dark && 'dark',\n className\n )}\n >\n {children}\n </div>\n )\n}\n\n/**\nprevent conflicts with client app styles\n */\nexport const PaymentsUIPortalRoot: React.FC<PaymentsUIRootProps> = ({\n children,\n className,\n dark = false,\n}) => {\n return (\n <div\n className={cn(\n 'payments-ui-portal',\n dark && 'dark',\n className\n )}\n >\n {children}\n </div>\n )\n}\n\n\n","import React from 'react'\nimport { Dialog, DialogContent } from '../ui/dialog'\nimport type { SolanaPaymentViewProps } from './SolanaPaymentView'\nimport { SolanaPaymentView } from './SolanaPaymentView'\n\nexport interface SolanaPaymentSelectorProps\n extends SolanaPaymentViewProps {\n isOpen: boolean\n onClose: () => void\n}\n\nexport const SolanaPaymentSelector: React.FC<SolanaPaymentSelectorProps> = ({\n isOpen,\n onClose,\n ...props\n}) => {\n return (\n <Dialog open={isOpen} onOpenChange={(value) => (value ? undefined : onClose())}>\n <DialogContent className=\"w-full max-w-2xl max-h-[90vh] overflow-y-auto rounded-md border border-border/70 bg-background/95 p-0 shadow-2xl [&::-webkit-scrollbar]:hidden\">\n <SolanaPaymentView {...props} onClose={onClose} />\n </DialogContent>\n </Dialog>\n )\n}\n","import * as React from 'react'\nimport { cn } from '../lib/utils'\n\nconst Table = React.forwardRef<HTMLTableElement, React.HTMLAttributes<HTMLTableElement>>(\n ({ className, ...props }, ref) => (\n <table\n ref={ref}\n className={cn('w-full caption-bottom text-sm', className)}\n {...props}\n />\n )\n)\nTable.displayName = 'Table'\n\nconst TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <thead ref={ref} className={cn('[&_tr]:border-b', className)} {...props} />\n))\nTableHeader.displayName = 'TableHeader'\n\nconst TableBody = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tbody ref={ref} className={cn('[&_tr:last-child]:border-0', className)} {...props} />\n))\nTableBody.displayName = 'TableBody'\n\nconst TableFooter = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tfoot ref={ref} className={cn('bg-muted/50 font-medium text-muted-foreground', className)} {...props} />\n))\nTableFooter.displayName = 'TableFooter'\n\nconst TableRow = React.forwardRef<\n HTMLTableRowElement,\n React.HTMLAttributes<HTMLTableRowElement>\n>(({ className, ...props }, ref) => (\n <tr ref={ref} className={cn('border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted', className)} {...props} />\n))\nTableRow.displayName = 'TableRow'\n\nconst TableHead = React.forwardRef<HTMLTableCellElement, React.ThHTMLAttributes<HTMLTableCellElement>>(\n ({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n 'h-10 px-2 text-left align-middle text-xs font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',\n className\n )}\n {...props}\n />\n )\n)\nTableHead.displayName = 'TableHead'\n\nconst TableCell = React.forwardRef<HTMLTableCellElement, React.TdHTMLAttributes<HTMLTableCellElement>>(\n ({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn('p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]', className)}\n {...props}\n />\n )\n)\nTableCell.displayName = 'TableCell'\n\nconst TableCaption = React.forwardRef<\n HTMLTableCaptionElement,\n React.HTMLAttributes<HTMLTableCaptionElement>\n>(({ className, ...props }, ref) => (\n <caption ref={ref} className={cn('mt-4 text-sm text-muted-foreground', className)} {...props} />\n))\nTableCaption.displayName = 'TableCaption'\n\nexport { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption }\n","import * as React from 'react'\nimport * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog'\n\nimport { cn } from '../lib/utils'\nimport { buttonVariants } from './button'\n\nconst AlertDialog = AlertDialogPrimitive.Root\nconst AlertDialogTrigger = AlertDialogPrimitive.Trigger\nconst AlertDialogPortal = AlertDialogPrimitive.Portal\n\nconst AlertDialogOverlay = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Overlay\n ref={ref}\n className={cn(\n 'fixed inset-0 z-50 bg-black/80 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0',\n className\n )}\n {...props}\n />\n))\nAlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName\n\nconst AlertDialogContent = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <AlertDialogPortal>\n <div className=\"payments-ui-portal\">\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n ref={ref}\n className={cn(\n 'fixed left-1/2 top-1/2 z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-white/10 bg-[#161b22] text-white p-6 shadow-lg rounded-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n className\n )}\n {...props}\n />\n </div>\n </AlertDialogPortal>\n))\nAlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName\n\nconst AlertDialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('flex flex-col space-y-2 text-center sm:text-left', className)} {...props} />\n)\nAlertDialogHeader.displayName = 'AlertDialogHeader'\n\nconst AlertDialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn('flex flex-col-reverse gap-2 sm:flex-row sm:justify-end sm:gap-2', className)}\n {...props}\n />\n)\nAlertDialogFooter.displayName = 'AlertDialogFooter'\n\nconst AlertDialogTitle = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Title ref={ref} className={cn('text-lg font-semibold text-white', className)} {...props} />\n))\nAlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName\n\nconst AlertDialogDescription = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Description ref={ref} className={cn('text-sm text-white/60', className)} {...props} />\n))\nAlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName\n\nconst AlertDialogAction = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Action>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Action ref={ref} className={cn(buttonVariants(), className)} {...props} />\n))\nAlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName\n\nconst AlertDialogCancel = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Cancel>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Cancel\n ref={ref}\n className={cn(buttonVariants({ variant: 'outline' }), 'mt-2 sm:mt-0', className)}\n {...props}\n />\n))\nAlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName\n\nexport {\n AlertDialog,\n AlertDialogTrigger,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n}\n","import * as React from 'react'\nimport { cn } from '../lib/utils'\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, React.ComponentProps<'textarea'>>(\n ({ className, ...props }, ref) => (\n <textarea\n ref={ref}\n className={cn(\n 'flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n {...props}\n />\n )\n)\nTextarea.displayName = 'Textarea'\n\nexport { Textarea }\n","import { useEffect, useState } from 'react'\nimport { Ban, TriangleAlert } from 'lucide-react'\nimport { Button } from '../../ui/button'\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from '../../ui/alert-dialog'\nimport { Label } from '../../ui/label'\nimport { Textarea } from '../../ui/textarea'\nimport { cn } from '../../lib/utils'\nimport type { NotificationHandler, NotificationPayload } from '../../types'\nimport { usePaymentContext } from '../../context/PaymentContext'\n\nexport interface CancelMembershipDialogTranslations {\n buttonLabel?: string\n title?: string\n description?: string\n consequence1?: string\n consequence2?: string\n consequence3?: string\n reasonLabel?: string\n reasonPlaceholder?: string\n reasonError?: string\n reasonHint?: string\n keepMembership?: string\n confirmCancellation?: string\n cancelling?: string\n membershipCancelled?: string\n cancellationSuccess?: string\n cancellationFailed?: string\n}\n\nexport interface CancelMembershipDialogProps {\n minReasonLength?: number\n onCancelled?: () => void\n onNotify?: NotificationHandler\n translations?: CancelMembershipDialogTranslations\n}\n\nconst notifyDefault = (payload: NotificationPayload) => {\n const level = payload.status === 'destructive' ? 'error' : 'info'\n console[level === 'error' ? 'error' : 'log']('[payments-ui] cancellation', payload)\n}\n\nconst defaultTranslations: Required<CancelMembershipDialogTranslations> = {\n buttonLabel: 'Cancel Membership',\n title: 'Confirm Membership Cancellation',\n description: 'You are about to cancel your membership. Please review the consequences:',\n consequence1: 'You will immediately lose access to premium features upon confirmation.',\n consequence2: 'Your benefits remain active until the end of the billing cycle.',\n consequence3: 'Your account will revert to the free plan afterwards.',\n reasonLabel: 'Please provide a reason for cancellation (required):',\n reasonPlaceholder: 'Your feedback helps us improve...',\n reasonError: 'Reason must be at least {min} characters long.',\n reasonHint: 'Minimum {min} characters required.',\n keepMembership: 'Keep Membership',\n confirmCancellation: 'Confirm Cancellation',\n cancelling: 'Cancelling...',\n membershipCancelled: 'Membership cancelled',\n cancellationSuccess: 'Your subscription has been cancelled successfully.',\n cancellationFailed: 'Cancellation failed',\n}\n\nexport const CancelMembershipDialog: React.FC<CancelMembershipDialogProps> = ({\n minReasonLength = 15,\n onCancelled,\n onNotify,\n translations: customTranslations,\n}) => {\n const { client } = usePaymentContext()\n const notify = onNotify ?? notifyDefault\n const t = { ...defaultTranslations, ...customTranslations }\n\n const [cancelReason, setCancelReason] = useState('')\n const [isOpen, setIsOpen] = useState(false)\n const [isReasonValid, setIsReasonValid] = useState(false)\n const [hasInteracted, setHasInteracted] = useState(false)\n const [isSubmitting, setIsSubmitting] = useState(false)\n\n useEffect(() => {\n const trimmed = cancelReason.trim()\n setIsReasonValid(trimmed.length >= minReasonLength)\n }, [cancelReason, minReasonLength])\n\n const handleOpenChange = (open: boolean) => {\n setIsOpen(open)\n if (!open) {\n setCancelReason('')\n setIsReasonValid(false)\n setHasInteracted(false)\n setIsSubmitting(false)\n }\n }\n\n const handleReasonChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setCancelReason(e.target.value)\n if (!hasInteracted) {\n setHasInteracted(true)\n }\n }\n\n const handleConfirm = async () => {\n if (!isReasonValid) {\n setHasInteracted(true)\n return\n }\n\n setIsSubmitting(true)\n try {\n await client.cancelSubscription(cancelReason.trim())\n notify({\n title: t.membershipCancelled,\n description: t.cancellationSuccess,\n status: 'success',\n })\n onCancelled?.()\n handleOpenChange(false)\n } catch (error) {\n const message =\n error instanceof Error ? error.message : 'Unable to cancel membership'\n notify({ title: t.cancellationFailed, description: message, status: 'destructive' })\n } finally {\n setIsSubmitting(false)\n }\n }\n\n const showError = hasInteracted && !isReasonValid\n\n return (\n <AlertDialog open={isOpen} onOpenChange={handleOpenChange}>\n <AlertDialogTrigger asChild>\n <Button variant=\"outline\" className=\"border-destructive/50 text-destructive\">\n <Ban className=\"mr-2 h-4 w-4\" /> {t.buttonLabel}\n </Button>\n </AlertDialogTrigger>\n\n <AlertDialogContent className=\"max-h-[90vh] overflow-y-auto rounded-md border border-border bg-background\">\n <AlertDialogHeader>\n <AlertDialogTitle className=\"flex items-center gap-2 text-lg font-semibold\">\n <TriangleAlert className=\"h-5 w-5 text-destructive\" /> {t.title}\n </AlertDialogTitle>\n <AlertDialogDescription className=\"mt-3 space-y-3 text-muted-foreground\">\n <p>{t.description}</p>\n <ul className=\"list-disc space-y-1 pl-5 text-sm\">\n <li>{t.consequence1}</li>\n <li>{t.consequence2}</li>\n <li>{t.consequence3}</li>\n </ul>\n </AlertDialogDescription>\n </AlertDialogHeader>\n\n <div className=\"my-4 space-y-2 py-2\">\n <Label htmlFor=\"cancelReason\" className=\"text-sm font-medium\">\n {t.reasonLabel}\n </Label>\n <Textarea\n id=\"cancelReason\"\n value={cancelReason}\n onChange={handleReasonChange}\n placeholder={t.reasonPlaceholder}\n className={cn(\n 'w-full resize-none border-border bg-background',\n showError && 'border-destructive'\n )}\n rows={4}\n aria-describedby=\"reason-hint\"\n aria-invalid={showError}\n />\n <p\n id=\"reason-hint\"\n className={`text-xs ${showError ? 'text-destructive' : 'text-muted-foreground'}`}\n >\n {showError\n ? t.reasonError.replace('{min}', String(minReasonLength))\n : t.reasonHint.replace('{min}', String(minReasonLength))}\n </p>\n </div>\n\n <AlertDialogFooter className=\"mt-6 gap-2\">\n <AlertDialogCancel asChild>\n <Button variant=\"outline\" className=\"border-border text-muted-foreground\">\n {t.keepMembership}\n </Button>\n </AlertDialogCancel>\n <AlertDialogAction asChild>\n <Button\n className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n onClick={handleConfirm}\n disabled={!isReasonValid || isSubmitting}\n >\n {isSubmitting ? t.cancelling : t.confirmCancellation}\n </Button>\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n )\n}\n","import { useEffect, useMemo, useRef, useState } from 'react'\nimport { useInfiniteQuery, type InfiniteData } from '@tanstack/react-query'\nimport { ChevronDown } from 'lucide-react'\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '../../ui/table'\nimport { Card, CardContent, CardDescription, CardTitle } from '../../ui/card'\nimport { Badge } from '../../ui/badge'\nimport { cn } from '../../lib/utils'\nimport { usePaymentContext } from '../../context/PaymentContext'\nimport type { NotificationHandler, NotificationPayload, PaginatedPayments } from '../../types'\nimport { CancelMembershipDialog } from './CancelMembershipDialog'\n\nexport interface BillingHistoryTranslations {\n title?: string\n description?: string\n reviewActivity?: string\n loading?: string\n error?: string\n loadingMore?: string\n reference?: string\n date?: string\n amount?: string\n processor?: string\n status?: string\n}\n\nexport interface BillingHistoryProps {\n pageSize?: number\n initialPage?: number\n enableCancel?: boolean\n onNotify?: NotificationHandler\n translations?: BillingHistoryTranslations\n}\n\nconst notifyDefault = (payload: NotificationPayload) => {\n const level = payload.status === 'destructive' ? 'error' : 'info'\n console[level === 'error' ? 'error' : 'log']('[payments-ui] billing', payload)\n}\n\nconst defaultTranslations: Required<BillingHistoryTranslations> = {\n title: 'Transaction History',\n description: 'Record of billing history',\n reviewActivity: 'Review your account activity below',\n loading: 'Loading...',\n error: 'Error loading billing history.',\n loadingMore: 'Loading more...',\n reference: 'Reference',\n date: 'Date',\n amount: 'Amount',\n processor: 'Processor',\n status: 'Status',\n}\n\nexport const BillingHistory: React.FC<BillingHistoryProps> = ({\n pageSize = 10,\n initialPage = 1,\n enableCancel = true,\n onNotify,\n translations: customTranslations,\n}) => {\n const { client } = usePaymentContext()\n const notify = onNotify ?? notifyDefault\n const t = { ...defaultTranslations, ...customTranslations }\n const [isExpanded, setIsExpanded] = useState(false)\n const observerRef = useRef<IntersectionObserver | null>(null)\n const loadMoreRef = useRef<HTMLDivElement>(null)\n\n const historyQuery = useInfiniteQuery<PaginatedPayments, Error, PaginatedPayments, ['payments-ui', 'billing-history', number], number>({\n queryKey: ['payments-ui', 'billing-history', pageSize],\n queryFn: async ({ pageParam = initialPage }) => {\n const offset = (pageParam - 1) * pageSize\n return client.getPaymentHistory({ limit: pageSize, offset, type: undefined }).then(\n (response) => ({\n data: response.data,\n total_items: response.total,\n limit: response.limit,\n offset: response.offset,\n page: response.limit > 0 ? Math.floor(response.offset / response.limit) + 1 : 1,\n page_size: response.limit,\n total_pages:\n response.limit > 0 ? Math.ceil(response.total / response.limit) : undefined,\n })\n )\n },\n initialPageParam: initialPage,\n getNextPageParam: (lastPage) => {\n const nextOffset = (lastPage.offset ?? 0) + lastPage.data.length\n if (lastPage.total_items <= nextOffset) {\n return undefined\n }\n return lastPage.page ? lastPage.page + 1 : initialPage + 1\n },\n staleTime: 5 * 60 * 1000,\n })\n\n useEffect(() => {\n if (!loadMoreRef.current || !isExpanded) return\n\n observerRef.current = new IntersectionObserver((entries) => {\n const [entry] = entries\n if (entry?.isIntersecting && historyQuery.hasNextPage && !historyQuery.isFetchingNextPage) {\n historyQuery.fetchNextPage().catch(() => {\n notify({ title: 'Failed to load more history', status: 'destructive' })\n })\n }\n })\n\n observerRef.current.observe(loadMoreRef.current)\n\n return () => {\n observerRef.current?.disconnect()\n }\n }, [historyQuery, isExpanded, notify])\n\n const payments = useMemo<PaginatedPayments[]>(() => {\n const data = historyQuery.data as InfiniteData<PaginatedPayments> | undefined\n return data?.pages ?? []\n }, [historyQuery.data])\n\n const formatDate = (value: string) =>\n new Date(value).toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n })\n\n const formatAmount = (amount: number, currency: string) => {\n try {\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency,\n }).format(amount)\n } catch {\n return `${amount.toFixed(2)} ${currency}`\n }\n }\n\n return (\n <Card className=\"border-0 bg-background/5 shadow-lg\">\n <div className=\"p-4 sm:p-6\">\n <div className=\"flex cursor-pointer items-center justify-between\" onClick={() => setIsExpanded((prev) => !prev)}>\n <div>\n <CardTitle className=\"text-xl font-semibold\">{t.title}</CardTitle>\n <CardDescription>{t.description}</CardDescription>\n </div>\n <ChevronDown className={cn('h-5 w-5 text-muted-foreground transition-transform', isExpanded && 'rotate-180')} />\n </div>\n\n <div\n className={cn(\n 'overflow-hidden transition-all duration-300',\n isExpanded ? 'mt-4 max-h-[1000px] opacity-100' : 'max-h-0 opacity-0'\n )}\n >\n <CardContent className=\"p-0 pt-4\">\n <div className=\"space-y-4\">\n <div className=\"flex flex-col gap-4 lg:flex-row lg:items-center lg:justify-between\">\n <p className=\"text-sm text-muted-foreground\">{t.reviewActivity}</p>\n {enableCancel && <CancelMembershipDialog onNotify={notify} />}\n </div>\n\n <div className=\"max-h-[300px] overflow-y-auto rounded-lg border border-border/70\">\n <div className=\"overflow-x-auto\">\n {historyQuery.isLoading ? (\n <p className=\"p-4 text-center text-sm text-muted-foreground\">{t.loading}</p>\n ) : historyQuery.isError ? (\n <p className=\"p-4 text-center text-sm text-destructive\">{t.error}</p>\n ) : (\n <Table>\n <TableHeader>\n <TableRow className=\"border-border/60\">\n <TableHead>{t.reference}</TableHead>\n <TableHead>{t.date}</TableHead>\n <TableHead>{t.amount}</TableHead>\n <TableHead>{t.processor}</TableHead>\n <TableHead>{t.status}</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {payments.map((page) =>\n page.data.map((payment) => (\n <TableRow key={payment.id} className=\"border-border/40\">\n <TableCell className=\"font-mono text-sm\">\n {payment.id.slice(0, 7).toUpperCase()}\n </TableCell>\n <TableCell>{formatDate(payment.purchased_at)}</TableCell>\n <TableCell>{formatAmount(payment.amount, payment.currency)}</TableCell>\n <TableCell className=\"capitalize\">{payment.processor}</TableCell>\n <TableCell>\n <Badge className=\"bg-emerald-500/10 text-emerald-400\">\n {(payment.status || 'completed').toLowerCase()}\n </Badge>\n </TableCell>\n </TableRow>\n ))\n )}\n </TableBody>\n </Table>\n )}\n </div>\n </div>\n\n <div ref={loadMoreRef} className=\"h-10 w-full\">\n {historyQuery.isFetchingNextPage && (\n <p className=\"text-center text-sm text-muted-foreground\">{t.loadingMore}</p>\n )}\n </div>\n </div>\n </CardContent>\n </div>\n </div>\n </Card>\n )\n}\n","import { useEffect, useMemo, useState } from 'react'\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'\nimport { CreditCard, Loader2, Trash2, WalletCards } from 'lucide-react'\nimport { Button } from '../../ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from '../../ui/card'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from '../../ui/dialog'\nimport { Badge } from '../../ui/badge'\nimport { CardDetailsForm } from '../CardDetailsForm'\nimport type {\n BillingDetails,\n CreatePaymentMethodPayload,\n NotificationHandler,\n NotificationPayload,\n PaginatedPaymentMethods,\n PaymentMethod,\n} from '../../types'\nimport { usePaymentContext } from '../../context/PaymentContext'\n\nexport interface PaymentMethodsSectionTranslations {\n title?: string\n description?: string\n addCard?: string\n loadingCards?: string\n noPaymentMethods?: string\n addedOn?: string\n active?: string\n inactive?: string\n replaceCard?: string\n makeDefault?: string\n defaultMethod?: string\n remove?: string\n addNewCard?: string\n addNewCardDescription?: string\n saveCard?: string\n replaceCardTitle?: string\n replaceCardDescription?: string\n cardAddedSuccess?: string\n unableToAddCard?: string\n cardRemoved?: string\n unableToRemoveCard?: string\n cardUpdated?: string\n unableToReplaceCard?: string\n defaultPaymentMethodUpdated?: string\n unableToSetDefault?: string\n}\n\nexport interface PaymentMethodsSectionProps {\n isAuthenticated?: boolean\n userEmail?: string | null\n provider?: string\n defaultCountry?: string\n collectPrefix?: string\n onNotify?: NotificationHandler\n translations?: PaymentMethodsSectionTranslations\n}\n\nconst formatCardLabel = (method: PaymentMethod): string => {\n const brand = method.card_type ? method.card_type.toUpperCase() : 'CARD'\n const lastFour = method.last_four ? `•••• ${method.last_four}` : ''\n return `${brand} ${lastFour}`.trim()\n}\n\nconst notifyDefault = (payload: NotificationPayload) => {\n const level = payload.status === 'destructive' ? 'error' : 'info'\n console[level === 'error' ? 'error' : 'log']('[payments-ui] notification', payload)\n}\n\nconst defaultTranslations: Required<PaymentMethodsSectionTranslations> = {\n title: 'Payment Methods',\n description: 'Manage your saved billing cards',\n addCard: 'Add card',\n loadingCards: 'Loading cards...',\n noPaymentMethods: 'No saved payment methods yet.',\n addedOn: 'Added on',\n active: 'Active',\n inactive: 'Inactive',\n replaceCard: 'Replace card',\n makeDefault: 'Make default',\n defaultMethod: 'Default method',\n remove: 'Remove',\n addNewCard: 'Add a new card',\n addNewCardDescription: 'Your card details are tokenized securely via our payment provider.',\n saveCard: 'Save card',\n replaceCardTitle: 'Replace card',\n replaceCardDescription: 'Update this card with new billing details.',\n cardAddedSuccess: 'Card added successfully',\n unableToAddCard: 'Unable to add card',\n cardRemoved: 'Card removed',\n unableToRemoveCard: 'Unable to remove card',\n cardUpdated: 'Card updated',\n unableToReplaceCard: 'Unable to replace card',\n defaultPaymentMethodUpdated: 'Default payment method updated',\n unableToSetDefault: 'Unable to set default payment method',\n}\n\nexport const PaymentMethodsSection: React.FC<PaymentMethodsSectionProps> = ({\n isAuthenticated = true,\n userEmail,\n provider = 'mobius',\n defaultCountry = 'US',\n collectPrefix = 'account-card',\n onNotify,\n translations: customTranslations,\n}) => {\n\tconst { client } = usePaymentContext()\n\tconst queryClient = useQueryClient()\n \n // Simple service wrapper for payment methods\n const paymentMethods = {\n list: (params: { pageSize: number }) =>\n client.listPaymentMethods({ limit: params.pageSize }),\n create: (payload: CreatePaymentMethodPayload) => client.createPaymentMethod(payload),\n update: (id: string, payload: CreatePaymentMethodPayload) => \n client.updatePaymentMethod(id, payload),\n remove: (id: string) => client.deletePaymentMethod(id),\n activate: (id: string) => client.activatePaymentMethod(id),\n }\n \n\t\n\tconst [isModalOpen, setIsModalOpen] = useState(false)\n\tconst [deletingId, setDeletingId] = useState<string | null>(null)\n\tconst [methodBeingReplaced, setMethodBeingReplaced] = useState<PaymentMethod | null>(null)\n const notify = onNotify ?? notifyDefault\n const t = { ...defaultTranslations, ...customTranslations }\n\n const queryKey = ['payments-ui', 'payment-methods']\n\n const paymentQuery = useQuery<PaginatedPaymentMethods>({\n queryKey,\n queryFn: () => paymentMethods.list({ pageSize: 50 }),\n enabled: isAuthenticated,\n staleTime: 30_000,\n })\n\n const createMutation = useMutation<PaymentMethod, Error, CreatePaymentMethodPayload>({\n mutationFn: (payload) => paymentMethods.create(payload),\n onSuccess: () => {\n notify({ title: t.cardAddedSuccess, status: 'success' })\n setIsModalOpen(false)\n void queryClient.invalidateQueries({ queryKey })\n },\n onError: (error) => {\n notify({\n title: t.unableToAddCard,\n description: error.message,\n status: 'destructive',\n })\n },\n })\n\n\tconst deleteMutation = useMutation<void, Error, string>({\n\t\tmutationFn: (id) => paymentMethods.remove(id),\n\t\tonMutate: (id) => setDeletingId(id),\n\t\tonSuccess: () => {\n\t\t\tnotify({ title: t.cardRemoved, status: 'success' })\n\t\t\tvoid queryClient.invalidateQueries({ queryKey })\n\t\t},\n\t\tonError: (error) => {\n\t\t\tnotify({\n\t\t\t\ttitle: t.unableToRemoveCard,\n\t\t\t\tdescription: error.message,\n\t\t\t\tstatus: 'destructive',\n\t\t\t})\n\t\t},\n\t\tonSettled: () => setDeletingId(null),\n\t})\n\n\tconst replaceMutation = useMutation<PaymentMethod, Error, { id: string; payload: CreatePaymentMethodPayload }>({\n\t\tmutationFn: ({ id, payload }) => paymentMethods.update(id, payload),\n\t\tonSuccess: () => {\n\t\t\tnotify({ title: t.cardUpdated, status: 'success' })\n\t\t\tsetMethodBeingReplaced(null)\n\t\t\tvoid queryClient.invalidateQueries({ queryKey })\n\t\t},\n\t\tonError: (error) => {\n\t\t\tnotify({\n\t\t\t\ttitle: t.unableToReplaceCard,\n\t\t\t\tdescription: error.message,\n\t\t\t\tstatus: 'destructive',\n\t\t\t})\n\t\t},\n\t})\n\n\tconst activateMutation = useMutation<void, Error, string>({\n\t\tmutationFn: (id) => paymentMethods.activate(id),\n\t\tonSuccess: () => {\n\t\t\tnotify({ title: t.defaultPaymentMethodUpdated, status: 'success' })\n\t\t\tvoid queryClient.invalidateQueries({ queryKey })\n\t\t},\n\t\tonError: (error) => {\n\t\t\tnotify({\n\t\t\t\ttitle: t.unableToSetDefault,\n\t\t\t\tdescription: error.message,\n\t\t\t\tstatus: 'destructive',\n\t\t\t})\n\t\t},\n\t})\n\n useEffect(() => {\n if (!isModalOpen) {\n createMutation.reset()\n }\n }, [createMutation, isModalOpen])\n\n const payments = useMemo(() => paymentQuery.data?.data ?? [], [paymentQuery.data])\n const loading = paymentQuery.isLoading || paymentQuery.isFetching\n\n const buildPayload = (token: string, billing: BillingDetails): CreatePaymentMethodPayload => ({\n payment_token: token,\n first_name: billing.firstName,\n last_name: billing.lastName,\n address1: billing.address1,\n address2: billing.address2,\n city: billing.city,\n state: billing.stateRegion,\n zip: billing.postalCode,\n country: billing.country,\n email: billing.email,\n provider: billing.provider,\n })\n\n const handleCardTokenize = (token: string, billing: BillingDetails) => {\n createMutation.mutate(buildPayload(token, billing))\n }\n\n const handleReplaceTokenize = (token: string, billing: BillingDetails) => {\n if (!methodBeingReplaced) return\n replaceMutation.mutate({ id: methodBeingReplaced.id, payload: buildPayload(token, billing) })\n }\n\n return (\n <Card>\n <CardHeader className=\"flex flex-col gap-4 md:flex-row md:items-center md:justify-between\">\n <div>\n <CardTitle className=\"flex items-center gap-2\">\n <WalletCards className=\"h-5 w-5 text-emerald-400\" /> {t.title}\n </CardTitle>\n <CardDescription>{t.description}</CardDescription>\n </div>\n <Button onClick={() => setIsModalOpen(true)}>\n <CreditCard className=\"mr-2 h-4 w-4\" /> {t.addCard}\n </Button>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {loading ? (\n <div className=\"flex items-center justify-center py-10 text-white/60\">\n <Loader2 className=\"mr-2 h-5 w-5 animate-spin\" /> {t.loadingCards}\n </div>\n ) : payments.length === 0 ? (\n <div className=\"rounded-lg border border-dashed border-white/20 bg-white/5 p-6 text-sm text-white/60\">\n {t.noPaymentMethods}\n </div>\n ) : (\n <div className=\"space-y-3\">\n {payments.map((method) => (\n <div\n key={method.id}\n className=\"rounded-lg border border-white/10 bg-white/5 p-4 shadow-sm\"\n >\n <div className=\"flex flex-col gap-2 md:flex-row md:items-center md:justify-between\">\n <div>\n <h4 className=\"text-base font-medium text-white\">\n {formatCardLabel(method)}\n </h4>\n <p className=\"text-sm text-white/60\">\n {t.addedOn}{' '}\n {method.created_at\n ? new Date(method.created_at).toLocaleDateString()\n : 'unknown date'}\n </p>\n </div>\n <div className=\"flex gap-2\">\n <Badge\n variant={method.is_active ? 'default' : 'secondary'}\n >\n {method.is_active ? t.active : t.inactive}\n </Badge>\n {method.failure_reason && (\n <Badge variant=\"destructive\">{method.failure_reason}</Badge>\n )}\n </div>\n </div>\n <div className=\"mt-3 flex flex-wrap gap-2\">\n <Button\n variant=\"ghost\"\n className=\"text-blue-400\"\n disabled={replaceMutation.isPending && methodBeingReplaced?.id === method.id}\n onClick={() => setMethodBeingReplaced(method)}\n >\n {replaceMutation.isPending && methodBeingReplaced?.id === method.id ? (\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n ) : (\n <CreditCard className=\"mr-2 h-4 w-4\" />\n )}\n {t.replaceCard}\n </Button>\n <Button\n variant=\"outline\"\n disabled={method.is_active || activateMutation.isPending}\n onClick={() => activateMutation.mutate(method.id)}\n >\n {activateMutation.isPending ? (\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n ) : null}\n {method.is_active ? t.defaultMethod : t.makeDefault}\n </Button>\n <Button\n variant=\"ghost\"\n className=\"text-red-400 hover:text-red-300\"\n disabled={deletingId === method.id && deleteMutation.isPending}\n onClick={() => deleteMutation.mutate(method.id)}\n >\n {deletingId === method.id && deleteMutation.isPending ? (\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n ) : (\n <Trash2 className=\"mr-2 h-4 w-4\" />\n )}\n {t.remove}\n </Button>\n </div>\n </div>\n ))}\n </div>\n )}\n </CardContent>\n\n <Dialog open={isModalOpen} onOpenChange={setIsModalOpen}>\n <DialogContent className=\"max-h-[95vh] overflow-y-auto\">\n <DialogHeader>\n <DialogTitle>{t.addNewCard}</DialogTitle>\n <DialogDescription>\n {t.addNewCardDescription}\n </DialogDescription>\n </DialogHeader>\n\n <CardDetailsForm\n visible={isModalOpen}\n collectPrefix={collectPrefix}\n submitting={createMutation.isPending}\n submitLabel={t.saveCard}\n defaultValues={{\n email: userEmail ?? '',\n country: defaultCountry,\n provider,\n }}\n externalError={createMutation.error?.message ?? null}\n onTokenize={handleCardTokenize}\n className=\"rounded-2xl border border-white/10 bg-white/5 p-6\"\n />\n </DialogContent>\n </Dialog>\n\n <Dialog open={Boolean(methodBeingReplaced)} onOpenChange={(open) => !open && setMethodBeingReplaced(null)}>\n <DialogContent className=\"max-h-[95vh] overflow-y-auto\">\n <DialogHeader>\n <DialogTitle>{t.replaceCardTitle}</DialogTitle>\n <DialogDescription>{t.replaceCardDescription}</DialogDescription>\n </DialogHeader>\n\n {methodBeingReplaced && (\n <CardDetailsForm\n visible\n collectPrefix={`${collectPrefix}-replace-${methodBeingReplaced.id}`}\n submitting={replaceMutation.isPending}\n submitLabel={t.replaceCard}\n defaultValues={{\n email: userEmail ?? '',\n country: defaultCountry,\n provider,\n }}\n externalError={replaceMutation.error?.message ?? null}\n onTokenize={handleReplaceTokenize}\n className=\"rounded-2xl border border-white/10 bg-white/5 p-6\"\n />\n )}\n </DialogContent>\n </Dialog>\n </Card>\n )\n}\n","import * as React from 'react'\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox'\nimport { Check } from 'lucide-react'\nimport { cn } from '../lib/utils'\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n 'peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground',\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n className={cn('flex items-center justify-center text-current')}\n >\n <Check className=\"h-3 w-3\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n))\nCheckbox.displayName = CheckboxPrimitive.Root.displayName\n\nexport { Checkbox }\n","import { useMemo, useState } from 'react'\nimport {\n AlertDialog,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n} from '../../ui/alert-dialog'\nimport { Button } from '../../ui/button'\nimport { Input } from '../../ui/input'\nimport { Checkbox } from '../../ui/checkbox'\nimport { Label } from '../../ui/label'\nimport { Shield, CreditCard, Calendar, KeyRound, UserRound } from 'lucide-react'\n\nexport interface WalletDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n}\n\ninterface WalletFormState {\n nameOnCard: string\n cardNumber: string\n expiration: string\n cvv: string\n termsAccepted: boolean\n}\n\ntype WalletValidators = {\n [K in keyof WalletFormState]: (value: WalletFormState[K]) => string | undefined\n}\n\nconst initialState: WalletFormState = {\n nameOnCard: '',\n cardNumber: '',\n expiration: '',\n cvv: '',\n termsAccepted: false,\n}\n\nexport const WalletDialog: React.FC<WalletDialogProps> = ({ open, onOpenChange }) => {\n const [form, setForm] = useState<WalletFormState>(initialState)\n const [errors, setErrors] = useState<Partial<Record<keyof WalletFormState, string>>>({})\n\n const validators = useMemo<WalletValidators>(\n () => ({\n nameOnCard: (value) => (!value ? 'Name is required' : undefined),\n cardNumber: (value) =>\n /^\\d{16}$/.test(value)\n ? undefined\n : 'Card number must be 16 digits',\n expiration: (value) =>\n /^(0[1-9]|1[0-2])\\/([2-9]\\d)$/.test(value)\n ? undefined\n : 'Must be in MM/YY format',\n cvv: (value) => (/^\\d{3,4}$/.test(value) ? undefined : 'CVV must be 3 or 4 digits'),\n termsAccepted: (value) => (value ? undefined : 'You must accept the terms'),\n }),\n []\n )\n\n const updateField = <K extends keyof WalletFormState>(field: K, value: WalletFormState[K]) => {\n setForm((prev) => ({ ...prev, [field]: value } as WalletFormState))\n setErrors((prev) => ({ ...prev, [field]: undefined }))\n }\n\n const validate = () => {\n const next: Partial<Record<keyof WalletFormState, string>> = {}\n ;(Object.keys(validators) as Array<keyof WalletFormState>).forEach((key) => {\n const validator = validators[key] as (value: WalletFormState[keyof WalletFormState]) => string | undefined\n const message = validator?.(form[key])\n if (message) {\n next[key] = message\n }\n })\n setErrors(next)\n return Object.keys(next).length === 0\n }\n\n const handleSubmit = (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault()\n if (!validate()) return\n console.log('[payments-ui] wallet dialog submit', form)\n onOpenChange(false)\n setForm(initialState)\n }\n\n return (\n <AlertDialog open={open} onOpenChange={onOpenChange}>\n <AlertDialogContent className=\"max-h-[95vh] max-w-lg overflow-y-auto rounded-2xl border border-border bg-background\">\n <AlertDialogHeader className=\"border-b border-border/60 pb-4\">\n <div className=\"flex items-center justify-center gap-2\">\n <Shield className=\"h-5 w-5 text-primary\" />\n <AlertDialogTitle className=\"text-center text-base font-semibold uppercase tracking-wide\">\n Secure Payment via Mobius Pay\n </AlertDialogTitle>\n </div>\n <p className=\"mt-2 text-center text-sm text-muted-foreground\">\n $23 USD per month, cancel at any time.\n </p>\n </AlertDialogHeader>\n\n <form onSubmit={handleSubmit} className=\"space-y-5 px-2 py-4 sm:px-4\">\n <div className=\"space-y-4\">\n <div>\n <Label className=\"mb-1 block text-sm text-muted-foreground\">Name on Card</Label>\n <div className=\"relative\">\n <span className=\"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground\">\n <UserRound className=\"h-4 w-4\" />\n </span>\n <Input value={form.nameOnCard} onChange={(e) => updateField('nameOnCard', e.target.value)} className=\"pl-10\" />\n </div>\n {errors.nameOnCard && <p className=\"mt-1 text-xs text-destructive\">{errors.nameOnCard}</p>}\n </div>\n\n <div>\n <Label className=\"mb-1 block text-sm text-muted-foreground\">Credit Card Number</Label>\n <div className=\"relative\">\n <span className=\"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground\">\n <CreditCard className=\"h-4 w-4\" />\n </span>\n <Input value={form.cardNumber} onChange={(e) => updateField('cardNumber', e.target.value)} className=\"pl-10\" />\n </div>\n {errors.cardNumber && <p className=\"mt-1 text-xs text-destructive\">{errors.cardNumber}</p>}\n </div>\n\n <div className=\"flex gap-4\">\n <div className=\"flex-1\">\n <Label className=\"mb-1 block text-sm text-muted-foreground\">Expiration</Label>\n <div className=\"relative\">\n <span className=\"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground\">\n <Calendar className=\"h-4 w-4\" />\n </span>\n <Input value={form.expiration} onChange={(e) => updateField('expiration', e.target.value)} className=\"pl-10\" placeholder=\"MM/YY\" />\n </div>\n {errors.expiration && <p className=\"mt-1 text-xs text-destructive\">{errors.expiration}</p>}\n </div>\n <div className=\"flex-1\">\n <Label className=\"mb-1 block text-sm text-muted-foreground\">CVV</Label>\n <div className=\"relative\">\n <span className=\"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground\">\n <KeyRound className=\"h-4 w-4\" />\n </span>\n <Input value={form.cvv} onChange={(e) => updateField('cvv', e.target.value)} className=\"pl-10\" />\n </div>\n {errors.cvv && <p className=\"mt-1 text-xs text-destructive\">{errors.cvv}</p>}\n </div>\n </div>\n </div>\n\n <div className=\"flex items-start gap-3 rounded-md border border-border/70 bg-muted/10 p-4\">\n <Checkbox id=\"terms-agree\" checked={form.termsAccepted} onCheckedChange={(checked) => updateField('termsAccepted', Boolean(checked))} />\n <Label htmlFor=\"terms-agree\" className=\"text-sm text-muted-foreground\">\n By completing this order, I confirm that I am 18 years or older and agree to your privacy policy and terms.\n </Label>\n </div>\n {errors.termsAccepted && <p className=\"text-xs text-destructive\">{errors.termsAccepted}</p>}\n\n <AlertDialogFooter className=\"flex gap-2\">\n <Button type=\"submit\" className=\"flex-1\">\n Subscribe\n </Button>\n <AlertDialogCancel asChild>\n <Button variant=\"outline\" className=\"flex-1\">\n Close\n </Button>\n </AlertDialogCancel>\n </AlertDialogFooter>\n </form>\n </AlertDialogContent>\n </AlertDialog>\n )\n}\n","import { useState, useEffect, useCallback, useMemo } from 'react'\nimport { useWallet, useConnection } from '@solana/wallet-adapter-react'\nimport { PublicKey } from '@solana/web3.js'\nimport { getAssociatedTokenAddress, getAccount } from '@solana/spl-token'\nimport { TokenBalance, TokenInfo } from '../types'\n\nexport const useTokenBalance = (tokens: TokenInfo[]) => {\n const { publicKey } = useWallet()\n const { connection } = useConnection()\n\n const [balances, setBalances] = useState<TokenBalance[]>([])\n const [isLoading, setIsLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n\n // Fetch balance for a specific token\n const fetchTokenBalance = useCallback(\n async (\n token: TokenInfo,\n walletAddress: PublicKey\n ): Promise<TokenBalance> => {\n try {\n const mintPublicKey = new PublicKey(token.mint)\n\n // Get the associated token account address\n const associatedTokenAddress = await getAssociatedTokenAddress(\n mintPublicKey,\n walletAddress\n )\n\n try {\n // Get the token account info\n const tokenAccount = await getAccount(\n connection,\n associatedTokenAddress\n )\n\n const balance = Number(tokenAccount.amount)\n const uiAmount = balance / Math.pow(10, token.decimals)\n\n return {\n token,\n balance,\n uiAmount,\n hasBalance: balance > 0,\n }\n } catch (accountError) {\n // Account doesn't exist, balance is 0\n return {\n token,\n balance: 0,\n uiAmount: 0,\n hasBalance: false,\n }\n }\n } catch (error) {\n console.error(`Failed to fetch balance for ${token.symbol}:`, error)\n return {\n token,\n balance: 0,\n uiAmount: 0,\n hasBalance: false,\n }\n }\n },\n [connection]\n )\n\n // Memoize token serialization to prevent unnecessary refetches\n const tokensKey = useMemo(() => tokens.map((t) => t.mint).join(','), [tokens])\n\n // Auto-fetch balances when wallet or tokens change\n useEffect(() => {\n if (!publicKey || tokens.length === 0) {\n setBalances([])\n return\n }\n\n setIsLoading(true)\n setError(null)\n\n const fetchAllBalances = async () => {\n try {\n const balancePromises = tokens.map((token) =>\n fetchTokenBalance(token, publicKey)\n )\n const tokenBalances = await Promise.all(balancePromises)\n\n setBalances(tokenBalances)\n } catch (error) {\n const errorMessage =\n error instanceof Error\n ? error.message\n : 'Failed to fetch token balances'\n setError(errorMessage)\n console.error('Failed to fetch token balances:', error)\n } finally {\n setIsLoading(false)\n }\n }\n\n fetchAllBalances()\n }, [publicKey, tokensKey, fetchTokenBalance]) // Use stable dependencies\n\n // Get balance for a specific token\n const getTokenBalance = useCallback(\n (tokenSymbol: string): TokenBalance | undefined => {\n return balances.find((balance) => balance.token.symbol === tokenSymbol)\n },\n [balances]\n )\n\n // Check if user has sufficient balance for a payment\n const hasSufficientBalance = useCallback(\n (tokenSymbol: string, requiredAmount: number): boolean => {\n const balance = getTokenBalance(tokenSymbol)\n return balance ? balance.uiAmount >= requiredAmount : false\n },\n [getTokenBalance]\n )\n\n // Get formatted balance string\n const getFormattedBalance = useCallback(\n (tokenSymbol: string): string => {\n const balance = getTokenBalance(tokenSymbol)\n if (!balance) return '0.00'\n\n // Format with appropriate decimal places\n if (balance.uiAmount < 0.01) {\n return balance.uiAmount.toFixed(6)\n } else if (balance.uiAmount < 1) {\n return balance.uiAmount.toFixed(4)\n } else {\n return balance.uiAmount.toFixed(2)\n }\n },\n [getTokenBalance]\n )\n\n // Refresh balances manually\n const refreshBalances = useCallback(async () => {\n if (!publicKey || tokens.length === 0) {\n setBalances([])\n return\n }\n\n setIsLoading(true)\n setError(null)\n\n try {\n const balancePromises = tokens.map((token) =>\n fetchTokenBalance(token, publicKey)\n )\n const tokenBalances = await Promise.all(balancePromises)\n\n setBalances(tokenBalances)\n } catch (error) {\n const errorMessage =\n error instanceof Error\n ? error.message\n : 'Failed to fetch token balances'\n setError(errorMessage)\n console.error('Failed to fetch token balances:', error)\n } finally {\n setIsLoading(false)\n }\n }, [publicKey, tokens, fetchTokenBalance])\n\n // Get total USD value of balances (would need price data)\n const getTotalValue = useCallback(\n (priceData?: Record<string, number>): number => {\n if (!priceData) return 0\n\n return balances.reduce((total, balance) => {\n const price = priceData[balance.token.symbol] || 0\n return total + balance.uiAmount * price\n }, 0)\n },\n [balances]\n )\n\n // Sort balances by amount (highest first)\n const sortedBalances = [...balances].sort((a, b) => b.uiAmount - a.uiAmount)\n\n // Get balances with positive amounts only\n const positiveBalances = balances.filter((balance) => balance.hasBalance)\n\n return {\n balances: sortedBalances,\n positiveBalances,\n isLoading,\n error,\n refreshBalances,\n getTokenBalance,\n hasSufficientBalance,\n getFormattedBalance,\n getTotalValue,\n hasAnyBalance: positiveBalances.length > 0,\n isConnected: !!publicKey,\n }\n}\n","import { useState, useEffect, useCallback, useRef } from 'react'\nimport { useConnection } from '@solana/wallet-adapter-react'\nimport { TransactionStatus, PaymentStatusResponse } from '../types'\nimport { usePaymentContext } from '../context/PaymentContext'\n\ninterface PaymentStatusHookOptions {\n transactionId?: string\n purchaseId?: string\n onConfirmed?: () => void\n onFailed?: (error: string) => void\n maxRetries?: number\n retryInterval?: number // milliseconds\n}\n\nexport const usePaymentStatus = (options: PaymentStatusHookOptions = {}) => {\n const { connection } = useConnection()\n const { client } = usePaymentContext()\n const {\n transactionId,\n purchaseId,\n onConfirmed,\n onFailed,\n maxRetries = 30, // 5 minutes with 10s intervals\n retryInterval = 10000, // 10 seconds\n } = options\n\n const [status, setStatus] = useState<TransactionStatus | null>(null)\n const [paymentStatus, setPaymentStatus] =\n useState<PaymentStatusResponse | null>(null)\n const [isLoading, setIsLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [retryCount, setRetryCount] = useState(0)\n\n const intervalRef = useRef<NodeJS.Timeout | null>(null)\n const isMonitoringRef = useRef(false)\n\n // Clear interval on unmount\n useEffect(() => {\n return () => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current)\n }\n }\n }, [])\n\n // Check transaction status on Solana blockchain\n const checkTransactionStatus = useCallback(\n async (signature: string): Promise<TransactionStatus> => {\n try {\n const statusResponse = await connection.getSignatureStatus(signature, {\n searchTransactionHistory: true,\n })\n\n if (statusResponse.value === null) {\n return {\n signature,\n confirmationStatus: 'processed',\n confirmations: 0,\n error: 'Transaction not found',\n }\n }\n\n const { confirmationStatus, confirmations, slot, err } =\n statusResponse.value\n\n // Get block time if we have a slot\n let blockTime: number | undefined\n if (slot) {\n try {\n blockTime = (await connection.getBlockTime(slot)) || undefined\n } catch (error) {\n // Block time not available\n }\n }\n\n return {\n signature,\n confirmationStatus: err\n ? 'failed'\n : confirmationStatus || 'processed',\n confirmations: confirmations || 0,\n slot,\n blockTime,\n error: err ? `Transaction failed: ${err}` : undefined,\n }\n } catch (error) {\n console.error('Failed to check transaction status:', {\n signature,\n error,\n })\n return {\n signature,\n confirmationStatus: 'failed',\n confirmations: 0,\n error:\n error instanceof Error\n ? error.message\n : 'Failed to check transaction status',\n }\n }\n },\n [connection]\n )\n\n // Check payment status from backend\n const checkPaymentStatus = useCallback(\n async (id: string): Promise<PaymentStatusResponse | null> => {\n try {\n return await client.getPaymentStatus(id)\n } catch (error) {\n console.error('Failed to check payment status:', {\n purchaseId: id,\n error,\n })\n return null\n }\n },\n [client]\n )\n\n // Monitor transaction until confirmed or failed\n const startMonitoring = useCallback(async () => {\n if (isMonitoringRef.current || (!transactionId && !purchaseId)) {\n return\n }\n\n isMonitoringRef.current = true\n setIsLoading(true)\n setError(null)\n setRetryCount(0)\n\n const monitor = async () => {\n try {\n let currentStatus: TransactionStatus | null = null\n let currentPaymentStatus: PaymentStatusResponse | null = null\n\n // Check blockchain status if we have a transaction ID\n if (transactionId) {\n currentStatus = await checkTransactionStatus(transactionId)\n setStatus(currentStatus)\n }\n\n // Check backend payment status if we have a purchase ID\n if (purchaseId) {\n currentPaymentStatus = await checkPaymentStatus(purchaseId)\n setPaymentStatus(currentPaymentStatus)\n }\n\n // Determine if we should stop monitoring\n const isBlockchainConfirmed =\n currentStatus?.confirmationStatus === 'finalized' ||\n currentStatus?.confirmationStatus === 'confirmed'\n const isBackendConfirmed = currentPaymentStatus?.status === 'confirmed'\n const isBlockchainFailed =\n currentStatus?.confirmationStatus === 'failed' || currentStatus?.error\n const isBackendFailed = currentPaymentStatus?.status === 'failed'\n\n if (isBlockchainConfirmed || isBackendConfirmed) {\n // Payment confirmed\n if (intervalRef.current) {\n clearInterval(intervalRef.current)\n }\n isMonitoringRef.current = false\n setIsLoading(false)\n onConfirmed?.()\n return\n }\n\n if (isBlockchainFailed || isBackendFailed) {\n // Payment failed\n if (intervalRef.current) {\n clearInterval(intervalRef.current)\n }\n isMonitoringRef.current = false\n setIsLoading(false)\n const errorMessage = currentStatus?.error || 'Payment failed'\n setError(errorMessage)\n onFailed?.(errorMessage)\n return\n }\n\n // Continue monitoring\n setRetryCount((prev) => prev + 1)\n\n if (retryCount >= maxRetries) {\n // Max retries reached\n if (intervalRef.current) {\n clearInterval(intervalRef.current)\n }\n isMonitoringRef.current = false\n setIsLoading(false)\n const timeoutError =\n 'Payment confirmation timeout - please check your transaction manually'\n setError(timeoutError)\n onFailed?.(timeoutError)\n return\n }\n } catch (error) {\n console.error('Error monitoring payment:', {\n transactionId,\n purchaseId,\n error,\n })\n setRetryCount((prev) => prev + 1)\n\n if (retryCount >= maxRetries) {\n if (intervalRef.current) {\n clearInterval(intervalRef.current)\n }\n isMonitoringRef.current = false\n setIsLoading(false)\n const monitorError = 'Failed to monitor payment status'\n setError(monitorError)\n onFailed?.(monitorError)\n }\n }\n }\n\n // Start monitoring immediately\n await monitor()\n\n // Continue monitoring at intervals\n intervalRef.current = setInterval(monitor, retryInterval)\n }, [\n transactionId,\n purchaseId,\n checkTransactionStatus,\n checkPaymentStatus,\n onConfirmed,\n onFailed,\n maxRetries,\n retryInterval,\n retryCount,\n ])\n\n // Stop monitoring\n const stopMonitoring = useCallback(() => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current)\n }\n isMonitoringRef.current = false\n setIsLoading(false)\n }, [])\n\n // Manual status check\n const checkStatus = useCallback(async () => {\n if (!transactionId && !purchaseId) return\n\n setIsLoading(true)\n setError(null)\n\n try {\n if (transactionId) {\n const txStatus = await checkTransactionStatus(transactionId)\n setStatus(txStatus)\n }\n\n if (purchaseId) {\n const payStatus = await checkPaymentStatus(purchaseId)\n setPaymentStatus(payStatus)\n }\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : 'Failed to check status'\n setError(errorMessage)\n console.error('Failed to check payment status:', {\n transactionId,\n purchaseId,\n error,\n })\n } finally {\n setIsLoading(false)\n }\n }, [transactionId, purchaseId, checkTransactionStatus, checkPaymentStatus])\n\n // Auto-start monitoring when transaction/purchase ID is provided\n useEffect(() => {\n if ((transactionId || purchaseId) && !isMonitoringRef.current) {\n startMonitoring()\n }\n\n return () => {\n stopMonitoring()\n }\n }, [transactionId, purchaseId, startMonitoring, stopMonitoring])\n\n // Get current confirmation status\n const getConfirmationStatus = useCallback(() => {\n if (paymentStatus?.status === 'confirmed') return 'confirmed'\n if (paymentStatus?.status === 'failed') return 'failed'\n if (status?.confirmationStatus === 'finalized') return 'confirmed'\n if (status?.confirmationStatus === 'confirmed') return 'confirmed'\n if (status?.confirmationStatus === 'failed' || status?.error)\n return 'failed'\n return 'pending'\n }, [status, paymentStatus])\n\n // Get Solscan URL for transaction\n const getSolscanUrl = useCallback(\n (signature?: string) => {\n const txId = signature || transactionId\n if (!txId) return null\n return `https://solscan.io/tx/${txId}`\n },\n [transactionId]\n )\n\n return {\n status,\n paymentStatus,\n isLoading,\n error,\n retryCount,\n maxRetries,\n isMonitoring: isMonitoringRef.current,\n confirmationStatus: getConfirmationStatus(),\n startMonitoring,\n stopMonitoring,\n checkStatus,\n getSolscanUrl,\n isConfirmed: getConfirmationStatus() === 'confirmed',\n isFailed: getConfirmationStatus() === 'failed',\n isPending: getConfirmationStatus() === 'pending',\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/collect.ts","../src/lib/client.ts","../src/lib/utils.ts","../src/components/ui/dialog.tsx","../src/data/countries.ts","../src/components/ui/button.tsx","../src/components/ui/input.tsx","../src/components/ui/label.tsx","../src/components/ui/select.tsx","../src/constants/billing.ts","../src/components/CardDetailsForm.tsx","../src/hooks/usePaymentMethods.ts","../src/components/ui/badge.tsx","../src/components/ui/scroll-area.tsx","../src/components/StoredPaymentMethods.tsx","../src/components/ui/tabs.tsx","../src/hooks/usePaymentNotifications.ts","../src/hooks/useSolanaQrPayment.ts","../src/components/ui/card.tsx","../src/components/QRCodePayment.tsx","../src/components/PaymentStatus.tsx","../src/hooks/useSupportedTokens.ts","../src/components/SolanaPaymentView.tsx","../src/components/PaymentExperience.tsx","../src/components/checkout/SubscriptionSuccessDialog.tsx","../src/hooks/useSubscriptionActions.ts","../src/components/checkout/SubscriptionCheckoutModal.tsx","../src/components/subscribe/WalletModal.tsx","../src/context/PaymentsDialogContext.tsx","../src/context/PaymentContext.tsx","../src/components/BillingThemeProvider.tsx","../src/components/SolanaPaymentSelector.tsx","../src/components/ui/table.tsx","../src/components/ui/alert-dialog.tsx","../src/components/ui/textarea.tsx","../src/components/account/CancelMembershipDialog.tsx","../src/components/account/BillingHistory.tsx","../src/components/account/PaymentMethodsSection.tsx","../src/components/ui/checkbox.tsx","../src/components/subscribe/WalletDialog.tsx","../src/hooks/useTokenBalance.ts","../src/hooks/usePaymentStatus.ts"],"names":["twMerge","clsx","DialogPrimitive","React","jsx","jsxs","X","countryList","cva","React2","Slot","React3","React4","LabelPrimitive","SelectPrimitive","React5","ChevronDown","ChevronUp","Check","useMemo","useState","useEffect","User","MapPin","Fragment","Loader2","CreditCard","useQueryClient","useQuery","useMutation","React7","ScrollAreaPrimitive","WalletCards","Trash2","TabsPrimitive","React9","useCallback","useRef","QRCode","React10","RefreshCw","CheckCircle","XCircle","RotateCcw","tokens","error","ArrowLeft","Sparkles","AlertCircle","Wallet","createContext","useContext","QueryClient","WalletAdapterNetwork","clusterApiUrl","PhantomWalletAdapter","SolflareWalletAdapter","TrustWalletAdapter","CoinbaseWalletAdapter","QueryClientProvider","ConnectionProvider","WalletProvider","WalletModalProvider","React17","AlertDialogPrimitive","React18","React19","Ban","TriangleAlert","notifyDefault","defaultTranslations","useInfiniteQuery","formatCardLabel","React20","CheckboxPrimitive","Shield","UserRound","Calendar","KeyRound","useWallet","useConnection","PublicKey","getAssociatedTokenAddress","getAccount"],"mappings":"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","file":"index.cjs","sourcesContent":["const SCRIPT_SRC = 'https://secure.networkmerchants.com/token/Collect.js'\n\nexport const loadCollectJs = (tokenizationKey: string): void => {\n if (typeof document === 'undefined') return\n const trimmed = tokenizationKey?.trim()\n if (!trimmed || trimmed.length < 10) {\n console.warn('payments-ui: invalid Collect.js key, skipping load')\n return\n }\n\n const existing = document.querySelector(`script[src=\"${SCRIPT_SRC}\"]`)\n if (existing) return\n\n const script = document.createElement('script')\n script.src = SCRIPT_SRC\n script.setAttribute('data-tokenization-key', trimmed)\n script.setAttribute('data-field-ccnumber-placeholder', '0000 0000 0000 0000')\n script.setAttribute('data-field-ccexp-placeholder', '10 / 25')\n script.setAttribute('data-field-cvv-placeholder', '123')\n script.setAttribute('data-variant', 'inline')\n script.async = true\n script.addEventListener('load', () => {\n console.log('payments-ui: Collect.js loaded')\n })\n script.addEventListener('error', (event) => {\n console.error('payments-ui: failed to load Collect.js', event)\n })\n document.head.appendChild(script)\n}\n","/**\n * Minimal Billing API client used by the payments UI.\n *\n * Usage:\n * ```ts\n * const client = createClient({\n * billingBaseUrl: 'https://billing.example.com',\n * getAuthToken: () => authStore.token,\n * })\n *\n * const methods = await client.listPaymentMethods({ limit: 10 })\n * const checkout = await client.checkout({ price_id: 'price_123', processor: 'mobius' })\n * ```\n */\nimport type {\n CheckoutRequestPayload,\n CheckoutResponse,\n} from '../types/subscription'\nimport type {\n CreatePaymentMethodPayload,\n Payment,\n PaymentMethod,\n} from '../types/billing'\nimport type {\n TokenInfo,\n PaymentStatusResponse,\n SolanaPayQRCodeIntent,\n SolanaPayStatusResponse,\n} from '../types/solana-pay'\n\nexport type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE'\n\nexport interface ClientConfig {\n billingBaseUrl: string\n accountBaseUrl?: string\n getAuthToken?: () => string | null | Promise<string | null>\n defaultHeaders?: Record<string, string>\n fetch?: typeof fetch\n}\n\nexport interface RequestOptions {\n query?: Record<string, string | number | boolean | undefined>\n body?: unknown\n headers?: Record<string, string>\n target?: 'billing' | 'account'\n}\n\nexport interface PaginatedResponse<T> {\n data: T[]\n total: number\n limit: number\n offset: number\n hasMore: boolean\n}\n\nexport class ClientApiError extends Error {\n status: number\n body: unknown\n request: { method: HttpMethod; url: string }\n\n constructor(\n message: string,\n status: number,\n body: unknown,\n request: { method: HttpMethod; url: string }\n ) {\n super(message)\n this.name = 'ClientApiError'\n this.status = status\n this.body = body\n this.request = request\n }\n}\n\ninterface ListResponse<T> {\n object?: string\n data?: T[]\n total?: number\n total_items?: number\n limit?: number\n offset?: number\n has_more?: boolean\n}\n\nconst ensureFetch = (fetchImpl?: typeof fetch): typeof fetch => {\n if (fetchImpl) return fetchImpl\n if (typeof globalThis.fetch === 'function') {\n return globalThis.fetch.bind(globalThis)\n }\n throw new Error('payments-ui: global fetch is not available')\n}\n\nexport const createClient = (config: ClientConfig) => {\n const fetchImpl = ensureFetch(config.fetch)\n const normalizeBase = (value: string) => value.replace(/\\/$/, '')\n\n const billingBaseUrl = normalizeBase(config.billingBaseUrl)\n const accountBaseUrl = normalizeBase(\n config.accountBaseUrl ?? config.billingBaseUrl\n )\n const defaultHeaders = config.defaultHeaders ?? {}\n\n const resolveAuthToken = async (): Promise<string | null> => {\n if (!config.getAuthToken) return null\n try {\n const result = config.getAuthToken()\n return result instanceof Promise ? await result : result\n } catch (error) {\n console.warn('payments-ui: failed to resolve auth token', error)\n return null\n }\n }\n\n const buildUrl = (\n path: string,\n query: Record<string, string | number | boolean | undefined> | undefined,\n target: 'billing' | 'account'\n ): string => {\n const normalizedPath = path.startsWith('/') ? path : `/${path}`\n const baseUrl = target === 'account' ? accountBaseUrl : billingBaseUrl\n const url = new URL(`${baseUrl}${normalizedPath}`)\n if (query) {\n Object.entries(query).forEach(([key, value]) => {\n if (value === undefined || value === null) return\n url.searchParams.append(key, String(value))\n })\n }\n return url.toString()\n }\n\n const request = async <T>(\n method: HttpMethod,\n path: string,\n options?: RequestOptions\n ): Promise<T> => {\n const target = options?.target ?? 'billing'\n const url = buildUrl(path, options?.query, target)\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...defaultHeaders,\n ...(options?.headers ?? {}),\n }\n\n const token = await resolveAuthToken()\n if (token) {\n headers.Authorization = `Bearer ${token}`\n }\n\n const response = await fetchImpl(url, {\n method,\n headers,\n body: options?.body ? JSON.stringify(options.body) : undefined,\n })\n\n if (!response.ok) {\n let payload: unknown = null\n try {\n payload = await response.json()\n } catch {\n payload = await response.text()\n }\n throw new ClientApiError(\n payload && typeof payload === 'object' && 'message' in payload\n ? String((payload as { message?: string }).message)\n : response.statusText || 'Request failed',\n response.status,\n payload,\n { method, url }\n )\n }\n\n if (response.status === 204) {\n return undefined as T\n }\n\n return (await response.json()) as T\n }\n\n const normalizeList = <T>(payload: ListResponse<T>): PaginatedResponse<T> => {\n const data = payload.data ?? []\n const total = payload.total ?? payload.total_items ?? data.length\n const limit = payload.limit ?? data.length\n const offset = payload.offset ?? 0\n const hasMore =\n typeof payload.has_more === 'boolean'\n ? payload.has_more\n : offset + data.length < total\n return { data, total, limit, offset, hasMore }\n }\n\n return {\n async listPaymentMethods(params?: {\n limit?: number\n offset?: number\n includeInactive?: boolean\n }): Promise<PaginatedResponse<PaymentMethod>> {\n const result = await request<ListResponse<PaymentMethod>>(\n 'GET',\n '/v1/me/payment-methods',\n {\n query: {\n limit: params?.limit,\n offset: params?.offset,\n include_inactive: params?.includeInactive,\n },\n target: 'account',\n }\n )\n return normalizeList(result)\n },\n\n createPaymentMethod(payload: CreatePaymentMethodPayload): Promise<PaymentMethod> {\n return request('POST', '/v1/me/payment-methods', {\n body: payload,\n target: 'account',\n })\n },\n\n updatePaymentMethod(\n id: string,\n payload: CreatePaymentMethodPayload\n ): Promise<PaymentMethod> {\n return request('PUT', `/me/payment-methods/${id}`, {\n body: payload,\n target: 'account',\n })\n },\n\n deletePaymentMethod(id: string): Promise<void> {\n return request<void>('DELETE', `/me/payment-methods/${id}`, {\n target: 'account',\n })\n },\n\n activatePaymentMethod(id: string): Promise<void> {\n return request<void>('PUT', `/me/payment-methods/${id}/activate`, {\n target: 'account',\n })\n },\n\n checkout(payload: CheckoutRequestPayload): Promise<CheckoutResponse> {\n return request('POST', '/v1/me/checkout', {\n body: payload,\n })\n },\n\n cancelSubscription(feedback?: string): Promise<{ message: string; success: boolean }> {\n return request('POST', '/v1/me/subscriptions/cancel', {\n body: feedback ? { feedback } : undefined,\n })\n },\n\n async getPaymentHistory(params?: {\n limit?: number\n offset?: number\n type?: string\n }): Promise<PaginatedResponse<Payment>> {\n const result = await request<ListResponse<Payment>>('GET', '/v1/me/payments', {\n query: {\n limit: params?.limit,\n offset: params?.offset,\n type: params?.type,\n },\n })\n return normalizeList(result)\n },\n\n async getSolanaTokens(): Promise<TokenInfo[]> {\n const response = await request<{ tokens?: TokenInfo[] } | TokenInfo[]>(\n 'GET',\n '/v1/solana/tokens'\n )\n if (Array.isArray(response)) {\n return response\n }\n return response.tokens ?? []\n },\n\n async createSolanaPayIntent(payload: {\n priceId: string\n token: string\n userWallet?: string\n }): Promise<SolanaPayQRCodeIntent> {\n const response = await request<any>('POST', '/v1/solana/pay', {\n body: {\n price_id: payload.priceId,\n token: payload.token,\n ...(payload.userWallet ? { user_wallet: payload.userWallet } : {}),\n },\n })\n\n return response as SolanaPayQRCodeIntent\n },\n\n async getSolanaPayStatus(reference: string): Promise<SolanaPayStatusResponse> {\n const response = await request<{\n status: string\n payment_id?: string\n signature?: string\n intent_id?: string\n }>(\n 'GET',\n `/solana/pay/${reference}`\n )\n\n if (response.status === 'confirmed') {\n return {\n status: 'confirmed',\n payment_id: response.payment_id ?? '',\n transaction: response.signature ?? null,\n intent_id: response.intent_id,\n }\n }\n\n if (response.status === 'expired') {\n return {\n status: 'failed',\n payment_id: response.payment_id ?? '',\n transaction: response.signature ?? null,\n intent_id: response.intent_id,\n error_message: 'Payment intent expired',\n }\n }\n\n return {\n status: 'pending',\n payment_id: response.payment_id ?? '',\n transaction: response.signature ?? null,\n intent_id: response.intent_id,\n }\n },\n\n async getPaymentStatus(id: string): Promise<PaymentStatusResponse | null> {\n try {\n return await request<PaymentStatusResponse>('GET', `/payment/status/${id}`)\n } catch (error) {\n if (error instanceof ClientApiError && error.status === 404) {\n return null\n }\n throw error\n }\n },\n }\n}\n\nexport type Client = ReturnType<typeof createClient>\n","import { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Dialog = DialogPrimitive.Root\n\nconst DialogTrigger = DialogPrimitive.Trigger\n\nconst DialogPortal = DialogPrimitive.Portal\n\nconst DialogClose = DialogPrimitive.Close\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n))\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 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-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n))\nDialogContent.displayName = DialogPrimitive.Content.displayName\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n)\nDialogHeader.displayName = \"DialogHeader\"\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...props}\n />\n)\nDialogFooter.displayName = \"DialogFooter\"\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n))\nDialogTitle.displayName = DialogPrimitive.Title.displayName\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nDialogDescription.displayName = DialogPrimitive.Description.displayName\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogClose,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n}\n","// Use country-list package for standard country data\nimport countryList from 'country-list'\n\n// Define our interfaces for TypeScript support\nexport interface Country {\n code: string\n name: string\n}\n\n// Some countries that need customization or that might be missing from the base package\nconst customCountries: Country[] = [\n { code: 'TW', name: 'Taiwan, Province of China' },\n { code: 'KR', name: 'Korea' },\n { code: 'KP', name: 'North Korea' },\n { code: 'PS', name: 'Palestine, State of' },\n { code: 'VA', name: 'Holy See (Vatican City State)' },\n { code: 'BQ', name: 'Bonaire, Sint Eustatius and Saba' },\n { code: 'SX', name: 'Sint Maarten (Dutch part)' },\n { code: 'MK', name: 'North Macedonia' },\n { code: 'SZ', name: 'Eswatini' },\n { code: 'FM', name: 'Micronesia, Federated States Of' },\n { code: 'TR', name: 'Türkiye' },\n]\n\n// Apply customizations to the country list\ncountryList.overwrite(customCountries)\n\n// Get the countries from the package and sort them alphabetically by name\nexport const countries: Country[] = countryList\n .getData()\n .sort((a: Country, b: Country) => a.name.localeCompare(b.name))\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background 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 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline:\n \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-10 px-4 py-2\",\n sm: \"h-9 rounded-md px-3\",\n lg: \"h-11 rounded-md px-8\",\n icon: \"h-10 w-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\"\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n )\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Input = React.forwardRef<HTMLInputElement, React.ComponentProps<\"input\">>(\n ({ className, type, ...props }, ref) => {\n return (\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-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground 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 md:text-sm\",\n className\n )}\n ref={ref}\n {...props}\n />\n )\n }\n)\nInput.displayName = \"Input\"\n\nexport { Input }\n","import * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst labelVariants = cva(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n)\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(labelVariants(), className)}\n {...props}\n />\n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }\n","import * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Select = SelectPrimitive.Root\n\nconst SelectGroup = SelectPrimitive.Group\n\nconst SelectValue = SelectPrimitive.Value\n\nconst SelectTrigger = React.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 data-[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 SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollUpButton>\n))\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollDownButton>\n))\nSelectScrollDownButton.displayName =\n SelectPrimitive.ScrollDownButton.displayName\n\nconst SelectContent = React.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-[--radix-select-content-available-height] min-w-[8rem] overflow-y-auto overflow-x-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 origin-[--radix-select-content-transform-origin]\",\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 <SelectScrollUpButton />\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 <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n))\nSelectContent.displayName = SelectPrimitive.Content.displayName\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\"py-1.5 pl-8 pr-2 text-sm font-semibold\", className)}\n {...props}\n />\n))\nSelectLabel.displayName = SelectPrimitive.Label.displayName\n\nconst SelectItem = React.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\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n))\nSelectItem.displayName = SelectPrimitive.Item.displayName\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n))\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n}\n","import type { BillingDetails } from '../types'\n\nexport const defaultBillingDetails: BillingDetails = {\n firstName: '',\n lastName: '',\n address1: '',\n city: '',\n stateRegion: '',\n postalCode: '',\n country: 'US',\n email: '',\n provider: 'mobius',\n}\n","import React, { useEffect, useMemo, useState } from 'react'\nimport { CreditCard, Loader2, MapPin, User } from 'lucide-react'\nimport type { BillingDetails } from '../types'\nimport type { CollectJSResponse } from '../types/collect'\nimport { usePaymentContext } from '../context/PaymentContext'\nimport { countries } from '../data/countries'\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select'\nimport { cn } from '../lib/utils'\nimport { defaultBillingDetails } from '../constants/billing'\n\nexport interface CardDetailsFormProps {\n visible: boolean\n onTokenize: (token: string, billing: BillingDetails) => void\n submitLabel: string\n submitting?: boolean\n defaultValues?: Partial<BillingDetails>\n externalError?: string | null\n collectPrefix?: string\n className?: string\n onBillingChange?: (billing: BillingDetails) => void\n submitDisabled?: boolean\n}\n\nconst buildSelector = (prefix: string, field: string) => `#${prefix}-${field}`\n\nexport const CardDetailsForm: React.FC<CardDetailsFormProps> = ({\n visible,\n onTokenize,\n submitLabel,\n submitting = false,\n defaultValues,\n externalError,\n collectPrefix = 'card-form',\n className,\n onBillingChange,\n submitDisabled = false,\n}) => {\n const { config } = usePaymentContext()\n const defaultValuesKey = useMemo(() => JSON.stringify(defaultValues ?? {}), [defaultValues])\n\n\tconst mergedDefaults: BillingDetails = useMemo(\n\t\t() => ({\n\t\t\t...defaultBillingDetails,\n\t\t\t...defaultValues,\n\t\t\temail:\n\t\t\t\tdefaultValues?.email ?? config.defaultUser?.email ?? defaultBillingDetails.email,\n\t\t}),\n\t\t[defaultValuesKey, config.defaultUser?.email]\n\t)\n\n const [firstName, setFirstName] = useState(mergedDefaults.firstName)\n const [lastName, setLastName] = useState(mergedDefaults.lastName)\n const [address1, setAddress1] = useState(mergedDefaults.address1)\n const [city, setCity] = useState(mergedDefaults.city)\n const [stateRegion, setStateRegion] = useState(mergedDefaults.stateRegion ?? '')\n const [postalCode, setPostalCode] = useState(mergedDefaults.postalCode)\n const [country, setCountry] = useState(mergedDefaults.country)\n const [email, setEmail] = useState(mergedDefaults.email ?? '')\n const [localError, setLocalError] = useState<string | null>(null)\n const [isTokenizing, setIsTokenizing] = useState(false)\n\n useEffect(() => {\n if (!visible) {\n setLocalError(null)\n setIsTokenizing(false)\n }\n }, [visible])\n\n useEffect(() => {\n if (!visible) return\n setFirstName(mergedDefaults.firstName)\n setLastName(mergedDefaults.lastName)\n setAddress1(mergedDefaults.address1)\n setCity(mergedDefaults.city)\n setStateRegion(mergedDefaults.stateRegion ?? '')\n setPostalCode(mergedDefaults.postalCode)\n setCountry(mergedDefaults.country)\n setEmail(mergedDefaults.email ?? '')\n }, [defaultValuesKey, mergedDefaults, visible])\n\n useEffect(() => {\n if (!onBillingChange) return\n onBillingChange({\n firstName,\n lastName,\n address1,\n city,\n stateRegion,\n postalCode,\n country,\n email,\n provider: mergedDefaults.provider ?? 'mobius',\n })\n }, [\n firstName,\n lastName,\n address1,\n city,\n stateRegion,\n postalCode,\n country,\n email,\n mergedDefaults.provider,\n onBillingChange,\n ])\n\n useEffect(() => {\n if (typeof window === 'undefined' || !window.CollectJS || !visible) {\n return\n }\n\n const handlers = (window.__doujinsCollectHandlers ||= {})\n handlers[collectPrefix] = (response: CollectJSResponse) => {\n setIsTokenizing(false)\n if (!response.token) {\n setLocalError('Payment tokenization failed. Please try again.')\n return\n }\n\n const billing: BillingDetails = {\n firstName,\n lastName,\n address1,\n city,\n stateRegion,\n postalCode,\n country,\n email,\n provider: mergedDefaults.provider ?? 'mobius',\n }\n\n onTokenize(response.token, billing)\n }\n\n const configured = (window.__doujinsCollectConfigured ||= {})\n if (!configured[collectPrefix]) {\n window.CollectJS.configure({\n variant: 'inline',\n fields: {\n ccnumber: { selector: buildSelector(collectPrefix, 'ccnumber') },\n ccexp: { selector: buildSelector(collectPrefix, 'ccexp') },\n cvv: { selector: buildSelector(collectPrefix, 'cvv') },\n },\n callback: (response: CollectJSResponse) => {\n const fn = window.__doujinsCollectHandlers?.[collectPrefix]\n fn?.(response)\n },\n })\n configured[collectPrefix] = true\n }\n }, [\n collectPrefix,\n firstName,\n lastName,\n address1,\n city,\n stateRegion,\n postalCode,\n country,\n email,\n mergedDefaults.provider,\n onTokenize,\n visible,\n ])\n\n const validate = (): boolean => {\n if (\n !firstName.trim() ||\n !lastName.trim() ||\n !address1.trim() ||\n !city.trim() ||\n !postalCode.trim() ||\n !country.trim() ||\n !email.trim()\n ) {\n setLocalError('Please complete all required billing fields.')\n return false\n }\n setLocalError(null)\n return true\n }\n\n const handleSubmit = (event: React.FormEvent) => {\n event.preventDefault()\n if (!validate()) return\n if (!window.CollectJS) {\n setLocalError('Payment form is not ready. Please try again later.')\n return\n }\n setIsTokenizing(true)\n window.CollectJS.startPaymentRequest()\n }\n\n const errorMessage = localError ?? externalError\n const collectFieldClass =\n 'flex h-11 w-full items-center rounded-md border border-white/10 bg-white/5 px-3 text-sm text-white'\n\n return (\n <form\n className={cn('space-y-5', className)}\n onSubmit={handleSubmit}\n noValidate\n >\n {errorMessage && (\n <div className=\"rounded-md border border-red-500/40 bg-red-500/10 px-4 py-2 text-sm text-red-400\">\n {errorMessage}\n </div>\n )}\n\n <div className=\"grid gap-5 md:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"payments-first\" className=\"flex items-center gap-2 text-white/70\">\n <User className=\"h-4 w-4\" /> First name\n </Label>\n <Input\n id=\"payments-first\"\n value={firstName}\n onChange={(e) => setFirstName(e.target.value)}\n required\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"payments-last\" className=\"flex items-center gap-2 text-white/70\">\n <User className=\"h-4 w-4\" /> Last name\n </Label>\n <Input\n id=\"payments-last\"\n value={lastName}\n onChange={(e) => setLastName(e.target.value)}\n required\n />\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"payments-email\">Email</Label>\n <Input\n id=\"payments-email\"\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n required\n />\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"payments-address1\">Address</Label>\n <Input\n id=\"payments-address1\"\n value={address1}\n onChange={(e) => setAddress1(e.target.value)}\n required\n />\n </div>\n\n <div className=\"grid gap-5 md:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"payments-city\">City</Label>\n <Input\n id=\"payments-city\"\n value={city}\n onChange={(e) => setCity(e.target.value)}\n required\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"payments-state\">State / Region</Label>\n <Input\n id=\"payments-state\"\n value={stateRegion}\n onChange={(e) => setStateRegion(e.target.value)}\n />\n </div>\n </div>\n\n <div className=\"grid gap-5 md:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"payments-postal\" className=\"flex items-center gap-2 text-white/70\">\n <MapPin className=\"h-4 w-4\" /> Postal code\n </Label>\n <Input\n id=\"payments-postal\"\n value={postalCode}\n onChange={(e) => setPostalCode(e.target.value)}\n required\n />\n </div>\n <div className=\"space-y-2\">\n <Label>Country</Label>\n <Select value={country} onValueChange={setCountry}>\n <SelectTrigger>\n <SelectValue placeholder=\"Select a country\" />\n </SelectTrigger>\n <SelectContent className=\"max-h-64 w-full\">\n {countries.map((option) => (\n <SelectItem key={option.code} value={option.code}>\n {option.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <Label>Card number</Label>\n <div id={buildSelector(collectPrefix, 'ccnumber').slice(1)} className={collectFieldClass} />\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label>Expiry</Label>\n <div id={buildSelector(collectPrefix, 'ccexp').slice(1)} className={collectFieldClass} />\n </div>\n <div className=\"space-y-2\">\n <Label>CVV</Label>\n <div id={buildSelector(collectPrefix, 'cvv').slice(1)} className={collectFieldClass} />\n </div>\n </div>\n\n <Button\n type=\"submit\"\n className=\"w-full\"\n disabled={submitting || submitDisabled || isTokenizing}\n >\n {submitting || isTokenizing ? (\n <>\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" /> Processing…\n </>\n ) : (\n <>\n <CreditCard className=\"mr-2 h-4 w-4\" /> {submitLabel}\n </>\n )}\n </Button>\n\n <p className=\"flex items-center gap-2 text-xs text-white/50\">\n <CreditCard className=\"h-4 w-4\" /> Your payment information is encrypted and processed securely.\n </p>\n </form>\n )\n}\n","import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'\nimport type {\n BillingDetails,\n CreatePaymentMethodPayload,\n PaymentMethod,\n PaginatedPaymentMethods,\n} from '../types'\nimport { usePaymentContext } from '../context/PaymentContext'\n\nconst PAYMENT_METHODS_KEY = ['payments-ui', 'payment-methods']\n\nexport const usePaymentMethods = () => {\n const { client } = usePaymentContext()\n const queryClient = useQueryClient()\n\n const listQuery = useQuery<PaginatedPaymentMethods>({\n queryKey: PAYMENT_METHODS_KEY,\n queryFn: async () => {\n const response = await client.listPaymentMethods({ limit: 50 })\n return {\n data: response.data,\n total_items: response.total,\n limit: response.limit,\n offset: response.offset,\n page: response.limit > 0 ? Math.floor(response.offset / response.limit) + 1 : 1,\n page_size: response.limit,\n total_pages:\n response.limit > 0 ? Math.ceil(response.total / response.limit) : undefined,\n }\n },\n })\n\n const createMutation = useMutation<\n PaymentMethod,\n Error,\n { token: string; billing: BillingDetails }\n >({\n mutationFn: ({ token, billing }) => {\n const payload: CreatePaymentMethodPayload = {\n payment_token: token,\n first_name: billing.firstName,\n last_name: billing.lastName,\n address1: billing.address1,\n address2: billing.address2,\n city: billing.city,\n state: billing.stateRegion,\n zip: billing.postalCode,\n country: billing.country,\n email: billing.email,\n provider: billing.provider,\n }\n return client.createPaymentMethod(payload)\n },\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: PAYMENT_METHODS_KEY })\n },\n })\n\n const deleteMutation = useMutation<void, Error, { id: string }>({\n mutationFn: ({ id }) => client.deletePaymentMethod(id),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: PAYMENT_METHODS_KEY })\n },\n })\n\n return {\n listQuery,\n createMutation,\n deleteMutation,\n }\n}\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst badgeVariants = cva(\n \"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary text-primary-foreground hover:bg-primary/80\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n destructive:\n \"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80\",\n outline: \"text-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return (\n <div className={cn(badgeVariants({ variant }), className)} {...props} />\n )\n}\n\nexport { Badge, badgeVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst ScrollArea = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>\n>(({ className, children, ...props }, ref) => (\n <ScrollAreaPrimitive.Root\n ref={ref}\n className={cn(\"relative overflow-hidden\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport className=\"h-full w-full rounded-[inherit]\">\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n))\nScrollArea.displayName = ScrollAreaPrimitive.Root.displayName\n\nconst ScrollBar = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>\n>(({ className, orientation = \"vertical\", ...props }, ref) => (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n \"flex touch-none select-none transition-colors\",\n orientation === \"vertical\" &&\n \"h-full w-2.5 border-l border-l-transparent p-[1px]\",\n orientation === \"horizontal\" &&\n \"h-2.5 flex-col border-t border-t-transparent p-[1px]\",\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb className=\"relative flex-1 rounded-full bg-border\" />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n))\nScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName\n\nexport { ScrollArea, ScrollBar }\n","import React, { useMemo, useState } from 'react'\nimport { CreditCard, Loader2, Trash2, WalletCards } from 'lucide-react'\nimport { CardDetailsForm } from './CardDetailsForm'\nimport { usePaymentMethods } from '../hooks/usePaymentMethods'\nimport type { BillingDetails, PaymentMethod } from '../types'\nimport { Button } from '@/components/ui/button'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from '@/components/ui/dialog'\nimport { Badge } from '@/components/ui/badge'\nimport { ScrollArea } from '@/components/ui/scroll-area'\nimport { cn } from '../lib/utils'\n\nconst formatCardLabel = (method: PaymentMethod): string => {\n const brand = method.card_type ? method.card_type.toUpperCase() : 'CARD'\n const lastFour = method.last_four ? `•••• ${method.last_four}` : ''\n return `${brand} ${lastFour}`.trim()\n}\n\nexport interface StoredPaymentMethodsProps {\n selectedMethodId?: string | null\n onMethodSelect?: (method: PaymentMethod) => void\n showAddButton?: boolean\n heading?: string\n description?: string\n}\n\nexport const StoredPaymentMethods: React.FC<StoredPaymentMethodsProps> = ({\n selectedMethodId,\n onMethodSelect,\n showAddButton = true,\n heading = 'Payment Methods',\n description = 'Manage your saved cards',\n}) => {\n const { listQuery, createMutation, deleteMutation } = usePaymentMethods()\n const [isModalOpen, setIsModalOpen] = useState(false)\n const [deletingId, setDeletingId] = useState<string | null>(null)\n\n const payments = useMemo(() => listQuery.data?.data ?? [], [listQuery.data])\n\n const handleCardTokenize = (token: string, billing: BillingDetails) => {\n createMutation.mutate({ token, billing })\n }\n\n const handleDelete = (method: PaymentMethod) => {\n setDeletingId(method.id)\n deleteMutation.mutate(\n { id: method.id },\n {\n onSettled: () => setDeletingId(null),\n }\n )\n }\n\n return (\n <div className=\"space-y-4\">\n <div className=\"flex items-start justify-between\">\n <div>\n <p className=\"flex items-center gap-2 text-sm font-medium text-muted-foreground\">\n <WalletCards className=\"h-4 w-4\" /> {heading}\n </p>\n <p className=\"text-xs text-muted-foreground\">{description}</p>\n </div>\n {showAddButton && (\n <Button size=\"sm\" variant=\"outline\" onClick={() => setIsModalOpen(true)}>\n <CreditCard className=\"mr-2 h-4 w-4\" /> Add card\n </Button>\n )}\n </div>\n {listQuery.isLoading ? (\n <div className=\"flex items-center justify-center rounded-lg border border-dashed border-border/60 bg-muted/10 py-8 text-sm text-muted-foreground\">\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" /> Loading cards…\n </div>\n ) : payments.length === 0 ? (\n <div className=\"rounded-lg border border-dashed border-border/60 bg-muted/10 px-4 py-6 text-sm text-muted-foreground\">\n No saved payment methods yet.\n </div>\n ) : (\n <ScrollArea className=\"max-h-[320px] pr-2\">\n <div className=\"space-y-3\">\n {payments.map((method) => {\n const isSelected = selectedMethodId === method.id\n return (\n <div\n key={method.id}\n className={cn(\n 'flex flex-col gap-3 rounded-lg border px-4 py-3 transition-colors md:flex-row md:items-center md:justify-between',\n isSelected\n ? 'border-primary/60 bg-primary/5'\n : 'border-border/60 bg-background'\n )}\n >\n <div className=\"space-y-1\">\n <p className=\"text-sm font-semibold text-foreground\">\n {formatCardLabel(method)}\n </p>\n <p className=\"text-xs text-muted-foreground\">\n Added on{' '}\n {method.created_at\n ? new Date(method.created_at).toLocaleDateString()\n : 'unknown'}\n </p>\n </div>\n <div className=\"flex flex-wrap items-center gap-2\">\n <Badge\n variant={method.is_active ? 'default' : 'secondary'}\n className={cn(\n method.is_active\n ? 'bg-primary/20 text-primary'\n : 'bg-muted text-muted-foreground'\n )}\n >\n {method.is_active ? 'Active' : 'Inactive'}\n </Badge>\n {method.failure_reason && (\n <Badge variant=\"destructive\">{method.failure_reason}</Badge>\n )}\n {onMethodSelect && (\n <Button\n size=\"sm\"\n variant={isSelected ? 'default' : 'outline'}\n onClick={() => onMethodSelect(method)}\n >\n {isSelected ? 'Selected' : 'Use card'}\n </Button>\n )}\n <Button\n size=\"icon\"\n variant=\"outline\"\n className=\"text-destructive\"\n onClick={() => handleDelete(method)}\n disabled={deletingId === method.id && deleteMutation.isPending}\n >\n {deletingId === method.id && deleteMutation.isPending ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : (\n <Trash2 className=\"h-4 w-4\" />\n )}\n </Button>\n </div>\n </div>\n )\n })}\n </div>\n </ScrollArea>\n )}\n <Dialog open={isModalOpen} onOpenChange={setIsModalOpen}>\n <DialogContent className=\"max-h-[85vh] overflow-y-auto\">\n <DialogHeader>\n <DialogTitle>Add a new card</DialogTitle>\n <DialogDescription>\n Your card details are tokenized securely via our payment provider.\n </DialogDescription>\n </DialogHeader>\n <CardDetailsForm\n visible={isModalOpen}\n collectPrefix=\"payments-ui-card\"\n submitting={createMutation.isPending}\n submitLabel=\"Save card\"\n externalError={createMutation.error?.message ?? null}\n onTokenize={handleCardTokenize}\n />\n </DialogContent>\n </Dialog>\n </div>\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Tabs = TabsPrimitive.Root\n\nconst TabsList = React.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 = React.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 = React.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\nexport { Tabs, TabsList, TabsTrigger, TabsContent }\n","import { useCallback } from 'react'\nimport { usePaymentContext } from '../context/PaymentContext'\nimport type {\n PaymentStatusPayload,\n PaymentSuccessPayload,\n} from '../types/config'\n\nexport const usePaymentNotifications = () => {\n const { config } = usePaymentContext()\n\n const notifyStatus = useCallback(\n (status: PaymentStatusPayload['status'], context?: Record<string, unknown>) => {\n config.callbacks?.onStatusChange?.({ status, context })\n },\n [config.callbacks]\n )\n\n const notifySuccess = useCallback(\n (payload?: PaymentSuccessPayload) => {\n config.callbacks?.onSuccess?.(payload ?? {})\n },\n [config.callbacks]\n )\n\n const notifyError = useCallback(\n (error: string | Error) => {\n config.callbacks?.onError?.(\n typeof error === 'string' ? new Error(error) : error\n )\n },\n [config.callbacks]\n )\n\n return {\n notifyStatus,\n notifySuccess,\n notifyError,\n }\n}\n","import { useCallback, useEffect, useRef, useState } from 'react'\nimport QRCode from 'qrcode'\nimport type { TokenInfo } from '../types'\nimport type {\n SolanaPayQRCodeIntent,\n SolanaPayStatusResponse,\n} from '../types/solana-pay'\nimport { usePaymentContext } from '../context/PaymentContext'\n\ninterface UseSolanaQrPaymentOptions {\n priceId: string\n selectedToken: TokenInfo | null\n onSuccess: (paymentId: string | undefined, txId: string | undefined) => void\n onError: (error: string) => void\n}\n\ninterface UseSolanaQrPaymentState {\n intent: SolanaPayQRCodeIntent | null\n qrDataUri: string | null\n isLoading: boolean\n error: string | null\n timeRemaining: number\n refresh: () => void\n}\n\nexport const useSolanaQrPayment = (\n options: UseSolanaQrPaymentOptions\n): UseSolanaQrPaymentState => {\n const { priceId, selectedToken, onSuccess, onError } = options\n const { client } = usePaymentContext()\n const tokenSymbol = selectedToken?.symbol ?? null\n const onSuccessRef = useRef(onSuccess)\n const onErrorRef = useRef(onError)\n\n const [intent, setIntent] = useState<SolanaPayQRCodeIntent | null>(null)\n const [qrDataUri, setQrDataUri] = useState<string | null>(null)\n const [isLoading, setIsLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [timeRemaining, setTimeRemaining] = useState(0)\n const [refreshNonce, setRefreshNonce] = useState(0)\n\n const pollRef = useRef<NodeJS.Timeout | null>(null)\n const countdownRef = useRef<NodeJS.Timeout | null>(null)\n\n const clearTimers = useCallback(() => {\n if (pollRef.current) {\n clearInterval(pollRef.current)\n pollRef.current = null\n }\n if (countdownRef.current) {\n clearInterval(countdownRef.current)\n countdownRef.current = null\n }\n }, [])\n\n useEffect(() => {\n return () => {\n clearTimers()\n }\n }, [clearTimers])\n\n const resetState = useCallback(\n (message?: string | null) => {\n clearTimers()\n setIntent(null)\n setQrDataUri(null)\n setTimeRemaining(0)\n setError(message ?? null)\n },\n [clearTimers]\n )\n\n useEffect(() => {\n onSuccessRef.current = onSuccess\n }, [onSuccess])\n\n useEffect(() => {\n onErrorRef.current = onError\n }, [onError])\n\n const handleError = useCallback(\n (message: string, notifyParent = false) => {\n console.error('[payments-ui] Solana Pay QR error:', message)\n clearTimers()\n resetState(message)\n if (notifyParent) {\n onErrorRef.current?.(message)\n }\n },\n [clearTimers, resetState]\n )\n\n const handleSuccess = useCallback(\n (status: SolanaPayStatusResponse) => {\n clearTimers()\n resetState(null)\n console.log('[payments-ui] Solana Pay QR confirmed', {\n paymentId: status.payment_id,\n intentId: status.intent_id,\n })\n const paymentId = status.payment_id ?? undefined\n const txId = status.transaction ?? undefined\n onSuccessRef.current?.(paymentId, txId)\n },\n [clearTimers, resetState]\n )\n\n const pollStatus = useCallback(\n async (reference: string) => {\n try {\n const status = await client.getSolanaPayStatus(reference)\n\n if (status.status === 'confirmed') {\n handleSuccess(status)\n }\n\n if (status.status === 'failed') {\n handleError(\n status.error_message || 'Payment failed. Please try again.',\n true\n )\n }\n } catch (err) {\n console.error('Failed to poll Solana Pay status:', err)\n }\n },\n [handleError, handleSuccess, client]\n )\n\n const startCountdown = useCallback(\n (expiresAt: number, reference: string) => {\n const updateTime = () => {\n const remaining = Math.max(0, Math.floor(expiresAt - Date.now() / 1000))\n setTimeRemaining(remaining)\n\n if (remaining === 0) {\n handleError('Payment intent expired. Please generate a new QR code.')\n }\n }\n\n updateTime()\n\n countdownRef.current = setInterval(updateTime, 1000)\n pollRef.current = setInterval(() => void pollStatus(reference), 4000)\n },\n [handleError, pollStatus]\n )\n\n const renderQr = useCallback(async (qrIntent: SolanaPayQRCodeIntent) => {\n try {\n const dataUri = await QRCode.toDataURL(qrIntent.url, {\n width: 320,\n margin: 1,\n color: {\n dark: '#0f1116',\n light: '#ffffff',\n },\n })\n setQrDataUri(dataUri)\n } catch (err) {\n console.error('Failed to render QR code:', err)\n handleError('Unable to render QR code')\n }\n }, [handleError])\n\n useEffect(() => {\n let cancelled = false\n\n const generateIntent = async () => {\n clearTimers()\n\n if (!tokenSymbol || !priceId) {\n resetState(null)\n setIsLoading((prev) => (prev ? false : prev))\n return\n }\n\n try {\n setIsLoading(true)\n setError(null)\n console.log('[payments-ui] Requesting Solana Pay QR intent', {\n priceId,\n token: tokenSymbol,\n })\n const nextIntent = await client.createSolanaPayIntent({\n priceId,\n token: tokenSymbol,\n })\n if (cancelled) return\n setIntent(nextIntent)\n setTimeRemaining(\n Math.max(0, Math.floor(nextIntent.expires_at - Date.now() / 1000))\n )\n await renderQr(nextIntent)\n console.log('[payments-ui] Solana Pay QR ready', {\n reference: nextIntent.reference,\n })\n\n const reference = nextIntent.reference\n if (typeof reference === 'string' && reference.length > 0) {\n startCountdown(nextIntent.expires_at, reference)\n pollStatus(reference)\n } else {\n handleError('Payment reference missing from intent', true)\n }\n } catch (err) {\n if (cancelled) return\n console.error('Failed to generate Solana Pay QR intent:', err)\n const message =\n err instanceof Error\n ? err.message\n : 'Unable to create Solana Pay QR code'\n handleError(message)\n } finally {\n if (!cancelled) {\n setIsLoading(false)\n }\n }\n }\n\n void generateIntent()\n\n return () => {\n cancelled = true\n clearTimers()\n }\n }, [\n clearTimers,\n handleError,\n pollStatus,\n priceId,\n renderQr,\n resetState,\n client,\n startCountdown,\n tokenSymbol,\n refreshNonce,\n ])\n\n const refresh = useCallback(() => {\n setRefreshNonce((value) => value + 1)\n }, [])\n\n return {\n intent,\n qrDataUri,\n isLoading,\n error,\n timeRemaining,\n refresh,\n }\n}\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Card = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-lg border bg-card text-card-foreground shadow-sm\",\n className\n )}\n {...props}\n />\n))\nCard.displayName = \"Card\"\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 p-6\", className)}\n {...props}\n />\n))\nCardHeader.displayName = \"CardHeader\"\n\nconst CardTitle = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"text-2xl font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n))\nCardTitle.displayName = \"CardTitle\"\n\nconst CardDescription = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nCardDescription.displayName = \"CardDescription\"\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n))\nCardContent.displayName = \"CardContent\"\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center p-6 pt-0\", className)}\n {...props}\n />\n))\nCardFooter.displayName = \"CardFooter\"\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }\n","import React from 'react'\nimport { Loader2, RefreshCw } from 'lucide-react'\nimport type { SubmitPaymentResponse, TokenInfo } from '../types'\nimport { useSolanaQrPayment } from '../hooks/useSolanaQrPayment'\nimport { Button } from '@/components/ui/button'\nimport { Card } from '@/components/ui/card'\n\ninterface QRCodePaymentProps {\n priceId: string\n selectedToken: TokenInfo | null\n onPaymentError: (error: string) => void\n onPaymentSuccess: (result: SubmitPaymentResponse | string, txId?: string) => void\n}\n\nexport const QRCodePayment: React.FC<QRCodePaymentProps> = ({\n priceId,\n selectedToken,\n onPaymentError,\n onPaymentSuccess,\n}) => {\n const handleQrSuccess = React.useCallback(\n (paymentId?: string, txId?: string) => {\n if (!paymentId && !txId) {\n onPaymentError('Missing payment confirmation details')\n return\n }\n\n const resolvedResult = paymentId ?? txId ?? ''\n onPaymentSuccess(resolvedResult, txId)\n },\n [onPaymentError, onPaymentSuccess]\n )\n\n const { intent, qrDataUri, isLoading, error, timeRemaining, refresh } =\n useSolanaQrPayment({\n priceId,\n selectedToken,\n onError: onPaymentError,\n onSuccess: handleQrSuccess,\n })\n\n if (!selectedToken) {\n return (\n <div className=\"rounded-md border border-dashed border-border/60 bg-muted/10 px-4 py-6 text-center text-sm text-muted-foreground\">\n Select a token to continue.\n </div>\n )\n }\n\n return (\n <Card className=\"space-y-4 border border-border/60 bg-background/80 p-6 shadow-none rounded-md\">\n <div className=\"flex items-start justify-between\">\n <div>\n <p className=\"text-sm font-semibold text-foreground\">Scan with Solana Pay</p>\n <p className=\"text-sm text-muted-foreground\">\n Use any Solana Pay compatible wallet to scan and confirm.\n </p>\n </div>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon\"\n onClick={() => refresh()}\n disabled={isLoading}\n >\n {isLoading ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : (\n <RefreshCw className=\"h-4 w-4\" />\n )}\n </Button>\n </div>\n\n {error && (\n <div className=\"rounded-md border border-destructive/40 bg-destructive/10 px-4 py-2 text-sm text-destructive\">\n {error}\n </div>\n )}\n\n <div className=\"flex items-center justify-center rounded-2xl border border-dashed border-border/70 bg-muted/5 p-6\">\n {qrDataUri ? (\n <img src={qrDataUri} alt=\"Solana Pay QR\" className=\"h-72 w-72 rounded-lg border border-border/40 bg-card\" />\n ) : (\n <div className=\"flex flex-col items-center gap-2 text-sm text-muted-foreground\">\n {isLoading ? (\n <>\n <Loader2 className=\"h-5 w-5 animate-spin\" /> Generating QR code…\n </>\n ) : (\n 'QR code unavailable'\n )}\n </div>\n )}\n </div>\n\n {intent && (\n <div className=\"text-center text-sm text-muted-foreground\">\n Expires in {timeRemaining}s · {intent.token_amount} {intent.token_symbol}\n </div>\n )}\n </Card>\n )\n}\n","import React from 'react'\nimport { CheckCircle, Loader2, RotateCcw, XCircle } from 'lucide-react'\nimport { Button } from '@/components/ui/button'\n\ninterface PaymentStatusProps {\n state: 'selecting' | 'processing' | 'confirming' | 'success' | 'error'\n usdAmount: number\n solAmount?: number\n transactionId?: string | null\n errorMessage?: string | null\n onRetry?: () => void\n onClose?: () => void\n}\n\nexport const PaymentStatus: React.FC<PaymentStatusProps> = ({\n state,\n usdAmount,\n solAmount,\n transactionId,\n errorMessage,\n onRetry,\n onClose,\n}) => {\n if (state === 'processing' || state === 'confirming') {\n return (\n <div className=\"flex flex-col items-center gap-3 text-center\">\n <Loader2 className=\"h-10 w-10 animate-spin text-primary\" />\n <div>\n <p className=\"text-lg font-semibold text-foreground\">\n {state === 'processing' ? 'Processing payment…' : 'Awaiting confirmation…'}\n </p>\n <p className=\"text-sm text-muted-foreground\">\n ${usdAmount.toFixed(2)} {solAmount ? `· ≈ ${solAmount.toFixed(4)} SOL` : ''}\n </p>\n </div>\n </div>\n )\n }\n\n if (state === 'success') {\n return (\n <div className=\"flex flex-col items-center gap-4 text-center\">\n <CheckCircle className=\"h-12 w-12 text-primary\" />\n <div>\n <p className=\"text-lg font-semibold text-foreground\">Payment complete</p>\n {transactionId && (\n <p className=\"text-xs text-muted-foreground\">Txn: {transactionId}</p>\n )}\n </div>\n <Button variant=\"secondary\" onClick={onClose} className=\"w-full\">\n Close\n </Button>\n </div>\n )\n }\n\n if (state === 'error') {\n return (\n <div className=\"flex flex-col items-center gap-4 text-center\">\n <XCircle className=\"h-12 w-12 text-destructive\" />\n <div>\n <p className=\"text-lg font-semibold text-foreground\">Payment failed</p>\n {errorMessage && (\n <p className=\"text-sm text-muted-foreground\">{errorMessage}</p>\n )}\n </div>\n <div className=\"flex w-full flex-col gap-2 sm:flex-row\">\n {onRetry && (\n <Button variant=\"secondary\" className=\"flex-1\" onClick={onRetry}>\n <RotateCcw className=\"mr-2 h-4 w-4\" /> Try again\n </Button>\n )}\n <Button className=\"flex-1\" onClick={onClose}>\n Close\n </Button>\n </div>\n </div>\n )\n }\n\n return null\n}\n","import { useState, useEffect, useCallback, useRef } from 'react'\nimport { TokenInfo } from '../types'\nimport { usePaymentContext } from '../context/PaymentContext'\n\nexport const useSupportedTokens = () => {\n const { client } = usePaymentContext()\n const [tokens, setTokens] = useState<TokenInfo[]>([])\n const [isLoading, setIsLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [lastFetched, setLastFetched] = useState<number | null>(null)\n\n // Cache duration: 5 minutes\n const CACHE_DURATION = 5 * 60 * 1000\n\n // Use refs to avoid dependency issues\n const tokensRef = useRef(tokens)\n const lastFetchedRef = useRef(lastFetched)\n\n // Update refs when state changes\n tokensRef.current = tokens\n lastFetchedRef.current = lastFetched\n\n // Fetch supported tokens from backend\n const fetchSupportedTokens = useCallback(async () => {\n // Check if we have fresh cached data\n if (\n tokensRef.current.length > 0 &&\n lastFetchedRef.current &&\n Date.now() - lastFetchedRef.current < CACHE_DURATION\n ) {\n return tokensRef.current\n }\n\n setIsLoading(true)\n setError(null)\n\n try {\n console.log('payments-ui: fetching supported Solana tokens')\n const tokens = await client.getSolanaTokens()\n\n // Sort tokens by symbol for consistent ordering\n const sortedTokens = [...tokens].sort((a, b) =>\n a.symbol.localeCompare(b.symbol)\n )\n\n setTokens(sortedTokens)\n console.log('payments-ui: loaded supported tokens', {\n count: sortedTokens.length,\n })\n setLastFetched(Date.now())\n return sortedTokens\n } catch (error) {\n const errorMessage =\n error instanceof Error\n ? error.message\n : 'Failed to fetch supported tokens'\n setError(errorMessage)\n console.error('Failed to fetch supported tokens:', error)\n\n // Return empty array on error\n return []\n } finally {\n setIsLoading(false)\n }\n }, [client])\n\n // Auto-fetch on mount\n useEffect(() => {\n if (tokens.length === 0) {\n fetchSupportedTokens()\n }\n }, [tokens.length, fetchSupportedTokens])\n\n // Get token by symbol\n const getTokenBySymbol = useCallback(\n (symbol: string): TokenInfo | undefined => {\n return tokens.find((token) => token.symbol === symbol)\n },\n [tokens]\n )\n\n // Get token by mint address\n const getTokenByMint = useCallback(\n (mintAddress: string): TokenInfo | undefined => {\n return tokens.find((token) => token.mint === mintAddress)\n },\n [tokens]\n )\n\n // Check if a token is supported\n const isTokenSupported = useCallback(\n (symbol: string): boolean => {\n return tokens.some((token) => token.symbol === symbol)\n },\n [tokens]\n )\n\n // Get USDC token (primary stablecoin)\n const getUSDCToken = useCallback((): TokenInfo | undefined => {\n return getTokenBySymbol('USDC')\n }, [getTokenBySymbol])\n\n // Get PYUSD token (secondary stablecoin)\n const getPYUSDToken = useCallback((): TokenInfo | undefined => {\n return getTokenBySymbol('PYUSD')\n }, [getTokenBySymbol])\n\n // Get SOL token (native token)\n const getSOLToken = useCallback((): TokenInfo | undefined => {\n return getTokenBySymbol('SOL')\n }, [getTokenBySymbol])\n\n // Get all stablecoins\n const getStablecoins = useCallback((): TokenInfo[] => {\n return tokens.filter((token) => ['USDC', 'PYUSD'].includes(token.symbol))\n }, [tokens])\n\n // Refresh tokens (bypass cache)\n const refreshTokens = useCallback(async () => {\n setLastFetched(null) // Clear cache\n return await fetchSupportedTokens()\n }, [fetchSupportedTokens])\n\n // Check if cache is stale\n const isCacheStale = useCallback((): boolean => {\n if (!lastFetched) return true\n return Date.now() - lastFetched > CACHE_DURATION\n }, [lastFetched])\n\n // Get token with formatted info for display\n const getTokenDisplayInfo = useCallback((token: TokenInfo) => {\n return {\n ...token,\n displayName: `${token.name} (${token.symbol})`,\n shortAddress: `${token.mint.slice(0, 4)}...${token.mint.slice(-4)}`,\n decimalPlaces: token.decimals,\n }\n }, [])\n\n const getTokenPrice = useCallback(\n (symbol: string): number => {\n const token = getTokenBySymbol(symbol)\n if (!token) return 0\n const price =\n token.price ?? 0\n return typeof price === 'number' ? price : Number(price)\n },\n [getTokenBySymbol]\n )\n\n // Calculate token amount from USD amount\n const calculateTokenAmount = useCallback(\n (usdAmount: number, tokenSymbol: string): string => {\n const token = getTokenBySymbol(tokenSymbol)\n const price = getTokenPrice(tokenSymbol)\n\n if (!token || price === 0) return '0'\n\n const tokenAmount = usdAmount / price\n const tokenAmountInSmallestUnit =\n tokenAmount * Math.pow(10, token.decimals)\n\n return Math.floor(tokenAmountInSmallestUnit).toString()\n },\n [getTokenBySymbol, getTokenPrice]\n )\n\n // Format token amount for display\n const formatTokenAmount = useCallback(\n (amount: string, tokenSymbol: string): string => {\n const token = getTokenBySymbol(tokenSymbol)\n if (!token) return '0'\n\n const numericAmount = parseFloat(amount)\n const displayAmount = numericAmount / Math.pow(10, token.decimals)\n\n return displayAmount.toFixed(token.decimals <= 6 ? token.decimals : 6)\n },\n [getTokenBySymbol]\n )\n\n return {\n tokens,\n isLoading,\n error,\n lastFetched,\n fetchSupportedTokens,\n refreshTokens,\n getTokenBySymbol,\n getTokenByMint,\n isTokenSupported,\n getUSDCToken,\n getPYUSDToken,\n getSOLToken,\n getStablecoins,\n getTokenDisplayInfo,\n getTokenPrice,\n calculateTokenAmount,\n formatTokenAmount,\n isCacheStale,\n hasTokens: tokens.length > 0,\n tokenCount: tokens.length,\n }\n}\n","import React, { useCallback, useEffect, useMemo, useState } from 'react'\nimport { ArrowLeft, Loader2 } from 'lucide-react'\nimport type { SubmitPaymentResponse, TokenInfo } from '../types'\nimport { QRCodePayment } from './QRCodePayment'\nimport { PaymentStatus } from './PaymentStatus'\nimport { useSupportedTokens } from '../hooks/useSupportedTokens'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select'\nimport { Button } from '@/components/ui/button'\nimport { usePaymentNotifications } from '../hooks/usePaymentNotifications'\n\ntype SolanaFlowState = 'selecting' | 'processing' | 'confirming' | 'success' | 'error'\n\nexport interface SolanaPaymentViewProps {\n priceId: string\n usdAmount: number\n onSuccess: (result: SubmitPaymentResponse | string) => void\n onError?: (error: string) => void\n onClose?: () => void\n}\n\nexport const SolanaPaymentView: React.FC<SolanaPaymentViewProps> = ({\n priceId,\n usdAmount,\n onSuccess,\n onError,\n onClose,\n}) => {\n const { notifyStatus, notifyError, notifySuccess } = usePaymentNotifications()\n const [paymentState, setPaymentState] = useState<SolanaFlowState>('selecting')\n const [errorMessage, setErrorMessage] = useState<string | null>(null)\n const [transactionId, setTransactionId] = useState<string | null>(null)\n const [tokenAmount, setTokenAmount] = useState(0)\n const [selectedTokenSymbol, setSelectedTokenSymbol] = useState<string | null>(null)\n\n const {\n tokens,\n isLoading: tokensLoading,\n error: tokensError,\n } = useSupportedTokens()\n\n const selectedToken = useMemo<TokenInfo | null>(() => {\n if (!tokens.length) return null\n const explicit = tokens.find((token) => token.symbol === selectedTokenSymbol)\n return explicit || tokens[0]\n }, [tokens, selectedTokenSymbol])\n\n useEffect(() => {\n if (!selectedTokenSymbol && tokens.length) {\n const defaultToken =\n tokens.find((token) => token.symbol === 'SOL') || tokens[0]\n setSelectedTokenSymbol(defaultToken.symbol)\n }\n }, [tokens, selectedTokenSymbol])\n\n const handlePaymentSuccess = useCallback(\n (result: SubmitPaymentResponse | string, txId?: string) => {\n const resolvedTx = txId || (typeof result === 'string' ? result : result.transaction_id)\n setTransactionId(resolvedTx)\n setPaymentState('success')\n setErrorMessage(null)\n\n const payload =\n typeof result === 'string'\n ? {\n transactionId: resolvedTx,\n processor: 'solana',\n metadata: { source: 'solana-pay' },\n }\n : {\n transactionId: result.transaction_id,\n intentId: result.intent_id,\n processor: 'solana',\n metadata: {\n purchaseId: result.purchase_id,\n amount: result.amount,\n currency: result.currency,\n },\n }\n\n notifyStatus('success', { source: 'solana' })\n notifySuccess(payload)\n\n setTimeout(() => {\n onSuccess(result)\n }, 1500)\n },\n [notifyStatus, notifySuccess, onSuccess]\n )\n\n const handlePaymentError = useCallback(\n (error: string) => {\n setPaymentState('error')\n setErrorMessage(error)\n notifyStatus('error', { source: 'solana' })\n notifyError(error)\n onError?.(error)\n },\n [notifyError, notifyStatus, onError]\n )\n\n const resetState = useCallback(() => {\n setPaymentState('selecting')\n setErrorMessage(null)\n setTransactionId(null)\n }, [])\n\n const handleRetry = useCallback(() => {\n resetState()\n }, [resetState])\n\n const handleClose = useCallback(() => {\n if (paymentState === 'processing' || paymentState === 'confirming') {\n return\n }\n\n resetState()\n onClose?.()\n }, [paymentState, onClose, resetState])\n\n useEffect(() => {\n if (!selectedToken || usdAmount === 0) {\n setTokenAmount(0)\n return\n }\n\n const price = selectedToken.price ?? 0\n if (!price || price <= 0) {\n setTokenAmount(0)\n return\n }\n\n setTokenAmount(usdAmount / price)\n }, [usdAmount, selectedToken])\n\n const handleTokenChange = useCallback((value: string) => {\n setSelectedTokenSymbol(value)\n }, [])\n\n const renderBody = () => {\n if (paymentState !== 'selecting') {\n return (\n <PaymentStatus\n state={paymentState}\n usdAmount={usdAmount}\n solAmount={tokenAmount}\n onRetry={handleRetry}\n onClose={handleClose}\n errorMessage={errorMessage}\n transactionId={transactionId}\n />\n )\n }\n\n if (tokensLoading) {\n return (\n <div className=\"flex items-center justify-center py-10 text-sm text-muted-foreground\">\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" /> Loading supported tokens…\n </div>\n )\n }\n\n if (tokensError) {\n return <p className=\"text-sm text-destructive\">{tokensError}</p>\n }\n\n if (!tokens.length) {\n return <p className=\"text-sm text-muted-foreground\">No payment tokens available.</p>\n }\n\n return (\n <div className=\"space-y-6\">\n <div className=\"space-y-1 text-center\">\n <p className=\"text-sm text-muted-foreground\">Amount due</p>\n <p className=\"text-3xl font-semibold text-foreground\">${usdAmount.toFixed(2)} USD</p>\n {selectedToken && tokenAmount > 0 && (\n <p className=\"text-sm text-muted-foreground\">\n ≈ {tokenAmount.toFixed(selectedToken.symbol === 'SOL' ? 4 : 2)} {selectedToken.symbol}\n </p>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium text-foreground\">Select token</p>\n <Select value={selectedToken?.symbol ?? ''} onValueChange={handleTokenChange}>\n <SelectTrigger>\n <SelectValue placeholder=\"Select token\" />\n </SelectTrigger>\n <SelectContent className=\"max-h-64\">\n {tokens.map((token) => (\n <SelectItem key={token.symbol} value={token.symbol}>\n {token.name} ({token.symbol})\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n <QRCodePayment\n priceId={priceId}\n selectedToken={selectedToken}\n onPaymentError={handlePaymentError}\n onPaymentSuccess={handlePaymentSuccess}\n />\n </div>\n )\n }\n\n return (\n <div className=\"space-y-6\">\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"space-y-1\">\n <p className=\"text-xs uppercase tracking-wide text-muted-foreground\">Solana Pay checkout</p>\n <p className=\"text-2xl font-semibold text-foreground\">Pay with Solana</p>\n <p className=\"text-sm text-muted-foreground\">\n Choose a supported token and send the payment via Solana Pay QR code.\n </p>\n </div>\n {onClose && (\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n onClick={handleClose}\n disabled={paymentState === 'processing' || paymentState === 'confirming'}\n className=\"h-8 px-2 text-sm\"\n >\n <ArrowLeft className=\"mr-2 h-4 w-4\" /> Back\n </Button>\n )}\n </div>\n {renderBody()}\n </div>\n )\n}\n","import React, { useCallback, useEffect, useState } from 'react'\nimport { Sparkles } from 'lucide-react'\nimport type { BillingDetails, PaymentMethod, SubmitPaymentResponse } from '../types'\nimport { CardDetailsForm } from './CardDetailsForm'\nimport { StoredPaymentMethods } from './StoredPaymentMethods'\nimport { Button } from '@/components/ui/button'\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'\nimport { usePaymentNotifications } from '../hooks/usePaymentNotifications'\nimport { SolanaPaymentView } from './SolanaPaymentView'\n\ntype AsyncStatus = 'idle' | 'processing' | 'success' | 'error'\n\nexport interface PaymentExperienceProps {\n priceId: string\n usdAmount: number\n onNewCardPayment?: (payload: {\n token: string\n billing: BillingDetails\n }) => Promise<void> | void\n onSavedMethodPayment?: (payload: {\n paymentMethodId: string\n amount: number\n }) => Promise<void> | void\n enableNewCard?: boolean\n enableStoredMethods?: boolean\n enableSolanaPay?: boolean\n onSolanaSuccess?: (result: SubmitPaymentResponse | string) => void\n onSolanaError?: (error: string) => void\n initialMode?: 'cards' | 'solana'\n}\n\nexport const PaymentExperience: React.FC<PaymentExperienceProps> = ({\n priceId,\n usdAmount,\n onNewCardPayment,\n onSavedMethodPayment,\n enableNewCard = true,\n enableStoredMethods = true,\n enableSolanaPay = true,\n onSolanaSuccess,\n onSolanaError,\n initialMode = 'cards',\n}) => {\n const showNewCard = enableNewCard && Boolean(onNewCardPayment)\n const showStored = enableStoredMethods && Boolean(onSavedMethodPayment)\n const defaultTab = showStored ? 'saved' : 'new'\n const [activeTab, setActiveTab] = useState<'saved' | 'new'>(defaultTab)\n const [mode, setMode] = useState<'cards' | 'solana'>(() =>\n initialMode === 'solana' && enableSolanaPay ? 'solana' : 'cards'\n )\n const [selectedMethodId, setSelectedMethodId] = useState<string | null>(null)\n const [savedStatus, setSavedStatus] = useState<AsyncStatus>('idle')\n const [savedError, setSavedError] = useState<string | null>(null)\n const [newCardStatus, setNewCardStatus] = useState<AsyncStatus>('idle')\n const [newCardError, setNewCardError] = useState<string | null>(null)\n const { notifyStatus, notifySuccess, notifyError } = usePaymentNotifications()\n\n useEffect(() => {\n setActiveTab(showStored ? 'saved' : 'new')\n }, [showStored])\n\n useEffect(() => {\n if (!enableSolanaPay) {\n setMode('cards')\n return\n }\n\n if (initialMode === 'solana') {\n setMode('solana')\n } else {\n setMode('cards')\n }\n }, [enableSolanaPay, initialMode])\n\n const handleMethodSelect = useCallback((method: PaymentMethod) => {\n setSelectedMethodId(method.id)\n setSavedStatus('idle')\n setSavedError(null)\n }, [])\n\n const handleSavedPayment = useCallback(async () => {\n if (!onSavedMethodPayment || !selectedMethodId) return\n try {\n setSavedStatus('processing')\n setSavedError(null)\n notifyStatus('processing', { source: 'saved-payment' })\n await onSavedMethodPayment({\n paymentMethodId: selectedMethodId,\n amount: usdAmount,\n })\n setSavedStatus('success')\n notifyStatus('success', { source: 'saved-payment' })\n } catch (error) {\n const message =\n error instanceof Error\n ? error.message\n : 'Unable to complete payment with saved card'\n setSavedStatus('error')\n setSavedError(message)\n notifyStatus('error', { source: 'saved-payment' })\n notifyError(message)\n }\n }, [notifyError, notifyStatus, onSavedMethodPayment, selectedMethodId, usdAmount])\n\n const handleNewCardTokenize = useCallback(\n async (token: string, billing: BillingDetails) => {\n if (!onNewCardPayment) return\n try {\n setNewCardStatus('processing')\n setNewCardError(null)\n notifyStatus('processing', { source: 'new-card' })\n await onNewCardPayment({ token, billing })\n setNewCardStatus('success')\n notifyStatus('success', { source: 'new-card' })\n } catch (error) {\n const message =\n error instanceof Error ? error.message : 'Unable to complete payment'\n setNewCardStatus('error')\n setNewCardError(message)\n notifyStatus('error', { source: 'new-card' })\n notifyError(message)\n }\n },\n [notifyError, notifyStatus, onNewCardPayment]\n )\n\n const showSolanaView = useCallback(() => {\n if (!enableSolanaPay) return\n setMode('solana')\n }, [enableSolanaPay])\n\n const exitSolanaView = useCallback(() => {\n setMode('cards')\n }, [])\n\n const handleSolanaSuccess = useCallback(\n (result: SubmitPaymentResponse | string) => {\n onSolanaSuccess?.(result)\n exitSolanaView()\n },\n [exitSolanaView, onSolanaSuccess]\n )\n\n const handleSolanaError = useCallback(\n (error: string) => {\n onSolanaError?.(error)\n },\n [onSolanaError]\n )\n\n const renderSavedTab = () => {\n if (!showStored) {\n return (\n <p className=\"text-sm text-muted-foreground\">\n Saved payment methods are unavailable right now. Add a new card to get started.\n </p>\n )\n }\n\n return (\n <div className=\"space-y-4\">\n <StoredPaymentMethods\n heading=\"Saved cards\"\n selectedMethodId={selectedMethodId}\n onMethodSelect={handleMethodSelect}\n description=\"Select one of your stored payment methods.\"\n showAddButton={false}\n />\n\n <Button\n className=\"w-full\"\n disabled={!selectedMethodId || savedStatus === 'processing'}\n onClick={handleSavedPayment}\n >\n {savedStatus === 'processing' ? 'Processing…' : 'Pay with selected card'}\n </Button>\n {savedError && <p className=\"text-sm text-destructive\">{savedError}</p>}\n </div>\n )\n }\n\n const renderNewTab = () => {\n if (!showNewCard) {\n return (\n <p className=\"text-sm text-muted-foreground\">\n Select a subscription plan to add a new card.\n </p>\n )\n }\n\n return (\n <CardDetailsForm\n visible\n submitLabel=\"Pay now\"\n externalError={newCardError}\n onTokenize={handleNewCardTokenize}\n submitting={newCardStatus === 'processing'}\n />\n )\n }\n\n const renderCardExperience = () => (\n <>\n <Tabs\n value={activeTab}\n onValueChange={(value) => setActiveTab(value as 'saved' | 'new')}\n className=\"space-y-3\"\n >\n <TabsList className=\"grid w-full grid-cols-2 border border-border/60\">\n <TabsTrigger value=\"saved\" disabled={!showStored}>\n Use saved card\n </TabsTrigger>\n <TabsTrigger value=\"new\" disabled={!showNewCard}>\n Add new card\n </TabsTrigger>\n </TabsList>\n <TabsContent value=\"saved\" className=\"space-y-4\">\n {renderSavedTab()}\n </TabsContent>\n <TabsContent value=\"new\" className=\"space-y-4\">\n {renderNewTab()}\n </TabsContent>\n </Tabs>\n\n {enableSolanaPay && (\n <Button className=\"w-full\" variant=\"secondary\" onClick={showSolanaView}>\n <Sparkles className=\"mr-2 h-4 w-4\" /> Pay with Solana\n </Button>\n )}\n </>\n )\n\n\treturn (\n\t\t<div className=\"space-y-6 pt-4\">\n\t\t\t{mode === 'cards' && renderCardExperience()}\n\t\t\t{mode === 'solana' && enableSolanaPay && (\n\t\t\t\t<SolanaPaymentView\n\t\t\t\t\tpriceId={priceId}\n\t\t\t\t\tusdAmount={usdAmount}\n\t\t\t\t\tonSuccess={handleSolanaSuccess}\n\t\t\t\t\tonError={handleSolanaError}\n\t\t\t\t\tonClose={exitSolanaView}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n","import React from 'react'\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n} from '@/components/ui/dialog'\nimport { Button } from '@/components/ui/button'\nimport { CheckCircle } from 'lucide-react'\n\ninterface SubscriptionSuccessDialogProps {\n open: boolean\n planName?: string\n amountLabel?: string\n billingPeriodLabel?: string\n onClose: () => void\n}\n\nexport const SubscriptionSuccessDialog: React.FC<SubscriptionSuccessDialogProps> = ({\n open,\n planName = 'Premium Plan',\n amountLabel = '$0.00',\n billingPeriodLabel = 'billing period',\n onClose,\n}) => {\n return (\n <Dialog open={open} onOpenChange={(value) => {\n if (!value) onClose()\n }}>\n <DialogContent className=\"w-full max-w-md overflow-hidden border border-border/70 bg-background/95 p-0 shadow-2xl\">\n <div className=\"bg-gradient-to-b from-primary/25 via-primary/10 to-background px-6 py-8 text-center\">\n <div className=\"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-background/60\">\n <CheckCircle className=\"h-10 w-10 text-primary\" />\n </div>\n <DialogHeader>\n <DialogTitle className=\"text-2xl font-semibold text-foreground\">\n Subscription activated\n </DialogTitle>\n <DialogDescription className=\"text-base text-muted-foreground\">\n You now have access to {planName}. Billing: {amountLabel} / {billingPeriodLabel}.\n </DialogDescription>\n </DialogHeader>\n </div>\n <div className=\"px-6 py-6\">\n <Button className=\"w-full\" onClick={onClose}>\n Continue exploring\n </Button>\n </div>\n </DialogContent>\n </Dialog>\n )\n}\n","import { useCallback } from 'react'\nimport { usePaymentContext } from '../context/PaymentContext'\nimport type { BillingDetails } from '../types/billing'\nimport type {\n CheckoutRequestPayload,\n CheckoutResponse,\n} from '../types/subscription'\n\nexport interface SubscribeWithCardParams {\n priceId?: string | null\n processor?: string\n provider?: string\n paymentToken: string\n billing: BillingDetails\n}\n\nexport interface SubscribeWithSavedMethodParams {\n priceId?: string | null\n processor?: string\n provider?: string\n paymentMethodId: string\n email?: string\n}\n\nexport interface SubscribeWithCCBillParams {\n priceId?: string | null\n email: string\n firstName: string\n lastName: string\n zipCode: string\n country: string\n processor?: string\n}\n\nexport const useSubscriptionActions = () => {\n const { client } = usePaymentContext()\n\n const ensurePrice = (priceId?: string | null) => {\n if (!priceId) {\n throw new Error('payments-ui: priceId is required for subscription actions')\n }\n return priceId\n }\n\n const subscribeWithCard = useCallback(\n async ({\n priceId,\n processor = 'nmi',\n provider,\n paymentToken,\n billing,\n }: SubscribeWithCardParams): Promise<CheckoutResponse> => {\n const payload: CheckoutRequestPayload = {\n price_id: ensurePrice(priceId),\n processor,\n provider,\n payment_token: paymentToken,\n email: billing.email,\n first_name: billing.firstName,\n last_name: billing.lastName,\n address1: billing.address1,\n city: billing.city,\n state: billing.stateRegion,\n zip: billing.postalCode,\n country: billing.country,\n }\n return client.checkout(payload)\n },\n [client]\n )\n\n const subscribeWithSavedMethod = useCallback(\n async ({\n priceId,\n processor = 'nmi',\n provider,\n paymentMethodId,\n email,\n }: SubscribeWithSavedMethodParams): Promise<CheckoutResponse> => {\n const payload: CheckoutRequestPayload = {\n price_id: ensurePrice(priceId),\n processor,\n provider,\n payment_method_id: paymentMethodId,\n email,\n }\n return client.checkout(payload)\n },\n [client]\n )\n\n const subscribeWithCCBill = useCallback(\n async ({\n priceId,\n email,\n firstName,\n lastName,\n zipCode,\n country,\n processor = 'ccbill',\n }: SubscribeWithCCBillParams): Promise<CheckoutResponse> => {\n const payload: CheckoutRequestPayload = {\n price_id: ensurePrice(priceId),\n processor,\n email,\n first_name: firstName,\n last_name: lastName,\n zip: zipCode,\n country,\n }\n return client.checkout(payload)\n },\n [client]\n )\n\n return {\n subscribeWithCard,\n subscribeWithSavedMethod,\n subscribeWithCCBill,\n }\n}\n","import React, { useCallback, useState } from 'react'\nimport { Dialog, DialogContent } from '@/components/ui/dialog'\nimport { AlertCircle } from 'lucide-react'\nimport { PaymentExperience } from '../PaymentExperience'\nimport { SubscriptionSuccessDialog } from './SubscriptionSuccessDialog'\nimport { useSubscriptionActions } from '../../hooks/useSubscriptionActions'\nimport type { BillingDetails, SubmitPaymentResponse } from '../../types'\n\nexport interface SubscriptionCheckoutModalProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n priceId?: string | null\n usdAmount?: number\n planName?: string\n amountLabel?: string\n billingPeriodLabel?: string\n userEmail?: string | null\n provider?: string\n onSuccess?: () => void\n enableSolanaPay?: boolean\n onSolanaSuccess?: (result: SubmitPaymentResponse | string) => void\n onSolanaError?: (error: string) => void\n initialMode?: 'cards' | 'solana'\n}\n\nexport const SubscriptionCheckoutModal: React.FC<SubscriptionCheckoutModalProps> = ({\n open,\n onOpenChange,\n priceId,\n usdAmount = 0,\n planName,\n amountLabel,\n billingPeriodLabel,\n userEmail,\n provider = 'mobius',\n onSuccess,\n enableSolanaPay = true,\n onSolanaSuccess,\n onSolanaError,\n initialMode = 'cards',\n}) => {\n const [showSuccess, setShowSuccess] = useState(false)\n const { subscribeWithCard, subscribeWithSavedMethod } = useSubscriptionActions()\n\n const handleClose = useCallback(\n (nextOpen: boolean) => {\n onOpenChange(nextOpen)\n if (!nextOpen) setShowSuccess(false)\n },\n [onOpenChange]\n )\n\n const ensurePrice = () => {\n if (!priceId) throw new Error('Select a plan before subscribing.')\n return priceId\n }\n\n const notifySuccess = (result?: SubmitPaymentResponse | string) => {\n setShowSuccess(true)\n onSuccess?.()\n if (result && typeof window !== 'undefined') {\n console.debug('[payments-ui] subscription success', result)\n }\n }\n\n const assertCheckoutSuccess = (status: string, message?: string) => {\n if (status === 'blocked') {\n throw new Error(message || 'This subscription cannot be completed right now.')\n }\n if (status === 'redirect_required') {\n throw new Error(message || 'Additional action required in an alternate flow.')\n }\n }\n\n const handleNewCardPayment = async ({ token, billing }: { token: string; billing: BillingDetails }) => {\n const response = await subscribeWithCard({\n priceId: ensurePrice(),\n provider,\n paymentToken: token,\n billing,\n })\n assertCheckoutSuccess(response.status, response.message)\n notifySuccess()\n }\n\n const handleSavedMethodPayment = async ({ paymentMethodId }: { paymentMethodId: string }) => {\n const response = await subscribeWithSavedMethod({\n priceId: ensurePrice(),\n provider,\n paymentMethodId,\n email: userEmail ?? '',\n })\n assertCheckoutSuccess(response.status, response.message)\n notifySuccess()\n }\n\n const solanaSuccess = (result: SubmitPaymentResponse | string) => {\n notifySuccess(result)\n onSolanaSuccess?.(result)\n onOpenChange(false)\n }\n\n const solanaError = (error: string) => {\n onSolanaError?.(error)\n }\n\n return (\n <>\n <Dialog open={open} onOpenChange={handleClose}>\n <DialogContent \n className=\"max-w-3xl max-h-[90vh] overflow-y-auto p-0 [&::-webkit-scrollbar]:hidden\"\n >\n <div className=\"p-6 space-y-6\">\n {!priceId && (\n <div className=\"flex items-center gap-2 rounded-lg border border-destructive/40 bg-destructive/10 px-3 py-2 text-sm text-destructive\">\n <AlertCircle className=\"h-4 w-4\" /> Select a subscription plan to continue.\n </div>\n )}\n <PaymentExperience\n usdAmount={usdAmount}\n priceId={priceId ?? ''}\n onSolanaSuccess={solanaSuccess}\n onSolanaError={solanaError}\n enableNewCard={Boolean(priceId)}\n enableStoredMethods={Boolean(priceId)}\n enableSolanaPay={enableSolanaPay && Boolean(priceId)}\n onNewCardPayment={priceId ? handleNewCardPayment : undefined}\n onSavedMethodPayment={priceId ? handleSavedMethodPayment : undefined}\n initialMode={initialMode}\n />\n </div>\n </DialogContent>\n </Dialog>\n <SubscriptionSuccessDialog\n open={showSuccess}\n onClose={() => setShowSuccess(false)}\n planName={planName}\n amountLabel={amountLabel ?? `$${usdAmount.toFixed(2)}`}\n billingPeriodLabel={billingPeriodLabel}\n />\n </>\n )\n}\n","import { useState } from 'react'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from '@/components/ui/dialog'\nimport { ChevronDown, ChevronUp, Wallet } from 'lucide-react'\nimport { Button } from '@/components/ui/button'\n\ninterface WalletDefinition {\n id: string\n name: string\n icon: string\n}\n\nconst wallets: WalletDefinition[] = [\n {\n id: 'phantom',\n name: 'Phantom',\n icon: 'https://phantom.app/img/logo.png',\n },\n {\n id: 'solflare',\n name: 'Solflare',\n icon: 'https://solflare.com/favicon.ico',\n },\n]\n\nexport interface WalletModalProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n}\n\nexport const WalletModal: React.FC<WalletModalProps> = ({ open, onOpenChange }) => {\n const [expandedWallet, setExpandedWallet] = useState<string | null>(null)\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"w-full max-w-lg max-h-[90vh] overflow-y-auto rounded-md border border-border/70 bg-background/95 p-0 shadow-2xl [&::-webkit-scrollbar]:hidden\">\n <DialogHeader className=\"border-b border-border/40 bg-gradient-to-r from-primary/10 via-background to-background px-6 py-5 text-left\">\n <DialogTitle className=\"flex items-center gap-2 text-foreground\">\n <Wallet className=\"h-5 w-5 text-primary\" /> Connect a Solana wallet\n </DialogTitle>\n <DialogDescription className=\"text-sm text-muted-foreground\">\n Pick a supported wallet to link with Doujins. Verified wallets unlock Solana payments and withdrawals.\n </DialogDescription>\n </DialogHeader>\n <div className=\"p-6 space-y-4\">\n {wallets.map((wallet) => (\n <div\n key={wallet.id}\n className=\"rounded-2xl border border-border/60 bg-background/80 p-4 shadow-sm\"\n >\n <button\n className=\"flex w-full items-center justify-between\"\n onClick={() =>\n setExpandedWallet((prev) => (prev === wallet.id ? null : wallet.id))\n }\n >\n <div className=\"flex items-center gap-3 text-left\">\n <img src={wallet.icon} alt={wallet.name} className=\"h-10 w-10 rounded-full\" />\n <div>\n <p className=\"text-base font-semibold text-foreground\">{wallet.name}</p>\n <p className=\"text-sm text-muted-foreground\">Browser extension or mobile app</p>\n </div>\n </div>\n {expandedWallet === wallet.id ? (\n <ChevronUp className=\"h-4 w-4 text-muted-foreground\" />\n ) : (\n <ChevronDown className=\"h-4 w-4 text-muted-foreground\" />\n )}\n </button>\n {expandedWallet === wallet.id && (\n <div className=\"mt-4 space-y-3 text-sm text-muted-foreground\">\n <p>\n Open the {wallet.name} wallet, approve the connection request, and confirm the signature prompt to finish linking.\n </p>\n <Button className=\"w-full\" variant=\"outline\" disabled>\n Connect with {wallet.name} (coming soon)\n </Button>\n </div>\n )}\n </div>\n ))}\n <div className=\"rounded-2xl border border-border/60 bg-muted/10 p-4 text-xs text-muted-foreground\">\n Don’t see your wallet? Additional providers will be added soon. Contact support if you need manual verification.\n </div>\n </div>\n </DialogContent>\n </Dialog>\n )\n}\n","import React, { createContext, useContext, useMemo, useState } from 'react'\nimport {\n SubscriptionCheckoutModal,\n type SubscriptionCheckoutModalProps,\n} from '../components/checkout/SubscriptionCheckoutModal'\nimport type { SolanaPaymentSelectorProps } from '../components/SolanaPaymentSelector'\nimport {\n WalletModal,\n type WalletModalProps,\n} from '../components/subscribe/WalletModal'\n\ntype CheckoutOptions = Omit<SubscriptionCheckoutModalProps, 'open' | 'onOpenChange'>\ntype SolanaOptions = Omit<SolanaPaymentSelectorProps, 'isOpen' | 'onClose'>\ntype WalletOptions = Omit<WalletModalProps, 'open' | 'onOpenChange'>\n\ninterface DialogState<T> {\n isOpen: boolean\n props: T | null\n}\n\nconst createDialogState = <T,>(): DialogState<T> => ({\n isOpen: false,\n props: null,\n})\n\ninterface PaymentsDialogContextValue {\n checkout: {\n open: (options: CheckoutOptions) => void\n close: () => void\n isOpen: boolean\n }\n solana: {\n open: (options: SolanaOptions) => void\n close: () => void\n isOpen: boolean\n }\n wallet: {\n open: (options?: WalletOptions) => void\n close: () => void\n isOpen: boolean\n }\n}\n\nconst PaymentsDialogContext =\n createContext<PaymentsDialogContextValue | undefined>(undefined)\n\nexport const PaymentsDialogProvider: React.FC<React.PropsWithChildren> = ({\n children,\n}) => {\n const [checkoutState, setCheckoutState] = useState<DialogState<CheckoutOptions>>(\n () => createDialogState<CheckoutOptions>()\n )\n const [walletState, setWalletState] = useState<DialogState<WalletOptions>>(\n () => createDialogState<WalletOptions>()\n )\n\n const contextValue = useMemo<PaymentsDialogContextValue>(() => {\n const openCheckout = (options: CheckoutOptions) =>\n setCheckoutState({\n isOpen: true,\n props: options,\n })\n\n return {\n checkout: {\n isOpen: checkoutState.isOpen,\n open: openCheckout,\n close: () => setCheckoutState(createDialogState<CheckoutOptions>()),\n },\n solana: {\n isOpen:\n checkoutState.isOpen && checkoutState.props?.initialMode === 'solana',\n open: (options) =>\n openCheckout({\n priceId: options.priceId,\n usdAmount: options.usdAmount,\n enableSolanaPay: true,\n initialMode: 'solana',\n onSolanaSuccess: options.onSuccess,\n onSolanaError: options.onError,\n }),\n close: () => setCheckoutState(createDialogState<CheckoutOptions>()),\n },\n wallet: {\n isOpen: walletState.isOpen,\n open: (options) =>\n setWalletState({\n isOpen: true,\n props: options ?? null,\n }),\n close: () => setWalletState(createDialogState<WalletOptions>()),\n },\n }\n }, [checkoutState, walletState.isOpen])\n\n return (\n <PaymentsDialogContext.Provider value={contextValue}>\n {children}\n {checkoutState.props && (\n <SubscriptionCheckoutModal\n open={checkoutState.isOpen}\n onOpenChange={(open) =>\n open\n ? setCheckoutState((prev) => ({ ...prev, isOpen: true }))\n : setCheckoutState(createDialogState<CheckoutOptions>())\n }\n {...checkoutState.props}\n />\n )}\n\n <WalletModal\n open={walletState.isOpen}\n onOpenChange={(open) =>\n open\n ? setWalletState((prev) => ({ ...prev, isOpen: true }))\n : setWalletState(createDialogState<WalletOptions>())\n }\n {...(walletState.props ?? {})}\n />\n </PaymentsDialogContext.Provider>\n )\n}\n\nexport const usePaymentDialogs = (): PaymentsDialogContextValue => {\n const context = useContext(PaymentsDialogContext)\n if (!context) {\n throw new Error('usePaymentDialogs must be used within PaymentProvider')\n }\n return context\n}\n","import React, { createContext, useContext, useEffect, useMemo } from 'react'\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query'\nimport type { PaymentConfig } from '../types/config'\nimport { loadCollectJs } from '../utils/collect'\nimport { createClient, type Client } from '../lib/client'\nimport {\n ConnectionProvider,\n WalletProvider,\n} from '@solana/wallet-adapter-react'\nimport { WalletModalProvider } from '@solana/wallet-adapter-react-ui'\nimport '@solana/wallet-adapter-react-ui/styles.css'\nimport {\n WalletAdapterNetwork,\n type WalletAdapter,\n} from '@solana/wallet-adapter-base'\nimport { clusterApiUrl } from '@solana/web3.js'\nimport { PhantomWalletAdapter } from '@solana/wallet-adapter-phantom'\nimport { SolflareWalletAdapter } from '@solana/wallet-adapter-solflare'\nimport { TrustWalletAdapter } from '@solana/wallet-adapter-trust'\nimport { CoinbaseWalletAdapter } from '@solana/wallet-adapter-coinbase'\nimport { PaymentsDialogProvider } from './PaymentsDialogContext'\n\nexport interface PaymentContextValue {\n config: PaymentConfig\n client: Client\n queryClient: QueryClient\n}\n\nexport const PaymentContext = createContext<PaymentContextValue | undefined>(undefined)\n\nexport interface PaymentProviderProps {\n config: PaymentConfig\n children: React.ReactNode\n}\n\nexport const PaymentProvider: React.FC<PaymentProviderProps> = ({\n config,\n children,\n}) => {\n const queryClient = useMemo(() => {\n return new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: 30_000,\n gcTime: 5 * 60_000,\n refetchOnWindowFocus: false,\n retry: 1,\n },\n mutations: {\n retry: 1,\n },\n },\n })\n }, [])\n\n const client = useMemo(() => {\n const authProvider = config.getAuthToken\n ? async () => {\n try {\n const result = config.getAuthToken?.()\n if (result instanceof Promise) {\n return (await result) ?? null\n }\n return result ?? null\n } catch (error) {\n console.warn('payments-ui: failed to resolve auth token', error)\n return null\n }\n }\n : undefined\n\n const wrappedFetch = config.fetcher\n ? ((input: RequestInfo | URL, init?: RequestInit) => {\n const normalizedInput = input instanceof URL ? input.toString() : input\n return config.fetcher!(normalizedInput as RequestInfo, init)\n })\n : undefined\n\n return createClient({\n billingBaseUrl: config.endpoints.billingBaseUrl,\n accountBaseUrl: config.endpoints.accountBaseUrl,\n getAuthToken: authProvider,\n defaultHeaders: config.defaultHeaders,\n fetch: wrappedFetch,\n })\n }, [config])\n\n const solanaEndpoint = useMemo(() => {\n if (config.solana?.endpoint) return config.solana.endpoint\n const network = config.solana?.network ?? WalletAdapterNetwork.Mainnet\n return clusterApiUrl(network)\n }, [config.solana?.endpoint, config.solana?.network])\n\n const walletAdapters = useMemo<WalletAdapter[]>(() => {\n if (config.solana?.wallets?.length) {\n return config.solana.wallets\n }\n \n return [\n new PhantomWalletAdapter(),\n new SolflareWalletAdapter(),\n new TrustWalletAdapter(),\n new CoinbaseWalletAdapter(),\n ]\n }, [config.solana?.wallets])\n\n const autoConnect = config.solana?.autoConnect ?? true\n\n const value = useMemo<PaymentContextValue>(() => {\n return {\n config,\n client,\n queryClient,\n }\n }, [client, config, queryClient])\n\n useEffect(() => {\n if (!config.collectJsKey) return\n loadCollectJs(config.collectJsKey)\n }, [config.collectJsKey])\n\n return (\n <PaymentContext.Provider value={value}>\n <QueryClientProvider client={queryClient}>\n <ConnectionProvider endpoint={solanaEndpoint} config={{ commitment: 'confirmed' }}>\n <WalletProvider wallets={walletAdapters} autoConnect={autoConnect}>\n <WalletModalProvider>\n <PaymentsDialogProvider>{children}</PaymentsDialogProvider>\n </WalletModalProvider>\n </WalletProvider>\n </ConnectionProvider>\n </QueryClientProvider>\n </PaymentContext.Provider>\n )\n}\n\nexport const usePaymentContext = (): PaymentContextValue => {\n const context = useContext(PaymentContext)\n if (!context) {\n throw new Error('usePaymentContext must be used within a PaymentProvider')\n }\n return context\n}\n","import React from 'react'\nimport { cn } from '../lib/utils'\n\nexport interface BillingThemeProviderProps {\n children: React.ReactNode\n className?: string\n /**\n * When true, applies the dark theme variant\n * @default false\n */\n dark?: boolean\n}\n\n/**\n * Scopes the Payments UI theme variables so host app styles are left intact.\n * Use this to wrap any Payments UI components to ensure styles don't conflict\n * with the consuming application.\n * \n * @example\n * ```tsx\n * <BillingThemeProvider>\n * <SubscriptionCheckoutModal ... />\n * </BillingThemeProvider>\n * ```\n */\nexport const BillingThemeProvider: React.FC<BillingThemeProviderProps> = ({\n children,\n className,\n dark = false,\n}) => {\n return (\n <div\n className={cn(\n 'payments-ui-root',\n dark && 'dark',\n className\n )}\n >\n {children}\n </div>\n )\n}\n\n/**\nprevent conflicts with client app styles\n */\nexport const BillingThemePortal: React.FC<BillingThemeProviderProps> = ({\n children,\n className,\n dark = false,\n}) => {\n return (\n <div\n className={cn(\n 'payments-ui-portal',\n dark && 'dark',\n className\n )}\n >\n {children}\n </div>\n )\n}\n\n\n","import React from 'react'\nimport { Dialog, DialogContent } from '@/components/ui/dialog'\nimport type { SolanaPaymentViewProps } from './SolanaPaymentView'\nimport { SolanaPaymentView } from './SolanaPaymentView'\n\nexport interface SolanaPaymentSelectorProps\n extends SolanaPaymentViewProps {\n isOpen: boolean\n onClose: () => void\n}\n\nexport const SolanaPaymentSelector: React.FC<SolanaPaymentSelectorProps> = ({\n isOpen,\n onClose,\n ...props\n}) => {\n return (\n <Dialog open={isOpen} onOpenChange={(value) => (value ? undefined : onClose())}>\n <DialogContent className=\"w-full max-w-2xl max-h-[90vh] overflow-y-auto rounded-md border border-border/70 bg-background/95 p-0 shadow-2xl [&::-webkit-scrollbar]:hidden\">\n <SolanaPaymentView {...props} onClose={onClose} />\n </DialogContent>\n </Dialog>\n )\n}\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Table = React.forwardRef<\n HTMLTableElement,\n React.HTMLAttributes<HTMLTableElement>\n>(({ className, ...props }, ref) => (\n <div className=\"relative w-full overflow-auto\">\n <table\n ref={ref}\n className={cn(\"w-full caption-bottom text-sm\", className)}\n {...props}\n />\n </div>\n))\nTable.displayName = \"Table\"\n\nconst TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <thead ref={ref} className={cn(\"[&_tr]:border-b\", className)} {...props} />\n))\nTableHeader.displayName = \"TableHeader\"\n\nconst TableBody = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tbody\n ref={ref}\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n))\nTableBody.displayName = \"TableBody\"\n\nconst TableFooter = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tfoot\n ref={ref}\n className={cn(\n \"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0\",\n className\n )}\n {...props}\n />\n))\nTableFooter.displayName = \"TableFooter\"\n\nconst TableRow = React.forwardRef<\n HTMLTableRowElement,\n React.HTMLAttributes<HTMLTableRowElement>\n>(({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn(\n \"border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted\",\n className\n )}\n {...props}\n />\n))\nTableRow.displayName = \"TableRow\"\n\nconst TableHead = React.forwardRef<\n HTMLTableCellElement,\n 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))\nTableHead.displayName = \"TableHead\"\n\nconst TableCell = React.forwardRef<\n HTMLTableCellElement,\n React.TdHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\"p-4 align-middle [&:has([role=checkbox])]:pr-0\", className)}\n {...props}\n />\n))\nTableCell.displayName = \"TableCell\"\n\nconst TableCaption = React.forwardRef<\n HTMLTableCaptionElement,\n React.HTMLAttributes<HTMLTableCaptionElement>\n>(({ className, ...props }, ref) => (\n <caption\n ref={ref}\n className={cn(\"mt-4 text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nTableCaption.displayName = \"TableCaption\"\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n}\n","import * as React from \"react\"\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\"\n\nimport { cn } from \"@/lib/utils\"\nimport { buttonVariants } from \"@/components/ui/button\"\n\nconst AlertDialog = AlertDialogPrimitive.Root\n\nconst AlertDialogTrigger = AlertDialogPrimitive.Trigger\n\nconst AlertDialogPortal = AlertDialogPrimitive.Portal\n\nconst AlertDialogOverlay = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Overlay\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n ref={ref}\n />\n))\nAlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName\n\nconst AlertDialogContent = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 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-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\n className\n )}\n {...props}\n />\n </AlertDialogPortal>\n))\nAlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName\n\nconst AlertDialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-2 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n)\nAlertDialogHeader.displayName = \"AlertDialogHeader\"\n\nconst AlertDialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...props}\n />\n)\nAlertDialogFooter.displayName = \"AlertDialogFooter\"\n\nconst AlertDialogTitle = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Title\n ref={ref}\n className={cn(\"text-lg font-semibold\", className)}\n {...props}\n />\n))\nAlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName\n\nconst AlertDialogDescription = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nAlertDialogDescription.displayName =\n AlertDialogPrimitive.Description.displayName\n\nconst AlertDialogAction = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Action>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Action\n ref={ref}\n className={cn(buttonVariants(), className)}\n {...props}\n />\n))\nAlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName\n\nconst AlertDialogCancel = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Cancel>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Cancel\n ref={ref}\n className={cn(\n buttonVariants({ variant: \"outline\" }),\n \"mt-2 sm:mt-0\",\n className\n )}\n {...props}\n />\n))\nAlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName\n\nexport {\n AlertDialog,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogTrigger,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n}\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Textarea = React.forwardRef<\n HTMLTextAreaElement,\n React.ComponentProps<\"textarea\">\n>(({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background 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 md:text-sm\",\n className\n )}\n ref={ref}\n {...props}\n />\n )\n})\nTextarea.displayName = \"Textarea\"\n\nexport { Textarea }\n","import { useEffect, useState } from 'react'\nimport { Ban, TriangleAlert } from 'lucide-react'\nimport { Button } from '@/components/ui/button'\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from '@/components/ui/alert-dialog'\nimport { Label } from '@/components/ui/label'\nimport { Textarea } from '@/components/ui/textarea'\nimport { cn } from '../../lib/utils'\nimport type { NotificationHandler, NotificationPayload } from '../../types'\nimport { usePaymentContext } from '../../context/PaymentContext'\n\nexport interface CancelMembershipDialogTranslations {\n buttonLabel?: string\n title?: string\n description?: string\n consequence1?: string\n consequence2?: string\n consequence3?: string\n reasonLabel?: string\n reasonPlaceholder?: string\n reasonError?: string\n reasonHint?: string\n keepMembership?: string\n confirmCancellation?: string\n cancelling?: string\n membershipCancelled?: string\n cancellationSuccess?: string\n cancellationFailed?: string\n}\n\nexport interface CancelMembershipDialogProps {\n minReasonLength?: number\n onCancelled?: () => void\n onNotify?: NotificationHandler\n translations?: CancelMembershipDialogTranslations\n}\n\nconst notifyDefault = (payload: NotificationPayload) => {\n const level = payload.status === 'destructive' ? 'error' : 'info'\n console[level === 'error' ? 'error' : 'log']('[payments-ui] cancellation', payload)\n}\n\nconst defaultTranslations: Required<CancelMembershipDialogTranslations> = {\n buttonLabel: 'Cancel Membership',\n title: 'Confirm Membership Cancellation',\n description: 'You are about to cancel your membership. Please review the consequences:',\n consequence1: 'You will immediately lose access to premium features upon confirmation.',\n consequence2: 'Your benefits remain active until the end of the billing cycle.',\n consequence3: 'Your account will revert to the free plan afterwards.',\n reasonLabel: 'Please provide a reason for cancellation (required):',\n reasonPlaceholder: 'Your feedback helps us improve...',\n reasonError: 'Reason must be at least {min} characters long.',\n reasonHint: 'Minimum {min} characters required.',\n keepMembership: 'Keep Membership',\n confirmCancellation: 'Confirm Cancellation',\n cancelling: 'Cancelling...',\n membershipCancelled: 'Membership cancelled',\n cancellationSuccess: 'Your subscription has been cancelled successfully.',\n cancellationFailed: 'Cancellation failed',\n}\n\nexport const CancelMembershipDialog: React.FC<CancelMembershipDialogProps> = ({\n minReasonLength = 15,\n onCancelled,\n onNotify,\n translations: customTranslations,\n}) => {\n const { client } = usePaymentContext()\n const notify = onNotify ?? notifyDefault\n const t = { ...defaultTranslations, ...customTranslations }\n\n const [cancelReason, setCancelReason] = useState('')\n const [isOpen, setIsOpen] = useState(false)\n const [isReasonValid, setIsReasonValid] = useState(false)\n const [hasInteracted, setHasInteracted] = useState(false)\n const [isSubmitting, setIsSubmitting] = useState(false)\n\n useEffect(() => {\n const trimmed = cancelReason.trim()\n setIsReasonValid(trimmed.length >= minReasonLength)\n }, [cancelReason, minReasonLength])\n\n const handleOpenChange = (open: boolean) => {\n setIsOpen(open)\n if (!open) {\n setCancelReason('')\n setIsReasonValid(false)\n setHasInteracted(false)\n setIsSubmitting(false)\n }\n }\n\n const handleReasonChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setCancelReason(e.target.value)\n if (!hasInteracted) {\n setHasInteracted(true)\n }\n }\n\n const handleConfirm = async () => {\n if (!isReasonValid) {\n setHasInteracted(true)\n return\n }\n\n setIsSubmitting(true)\n try {\n await client.cancelSubscription(cancelReason.trim())\n notify({\n title: t.membershipCancelled,\n description: t.cancellationSuccess,\n status: 'success',\n })\n onCancelled?.()\n handleOpenChange(false)\n } catch (error) {\n const message =\n error instanceof Error ? error.message : 'Unable to cancel membership'\n notify({ title: t.cancellationFailed, description: message, status: 'destructive' })\n } finally {\n setIsSubmitting(false)\n }\n }\n\n const showError = hasInteracted && !isReasonValid\n\n return (\n <AlertDialog open={isOpen} onOpenChange={handleOpenChange}>\n <AlertDialogTrigger asChild>\n <Button variant=\"outline\" className=\"border-destructive/50 text-destructive\">\n <Ban className=\"mr-2 h-4 w-4\" /> {t.buttonLabel}\n </Button>\n </AlertDialogTrigger>\n\n <AlertDialogContent className=\"max-h-[90vh] overflow-y-auto rounded-md border border-border bg-background\">\n <AlertDialogHeader>\n <AlertDialogTitle className=\"flex items-center gap-2 text-lg font-semibold\">\n <TriangleAlert className=\"h-5 w-5 text-destructive\" /> {t.title}\n </AlertDialogTitle>\n <AlertDialogDescription className=\"mt-3 space-y-3 text-muted-foreground\">\n <p>{t.description}</p>\n <ul className=\"list-disc space-y-1 pl-5 text-sm\">\n <li>{t.consequence1}</li>\n <li>{t.consequence2}</li>\n <li>{t.consequence3}</li>\n </ul>\n </AlertDialogDescription>\n </AlertDialogHeader>\n\n <div className=\"my-4 space-y-2 py-2\">\n <Label htmlFor=\"cancelReason\" className=\"text-sm font-medium\">\n {t.reasonLabel}\n </Label>\n <Textarea\n id=\"cancelReason\"\n value={cancelReason}\n onChange={handleReasonChange}\n placeholder={t.reasonPlaceholder}\n className={cn(\n 'w-full resize-none border-border bg-background',\n showError && 'border-destructive'\n )}\n rows={4}\n aria-describedby=\"reason-hint\"\n aria-invalid={showError}\n />\n <p\n id=\"reason-hint\"\n className={`text-xs ${showError ? 'text-destructive' : 'text-muted-foreground'}`}\n >\n {showError\n ? t.reasonError.replace('{min}', String(minReasonLength))\n : t.reasonHint.replace('{min}', String(minReasonLength))}\n </p>\n </div>\n\n <AlertDialogFooter className=\"mt-6 gap-2\">\n <AlertDialogCancel asChild>\n <Button variant=\"outline\" className=\"border-border text-muted-foreground\">\n {t.keepMembership}\n </Button>\n </AlertDialogCancel>\n <AlertDialogAction asChild>\n <Button\n className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n onClick={handleConfirm}\n disabled={!isReasonValid || isSubmitting}\n >\n {isSubmitting ? t.cancelling : t.confirmCancellation}\n </Button>\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n )\n}\n","import { useEffect, useMemo, useRef, useState } from 'react'\nimport { useInfiniteQuery, type InfiniteData } from '@tanstack/react-query'\nimport { ChevronDown } from 'lucide-react'\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '@/components/ui/table'\nimport { Card, CardContent, CardDescription, CardTitle } from '@/components/ui/card'\nimport { Badge } from '@/components/ui/badge'\nimport { cn } from '../../lib/utils'\nimport { usePaymentContext } from '../../context/PaymentContext'\nimport type { NotificationHandler, NotificationPayload, PaginatedPayments } from '../../types'\nimport { CancelMembershipDialog } from './CancelMembershipDialog'\n\nexport interface BillingHistoryTranslations {\n title?: string\n description?: string\n reviewActivity?: string\n loading?: string\n error?: string\n loadingMore?: string\n reference?: string\n date?: string\n amount?: string\n processor?: string\n status?: string\n}\n\nexport interface BillingHistoryProps {\n pageSize?: number\n initialPage?: number\n enableCancel?: boolean\n onNotify?: NotificationHandler\n translations?: BillingHistoryTranslations\n}\n\nconst notifyDefault = (payload: NotificationPayload) => {\n const level = payload.status === 'destructive' ? 'error' : 'info'\n console[level === 'error' ? 'error' : 'log']('[payments-ui] billing', payload)\n}\n\nconst defaultTranslations: Required<BillingHistoryTranslations> = {\n title: 'Transaction History',\n description: 'Record of billing history',\n reviewActivity: 'Review your account activity below',\n loading: 'Loading...',\n error: 'Error loading billing history.',\n loadingMore: 'Loading more...',\n reference: 'Reference',\n date: 'Date',\n amount: 'Amount',\n processor: 'Processor',\n status: 'Status',\n}\n\nexport const BillingHistory: React.FC<BillingHistoryProps> = ({\n pageSize = 10,\n initialPage = 1,\n enableCancel = true,\n onNotify,\n translations: customTranslations,\n}) => {\n const { client } = usePaymentContext()\n const notify = onNotify ?? notifyDefault\n const t = { ...defaultTranslations, ...customTranslations }\n const [isExpanded, setIsExpanded] = useState(false)\n const observerRef = useRef<IntersectionObserver | null>(null)\n const loadMoreRef = useRef<HTMLDivElement>(null)\n\n const historyQuery = useInfiniteQuery<PaginatedPayments, Error, PaginatedPayments, ['payments-ui', 'billing-history', number], number>({\n queryKey: ['payments-ui', 'billing-history', pageSize],\n queryFn: async ({ pageParam = initialPage }) => {\n const offset = (pageParam - 1) * pageSize\n return client.getPaymentHistory({ limit: pageSize, offset, type: undefined }).then(\n (response) => ({\n data: response.data,\n total_items: response.total,\n limit: response.limit,\n offset: response.offset,\n page: response.limit > 0 ? Math.floor(response.offset / response.limit) + 1 : 1,\n page_size: response.limit,\n total_pages:\n response.limit > 0 ? Math.ceil(response.total / response.limit) : undefined,\n })\n )\n },\n initialPageParam: initialPage,\n getNextPageParam: (lastPage) => {\n const nextOffset = (lastPage.offset ?? 0) + lastPage.data.length\n if (lastPage.total_items <= nextOffset) {\n return undefined\n }\n return lastPage.page ? lastPage.page + 1 : initialPage + 1\n },\n staleTime: 5 * 60 * 1000,\n })\n\n useEffect(() => {\n if (!loadMoreRef.current || !isExpanded) return\n\n observerRef.current = new IntersectionObserver((entries) => {\n const [entry] = entries\n if (entry?.isIntersecting && historyQuery.hasNextPage && !historyQuery.isFetchingNextPage) {\n historyQuery.fetchNextPage().catch(() => {\n notify({ title: 'Failed to load more history', status: 'destructive' })\n })\n }\n })\n\n observerRef.current.observe(loadMoreRef.current)\n\n return () => {\n observerRef.current?.disconnect()\n }\n }, [historyQuery, isExpanded, notify])\n\n const payments = useMemo<PaginatedPayments[]>(() => {\n const data = historyQuery.data as InfiniteData<PaginatedPayments> | undefined\n return data?.pages ?? []\n }, [historyQuery.data])\n\n const formatDate = (value: string) =>\n new Date(value).toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n })\n\n const formatAmount = (amount: number, currency: string) => {\n try {\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency,\n }).format(amount)\n } catch {\n return `${amount.toFixed(2)} ${currency}`\n }\n }\n\n return (\n <Card className=\"border-0 bg-background/5 shadow-lg\">\n <div className=\"p-4 sm:p-6\">\n <div className=\"flex cursor-pointer items-center justify-between\" onClick={() => setIsExpanded((prev) => !prev)}>\n <div>\n <CardTitle className=\"text-xl font-semibold\">{t.title}</CardTitle>\n <CardDescription>{t.description}</CardDescription>\n </div>\n <ChevronDown className={cn('h-5 w-5 text-muted-foreground transition-transform', isExpanded && 'rotate-180')} />\n </div>\n\n <div\n className={cn(\n 'overflow-hidden transition-all duration-300',\n isExpanded ? 'mt-4 max-h-[1000px] opacity-100' : 'max-h-0 opacity-0'\n )}\n >\n <CardContent className=\"p-0 pt-4\">\n <div className=\"space-y-4\">\n <div className=\"flex flex-col gap-4 lg:flex-row lg:items-center lg:justify-between\">\n <p className=\"text-sm text-muted-foreground\">{t.reviewActivity}</p>\n {enableCancel && <CancelMembershipDialog onNotify={notify} />}\n </div>\n\n <div className=\"max-h-[300px] overflow-y-auto rounded-lg border border-border/70\">\n <div className=\"overflow-x-auto\">\n {historyQuery.isLoading ? (\n <p className=\"p-4 text-center text-sm text-muted-foreground\">{t.loading}</p>\n ) : historyQuery.isError ? (\n <p className=\"p-4 text-center text-sm text-destructive\">{t.error}</p>\n ) : (\n <Table>\n <TableHeader>\n <TableRow className=\"border-border/60\">\n <TableHead>{t.reference}</TableHead>\n <TableHead>{t.date}</TableHead>\n <TableHead>{t.amount}</TableHead>\n <TableHead>{t.processor}</TableHead>\n <TableHead>{t.status}</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {payments.map((page) =>\n page.data.map((payment) => (\n <TableRow key={payment.id} className=\"border-border/40\">\n <TableCell className=\"font-mono text-sm\">\n {payment.id.slice(0, 7).toUpperCase()}\n </TableCell>\n <TableCell>{formatDate(payment.purchased_at)}</TableCell>\n <TableCell>{formatAmount(payment.amount, payment.currency)}</TableCell>\n <TableCell className=\"capitalize\">{payment.processor}</TableCell>\n <TableCell>\n <Badge className=\"bg-emerald-500/10 text-emerald-400\">\n {(payment.status || 'completed').toLowerCase()}\n </Badge>\n </TableCell>\n </TableRow>\n ))\n )}\n </TableBody>\n </Table>\n )}\n </div>\n </div>\n\n <div ref={loadMoreRef} className=\"h-10 w-full\">\n {historyQuery.isFetchingNextPage && (\n <p className=\"text-center text-sm text-muted-foreground\">{t.loadingMore}</p>\n )}\n </div>\n </div>\n </CardContent>\n </div>\n </div>\n </Card>\n )\n}\n","import { useEffect, useMemo, useState } from 'react'\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'\nimport { CreditCard, Loader2, Trash2, WalletCards } from 'lucide-react'\nimport { Button } from '@/components/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from '@/components/ui/card'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from '@/components/ui/dialog'\nimport { Badge } from '@/components/ui/badge'\nimport { CardDetailsForm } from '../CardDetailsForm'\nimport type {\n BillingDetails,\n CreatePaymentMethodPayload,\n NotificationHandler,\n NotificationPayload,\n PaginatedPaymentMethods,\n PaymentMethod,\n} from '../../types'\nimport { usePaymentContext } from '../../context/PaymentContext'\n\nexport interface PaymentMethodsSectionTranslations {\n title?: string\n description?: string\n addCard?: string\n loadingCards?: string\n noPaymentMethods?: string\n addedOn?: string\n active?: string\n inactive?: string\n replaceCard?: string\n makeDefault?: string\n defaultMethod?: string\n remove?: string\n addNewCard?: string\n addNewCardDescription?: string\n saveCard?: string\n replaceCardTitle?: string\n replaceCardDescription?: string\n cardAddedSuccess?: string\n unableToAddCard?: string\n cardRemoved?: string\n unableToRemoveCard?: string\n cardUpdated?: string\n unableToReplaceCard?: string\n defaultPaymentMethodUpdated?: string\n unableToSetDefault?: string\n}\n\nexport interface PaymentMethodsSectionProps {\n isAuthenticated?: boolean\n userEmail?: string | null\n provider?: string\n defaultCountry?: string\n collectPrefix?: string\n onNotify?: NotificationHandler\n translations?: PaymentMethodsSectionTranslations\n}\n\nconst formatCardLabel = (method: PaymentMethod): string => {\n const brand = method.card_type ? method.card_type.toUpperCase() : 'CARD'\n const lastFour = method.last_four ? `•••• ${method.last_four}` : ''\n return `${brand} ${lastFour}`.trim()\n}\n\nconst notifyDefault = (payload: NotificationPayload) => {\n const level = payload.status === 'destructive' ? 'error' : 'info'\n console[level === 'error' ? 'error' : 'log']('[payments-ui] notification', payload)\n}\n\nconst defaultTranslations: Required<PaymentMethodsSectionTranslations> = {\n title: 'Payment Methods',\n description: 'Manage your saved billing cards',\n addCard: 'Add card',\n loadingCards: 'Loading cards...',\n noPaymentMethods: 'No saved payment methods yet.',\n addedOn: 'Added on',\n active: 'Active',\n inactive: 'Inactive',\n replaceCard: 'Replace card',\n makeDefault: 'Make default',\n defaultMethod: 'Default method',\n remove: 'Remove',\n addNewCard: 'Add a new card',\n addNewCardDescription: 'Your card details are tokenized securely via our payment provider.',\n saveCard: 'Save card',\n replaceCardTitle: 'Replace card',\n replaceCardDescription: 'Update this card with new billing details.',\n cardAddedSuccess: 'Card added successfully',\n unableToAddCard: 'Unable to add card',\n cardRemoved: 'Card removed',\n unableToRemoveCard: 'Unable to remove card',\n cardUpdated: 'Card updated',\n unableToReplaceCard: 'Unable to replace card',\n defaultPaymentMethodUpdated: 'Default payment method updated',\n unableToSetDefault: 'Unable to set default payment method',\n}\n\nexport const PaymentMethodsSection: React.FC<PaymentMethodsSectionProps> = ({\n isAuthenticated = true,\n userEmail,\n provider = 'mobius',\n defaultCountry = 'US',\n collectPrefix = 'account-card',\n onNotify,\n translations: customTranslations,\n}) => {\n\tconst { client } = usePaymentContext()\n\tconst queryClient = useQueryClient()\n \n // Simple service wrapper for payment methods\n const paymentMethods = {\n list: (params: { pageSize: number }) =>\n client.listPaymentMethods({ limit: params.pageSize }),\n create: (payload: CreatePaymentMethodPayload) => client.createPaymentMethod(payload),\n update: (id: string, payload: CreatePaymentMethodPayload) => \n client.updatePaymentMethod(id, payload),\n remove: (id: string) => client.deletePaymentMethod(id),\n activate: (id: string) => client.activatePaymentMethod(id),\n }\n \n\t\n\tconst [isModalOpen, setIsModalOpen] = useState(false)\n\tconst [deletingId, setDeletingId] = useState<string | null>(null)\n\tconst [methodBeingReplaced, setMethodBeingReplaced] = useState<PaymentMethod | null>(null)\n const notify = onNotify ?? notifyDefault\n const t = { ...defaultTranslations, ...customTranslations }\n\n const queryKey = ['payments-ui', 'payment-methods']\n\n const paymentQuery = useQuery<PaginatedPaymentMethods>({\n queryKey,\n queryFn: () => paymentMethods.list({ pageSize: 50 }),\n enabled: isAuthenticated,\n staleTime: 30_000,\n })\n\n const createMutation = useMutation<PaymentMethod, Error, CreatePaymentMethodPayload>({\n mutationFn: (payload) => paymentMethods.create(payload),\n onSuccess: () => {\n notify({ title: t.cardAddedSuccess, status: 'success' })\n setIsModalOpen(false)\n void queryClient.invalidateQueries({ queryKey })\n },\n onError: (error) => {\n notify({\n title: t.unableToAddCard,\n description: error.message,\n status: 'destructive',\n })\n },\n })\n\n\tconst deleteMutation = useMutation<void, Error, string>({\n\t\tmutationFn: (id) => paymentMethods.remove(id),\n\t\tonMutate: (id) => setDeletingId(id),\n\t\tonSuccess: () => {\n\t\t\tnotify({ title: t.cardRemoved, status: 'success' })\n\t\t\tvoid queryClient.invalidateQueries({ queryKey })\n\t\t},\n\t\tonError: (error) => {\n\t\t\tnotify({\n\t\t\t\ttitle: t.unableToRemoveCard,\n\t\t\t\tdescription: error.message,\n\t\t\t\tstatus: 'destructive',\n\t\t\t})\n\t\t},\n\t\tonSettled: () => setDeletingId(null),\n\t})\n\n\tconst replaceMutation = useMutation<PaymentMethod, Error, { id: string; payload: CreatePaymentMethodPayload }>({\n\t\tmutationFn: ({ id, payload }) => paymentMethods.update(id, payload),\n\t\tonSuccess: () => {\n\t\t\tnotify({ title: t.cardUpdated, status: 'success' })\n\t\t\tsetMethodBeingReplaced(null)\n\t\t\tvoid queryClient.invalidateQueries({ queryKey })\n\t\t},\n\t\tonError: (error) => {\n\t\t\tnotify({\n\t\t\t\ttitle: t.unableToReplaceCard,\n\t\t\t\tdescription: error.message,\n\t\t\t\tstatus: 'destructive',\n\t\t\t})\n\t\t},\n\t})\n\n\tconst activateMutation = useMutation<void, Error, string>({\n\t\tmutationFn: (id) => paymentMethods.activate(id),\n\t\tonSuccess: () => {\n\t\t\tnotify({ title: t.defaultPaymentMethodUpdated, status: 'success' })\n\t\t\tvoid queryClient.invalidateQueries({ queryKey })\n\t\t},\n\t\tonError: (error) => {\n\t\t\tnotify({\n\t\t\t\ttitle: t.unableToSetDefault,\n\t\t\t\tdescription: error.message,\n\t\t\t\tstatus: 'destructive',\n\t\t\t})\n\t\t},\n\t})\n\n useEffect(() => {\n if (!isModalOpen) {\n createMutation.reset()\n }\n }, [createMutation, isModalOpen])\n\n const payments = useMemo(() => paymentQuery.data?.data ?? [], [paymentQuery.data])\n const loading = paymentQuery.isLoading || paymentQuery.isFetching\n\n const buildPayload = (token: string, billing: BillingDetails): CreatePaymentMethodPayload => ({\n payment_token: token,\n first_name: billing.firstName,\n last_name: billing.lastName,\n address1: billing.address1,\n address2: billing.address2,\n city: billing.city,\n state: billing.stateRegion,\n zip: billing.postalCode,\n country: billing.country,\n email: billing.email,\n provider: billing.provider,\n })\n\n const handleCardTokenize = (token: string, billing: BillingDetails) => {\n createMutation.mutate(buildPayload(token, billing))\n }\n\n const handleReplaceTokenize = (token: string, billing: BillingDetails) => {\n if (!methodBeingReplaced) return\n replaceMutation.mutate({ id: methodBeingReplaced.id, payload: buildPayload(token, billing) })\n }\n\n return (\n <Card>\n <CardHeader className=\"flex flex-col gap-4 md:flex-row md:items-center md:justify-between\">\n <div>\n <CardTitle className=\"flex items-center gap-2\">\n <WalletCards className=\"h-5 w-5 text-emerald-400\" /> {t.title}\n </CardTitle>\n <CardDescription>{t.description}</CardDescription>\n </div>\n <Button onClick={() => setIsModalOpen(true)}>\n <CreditCard className=\"mr-2 h-4 w-4\" /> {t.addCard}\n </Button>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {loading ? (\n <div className=\"flex items-center justify-center py-10 text-white/60\">\n <Loader2 className=\"mr-2 h-5 w-5 animate-spin\" /> {t.loadingCards}\n </div>\n ) : payments.length === 0 ? (\n <div className=\"rounded-lg border border-dashed border-white/20 bg-white/5 p-6 text-sm text-white/60\">\n {t.noPaymentMethods}\n </div>\n ) : (\n <div className=\"space-y-3\">\n {payments.map((method) => (\n <div\n key={method.id}\n className=\"rounded-lg border border-white/10 bg-white/5 p-4 shadow-sm\"\n >\n <div className=\"flex flex-col gap-2 md:flex-row md:items-center md:justify-between\">\n <div>\n <h4 className=\"text-base font-medium text-white\">\n {formatCardLabel(method)}\n </h4>\n <p className=\"text-sm text-white/60\">\n {t.addedOn}{' '}\n {method.created_at\n ? new Date(method.created_at).toLocaleDateString()\n : 'unknown date'}\n </p>\n </div>\n <div className=\"flex gap-2\">\n <Badge\n variant={method.is_active ? 'default' : 'secondary'}\n >\n {method.is_active ? t.active : t.inactive}\n </Badge>\n {method.failure_reason && (\n <Badge variant=\"destructive\">{method.failure_reason}</Badge>\n )}\n </div>\n </div>\n <div className=\"mt-3 flex flex-wrap gap-2\">\n <Button\n variant=\"ghost\"\n className=\"text-blue-400\"\n disabled={replaceMutation.isPending && methodBeingReplaced?.id === method.id}\n onClick={() => setMethodBeingReplaced(method)}\n >\n {replaceMutation.isPending && methodBeingReplaced?.id === method.id ? (\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n ) : (\n <CreditCard className=\"mr-2 h-4 w-4\" />\n )}\n {t.replaceCard}\n </Button>\n <Button\n variant=\"outline\"\n disabled={method.is_active || activateMutation.isPending}\n onClick={() => activateMutation.mutate(method.id)}\n >\n {activateMutation.isPending ? (\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n ) : null}\n {method.is_active ? t.defaultMethod : t.makeDefault}\n </Button>\n <Button\n variant=\"ghost\"\n className=\"text-red-400 hover:text-red-300\"\n disabled={deletingId === method.id && deleteMutation.isPending}\n onClick={() => deleteMutation.mutate(method.id)}\n >\n {deletingId === method.id && deleteMutation.isPending ? (\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n ) : (\n <Trash2 className=\"mr-2 h-4 w-4\" />\n )}\n {t.remove}\n </Button>\n </div>\n </div>\n ))}\n </div>\n )}\n </CardContent>\n\n <Dialog open={isModalOpen} onOpenChange={setIsModalOpen}>\n <DialogContent className=\"max-h-[95vh] overflow-y-auto\">\n <DialogHeader>\n <DialogTitle>{t.addNewCard}</DialogTitle>\n <DialogDescription>\n {t.addNewCardDescription}\n </DialogDescription>\n </DialogHeader>\n\n <CardDetailsForm\n visible={isModalOpen}\n collectPrefix={collectPrefix}\n submitting={createMutation.isPending}\n submitLabel={t.saveCard}\n defaultValues={{\n email: userEmail ?? '',\n country: defaultCountry,\n provider,\n }}\n externalError={createMutation.error?.message ?? null}\n onTokenize={handleCardTokenize}\n className=\"rounded-2xl border border-white/10 bg-white/5 p-6\"\n />\n </DialogContent>\n </Dialog>\n\n <Dialog open={Boolean(methodBeingReplaced)} onOpenChange={(open) => !open && setMethodBeingReplaced(null)}>\n <DialogContent className=\"max-h-[95vh] overflow-y-auto\">\n <DialogHeader>\n <DialogTitle>{t.replaceCardTitle}</DialogTitle>\n <DialogDescription>{t.replaceCardDescription}</DialogDescription>\n </DialogHeader>\n\n {methodBeingReplaced && (\n <CardDetailsForm\n visible\n collectPrefix={`${collectPrefix}-replace-${methodBeingReplaced.id}`}\n submitting={replaceMutation.isPending}\n submitLabel={t.replaceCard}\n defaultValues={{\n email: userEmail ?? '',\n country: defaultCountry,\n provider,\n }}\n externalError={replaceMutation.error?.message ?? null}\n onTokenize={handleReplaceTokenize}\n className=\"rounded-2xl border border-white/10 bg-white/5 p-6\"\n />\n )}\n </DialogContent>\n </Dialog>\n </Card>\n )\n}\n","import * as React from \"react\"\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\"\nimport { Check } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n \"grid place-content-center peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n className={cn(\"grid place-content-center text-current\")}\n >\n <Check className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n))\nCheckbox.displayName = CheckboxPrimitive.Root.displayName\n\nexport { Checkbox }\n","import { useMemo, useState } from 'react'\nimport {\n AlertDialog,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n} from '@/components/ui/alert-dialog'\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { Checkbox } from '@/components/ui/checkbox'\nimport { Label } from '@/components/ui/label'\nimport { Shield, CreditCard, Calendar, KeyRound, UserRound } from 'lucide-react'\n\nexport interface WalletDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n}\n\ninterface WalletFormState {\n nameOnCard: string\n cardNumber: string\n expiration: string\n cvv: string\n termsAccepted: boolean\n}\n\ntype WalletValidators = {\n [K in keyof WalletFormState]: (value: WalletFormState[K]) => string | undefined\n}\n\nconst initialState: WalletFormState = {\n nameOnCard: '',\n cardNumber: '',\n expiration: '',\n cvv: '',\n termsAccepted: false,\n}\n\nexport const WalletDialog: React.FC<WalletDialogProps> = ({ open, onOpenChange }) => {\n const [form, setForm] = useState<WalletFormState>(initialState)\n const [errors, setErrors] = useState<Partial<Record<keyof WalletFormState, string>>>({})\n\n const validators = useMemo<WalletValidators>(\n () => ({\n nameOnCard: (value) => (!value ? 'Name is required' : undefined),\n cardNumber: (value) =>\n /^\\d{16}$/.test(value)\n ? undefined\n : 'Card number must be 16 digits',\n expiration: (value) =>\n /^(0[1-9]|1[0-2])\\/([2-9]\\d)$/.test(value)\n ? undefined\n : 'Must be in MM/YY format',\n cvv: (value) => (/^\\d{3,4}$/.test(value) ? undefined : 'CVV must be 3 or 4 digits'),\n termsAccepted: (value) => (value ? undefined : 'You must accept the terms'),\n }),\n []\n )\n\n const updateField = <K extends keyof WalletFormState>(field: K, value: WalletFormState[K]) => {\n setForm((prev) => ({ ...prev, [field]: value } as WalletFormState))\n setErrors((prev) => ({ ...prev, [field]: undefined }))\n }\n\n const validate = () => {\n const next: Partial<Record<keyof WalletFormState, string>> = {}\n ;(Object.keys(validators) as Array<keyof WalletFormState>).forEach((key) => {\n const validator = validators[key] as (value: WalletFormState[keyof WalletFormState]) => string | undefined\n const message = validator?.(form[key])\n if (message) {\n next[key] = message\n }\n })\n setErrors(next)\n return Object.keys(next).length === 0\n }\n\n const handleSubmit = (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault()\n if (!validate()) return\n console.log('[payments-ui] wallet dialog submit', form)\n onOpenChange(false)\n setForm(initialState)\n }\n\n return (\n <AlertDialog open={open} onOpenChange={onOpenChange}>\n <AlertDialogContent className=\"max-h-[95vh] max-w-lg overflow-y-auto rounded-2xl border border-border bg-background\">\n <AlertDialogHeader className=\"border-b border-border/60 pb-4\">\n <div className=\"flex items-center justify-center gap-2\">\n <Shield className=\"h-5 w-5 text-primary\" />\n <AlertDialogTitle className=\"text-center text-base font-semibold uppercase tracking-wide\">\n Secure Payment via Mobius Pay\n </AlertDialogTitle>\n </div>\n <p className=\"mt-2 text-center text-sm text-muted-foreground\">\n $23 USD per month, cancel at any time.\n </p>\n </AlertDialogHeader>\n\n <form onSubmit={handleSubmit} className=\"space-y-5 px-2 py-4 sm:px-4\">\n <div className=\"space-y-4\">\n <div>\n <Label className=\"mb-1 block text-sm text-muted-foreground\">Name on Card</Label>\n <div className=\"relative\">\n <span className=\"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground\">\n <UserRound className=\"h-4 w-4\" />\n </span>\n <Input value={form.nameOnCard} onChange={(e) => updateField('nameOnCard', e.target.value)} className=\"pl-10\" />\n </div>\n {errors.nameOnCard && <p className=\"mt-1 text-xs text-destructive\">{errors.nameOnCard}</p>}\n </div>\n\n <div>\n <Label className=\"mb-1 block text-sm text-muted-foreground\">Credit Card Number</Label>\n <div className=\"relative\">\n <span className=\"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground\">\n <CreditCard className=\"h-4 w-4\" />\n </span>\n <Input value={form.cardNumber} onChange={(e) => updateField('cardNumber', e.target.value)} className=\"pl-10\" />\n </div>\n {errors.cardNumber && <p className=\"mt-1 text-xs text-destructive\">{errors.cardNumber}</p>}\n </div>\n\n <div className=\"flex gap-4\">\n <div className=\"flex-1\">\n <Label className=\"mb-1 block text-sm text-muted-foreground\">Expiration</Label>\n <div className=\"relative\">\n <span className=\"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground\">\n <Calendar className=\"h-4 w-4\" />\n </span>\n <Input value={form.expiration} onChange={(e) => updateField('expiration', e.target.value)} className=\"pl-10\" placeholder=\"MM/YY\" />\n </div>\n {errors.expiration && <p className=\"mt-1 text-xs text-destructive\">{errors.expiration}</p>}\n </div>\n <div className=\"flex-1\">\n <Label className=\"mb-1 block text-sm text-muted-foreground\">CVV</Label>\n <div className=\"relative\">\n <span className=\"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground\">\n <KeyRound className=\"h-4 w-4\" />\n </span>\n <Input value={form.cvv} onChange={(e) => updateField('cvv', e.target.value)} className=\"pl-10\" />\n </div>\n {errors.cvv && <p className=\"mt-1 text-xs text-destructive\">{errors.cvv}</p>}\n </div>\n </div>\n </div>\n\n <div className=\"flex items-start gap-3 rounded-md border border-border/70 bg-muted/10 p-4\">\n <Checkbox id=\"terms-agree\" checked={form.termsAccepted} onCheckedChange={(checked) => updateField('termsAccepted', Boolean(checked))} />\n <Label htmlFor=\"terms-agree\" className=\"text-sm text-muted-foreground\">\n By completing this order, I confirm that I am 18 years or older and agree to your privacy policy and terms.\n </Label>\n </div>\n {errors.termsAccepted && <p className=\"text-xs text-destructive\">{errors.termsAccepted}</p>}\n\n <AlertDialogFooter className=\"flex gap-2\">\n <Button type=\"submit\" className=\"flex-1\">\n Subscribe\n </Button>\n <AlertDialogCancel asChild>\n <Button variant=\"outline\" className=\"flex-1\">\n Close\n </Button>\n </AlertDialogCancel>\n </AlertDialogFooter>\n </form>\n </AlertDialogContent>\n </AlertDialog>\n )\n}\n","import { useState, useEffect, useCallback, useMemo } from 'react'\nimport { useWallet, useConnection } from '@solana/wallet-adapter-react'\nimport { PublicKey } from '@solana/web3.js'\nimport { getAssociatedTokenAddress, getAccount } from '@solana/spl-token'\nimport { TokenBalance, TokenInfo } from '../types'\n\nexport const useTokenBalance = (tokens: TokenInfo[]) => {\n const { publicKey } = useWallet()\n const { connection } = useConnection()\n\n const [balances, setBalances] = useState<TokenBalance[]>([])\n const [isLoading, setIsLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n\n // Fetch balance for a specific token\n const fetchTokenBalance = useCallback(\n async (\n token: TokenInfo,\n walletAddress: PublicKey\n ): Promise<TokenBalance> => {\n try {\n const mintPublicKey = new PublicKey(token.mint)\n\n // Get the associated token account address\n const associatedTokenAddress = await getAssociatedTokenAddress(\n mintPublicKey,\n walletAddress\n )\n\n try {\n // Get the token account info\n const tokenAccount = await getAccount(\n connection,\n associatedTokenAddress\n )\n\n const balance = Number(tokenAccount.amount)\n const uiAmount = balance / Math.pow(10, token.decimals)\n\n return {\n token,\n balance,\n uiAmount,\n hasBalance: balance > 0,\n }\n } catch (accountError) {\n // Account doesn't exist, balance is 0\n return {\n token,\n balance: 0,\n uiAmount: 0,\n hasBalance: false,\n }\n }\n } catch (error) {\n console.error(`Failed to fetch balance for ${token.symbol}:`, error)\n return {\n token,\n balance: 0,\n uiAmount: 0,\n hasBalance: false,\n }\n }\n },\n [connection]\n )\n\n // Memoize token serialization to prevent unnecessary refetches\n const tokensKey = useMemo(() => tokens.map((t) => t.mint).join(','), [tokens])\n\n // Auto-fetch balances when wallet or tokens change\n useEffect(() => {\n if (!publicKey || tokens.length === 0) {\n setBalances([])\n return\n }\n\n setIsLoading(true)\n setError(null)\n\n const fetchAllBalances = async () => {\n try {\n const balancePromises = tokens.map((token) =>\n fetchTokenBalance(token, publicKey)\n )\n const tokenBalances = await Promise.all(balancePromises)\n\n setBalances(tokenBalances)\n } catch (error) {\n const errorMessage =\n error instanceof Error\n ? error.message\n : 'Failed to fetch token balances'\n setError(errorMessage)\n console.error('Failed to fetch token balances:', error)\n } finally {\n setIsLoading(false)\n }\n }\n\n fetchAllBalances()\n }, [publicKey, tokensKey, fetchTokenBalance]) // Use stable dependencies\n\n // Get balance for a specific token\n const getTokenBalance = useCallback(\n (tokenSymbol: string): TokenBalance | undefined => {\n return balances.find((balance) => balance.token.symbol === tokenSymbol)\n },\n [balances]\n )\n\n // Check if user has sufficient balance for a payment\n const hasSufficientBalance = useCallback(\n (tokenSymbol: string, requiredAmount: number): boolean => {\n const balance = getTokenBalance(tokenSymbol)\n return balance ? balance.uiAmount >= requiredAmount : false\n },\n [getTokenBalance]\n )\n\n // Get formatted balance string\n const getFormattedBalance = useCallback(\n (tokenSymbol: string): string => {\n const balance = getTokenBalance(tokenSymbol)\n if (!balance) return '0.00'\n\n // Format with appropriate decimal places\n if (balance.uiAmount < 0.01) {\n return balance.uiAmount.toFixed(6)\n } else if (balance.uiAmount < 1) {\n return balance.uiAmount.toFixed(4)\n } else {\n return balance.uiAmount.toFixed(2)\n }\n },\n [getTokenBalance]\n )\n\n // Refresh balances manually\n const refreshBalances = useCallback(async () => {\n if (!publicKey || tokens.length === 0) {\n setBalances([])\n return\n }\n\n setIsLoading(true)\n setError(null)\n\n try {\n const balancePromises = tokens.map((token) =>\n fetchTokenBalance(token, publicKey)\n )\n const tokenBalances = await Promise.all(balancePromises)\n\n setBalances(tokenBalances)\n } catch (error) {\n const errorMessage =\n error instanceof Error\n ? error.message\n : 'Failed to fetch token balances'\n setError(errorMessage)\n console.error('Failed to fetch token balances:', error)\n } finally {\n setIsLoading(false)\n }\n }, [publicKey, tokens, fetchTokenBalance])\n\n // Get total USD value of balances (would need price data)\n const getTotalValue = useCallback(\n (priceData?: Record<string, number>): number => {\n if (!priceData) return 0\n\n return balances.reduce((total, balance) => {\n const price = priceData[balance.token.symbol] || 0\n return total + balance.uiAmount * price\n }, 0)\n },\n [balances]\n )\n\n // Sort balances by amount (highest first)\n const sortedBalances = [...balances].sort((a, b) => b.uiAmount - a.uiAmount)\n\n // Get balances with positive amounts only\n const positiveBalances = balances.filter((balance) => balance.hasBalance)\n\n return {\n balances: sortedBalances,\n positiveBalances,\n isLoading,\n error,\n refreshBalances,\n getTokenBalance,\n hasSufficientBalance,\n getFormattedBalance,\n getTotalValue,\n hasAnyBalance: positiveBalances.length > 0,\n isConnected: !!publicKey,\n }\n}\n","import { useState, useEffect, useCallback, useRef } from 'react'\nimport { useConnection } from '@solana/wallet-adapter-react'\nimport { TransactionStatus, PaymentStatusResponse } from '../types'\nimport { usePaymentContext } from '../context/PaymentContext'\n\ninterface PaymentStatusHookOptions {\n transactionId?: string\n purchaseId?: string\n onConfirmed?: () => void\n onFailed?: (error: string) => void\n maxRetries?: number\n retryInterval?: number // milliseconds\n}\n\nexport const usePaymentStatus = (options: PaymentStatusHookOptions = {}) => {\n const { connection } = useConnection()\n const { client } = usePaymentContext()\n const {\n transactionId,\n purchaseId,\n onConfirmed,\n onFailed,\n maxRetries = 30, // 5 minutes with 10s intervals\n retryInterval = 10000, // 10 seconds\n } = options\n\n const [status, setStatus] = useState<TransactionStatus | null>(null)\n const [paymentStatus, setPaymentStatus] =\n useState<PaymentStatusResponse | null>(null)\n const [isLoading, setIsLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [retryCount, setRetryCount] = useState(0)\n\n const intervalRef = useRef<NodeJS.Timeout | null>(null)\n const isMonitoringRef = useRef(false)\n\n // Clear interval on unmount\n useEffect(() => {\n return () => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current)\n }\n }\n }, [])\n\n // Check transaction status on Solana blockchain\n const checkTransactionStatus = useCallback(\n async (signature: string): Promise<TransactionStatus> => {\n try {\n const statusResponse = await connection.getSignatureStatus(signature, {\n searchTransactionHistory: true,\n })\n\n if (statusResponse.value === null) {\n return {\n signature,\n confirmationStatus: 'processed',\n confirmations: 0,\n error: 'Transaction not found',\n }\n }\n\n const { confirmationStatus, confirmations, slot, err } =\n statusResponse.value\n\n // Get block time if we have a slot\n let blockTime: number | undefined\n if (slot) {\n try {\n blockTime = (await connection.getBlockTime(slot)) || undefined\n } catch (error) {\n // Block time not available\n }\n }\n\n return {\n signature,\n confirmationStatus: err\n ? 'failed'\n : confirmationStatus || 'processed',\n confirmations: confirmations || 0,\n slot,\n blockTime,\n error: err ? `Transaction failed: ${err}` : undefined,\n }\n } catch (error) {\n console.error('Failed to check transaction status:', {\n signature,\n error,\n })\n return {\n signature,\n confirmationStatus: 'failed',\n confirmations: 0,\n error:\n error instanceof Error\n ? error.message\n : 'Failed to check transaction status',\n }\n }\n },\n [connection]\n )\n\n // Check payment status from backend\n const checkPaymentStatus = useCallback(\n async (id: string): Promise<PaymentStatusResponse | null> => {\n try {\n return await client.getPaymentStatus(id)\n } catch (error) {\n console.error('Failed to check payment status:', {\n purchaseId: id,\n error,\n })\n return null\n }\n },\n [client]\n )\n\n // Monitor transaction until confirmed or failed\n const startMonitoring = useCallback(async () => {\n if (isMonitoringRef.current || (!transactionId && !purchaseId)) {\n return\n }\n\n isMonitoringRef.current = true\n setIsLoading(true)\n setError(null)\n setRetryCount(0)\n\n const monitor = async () => {\n try {\n let currentStatus: TransactionStatus | null = null\n let currentPaymentStatus: PaymentStatusResponse | null = null\n\n // Check blockchain status if we have a transaction ID\n if (transactionId) {\n currentStatus = await checkTransactionStatus(transactionId)\n setStatus(currentStatus)\n }\n\n // Check backend payment status if we have a purchase ID\n if (purchaseId) {\n currentPaymentStatus = await checkPaymentStatus(purchaseId)\n setPaymentStatus(currentPaymentStatus)\n }\n\n // Determine if we should stop monitoring\n const isBlockchainConfirmed =\n currentStatus?.confirmationStatus === 'finalized' ||\n currentStatus?.confirmationStatus === 'confirmed'\n const isBackendConfirmed = currentPaymentStatus?.status === 'confirmed'\n const isBlockchainFailed =\n currentStatus?.confirmationStatus === 'failed' || currentStatus?.error\n const isBackendFailed = currentPaymentStatus?.status === 'failed'\n\n if (isBlockchainConfirmed || isBackendConfirmed) {\n // Payment confirmed\n if (intervalRef.current) {\n clearInterval(intervalRef.current)\n }\n isMonitoringRef.current = false\n setIsLoading(false)\n onConfirmed?.()\n return\n }\n\n if (isBlockchainFailed || isBackendFailed) {\n // Payment failed\n if (intervalRef.current) {\n clearInterval(intervalRef.current)\n }\n isMonitoringRef.current = false\n setIsLoading(false)\n const errorMessage = currentStatus?.error || 'Payment failed'\n setError(errorMessage)\n onFailed?.(errorMessage)\n return\n }\n\n // Continue monitoring\n setRetryCount((prev) => prev + 1)\n\n if (retryCount >= maxRetries) {\n // Max retries reached\n if (intervalRef.current) {\n clearInterval(intervalRef.current)\n }\n isMonitoringRef.current = false\n setIsLoading(false)\n const timeoutError =\n 'Payment confirmation timeout - please check your transaction manually'\n setError(timeoutError)\n onFailed?.(timeoutError)\n return\n }\n } catch (error) {\n console.error('Error monitoring payment:', {\n transactionId,\n purchaseId,\n error,\n })\n setRetryCount((prev) => prev + 1)\n\n if (retryCount >= maxRetries) {\n if (intervalRef.current) {\n clearInterval(intervalRef.current)\n }\n isMonitoringRef.current = false\n setIsLoading(false)\n const monitorError = 'Failed to monitor payment status'\n setError(monitorError)\n onFailed?.(monitorError)\n }\n }\n }\n\n // Start monitoring immediately\n await monitor()\n\n // Continue monitoring at intervals\n intervalRef.current = setInterval(monitor, retryInterval)\n }, [\n transactionId,\n purchaseId,\n checkTransactionStatus,\n checkPaymentStatus,\n onConfirmed,\n onFailed,\n maxRetries,\n retryInterval,\n retryCount,\n ])\n\n // Stop monitoring\n const stopMonitoring = useCallback(() => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current)\n }\n isMonitoringRef.current = false\n setIsLoading(false)\n }, [])\n\n // Manual status check\n const checkStatus = useCallback(async () => {\n if (!transactionId && !purchaseId) return\n\n setIsLoading(true)\n setError(null)\n\n try {\n if (transactionId) {\n const txStatus = await checkTransactionStatus(transactionId)\n setStatus(txStatus)\n }\n\n if (purchaseId) {\n const payStatus = await checkPaymentStatus(purchaseId)\n setPaymentStatus(payStatus)\n }\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : 'Failed to check status'\n setError(errorMessage)\n console.error('Failed to check payment status:', {\n transactionId,\n purchaseId,\n error,\n })\n } finally {\n setIsLoading(false)\n }\n }, [transactionId, purchaseId, checkTransactionStatus, checkPaymentStatus])\n\n // Auto-start monitoring when transaction/purchase ID is provided\n useEffect(() => {\n if ((transactionId || purchaseId) && !isMonitoringRef.current) {\n startMonitoring()\n }\n\n return () => {\n stopMonitoring()\n }\n }, [transactionId, purchaseId, startMonitoring, stopMonitoring])\n\n // Get current confirmation status\n const getConfirmationStatus = useCallback(() => {\n if (paymentStatus?.status === 'confirmed') return 'confirmed'\n if (paymentStatus?.status === 'failed') return 'failed'\n if (status?.confirmationStatus === 'finalized') return 'confirmed'\n if (status?.confirmationStatus === 'confirmed') return 'confirmed'\n if (status?.confirmationStatus === 'failed' || status?.error)\n return 'failed'\n return 'pending'\n }, [status, paymentStatus])\n\n // Get Solscan URL for transaction\n const getSolscanUrl = useCallback(\n (signature?: string) => {\n const txId = signature || transactionId\n if (!txId) return null\n return `https://solscan.io/tx/${txId}`\n },\n [transactionId]\n )\n\n return {\n status,\n paymentStatus,\n isLoading,\n error,\n retryCount,\n maxRetries,\n isMonitoring: isMonitoringRef.current,\n confirmationStatus: getConfirmationStatus(),\n startMonitoring,\n stopMonitoring,\n checkStatus,\n getSolscanUrl,\n isConfirmed: getConfirmationStatus() === 'confirmed',\n isFailed: getConfirmationStatus() === 'failed',\n isPending: getConfirmationStatus() === 'pending',\n }\n}\n"]}
|