@omnikit-js/ui 0.9.49 → 0.9.50

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/client/AddPaymentMethodForm/index.tsx","../src/components/server/Billing/actions.ts","../src/components/client/BillingContent/index.tsx","../src/components/client/PaymentForm/index.tsx"],"names":["result","isDark","useState","useEffect","jsxs","jsx","Button","PaymentForm","Fragment","TextInput","Alert"],"mappings":"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","file":"chunk-CBEYQYWG.js","sourcesContent":["'use client'\n\nimport { useState, useEffect, useMemo } from 'react'\nimport { loadStripe, Stripe } from '@stripe/stripe-js'\nimport {\n Elements,\n PaymentElement,\n useStripe,\n useElements,\n} from '@stripe/react-stripe-js'\nimport { Button } from '@marcoschwartz/lite-ui'\n\ninterface PaymentFormProps {\n customerId: number\n businessName?: string\n onSuccess: () => void\n onCancel?: () => void\n onSubmit: (stripePaymentMethodId: string, setAsDefault: boolean) => Promise<{ success: boolean; error?: string }>\n // Guest checkout props\n onGuestCheckout?: (stripePaymentMethodId: string) => Promise<{ success: boolean; error?: string }>\n isGuestMode?: boolean\n submitButtonText?: string\n isProcessing?: boolean\n}\n\nfunction PaymentForm({\n customerId,\n businessName,\n onSuccess,\n onCancel,\n onSubmit,\n onGuestCheckout,\n isGuestMode = false,\n submitButtonText,\n isProcessing: externalIsProcessing = false,\n}: PaymentFormProps) {\n const stripe = useStripe()\n const elements = useElements()\n const [isProcessing, setIsProcessing] = useState(false)\n const [errorMessage, setErrorMessage] = useState<string | null>(null)\n const [setAsDefault, setSetAsDefault] = useState(true)\n\n // Suppress unused customerId warning - it's passed for future use\n void customerId\n\n // Use external processing state if provided\n const processing = externalIsProcessing || isProcessing\n\n const handleSubmit = async () => {\n if (!stripe || !elements) {\n return\n }\n\n setIsProcessing(true)\n setErrorMessage(null)\n\n try {\n // Submit the elements first (required by Stripe)\n const { error: submitError } = await elements.submit()\n\n if (submitError) {\n setErrorMessage(submitError.message || 'Failed to validate payment details')\n setIsProcessing(false)\n return\n }\n\n // Now create the payment method\n const { error, paymentMethod } = await stripe.createPaymentMethod({\n elements,\n })\n\n if (error) {\n setErrorMessage(error.message || 'Failed to create payment method')\n setIsProcessing(false)\n return\n }\n\n // Guest checkout flow - create customer, add PM, and pay in one go\n if (isGuestMode && onGuestCheckout) {\n const result = await onGuestCheckout(paymentMethod!.id)\n if (!result.success) {\n throw new Error(result.error || 'Payment failed')\n }\n // onGuestCheckout handles redirect on success\n return\n }\n\n // Regular flow - just add payment method\n const result = await onSubmit(paymentMethod!.id, setAsDefault)\n\n if (!result.success) {\n throw new Error(result.error || 'Failed to add payment method')\n }\n\n onSuccess()\n } catch (error: unknown) {\n setErrorMessage(error instanceof Error ? error.message : String(error) || 'An error occurred')\n setIsProcessing(false)\n }\n }\n\n // Options for PaymentElement with business name\n const paymentElementOptions = useMemo(() => ({\n ...(businessName && {\n business: { name: businessName },\n }),\n }), [businessName])\n\n // Default button text based on mode\n const buttonText = submitButtonText || (isGuestMode ? 'Pay Now' : 'Add Payment Method')\n\n return (\n <div className=\"space-y-4\">\n <PaymentElement options={paymentElementOptions} />\n\n {errorMessage && (\n <div className=\"text-red-600 dark:text-red-400 text-sm\">\n {errorMessage}\n </div>\n )}\n\n {/* Only show \"set as default\" for non-guest mode */}\n {!isGuestMode && (\n <div className=\"flex items-center gap-2 pt-2\">\n <input\n type=\"checkbox\"\n id=\"setDefault\"\n checked={setAsDefault}\n onChange={(e) => setSetAsDefault(e.target.checked)}\n className=\"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500\"\n />\n <label\n htmlFor=\"setDefault\"\n className=\"text-sm text-gray-600 dark:text-gray-400\"\n >\n Set as default payment method\n </label>\n </div>\n )}\n\n {/* Guest mode: single pay button */}\n {isGuestMode ? (\n <Button\n type=\"button\"\n variant=\"primary\"\n className=\"w-full\"\n size=\"lg\"\n disabled={!stripe || processing}\n onClick={handleSubmit}\n >\n {processing ? 'Processing...' : buttonText}\n </Button>\n ) : (\n /* Regular mode: cancel + add buttons */\n <div className=\"flex gap-3 justify-end mt-6 pt-4 border-t border-gray-200 dark:border-gray-700\">\n {onCancel && (\n <Button\n type=\"button\"\n variant=\"secondary\"\n onClick={onCancel}\n disabled={processing}\n >\n Cancel\n </Button>\n )}\n <Button type=\"button\" variant=\"primary\" disabled={!stripe || processing} onClick={handleSubmit}>\n {processing ? 'Processing...' : buttonText}\n </Button>\n </div>\n )}\n </div>\n )\n}\n\nexport interface AddPaymentMethodFormProps {\n customerId: number\n stripePublishableKey: string\n businessName?: string\n onSuccess: () => void\n onCancel?: () => void\n onSubmit: (stripePaymentMethodId: string, setAsDefault: boolean) => Promise<{ success: boolean; error?: string }>\n // Guest checkout props\n onGuestCheckout?: (stripePaymentMethodId: string) => Promise<{ success: boolean; error?: string }>\n isGuestMode?: boolean\n guestEmail?: string\n submitButtonText?: string\n isProcessing?: boolean\n}\n\nexport function AddPaymentMethodForm({\n customerId,\n stripePublishableKey,\n businessName,\n onSuccess,\n onCancel,\n onSubmit,\n onGuestCheckout,\n isGuestMode = false,\n guestEmail,\n submitButtonText,\n isProcessing,\n}: AddPaymentMethodFormProps) {\n const [stripePromise, setStripePromise] = useState<Promise<Stripe | null> | null>(null)\n const [theme, setTheme] = useState<'light' | 'dark'>('light')\n\n // Suppress unused guestEmail warning - available for future use\n void guestEmail\n\n useEffect(() => {\n if (stripePublishableKey) {\n setStripePromise(loadStripe(stripePublishableKey))\n }\n }, [stripePublishableKey])\n\n useEffect(() => {\n // Check if dark mode is active\n const isDark = document.documentElement.classList.contains('dark') ||\n window.matchMedia('(prefers-color-scheme: dark)').matches\n setTheme(isDark ? 'dark' : 'light')\n\n // Listen for theme changes\n const observer = new MutationObserver(() => {\n const isDark = document.documentElement.classList.contains('dark')\n setTheme(isDark ? 'dark' : 'light')\n })\n\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class'],\n })\n\n return () => observer.disconnect()\n }, [])\n\n const stripeOptions = useMemo(() => ({\n mode: 'setup' as const,\n currency: 'usd',\n paymentMethodCreation: 'manual' as const,\n appearance: {\n theme: theme === 'dark' ? ('night' as const) : ('stripe' as const),\n variables: {\n colorPrimary: '#3b82f6',\n ...(theme === 'dark' && {\n // Override night theme's blue tints with neutral grays\n colorBackground: '#171717',\n colorText: '#fafafa',\n colorTextSecondary: '#a3a3a3',\n colorDanger: '#ef4444',\n }),\n fontFamily: 'system-ui, -apple-system, sans-serif',\n spacingUnit: '4px',\n borderRadius: '6px',\n },\n ...(theme === 'dark' && {\n rules: {\n '.Input': {\n backgroundColor: '#262626',\n borderColor: '#404040',\n },\n '.Tab': {\n backgroundColor: '#262626',\n borderColor: '#404040',\n },\n '.Tab--selected': {\n backgroundColor: '#171717',\n borderColor: '#3b82f6',\n },\n '.Label': {\n color: '#a3a3a3',\n },\n },\n }),\n },\n ...(businessName && {\n business: {\n name: businessName,\n },\n }),\n }), [theme, businessName])\n\n if (!stripePromise) {\n return (\n <div className=\"text-center py-8\">\n <p className=\"text-gray-600 dark:text-gray-400\">Loading...</p>\n </div>\n )\n }\n\n return (\n <Elements stripe={stripePromise} options={stripeOptions}>\n <PaymentForm\n customerId={customerId}\n businessName={businessName}\n onSuccess={onSuccess}\n onCancel={onCancel}\n onSubmit={onSubmit}\n onGuestCheckout={onGuestCheckout}\n isGuestMode={isGuestMode}\n submitButtonText={submitButtonText}\n isProcessing={isProcessing}\n />\n </Elements>\n )\n}\n\nexport default AddPaymentMethodForm\n","'use server';\n\n/**\n * Billing Server Actions\n *\n * Server actions for billing mutations (add payment method, subscribe, cancel, etc.)\n * These actions can be called from client components.\n */\n\nimport type { PaymentMethod, Subscription, Customer, CustomerAddress } from './types';\n\ninterface ActionConfig {\n baseUrl: string;\n apiKey?: string;\n accessToken?: string;\n projectId: number;\n}\n\ninterface ActionResult<T = void> {\n success: boolean;\n data?: T;\n error?: string;\n}\n\nfunction createHeaders(config: ActionConfig): Record<string, string> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json'\n };\n\n if (config.accessToken) {\n headers['Authorization'] = `Bearer ${config.accessToken}`;\n }\n\n if (config.apiKey) {\n headers['X-API-Key'] = config.apiKey;\n }\n\n return headers;\n}\n\nasync function fetchAPI<T>(\n config: ActionConfig,\n url: string,\n options: RequestInit = {}\n): Promise<{ success: boolean; data?: T; error?: string }> {\n try {\n const response = await fetch(url, {\n ...options,\n headers: {\n ...createHeaders(config),\n ...options.headers as Record<string, string>,\n },\n });\n\n return await response.json();\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'API request failed'\n };\n }\n}\n\n/**\n * Add a payment method for a customer\n */\nexport async function addPaymentMethod(\n config: ActionConfig,\n customerId: number,\n stripePaymentMethodId: string,\n setAsDefault: boolean = false\n): Promise<ActionResult<PaymentMethod>> {\n const { baseUrl, projectId } = config;\n\n const result = await fetchAPI<PaymentMethod>(\n config,\n `${baseUrl}/billing/customers/${customerId}/payment-methods`,\n {\n method: 'POST',\n body: JSON.stringify({\n project_id: projectId,\n type: 'card',\n stripe_payment_method_id: stripePaymentMethodId,\n set_as_default: setAsDefault\n })\n }\n );\n\n if (!result.success) {\n return { success: false, error: result.error || 'Failed to add payment method' };\n }\n\n return { success: true, data: result.data };\n}\n\n/**\n * Remove a payment method\n */\nexport async function removePaymentMethod(\n config: ActionConfig,\n customerId: number,\n paymentMethodId: string\n): Promise<ActionResult> {\n const { baseUrl, projectId } = config;\n\n const isStripeId = paymentMethodId.startsWith('pm_');\n const idType = isStripeId ? 'stripe' : 'database';\n\n const result = await fetchAPI(\n config,\n `${baseUrl}/billing/payment-methods/${paymentMethodId}`,\n {\n method: 'DELETE',\n body: JSON.stringify({\n customer_id: customerId,\n project_id: projectId,\n id_type: idType,\n test_mode: true\n })\n }\n );\n\n if (!result.success) {\n return { success: false, error: result.error || 'Failed to remove payment method' };\n }\n\n return { success: true };\n}\n\n/**\n * Set a payment method as default\n */\nexport async function setDefaultPaymentMethod(\n config: ActionConfig,\n customerId: number,\n paymentMethodId: string\n): Promise<ActionResult> {\n const { baseUrl, projectId } = config;\n\n const isStripeId = paymentMethodId.startsWith('pm_');\n const idType = isStripeId ? 'stripe' : 'database';\n\n const result = await fetchAPI(\n config,\n `${baseUrl}/billing/payment-methods/${paymentMethodId}`,\n {\n method: 'PUT',\n body: JSON.stringify({\n customer_id: customerId,\n project_id: projectId,\n id_type: idType,\n is_default: true,\n test_mode: true\n })\n }\n );\n\n if (!result.success) {\n return { success: false, error: result.error || 'Failed to set default payment method' };\n }\n\n return { success: true };\n}\n\n/**\n * Create a subscription\n * Tax is calculated server-side by the create-subscription function\n */\nexport async function createSubscription(\n config: ActionConfig,\n customerId: number,\n priceId: number,\n paymentMethodId?: string\n): Promise<ActionResult<Subscription>> {\n const { baseUrl, projectId } = config;\n\n const result = await fetchAPI<Subscription>(\n config,\n `${baseUrl}/billing/subscriptions`,\n {\n method: 'POST',\n body: JSON.stringify({\n customer_id: customerId,\n price_id: priceId,\n payment_method_id: paymentMethodId || undefined,\n project_id: projectId,\n sync_to_stripe: true,\n test_mode: true\n })\n }\n );\n\n if (!result.success) {\n return { success: false, error: result.error || 'Failed to create subscription' };\n }\n\n return { success: true, data: result.data };\n}\n\n/**\n * Cancel a subscription\n */\nexport async function cancelSubscription(\n config: ActionConfig,\n subscriptionId: number,\n cancelAtPeriodEnd: boolean = true\n): Promise<ActionResult> {\n const { baseUrl, projectId } = config;\n\n const result = await fetchAPI(\n config,\n `${baseUrl}/billing/subscriptions/${subscriptionId}/cancel`,\n {\n method: 'POST',\n body: JSON.stringify({\n project_id: projectId,\n cancel_at_period_end: cancelAtPeriodEnd,\n cancellation_reason: 'requested'\n })\n }\n );\n\n if (!result.success) {\n return { success: false, error: result.error || 'Failed to cancel subscription' };\n }\n\n return { success: true };\n}\n\n/**\n * Update subscription (change plan)\n */\nexport async function updateSubscription(\n config: ActionConfig,\n subscriptionId: number,\n newPriceId: number\n): Promise<ActionResult<Subscription>> {\n const { baseUrl, projectId } = config;\n\n const result = await fetchAPI<Subscription>(\n config,\n `${baseUrl}/billing/subscriptions/${subscriptionId}`,\n {\n method: 'PUT',\n body: JSON.stringify({\n project_id: projectId,\n price_id: newPriceId,\n sync_to_stripe: true\n })\n }\n );\n\n if (!result.success) {\n return { success: false, error: result.error || 'Failed to update subscription' };\n }\n\n return { success: true, data: result.data };\n}\n\n/**\n * Resume a canceled subscription\n */\nexport async function resumeSubscription(\n config: ActionConfig,\n subscriptionId: number\n): Promise<ActionResult<Subscription>> {\n const { baseUrl, projectId } = config;\n\n const result = await fetchAPI<Subscription>(\n config,\n `${baseUrl}/billing/subscriptions/${subscriptionId}/resume`,\n {\n method: 'POST',\n body: JSON.stringify({\n project_id: projectId\n })\n }\n );\n\n if (!result.success) {\n return { success: false, error: result.error || 'Failed to resume subscription' };\n }\n\n return { success: true, data: result.data };\n}\n\n/**\n * Fetch payment configuration (Stripe publishable key)\n */\nexport async function fetchPaymentConfig(\n config: ActionConfig\n): Promise<ActionResult<{ public_key: string; mode: string }>> {\n const { baseUrl, projectId } = config;\n\n const result = await fetchAPI<{ public_key: string; mode: string }>(\n config,\n `${baseUrl}/billing/payment-config?project_id=${projectId}&test_mode=true`\n );\n\n if (!result.success) {\n return { success: false, error: result.error || 'Failed to fetch payment configuration' };\n }\n\n return { success: true, data: result.data };\n}\n\n/**\n * Tax calculation result\n */\nexport interface TaxCalculation {\n tax_rate: number;\n tax_amount: number;\n tax_type: string;\n tax_label: string;\n jurisdiction: string;\n reverse_charge: boolean;\n customer_country?: string;\n seller_country?: string;\n subtotal: number;\n total: number;\n reason?: string;\n}\n\n/**\n * Calculate tax for a transaction based on customer location\n */\nexport async function calculateTax(\n config: ActionConfig,\n params: {\n customer_id?: number;\n country_code?: string;\n amount: number;\n product_type?: 'digital' | 'physical' | 'service';\n customer_tax_id?: string;\n }\n): Promise<ActionResult<TaxCalculation>> {\n const { baseUrl, projectId } = config;\n\n const result = await fetchAPI<TaxCalculation>(\n config,\n `${baseUrl}/billing/tax/calculate`,\n {\n method: 'POST',\n body: JSON.stringify({\n project_id: projectId,\n ...params\n })\n }\n );\n\n if (!result.success) {\n return { success: false, error: result.error || 'Failed to calculate tax' };\n }\n\n return { success: true, data: result.data };\n}\n\n/**\n * Customer update data\n */\nexport interface CustomerUpdateData {\n name?: string;\n email?: string;\n phone?: string;\n currency?: string;\n address?: CustomerAddress;\n customer_type?: 'individual' | 'business';\n company_name?: string;\n vat_number?: string;\n tax_id_type?: string;\n tax_id_value?: string;\n}\n\n/**\n * Update customer information\n */\nexport async function updateCustomer(\n config: ActionConfig,\n customerId: number,\n data: CustomerUpdateData\n): Promise<ActionResult<Customer>> {\n const { baseUrl, projectId } = config;\n\n const result = await fetchAPI<Customer>(\n config,\n `${baseUrl}/billing/customers/${customerId}`,\n {\n method: 'PUT',\n body: JSON.stringify({\n project_id: projectId,\n ...data\n })\n }\n );\n\n if (!result.success) {\n return { success: false, error: result.error || 'Failed to update customer' };\n }\n\n return { success: true, data: result.data };\n}\n","'use client'\n\nimport { useState, useEffect } from 'react'\nimport { Button, Tabs, Card, TextInput, Select, Radio, ProgressBar, Alert, Modal } from '@marcoschwartz/lite-ui'\nimport { useRouter } from 'next/navigation'\nimport {\n removePaymentMethod,\n setDefaultPaymentMethod,\n createSubscription,\n cancelSubscription,\n addPaymentMethod,\n fetchPaymentConfig,\n calculateTax,\n updateCustomer,\n type TaxCalculation,\n type CustomerUpdateData\n} from '../../server/Billing/actions'\nimport type { Customer, PaymentMethod, Entitlement, FeatureUsage } from '../../server/Billing/types'\nimport { AddPaymentMethodForm } from '../AddPaymentMethodForm'\n\ninterface ActionConfig {\n baseUrl: string;\n apiKey?: string;\n accessToken?: string;\n projectId: number;\n}\n\ninterface SubscriptionDisplay {\n id: number;\n plan: string;\n status: string;\n price: string;\n period: string;\n nextBilling: string;\n cancelAtPeriodEnd?: boolean;\n}\n\ninterface InvoiceDisplay {\n id: string;\n date: string;\n amount: string;\n status: string;\n url: string;\n}\n\ninterface PlanDisplay {\n id: number;\n priceId: number;\n name: string;\n description?: string;\n price: string;\n period: string;\n features: string[];\n current: boolean;\n popular?: boolean;\n}\n\ninterface BillingContentProps {\n subscription: SubscriptionDisplay | null;\n invoices: InvoiceDisplay[];\n paymentMethods: PaymentMethod[];\n plans: PlanDisplay[];\n customer: Customer;\n entitlements: Entitlement[];\n featureUsage: Record<string, FeatureUsage>;\n actionConfig: ActionConfig;\n initialTaxInfo?: TaxCalculation | null;\n businessName?: string;\n className?: string;\n}\n\n/**\n * Self-contained styles for BillingContent.\n * Uses scoped class names (ok-*) so they work without the consuming app's\n * Tailwind scanning this library. Container queries ensure responsive grids\n * adapt to actual container width (works with sidebars).\n */\nconst billingStyles = `\n /* === Container query grids === */\n .ok-plans-wrap { container-type: inline-size; }\n .ok-plans-grid { display: grid; gap: 1.5rem; grid-template-columns: 1fr; }\n @container (min-width: 550px) {\n .ok-plans-grid[data-cols=\"2\"],\n .ok-plans-grid[data-cols=\"3\"],\n .ok-plans-grid[data-cols=\"4\"] { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n }\n @container (min-width: 800px) {\n .ok-plans-grid[data-cols=\"3\"] { grid-template-columns: repeat(3, minmax(0, 1fr)); }\n .ok-plans-grid[data-cols=\"4\"] { grid-template-columns: repeat(3, minmax(0, 1fr)); }\n }\n @container (min-width: 1050px) {\n .ok-plans-grid[data-cols=\"4\"] { grid-template-columns: repeat(4, minmax(0, 1fr)); }\n }\n\n .ok-form-wrap { container-type: inline-size; }\n .ok-form-grid { display: grid; grid-template-columns: 1fr; gap: 1rem; }\n .ok-form-full { grid-column: 1 / -1; }\n @container (min-width: 550px) {\n .ok-form-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n }\n\n /* === Text colors === */\n .ok-text { color: #111827; }\n .ok-text-sub { color: #374151; }\n .ok-text-muted { color: #4b5563; }\n .ok-text-faint { color: #6b7280; }\n .ok-text-dim { color: #9ca3af; }\n .ok-text-success { color: #059669; }\n .ok-text-warn { color: #d97706; }\n .ok-text-link { color: #2563eb; }\n\n /* === Backgrounds === */\n .ok-bg-blue { background-color: #dbeafe; }\n .ok-bg-gray { background-color: #f3f4f6; }\n .ok-bg-green { background-color: #dcfce7; }\n .ok-bg-green-solid { background-color: #16a34a; }\n .ok-bg-blue-solid { background-color: #2563eb; }\n\n /* === Badges === */\n .ok-badge { display: inline-flex; align-items: center; border-radius: 9999px; font-weight: 500; }\n .ok-badge-active { background-color: #dcfce7; color: #166534; }\n .ok-badge-error { background-color: #fee2e2; color: #991b1b; }\n .ok-badge-warn { background-color: #fef9c3; color: #854d0e; }\n .ok-badge-info { background-color: #dbeafe; color: #1e40af; }\n .ok-badge-paid { background-color: #dcfce7; color: #166534; }\n .ok-badge-open { background-color: #fef9c3; color: #854d0e; }\n .ok-badge-neutral { background-color: #f3f4f6; color: #1f2937; }\n\n /* === Borders === */\n .ok-border { border-color: #e5e7eb; }\n .ok-border-selected { border-color: #3b82f6; background-color: #eff6ff; }\n .ok-border-dashed { border-style: dashed; border-color: #d1d5db; }\n\n /* === Dark mode === */\n .dark .ok-text { color: #f9fafb; }\n .dark .ok-text-sub { color: #d4d4d4; }\n .dark .ok-text-muted { color: #a3a3a3; }\n .dark .ok-text-faint { color: #a3a3a3; }\n .dark .ok-text-dim { color: #525252; }\n .dark .ok-text-success { color: #4ade80; }\n .dark .ok-text-warn { color: #fbbf24; }\n .dark .ok-text-link { color: #d4d4d4; }\n\n .dark .ok-bg-blue { background-color: #404040; }\n .dark .ok-bg-gray { background-color: #262626; }\n .dark .ok-bg-green { background-color: #14532d; }\n\n .dark .ok-badge-active { background-color: rgba(22,101,52,0.3); color: #86efac; }\n .dark .ok-badge-error { background-color: rgba(153,27,27,0.3); color: #fca5a5; }\n .dark .ok-badge-warn { background-color: rgba(133,77,14,0.3); color: #fde047; }\n .dark .ok-badge-info { background-color: #404040; color: #d4d4d4; }\n .dark .ok-badge-paid { background-color: rgba(22,101,52,0.3); color: #86efac; }\n .dark .ok-badge-open { background-color: rgba(133,77,14,0.3); color: #fde047; }\n .dark .ok-badge-neutral { background-color: #262626; color: #d4d4d4; }\n\n .dark .ok-border { border-color: #404040; }\n .dark .ok-border-selected { border-color: #9ca3af; background-color: rgba(64,64,64,0.5); }\n .dark .ok-border-dashed { border-color: #525252; }\n`;\n\nexport function BillingContent({\n subscription,\n invoices,\n paymentMethods,\n plans,\n customer,\n entitlements,\n featureUsage,\n actionConfig,\n initialTaxInfo,\n businessName,\n className = ''\n}: BillingContentProps) {\n const router = useRouter();\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [success, setSuccess] = useState<string | null>(null);\n\n // Tab state - use key to force re-render when switching programmatically\n const [activeTabIndex, setActiveTabIndex] = useState(0);\n\n // Modal states\n const [isAddPaymentModalOpen, setIsAddPaymentModalOpen] = useState(false);\n const [isRemovePaymentModalOpen, setIsRemovePaymentModalOpen] = useState(false);\n const [isCancelModalOpen, setIsCancelModalOpen] = useState(false);\n const [isUpgradeModalOpen, setIsUpgradeModalOpen] = useState(false);\n const [selectedPaymentMethod, setSelectedPaymentMethod] = useState<PaymentMethod | null>(null);\n const [selectedPlan, setSelectedPlan] = useState<PlanDisplay | null>(null);\n const [selectedUpgradePaymentMethod, setSelectedUpgradePaymentMethod] = useState<number | null>(null);\n const [stripePublishableKey, setStripePublishableKey] = useState<string | null>(null);\n const [stripeLoading, setStripeLoading] = useState(false);\n const [isUpgrading, setIsUpgrading] = useState(false);\n const [upgradeSuccess, setUpgradeSuccess] = useState(false);\n // Initialize with server-side tax info if provided\n const [taxInfo, setTaxInfo] = useState<TaxCalculation | null>(initialTaxInfo || null);\n const [taxLoading, setTaxLoading] = useState(false);\n\n // Preferences form state\n const [preferencesForm, setPreferencesForm] = useState({\n name: customer.name || '',\n email: customer.email || '',\n phone: customer.phone || '',\n customer_type: customer.customer_type || 'individual' as 'individual' | 'business',\n company_name: customer.company_name || '',\n vat_number: customer.vat_number || '',\n address_line1: customer.address?.line1 || '',\n address_line2: customer.address?.line2 || '',\n address_city: customer.address?.city || '',\n address_state: customer.address?.state || '',\n address_postal_code: customer.address?.postal_code || '',\n address_country: customer.address?.country || '',\n });\n const [preferencesSaving, setPreferencesSaving] = useState(false);\n const [preferencesSuccess, setPreferencesSuccess] = useState(false);\n\n // Fetch Stripe publishable key on mount\n useEffect(() => {\n async function loadStripeConfig() {\n setStripeLoading(true);\n try {\n const result = await fetchPaymentConfig(actionConfig);\n if (result.success && result.data?.public_key) {\n setStripePublishableKey(result.data.public_key);\n }\n } catch (err) {\n console.error('Failed to load Stripe config:', err);\n } finally {\n setStripeLoading(false);\n }\n }\n loadStripeConfig();\n }, [actionConfig]);\n\n const handleCancelSubscription = async () => {\n if (!subscription) return;\n\n setIsLoading(true);\n setError(null);\n\n const result = await cancelSubscription(actionConfig, subscription.id);\n\n if (!result.success) {\n setError(result.error || 'Failed to cancel subscription');\n } else {\n setSuccess('Subscription will be canceled at the end of the billing period');\n setIsCancelModalOpen(false);\n }\n\n setIsLoading(false);\n };\n\n const handleAddPaymentMethod = async (stripePaymentMethodId: string, setAsDefault: boolean) => {\n const result = await addPaymentMethod(actionConfig, customer.id, stripePaymentMethodId, setAsDefault);\n return result;\n };\n\n const handleAddPaymentSuccess = () => {\n setIsAddPaymentModalOpen(false);\n setSuccess('Payment method added successfully');\n router.refresh();\n };\n\n const handleRemovePaymentClick = (pm: PaymentMethod) => {\n setSelectedPaymentMethod(pm);\n setIsRemovePaymentModalOpen(true);\n };\n\n const handleConfirmRemovePayment = async () => {\n if (!selectedPaymentMethod) return;\n\n setIsLoading(true);\n setError(null);\n\n // Use Stripe payment method ID if available, otherwise use database ID\n const paymentMethodId = selectedPaymentMethod.provider_payment_method_id || String(selectedPaymentMethod.id);\n const result = await removePaymentMethod(actionConfig, customer.id, paymentMethodId);\n\n if (!result.success) {\n setError(result.error || 'Failed to remove payment method');\n } else {\n setSuccess('Payment method removed');\n setIsRemovePaymentModalOpen(false);\n setSelectedPaymentMethod(null);\n router.refresh();\n }\n\n setIsLoading(false);\n };\n\n // Open upgrade modal when selecting a plan\n const handleSelectPlan = async (plan: PlanDisplay) => {\n if (plan.current || !plan.priceId) return;\n\n setSelectedPlan(plan);\n setIsUpgradeModalOpen(true);\n setError(null);\n\n // Pre-select default payment method if plan is paid\n const priceNum = parseFloat(plan.price.replace(/[^0-9.]/g, '')) || 0;\n if (priceNum > 0) {\n const defaultPaymentMethod = paymentMethods.find((pm) => pm.is_default);\n setSelectedUpgradePaymentMethod(defaultPaymentMethod?.id || null);\n\n const amountInCents = Math.round(priceNum * 100);\n\n // Use server-side tax rate for immediate estimate while API call is pending\n if (initialTaxInfo && initialTaxInfo.tax_rate > 0) {\n const estimatedTax = Math.round(amountInCents * initialTaxInfo.tax_rate / 100);\n setTaxInfo({\n ...initialTaxInfo,\n tax_amount: estimatedTax,\n subtotal: amountInCents,\n total: amountInCents + estimatedTax\n });\n } else {\n setTaxInfo(null);\n }\n\n // Fetch precise tax from API (will update the estimate)\n setTaxLoading(true);\n try {\n const taxResult = await calculateTax(actionConfig, {\n customer_id: customer.id,\n amount: amountInCents,\n product_type: 'digital'\n });\n\n if (taxResult.success && taxResult.data) {\n setTaxInfo(taxResult.data);\n }\n } catch (err) {\n console.error('Failed to calculate tax:', err);\n } finally {\n setTaxLoading(false);\n }\n } else {\n setSelectedUpgradePaymentMethod(null);\n setTaxInfo(null);\n }\n };\n\n // Confirm and process the upgrade\n // Always use createSubscription - it handles both new subscriptions and plan changes\n // (the backend cancels old subscription and creates new one)\n const handleConfirmUpgrade = async () => {\n if (!selectedPlan) return;\n\n const priceNum = parseFloat(selectedPlan.price.replace(/[^0-9.]/g, '')) || 0;\n\n // For paid plans, require payment method if available\n if (priceNum > 0 && !selectedUpgradePaymentMethod && paymentMethods.length > 0) {\n setError('Please select a payment method');\n return;\n }\n\n setIsUpgrading(true);\n setError(null);\n\n try {\n // Always use createSubscription - backend handles canceling old subscription\n // Tax is calculated server-side in create-subscription function\n const paymentMethodId = selectedUpgradePaymentMethod\n ? paymentMethods.find(pm => pm.id === selectedUpgradePaymentMethod)?.provider_payment_method_id || String(selectedUpgradePaymentMethod)\n : undefined;\n\n const result = await createSubscription(\n actionConfig,\n customer.id,\n selectedPlan.priceId,\n paymentMethodId\n );\n if (!result.success) {\n setError(result.error || 'Failed to create subscription');\n setIsUpgrading(false);\n return;\n }\n\n // Success\n setIsUpgradeModalOpen(false);\n setUpgradeSuccess(true);\n router.refresh();\n } catch (err) {\n setError(err instanceof Error ? err.message : 'An error occurred');\n } finally {\n setIsUpgrading(false);\n }\n };\n\n const handleCloseSuccessModal = () => {\n setUpgradeSuccess(false);\n setSelectedPlan(null);\n setSelectedUpgradePaymentMethod(null);\n setTaxInfo(null);\n };\n\n // Save preferences\n const handleSavePreferences = async () => {\n setPreferencesSaving(true);\n setError(null);\n setPreferencesSuccess(false);\n\n try {\n const updateData: CustomerUpdateData = {\n name: preferencesForm.name || undefined,\n email: preferencesForm.email || undefined,\n phone: preferencesForm.phone || undefined,\n customer_type: preferencesForm.customer_type,\n company_name: preferencesForm.customer_type === 'business' ? preferencesForm.company_name : undefined,\n vat_number: preferencesForm.vat_number || undefined,\n address: {\n line1: preferencesForm.address_line1 || undefined,\n line2: preferencesForm.address_line2 || undefined,\n city: preferencesForm.address_city || undefined,\n state: preferencesForm.address_state || undefined,\n postal_code: preferencesForm.address_postal_code || undefined,\n country: preferencesForm.address_country || undefined,\n },\n };\n\n const result = await updateCustomer(actionConfig, customer.id, updateData);\n\n if (!result.success) {\n setError(result.error || 'Failed to save preferences');\n } else {\n setPreferencesSuccess(true);\n router.refresh();\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'An error occurred');\n } finally {\n setPreferencesSaving(false);\n }\n };\n\n const handleSetDefaultPaymentMethod = async (pm: PaymentMethod) => {\n setIsLoading(true);\n setError(null);\n\n // Use Stripe payment method ID if available, otherwise use database ID\n const paymentMethodId = pm.provider_payment_method_id || String(pm.id);\n const result = await setDefaultPaymentMethod(actionConfig, customer.id, paymentMethodId);\n\n if (!result.success) {\n setError(result.error || 'Failed to set default payment method');\n } else {\n setSuccess('Default payment method updated');\n router.refresh();\n }\n\n setIsLoading(false);\n };\n\n // Switch to Plans tab when Change Plan is clicked\n const handleChangePlanClick = () => {\n setActiveTabIndex(1); // Plans is index 1\n };\n\n const tabs = [\n {\n id: 'subscription',\n label: 'Subscription',\n content: (\n <div className=\"space-y-6 mt-6\">\n {/* Status Messages */}\n {error && (\n <Alert variant=\"error\">{error}</Alert>\n )}\n {success && (\n <Alert variant=\"success\">{success}</Alert>\n )}\n\n {/* Current Plan */}\n <Card>\n <div>\n <div className=\"flex items-start justify-between mb-4\">\n <div>\n <h3 className=\"text-lg font-semibold mb-2\">Current Plan</h3>\n {subscription ? (\n <>\n <div className=\"flex items-baseline gap-2\">\n <span className=\"text-3xl font-bold\">{subscription.price}</span>\n <span className=\"ok-text-muted\">/ {subscription.period}</span>\n </div>\n <p className=\"mt-2 text-sm ok-text-muted\">\n {subscription.plan}\n </p>\n </>\n ) : (\n <p className=\"ok-text-muted\">No active subscription</p>\n )}\n </div>\n {subscription && (\n <span className={`ok-badge px-3 py-1 text-sm ${\n subscription.status === 'active'\n ? 'ok-badge-active'\n : subscription.status === 'canceled'\n ? 'ok-badge-error'\n : 'ok-badge-warn'\n }`}>\n {subscription.cancelAtPeriodEnd ? 'Canceling' : subscription.status}\n </span>\n )}\n </div>\n\n {subscription && parseFloat(subscription.price.replace(/[^0-9.]/g, '')) > 0 && (\n <div className=\"space-y-3 mb-4\">\n <div className=\"flex justify-between text-sm\">\n <span className=\"ok-text-muted\">Next billing date</span>\n <span className=\"font-medium\">{subscription.nextBilling}</span>\n </div>\n </div>\n )}\n\n <div className=\"flex gap-3\">\n <Button className=\"flex-1\" disabled={isLoading} onClick={handleChangePlanClick}>\n {subscription ? 'Change Plan' : 'Choose a Plan'}\n </Button>\n {subscription && !subscription.cancelAtPeriodEnd && (\n <Button\n variant=\"secondary\"\n onClick={() => setIsCancelModalOpen(true)}\n disabled={isLoading}\n >\n Cancel\n </Button>\n )}\n </div>\n </div>\n </Card>\n\n {/* Feature Usage - Only show when there's an active subscription */}\n {subscription && Object.keys(featureUsage).length > 0 && (\n <Card>\n <h3 className=\"text-lg font-semibold mb-4\">Current Usage</h3>\n <div className=\"space-y-4\">\n {Object.values(featureUsage)\n .sort((a, b) => {\n // Sort order: balance_based first, numeric with usage, numeric without usage, string, boolean\n const getPriority = (usage: FeatureUsage) => {\n if (usage.display_mode === 'balance_based') return 0; // Balance-based (credits) first\n if ((usage.limit ?? 0) > 0 && (usage.current_usage ?? 0) > 0) return 1; // Numeric with usage\n if ((usage.limit ?? 0) > 0) return 2; // Numeric without usage\n if (usage.feature_type === 'string') return 3; // String\n return 4; // Boolean last\n };\n return getPriority(a) - getPriority(b);\n })\n .map((usage) => {\n // Format feature name\n const featureName = usage.feature_name || usage.feature_key\n .replace(/_/g, ' ')\n .replace(/\\b\\w/g, (c: string) => c.toUpperCase());\n\n // Balance-based features (like credits) - show remaining balance\n if (usage.display_mode === 'balance_based') {\n const unit = usage.unit ? ` ${usage.unit}` : '';\n const isLow = usage.remaining < 1000;\n return (\n <div key={usage.feature_key} className=\"flex justify-between items-center text-sm\">\n <span className=\"ok-text-sub\">{featureName}</span>\n <span className={`font-medium ${isLow ? 'ok-text-warn' : 'ok-text'}`}>\n {usage.remaining.toLocaleString()}{unit} remaining\n </span>\n </div>\n );\n }\n\n // If it has a numeric limit > 0, show as progress bar\n if ((usage.limit ?? 0) > 0) {\n const limit = usage.limit ?? 0;\n const currentUsage = usage.current_usage ?? 0;\n const percentage = (currentUsage / limit) * 100;\n const unit = usage.unit ? ` ${usage.unit}` : '';\n return (\n <div key={usage.feature_key} className=\"space-y-1\">\n <div className=\"flex justify-between text-sm\">\n <span className=\"ok-text-sub\">{featureName}</span>\n <span className=\"ok-text-muted\">\n {currentUsage.toLocaleString()} / {limit.toLocaleString()}{unit}\n </span>\n </div>\n <ProgressBar\n value={currentUsage}\n max={limit}\n variant={percentage > 80 ? 'warning' : 'default'}\n />\n </div>\n );\n }\n\n // For string features, show the value from entitlements\n if (usage.feature_type === 'string') {\n const entitlement = entitlements.find(e => e.feature_key === usage.feature_key);\n const stringValue = entitlement?.value\n ? (typeof entitlement.value === 'object' && entitlement.value !== null && 'value' in entitlement.value\n ? String(entitlement.value.value)\n : String(entitlement.value))\n : null;\n\n if (stringValue) {\n return (\n <div key={usage.feature_key} className=\"flex justify-between items-center text-sm\">\n <span className=\"ok-text-sub\">{featureName}</span>\n <span className=\"ok-text font-medium\">{stringValue}</span>\n </div>\n );\n }\n }\n\n // For boolean/unlimited features, show as simple row\n const isEnabled = usage.feature_type === 'boolean' || usage.limit === 0;\n\n return (\n <div key={usage.feature_key} className=\"flex justify-between items-center text-sm\">\n <span className=\"ok-text-sub\">{featureName}</span>\n {isEnabled ? (\n <span className=\"flex items-center gap-1.5 ok-text-success\">\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n Included\n </span>\n ) : (\n <span className=\"flex items-center gap-1.5 ok-text-dim\">\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n Not included\n </span>\n )}\n </div>\n );\n })}\n </div>\n </Card>\n )}\n </div>\n ),\n },\n {\n id: 'plans',\n label: 'Plans',\n content: (\n <div className=\"space-y-6 mt-6\">\n <div>\n <h3 className=\"text-lg font-semibold mb-2\">Choose Your Plan</h3>\n <p className=\"text-sm ok-text-muted mb-6\">\n Select the plan that best fits your needs. You can upgrade or downgrade at any time.\n </p>\n </div>\n\n {plans.length === 0 ? (\n <p className=\"ok-text-muted\">No plans available.</p>\n ) : (\n <div className=\"ok-plans-wrap\">\n <div\n className=\"ok-plans-grid\"\n data-cols={Math.min(plans.length, 4)}\n >\n {plans.map((plan) => (\n <Card\n key={plan.id}\n className={`relative flex flex-col ${plan.popular ? 'shadow-lg' : ''}`}\n >\n {plan.popular && !plan.current && (\n <div className=\"absolute -top-3 left-1/2 -translate-x-1/2\">\n <span className=\"ok-bg-blue-solid text-white text-xs font-semibold px-3 py-1 rounded-full\">\n Most Popular\n </span>\n </div>\n )}\n {plan.current && (\n <div className=\"absolute -top-3 left-1/2 -translate-x-1/2\">\n <span className=\"ok-bg-green-solid text-white text-xs font-semibold px-3 py-1 rounded-full\">\n Current Plan\n </span>\n </div>\n )}\n\n <div className=\"mb-6\">\n <h4 className=\"text-xl font-bold mb-2\">{plan.name}</h4>\n {plan.description && (\n <p className=\"text-sm ok-text-muted mb-2\">{plan.description}</p>\n )}\n <div className=\"flex items-baseline gap-2\">\n <span className=\"text-3xl font-bold\">{plan.price}</span>\n <span className=\"ok-text-muted\">/ {plan.period}</span>\n </div>\n </div>\n\n <ul className=\"space-y-3 mb-6 flex-1\">\n {plan.features.map((feature, idx) => (\n <li key={idx} className=\"flex items-start gap-2 text-sm\">\n <svg\n className=\"w-5 h-5 ok-text-success flex-shrink-0 mt-0.5\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M5 13l4 4L19 7\"\n />\n </svg>\n <span className=\"ok-text-sub\">{feature}</span>\n </li>\n ))}\n </ul>\n\n <Button\n className=\"w-full\"\n disabled={plan.current || isLoading}\n variant={plan.current ? 'secondary' : 'primary'}\n onClick={() => handleSelectPlan(plan)}\n >\n {plan.current ? 'Current Plan' : subscription ? 'Switch Plan' : 'Select Plan'}\n </Button>\n </Card>\n ))}\n </div>\n </div>\n )}\n </div>\n ),\n },\n {\n id: 'invoices',\n label: 'Invoices',\n content: (\n <div className=\"mt-6\">\n <Card>\n <h3 className=\"text-lg font-semibold mb-2\">Invoice History</h3>\n <p className=\"text-sm ok-text-muted mb-6\">\n View and download your past invoices\n </p>\n\n {invoices.length === 0 ? (\n <p className=\"ok-text-muted\">No invoices yet.</p>\n ) : (\n <div className=\"space-y-3\">\n {invoices.map((invoice) => (\n <Card key={invoice.id} className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-4\">\n <div className=\"h-10 w-10 rounded-full ok-bg-blue flex items-center justify-center\">\n <svg className=\"w-5 h-5 ok-text-link\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\" />\n </svg>\n </div>\n <div>\n <div className=\"flex items-center gap-2\">\n <p className=\"font-medium text-sm\">{invoice.id}</p>\n <span className={`ok-badge px-2 py-0.5 text-xs ${\n invoice.status === 'paid'\n ? 'ok-badge-paid'\n : invoice.status === 'open'\n ? 'ok-badge-open'\n : 'ok-badge-neutral'\n }`}>\n {invoice.status}\n </span>\n </div>\n <p className=\"text-xs ok-text-muted\">{invoice.date}</p>\n </div>\n </div>\n <div className=\"flex items-center gap-4\">\n <p className=\"font-semibold\">{invoice.amount}</p>\n {invoice.url && invoice.url !== '#' && (\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onClick={() => window.open(invoice.url, '_blank')}\n >\n Download\n </Button>\n )}\n </div>\n </Card>\n ))}\n </div>\n )}\n </Card>\n </div>\n ),\n },\n {\n id: 'payment',\n label: 'Payment Method',\n content: (\n <div className=\"mt-6\">\n <Card>\n <h3 className=\"text-lg font-semibold mb-2\">Payment Methods</h3>\n <p className=\"text-sm ok-text-muted mb-6\">\n Manage your payment methods\n </p>\n\n {paymentMethods.length === 0 ? (\n <div className=\"border ok-border-dashed rounded-lg text-center py-8\">\n <p className=\"ok-text-muted mb-4\">No payment methods on file</p>\n <Button onClick={() => setIsAddPaymentModalOpen(true)} disabled={stripeLoading}>\n {stripeLoading ? 'Loading...' : 'Add Payment Method'}\n </Button>\n </div>\n ) : (\n <div className=\"space-y-3\">\n {paymentMethods.map((pm) => (\n <Card key={pm.id} className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-4\">\n <div className=\"h-10 w-10 rounded-full ok-bg-gray flex items-center justify-center\">\n <svg className=\"w-5 h-5 ok-text-muted\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 10h18M7 15h1m4 0h1m-7 4h12a3 3 0 003-3V8a3 3 0 00-3-3H6a3 3 0 00-3 3v8a3 3 0 003 3z\" />\n </svg>\n </div>\n <div>\n <div className=\"flex items-center gap-2\">\n <p className=\"font-medium text-sm\">\n {pm.card_brand || pm.type} •••• {pm.card_last4 || pm.bank_last4 || '****'}\n </p>\n {pm.is_default && (\n <span className=\"ok-badge ok-badge-info px-2 py-0.5 text-xs\">\n Default\n </span>\n )}\n </div>\n {pm.card_exp_month && pm.card_exp_year && (\n <p className=\"text-xs ok-text-muted\">\n Expires {pm.card_exp_month}/{pm.card_exp_year}\n </p>\n )}\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n {!pm.is_default && (\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onClick={() => handleSetDefaultPaymentMethod(pm)}\n disabled={isLoading}\n >\n Set Default\n </Button>\n )}\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onClick={() => handleRemovePaymentClick(pm)}\n disabled={isLoading}\n >\n Remove\n </Button>\n </div>\n </Card>\n ))}\n\n <Button\n variant=\"secondary\"\n className=\"w-full mt-4\"\n onClick={() => setIsAddPaymentModalOpen(true)}\n disabled={stripeLoading}\n >\n {stripeLoading ? 'Loading...' : 'Add Payment Method'}\n </Button>\n </div>\n )}\n </Card>\n </div>\n ),\n },\n {\n id: 'preferences',\n label: 'Preferences',\n content: (\n <div className=\"mt-6\">\n <Card>\n <h3 className=\"text-lg font-semibold mb-2\">Billing Preferences</h3>\n <p className=\"text-sm ok-text-muted mb-6\">\n Manage your billing information and tax settings\n </p>\n\n {/* Success message */}\n {preferencesSuccess && (\n <Alert variant=\"success\" className=\"mb-6\">Preferences saved successfully</Alert>\n )}\n\n <div className=\"space-y-6\">\n {/* Customer Type */}\n <div>\n <label className=\"block text-sm font-medium ok-text-sub mb-2\">\n Customer Type\n </label>\n <Radio\n name=\"customer_type\"\n options={[\n { value: 'individual', label: 'Individual' },\n { value: 'business', label: 'Business' }\n ]}\n value={preferencesForm.customer_type}\n onChange={(value) => setPreferencesForm({ ...preferencesForm, customer_type: value as 'individual' | 'business' })}\n orientation=\"horizontal\"\n />\n </div>\n\n {/* Basic Info */}\n <div className=\"ok-form-wrap\"><div className=\"ok-form-grid\">\n <TextInput\n label={preferencesForm.customer_type === 'business' ? 'Contact Name' : 'Full Name'}\n value={preferencesForm.name}\n onChange={(e) => setPreferencesForm({ ...preferencesForm, name: e.target.value })}\n placeholder=\"John Doe\"\n />\n <TextInput\n label=\"Email\"\n type=\"email\"\n value={preferencesForm.email}\n onChange={(e) => setPreferencesForm({ ...preferencesForm, email: e.target.value })}\n placeholder=\"john@example.com\"\n />\n <TextInput\n label=\"Phone\"\n type=\"tel\"\n value={preferencesForm.phone}\n onChange={(e) => setPreferencesForm({ ...preferencesForm, phone: e.target.value })}\n placeholder=\"+1 555 123 4567\"\n />\n {preferencesForm.customer_type === 'business' && (\n <TextInput\n label=\"Company Name\"\n value={preferencesForm.company_name}\n onChange={(e) => setPreferencesForm({ ...preferencesForm, company_name: e.target.value })}\n placeholder=\"Acme Inc.\"\n />\n )}\n </div></div>\n\n {/* VAT Number (for business) */}\n {preferencesForm.customer_type === 'business' && (\n <TextInput\n label=\"VAT Number\"\n value={preferencesForm.vat_number}\n onChange={(e) => setPreferencesForm({ ...preferencesForm, vat_number: e.target.value })}\n placeholder=\"EU123456789\"\n helperText=\"For EU businesses, provide your VAT ID to enable reverse charge\"\n />\n )}\n\n {/* Address */}\n <div>\n <h4 className=\"text-sm font-medium ok-text-sub mb-3\">Billing Address</h4>\n <div className=\"ok-form-wrap\"><div className=\"ok-form-grid\">\n <div className=\"ok-form-full\">\n <TextInput\n label=\"Address Line 1\"\n value={preferencesForm.address_line1}\n onChange={(e) => setPreferencesForm({ ...preferencesForm, address_line1: e.target.value })}\n placeholder=\"123 Main Street\"\n />\n </div>\n <div className=\"ok-form-full\">\n <TextInput\n label=\"Address Line 2\"\n value={preferencesForm.address_line2}\n onChange={(e) => setPreferencesForm({ ...preferencesForm, address_line2: e.target.value })}\n placeholder=\"Apt 4B\"\n />\n </div>\n <TextInput\n label=\"City\"\n value={preferencesForm.address_city}\n onChange={(e) => setPreferencesForm({ ...preferencesForm, address_city: e.target.value })}\n placeholder=\"New York\"\n />\n <TextInput\n label=\"State / Region\"\n value={preferencesForm.address_state}\n onChange={(e) => setPreferencesForm({ ...preferencesForm, address_state: e.target.value })}\n placeholder=\"NY\"\n />\n <TextInput\n label=\"Postal Code\"\n value={preferencesForm.address_postal_code}\n onChange={(e) => setPreferencesForm({ ...preferencesForm, address_postal_code: e.target.value })}\n placeholder=\"10001\"\n />\n <Select\n label=\"Country\"\n value={preferencesForm.address_country}\n onChange={(value) => setPreferencesForm({ ...preferencesForm, address_country: value })}\n searchable={true}\n searchPlaceholder=\"Search countries...\"\n options={[\n { value: '', label: 'Select country' },\n { value: 'US', label: 'United States' },\n { value: 'CA', label: 'Canada' },\n { value: 'GB', label: 'United Kingdom' },\n { value: 'DE', label: 'Germany' },\n { value: 'FR', label: 'France' },\n { value: 'ES', label: 'Spain' },\n { value: 'IT', label: 'Italy' },\n { value: 'NL', label: 'Netherlands' },\n { value: 'BE', label: 'Belgium' },\n { value: 'AT', label: 'Austria' },\n { value: 'CH', label: 'Switzerland' },\n { value: 'SE', label: 'Sweden' },\n { value: 'NO', label: 'Norway' },\n { value: 'DK', label: 'Denmark' },\n { value: 'FI', label: 'Finland' },\n { value: 'IE', label: 'Ireland' },\n { value: 'PT', label: 'Portugal' },\n { value: 'PL', label: 'Poland' },\n { value: 'CZ', label: 'Czech Republic' },\n { value: 'AU', label: 'Australia' },\n { value: 'NZ', label: 'New Zealand' },\n { value: 'SG', label: 'Singapore' },\n { value: 'JP', label: 'Japan' },\n { value: 'KR', label: 'South Korea' },\n { value: 'IN', label: 'India' },\n { value: 'BR', label: 'Brazil' },\n { value: 'MX', label: 'Mexico' },\n ]}\n />\n </div></div>\n </div>\n\n {/* Save Button */}\n <div className=\"flex justify-end pt-4\">\n <Button\n onClick={handleSavePreferences}\n disabled={preferencesSaving}\n >\n {preferencesSaving ? 'Saving...' : 'Save Preferences'}\n </Button>\n </div>\n </div>\n </Card>\n </div>\n ),\n },\n ]\n\n return (\n <div className={className}>\n <style>{billingStyles}</style>\n <Tabs key={activeTabIndex} tabs={tabs} defaultIndex={activeTabIndex} onChange={setActiveTabIndex} />\n\n {/* Add Payment Method Modal */}\n <Modal\n isOpen={isAddPaymentModalOpen}\n onClose={() => setIsAddPaymentModalOpen(false)}\n title=\"Add Payment Method\"\n >\n {stripePublishableKey ? (\n <AddPaymentMethodForm\n customerId={customer.id}\n stripePublishableKey={stripePublishableKey}\n businessName={businessName}\n onSuccess={handleAddPaymentSuccess}\n onCancel={() => setIsAddPaymentModalOpen(false)}\n onSubmit={handleAddPaymentMethod}\n />\n ) : (\n <div className=\"text-center py-8\">\n <p className=\"ok-text-muted\">\n {stripeLoading ? 'Loading payment form...' : 'Payment configuration not available'}\n </p>\n </div>\n )}\n </Modal>\n\n {/* Remove Payment Method Modal */}\n <Modal\n isOpen={isRemovePaymentModalOpen}\n onClose={() => {\n setIsRemovePaymentModalOpen(false);\n setSelectedPaymentMethod(null);\n }}\n title=\"Remove Payment Method\"\n >\n <div className=\"space-y-4\">\n <p className=\"ok-text-muted\">\n Are you sure you want to remove this payment method?\n </p>\n\n {selectedPaymentMethod && (\n <Card>\n <div className=\"flex items-center gap-3\">\n <div className=\"w-12 h-8 ok-bg-gray rounded-lg flex items-center justify-center flex-shrink-0\">\n <svg className=\"w-6 h-6 ok-text-muted\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 10h18M7 15h1m4 0h1m-7 4h12a3 3 0 003-3V8a3 3 0 00-3-3H6a3 3 0 00-3 3v8a3 3 0 003 3z\" />\n </svg>\n </div>\n <div>\n <p className=\"font-semibold ok-text\">\n {selectedPaymentMethod.card_brand || 'Card'}\n </p>\n <p className=\"text-sm ok-text-muted\">\n •••• •••• •••• {selectedPaymentMethod.card_last4 || '****'}\n </p>\n </div>\n </div>\n </Card>\n )}\n\n <p className=\"text-sm ok-text-faint\">\n This action cannot be undone.\n </p>\n\n <div className=\"flex gap-3 justify-end mt-6 pt-4 border-t ok-border\">\n <Button\n variant=\"secondary\"\n onClick={() => {\n setIsRemovePaymentModalOpen(false);\n setSelectedPaymentMethod(null);\n }}\n disabled={isLoading}\n >\n Cancel\n </Button>\n <Button\n variant=\"primary\"\n onClick={handleConfirmRemovePayment}\n disabled={isLoading}\n >\n {isLoading ? 'Removing...' : 'Remove Payment Method'}\n </Button>\n </div>\n </div>\n </Modal>\n\n {/* Cancel Subscription Modal */}\n <Modal\n isOpen={isCancelModalOpen}\n onClose={() => setIsCancelModalOpen(false)}\n title=\"Cancel Subscription\"\n >\n <div className=\"space-y-4\">\n <Alert variant=\"warning\" title=\"Are you sure you want to cancel?\">\n You&apos;ll lose access to premium features when your current billing period ends.\n </Alert>\n\n {subscription && (\n <Card>\n <div className=\"flex justify-between text-sm\">\n <span className=\"ok-text-muted\">Current Plan:</span>\n <span className=\"font-medium\">{subscription.plan}</span>\n </div>\n <div className=\"flex justify-between text-sm mt-2\">\n <span className=\"ok-text-muted\">Access Until:</span>\n <span className=\"font-medium\">{subscription.nextBilling}</span>\n </div>\n </Card>\n )}\n\n <div className=\"flex gap-3 justify-end mt-6 pt-4 border-t ok-border\">\n <Button\n variant=\"secondary\"\n onClick={() => setIsCancelModalOpen(false)}\n disabled={isLoading}\n >\n Keep Subscription\n </Button>\n <Button\n variant=\"primary\"\n onClick={handleCancelSubscription}\n disabled={isLoading}\n >\n {isLoading ? 'Canceling...' : 'Yes, Cancel Subscription'}\n </Button>\n </div>\n </div>\n </Modal>\n\n {/* Upgrade Plan Confirmation Modal */}\n <Modal\n isOpen={isUpgradeModalOpen}\n onClose={() => {\n setIsUpgradeModalOpen(false);\n setError(null);\n }}\n title={\n selectedPlan && parseFloat(selectedPlan.price.replace(/[^0-9.]/g, '')) === 0\n ? \"Start Free Plan\"\n : subscription\n ? \"Confirm Plan Change\"\n : \"Confirm Subscription\"\n }\n >\n <div className=\"space-y-4\">\n <p className=\"ok-text-muted\">\n {selectedPlan && parseFloat(selectedPlan.price.replace(/[^0-9.]/g, '')) === 0 ? (\n <>Start your free <strong>{selectedPlan?.name}</strong> plan</>\n ) : subscription ? (\n <>Switch to the <strong>{selectedPlan?.name}</strong> plan</>\n ) : (\n <>Subscribe to the <strong>{selectedPlan?.name}</strong> plan</>\n )}\n </p>\n\n <Card>\n <h4 className=\"font-semibold ok-text mb-2\">\n Billing Summary\n </h4>\n <div className=\"flex justify-between text-sm mb-1\">\n <span className=\"ok-text-muted\">Plan:</span>\n <span className=\"font-medium ok-text\">{selectedPlan?.name}</span>\n </div>\n <div className=\"flex justify-between text-sm mb-1\">\n <span className=\"ok-text-muted\">Billing Cycle:</span>\n <span className=\"font-medium ok-text\">\n {selectedPlan?.period || 'month'}ly\n </span>\n </div>\n {selectedPlan && parseFloat(selectedPlan.price.replace(/[^0-9.]/g, '')) > 0 && (\n <>\n <div className=\"flex justify-between text-sm mb-1\">\n <span className=\"ok-text-muted\">Subtotal:</span>\n <span className=\"font-medium ok-text\">\n {selectedPlan.price}\n </span>\n </div>\n\n {/* Tax display */}\n {taxLoading ? (\n <div className=\"flex justify-between text-sm mb-1\">\n <span className=\"ok-text-muted\">Tax:</span>\n <span className=\"ok-text-dim text-xs\">Calculating...</span>\n </div>\n ) : taxInfo && taxInfo.tax_rate > 0 ? (\n <div className=\"flex justify-between text-sm mb-1\">\n <span className=\"ok-text-muted\">\n {taxInfo.tax_label} ({taxInfo.tax_rate}%):\n </span>\n <span className=\"font-medium ok-text\">\n ${(taxInfo.tax_amount / 100).toFixed(2)}\n </span>\n </div>\n ) : taxInfo && taxInfo.reverse_charge ? (\n <div className=\"flex justify-between text-sm mb-1\">\n <span className=\"ok-text-muted\">VAT (Reverse Charge):</span>\n <span className=\"font-medium ok-text\">$0.00</span>\n </div>\n ) : null}\n </>\n )}\n\n {/* Reverse charge notice */}\n {taxInfo && taxInfo.reverse_charge && (\n <div className=\"mt-2 p-2 border ok-border rounded text-xs ok-text-sub\">\n EU reverse charge applies - you are responsible for reporting VAT in your country.\n </div>\n )}\n\n <div className=\"border-t ok-border mt-3 pt-3\">\n <div className=\"flex justify-between\">\n <span className=\"font-semibold ok-text\">\n {selectedPlan && parseFloat(selectedPlan.price.replace(/[^0-9.]/g, '')) === 0 ? 'Total:' : 'Charged Today:'}\n </span>\n <span className=\"font-bold text-lg ok-text\">\n {selectedPlan && parseFloat(selectedPlan.price.replace(/[^0-9.]/g, '')) === 0 ? (\n <span className=\"ok-text-success\">FREE</span>\n ) : taxInfo ? (\n `$${(taxInfo.total / 100).toFixed(2)}`\n ) : (\n selectedPlan?.price || '$0'\n )}\n </span>\n </div>\n </div>\n </Card>\n\n {/* Payment Method Selection - Only for paid plans */}\n {selectedPlan && parseFloat(selectedPlan.price.replace(/[^0-9.]/g, '')) > 0 && paymentMethods.length > 0 && (\n <div className=\"space-y-3\">\n <h4 className=\"font-semibold ok-text text-sm\">\n Select Payment Method\n </h4>\n <div className=\"space-y-2\">\n {paymentMethods.map((method) => (\n <label\n key={method.id}\n className={`flex items-center gap-3 p-3 border-2 rounded-lg cursor-pointer transition-all ${\n selectedUpgradePaymentMethod === method.id\n ? 'ok-border-selected'\n : 'ok-border'\n }`}\n >\n <input\n type=\"radio\"\n name=\"paymentMethod\"\n value={method.id}\n checked={selectedUpgradePaymentMethod === method.id}\n onChange={() => setSelectedUpgradePaymentMethod(method.id)}\n className=\"w-4 h-4\"\n />\n <div className=\"flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"font-medium ok-text text-sm\">\n {method.card_brand ? method.card_brand.charAt(0).toUpperCase() + method.card_brand.slice(1) : 'Card'}\n </span>\n {method.is_default && (\n <span className=\"ok-badge ok-badge-info px-2 py-0.5 text-xs\">\n Default\n </span>\n )}\n </div>\n <span className=\"text-xs ok-text-muted\">\n •••• {method.card_last4 || 'XXXX'}\n </span>\n </div>\n </label>\n ))}\n </div>\n </div>\n )}\n\n {/* No payment methods warning for paid plans */}\n {selectedPlan && parseFloat(selectedPlan.price.replace(/[^0-9.]/g, '')) > 0 && paymentMethods.length === 0 && (\n <Alert variant=\"warning\">\n Please add a payment method before subscribing to a paid plan.\n </Alert>\n )}\n\n {/* Free plan info */}\n {selectedPlan && parseFloat(selectedPlan.price.replace(/[^0-9.]/g, '')) === 0 && (\n <Alert variant=\"success\">\n This is a free plan. No payment method required!\n </Alert>\n )}\n\n {selectedPlan && parseFloat(selectedPlan.price.replace(/[^0-9.]/g, '')) > 0 && (\n <p className=\"text-xs ok-text-faint\">\n Your payment method will be charged immediately. You can cancel anytime.\n </p>\n )}\n\n {/* Error Message */}\n {error && (\n <Alert variant=\"error\">{error}</Alert>\n )}\n\n <div className=\"flex gap-3 justify-end mt-6\">\n <Button\n variant=\"secondary\"\n onClick={() => {\n setIsUpgradeModalOpen(false);\n setError(null);\n }}\n disabled={isUpgrading}\n >\n Cancel\n </Button>\n <Button\n variant=\"primary\"\n onClick={handleConfirmUpgrade}\n disabled={isUpgrading || !!(selectedPlan && parseFloat(selectedPlan.price.replace(/[^0-9.]/g, '')) > 0 && paymentMethods.length === 0)}\n >\n {isUpgrading\n ? 'Processing...'\n : selectedPlan && parseFloat(selectedPlan.price.replace(/[^0-9.]/g, '')) === 0\n ? 'Start Free Plan'\n : subscription\n ? 'Confirm Change'\n : 'Confirm Subscription'\n }\n </Button>\n </div>\n </div>\n </Modal>\n\n {/* Success Modal */}\n <Modal\n isOpen={upgradeSuccess}\n onClose={handleCloseSuccessModal}\n title=\"Subscription Successful!\"\n >\n <div className=\"space-y-4\">\n <div className=\"flex justify-center\">\n <div className=\"w-16 h-16 ok-bg-green rounded-full flex items-center justify-center\">\n <svg className=\"w-8 h-8 ok-text-success\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n </div>\n </div>\n\n <div className=\"text-center\">\n <h3 className=\"text-xl font-bold ok-text mb-2\">\n Welcome to {selectedPlan?.name}!\n </h3>\n <p className=\"ok-text-muted\">\n {selectedPlan && parseFloat(selectedPlan.price.replace(/[^0-9.]/g, '')) === 0\n ? 'Your free plan is now active. Start exploring all the features!'\n : 'Your subscription has been activated and your payment method has been charged.'}\n </p>\n </div>\n\n <Card>\n <div className=\"space-y-2\">\n <div className=\"flex justify-between text-sm\">\n <span className=\"ok-text-muted\">Plan:</span>\n <span className=\"font-medium ok-text\">{selectedPlan?.name}</span>\n </div>\n <div className=\"flex justify-between text-sm\">\n <span className=\"ok-text-muted\">Billing:</span>\n <span className=\"font-medium ok-text\">\n {selectedPlan && parseFloat(selectedPlan.price.replace(/[^0-9.]/g, '')) === 0 ? 'Free' : `${selectedPlan?.price}/${selectedPlan?.period}`}\n </span>\n </div>\n {selectedPlan && parseFloat(selectedPlan.price.replace(/[^0-9.]/g, '')) > 0 && (\n <div className=\"flex justify-between text-sm pt-2 border-t ok-border\">\n <span className=\"ok-text-muted\">Status:</span>\n <span className=\"font-medium ok-text-success\">Active</span>\n </div>\n )}\n </div>\n </Card>\n\n <div className=\"flex justify-center pt-2\">\n <Button\n variant=\"primary\"\n onClick={handleCloseSuccessModal}\n className=\"px-8\"\n >\n Get Started\n </Button>\n </div>\n </div>\n </Modal>\n </div>\n )\n}\n","'use client'\n\n/**\n * PaymentForm Component\n *\n * Client-side payment form that handles:\n * - Guest checkout with email (creates customer, stores in localStorage)\n * - Selecting existing payment methods\n * - Adding new cards via Stripe Elements\n * - Processing payments\n */\n\nimport { useState, useEffect } from 'react'\nimport { Button, TextInput, Alert } from '@marcoschwartz/lite-ui'\nimport { AddPaymentMethodForm } from '../AddPaymentMethodForm'\n\ninterface PaymentMethod {\n id: number\n customer_id: number\n type: string\n provider_payment_method_id?: string\n is_default: boolean\n card_brand?: string\n card_last4?: string\n card_exp_month?: number\n card_exp_year?: number\n}\n\ninterface DigitalProduct {\n id: string\n name: string\n description?: string\n price: number\n image?: string\n type?: 'subscription' | 'one-time' | 'license'\n interval?: 'month' | 'year'\n features?: string[]\n}\n\ninterface ActionConfig {\n baseUrl: string\n apiKey?: string\n accessToken?: string\n projectId?: number\n}\n\ninterface StoredCustomer {\n id: number\n email: string\n projectId: number\n}\n\nconst STORAGE_KEY = 'omnikit_customer'\n\nfunction getStoredCustomer(projectId: number): StoredCustomer | null {\n if (typeof window === 'undefined') return null\n try {\n const stored = localStorage.getItem(STORAGE_KEY)\n if (!stored) return null\n const customer = JSON.parse(stored) as StoredCustomer\n // Only return if same project\n if (customer.projectId === projectId) {\n return customer\n }\n return null\n } catch {\n return null\n }\n}\n\nfunction storeCustomer(customer: StoredCustomer): void {\n if (typeof window === 'undefined') return\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(customer))\n } catch {\n // Ignore storage errors\n }\n}\n\nfunction clearStoredCustomer(): void {\n if (typeof window === 'undefined') return\n try {\n localStorage.removeItem(STORAGE_KEY)\n } catch {\n // Ignore storage errors\n }\n}\n\ninterface PaymentFormProps {\n products: DigitalProduct[]\n customerId?: number | null\n paymentMethods?: PaymentMethod[]\n stripePublishableKey: string | null\n actionConfig: ActionConfig\n quantity?: number\n currencySymbol?: string\n successUrl?: string\n cancelUrl?: string\n allowPromoCode?: boolean\n termsUrl?: string\n privacyUrl?: string\n onSuccess?: () => void\n onError?: (error: string) => void\n onCustomerCreated?: (customerId: number, email: string) => void\n}\n\nexport function PaymentForm({\n products,\n customerId: initialCustomerId,\n paymentMethods: initialPaymentMethods = [],\n stripePublishableKey,\n actionConfig,\n quantity = 1,\n currencySymbol = '$',\n successUrl = '/success',\n cancelUrl,\n allowPromoCode = true,\n termsUrl,\n privacyUrl,\n onSuccess,\n onError,\n onCustomerCreated,\n}: PaymentFormProps) {\n const [isLoading, setIsLoading] = useState(false)\n const [isLoadingCustomer, setIsLoadingCustomer] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [email, setEmail] = useState('')\n const [customerId, setCustomerId] = useState<number | null>(initialCustomerId ?? null)\n const [paymentMethods, setPaymentMethods] = useState<PaymentMethod[]>(initialPaymentMethods)\n const [selectedPaymentMethodId, setSelectedPaymentMethodId] = useState<number | null>(null)\n const [showNewCardForm, setShowNewCardForm] = useState(false)\n const [promoCode, setPromoCode] = useState('')\n const [showPromoInput, setShowPromoInput] = useState(false)\n const [customerEmail, setCustomerEmail] = useState<string | null>(null)\n\n // Check localStorage for existing customer on mount\n useEffect(() => {\n if (initialCustomerId) {\n setCustomerId(initialCustomerId)\n return\n }\n\n const stored = getStoredCustomer(actionConfig.projectId || 0)\n if (stored) {\n setCustomerId(stored.id)\n setCustomerEmail(stored.email)\n setEmail(stored.email)\n // Fetch payment methods for this customer\n fetchPaymentMethods(stored.id)\n }\n }, [initialCustomerId, actionConfig.projectId])\n\n // Update payment methods when initialPaymentMethods changes\n useEffect(() => {\n if (initialPaymentMethods.length > 0) {\n setPaymentMethods(initialPaymentMethods)\n }\n }, [initialPaymentMethods])\n\n // Pre-select default payment method\n useEffect(() => {\n if (paymentMethods.length > 0 && !selectedPaymentMethodId) {\n const defaultMethod = paymentMethods.find(pm => pm.is_default)\n setSelectedPaymentMethodId(defaultMethod?.id || paymentMethods[0].id)\n setShowNewCardForm(false)\n } else if (paymentMethods.length === 0 && customerId) {\n setShowNewCardForm(true)\n }\n }, [paymentMethods, selectedPaymentMethodId, customerId])\n\n // Calculate totals\n const subtotal = products.reduce((sum, p) => sum + (p.price * quantity), 0)\n const total = subtotal\n const isMultiProduct = products.length > 1\n const primaryProduct = products[0]\n const isSubscription = primaryProduct?.type === 'subscription'\n\n // Determine button text\n const buttonText = isSubscription && !isMultiProduct\n ? `Subscribe ${currencySymbol}${primaryProduct.price.toFixed(2)}/${primaryProduct.interval}`\n : `Pay ${currencySymbol}${total.toFixed(2)}`\n\n const fetchPaymentMethods = async (custId: number) => {\n try {\n const response = await fetch(\n `${actionConfig.baseUrl}/billing/customers/${custId}/payment-methods?project_id=${actionConfig.projectId}&status=active`,\n {\n headers: {\n 'Content-Type': 'application/json',\n ...(actionConfig.apiKey && { 'X-API-Key': actionConfig.apiKey }),\n ...(actionConfig.accessToken && { 'Authorization': `Bearer ${actionConfig.accessToken}` }),\n },\n }\n )\n const result = await response.json()\n if (result.success && result.data) {\n setPaymentMethods(result.data)\n }\n } catch (err) {\n console.error('Failed to fetch payment methods:', err)\n }\n }\n\n const getOrCreateCustomer = async (emailAddress: string): Promise<{ id: number; email: string } | null> => {\n setIsLoadingCustomer(true)\n setError(null)\n\n try {\n // First try to get existing customer by email using data query\n const filter = JSON.stringify({\n email: emailAddress,\n project_id: actionConfig.projectId,\n })\n const searchResponse = await fetch(\n `${actionConfig.baseUrl}/data/customers?filter=${encodeURIComponent(filter)}&limit=1`,\n {\n headers: {\n 'Content-Type': 'application/json',\n ...(actionConfig.apiKey && { 'X-API-Key': actionConfig.apiKey }),\n ...(actionConfig.accessToken && { 'Authorization': `Bearer ${actionConfig.accessToken}` }),\n },\n }\n )\n\n if (searchResponse.ok) {\n const searchResult = await searchResponse.json()\n if (searchResult.success && searchResult.data && searchResult.data.length > 0) {\n const customer = searchResult.data[0]\n return { id: customer.id, email: customer.email }\n }\n }\n\n // Customer not found, create new one\n const createResponse = await fetch(`${actionConfig.baseUrl}/billing/customers`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(actionConfig.apiKey && { 'X-API-Key': actionConfig.apiKey }),\n ...(actionConfig.accessToken && { 'Authorization': `Bearer ${actionConfig.accessToken}` }),\n },\n body: JSON.stringify({\n project_id: actionConfig.projectId,\n email: emailAddress,\n sync_to_stripe: true,\n test_mode: true,\n }),\n })\n\n const createResult = await createResponse.json()\n if (createResult.success && createResult.data) {\n return { id: createResult.data.id, email: createResult.data.email }\n }\n\n throw new Error(createResult.error || 'Failed to create customer')\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Failed to create customer'\n setError(message)\n return null\n } finally {\n setIsLoadingCustomer(false)\n }\n }\n\n const handleEmailSubmit = async () => {\n if (!email || !email.includes('@')) {\n setError('Please enter a valid email address')\n return\n }\n\n const customer = await getOrCreateCustomer(email)\n if (customer) {\n setCustomerId(customer.id)\n setCustomerEmail(customer.email)\n\n // Store in localStorage\n storeCustomer({\n id: customer.id,\n email: customer.email,\n projectId: actionConfig.projectId || 0,\n })\n\n // Fetch payment methods\n await fetchPaymentMethods(customer.id)\n\n // Notify parent\n onCustomerCreated?.(customer.id, customer.email)\n }\n }\n\n const handleChangeEmail = () => {\n clearStoredCustomer()\n setCustomerId(null)\n setCustomerEmail(null)\n setPaymentMethods([])\n setSelectedPaymentMethodId(null)\n setShowNewCardForm(false)\n }\n\n // Process payment with existing customer and payment method\n const processPayment = async (custId: number, paymentMethodId: number) => {\n const response = await fetch(`${actionConfig.baseUrl}/billing/payments/intents`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(actionConfig.apiKey && { 'X-API-Key': actionConfig.apiKey }),\n ...(actionConfig.accessToken && { 'Authorization': `Bearer ${actionConfig.accessToken}` }),\n },\n body: JSON.stringify({\n project_id: actionConfig.projectId,\n customer_id: custId,\n amount: total,\n currency: 'usd',\n payment_method_id: paymentMethodId,\n description: isMultiProduct\n ? `Purchase of ${products.length} products`\n : `Purchase of ${primaryProduct.name}`,\n metadata: {\n product_ids: products.map(p => p.id),\n },\n confirm: true,\n sync_to_stripe: true,\n test_mode: true,\n }),\n })\n\n const result = await response.json()\n\n if (!result.success) {\n throw new Error(result.error || 'Payment failed')\n }\n\n return result\n }\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault()\n\n // If we have a customer and selected payment method, process payment directly\n if (customerId && selectedPaymentMethodId && !showNewCardForm) {\n setIsLoading(true)\n setError(null)\n\n try {\n await processPayment(customerId, selectedPaymentMethodId)\n onSuccess?.()\n window.location.href = successUrl\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Payment failed'\n setError(errorMessage)\n onError?.(errorMessage)\n } finally {\n setIsLoading(false)\n }\n return\n }\n\n // For guest mode with new card, the AddPaymentMethodForm handles the flow\n // via onGuestCheckout callback\n if (!customerId && !selectedPaymentMethodId) {\n // Validate email first\n if (!email || !email.includes('@')) {\n setError('Please enter a valid email address')\n return\n }\n // The card form will trigger the checkout via pendingGuestCheckout\n setError('Please enter your card details and click \"Add Card & Pay\"')\n return\n }\n\n if (showNewCardForm) {\n setError('Please add a payment method first')\n return\n }\n }\n\n // Guest checkout: create customer, add payment method, process payment in one go\n const handleGuestCheckout = async (stripePaymentMethodId: string): Promise<{ success: boolean; error?: string }> => {\n if (!email || !email.includes('@')) {\n return { success: false, error: 'Please enter a valid email address' }\n }\n\n setIsLoading(true)\n setError(null)\n\n try {\n // 1. Create or get customer\n const customer = await getOrCreateCustomer(email)\n if (!customer) {\n throw new Error('Failed to create customer')\n }\n\n // Store customer in localStorage\n storeCustomer({\n id: customer.id,\n email: customer.email,\n projectId: actionConfig.projectId || 0,\n })\n\n // 2. Add payment method to customer\n const pmResponse = await fetch(`${actionConfig.baseUrl}/billing/customers/${customer.id}/payment-methods`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(actionConfig.apiKey && { 'X-API-Key': actionConfig.apiKey }),\n ...(actionConfig.accessToken && { 'Authorization': `Bearer ${actionConfig.accessToken}` }),\n },\n body: JSON.stringify({\n project_id: actionConfig.projectId,\n type: 'card',\n stripe_payment_method_id: stripePaymentMethodId,\n set_as_default: true,\n }),\n })\n\n const pmResult = await pmResponse.json()\n if (!pmResult.success || !pmResult.data) {\n throw new Error(pmResult.error || 'Failed to add payment method')\n }\n\n // 3. Process payment\n await processPayment(customer.id, pmResult.data.id)\n\n // Success!\n onCustomerCreated?.(customer.id, customer.email)\n onSuccess?.()\n window.location.href = successUrl\n\n return { success: true }\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Payment failed'\n setError(errorMessage)\n onError?.(errorMessage)\n return { success: false, error: errorMessage }\n } finally {\n setIsLoading(false)\n }\n }\n\n const handleAddPaymentMethod = async (stripePaymentMethodId: string, setAsDefault: boolean) => {\n if (!customerId) {\n return { success: false, error: 'Customer not found' }\n }\n\n try {\n const response = await fetch(`${actionConfig.baseUrl}/billing/customers/${customerId}/payment-methods`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(actionConfig.apiKey && { 'X-API-Key': actionConfig.apiKey }),\n ...(actionConfig.accessToken && { 'Authorization': `Bearer ${actionConfig.accessToken}` }),\n },\n body: JSON.stringify({\n project_id: actionConfig.projectId,\n type: 'card',\n stripe_payment_method_id: stripePaymentMethodId,\n set_as_default: setAsDefault,\n }),\n })\n\n const result = await response.json()\n return result\n } catch (err) {\n return { success: false, error: err instanceof Error ? err.message : 'Failed to add payment method' }\n }\n }\n\n const handlePaymentMethodAdded = async () => {\n setShowNewCardForm(false)\n // Refresh payment methods without full page reload\n if (customerId) {\n await fetchPaymentMethods(customerId)\n }\n }\n\n // Show email input if no customer\n const needsEmail = !customerId && !initialCustomerId\n const isGuestMode = needsEmail && stripePublishableKey\n\n return (\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n {/* Guest Mode: Show email + card form together */}\n {isGuestMode ? (\n <>\n {/* Email Input */}\n <div>\n <label htmlFor=\"email\" className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\">\n Email\n </label>\n <TextInput\n id=\"email\"\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder=\"you@example.com\"\n required\n disabled={isLoading}\n />\n </div>\n\n {/* Card Form */}\n <div className=\"space-y-3\">\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300\">\n Card Information\n </label>\n <AddPaymentMethodForm\n customerId={0} // Guest mode - no customer yet\n stripePublishableKey={stripePublishableKey}\n onSuccess={() => {}}\n onSubmit={async () => ({ success: false, error: 'Use guest checkout' })}\n onGuestCheckout={handleGuestCheckout}\n isGuestMode={true}\n guestEmail={email}\n submitButtonText={`Pay ${currencySymbol}${total.toFixed(2)}`}\n isProcessing={isLoading}\n />\n </div>\n\n {/* Order Summary for multi-product or quantity > 1 */}\n {(isMultiProduct || quantity > 1) && (\n <div className=\"pt-4 border-t border-gray-200 dark:border-neutral-700 space-y-2\">\n {products.map((product) => (\n <div key={product.id} className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600 dark:text-gray-400\">\n {product.name} {quantity > 1 && `x ${quantity}`}\n </span>\n <span className=\"text-gray-900 dark:text-white\">\n {currencySymbol}{(product.price * quantity).toFixed(2)}\n </span>\n </div>\n ))}\n <div className=\"flex justify-between font-semibold pt-2 border-t border-gray-200 dark:border-neutral-700\">\n <span className=\"text-gray-900 dark:text-white\">Total</span>\n <span className=\"text-gray-900 dark:text-white\">\n {currencySymbol}{total.toFixed(2)}\n </span>\n </div>\n </div>\n )}\n\n {/* Error Message */}\n {error && (\n <Alert variant=\"error\">{error}</Alert>\n )}\n\n {/* Terms */}\n {(termsUrl || privacyUrl) && (\n <p className=\"text-xs text-gray-500 dark:text-gray-400 text-center\">\n By confirming, you agree to our{' '}\n {termsUrl && (\n <a href={termsUrl} className=\"text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300\">\n Terms of Service\n </a>\n )}\n {termsUrl && privacyUrl && ' and '}\n {privacyUrl && (\n <a href={privacyUrl} className=\"text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300\">\n Privacy Policy\n </a>\n )}\n .\n </p>\n )}\n\n {/* Cancel link */}\n {cancelUrl && (\n <div className=\"text-center\">\n <a href={cancelUrl} className=\"text-sm text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300\">\n Cancel\n </a>\n </div>\n )}\n </>\n ) : needsEmail && !stripePublishableKey ? (\n /* No Stripe key - show email only with continue button */\n <div className=\"space-y-3\">\n <label htmlFor=\"email\" className=\"block text-sm font-medium text-gray-700 dark:text-gray-300\">\n Email\n </label>\n <TextInput\n id=\"email\"\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder=\"you@example.com\"\n required\n disabled={isLoadingCustomer}\n />\n <Button\n type=\"button\"\n onClick={handleEmailSubmit}\n disabled={isLoadingCustomer || !email}\n className=\"w-full\"\n >\n {isLoadingCustomer ? 'Loading...' : 'Continue'}\n </Button>\n </div>\n ) : (\n <>\n {/* Show current customer email with option to change */}\n {customerEmail && (\n <div className=\"flex items-center justify-between p-3 bg-gray-50 dark:bg-neutral-800 rounded-lg\">\n <div>\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">Email</p>\n <p className=\"text-sm font-medium text-gray-900 dark:text-white\">{customerEmail}</p>\n </div>\n <button\n type=\"button\"\n onClick={handleChangeEmail}\n className=\"text-sm text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300\"\n >\n Change\n </button>\n </div>\n )}\n\n {/* Payment Method Selection */}\n {paymentMethods.length > 0 && !showNewCardForm && (\n <div className=\"space-y-3\">\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300\">\n Payment Method\n </label>\n <div className=\"space-y-2\">\n {paymentMethods.map((method) => (\n <label\n key={method.id}\n className={`flex items-center gap-3 p-3 border-2 rounded-lg cursor-pointer transition-all ${\n selectedPaymentMethodId === method.id\n ? 'border-blue-500 bg-blue-50 dark:bg-blue-900/30'\n : 'border-gray-200 dark:border-neutral-700 hover:border-gray-300 dark:hover:border-neutral-600'\n }`}\n >\n <input\n type=\"radio\"\n name=\"paymentMethod\"\n value={method.id}\n checked={selectedPaymentMethodId === method.id}\n onChange={() => setSelectedPaymentMethodId(method.id)}\n className=\"w-4 h-4 text-blue-600\"\n />\n <div className=\"flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"font-medium text-gray-900 dark:text-white text-sm\">\n {method.card_brand ? method.card_brand.charAt(0).toUpperCase() + method.card_brand.slice(1) : 'Card'}\n </span>\n {method.is_default && (\n <span className=\"inline-flex items-center rounded-full bg-blue-100 dark:bg-blue-900 px-2 py-0.5 text-xs font-medium text-blue-800 dark:text-blue-200\">\n Default\n </span>\n )}\n </div>\n <span className=\"text-xs text-gray-600 dark:text-gray-400\">\n **** {method.card_last4 || 'XXXX'}\n {method.card_exp_month && method.card_exp_year && (\n <span className=\"ml-2\">Exp {method.card_exp_month}/{method.card_exp_year}</span>\n )}\n </span>\n </div>\n </label>\n ))}\n </div>\n\n <button\n type=\"button\"\n onClick={() => setShowNewCardForm(true)}\n className=\"text-sm text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300\"\n >\n + Add new card\n </button>\n </div>\n )}\n\n {/* New Card Form */}\n {showNewCardForm && stripePublishableKey && customerId && (\n <div className=\"space-y-3\">\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300\">\n Card Information\n </label>\n <AddPaymentMethodForm\n customerId={customerId}\n stripePublishableKey={stripePublishableKey}\n onSuccess={handlePaymentMethodAdded}\n onCancel={paymentMethods.length > 0 ? () => setShowNewCardForm(false) : undefined}\n onSubmit={handleAddPaymentMethod}\n />\n </div>\n )}\n\n {/* No Stripe key - show manual card inputs */}\n {showNewCardForm && !stripePublishableKey && (\n <div className=\"space-y-3\">\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300\">\n Card Information\n </label>\n <TextInput\n type=\"text\"\n name=\"card_number\"\n placeholder=\"1234 1234 1234 1234\"\n required\n />\n <div className=\"grid grid-cols-2 gap-2\">\n <TextInput\n type=\"text\"\n name=\"card_expiry\"\n placeholder=\"MM / YY\"\n required\n />\n <TextInput\n type=\"text\"\n name=\"card_cvc\"\n placeholder=\"CVC\"\n required\n />\n </div>\n <TextInput\n type=\"text\"\n name=\"cardholder_name\"\n placeholder=\"Name on card\"\n required\n />\n </div>\n )}\n\n {/* Promo Code */}\n {allowPromoCode && (\n <div>\n {!showPromoInput ? (\n <button\n type=\"button\"\n onClick={() => setShowPromoInput(true)}\n className=\"text-sm text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300\"\n >\n Add promotion code\n </button>\n ) : (\n <div className=\"flex gap-2\">\n <TextInput\n type=\"text\"\n value={promoCode}\n onChange={(e) => setPromoCode(e.target.value)}\n placeholder=\"Enter promo code\"\n className=\"flex-1\"\n />\n <Button type=\"button\" variant=\"secondary\" size=\"sm\">\n Apply\n </Button>\n </div>\n )}\n </div>\n )}\n\n {/* Order Summary for multi-product or quantity > 1 */}\n {(isMultiProduct || quantity > 1) && (\n <div className=\"pt-4 border-t border-gray-200 dark:border-neutral-700 space-y-2\">\n {products.map((product) => (\n <div key={product.id} className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600 dark:text-gray-400\">\n {product.name} {quantity > 1 && `x ${quantity}`}\n </span>\n <span className=\"text-gray-900 dark:text-white\">\n {currencySymbol}{(product.price * quantity).toFixed(2)}\n </span>\n </div>\n ))}\n <div className=\"flex justify-between font-semibold pt-2 border-t border-gray-200 dark:border-neutral-700\">\n <span className=\"text-gray-900 dark:text-white\">Total</span>\n <span className=\"text-gray-900 dark:text-white\">\n {currencySymbol}{total.toFixed(2)}\n </span>\n </div>\n </div>\n )}\n\n {/* Error Message */}\n {error && (\n <Alert variant=\"error\">{error}</Alert>\n )}\n\n {/* Submit Button */}\n <Button\n type=\"submit\"\n className=\"w-full\"\n size=\"lg\"\n disabled={isLoading || (showNewCardForm && !!stripePublishableKey)}\n >\n {isLoading ? 'Processing...' : buttonText}\n </Button>\n\n {/* Terms */}\n {(termsUrl || privacyUrl) && (\n <p className=\"text-xs text-gray-500 dark:text-gray-400 text-center\">\n By confirming, you agree to our{' '}\n {termsUrl && (\n <a href={termsUrl} className=\"text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300\">\n Terms of Service\n </a>\n )}\n {termsUrl && privacyUrl && ' and '}\n {privacyUrl && (\n <a href={privacyUrl} className=\"text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300\">\n Privacy Policy\n </a>\n )}\n .\n </p>\n )}\n\n {/* Cancel link */}\n {cancelUrl && (\n <div className=\"text-center\">\n <a href={cancelUrl} className=\"text-sm text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300\">\n Cancel\n </a>\n </div>\n )}\n </>\n )}\n\n {/* Error shown for no-stripe-key case (email-only form) */}\n {needsEmail && !stripePublishableKey && error && (\n <Alert variant=\"error\">{error}</Alert>\n )}\n </form>\n )\n}\n\nexport default PaymentForm\n"]}
@@ -1,4 +1,4 @@
1
- import { BillingContent, PaymentForm } from './chunk-SRPYYSJZ.js';
1
+ import { BillingContent, PaymentForm } from './chunk-CBEYQYWG.js';
2
2
  import { Alert, Table, Card, Button } from '@marcoschwartz/lite-ui';
3
3
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
4
4
 
@@ -2201,5 +2201,5 @@ async function Payment({
2201
2201
  }
2202
2202
 
2203
2203
  export { Billing, Cart, CartSummary, Checkout, DataList, OmniKitClient, OrderConfirmation, Payment, createOmniKitClient };
2204
- //# sourceMappingURL=chunk-LIZKLYHH.js.map
2205
- //# sourceMappingURL=chunk-LIZKLYHH.js.map
2204
+ //# sourceMappingURL=chunk-ZYJBZ7WV.js.map
2205
+ //# sourceMappingURL=chunk-ZYJBZ7WV.js.map