@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.
- package/dist/{chunk-SRPYYSJZ.js → chunk-CBEYQYWG.js} +222 -132
- package/dist/chunk-CBEYQYWG.js.map +1 -0
- package/dist/{chunk-LIZKLYHH.js → chunk-ZYJBZ7WV.js} +3 -3
- package/dist/{chunk-LIZKLYHH.js.map → chunk-ZYJBZ7WV.js.map} +1 -1
- package/dist/components/client/index.js +1 -1
- package/dist/components/server/index.js +2 -2
- package/dist/index.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-SRPYYSJZ.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/omnikit-client.ts","../src/components/server/DataList/index.tsx","../src/components/server/Billing/client.ts","../src/components/server/Billing/index.tsx","../src/components/server/Cart/index.tsx","../src/components/server/CartSummary/index.tsx","../src/components/server/Checkout/index.tsx","../src/components/server/OrderConfirmation/index.tsx","../src/components/server/Payment/client.ts","../src/components/server/Payment/index.tsx"],"names":["jsxs","Alert","jsx","MOCK_CART","LinkButton","Card","Button","Fragment","createHeaders","fetchAPI"],"mappings":"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","file":"chunk-LIZKLYHH.js","sourcesContent":["/**\n * OmniKit API Client\n * Wrapper for making requests to OmniKit serverless platform\n */\n\nimport type {\n QueryOptions,\n QueryResponse,\n SingleRecordResponse,\n MutationResponse,\n OmniKitConfig,\n} from './types'\n\nexport class OmniKitClient {\n private baseUrl: string\n private apiKey?: string\n private jwt?: string\n\n constructor(config: OmniKitConfig) {\n this.baseUrl = config.baseUrl.replace(/\\/$/, '') // Remove trailing slash\n this.apiKey = config.apiKey\n this.jwt = config.jwt\n }\n\n private getHeaders(): HeadersInit {\n const headers: HeadersInit = {\n 'Content-Type': 'application/json',\n }\n\n if (this.jwt) {\n headers['Authorization'] = `Bearer ${this.jwt}`\n } else if (this.apiKey) {\n headers['X-API-Key'] = this.apiKey\n }\n\n return headers\n }\n\n private async request<T>(\n endpoint: string,\n options?: RequestInit\n ): Promise<T> {\n const url = `${this.baseUrl}${endpoint}`\n\n const response = await fetch(url, {\n ...options,\n headers: {\n ...this.getHeaders(),\n ...options?.headers,\n },\n })\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({ error: 'Request failed' }))\n throw new Error(error.error || `HTTP ${response.status}`)\n }\n\n return response.json()\n }\n\n /**\n * Query records from a table\n */\n async query<T = any>(\n table: string,\n options?: QueryOptions\n ): Promise<QueryResponse<T>> {\n const params = new URLSearchParams()\n\n if (options?.filter) {\n params.append('filter', JSON.stringify(options.filter))\n }\n if (options?.sort) {\n params.append('sort', options.sort)\n }\n if (options?.limit) {\n params.append('limit', options.limit.toString())\n }\n if (options?.offset) {\n params.append('offset', options.offset.toString())\n }\n\n const queryString = params.toString()\n const endpoint = `/data/${table}${queryString ? `?${queryString}` : ''}`\n\n return this.request<QueryResponse<T>>(endpoint)\n }\n\n /**\n * Find a record by ID\n */\n async findById<T = any>(\n table: string,\n id: string | number\n ): Promise<SingleRecordResponse<T>> {\n return this.request<SingleRecordResponse<T>>(`/data/${table}/${id}`)\n }\n\n /**\n * Insert a new record\n */\n async insert(\n table: string,\n data: Record<string, any>\n ): Promise<MutationResponse> {\n return this.request<MutationResponse>(`/data/${table}`, {\n method: 'POST',\n body: JSON.stringify(data),\n })\n }\n\n /**\n * Update an existing record\n */\n async update(\n table: string,\n id: string | number,\n data: Record<string, any>\n ): Promise<MutationResponse> {\n return this.request<MutationResponse>(`/data/${table}/${id}`, {\n method: 'PUT',\n body: JSON.stringify(data),\n })\n }\n\n /**\n * Delete a record\n */\n async delete(table: string, id: string | number): Promise<MutationResponse> {\n return this.request<MutationResponse>(`/data/${table}/${id}`, {\n method: 'DELETE',\n })\n }\n\n /**\n * Upsert a record (insert or update)\n */\n async upsert(\n table: string,\n data: Record<string, any>\n ): Promise<MutationResponse> {\n return this.request<MutationResponse>(`/data/${table}`, {\n method: 'PUT',\n body: JSON.stringify(data),\n })\n }\n}\n\n/**\n * Create a new OmniKit client instance\n */\nexport function createOmniKitClient(config: OmniKitConfig): OmniKitClient {\n return new OmniKitClient(config)\n}\n","/**\n * DataList Component\n *\n * A server-side React component that fetches and displays data from OmniKit API.\n * Renders on the server with zero client JavaScript for data fetching.\n * Uses lite-ui Table component for consistent styling.\n *\n * @example\n * ```tsx\n * import { DataList } from '@omnikit-js/ui'\n *\n * export default function UsersPage() {\n * return (\n * <DataList\n * table=\"users\"\n * baseUrl={process.env.OMNIKIT_BASE_URL}\n * apiKey={process.env.OMNIKIT_API_KEY}\n * columns={['name', 'email', 'created_at']}\n * filter={{ active: true }}\n * limit={20}\n * />\n * )\n * }\n * ```\n */\n\nimport { Table, Alert } from '@marcoschwartz/lite-ui'\nimport { createOmniKitClient } from '../../../lib/omnikit-client'\nimport type { DataListProps, Column, ColumnDefinition } from './types'\n\nfunction normalizeColumn<T>(column: Column<T>): ColumnDefinition<T> {\n if (typeof column === 'string') {\n return {\n key: column,\n label: column.charAt(0).toUpperCase() + column.slice(1).replace(/_/g, ' '),\n sortable: true,\n }\n }\n return {\n ...column,\n label: column.label || column.key.charAt(0).toUpperCase() + column.key.slice(1).replace(/_/g, ' '),\n }\n}\n\nexport async function DataList<T extends Record<string, any>>({\n table,\n baseUrl,\n apiKey,\n jwt,\n columns,\n keyField = 'id' as keyof T,\n filter,\n sort,\n limit,\n offset,\n className = '',\n emptyMessage = 'No data found',\n errorMessage = 'Failed to load data',\n}: DataListProps<T>) {\n // Create API client\n const client = createOmniKitClient({ baseUrl, apiKey, jwt })\n\n // Fetch data\n let data: T[] = []\n let error: string | null = null\n\n try {\n const response = await client.query<T>(table, {\n filter,\n sort,\n limit,\n offset,\n })\n\n if (response.success) {\n data = response.data\n } else {\n error = response.error || errorMessage\n }\n } catch (err) {\n error = err instanceof Error ? err.message : errorMessage\n }\n\n // Normalize columns for lite-ui Table format\n const normalizedColumns = columns.map(normalizeColumn)\n\n // Pre-render data with custom render functions (since we can't pass functions to client components)\n const processedData = data.map((row) => {\n const processedRow: Record<string, any> = { ...row }\n normalizedColumns.forEach((col) => {\n if (col.render) {\n const value = col.key.split('.').reduce((obj, k) => obj?.[k], row)\n processedRow[`__rendered_${col.key}`] = col.render(value, row)\n }\n })\n return processedRow\n })\n\n const tableColumns = normalizedColumns.map((col) => ({\n key: col.render ? `__rendered_${col.key}` : col.key,\n title: col.label || col.key,\n }))\n\n // Error state\n if (error) {\n return (\n <Alert variant=\"error\" className={className}>\n <p className=\"font-medium\">Error</p>\n <p className=\"mt-1 text-sm\">{error}</p>\n </Alert>\n )\n }\n\n // Empty state\n if (data.length === 0) {\n return (\n <Alert variant=\"info\" className={className}>\n {emptyMessage}\n </Alert>\n )\n }\n\n // Render table using lite-ui Table component\n return (\n <Table\n columns={tableColumns}\n data={processedData}\n keyField={String(keyField)}\n hoverable\n responsive\n className={className}\n />\n )\n}\n","/**\n * Billing API Client\n *\n * Handles all API calls for the Billing component.\n */\n\nimport type {\n BillingData,\n BillingProps,\n Customer,\n Product,\n Subscription,\n Invoice,\n PaymentMethod,\n ProductFeature\n} from './types';\n\ninterface ApiResponse<T> {\n success: boolean;\n data?: T;\n error?: string;\n}\n\ninterface BillingClientConfig {\n baseUrl: string;\n apiKey?: string;\n accessToken?: string;\n projectId: number;\n}\n\nfunction createHeaders(config: BillingClientConfig): 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: BillingClientConfig,\n url: string,\n options: RequestInit = {}\n): Promise<ApiResponse<T>> {\n try {\n const response = await fetch(url, {\n ...options,\n headers: {\n ...createHeaders(config),\n ...options.headers as Record<string, string>,\n },\n // Prevent infinite re-fetching in Next.js\n cache: 'no-store',\n });\n\n // Check for non-OK responses before parsing\n if (!response.ok) {\n // Try to get error message from JSON, fallback to status text\n try {\n const errorData = await response.json();\n return {\n success: false,\n error: errorData.error || `HTTP ${response.status}: ${response.statusText}`\n };\n } catch {\n return {\n success: false,\n error: `HTTP ${response.status}: ${response.statusText}`\n };\n }\n }\n\n // Check content type to avoid parsing HTML as JSON\n const contentType = response.headers.get('content-type');\n if (!contentType || !contentType.includes('application/json')) {\n return {\n success: false,\n error: 'Invalid response: expected JSON'\n };\n }\n\n const data = await response.json();\n return data;\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'API request failed'\n };\n }\n}\n\n/**\n * Get or create customer for a user\n */\nasync function getOrCreateCustomer(\n config: BillingClientConfig,\n userId: string,\n organizationId: number,\n email: string,\n name?: string,\n testMode: boolean = true\n): Promise<ApiResponse<Customer>> {\n const { baseUrl, projectId } = config;\n\n // Try to get existing customer\n const customerData = await fetchAPI<Customer>(\n config,\n `${baseUrl}/billing/customers/by-user/${userId}?project_id=${projectId}`\n );\n\n if (customerData.success && customerData.data) {\n return customerData;\n }\n\n // Create new customer\n const createData = await fetchAPI<Customer>(\n config,\n `${baseUrl}/billing/customers`,\n {\n method: 'POST',\n body: JSON.stringify({\n project_id: projectId,\n user_id: userId,\n organization_id: organizationId,\n email,\n name,\n test_mode: testMode,\n sync_to_stripe: true\n })\n }\n );\n\n return createData;\n}\n\ninterface UserData {\n id: number;\n uuid?: string;\n email: string;\n full_name?: string;\n display_name?: string;\n organization_id?: number;\n}\n\n/**\n * Fetch user data by user ID\n */\nasync function fetchUserData(\n config: BillingClientConfig,\n userId: string\n): Promise<ApiResponse<UserData>> {\n const { baseUrl } = config;\n\n // Use the data/users endpoint (same as DataList uses)\n return fetchAPI<UserData>(\n config,\n `${baseUrl}/data/users/${userId}`\n );\n}\n\n/**\n * Fetch all billing data for a customer\n */\nexport async function fetchBillingData(\n props: BillingProps\n): Promise<ApiResponse<BillingData>> {\n const {\n baseUrl,\n apiKey,\n accessToken,\n projectId,\n userId,\n organizationId,\n userEmail,\n userName,\n testMode = true\n } = props;\n\n const config: BillingClientConfig = { baseUrl, apiKey, accessToken, projectId };\n\n try {\n // If email not provided, fetch user data first\n let email = userEmail;\n let name = userName;\n let orgId = organizationId;\n\n if (!email) {\n const userResult = await fetchUserData(config, userId);\n if (userResult.success && userResult.data) {\n email = userResult.data.email;\n name = name || userResult.data.full_name || userResult.data.display_name;\n orgId = orgId || userResult.data.organization_id;\n } else {\n return { success: false, error: userResult.error || 'User not found. Please provide userEmail.' };\n }\n }\n\n // 1. Get or create customer\n const finalOrgId = orgId || 1; // Default org if not provided\n const customerResult = await getOrCreateCustomer(\n config,\n userId,\n finalOrgId,\n email,\n name,\n testMode\n );\n\n if (!customerResult.success || !customerResult.data) {\n return { success: false, error: customerResult.error || 'Failed to get customer' };\n }\n\n const customer = customerResult.data;\n const customerId = customer.id;\n\n // 2. Fetch all billing data in parallel\n const [\n subsData,\n productsData,\n pricesData,\n entitlementsData,\n invoicesData,\n pmData,\n usageData\n ] = await Promise.all([\n fetchAPI<Subscription[]>(config, `${baseUrl}/billing/subscriptions?project_id=${projectId}&customer_id=${customerId}&status=active&include_items=true`),\n fetchAPI<Product[]>(config, `${baseUrl}/billing/products?project_id=${projectId}&limit=100&include_prices=false`),\n fetchAPI<any[]>(config, `${baseUrl}/billing/products/prices?project_id=${projectId}&limit=1000`),\n fetchAPI<any[]>(config, `${baseUrl}/billing/entitlements/list-entitlements?project_id=${projectId}&customer_id=${customerId}`),\n fetchAPI<Invoice[]>(config, `${baseUrl}/billing/invoices?project_id=${projectId}&customer_id=${customerId}&limit=10&sort=due_date:desc&include_line_items=true`),\n fetchAPI<PaymentMethod[]>(config, `${baseUrl}/billing/customers/${customerId}/payment-methods?project_id=${projectId}&status=active`),\n fetchAPI<Record<string, any>>(config, `${baseUrl}/billing/usage/get-all?project_id=${projectId}&customer_id=${customerId}`)\n ]);\n\n const currentSubscription = subsData.success && subsData.data && subsData.data.length > 0\n ? subsData.data[0]\n : null;\n const products = productsData.success && productsData.data ? productsData.data : [];\n const allPrices = pricesData.success && pricesData.data ? pricesData.data : [];\n const entitlements = entitlementsData.success && entitlementsData.data ? entitlementsData.data : [];\n const invoices = invoicesData.success && invoicesData.data ? invoicesData.data : [];\n const paymentMethods = pmData.success && pmData.data ? pmData.data : [];\n const featureUsage = usageData.success && usageData.data ? usageData.data : {};\n\n // 3. Group prices by product\n const pricesByProduct: Record<number, any[]> = {};\n allPrices.forEach((price: any) => {\n if (!pricesByProduct[price.product_id]) {\n pricesByProduct[price.product_id] = [];\n }\n pricesByProduct[price.product_id].push(price);\n });\n\n products.forEach((product: Product) => {\n product.prices = pricesByProduct[product.id] || [];\n });\n\n // 4. Fetch product features for all products\n const productFeatures: Record<number, ProductFeature[]> = {};\n await Promise.all(\n products.map(async (product: Product) => {\n const featuresData = await fetchAPI<ProductFeature[]>(\n config,\n `${baseUrl}/billing/features/product/${product.id}?project_id=${projectId}&limit=100`\n );\n productFeatures[product.id] = featuresData.success && featuresData.data ? featuresData.data : [];\n })\n );\n\n const billingData: BillingData = {\n customer,\n currentSubscription,\n products,\n productFeatures,\n entitlements,\n invoices,\n paymentMethods,\n featureUsage\n };\n\n return { success: true, data: billingData };\n } catch (error) {\n console.error('Error fetching billing data:', error);\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to fetch billing data'\n };\n }\n}\n\n/**\n * Fetch payment configuration (Stripe publishable key)\n */\nexport async function fetchPaymentConfig(\n config: BillingClientConfig,\n testMode: boolean = true\n): Promise<ApiResponse<{ publishable_key: string }>> {\n const { baseUrl, projectId } = config;\n\n return fetchAPI(\n config,\n `${baseUrl}/billing/payment-config?project_id=${projectId}&test_mode=${testMode}`\n );\n}\n\n/**\n * Tax calculation result\n */\nexport interface TaxInfo {\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 * Project data\n */\ninterface ProjectData {\n id: number;\n name: string;\n slug?: string;\n description?: string;\n}\n\n/**\n * Fetch project data by ID\n */\nexport async function fetchProject(\n config: BillingClientConfig\n): Promise<ApiResponse<ProjectData>> {\n const { baseUrl, projectId } = config;\n\n return fetchAPI<ProjectData>(\n config,\n `${baseUrl}/data/projects/${projectId}`\n );\n}\n\n/**\n * Fetch tax info for a customer\n * Uses a reference amount (e.g., $100) to get the tax rate\n */\nexport async function fetchTaxInfo(\n config: BillingClientConfig,\n customerId: number,\n referenceAmount: number = 10000 // $100 in cents\n): Promise<ApiResponse<TaxInfo>> {\n const { baseUrl, projectId } = config;\n\n return fetchAPI<TaxInfo>(\n config,\n `${baseUrl}/billing/tax/calculate`,\n {\n method: 'POST',\n body: JSON.stringify({\n project_id: projectId,\n customer_id: customerId,\n amount: referenceAmount,\n product_type: 'digital'\n })\n }\n );\n}\n","/**\n * Billing Component\n *\n * A server-side React component that displays billing information for a SaaS application.\n * Fetches real data from OmniKit Billing API.\n *\n * User email and name are automatically fetched from user data if not provided.\n *\n * @example\n * ```tsx\n * import { Billing } from '@omnikit-js/ui'\n *\n * export default async function BillingPage() {\n * return (\n * <Billing\n * baseUrl={process.env.OMNIKIT_BASE_URL!}\n * apiKey={process.env.OMNIKIT_API_KEY}\n * projectId={1}\n * userId=\"user_123\"\n * />\n * )\n * }\n * ```\n */\n\nimport { Alert } from '@marcoschwartz/lite-ui'\nimport { BillingContent } from '../../client/BillingContent'\nimport { fetchBillingData, fetchTaxInfo, fetchProject, type TaxInfo } from './client'\nimport type { BillingProps } from './types'\n\nexport type { BillingProps } from './types'\nexport type {\n BillingData,\n Customer,\n Subscription,\n Product,\n Price,\n Invoice,\n PaymentMethod,\n Entitlement,\n ProductFeature\n} from './types'\n\nexport async function Billing(props: BillingProps) {\n const {\n className = '',\n errorMessage = 'Failed to load billing information'\n } = props;\n\n // Fetch billing data from API\n const result = await fetchBillingData(props);\n\n // Error state\n if (!result.success || !result.data) {\n return (\n <Alert variant=\"error\" className={className}>\n <p className=\"font-medium\">Error</p>\n <p className=\"mt-1 text-sm\">{result.error || errorMessage}</p>\n </Alert>\n );\n }\n\n const { data } = result;\n\n // Config for API calls\n const apiConfig = {\n baseUrl: props.baseUrl,\n apiKey: props.apiKey,\n accessToken: props.accessToken,\n projectId: props.projectId,\n };\n\n // Fetch tax info for the customer (server-side)\n let initialTaxInfo: TaxInfo | null = null;\n if (data.customer?.id) {\n const taxResult = await fetchTaxInfo(apiConfig, data.customer.id, 10000); // $100 reference\n if (taxResult.success && taxResult.data) {\n initialTaxInfo = taxResult.data;\n }\n }\n\n // Fetch project data for business name (server-side)\n let businessName: string | undefined;\n const projectResult = await fetchProject(apiConfig);\n if (projectResult.success && projectResult.data?.name) {\n businessName = projectResult.data.name;\n }\n\n // Find current plan from subscription (like apteva-app does)\n const currentSubscriptionPriceId = data.currentSubscription?.items?.[0]?.price_id;\n const currentPlan = currentSubscriptionPriceId\n ? data.products.find(p => p.prices?.some(price => price.id === currentSubscriptionPriceId))\n : null;\n const currentPrice = currentPlan?.prices?.find(p => p.id === currentSubscriptionPriceId);\n\n // Transform data for BillingContent\n const subscription = data.currentSubscription ? {\n id: data.currentSubscription.id,\n plan: currentPlan?.name || 'Unknown Plan',\n status: data.currentSubscription.status,\n price: formatCurrency(\n currentPrice?.unit_amount || currentPrice?.amount || 0,\n data.currentSubscription.currency\n ),\n period: currentPrice?.recurring_interval || 'month',\n nextBilling: formatDate(data.currentSubscription.current_period_end),\n cancelAtPeriodEnd: data.currentSubscription.cancel_at_period_end,\n } : null;\n\n const invoices = data.invoices.map(inv => ({\n id: inv.number || inv.uuid,\n date: formatDate(inv.due_date || inv.created_at),\n amount: formatCurrency(inv.total || inv.amount_due, inv.currency),\n status: inv.status,\n url: inv.pdf_url || '#',\n }));\n\n const plans = data.products\n .filter(p => p.active && p.prices && p.prices.length > 0)\n .map(product => {\n const price = product.prices?.find(p => p.active) || product.prices?.[0];\n const features = data.productFeatures[product.id] || [];\n // Check if this product contains the current subscription's price\n const isCurrentPlan = currentSubscriptionPriceId\n ? product.prices?.some(p => p.id === currentSubscriptionPriceId)\n : false;\n\n // Get raw price amount for sorting\n const priceAmount = price?.unit_amount || 0;\n\n return {\n id: product.id,\n priceId: price?.id || 0,\n name: product.name,\n description: product.description,\n price: formatCurrency(priceAmount, price?.currency || 'usd'),\n priceAmount, // Raw amount in cents for sorting\n period: price?.recurring_interval || 'month',\n features: features\n .map(f => {\n // Get feature name and value\n const featureName = f.feature_name || f.feature_key || 'Feature';\n const featureValue = typeof f.value === 'object' && f.value !== null && 'value' in f.value\n ? f.value.value\n : f.value;\n const featureUnit = f.feature_unit || '';\n\n // Boolean true = just show feature name (included)\n if (featureValue === true) {\n return featureName;\n }\n\n // Boolean false = skip this feature\n if (featureValue === false) {\n return null;\n }\n\n // Numeric -1 = Unlimited\n if (typeof featureValue === 'number' && featureValue === -1) {\n return `Unlimited ${featureUnit || featureName.toLowerCase()}`;\n }\n\n // Numeric value with unit\n if (typeof featureValue === 'number') {\n const formattedValue = featureValue.toLocaleString();\n return `${formattedValue} ${featureUnit || featureName.toLowerCase()}`;\n }\n\n // String value\n if (typeof featureValue === 'string' && featureValue) {\n return `${featureName}: ${featureValue}`;\n }\n\n return featureName;\n })\n .filter(Boolean) as string[],\n current: isCurrentPlan || false,\n popular: product.name.toLowerCase().includes('pro') || product.name.toLowerCase().includes('professional'),\n };\n })\n .sort((a, b) => a.priceAmount - b.priceAmount); // Sort by price ascending (cheapest first)\n\n return (\n <BillingContent\n subscription={subscription}\n invoices={invoices}\n paymentMethods={data.paymentMethods}\n plans={plans}\n customer={data.customer}\n entitlements={data.entitlements}\n featureUsage={data.featureUsage}\n actionConfig={apiConfig}\n initialTaxInfo={initialTaxInfo}\n businessName={businessName}\n className={className}\n />\n );\n}\n\n// Helper functions\nfunction formatCurrency(amount: number, currency: string = 'usd'): string {\n const formatter = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: currency.toUpperCase(),\n });\n return formatter.format(amount / 100); // Stripe amounts are in cents\n}\n\nfunction formatDate(dateString: string | undefined): string {\n if (!dateString) return 'N/A';\n const date = new Date(dateString);\n return date.toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n });\n}\n","/**\n * Cart Component\n *\n * A server-side React component that displays a shopping cart.\n * Renders on the server with real cart data for instant page load.\n *\n * @example\n * ```tsx\n * import { Cart } from '@omnikit-js/ui'\n *\n * export default async function CartPage() {\n * return (\n * <Cart\n * baseUrl={process.env.OMNIKIT_BASE_URL!}\n * apiKey={process.env.OMNIKIT_API_KEY}\n * userId=\"123\"\n * checkoutUrl=\"/checkout\"\n * />\n * )\n * }\n * ```\n */\n\nimport { Card, Button } from '@marcoschwartz/lite-ui'\nimport type { CartProps } from './types'\nimport type { Cart as CartType } from '../commerce-types'\n\n// Mock data for development\nconst MOCK_CART: CartType = {\n id: 'cart_001',\n userId: 'user_123',\n items: [\n {\n id: 'item_001',\n product: {\n id: 'prod_001',\n name: 'Wireless Bluetooth Headphones',\n slug: 'wireless-bluetooth-headphones',\n description: 'Premium noise-cancelling headphones',\n price: 149.99,\n compareAtPrice: 199.99,\n images: ['/placeholder-product.jpg'],\n sku: 'WBH-001',\n category: 'Electronics',\n inStock: true,\n stockQuantity: 50,\n },\n quantity: 1,\n price: 149.99,\n },\n {\n id: 'item_002',\n product: {\n id: 'prod_002',\n name: 'USB-C Charging Cable (2-Pack)',\n slug: 'usb-c-charging-cable-2pack',\n description: 'Fast charging braided cables',\n price: 24.99,\n images: ['/placeholder-product.jpg'],\n sku: 'USBC-002',\n category: 'Accessories',\n inStock: true,\n stockQuantity: 200,\n },\n quantity: 2,\n price: 24.99,\n },\n {\n id: 'item_003',\n product: {\n id: 'prod_003',\n name: 'Laptop Stand - Aluminum',\n slug: 'laptop-stand-aluminum',\n description: 'Ergonomic adjustable laptop stand',\n price: 79.99,\n images: ['/placeholder-product.jpg'],\n sku: 'LS-003',\n category: 'Office',\n inStock: true,\n stockQuantity: 30,\n },\n quantity: 1,\n price: 79.99,\n },\n ],\n itemCount: 4,\n subtotal: 279.96,\n tax: 22.40,\n shipping: 0,\n discount: 0,\n total: 302.36,\n currency: 'USD',\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n}\n\n// Button-styled link component\nfunction LinkButton({ href, children, variant = 'primary', size = 'md', className = '' }: {\n href: string\n children: React.ReactNode\n variant?: 'primary' | 'secondary'\n size?: 'sm' | 'md' | 'lg'\n className?: string\n}) {\n const baseStyles = 'inline-flex items-center justify-center font-medium rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2'\n const variantStyles = variant === 'primary'\n ? 'bg-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500'\n : 'bg-gray-100 text-gray-900 hover:bg-gray-200 focus:ring-gray-500 border border-gray-300'\n const sizeStyles = size === 'sm' ? 'px-3 py-1.5 text-sm' : size === 'lg' ? 'px-6 py-3 text-base' : 'px-4 py-2 text-sm'\n\n return (\n <a href={href} className={`${baseStyles} ${variantStyles} ${sizeStyles} ${className}`}>\n {children}\n </a>\n )\n}\n\nexport async function Cart({\n // API config - will be used when connected to real API\n baseUrl: _baseUrl,\n apiKey: _apiKey,\n accessToken: _accessToken,\n projectId: _projectId,\n userId: _userId,\n cartId: _cartId,\n // Display options\n showImages = true,\n showQuantityControls = true,\n showRemoveButton = true,\n continueShoppingUrl = '/products',\n checkoutUrl = '/checkout',\n currencySymbol = '$',\n emptyMessage = 'Your cart is empty',\n emptyActionText = 'Continue Shopping',\n emptyActionUrl = '/products',\n className = '',\n}: CartProps) {\n // TODO: Replace with actual API call\n // const client = createOmniKitClient({ baseUrl, apiKey, jwt: accessToken })\n // const cart = await client.query('carts', { filter: { userId } })\n\n const cart = MOCK_CART\n\n // Empty cart state\n if (!cart || cart.items.length === 0) {\n return (\n <div className={`text-center py-12 ${className}`}>\n <div className=\"mb-6\">\n <svg className=\"mx-auto h-16 w-16 text-gray-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M16 11V7a4 4 0 00-8 0v4M5 9h14l1 12H4L5 9z\" />\n </svg>\n </div>\n <h2 className=\"text-xl font-semibold text-gray-900 mb-2\">{emptyMessage}</h2>\n <p className=\"text-gray-600 mb-6\">Add some items to get started</p>\n <LinkButton href={emptyActionUrl}>\n {emptyActionText}\n </LinkButton>\n </div>\n )\n }\n\n return (\n <div className={`space-y-6 ${className}`}>\n {/* Cart Header */}\n <div className=\"flex items-center justify-between\">\n <h1 className=\"text-2xl font-bold text-gray-900\">\n Shopping Cart ({cart.itemCount} {cart.itemCount === 1 ? 'item' : 'items'})\n </h1>\n {continueShoppingUrl && (\n <a href={continueShoppingUrl} className=\"text-sm text-blue-600 hover:text-blue-800\">\n Continue Shopping\n </a>\n )}\n </div>\n\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n {/* Cart Items */}\n <div className=\"lg:col-span-2 space-y-4\">\n {cart.items.map((item) => (\n <Card key={item.id} className=\"p-4\">\n <div className=\"flex gap-4\">\n {/* Product Image */}\n {showImages && (\n <div className=\"flex-shrink-0 w-24 h-24 bg-gray-100 rounded-lg overflow-hidden\">\n <img\n src={item.product.images[0] || '/placeholder-product.jpg'}\n alt={item.product.name}\n className=\"w-full h-full object-cover\"\n />\n </div>\n )}\n\n {/* Product Details */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex justify-between\">\n <div>\n <h3 className=\"text-base font-medium text-gray-900 truncate\">\n <a href={`/products/${item.product.slug}`} className=\"hover:text-blue-600\">\n {item.product.name}\n </a>\n </h3>\n {item.product.sku && (\n <p className=\"text-sm text-gray-500\">SKU: {item.product.sku}</p>\n )}\n {item.variant && (\n <p className=\"text-sm text-gray-500\">\n {Object.entries(item.variant.attributes)\n .map(([key, value]) => `${key}: ${value}`)\n .join(', ')}\n </p>\n )}\n </div>\n\n {/* Price */}\n <div className=\"text-right\">\n <p className=\"text-base font-semibold text-gray-900\">\n {currencySymbol}{(item.price * item.quantity).toFixed(2)}\n </p>\n {item.quantity > 1 && (\n <p className=\"text-sm text-gray-500\">\n {currencySymbol}{item.price.toFixed(2)} each\n </p>\n )}\n </div>\n </div>\n\n {/* Quantity Controls */}\n <div className=\"mt-3 flex items-center justify-between\">\n {showQuantityControls ? (\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n className=\"w-8 h-8 flex items-center justify-center rounded-md border border-gray-300 bg-white text-gray-600 hover:bg-gray-50\"\n aria-label=\"Decrease quantity\"\n >\n <svg className=\"w-4 h-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M20 12H4\" />\n </svg>\n </button>\n <span className=\"w-12 text-center text-sm font-medium\">{item.quantity}</span>\n <button\n type=\"button\"\n className=\"w-8 h-8 flex items-center justify-center rounded-md border border-gray-300 bg-white text-gray-600 hover:bg-gray-50\"\n aria-label=\"Increase quantity\"\n >\n <svg className=\"w-4 h-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 4v16m8-8H4\" />\n </svg>\n </button>\n </div>\n ) : (\n <span className=\"text-sm text-gray-600\">Qty: {item.quantity}</span>\n )}\n\n {showRemoveButton && (\n <button\n type=\"button\"\n className=\"text-sm text-red-600 hover:text-red-800\"\n >\n Remove\n </button>\n )}\n </div>\n </div>\n </div>\n </Card>\n ))}\n </div>\n\n {/* Order Summary */}\n <div className=\"lg:col-span-1\">\n <Card className=\"p-6 sticky top-4\">\n <h2 className=\"text-lg font-semibold text-gray-900 mb-4\">Order Summary</h2>\n\n <div className=\"space-y-3\">\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Subtotal</span>\n <span className=\"text-gray-900\">{currencySymbol}{cart.subtotal.toFixed(2)}</span>\n </div>\n\n {cart.discount > 0 && (\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Discount</span>\n <span className=\"text-green-600\">-{currencySymbol}{cart.discount.toFixed(2)}</span>\n </div>\n )}\n\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Shipping</span>\n <span className=\"text-gray-900\">\n {cart.shipping === 0 ? 'Free' : `${currencySymbol}${cart.shipping.toFixed(2)}`}\n </span>\n </div>\n\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Tax</span>\n <span className=\"text-gray-900\">{currencySymbol}{cart.tax.toFixed(2)}</span>\n </div>\n\n <div className=\"border-t pt-3 mt-3\">\n <div className=\"flex justify-between\">\n <span className=\"text-base font-semibold text-gray-900\">Total</span>\n <span className=\"text-xl font-bold text-gray-900\">\n {currencySymbol}{cart.total.toFixed(2)}\n </span>\n </div>\n </div>\n </div>\n\n {/* Coupon Code */}\n <div className=\"mt-6\">\n <div className=\"flex gap-2\">\n <input\n type=\"text\"\n placeholder=\"Coupon code\"\n className=\"flex-1 px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:ring-2 focus:ring-blue-500\"\n />\n <Button variant=\"secondary\" size=\"sm\">\n Apply\n </Button>\n </div>\n </div>\n\n {/* Checkout Button */}\n <div className=\"mt-6\">\n <LinkButton href={checkoutUrl} className=\"w-full\" size=\"lg\">\n Proceed to Checkout\n </LinkButton>\n </div>\n\n {/* Trust Badges */}\n <div className=\"mt-6 pt-6 border-t\">\n <div className=\"flex items-center justify-center gap-4 text-gray-400\">\n <svg className=\"w-8 h-8\" fill=\"currentColor\" viewBox=\"0 0 24 24\">\n <path d=\"M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm0 10.99h7c-.53 4.12-3.28 7.79-7 8.94V12H5V6.3l7-3.11v8.8z\" />\n </svg>\n <svg className=\"w-8 h-8\" fill=\"currentColor\" viewBox=\"0 0 24 24\">\n <path d=\"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z\" />\n </svg>\n </div>\n <p className=\"text-xs text-gray-500 text-center mt-2\">\n Secure checkout with SSL encryption\n </p>\n </div>\n </Card>\n </div>\n </div>\n </div>\n )\n}\n","/**\n * CartSummary Component\n *\n * A compact server-side component for displaying cart summary in headers/sidebars.\n * Renders on the server with real cart data.\n *\n * @example\n * ```tsx\n * import { CartSummary } from '@omnikit-js/ui'\n *\n * export default async function Header() {\n * return (\n * <header>\n * <CartSummary\n * baseUrl={process.env.OMNIKIT_BASE_URL!}\n * apiKey={process.env.OMNIKIT_API_KEY}\n * userId=\"123\"\n * variant=\"mini\"\n * />\n * </header>\n * )\n * }\n * ```\n */\n\nimport { Card } from '@marcoschwartz/lite-ui'\nimport type { CartSummaryProps } from './types'\nimport type { Cart } from '../commerce-types'\n\n// Mock data for development\nconst MOCK_CART: Cart = {\n id: 'cart_001',\n userId: 'user_123',\n items: [\n {\n id: 'item_001',\n product: {\n id: 'prod_001',\n name: 'Wireless Bluetooth Headphones',\n slug: 'wireless-bluetooth-headphones',\n price: 149.99,\n images: ['/placeholder-product.jpg'],\n inStock: true,\n },\n quantity: 1,\n price: 149.99,\n },\n {\n id: 'item_002',\n product: {\n id: 'prod_002',\n name: 'USB-C Charging Cable',\n slug: 'usb-c-charging-cable',\n price: 24.99,\n images: ['/placeholder-product.jpg'],\n inStock: true,\n },\n quantity: 2,\n price: 24.99,\n },\n ],\n itemCount: 3,\n subtotal: 199.97,\n tax: 16.00,\n shipping: 0,\n discount: 0,\n total: 215.97,\n currency: 'USD',\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n}\n\n// Button-styled link component\nfunction LinkButton({ href, children, variant = 'primary', size = 'md', className = '' }: {\n href: string\n children: React.ReactNode\n variant?: 'primary' | 'secondary'\n size?: 'sm' | 'md' | 'lg'\n className?: string\n}) {\n const baseStyles = 'inline-flex items-center justify-center font-medium rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2'\n const variantStyles = variant === 'primary'\n ? 'bg-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500'\n : 'bg-gray-100 text-gray-900 hover:bg-gray-200 focus:ring-gray-500 border border-gray-300'\n const sizeStyles = size === 'sm' ? 'px-3 py-1.5 text-sm' : size === 'lg' ? 'px-6 py-3 text-base' : 'px-4 py-2 text-sm'\n\n return (\n <a href={href} className={`${baseStyles} ${variantStyles} ${sizeStyles} ${className}`}>\n {children}\n </a>\n )\n}\n\nexport async function CartSummary({\n // API config - will be used when connected to real API\n baseUrl: _baseUrl,\n apiKey: _apiKey,\n accessToken: _accessToken,\n projectId: _projectId,\n userId: _userId,\n cartId: _cartId,\n // Display options\n variant = 'compact',\n showBadge = true,\n showTotal = true,\n cartUrl = '/cart',\n checkoutUrl = '/checkout',\n currencySymbol = '$',\n className = '',\n}: CartSummaryProps) {\n // TODO: Replace with actual API call\n // const client = createOmniKitClient({ baseUrl, apiKey, jwt: accessToken })\n // const cart = await client.query('carts', { filter: { userId } })\n\n const cart = MOCK_CART\n\n // Mini variant - just icon with badge\n if (variant === 'mini') {\n return (\n <a\n href={cartUrl}\n className={`relative inline-flex items-center justify-center p-2 text-gray-600 hover:text-gray-900 ${className}`}\n >\n <svg className=\"w-6 h-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M16 11V7a4 4 0 00-8 0v4M5 9h14l1 12H4L5 9z\"\n />\n </svg>\n {showBadge && cart.itemCount > 0 && (\n <span className=\"absolute -top-1 -right-1 w-5 h-5 flex items-center justify-center text-xs font-bold text-white bg-blue-600 rounded-full\">\n {cart.itemCount > 99 ? '99+' : cart.itemCount}\n </span>\n )}\n </a>\n )\n }\n\n // Compact variant - icon with count and total\n if (variant === 'compact') {\n return (\n <a\n href={cartUrl}\n className={`inline-flex items-center gap-2 px-3 py-2 text-sm text-gray-600 hover:text-gray-900 rounded-lg hover:bg-gray-100 transition-colors ${className}`}\n >\n <div className=\"relative\">\n <svg className=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M16 11V7a4 4 0 00-8 0v4M5 9h14l1 12H4L5 9z\"\n />\n </svg>\n {showBadge && cart.itemCount > 0 && (\n <span className=\"absolute -top-2 -right-2 w-4 h-4 flex items-center justify-center text-[10px] font-bold text-white bg-blue-600 rounded-full\">\n {cart.itemCount > 9 ? '9+' : cart.itemCount}\n </span>\n )}\n </div>\n {showTotal && cart.total > 0 && (\n <span className=\"font-medium\">\n {currencySymbol}{cart.total.toFixed(2)}\n </span>\n )}\n </a>\n )\n }\n\n // Detailed variant - full dropdown-style summary\n return (\n <Card className={`p-4 w-80 ${className}`}>\n <div className=\"flex items-center justify-between mb-4\">\n <h3 className=\"text-sm font-semibold text-gray-900\">\n Cart ({cart.itemCount} {cart.itemCount === 1 ? 'item' : 'items'})\n </h3>\n <a href={cartUrl} className=\"text-xs text-blue-600 hover:text-blue-800\">\n View All\n </a>\n </div>\n\n {cart.items.length === 0 ? (\n <p className=\"text-sm text-gray-500 text-center py-4\">Your cart is empty</p>\n ) : (\n <>\n {/* Item List (max 3 items) */}\n <div className=\"space-y-3 mb-4\">\n {cart.items.slice(0, 3).map((item) => (\n <div key={item.id} className=\"flex items-center gap-3\">\n <div className=\"w-12 h-12 bg-gray-100 rounded-md overflow-hidden flex-shrink-0\">\n <img\n src={item.product.images[0] || '/placeholder-product.jpg'}\n alt={item.product.name}\n className=\"w-full h-full object-cover\"\n />\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-gray-900 truncate\">\n {item.product.name}\n </p>\n <p className=\"text-xs text-gray-500\">\n Qty: {item.quantity} × {currencySymbol}{item.price.toFixed(2)}\n </p>\n </div>\n <p className=\"text-sm font-medium text-gray-900\">\n {currencySymbol}{(item.price * item.quantity).toFixed(2)}\n </p>\n </div>\n ))}\n </div>\n\n {cart.items.length > 3 && (\n <p className=\"text-xs text-gray-500 text-center mb-4\">\n +{cart.items.length - 3} more {cart.items.length - 3 === 1 ? 'item' : 'items'}\n </p>\n )}\n\n {/* Summary */}\n <div className=\"border-t pt-4 space-y-2\">\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Subtotal</span>\n <span className=\"text-gray-900\">{currencySymbol}{cart.subtotal.toFixed(2)}</span>\n </div>\n {cart.shipping > 0 && (\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Shipping</span>\n <span className=\"text-gray-900\">{currencySymbol}{cart.shipping.toFixed(2)}</span>\n </div>\n )}\n <div className=\"flex justify-between text-sm font-semibold\">\n <span className=\"text-gray-900\">Total</span>\n <span className=\"text-gray-900\">{currencySymbol}{cart.total.toFixed(2)}</span>\n </div>\n </div>\n\n {/* Actions */}\n <div className=\"mt-4 space-y-2\">\n <LinkButton href={checkoutUrl} className=\"w-full\" size=\"sm\">\n Checkout\n </LinkButton>\n <LinkButton href={cartUrl} variant=\"secondary\" className=\"w-full\" size=\"sm\">\n View Cart\n </LinkButton>\n </div>\n </>\n )}\n </Card>\n )\n}\n","/**\n * Checkout Component\n *\n * A server-side React component for multi-step checkout.\n * Renders on the server with cart data and saved addresses.\n *\n * @example\n * ```tsx\n * import { Checkout } from '@omnikit-js/ui'\n *\n * export default async function CheckoutPage() {\n * return (\n * <Checkout\n * baseUrl={process.env.OMNIKIT_BASE_URL!}\n * apiKey={process.env.OMNIKIT_API_KEY}\n * userId=\"123\"\n * successUrl=\"/order-confirmation\"\n * />\n * )\n * }\n * ```\n */\n\nimport { Card, Button, Alert } from '@marcoschwartz/lite-ui'\nimport type { CheckoutProps } from './types'\nimport type { Cart, Address, ShippingMethod, CheckoutStep } from '../commerce-types'\n\n// Mock data for development\nconst MOCK_CART: Cart = {\n id: 'cart_001',\n userId: 'user_123',\n items: [\n {\n id: 'item_001',\n product: {\n id: 'prod_001',\n name: 'Wireless Bluetooth Headphones',\n slug: 'wireless-bluetooth-headphones',\n price: 149.99,\n images: ['/placeholder-product.jpg'],\n inStock: true,\n },\n quantity: 1,\n price: 149.99,\n },\n {\n id: 'item_002',\n product: {\n id: 'prod_002',\n name: 'USB-C Charging Cable (2-Pack)',\n slug: 'usb-c-charging-cable',\n price: 24.99,\n images: ['/placeholder-product.jpg'],\n inStock: true,\n },\n quantity: 2,\n price: 24.99,\n },\n ],\n itemCount: 3,\n subtotal: 199.97,\n tax: 16.00,\n shipping: 9.99,\n discount: 0,\n total: 225.96,\n currency: 'USD',\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n}\n\nconst MOCK_ADDRESSES: Address[] = [\n {\n id: 'addr_001',\n firstName: 'John',\n lastName: 'Doe',\n address1: '123 Main Street',\n address2: 'Apt 4B',\n city: 'New York',\n state: 'NY',\n postalCode: '10001',\n country: 'US',\n phone: '+1 (555) 123-4567',\n isDefault: true,\n },\n]\n\nconst MOCK_SHIPPING_METHODS: ShippingMethod[] = [\n {\n id: 'ship_001',\n name: 'Standard Shipping',\n description: 'Delivered in 5-7 business days',\n price: 9.99,\n estimatedDays: '5-7 business days',\n carrier: 'USPS',\n },\n {\n id: 'ship_002',\n name: 'Express Shipping',\n description: 'Delivered in 2-3 business days',\n price: 19.99,\n estimatedDays: '2-3 business days',\n carrier: 'FedEx',\n },\n {\n id: 'ship_003',\n name: 'Next Day Delivery',\n description: 'Delivered by tomorrow',\n price: 34.99,\n estimatedDays: '1 business day',\n carrier: 'UPS',\n },\n]\n\nconst DEFAULT_COUNTRIES = [\n { code: 'US', name: 'United States' },\n { code: 'CA', name: 'Canada' },\n { code: 'GB', name: 'United Kingdom' },\n { code: 'DE', name: 'Germany' },\n { code: 'FR', name: 'France' },\n { code: 'AU', name: 'Australia' },\n]\n\nconst CHECKOUT_STEPS: CheckoutStep[] = [\n { id: 'shipping', title: 'Shipping', description: 'Enter your address', completed: false, active: true },\n { id: 'delivery', title: 'Delivery', description: 'Choose shipping method', completed: false, active: false },\n { id: 'payment', title: 'Payment', description: 'Enter payment details', completed: false, active: false },\n { id: 'review', title: 'Review', description: 'Confirm your order', completed: false, active: false },\n]\n\n// Button-styled link component\nfunction LinkButton({ href, children, variant = 'primary', size = 'md', className = '' }: {\n href: string\n children: React.ReactNode\n variant?: 'primary' | 'secondary'\n size?: 'sm' | 'md' | 'lg'\n className?: string\n}) {\n const baseStyles = 'inline-flex items-center justify-center font-medium rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2'\n const variantStyles = variant === 'primary'\n ? 'bg-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500'\n : 'bg-gray-100 text-gray-900 hover:bg-gray-200 focus:ring-gray-500 border border-gray-300'\n const sizeStyles = size === 'sm' ? 'px-3 py-1.5 text-sm' : size === 'lg' ? 'px-6 py-3 text-base' : 'px-4 py-2 text-sm'\n\n return (\n <a href={href} className={`${baseStyles} ${variantStyles} ${sizeStyles} ${className}`}>\n {children}\n </a>\n )\n}\n\nexport async function Checkout({\n // API config - will be used when connected to real API\n baseUrl: _baseUrl,\n apiKey: _apiKey,\n accessToken: _accessToken,\n projectId: _projectId,\n userId: _userId,\n cartId: _cartId,\n // Display options\n step = 1,\n showOrderSummary = true,\n showStepIndicator = true,\n successUrl: _successUrl = '/order-confirmation',\n cancelUrl = '/cart',\n currencySymbol = '$',\n shippingMethods,\n savedAddresses,\n allowGuestCheckout: _allowGuestCheckout = true,\n requirePhone = false,\n countries = DEFAULT_COUNTRIES,\n className = '',\n}: CheckoutProps) {\n // TODO: Replace with actual API calls\n const cart = MOCK_CART\n const addresses = savedAddresses || MOCK_ADDRESSES\n const shipping = shippingMethods || MOCK_SHIPPING_METHODS\n\n // Update steps based on current step\n const steps = CHECKOUT_STEPS.map((s, i) => ({\n ...s,\n completed: i < step - 1,\n active: i === step - 1,\n }))\n\n // Empty cart check\n if (!cart || cart.items.length === 0) {\n return (\n <Alert variant=\"warning\" className={className}>\n <p className=\"font-medium\">Your cart is empty</p>\n <p className=\"mt-1 text-sm\">Add some items before checking out.</p>\n <LinkButton href={cancelUrl} variant=\"secondary\" size=\"sm\" className=\"mt-3\">\n Return to Cart\n </LinkButton>\n </Alert>\n )\n }\n\n return (\n <div className={`space-y-6 ${className}`}>\n {/* Step Indicator */}\n {showStepIndicator && (\n <nav aria-label=\"Checkout progress\" className=\"mb-8\">\n <ol className=\"flex items-center justify-between\">\n {steps.map((s, index) => (\n <li key={s.id} className=\"flex items-center\">\n <div className=\"flex items-center\">\n <span\n className={`\n flex items-center justify-center w-10 h-10 rounded-full text-sm font-semibold\n ${s.completed\n ? 'bg-green-500 text-white'\n : s.active\n ? 'bg-blue-600 text-white'\n : 'bg-gray-200 text-gray-500'\n }\n `}\n >\n {s.completed ? (\n <svg className=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n ) : (\n index + 1\n )}\n </span>\n <div className=\"ml-3 hidden sm:block\">\n <p className={`text-sm font-medium ${s.active ? 'text-blue-600' : 'text-gray-900'}`}>\n {s.title}\n </p>\n <p className=\"text-xs text-gray-500\">{s.description}</p>\n </div>\n </div>\n {index < steps.length - 1 && (\n <div className={`w-12 sm:w-24 h-0.5 mx-2 sm:mx-4 ${s.completed ? 'bg-green-500' : 'bg-gray-200'}`} />\n )}\n </li>\n ))}\n </ol>\n </nav>\n )}\n\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-8\">\n {/* Main Content */}\n <div className=\"lg:col-span-2\">\n {/* Step 1: Shipping Address */}\n {step === 1 && (\n <Card className=\"p-6\">\n <h2 className=\"text-xl font-semibold text-gray-900 mb-6\">Shipping Address</h2>\n\n {/* Saved Addresses */}\n {addresses.length > 0 && (\n <div className=\"mb-6\">\n <h3 className=\"text-sm font-medium text-gray-700 mb-3\">Saved Addresses</h3>\n <div className=\"space-y-3\">\n {addresses.map((addr) => (\n <label\n key={addr.id}\n className=\"flex items-start gap-3 p-4 border rounded-lg cursor-pointer hover:border-blue-500 transition-colors\"\n >\n <input\n type=\"radio\"\n name=\"address\"\n value={addr.id}\n defaultChecked={addr.isDefault}\n className=\"mt-1\"\n />\n <div>\n <p className=\"font-medium text-gray-900\">\n {addr.firstName} {addr.lastName}\n </p>\n <p className=\"text-sm text-gray-600\">\n {addr.address1}\n {addr.address2 && `, ${addr.address2}`}\n </p>\n <p className=\"text-sm text-gray-600\">\n {addr.city}, {addr.state} {addr.postalCode}\n </p>\n {addr.phone && <p className=\"text-sm text-gray-500\">{addr.phone}</p>}\n </div>\n </label>\n ))}\n </div>\n </div>\n )}\n\n {/* New Address Form */}\n <div>\n <h3 className=\"text-sm font-medium text-gray-700 mb-3\">\n {addresses.length > 0 ? 'Or enter a new address' : 'Enter your address'}\n </h3>\n <form className=\"space-y-4\">\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">First Name</label>\n <input\n type=\"text\"\n className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder=\"John\"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">Last Name</label>\n <input\n type=\"text\"\n className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder=\"Doe\"\n />\n </div>\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">Address</label>\n <input\n type=\"text\"\n className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder=\"123 Main Street\"\n />\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n Apartment, suite, etc. (optional)\n </label>\n <input\n type=\"text\"\n className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder=\"Apt 4B\"\n />\n </div>\n\n <div className=\"grid grid-cols-2 sm:grid-cols-3 gap-4\">\n <div className=\"col-span-2 sm:col-span-1\">\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">City</label>\n <input\n type=\"text\"\n className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder=\"New York\"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">State</label>\n <input\n type=\"text\"\n className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder=\"NY\"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">ZIP Code</label>\n <input\n type=\"text\"\n className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder=\"10001\"\n />\n </div>\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">Country</label>\n <select className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\">\n {countries.map((c) => (\n <option key={c.code} value={c.code}>\n {c.name}\n </option>\n ))}\n </select>\n </div>\n\n {requirePhone && (\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">Phone Number</label>\n <input\n type=\"tel\"\n className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder=\"+1 (555) 123-4567\"\n />\n </div>\n )}\n </form>\n </div>\n\n <div className=\"mt-6 flex justify-between\">\n <LinkButton href={cancelUrl} variant=\"secondary\">\n Back to Cart\n </LinkButton>\n <Button>Continue to Delivery</Button>\n </div>\n </Card>\n )}\n\n {/* Step 2: Delivery Method */}\n {step === 2 && (\n <Card className=\"p-6\">\n <h2 className=\"text-xl font-semibold text-gray-900 mb-6\">Delivery Method</h2>\n\n <div className=\"space-y-3\">\n {shipping.map((method, index) => (\n <label\n key={method.id}\n className=\"flex items-center justify-between p-4 border rounded-lg cursor-pointer hover:border-blue-500 transition-colors\"\n >\n <div className=\"flex items-center gap-3\">\n <input\n type=\"radio\"\n name=\"shipping\"\n value={method.id}\n defaultChecked={index === 0}\n />\n <div>\n <p className=\"font-medium text-gray-900\">{method.name}</p>\n <p className=\"text-sm text-gray-600\">{method.description}</p>\n {method.carrier && (\n <p className=\"text-xs text-gray-500\">via {method.carrier}</p>\n )}\n </div>\n </div>\n <p className=\"text-lg font-semibold text-gray-900\">\n {method.price === 0 ? 'Free' : `${currencySymbol}${method.price.toFixed(2)}`}\n </p>\n </label>\n ))}\n </div>\n\n <div className=\"mt-6 flex justify-between\">\n <Button variant=\"secondary\">Back</Button>\n <Button>Continue to Payment</Button>\n </div>\n </Card>\n )}\n\n {/* Step 3: Payment */}\n {step === 3 && (\n <Card className=\"p-6\">\n <h2 className=\"text-xl font-semibold text-gray-900 mb-6\">Payment Method</h2>\n\n <form className=\"space-y-6\">\n {/* Payment Type Selection */}\n <div className=\"space-y-3\">\n <label className=\"flex items-center gap-3 p-4 border rounded-lg cursor-pointer hover:border-blue-500 border-blue-500 bg-blue-50\">\n <input type=\"radio\" name=\"payment_type\" value=\"card\" defaultChecked />\n <div className=\"flex items-center gap-2\">\n <svg className=\"w-8 h-8 text-gray-600\" fill=\"currentColor\" viewBox=\"0 0 24 24\">\n <path d=\"M20 4H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V6c0-1.11-.89-2-2-2zm0 14H4v-6h16v6zm0-10H4V6h16v2z\" />\n </svg>\n <span className=\"font-medium\">Credit / Debit Card</span>\n </div>\n </label>\n <label className=\"flex items-center gap-3 p-4 border rounded-lg cursor-pointer hover:border-blue-500\">\n <input type=\"radio\" name=\"payment_type\" value=\"paypal\" />\n <div className=\"flex items-center gap-2\">\n <svg className=\"w-8 h-8\" viewBox=\"0 0 24 24\" fill=\"#003087\">\n <path d=\"M7.076 21.337H2.47a.641.641 0 0 1-.633-.74L4.944.901C5.026.382 5.474 0 5.998 0h7.46c2.57 0 4.578.543 5.69 1.81 1.01 1.15 1.304 2.42 1.012 4.287-.023.143-.047.288-.077.437-.983 5.05-4.349 6.797-8.647 6.797h-2.19c-.524 0-.968.382-1.05.9l-1.12 7.106z\" />\n </svg>\n <span className=\"font-medium\">PayPal</span>\n </div>\n </label>\n </div>\n\n {/* Card Details */}\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">Card Number</label>\n <input\n type=\"text\"\n className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder=\"1234 5678 9012 3456\"\n />\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">Name on Card</label>\n <input\n type=\"text\"\n className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder=\"John Doe\"\n />\n </div>\n\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">Expiry Date</label>\n <input\n type=\"text\"\n className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder=\"MM/YY\"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">CVC</label>\n <input\n type=\"text\"\n className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder=\"123\"\n />\n </div>\n </div>\n </div>\n\n {/* Billing Address */}\n <div>\n <label className=\"flex items-center gap-2\">\n <input type=\"checkbox\" defaultChecked />\n <span className=\"text-sm text-gray-700\">Billing address same as shipping</span>\n </label>\n </div>\n </form>\n\n <div className=\"mt-6 flex justify-between\">\n <Button variant=\"secondary\">Back</Button>\n <Button>Review Order</Button>\n </div>\n </Card>\n )}\n\n {/* Step 4: Review */}\n {step === 4 && (\n <Card className=\"p-6\">\n <h2 className=\"text-xl font-semibold text-gray-900 mb-6\">Review Your Order</h2>\n\n {/* Shipping Info */}\n <div className=\"mb-6 p-4 bg-gray-50 rounded-lg\">\n <div className=\"flex justify-between items-start mb-2\">\n <h3 className=\"text-sm font-medium text-gray-900\">Shipping Address</h3>\n <button className=\"text-sm text-blue-600 hover:text-blue-800\">Edit</button>\n </div>\n <p className=\"text-sm text-gray-600\">\n John Doe<br />\n 123 Main Street, Apt 4B<br />\n New York, NY 10001<br />\n United States\n </p>\n </div>\n\n {/* Delivery Info */}\n <div className=\"mb-6 p-4 bg-gray-50 rounded-lg\">\n <div className=\"flex justify-between items-start mb-2\">\n <h3 className=\"text-sm font-medium text-gray-900\">Delivery Method</h3>\n <button className=\"text-sm text-blue-600 hover:text-blue-800\">Edit</button>\n </div>\n <p className=\"text-sm text-gray-600\">\n Standard Shipping - {currencySymbol}9.99<br />\n Estimated delivery: 5-7 business days\n </p>\n </div>\n\n {/* Payment Info */}\n <div className=\"mb-6 p-4 bg-gray-50 rounded-lg\">\n <div className=\"flex justify-between items-start mb-2\">\n <h3 className=\"text-sm font-medium text-gray-900\">Payment Method</h3>\n <button className=\"text-sm text-blue-600 hover:text-blue-800\">Edit</button>\n </div>\n <p className=\"text-sm text-gray-600\">\n Credit Card ending in 3456<br />\n Expires 12/25\n </p>\n </div>\n\n {/* Order Items */}\n <div className=\"mb-6\">\n <h3 className=\"text-sm font-medium text-gray-900 mb-3\">Order Items</h3>\n <div className=\"space-y-3\">\n {cart.items.map((item) => (\n <div key={item.id} className=\"flex items-center gap-4 py-3 border-b last:border-0\">\n <div className=\"w-16 h-16 bg-gray-100 rounded-md overflow-hidden\">\n <img\n src={item.product.images[0] || '/placeholder-product.jpg'}\n alt={item.product.name}\n className=\"w-full h-full object-cover\"\n />\n </div>\n <div className=\"flex-1\">\n <p className=\"font-medium text-gray-900\">{item.product.name}</p>\n <p className=\"text-sm text-gray-500\">Qty: {item.quantity}</p>\n </div>\n <p className=\"font-medium text-gray-900\">\n {currencySymbol}{(item.price * item.quantity).toFixed(2)}\n </p>\n </div>\n ))}\n </div>\n </div>\n\n {/* Terms */}\n <div className=\"mb-6\">\n <label className=\"flex items-start gap-2\">\n <input type=\"checkbox\" className=\"mt-1\" />\n <span className=\"text-sm text-gray-600\">\n I agree to the{' '}\n <a href=\"/terms\" className=\"text-blue-600 hover:text-blue-800\">Terms of Service</a>\n {' '}and{' '}\n <a href=\"/privacy\" className=\"text-blue-600 hover:text-blue-800\">Privacy Policy</a>\n </span>\n </label>\n </div>\n\n <div className=\"flex justify-between\">\n <Button variant=\"secondary\">Back</Button>\n <Button size=\"lg\">\n Place Order - {currencySymbol}{cart.total.toFixed(2)}\n </Button>\n </div>\n </Card>\n )}\n </div>\n\n {/* Order Summary Sidebar */}\n {showOrderSummary && (\n <div className=\"lg:col-span-1\">\n <Card className=\"p-6 sticky top-4\">\n <h2 className=\"text-lg font-semibold text-gray-900 mb-4\">Order Summary</h2>\n\n {/* Items Preview */}\n <div className=\"space-y-3 mb-4\">\n {cart.items.map((item) => (\n <div key={item.id} className=\"flex items-center gap-3\">\n <div className=\"relative w-12 h-12 bg-gray-100 rounded-md overflow-hidden flex-shrink-0\">\n <img\n src={item.product.images[0] || '/placeholder-product.jpg'}\n alt={item.product.name}\n className=\"w-full h-full object-cover\"\n />\n <span className=\"absolute -top-1 -right-1 w-5 h-5 flex items-center justify-center text-xs font-bold text-white bg-gray-600 rounded-full\">\n {item.quantity}\n </span>\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-gray-900 truncate\">\n {item.product.name}\n </p>\n </div>\n <p className=\"text-sm font-medium text-gray-900\">\n {currencySymbol}{(item.price * item.quantity).toFixed(2)}\n </p>\n </div>\n ))}\n </div>\n\n {/* Totals */}\n <div className=\"border-t pt-4 space-y-2\">\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Subtotal</span>\n <span className=\"text-gray-900\">{currencySymbol}{cart.subtotal.toFixed(2)}</span>\n </div>\n {cart.discount > 0 && (\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Discount</span>\n <span className=\"text-green-600\">-{currencySymbol}{cart.discount.toFixed(2)}</span>\n </div>\n )}\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Shipping</span>\n <span className=\"text-gray-900\">\n {cart.shipping === 0 ? 'Free' : `${currencySymbol}${cart.shipping.toFixed(2)}`}\n </span>\n </div>\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Tax</span>\n <span className=\"text-gray-900\">{currencySymbol}{cart.tax.toFixed(2)}</span>\n </div>\n <div className=\"border-t pt-3 mt-3\">\n <div className=\"flex justify-between\">\n <span className=\"text-base font-semibold text-gray-900\">Total</span>\n <span className=\"text-xl font-bold text-gray-900\">\n {currencySymbol}{cart.total.toFixed(2)}\n </span>\n </div>\n </div>\n </div>\n </Card>\n </div>\n )}\n </div>\n </div>\n )\n}\n","/**\n * OrderConfirmation Component\n *\n * A server-side React component for displaying order confirmation.\n * Renders on the server with complete order details.\n *\n * @example\n * ```tsx\n * import { OrderConfirmation } from '@omnikit-js/ui'\n *\n * export default async function OrderConfirmationPage({ params }) {\n * return (\n * <OrderConfirmation\n * baseUrl={process.env.OMNIKIT_BASE_URL!}\n * apiKey={process.env.OMNIKIT_API_KEY}\n * orderId={params.orderId}\n * />\n * )\n * }\n * ```\n */\n\nimport { Card, Alert } from '@marcoschwartz/lite-ui'\nimport type { OrderConfirmationProps } from './types'\nimport type { Order } from '../commerce-types'\n\n// Mock data for development\nconst MOCK_ORDER: Order = {\n id: 'ord_001',\n orderNumber: 'ORD-2024-001234',\n userId: 'user_123',\n email: 'john.doe@example.com',\n status: 'processing',\n items: [\n {\n id: 'item_001',\n product: {\n id: 'prod_001',\n name: 'Wireless Bluetooth Headphones',\n slug: 'wireless-bluetooth-headphones',\n price: 149.99,\n images: ['/placeholder-product.jpg'],\n inStock: true,\n },\n quantity: 1,\n price: 149.99,\n },\n {\n id: 'item_002',\n product: {\n id: 'prod_002',\n name: 'USB-C Charging Cable (2-Pack)',\n slug: 'usb-c-charging-cable',\n price: 24.99,\n images: ['/placeholder-product.jpg'],\n inStock: true,\n },\n quantity: 2,\n price: 24.99,\n },\n ],\n subtotal: 199.97,\n tax: 16.00,\n shipping: 9.99,\n discount: 0,\n total: 225.96,\n currency: 'USD',\n shippingAddress: {\n firstName: 'John',\n lastName: 'Doe',\n address1: '123 Main Street',\n address2: 'Apt 4B',\n city: 'New York',\n state: 'NY',\n postalCode: '10001',\n country: 'US',\n phone: '+1 (555) 123-4567',\n },\n billingAddress: {\n firstName: 'John',\n lastName: 'Doe',\n address1: '123 Main Street',\n address2: 'Apt 4B',\n city: 'New York',\n state: 'NY',\n postalCode: '10001',\n country: 'US',\n },\n shippingMethod: {\n id: 'ship_001',\n name: 'Standard Shipping',\n description: 'Delivered in 5-7 business days',\n price: 9.99,\n estimatedDays: '5-7 business days',\n carrier: 'USPS',\n },\n paymentMethod: {\n type: 'card',\n last4: '3456',\n brand: 'Visa',\n expiryMonth: 12,\n expiryYear: 2025,\n },\n trackingNumber: '9400111899223456789012',\n trackingUrl: 'https://tools.usps.com/go/TrackConfirmAction?tLabels=9400111899223456789012',\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n}\n\nconst STATUS_CONFIG: Record<Order['status'], { label: string; color: string }> = {\n pending: { label: 'Pending', color: 'text-yellow-600 bg-yellow-100' },\n processing: { label: 'Processing', color: 'text-blue-600 bg-blue-100' },\n shipped: { label: 'Shipped', color: 'text-purple-600 bg-purple-100' },\n delivered: { label: 'Delivered', color: 'text-green-600 bg-green-100' },\n cancelled: { label: 'Cancelled', color: 'text-red-600 bg-red-100' },\n refunded: { label: 'Refunded', color: 'text-gray-600 bg-gray-100' },\n}\n\n// Button-styled link component\nfunction LinkButton({ href, children, variant = 'primary', size = 'md', className = '', target, rel }: {\n href: string\n children: React.ReactNode\n variant?: 'primary' | 'secondary'\n size?: 'sm' | 'md' | 'lg'\n className?: string\n target?: string\n rel?: string\n}) {\n const baseStyles = 'inline-flex items-center justify-center font-medium rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2'\n const variantStyles = variant === 'primary'\n ? 'bg-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500'\n : 'bg-gray-100 text-gray-900 hover:bg-gray-200 focus:ring-gray-500 border border-gray-300'\n const sizeStyles = size === 'sm' ? 'px-3 py-1.5 text-sm' : size === 'lg' ? 'px-6 py-3 text-base' : 'px-4 py-2 text-sm'\n\n return (\n <a href={href} className={`${baseStyles} ${variantStyles} ${sizeStyles} ${className}`} target={target} rel={rel}>\n {children}\n </a>\n )\n}\n\nexport async function OrderConfirmation({\n // API config - will be used when connected to real API\n baseUrl: _baseUrl,\n apiKey: _apiKey,\n accessToken: _accessToken,\n projectId: _projectId,\n // Required props\n orderId,\n // Display options\n showItems = true,\n showShippingAddress = true,\n showBillingAddress = false,\n showPaymentMethod = true,\n showTimeline = true,\n continueShoppingUrl = '/products',\n trackOrderUrl,\n currencySymbol = '$',\n className = '',\n}: OrderConfirmationProps) {\n // TODO: Replace with actual API call\n // const client = createOmniKitClient({ baseUrl, apiKey, jwt: accessToken })\n // const order = await client.findById('orders', orderId)\n\n const order = MOCK_ORDER\n\n // Order not found\n if (!order) {\n return (\n <Alert variant=\"error\" className={className}>\n <p className=\"font-medium\">Order not found</p>\n <p className=\"mt-1 text-sm\">We couldn't find an order with ID: {orderId}</p>\n <LinkButton href={continueShoppingUrl} variant=\"secondary\" size=\"sm\" className=\"mt-3\">\n Continue Shopping\n </LinkButton>\n </Alert>\n )\n }\n\n const statusConfig = STATUS_CONFIG[order.status]\n\n return (\n <div className={`max-w-3xl mx-auto space-y-8 ${className}`}>\n {/* Success Header */}\n <div className=\"text-center\">\n <div className=\"mx-auto w-16 h-16 bg-green-100 rounded-full flex items-center justify-center mb-4\">\n <svg className=\"w-8 h-8 text-green-600\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n </div>\n <h1 className=\"text-2xl font-bold text-gray-900 mb-2\">Thank you for your order!</h1>\n <p className=\"text-gray-600\">\n Your order <span className=\"font-semibold\">{order.orderNumber}</span> has been placed successfully.\n </p>\n <p className=\"text-sm text-gray-500 mt-1\">\n A confirmation email has been sent to <span className=\"font-medium\">{order.email}</span>\n </p>\n </div>\n\n {/* Order Status */}\n <Card className=\"p-6\">\n <div className=\"flex items-center justify-between mb-6\">\n <div>\n <h2 className=\"text-lg font-semibold text-gray-900\">Order Status</h2>\n <p className=\"text-sm text-gray-500\">Order #{order.orderNumber}</p>\n </div>\n <span className={`px-3 py-1 text-sm font-medium rounded-full ${statusConfig.color}`}>\n {statusConfig.label}\n </span>\n </div>\n\n {/* Timeline */}\n {showTimeline && (\n <div className=\"relative\">\n <div className=\"flex justify-between\">\n {['Order Placed', 'Processing', 'Shipped', 'Delivered'].map((step, index) => {\n const isCompleted = index <= ['pending', 'processing', 'shipped', 'delivered'].indexOf(order.status)\n const isCurrent = index === ['pending', 'processing', 'shipped', 'delivered'].indexOf(order.status)\n\n return (\n <div key={step} className=\"flex flex-col items-center flex-1\">\n <div\n className={`\n w-10 h-10 rounded-full flex items-center justify-center z-10\n ${isCompleted ? 'bg-green-500 text-white' : 'bg-gray-200 text-gray-500'}\n ${isCurrent ? 'ring-4 ring-green-100' : ''}\n `}\n >\n {isCompleted ? (\n <svg className=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n ) : (\n <span className=\"text-sm font-medium\">{index + 1}</span>\n )}\n </div>\n <p className={`mt-2 text-xs font-medium ${isCompleted ? 'text-green-600' : 'text-gray-500'}`}>\n {step}\n </p>\n </div>\n )\n })}\n </div>\n <div className=\"absolute top-5 left-0 right-0 h-0.5 bg-gray-200 -z-0\">\n <div\n className=\"h-full bg-green-500 transition-all\"\n style={{\n width: `${(['pending', 'processing', 'shipped', 'delivered'].indexOf(order.status) / 3) * 100}%`,\n }}\n />\n </div>\n </div>\n )}\n\n {/* Tracking */}\n {order.trackingNumber && (\n <div className=\"mt-6 p-4 bg-gray-50 rounded-lg\">\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-sm font-medium text-gray-900\">Tracking Number</p>\n <p className=\"text-sm text-gray-600 font-mono\">{order.trackingNumber}</p>\n </div>\n {order.trackingUrl && (\n <LinkButton href={order.trackingUrl} target=\"_blank\" rel=\"noopener noreferrer\" size=\"sm\">\n Track Package\n </LinkButton>\n )}\n </div>\n </div>\n )}\n </Card>\n\n {/* Order Items */}\n {showItems && (\n <Card className=\"p-6\">\n <h2 className=\"text-lg font-semibold text-gray-900 mb-4\">Order Items</h2>\n <div className=\"space-y-4\">\n {order.items.map((item) => (\n <div key={item.id} className=\"flex items-center gap-4 py-3 border-b last:border-0\">\n <div className=\"w-16 h-16 bg-gray-100 rounded-md overflow-hidden flex-shrink-0\">\n <img\n src={item.product.images[0] || '/placeholder-product.jpg'}\n alt={item.product.name}\n className=\"w-full h-full object-cover\"\n />\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"font-medium text-gray-900\">{item.product.name}</p>\n <p className=\"text-sm text-gray-500\">Qty: {item.quantity}</p>\n </div>\n <p className=\"font-medium text-gray-900\">\n {currencySymbol}{(item.price * item.quantity).toFixed(2)}\n </p>\n </div>\n ))}\n </div>\n\n {/* Order Summary */}\n <div className=\"mt-6 pt-4 border-t space-y-2\">\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Subtotal</span>\n <span className=\"text-gray-900\">{currencySymbol}{order.subtotal.toFixed(2)}</span>\n </div>\n {order.discount > 0 && (\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Discount</span>\n <span className=\"text-green-600\">-{currencySymbol}{order.discount.toFixed(2)}</span>\n </div>\n )}\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Shipping</span>\n <span className=\"text-gray-900\">{currencySymbol}{order.shipping.toFixed(2)}</span>\n </div>\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Tax</span>\n <span className=\"text-gray-900\">{currencySymbol}{order.tax.toFixed(2)}</span>\n </div>\n <div className=\"flex justify-between text-base font-semibold pt-2 border-t\">\n <span className=\"text-gray-900\">Total</span>\n <span className=\"text-gray-900\">{currencySymbol}{order.total.toFixed(2)}</span>\n </div>\n </div>\n </Card>\n )}\n\n {/* Addresses & Payment */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n {/* Shipping Address */}\n {showShippingAddress && (\n <Card className=\"p-6\">\n <h3 className=\"text-sm font-semibold text-gray-900 mb-3\">Shipping Address</h3>\n <address className=\"text-sm text-gray-600 not-italic\">\n {order.shippingAddress.firstName} {order.shippingAddress.lastName}<br />\n {order.shippingAddress.address1}<br />\n {order.shippingAddress.address2 && <>{order.shippingAddress.address2}<br /></>}\n {order.shippingAddress.city}, {order.shippingAddress.state} {order.shippingAddress.postalCode}<br />\n {order.shippingAddress.country}\n {order.shippingAddress.phone && (\n <>\n <br />\n <span className=\"text-gray-500\">{order.shippingAddress.phone}</span>\n </>\n )}\n </address>\n </Card>\n )}\n\n {/* Billing Address */}\n {showBillingAddress && (\n <Card className=\"p-6\">\n <h3 className=\"text-sm font-semibold text-gray-900 mb-3\">Billing Address</h3>\n <address className=\"text-sm text-gray-600 not-italic\">\n {order.billingAddress.firstName} {order.billingAddress.lastName}<br />\n {order.billingAddress.address1}<br />\n {order.billingAddress.address2 && <>{order.billingAddress.address2}<br /></>}\n {order.billingAddress.city}, {order.billingAddress.state} {order.billingAddress.postalCode}<br />\n {order.billingAddress.country}\n </address>\n </Card>\n )}\n\n {/* Payment Method */}\n {showPaymentMethod && (\n <Card className=\"p-6\">\n <h3 className=\"text-sm font-semibold text-gray-900 mb-3\">Payment Method</h3>\n <div className=\"flex items-center gap-3\">\n <div className=\"w-10 h-6 bg-gray-100 rounded flex items-center justify-center\">\n <svg className=\"w-8 h-4 text-gray-600\" fill=\"currentColor\" viewBox=\"0 0 32 16\">\n <rect width=\"32\" height=\"16\" rx=\"2\" fill=\"#1A1F71\" />\n <text x=\"6\" y=\"12\" fontSize=\"8\" fill=\"white\" fontFamily=\"Arial, sans-serif\" fontWeight=\"bold\">VISA</text>\n </svg>\n </div>\n <div>\n <p className=\"text-sm text-gray-900\">\n {order.paymentMethod.brand} ending in {order.paymentMethod.last4}\n </p>\n <p className=\"text-xs text-gray-500\">\n Expires {order.paymentMethod.expiryMonth}/{order.paymentMethod.expiryYear}\n </p>\n </div>\n </div>\n </Card>\n )}\n\n {/* Delivery Method */}\n <Card className=\"p-6\">\n <h3 className=\"text-sm font-semibold text-gray-900 mb-3\">Delivery Method</h3>\n <div>\n <p className=\"text-sm text-gray-900\">{order.shippingMethod.name}</p>\n <p className=\"text-xs text-gray-500\">\n {order.shippingMethod.estimatedDays}\n {order.shippingMethod.carrier && ` via ${order.shippingMethod.carrier}`}\n </p>\n </div>\n </Card>\n </div>\n\n {/* Actions */}\n <div className=\"flex flex-col sm:flex-row gap-4 justify-center\">\n <LinkButton href={continueShoppingUrl} variant=\"secondary\" size=\"lg\">\n Continue Shopping\n </LinkButton>\n {trackOrderUrl && (\n <LinkButton href={trackOrderUrl} size=\"lg\">\n View Order Details\n </LinkButton>\n )}\n </div>\n\n {/* Support */}\n <div className=\"text-center text-sm text-gray-500\">\n <p>\n Need help?{' '}\n <a href=\"/contact\" className=\"text-blue-600 hover:text-blue-800\">\n Contact our support team\n </a>\n </p>\n </div>\n </div>\n )\n}\n","/**\n * Payment API Client\n *\n * Handles API calls for the Payment component.\n */\n\nimport type { DigitalProduct } from './types'\n\ninterface ApiResponse<T> {\n success: boolean\n data?: T\n error?: string\n}\n\ninterface PaymentClientConfig {\n baseUrl: string\n apiKey?: string\n accessToken?: string\n projectId?: number\n}\n\nexport interface PaymentMethod {\n id: number\n customer_id: number\n type: 'card' | 'bank_account' | 'sepa_debit'\n provider: string\n provider_payment_method_id?: string\n is_default: boolean\n status: 'active' | 'inactive'\n card_brand?: string\n card_last4?: string\n card_exp_month?: number\n card_exp_year?: number\n}\n\nexport interface Customer {\n id: number\n project_id: number\n user_id: string\n email: string\n name?: string\n provider_customer_id?: string\n}\n\nfunction createHeaders(config: PaymentClientConfig): 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: PaymentClientConfig,\n url: string,\n options: RequestInit = {}\n): Promise<ApiResponse<T>> {\n try {\n const response = await fetch(url, {\n ...options,\n headers: {\n ...createHeaders(config),\n ...options.headers as Record<string, string>,\n },\n cache: 'no-store',\n })\n\n if (!response.ok) {\n try {\n const errorData = await response.json()\n return {\n success: false,\n error: errorData.error || `HTTP ${response.status}: ${response.statusText}`\n }\n } catch {\n return {\n success: false,\n error: `HTTP ${response.status}: ${response.statusText}`\n }\n }\n }\n\n const contentType = response.headers.get('content-type')\n if (!contentType || !contentType.includes('application/json')) {\n return {\n success: false,\n error: 'Invalid response: expected JSON'\n }\n }\n\n const data = await response.json()\n return data\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'API request failed'\n }\n }\n}\n\ninterface RawProduct {\n id: number\n name: string\n description?: string\n project_id: number\n active: boolean\n}\n\ninterface RawPrice {\n id: number\n product_id: number\n unit_amount: number\n type: 'recurring' | 'one_time'\n interval?: string\n active: boolean\n}\n\n/**\n * Fetch products by IDs (with prices)\n */\nexport async function fetchProducts(\n config: PaymentClientConfig,\n productIds: string[]\n): Promise<ApiResponse<DigitalProduct[]>> {\n const { baseUrl } = config\n\n try {\n // Fetch products\n const productFilter = productIds.length === 1\n ? { id: productIds[0] }\n : { id: { operator: 'in', value: productIds } }\n\n const productsResult = await fetchAPI<RawProduct[]>(\n config,\n `${baseUrl}/data/products?filter=${encodeURIComponent(JSON.stringify(productFilter))}`\n )\n\n if (!productsResult.success || !productsResult.data || productsResult.data.length === 0) {\n return { success: false, error: productsResult.error || 'No products found' }\n }\n\n const rawProducts = productsResult.data\n\n // Fetch prices for these products\n const numericProductIds = rawProducts.map(p => p.id)\n const priceFilter = {\n product_id: { operator: 'in', value: numericProductIds },\n active: true\n }\n\n const pricesResult = await fetchAPI<RawPrice[]>(\n config,\n `${baseUrl}/data/prices?filter=${encodeURIComponent(JSON.stringify(priceFilter))}&limit=200`\n )\n\n const rawPrices = pricesResult.success ? (pricesResult.data || []) : []\n\n // Create a map of product_id -> price info\n const priceMap = new Map<number, RawPrice>()\n for (const price of rawPrices) {\n if (!priceMap.has(price.product_id)) {\n priceMap.set(price.product_id, price)\n }\n }\n\n // Join products with prices\n const products: DigitalProduct[] = rawProducts.map(product => {\n const price = priceMap.get(product.id)\n return {\n id: String(product.id),\n name: product.name,\n description: product.description,\n price: price ? price.unit_amount / 100 : 0,\n type: price?.type === 'recurring' ? 'subscription' : 'one-time',\n interval: price?.interval as 'month' | 'year' | undefined,\n }\n })\n\n return { success: true, data: products }\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to fetch products'\n }\n }\n}\n\n/**\n * Fetch all products for a project (with prices)\n */\nexport async function fetchAllProducts(\n config: PaymentClientConfig\n): Promise<ApiResponse<DigitalProduct[]>> {\n const { baseUrl, projectId } = config\n\n try {\n // Fetch products\n const productFilter = projectId ? { project_id: projectId, active: true } : { active: true }\n\n const productsResult = await fetchAPI<RawProduct[]>(\n config,\n `${baseUrl}/data/products?filter=${encodeURIComponent(JSON.stringify(productFilter))}&sort=name:asc&limit=100`\n )\n\n if (!productsResult.success || !productsResult.data || productsResult.data.length === 0) {\n return { success: true, data: [] }\n }\n\n const rawProducts = productsResult.data\n\n // Fetch prices for these products\n const numericProductIds = rawProducts.map(p => p.id)\n const priceFilter = {\n product_id: { operator: 'in', value: numericProductIds },\n active: true\n }\n\n const pricesResult = await fetchAPI<RawPrice[]>(\n config,\n `${baseUrl}/data/prices?filter=${encodeURIComponent(JSON.stringify(priceFilter))}&limit=200`\n )\n\n const rawPrices = pricesResult.success ? (pricesResult.data || []) : []\n\n // Create a map of product_id -> price info\n const priceMap = new Map<number, RawPrice>()\n for (const price of rawPrices) {\n if (!priceMap.has(price.product_id)) {\n priceMap.set(price.product_id, price)\n }\n }\n\n // Join products with prices\n const products: DigitalProduct[] = rawProducts.map(product => {\n const price = priceMap.get(product.id)\n return {\n id: String(product.id),\n name: product.name,\n description: product.description,\n price: price ? price.unit_amount / 100 : 0,\n type: price?.type === 'recurring' ? 'subscription' : 'one-time',\n interval: price?.interval as 'month' | 'year' | undefined,\n }\n })\n\n return { success: true, data: products }\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to fetch products'\n }\n }\n}\n\n/**\n * Get customer by user ID\n */\nexport async function getCustomerByUserId(\n config: PaymentClientConfig,\n userId: string\n): Promise<ApiResponse<Customer>> {\n const { baseUrl, projectId } = config\n\n return fetchAPI<Customer>(\n config,\n `${baseUrl}/billing/customers/by-user/${userId}?project_id=${projectId}`\n )\n}\n\n/**\n * Create a new customer\n */\nexport async function createCustomer(\n config: PaymentClientConfig,\n userId: string,\n email: string,\n name?: string\n): Promise<ApiResponse<Customer>> {\n const { baseUrl, projectId } = config\n\n return fetchAPI<Customer>(\n config,\n `${baseUrl}/billing/customers`,\n {\n method: 'POST',\n body: JSON.stringify({\n project_id: projectId,\n user_id: userId,\n organization_id: 1, // Default org\n email,\n name,\n test_mode: true,\n sync_to_stripe: true\n })\n }\n )\n}\n\n/**\n * Get or create customer\n */\nexport async function getOrCreateCustomer(\n config: PaymentClientConfig,\n userId: string,\n email: string,\n name?: string\n): Promise<ApiResponse<Customer>> {\n // Try to get existing customer\n const existingResult = await getCustomerByUserId(config, userId)\n\n if (existingResult.success && existingResult.data) {\n return existingResult\n }\n\n // Create new customer\n return createCustomer(config, userId, email, name)\n}\n\n/**\n * Get payment methods for a customer\n */\nexport async function getPaymentMethods(\n config: PaymentClientConfig,\n customerId: number\n): Promise<ApiResponse<PaymentMethod[]>> {\n const { baseUrl, projectId } = config\n\n return fetchAPI<PaymentMethod[]>(\n config,\n `${baseUrl}/billing/customers/${customerId}/payment-methods?project_id=${projectId}&status=active`\n )\n}\n\n/**\n * Fetch Stripe publishable key\n */\nexport async function fetchPaymentConfig(\n config: PaymentClientConfig\n): Promise<ApiResponse<{ public_key: string; mode: string }>> {\n const { baseUrl, projectId } = config\n\n return fetchAPI<{ public_key: string; mode: string }>(\n config,\n `${baseUrl}/billing/payment-config?project_id=${projectId}&test_mode=true`\n )\n}\n\n/**\n * Process a one-time payment\n */\nexport async function processPayment(\n config: PaymentClientConfig,\n params: {\n customer_id: number\n amount: number\n currency?: string\n payment_method_id?: string\n stripe_payment_method_id?: string\n product_ids: string[]\n description?: string\n }\n): Promise<ApiResponse<{ payment_intent_id: string; status: string }>> {\n const { baseUrl, projectId } = config\n\n return fetchAPI<{ payment_intent_id: string; status: string }>(\n config,\n `${baseUrl}/billing/payments/intents`,\n {\n method: 'POST',\n body: JSON.stringify({\n project_id: projectId,\n ...params,\n confirm: true,\n sync_to_stripe: true,\n test_mode: true\n })\n }\n )\n}\n\n/**\n * Create a subscription for recurring products\n */\nexport async function createSubscription(\n config: PaymentClientConfig,\n params: {\n customer_id: number\n price_id: number\n payment_method_id?: string\n }\n): Promise<ApiResponse<{ subscription_id: number; status: string }>> {\n const { baseUrl, projectId } = config\n\n return fetchAPI<{ subscription_id: number; status: string }>(\n config,\n `${baseUrl}/billing/subscriptions`,\n {\n method: 'POST',\n body: JSON.stringify({\n project_id: projectId,\n ...params,\n sync_to_stripe: true,\n test_mode: true\n })\n }\n )\n}\n\n/**\n * Add a new payment method\n */\nexport async function addPaymentMethod(\n config: PaymentClientConfig,\n customerId: number,\n stripePaymentMethodId: string,\n setAsDefault: boolean = true\n): Promise<ApiResponse<PaymentMethod>> {\n const { baseUrl, projectId } = config\n\n return 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","/**\n * Payment Component\n *\n * A simplified single-page checkout for digital products.\n * Similar to Stripe Checkout - two-column layout with product info on left, form on right.\n * Loads product data from the database by ID.\n * Supports existing payment methods if the customer has them.\n *\n * @example\n * ```tsx\n * import { Payment } from '@omnikit-js/ui'\n *\n * // Single product by ID\n * export default async function BuyPage() {\n * return (\n * <Payment\n * baseUrl={process.env.OMNIKIT_BASE_URL!}\n * apiKey={process.env.OMNIKIT_API_KEY}\n * projectId={1}\n * userId=\"user_123\"\n * productId=\"prod_001\"\n * successUrl=\"/thank-you\"\n * cancelUrl=\"/pricing\"\n * />\n * )\n * }\n *\n * // Multiple products (bundle)\n * export default async function BundlePage() {\n * return (\n * <Payment\n * baseUrl={process.env.OMNIKIT_BASE_URL!}\n * apiKey={process.env.OMNIKIT_API_KEY}\n * projectId={1}\n * userId=\"user_123\"\n * productIds={['prod_001', 'prod_002', 'prod_003']}\n * successUrl=\"/thank-you\"\n * />\n * )\n * }\n * ```\n */\n\nimport { PaymentForm } from '../../client/PaymentForm'\nimport {\n fetchProducts as apiFetchProducts,\n getCustomerByUserId,\n getPaymentMethods,\n fetchPaymentConfig,\n type Customer,\n type PaymentMethod,\n} from './client'\nimport type { PaymentProps, DigitalProduct } from './types'\n\n// Mock products for development\nconst MOCK_PRODUCTS: Record<string, DigitalProduct> = {\n 'prod_pro': {\n id: 'prod_pro',\n name: 'Pro Plan',\n description: 'Unlock all premium features and priority support',\n price: 29.99,\n type: 'subscription',\n interval: 'month',\n image: '/placeholder-product.jpg',\n features: [\n 'Unlimited projects',\n 'Priority support',\n 'Advanced analytics',\n 'Custom integrations',\n 'Team collaboration',\n ],\n },\n 'prod_starter': {\n id: 'prod_starter',\n name: 'Starter Plan',\n description: 'Perfect for getting started',\n price: 9.99,\n type: 'subscription',\n interval: 'month',\n image: '/placeholder-product.jpg',\n features: [\n '5 projects',\n 'Email support',\n 'Basic analytics',\n ],\n },\n 'prod_lifetime': {\n id: 'prod_lifetime',\n name: 'Lifetime Access',\n description: 'One-time payment, forever access',\n price: 299.99,\n type: 'one-time',\n image: '/placeholder-product.jpg',\n features: [\n 'All Pro features',\n 'Lifetime updates',\n 'Priority support forever',\n ],\n },\n}\n\nexport async function Payment({\n // API config\n baseUrl,\n apiKey,\n accessToken,\n projectId,\n userId,\n // Product options\n productId,\n productIds: productIdsProp,\n product: productProp,\n quantity = 1,\n email: _email,\n successUrl = '/success',\n cancelUrl,\n currencySymbol = '$',\n showImage = true,\n showFeatures = true,\n submitText: _submitText,\n showSecurityBadges = true,\n allowPromoCode = true,\n sellerName,\n sellerLogo,\n termsUrl,\n privacyUrl,\n className = '',\n layout = 'two-column',\n}: PaymentProps & { layout?: 'single-column' | 'two-column' }) {\n // Determine which product IDs to fetch\n const productIds = productIdsProp || (productId ? [productId] : [])\n\n // API config for client actions\n const apiConfig = {\n baseUrl,\n apiKey,\n accessToken,\n projectId,\n }\n\n // Fetch products from API or use provided/mock data\n let products: DigitalProduct[] = []\n\n if (productProp) {\n // Use provided product directly\n products = [productProp]\n } else if (productIds.length > 0 && baseUrl) {\n // Fetch from API\n try {\n const result = await apiFetchProducts(apiConfig, productIds)\n if (result.success && result.data) {\n products = result.data\n }\n } catch (error) {\n console.error('Failed to fetch products:', error)\n // Fall back to mock data in development\n products = productIds\n .map(id => MOCK_PRODUCTS[id])\n .filter(Boolean)\n }\n } else if (productIds.length > 0) {\n // No baseUrl, use mock data\n products = productIds\n .map(id => MOCK_PRODUCTS[id])\n .filter(Boolean)\n }\n\n // Fallback to first mock product if nothing found\n if (products.length === 0) {\n products = [MOCK_PRODUCTS['prod_pro']]\n }\n\n // Fetch customer and payment methods if userId is provided\n let customer: Customer | null = null\n let paymentMethods: PaymentMethod[] = []\n let stripePublishableKey: string | null = null\n\n if (baseUrl && projectId) {\n // Fetch Stripe publishable key (needed for guest checkout too)\n const configResult = await fetchPaymentConfig(apiConfig)\n if (configResult.success && configResult.data?.public_key) {\n stripePublishableKey = configResult.data.public_key\n }\n\n // Fetch customer by userId if provided\n if (userId) {\n const customerResult = await getCustomerByUserId(apiConfig, userId)\n if (customerResult.success && customerResult.data) {\n customer = customerResult.data\n\n // Fetch payment methods for this customer\n const pmResult = await getPaymentMethods(apiConfig, customer.id)\n if (pmResult.success && pmResult.data) {\n paymentMethods = pmResult.data\n }\n }\n }\n }\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\n // Product Info Section (used in both layouts)\n const ProductSection = () => (\n <div className=\"space-y-6\">\n {/* Seller Branding */}\n {(sellerLogo || sellerName) && (\n <div className=\"flex items-center gap-3\">\n {sellerLogo && (\n <img\n src={sellerLogo}\n alt={sellerName || 'Seller'}\n className=\"h-8\"\n />\n )}\n {sellerName && (\n <span className=\"text-lg font-medium text-gray-900 dark:text-white\">{sellerName}</span>\n )}\n </div>\n )}\n\n {/* Single Product Display */}\n {!isMultiProduct && (\n <>\n <div>\n {/* Product Image */}\n {showImage && primaryProduct.image && (\n <div className=\"w-full h-48 bg-gray-100 dark:bg-neutral-800 rounded-xl overflow-hidden mb-4\">\n <img\n src={primaryProduct.image}\n alt={primaryProduct.name}\n className=\"w-full h-full object-cover\"\n />\n </div>\n )}\n\n {/* Product Details */}\n <h1 className=\"text-2xl font-bold text-gray-900 dark:text-white\">{primaryProduct.name}</h1>\n {primaryProduct.description && (\n <p className=\"text-gray-600 dark:text-gray-400 mt-1\">{primaryProduct.description}</p>\n )}\n <div className=\"mt-4\">\n <span className=\"text-4xl font-bold text-gray-900 dark:text-white\">\n {currencySymbol}{primaryProduct.price.toFixed(2)}\n </span>\n {primaryProduct.type === 'subscription' && primaryProduct.interval && (\n <span className=\"text-gray-500 dark:text-gray-400 text-lg ml-1\">/{primaryProduct.interval}</span>\n )}\n {quantity > 1 && (\n <span className=\"text-gray-500 dark:text-gray-400 text-sm ml-2\">x {quantity}</span>\n )}\n </div>\n </div>\n\n {/* Features List */}\n {showFeatures && primaryProduct.features && primaryProduct.features.length > 0 && (\n <div className=\"pt-6 border-t border-gray-200 dark:border-neutral-700\">\n <h3 className=\"text-sm font-semibold text-gray-900 dark:text-white mb-3\">What's included</h3>\n <ul className=\"space-y-3\">\n {primaryProduct.features.map((feature, index) => (\n <li key={index} className=\"flex items-start gap-3 text-sm text-gray-600 dark:text-gray-400\">\n <svg className=\"w-5 h-5 text-green-500 flex-shrink-0 mt-0.5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n {feature}\n </li>\n ))}\n </ul>\n </div>\n )}\n </>\n )}\n\n {/* Multiple Products Display */}\n {isMultiProduct && (\n <div className=\"space-y-4\">\n <h2 className=\"text-xl font-bold text-gray-900 dark:text-white\">Order Summary</h2>\n <div className=\"space-y-3\">\n {products.map((product) => (\n <div key={product.id} className=\"flex gap-3 items-start p-3 bg-gray-50 dark:bg-neutral-800 rounded-lg\">\n {/* Product Image */}\n {showImage && product.image && (\n <div className=\"flex-shrink-0 w-12 h-12 bg-gray-200 dark:bg-neutral-700 rounded-lg overflow-hidden\">\n <img\n src={product.image}\n alt={product.name}\n className=\"w-full h-full object-cover\"\n />\n </div>\n )}\n\n {/* Product Info */}\n <div className=\"flex-1 min-w-0\">\n <p className=\"font-medium text-gray-900 dark:text-white\">{product.name}</p>\n {product.description && (\n <p className=\"text-xs text-gray-500 dark:text-gray-400 truncate\">{product.description}</p>\n )}\n </div>\n\n {/* Price */}\n <div className=\"text-right\">\n <p className=\"font-semibold text-gray-900 dark:text-white\">\n {currencySymbol}{product.price.toFixed(2)}\n </p>\n {product.type === 'subscription' && product.interval && (\n <p className=\"text-xs text-gray-500 dark:text-gray-400\">/{product.interval}</p>\n )}\n </div>\n </div>\n ))}\n </div>\n\n {/* Total */}\n <div className=\"pt-4 border-t border-gray-200 dark:border-neutral-700 flex justify-between items-center\">\n <span className=\"text-lg font-semibold text-gray-900 dark:text-white\">Total</span>\n <span className=\"text-2xl font-bold text-gray-900 dark:text-white\">\n {currencySymbol}{total.toFixed(2)}\n </span>\n </div>\n </div>\n )}\n\n {/* Security Notice */}\n {showSecurityBadges && (\n <div className=\"flex items-center gap-2 text-gray-400 dark:text-gray-500 text-sm\">\n <svg className=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 24 24\">\n <path d=\"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z\" />\n </svg>\n <span>Secure payment powered by Stripe</span>\n </div>\n )}\n </div>\n )\n\n // Payment Form Section\n const FormSection = () => (\n <div className=\"bg-white dark:bg-neutral-900 rounded-2xl shadow-xl border border-gray-200 dark:border-neutral-800 p-6 lg:p-8\">\n <h2 className=\"text-xl font-semibold text-gray-900 dark:text-white mb-6\">Payment Details</h2>\n <PaymentForm\n products={products}\n customerId={customer?.id || null}\n paymentMethods={paymentMethods}\n stripePublishableKey={stripePublishableKey}\n actionConfig={apiConfig}\n quantity={quantity}\n currencySymbol={currencySymbol}\n successUrl={successUrl}\n cancelUrl={cancelUrl}\n allowPromoCode={allowPromoCode}\n termsUrl={termsUrl}\n privacyUrl={privacyUrl}\n />\n </div>\n )\n\n // Two-column layout (Stripe-like)\n if (layout === 'two-column') {\n return (\n <div className={`min-h-screen bg-gray-50 dark:bg-neutral-950 ${className}`}>\n <div className=\"max-w-6xl mx-auto px-4 py-8 lg:py-12\">\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-8 lg:gap-16\">\n {/* Left Column - Product Info */}\n <div className=\"lg:sticky lg:top-8 lg:self-start\">\n <ProductSection />\n </div>\n\n {/* Right Column - Payment Form */}\n <div>\n <FormSection />\n\n {/* Footer Links */}\n <div className=\"mt-6 text-center\">\n <a href=\"/\" className=\"text-sm text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300\">\n Return to site\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n }\n\n // Single-column layout (original)\n return (\n <div className={`min-h-screen bg-gray-50 dark:bg-neutral-950 py-8 px-4 ${className}`}>\n <div className=\"max-w-lg mx-auto\">\n <div className=\"bg-white dark:bg-neutral-900 rounded-2xl shadow-xl border border-gray-200 dark:border-neutral-800 overflow-hidden\">\n {/* Product Section */}\n <div className=\"p-6 border-b border-gray-200 dark:border-neutral-700\">\n <ProductSection />\n </div>\n\n {/* Payment Form */}\n <div className=\"p-6 bg-gray-50 dark:bg-neutral-800\">\n <PaymentForm\n products={products}\n customerId={customer?.id || null}\n paymentMethods={paymentMethods}\n stripePublishableKey={stripePublishableKey}\n actionConfig={apiConfig}\n quantity={quantity}\n currencySymbol={currencySymbol}\n successUrl={successUrl}\n cancelUrl={cancelUrl}\n allowPromoCode={allowPromoCode}\n termsUrl={termsUrl}\n privacyUrl={privacyUrl}\n />\n </div>\n </div>\n\n {/* Footer Links */}\n <div className=\"mt-6 text-center\">\n <a href=\"/\" className=\"text-sm text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300\">\n Return to site\n </a>\n </div>\n </div>\n </div>\n )\n}\n\nexport type { PaymentProps, DigitalProduct } from './types'\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/lib/omnikit-client.ts","../src/components/server/DataList/index.tsx","../src/components/server/Billing/client.ts","../src/components/server/Billing/index.tsx","../src/components/server/Cart/index.tsx","../src/components/server/CartSummary/index.tsx","../src/components/server/Checkout/index.tsx","../src/components/server/OrderConfirmation/index.tsx","../src/components/server/Payment/client.ts","../src/components/server/Payment/index.tsx"],"names":["jsxs","Alert","jsx","MOCK_CART","LinkButton","Card","Button","Fragment","createHeaders","fetchAPI"],"mappings":"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","file":"chunk-ZYJBZ7WV.js","sourcesContent":["/**\n * OmniKit API Client\n * Wrapper for making requests to OmniKit serverless platform\n */\n\nimport type {\n QueryOptions,\n QueryResponse,\n SingleRecordResponse,\n MutationResponse,\n OmniKitConfig,\n} from './types'\n\nexport class OmniKitClient {\n private baseUrl: string\n private apiKey?: string\n private jwt?: string\n\n constructor(config: OmniKitConfig) {\n this.baseUrl = config.baseUrl.replace(/\\/$/, '') // Remove trailing slash\n this.apiKey = config.apiKey\n this.jwt = config.jwt\n }\n\n private getHeaders(): HeadersInit {\n const headers: HeadersInit = {\n 'Content-Type': 'application/json',\n }\n\n if (this.jwt) {\n headers['Authorization'] = `Bearer ${this.jwt}`\n } else if (this.apiKey) {\n headers['X-API-Key'] = this.apiKey\n }\n\n return headers\n }\n\n private async request<T>(\n endpoint: string,\n options?: RequestInit\n ): Promise<T> {\n const url = `${this.baseUrl}${endpoint}`\n\n const response = await fetch(url, {\n ...options,\n headers: {\n ...this.getHeaders(),\n ...options?.headers,\n },\n })\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({ error: 'Request failed' }))\n throw new Error(error.error || `HTTP ${response.status}`)\n }\n\n return response.json()\n }\n\n /**\n * Query records from a table\n */\n async query<T = any>(\n table: string,\n options?: QueryOptions\n ): Promise<QueryResponse<T>> {\n const params = new URLSearchParams()\n\n if (options?.filter) {\n params.append('filter', JSON.stringify(options.filter))\n }\n if (options?.sort) {\n params.append('sort', options.sort)\n }\n if (options?.limit) {\n params.append('limit', options.limit.toString())\n }\n if (options?.offset) {\n params.append('offset', options.offset.toString())\n }\n\n const queryString = params.toString()\n const endpoint = `/data/${table}${queryString ? `?${queryString}` : ''}`\n\n return this.request<QueryResponse<T>>(endpoint)\n }\n\n /**\n * Find a record by ID\n */\n async findById<T = any>(\n table: string,\n id: string | number\n ): Promise<SingleRecordResponse<T>> {\n return this.request<SingleRecordResponse<T>>(`/data/${table}/${id}`)\n }\n\n /**\n * Insert a new record\n */\n async insert(\n table: string,\n data: Record<string, any>\n ): Promise<MutationResponse> {\n return this.request<MutationResponse>(`/data/${table}`, {\n method: 'POST',\n body: JSON.stringify(data),\n })\n }\n\n /**\n * Update an existing record\n */\n async update(\n table: string,\n id: string | number,\n data: Record<string, any>\n ): Promise<MutationResponse> {\n return this.request<MutationResponse>(`/data/${table}/${id}`, {\n method: 'PUT',\n body: JSON.stringify(data),\n })\n }\n\n /**\n * Delete a record\n */\n async delete(table: string, id: string | number): Promise<MutationResponse> {\n return this.request<MutationResponse>(`/data/${table}/${id}`, {\n method: 'DELETE',\n })\n }\n\n /**\n * Upsert a record (insert or update)\n */\n async upsert(\n table: string,\n data: Record<string, any>\n ): Promise<MutationResponse> {\n return this.request<MutationResponse>(`/data/${table}`, {\n method: 'PUT',\n body: JSON.stringify(data),\n })\n }\n}\n\n/**\n * Create a new OmniKit client instance\n */\nexport function createOmniKitClient(config: OmniKitConfig): OmniKitClient {\n return new OmniKitClient(config)\n}\n","/**\n * DataList Component\n *\n * A server-side React component that fetches and displays data from OmniKit API.\n * Renders on the server with zero client JavaScript for data fetching.\n * Uses lite-ui Table component for consistent styling.\n *\n * @example\n * ```tsx\n * import { DataList } from '@omnikit-js/ui'\n *\n * export default function UsersPage() {\n * return (\n * <DataList\n * table=\"users\"\n * baseUrl={process.env.OMNIKIT_BASE_URL}\n * apiKey={process.env.OMNIKIT_API_KEY}\n * columns={['name', 'email', 'created_at']}\n * filter={{ active: true }}\n * limit={20}\n * />\n * )\n * }\n * ```\n */\n\nimport { Table, Alert } from '@marcoschwartz/lite-ui'\nimport { createOmniKitClient } from '../../../lib/omnikit-client'\nimport type { DataListProps, Column, ColumnDefinition } from './types'\n\nfunction normalizeColumn<T>(column: Column<T>): ColumnDefinition<T> {\n if (typeof column === 'string') {\n return {\n key: column,\n label: column.charAt(0).toUpperCase() + column.slice(1).replace(/_/g, ' '),\n sortable: true,\n }\n }\n return {\n ...column,\n label: column.label || column.key.charAt(0).toUpperCase() + column.key.slice(1).replace(/_/g, ' '),\n }\n}\n\nexport async function DataList<T extends Record<string, any>>({\n table,\n baseUrl,\n apiKey,\n jwt,\n columns,\n keyField = 'id' as keyof T,\n filter,\n sort,\n limit,\n offset,\n className = '',\n emptyMessage = 'No data found',\n errorMessage = 'Failed to load data',\n}: DataListProps<T>) {\n // Create API client\n const client = createOmniKitClient({ baseUrl, apiKey, jwt })\n\n // Fetch data\n let data: T[] = []\n let error: string | null = null\n\n try {\n const response = await client.query<T>(table, {\n filter,\n sort,\n limit,\n offset,\n })\n\n if (response.success) {\n data = response.data\n } else {\n error = response.error || errorMessage\n }\n } catch (err) {\n error = err instanceof Error ? err.message : errorMessage\n }\n\n // Normalize columns for lite-ui Table format\n const normalizedColumns = columns.map(normalizeColumn)\n\n // Pre-render data with custom render functions (since we can't pass functions to client components)\n const processedData = data.map((row) => {\n const processedRow: Record<string, any> = { ...row }\n normalizedColumns.forEach((col) => {\n if (col.render) {\n const value = col.key.split('.').reduce((obj, k) => obj?.[k], row)\n processedRow[`__rendered_${col.key}`] = col.render(value, row)\n }\n })\n return processedRow\n })\n\n const tableColumns = normalizedColumns.map((col) => ({\n key: col.render ? `__rendered_${col.key}` : col.key,\n title: col.label || col.key,\n }))\n\n // Error state\n if (error) {\n return (\n <Alert variant=\"error\" className={className}>\n <p className=\"font-medium\">Error</p>\n <p className=\"mt-1 text-sm\">{error}</p>\n </Alert>\n )\n }\n\n // Empty state\n if (data.length === 0) {\n return (\n <Alert variant=\"info\" className={className}>\n {emptyMessage}\n </Alert>\n )\n }\n\n // Render table using lite-ui Table component\n return (\n <Table\n columns={tableColumns}\n data={processedData}\n keyField={String(keyField)}\n hoverable\n responsive\n className={className}\n />\n )\n}\n","/**\n * Billing API Client\n *\n * Handles all API calls for the Billing component.\n */\n\nimport type {\n BillingData,\n BillingProps,\n Customer,\n Product,\n Subscription,\n Invoice,\n PaymentMethod,\n ProductFeature\n} from './types';\n\ninterface ApiResponse<T> {\n success: boolean;\n data?: T;\n error?: string;\n}\n\ninterface BillingClientConfig {\n baseUrl: string;\n apiKey?: string;\n accessToken?: string;\n projectId: number;\n}\n\nfunction createHeaders(config: BillingClientConfig): 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: BillingClientConfig,\n url: string,\n options: RequestInit = {}\n): Promise<ApiResponse<T>> {\n try {\n const response = await fetch(url, {\n ...options,\n headers: {\n ...createHeaders(config),\n ...options.headers as Record<string, string>,\n },\n // Prevent infinite re-fetching in Next.js\n cache: 'no-store',\n });\n\n // Check for non-OK responses before parsing\n if (!response.ok) {\n // Try to get error message from JSON, fallback to status text\n try {\n const errorData = await response.json();\n return {\n success: false,\n error: errorData.error || `HTTP ${response.status}: ${response.statusText}`\n };\n } catch {\n return {\n success: false,\n error: `HTTP ${response.status}: ${response.statusText}`\n };\n }\n }\n\n // Check content type to avoid parsing HTML as JSON\n const contentType = response.headers.get('content-type');\n if (!contentType || !contentType.includes('application/json')) {\n return {\n success: false,\n error: 'Invalid response: expected JSON'\n };\n }\n\n const data = await response.json();\n return data;\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'API request failed'\n };\n }\n}\n\n/**\n * Get or create customer for a user\n */\nasync function getOrCreateCustomer(\n config: BillingClientConfig,\n userId: string,\n organizationId: number,\n email: string,\n name?: string,\n testMode: boolean = true\n): Promise<ApiResponse<Customer>> {\n const { baseUrl, projectId } = config;\n\n // Try to get existing customer\n const customerData = await fetchAPI<Customer>(\n config,\n `${baseUrl}/billing/customers/by-user/${userId}?project_id=${projectId}`\n );\n\n if (customerData.success && customerData.data) {\n return customerData;\n }\n\n // Create new customer\n const createData = await fetchAPI<Customer>(\n config,\n `${baseUrl}/billing/customers`,\n {\n method: 'POST',\n body: JSON.stringify({\n project_id: projectId,\n user_id: userId,\n organization_id: organizationId,\n email,\n name,\n test_mode: testMode,\n sync_to_stripe: true\n })\n }\n );\n\n return createData;\n}\n\ninterface UserData {\n id: number;\n uuid?: string;\n email: string;\n full_name?: string;\n display_name?: string;\n organization_id?: number;\n}\n\n/**\n * Fetch user data by user ID\n */\nasync function fetchUserData(\n config: BillingClientConfig,\n userId: string\n): Promise<ApiResponse<UserData>> {\n const { baseUrl } = config;\n\n // Use the data/users endpoint (same as DataList uses)\n return fetchAPI<UserData>(\n config,\n `${baseUrl}/data/users/${userId}`\n );\n}\n\n/**\n * Fetch all billing data for a customer\n */\nexport async function fetchBillingData(\n props: BillingProps\n): Promise<ApiResponse<BillingData>> {\n const {\n baseUrl,\n apiKey,\n accessToken,\n projectId,\n userId,\n organizationId,\n userEmail,\n userName,\n testMode = true\n } = props;\n\n const config: BillingClientConfig = { baseUrl, apiKey, accessToken, projectId };\n\n try {\n // If email not provided, fetch user data first\n let email = userEmail;\n let name = userName;\n let orgId = organizationId;\n\n if (!email) {\n const userResult = await fetchUserData(config, userId);\n if (userResult.success && userResult.data) {\n email = userResult.data.email;\n name = name || userResult.data.full_name || userResult.data.display_name;\n orgId = orgId || userResult.data.organization_id;\n } else {\n return { success: false, error: userResult.error || 'User not found. Please provide userEmail.' };\n }\n }\n\n // 1. Get or create customer\n const finalOrgId = orgId || 1; // Default org if not provided\n const customerResult = await getOrCreateCustomer(\n config,\n userId,\n finalOrgId,\n email,\n name,\n testMode\n );\n\n if (!customerResult.success || !customerResult.data) {\n return { success: false, error: customerResult.error || 'Failed to get customer' };\n }\n\n const customer = customerResult.data;\n const customerId = customer.id;\n\n // 2. Fetch all billing data in parallel\n const [\n subsData,\n productsData,\n pricesData,\n entitlementsData,\n invoicesData,\n pmData,\n usageData\n ] = await Promise.all([\n fetchAPI<Subscription[]>(config, `${baseUrl}/billing/subscriptions?project_id=${projectId}&customer_id=${customerId}&status=active&include_items=true`),\n fetchAPI<Product[]>(config, `${baseUrl}/billing/products?project_id=${projectId}&limit=100&include_prices=false`),\n fetchAPI<any[]>(config, `${baseUrl}/billing/products/prices?project_id=${projectId}&limit=1000`),\n fetchAPI<any[]>(config, `${baseUrl}/billing/entitlements/list-entitlements?project_id=${projectId}&customer_id=${customerId}`),\n fetchAPI<Invoice[]>(config, `${baseUrl}/billing/invoices?project_id=${projectId}&customer_id=${customerId}&limit=10&sort=due_date:desc&include_line_items=true`),\n fetchAPI<PaymentMethod[]>(config, `${baseUrl}/billing/customers/${customerId}/payment-methods?project_id=${projectId}&status=active`),\n fetchAPI<Record<string, any>>(config, `${baseUrl}/billing/usage/get-all?project_id=${projectId}&customer_id=${customerId}`)\n ]);\n\n const currentSubscription = subsData.success && subsData.data && subsData.data.length > 0\n ? subsData.data[0]\n : null;\n const products = productsData.success && productsData.data ? productsData.data : [];\n const allPrices = pricesData.success && pricesData.data ? pricesData.data : [];\n const entitlements = entitlementsData.success && entitlementsData.data ? entitlementsData.data : [];\n const invoices = invoicesData.success && invoicesData.data ? invoicesData.data : [];\n const paymentMethods = pmData.success && pmData.data ? pmData.data : [];\n const featureUsage = usageData.success && usageData.data ? usageData.data : {};\n\n // 3. Group prices by product\n const pricesByProduct: Record<number, any[]> = {};\n allPrices.forEach((price: any) => {\n if (!pricesByProduct[price.product_id]) {\n pricesByProduct[price.product_id] = [];\n }\n pricesByProduct[price.product_id].push(price);\n });\n\n products.forEach((product: Product) => {\n product.prices = pricesByProduct[product.id] || [];\n });\n\n // 4. Fetch product features for all products\n const productFeatures: Record<number, ProductFeature[]> = {};\n await Promise.all(\n products.map(async (product: Product) => {\n const featuresData = await fetchAPI<ProductFeature[]>(\n config,\n `${baseUrl}/billing/features/product/${product.id}?project_id=${projectId}&limit=100`\n );\n productFeatures[product.id] = featuresData.success && featuresData.data ? featuresData.data : [];\n })\n );\n\n const billingData: BillingData = {\n customer,\n currentSubscription,\n products,\n productFeatures,\n entitlements,\n invoices,\n paymentMethods,\n featureUsage\n };\n\n return { success: true, data: billingData };\n } catch (error) {\n console.error('Error fetching billing data:', error);\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to fetch billing data'\n };\n }\n}\n\n/**\n * Fetch payment configuration (Stripe publishable key)\n */\nexport async function fetchPaymentConfig(\n config: BillingClientConfig,\n testMode: boolean = true\n): Promise<ApiResponse<{ publishable_key: string }>> {\n const { baseUrl, projectId } = config;\n\n return fetchAPI(\n config,\n `${baseUrl}/billing/payment-config?project_id=${projectId}&test_mode=${testMode}`\n );\n}\n\n/**\n * Tax calculation result\n */\nexport interface TaxInfo {\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 * Project data\n */\ninterface ProjectData {\n id: number;\n name: string;\n slug?: string;\n description?: string;\n}\n\n/**\n * Fetch project data by ID\n */\nexport async function fetchProject(\n config: BillingClientConfig\n): Promise<ApiResponse<ProjectData>> {\n const { baseUrl, projectId } = config;\n\n return fetchAPI<ProjectData>(\n config,\n `${baseUrl}/data/projects/${projectId}`\n );\n}\n\n/**\n * Fetch tax info for a customer\n * Uses a reference amount (e.g., $100) to get the tax rate\n */\nexport async function fetchTaxInfo(\n config: BillingClientConfig,\n customerId: number,\n referenceAmount: number = 10000 // $100 in cents\n): Promise<ApiResponse<TaxInfo>> {\n const { baseUrl, projectId } = config;\n\n return fetchAPI<TaxInfo>(\n config,\n `${baseUrl}/billing/tax/calculate`,\n {\n method: 'POST',\n body: JSON.stringify({\n project_id: projectId,\n customer_id: customerId,\n amount: referenceAmount,\n product_type: 'digital'\n })\n }\n );\n}\n","/**\n * Billing Component\n *\n * A server-side React component that displays billing information for a SaaS application.\n * Fetches real data from OmniKit Billing API.\n *\n * User email and name are automatically fetched from user data if not provided.\n *\n * @example\n * ```tsx\n * import { Billing } from '@omnikit-js/ui'\n *\n * export default async function BillingPage() {\n * return (\n * <Billing\n * baseUrl={process.env.OMNIKIT_BASE_URL!}\n * apiKey={process.env.OMNIKIT_API_KEY}\n * projectId={1}\n * userId=\"user_123\"\n * />\n * )\n * }\n * ```\n */\n\nimport { Alert } from '@marcoschwartz/lite-ui'\nimport { BillingContent } from '../../client/BillingContent'\nimport { fetchBillingData, fetchTaxInfo, fetchProject, type TaxInfo } from './client'\nimport type { BillingProps } from './types'\n\nexport type { BillingProps } from './types'\nexport type {\n BillingData,\n Customer,\n Subscription,\n Product,\n Price,\n Invoice,\n PaymentMethod,\n Entitlement,\n ProductFeature\n} from './types'\n\nexport async function Billing(props: BillingProps) {\n const {\n className = '',\n errorMessage = 'Failed to load billing information'\n } = props;\n\n // Fetch billing data from API\n const result = await fetchBillingData(props);\n\n // Error state\n if (!result.success || !result.data) {\n return (\n <Alert variant=\"error\" className={className}>\n <p className=\"font-medium\">Error</p>\n <p className=\"mt-1 text-sm\">{result.error || errorMessage}</p>\n </Alert>\n );\n }\n\n const { data } = result;\n\n // Config for API calls\n const apiConfig = {\n baseUrl: props.baseUrl,\n apiKey: props.apiKey,\n accessToken: props.accessToken,\n projectId: props.projectId,\n };\n\n // Fetch tax info for the customer (server-side)\n let initialTaxInfo: TaxInfo | null = null;\n if (data.customer?.id) {\n const taxResult = await fetchTaxInfo(apiConfig, data.customer.id, 10000); // $100 reference\n if (taxResult.success && taxResult.data) {\n initialTaxInfo = taxResult.data;\n }\n }\n\n // Fetch project data for business name (server-side)\n let businessName: string | undefined;\n const projectResult = await fetchProject(apiConfig);\n if (projectResult.success && projectResult.data?.name) {\n businessName = projectResult.data.name;\n }\n\n // Find current plan from subscription (like apteva-app does)\n const currentSubscriptionPriceId = data.currentSubscription?.items?.[0]?.price_id;\n const currentPlan = currentSubscriptionPriceId\n ? data.products.find(p => p.prices?.some(price => price.id === currentSubscriptionPriceId))\n : null;\n const currentPrice = currentPlan?.prices?.find(p => p.id === currentSubscriptionPriceId);\n\n // Transform data for BillingContent\n const subscription = data.currentSubscription ? {\n id: data.currentSubscription.id,\n plan: currentPlan?.name || 'Unknown Plan',\n status: data.currentSubscription.status,\n price: formatCurrency(\n currentPrice?.unit_amount || currentPrice?.amount || 0,\n data.currentSubscription.currency\n ),\n period: currentPrice?.recurring_interval || 'month',\n nextBilling: formatDate(data.currentSubscription.current_period_end),\n cancelAtPeriodEnd: data.currentSubscription.cancel_at_period_end,\n } : null;\n\n const invoices = data.invoices.map(inv => ({\n id: inv.number || inv.uuid,\n date: formatDate(inv.due_date || inv.created_at),\n amount: formatCurrency(inv.total || inv.amount_due, inv.currency),\n status: inv.status,\n url: inv.pdf_url || '#',\n }));\n\n const plans = data.products\n .filter(p => p.active && p.prices && p.prices.length > 0)\n .map(product => {\n const price = product.prices?.find(p => p.active) || product.prices?.[0];\n const features = data.productFeatures[product.id] || [];\n // Check if this product contains the current subscription's price\n const isCurrentPlan = currentSubscriptionPriceId\n ? product.prices?.some(p => p.id === currentSubscriptionPriceId)\n : false;\n\n // Get raw price amount for sorting\n const priceAmount = price?.unit_amount || 0;\n\n return {\n id: product.id,\n priceId: price?.id || 0,\n name: product.name,\n description: product.description,\n price: formatCurrency(priceAmount, price?.currency || 'usd'),\n priceAmount, // Raw amount in cents for sorting\n period: price?.recurring_interval || 'month',\n features: features\n .map(f => {\n // Get feature name and value\n const featureName = f.feature_name || f.feature_key || 'Feature';\n const featureValue = typeof f.value === 'object' && f.value !== null && 'value' in f.value\n ? f.value.value\n : f.value;\n const featureUnit = f.feature_unit || '';\n\n // Boolean true = just show feature name (included)\n if (featureValue === true) {\n return featureName;\n }\n\n // Boolean false = skip this feature\n if (featureValue === false) {\n return null;\n }\n\n // Numeric -1 = Unlimited\n if (typeof featureValue === 'number' && featureValue === -1) {\n return `Unlimited ${featureUnit || featureName.toLowerCase()}`;\n }\n\n // Numeric value with unit\n if (typeof featureValue === 'number') {\n const formattedValue = featureValue.toLocaleString();\n return `${formattedValue} ${featureUnit || featureName.toLowerCase()}`;\n }\n\n // String value\n if (typeof featureValue === 'string' && featureValue) {\n return `${featureName}: ${featureValue}`;\n }\n\n return featureName;\n })\n .filter(Boolean) as string[],\n current: isCurrentPlan || false,\n popular: product.name.toLowerCase().includes('pro') || product.name.toLowerCase().includes('professional'),\n };\n })\n .sort((a, b) => a.priceAmount - b.priceAmount); // Sort by price ascending (cheapest first)\n\n return (\n <BillingContent\n subscription={subscription}\n invoices={invoices}\n paymentMethods={data.paymentMethods}\n plans={plans}\n customer={data.customer}\n entitlements={data.entitlements}\n featureUsage={data.featureUsage}\n actionConfig={apiConfig}\n initialTaxInfo={initialTaxInfo}\n businessName={businessName}\n className={className}\n />\n );\n}\n\n// Helper functions\nfunction formatCurrency(amount: number, currency: string = 'usd'): string {\n const formatter = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: currency.toUpperCase(),\n });\n return formatter.format(amount / 100); // Stripe amounts are in cents\n}\n\nfunction formatDate(dateString: string | undefined): string {\n if (!dateString) return 'N/A';\n const date = new Date(dateString);\n return date.toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n });\n}\n","/**\n * Cart Component\n *\n * A server-side React component that displays a shopping cart.\n * Renders on the server with real cart data for instant page load.\n *\n * @example\n * ```tsx\n * import { Cart } from '@omnikit-js/ui'\n *\n * export default async function CartPage() {\n * return (\n * <Cart\n * baseUrl={process.env.OMNIKIT_BASE_URL!}\n * apiKey={process.env.OMNIKIT_API_KEY}\n * userId=\"123\"\n * checkoutUrl=\"/checkout\"\n * />\n * )\n * }\n * ```\n */\n\nimport { Card, Button } from '@marcoschwartz/lite-ui'\nimport type { CartProps } from './types'\nimport type { Cart as CartType } from '../commerce-types'\n\n// Mock data for development\nconst MOCK_CART: CartType = {\n id: 'cart_001',\n userId: 'user_123',\n items: [\n {\n id: 'item_001',\n product: {\n id: 'prod_001',\n name: 'Wireless Bluetooth Headphones',\n slug: 'wireless-bluetooth-headphones',\n description: 'Premium noise-cancelling headphones',\n price: 149.99,\n compareAtPrice: 199.99,\n images: ['/placeholder-product.jpg'],\n sku: 'WBH-001',\n category: 'Electronics',\n inStock: true,\n stockQuantity: 50,\n },\n quantity: 1,\n price: 149.99,\n },\n {\n id: 'item_002',\n product: {\n id: 'prod_002',\n name: 'USB-C Charging Cable (2-Pack)',\n slug: 'usb-c-charging-cable-2pack',\n description: 'Fast charging braided cables',\n price: 24.99,\n images: ['/placeholder-product.jpg'],\n sku: 'USBC-002',\n category: 'Accessories',\n inStock: true,\n stockQuantity: 200,\n },\n quantity: 2,\n price: 24.99,\n },\n {\n id: 'item_003',\n product: {\n id: 'prod_003',\n name: 'Laptop Stand - Aluminum',\n slug: 'laptop-stand-aluminum',\n description: 'Ergonomic adjustable laptop stand',\n price: 79.99,\n images: ['/placeholder-product.jpg'],\n sku: 'LS-003',\n category: 'Office',\n inStock: true,\n stockQuantity: 30,\n },\n quantity: 1,\n price: 79.99,\n },\n ],\n itemCount: 4,\n subtotal: 279.96,\n tax: 22.40,\n shipping: 0,\n discount: 0,\n total: 302.36,\n currency: 'USD',\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n}\n\n// Button-styled link component\nfunction LinkButton({ href, children, variant = 'primary', size = 'md', className = '' }: {\n href: string\n children: React.ReactNode\n variant?: 'primary' | 'secondary'\n size?: 'sm' | 'md' | 'lg'\n className?: string\n}) {\n const baseStyles = 'inline-flex items-center justify-center font-medium rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2'\n const variantStyles = variant === 'primary'\n ? 'bg-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500'\n : 'bg-gray-100 text-gray-900 hover:bg-gray-200 focus:ring-gray-500 border border-gray-300'\n const sizeStyles = size === 'sm' ? 'px-3 py-1.5 text-sm' : size === 'lg' ? 'px-6 py-3 text-base' : 'px-4 py-2 text-sm'\n\n return (\n <a href={href} className={`${baseStyles} ${variantStyles} ${sizeStyles} ${className}`}>\n {children}\n </a>\n )\n}\n\nexport async function Cart({\n // API config - will be used when connected to real API\n baseUrl: _baseUrl,\n apiKey: _apiKey,\n accessToken: _accessToken,\n projectId: _projectId,\n userId: _userId,\n cartId: _cartId,\n // Display options\n showImages = true,\n showQuantityControls = true,\n showRemoveButton = true,\n continueShoppingUrl = '/products',\n checkoutUrl = '/checkout',\n currencySymbol = '$',\n emptyMessage = 'Your cart is empty',\n emptyActionText = 'Continue Shopping',\n emptyActionUrl = '/products',\n className = '',\n}: CartProps) {\n // TODO: Replace with actual API call\n // const client = createOmniKitClient({ baseUrl, apiKey, jwt: accessToken })\n // const cart = await client.query('carts', { filter: { userId } })\n\n const cart = MOCK_CART\n\n // Empty cart state\n if (!cart || cart.items.length === 0) {\n return (\n <div className={`text-center py-12 ${className}`}>\n <div className=\"mb-6\">\n <svg className=\"mx-auto h-16 w-16 text-gray-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M16 11V7a4 4 0 00-8 0v4M5 9h14l1 12H4L5 9z\" />\n </svg>\n </div>\n <h2 className=\"text-xl font-semibold text-gray-900 mb-2\">{emptyMessage}</h2>\n <p className=\"text-gray-600 mb-6\">Add some items to get started</p>\n <LinkButton href={emptyActionUrl}>\n {emptyActionText}\n </LinkButton>\n </div>\n )\n }\n\n return (\n <div className={`space-y-6 ${className}`}>\n {/* Cart Header */}\n <div className=\"flex items-center justify-between\">\n <h1 className=\"text-2xl font-bold text-gray-900\">\n Shopping Cart ({cart.itemCount} {cart.itemCount === 1 ? 'item' : 'items'})\n </h1>\n {continueShoppingUrl && (\n <a href={continueShoppingUrl} className=\"text-sm text-blue-600 hover:text-blue-800\">\n Continue Shopping\n </a>\n )}\n </div>\n\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n {/* Cart Items */}\n <div className=\"lg:col-span-2 space-y-4\">\n {cart.items.map((item) => (\n <Card key={item.id} className=\"p-4\">\n <div className=\"flex gap-4\">\n {/* Product Image */}\n {showImages && (\n <div className=\"flex-shrink-0 w-24 h-24 bg-gray-100 rounded-lg overflow-hidden\">\n <img\n src={item.product.images[0] || '/placeholder-product.jpg'}\n alt={item.product.name}\n className=\"w-full h-full object-cover\"\n />\n </div>\n )}\n\n {/* Product Details */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex justify-between\">\n <div>\n <h3 className=\"text-base font-medium text-gray-900 truncate\">\n <a href={`/products/${item.product.slug}`} className=\"hover:text-blue-600\">\n {item.product.name}\n </a>\n </h3>\n {item.product.sku && (\n <p className=\"text-sm text-gray-500\">SKU: {item.product.sku}</p>\n )}\n {item.variant && (\n <p className=\"text-sm text-gray-500\">\n {Object.entries(item.variant.attributes)\n .map(([key, value]) => `${key}: ${value}`)\n .join(', ')}\n </p>\n )}\n </div>\n\n {/* Price */}\n <div className=\"text-right\">\n <p className=\"text-base font-semibold text-gray-900\">\n {currencySymbol}{(item.price * item.quantity).toFixed(2)}\n </p>\n {item.quantity > 1 && (\n <p className=\"text-sm text-gray-500\">\n {currencySymbol}{item.price.toFixed(2)} each\n </p>\n )}\n </div>\n </div>\n\n {/* Quantity Controls */}\n <div className=\"mt-3 flex items-center justify-between\">\n {showQuantityControls ? (\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n className=\"w-8 h-8 flex items-center justify-center rounded-md border border-gray-300 bg-white text-gray-600 hover:bg-gray-50\"\n aria-label=\"Decrease quantity\"\n >\n <svg className=\"w-4 h-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M20 12H4\" />\n </svg>\n </button>\n <span className=\"w-12 text-center text-sm font-medium\">{item.quantity}</span>\n <button\n type=\"button\"\n className=\"w-8 h-8 flex items-center justify-center rounded-md border border-gray-300 bg-white text-gray-600 hover:bg-gray-50\"\n aria-label=\"Increase quantity\"\n >\n <svg className=\"w-4 h-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 4v16m8-8H4\" />\n </svg>\n </button>\n </div>\n ) : (\n <span className=\"text-sm text-gray-600\">Qty: {item.quantity}</span>\n )}\n\n {showRemoveButton && (\n <button\n type=\"button\"\n className=\"text-sm text-red-600 hover:text-red-800\"\n >\n Remove\n </button>\n )}\n </div>\n </div>\n </div>\n </Card>\n ))}\n </div>\n\n {/* Order Summary */}\n <div className=\"lg:col-span-1\">\n <Card className=\"p-6 sticky top-4\">\n <h2 className=\"text-lg font-semibold text-gray-900 mb-4\">Order Summary</h2>\n\n <div className=\"space-y-3\">\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Subtotal</span>\n <span className=\"text-gray-900\">{currencySymbol}{cart.subtotal.toFixed(2)}</span>\n </div>\n\n {cart.discount > 0 && (\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Discount</span>\n <span className=\"text-green-600\">-{currencySymbol}{cart.discount.toFixed(2)}</span>\n </div>\n )}\n\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Shipping</span>\n <span className=\"text-gray-900\">\n {cart.shipping === 0 ? 'Free' : `${currencySymbol}${cart.shipping.toFixed(2)}`}\n </span>\n </div>\n\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Tax</span>\n <span className=\"text-gray-900\">{currencySymbol}{cart.tax.toFixed(2)}</span>\n </div>\n\n <div className=\"border-t pt-3 mt-3\">\n <div className=\"flex justify-between\">\n <span className=\"text-base font-semibold text-gray-900\">Total</span>\n <span className=\"text-xl font-bold text-gray-900\">\n {currencySymbol}{cart.total.toFixed(2)}\n </span>\n </div>\n </div>\n </div>\n\n {/* Coupon Code */}\n <div className=\"mt-6\">\n <div className=\"flex gap-2\">\n <input\n type=\"text\"\n placeholder=\"Coupon code\"\n className=\"flex-1 px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:ring-2 focus:ring-blue-500\"\n />\n <Button variant=\"secondary\" size=\"sm\">\n Apply\n </Button>\n </div>\n </div>\n\n {/* Checkout Button */}\n <div className=\"mt-6\">\n <LinkButton href={checkoutUrl} className=\"w-full\" size=\"lg\">\n Proceed to Checkout\n </LinkButton>\n </div>\n\n {/* Trust Badges */}\n <div className=\"mt-6 pt-6 border-t\">\n <div className=\"flex items-center justify-center gap-4 text-gray-400\">\n <svg className=\"w-8 h-8\" fill=\"currentColor\" viewBox=\"0 0 24 24\">\n <path d=\"M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm0 10.99h7c-.53 4.12-3.28 7.79-7 8.94V12H5V6.3l7-3.11v8.8z\" />\n </svg>\n <svg className=\"w-8 h-8\" fill=\"currentColor\" viewBox=\"0 0 24 24\">\n <path d=\"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z\" />\n </svg>\n </div>\n <p className=\"text-xs text-gray-500 text-center mt-2\">\n Secure checkout with SSL encryption\n </p>\n </div>\n </Card>\n </div>\n </div>\n </div>\n )\n}\n","/**\n * CartSummary Component\n *\n * A compact server-side component for displaying cart summary in headers/sidebars.\n * Renders on the server with real cart data.\n *\n * @example\n * ```tsx\n * import { CartSummary } from '@omnikit-js/ui'\n *\n * export default async function Header() {\n * return (\n * <header>\n * <CartSummary\n * baseUrl={process.env.OMNIKIT_BASE_URL!}\n * apiKey={process.env.OMNIKIT_API_KEY}\n * userId=\"123\"\n * variant=\"mini\"\n * />\n * </header>\n * )\n * }\n * ```\n */\n\nimport { Card } from '@marcoschwartz/lite-ui'\nimport type { CartSummaryProps } from './types'\nimport type { Cart } from '../commerce-types'\n\n// Mock data for development\nconst MOCK_CART: Cart = {\n id: 'cart_001',\n userId: 'user_123',\n items: [\n {\n id: 'item_001',\n product: {\n id: 'prod_001',\n name: 'Wireless Bluetooth Headphones',\n slug: 'wireless-bluetooth-headphones',\n price: 149.99,\n images: ['/placeholder-product.jpg'],\n inStock: true,\n },\n quantity: 1,\n price: 149.99,\n },\n {\n id: 'item_002',\n product: {\n id: 'prod_002',\n name: 'USB-C Charging Cable',\n slug: 'usb-c-charging-cable',\n price: 24.99,\n images: ['/placeholder-product.jpg'],\n inStock: true,\n },\n quantity: 2,\n price: 24.99,\n },\n ],\n itemCount: 3,\n subtotal: 199.97,\n tax: 16.00,\n shipping: 0,\n discount: 0,\n total: 215.97,\n currency: 'USD',\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n}\n\n// Button-styled link component\nfunction LinkButton({ href, children, variant = 'primary', size = 'md', className = '' }: {\n href: string\n children: React.ReactNode\n variant?: 'primary' | 'secondary'\n size?: 'sm' | 'md' | 'lg'\n className?: string\n}) {\n const baseStyles = 'inline-flex items-center justify-center font-medium rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2'\n const variantStyles = variant === 'primary'\n ? 'bg-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500'\n : 'bg-gray-100 text-gray-900 hover:bg-gray-200 focus:ring-gray-500 border border-gray-300'\n const sizeStyles = size === 'sm' ? 'px-3 py-1.5 text-sm' : size === 'lg' ? 'px-6 py-3 text-base' : 'px-4 py-2 text-sm'\n\n return (\n <a href={href} className={`${baseStyles} ${variantStyles} ${sizeStyles} ${className}`}>\n {children}\n </a>\n )\n}\n\nexport async function CartSummary({\n // API config - will be used when connected to real API\n baseUrl: _baseUrl,\n apiKey: _apiKey,\n accessToken: _accessToken,\n projectId: _projectId,\n userId: _userId,\n cartId: _cartId,\n // Display options\n variant = 'compact',\n showBadge = true,\n showTotal = true,\n cartUrl = '/cart',\n checkoutUrl = '/checkout',\n currencySymbol = '$',\n className = '',\n}: CartSummaryProps) {\n // TODO: Replace with actual API call\n // const client = createOmniKitClient({ baseUrl, apiKey, jwt: accessToken })\n // const cart = await client.query('carts', { filter: { userId } })\n\n const cart = MOCK_CART\n\n // Mini variant - just icon with badge\n if (variant === 'mini') {\n return (\n <a\n href={cartUrl}\n className={`relative inline-flex items-center justify-center p-2 text-gray-600 hover:text-gray-900 ${className}`}\n >\n <svg className=\"w-6 h-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M16 11V7a4 4 0 00-8 0v4M5 9h14l1 12H4L5 9z\"\n />\n </svg>\n {showBadge && cart.itemCount > 0 && (\n <span className=\"absolute -top-1 -right-1 w-5 h-5 flex items-center justify-center text-xs font-bold text-white bg-blue-600 rounded-full\">\n {cart.itemCount > 99 ? '99+' : cart.itemCount}\n </span>\n )}\n </a>\n )\n }\n\n // Compact variant - icon with count and total\n if (variant === 'compact') {\n return (\n <a\n href={cartUrl}\n className={`inline-flex items-center gap-2 px-3 py-2 text-sm text-gray-600 hover:text-gray-900 rounded-lg hover:bg-gray-100 transition-colors ${className}`}\n >\n <div className=\"relative\">\n <svg className=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M16 11V7a4 4 0 00-8 0v4M5 9h14l1 12H4L5 9z\"\n />\n </svg>\n {showBadge && cart.itemCount > 0 && (\n <span className=\"absolute -top-2 -right-2 w-4 h-4 flex items-center justify-center text-[10px] font-bold text-white bg-blue-600 rounded-full\">\n {cart.itemCount > 9 ? '9+' : cart.itemCount}\n </span>\n )}\n </div>\n {showTotal && cart.total > 0 && (\n <span className=\"font-medium\">\n {currencySymbol}{cart.total.toFixed(2)}\n </span>\n )}\n </a>\n )\n }\n\n // Detailed variant - full dropdown-style summary\n return (\n <Card className={`p-4 w-80 ${className}`}>\n <div className=\"flex items-center justify-between mb-4\">\n <h3 className=\"text-sm font-semibold text-gray-900\">\n Cart ({cart.itemCount} {cart.itemCount === 1 ? 'item' : 'items'})\n </h3>\n <a href={cartUrl} className=\"text-xs text-blue-600 hover:text-blue-800\">\n View All\n </a>\n </div>\n\n {cart.items.length === 0 ? (\n <p className=\"text-sm text-gray-500 text-center py-4\">Your cart is empty</p>\n ) : (\n <>\n {/* Item List (max 3 items) */}\n <div className=\"space-y-3 mb-4\">\n {cart.items.slice(0, 3).map((item) => (\n <div key={item.id} className=\"flex items-center gap-3\">\n <div className=\"w-12 h-12 bg-gray-100 rounded-md overflow-hidden flex-shrink-0\">\n <img\n src={item.product.images[0] || '/placeholder-product.jpg'}\n alt={item.product.name}\n className=\"w-full h-full object-cover\"\n />\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-gray-900 truncate\">\n {item.product.name}\n </p>\n <p className=\"text-xs text-gray-500\">\n Qty: {item.quantity} × {currencySymbol}{item.price.toFixed(2)}\n </p>\n </div>\n <p className=\"text-sm font-medium text-gray-900\">\n {currencySymbol}{(item.price * item.quantity).toFixed(2)}\n </p>\n </div>\n ))}\n </div>\n\n {cart.items.length > 3 && (\n <p className=\"text-xs text-gray-500 text-center mb-4\">\n +{cart.items.length - 3} more {cart.items.length - 3 === 1 ? 'item' : 'items'}\n </p>\n )}\n\n {/* Summary */}\n <div className=\"border-t pt-4 space-y-2\">\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Subtotal</span>\n <span className=\"text-gray-900\">{currencySymbol}{cart.subtotal.toFixed(2)}</span>\n </div>\n {cart.shipping > 0 && (\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Shipping</span>\n <span className=\"text-gray-900\">{currencySymbol}{cart.shipping.toFixed(2)}</span>\n </div>\n )}\n <div className=\"flex justify-between text-sm font-semibold\">\n <span className=\"text-gray-900\">Total</span>\n <span className=\"text-gray-900\">{currencySymbol}{cart.total.toFixed(2)}</span>\n </div>\n </div>\n\n {/* Actions */}\n <div className=\"mt-4 space-y-2\">\n <LinkButton href={checkoutUrl} className=\"w-full\" size=\"sm\">\n Checkout\n </LinkButton>\n <LinkButton href={cartUrl} variant=\"secondary\" className=\"w-full\" size=\"sm\">\n View Cart\n </LinkButton>\n </div>\n </>\n )}\n </Card>\n )\n}\n","/**\n * Checkout Component\n *\n * A server-side React component for multi-step checkout.\n * Renders on the server with cart data and saved addresses.\n *\n * @example\n * ```tsx\n * import { Checkout } from '@omnikit-js/ui'\n *\n * export default async function CheckoutPage() {\n * return (\n * <Checkout\n * baseUrl={process.env.OMNIKIT_BASE_URL!}\n * apiKey={process.env.OMNIKIT_API_KEY}\n * userId=\"123\"\n * successUrl=\"/order-confirmation\"\n * />\n * )\n * }\n * ```\n */\n\nimport { Card, Button, Alert } from '@marcoschwartz/lite-ui'\nimport type { CheckoutProps } from './types'\nimport type { Cart, Address, ShippingMethod, CheckoutStep } from '../commerce-types'\n\n// Mock data for development\nconst MOCK_CART: Cart = {\n id: 'cart_001',\n userId: 'user_123',\n items: [\n {\n id: 'item_001',\n product: {\n id: 'prod_001',\n name: 'Wireless Bluetooth Headphones',\n slug: 'wireless-bluetooth-headphones',\n price: 149.99,\n images: ['/placeholder-product.jpg'],\n inStock: true,\n },\n quantity: 1,\n price: 149.99,\n },\n {\n id: 'item_002',\n product: {\n id: 'prod_002',\n name: 'USB-C Charging Cable (2-Pack)',\n slug: 'usb-c-charging-cable',\n price: 24.99,\n images: ['/placeholder-product.jpg'],\n inStock: true,\n },\n quantity: 2,\n price: 24.99,\n },\n ],\n itemCount: 3,\n subtotal: 199.97,\n tax: 16.00,\n shipping: 9.99,\n discount: 0,\n total: 225.96,\n currency: 'USD',\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n}\n\nconst MOCK_ADDRESSES: Address[] = [\n {\n id: 'addr_001',\n firstName: 'John',\n lastName: 'Doe',\n address1: '123 Main Street',\n address2: 'Apt 4B',\n city: 'New York',\n state: 'NY',\n postalCode: '10001',\n country: 'US',\n phone: '+1 (555) 123-4567',\n isDefault: true,\n },\n]\n\nconst MOCK_SHIPPING_METHODS: ShippingMethod[] = [\n {\n id: 'ship_001',\n name: 'Standard Shipping',\n description: 'Delivered in 5-7 business days',\n price: 9.99,\n estimatedDays: '5-7 business days',\n carrier: 'USPS',\n },\n {\n id: 'ship_002',\n name: 'Express Shipping',\n description: 'Delivered in 2-3 business days',\n price: 19.99,\n estimatedDays: '2-3 business days',\n carrier: 'FedEx',\n },\n {\n id: 'ship_003',\n name: 'Next Day Delivery',\n description: 'Delivered by tomorrow',\n price: 34.99,\n estimatedDays: '1 business day',\n carrier: 'UPS',\n },\n]\n\nconst DEFAULT_COUNTRIES = [\n { code: 'US', name: 'United States' },\n { code: 'CA', name: 'Canada' },\n { code: 'GB', name: 'United Kingdom' },\n { code: 'DE', name: 'Germany' },\n { code: 'FR', name: 'France' },\n { code: 'AU', name: 'Australia' },\n]\n\nconst CHECKOUT_STEPS: CheckoutStep[] = [\n { id: 'shipping', title: 'Shipping', description: 'Enter your address', completed: false, active: true },\n { id: 'delivery', title: 'Delivery', description: 'Choose shipping method', completed: false, active: false },\n { id: 'payment', title: 'Payment', description: 'Enter payment details', completed: false, active: false },\n { id: 'review', title: 'Review', description: 'Confirm your order', completed: false, active: false },\n]\n\n// Button-styled link component\nfunction LinkButton({ href, children, variant = 'primary', size = 'md', className = '' }: {\n href: string\n children: React.ReactNode\n variant?: 'primary' | 'secondary'\n size?: 'sm' | 'md' | 'lg'\n className?: string\n}) {\n const baseStyles = 'inline-flex items-center justify-center font-medium rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2'\n const variantStyles = variant === 'primary'\n ? 'bg-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500'\n : 'bg-gray-100 text-gray-900 hover:bg-gray-200 focus:ring-gray-500 border border-gray-300'\n const sizeStyles = size === 'sm' ? 'px-3 py-1.5 text-sm' : size === 'lg' ? 'px-6 py-3 text-base' : 'px-4 py-2 text-sm'\n\n return (\n <a href={href} className={`${baseStyles} ${variantStyles} ${sizeStyles} ${className}`}>\n {children}\n </a>\n )\n}\n\nexport async function Checkout({\n // API config - will be used when connected to real API\n baseUrl: _baseUrl,\n apiKey: _apiKey,\n accessToken: _accessToken,\n projectId: _projectId,\n userId: _userId,\n cartId: _cartId,\n // Display options\n step = 1,\n showOrderSummary = true,\n showStepIndicator = true,\n successUrl: _successUrl = '/order-confirmation',\n cancelUrl = '/cart',\n currencySymbol = '$',\n shippingMethods,\n savedAddresses,\n allowGuestCheckout: _allowGuestCheckout = true,\n requirePhone = false,\n countries = DEFAULT_COUNTRIES,\n className = '',\n}: CheckoutProps) {\n // TODO: Replace with actual API calls\n const cart = MOCK_CART\n const addresses = savedAddresses || MOCK_ADDRESSES\n const shipping = shippingMethods || MOCK_SHIPPING_METHODS\n\n // Update steps based on current step\n const steps = CHECKOUT_STEPS.map((s, i) => ({\n ...s,\n completed: i < step - 1,\n active: i === step - 1,\n }))\n\n // Empty cart check\n if (!cart || cart.items.length === 0) {\n return (\n <Alert variant=\"warning\" className={className}>\n <p className=\"font-medium\">Your cart is empty</p>\n <p className=\"mt-1 text-sm\">Add some items before checking out.</p>\n <LinkButton href={cancelUrl} variant=\"secondary\" size=\"sm\" className=\"mt-3\">\n Return to Cart\n </LinkButton>\n </Alert>\n )\n }\n\n return (\n <div className={`space-y-6 ${className}`}>\n {/* Step Indicator */}\n {showStepIndicator && (\n <nav aria-label=\"Checkout progress\" className=\"mb-8\">\n <ol className=\"flex items-center justify-between\">\n {steps.map((s, index) => (\n <li key={s.id} className=\"flex items-center\">\n <div className=\"flex items-center\">\n <span\n className={`\n flex items-center justify-center w-10 h-10 rounded-full text-sm font-semibold\n ${s.completed\n ? 'bg-green-500 text-white'\n : s.active\n ? 'bg-blue-600 text-white'\n : 'bg-gray-200 text-gray-500'\n }\n `}\n >\n {s.completed ? (\n <svg className=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n ) : (\n index + 1\n )}\n </span>\n <div className=\"ml-3 hidden sm:block\">\n <p className={`text-sm font-medium ${s.active ? 'text-blue-600' : 'text-gray-900'}`}>\n {s.title}\n </p>\n <p className=\"text-xs text-gray-500\">{s.description}</p>\n </div>\n </div>\n {index < steps.length - 1 && (\n <div className={`w-12 sm:w-24 h-0.5 mx-2 sm:mx-4 ${s.completed ? 'bg-green-500' : 'bg-gray-200'}`} />\n )}\n </li>\n ))}\n </ol>\n </nav>\n )}\n\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-8\">\n {/* Main Content */}\n <div className=\"lg:col-span-2\">\n {/* Step 1: Shipping Address */}\n {step === 1 && (\n <Card className=\"p-6\">\n <h2 className=\"text-xl font-semibold text-gray-900 mb-6\">Shipping Address</h2>\n\n {/* Saved Addresses */}\n {addresses.length > 0 && (\n <div className=\"mb-6\">\n <h3 className=\"text-sm font-medium text-gray-700 mb-3\">Saved Addresses</h3>\n <div className=\"space-y-3\">\n {addresses.map((addr) => (\n <label\n key={addr.id}\n className=\"flex items-start gap-3 p-4 border rounded-lg cursor-pointer hover:border-blue-500 transition-colors\"\n >\n <input\n type=\"radio\"\n name=\"address\"\n value={addr.id}\n defaultChecked={addr.isDefault}\n className=\"mt-1\"\n />\n <div>\n <p className=\"font-medium text-gray-900\">\n {addr.firstName} {addr.lastName}\n </p>\n <p className=\"text-sm text-gray-600\">\n {addr.address1}\n {addr.address2 && `, ${addr.address2}`}\n </p>\n <p className=\"text-sm text-gray-600\">\n {addr.city}, {addr.state} {addr.postalCode}\n </p>\n {addr.phone && <p className=\"text-sm text-gray-500\">{addr.phone}</p>}\n </div>\n </label>\n ))}\n </div>\n </div>\n )}\n\n {/* New Address Form */}\n <div>\n <h3 className=\"text-sm font-medium text-gray-700 mb-3\">\n {addresses.length > 0 ? 'Or enter a new address' : 'Enter your address'}\n </h3>\n <form className=\"space-y-4\">\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">First Name</label>\n <input\n type=\"text\"\n className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder=\"John\"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">Last Name</label>\n <input\n type=\"text\"\n className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder=\"Doe\"\n />\n </div>\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">Address</label>\n <input\n type=\"text\"\n className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder=\"123 Main Street\"\n />\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n Apartment, suite, etc. (optional)\n </label>\n <input\n type=\"text\"\n className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder=\"Apt 4B\"\n />\n </div>\n\n <div className=\"grid grid-cols-2 sm:grid-cols-3 gap-4\">\n <div className=\"col-span-2 sm:col-span-1\">\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">City</label>\n <input\n type=\"text\"\n className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder=\"New York\"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">State</label>\n <input\n type=\"text\"\n className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder=\"NY\"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">ZIP Code</label>\n <input\n type=\"text\"\n className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder=\"10001\"\n />\n </div>\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">Country</label>\n <select className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\">\n {countries.map((c) => (\n <option key={c.code} value={c.code}>\n {c.name}\n </option>\n ))}\n </select>\n </div>\n\n {requirePhone && (\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">Phone Number</label>\n <input\n type=\"tel\"\n className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder=\"+1 (555) 123-4567\"\n />\n </div>\n )}\n </form>\n </div>\n\n <div className=\"mt-6 flex justify-between\">\n <LinkButton href={cancelUrl} variant=\"secondary\">\n Back to Cart\n </LinkButton>\n <Button>Continue to Delivery</Button>\n </div>\n </Card>\n )}\n\n {/* Step 2: Delivery Method */}\n {step === 2 && (\n <Card className=\"p-6\">\n <h2 className=\"text-xl font-semibold text-gray-900 mb-6\">Delivery Method</h2>\n\n <div className=\"space-y-3\">\n {shipping.map((method, index) => (\n <label\n key={method.id}\n className=\"flex items-center justify-between p-4 border rounded-lg cursor-pointer hover:border-blue-500 transition-colors\"\n >\n <div className=\"flex items-center gap-3\">\n <input\n type=\"radio\"\n name=\"shipping\"\n value={method.id}\n defaultChecked={index === 0}\n />\n <div>\n <p className=\"font-medium text-gray-900\">{method.name}</p>\n <p className=\"text-sm text-gray-600\">{method.description}</p>\n {method.carrier && (\n <p className=\"text-xs text-gray-500\">via {method.carrier}</p>\n )}\n </div>\n </div>\n <p className=\"text-lg font-semibold text-gray-900\">\n {method.price === 0 ? 'Free' : `${currencySymbol}${method.price.toFixed(2)}`}\n </p>\n </label>\n ))}\n </div>\n\n <div className=\"mt-6 flex justify-between\">\n <Button variant=\"secondary\">Back</Button>\n <Button>Continue to Payment</Button>\n </div>\n </Card>\n )}\n\n {/* Step 3: Payment */}\n {step === 3 && (\n <Card className=\"p-6\">\n <h2 className=\"text-xl font-semibold text-gray-900 mb-6\">Payment Method</h2>\n\n <form className=\"space-y-6\">\n {/* Payment Type Selection */}\n <div className=\"space-y-3\">\n <label className=\"flex items-center gap-3 p-4 border rounded-lg cursor-pointer hover:border-blue-500 border-blue-500 bg-blue-50\">\n <input type=\"radio\" name=\"payment_type\" value=\"card\" defaultChecked />\n <div className=\"flex items-center gap-2\">\n <svg className=\"w-8 h-8 text-gray-600\" fill=\"currentColor\" viewBox=\"0 0 24 24\">\n <path d=\"M20 4H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V6c0-1.11-.89-2-2-2zm0 14H4v-6h16v6zm0-10H4V6h16v2z\" />\n </svg>\n <span className=\"font-medium\">Credit / Debit Card</span>\n </div>\n </label>\n <label className=\"flex items-center gap-3 p-4 border rounded-lg cursor-pointer hover:border-blue-500\">\n <input type=\"radio\" name=\"payment_type\" value=\"paypal\" />\n <div className=\"flex items-center gap-2\">\n <svg className=\"w-8 h-8\" viewBox=\"0 0 24 24\" fill=\"#003087\">\n <path d=\"M7.076 21.337H2.47a.641.641 0 0 1-.633-.74L4.944.901C5.026.382 5.474 0 5.998 0h7.46c2.57 0 4.578.543 5.69 1.81 1.01 1.15 1.304 2.42 1.012 4.287-.023.143-.047.288-.077.437-.983 5.05-4.349 6.797-8.647 6.797h-2.19c-.524 0-.968.382-1.05.9l-1.12 7.106z\" />\n </svg>\n <span className=\"font-medium\">PayPal</span>\n </div>\n </label>\n </div>\n\n {/* Card Details */}\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">Card Number</label>\n <input\n type=\"text\"\n className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder=\"1234 5678 9012 3456\"\n />\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">Name on Card</label>\n <input\n type=\"text\"\n className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder=\"John Doe\"\n />\n </div>\n\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">Expiry Date</label>\n <input\n type=\"text\"\n className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder=\"MM/YY\"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">CVC</label>\n <input\n type=\"text\"\n className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder=\"123\"\n />\n </div>\n </div>\n </div>\n\n {/* Billing Address */}\n <div>\n <label className=\"flex items-center gap-2\">\n <input type=\"checkbox\" defaultChecked />\n <span className=\"text-sm text-gray-700\">Billing address same as shipping</span>\n </label>\n </div>\n </form>\n\n <div className=\"mt-6 flex justify-between\">\n <Button variant=\"secondary\">Back</Button>\n <Button>Review Order</Button>\n </div>\n </Card>\n )}\n\n {/* Step 4: Review */}\n {step === 4 && (\n <Card className=\"p-6\">\n <h2 className=\"text-xl font-semibold text-gray-900 mb-6\">Review Your Order</h2>\n\n {/* Shipping Info */}\n <div className=\"mb-6 p-4 bg-gray-50 rounded-lg\">\n <div className=\"flex justify-between items-start mb-2\">\n <h3 className=\"text-sm font-medium text-gray-900\">Shipping Address</h3>\n <button className=\"text-sm text-blue-600 hover:text-blue-800\">Edit</button>\n </div>\n <p className=\"text-sm text-gray-600\">\n John Doe<br />\n 123 Main Street, Apt 4B<br />\n New York, NY 10001<br />\n United States\n </p>\n </div>\n\n {/* Delivery Info */}\n <div className=\"mb-6 p-4 bg-gray-50 rounded-lg\">\n <div className=\"flex justify-between items-start mb-2\">\n <h3 className=\"text-sm font-medium text-gray-900\">Delivery Method</h3>\n <button className=\"text-sm text-blue-600 hover:text-blue-800\">Edit</button>\n </div>\n <p className=\"text-sm text-gray-600\">\n Standard Shipping - {currencySymbol}9.99<br />\n Estimated delivery: 5-7 business days\n </p>\n </div>\n\n {/* Payment Info */}\n <div className=\"mb-6 p-4 bg-gray-50 rounded-lg\">\n <div className=\"flex justify-between items-start mb-2\">\n <h3 className=\"text-sm font-medium text-gray-900\">Payment Method</h3>\n <button className=\"text-sm text-blue-600 hover:text-blue-800\">Edit</button>\n </div>\n <p className=\"text-sm text-gray-600\">\n Credit Card ending in 3456<br />\n Expires 12/25\n </p>\n </div>\n\n {/* Order Items */}\n <div className=\"mb-6\">\n <h3 className=\"text-sm font-medium text-gray-900 mb-3\">Order Items</h3>\n <div className=\"space-y-3\">\n {cart.items.map((item) => (\n <div key={item.id} className=\"flex items-center gap-4 py-3 border-b last:border-0\">\n <div className=\"w-16 h-16 bg-gray-100 rounded-md overflow-hidden\">\n <img\n src={item.product.images[0] || '/placeholder-product.jpg'}\n alt={item.product.name}\n className=\"w-full h-full object-cover\"\n />\n </div>\n <div className=\"flex-1\">\n <p className=\"font-medium text-gray-900\">{item.product.name}</p>\n <p className=\"text-sm text-gray-500\">Qty: {item.quantity}</p>\n </div>\n <p className=\"font-medium text-gray-900\">\n {currencySymbol}{(item.price * item.quantity).toFixed(2)}\n </p>\n </div>\n ))}\n </div>\n </div>\n\n {/* Terms */}\n <div className=\"mb-6\">\n <label className=\"flex items-start gap-2\">\n <input type=\"checkbox\" className=\"mt-1\" />\n <span className=\"text-sm text-gray-600\">\n I agree to the{' '}\n <a href=\"/terms\" className=\"text-blue-600 hover:text-blue-800\">Terms of Service</a>\n {' '}and{' '}\n <a href=\"/privacy\" className=\"text-blue-600 hover:text-blue-800\">Privacy Policy</a>\n </span>\n </label>\n </div>\n\n <div className=\"flex justify-between\">\n <Button variant=\"secondary\">Back</Button>\n <Button size=\"lg\">\n Place Order - {currencySymbol}{cart.total.toFixed(2)}\n </Button>\n </div>\n </Card>\n )}\n </div>\n\n {/* Order Summary Sidebar */}\n {showOrderSummary && (\n <div className=\"lg:col-span-1\">\n <Card className=\"p-6 sticky top-4\">\n <h2 className=\"text-lg font-semibold text-gray-900 mb-4\">Order Summary</h2>\n\n {/* Items Preview */}\n <div className=\"space-y-3 mb-4\">\n {cart.items.map((item) => (\n <div key={item.id} className=\"flex items-center gap-3\">\n <div className=\"relative w-12 h-12 bg-gray-100 rounded-md overflow-hidden flex-shrink-0\">\n <img\n src={item.product.images[0] || '/placeholder-product.jpg'}\n alt={item.product.name}\n className=\"w-full h-full object-cover\"\n />\n <span className=\"absolute -top-1 -right-1 w-5 h-5 flex items-center justify-center text-xs font-bold text-white bg-gray-600 rounded-full\">\n {item.quantity}\n </span>\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-gray-900 truncate\">\n {item.product.name}\n </p>\n </div>\n <p className=\"text-sm font-medium text-gray-900\">\n {currencySymbol}{(item.price * item.quantity).toFixed(2)}\n </p>\n </div>\n ))}\n </div>\n\n {/* Totals */}\n <div className=\"border-t pt-4 space-y-2\">\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Subtotal</span>\n <span className=\"text-gray-900\">{currencySymbol}{cart.subtotal.toFixed(2)}</span>\n </div>\n {cart.discount > 0 && (\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Discount</span>\n <span className=\"text-green-600\">-{currencySymbol}{cart.discount.toFixed(2)}</span>\n </div>\n )}\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Shipping</span>\n <span className=\"text-gray-900\">\n {cart.shipping === 0 ? 'Free' : `${currencySymbol}${cart.shipping.toFixed(2)}`}\n </span>\n </div>\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Tax</span>\n <span className=\"text-gray-900\">{currencySymbol}{cart.tax.toFixed(2)}</span>\n </div>\n <div className=\"border-t pt-3 mt-3\">\n <div className=\"flex justify-between\">\n <span className=\"text-base font-semibold text-gray-900\">Total</span>\n <span className=\"text-xl font-bold text-gray-900\">\n {currencySymbol}{cart.total.toFixed(2)}\n </span>\n </div>\n </div>\n </div>\n </Card>\n </div>\n )}\n </div>\n </div>\n )\n}\n","/**\n * OrderConfirmation Component\n *\n * A server-side React component for displaying order confirmation.\n * Renders on the server with complete order details.\n *\n * @example\n * ```tsx\n * import { OrderConfirmation } from '@omnikit-js/ui'\n *\n * export default async function OrderConfirmationPage({ params }) {\n * return (\n * <OrderConfirmation\n * baseUrl={process.env.OMNIKIT_BASE_URL!}\n * apiKey={process.env.OMNIKIT_API_KEY}\n * orderId={params.orderId}\n * />\n * )\n * }\n * ```\n */\n\nimport { Card, Alert } from '@marcoschwartz/lite-ui'\nimport type { OrderConfirmationProps } from './types'\nimport type { Order } from '../commerce-types'\n\n// Mock data for development\nconst MOCK_ORDER: Order = {\n id: 'ord_001',\n orderNumber: 'ORD-2024-001234',\n userId: 'user_123',\n email: 'john.doe@example.com',\n status: 'processing',\n items: [\n {\n id: 'item_001',\n product: {\n id: 'prod_001',\n name: 'Wireless Bluetooth Headphones',\n slug: 'wireless-bluetooth-headphones',\n price: 149.99,\n images: ['/placeholder-product.jpg'],\n inStock: true,\n },\n quantity: 1,\n price: 149.99,\n },\n {\n id: 'item_002',\n product: {\n id: 'prod_002',\n name: 'USB-C Charging Cable (2-Pack)',\n slug: 'usb-c-charging-cable',\n price: 24.99,\n images: ['/placeholder-product.jpg'],\n inStock: true,\n },\n quantity: 2,\n price: 24.99,\n },\n ],\n subtotal: 199.97,\n tax: 16.00,\n shipping: 9.99,\n discount: 0,\n total: 225.96,\n currency: 'USD',\n shippingAddress: {\n firstName: 'John',\n lastName: 'Doe',\n address1: '123 Main Street',\n address2: 'Apt 4B',\n city: 'New York',\n state: 'NY',\n postalCode: '10001',\n country: 'US',\n phone: '+1 (555) 123-4567',\n },\n billingAddress: {\n firstName: 'John',\n lastName: 'Doe',\n address1: '123 Main Street',\n address2: 'Apt 4B',\n city: 'New York',\n state: 'NY',\n postalCode: '10001',\n country: 'US',\n },\n shippingMethod: {\n id: 'ship_001',\n name: 'Standard Shipping',\n description: 'Delivered in 5-7 business days',\n price: 9.99,\n estimatedDays: '5-7 business days',\n carrier: 'USPS',\n },\n paymentMethod: {\n type: 'card',\n last4: '3456',\n brand: 'Visa',\n expiryMonth: 12,\n expiryYear: 2025,\n },\n trackingNumber: '9400111899223456789012',\n trackingUrl: 'https://tools.usps.com/go/TrackConfirmAction?tLabels=9400111899223456789012',\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n}\n\nconst STATUS_CONFIG: Record<Order['status'], { label: string; color: string }> = {\n pending: { label: 'Pending', color: 'text-yellow-600 bg-yellow-100' },\n processing: { label: 'Processing', color: 'text-blue-600 bg-blue-100' },\n shipped: { label: 'Shipped', color: 'text-purple-600 bg-purple-100' },\n delivered: { label: 'Delivered', color: 'text-green-600 bg-green-100' },\n cancelled: { label: 'Cancelled', color: 'text-red-600 bg-red-100' },\n refunded: { label: 'Refunded', color: 'text-gray-600 bg-gray-100' },\n}\n\n// Button-styled link component\nfunction LinkButton({ href, children, variant = 'primary', size = 'md', className = '', target, rel }: {\n href: string\n children: React.ReactNode\n variant?: 'primary' | 'secondary'\n size?: 'sm' | 'md' | 'lg'\n className?: string\n target?: string\n rel?: string\n}) {\n const baseStyles = 'inline-flex items-center justify-center font-medium rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2'\n const variantStyles = variant === 'primary'\n ? 'bg-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500'\n : 'bg-gray-100 text-gray-900 hover:bg-gray-200 focus:ring-gray-500 border border-gray-300'\n const sizeStyles = size === 'sm' ? 'px-3 py-1.5 text-sm' : size === 'lg' ? 'px-6 py-3 text-base' : 'px-4 py-2 text-sm'\n\n return (\n <a href={href} className={`${baseStyles} ${variantStyles} ${sizeStyles} ${className}`} target={target} rel={rel}>\n {children}\n </a>\n )\n}\n\nexport async function OrderConfirmation({\n // API config - will be used when connected to real API\n baseUrl: _baseUrl,\n apiKey: _apiKey,\n accessToken: _accessToken,\n projectId: _projectId,\n // Required props\n orderId,\n // Display options\n showItems = true,\n showShippingAddress = true,\n showBillingAddress = false,\n showPaymentMethod = true,\n showTimeline = true,\n continueShoppingUrl = '/products',\n trackOrderUrl,\n currencySymbol = '$',\n className = '',\n}: OrderConfirmationProps) {\n // TODO: Replace with actual API call\n // const client = createOmniKitClient({ baseUrl, apiKey, jwt: accessToken })\n // const order = await client.findById('orders', orderId)\n\n const order = MOCK_ORDER\n\n // Order not found\n if (!order) {\n return (\n <Alert variant=\"error\" className={className}>\n <p className=\"font-medium\">Order not found</p>\n <p className=\"mt-1 text-sm\">We couldn't find an order with ID: {orderId}</p>\n <LinkButton href={continueShoppingUrl} variant=\"secondary\" size=\"sm\" className=\"mt-3\">\n Continue Shopping\n </LinkButton>\n </Alert>\n )\n }\n\n const statusConfig = STATUS_CONFIG[order.status]\n\n return (\n <div className={`max-w-3xl mx-auto space-y-8 ${className}`}>\n {/* Success Header */}\n <div className=\"text-center\">\n <div className=\"mx-auto w-16 h-16 bg-green-100 rounded-full flex items-center justify-center mb-4\">\n <svg className=\"w-8 h-8 text-green-600\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n </div>\n <h1 className=\"text-2xl font-bold text-gray-900 mb-2\">Thank you for your order!</h1>\n <p className=\"text-gray-600\">\n Your order <span className=\"font-semibold\">{order.orderNumber}</span> has been placed successfully.\n </p>\n <p className=\"text-sm text-gray-500 mt-1\">\n A confirmation email has been sent to <span className=\"font-medium\">{order.email}</span>\n </p>\n </div>\n\n {/* Order Status */}\n <Card className=\"p-6\">\n <div className=\"flex items-center justify-between mb-6\">\n <div>\n <h2 className=\"text-lg font-semibold text-gray-900\">Order Status</h2>\n <p className=\"text-sm text-gray-500\">Order #{order.orderNumber}</p>\n </div>\n <span className={`px-3 py-1 text-sm font-medium rounded-full ${statusConfig.color}`}>\n {statusConfig.label}\n </span>\n </div>\n\n {/* Timeline */}\n {showTimeline && (\n <div className=\"relative\">\n <div className=\"flex justify-between\">\n {['Order Placed', 'Processing', 'Shipped', 'Delivered'].map((step, index) => {\n const isCompleted = index <= ['pending', 'processing', 'shipped', 'delivered'].indexOf(order.status)\n const isCurrent = index === ['pending', 'processing', 'shipped', 'delivered'].indexOf(order.status)\n\n return (\n <div key={step} className=\"flex flex-col items-center flex-1\">\n <div\n className={`\n w-10 h-10 rounded-full flex items-center justify-center z-10\n ${isCompleted ? 'bg-green-500 text-white' : 'bg-gray-200 text-gray-500'}\n ${isCurrent ? 'ring-4 ring-green-100' : ''}\n `}\n >\n {isCompleted ? (\n <svg className=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n ) : (\n <span className=\"text-sm font-medium\">{index + 1}</span>\n )}\n </div>\n <p className={`mt-2 text-xs font-medium ${isCompleted ? 'text-green-600' : 'text-gray-500'}`}>\n {step}\n </p>\n </div>\n )\n })}\n </div>\n <div className=\"absolute top-5 left-0 right-0 h-0.5 bg-gray-200 -z-0\">\n <div\n className=\"h-full bg-green-500 transition-all\"\n style={{\n width: `${(['pending', 'processing', 'shipped', 'delivered'].indexOf(order.status) / 3) * 100}%`,\n }}\n />\n </div>\n </div>\n )}\n\n {/* Tracking */}\n {order.trackingNumber && (\n <div className=\"mt-6 p-4 bg-gray-50 rounded-lg\">\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-sm font-medium text-gray-900\">Tracking Number</p>\n <p className=\"text-sm text-gray-600 font-mono\">{order.trackingNumber}</p>\n </div>\n {order.trackingUrl && (\n <LinkButton href={order.trackingUrl} target=\"_blank\" rel=\"noopener noreferrer\" size=\"sm\">\n Track Package\n </LinkButton>\n )}\n </div>\n </div>\n )}\n </Card>\n\n {/* Order Items */}\n {showItems && (\n <Card className=\"p-6\">\n <h2 className=\"text-lg font-semibold text-gray-900 mb-4\">Order Items</h2>\n <div className=\"space-y-4\">\n {order.items.map((item) => (\n <div key={item.id} className=\"flex items-center gap-4 py-3 border-b last:border-0\">\n <div className=\"w-16 h-16 bg-gray-100 rounded-md overflow-hidden flex-shrink-0\">\n <img\n src={item.product.images[0] || '/placeholder-product.jpg'}\n alt={item.product.name}\n className=\"w-full h-full object-cover\"\n />\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"font-medium text-gray-900\">{item.product.name}</p>\n <p className=\"text-sm text-gray-500\">Qty: {item.quantity}</p>\n </div>\n <p className=\"font-medium text-gray-900\">\n {currencySymbol}{(item.price * item.quantity).toFixed(2)}\n </p>\n </div>\n ))}\n </div>\n\n {/* Order Summary */}\n <div className=\"mt-6 pt-4 border-t space-y-2\">\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Subtotal</span>\n <span className=\"text-gray-900\">{currencySymbol}{order.subtotal.toFixed(2)}</span>\n </div>\n {order.discount > 0 && (\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Discount</span>\n <span className=\"text-green-600\">-{currencySymbol}{order.discount.toFixed(2)}</span>\n </div>\n )}\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Shipping</span>\n <span className=\"text-gray-900\">{currencySymbol}{order.shipping.toFixed(2)}</span>\n </div>\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-gray-600\">Tax</span>\n <span className=\"text-gray-900\">{currencySymbol}{order.tax.toFixed(2)}</span>\n </div>\n <div className=\"flex justify-between text-base font-semibold pt-2 border-t\">\n <span className=\"text-gray-900\">Total</span>\n <span className=\"text-gray-900\">{currencySymbol}{order.total.toFixed(2)}</span>\n </div>\n </div>\n </Card>\n )}\n\n {/* Addresses & Payment */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n {/* Shipping Address */}\n {showShippingAddress && (\n <Card className=\"p-6\">\n <h3 className=\"text-sm font-semibold text-gray-900 mb-3\">Shipping Address</h3>\n <address className=\"text-sm text-gray-600 not-italic\">\n {order.shippingAddress.firstName} {order.shippingAddress.lastName}<br />\n {order.shippingAddress.address1}<br />\n {order.shippingAddress.address2 && <>{order.shippingAddress.address2}<br /></>}\n {order.shippingAddress.city}, {order.shippingAddress.state} {order.shippingAddress.postalCode}<br />\n {order.shippingAddress.country}\n {order.shippingAddress.phone && (\n <>\n <br />\n <span className=\"text-gray-500\">{order.shippingAddress.phone}</span>\n </>\n )}\n </address>\n </Card>\n )}\n\n {/* Billing Address */}\n {showBillingAddress && (\n <Card className=\"p-6\">\n <h3 className=\"text-sm font-semibold text-gray-900 mb-3\">Billing Address</h3>\n <address className=\"text-sm text-gray-600 not-italic\">\n {order.billingAddress.firstName} {order.billingAddress.lastName}<br />\n {order.billingAddress.address1}<br />\n {order.billingAddress.address2 && <>{order.billingAddress.address2}<br /></>}\n {order.billingAddress.city}, {order.billingAddress.state} {order.billingAddress.postalCode}<br />\n {order.billingAddress.country}\n </address>\n </Card>\n )}\n\n {/* Payment Method */}\n {showPaymentMethod && (\n <Card className=\"p-6\">\n <h3 className=\"text-sm font-semibold text-gray-900 mb-3\">Payment Method</h3>\n <div className=\"flex items-center gap-3\">\n <div className=\"w-10 h-6 bg-gray-100 rounded flex items-center justify-center\">\n <svg className=\"w-8 h-4 text-gray-600\" fill=\"currentColor\" viewBox=\"0 0 32 16\">\n <rect width=\"32\" height=\"16\" rx=\"2\" fill=\"#1A1F71\" />\n <text x=\"6\" y=\"12\" fontSize=\"8\" fill=\"white\" fontFamily=\"Arial, sans-serif\" fontWeight=\"bold\">VISA</text>\n </svg>\n </div>\n <div>\n <p className=\"text-sm text-gray-900\">\n {order.paymentMethod.brand} ending in {order.paymentMethod.last4}\n </p>\n <p className=\"text-xs text-gray-500\">\n Expires {order.paymentMethod.expiryMonth}/{order.paymentMethod.expiryYear}\n </p>\n </div>\n </div>\n </Card>\n )}\n\n {/* Delivery Method */}\n <Card className=\"p-6\">\n <h3 className=\"text-sm font-semibold text-gray-900 mb-3\">Delivery Method</h3>\n <div>\n <p className=\"text-sm text-gray-900\">{order.shippingMethod.name}</p>\n <p className=\"text-xs text-gray-500\">\n {order.shippingMethod.estimatedDays}\n {order.shippingMethod.carrier && ` via ${order.shippingMethod.carrier}`}\n </p>\n </div>\n </Card>\n </div>\n\n {/* Actions */}\n <div className=\"flex flex-col sm:flex-row gap-4 justify-center\">\n <LinkButton href={continueShoppingUrl} variant=\"secondary\" size=\"lg\">\n Continue Shopping\n </LinkButton>\n {trackOrderUrl && (\n <LinkButton href={trackOrderUrl} size=\"lg\">\n View Order Details\n </LinkButton>\n )}\n </div>\n\n {/* Support */}\n <div className=\"text-center text-sm text-gray-500\">\n <p>\n Need help?{' '}\n <a href=\"/contact\" className=\"text-blue-600 hover:text-blue-800\">\n Contact our support team\n </a>\n </p>\n </div>\n </div>\n )\n}\n","/**\n * Payment API Client\n *\n * Handles API calls for the Payment component.\n */\n\nimport type { DigitalProduct } from './types'\n\ninterface ApiResponse<T> {\n success: boolean\n data?: T\n error?: string\n}\n\ninterface PaymentClientConfig {\n baseUrl: string\n apiKey?: string\n accessToken?: string\n projectId?: number\n}\n\nexport interface PaymentMethod {\n id: number\n customer_id: number\n type: 'card' | 'bank_account' | 'sepa_debit'\n provider: string\n provider_payment_method_id?: string\n is_default: boolean\n status: 'active' | 'inactive'\n card_brand?: string\n card_last4?: string\n card_exp_month?: number\n card_exp_year?: number\n}\n\nexport interface Customer {\n id: number\n project_id: number\n user_id: string\n email: string\n name?: string\n provider_customer_id?: string\n}\n\nfunction createHeaders(config: PaymentClientConfig): 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: PaymentClientConfig,\n url: string,\n options: RequestInit = {}\n): Promise<ApiResponse<T>> {\n try {\n const response = await fetch(url, {\n ...options,\n headers: {\n ...createHeaders(config),\n ...options.headers as Record<string, string>,\n },\n cache: 'no-store',\n })\n\n if (!response.ok) {\n try {\n const errorData = await response.json()\n return {\n success: false,\n error: errorData.error || `HTTP ${response.status}: ${response.statusText}`\n }\n } catch {\n return {\n success: false,\n error: `HTTP ${response.status}: ${response.statusText}`\n }\n }\n }\n\n const contentType = response.headers.get('content-type')\n if (!contentType || !contentType.includes('application/json')) {\n return {\n success: false,\n error: 'Invalid response: expected JSON'\n }\n }\n\n const data = await response.json()\n return data\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'API request failed'\n }\n }\n}\n\ninterface RawProduct {\n id: number\n name: string\n description?: string\n project_id: number\n active: boolean\n}\n\ninterface RawPrice {\n id: number\n product_id: number\n unit_amount: number\n type: 'recurring' | 'one_time'\n interval?: string\n active: boolean\n}\n\n/**\n * Fetch products by IDs (with prices)\n */\nexport async function fetchProducts(\n config: PaymentClientConfig,\n productIds: string[]\n): Promise<ApiResponse<DigitalProduct[]>> {\n const { baseUrl } = config\n\n try {\n // Fetch products\n const productFilter = productIds.length === 1\n ? { id: productIds[0] }\n : { id: { operator: 'in', value: productIds } }\n\n const productsResult = await fetchAPI<RawProduct[]>(\n config,\n `${baseUrl}/data/products?filter=${encodeURIComponent(JSON.stringify(productFilter))}`\n )\n\n if (!productsResult.success || !productsResult.data || productsResult.data.length === 0) {\n return { success: false, error: productsResult.error || 'No products found' }\n }\n\n const rawProducts = productsResult.data\n\n // Fetch prices for these products\n const numericProductIds = rawProducts.map(p => p.id)\n const priceFilter = {\n product_id: { operator: 'in', value: numericProductIds },\n active: true\n }\n\n const pricesResult = await fetchAPI<RawPrice[]>(\n config,\n `${baseUrl}/data/prices?filter=${encodeURIComponent(JSON.stringify(priceFilter))}&limit=200`\n )\n\n const rawPrices = pricesResult.success ? (pricesResult.data || []) : []\n\n // Create a map of product_id -> price info\n const priceMap = new Map<number, RawPrice>()\n for (const price of rawPrices) {\n if (!priceMap.has(price.product_id)) {\n priceMap.set(price.product_id, price)\n }\n }\n\n // Join products with prices\n const products: DigitalProduct[] = rawProducts.map(product => {\n const price = priceMap.get(product.id)\n return {\n id: String(product.id),\n name: product.name,\n description: product.description,\n price: price ? price.unit_amount / 100 : 0,\n type: price?.type === 'recurring' ? 'subscription' : 'one-time',\n interval: price?.interval as 'month' | 'year' | undefined,\n }\n })\n\n return { success: true, data: products }\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to fetch products'\n }\n }\n}\n\n/**\n * Fetch all products for a project (with prices)\n */\nexport async function fetchAllProducts(\n config: PaymentClientConfig\n): Promise<ApiResponse<DigitalProduct[]>> {\n const { baseUrl, projectId } = config\n\n try {\n // Fetch products\n const productFilter = projectId ? { project_id: projectId, active: true } : { active: true }\n\n const productsResult = await fetchAPI<RawProduct[]>(\n config,\n `${baseUrl}/data/products?filter=${encodeURIComponent(JSON.stringify(productFilter))}&sort=name:asc&limit=100`\n )\n\n if (!productsResult.success || !productsResult.data || productsResult.data.length === 0) {\n return { success: true, data: [] }\n }\n\n const rawProducts = productsResult.data\n\n // Fetch prices for these products\n const numericProductIds = rawProducts.map(p => p.id)\n const priceFilter = {\n product_id: { operator: 'in', value: numericProductIds },\n active: true\n }\n\n const pricesResult = await fetchAPI<RawPrice[]>(\n config,\n `${baseUrl}/data/prices?filter=${encodeURIComponent(JSON.stringify(priceFilter))}&limit=200`\n )\n\n const rawPrices = pricesResult.success ? (pricesResult.data || []) : []\n\n // Create a map of product_id -> price info\n const priceMap = new Map<number, RawPrice>()\n for (const price of rawPrices) {\n if (!priceMap.has(price.product_id)) {\n priceMap.set(price.product_id, price)\n }\n }\n\n // Join products with prices\n const products: DigitalProduct[] = rawProducts.map(product => {\n const price = priceMap.get(product.id)\n return {\n id: String(product.id),\n name: product.name,\n description: product.description,\n price: price ? price.unit_amount / 100 : 0,\n type: price?.type === 'recurring' ? 'subscription' : 'one-time',\n interval: price?.interval as 'month' | 'year' | undefined,\n }\n })\n\n return { success: true, data: products }\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to fetch products'\n }\n }\n}\n\n/**\n * Get customer by user ID\n */\nexport async function getCustomerByUserId(\n config: PaymentClientConfig,\n userId: string\n): Promise<ApiResponse<Customer>> {\n const { baseUrl, projectId } = config\n\n return fetchAPI<Customer>(\n config,\n `${baseUrl}/billing/customers/by-user/${userId}?project_id=${projectId}`\n )\n}\n\n/**\n * Create a new customer\n */\nexport async function createCustomer(\n config: PaymentClientConfig,\n userId: string,\n email: string,\n name?: string\n): Promise<ApiResponse<Customer>> {\n const { baseUrl, projectId } = config\n\n return fetchAPI<Customer>(\n config,\n `${baseUrl}/billing/customers`,\n {\n method: 'POST',\n body: JSON.stringify({\n project_id: projectId,\n user_id: userId,\n organization_id: 1, // Default org\n email,\n name,\n test_mode: true,\n sync_to_stripe: true\n })\n }\n )\n}\n\n/**\n * Get or create customer\n */\nexport async function getOrCreateCustomer(\n config: PaymentClientConfig,\n userId: string,\n email: string,\n name?: string\n): Promise<ApiResponse<Customer>> {\n // Try to get existing customer\n const existingResult = await getCustomerByUserId(config, userId)\n\n if (existingResult.success && existingResult.data) {\n return existingResult\n }\n\n // Create new customer\n return createCustomer(config, userId, email, name)\n}\n\n/**\n * Get payment methods for a customer\n */\nexport async function getPaymentMethods(\n config: PaymentClientConfig,\n customerId: number\n): Promise<ApiResponse<PaymentMethod[]>> {\n const { baseUrl, projectId } = config\n\n return fetchAPI<PaymentMethod[]>(\n config,\n `${baseUrl}/billing/customers/${customerId}/payment-methods?project_id=${projectId}&status=active`\n )\n}\n\n/**\n * Fetch Stripe publishable key\n */\nexport async function fetchPaymentConfig(\n config: PaymentClientConfig\n): Promise<ApiResponse<{ public_key: string; mode: string }>> {\n const { baseUrl, projectId } = config\n\n return fetchAPI<{ public_key: string; mode: string }>(\n config,\n `${baseUrl}/billing/payment-config?project_id=${projectId}&test_mode=true`\n )\n}\n\n/**\n * Process a one-time payment\n */\nexport async function processPayment(\n config: PaymentClientConfig,\n params: {\n customer_id: number\n amount: number\n currency?: string\n payment_method_id?: string\n stripe_payment_method_id?: string\n product_ids: string[]\n description?: string\n }\n): Promise<ApiResponse<{ payment_intent_id: string; status: string }>> {\n const { baseUrl, projectId } = config\n\n return fetchAPI<{ payment_intent_id: string; status: string }>(\n config,\n `${baseUrl}/billing/payments/intents`,\n {\n method: 'POST',\n body: JSON.stringify({\n project_id: projectId,\n ...params,\n confirm: true,\n sync_to_stripe: true,\n test_mode: true\n })\n }\n )\n}\n\n/**\n * Create a subscription for recurring products\n */\nexport async function createSubscription(\n config: PaymentClientConfig,\n params: {\n customer_id: number\n price_id: number\n payment_method_id?: string\n }\n): Promise<ApiResponse<{ subscription_id: number; status: string }>> {\n const { baseUrl, projectId } = config\n\n return fetchAPI<{ subscription_id: number; status: string }>(\n config,\n `${baseUrl}/billing/subscriptions`,\n {\n method: 'POST',\n body: JSON.stringify({\n project_id: projectId,\n ...params,\n sync_to_stripe: true,\n test_mode: true\n })\n }\n )\n}\n\n/**\n * Add a new payment method\n */\nexport async function addPaymentMethod(\n config: PaymentClientConfig,\n customerId: number,\n stripePaymentMethodId: string,\n setAsDefault: boolean = true\n): Promise<ApiResponse<PaymentMethod>> {\n const { baseUrl, projectId } = config\n\n return 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","/**\n * Payment Component\n *\n * A simplified single-page checkout for digital products.\n * Similar to Stripe Checkout - two-column layout with product info on left, form on right.\n * Loads product data from the database by ID.\n * Supports existing payment methods if the customer has them.\n *\n * @example\n * ```tsx\n * import { Payment } from '@omnikit-js/ui'\n *\n * // Single product by ID\n * export default async function BuyPage() {\n * return (\n * <Payment\n * baseUrl={process.env.OMNIKIT_BASE_URL!}\n * apiKey={process.env.OMNIKIT_API_KEY}\n * projectId={1}\n * userId=\"user_123\"\n * productId=\"prod_001\"\n * successUrl=\"/thank-you\"\n * cancelUrl=\"/pricing\"\n * />\n * )\n * }\n *\n * // Multiple products (bundle)\n * export default async function BundlePage() {\n * return (\n * <Payment\n * baseUrl={process.env.OMNIKIT_BASE_URL!}\n * apiKey={process.env.OMNIKIT_API_KEY}\n * projectId={1}\n * userId=\"user_123\"\n * productIds={['prod_001', 'prod_002', 'prod_003']}\n * successUrl=\"/thank-you\"\n * />\n * )\n * }\n * ```\n */\n\nimport { PaymentForm } from '../../client/PaymentForm'\nimport {\n fetchProducts as apiFetchProducts,\n getCustomerByUserId,\n getPaymentMethods,\n fetchPaymentConfig,\n type Customer,\n type PaymentMethod,\n} from './client'\nimport type { PaymentProps, DigitalProduct } from './types'\n\n// Mock products for development\nconst MOCK_PRODUCTS: Record<string, DigitalProduct> = {\n 'prod_pro': {\n id: 'prod_pro',\n name: 'Pro Plan',\n description: 'Unlock all premium features and priority support',\n price: 29.99,\n type: 'subscription',\n interval: 'month',\n image: '/placeholder-product.jpg',\n features: [\n 'Unlimited projects',\n 'Priority support',\n 'Advanced analytics',\n 'Custom integrations',\n 'Team collaboration',\n ],\n },\n 'prod_starter': {\n id: 'prod_starter',\n name: 'Starter Plan',\n description: 'Perfect for getting started',\n price: 9.99,\n type: 'subscription',\n interval: 'month',\n image: '/placeholder-product.jpg',\n features: [\n '5 projects',\n 'Email support',\n 'Basic analytics',\n ],\n },\n 'prod_lifetime': {\n id: 'prod_lifetime',\n name: 'Lifetime Access',\n description: 'One-time payment, forever access',\n price: 299.99,\n type: 'one-time',\n image: '/placeholder-product.jpg',\n features: [\n 'All Pro features',\n 'Lifetime updates',\n 'Priority support forever',\n ],\n },\n}\n\nexport async function Payment({\n // API config\n baseUrl,\n apiKey,\n accessToken,\n projectId,\n userId,\n // Product options\n productId,\n productIds: productIdsProp,\n product: productProp,\n quantity = 1,\n email: _email,\n successUrl = '/success',\n cancelUrl,\n currencySymbol = '$',\n showImage = true,\n showFeatures = true,\n submitText: _submitText,\n showSecurityBadges = true,\n allowPromoCode = true,\n sellerName,\n sellerLogo,\n termsUrl,\n privacyUrl,\n className = '',\n layout = 'two-column',\n}: PaymentProps & { layout?: 'single-column' | 'two-column' }) {\n // Determine which product IDs to fetch\n const productIds = productIdsProp || (productId ? [productId] : [])\n\n // API config for client actions\n const apiConfig = {\n baseUrl,\n apiKey,\n accessToken,\n projectId,\n }\n\n // Fetch products from API or use provided/mock data\n let products: DigitalProduct[] = []\n\n if (productProp) {\n // Use provided product directly\n products = [productProp]\n } else if (productIds.length > 0 && baseUrl) {\n // Fetch from API\n try {\n const result = await apiFetchProducts(apiConfig, productIds)\n if (result.success && result.data) {\n products = result.data\n }\n } catch (error) {\n console.error('Failed to fetch products:', error)\n // Fall back to mock data in development\n products = productIds\n .map(id => MOCK_PRODUCTS[id])\n .filter(Boolean)\n }\n } else if (productIds.length > 0) {\n // No baseUrl, use mock data\n products = productIds\n .map(id => MOCK_PRODUCTS[id])\n .filter(Boolean)\n }\n\n // Fallback to first mock product if nothing found\n if (products.length === 0) {\n products = [MOCK_PRODUCTS['prod_pro']]\n }\n\n // Fetch customer and payment methods if userId is provided\n let customer: Customer | null = null\n let paymentMethods: PaymentMethod[] = []\n let stripePublishableKey: string | null = null\n\n if (baseUrl && projectId) {\n // Fetch Stripe publishable key (needed for guest checkout too)\n const configResult = await fetchPaymentConfig(apiConfig)\n if (configResult.success && configResult.data?.public_key) {\n stripePublishableKey = configResult.data.public_key\n }\n\n // Fetch customer by userId if provided\n if (userId) {\n const customerResult = await getCustomerByUserId(apiConfig, userId)\n if (customerResult.success && customerResult.data) {\n customer = customerResult.data\n\n // Fetch payment methods for this customer\n const pmResult = await getPaymentMethods(apiConfig, customer.id)\n if (pmResult.success && pmResult.data) {\n paymentMethods = pmResult.data\n }\n }\n }\n }\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\n // Product Info Section (used in both layouts)\n const ProductSection = () => (\n <div className=\"space-y-6\">\n {/* Seller Branding */}\n {(sellerLogo || sellerName) && (\n <div className=\"flex items-center gap-3\">\n {sellerLogo && (\n <img\n src={sellerLogo}\n alt={sellerName || 'Seller'}\n className=\"h-8\"\n />\n )}\n {sellerName && (\n <span className=\"text-lg font-medium text-gray-900 dark:text-white\">{sellerName}</span>\n )}\n </div>\n )}\n\n {/* Single Product Display */}\n {!isMultiProduct && (\n <>\n <div>\n {/* Product Image */}\n {showImage && primaryProduct.image && (\n <div className=\"w-full h-48 bg-gray-100 dark:bg-neutral-800 rounded-xl overflow-hidden mb-4\">\n <img\n src={primaryProduct.image}\n alt={primaryProduct.name}\n className=\"w-full h-full object-cover\"\n />\n </div>\n )}\n\n {/* Product Details */}\n <h1 className=\"text-2xl font-bold text-gray-900 dark:text-white\">{primaryProduct.name}</h1>\n {primaryProduct.description && (\n <p className=\"text-gray-600 dark:text-gray-400 mt-1\">{primaryProduct.description}</p>\n )}\n <div className=\"mt-4\">\n <span className=\"text-4xl font-bold text-gray-900 dark:text-white\">\n {currencySymbol}{primaryProduct.price.toFixed(2)}\n </span>\n {primaryProduct.type === 'subscription' && primaryProduct.interval && (\n <span className=\"text-gray-500 dark:text-gray-400 text-lg ml-1\">/{primaryProduct.interval}</span>\n )}\n {quantity > 1 && (\n <span className=\"text-gray-500 dark:text-gray-400 text-sm ml-2\">x {quantity}</span>\n )}\n </div>\n </div>\n\n {/* Features List */}\n {showFeatures && primaryProduct.features && primaryProduct.features.length > 0 && (\n <div className=\"pt-6 border-t border-gray-200 dark:border-neutral-700\">\n <h3 className=\"text-sm font-semibold text-gray-900 dark:text-white mb-3\">What's included</h3>\n <ul className=\"space-y-3\">\n {primaryProduct.features.map((feature, index) => (\n <li key={index} className=\"flex items-start gap-3 text-sm text-gray-600 dark:text-gray-400\">\n <svg className=\"w-5 h-5 text-green-500 flex-shrink-0 mt-0.5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n {feature}\n </li>\n ))}\n </ul>\n </div>\n )}\n </>\n )}\n\n {/* Multiple Products Display */}\n {isMultiProduct && (\n <div className=\"space-y-4\">\n <h2 className=\"text-xl font-bold text-gray-900 dark:text-white\">Order Summary</h2>\n <div className=\"space-y-3\">\n {products.map((product) => (\n <div key={product.id} className=\"flex gap-3 items-start p-3 bg-gray-50 dark:bg-neutral-800 rounded-lg\">\n {/* Product Image */}\n {showImage && product.image && (\n <div className=\"flex-shrink-0 w-12 h-12 bg-gray-200 dark:bg-neutral-700 rounded-lg overflow-hidden\">\n <img\n src={product.image}\n alt={product.name}\n className=\"w-full h-full object-cover\"\n />\n </div>\n )}\n\n {/* Product Info */}\n <div className=\"flex-1 min-w-0\">\n <p className=\"font-medium text-gray-900 dark:text-white\">{product.name}</p>\n {product.description && (\n <p className=\"text-xs text-gray-500 dark:text-gray-400 truncate\">{product.description}</p>\n )}\n </div>\n\n {/* Price */}\n <div className=\"text-right\">\n <p className=\"font-semibold text-gray-900 dark:text-white\">\n {currencySymbol}{product.price.toFixed(2)}\n </p>\n {product.type === 'subscription' && product.interval && (\n <p className=\"text-xs text-gray-500 dark:text-gray-400\">/{product.interval}</p>\n )}\n </div>\n </div>\n ))}\n </div>\n\n {/* Total */}\n <div className=\"pt-4 border-t border-gray-200 dark:border-neutral-700 flex justify-between items-center\">\n <span className=\"text-lg font-semibold text-gray-900 dark:text-white\">Total</span>\n <span className=\"text-2xl font-bold text-gray-900 dark:text-white\">\n {currencySymbol}{total.toFixed(2)}\n </span>\n </div>\n </div>\n )}\n\n {/* Security Notice */}\n {showSecurityBadges && (\n <div className=\"flex items-center gap-2 text-gray-400 dark:text-gray-500 text-sm\">\n <svg className=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 24 24\">\n <path d=\"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z\" />\n </svg>\n <span>Secure payment powered by Stripe</span>\n </div>\n )}\n </div>\n )\n\n // Payment Form Section\n const FormSection = () => (\n <div className=\"bg-white dark:bg-neutral-900 rounded-2xl shadow-xl border border-gray-200 dark:border-neutral-800 p-6 lg:p-8\">\n <h2 className=\"text-xl font-semibold text-gray-900 dark:text-white mb-6\">Payment Details</h2>\n <PaymentForm\n products={products}\n customerId={customer?.id || null}\n paymentMethods={paymentMethods}\n stripePublishableKey={stripePublishableKey}\n actionConfig={apiConfig}\n quantity={quantity}\n currencySymbol={currencySymbol}\n successUrl={successUrl}\n cancelUrl={cancelUrl}\n allowPromoCode={allowPromoCode}\n termsUrl={termsUrl}\n privacyUrl={privacyUrl}\n />\n </div>\n )\n\n // Two-column layout (Stripe-like)\n if (layout === 'two-column') {\n return (\n <div className={`min-h-screen bg-gray-50 dark:bg-neutral-950 ${className}`}>\n <div className=\"max-w-6xl mx-auto px-4 py-8 lg:py-12\">\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-8 lg:gap-16\">\n {/* Left Column - Product Info */}\n <div className=\"lg:sticky lg:top-8 lg:self-start\">\n <ProductSection />\n </div>\n\n {/* Right Column - Payment Form */}\n <div>\n <FormSection />\n\n {/* Footer Links */}\n <div className=\"mt-6 text-center\">\n <a href=\"/\" className=\"text-sm text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300\">\n Return to site\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n }\n\n // Single-column layout (original)\n return (\n <div className={`min-h-screen bg-gray-50 dark:bg-neutral-950 py-8 px-4 ${className}`}>\n <div className=\"max-w-lg mx-auto\">\n <div className=\"bg-white dark:bg-neutral-900 rounded-2xl shadow-xl border border-gray-200 dark:border-neutral-800 overflow-hidden\">\n {/* Product Section */}\n <div className=\"p-6 border-b border-gray-200 dark:border-neutral-700\">\n <ProductSection />\n </div>\n\n {/* Payment Form */}\n <div className=\"p-6 bg-gray-50 dark:bg-neutral-800\">\n <PaymentForm\n products={products}\n customerId={customer?.id || null}\n paymentMethods={paymentMethods}\n stripePublishableKey={stripePublishableKey}\n actionConfig={apiConfig}\n quantity={quantity}\n currencySymbol={currencySymbol}\n successUrl={successUrl}\n cancelUrl={cancelUrl}\n allowPromoCode={allowPromoCode}\n termsUrl={termsUrl}\n privacyUrl={privacyUrl}\n />\n </div>\n </div>\n\n {/* Footer Links */}\n <div className=\"mt-6 text-center\">\n <a href=\"/\" className=\"text-sm text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300\">\n Return to site\n </a>\n </div>\n </div>\n </div>\n )\n}\n\nexport type { PaymentProps, DigitalProduct } from './types'\n"]}
|