subos-frontend 1.0.19 → 1.0.21

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/config/envConfig.ts","../src/api/config.ts","../src/api/client.ts","../src/hooks/useSubscription.ts","../src/utils/planUtils.ts","../src/hooks/usePlans.ts","../src/hooks/useTransactions.ts","../src/hooks/usePagination.ts","../src/hooks/useCancelSubscription.ts","../src/hooks/useCustomerPortal.ts","../src/contexts/UpgradeContext.tsx","../src/components/plans/BillingCycleToggle.tsx","../src/components/plans/TierFilterDropdown.tsx","../src/components/icons/CheckIcon.tsx","../src/components/plans/PlanCard.tsx","../src/components/icons/CommonIcons.tsx","../src/components/plans/PlansGrid.tsx","../src/components/plans/PlanSelector.tsx","../src/components/payments/ChangeCardButton.tsx","../src/components/payments/PaymentCancelView.tsx","../src/components/payments/PaymentSuccessView.tsx","../src/utils/upgradeUtils.ts","../src/components/transaction/TransactionItem.tsx","../src/components/transaction/TransactionLoadingState.tsx","../src/components/transaction/TransactionErrorState.tsx","../src/components/transaction/TransactionEmptyState.tsx","../src/components/transaction/TransactionList.tsx","../src/components/transaction/TransactionStatusFilter.tsx","../src/components/transaction/TransactionFilter.tsx","../src/components/transaction/TransactionPagination.tsx","../src/components/transaction/TransactionModal.tsx","../src/components/subscription/SubscriptionInfoGrid.tsx","../src/components/subscription/SubscriptionUsageDisplay.tsx","../src/components/subscription/SubscriptionTransactionButton.tsx","../src/components/subscription/SubscriptionCancelButton.tsx","../src/components/subscription/SubscriptionActionButtons.tsx","../src/components/subscription/SubscriptionCancelModal.tsx","../src/components/subscription/SubscriptionDetails.tsx","../src/components/upgrade/UpgradeSummary.tsx","../src/components/LogoInline.tsx","../src/components/common/Layout.tsx","../src/components/common/SubOSThemeProvider.tsx","../src/components/pagination/Pagination.tsx","../src/pages/DashboardPage.tsx","../src/hooks/payments/usePaymentParams.ts","../src/hooks/payments/useProcessPaymentSuccess.ts","../src/pages/PaymentSuccessPage.tsx","../src/hooks/payments/useProcessPaymentCancel.ts","../src/pages/PaymentCancelPage.tsx","../src/App.tsx"],"names":["useState","useCallback","error","clearSelectedPlan","useEffect","apiRequest","jsx","useRef","jsxs","DownloadIcon","React","Fragment","RouterLink","createContext","useContext","App","Router"],"mappings":"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","file":"index.mjs","sourcesContent":["// Environment configuration with runtime overrides\n// Centralized config that can be set by the consumer project at runtime\n\ntype EnvDefaults = {\n API_ENDPOINT: string;\n NEXT_PUBLIC_API_END_POINT: string;\n PROJECT_ID: string;\n STRIPE_PUBLISHABLE_KEY: string;\n APP_NAME: string;\n APP_VERSION: string;\n APP_ENVIRONMENT: string;\n DEBUG: boolean;\n MODE: string;\n DEV: boolean;\n PROD: boolean;\n};\n\n// Safe environment access that works in both Vite and other bundlers\n// Overloads ensure callers get a correctly typed value when a fallback is provided\nfunction getEnvVar(key: string, fallback: string): string;\nfunction getEnvVar(key: string, fallback: boolean): boolean;\nfunction getEnvVar(key: string): string | boolean | undefined;\nfunction getEnvVar(\n key: string,\n fallback?: string | boolean\n): string | boolean | undefined {\n try {\n // Check Vite environment first\n if (\n typeof import.meta !== 'undefined' &&\n (import.meta as unknown as { env?: Record<string, string | boolean | undefined> }).env\n ) {\n const v = (import.meta as unknown as { env?: Record<string, string | boolean | undefined> }).env![key] as\n | string\n | boolean\n | undefined;\n if (typeof fallback === 'boolean') {\n if (typeof v === 'boolean') return v;\n if (typeof v === 'string') return ['true', '1', 'yes'].includes(v.toLowerCase());\n return fallback;\n }\n if (typeof fallback === 'string') {\n if (typeof v === 'string') return v;\n if (typeof v === 'boolean') return v ? 'true' : 'false';\n return fallback;\n }\n return v;\n }\n\n // Fallback for Node.js / other environments\n const nodeEnv = (typeof globalThis !== 'undefined' && (globalThis as { process?: { env?: Record<string, string | undefined> } }).process?.env) as\n | Record<string, string | undefined>\n | undefined;\n if (nodeEnv) {\n const v = nodeEnv[key];\n if (typeof fallback === 'boolean') {\n if (typeof v === 'string') return ['true', '1', 'yes'].includes(v.toLowerCase());\n return fallback;\n }\n if (typeof fallback === 'string') {\n return v ?? fallback;\n }\n return v;\n }\n\n return fallback;\n } catch {\n return fallback;\n }\n}\n\n\nconst envDefaults: EnvDefaults = {\n // API Configuration - These MUST be configured by the consuming app\n API_ENDPOINT: getEnvVar('VITE_API_ENDPOINT', ''),\n NEXT_PUBLIC_API_END_POINT: getEnvVar('VITE_NEXT_PUBLIC_API_END_POINT', ''),\n // Project configuration for backend header - This MUST be configured by the consuming app\n PROJECT_ID: getEnvVar('VITE_PROJECT_ID', ''),\n // Third-party keys - This MUST be configured by the consuming app\n STRIPE_PUBLISHABLE_KEY: getEnvVar('VITE_STRIPE_PUBLISHABLE_KEY', ''),\n // App Configuration\n APP_NAME: getEnvVar('VITE_APP_NAME', 'SubOS Frontend'),\n APP_VERSION: getEnvVar('VITE_APP_VERSION', '1.0.0'),\n APP_ENVIRONMENT: getEnvVar('VITE_APP_ENVIRONMENT', 'development'),\n // Development Configuration\n DEBUG: getEnvVar('VITE_DEBUG', false),\n // Mode\n MODE: getEnvVar('MODE', 'development'),\n DEV: getEnvVar('DEV', false),\n PROD: getEnvVar('PROD', false),\n};\n\nconst runtimeOverrides: Partial<EnvDefaults> = {};\n\nexport type EnvConfig = EnvDefaults;\n\nexport type ConfigureSubOSInput = Partial<{\n apiEndpoint: string;\n projectId: string;\n stripePublishableKey: string;\n appName: string;\n appVersion: string;\n appEnvironment: string;\n debug: boolean;\n}>;\n\n// Call from consumer app to override defaults at runtime\nexport function configureSubOS(input: ConfigureSubOSInput = {}): void {\n if (input.apiEndpoint !== undefined) runtimeOverrides.API_ENDPOINT = input.apiEndpoint;\n if (input.projectId !== undefined) runtimeOverrides.PROJECT_ID = input.projectId;\n if (input.stripePublishableKey !== undefined) runtimeOverrides.STRIPE_PUBLISHABLE_KEY = input.stripePublishableKey;\n if (input.appName !== undefined) runtimeOverrides.APP_NAME = input.appName;\n if (input.appVersion !== undefined) runtimeOverrides.APP_VERSION = input.appVersion;\n if (input.appEnvironment !== undefined) runtimeOverrides.APP_ENVIRONMENT = input.appEnvironment;\n if (input.debug !== undefined) runtimeOverrides.DEBUG = input.debug;\n}\n\n// Validation function to ensure required config is set\nexport function validateSubOSConfig(): { isValid: boolean; missingFields: string[] } {\n const missingFields: string[] = [];\n \n if (!getApiBaseUrl()) missingFields.push('apiEndpoint');\n if (!getProjectId()) missingFields.push('projectId');\n if (!getStripePublishableKey()) missingFields.push('stripePublishableKey');\n \n return {\n isValid: missingFields.length === 0,\n missingFields\n };\n}\n\n// Helper to throw error if config is invalid\nexport function ensureSubOSConfig(): void {\n const validation = validateSubOSConfig();\n if (!validation.isValid) {\n throw new Error(\n `SubOS configuration is incomplete. Missing required fields: ${validation.missingFields.join(', ')}. ` +\n 'Please call configureSubOS() with the required configuration before using SubOS components.'\n );\n }\n}\n\n// Resolved config getters (runtime override wins over env defaults)\nexport const getApiBaseUrl = (): string => runtimeOverrides.API_ENDPOINT ?? envDefaults.API_ENDPOINT;\nexport const getProjectId = (): string => runtimeOverrides.PROJECT_ID ?? envDefaults.PROJECT_ID;\nexport const getStripePublishableKey = (): string => runtimeOverrides.STRIPE_PUBLISHABLE_KEY ?? envDefaults.STRIPE_PUBLISHABLE_KEY;\n\nexport const isDevelopment = (): boolean => {\n const env = runtimeOverrides.APP_ENVIRONMENT ?? envDefaults.APP_ENVIRONMENT;\n const devFlag = runtimeOverrides.DEV ?? envDefaults.DEV;\n return env === 'development' || !!devFlag;\n};\n\nexport const isProduction = (): boolean => {\n const env = runtimeOverrides.APP_ENVIRONMENT ?? envDefaults.APP_ENVIRONMENT;\n const prodFlag = runtimeOverrides.PROD ?? envDefaults.PROD;\n return env === 'production' || !!prodFlag;\n};\n","import { getApiBaseUrl, getProjectId } from '../config/envConfig.js';\n// API configuration (use getter so runtime overrides apply)\nexport { getApiBaseUrl };\n\n// Common headers for API requests\nexport const getHeaders = () => {\n return {\n 'Content-Type': 'application/json',\n 'auth': 'auth', // Adding auth header with value 'auth' for all API requests\n 'projectId': getProjectId(),\n };\n};\n\n// API endpoints\nexport const ENDPOINTS = {\n PLANS: '/plans',\n PAYMENTS: '/api/payments',\n CHECKOUT: '/checkout',\n SUBSCRIPTION: '/subscription',\n CUSTOMER: '/customer',\n TRANSACTIONS: '/transaction'\n};\n","import { getApiBaseUrl, getHeaders, ENDPOINTS } from './config';\nimport type { ApiResponse, Plan } from '../types';\n\n// Generic API request handler\nasync function apiRequest<T>(\n endpoint: string, \n method: string = 'GET', \n data?: unknown\n): Promise<ApiResponse<T>> {\n try {\n const url = `${getApiBaseUrl()}${endpoint}`;\n const options: RequestInit = {\n method,\n headers: getHeaders(),\n credentials: 'include',\n };\n\n if (data) {\n options.body = JSON.stringify(data);\n }\n\n const response = await fetch(url, options);\n const result = await response.json();\n\n if (!response.ok) {\n return { success: false, error: result.message || 'An error occurred' };\n }\n\n return { success: true, data: result };\n } catch (error) {\n console.error('API request failed:', error);\n return { \n success: false, \n error: error instanceof Error ? error.message : 'Unknown error occurred'\n };\n }\n}\n\n// Plan API functions\nexport const plansApi = {\n getPlans: async (): Promise<ApiResponse<Plan[]>> => {\n return apiRequest<Plan[]>(`${ENDPOINTS.PLANS}`);\n },\n getPlanByCode: (code: string, externalId: string, queryParams?: { paymentMethodId?: string | null; couponCode?: string | null }) => {\n const params = new URLSearchParams({ planCode: code, externalId });\n if (queryParams?.paymentMethodId) params.append('paymentMethodId', queryParams.paymentMethodId);\n if (queryParams?.couponCode) params.append('couponCode', queryParams.couponCode);\n return apiRequest<Plan>(`${ENDPOINTS.PLANS}?${params.toString()}`);\n },\n \n // Create unified checkout session and get hosted checkout URL\n createPaymentSession: async (\n planCode: string,\n options?: { amount?: number; currency?: string; externalId?: string; couponCode?: string; returnUrl?: string; cancelUrl?: string }\n ): Promise<ApiResponse<{ checkoutUrl: string; gateway: string; sessionId?: string; paymentId?: string }>> => {\n const externalId = options?.externalId;\n const currency = options?.currency || 'USD';\n const amount = options?.amount; // if not provided, backend will compute from plan\n\n const payload: any = {\n planCode,\n currency,\n returnUrl: options?.returnUrl ?? `${window.location.origin}/payment-success`,\n cancelUrl: options?.cancelUrl ?? `${window.location.origin}/payment-cancel`,\n };\n\n if (externalId) payload.externalId = externalId;\n if (options?.couponCode) payload.couponCode = options.couponCode;\n if (typeof amount === 'number' && amount > 0) payload.amount = amount;\n\n const resp = await apiRequest<any>(\n `${ENDPOINTS.CHECKOUT}`,\n 'POST',\n payload\n );\n\n // Backend returns { success: boolean, data: { checkoutUrl, ... } }\n // Our apiRequest wraps this again as { success: true, data: <backendResponse> }\n if (resp.success && resp.data && typeof resp.data === 'object' && 'data' in resp.data) {\n return { success: true, data: (resp.data as any).data };\n }\n return resp as ApiResponse<{ checkoutUrl: string; gateway: string; sessionId?: string; paymentId?: string }>;\n },\n};\n\n// Subscription API functions (via SDK)\nexport const subscriptionApi = {\n getActiveSubscription: async (externalId: string): Promise<ApiResponse<any>> => {\n return apiRequest<any>(`${ENDPOINTS.SUBSCRIPTION}/${externalId}`);\n },\n cancelSubscription: async (\n externalId: string, \n options?: { \n cancellationMode?: string; \n cancellationReason?: string; \n }\n ): Promise<ApiResponse<any>> => {\n let endpoint = `${ENDPOINTS.SUBSCRIPTION}/${externalId}`;\n \n if (options) {\n const params = new URLSearchParams();\n if (options.cancellationMode) params.append('cancellationMode', options.cancellationMode);\n if (options.cancellationReason) params.append('cancellationReason', options.cancellationReason);\n \n if (params.toString()) {\n endpoint += `?${params.toString()}`;\n }\n }\n \n return apiRequest<any>(endpoint, 'DELETE');\n },\n checkoutInfo: async (planCode: string, externalId: string): Promise<ApiResponse<any>> => {\n return apiRequest<any>(`${ENDPOINTS.CHECKOUT}/info/${planCode}/${externalId}`);\n }\n};\n\n// Customer API functions (partially via SDK)\nexport const customerApi = {\n getCustomer: (externalId: string): Promise<ApiResponse<any>> =>\n apiRequest<any>(`${ENDPOINTS.CUSTOMER}/${externalId}`),\n};\n\n// Transaction API functions\nexport const transactionApi = {\n getTransactions: (externalId: string, filters?: { startDate?: string; endDate?: string; status?: string; page?: number; limit?: number }) => {\n // Using the endpoint from transaction.controller.ts: GET /:externalId/history\n let endpoint = `${ENDPOINTS.TRANSACTIONS}/${externalId}/history`;\n \n if (filters) {\n const params = new URLSearchParams();\n if (filters.startDate) params.append('startDate', filters.startDate);\n if (filters.endDate) params.append('endDate', filters.endDate);\n if (filters.status) params.append('status', filters.status);\n if (filters.page) params.append('page', filters.page.toString());\n if (filters.limit) params.append('limit', filters.limit.toString());\n \n if (params.toString()) {\n endpoint += `?${params.toString()}`;\n }\n }\n \n return apiRequest<any>(endpoint);\n },\n \n getInvoice: (transactionId: string) =>\n apiRequest<{ invoiceUrl: string }>(`${ENDPOINTS.TRANSACTIONS}/${transactionId}/invoice`),\n};\n","import { useState, useCallback } from 'react';\nimport { subscriptionApi } from '../api/client';\nimport type { Subscription } from '../types';\n\nexport interface UseSubscriptionReturn {\n subscription: Subscription | null;\n loading: boolean;\n error: string | null;\n fetchSubscription: (externalId: string) => Promise<void>;\n clearSubscription: () => void;\n}\n\nexport const useSubscription = (): UseSubscriptionReturn => {\n const [subscription, setSubscription] = useState<Subscription | null>(null);\n const [loading, setLoading] = useState<boolean>(false);\n const [error, setError] = useState<string | null>(null);\n\n const fetchSubscription = useCallback(async (externalId: string) => {\n // Validate externalId before making API call\n if (!externalId || externalId === 'undefined' || externalId.trim() === '') {\n setError('Invalid user ID. Please ensure you are properly authenticated.');\n setLoading(false);\n return;\n }\n\n // Prevent multiple simultaneous requests\n if (loading) return;\n\n setLoading(true);\n setError(null);\n\n try {\n const response = await subscriptionApi.getActiveSubscription(externalId);\n \n\n if (response.success && response.data) {\n setSubscription(response.data);\n } else {\n setError(response.error || 'Failed to load subscription information');\n }\n } catch (err) {\n // Only set error if it's not an AbortError (request cancellation)\n if (err instanceof Error && err.name !== 'AbortError') {\n console.error('Error fetching subscription:', err);\n setError('Failed to load subscription information. Please try again later.');\n }\n } finally {\n setLoading(false);\n }\n }, [loading]);\n\n const clearSubscription = useCallback(() => {\n setSubscription(null);\n setError(null);\n }, []);\n\n return {\n subscription,\n loading,\n error,\n fetchSubscription,\n clearSubscription,\n };\n};\n","import type { Plan } from '../types';\n\nexport interface DropdownOption {\n value: string;\n label: string;\n candidates: number;\n}\n\n/**\n * Get plan features for display based on plan name\n */\nexport const getPlanFeatures = (plan: Plan): string[] => {\n const features: string[] = [];\n if (plan.charges && plan.charges.length > 0) {\n plan.charges.forEach(charge => {\n if (charge.billableMetric?.name) {\n features.push(charge.billableMetric.name);\n }\n });\n }\n return features.length > 0 ? features.slice(0, 7) : ['Core features included'];\n};\n\n/**\n * Get candidate units from plan's billable metrics (numeric only)\n */\nexport const getCandidateUnits = (plan: Plan): number => {\n if (plan.charges && plan.charges.length > 0) {\n const candidateCharge = plan.charges.find(\n (charge) => charge.billableMetric && charge.billableMetric.code === 'CANDIDATES'\n );\n\n const units = candidateCharge?.properties?.units;\n if (typeof units === 'number' && Number.isFinite(units)) {\n return units;\n }\n }\n return 0;\n};\n\n/**\n * Get unique candidate units from all plans (numeric only)\n */\nexport const getUniqueCandidateUnits = (plans: Plan[]): number[] => {\n const unitsSet = new Set<number>();\n\n plans.forEach((plan) => {\n plan.charges.forEach((charge) => {\n if (charge.billableMetric?.code === 'CANDIDATES') {\n const units = charge.properties?.units;\n if (typeof units === 'number' && Number.isFinite(units)) {\n unitsSet.add(units);\n }\n }\n });\n });\n\n return Array.from(unitsSet).sort((a, b) => a - b); // Sort in ascending order\n};\n\n/**\n * Get dropdown options with unique candidate units\n */\nexport const getDropdownOptions = (plans: Plan[]): DropdownOption[] => {\n const options: DropdownOption[] = [];\n const uniqueUnits = getUniqueCandidateUnits(plans);\n \n // Add options for each unique candidate unit value\n uniqueUnits.forEach(units => {\n options.push({\n value: units.toString(),\n label: `Up to ${units.toLocaleString()} Candidates`,\n candidates: units\n });\n });\n \n return options;\n};\n\n/**\n * Get current selection display text\n */\nexport const getCurrentSelectionText = (tierFilter: string, plans: Plan[]): string => {\n const options = getDropdownOptions(plans);\n const currentOption = options.find(option => option.value === tierFilter);\n \n if (!currentOption) {\n // If no option found, check if tierFilter is a number (candidate units)\n const units = parseInt(tierFilter);\n if (!isNaN(units)) {\n return `Up to ${units.toLocaleString()} Candidates`;\n }\n // Fallback to the lowest candidates label if available, otherwise empty string\n return options.length > 0 ? options[0].label : '';\n }\n \n return currentOption.label;\n};\n\n/**\n * Filter plans based on billing cycle\n */\nexport const filterPlansByBillingCycle = (\n plans: Plan[], \n billingCycle: 'monthly' | 'yearly'\n): Plan[] => {\n return plans.filter((plan) => {\n const planInterval = plan.interval.toLowerCase();\n if (billingCycle === 'monthly') {\n return planInterval === 'month' || planInterval === 'monthly';\n } else {\n return planInterval === 'year' || planInterval === 'yearly';\n }\n });\n};\n\n/**\n * Filter plans based on candidate units\n */\nexport const filterPlansByTier = (plans: Plan[], tierFilter: string): Plan[] => {\n if (tierFilter === 'all') {\n return plans;\n }\n\n const targetUnits = parseInt(tierFilter);\n return plans.filter((plan) => {\n // Always include Starter plan regardless of tier filter\n const planNameLc = plan.name?.toLowerCase?.() || '';\n if (planNameLc.includes('starter')) return true;\n\n const planCandidateUnits = getCandidateUnits(plan);\n return planCandidateUnits === targetUnits;\n });\n};\n\n/**\n * Check if a plan is popular (typically Growth plan)\n */\nexport const isPlanPopular = (plan: Plan): boolean => {\n const planName = plan.name.toLowerCase();\n return planName.includes('growth');\n};\n\n/**\n * Get plan description based on plan name\n */\nexport const getPlanDescription = (plan: Plan): string => {\n const planName = plan.name.toLowerCase();\n \n if (planName.includes('starter') || planName.includes('basic')) {\n return 'Ideal for solopreneurs looking to start their niche job board journey.';\n } else if (planName.includes('growth') || planName.includes('pro')) {\n return 'Ideal for creators launching their job board with powerful features and built-in scalability.';\n } else {\n return 'Perfect for creators ready to run a full-scale, smart hiring engine with AI and advanced capabilities.';\n }\n};\n\n/**\n * Format date string with optional time format\n */\nexport const formatDate = (dateString: string, format: 'date' | 'datetime' = 'date'): string => {\n const date = new Date(dateString);\n \n if (format === 'datetime') {\n return new Intl.DateTimeFormat('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n hour12: false // Military time format\n }).format(date);\n }\n \n return new Intl.DateTimeFormat('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric'\n }).format(date);\n};\n","import { useState, useEffect, useCallback } from 'react';\nimport { plansApi } from '../api/client';\nimport type { Plan } from '../types';\nimport { \n filterPlansByBillingCycle, \n filterPlansByTier, \n getUniqueCandidateUnits,\n getDropdownOptions,\n getCurrentSelectionText,\n type DropdownOption\n} from '../utils/planUtils';\n\nexport interface UsePlansReturn {\n // Data\n plans: Plan[];\n filteredPlans: Plan[];\n selectedPlan: Plan | null;\n \n // Filters\n tierFilter: string;\n billingCycle: 'monthly' | 'yearly';\n \n // Loading and error states\n loading: boolean;\n error: string | null;\n \n // Actions\n fetchPlans: () => Promise<void>;\n setSelectedPlan: (plan: Plan | null) => void;\n setTierFilter: (filter: string) => void;\n setBillingCycle: (cycle: 'monthly' | 'yearly') => void;\n clearPlans: () => void;\n clearSelectedPlan: () => void;\n \n // Computed values\n dropdownOptions: DropdownOption[];\n currentSelectionText: string;\n \n // Plan operations\n handlePlanSelect: (plan: Plan) => void;\n handleUpgrade: (externalId: string) => Promise<void>;\n}\n\nexport const usePlans = (): UsePlansReturn => {\n // Core state\n const [plans, setPlans] = useState<Plan[]>([]);\n const [filteredPlans, setFilteredPlans] = useState<Plan[]>([]);\n const [selectedPlan, setSelectedPlan] = useState<Plan | null>(null);\n \n // Filter state\n const [tierFilter, setTierFilter] = useState<string>('all');\n const [billingCycle, setBillingCycle] = useState<'monthly' | 'yearly'>('monthly');\n \n // Loading and error state\n const [loading, setLoading] = useState<boolean>(false);\n const [error, setError] = useState<string | null>(null);\n\n // Fetch plans from API\n const fetchPlans = useCallback(async () => {\n // Prevent multiple simultaneous requests\n if (loading) return;\n \n setLoading(true);\n setError(null);\n\n try {\n const response = await plansApi.getPlans();\n if (response.success && response.data) {\n const data = response.data;\n setPlans(data);\n setFilteredPlans(data);\n } else {\n setError(response.error || 'Failed to load plan information');\n }\n } catch (err) {\n // Only set error if it's not an AbortError (request cancellation)\n if (err instanceof Error && err.name !== 'AbortError') {\n console.error('Error fetching plans:', err);\n setError('Failed to load plan information. Please try again later.');\n }\n } finally {\n setLoading(false);\n }\n }, [loading]);\n\n // Set default tierFilter to lowest candidate unit when plans are loaded\n useEffect(() => {\n if (plans.length > 0 && tierFilter === 'all') {\n const uniqueUnits = getUniqueCandidateUnits(plans);\n if (uniqueUnits.length > 0) {\n setTierFilter(uniqueUnits[0].toString()); // Set to lowest value\n }\n }\n }, [plans, tierFilter]);\n\n // Filter plans based on candidate units and billing cycle\n useEffect(() => {\n let filtered = [...plans];\n\n // Filter by billing cycle (monthly/yearly)\n filtered = filterPlansByBillingCycle(filtered, billingCycle);\n\n // Filter by candidate units if not 'all'\n filtered = filterPlansByTier(filtered, tierFilter);\n\n setFilteredPlans(filtered);\n }, [plans, tierFilter, billingCycle]);\n\n // Handle plan selection\n const handlePlanSelect = useCallback((plan: Plan) => {\n setSelectedPlan(plan);\n }, []);\n\n // Handle upgrade button click\n const handleUpgrade = useCallback(async (externalId: string) => {\n if (!selectedPlan) return;\n\n try {\n const response = await plansApi.createPaymentSession(selectedPlan.code, {\n externalId: externalId,\n });\n if (response.success && response.data?.checkoutUrl) {\n window.location.href = response.data.checkoutUrl;\n } else {\n console.error('Failed to create payment session:', response.error);\n alert('Failed to initiate payment. Please try again.');\n }\n } catch (error) {\n console.error('Error creating payment session:', error);\n alert('An error occurred. Please try again.');\n }\n }, [selectedPlan]);\n\n // Clear plans data\n const clearPlans = useCallback(() => {\n setPlans([]);\n setFilteredPlans([]);\n setSelectedPlan(null);\n setError(null);\n setTierFilter('all');\n }, []);\n\n // Clear selected plan only\n const clearSelectedPlan = useCallback(() => {\n setSelectedPlan(null);\n }, []);\n\n // Computed values\n const dropdownOptions = getDropdownOptions(plans);\n const currentSelectionText = getCurrentSelectionText(tierFilter, plans);\n\n return {\n // Data\n plans,\n filteredPlans,\n selectedPlan,\n \n // Filters\n tierFilter,\n billingCycle,\n \n // Loading and error states\n loading,\n error,\n \n // Actions\n fetchPlans,\n setSelectedPlan,\n setTierFilter,\n setBillingCycle,\n clearPlans,\n clearSelectedPlan,\n \n // Computed values\n dropdownOptions,\n currentSelectionText,\n \n // Plan operations\n handlePlanSelect,\n handleUpgrade,\n };\n};\n","import { useState, useEffect, useCallback, useRef } from 'react';\nimport { transactionApi } from '../api/client';\nimport type { Transaction, TransactionFilters, PaginatedResponse, ApiResponse } from '../types';\n\nexport interface UseTransactionsProps {\n externalId: string;\n initialFilters?: TransactionFilters;\n autoFetch?: boolean;\n}\n\nexport interface UseTransactionsReturn {\n transactions: Transaction[];\n loading: boolean;\n error: string | null;\n filters: TransactionFilters;\n meta: {\n currentPage: number;\n totalPages: number;\n totalItems: number;\n itemsPerPage: number;\n hasNextPage: boolean;\n hasPreviousPage: boolean;\n } | null;\n fetchTransactions: () => Promise<void>;\n updateFilters: (newFilters: Partial<TransactionFilters>) => void;\n clearFilters: () => void;\n refetch: () => Promise<void>;\n}\n\nconst DEFAULT_FILTERS: TransactionFilters = {\n page: 1,\n limit: 10,\n};\n\n// Helper function to apply frontend filters\nconst applyFrontendFilters = (transactions: Transaction[], filters: TransactionFilters): Transaction[] => {\n let filtered = [...transactions];\n\n // Filter by status (only if status filter is set and not empty)\n if (filters.status && filters.status.trim() !== '') {\n filtered = filtered.filter(transaction => \n transaction.transactionStatus.toLowerCase() === filters.status?.toLowerCase()\n );\n }\n\n // Filter by date range (only if dates are set)\n if (filters.startDate && filters.startDate.trim() !== '') {\n const startDate = new Date(filters.startDate);\n filtered = filtered.filter(transaction => {\n const transactionDate = new Date(transaction.transactionDate || transaction.membershipDate);\n return transactionDate >= startDate;\n });\n }\n\n if (filters.endDate && filters.endDate.trim() !== '') {\n const endDate = new Date(filters.endDate);\n filtered = filtered.filter(transaction => {\n const transactionDate = new Date(transaction.transactionDate || transaction.membershipDate);\n return transactionDate <= endDate;\n });\n }\n\n return filtered;\n};\n\n// Helper function to apply frontend pagination\nconst applyFrontendPagination = (transactions: Transaction[], filters: TransactionFilters) => {\n const currentPage = filters.page || 1;\n const limit = filters.limit || 10;\n const startIndex = (currentPage - 1) * limit;\n const endIndex = startIndex + limit;\n const paginatedTransactions = transactions.slice(startIndex, endIndex);\n\n \n\n return {\n data: paginatedTransactions,\n meta: {\n currentPage,\n totalPages: Math.ceil(transactions.length / limit),\n totalItems: transactions.length,\n itemsPerPage: limit,\n hasNextPage: endIndex < transactions.length,\n hasPreviousPage: currentPage > 1,\n }\n };\n};\n\nexport const useTransactions = ({\n externalId,\n initialFilters = {},\n autoFetch = false,\n}: UseTransactionsProps): UseTransactionsReturn => {\n const [transactions, setTransactions] = useState<Transaction[]>([]);\n const [allTransactions, setAllTransactions] = useState<Transaction[]>([]); // Store all transactions for frontend pagination\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [filters, setFilters] = useState<TransactionFilters>({\n ...DEFAULT_FILTERS,\n ...initialFilters,\n });\n const [meta, setMeta] = useState<{\n currentPage: number;\n totalPages: number;\n totalItems: number;\n itemsPerPage: number;\n hasNextPage: boolean;\n hasPreviousPage: boolean;\n } | null>(null);\n const [isBackendPaginated, setIsBackendPaginated] = useState<boolean>(false);\n const hasAutoFetchedRef = useRef(false);\n\n const fetchTransactions = useCallback(async () => {\n if (!externalId) return;\n\n setLoading(true);\n setError(null);\n\n try {\n const response: ApiResponse<PaginatedResponse<Transaction> | Transaction[]> = await transactionApi.getTransactions(\n externalId,\n filters\n );\n\n if (response.success && response.data) {\n \n \n // Handle both paginated and non-paginated responses\n if (Array.isArray(response.data)) {\n // Non-paginated response - handle frontend pagination\n setIsBackendPaginated(false);\n setAllTransactions(response.data);\n \n // TEMPORARY: Skip filtering for debugging - just show all data\n setTransactions(response.data);\n setMeta({\n currentPage: 1,\n totalPages: 1,\n totalItems: response.data.length,\n itemsPerPage: response.data.length,\n hasNextPage: false,\n hasPreviousPage: false,\n });\n \n // Apply frontend filtering and pagination (commented out for debugging)\n // const filteredTransactions = applyFrontendFilters(response.data, filters);\n // const paginatedResult = applyFrontendPagination(filteredTransactions, filters);\n \n \n \n // setTransactions(paginatedResult.data);\n // setMeta(paginatedResult.meta);\n } else {\n // Paginated response from backend\n setIsBackendPaginated(true);\n const paginatedData = response.data as PaginatedResponse<Transaction>;\n setTransactions(paginatedData.data);\n setMeta(paginatedData.meta);\n setAllTransactions([]); // Clear all transactions as backend handles pagination\n }\n } else {\n setError(response.error || 'Failed to fetch transactions');\n setTransactions([]);\n setAllTransactions([]);\n setMeta(null);\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'An unexpected error occurred');\n setTransactions([]);\n setAllTransactions([]);\n setMeta(null);\n } finally {\n setLoading(false);\n }\n }, [externalId, filters]);\n\n const updateFilters = useCallback((newFilters: Partial<TransactionFilters>) => {\n setFilters(prev => ({\n ...prev,\n ...newFilters,\n // Reset to page 1 when filters change (except when explicitly setting page)\n page: newFilters.page !== undefined ? newFilters.page : 1,\n }));\n }, []);\n\n // Handle frontend pagination when backend doesn't provide pagination\n useEffect(() => {\n if (!isBackendPaginated && allTransactions.length > 0) {\n const filteredTransactions = applyFrontendFilters(allTransactions, filters);\n const paginatedResult = applyFrontendPagination(filteredTransactions, filters);\n \n setTransactions(paginatedResult.data);\n setMeta(paginatedResult.meta);\n }\n }, [filters, allTransactions, isBackendPaginated]);\n\n const clearFilters = useCallback(() => {\n setFilters(DEFAULT_FILTERS);\n }, []);\n\n const refetch = useCallback(async () => {\n await fetchTransactions();\n }, [fetchTransactions]);\n\n // Auto-fetch once per externalId if enabled\n useEffect(() => {\n if (autoFetch && externalId && !hasAutoFetchedRef.current) {\n hasAutoFetchedRef.current = true;\n fetchTransactions();\n }\n }, [autoFetch, externalId, fetchTransactions]);\n\n // Fetch when filters change (only for backend pagination or initial load)\n useEffect(() => {\n if (!autoFetch) return; // Only auto-refetch if autoFetch is enabled\n \n // For backend pagination, refetch on filter changes\n // For frontend pagination, only fetch on initial load or when non-pagination filters change\n const hasNonPaginationFilters = (\n filters.startDate !== undefined ||\n filters.endDate !== undefined ||\n filters.status !== undefined\n );\n\n // In backend-paginated mode: always refetch on filter changes\n // In frontend mode: fetch only if we don't have data yet (initial load),\n // even if filters are present. Once data is loaded, do not refetch.\n const shouldFetch = isBackendPaginated || (allTransactions.length === 0 && hasNonPaginationFilters);\n \n if (shouldFetch) {\n const timeoutId = setTimeout(() => {\n fetchTransactions();\n }, 300); // Debounce API calls\n\n return () => clearTimeout(timeoutId);\n }\n }, [filters, fetchTransactions, autoFetch, isBackendPaginated, allTransactions.length]);\n\n return {\n transactions,\n loading,\n error,\n filters,\n meta,\n fetchTransactions,\n updateFilters,\n clearFilters,\n refetch,\n };\n};\n","import { useState, useCallback } from 'react';\nimport type { PaginationMeta } from '../types';\n\nexport interface UsePaginationProps {\n initialPage?: number;\n initialLimit?: number;\n}\n\nexport interface UsePaginationReturn {\n currentPage: number;\n limit: number;\n meta: PaginationMeta | null;\n goToPage: (page: number) => void;\n goToNextPage: () => void;\n goToPreviousPage: () => void;\n goToFirstPage: () => void;\n goToLastPage: () => void;\n setLimit: (newLimit: number) => void;\n setMeta: (meta: PaginationMeta) => void;\n reset: () => void;\n}\n\nexport const usePagination = ({\n initialPage = 1,\n initialLimit = 10,\n}: UsePaginationProps = {}): UsePaginationReturn => {\n const [currentPage, setCurrentPage] = useState(initialPage);\n const [limit, setLimitState] = useState(initialLimit);\n const [meta, setMeta] = useState<PaginationMeta | null>(null);\n\n const goToPage = useCallback((page: number) => {\n if (meta) {\n const validPage = Math.max(1, Math.min(page, meta.totalPages));\n setCurrentPage(validPage);\n } else {\n setCurrentPage(Math.max(1, page));\n }\n }, [meta]);\n\n const goToNextPage = useCallback(() => {\n if (meta && meta.hasNextPage) {\n setCurrentPage(prev => prev + 1);\n }\n }, [meta]);\n\n const goToPreviousPage = useCallback(() => {\n if (meta && meta.hasPreviousPage) {\n setCurrentPage(prev => prev - 1);\n }\n }, [meta]);\n\n const goToFirstPage = useCallback(() => {\n setCurrentPage(1);\n }, []);\n\n const goToLastPage = useCallback(() => {\n if (meta) {\n setCurrentPage(meta.totalPages);\n }\n }, [meta]);\n\n const setLimit = useCallback((newLimit: number) => {\n setLimitState(newLimit);\n setCurrentPage(1); // Reset to first page when changing limit\n }, []);\n\n const reset = useCallback(() => {\n setCurrentPage(initialPage);\n setLimitState(initialLimit);\n setMeta(null);\n }, [initialPage, initialLimit]);\n\n return {\n currentPage,\n limit,\n meta,\n goToPage,\n goToNextPage,\n goToPreviousPage,\n goToFirstPage,\n goToLastPage,\n setLimit,\n setMeta,\n reset,\n };\n};\n","import { useState, useCallback } from 'react';\nimport { subscriptionApi } from '../api/client';\nimport type { ApiResponse } from '../types';\n\nexport interface UseCancelSubscriptionProps {\n onSuccess?: () => void;\n onError?: (error: string) => void;\n}\n\nexport interface CancelSubscriptionOptions {\n cancellationMode?: string;\n cancellationReason?: string;\n}\n\nexport interface UseCancelSubscriptionReturn {\n loading: boolean;\n error: string | null;\n cancelSubscription: (externalId: string, options?: CancelSubscriptionOptions) => Promise<boolean>;\n reset: () => void;\n}\n\nexport const useCancelSubscription = ({\n onSuccess,\n onError,\n}: UseCancelSubscriptionProps = {}): UseCancelSubscriptionReturn => {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const cancelSubscription = useCallback(async (externalId: string, options?: CancelSubscriptionOptions): Promise<boolean> => {\n if (!externalId) {\n const errorMsg = 'External ID is required';\n setError(errorMsg);\n onError?.(errorMsg);\n return false;\n }\n\n setLoading(true);\n setError(null);\n\n try {\n const response: ApiResponse<any> = await subscriptionApi.cancelSubscription(externalId, options);\n\n if (response.success) {\n onSuccess?.();\n return true;\n } else {\n const errorMsg = response.error || 'Failed to cancel subscription';\n setError(errorMsg);\n onError?.(errorMsg);\n return false;\n }\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : 'An unexpected error occurred';\n setError(errorMsg);\n onError?.(errorMsg);\n return false;\n } finally {\n setLoading(false);\n }\n }, [onSuccess, onError]);\n\n const reset = useCallback(() => {\n setLoading(false);\n setError(null);\n }, []);\n\n return {\n loading,\n error,\n cancelSubscription,\n reset,\n };\n};\n","import { useState, useCallback } from 'react';\nimport { getApiBaseUrl, getHeaders, ENDPOINTS } from '../api/config';\nimport type { ApiResponse } from '../types';\n\nexport interface UseCustomerPortalProps {\n onSuccess?: (url: string) => void;\n onError?: (error: string) => void;\n}\n\nexport interface UseCustomerPortalReturn {\n loading: boolean;\n error: string | null;\n openCustomerPortal: (externalId: string) => Promise<boolean>;\n reset: () => void;\n}\n\n// Generic API request handler for customer portal\nasync function apiRequest<T>(\n endpoint: string, \n method: string = 'GET', \n data?: unknown\n): Promise<ApiResponse<T>> {\n try {\n const url = `${getApiBaseUrl()}${endpoint}`;\n const options: RequestInit = {\n method,\n headers: getHeaders(),\n credentials: 'include',\n };\n\n if (data) {\n options.body = JSON.stringify(data);\n }\n\n const response = await fetch(url, options);\n const result = await response.json();\n\n if (!response.ok) {\n return { success: false, error: result.message || 'An error occurred' };\n }\n\n return { success: true, data: result };\n } catch (error) {\n console.error('API request failed:', error);\n return { \n success: false, \n error: error instanceof Error ? error.message : 'Unknown error occurred'\n };\n }\n}\n\nexport const useCustomerPortal = ({\n onSuccess,\n onError,\n}: UseCustomerPortalProps = {}): UseCustomerPortalReturn => {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const openCustomerPortal = useCallback(async (externalId: string): Promise<boolean> => {\n if (!externalId) {\n const errorMsg = 'External ID is required';\n setError(errorMsg);\n onError?.(errorMsg);\n return false;\n }\n\n setLoading(true);\n setError(null);\n\n try {\n const returnUrl = `${window.location.origin}/dashboard`;\n \n const response: ApiResponse<{ url: string }> = await apiRequest(\n `${ENDPOINTS.CUSTOMER}/${externalId}/portal`,\n 'POST',\n { returnUrl }\n );\n const portalResponse: any = response.data;\n const portalUrl: string | undefined = portalResponse?.data?.url ?? portalResponse?.url;\n\n if (response.success && portalUrl) {\n onSuccess?.(portalUrl);\n // Redirect to Stripe Customer Portal\n window.location.href = portalUrl;\n return true;\n } else {\n const errorMsg =\n response.error ||\n portalResponse?.error ||\n portalResponse?.message ||\n 'Failed to open customer portal';\n setError(errorMsg);\n onError?.(errorMsg);\n return false;\n }\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : 'An unexpected error occurred';\n setError(errorMsg);\n onError?.(errorMsg);\n return false;\n } finally {\n setLoading(false);\n }\n }, [onSuccess, onError]);\n\n const reset = useCallback(() => {\n setLoading(false);\n setError(null);\n }, []);\n\n return {\n loading,\n error,\n openCustomerPortal,\n reset,\n };\n};\n","import React, { createContext, useContext, useState } from 'react';\nimport type { ReactNode } from 'react';\n\ninterface UpgradeContextType {\n isUpgradeSummaryVisible: boolean;\n setUpgradeSummaryVisible: (visible: boolean) => void;\n clearUpgradeSelection: () => void;\n}\n\nconst UpgradeContext = createContext<UpgradeContextType | undefined>(undefined);\n\nexport interface UpgradeProviderProps {\n children: ReactNode;\n}\n\nexport const UpgradeProvider: React.FC<UpgradeProviderProps> = ({ children }) => {\n const [isUpgradeSummaryVisible, setIsUpgradeSummaryVisible] = useState(false);\n\n const setUpgradeSummaryVisible = (visible: boolean) => {\n setIsUpgradeSummaryVisible(visible);\n };\n\n const clearUpgradeSelection = () => {\n setIsUpgradeSummaryVisible(false);\n };\n\n return (\n <UpgradeContext.Provider\n value={{\n isUpgradeSummaryVisible,\n setUpgradeSummaryVisible,\n clearUpgradeSelection,\n }}\n >\n {children}\n </UpgradeContext.Provider>\n );\n};\n\nexport const useUpgrade = (): UpgradeContextType => {\n const context = useContext(UpgradeContext);\n if (context === undefined) {\n throw new Error('useUpgrade must be used within an UpgradeProvider');\n }\n return context;\n};\n","import React from 'react';\n\nexport interface BillingCycleToggleProps {\n billingCycle: 'monthly' | 'yearly';\n onBillingCycleChange: (cycle: 'monthly' | 'yearly') => void;\n className?: string;\n}\n\nexport const BillingCycleToggle: React.FC<BillingCycleToggleProps> = ({\n billingCycle,\n onBillingCycleChange,\n className,\n}) => {\n return (\n <div \n className=\"inline-flex rounded-lg p-1\"\n style={{ \n backgroundColor: 'var(--subos-muted, #f1f5f9)',\n border: '1px solid var(--subos-border, #e2e8f0)'\n }}\n >\n <button\n onClick={() => onBillingCycleChange('monthly')}\n className={`px-6 py-2 rounded-md text-sm font-medium transition-all duration-200 ${className || ''}`}\n style={billingCycle === 'monthly' ? {\n backgroundColor: 'var(--subos-primary-500, #ef4444)',\n color: 'white',\n boxShadow: '0 2px 4px 0 rgba(0, 0, 0, 0.1)',\n fontWeight: '600'\n } : {\n backgroundColor: 'transparent',\n color: 'var(--subos-muted-foreground, #64748b)',\n fontWeight: '500'\n }}\n onMouseEnter={billingCycle !== 'monthly' ? (e) => {\n e.currentTarget.style.color = 'var(--subos-foreground, #1e293b)';\n e.currentTarget.style.backgroundColor = 'rgba(255, 255, 255, 0.8)';\n } : undefined}\n onMouseLeave={billingCycle !== 'monthly' ? (e) => {\n e.currentTarget.style.color = 'var(--subos-muted-foreground, #64748b)';\n e.currentTarget.style.backgroundColor = 'transparent';\n } : undefined}\n >\n Monthly\n </button>\n <button\n onClick={() => onBillingCycleChange('yearly')}\n className={`px-6 py-2 rounded-md text-sm font-medium transition-all duration-200 ${className || ''}`}\n style={billingCycle === 'yearly' ? {\n backgroundColor: 'var(--subos-primary-500, #ef4444)',\n color: 'white',\n boxShadow: '0 2px 4px 0 rgba(0, 0, 0, 0.1)',\n fontWeight: '600'\n } : {\n backgroundColor: 'transparent',\n color: 'var(--subos-muted-foreground, #64748b)',\n fontWeight: '500'\n }}\n onMouseEnter={billingCycle !== 'yearly' ? (e) => {\n e.currentTarget.style.color = 'var(--subos-foreground, #1e293b)';\n e.currentTarget.style.backgroundColor = 'rgba(255, 255, 255, 0.8)';\n } : undefined}\n onMouseLeave={billingCycle !== 'yearly' ? (e) => {\n e.currentTarget.style.color = 'var(--subos-muted-foreground, #64748b)';\n e.currentTarget.style.backgroundColor = 'transparent';\n } : undefined}\n >\n Yearly\n </button>\n </div>\n );\n};\n\n","import React, { useRef, useEffect } from 'react';\nimport type { DropdownOption } from '../../utils/planUtils';\n\nexport interface TierFilterDropdownProps {\n isOpen: boolean;\n onToggle: () => void;\n currentSelectionText: string;\n options: DropdownOption[];\n selectedValue: string;\n onSelect: (value: string) => void;\n}\n\nexport const TierFilterDropdown: React.FC<TierFilterDropdownProps> = ({\n isOpen,\n onToggle,\n currentSelectionText,\n options,\n selectedValue,\n onSelect,\n}) => {\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n // Handle clicking outside dropdown\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n if (isOpen) {\n onToggle();\n }\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isOpen, onToggle]);\n\n const handleOptionSelect = (value: string) => {\n onSelect(value);\n onToggle(); // Close dropdown\n };\n\n return (\n <div className=\"relative\" ref={dropdownRef}>\n <button\n onClick={onToggle}\n className=\"w-full min-w-[280px] px-4 py-3 border rounded-lg text-left focus:outline-none focus:ring-2 flex items-center justify-between transition-all duration-200\"\n style={{\n backgroundColor: 'var(--subos-background, #ffffff)',\n borderColor: isOpen ? 'var(--subos-primary-500, #3f51b5)' : 'var(--subos-border, #e2e8f0)',\n color: 'var(--subos-foreground, #1e293b)',\n boxShadow: isOpen ? '0 0 0 1px var(--subos-primary-500, #3f51b5)' : 'none'\n }}\n onMouseEnter={(e) => {\n if (!isOpen) {\n e.currentTarget.style.borderColor = 'var(--subos-muted-foreground, #64748b)';\n }\n }}\n onMouseLeave={(e) => {\n if (!isOpen) {\n e.currentTarget.style.borderColor = 'var(--subos-border, #e2e8f0)';\n }\n }}\n >\n <span style={{ color: 'var(--subos-foreground, #1e293b)' }}>{currentSelectionText}</span>\n <svg\n className={`w-5 h-5 transition-transform duration-200 ${isOpen ? 'rotate-180' : ''}`}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n style={{ color: 'var(--subos-muted-foreground, #64748b)' }}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n\n {isOpen && (\n <div \n className=\"absolute top-full left-0 w-full min-w-[280px] mt-1 border rounded-lg z-50\"\n style={{\n backgroundColor: 'var(--subos-background, #ffffff)',\n borderColor: 'var(--subos-border, #e2e8f0)',\n boxShadow: 'var(--subos-shadow-card, 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06))'\n }}\n >\n {options.map((option) => (\n <button\n key={option.value}\n onClick={() => handleOptionSelect(option.value)}\n className=\"w-full px-4 py-3 text-left transition-colors first:rounded-t-lg last:rounded-b-lg\"\n style={{\n backgroundColor: selectedValue === option.value \n ? 'var(--subos-primary-50, #eff6ff)' \n : 'transparent',\n color: selectedValue === option.value \n ? 'var(--subos-primary-700, #1d4ed8)' \n : 'var(--subos-foreground, #1e293b)'\n }}\n onMouseEnter={(e) => {\n if (selectedValue !== option.value) {\n e.currentTarget.style.backgroundColor = 'var(--subos-accent, #f8fafc)';\n }\n }}\n onMouseLeave={(e) => {\n if (selectedValue !== option.value) {\n e.currentTarget.style.backgroundColor = 'transparent';\n }\n }}\n >\n <div className=\"flex flex-col\">\n <span className=\"font-medium\">\n {option.label}\n </span>\n </div>\n </button>\n ))}\n </div>\n )}\n </div>\n );\n};\n","import React from 'react';\n\ninterface CheckIconProps {\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport const CheckIcon: React.FC<CheckIconProps> = ({ className = \"w-5 h-5\", style }) => {\n return (\n <svg \n className={className} \n style={style}\n fill=\"currentColor\" \n viewBox=\"0 0 20 20\" \n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path \n fillRule=\"evenodd\" \n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\" \n clipRule=\"evenodd\" \n />\n </svg>\n );\n};\n","import React from 'react';\nimport type { Plan } from '../../types';\nimport { CheckIcon } from '../icons/CheckIcon';\nimport { getPlanFeatures, getPlanDescription, isPlanPopular } from '../../utils/planUtils';\n\nexport interface PlanCardProps {\n plan: Plan;\n isSelected: boolean;\n billingCycle: 'monthly' | 'yearly';\n onSelect: (plan: Plan) => void;\n // Indicates if this plan is the user's currently active subscription plan\n isActive?: boolean;\n comparisonUrl?: string;\n}\n\nexport const PlanCard: React.FC<PlanCardProps> = ({\n plan,\n isSelected,\n billingCycle,\n onSelect,\n isActive = false,\n comparisonUrl = 'https://knovator.com/products/job-board/pricing/'\n}) => {\n const features = getPlanFeatures(plan);\n const description = getPlanDescription(plan);\n const isPopular = isPlanPopular(plan);\n const isFree = Number(plan.fixedCost) === 0;\n\n return (\n <div\n onClick={isFree || isActive ? undefined : () => onSelect(plan)}\n className={`relative border rounded-lg p-6 transition-all flex flex-col h-full font-subos ${\n !isFree && !isActive ? 'cursor-pointer' : 'cursor-default'\n } ${\n !isFree && isSelected && !isActive\n ? 'border-primary-500 bg-primary-50'\n : 'border-subos-border'\n } ${!isFree && !isActive ? 'hover:border-subos-muted-foreground' : ''} ${isPopular ? 'border-primary-500' : ''}`}\n style={{ \n backgroundColor: !isFree && isSelected && !isActive ? 'var(--subos-primary-50, #e8eaf6)' : 'var(--subos-background, #ffffff)',\n borderColor: !isFree && isSelected && !isActive ? 'var(--subos-primary-500, #3f51b5)' : \n isPopular ? 'var(--subos-primary-500, #3f51b5)' : 'var(--subos-border, #dee2e6)',\n color: 'var(--subos-foreground, inherit)'\n }}\n >\n {isPopular && (\n <div className=\"absolute -top-3 left-1/2 transform -translate-x-1/2\">\n <span \n className=\"text-white px-3 py-1 rounded-full text-xs font-medium\"\n style={{ backgroundColor: 'var(--subos-primary-500, #3f51b5)' }}\n >\n Most Popular\n </span>\n </div>\n )}\n \n {!isFree && isSelected && !isActive && (\n <div className=\"absolute top-4 right-4\">\n <div \n className=\"text-white rounded-full p-1\"\n style={{ backgroundColor: 'var(--subos-primary-500, #3f51b5)' }}\n >\n <CheckIcon className=\"w-4 h-4\" />\n </div>\n </div>\n )}\n \n {/* {isActive && (\n <div className=\"absolute top-4 right-4\">\n <div \n className=\"text-white rounded-full p-1\"\n style={{ backgroundColor: 'var(--subos-muted-foreground, #6c757d)' }}\n >\n <CheckIcon className=\"w-4 h-4\" />\n </div>\n </div>\n )} */}\n \n <div className=\"mb-0\">\n <h4 \n className=\"text-xl font-bold mb-2\" \n style={{ \n fontSize: 'var(--subos-font-size-plan-card-title, 1.25rem)',\n fontWeight: 'var(--subos-font-weight-plan-card-title, 700)',\n color: 'var(--subos-color-plan-card-title, var(--subos-foreground, inherit))' \n }}\n >\n {plan.name}\n </h4>\n <p \n className=\"text-sm mb-1\" \n style={{ \n fontSize: 'var(--subos-font-size-plan-card-description, 0.875rem)',\n fontWeight: 'var(--subos-font-weight-plan-card-description, 400)',\n color: 'var(--subos-color-plan-card-description, var(--subos-muted-foreground, #6c757d))' \n }}\n >\n {description}\n </p>\n \n <div className=\"mb-0\">\n {isFree ? (\n <span className=\"text-3xl font-bold\" style={{ color: 'var(--subos-primary-500, #3f51b5)' }}>Free</span>\n ) : (\n <>\n <span className=\"text-3xl font-bold\" style={{ color: 'var(--subos-primary-500, #3f51b5)' }}>\n ${plan.fixedCost}\n </span>\n <span className=\"ml-1\" style={{ color: 'var(--subos-muted-foreground, #6c757d)' }}>\n per {billingCycle === 'yearly' ? 'year' : 'month'}\n </span>\n </>\n )}\n </div>\n </div>\n\n {/* Horizontal line before features */}\n <div className=\"mb-6\">\n <hr className=\"mt-0 mb-0\" style={{ borderColor: 'var(--subos-border,rgb(2, 48, 94))', marginTop: 0, marginBottom: 0 }} />\n </div>\n \n <ul className=\"space-y-2 mb-6 flex-grow\">\n {features.map((feature, index) => (\n <li key={index} className=\"flex items-center text-sm\">\n <div\n className=\"mr-2 flex-shrink-0 rounded-full p-0.5\"\n style={{ backgroundColor: isActive ? 'var(--subos-muted-foreground,rgb(148, 150, 153))' : 'var(--subos-primary-500, #3f51b5)' }}\n >\n <CheckIcon className=\"w-3 h-3 text-white\" />\n </div>\n <span \n style={{ \n fontSize: 'var(--subos-font-size-plan-card-feature, 0.875rem)',\n fontWeight: 'var(--subos-font-weight-plan-card-feature, 400)',\n color: 'var(--subos-color-plan-card-feature, var(--subos-foreground, inherit))' \n }}\n >\n {feature}\n </span>\n </li>\n ))}\n </ul>\n\n\n {/* Informational text for free plans */}\n {isFree && (\n <div className=\"mb-4\">\n <p \n className=\"text-sm mb-4\" \n style={{ \n fontSize: 'var(--subos-font-size-plan-card-info, 0.875rem)',\n fontWeight: 'var(--subos-font-weight-plan-card-info, 400)',\n color: 'var(--subos-color-plan-card-info, var(--subos-muted-foreground, #6c757d))' \n }}\n >\n The mentioned plan will become the default once the current subscription expires, provided the tier requirement is met.\n </p>\n </div>\n )}\n \n <div className=\"mt-auto space-y-3\">\n {!isFree && (\n isActive ? (\n <button\n className=\"w-full border py-2 px-4 rounded-md font-medium cursor-default\"\n style={{ \n backgroundColor: 'var(--subos-muted, #f8f9fa)',\n borderColor: 'var(--subos-border, #dee2e6)',\n color: 'var(--subos-muted-foreground, #6c757d)'\n }}\n disabled\n >\n Active\n </button>\n ) : isSelected ? (\n <button \n className=\"w-full subos-btn-primary text-white py-2 px-4 rounded-md font-medium\"\n >\n Selected\n </button>\n ) : (\n <button \n className=\"w-full border py-2 px-4 rounded-md font-medium transition-colors\"\n style={{ \n backgroundColor: 'var(--subos-primary-500, #3f51b5)',\n borderColor: 'var(--subos-primary-500, #3f51b5)',\n color: 'white'\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--subos-primary-600, #303f9f)';\n e.currentTarget.style.borderColor = 'var(--subos-primary-600, #303f9f)';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--subos-primary-500, #3f51b5)';\n e.currentTarget.style.borderColor = 'var(--subos-primary-500, #3f51b5)';\n }}\n >\n Select\n </button>\n )\n )}\n \n {/* Show Plan Comparison button - only if comparisonUrl is provided */}\n {comparisonUrl && !isFree && (\n <button\n className=\"w-full py-2 px-4 font-medium text-sm transition-colors\"\n style={{ \n backgroundColor: 'transparent',\n border: 'none',\n color: 'var(--subos-primary-500, #3f51b5)'\n }}\n onClick={(e) => {\n e.stopPropagation();\n window.open(comparisonUrl, '_blank');\n }}\n >\n Show Plan Comparision\n </button>\n )}\n </div>\n </div>\n );\n};\n\n","interface IconProps {\n className?: string;\n}\n\nexport const SearchIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\" />\n </svg>\n);\n\nexport const FilterIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 4a1 1 0 011-1h16a1 1 0 011 1v2.586a1 1 0 01-.293.707l-6.414 6.414a1 1 0 00-.293.707V17l-4 4v-6.586a1 1 0 00-.293-.707L3.293 7.293A1 1 0 013 6.586V4z\" />\n </svg>\n);\n\nexport const TrendingUpIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 7h8m0 0v8m0-8l-8 8-4-4-6 6\" />\n </svg>\n);\n\nexport const LoadingSpinner: React.FC<IconProps> = ({ className = \"w-8 h-8\" }) => (\n <svg className={`${className} animate-spin`} fill=\"none\" viewBox=\"0 0 24 24\">\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\"></circle>\n <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n </svg>\n);\n\nexport const CheckCircleIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path fillRule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\" clipRule=\"evenodd\" />\n </svg>\n);\n\nexport const AddIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 4v16m8-8H4\" />\n </svg>\n);\n\nexport const CreditCardIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 10h18M7 15h1m4 0h1m-7 4h12a3 3 0 003-3V8a3 3 0 00-3-3H6a3 3 0 00-3 3v8a3 3 0 003 3z\" />\n </svg>\n);\n\nexport const DeleteIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16\" />\n </svg>\n);\n\nexport const DownloadIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\" />\n </svg>\n);\n\nexport const DashboardIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z\" />\n </svg>\n);\n\nexport const EmailIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 8l7.89 4.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\" />\n </svg>\n);\n\nexport const ReceiptIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 12h6m-6 4h6m2 5l-5-5-4 4-3-3m6-6V4a2 2 0 00-2-2H5a2 2 0 00-2 2v16l3-3 3 3 3-3 3 3z\" />\n </svg>\n);\n\nexport const StarBorderIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z\" />\n </svg>\n);\n\nexport const UpgradeIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 10l7-7m0 0l7 7m-7-7v18\" />\n </svg>\n);\n\nexport const CancelIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n);\n\nexport const AddCardIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 6v6m0 0v6m0-6h6m-6 0H6m12-3h3a3 3 0 013 3v8a3 3 0 01-3 3H6a3 3 0 01-3-3v-8a3 3 0 013-3h3\" />\n </svg>\n);\n","import React from 'react';\nimport type { Plan } from '../../types';\nimport { PlanCard } from './PlanCard';\nimport { LoadingSpinner } from '../icons/CommonIcons';\n\nexport interface PlansGridProps {\n plans: Plan[];\n selectedPlan: Plan | null;\n billingCycle: 'monthly' | 'yearly';\n loading: boolean;\n error: string | null;\n onPlanSelect: (plan: Plan) => void;\n // Currently active subscription plan code to mark the active plan in the grid\n activePlanCode?: string;\n}\n\nexport const PlansGrid: React.FC<PlansGridProps> = ({\n plans,\n selectedPlan,\n billingCycle,\n loading,\n error,\n onPlanSelect,\n activePlanCode,\n}) => {\n if (loading) {\n return (\n <div className=\"flex justify-center py-8\">\n <LoadingSpinner className=\"h-10 w-10 text-primary animate-spin\" />\n </div>\n );\n }\n\n if (error) {\n return (\n <div className=\"p-4 bg-red-50 border border-red-200 text-red-700 rounded-md\">\n {error}\n </div>\n );\n }\n\n return (\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-6\">\n {plans.map((plan) => (\n <PlanCard\n key={plan.id}\n plan={plan}\n isSelected={selectedPlan?.id === plan.id}\n billingCycle={billingCycle}\n onSelect={onPlanSelect}\n isActive={activePlanCode ? plan.code === activePlanCode : false}\n />\n ))}\n </div>\n );\n};\n\n","import React, { useState } from 'react';\nimport type { Plan } from '../../types';\nimport type { DropdownOption } from '../../utils/planUtils';\nimport { BillingCycleToggle } from './BillingCycleToggle';\nimport { TierFilterDropdown } from './TierFilterDropdown';\nimport { PlansGrid } from './PlansGrid';\n\nexport interface PlanSelectorProps {\n // Plans data\n plans: Plan[];\n selectedPlan: Plan | null;\n \n // Filters\n tierFilter: string;\n billingCycle: 'monthly' | 'yearly';\n \n // Loading and error states\n loading: boolean;\n error: string | null;\n \n // Computed values\n dropdownOptions: DropdownOption[];\n currentSelectionText: string;\n \n // Event handlers\n onPlanSelect: (plan: Plan) => void;\n onTierFilterChange: (filter: string) => void;\n onBillingCycleChange: (cycle: 'monthly' | 'yearly') => void;\n // Currently active subscription plan code to disable and mark Active\n activePlanCode?: string;\n}\n\nexport const PlanSelector: React.FC<PlanSelectorProps> = ({\n plans,\n selectedPlan,\n tierFilter,\n billingCycle,\n loading,\n error,\n dropdownOptions,\n currentSelectionText,\n onPlanSelect,\n onTierFilterChange,\n onBillingCycleChange,\n activePlanCode,\n}) => {\n const [isDropdownOpen, setIsDropdownOpen] = useState<boolean>(false);\n\n const handleDropdownToggle = () => {\n setIsDropdownOpen(!isDropdownOpen);\n };\n\n const handleTierSelect = (value: string) => {\n onTierFilterChange(value);\n setIsDropdownOpen(false);\n };\n\n return (\n <div className=\"mb-6\">\n <h3 \n className=\"text-lg font-semibold mb-2\"\n style={{\n fontSize: 'var(--subos-font-size-plan-title, 1.125rem)',\n fontWeight: 'var(--subos-font-weight-plan-title, 600)',\n color: 'var(--subos-color-plan-title, inherit)'\n }}\n >\n Upgrade your plan\n </h3>\n <div className=\"flex items-center gap-4 justify-between flex-wrap mb-6\">\n <p \n className=\"text-gray-600 mb-0 flex-1 min-w-[260px]\"\n style={{\n fontSize: 'var(--subos-font-size-plan-description, 1rem)',\n fontWeight: 'var(--subos-font-weight-plan-description, 400)',\n color: 'var(--subos-color-plan-description, #6c757d)'\n }}\n >\n Enhance your experience with exclusive access - unlock more features and possibilities!\n </p>\n\n <div className=\"flex items-center gap-4\">\n {/* Custom Tier Filter Dropdown */}\n <TierFilterDropdown\n isOpen={isDropdownOpen}\n onToggle={handleDropdownToggle}\n currentSelectionText={currentSelectionText}\n options={dropdownOptions}\n selectedValue={tierFilter}\n onSelect={handleTierSelect}\n />\n\n {/* Billing Toggle */}\n <BillingCycleToggle\n billingCycle={billingCycle}\n onBillingCycleChange={onBillingCycleChange}\n />\n </div>\n </div>\n\n {/* Plans Grid */}\n <PlansGrid\n plans={plans}\n selectedPlan={selectedPlan}\n billingCycle={billingCycle}\n loading={loading}\n error={error}\n onPlanSelect={onPlanSelect}\n activePlanCode={activePlanCode}\n />\n </div>\n );\n};\n","import React from 'react';\nimport { useCustomerPortal } from '../../hooks/useCustomerPortal';\n\nexport interface ChangeCardButtonProps {\n externalId: string;\n className?: string;\n children?: React.ReactNode;\n onSuccess?: () => void;\n onError?: (error: string) => void;\n}\n\nexport const ChangeCardButton: React.FC<ChangeCardButtonProps> = ({\n externalId,\n className = '',\n children,\n onSuccess,\n onError,\n}) => {\n const { loading, openCustomerPortal } = useCustomerPortal({\n onSuccess: () => {\n onSuccess?.();\n },\n onError: (error) => {\n onError?.(error);\n },\n });\n\n const handleClick = async () => {\n await openCustomerPortal(externalId);\n };\n\n const defaultClassName = \"text-sm font-medium transition-colors duration-200 disabled:opacity-50 disabled:cursor-not-allowed\";\n const finalClassName = className || defaultClassName;\n\n const getStyles = () => ({\n color: loading \n ? 'var(--subos-muted-foreground, #64748b)' \n : 'var(--subos-primary-600, #2563eb)',\n textDecoration: 'none',\n });\n\n return (\n <button\n onClick={handleClick}\n disabled={loading}\n className={finalClassName}\n type=\"button\"\n style={getStyles()}\n onMouseEnter={!loading ? (e) => {\n e.currentTarget.style.color = 'var(--subos-primary-700, #1d4ed8)';\n e.currentTarget.style.textDecoration = 'underline';\n } : undefined}\n onMouseLeave={!loading ? (e) => {\n e.currentTarget.style.color = 'var(--subos-primary-600, #2563eb)';\n e.currentTarget.style.textDecoration = 'none';\n } : undefined}\n >\n {loading ? 'Opening...' : (children || 'Manage Billing')}\n </button>\n );\n};\n","import React from 'react';\nimport type { PaymentParams } from '../../hooks/payments/usePaymentParams';\n\ninterface PaymentCancelViewProps {\n details: PaymentParams;\n}\n\nexport const PaymentCancelView: React.FC<PaymentCancelViewProps> = ({ details }) => {\n return (\n <div className=\"max-w-md mx-auto bg-white rounded-lg shadow-md overflow-hidden\">\n {/* Cancel Header */}\n <div className=\"bg-gradient-to-r from-orange-500 to-red-500 text-white p-6 text-center\">\n <div className=\"text-4xl mb-2\">❌</div>\n <h1 className=\"text-2xl font-bold\">Payment Cancelled</h1>\n <p className=\"text-orange-100 mt-1\">Your payment was not processed</p>\n </div>\n\n {/* Cancellation Details */}\n <div className=\"p-6\">\n <div className=\"mb-6\">\n <h2 className=\"text-lg font-semibold text-gray-900 mb-4\">What Happened?</h2>\n <div className=\"p-4 bg-orange-50 rounded-lg mb-4\">\n <p className=\"text-orange-800\">\n {details.reason\n ? `Reason: ${details.reason}`\n : 'You cancelled the payment process before it was completed. No charges were made to your account.'}\n </p>\n </div>\n\n {(details.gateway || details.sessionId) && (\n <div className=\"space-y-3 mb-4\">\n <h3 className=\"font-medium text-gray-900\">Transaction Details</h3>\n {details.gateway && (\n <div className=\"flex justify-between\">\n <span className=\"text-gray-600\">Payment Gateway</span>\n <span className=\"font-medium capitalize\">{details.gateway}</span>\n </div>\n )}\n {details.sessionId && (\n <div className=\"flex justify-between\">\n <span className=\"text-gray-600\">Session ID</span>\n <span className=\"font-medium font-mono text-sm\">{details.sessionId}</span>\n </div>\n )}\n <div className=\"flex justify-between\">\n <span className=\"text-gray-600\">Status</span>\n <span className=\"font-medium text-orange-600\">Cancelled</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-gray-600\">Date</span>\n <span className=\"font-medium\">{new Date().toLocaleDateString()}</span>\n </div>\n </div>\n )}\n </div>\n\n {/* What's Next */}\n <div className=\"mb-6 p-4 bg-blue-50 rounded-lg\">\n <h3 className=\"font-semibold text-blue-900 mb-2\">What's Next?</h3>\n <ul className=\"text-sm text-blue-800 space-y-1\">\n <li>• No charges were made to your account</li>\n <li>• You can try the payment again anytime</li>\n <li>• Contact support if you need assistance</li>\n <li>• Your cart/selection is still saved</li>\n </ul>\n </div>\n\n {/* Action Buttons */}\n <div className=\"space-y-3\">\n <button\n onClick={() => window.history.back()}\n className=\"w-full bg-blue-600 hover:bg-blue-700 text-white font-medium py-3 px-4 rounded-md transition-colors\"\n >\n Try Payment Again\n </button>\n\n <button\n onClick={() => (window.location.href = '/dashboard')}\n className=\"w-full bg-gray-100 hover:bg-gray-200 text-gray-700 font-medium py-3 px-4 rounded-md transition-colors\"\n >\n Browse Plans\n </button>\n\n <button\n onClick={() => (window.location.href = '/')}\n className=\"w-full bg-gray-100 hover:bg-gray-200 text-gray-700 font-medium py-3 px-4 rounded-md transition-colors\"\n >\n Return Home\n </button>\n </div>\n\n {/* Support */}\n <div className=\"mt-6 text-center\">\n <p className=\"text-sm text-gray-500\">\n Having trouble?{' '}\n <a href=\"/support\" className=\"text-blue-600 hover:text-blue-700\">\n Contact Support\n </a>\n </p>\n </div>\n </div>\n </div>\n );\n};\n\nexport default PaymentCancelView;\n","import React from 'react';\nimport type { PaymentParams } from '../../hooks/payments/usePaymentParams';\n\ninterface PaymentSuccessViewProps {\n details: PaymentParams;\n}\n\nexport const PaymentSuccessView: React.FC<PaymentSuccessViewProps> = ({ details }) => {\n return (\n <div className=\"max-w-md mx-auto bg-white rounded-lg shadow-md overflow-hidden\">\n {/* Success Header */}\n <div className=\"bg-gradient-to-r from-green-500 to-green-600 text-white p-6 text-center\">\n <div className=\"text-4xl mb-2\">✅</div>\n <h1 className=\"text-2xl font-bold\">Payment Successful!</h1>\n <p className=\"text-green-100 mt-1\">Thank you for your purchase</p>\n </div>\n\n {/* Payment Details */}\n <div className=\"p-6\">\n <div className=\"mb-6\">\n <h2 className=\"text-lg font-semibold text-gray-900 mb-4\">Payment Details</h2>\n <div className=\"space-y-3\">\n {details.gateway && (\n <div className=\"flex justify-between\">\n <span className=\"text-gray-600\">Payment Gateway</span>\n <span className=\"font-medium capitalize\">{details.gateway}</span>\n </div>\n )}\n {details.sessionId && (\n <div className=\"flex justify-between\">\n <span className=\"text-gray-600\">Session ID</span>\n <span className=\"font-medium font-mono text-sm\">{details.sessionId}</span>\n </div>\n )}\n {details.paymentId && (\n <div className=\"flex justify-between\">\n <span className=\"text-gray-600\">Payment ID</span>\n <span className=\"font-medium font-mono text-sm\">{details.paymentId}</span>\n </div>\n )}\n <div className=\"flex justify-between\">\n <span className=\"text-gray-600\">Status</span>\n <span className=\"font-medium text-green-600\">Completed</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-gray-600\">Date</span>\n <span className=\"font-medium\">{new Date().toLocaleDateString()}</span>\n </div>\n </div>\n </div>\n\n {/* Next Steps */}\n <div className=\"mb-6 p-4 bg-blue-50 rounded-lg\">\n <h3 className=\"font-semibold text-blue-900 mb-2\">What's Next?</h3>\n <ul className=\"text-sm text-blue-800 space-y-1\">\n <li>• You'll receive a confirmation email shortly</li>\n <li>• Your subscription/purchase is now active</li>\n <li>• Access your dashboard to manage your account</li>\n </ul>\n </div>\n\n {/* Action Buttons */}\n <div className=\"space-y-3\">\n <button\n onClick={() => (window.location.href = '/dashboard')}\n className=\"w-full bg-blue-600 hover:bg-blue-700 text-white font-medium py-3 px-4 rounded-md transition-colors\"\n >\n Go to Dashboard\n </button>\n\n <button\n onClick={() => (window.location.href = '/')}\n className=\"w-full bg-gray-100 hover:bg-gray-200 text-gray-700 font-medium py-3 px-4 rounded-md transition-colors\"\n >\n Return Home\n </button>\n </div>\n\n {/* Support */}\n <div className=\"mt-6 text-center\">\n <p className=\"text-sm text-gray-500\">\n Need help?{' '}\n <a href=\"/support\" className=\"text-blue-600 hover:text-blue-700\">\n Contact Support\n </a>\n </p>\n </div>\n </div>\n </div>\n );\n};\n\nexport default PaymentSuccessView;\n","/**\n * Utility functions for managing upgrade state\n */\n\n// Global variable to store the clear function\nlet globalClearSelectedPlan: (() => void) | null = null;\n\n/**\n * Register a function to clear the selected plan globally\n * This should be called by components that manage plan selection\n */\nexport const registerClearSelectedPlan = (clearFn: () => void) => {\n globalClearSelectedPlan = clearFn;\n};\n\n/**\n * Clear the selected plan from anywhere in the application\n * This can be called when navigating to transactions or other sections\n */\nexport const clearSelectedPlan = () => {\n if (globalClearSelectedPlan) {\n globalClearSelectedPlan();\n }\n};\n\n/**\n * Unregister the clear function (cleanup)\n */\nexport const unregisterClearSelectedPlan = () => {\n globalClearSelectedPlan = null;\n};\n","import React from 'react';\nimport type { Transaction } from '../../types';\nimport { formatDate } from '../../utils/planUtils';\n\nexport interface TransactionItemProps {\n transaction: Transaction;\n className?: string;\n showInvoiceButton?: boolean;\n customStatusColors?: Record<string, string>;\n showFields?: {\n planName?: boolean;\n transactionDate?: boolean;\n amount?: boolean;\n discount?: boolean;\n status?: boolean;\n coupon?: boolean;\n invoice?: boolean;\n };\n dateFormat?: 'date' | 'datetime';\n metaFields?: string[]; // Array of meta field keys to display (max 2)\n}\n\n// Download icon component\nconst DownloadIcon: React.FC<{ className?: string }> = ({ className = \"w-4 h-4\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\" />\n </svg>\n);\n\nconst getStatusColor = (status: string, customColors?: Record<string, string>) => {\n if (customColors && customColors[status.toLowerCase()]) {\n return customColors[status.toLowerCase()];\n }\n\n switch (status.toLowerCase()) {\n case 'activated':\n case 'succeeded':\n case 'renewed':\n case 'use_stripe_sdk':\n return 'bg-green-100 text-green-800';\n case 'pending':\n case 'processing':\n return 'bg-yellow-100 text-yellow-800';\n case 'payment_failed':\n return 'bg-red-100 text-red-800';\n default:\n return 'bg-blue-100 text-blue-800';\n }\n};\n\nconst formatCurrency = (amount: string | number, currency = 'USD') => {\n const numericAmount = typeof amount === 'string' ? parseFloat(amount) : amount;\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency,\n }).format(numericAmount);\n};\n\n// Helper function to format meta field keys into readable labels\nconst formatMetaLabel = (key: string): string => {\n // Convert snake_case or UPPER_CASE to Title Case\n return key\n .split('_')\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ');\n};\n\n// Helper function to format meta field values\nconst formatMetaValue = (value: any): string => {\n if (typeof value === 'boolean') {\n return value ? 'Yes' : 'No';\n }\n if (typeof value === 'number') {\n return value.toLocaleString();\n }\n if (typeof value === 'string') {\n // If it's \"unlimited\", capitalize it\n if (value.toLowerCase() === 'unlimited') {\n return 'Unlimited';\n }\n return value;\n }\n return String(value);\n};\n\nexport const TransactionItem: React.FC<TransactionItemProps> = ({\n transaction,\n className = '',\n showInvoiceButton = true,\n customStatusColors,\n showFields = {\n planName: true,\n transactionDate: true,\n amount: true,\n discount: true,\n status: true,\n coupon: true,\n invoice: true,\n },\n dateFormat = 'datetime',\n metaFields = [],\n}) => {\n const handleInvoiceDownload = (invoiceUrl: string) => {\n const link = document.createElement('a');\n link.href = invoiceUrl;\n link.download = `invoice-${transaction.id}.pdf`;\n link.target = '_blank';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n };\n\n // Generate meta fields display string\n const getMetaFieldsDisplay = () => {\n if (metaFields.length === 0 || !transaction.meta) return '';\n \n const metaValues = metaFields\n .slice(0, 2)\n .map((fieldKey) => {\n const value = transaction.meta?.[fieldKey];\n if (value === undefined || value === null) return null;\n return `${formatMetaLabel(fieldKey)}: ${formatMetaValue(value)}`;\n })\n .filter(Boolean);\n \n return metaValues.length > 0 ? ` (${metaValues.join(', ')})` : '';\n };\n\n return (\n <li className={`px-6 py-4 hover:bg-gray-50 ${className}`}>\n <div className=\"flex items-center justify-between\">\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center justify-between\">\n <div>\n {showFields.planName && (\n <p className=\"text-sm font-medium text-gray-900 truncate\">\n {transaction.planName ? `${transaction.planName} Plan${getMetaFieldsDisplay()}` : `Transaction #${transaction.transactionCode || transaction.id}${getMetaFieldsDisplay()}`}\n </p>\n )}\n {showFields.transactionDate && (\n <p className=\"text-sm text-gray-500\">\n {formatDate(transaction.transactionDate || transaction.membershipDate, dateFormat)}\n </p>\n )}\n </div>\n <div className=\"flex items-center space-x-4\">\n {showFields.amount && (\n <div className=\"text-right\">\n <p className=\"text-sm font-medium text-gray-900\">\n {formatCurrency(transaction.amount, transaction.currency)}\n </p>\n {showFields.discount && transaction.discountAmt && parseFloat(transaction.discountAmt.toString()) > 0 && (\n <p className=\"text-xs text-green-600\">\n -{formatCurrency(transaction.discountAmt, transaction.currency)} discount\n </p>\n )}\n </div>\n )}\n {showFields.status && (\n <span className={`inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium ${getStatusColor(transaction.transactionStatus, customStatusColors)}`}>\n {transaction.transactionStatus}\n </span>\n )}\n {showFields.invoice && showInvoiceButton && transaction.invoice_pdf && (\n <button\n onClick={() => {\n handleInvoiceDownload(transaction.invoice_pdf!);\n }}\n className=\"inline-flex items-center justify-center p-0 text-blue-600 hover:text-blue-800 transition-colors border-0 bg-transparent focus:outline-none focus:ring-0 focus-visible:outline-none active:outline-none\"\n title=\"Download Invoice\"\n aria-label=\"Download Invoice\"\n >\n <DownloadIcon className=\"w-4 h-4\" />\n \n </button>\n )}\n </div>\n </div>\n {showFields.coupon && transaction.coupon && (\n <div className=\"mt-2\">\n <span className=\"inline-flex items-center px-2 py-1 rounded-md text-xs font-medium bg-purple-100 text-purple-800\">\n Coupon: {transaction.coupon}\n </span>\n </div>\n )}\n </div>\n </div>\n </li>\n );\n};\n\nexport default TransactionItem;\n","import React from 'react';\n\nexport interface TransactionLoadingStateProps {\n message?: string;\n className?: string;\n showSpinner?: boolean;\n rows?: number;\n}\n\nexport const TransactionLoadingState: React.FC<TransactionLoadingStateProps> = ({\n message = \"Loading transactions...\",\n className = '',\n showSpinner = true,\n rows = 5,\n}) => {\n if (showSpinner) {\n return (\n <div className={`flex items-center justify-center py-8 ${className}`}>\n <div className=\"animate-spin rounded-full h-8 w-8 border-b-2 border-primary\"></div>\n <span className=\"ml-2 text-gray-600\">{message}</span>\n </div>\n );\n }\n\n // Skeleton loading state\n return (\n <div className={`bg-white shadow overflow-hidden sm:rounded-md ${className}`}>\n <ul className=\"divide-y divide-gray-200\">\n {Array.from({ length: rows }).map((_, index) => (\n <li key={index} className=\"px-6 py-4 animate-pulse\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center justify-between\">\n <div className=\"space-y-2\">\n <div className=\"h-4 bg-gray-200 rounded w-48\"></div>\n <div className=\"h-3 bg-gray-200 rounded w-32\"></div>\n </div>\n <div className=\"flex items-center space-x-4\">\n <div className=\"text-right space-y-2\">\n <div className=\"h-4 bg-gray-200 rounded w-20\"></div>\n </div>\n <div className=\"h-6 bg-gray-200 rounded-full w-16\"></div>\n <div className=\"h-4 bg-gray-200 rounded w-12\"></div>\n </div>\n </div>\n </div>\n </div>\n </li>\n ))}\n </ul>\n </div>\n );\n};\n\nexport default TransactionLoadingState;\n","import React from 'react';\n\nexport interface TransactionErrorStateProps {\n error: string;\n title?: string;\n onRetry?: () => void;\n className?: string;\n showRetryButton?: boolean;\n}\n\nexport const TransactionErrorState: React.FC<TransactionErrorStateProps> = ({\n error,\n title = \"Error loading transactions\",\n onRetry,\n className = '',\n showRetryButton = true,\n}) => {\n return (\n <div className={`bg-red-50 border border-red-200 rounded-md p-4 ${className}`}>\n <div className=\"flex\">\n <div className=\"flex-shrink-0\">\n <svg className=\"h-5 w-5 text-red-400\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </div>\n <div className=\"ml-3 flex-1\">\n <h3 className=\"text-sm font-medium text-red-800\">{title}</h3>\n <div className=\"mt-2 text-sm text-red-700\">{error}</div>\n {showRetryButton && onRetry && (\n <div className=\"mt-4\">\n <button\n onClick={onRetry}\n className=\"bg-red-100 hover:bg-red-200 text-red-800 font-medium py-2 px-4 rounded text-sm transition-colors duration-200\"\n >\n Try Again\n </button>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n};\n\nexport default TransactionErrorState;\n","import React from 'react';\n\nexport interface TransactionEmptyStateProps {\n title?: string;\n description?: string;\n icon?: React.ReactNode;\n action?: React.ReactNode;\n className?: string;\n}\n\nexport const TransactionEmptyState: React.FC<TransactionEmptyStateProps> = ({\n title = \"No transactions found\",\n description = \"There are no transactions to display.\",\n icon,\n action,\n className = '',\n}) => {\n const defaultIcon = (\n <svg\n className=\"mx-auto h-12 w-12 text-gray-400\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\"\n />\n </svg>\n );\n\n return (\n <div className={`text-center py-8 ${className}`}>\n {icon || defaultIcon}\n <h3 className=\"mt-2 text-sm font-medium text-gray-900\">{title}</h3>\n <p className=\"mt-1 text-sm text-gray-500\">{description}</p>\n {action && (\n <div className=\"mt-4\">\n {action}\n </div>\n )}\n </div>\n );\n};\n\nexport default TransactionEmptyState;\n","import React from 'react';\nimport type { Transaction } from '../../types';\nimport { TransactionItem } from './TransactionItem';\nimport { TransactionLoadingState } from './TransactionLoadingState';\nimport { TransactionErrorState } from './TransactionErrorState';\nimport { TransactionEmptyState } from './TransactionEmptyState';\n\nexport interface TransactionListProps {\n transactions: Transaction[];\n loading?: boolean;\n error?: string | null;\n onRetry?: () => void;\n className?: string;\n showInvoiceButton?: boolean;\n customStatusColors?: Record<string, string>;\n emptyStateProps?: {\n title?: string;\n description?: string;\n icon?: React.ReactNode;\n action?: React.ReactNode;\n };\n loadingStateProps?: {\n message?: string;\n showSpinner?: boolean;\n rows?: number;\n };\n}\n\nexport const TransactionList: React.FC<TransactionListProps> = ({\n transactions,\n loading = false,\n error = null,\n onRetry,\n className = '',\n showInvoiceButton = true,\n customStatusColors,\n emptyStateProps,\n loadingStateProps,\n}) => {\n\n if (loading) {\n return (\n <TransactionLoadingState \n className={className}\n {...loadingStateProps}\n />\n );\n }\n\n if (error) {\n return (\n <TransactionErrorState \n error={error}\n onRetry={onRetry}\n className={className}\n />\n );\n }\n\n if (transactions.length === 0) {\n return (\n <TransactionEmptyState \n className={className}\n {...emptyStateProps}\n />\n );\n }\n\n return (\n <div className={`bg-white shadow overflow-hidden sm:rounded-md ${className}`}>\n <ul className=\"divide-y divide-gray-200\">\n {transactions.map((transaction) => (\n <TransactionItem\n key={transaction.id}\n transaction={transaction}\n showInvoiceButton={showInvoiceButton}\n customStatusColors={customStatusColors}\n metaFields={['CANDIDATES']}\n />\n ))}\n </ul>\n </div>\n );\n};\n\n","import React from 'react';\n\nexport interface TransactionStatusFilterProps {\n selectedStatus?: string;\n onStatusChange: (status: string) => void;\n className?: string;\n showAllOption?: boolean;\n customStatuses?: Array<{ value: string; label: string; color?: string }>;\n}\n\nconst defaultStatuses = [\n { value: '', label: 'All Statuses', color: 'bg-gray-100 text-gray-800' },\n // { value: 'activated', label: 'Activated', color: 'bg-green-100 text-green-800' },\n { value: 'pending', label: 'Pending', color: 'bg-yellow-100 text-yellow-800' },\n { value: 'succeeded', label: 'Succeeded', color: 'bg-green-100 text-green-800' },\n // { value: 'renewed', label: 'Renewed', color: 'bg-green-100 text-green-800' },\n // { value: 'processing', label: 'Processing', color: 'bg-yellow-100 text-yellow-800' },\n { value: 'payment_failed', label: 'Payment Failed', color: 'bg-red-100 text-red-800' },\n // { value: 'use_stripe_sdk', label: 'Use Stripe SDK', color: 'bg-blue-100 text-blue-800' },\n];\n\nexport const TransactionStatusFilter: React.FC<TransactionStatusFilterProps> = ({\n selectedStatus = '',\n onStatusChange,\n className = '',\n showAllOption = true,\n customStatuses,\n}) => {\n const statuses = customStatuses || defaultStatuses;\n const statusesToShow = showAllOption ? statuses : statuses.filter(s => s.value !== '');\n\n return (\n <div className={`flex flex-wrap gap-2 ${className}`}>\n {statusesToShow.map((status) => (\n <button\n key={status.value}\n onClick={() => onStatusChange(status.value)}\n className={`\n px-3 py-1 rounded-full text-sm font-medium transition-all duration-200\n ${selectedStatus === status.value \n ? `${status.color} ring-2 ring-offset-1 ring-blue-500` \n : 'bg-gray-100 text-gray-600 hover:bg-gray-200'\n }\n `}\n >\n {status.label}\n </button>\n ))}\n </div>\n );\n};\n\nexport default TransactionStatusFilter;\n","import React from 'react';\nimport { TransactionStatusFilter } from './TransactionStatusFilter';\nimport type { TransactionFilters } from '../../types';\n\nexport interface TransactionFilterProps {\n filters: TransactionFilters;\n onFiltersChange: (filters: TransactionFilters) => void;\n className?: string;\n showStatusFilter?: boolean;\n showDateFilter?: boolean;\n showSearchFilter?: boolean;\n customStatusOptions?: Array<{ value: string; label: string; color?: string }>;\n}\n\nexport const TransactionFilter: React.FC<TransactionFilterProps> = ({\n filters,\n onFiltersChange,\n className = '',\n showStatusFilter = true,\n showDateFilter = true,\n showSearchFilter = true,\n customStatusOptions,\n}) => {\n const handleFilterChange = (key: keyof TransactionFilters, value: string | number | undefined) => {\n onFiltersChange({\n ...filters,\n [key]: value,\n page: 1, // Reset to first page when filters change\n });\n };\n\n const clearFilters = () => {\n onFiltersChange({\n page: 1,\n limit: filters.limit || 10,\n });\n };\n\n const hasActiveFilters = filters.status || filters.startDate || filters.endDate;\n\n return (\n <div className={`space-y-4 ${className}`}>\n {/* Search Filter */}\n {showSearchFilter && (\n <div className=\"flex items-center space-x-2\">\n <div className=\"relative flex-1 max-w-md\">\n <div className=\"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none\">\n <svg className=\"h-5 w-5 text-gray-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\" />\n </svg>\n </div>\n <input\n type=\"text\"\n placeholder=\"Search transactions...\"\n className=\"block w-full pl-10 pr-3 py-2 border border-gray-300 rounded-md leading-5 bg-white placeholder-gray-500 focus:outline-none focus:placeholder-gray-400 focus:ring-1 focus:ring-blue-500 focus:border-blue-500 sm:text-sm\"\n onChange={(e) => handleFilterChange('search' as keyof TransactionFilters, e.target.value)}\n />\n </div>\n </div>\n )}\n\n {/* Date Range Filter */}\n {showDateFilter && (\n <div className=\"flex flex-wrap items-center gap-4\">\n <div className=\"flex items-center space-x-2\">\n <label className=\"text-sm font-medium text-gray-700\">From:</label>\n <input\n type=\"date\"\n value={filters.startDate || ''}\n onChange={(e) => handleFilterChange('startDate', e.target.value)}\n className=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:ring-1 focus:ring-blue-500 focus:border-blue-500\"\n />\n </div>\n <div className=\"flex items-center space-x-2\">\n <label className=\"text-sm font-medium text-gray-700\">To:</label>\n <input\n type=\"date\"\n value={filters.endDate || ''}\n onChange={(e) => handleFilterChange('endDate', e.target.value)}\n className=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:ring-1 focus:ring-blue-500 focus:border-blue-500\"\n />\n </div>\n </div>\n )}\n\n {/* Status Filter */}\n {showStatusFilter && (\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium text-gray-700\">Status:</label>\n <TransactionStatusFilter\n selectedStatus={filters.status}\n onStatusChange={(status) => handleFilterChange('status', status)}\n customStatuses={customStatusOptions}\n />\n </div>\n )}\n\n {/* Clear Filters */}\n {hasActiveFilters && (\n <div className=\"flex justify-end\">\n <button\n onClick={clearFilters}\n className=\"text-sm text-blue-600 hover:text-blue-800 font-medium\"\n >\n Clear all filters\n </button>\n </div>\n )}\n </div>\n );\n};\n\nexport default TransactionFilter;\n","import React from 'react';\nimport type { PaginationMeta } from '../../types';\n\nexport interface TransactionPaginationProps {\n pagination: PaginationMeta;\n onPageChange: (page: number) => void;\n onLimitChange?: (limit: number) => void;\n className?: string;\n showPageSizeSelector?: boolean;\n pageSizeOptions?: number[];\n showInfo?: boolean;\n}\n\nexport const TransactionPagination: React.FC<TransactionPaginationProps> = ({\n pagination,\n onPageChange,\n onLimitChange,\n className = '',\n showPageSizeSelector = true,\n pageSizeOptions = [10, 25, 50, 100],\n showInfo = true,\n}) => {\n const { currentPage, totalPages, totalItems, itemsPerPage, hasNextPage, hasPreviousPage } = pagination;\n\n const getVisiblePages = () => {\n const delta = 2;\n const range = [];\n const rangeWithDots = [];\n\n for (let i = Math.max(2, currentPage - delta); i <= Math.min(totalPages - 1, currentPage + delta); i++) {\n range.push(i);\n }\n\n if (currentPage - delta > 2) {\n rangeWithDots.push(1, '...');\n } else {\n rangeWithDots.push(1);\n }\n\n rangeWithDots.push(...range);\n\n if (currentPage + delta < totalPages - 1) {\n rangeWithDots.push('...', totalPages);\n } else if (totalPages > 1) {\n rangeWithDots.push(totalPages);\n }\n\n return rangeWithDots;\n };\n\n const startItem = (currentPage - 1) * itemsPerPage + 1;\n const endItem = Math.min(currentPage * itemsPerPage, totalItems);\n\n if (totalPages <= 1) {\n return null;\n }\n\n return (\n <div className={`flex flex-col sm:flex-row items-center justify-between space-y-3 sm:space-y-0 ${className}`}>\n {/* Info and Page Size Selector */}\n <div className=\"flex flex-col sm:flex-row items-center space-y-2 sm:space-y-0 sm:space-x-4\">\n {showInfo && (\n <div className=\"text-sm text-gray-700\">\n Showing <span className=\"font-medium\">{startItem}</span> to{' '}\n <span className=\"font-medium\">{endItem}</span> of{' '}\n <span className=\"font-medium\">{totalItems}</span> results\n </div>\n )}\n\n {showPageSizeSelector && onLimitChange && (\n <div className=\"flex items-center space-x-2\">\n <label className=\"text-sm text-gray-700\">Show:</label>\n <select\n value={itemsPerPage}\n onChange={(e) => onLimitChange(Number(e.target.value))}\n className=\"px-2 py-1 border border-gray-300 rounded text-sm focus:outline-none focus:ring-1 focus:ring-blue-500 focus:border-blue-500\"\n >\n {pageSizeOptions.map((size) => (\n <option key={size} value={size}>\n {size}\n </option>\n ))}\n </select>\n <span className=\"text-sm text-gray-700\">per page</span>\n </div>\n )}\n </div>\n\n {/* Pagination Controls */}\n <div className=\"flex items-center space-x-1\">\n {/* Previous Button */}\n <button\n onClick={() => onPageChange(currentPage - 1)}\n disabled={!hasPreviousPage}\n className={`\n px-3 py-2 text-sm font-medium rounded-md\n ${hasPreviousPage\n ? 'text-gray-500 bg-white border border-gray-300 hover:bg-gray-50 hover:text-gray-700'\n : 'text-gray-300 bg-white border border-gray-300 cursor-not-allowed'\n }\n `}\n >\n Previous\n </button>\n\n {/* Page Numbers */}\n <div className=\"flex items-center space-x-1\">\n {getVisiblePages().map((page, index) => (\n <React.Fragment key={index}>\n {page === '...' ? (\n <span className=\"px-3 py-2 text-sm text-gray-500\">...</span>\n ) : (\n <button\n onClick={() => onPageChange(page as number)}\n className={`\n px-3 py-2 text-sm font-medium rounded-md\n ${currentPage === page\n ? 'bg-blue-600 text-white border border-blue-600'\n : 'text-gray-500 bg-white border border-gray-300 hover:bg-gray-50 hover:text-gray-700'\n }\n `}\n >\n {page}\n </button>\n )}\n </React.Fragment>\n ))}\n </div>\n\n {/* Next Button */}\n <button\n onClick={() => onPageChange(currentPage + 1)}\n disabled={!hasNextPage}\n className={`\n px-3 py-2 text-sm font-medium rounded-md\n ${hasNextPage\n ? 'text-gray-500 bg-white border border-gray-300 hover:bg-gray-50 hover:text-gray-700'\n : 'text-gray-300 bg-white border border-gray-300 cursor-not-allowed'\n }\n `}\n >\n Next\n </button>\n </div>\n </div>\n );\n};\n\nexport default TransactionPagination;\n","import React, { useEffect } from 'react';\nimport { TransactionList, TransactionFilter, TransactionPagination } from './index';\nimport { useTransactions } from '../../hooks/useTransactions';\nimport type { TransactionFilters } from '../../types';\n\nexport interface TransactionModalProps {\n isOpen: boolean;\n onClose: () => void;\n externalId: string;\n title?: string;\n}\n\nexport const TransactionModal: React.FC<TransactionModalProps> = ({\n isOpen,\n onClose,\n externalId,\n title = 'Transaction History',\n}) => {\n const {\n transactions,\n loading,\n error,\n filters,\n meta,\n updateFilters,\n fetchTransactions,\n } = useTransactions({\n externalId,\n initialFilters: { page: 1, limit: 10 },\n autoFetch: true, // Enable auto-fetch so it works when modal opens\n });\n\n // Fetch transactions when modal opens\n useEffect(() => {\n if (isOpen && externalId) {\n fetchTransactions();\n }\n }, [isOpen, externalId, fetchTransactions]);\n\n const handlePageChange = (page: number) => {\n updateFilters({ page });\n };\n\n const handleLimitChange = (limit: number) => {\n updateFilters({ limit, page: 1 });\n };\n\n const handleFiltersChange = (newFilters: TransactionFilters) => {\n updateFilters(newFilters);\n };\n\n if (!isOpen) return null;\n\n\n return (\n <div className=\"fixed inset-0 z-50 overflow-y-auto\">\n <div className=\"flex items-center justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0\">\n {/* Background overlay */}\n <div\n className=\"fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity z-0\"\n onClick={onClose}\n />\n\n {/* Modal panel */}\n <div className=\"inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-4xl sm:w-full relative z-10\">\n {/* Header */}\n <div className=\"bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4\">\n <div className=\"flex items-center justify-between mb-4\">\n <h3 className=\"text-lg leading-6 font-medium text-gray-900\">\n {title}\n </h3>\n <button\n onClick={onClose}\n className=\"bg-white rounded-md text-gray-400 hover:text-gray-600 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary\"\n >\n <span className=\"sr-only\">Close</span>\n <svg className=\"h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n </div>\n\n {/* Filters */}\n <TransactionFilter\n filters={filters}\n onFiltersChange={handleFiltersChange}\n className=\"mb-4\"\n showSearchFilter={false}\n />\n </div>\n\n {/* Content */}\n <div className=\"px-4 pb-4 sm:px-6 sm:pb-6\">\n <TransactionList\n transactions={transactions}\n loading={loading}\n error={error}\n className=\"mb-4\"\n />\n\n {/* Pagination */}\n {meta && (\n <TransactionPagination\n pagination={meta}\n onPageChange={handlePageChange}\n onLimitChange={handleLimitChange}\n pageSizeOptions={[5, 10, 25, 50]}\n />\n )}\n </div>\n\n {/* Footer */}\n <div className=\"bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse\">\n <button\n type=\"button\"\n onClick={onClose}\n className=\"w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-primary text-base font-medium text-white hover:bg-primary-dark focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary sm:ml-3 sm:w-auto sm:text-sm\"\n >\n Close\n </button>\n </div>\n </div>\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport type { Subscription } from '../../types';\nimport { formatDate } from '../../utils/planUtils';\n\nexport interface InfoField {\n key: string;\n label: string;\n getValue: (subscription: Subscription) => string | React.ReactNode;\n className?: string;\n}\n\nexport interface SubscriptionInfoGridProps {\n subscription: Subscription | null;\n fields?: InfoField[];\n className?: string;\n gridCols?: 1 | 2 | 3 | 4 | 5;\n showDefaultFields?: boolean;\n}\n\nconst defaultFields: InfoField[] = [\n {\n key: 'planName',\n label: 'Active Subscription',\n getValue: (subscription) => subscription?.plan?.name || 'N/A',\n },\n {\n key: 'planInterval',\n label: 'Subscription Type',\n getValue: (subscription) => {\n const interval = subscription?.plan?.interval || 'N/A';\n return interval !== 'N/A'\n ? interval.charAt(0) + interval.slice(1).toLowerCase()\n : interval;\n },\n },\n {\n key: 'expiryDate',\n label: 'Subscription Renews on',\n getValue: (subscription) => subscription?.expiryDate ? formatDate(subscription.expiryDate) : 'N/A',\n },\n];\n\nexport const SubscriptionInfoGrid: React.FC<SubscriptionInfoGridProps> = ({\n subscription,\n fields,\n className = '',\n gridCols = 3,\n showDefaultFields = true,\n}) => {\n const displayFields = fields || (showDefaultFields ? defaultFields : []);\n\n if (!subscription || displayFields.length === 0) {\n return null;\n }\n\n const getGridClass = () => {\n switch (gridCols) {\n case 1: return 'grid-cols-1';\n case 2: return 'grid-cols-1 md:grid-cols-2';\n case 3: return 'grid-cols-1 md:grid-cols-3';\n case 4: return 'grid-cols-2 md:grid-cols-4';\n case 5: return 'grid-cols-2 md:grid-cols-5';\n default: return 'grid-cols-1 md:grid-cols-3';\n }\n };\n\n return (\n <div className={`grid ${getGridClass()} gap-4 ${className}`}>\n {displayFields.map((field) => (\n <div key={field.key} className={`p-4 border border-gray-200 rounded-lg bg-white ${field.className || ''}`}>\n <p \n className=\"text-sm text-gray-500\" \n style={{\n fontSize: 'var(--subos-font-size-subscription-label, 0.875rem)',\n fontWeight: 'var(--subos-font-weight-subscription-label, 400)',\n color: 'var(--subos-color-subscription-label, #6c757d)'\n }}\n >\n {field.label}\n </p>\n <div \n className=\"font-medium\"\n style={{\n fontSize: 'var(--subos-font-size-subscription-value, 1rem)',\n fontWeight: 'var(--subos-font-weight-subscription-value, 500)',\n color: 'var(--subos-color-subscription-value, inherit)'\n }}\n >\n {field.getValue(subscription)}\n </div>\n </div>\n ))}\n </div>\n );\n};\n\nexport default SubscriptionInfoGrid;\n","import React from 'react';\nimport type { Subscription } from '../../types';\n\nexport interface UsageMetric {\n key: string;\n label: string;\n showProgress?: boolean;\n formatValue?: (used: number, total: number) => string;\n}\n\nexport interface SubscriptionUsageDisplayProps {\n subscription: Subscription | null;\n usageMetrics: UsageMetric[];\n className?: string;\n gridCols?: 1 | 2 | 3 | 4 | 5;\n showProgressBars?: boolean;\n}\n\nexport const SubscriptionUsageDisplay: React.FC<SubscriptionUsageDisplayProps> = ({\n subscription,\n usageMetrics,\n className = '',\n gridCols = 3,\n showProgressBars = false,\n}) => {\n if (!subscription || usageMetrics.length === 0) {\n return null;\n }\n\n const getGridClass = () => {\n switch (gridCols) {\n case 1: return 'grid-cols-1';\n case 2: return 'grid-cols-1 md:grid-cols-2';\n case 3: return 'grid-cols-1 md:grid-cols-3';\n case 4: return 'grid-cols-2 md:grid-cols-4';\n case 5: return 'grid-cols-2 md:grid-cols-5';\n default: return 'grid-cols-1 md:grid-cols-3';\n }\n };\n\n const formatDefaultValue = (used: number, total: number) => {\n return `${used}/${total}`;\n };\n\n const getProgressPercentage = (used: number, total: number) => {\n if (total === 0) return 0;\n return Math.min((used / total) * 100, 100);\n };\n\n const getProgressColor = (percentage: number) => {\n if (percentage >= 90) return 'bg-red-500';\n if (percentage >= 75) return 'bg-yellow-500';\n return 'bg-green-500';\n };\n\n return (\n <div className={`grid ${getGridClass()} gap-4 ${className}`}>\n {usageMetrics.map((metric) => {\n const used = subscription.usage?.[metric.key] || 0;\n const total = subscription.meta?.[metric.key] || 0;\n const displayValue = metric.formatValue \n ? metric.formatValue(used, total)\n : formatDefaultValue(used, total);\n \n const percentage = getProgressPercentage(used, total);\n const shouldShowProgress = showProgressBars || metric.showProgress;\n\n return (\n <div key={metric.key} className=\"p-4 border border-gray-200 rounded-lg bg-white space-y-1\">\n <p className=\"text-sm text-gray-500\">{metric.label}</p>\n <p className=\"font-medium\">{displayValue}</p>\n {shouldShowProgress && total > 0 && (\n <div className=\"w-full bg-gray-200 rounded-full h-2\">\n <div\n className={`h-2 rounded-full transition-all duration-300 ${getProgressColor(percentage)}`}\n style={{ width: `${percentage}%` }}\n />\n </div>\n )}\n </div>\n );\n })}\n </div>\n );\n};\n\nexport default SubscriptionUsageDisplay;\n","import React from 'react';\n\nexport interface SubscriptionTransactionButtonProps {\n onClick: () => void;\n className?: string;\n children?: React.ReactNode;\n disabled?: boolean;\n variant?: 'text' | 'button';\n}\n\nexport const SubscriptionTransactionButton: React.FC<SubscriptionTransactionButtonProps> = ({\n onClick,\n className = '',\n children = 'Transactions',\n disabled = false,\n variant = 'text',\n}) => {\n const baseClasses = variant === 'text'\n ? 'transition-colors duration-200 disabled:cursor-not-allowed'\n : 'px-4 py-2 text-white rounded-md transition-colors duration-200 disabled:cursor-not-allowed';\n\n const getStyles = () => {\n const baseStyles = {\n fontSize: 'var(--subos-font-size-button-text, 0.875rem)',\n fontWeight: 'var(--subos-font-weight-button-text, 500)',\n };\n\n if (variant === 'text') {\n return {\n ...baseStyles,\n color: disabled \n ? 'var(--subos-muted-foreground, #64748b)' \n : 'var(--subos-color-button-text, var(--subos-primary-600, #2563eb))',\n textDecoration: 'none',\n };\n } else {\n return {\n ...baseStyles,\n backgroundColor: disabled \n ? 'var(--subos-muted, #f1f5f9)' \n : 'var(--subos-primary-500, #3f51b5)',\n color: disabled ? 'var(--subos-muted-foreground, #64748b)' : 'white',\n };\n }\n };\n\n return (\n <button\n onClick={onClick}\n disabled={disabled}\n className={`${baseClasses} ${className}`}\n style={getStyles()}\n onMouseEnter={!disabled && variant === 'text' ? (e) => {\n e.currentTarget.style.color = 'var(--subos-primary-700, #1d4ed8)';\n e.currentTarget.style.textDecoration = 'underline';\n } : !disabled && variant === 'button' ? (e) => {\n e.currentTarget.style.backgroundColor = 'var(--subos-primary-600, #2563eb)';\n } : undefined}\n onMouseLeave={!disabled && variant === 'text' ? (e) => {\n e.currentTarget.style.color = 'var(--subos-primary-600, #2563eb)';\n e.currentTarget.style.textDecoration = 'none';\n } : !disabled && variant === 'button' ? (e) => {\n e.currentTarget.style.backgroundColor = 'var(--subos-primary-500, #3f51b5)';\n } : undefined}\n >\n {children}\n </button>\n );\n};\n\nexport default SubscriptionTransactionButton;\n","import React from 'react';\n\nexport interface SubscriptionCancelButtonProps {\n onClick: () => void;\n className?: string;\n children?: React.ReactNode;\n disabled?: boolean;\n variant?: 'text' | 'button';\n}\n\nexport const SubscriptionCancelButton: React.FC<SubscriptionCancelButtonProps> = ({\n onClick,\n className = '',\n children = 'Cancel Renewal',\n disabled = false,\n variant = 'text',\n}) => {\n const baseClasses = variant === 'text'\n ? 'transition-colors duration-200 disabled:cursor-not-allowed'\n : 'px-4 py-2 text-white rounded-md transition-colors duration-200 disabled:cursor-not-allowed';\n\n const getStyles = () => {\n const baseStyles = {\n fontSize: 'var(--subos-font-size-button-text, 0.875rem)',\n fontWeight: 'var(--subos-font-weight-button-text, 500)',\n };\n\n if (variant === 'text') {\n return {\n ...baseStyles,\n color: disabled \n ? 'var(--subos-muted-foreground, #64748b)' \n : '#dc2626', // Keep red for cancel action\n textDecoration: 'none',\n };\n } else {\n return {\n ...baseStyles,\n backgroundColor: disabled \n ? 'var(--subos-muted, #f1f5f9)' \n : '#dc2626', // Keep red for cancel action\n color: disabled ? 'var(--subos-muted-foreground, #64748b)' : 'white',\n };\n }\n };\n\n return (\n <button\n onClick={onClick}\n disabled={disabled}\n className={`${baseClasses} ${className}`}\n style={getStyles()}\n onMouseEnter={!disabled && variant === 'text' ? (e) => {\n e.currentTarget.style.color = '#b91c1c';\n e.currentTarget.style.textDecoration = 'underline';\n } : !disabled && variant === 'button' ? (e) => {\n e.currentTarget.style.backgroundColor = '#b91c1c';\n } : undefined}\n onMouseLeave={!disabled && variant === 'text' ? (e) => {\n e.currentTarget.style.color = '#dc2626';\n e.currentTarget.style.textDecoration = 'none';\n } : !disabled && variant === 'button' ? (e) => {\n e.currentTarget.style.backgroundColor = '#dc2626';\n } : undefined}\n >\n {children}\n </button>\n );\n};\n\nexport default SubscriptionCancelButton;\n","import React from 'react';\nimport { SubscriptionTransactionButton } from './SubscriptionTransactionButton';\nimport { SubscriptionCancelButton } from './SubscriptionCancelButton';\n\nexport interface ActionButton {\n key: string;\n component: React.ReactNode;\n show?: boolean;\n}\n\nexport interface SubscriptionActionButtonsProps {\n onTransactionClick?: () => void;\n onCancelClick?: () => void;\n customActions?: ActionButton[];\n showTransactionButton?: boolean;\n showCancelButton?: boolean;\n className?: string;\n layout?: 'horizontal' | 'vertical';\n spacing?: 'tight' | 'normal' | 'loose';\n}\n\nexport const SubscriptionActionButtons: React.FC<SubscriptionActionButtonsProps> = ({\n onTransactionClick,\n onCancelClick,\n customActions = [],\n showTransactionButton = true,\n showCancelButton = true,\n className = '',\n layout = 'horizontal',\n spacing = 'normal',\n}) => {\n const getSpacingClass = () => {\n const isVertical = layout === 'vertical';\n switch (spacing) {\n case 'tight':\n return isVertical ? 'space-y-1' : 'space-x-2';\n case 'normal':\n return isVertical ? 'space-y-2' : 'space-x-3'; // Reduced spacing\n case 'loose':\n return isVertical ? 'space-y-4' : 'space-x-8';\n default:\n return isVertical ? 'space-y-2' : 'space-x-3'; // Reduced spacing\n }\n };\n\n const containerClass = layout === 'vertical' \n ? `flex flex-col ${getSpacingClass()}`\n : `flex items-center ${getSpacingClass()}`; // Added items-center for better alignment\n\n const defaultActions: ActionButton[] = [\n {\n key: 'transaction',\n component: onTransactionClick && (\n <SubscriptionTransactionButton onClick={onTransactionClick} />\n ),\n show: showTransactionButton && !!onTransactionClick,\n },\n {\n key: 'cancel',\n component: onCancelClick && (\n <SubscriptionCancelButton onClick={onCancelClick} />\n ),\n show: showCancelButton && !!onCancelClick,\n },\n ];\n\n const allActions = [...defaultActions, ...customActions];\n const visibleActions = allActions.filter(action => action.show !== false && action.component);\n\n if (visibleActions.length === 0) {\n return null;\n }\n\n return (\n <div className={`${containerClass} ${className}`}>\n {visibleActions.map((action, index) => (\n <div \n key={action.key}\n style={{\n marginLeft: index > 0 && layout === 'horizontal' ? '12px' : '0',\n marginTop: index > 0 && layout === 'vertical' ? '8px' : '0'\n }}\n >\n {action.component}\n </div>\n ))}\n </div>\n );\n};\n\nexport default SubscriptionActionButtons;\n","import React from 'react';\n\nexport interface CancelOptions {\n cancellationMode?: 'immediate' | 'endOfPeriod';\n cancellationReason?: string;\n}\n\nexport interface SubscriptionCancelModalProps {\n isOpen: boolean;\n onClose: () => void;\n onConfirm: (options: CancelOptions) => Promise<void>;\n loading?: boolean;\n title?: string;\n description?: string;\n}\n\n\nexport const SubscriptionCancelModal: React.FC<SubscriptionCancelModalProps> = ({\n isOpen,\n onClose,\n onConfirm,\n loading = false,\n title = 'Cancel Subscription',\n description = 'Are you sure you want to cancel your subscription? This action cannot be undone.',\n}) => {\n // Static values as requested\n const cancellationMode = 'endOfPeriod';\n const cancellationReason = 'subscription_user_canceled_request';\n\n const handleConfirm = async () => {\n await onConfirm({\n cancellationMode,\n cancellationReason,\n });\n };\n\n if (!isOpen) return null;\n\n return (\n <div className=\"fixed inset-0 z-50 overflow-y-auto\">\n <div className=\"flex items-center justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0\">\n {/* Background overlay */}\n <div\n className=\"fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity\"\n onClick={onClose}\n />\n\n {/* Modal panel */}\n <div className=\"inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full relative z-10\">\n {/* Header */}\n <div className=\"bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4\">\n <div className=\"sm:flex sm:items-start\">\n <div className=\"mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-red-100 sm:mx-0 sm:h-10 sm:w-10\">\n <svg className=\"h-6 w-6 text-red-600\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L3.732 16.5c-.77.833.192 2.5 1.732 2.5z\"\n />\n </svg>\n </div>\n <div className=\"mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left flex-1\">\n <h3 className=\"text-lg leading-6 font-medium text-gray-900\">\n {title}\n </h3>\n <div className=\"mt-2\">\n <p className=\"text-sm text-gray-500\">\n {description}\n </p>\n </div>\n\n </div>\n </div>\n </div>\n\n {/* Footer */}\n <div className=\"bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse\">\n <button\n type=\"button\"\n onClick={handleConfirm}\n disabled={loading}\n className=\"w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 sm:ml-3 sm:w-auto sm:text-sm disabled:bg-red-300 disabled:cursor-not-allowed\"\n >\n {loading ? 'Cancelling...' : 'Confirm Cancellation'}\n </button>\n <button\n type=\"button\"\n onClick={onClose}\n disabled={loading}\n className=\"mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm disabled:bg-gray-100 disabled:cursor-not-allowed\"\n >\n Cancel\n </button>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default SubscriptionCancelModal;\n","import React, { useState } from 'react';\nimport { clearSelectedPlan } from '../../utils/upgradeUtils';\nimport type { Subscription } from '../../types';\nimport { TransactionModal } from '../transaction/TransactionModal';\nimport { useCancelSubscription } from '../../hooks/useCancelSubscription';\nimport { ChangeCardButton } from '../payments/ChangeCardButton';\nimport { SubscriptionInfoGrid } from './SubscriptionInfoGrid';\nimport { SubscriptionUsageDisplay, type UsageMetric } from './SubscriptionUsageDisplay';\nimport { SubscriptionActionButtons } from './SubscriptionActionButtons';\nimport { SubscriptionCancelModal, type CancelOptions } from './SubscriptionCancelModal';\n\nexport interface SubscriptionDetailsProps {\n subscription: Subscription | null;\n externalId: string;\n onSubscriptionCancelled?: () => void;\n usageMetrics?: UsageMetric[];\n showTransactionButton?: boolean;\n showCancelButton?: boolean;\n showChangeCardButton?: boolean;\n customActions?: React.ReactNode[];\n className?: string;\n}\n\nexport const SubscriptionDetails: React.FC<SubscriptionDetailsProps> = ({\n subscription,\n externalId,\n onSubscriptionCancelled,\n usageMetrics = [\n { key: 'ACTIVE_JOBS', label: 'Active Jobs' },\n { key: 'CANDIDATES', label: 'Candidates' },\n ],\n showTransactionButton = true,\n showCancelButton = true,\n showChangeCardButton = true,\n customActions = [],\n className = '',\n}) => {\n const [isTransactionModalOpen, setIsTransactionModalOpen] = useState(false);\n const [showCancelConfirmation, setShowCancelConfirmation] = useState(false);\n\n const { cancelSubscription, loading: cancelLoading } = useCancelSubscription({\n onSuccess: () => {\n setShowCancelConfirmation(false);\n onSubscriptionCancelled?.();\n // Show success message or notification here\n alert('Subscription cancelled successfully');\n },\n onError: (error) => {\n // Show error message or notification here\n alert(`Failed to cancel subscription: ${error}`);\n },\n });\n\n const handleTransactionClick = () => {\n // Hide upgrade summary selection when navigating to transactions\n clearSelectedPlan();\n setIsTransactionModalOpen(true);\n };\n\n const handleCancelClick = () => {\n // Hide upgrade summary selection when initiating cancellation flow\n clearSelectedPlan();\n setShowCancelConfirmation(true);\n };\n\n const handleConfirmCancel = async (options: CancelOptions) => {\n await cancelSubscription(externalId, {\n cancellationMode: options.cancellationMode || 'endOfPeriod',\n cancellationReason: options.cancellationReason || 'subscription_user_canceled_request'\n });\n };\n\n const handleCancelModalClose = () => {\n setShowCancelConfirmation(false);\n };\n return (\n <>\n {/* Email summary and change button */}\n\n {/* Subscription Details Header */}\n <div className={`mb-6 ${className}`}>\n <div className=\"flex items-center justify-between mb-4\">\n <h2 className=\"text-lg font-semibold\">Subscription Details</h2>\n <div className=\"flex gap-4\">\n <SubscriptionActionButtons\n onTransactionClick={showTransactionButton ? handleTransactionClick : undefined}\n onCancelClick={showCancelButton ? handleCancelClick : undefined}\n showTransactionButton={showTransactionButton}\n showCancelButton={showCancelButton}\n customActions={[\n ...(showChangeCardButton ? [{\n key: 'changeCard',\n component: (\n <ChangeCardButton\n externalId={externalId}\n onSuccess={() => {\n // Optional: Show success message or refresh data\n }}\n onError={(error) => {\n // Optional: Show error message\n alert(`Failed to open payment portal: ${error}`);\n }}\n >\n Manage Billing\n </ChangeCardButton>\n ),\n show: true,\n }] : []),\n ...customActions.map((action, index) => ({\n key: `custom-${index}`,\n component: action,\n show: true,\n })),\n ]}\n />\n </div>\n </div>\n \n {/* Info + Usage in one row with equal spacing */}\n <div className=\"grid grid-cols-1 md:grid-cols-5 gap-4\">\n {/* Subscription Info Grid */}\n <SubscriptionInfoGrid\n subscription={subscription}\n className=\"!contents\"\n gridCols={usageMetrics.length > 0 ? 3 : 5}\n />\n\n {/* Usage Display */}\n {usageMetrics.length > 0 && (\n <SubscriptionUsageDisplay\n subscription={subscription}\n usageMetrics={usageMetrics}\n gridCols={Math.min(usageMetrics.length, 3) as 1 | 2 | 3}\n className=\"!contents\"\n />\n )}\n </div>\n </div>\n\n {/* Transaction Modal */}\n <TransactionModal\n isOpen={isTransactionModalOpen}\n onClose={() => setIsTransactionModalOpen(false)}\n externalId={externalId}\n />\n\n {/* Cancellation Confirmation Modal */}\n <SubscriptionCancelModal\n isOpen={showCancelConfirmation}\n onClose={handleCancelModalClose}\n onConfirm={handleConfirmCancel}\n loading={cancelLoading}\n />\n </>\n );\n};\n","import React, { useEffect, useState } from 'react';\nimport type { Plan } from '../../types';\nimport { subscriptionApi } from '../../api/client';\n\ninterface CheckoutInfo {\n planName: string;\n planPrice: number;\n planInterval: string;\n proration: number;\n planCode: string;\n planCurrency: string;\n}\n\nexport interface UpgradeSummaryProps {\n selectedPlan: Plan | null;\n externalId: string;\n onUpgrade: () => void;\n isVisible?: boolean;\n}\n\nexport const UpgradeSummary: React.FC<UpgradeSummaryProps> = ({\n selectedPlan,\n externalId,\n onUpgrade,\n isVisible = true,\n}) => {\n const [checkoutInfo, setCheckoutInfo] = useState<CheckoutInfo | null>(null);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n if (!selectedPlan || !isVisible || Number(selectedPlan.fixedCost) === 0) {\n setCheckoutInfo(null);\n return;\n }\n\n const fetchCheckoutInfo = async () => {\n setLoading(true);\n try {\n const response = await subscriptionApi.checkoutInfo(selectedPlan.code, externalId);\n const dataWrapper = (response as any)?.data;\n if (dataWrapper?.success && dataWrapper?.data) {\n setCheckoutInfo(dataWrapper.data as CheckoutInfo);\n }\n } catch (error) {\n console.error('Failed to fetch checkout info:', error);\n } finally {\n setLoading(false);\n }\n };\n\n fetchCheckoutInfo();\n }, [selectedPlan, externalId, isVisible]);\n\n if (!selectedPlan || !isVisible || Number(selectedPlan.fixedCost) === 0 || loading || !checkoutInfo) {\n return null;\n }\n const displayInfo = checkoutInfo;\n\n const intervalDisplay = displayInfo.planInterval === 'MONTHLY' ? 'Mo' : 'Yr';\n const dueToday = displayInfo.proration > 0 ? displayInfo.proration : displayInfo.planPrice;\n\n return (\n <div className='w-full'>\n <div className='w-full'>\n <div \n className='shadow-xl rounded-md border px-4 py-3'\n style={{\n backgroundColor: 'var(--subos-background, #ffffff)',\n borderColor: 'var(--subos-border, #e2e8f0)',\n boxShadow: 'var(--subos-shadow-card-hover, 0 8px 24px rgba(0,0,0,0.15))'\n }}\n >\n <div className='flex items-center justify-between'>\n <div>\n <p \n className='text-sm'\n style={{ color: 'var(--subos-muted-foreground, #64748b)' }}\n >\n Summary\n </p>\n <h2 \n className='text-sm font-medium'\n style={{ color: 'var(--subos-foreground, #1e293b)' }}\n >\n {displayInfo.planName}\n </h2>\n </div>\n <div className='flex items-center gap-6'>\n <div className='text-right'>\n <h3 \n className='text-2xl font-semibold'\n style={{ color: 'var(--subos-foreground, #1e293b)' }}\n >\n ${displayInfo.planPrice}/{intervalDisplay}\n </h3>\n </div>\n <div className='flex items-center gap-4'>\n <div className='text-right'>\n <p \n className='text-sm'\n style={{ color: 'var(--subos-muted-foreground, #64748b)' }}\n >\n Due Today\n </p>\n <p \n className='text-xl font-semibold'\n style={{ color: 'var(--subos-foreground, #1e293b)' }}\n >\n ${dueToday}\n </p>\n {displayInfo.proration > 0 && (\n <p \n className='text-xs mt-1'\n style={{ color: 'var(--subos-muted-foreground, #64748b)' }}\n >\n (Includes prorated discount for unused days of your current plan)\n </p>\n )}\n </div>\n <button\n onClick={onUpgrade}\n disabled={loading}\n className='text-white px-8 py-3 rounded-lg font-semibold transition-all duration-200 text-sm disabled:opacity-50 shadow-md'\n style={{\n backgroundColor: loading \n ? 'var(--subos-muted, #f1f5f9)' \n : 'var(--subos-primary-500, #ef4444)',\n color: loading ? 'var(--subos-muted-foreground, #64748b)' : 'white',\n border: 'none',\n boxShadow: loading ? 'none' : '0 4px 12px rgba(239, 68, 68, 0.3)'\n }}\n onMouseEnter={!loading ? (e) => {\n e.currentTarget.style.backgroundColor = '#dc2626';\n e.currentTarget.style.transform = 'translateY(-1px)';\n e.currentTarget.style.boxShadow = '0 6px 16px rgba(239, 68, 68, 0.4)';\n } : undefined}\n onMouseLeave={!loading ? (e) => {\n e.currentTarget.style.backgroundColor = 'var(--subos-primary-500, #ef4444)';\n e.currentTarget.style.transform = 'translateY(0)';\n e.currentTarget.style.boxShadow = '0 4px 12px rgba(239, 68, 68, 0.3)';\n } : undefined}\n >\n {loading ? 'Loading...' : 'Upgrade Now'}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\n","import React from \"react\";\n\n// Renders the public/file.svg inside an inline <svg>, so you can pass standard SVG props\n// like className, width, height, etc. You can also override the src via props if needed.\n\ntype Props = React.SVGProps<SVGSVGElement> & {\n src?: string;\n alt?: string;\n};\n\nexport const LogoInline = ({ src, alt = \"Logo\", viewBox = \"0 0 1024 1024\", ...props }: Props) => {\n // Resolve the public asset respecting Vite's base path\n const resolvedSrc = src ?? \"https://upload.wikimedia.org/wikipedia/commons/a/a7/React-icon.svg\";\n\n return (\n <svg\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={viewBox}\n aria-label={alt}\n role=\"img\"\n {...props}\n >\n {/* Embed the external SVG asset inside this inline <svg> */}\n <image href={resolvedSrc} width=\"100%\" height=\"100%\" preserveAspectRatio=\"xMidYMid meet\" />\n </svg>\n );\n}\n","import type { ReactNode } from 'react';\nimport { Link as RouterLink } from 'react-router-dom';\nimport { LogoInline } from '../LogoInline';\n\ninterface LayoutProps {\n children: ReactNode;\n}\n\nexport const Layout: React.FC<LayoutProps> = ({ children }) => {\n return (\n <div className=\"flex flex-col min-h-screen w-full\">\n <header className=\"bg-white/80 backdrop-blur border-b border-gray-200\">\n <nav className=\"w-full flex items-center justify-between px-4 py-3\">\n <div className=\"flex-grow\">\n <RouterLink to=\"/\" className=\"no-underline text-inherit\">\n <div className=\"flex items-center\">\n <LogoInline className=\"h-8 w-auto\" alt=\"SubOS\" />\n </div>\n </RouterLink>\n </div>\n </nav>\n </header>\n \n <main className=\"flex-1 w-full\">\n {children}\n </main>\n \n <footer className=\"bg-gray-100 py-6 w-full mt-auto\">\n <div className=\"max-w-7xl mx-auto px-4\">\n <p className=\"text-sm text-gray-600 text-center\">\n © {new Date().getFullYear()} SubOS. All rights reserved.\n </p>\n </div>\n </footer>\n </div>\n );\n};\n\n\n","import React, { createContext, useContext } from 'react';\nimport type { ReactNode } from 'react';\n\nexport interface SubOSTheme {\n // Primary colors\n primaryColors?: {\n 50?: string;\n 100?: string;\n 200?: string;\n 300?: string;\n 400?: string;\n 500?: string;\n 600?: string;\n 700?: string;\n 800?: string;\n 900?: string;\n };\n \n // Secondary colors\n secondaryColors?: {\n 50?: string;\n 100?: string;\n 200?: string;\n 300?: string;\n 400?: string;\n 500?: string;\n 600?: string;\n 700?: string;\n 800?: string;\n 900?: string;\n };\n \n // Neutral colors\n background?: string;\n foreground?: string;\n muted?: string;\n mutedForeground?: string;\n border?: string;\n accent?: string;\n accentForeground?: string;\n \n // Typography\n fontFamily?: string;\n \n // Font sizes for specific elements\n fontSizes?: {\n subscriptionLabel?: string;\n subscriptionValue?: string;\n buttonText?: string;\n planTitle?: string;\n planDescription?: string;\n planCardTitle?: string;\n planCardDescription?: string;\n planCardInfo?: string;\n planCardFeature?: string;\n };\n \n // Font weights for specific elements\n fontWeights?: {\n subscriptionLabel?: number | string;\n subscriptionValue?: number | string;\n buttonText?: number | string;\n planTitle?: number | string;\n planDescription?: number | string;\n planCardTitle?: number | string;\n planCardDescription?: number | string;\n planCardInfo?: number | string;\n planCardFeature?: number | string;\n };\n \n // Font colors for specific elements\n fontColors?: {\n subscriptionLabel?: string;\n subscriptionValue?: string;\n buttonText?: string;\n planTitle?: string;\n planDescription?: string;\n planCardTitle?: string;\n planCardDescription?: string;\n planCardInfo?: string;\n planCardFeature?: string;\n };\n \n // Layout\n borderRadius?: string;\n \n // Shadows\n shadowCard?: string;\n shadowCardHover?: string;\n}\n\ninterface SubOSThemeContextType {\n theme: SubOSTheme;\n setTheme: (theme: SubOSTheme) => void;\n}\n\nconst SubOSThemeContext = createContext<SubOSThemeContextType | undefined>(undefined);\n\nexport const useSubOSTheme = () => {\n const context = useContext(SubOSThemeContext);\n if (!context) {\n throw new Error('useSubOSTheme must be used within a SubOSThemeProvider');\n }\n return context;\n};\n\ninterface SubOSThemeProviderProps {\n children: ReactNode;\n theme?: SubOSTheme;\n className?: string;\n}\n\nexport const SubOSThemeProvider: React.FC<SubOSThemeProviderProps> = ({ \n children, \n theme = {},\n className = ''\n}) => {\n const [currentTheme, setCurrentTheme] = React.useState<SubOSTheme>(theme);\n \n // Generate CSS custom properties from theme\n const cssVariables = React.useMemo(() => {\n const vars: Record<string, string> = {};\n \n // Primary colors\n if (currentTheme.primaryColors) {\n Object.entries(currentTheme.primaryColors).forEach(([key, value]) => {\n if (value) vars[`--subos-primary-${key}`] = value;\n });\n }\n \n // Secondary colors\n if (currentTheme.secondaryColors) {\n Object.entries(currentTheme.secondaryColors).forEach(([key, value]) => {\n if (value) vars[`--subos-secondary-${key}`] = value;\n });\n }\n \n // Neutral colors\n if (currentTheme.background) vars['--subos-background'] = currentTheme.background;\n if (currentTheme.foreground) vars['--subos-foreground'] = currentTheme.foreground;\n if (currentTheme.muted) vars['--subos-muted'] = currentTheme.muted;\n if (currentTheme.mutedForeground) vars['--subos-muted-foreground'] = currentTheme.mutedForeground;\n if (currentTheme.border) vars['--subos-border'] = currentTheme.border;\n if (currentTheme.accent) vars['--subos-accent'] = currentTheme.accent;\n if (currentTheme.accentForeground) vars['--subos-accent-foreground'] = currentTheme.accentForeground;\n \n // Typography\n if (currentTheme.fontFamily) vars['--subos-font-family'] = currentTheme.fontFamily;\n \n // Font sizes\n if (currentTheme.fontSizes) {\n Object.entries(currentTheme.fontSizes).forEach(([key, value]) => {\n if (value) {\n const cssKey = key.replace(/([A-Z])/g, '-$1').toLowerCase();\n vars[`--subos-font-size-${cssKey}`] = value;\n }\n });\n }\n \n // Font weights\n if (currentTheme.fontWeights) {\n Object.entries(currentTheme.fontWeights).forEach(([key, value]) => {\n if (value !== undefined) {\n const cssKey = key.replace(/([A-Z])/g, '-$1').toLowerCase();\n vars[`--subos-font-weight-${cssKey}`] = String(value);\n }\n });\n }\n \n // Font colors\n if (currentTheme.fontColors) {\n Object.entries(currentTheme.fontColors).forEach(([key, value]) => {\n if (value) {\n const cssKey = key.replace(/([A-Z])/g, '-$1').toLowerCase();\n vars[`--subos-color-${cssKey}`] = value;\n }\n });\n }\n \n // Layout\n if (currentTheme.borderRadius) vars['--subos-border-radius'] = currentTheme.borderRadius;\n \n // Shadows\n if (currentTheme.shadowCard) vars['--subos-shadow-card'] = currentTheme.shadowCard;\n if (currentTheme.shadowCardHover) vars['--subos-shadow-card-hover'] = currentTheme.shadowCardHover;\n \n return vars;\n }, [currentTheme]);\n \n const contextValue = React.useMemo(() => ({\n theme: currentTheme,\n setTheme: setCurrentTheme,\n }), [currentTheme]);\n \n return (\n <SubOSThemeContext.Provider value={contextValue}>\n <div \n className={`subos-container ${className}`}\n style={cssVariables}\n >\n {children}\n </div>\n </SubOSThemeContext.Provider>\n );\n};\n\n// Hook to easily apply theme from host application\nexport const useApplyHostTheme = (hostTheme?: Partial<SubOSTheme>) => {\n const { setTheme } = useSubOSTheme();\n \n React.useEffect(() => {\n if (hostTheme) {\n setTheme(hostTheme);\n }\n }, [hostTheme, setTheme]);\n};\n","import React from 'react';\nimport type { PaginationMeta } from '../../types';\n\nexport interface PaginationProps {\n meta: PaginationMeta;\n onPageChange: (page: number) => void;\n onLimitChange?: (limit: number) => void;\n showLimitSelector?: boolean;\n limitOptions?: number[];\n className?: string;\n}\n\nexport const Pagination: React.FC<PaginationProps> = ({\n meta,\n onPageChange,\n onLimitChange,\n showLimitSelector = true,\n limitOptions = [10, 25, 50, 100],\n className = '',\n}) => {\n const { currentPage, totalPages, totalItems, itemsPerPage, hasNextPage, hasPreviousPage } = meta;\n\n // Generate page numbers to display\n const getPageNumbers = () => {\n const pages: (number | string)[] = [];\n const maxVisiblePages = 7;\n \n if (totalPages <= maxVisiblePages) {\n // Show all pages if total pages is small\n for (let i = 1; i <= totalPages; i++) {\n pages.push(i);\n }\n } else {\n // Show first page\n pages.push(1);\n \n if (currentPage > 4) {\n pages.push('...');\n }\n \n // Show pages around current page\n const start = Math.max(2, currentPage - 1);\n const end = Math.min(totalPages - 1, currentPage + 1);\n \n for (let i = start; i <= end; i++) {\n if (i !== 1 && i !== totalPages) {\n pages.push(i);\n }\n }\n \n if (currentPage < totalPages - 3) {\n pages.push('...');\n }\n \n // Show last page\n if (totalPages > 1) {\n pages.push(totalPages);\n }\n }\n \n return pages;\n };\n\n const pageNumbers = getPageNumbers();\n\n const startItem = (currentPage - 1) * itemsPerPage + 1;\n const endItem = Math.min(currentPage * itemsPerPage, totalItems);\n\n return (\n <div className={`flex flex-col sm:flex-row items-center justify-between gap-4 ${className}`}>\n {/* Items info */}\n <div className=\"text-sm text-gray-700\">\n Showing {startItem} to {endItem} of {totalItems} results\n </div>\n\n <div className=\"flex items-center gap-4\">\n {/* Limit selector */}\n {showLimitSelector && onLimitChange && (\n <div className=\"flex items-center gap-2\">\n <label htmlFor=\"limit-select\" className=\"text-sm text-gray-700\">\n Show:\n </label>\n <select\n id=\"limit-select\"\n value={itemsPerPage}\n onChange={(e) => onLimitChange(Number(e.target.value))}\n className=\"border border-gray-300 rounded px-2 py-1 text-sm focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent\"\n >\n {limitOptions.map((option) => (\n <option key={option} value={option}>\n {option}\n </option>\n ))}\n </select>\n </div>\n )}\n\n {/* Pagination controls */}\n <div className=\"flex items-center gap-1\">\n {/* Previous button */}\n <button\n onClick={() => onPageChange(currentPage - 1)}\n disabled={!hasPreviousPage}\n className=\"px-3 py-2 text-sm font-medium text-gray-500 bg-white border border-gray-300 rounded-l-md hover:bg-gray-50 disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n Previous\n </button>\n\n {/* Page numbers */}\n {pageNumbers.map((page, index) => (\n <React.Fragment key={index}>\n {page === '...' ? (\n <span className=\"px-3 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300\">\n ...\n </span>\n ) : (\n <button\n onClick={() => onPageChange(page as number)}\n className={`px-3 py-2 text-sm font-medium border ${\n currentPage === page\n ? 'bg-primary text-white border-primary'\n : 'text-gray-700 bg-white border-gray-300 hover:bg-gray-50'\n }`}\n >\n {page}\n </button>\n )}\n </React.Fragment>\n ))}\n\n {/* Next button */}\n <button\n onClick={() => onPageChange(currentPage + 1)}\n disabled={!hasNextPage}\n className=\"px-3 py-2 text-sm font-medium text-gray-500 bg-white border border-gray-300 rounded-r-md hover:bg-gray-50 disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n Next\n </button>\n </div>\n </div>\n </div>\n );\n};\n","import React, { useEffect, useRef } from 'react';\nimport { Layout } from '../components/common/Layout';\nimport { useSubscription } from '../hooks/useSubscription';\nimport { usePlans } from '../hooks/usePlans';\nimport { SubscriptionDetails } from '../components/subscription/SubscriptionDetails';\nimport { PlanSelector } from '../components/plans/PlanSelector';\nimport { UpgradeSummary } from '../components/upgrade/UpgradeSummary';\nimport { UpgradeProvider } from '../contexts/UpgradeContext';\nimport { registerClearSelectedPlan, unregisterClearSelectedPlan } from '../utils/upgradeUtils';\n\nexport interface DashboardPageProps {\n externalId: string;\n}\n\nexport const DashboardPage: React.FC<DashboardPageProps> = ({ \n externalId, \n}) => {\n // Custom hooks\n const subscription = useSubscription();\n const plans = usePlans();\n \n // Track the last loaded externalId to prevent unnecessary re-fetches\n const lastLoadedIdRef = useRef<string | null>(null);\n\n // Load dashboard data on mount or when externalId changes\n useEffect(() => {\n if (lastLoadedIdRef.current !== externalId) {\n subscription.fetchSubscription(externalId);\n plans.fetchPlans();\n lastLoadedIdRef.current = externalId;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [externalId]); // Only depend on externalId to prevent infinite loops\n\n // Register the clear function for global access\n useEffect(() => {\n registerClearSelectedPlan(plans.clearSelectedPlan);\n return () => {\n unregisterClearSelectedPlan();\n };\n }, [plans.clearSelectedPlan]);\n\n // Handle upgrade\n const handleUpgrade = () => {\n plans.handleUpgrade(externalId);\n };\n\n return (\n <UpgradeProvider>\n <Layout>\n <div className=\"max-w-7xl mx-auto w-full h-full py-8 px-4 pb-24\">\n <SubscriptionDetails\n subscription={subscription.subscription}\n externalId={externalId}\n onSubscriptionCancelled={() => {\n // Refresh subscription data after cancellation\n subscription.fetchSubscription(externalId);\n // Clear selected plan when subscription is cancelled\n plans.clearSelectedPlan();\n }}\n />\n\n <PlanSelector\n plans={plans.filteredPlans}\n selectedPlan={plans.selectedPlan}\n tierFilter={plans.tierFilter}\n billingCycle={plans.billingCycle}\n loading={plans.loading}\n error={plans.error}\n dropdownOptions={plans.dropdownOptions}\n currentSelectionText={plans.currentSelectionText}\n onPlanSelect={plans.handlePlanSelect}\n onTierFilterChange={plans.setTierFilter}\n onBillingCycleChange={plans.setBillingCycle}\n activePlanCode={subscription.subscription?.plan.code}\n />\n\n <UpgradeSummary\n selectedPlan={plans.selectedPlan}\n externalId={externalId}\n onUpgrade={handleUpgrade}\n isVisible={!!plans.selectedPlan}\n />\n </div>\n </Layout>\n </UpgradeProvider>\n );\n};\n","import { useMemo } from 'react';\n\nexport interface PaymentParams {\n gateway?: string;\n sessionId?: string;\n paymentId?: string;\n reason?: string;\n}\n\nexport const usePaymentParams = (): PaymentParams => {\n return useMemo(() => {\n const params = new URLSearchParams(window.location.search);\n return {\n gateway: params.get('gateway') || undefined,\n sessionId: params.get('session_id') || undefined,\n paymentId: params.get('payment_id') || undefined,\n reason: params.get('reason') || undefined,\n };\n }, []);\n};\n","import { useEffect, useState } from 'react';\nimport { getApiBaseUrl, getHeaders } from '../../api/config';\nimport type { PaymentParams } from './usePaymentParams';\n\ninterface SuccessHookResult {\n loading: boolean;\n error: string | null;\n}\n\nexport const useProcessPaymentSuccess = (params: PaymentParams): SuccessHookResult => {\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n const run = async () => {\n try {\n const qs = new URLSearchParams({\n ...(params.gateway ? { gateway: params.gateway } : {}),\n ...(params.sessionId ? { session_id: params.sessionId } : {}),\n ...(params.paymentId ? { payment_id: params.paymentId } : {}),\n }).toString();\n\n const url = `${getApiBaseUrl()}/api/payments/success?${qs}`;\n const response = await fetch(url, {\n headers: getHeaders(),\n credentials: 'include',\n });\n\n const contentType = response.headers.get('content-type') || '';\n if (!contentType.includes('application/json')) {\n const text = await response.text();\n throw new Error(`Unexpected response type: ${contentType}. Body: ${text.slice(0, 200)}...`);\n }\n\n const result = await response.json();\n if (!result.success) {\n setError(result.error || 'Failed to process payment');\n }\n } catch (err: any) {\n setError(err?.message || 'Failed to process payment');\n } finally {\n setLoading(false);\n }\n };\n\n run();\n // we only want to run once on mount with initial params\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return { loading, error };\n};\n","import React from 'react';\nimport { Layout } from '../components/common/Layout';\nimport { usePaymentParams } from '../hooks/payments/usePaymentParams';\nimport { useProcessPaymentSuccess } from '../hooks/payments/useProcessPaymentSuccess';\nimport PaymentSuccessView from '../components/payments/PaymentSuccessView';\n\nconst PaymentSuccessPage: React.FC = () => {\n const paymentDetails = usePaymentParams();\n const { loading, error } = useProcessPaymentSuccess(paymentDetails);\n\n if (loading) {\n return (\n <Layout>\n <div className=\"container mx-auto p-4\">\n <div className=\"max-w-md mx-auto bg-white rounded-lg shadow-md p-6\">\n <div className=\"text-center\">\n <div className=\"animate-spin rounded-full h-12 w-12 border-b-2 border-green-600 mx-auto\"></div>\n <p className=\"mt-4 text-gray-600\">Processing your payment...</p>\n </div>\n </div>\n </div>\n </Layout>\n );\n }\n\n if (error) {\n return (\n <Layout>\n <div className=\"container mx-auto p-4\">\n <div className=\"max-w-md mx-auto bg-white rounded-lg shadow-md p-6\">\n <div className=\"text-center\">\n <div className=\"text-red-600 text-4xl mb-4\">⚠️</div>\n <h2 className=\"text-xl font-semibold text-gray-900 mb-2\">Payment Processing Error</h2>\n <p className=\"text-red-600 mb-4\">{error}</p>\n <div className=\"space-y-2\">\n <button\n onClick={() => window.location.reload()}\n className=\"w-full bg-blue-600 hover:bg-blue-700 text-white font-medium py-2 px-4 rounded-md transition-colors\"\n >\n Try Again\n </button>\n <button\n onClick={() => window.location.href = '/'}\n className=\"w-full bg-gray-500 hover:bg-gray-600 text-white font-medium py-2 px-4 rounded-md transition-colors\"\n >\n Go Home\n </button>\n </div>\n </div>\n </div>\n </div>\n </Layout>\n );\n }\n\n return (\n <Layout>\n <div className=\"container mx-auto p-4\">\n <PaymentSuccessView details={paymentDetails} />\n </div>\n </Layout>\n );\n};\n\nexport default PaymentSuccessPage;\n\n","import { useEffect, useState } from 'react';\nimport { getApiBaseUrl, getHeaders } from '../../api/config';\nimport type { PaymentParams } from './usePaymentParams';\n\ninterface CancelHookResult {\n loading: boolean;\n error: string | null;\n}\n\nexport const useProcessPaymentCancel = (params: PaymentParams): CancelHookResult => {\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n const run = async () => {\n try {\n const qs = new URLSearchParams({\n ...(params.gateway ? { gateway: params.gateway } : {}),\n ...(params.sessionId ? { session_id: params.sessionId } : {}),\n ...(params.paymentId ? { payment_id: params.paymentId } : {}),\n ...(params.reason ? { reason: params.reason } : {}),\n }).toString();\n\n const url = `${getApiBaseUrl()}/api/payments/cancel?${qs}`;\n await fetch(url, {\n headers: getHeaders(),\n credentials: 'include',\n });\n } catch (err: any) {\n setError(err?.message || 'Failed to process cancellation');\n } finally {\n setLoading(false);\n }\n };\n\n run();\n // run once on mount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return { loading, error };\n};\n","import React from 'react';\nimport { Layout } from '../components/common/Layout';\nimport { usePaymentParams } from '../hooks/payments/usePaymentParams';\nimport { useProcessPaymentCancel } from '../hooks/payments/useProcessPaymentCancel';\nimport PaymentCancelView from '../components/payments/PaymentCancelView';\n\nconst PaymentCancelPage: React.FC = () => {\n const details = usePaymentParams();\n const { loading } = useProcessPaymentCancel(details);\n\n if (loading) {\n return (\n <Layout>\n <div className=\"container mx-auto p-4\">\n <div className=\"max-w-md mx-auto bg-white rounded-lg shadow-md p-6\">\n <div className=\"text-center\">\n <div className=\"animate-spin rounded-full h-12 w-12 border-b-2 border-orange-600 mx-auto\"></div>\n <p className=\"mt-4 text-gray-600\">Processing cancellation...</p>\n </div>\n </div>\n </div>\n </Layout>\n );\n }\n\n return (\n <Layout>\n <div className=\"container mx-auto p-4\">\n <PaymentCancelView details={details} />\n </div>\n </Layout>\n );\n};\n\nexport default PaymentCancelPage;\n","import { BrowserRouter as Router, Routes, Route, Navigate } from 'react-router-dom';\nimport { DashboardPage } from './pages/DashboardPage';\nimport PaymentSuccessPage from './pages/PaymentSuccessPage';\nimport PaymentCancelPage from './pages/PaymentCancelPage';\n\nexport interface AppProps {\n externalId: string;\n}\n<style>\n {`\n :root {\n --primary-light: #3f51b5;\n --primary-dark: #3f51b5;\n }\n `}\n </style>\nexport const App = function App({ externalId }: AppProps) {\n return (\n <Router>\n <Routes>\n <Route path=\"/\" element={<Navigate to=\"/dashboard\" replace />} />\n <Route path=\"/dashboard\" element={<DashboardPage externalId={externalId} />} />\n <Route path=\"/payment-success\" element={<PaymentSuccessPage />} />\n <Route path=\"/payment-cancel\" element={<PaymentCancelPage />} />\n </Routes>\n </Router>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/config/envConfig.ts","../src/api/config.ts","../src/api/client.ts","../src/hooks/useSubscription.ts","../src/utils/planUtils.ts","../src/hooks/usePlans.ts","../src/hooks/useTransactions.ts","../src/hooks/usePagination.ts","../src/hooks/useCancelSubscription.ts","../src/hooks/useCustomerPortal.ts","../src/contexts/UpgradeContext.tsx","../src/components/plans/BillingCycleToggle.tsx","../src/components/plans/TierFilterDropdown.tsx","../src/components/icons/CheckIcon.tsx","../src/components/plans/PlanCard.tsx","../src/components/icons/CommonIcons.tsx","../src/components/plans/PlansGrid.tsx","../src/components/plans/PlanSelector.tsx","../src/components/payments/ChangeCardButton.tsx","../src/components/payments/PaymentCancelView.tsx","../src/components/payments/PaymentSuccessView.tsx","../src/utils/upgradeUtils.ts","../src/components/transaction/TransactionItem.tsx","../src/components/transaction/TransactionLoadingState.tsx","../src/components/transaction/TransactionErrorState.tsx","../src/components/transaction/TransactionEmptyState.tsx","../src/components/transaction/TransactionList.tsx","../src/components/transaction/TransactionStatusFilter.tsx","../src/components/transaction/TransactionFilter.tsx","../src/components/transaction/TransactionPagination.tsx","../src/components/transaction/TransactionModal.tsx","../src/components/subscription/SubscriptionInfoGrid.tsx","../src/components/subscription/SubscriptionUsageDisplay.tsx","../src/components/subscription/SubscriptionTransactionButton.tsx","../src/components/subscription/SubscriptionCancelButton.tsx","../src/components/subscription/SubscriptionActionButtons.tsx","../src/components/subscription/SubscriptionCancelModal.tsx","../src/components/subscription/SubscriptionDetails.tsx","../src/components/upgrade/UpgradeSummary.tsx","../src/components/LogoInline.tsx","../src/components/common/Layout.tsx","../src/components/common/SubOSThemeProvider.tsx","../src/components/pagination/Pagination.tsx","../src/pages/DashboardPage.tsx","../src/hooks/payments/usePaymentParams.ts","../src/hooks/payments/useProcessPaymentSuccess.ts","../src/pages/PaymentSuccessPage.tsx","../src/hooks/payments/useProcessPaymentCancel.ts","../src/pages/PaymentCancelPage.tsx","../src/App.tsx"],"names":["useState","useCallback","error","clearSelectedPlan","useEffect","apiRequest","jsx","useRef","jsxs","DownloadIcon","React","Fragment","RouterLink","createContext","useContext","App","Router"],"mappings":"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","file":"index.mjs","sourcesContent":["// Environment configuration with runtime overrides\n// Centralized config that can be set by the consumer project at runtime\n\ntype EnvDefaults = {\n API_ENDPOINT: string;\n NEXT_PUBLIC_API_END_POINT: string;\n PROJECT_ID: string;\n STRIPE_PUBLISHABLE_KEY: string;\n APP_NAME: string;\n APP_VERSION: string;\n APP_ENVIRONMENT: string;\n DEBUG: boolean;\n MODE: string;\n DEV: boolean;\n PROD: boolean;\n};\n\n// Safe environment access that works in both Vite and other bundlers\n// Overloads ensure callers get a correctly typed value when a fallback is provided\nfunction getEnvVar(key: string, fallback: string): string;\nfunction getEnvVar(key: string, fallback: boolean): boolean;\nfunction getEnvVar(key: string): string | boolean | undefined;\nfunction getEnvVar(\n key: string,\n fallback?: string | boolean\n): string | boolean | undefined {\n try {\n // Check Vite environment first\n if (\n typeof import.meta !== 'undefined' &&\n (import.meta as unknown as { env?: Record<string, string | boolean | undefined> }).env\n ) {\n const v = (import.meta as unknown as { env?: Record<string, string | boolean | undefined> }).env![key] as\n | string\n | boolean\n | undefined;\n if (typeof fallback === 'boolean') {\n if (typeof v === 'boolean') return v;\n if (typeof v === 'string') return ['true', '1', 'yes'].includes(v.toLowerCase());\n return fallback;\n }\n if (typeof fallback === 'string') {\n if (typeof v === 'string') return v;\n if (typeof v === 'boolean') return v ? 'true' : 'false';\n return fallback;\n }\n return v;\n }\n\n // Fallback for Node.js / other environments\n const nodeEnv = (typeof globalThis !== 'undefined' && (globalThis as { process?: { env?: Record<string, string | undefined> } }).process?.env) as\n | Record<string, string | undefined>\n | undefined;\n if (nodeEnv) {\n const v = nodeEnv[key];\n if (typeof fallback === 'boolean') {\n if (typeof v === 'string') return ['true', '1', 'yes'].includes(v.toLowerCase());\n return fallback;\n }\n if (typeof fallback === 'string') {\n return v ?? fallback;\n }\n return v;\n }\n\n return fallback;\n } catch {\n return fallback;\n }\n}\n\n\nconst envDefaults: EnvDefaults = {\n // API Configuration - These MUST be configured by the consuming app\n API_ENDPOINT: getEnvVar('VITE_API_ENDPOINT', ''),\n NEXT_PUBLIC_API_END_POINT: getEnvVar('VITE_NEXT_PUBLIC_API_END_POINT', ''),\n // Project configuration for backend header - This MUST be configured by the consuming app\n PROJECT_ID: getEnvVar('VITE_PROJECT_ID', ''),\n // Third-party keys - This MUST be configured by the consuming app\n STRIPE_PUBLISHABLE_KEY: getEnvVar('VITE_STRIPE_PUBLISHABLE_KEY', ''),\n // App Configuration\n APP_NAME: getEnvVar('VITE_APP_NAME', 'SubOS Frontend'),\n APP_VERSION: getEnvVar('VITE_APP_VERSION', '1.0.0'),\n APP_ENVIRONMENT: getEnvVar('VITE_APP_ENVIRONMENT', 'development'),\n // Development Configuration\n DEBUG: getEnvVar('VITE_DEBUG', false),\n // Mode\n MODE: getEnvVar('MODE', 'development'),\n DEV: getEnvVar('DEV', false),\n PROD: getEnvVar('PROD', false),\n};\n\nconst runtimeOverrides: Partial<EnvDefaults> = {};\n\nexport type EnvConfig = EnvDefaults;\n\nexport type ConfigureSubOSInput = Partial<{\n apiEndpoint: string;\n projectId: string;\n stripePublishableKey: string;\n appName: string;\n appVersion: string;\n appEnvironment: string;\n debug: boolean;\n}>;\n\n// Call from consumer app to override defaults at runtime\nexport function configureSubOS(input: ConfigureSubOSInput = {}): void {\n if (input.apiEndpoint !== undefined) runtimeOverrides.API_ENDPOINT = input.apiEndpoint;\n if (input.projectId !== undefined) runtimeOverrides.PROJECT_ID = input.projectId;\n if (input.stripePublishableKey !== undefined) runtimeOverrides.STRIPE_PUBLISHABLE_KEY = input.stripePublishableKey;\n if (input.appName !== undefined) runtimeOverrides.APP_NAME = input.appName;\n if (input.appVersion !== undefined) runtimeOverrides.APP_VERSION = input.appVersion;\n if (input.appEnvironment !== undefined) runtimeOverrides.APP_ENVIRONMENT = input.appEnvironment;\n if (input.debug !== undefined) runtimeOverrides.DEBUG = input.debug;\n}\n\n// Validation function to ensure required config is set\nexport function validateSubOSConfig(): { isValid: boolean; missingFields: string[] } {\n const missingFields: string[] = [];\n \n if (!getApiBaseUrl()) missingFields.push('apiEndpoint');\n if (!getProjectId()) missingFields.push('projectId');\n if (!getStripePublishableKey()) missingFields.push('stripePublishableKey');\n \n return {\n isValid: missingFields.length === 0,\n missingFields\n };\n}\n\n// Helper to throw error if config is invalid\nexport function ensureSubOSConfig(): void {\n const validation = validateSubOSConfig();\n if (!validation.isValid) {\n throw new Error(\n `SubOS configuration is incomplete. Missing required fields: ${validation.missingFields.join(', ')}. ` +\n 'Please call configureSubOS() with the required configuration before using SubOS components.'\n );\n }\n}\n\n// Resolved config getters (runtime override wins over env defaults)\nexport const getApiBaseUrl = (): string => runtimeOverrides.API_ENDPOINT ?? envDefaults.API_ENDPOINT;\nexport const getProjectId = (): string => runtimeOverrides.PROJECT_ID ?? envDefaults.PROJECT_ID;\nexport const getStripePublishableKey = (): string => runtimeOverrides.STRIPE_PUBLISHABLE_KEY ?? envDefaults.STRIPE_PUBLISHABLE_KEY;\n\nexport const isDevelopment = (): boolean => {\n const env = runtimeOverrides.APP_ENVIRONMENT ?? envDefaults.APP_ENVIRONMENT;\n const devFlag = runtimeOverrides.DEV ?? envDefaults.DEV;\n return env === 'development' || !!devFlag;\n};\n\nexport const isProduction = (): boolean => {\n const env = runtimeOverrides.APP_ENVIRONMENT ?? envDefaults.APP_ENVIRONMENT;\n const prodFlag = runtimeOverrides.PROD ?? envDefaults.PROD;\n return env === 'production' || !!prodFlag;\n};\n","import { getApiBaseUrl, getProjectId } from '../config/envConfig.js';\n// API configuration (use getter so runtime overrides apply)\nexport { getApiBaseUrl };\n\n// Common headers for API requests\nexport const getHeaders = () => {\n return {\n 'Content-Type': 'application/json',\n 'auth': 'auth', // Adding auth header with value 'auth' for all API requests\n 'projectId': getProjectId(),\n };\n};\n\n// API endpoints\nexport const ENDPOINTS = {\n PLANS: '/plans',\n PAYMENTS: '/api/payments',\n CHECKOUT: '/checkout',\n SUBSCRIPTION: '/subscription',\n CUSTOMER: '/customer',\n TRANSACTIONS: '/transaction'\n};\n","import { getApiBaseUrl, getHeaders, ENDPOINTS } from './config';\nimport type { ApiResponse, Plan } from '../types';\n\n// Generic API request handler\nasync function apiRequest<T>(\n endpoint: string, \n method: string = 'GET', \n data?: unknown\n): Promise<ApiResponse<T>> {\n try {\n const url = `${getApiBaseUrl()}${endpoint}`;\n const options: RequestInit = {\n method,\n headers: getHeaders(),\n credentials: 'include',\n };\n\n if (data) {\n options.body = JSON.stringify(data);\n }\n\n const response = await fetch(url, options);\n const result = await response.json();\n\n if (!response.ok) {\n return { success: false, error: result.message || 'An error occurred' };\n }\n\n return { success: true, data: result };\n } catch (error) {\n console.error('API request failed:', error);\n return { \n success: false, \n error: error instanceof Error ? error.message : 'Unknown error occurred'\n };\n }\n}\n\n// Plan API functions\nexport const plansApi = {\n getPlans: async (): Promise<ApiResponse<Plan[]>> => {\n return apiRequest<Plan[]>(`${ENDPOINTS.PLANS}`);\n },\n getPlanByCode: (code: string, externalId: string, queryParams?: { paymentMethodId?: string | null; couponCode?: string | null }) => {\n const params = new URLSearchParams({ planCode: code, externalId });\n if (queryParams?.paymentMethodId) params.append('paymentMethodId', queryParams.paymentMethodId);\n if (queryParams?.couponCode) params.append('couponCode', queryParams.couponCode);\n return apiRequest<Plan>(`${ENDPOINTS.PLANS}?${params.toString()}`);\n },\n \n // Create unified checkout session and get hosted checkout URL\n createPaymentSession: async (\n planCode: string,\n options?: { amount?: number; currency?: string; externalId?: string; couponCode?: string; returnUrl?: string; cancelUrl?: string }\n ): Promise<ApiResponse<{ checkoutUrl: string; gateway: string; sessionId?: string; paymentId?: string }>> => {\n const externalId = options?.externalId;\n const currency = options?.currency || 'USD';\n const amount = options?.amount; // if not provided, backend will compute from plan\n\n const payload: any = {\n planCode,\n currency,\n returnUrl: options?.returnUrl ?? `${window.location.origin}/payment-success`,\n cancelUrl: options?.cancelUrl ?? `${window.location.origin}/payment-cancel`,\n };\n\n if (externalId) payload.externalId = externalId;\n if (options?.couponCode) payload.couponCode = options.couponCode;\n if (typeof amount === 'number' && amount > 0) payload.amount = amount;\n\n const resp = await apiRequest<any>(\n `${ENDPOINTS.CHECKOUT}`,\n 'POST',\n payload\n );\n\n // Backend returns { success: boolean, data: { checkoutUrl, ... } }\n // Our apiRequest wraps this again as { success: true, data: <backendResponse> }\n if (resp.success && resp.data && typeof resp.data === 'object' && 'data' in resp.data) {\n return { success: true, data: (resp.data as any).data };\n }\n return resp as ApiResponse<{ checkoutUrl: string; gateway: string; sessionId?: string; paymentId?: string }>;\n },\n};\n\n// Subscription API functions (via SDK)\nexport const subscriptionApi = {\n getActiveSubscription: async (externalId: string): Promise<ApiResponse<any>> => {\n return apiRequest<any>(`${ENDPOINTS.SUBSCRIPTION}/${externalId}`);\n },\n cancelSubscription: async (\n externalId: string, \n options?: { \n cancellationMode?: string; \n cancellationReason?: string; \n }\n ): Promise<ApiResponse<any>> => {\n let endpoint = `${ENDPOINTS.SUBSCRIPTION}/${externalId}`;\n \n if (options) {\n const params = new URLSearchParams();\n if (options.cancellationMode) params.append('cancellationMode', options.cancellationMode);\n if (options.cancellationReason) params.append('cancellationReason', options.cancellationReason);\n \n if (params.toString()) {\n endpoint += `?${params.toString()}`;\n }\n }\n \n return apiRequest<any>(endpoint, 'DELETE');\n },\n checkoutInfo: async (planCode: string, externalId: string): Promise<ApiResponse<any>> => {\n return apiRequest<any>(`${ENDPOINTS.CHECKOUT}/info/${planCode}/${externalId}`);\n }\n};\n\n// Customer API functions (partially via SDK)\nexport const customerApi = {\n getCustomer: (externalId: string): Promise<ApiResponse<any>> =>\n apiRequest<any>(`${ENDPOINTS.CUSTOMER}/${externalId}`),\n};\n\n// Transaction API functions\nexport const transactionApi = {\n getTransactions: (externalId: string, filters?: { startDate?: string; endDate?: string; status?: string; page?: number; limit?: number }) => {\n // Using the endpoint from transaction.controller.ts: GET /:externalId/history\n let endpoint = `${ENDPOINTS.TRANSACTIONS}/${externalId}/history`;\n \n if (filters) {\n const params = new URLSearchParams();\n if (filters.startDate) params.append('startDate', filters.startDate);\n if (filters.endDate) params.append('endDate', filters.endDate);\n if (filters.status) params.append('status', filters.status);\n if (filters.page) params.append('page', filters.page.toString());\n if (filters.limit) params.append('limit', filters.limit.toString());\n \n if (params.toString()) {\n endpoint += `?${params.toString()}`;\n }\n }\n \n return apiRequest<any>(endpoint);\n },\n \n getInvoice: (transactionId: string) =>\n apiRequest<{ invoiceUrl: string }>(`${ENDPOINTS.TRANSACTIONS}/${transactionId}/invoice`),\n};\n","import { useState, useCallback } from 'react';\nimport { subscriptionApi } from '../api/client';\nimport type { Subscription } from '../types';\n\nexport interface UseSubscriptionReturn {\n subscription: Subscription | null;\n loading: boolean;\n error: string | null;\n fetchSubscription: (externalId: string) => Promise<void>;\n clearSubscription: () => void;\n}\n\nexport const useSubscription = (): UseSubscriptionReturn => {\n const [subscription, setSubscription] = useState<Subscription | null>(null);\n const [loading, setLoading] = useState<boolean>(false);\n const [error, setError] = useState<string | null>(null);\n\n const fetchSubscription = useCallback(async (externalId: string) => {\n // Validate externalId before making API call\n if (!externalId || externalId === 'undefined' || externalId.trim() === '') {\n setError('Invalid user ID. Please ensure you are properly authenticated.');\n setLoading(false);\n return;\n }\n\n // Prevent multiple simultaneous requests\n if (loading) return;\n\n setLoading(true);\n setError(null);\n\n try {\n const response = await subscriptionApi.getActiveSubscription(externalId);\n \n\n if (response.success && response.data) {\n setSubscription(response.data);\n } else {\n setError(response.error || 'Failed to load subscription information');\n }\n } catch (err) {\n // Only set error if it's not an AbortError (request cancellation)\n if (err instanceof Error && err.name !== 'AbortError') {\n console.error('Error fetching subscription:', err);\n setError('Failed to load subscription information. Please try again later.');\n }\n } finally {\n setLoading(false);\n }\n }, [loading]);\n\n const clearSubscription = useCallback(() => {\n setSubscription(null);\n setError(null);\n }, []);\n\n return {\n subscription,\n loading,\n error,\n fetchSubscription,\n clearSubscription,\n };\n};\n","import type { Plan } from '../types';\n\nexport interface DropdownOption {\n value: string;\n label: string;\n candidates: number;\n}\n\n/**\n * Get plan features for display based on plan name\n */\nexport const getPlanFeatures = (plan: Plan): string[] => {\n const features: string[] = [];\n if (plan.charges && plan.charges.length > 0) {\n plan.charges.forEach(charge => {\n if (charge.billableMetric?.name) {\n features.push(charge.billableMetric.name);\n }\n });\n }\n return features.length > 0 ? features.slice(0, 7) : ['Core features included'];\n};\n\n/**\n * Get candidate units from plan's billable metrics (numeric only)\n */\nexport const getCandidateUnits = (plan: Plan): number => {\n if (plan.charges && plan.charges.length > 0) {\n const candidateCharge = plan.charges.find(\n (charge) => charge.billableMetric && charge.billableMetric.code === 'CANDIDATES'\n );\n\n const units = candidateCharge?.properties?.units;\n if (typeof units === 'number' && Number.isFinite(units)) {\n return units;\n }\n }\n return 0;\n};\n\n/**\n * Get unique candidate units from all plans (numeric only)\n */\nexport const getUniqueCandidateUnits = (plans: Plan[]): number[] => {\n const unitsSet = new Set<number>();\n\n plans.forEach((plan) => {\n plan.charges.forEach((charge) => {\n if (charge.billableMetric?.code === 'CANDIDATES') {\n const units = charge.properties?.units;\n if (typeof units === 'number' && Number.isFinite(units)) {\n unitsSet.add(units);\n }\n }\n });\n });\n\n return Array.from(unitsSet).sort((a, b) => a - b); // Sort in ascending order\n};\n\n/**\n * Get dropdown options with unique candidate units\n */\nexport const getDropdownOptions = (plans: Plan[]): DropdownOption[] => {\n const options: DropdownOption[] = [];\n const uniqueUnits = getUniqueCandidateUnits(plans);\n \n // Add options for each unique candidate unit value\n uniqueUnits.forEach(units => {\n options.push({\n value: units.toString(),\n label: `Up to ${units.toLocaleString()} Candidates`,\n candidates: units\n });\n });\n \n return options;\n};\n\n/**\n * Get current selection display text\n */\nexport const getCurrentSelectionText = (tierFilter: string, plans: Plan[]): string => {\n const options = getDropdownOptions(plans);\n const currentOption = options.find(option => option.value === tierFilter);\n \n if (!currentOption) {\n // If no option found, check if tierFilter is a number (candidate units)\n const units = parseInt(tierFilter);\n if (!isNaN(units)) {\n return `Up to ${units.toLocaleString()} Candidates`;\n }\n // Fallback to the lowest candidates label if available, otherwise empty string\n return options.length > 0 ? options[0].label : '';\n }\n \n return currentOption.label;\n};\n\n/**\n * Filter plans based on billing cycle\n */\nexport const filterPlansByBillingCycle = (\n plans: Plan[], \n billingCycle: 'monthly' | 'yearly'\n): Plan[] => {\n return plans.filter((plan) => {\n const planInterval = plan.interval.toLowerCase();\n if (billingCycle === 'monthly') {\n return planInterval === 'month' || planInterval === 'monthly';\n } else {\n return planInterval === 'year' || planInterval === 'yearly';\n }\n });\n};\n\n/**\n * Filter plans based on candidate units\n */\nexport const filterPlansByTier = (plans: Plan[], tierFilter: string): Plan[] => {\n if (tierFilter === 'all') {\n return plans;\n }\n\n const targetUnits = parseInt(tierFilter);\n return plans.filter((plan) => {\n // Always include Starter plan regardless of tier filter\n const planNameLc = plan.name?.toLowerCase?.() || '';\n if (planNameLc.includes('starter')) return true;\n\n const planCandidateUnits = getCandidateUnits(plan);\n return planCandidateUnits === targetUnits;\n });\n};\n\n/**\n * Check if a plan is popular (typically Growth plan)\n */\nexport const isPlanPopular = (plan: Plan): boolean => {\n const planName = plan.name.toLowerCase();\n return planName.includes('growth');\n};\n\n/**\n * Get plan description based on plan name\n */\nexport const getPlanDescription = (plan: Plan): string => {\n const planName = plan.name.toLowerCase();\n \n if (planName.includes('starter') || planName.includes('basic')) {\n return 'Ideal for solopreneurs looking to start their niche job board journey.';\n } else if (planName.includes('growth') || planName.includes('pro')) {\n return 'Ideal for creators launching their job board with powerful features and built-in scalability.';\n } else {\n return 'Perfect for creators ready to run a full-scale, smart hiring engine with AI and advanced capabilities.';\n }\n};\n\n/**\n * Format date string with optional time format\n */\nexport const formatDate = (dateString: string, format: 'date' | 'datetime' = 'date'): string => {\n const date = new Date(dateString);\n \n if (format === 'datetime') {\n return new Intl.DateTimeFormat('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n hour12: false // Military time format\n }).format(date);\n }\n \n return new Intl.DateTimeFormat('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric'\n }).format(date);\n};\n","import { useState, useEffect, useCallback } from 'react';\nimport { plansApi } from '../api/client';\nimport type { Plan } from '../types';\nimport { \n filterPlansByBillingCycle, \n filterPlansByTier, \n getUniqueCandidateUnits,\n getDropdownOptions,\n getCurrentSelectionText,\n type DropdownOption\n} from '../utils/planUtils';\n\nexport interface UsePlansReturn {\n // Data\n plans: Plan[];\n filteredPlans: Plan[];\n selectedPlan: Plan | null;\n \n // Filters\n tierFilter: string;\n billingCycle: 'monthly' | 'yearly';\n \n // Loading and error states\n loading: boolean;\n error: string | null;\n \n // Actions\n fetchPlans: () => Promise<void>;\n setSelectedPlan: (plan: Plan | null) => void;\n setTierFilter: (filter: string) => void;\n setBillingCycle: (cycle: 'monthly' | 'yearly') => void;\n clearPlans: () => void;\n clearSelectedPlan: () => void;\n \n // Computed values\n dropdownOptions: DropdownOption[];\n currentSelectionText: string;\n \n // Plan operations\n handlePlanSelect: (plan: Plan) => void;\n handleUpgrade: (externalId: string) => Promise<void>;\n}\n\nexport const usePlans = (): UsePlansReturn => {\n // Core state\n const [plans, setPlans] = useState<Plan[]>([]);\n const [filteredPlans, setFilteredPlans] = useState<Plan[]>([]);\n const [selectedPlan, setSelectedPlan] = useState<Plan | null>(null);\n \n // Filter state\n const [tierFilter, setTierFilter] = useState<string>('all');\n const [billingCycle, setBillingCycle] = useState<'monthly' | 'yearly'>('monthly');\n \n // Loading and error state\n const [loading, setLoading] = useState<boolean>(false);\n const [error, setError] = useState<string | null>(null);\n\n // Fetch plans from API\n const fetchPlans = useCallback(async () => {\n // Prevent multiple simultaneous requests\n if (loading) return;\n \n setLoading(true);\n setError(null);\n\n try {\n const response = await plansApi.getPlans();\n if (response.success && response.data) {\n const data = response.data;\n setPlans(data);\n setFilteredPlans(data);\n } else {\n setError(response.error || 'Failed to load plan information');\n }\n } catch (err) {\n // Only set error if it's not an AbortError (request cancellation)\n if (err instanceof Error && err.name !== 'AbortError') {\n console.error('Error fetching plans:', err);\n setError('Failed to load plan information. Please try again later.');\n }\n } finally {\n setLoading(false);\n }\n }, [loading]);\n\n // Set default tierFilter to lowest candidate unit when plans are loaded\n useEffect(() => {\n if (plans.length > 0 && tierFilter === 'all') {\n const uniqueUnits = getUniqueCandidateUnits(plans);\n if (uniqueUnits.length > 0) {\n setTierFilter(uniqueUnits[0].toString()); // Set to lowest value\n }\n }\n }, [plans, tierFilter]);\n\n // Filter plans based on candidate units and billing cycle\n useEffect(() => {\n let filtered = [...plans];\n\n // Filter by billing cycle (monthly/yearly)\n filtered = filterPlansByBillingCycle(filtered, billingCycle);\n\n // Filter by candidate units if not 'all'\n filtered = filterPlansByTier(filtered, tierFilter);\n\n setFilteredPlans(filtered);\n }, [plans, tierFilter, billingCycle]);\n\n // Handle plan selection\n const handlePlanSelect = useCallback((plan: Plan) => {\n setSelectedPlan(plan);\n }, []);\n\n // Handle upgrade button click\n const handleUpgrade = useCallback(async (externalId: string) => {\n if (!selectedPlan) return;\n\n try {\n const response = await plansApi.createPaymentSession(selectedPlan.code, {\n externalId: externalId,\n });\n if (response.success && response.data?.checkoutUrl) {\n window.location.href = response.data.checkoutUrl;\n } else {\n console.error('Failed to create payment session:', response.error);\n alert('Failed to initiate payment. Please try again.');\n }\n } catch (error) {\n console.error('Error creating payment session:', error);\n alert('An error occurred. Please try again.');\n }\n }, [selectedPlan]);\n\n // Clear plans data\n const clearPlans = useCallback(() => {\n setPlans([]);\n setFilteredPlans([]);\n setSelectedPlan(null);\n setError(null);\n setTierFilter('all');\n }, []);\n\n // Clear selected plan only\n const clearSelectedPlan = useCallback(() => {\n setSelectedPlan(null);\n }, []);\n\n // Computed values\n const dropdownOptions = getDropdownOptions(plans);\n const currentSelectionText = getCurrentSelectionText(tierFilter, plans);\n\n return {\n // Data\n plans,\n filteredPlans,\n selectedPlan,\n \n // Filters\n tierFilter,\n billingCycle,\n \n // Loading and error states\n loading,\n error,\n \n // Actions\n fetchPlans,\n setSelectedPlan,\n setTierFilter,\n setBillingCycle,\n clearPlans,\n clearSelectedPlan,\n \n // Computed values\n dropdownOptions,\n currentSelectionText,\n \n // Plan operations\n handlePlanSelect,\n handleUpgrade,\n };\n};\n","import { useState, useEffect, useCallback, useRef } from 'react';\nimport { transactionApi } from '../api/client';\nimport type { Transaction, TransactionFilters, PaginatedResponse, ApiResponse } from '../types';\n\nexport interface UseTransactionsProps {\n externalId: string;\n initialFilters?: TransactionFilters;\n autoFetch?: boolean;\n}\n\nexport interface UseTransactionsReturn {\n transactions: Transaction[];\n loading: boolean;\n error: string | null;\n filters: TransactionFilters;\n meta: {\n currentPage: number;\n totalPages: number;\n totalItems: number;\n itemsPerPage: number;\n hasNextPage: boolean;\n hasPreviousPage: boolean;\n } | null;\n fetchTransactions: () => Promise<void>;\n updateFilters: (newFilters: Partial<TransactionFilters>) => void;\n clearFilters: () => void;\n refetch: () => Promise<void>;\n}\n\nconst DEFAULT_FILTERS: TransactionFilters = {\n page: 1,\n limit: 10,\n};\n\n// Helper function to apply frontend filters\nconst applyFrontendFilters = (transactions: Transaction[], filters: TransactionFilters): Transaction[] => {\n let filtered = [...transactions];\n\n // Filter by status (only if status filter is set and not empty)\n if (filters.status && filters.status.trim() !== '') {\n filtered = filtered.filter(transaction => \n transaction.transactionStatus.toLowerCase() === filters.status?.toLowerCase()\n );\n }\n\n // Filter by date range (only if dates are set)\n if (filters.startDate && filters.startDate.trim() !== '') {\n const startDate = new Date(filters.startDate);\n filtered = filtered.filter(transaction => {\n const transactionDate = new Date(transaction.transactionDate || transaction.membershipDate);\n return transactionDate >= startDate;\n });\n }\n\n if (filters.endDate && filters.endDate.trim() !== '') {\n const endDate = new Date(filters.endDate);\n filtered = filtered.filter(transaction => {\n const transactionDate = new Date(transaction.transactionDate || transaction.membershipDate);\n return transactionDate <= endDate;\n });\n }\n\n return filtered;\n};\n\n// Helper function to apply frontend pagination\nconst applyFrontendPagination = (transactions: Transaction[], filters: TransactionFilters) => {\n const currentPage = filters.page || 1;\n const limit = filters.limit || 10;\n const startIndex = (currentPage - 1) * limit;\n const endIndex = startIndex + limit;\n const paginatedTransactions = transactions.slice(startIndex, endIndex);\n\n \n\n return {\n data: paginatedTransactions,\n meta: {\n currentPage,\n totalPages: Math.ceil(transactions.length / limit),\n totalItems: transactions.length,\n itemsPerPage: limit,\n hasNextPage: endIndex < transactions.length,\n hasPreviousPage: currentPage > 1,\n }\n };\n};\n\nexport const useTransactions = ({\n externalId,\n initialFilters = {},\n autoFetch = false,\n}: UseTransactionsProps): UseTransactionsReturn => {\n const [transactions, setTransactions] = useState<Transaction[]>([]);\n const [allTransactions, setAllTransactions] = useState<Transaction[]>([]); // Store all transactions for frontend pagination\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [filters, setFilters] = useState<TransactionFilters>({\n ...DEFAULT_FILTERS,\n ...initialFilters,\n });\n const [meta, setMeta] = useState<{\n currentPage: number;\n totalPages: number;\n totalItems: number;\n itemsPerPage: number;\n hasNextPage: boolean;\n hasPreviousPage: boolean;\n } | null>(null);\n const [isBackendPaginated, setIsBackendPaginated] = useState<boolean>(false);\n const hasAutoFetchedRef = useRef(false);\n\n const fetchTransactions = useCallback(async () => {\n if (!externalId) return;\n\n setLoading(true);\n setError(null);\n\n try {\n const response: ApiResponse<PaginatedResponse<Transaction> | Transaction[]> = await transactionApi.getTransactions(\n externalId,\n filters\n );\n\n if (response.success && response.data) {\n \n \n // Handle both paginated and non-paginated responses\n if (Array.isArray(response.data)) {\n // Non-paginated response - handle frontend pagination\n setIsBackendPaginated(false);\n setAllTransactions(response.data);\n \n // TEMPORARY: Skip filtering for debugging - just show all data\n setTransactions(response.data);\n setMeta({\n currentPage: 1,\n totalPages: 1,\n totalItems: response.data.length,\n itemsPerPage: response.data.length,\n hasNextPage: false,\n hasPreviousPage: false,\n });\n \n // Apply frontend filtering and pagination (commented out for debugging)\n // const filteredTransactions = applyFrontendFilters(response.data, filters);\n // const paginatedResult = applyFrontendPagination(filteredTransactions, filters);\n \n \n \n // setTransactions(paginatedResult.data);\n // setMeta(paginatedResult.meta);\n } else {\n // Paginated response from backend\n setIsBackendPaginated(true);\n const paginatedData = response.data as PaginatedResponse<Transaction>;\n setTransactions(paginatedData.data);\n setMeta(paginatedData.meta);\n setAllTransactions([]); // Clear all transactions as backend handles pagination\n }\n } else {\n setError(response.error || 'Failed to fetch transactions');\n setTransactions([]);\n setAllTransactions([]);\n setMeta(null);\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'An unexpected error occurred');\n setTransactions([]);\n setAllTransactions([]);\n setMeta(null);\n } finally {\n setLoading(false);\n }\n }, [externalId, filters]);\n\n const updateFilters = useCallback((newFilters: Partial<TransactionFilters>) => {\n setFilters(prev => ({\n ...prev,\n ...newFilters,\n // Reset to page 1 when filters change (except when explicitly setting page)\n page: newFilters.page !== undefined ? newFilters.page : 1,\n }));\n }, []);\n\n // Handle frontend pagination when backend doesn't provide pagination\n useEffect(() => {\n if (!isBackendPaginated && allTransactions.length > 0) {\n const filteredTransactions = applyFrontendFilters(allTransactions, filters);\n const paginatedResult = applyFrontendPagination(filteredTransactions, filters);\n \n setTransactions(paginatedResult.data);\n setMeta(paginatedResult.meta);\n }\n }, [filters, allTransactions, isBackendPaginated]);\n\n const clearFilters = useCallback(() => {\n setFilters(DEFAULT_FILTERS);\n }, []);\n\n const refetch = useCallback(async () => {\n await fetchTransactions();\n }, [fetchTransactions]);\n\n // Auto-fetch once per externalId if enabled\n useEffect(() => {\n if (autoFetch && externalId && !hasAutoFetchedRef.current) {\n hasAutoFetchedRef.current = true;\n fetchTransactions();\n }\n }, [autoFetch, externalId, fetchTransactions]);\n\n // Fetch when filters change (only for backend pagination or initial load)\n useEffect(() => {\n if (!autoFetch) return; // Only auto-refetch if autoFetch is enabled\n \n // For backend pagination, refetch on filter changes\n // For frontend pagination, only fetch on initial load or when non-pagination filters change\n const hasNonPaginationFilters = (\n filters.startDate !== undefined ||\n filters.endDate !== undefined ||\n filters.status !== undefined\n );\n\n // In backend-paginated mode: always refetch on filter changes\n // In frontend mode: fetch only if we don't have data yet (initial load),\n // even if filters are present. Once data is loaded, do not refetch.\n const shouldFetch = isBackendPaginated || (allTransactions.length === 0 && hasNonPaginationFilters);\n \n if (shouldFetch) {\n const timeoutId = setTimeout(() => {\n fetchTransactions();\n }, 300); // Debounce API calls\n\n return () => clearTimeout(timeoutId);\n }\n }, [filters, fetchTransactions, autoFetch, isBackendPaginated, allTransactions.length]);\n\n return {\n transactions,\n loading,\n error,\n filters,\n meta,\n fetchTransactions,\n updateFilters,\n clearFilters,\n refetch,\n };\n};\n","import { useState, useCallback } from 'react';\nimport type { PaginationMeta } from '../types';\n\nexport interface UsePaginationProps {\n initialPage?: number;\n initialLimit?: number;\n}\n\nexport interface UsePaginationReturn {\n currentPage: number;\n limit: number;\n meta: PaginationMeta | null;\n goToPage: (page: number) => void;\n goToNextPage: () => void;\n goToPreviousPage: () => void;\n goToFirstPage: () => void;\n goToLastPage: () => void;\n setLimit: (newLimit: number) => void;\n setMeta: (meta: PaginationMeta) => void;\n reset: () => void;\n}\n\nexport const usePagination = ({\n initialPage = 1,\n initialLimit = 10,\n}: UsePaginationProps = {}): UsePaginationReturn => {\n const [currentPage, setCurrentPage] = useState(initialPage);\n const [limit, setLimitState] = useState(initialLimit);\n const [meta, setMeta] = useState<PaginationMeta | null>(null);\n\n const goToPage = useCallback((page: number) => {\n if (meta) {\n const validPage = Math.max(1, Math.min(page, meta.totalPages));\n setCurrentPage(validPage);\n } else {\n setCurrentPage(Math.max(1, page));\n }\n }, [meta]);\n\n const goToNextPage = useCallback(() => {\n if (meta && meta.hasNextPage) {\n setCurrentPage(prev => prev + 1);\n }\n }, [meta]);\n\n const goToPreviousPage = useCallback(() => {\n if (meta && meta.hasPreviousPage) {\n setCurrentPage(prev => prev - 1);\n }\n }, [meta]);\n\n const goToFirstPage = useCallback(() => {\n setCurrentPage(1);\n }, []);\n\n const goToLastPage = useCallback(() => {\n if (meta) {\n setCurrentPage(meta.totalPages);\n }\n }, [meta]);\n\n const setLimit = useCallback((newLimit: number) => {\n setLimitState(newLimit);\n setCurrentPage(1); // Reset to first page when changing limit\n }, []);\n\n const reset = useCallback(() => {\n setCurrentPage(initialPage);\n setLimitState(initialLimit);\n setMeta(null);\n }, [initialPage, initialLimit]);\n\n return {\n currentPage,\n limit,\n meta,\n goToPage,\n goToNextPage,\n goToPreviousPage,\n goToFirstPage,\n goToLastPage,\n setLimit,\n setMeta,\n reset,\n };\n};\n","import { useState, useCallback } from 'react';\nimport { subscriptionApi } from '../api/client';\nimport type { ApiResponse } from '../types';\n\nexport interface UseCancelSubscriptionProps {\n onSuccess?: () => void;\n onError?: (error: string) => void;\n}\n\nexport interface CancelSubscriptionOptions {\n cancellationMode?: string;\n cancellationReason?: string;\n}\n\nexport interface UseCancelSubscriptionReturn {\n loading: boolean;\n error: string | null;\n cancelSubscription: (externalId: string, options?: CancelSubscriptionOptions) => Promise<boolean>;\n reset: () => void;\n}\n\nexport const useCancelSubscription = ({\n onSuccess,\n onError,\n}: UseCancelSubscriptionProps = {}): UseCancelSubscriptionReturn => {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const cancelSubscription = useCallback(async (externalId: string, options?: CancelSubscriptionOptions): Promise<boolean> => {\n if (!externalId) {\n const errorMsg = 'External ID is required';\n setError(errorMsg);\n onError?.(errorMsg);\n return false;\n }\n\n setLoading(true);\n setError(null);\n\n try {\n const response: ApiResponse<any> = await subscriptionApi.cancelSubscription(externalId, options);\n\n if (response.success) {\n onSuccess?.();\n return true;\n } else {\n const errorMsg = response.error || 'Failed to cancel subscription';\n setError(errorMsg);\n onError?.(errorMsg);\n return false;\n }\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : 'An unexpected error occurred';\n setError(errorMsg);\n onError?.(errorMsg);\n return false;\n } finally {\n setLoading(false);\n }\n }, [onSuccess, onError]);\n\n const reset = useCallback(() => {\n setLoading(false);\n setError(null);\n }, []);\n\n return {\n loading,\n error,\n cancelSubscription,\n reset,\n };\n};\n","import { useState, useCallback } from 'react';\nimport { getApiBaseUrl, getHeaders, ENDPOINTS } from '../api/config';\nimport type { ApiResponse } from '../types';\n\nexport interface UseCustomerPortalProps {\n onSuccess?: (url: string) => void;\n onError?: (error: string) => void;\n}\n\nexport interface UseCustomerPortalReturn {\n loading: boolean;\n error: string | null;\n openCustomerPortal: (externalId: string) => Promise<boolean>;\n reset: () => void;\n}\n\n// Generic API request handler for customer portal\nasync function apiRequest<T>(\n endpoint: string, \n method: string = 'GET', \n data?: unknown\n): Promise<ApiResponse<T>> {\n try {\n const url = `${getApiBaseUrl()}${endpoint}`;\n const options: RequestInit = {\n method,\n headers: getHeaders(),\n credentials: 'include',\n };\n\n if (data) {\n options.body = JSON.stringify(data);\n }\n\n const response = await fetch(url, options);\n const result = await response.json();\n\n if (!response.ok) {\n return { success: false, error: result.message || 'An error occurred' };\n }\n\n return { success: true, data: result };\n } catch (error) {\n console.error('API request failed:', error);\n return { \n success: false, \n error: error instanceof Error ? error.message : 'Unknown error occurred'\n };\n }\n}\n\nexport const useCustomerPortal = ({\n onSuccess,\n onError,\n}: UseCustomerPortalProps = {}): UseCustomerPortalReturn => {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const openCustomerPortal = useCallback(async (externalId: string): Promise<boolean> => {\n if (!externalId) {\n const errorMsg = 'External ID is required';\n setError(errorMsg);\n onError?.(errorMsg);\n return false;\n }\n\n setLoading(true);\n setError(null);\n\n try {\n const returnUrl = `${window.location.origin}/dashboard`;\n \n const response: ApiResponse<{ url: string }> = await apiRequest(\n `${ENDPOINTS.CUSTOMER}/${externalId}/portal`,\n 'POST',\n { returnUrl }\n );\n const portalResponse: any = response.data;\n const portalUrl: string | undefined = portalResponse?.data?.url ?? portalResponse?.url;\n\n if (response.success && portalUrl) {\n onSuccess?.(portalUrl);\n // Redirect to Stripe Customer Portal\n window.location.href = portalUrl;\n return true;\n } else {\n const errorMsg =\n response.error ||\n portalResponse?.error ||\n portalResponse?.message ||\n 'Failed to open customer portal';\n setError(errorMsg);\n onError?.(errorMsg);\n return false;\n }\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : 'An unexpected error occurred';\n setError(errorMsg);\n onError?.(errorMsg);\n return false;\n } finally {\n setLoading(false);\n }\n }, [onSuccess, onError]);\n\n const reset = useCallback(() => {\n setLoading(false);\n setError(null);\n }, []);\n\n return {\n loading,\n error,\n openCustomerPortal,\n reset,\n };\n};\n","import React, { createContext, useContext, useState } from 'react';\nimport type { ReactNode } from 'react';\n\ninterface UpgradeContextType {\n isUpgradeSummaryVisible: boolean;\n setUpgradeSummaryVisible: (visible: boolean) => void;\n clearUpgradeSelection: () => void;\n}\n\nconst UpgradeContext = createContext<UpgradeContextType | undefined>(undefined);\n\nexport interface UpgradeProviderProps {\n children: ReactNode;\n}\n\nexport const UpgradeProvider: React.FC<UpgradeProviderProps> = ({ children }) => {\n const [isUpgradeSummaryVisible, setIsUpgradeSummaryVisible] = useState(false);\n\n const setUpgradeSummaryVisible = (visible: boolean) => {\n setIsUpgradeSummaryVisible(visible);\n };\n\n const clearUpgradeSelection = () => {\n setIsUpgradeSummaryVisible(false);\n };\n\n return (\n <UpgradeContext.Provider\n value={{\n isUpgradeSummaryVisible,\n setUpgradeSummaryVisible,\n clearUpgradeSelection,\n }}\n >\n {children}\n </UpgradeContext.Provider>\n );\n};\n\nexport const useUpgrade = (): UpgradeContextType => {\n const context = useContext(UpgradeContext);\n if (context === undefined) {\n throw new Error('useUpgrade must be used within an UpgradeProvider');\n }\n return context;\n};\n","import React from 'react';\n\nexport interface BillingCycleToggleProps {\n billingCycle: 'monthly' | 'yearly';\n onBillingCycleChange: (cycle: 'monthly' | 'yearly') => void;\n className?: string;\n}\n\nexport const BillingCycleToggle: React.FC<BillingCycleToggleProps> = ({\n billingCycle,\n onBillingCycleChange,\n className,\n}) => {\n return (\n <div \n className=\"inline-flex rounded-lg p-1\"\n style={{ \n backgroundColor: 'var(--subos-muted, #f1f5f9)',\n border: '1px solid var(--subos-border, #e2e8f0)'\n }}\n >\n <button\n onClick={() => onBillingCycleChange('monthly')}\n className={`px-6 py-2 rounded-md text-sm font-medium transition-all duration-200 ${className || ''}`}\n style={billingCycle === 'monthly' ? {\n backgroundColor: 'var(--subos-primary-500, #ef4444)',\n color: 'white',\n boxShadow: '0 2px 4px 0 rgba(0, 0, 0, 0.1)',\n fontWeight: '600'\n } : {\n backgroundColor: 'transparent',\n color: 'var(--subos-muted-foreground, #64748b)',\n fontWeight: '500'\n }}\n onMouseEnter={billingCycle !== 'monthly' ? (e) => {\n e.currentTarget.style.color = 'var(--subos-foreground, #1e293b)';\n e.currentTarget.style.backgroundColor = 'rgba(255, 255, 255, 0.8)';\n } : undefined}\n onMouseLeave={billingCycle !== 'monthly' ? (e) => {\n e.currentTarget.style.color = 'var(--subos-muted-foreground, #64748b)';\n e.currentTarget.style.backgroundColor = 'transparent';\n } : undefined}\n >\n Monthly\n </button>\n <button\n onClick={() => onBillingCycleChange('yearly')}\n className={`px-6 py-2 rounded-md text-sm font-medium transition-all duration-200 ${className || ''}`}\n style={billingCycle === 'yearly' ? {\n backgroundColor: 'var(--subos-primary-500, #ef4444)',\n color: 'white',\n boxShadow: '0 2px 4px 0 rgba(0, 0, 0, 0.1)',\n fontWeight: '600'\n } : {\n backgroundColor: 'transparent',\n color: 'var(--subos-muted-foreground, #64748b)',\n fontWeight: '500'\n }}\n onMouseEnter={billingCycle !== 'yearly' ? (e) => {\n e.currentTarget.style.color = 'var(--subos-foreground, #1e293b)';\n e.currentTarget.style.backgroundColor = 'rgba(255, 255, 255, 0.8)';\n } : undefined}\n onMouseLeave={billingCycle !== 'yearly' ? (e) => {\n e.currentTarget.style.color = 'var(--subos-muted-foreground, #64748b)';\n e.currentTarget.style.backgroundColor = 'transparent';\n } : undefined}\n >\n Yearly\n </button>\n </div>\n );\n};\n\n","import React, { useRef, useEffect } from 'react';\nimport type { DropdownOption } from '../../utils/planUtils';\n\nexport interface TierFilterDropdownProps {\n isOpen: boolean;\n onToggle: () => void;\n currentSelectionText: string;\n options: DropdownOption[];\n selectedValue: string;\n onSelect: (value: string) => void;\n}\n\nexport const TierFilterDropdown: React.FC<TierFilterDropdownProps> = ({\n isOpen,\n onToggle,\n currentSelectionText,\n options,\n selectedValue,\n onSelect,\n}) => {\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n // Handle clicking outside dropdown\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n if (isOpen) {\n onToggle();\n }\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isOpen, onToggle]);\n\n const handleOptionSelect = (value: string) => {\n onSelect(value);\n onToggle(); // Close dropdown\n };\n\n return (\n <div className=\"relative\" ref={dropdownRef}>\n <button\n onClick={onToggle}\n className=\"w-full min-w-[280px] px-4 py-3 border rounded-lg text-left focus:outline-none focus:ring-2 flex items-center justify-between transition-all duration-200\"\n style={{\n backgroundColor: 'var(--subos-background, #ffffff)',\n borderColor: isOpen ? 'var(--subos-primary-500, #3f51b5)' : 'var(--subos-border, #e2e8f0)',\n color: 'var(--subos-foreground, #1e293b)',\n boxShadow: isOpen ? '0 0 0 1px var(--subos-primary-500, #3f51b5)' : 'none'\n }}\n onMouseEnter={(e) => {\n if (!isOpen) {\n e.currentTarget.style.borderColor = 'var(--subos-muted-foreground, #64748b)';\n }\n }}\n onMouseLeave={(e) => {\n if (!isOpen) {\n e.currentTarget.style.borderColor = 'var(--subos-border, #e2e8f0)';\n }\n }}\n >\n <span style={{ color: 'var(--subos-foreground, #1e293b)' }}>{currentSelectionText}</span>\n <svg\n className={`w-5 h-5 transition-transform duration-200 ${isOpen ? 'rotate-180' : ''}`}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n style={{ color: 'var(--subos-muted-foreground, #64748b)' }}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n\n {isOpen && (\n <div \n className=\"absolute top-full left-0 w-full min-w-[280px] mt-1 border rounded-lg z-50\"\n style={{\n backgroundColor: 'var(--subos-background, #ffffff)',\n borderColor: 'var(--subos-border, #e2e8f0)',\n boxShadow: 'var(--subos-shadow-card, 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06))'\n }}\n >\n {options.map((option) => (\n <button\n key={option.value}\n onClick={() => handleOptionSelect(option.value)}\n className=\"w-full px-4 py-3 text-left transition-colors first:rounded-t-lg last:rounded-b-lg\"\n style={{\n backgroundColor: selectedValue === option.value \n ? 'var(--subos-primary-50, #eff6ff)' \n : 'transparent',\n color: selectedValue === option.value \n ? 'var(--subos-primary-700, #1d4ed8)' \n : 'var(--subos-foreground, #1e293b)'\n }}\n onMouseEnter={(e) => {\n if (selectedValue !== option.value) {\n e.currentTarget.style.backgroundColor = 'var(--subos-accent, #f8fafc)';\n }\n }}\n onMouseLeave={(e) => {\n if (selectedValue !== option.value) {\n e.currentTarget.style.backgroundColor = 'transparent';\n }\n }}\n >\n <div className=\"flex flex-col\">\n <span className=\"font-medium\">\n {option.label}\n </span>\n </div>\n </button>\n ))}\n </div>\n )}\n </div>\n );\n};\n","import React from 'react';\n\ninterface CheckIconProps {\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport const CheckIcon: React.FC<CheckIconProps> = ({ className = \"w-5 h-5\", style }) => {\n return (\n <svg \n className={className} \n style={style}\n fill=\"currentColor\" \n viewBox=\"0 0 20 20\" \n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path \n fillRule=\"evenodd\" \n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\" \n clipRule=\"evenodd\" \n />\n </svg>\n );\n};\n","import React from 'react';\nimport type { Plan } from '../../types';\nimport { CheckIcon } from '../icons/CheckIcon';\nimport { getPlanFeatures, getPlanDescription, isPlanPopular } from '../../utils/planUtils';\n\nexport interface PlanCardProps {\n plan: Plan;\n isSelected: boolean;\n billingCycle: 'monthly' | 'yearly';\n onSelect: (plan: Plan) => void;\n // Indicates if this plan is the user's currently active subscription plan\n isActive?: boolean;\n comparisonUrl?: string;\n}\n\nexport const PlanCard: React.FC<PlanCardProps> = ({\n plan,\n isSelected,\n billingCycle,\n onSelect,\n isActive = false,\n comparisonUrl = 'https://knovator.com/products/job-board/pricing/'\n}) => {\n const features = getPlanFeatures(plan);\n const description = getPlanDescription(plan);\n const isPopular = isPlanPopular(plan);\n const isFree = Number(plan.fixedCost) === 0;\n\n return (\n <div\n onClick={isFree || isActive ? undefined : () => onSelect(plan)}\n className={`relative border rounded-lg p-6 transition-all flex flex-col h-full font-subos ${\n !isFree && !isActive ? 'cursor-pointer' : 'cursor-default'\n } ${\n !isFree && isSelected && !isActive\n ? 'border-primary-500 bg-primary-50'\n : 'border-subos-border'\n } ${!isFree && !isActive ? 'hover:border-subos-muted-foreground' : ''} ${isPopular ? 'border-primary-500' : ''}`}\n style={{ \n backgroundColor: !isFree && isSelected && !isActive ? 'var(--subos-primary-50, #e8eaf6)' : 'var(--subos-background, #ffffff)',\n borderColor: !isFree && isSelected && !isActive ? 'var(--subos-primary-500, #3f51b5)' : \n isPopular ? 'var(--subos-primary-500, #3f51b5)' : 'var(--subos-border, #dee2e6)',\n color: 'var(--subos-foreground, inherit)'\n }}\n >\n {isPopular && (\n <div className=\"absolute -top-3 left-1/2 transform -translate-x-1/2\">\n <span \n className=\"text-white px-3 py-1 rounded-full text-xs font-medium\"\n style={{ backgroundColor: 'var(--subos-primary-500, #3f51b5)' }}\n >\n Most Popular\n </span>\n </div>\n )}\n \n {!isFree && isSelected && !isActive && (\n <div className=\"absolute top-4 right-4\">\n <div \n className=\"text-white rounded-full p-1\"\n style={{ backgroundColor: 'var(--subos-primary-500, #3f51b5)' }}\n >\n <CheckIcon className=\"w-4 h-4\" />\n </div>\n </div>\n )}\n \n {/* {isActive && (\n <div className=\"absolute top-4 right-4\">\n <div \n className=\"text-white rounded-full p-1\"\n style={{ backgroundColor: 'var(--subos-muted-foreground, #6c757d)' }}\n >\n <CheckIcon className=\"w-4 h-4\" />\n </div>\n </div>\n )} */}\n \n <div className=\"mb-0\">\n <h4 \n className=\"text-xl font-bold mb-2\" \n style={{ \n fontSize: 'var(--subos-font-size-plan-card-title, 1.25rem)',\n fontWeight: 'var(--subos-font-weight-plan-card-title, 700)',\n color: 'var(--subos-color-plan-card-title, var(--subos-foreground, inherit))' \n }}\n >\n {plan.name}\n </h4>\n <p \n className=\"text-sm mb-1\" \n style={{ \n fontSize: 'var(--subos-font-size-plan-card-description, 0.875rem)',\n fontWeight: 'var(--subos-font-weight-plan-card-description, 400)',\n color: 'var(--subos-color-plan-card-description, var(--subos-muted-foreground, #6c757d))' \n }}\n >\n {description}\n </p>\n \n <div className=\"mb-0\">\n {isFree ? (\n <span className=\"text-3xl font-bold\" style={{ color: 'var(--subos-primary-500, #3f51b5)' }}>Free</span>\n ) : (\n <>\n <span className=\"text-3xl font-bold\" style={{ color: 'var(--subos-primary-500, #3f51b5)' }}>\n ${plan.fixedCost}\n </span>\n <span className=\"ml-1\" style={{ color: 'var(--subos-muted-foreground, #6c757d)' }}>\n per {billingCycle === 'yearly' ? 'year' : 'month'}\n </span>\n </>\n )}\n </div>\n </div>\n\n {/* Horizontal line before features */}\n <div className=\"mb-6\">\n <hr className=\"mt-0 mb-0\" style={{ borderColor: 'var(--subos-border,rgb(2, 48, 94))', marginTop: 0, marginBottom: 0 }} />\n </div>\n \n <ul className=\"space-y-2 mb-6 flex-grow\">\n {features.map((feature, index) => (\n <li key={index} className=\"flex items-center text-sm\">\n <div\n className=\"mr-2 flex-shrink-0 rounded-full p-0.5\"\n style={{ backgroundColor: isActive ? 'var(--subos-muted-foreground,rgb(148, 150, 153))' : 'var(--subos-primary-500, #3f51b5)' }}\n >\n <CheckIcon className=\"w-3 h-3 text-white\" />\n </div>\n <span \n style={{ \n fontSize: 'var(--subos-font-size-plan-card-feature, 0.875rem)',\n fontWeight: 'var(--subos-font-weight-plan-card-feature, 400)',\n color: 'var(--subos-color-plan-card-feature, var(--subos-foreground, inherit))' \n }}\n >\n {feature}\n </span>\n </li>\n ))}\n </ul>\n\n\n {/* Informational text for free plans */}\n {isFree && (\n <div className=\"mb-4\">\n <p \n className=\"text-sm mb-4\" \n style={{ \n fontSize: 'var(--subos-font-size-plan-card-info, 0.875rem)',\n fontWeight: 'var(--subos-font-weight-plan-card-info, 400)',\n color: 'var(--subos-color-plan-card-info, var(--subos-muted-foreground, #6c757d))' \n }}\n >\n The mentioned plan will become the default once the current subscription expires, provided the tier requirement is met.\n </p>\n </div>\n )}\n \n <div className=\"mt-auto space-y-3\">\n {!isFree && (\n isActive ? (\n <button\n className=\"w-full border py-2 px-4 rounded-md font-medium cursor-default\"\n style={{ \n backgroundColor: 'var(--subos-muted, #f8f9fa)',\n borderColor: 'var(--subos-border, #dee2e6)',\n color: 'var(--subos-muted-foreground, #6c757d)'\n }}\n disabled\n >\n Active\n </button>\n ) : isSelected ? (\n <button \n className=\"w-full subos-btn-primary text-white py-2 px-4 rounded-md font-medium\"\n >\n Selected\n </button>\n ) : (\n <button \n className=\"w-full border py-2 px-4 rounded-md font-medium transition-colors\"\n style={{ \n backgroundColor: 'var(--subos-primary-500, #3f51b5)',\n borderColor: 'var(--subos-primary-500, #3f51b5)',\n color: 'white'\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--subos-primary-600, #303f9f)';\n e.currentTarget.style.borderColor = 'var(--subos-primary-600, #303f9f)';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--subos-primary-500, #3f51b5)';\n e.currentTarget.style.borderColor = 'var(--subos-primary-500, #3f51b5)';\n }}\n >\n Select\n </button>\n )\n )}\n \n {/* Show Plan Comparison button - only if comparisonUrl is provided */}\n {comparisonUrl && !isFree && (\n <button\n className=\"w-full py-2 px-4 font-medium text-sm transition-colors\"\n style={{ \n backgroundColor: 'transparent',\n border: 'none',\n color: 'var(--subos-primary-500, #3f51b5)'\n }}\n onClick={(e) => {\n e.stopPropagation();\n window.open(comparisonUrl, '_blank');\n }}\n >\n Show Plan Comparision\n </button>\n )}\n </div>\n </div>\n );\n};\n\n","interface IconProps {\n className?: string;\n}\n\nexport const SearchIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\" />\n </svg>\n);\n\nexport const FilterIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 4a1 1 0 011-1h16a1 1 0 011 1v2.586a1 1 0 01-.293.707l-6.414 6.414a1 1 0 00-.293.707V17l-4 4v-6.586a1 1 0 00-.293-.707L3.293 7.293A1 1 0 013 6.586V4z\" />\n </svg>\n);\n\nexport const TrendingUpIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 7h8m0 0v8m0-8l-8 8-4-4-6 6\" />\n </svg>\n);\n\nexport const LoadingSpinner: React.FC<IconProps> = ({ className = \"w-8 h-8\" }) => (\n <svg className={`${className} animate-spin`} fill=\"none\" viewBox=\"0 0 24 24\">\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\"></circle>\n <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n </svg>\n);\n\nexport const CheckCircleIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path fillRule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\" clipRule=\"evenodd\" />\n </svg>\n);\n\nexport const AddIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 4v16m8-8H4\" />\n </svg>\n);\n\nexport const CreditCardIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 10h18M7 15h1m4 0h1m-7 4h12a3 3 0 003-3V8a3 3 0 00-3-3H6a3 3 0 00-3 3v8a3 3 0 003 3z\" />\n </svg>\n);\n\nexport const DeleteIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16\" />\n </svg>\n);\n\nexport const DownloadIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\" />\n </svg>\n);\n\nexport const DashboardIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z\" />\n </svg>\n);\n\nexport const EmailIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 8l7.89 4.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\" />\n </svg>\n);\n\nexport const ReceiptIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 12h6m-6 4h6m2 5l-5-5-4 4-3-3m6-6V4a2 2 0 00-2-2H5a2 2 0 00-2 2v16l3-3 3 3 3-3 3 3z\" />\n </svg>\n);\n\nexport const StarBorderIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z\" />\n </svg>\n);\n\nexport const UpgradeIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 10l7-7m0 0l7 7m-7-7v18\" />\n </svg>\n);\n\nexport const CancelIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n);\n\nexport const AddCardIcon: React.FC<IconProps> = ({ className = \"w-5 h-5\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 6v6m0 0v6m0-6h6m-6 0H6m12-3h3a3 3 0 013 3v8a3 3 0 01-3 3H6a3 3 0 01-3-3v-8a3 3 0 013-3h3\" />\n </svg>\n);\n","import React from 'react';\nimport type { Plan } from '../../types';\nimport { PlanCard } from './PlanCard';\nimport { LoadingSpinner } from '../icons/CommonIcons';\n\nexport interface PlansGridProps {\n plans: Plan[];\n selectedPlan: Plan | null;\n billingCycle: 'monthly' | 'yearly';\n loading: boolean;\n error: string | null;\n onPlanSelect: (plan: Plan) => void;\n // Currently active subscription plan code to mark the active plan in the grid\n activePlanCode?: string;\n}\n\nexport const PlansGrid: React.FC<PlansGridProps> = ({\n plans,\n selectedPlan,\n billingCycle,\n loading,\n error,\n onPlanSelect,\n activePlanCode,\n}) => {\n if (loading) {\n return (\n <div className=\"flex justify-center py-8\">\n <LoadingSpinner className=\"h-10 w-10 text-primary animate-spin\" />\n </div>\n );\n }\n\n if (error) {\n return (\n <div className=\"p-4 bg-red-50 border border-red-200 text-red-700 rounded-md\">\n {error}\n </div>\n );\n }\n\n return (\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-6\">\n {plans.map((plan) => (\n <PlanCard\n key={plan.id}\n plan={plan}\n isSelected={selectedPlan?.id === plan.id}\n billingCycle={billingCycle}\n onSelect={onPlanSelect}\n isActive={activePlanCode ? plan.code === activePlanCode : false}\n />\n ))}\n </div>\n );\n};\n\n","import React, { useState } from 'react';\nimport type { Plan } from '../../types';\nimport type { DropdownOption } from '../../utils/planUtils';\nimport { BillingCycleToggle } from './BillingCycleToggle';\nimport { TierFilterDropdown } from './TierFilterDropdown';\nimport { PlansGrid } from './PlansGrid';\n\nexport interface PlanSelectorProps {\n // Plans data\n plans: Plan[];\n selectedPlan: Plan | null;\n \n // Filters\n tierFilter: string;\n billingCycle: 'monthly' | 'yearly';\n \n // Loading and error states\n loading: boolean;\n error: string | null;\n \n // Computed values\n dropdownOptions: DropdownOption[];\n currentSelectionText: string;\n \n // Event handlers\n onPlanSelect: (plan: Plan) => void;\n onTierFilterChange: (filter: string) => void;\n onBillingCycleChange: (cycle: 'monthly' | 'yearly') => void;\n // Currently active subscription plan code to disable and mark Active\n activePlanCode?: string;\n}\n\nexport const PlanSelector: React.FC<PlanSelectorProps> = ({\n plans,\n selectedPlan,\n tierFilter,\n billingCycle,\n loading,\n error,\n dropdownOptions,\n currentSelectionText,\n onPlanSelect,\n onTierFilterChange,\n onBillingCycleChange,\n activePlanCode,\n}) => {\n const [isDropdownOpen, setIsDropdownOpen] = useState<boolean>(false);\n\n const handleDropdownToggle = () => {\n setIsDropdownOpen(!isDropdownOpen);\n };\n\n const handleTierSelect = (value: string) => {\n onTierFilterChange(value);\n setIsDropdownOpen(false);\n };\n\n return (\n <div className=\"mb-6\">\n <h3 \n className=\"text-lg font-semibold mb-2\"\n style={{\n fontSize: 'var(--subos-font-size-plan-title, 1.125rem)',\n fontWeight: 'var(--subos-font-weight-plan-title, 600)',\n color: 'var(--subos-color-plan-title, inherit)'\n }}\n >\n Upgrade your plan\n </h3>\n <div className=\"flex items-center gap-4 justify-between flex-wrap mb-6\">\n <p \n className=\"text-gray-600 mb-0 flex-1 min-w-[260px]\"\n style={{\n fontSize: 'var(--subos-font-size-plan-description, 1rem)',\n fontWeight: 'var(--subos-font-weight-plan-description, 400)',\n color: 'var(--subos-color-plan-description, #6c757d)'\n }}\n >\n Enhance your experience with exclusive access - unlock more features and possibilities!\n </p>\n\n <div className=\"flex items-center gap-4\">\n {/* Custom Tier Filter Dropdown */}\n <TierFilterDropdown\n isOpen={isDropdownOpen}\n onToggle={handleDropdownToggle}\n currentSelectionText={currentSelectionText}\n options={dropdownOptions}\n selectedValue={tierFilter}\n onSelect={handleTierSelect}\n />\n\n {/* Billing Toggle */}\n <BillingCycleToggle\n billingCycle={billingCycle}\n onBillingCycleChange={onBillingCycleChange}\n />\n </div>\n </div>\n\n {/* Plans Grid */}\n <PlansGrid\n plans={plans}\n selectedPlan={selectedPlan}\n billingCycle={billingCycle}\n loading={loading}\n error={error}\n onPlanSelect={onPlanSelect}\n activePlanCode={activePlanCode}\n />\n </div>\n );\n};\n","import React from 'react';\nimport { useCustomerPortal } from '../../hooks/useCustomerPortal';\n\nexport interface ChangeCardButtonProps {\n externalId: string;\n className?: string;\n children?: React.ReactNode;\n onSuccess?: () => void;\n onError?: (error: string) => void;\n}\n\nexport const ChangeCardButton: React.FC<ChangeCardButtonProps> = ({\n externalId,\n className = '',\n children,\n onSuccess,\n onError,\n}) => {\n const { loading, openCustomerPortal } = useCustomerPortal({\n onSuccess: () => {\n onSuccess?.();\n },\n onError: (error) => {\n onError?.(error);\n },\n });\n\n const handleClick = async () => {\n await openCustomerPortal(externalId);\n };\n\n const defaultClassName = \"text-sm font-medium transition-colors duration-200 disabled:opacity-50 disabled:cursor-not-allowed\";\n const finalClassName = className || defaultClassName;\n\n const getStyles = () => ({\n color: loading \n ? 'var(--subos-muted-foreground, #64748b)' \n : 'var(--subos-primary-600, #2563eb)',\n textDecoration: 'none',\n });\n\n return (\n <button\n onClick={handleClick}\n disabled={loading}\n className={finalClassName}\n type=\"button\"\n style={getStyles()}\n onMouseEnter={!loading ? (e) => {\n e.currentTarget.style.color = 'var(--subos-primary-700, #1d4ed8)';\n e.currentTarget.style.textDecoration = 'underline';\n } : undefined}\n onMouseLeave={!loading ? (e) => {\n e.currentTarget.style.color = 'var(--subos-primary-600, #2563eb)';\n e.currentTarget.style.textDecoration = 'none';\n } : undefined}\n >\n {loading ? 'Opening...' : (children || 'Manage Billing')}\n </button>\n );\n};\n","import React from 'react';\nimport type { PaymentParams } from '../../hooks/payments/usePaymentParams';\n\ninterface PaymentCancelViewProps {\n details: PaymentParams;\n}\n\nexport const PaymentCancelView: React.FC<PaymentCancelViewProps> = ({ details }) => {\n return (\n <div className=\"max-w-md mx-auto bg-white rounded-lg shadow-md overflow-hidden\">\n {/* Cancel Header */}\n <div className=\"bg-gradient-to-r from-orange-500 to-red-500 text-white p-6 text-center\">\n <div className=\"text-4xl mb-2\">❌</div>\n <h1 className=\"text-2xl font-bold\">Payment Cancelled</h1>\n <p className=\"text-orange-100 mt-1\">Your payment was not processed</p>\n </div>\n\n {/* Cancellation Details */}\n <div className=\"p-6\">\n <div className=\"mb-6\">\n <h2 className=\"text-lg font-semibold text-gray-900 mb-4\">What Happened?</h2>\n <div className=\"p-4 bg-orange-50 rounded-lg mb-4\">\n <p className=\"text-orange-800\">\n {details.reason\n ? `Reason: ${details.reason}`\n : 'You cancelled the payment process before it was completed. No charges were made to your account.'}\n </p>\n </div>\n\n {(details.gateway || details.sessionId) && (\n <div className=\"space-y-3 mb-4\">\n <h3 className=\"font-medium text-gray-900\">Transaction Details</h3>\n {details.gateway && (\n <div className=\"flex justify-between\">\n <span className=\"text-gray-600\">Payment Gateway</span>\n <span className=\"font-medium capitalize\">{details.gateway}</span>\n </div>\n )}\n {details.sessionId && (\n <div className=\"flex justify-between\">\n <span className=\"text-gray-600\">Session ID</span>\n <span className=\"font-medium font-mono text-sm\">{details.sessionId}</span>\n </div>\n )}\n <div className=\"flex justify-between\">\n <span className=\"text-gray-600\">Status</span>\n <span className=\"font-medium text-orange-600\">Cancelled</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-gray-600\">Date</span>\n <span className=\"font-medium\">{new Date().toLocaleDateString()}</span>\n </div>\n </div>\n )}\n </div>\n\n {/* What's Next */}\n <div className=\"mb-6 p-4 bg-blue-50 rounded-lg\">\n <h3 className=\"font-semibold text-blue-900 mb-2\">What's Next?</h3>\n <ul className=\"text-sm text-blue-800 space-y-1\">\n <li>• No charges were made to your account</li>\n <li>• You can try the payment again anytime</li>\n <li>• Contact support if you need assistance</li>\n <li>• Your cart/selection is still saved</li>\n </ul>\n </div>\n\n {/* Action Buttons */}\n <div className=\"space-y-3\">\n <button\n onClick={() => window.history.back()}\n className=\"w-full bg-blue-600 hover:bg-blue-700 text-white font-medium py-3 px-4 rounded-md transition-colors\"\n >\n Try Payment Again\n </button>\n\n <button\n onClick={() => (window.location.href = '/dashboard')}\n className=\"w-full bg-gray-100 hover:bg-gray-200 text-gray-700 font-medium py-3 px-4 rounded-md transition-colors\"\n >\n Browse Plans\n </button>\n\n <button\n onClick={() => (window.location.href = '/')}\n className=\"w-full bg-gray-100 hover:bg-gray-200 text-gray-700 font-medium py-3 px-4 rounded-md transition-colors\"\n >\n Return Home\n </button>\n </div>\n\n {/* Support */}\n <div className=\"mt-6 text-center\">\n <p className=\"text-sm text-gray-500\">\n Having trouble?{' '}\n <a href=\"/support\" className=\"text-blue-600 hover:text-blue-700\">\n Contact Support\n </a>\n </p>\n </div>\n </div>\n </div>\n );\n};\n\nexport default PaymentCancelView;\n","import React from 'react';\nimport type { PaymentParams } from '../../hooks/payments/usePaymentParams';\n\ninterface PaymentSuccessViewProps {\n details: PaymentParams;\n}\n\nexport const PaymentSuccessView: React.FC<PaymentSuccessViewProps> = ({ details }) => {\n return (\n <div className=\"max-w-md mx-auto bg-white rounded-lg shadow-md overflow-hidden\">\n {/* Success Header */}\n <div className=\"bg-gradient-to-r from-green-500 to-green-600 text-white p-6 text-center\">\n <div className=\"text-4xl mb-2\">✅</div>\n <h1 className=\"text-2xl font-bold\">Payment Successful!</h1>\n <p className=\"text-green-100 mt-1\">Thank you for your purchase</p>\n </div>\n\n {/* Payment Details */}\n <div className=\"p-6\">\n <div className=\"mb-6\">\n <h2 className=\"text-lg font-semibold text-gray-900 mb-4\">Payment Details</h2>\n <div className=\"space-y-3\">\n {details.gateway && (\n <div className=\"flex justify-between\">\n <span className=\"text-gray-600\">Payment Gateway</span>\n <span className=\"font-medium capitalize\">{details.gateway}</span>\n </div>\n )}\n {details.sessionId && (\n <div className=\"flex justify-between\">\n <span className=\"text-gray-600\">Session ID</span>\n <span className=\"font-medium font-mono text-sm\">{details.sessionId}</span>\n </div>\n )}\n {details.paymentId && (\n <div className=\"flex justify-between\">\n <span className=\"text-gray-600\">Payment ID</span>\n <span className=\"font-medium font-mono text-sm\">{details.paymentId}</span>\n </div>\n )}\n <div className=\"flex justify-between\">\n <span className=\"text-gray-600\">Status</span>\n <span className=\"font-medium text-green-600\">Completed</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-gray-600\">Date</span>\n <span className=\"font-medium\">{new Date().toLocaleDateString()}</span>\n </div>\n </div>\n </div>\n\n {/* Next Steps */}\n <div className=\"mb-6 p-4 bg-blue-50 rounded-lg\">\n <h3 className=\"font-semibold text-blue-900 mb-2\">What's Next?</h3>\n <ul className=\"text-sm text-blue-800 space-y-1\">\n <li>• You'll receive a confirmation email shortly</li>\n <li>• Your subscription/purchase is now active</li>\n <li>• Access your dashboard to manage your account</li>\n </ul>\n </div>\n\n {/* Action Buttons */}\n <div className=\"space-y-3\">\n <button\n onClick={() => (window.location.href = '/dashboard')}\n className=\"w-full bg-blue-600 hover:bg-blue-700 text-white font-medium py-3 px-4 rounded-md transition-colors\"\n >\n Go to Dashboard\n </button>\n\n <button\n onClick={() => (window.location.href = '/')}\n className=\"w-full bg-gray-100 hover:bg-gray-200 text-gray-700 font-medium py-3 px-4 rounded-md transition-colors\"\n >\n Return Home\n </button>\n </div>\n\n {/* Support */}\n <div className=\"mt-6 text-center\">\n <p className=\"text-sm text-gray-500\">\n Need help?{' '}\n <a href=\"/support\" className=\"text-blue-600 hover:text-blue-700\">\n Contact Support\n </a>\n </p>\n </div>\n </div>\n </div>\n );\n};\n\nexport default PaymentSuccessView;\n","/**\n * Utility functions for managing upgrade state\n */\n\n// Global variable to store the clear function\nlet globalClearSelectedPlan: (() => void) | null = null;\n\n/**\n * Register a function to clear the selected plan globally\n * This should be called by components that manage plan selection\n */\nexport const registerClearSelectedPlan = (clearFn: () => void) => {\n globalClearSelectedPlan = clearFn;\n};\n\n/**\n * Clear the selected plan from anywhere in the application\n * This can be called when navigating to transactions or other sections\n */\nexport const clearSelectedPlan = () => {\n if (globalClearSelectedPlan) {\n globalClearSelectedPlan();\n }\n};\n\n/**\n * Unregister the clear function (cleanup)\n */\nexport const unregisterClearSelectedPlan = () => {\n globalClearSelectedPlan = null;\n};\n","import React from 'react';\nimport type { Transaction } from '../../types';\nimport { formatDate } from '../../utils/planUtils';\n\nexport interface TransactionItemProps {\n transaction: Transaction;\n className?: string;\n showInvoiceButton?: boolean;\n customStatusColors?: Record<string, string>;\n showFields?: {\n planName?: boolean;\n transactionDate?: boolean;\n amount?: boolean;\n discount?: boolean;\n status?: boolean;\n coupon?: boolean;\n invoice?: boolean;\n };\n dateFormat?: 'date' | 'datetime';\n metaFields?: string[]; // Array of meta field keys to display (max 2)\n}\n\n// Download icon component\nconst DownloadIcon: React.FC<{ className?: string }> = ({ className = \"w-4 h-4\" }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\" />\n </svg>\n);\n\nconst getStatusColor = (status: string, customColors?: Record<string, string>) => {\n if (customColors && customColors[status.toLowerCase()]) {\n return customColors[status.toLowerCase()];\n }\n\n switch (status.toLowerCase()) {\n case 'activated':\n case 'succeeded':\n case 'renewed':\n case 'use_stripe_sdk':\n return 'bg-green-100 text-green-800';\n case 'pending':\n case 'processing':\n return 'bg-yellow-100 text-yellow-800';\n case 'payment_failed':\n return 'bg-red-100 text-red-800';\n default:\n return 'bg-blue-100 text-blue-800';\n }\n};\n\nconst formatCurrency = (amount: string | number, currency = 'USD') => {\n const numericAmount = typeof amount === 'string' ? parseFloat(amount) : amount;\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency,\n }).format(numericAmount);\n};\n\n// Helper function to format meta field keys into readable labels\nconst formatMetaLabel = (key: string): string => {\n // Convert snake_case or UPPER_CASE to Title Case\n return key\n .split('_')\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ');\n};\n\n// Helper function to format meta field values\nconst formatMetaValue = (value: any): string => {\n if (typeof value === 'boolean') {\n return value ? 'Yes' : 'No';\n }\n if (typeof value === 'number') {\n return value.toLocaleString();\n }\n if (typeof value === 'string') {\n // If it's \"unlimited\", capitalize it\n if (value.toLowerCase() === 'unlimited') {\n return 'Unlimited';\n }\n return value;\n }\n return String(value);\n};\n\nexport const TransactionItem: React.FC<TransactionItemProps> = ({\n transaction,\n className = '',\n showInvoiceButton = true,\n customStatusColors,\n showFields = {\n planName: true,\n transactionDate: true,\n amount: true,\n discount: true,\n status: true,\n coupon: true,\n invoice: true,\n },\n dateFormat = 'datetime',\n metaFields = [],\n}) => {\n const handleInvoiceDownload = (invoiceUrl: string) => {\n const link = document.createElement('a');\n link.href = invoiceUrl;\n link.download = `invoice-${transaction.id}.pdf`;\n link.target = '_blank';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n };\n\n // Generate meta fields display string\n const getMetaFieldsDisplay = () => {\n if (metaFields.length === 0 || !transaction.meta) return '';\n \n const metaValues = metaFields\n .slice(0, 2)\n .map((fieldKey) => {\n const value = transaction.meta?.[fieldKey];\n if (value === undefined || value === null) return null;\n return `${formatMetaLabel(fieldKey)}: ${formatMetaValue(value)}`;\n })\n .filter(Boolean);\n \n return metaValues.length > 0 ? ` (${metaValues.join(', ')})` : '';\n };\n\n return (\n <li className={`px-6 py-4 hover:bg-gray-50 ${className}`}>\n <div className=\"flex items-center justify-between\">\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center justify-between\">\n <div>\n {showFields.planName && (\n <p className=\"text-sm font-medium text-gray-900 truncate\">\n {transaction.planName ? `${transaction.planName} Plan${getMetaFieldsDisplay()}` : `Transaction #${transaction.transactionCode || transaction.id}${getMetaFieldsDisplay()}`}\n </p>\n )}\n {showFields.transactionDate && (\n <p className=\"text-sm text-gray-500\">\n {formatDate(transaction.transactionDate || transaction.membershipDate, dateFormat)}\n </p>\n )}\n </div>\n <div className=\"flex items-center space-x-4\">\n {showFields.amount && (\n <div className=\"text-right\">\n <p className=\"text-sm font-medium text-gray-900\">\n {formatCurrency(transaction.amount, transaction.currency)}\n </p>\n {showFields.discount && transaction.discountAmt && parseFloat(transaction.discountAmt.toString()) > 0 && (\n <p className=\"text-xs text-green-600\">\n -{formatCurrency(transaction.discountAmt, transaction.currency)} discount\n </p>\n )}\n </div>\n )}\n {showFields.status && (\n <span className={`inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium ${getStatusColor(transaction.transactionStatus, customStatusColors)}`}>\n {transaction.transactionStatus}\n </span>\n )}\n {showFields.invoice && showInvoiceButton && transaction.invoice_pdf && (\n <button\n onClick={() => {\n handleInvoiceDownload(transaction.invoice_pdf!);\n }}\n className=\"inline-flex items-center justify-center p-0 text-blue-600 hover:text-blue-800 transition-colors border-0 bg-transparent focus:outline-none focus:ring-0 focus-visible:outline-none active:outline-none\"\n title=\"Download Invoice\"\n aria-label=\"Download Invoice\"\n >\n <DownloadIcon className=\"w-4 h-4\" />\n \n </button>\n )}\n </div>\n </div>\n {showFields.coupon && transaction.coupon && (\n <div className=\"mt-2\">\n <span className=\"inline-flex items-center px-2 py-1 rounded-md text-xs font-medium bg-purple-100 text-purple-800\">\n Coupon: {transaction.coupon}\n </span>\n </div>\n )}\n </div>\n </div>\n </li>\n );\n};\n\nexport default TransactionItem;\n","import React from 'react';\n\nexport interface TransactionLoadingStateProps {\n message?: string;\n className?: string;\n showSpinner?: boolean;\n rows?: number;\n}\n\nexport const TransactionLoadingState: React.FC<TransactionLoadingStateProps> = ({\n message = \"Loading transactions...\",\n className = '',\n showSpinner = true,\n rows = 5,\n}) => {\n if (showSpinner) {\n return (\n <div className={`flex items-center justify-center py-8 ${className}`}>\n <div className=\"animate-spin rounded-full h-8 w-8 border-b-2 border-primary\"></div>\n <span className=\"ml-2 text-gray-600\">{message}</span>\n </div>\n );\n }\n\n // Skeleton loading state\n return (\n <div className={`bg-white shadow overflow-hidden sm:rounded-md ${className}`}>\n <ul className=\"divide-y divide-gray-200\">\n {Array.from({ length: rows }).map((_, index) => (\n <li key={index} className=\"px-6 py-4 animate-pulse\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center justify-between\">\n <div className=\"space-y-2\">\n <div className=\"h-4 bg-gray-200 rounded w-48\"></div>\n <div className=\"h-3 bg-gray-200 rounded w-32\"></div>\n </div>\n <div className=\"flex items-center space-x-4\">\n <div className=\"text-right space-y-2\">\n <div className=\"h-4 bg-gray-200 rounded w-20\"></div>\n </div>\n <div className=\"h-6 bg-gray-200 rounded-full w-16\"></div>\n <div className=\"h-4 bg-gray-200 rounded w-12\"></div>\n </div>\n </div>\n </div>\n </div>\n </li>\n ))}\n </ul>\n </div>\n );\n};\n\nexport default TransactionLoadingState;\n","import React from 'react';\n\nexport interface TransactionErrorStateProps {\n error: string;\n title?: string;\n onRetry?: () => void;\n className?: string;\n showRetryButton?: boolean;\n}\n\nexport const TransactionErrorState: React.FC<TransactionErrorStateProps> = ({\n error,\n title = \"Error loading transactions\",\n onRetry,\n className = '',\n showRetryButton = true,\n}) => {\n return (\n <div className={`bg-red-50 border border-red-200 rounded-md p-4 ${className}`}>\n <div className=\"flex\">\n <div className=\"flex-shrink-0\">\n <svg className=\"h-5 w-5 text-red-400\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </div>\n <div className=\"ml-3 flex-1\">\n <h3 className=\"text-sm font-medium text-red-800\">{title}</h3>\n <div className=\"mt-2 text-sm text-red-700\">{error}</div>\n {showRetryButton && onRetry && (\n <div className=\"mt-4\">\n <button\n onClick={onRetry}\n className=\"bg-red-100 hover:bg-red-200 text-red-800 font-medium py-2 px-4 rounded text-sm transition-colors duration-200\"\n >\n Try Again\n </button>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n};\n\nexport default TransactionErrorState;\n","import React from 'react';\n\nexport interface TransactionEmptyStateProps {\n title?: string;\n description?: string;\n icon?: React.ReactNode;\n action?: React.ReactNode;\n className?: string;\n}\n\nexport const TransactionEmptyState: React.FC<TransactionEmptyStateProps> = ({\n title = \"No transactions found\",\n description = \"There are no transactions to display.\",\n icon,\n action,\n className = '',\n}) => {\n const defaultIcon = (\n <svg\n className=\"mx-auto h-12 w-12 text-gray-400\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\"\n />\n </svg>\n );\n\n return (\n <div className={`text-center py-8 ${className}`}>\n {icon || defaultIcon}\n <h3 className=\"mt-2 text-sm font-medium text-gray-900\">{title}</h3>\n <p className=\"mt-1 text-sm text-gray-500\">{description}</p>\n {action && (\n <div className=\"mt-4\">\n {action}\n </div>\n )}\n </div>\n );\n};\n\nexport default TransactionEmptyState;\n","import React from 'react';\nimport type { Transaction } from '../../types';\nimport { TransactionItem } from './TransactionItem';\nimport { TransactionLoadingState } from './TransactionLoadingState';\nimport { TransactionErrorState } from './TransactionErrorState';\nimport { TransactionEmptyState } from './TransactionEmptyState';\n\nexport interface TransactionListProps {\n transactions: Transaction[];\n loading?: boolean;\n error?: string | null;\n onRetry?: () => void;\n className?: string;\n showInvoiceButton?: boolean;\n customStatusColors?: Record<string, string>;\n emptyStateProps?: {\n title?: string;\n description?: string;\n icon?: React.ReactNode;\n action?: React.ReactNode;\n };\n loadingStateProps?: {\n message?: string;\n showSpinner?: boolean;\n rows?: number;\n };\n}\n\nexport const TransactionList: React.FC<TransactionListProps> = ({\n transactions,\n loading = false,\n error = null,\n onRetry,\n className = '',\n showInvoiceButton = true,\n customStatusColors,\n emptyStateProps,\n loadingStateProps,\n}) => {\n\n if (loading) {\n return (\n <TransactionLoadingState \n className={className}\n {...loadingStateProps}\n />\n );\n }\n\n if (error) {\n return (\n <TransactionErrorState \n error={error}\n onRetry={onRetry}\n className={className}\n />\n );\n }\n\n if (transactions.length === 0) {\n return (\n <TransactionEmptyState \n className={className}\n {...emptyStateProps}\n />\n );\n }\n\n return (\n <div className={`bg-white shadow overflow-hidden sm:rounded-md ${className}`}>\n <ul className=\"divide-y divide-gray-200\">\n {transactions.map((transaction) => (\n <TransactionItem\n key={transaction.id}\n transaction={transaction}\n showInvoiceButton={showInvoiceButton}\n customStatusColors={customStatusColors}\n metaFields={['CANDIDATES']}\n />\n ))}\n </ul>\n </div>\n );\n};\n\n","import React from 'react';\n\nexport interface TransactionStatusFilterProps {\n selectedStatus?: string;\n onStatusChange: (status: string) => void;\n className?: string;\n showAllOption?: boolean;\n customStatuses?: Array<{ value: string; label: string; color?: string }>;\n}\n\nconst defaultStatuses = [\n { value: '', label: 'All Statuses', color: 'bg-gray-100 text-gray-800' },\n // { value: 'activated', label: 'Activated', color: 'bg-green-100 text-green-800' },\n { value: 'pending', label: 'Pending', color: 'bg-yellow-100 text-yellow-800' },\n { value: 'succeeded', label: 'Succeeded', color: 'bg-green-100 text-green-800' },\n // { value: 'renewed', label: 'Renewed', color: 'bg-green-100 text-green-800' },\n // { value: 'processing', label: 'Processing', color: 'bg-yellow-100 text-yellow-800' },\n { value: 'payment_failed', label: 'Payment Failed', color: 'bg-red-100 text-red-800' },\n // { value: 'use_stripe_sdk', label: 'Use Stripe SDK', color: 'bg-blue-100 text-blue-800' },\n];\n\nexport const TransactionStatusFilter: React.FC<TransactionStatusFilterProps> = ({\n selectedStatus = '',\n onStatusChange,\n className = '',\n showAllOption = true,\n customStatuses,\n}) => {\n const statuses = customStatuses || defaultStatuses;\n const statusesToShow = showAllOption ? statuses : statuses.filter(s => s.value !== '');\n\n return (\n <div className={`flex flex-wrap gap-2 ${className}`}>\n {statusesToShow.map((status) => (\n <button\n key={status.value}\n onClick={() => onStatusChange(status.value)}\n className={`\n px-3 py-1 rounded-full text-sm font-medium transition-all duration-200\n ${selectedStatus === status.value \n ? `${status.color} ring-2 ring-offset-1 ring-blue-500` \n : 'bg-gray-100 text-gray-600 hover:bg-gray-200'\n }\n `}\n >\n {status.label}\n </button>\n ))}\n </div>\n );\n};\n\nexport default TransactionStatusFilter;\n","import React from 'react';\nimport { TransactionStatusFilter } from './TransactionStatusFilter';\nimport type { TransactionFilters } from '../../types';\n\nexport interface TransactionFilterProps {\n filters: TransactionFilters;\n onFiltersChange: (filters: TransactionFilters) => void;\n className?: string;\n showStatusFilter?: boolean;\n showDateFilter?: boolean;\n showSearchFilter?: boolean;\n customStatusOptions?: Array<{ value: string; label: string; color?: string }>;\n}\n\nexport const TransactionFilter: React.FC<TransactionFilterProps> = ({\n filters,\n onFiltersChange,\n className = '',\n showStatusFilter = true,\n showDateFilter = true,\n showSearchFilter = true,\n customStatusOptions,\n}) => {\n const handleFilterChange = (key: keyof TransactionFilters, value: string | number | undefined) => {\n onFiltersChange({\n ...filters,\n [key]: value,\n page: 1, // Reset to first page when filters change\n });\n };\n\n const clearFilters = () => {\n onFiltersChange({\n page: 1,\n limit: filters.limit || 10,\n });\n };\n\n const hasActiveFilters = filters.status || filters.startDate || filters.endDate;\n\n return (\n <div className={`space-y-4 ${className}`}>\n {/* Search Filter */}\n {showSearchFilter && (\n <div className=\"flex items-center space-x-2\">\n <div className=\"relative flex-1 max-w-md\">\n <div className=\"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none\">\n <svg className=\"h-5 w-5 text-gray-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\" />\n </svg>\n </div>\n <input\n type=\"text\"\n placeholder=\"Search transactions...\"\n className=\"block w-full pl-10 pr-3 py-2 border border-gray-300 rounded-md leading-5 bg-white placeholder-gray-500 focus:outline-none focus:placeholder-gray-400 focus:ring-1 focus:ring-blue-500 focus:border-blue-500 sm:text-sm\"\n onChange={(e) => handleFilterChange('search' as keyof TransactionFilters, e.target.value)}\n />\n </div>\n </div>\n )}\n\n {/* Date Range Filter */}\n {showDateFilter && (\n <div className=\"flex flex-wrap items-center gap-4\">\n <div className=\"flex items-center space-x-2\">\n <label className=\"text-sm font-medium text-gray-700\">From:</label>\n <input\n type=\"date\"\n value={filters.startDate || ''}\n onChange={(e) => handleFilterChange('startDate', e.target.value)}\n className=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:ring-1 focus:ring-blue-500 focus:border-blue-500\"\n />\n </div>\n <div className=\"flex items-center space-x-2\">\n <label className=\"text-sm font-medium text-gray-700\">To:</label>\n <input\n type=\"date\"\n value={filters.endDate || ''}\n onChange={(e) => handleFilterChange('endDate', e.target.value)}\n className=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:ring-1 focus:ring-blue-500 focus:border-blue-500\"\n />\n </div>\n </div>\n )}\n\n {/* Status Filter */}\n {showStatusFilter && (\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium text-gray-700\">Status:</label>\n <TransactionStatusFilter\n selectedStatus={filters.status}\n onStatusChange={(status) => handleFilterChange('status', status)}\n customStatuses={customStatusOptions}\n />\n </div>\n )}\n\n {/* Clear Filters */}\n {hasActiveFilters && (\n <div className=\"flex justify-end\">\n <button\n onClick={clearFilters}\n className=\"text-sm text-blue-600 hover:text-blue-800 font-medium\"\n >\n Clear all filters\n </button>\n </div>\n )}\n </div>\n );\n};\n\nexport default TransactionFilter;\n","import React from 'react';\nimport type { PaginationMeta } from '../../types';\n\nexport interface TransactionPaginationProps {\n pagination: PaginationMeta;\n onPageChange: (page: number) => void;\n onLimitChange?: (limit: number) => void;\n className?: string;\n showPageSizeSelector?: boolean;\n pageSizeOptions?: number[];\n showInfo?: boolean;\n}\n\nexport const TransactionPagination: React.FC<TransactionPaginationProps> = ({\n pagination,\n onPageChange,\n onLimitChange,\n className = '',\n showPageSizeSelector = true,\n pageSizeOptions = [10, 25, 50, 100],\n showInfo = true,\n}) => {\n const { currentPage, totalPages, totalItems, itemsPerPage, hasNextPage, hasPreviousPage } = pagination;\n\n const getVisiblePages = () => {\n const delta = 2;\n const range = [];\n const rangeWithDots = [];\n\n for (let i = Math.max(2, currentPage - delta); i <= Math.min(totalPages - 1, currentPage + delta); i++) {\n range.push(i);\n }\n\n if (currentPage - delta > 2) {\n rangeWithDots.push(1, '...');\n } else {\n rangeWithDots.push(1);\n }\n\n rangeWithDots.push(...range);\n\n if (currentPage + delta < totalPages - 1) {\n rangeWithDots.push('...', totalPages);\n } else if (totalPages > 1) {\n rangeWithDots.push(totalPages);\n }\n\n return rangeWithDots;\n };\n\n const startItem = (currentPage - 1) * itemsPerPage + 1;\n const endItem = Math.min(currentPage * itemsPerPage, totalItems);\n\n if (totalPages <= 1) {\n return null;\n }\n\n return (\n <div className={`flex flex-col sm:flex-row items-center justify-between space-y-3 sm:space-y-0 ${className}`}>\n {/* Info and Page Size Selector */}\n <div className=\"flex flex-col sm:flex-row items-center space-y-2 sm:space-y-0 sm:space-x-4\">\n {showInfo && (\n <div className=\"text-sm text-gray-700\">\n Showing <span className=\"font-medium\">{startItem}</span> to{' '}\n <span className=\"font-medium\">{endItem}</span> of{' '}\n <span className=\"font-medium\">{totalItems}</span> results\n </div>\n )}\n\n {showPageSizeSelector && onLimitChange && (\n <div className=\"flex items-center space-x-2\">\n <label className=\"text-sm text-gray-700\">Show:</label>\n <select\n value={itemsPerPage}\n onChange={(e) => onLimitChange(Number(e.target.value))}\n className=\"px-2 py-1 border border-gray-300 rounded text-sm focus:outline-none focus:ring-1 focus:ring-blue-500 focus:border-blue-500\"\n >\n {pageSizeOptions.map((size) => (\n <option key={size} value={size}>\n {size}\n </option>\n ))}\n </select>\n <span className=\"text-sm text-gray-700\">per page</span>\n </div>\n )}\n </div>\n\n {/* Pagination Controls */}\n <div className=\"flex items-center space-x-1\">\n {/* Previous Button */}\n <button\n onClick={() => onPageChange(currentPage - 1)}\n disabled={!hasPreviousPage}\n className={`\n px-3 py-2 text-sm font-medium rounded-md\n ${hasPreviousPage\n ? 'text-gray-500 bg-white border border-gray-300 hover:bg-gray-50 hover:text-gray-700'\n : 'text-gray-300 bg-white border border-gray-300 cursor-not-allowed'\n }\n `}\n >\n Previous\n </button>\n\n {/* Page Numbers */}\n <div className=\"flex items-center space-x-1\">\n {getVisiblePages().map((page, index) => (\n <React.Fragment key={index}>\n {page === '...' ? (\n <span className=\"px-3 py-2 text-sm text-gray-500\">...</span>\n ) : (\n <button\n onClick={() => onPageChange(page as number)}\n className={`\n px-3 py-2 text-sm font-medium rounded-md\n ${currentPage === page\n ? 'bg-blue-600 text-white border border-blue-600'\n : 'text-gray-500 bg-white border border-gray-300 hover:bg-gray-50 hover:text-gray-700'\n }\n `}\n >\n {page}\n </button>\n )}\n </React.Fragment>\n ))}\n </div>\n\n {/* Next Button */}\n <button\n onClick={() => onPageChange(currentPage + 1)}\n disabled={!hasNextPage}\n className={`\n px-3 py-2 text-sm font-medium rounded-md\n ${hasNextPage\n ? 'text-gray-500 bg-white border border-gray-300 hover:bg-gray-50 hover:text-gray-700'\n : 'text-gray-300 bg-white border border-gray-300 cursor-not-allowed'\n }\n `}\n >\n Next\n </button>\n </div>\n </div>\n );\n};\n\nexport default TransactionPagination;\n","import React, { useEffect } from 'react';\nimport { TransactionList, TransactionFilter, TransactionPagination } from './index';\nimport { useTransactions } from '../../hooks/useTransactions';\nimport type { TransactionFilters } from '../../types';\n\nexport interface TransactionModalProps {\n isOpen: boolean;\n onClose: () => void;\n externalId: string;\n title?: string;\n}\n\nexport const TransactionModal: React.FC<TransactionModalProps> = ({\n isOpen,\n onClose,\n externalId,\n title = 'Transaction History',\n}) => {\n const {\n transactions,\n loading,\n error,\n filters,\n meta,\n updateFilters,\n fetchTransactions,\n } = useTransactions({\n externalId,\n initialFilters: { page: 1, limit: 10 },\n autoFetch: true, // Enable auto-fetch so it works when modal opens\n });\n\n // Fetch transactions when modal opens\n useEffect(() => {\n if (isOpen && externalId) {\n fetchTransactions();\n }\n }, [isOpen, externalId, fetchTransactions]);\n\n const handlePageChange = (page: number) => {\n updateFilters({ page });\n };\n\n const handleLimitChange = (limit: number) => {\n updateFilters({ limit, page: 1 });\n };\n\n const handleFiltersChange = (newFilters: TransactionFilters) => {\n updateFilters(newFilters);\n };\n\n if (!isOpen) return null;\n\n\n return (\n <div className=\"fixed inset-0 z-50 overflow-y-auto\">\n <div className=\"flex items-center justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0\">\n {/* Background overlay */}\n <div\n className=\"fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity z-0\"\n onClick={onClose}\n />\n\n {/* Modal panel */}\n <div className=\"inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-4xl sm:w-full relative z-10\">\n {/* Header */}\n <div className=\"bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4\">\n <div className=\"flex items-center justify-between mb-4\">\n <h3 className=\"text-lg leading-6 font-medium text-gray-900\">\n {title}\n </h3>\n <button\n onClick={onClose}\n className=\"bg-white rounded-md text-gray-400 hover:text-gray-600 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary\"\n >\n <span className=\"sr-only\">Close</span>\n <svg className=\"h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n </div>\n\n {/* Filters */}\n <TransactionFilter\n filters={filters}\n onFiltersChange={handleFiltersChange}\n className=\"mb-4\"\n showSearchFilter={false}\n />\n </div>\n\n {/* Content */}\n <div className=\"px-4 pb-4 sm:px-6 sm:pb-6\">\n <TransactionList\n transactions={transactions}\n loading={loading}\n error={error}\n className=\"mb-4\"\n />\n\n {/* Pagination */}\n {meta && (\n <TransactionPagination\n pagination={meta}\n onPageChange={handlePageChange}\n onLimitChange={handleLimitChange}\n pageSizeOptions={[5, 10, 25, 50]}\n />\n )}\n </div>\n\n {/* Footer */}\n <div className=\"bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse\">\n <button\n type=\"button\"\n onClick={onClose}\n className=\"w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-primary text-base font-medium text-white hover:bg-primary-dark focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary sm:ml-3 sm:w-auto sm:text-sm\"\n >\n Close\n </button>\n </div>\n </div>\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport type { Subscription } from '../../types';\nimport { formatDate } from '../../utils/planUtils';\n\nexport interface InfoField {\n key: string;\n label: string;\n getValue: (subscription: Subscription) => string | React.ReactNode;\n className?: string;\n}\n\nexport interface SubscriptionInfoGridProps {\n subscription: Subscription | null;\n fields?: InfoField[];\n className?: string;\n gridCols?: 1 | 2 | 3 | 4 | 5;\n showDefaultFields?: boolean;\n}\n\nconst defaultFields: InfoField[] = [\n {\n key: 'planName',\n label: 'Active Subscription',\n getValue: (subscription) => subscription?.plan?.name || 'N/A',\n },\n {\n key: 'planInterval',\n label: 'Subscription Type',\n getValue: (subscription) => {\n const interval = subscription?.plan?.interval || 'N/A';\n return interval !== 'N/A'\n ? interval.charAt(0) + interval.slice(1).toLowerCase()\n : interval;\n },\n },\n {\n key: 'expiryDate',\n label: 'Subscription Renews on',\n getValue: (subscription) => subscription?.expiryDate ? formatDate(subscription.expiryDate) : 'N/A',\n },\n];\n\nexport const SubscriptionInfoGrid: React.FC<SubscriptionInfoGridProps> = ({\n subscription,\n fields,\n className = '',\n gridCols = 3,\n showDefaultFields = true,\n}) => {\n const displayFields = fields || (showDefaultFields ? defaultFields : []);\n\n if (!subscription || displayFields.length === 0) {\n return null;\n }\n\n const getGridClass = () => {\n switch (gridCols) {\n case 1: return 'grid-cols-1';\n case 2: return 'grid-cols-1 md:grid-cols-2';\n case 3: return 'grid-cols-1 md:grid-cols-3';\n case 4: return 'grid-cols-2 md:grid-cols-4';\n case 5: return 'grid-cols-2 md:grid-cols-5';\n default: return 'grid-cols-1 md:grid-cols-3';\n }\n };\n\n\n return (\n <div className={`grid ${getGridClass()} gap-4 ${className}`}>\n {displayFields.map((field) => (\n <div key={field.key} className={`p-4 border border-gray-200 rounded-lg bg-white ${field.className || ''}`}>\n <p \n className=\"text-sm text-gray-500\" \n style={{\n fontSize: 'var(--subos-font-size-subscription-label, 0.875rem)',\n fontWeight: 'var(--subos-font-weight-subscription-label, 400)',\n color: 'var(--subos-color-subscription-label, #6c757d)'\n }}\n >\n {field.label}\n </p>\n <div \n className=\"font-medium\"\n style={{\n fontSize: 'var(--subos-font-size-subscription-value, 1rem)',\n fontWeight: 'var(--subos-font-weight-subscription-value, 500)',\n color: 'var(--subos-color-subscription-value, inherit)'\n }}\n >\n {field.getValue(subscription)}\n </div>\n </div>\n ))}\n </div>\n );\n};\n\nexport default SubscriptionInfoGrid;\n","import React from 'react';\nimport type { Subscription } from '../../types';\n\nexport interface UsageMetric {\n key: string;\n label: string;\n showProgress?: boolean;\n formatValue?: (used: number, total: number) => string;\n}\n\nexport interface SubscriptionUsageDisplayProps {\n subscription: Subscription | null;\n usageMetrics: UsageMetric[];\n className?: string;\n gridCols?: 1 | 2 | 3 | 4 | 5;\n showProgressBars?: boolean;\n}\n\nexport const SubscriptionUsageDisplay: React.FC<SubscriptionUsageDisplayProps> = ({\n subscription,\n usageMetrics,\n className = '',\n gridCols = 3,\n showProgressBars = false,\n}) => {\n if (!subscription || usageMetrics.length === 0) {\n return null;\n }\n\n const getGridClass = () => {\n switch (gridCols) {\n case 1: return 'grid-cols-1';\n case 2: return 'grid-cols-1 md:grid-cols-2';\n case 3: return 'grid-cols-1 md:grid-cols-3';\n case 4: return 'grid-cols-2 md:grid-cols-4';\n case 5: return 'grid-cols-2 md:grid-cols-5';\n default: return 'grid-cols-1 md:grid-cols-3';\n }\n };\n\n const formatDefaultValue = (used: number, total: number) => {\n return `${used}/${total}`;\n };\n\n const getProgressPercentage = (used: number, total: number) => {\n if (total === 0) return 0;\n return Math.min((used / total) * 100, 100);\n };\n\n const getProgressColor = (percentage: number) => {\n if (percentage >= 90) return 'bg-red-500';\n if (percentage >= 75) return 'bg-yellow-500';\n return 'bg-green-500';\n };\n\n\n return (\n <div className={`grid ${getGridClass()} gap-4 ${className}`}>\n {usageMetrics.map((metric) => {\n const used = subscription.usage?.[metric.key] || 0;\n const total = subscription.meta?.[metric.key] || 0;\n const displayValue = metric.formatValue \n ? metric.formatValue(used, total)\n : formatDefaultValue(used, total);\n \n const percentage = getProgressPercentage(used, total);\n const shouldShowProgress = showProgressBars || metric.showProgress;\n\n return (\n <div key={metric.key} className=\"p-4 border border-gray-200 rounded-lg bg-white space-y-1\">\n <p \n className=\"text-sm text-gray-500\" \n style={{\n fontSize: 'var(--subos-font-size-subscription-label, 0.875rem)',\n fontWeight: 'var(--subos-font-weight-subscription-label, 400)',\n color: 'var(--subos-color-subscription-label, #6c757d)'\n }}\n >\n {metric.label}\n </p>\n <p \n className=\"font-medium\"\n style={{\n fontSize: 'var(--subos-font-size-subscription-value, 1rem)',\n fontWeight: 'var(--subos-font-weight-subscription-value, 500)',\n color: 'var(--subos-color-subscription-value, inherit)'\n }}\n >\n {displayValue}\n </p>\n {shouldShowProgress && total > 0 && (\n <div className=\"w-full bg-gray-200 rounded-full h-2\">\n <div\n className={`h-2 rounded-full transition-all duration-300 ${getProgressColor(percentage)}`}\n style={{ width: `${percentage}%` }}\n />\n </div>\n )}\n </div>\n );\n })}\n </div>\n );\n};\n\nexport default SubscriptionUsageDisplay;\n","import React from 'react';\n\nexport interface SubscriptionTransactionButtonProps {\n onClick: () => void;\n className?: string;\n children?: React.ReactNode;\n disabled?: boolean;\n variant?: 'text' | 'button';\n}\n\nexport const SubscriptionTransactionButton: React.FC<SubscriptionTransactionButtonProps> = ({\n onClick,\n className = '',\n children = 'Transactions',\n disabled = false,\n variant = 'text',\n}) => {\n const baseClasses = variant === 'text'\n ? 'transition-colors duration-200 disabled:cursor-not-allowed'\n : 'px-4 py-2 text-white rounded-md transition-colors duration-200 disabled:cursor-not-allowed';\n\n const getStyles = () => {\n const baseStyles = {\n fontSize: 'var(--subos-font-size-button-text, 0.875rem)',\n fontWeight: 'var(--subos-font-weight-button-text, 500)',\n };\n\n if (variant === 'text') {\n return {\n ...baseStyles,\n color: disabled \n ? 'var(--subos-muted-foreground, #64748b)' \n : 'var(--subos-color-button-text, var(--subos-primary-600, #2563eb))',\n textDecoration: 'none',\n };\n } else {\n return {\n ...baseStyles,\n backgroundColor: disabled \n ? 'var(--subos-muted, #f1f5f9)' \n : 'var(--subos-primary-500, #3f51b5)',\n color: disabled ? 'var(--subos-muted-foreground, #64748b)' : 'white',\n };\n }\n };\n\n return (\n <button\n onClick={onClick}\n disabled={disabled}\n className={`${baseClasses} ${className}`}\n style={getStyles()}\n onMouseEnter={!disabled && variant === 'text' ? (e) => {\n e.currentTarget.style.color = 'var(--subos-primary-700, #1d4ed8)';\n e.currentTarget.style.textDecoration = 'underline';\n } : !disabled && variant === 'button' ? (e) => {\n e.currentTarget.style.backgroundColor = 'var(--subos-primary-600, #2563eb)';\n } : undefined}\n onMouseLeave={!disabled && variant === 'text' ? (e) => {\n e.currentTarget.style.color = 'var(--subos-primary-600, #2563eb)';\n e.currentTarget.style.textDecoration = 'none';\n } : !disabled && variant === 'button' ? (e) => {\n e.currentTarget.style.backgroundColor = 'var(--subos-primary-500, #3f51b5)';\n } : undefined}\n >\n {children}\n </button>\n );\n};\n\nexport default SubscriptionTransactionButton;\n","import React from 'react';\n\nexport interface SubscriptionCancelButtonProps {\n onClick: () => void;\n className?: string;\n children?: React.ReactNode;\n disabled?: boolean;\n variant?: 'text' | 'button';\n}\n\nexport const SubscriptionCancelButton: React.FC<SubscriptionCancelButtonProps> = ({\n onClick,\n className = '',\n children = 'Cancel Renewal',\n disabled = false,\n variant = 'text',\n}) => {\n const baseClasses = variant === 'text'\n ? 'transition-colors duration-200 disabled:cursor-not-allowed'\n : 'px-4 py-2 text-white rounded-md transition-colors duration-200 disabled:cursor-not-allowed';\n\n const getStyles = () => {\n const baseStyles = {\n fontSize: 'var(--subos-font-size-button-text, 0.875rem)',\n fontWeight: 'var(--subos-font-weight-button-text, 500)',\n };\n\n if (variant === 'text') {\n return {\n ...baseStyles,\n color: disabled \n ? 'var(--subos-muted-foreground, #64748b)' \n : '#dc2626', // Keep red for cancel action\n textDecoration: 'none',\n };\n } else {\n return {\n ...baseStyles,\n backgroundColor: disabled \n ? 'var(--subos-muted, #f1f5f9)' \n : '#dc2626', // Keep red for cancel action\n color: disabled ? 'var(--subos-muted-foreground, #64748b)' : 'white',\n };\n }\n };\n\n return (\n <button\n onClick={onClick}\n disabled={disabled}\n className={`${baseClasses} ${className}`}\n style={getStyles()}\n onMouseEnter={!disabled && variant === 'text' ? (e) => {\n e.currentTarget.style.color = '#b91c1c';\n e.currentTarget.style.textDecoration = 'underline';\n } : !disabled && variant === 'button' ? (e) => {\n e.currentTarget.style.backgroundColor = '#b91c1c';\n } : undefined}\n onMouseLeave={!disabled && variant === 'text' ? (e) => {\n e.currentTarget.style.color = '#dc2626';\n e.currentTarget.style.textDecoration = 'none';\n } : !disabled && variant === 'button' ? (e) => {\n e.currentTarget.style.backgroundColor = '#dc2626';\n } : undefined}\n >\n {children}\n </button>\n );\n};\n\nexport default SubscriptionCancelButton;\n","import React from 'react';\nimport { SubscriptionTransactionButton } from './SubscriptionTransactionButton';\nimport { SubscriptionCancelButton } from './SubscriptionCancelButton';\n\nexport interface ActionButton {\n key: string;\n component: React.ReactNode;\n show?: boolean;\n}\n\nexport interface SubscriptionActionButtonsProps {\n onTransactionClick?: () => void;\n onCancelClick?: () => void;\n customActions?: ActionButton[];\n showTransactionButton?: boolean;\n showCancelButton?: boolean;\n className?: string;\n layout?: 'horizontal' | 'vertical';\n spacing?: 'tight' | 'normal' | 'loose';\n}\n\nexport const SubscriptionActionButtons: React.FC<SubscriptionActionButtonsProps> = ({\n onTransactionClick,\n onCancelClick,\n customActions = [],\n showTransactionButton = true,\n showCancelButton = true,\n className = '',\n layout = 'horizontal',\n spacing = 'normal',\n}) => {\n const getSpacingClass = () => {\n const isVertical = layout === 'vertical';\n switch (spacing) {\n case 'tight':\n return isVertical ? 'space-y-1' : 'space-x-2';\n case 'normal':\n return isVertical ? 'space-y-2' : 'space-x-3'; // Reduced spacing\n case 'loose':\n return isVertical ? 'space-y-4' : 'space-x-8';\n default:\n return isVertical ? 'space-y-2' : 'space-x-3'; // Reduced spacing\n }\n };\n\n const containerClass = layout === 'vertical' \n ? `flex flex-col ${getSpacingClass()}`\n : `flex items-center ${getSpacingClass()}`; // Added items-center for better alignment\n\n const defaultActions: ActionButton[] = [\n {\n key: 'transaction',\n component: onTransactionClick && (\n <SubscriptionTransactionButton onClick={onTransactionClick} />\n ),\n show: showTransactionButton && !!onTransactionClick,\n },\n {\n key: 'cancel',\n component: onCancelClick && (\n <SubscriptionCancelButton onClick={onCancelClick} />\n ),\n show: showCancelButton && !!onCancelClick,\n },\n ];\n\n const allActions = [...defaultActions, ...customActions];\n const visibleActions = allActions.filter(action => action.show !== false && action.component);\n\n if (visibleActions.length === 0) {\n return null;\n }\n\n return (\n <div className={`${containerClass} ${className}`}>\n {visibleActions.map((action, index) => (\n <div \n key={action.key}\n style={{\n marginLeft: index > 0 && layout === 'horizontal' ? '12px' : '0',\n marginTop: index > 0 && layout === 'vertical' ? '8px' : '0'\n }}\n >\n {action.component}\n </div>\n ))}\n </div>\n );\n};\n\nexport default SubscriptionActionButtons;\n","import React from 'react';\n\nexport interface CancelOptions {\n cancellationMode?: 'immediate' | 'endOfPeriod';\n cancellationReason?: string;\n}\n\nexport interface SubscriptionCancelModalProps {\n isOpen: boolean;\n onClose: () => void;\n onConfirm: (options: CancelOptions) => Promise<void>;\n loading?: boolean;\n title?: string;\n description?: string;\n}\n\n\nexport const SubscriptionCancelModal: React.FC<SubscriptionCancelModalProps> = ({\n isOpen,\n onClose,\n onConfirm,\n loading = false,\n title = 'Cancel Subscription',\n description = 'Are you sure you want to cancel your subscription? This action cannot be undone.',\n}) => {\n // Static values as requested\n const cancellationMode = 'endOfPeriod';\n const cancellationReason = 'subscription_user_canceled_request';\n\n const handleConfirm = async () => {\n await onConfirm({\n cancellationMode,\n cancellationReason,\n });\n };\n\n if (!isOpen) return null;\n\n return (\n <div className=\"fixed inset-0 z-50 overflow-y-auto\">\n <div className=\"flex items-center justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0\">\n {/* Background overlay */}\n <div\n className=\"fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity\"\n onClick={onClose}\n />\n\n {/* Modal panel */}\n <div className=\"inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full relative z-10\">\n {/* Header */}\n <div className=\"bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4\">\n <div className=\"sm:flex sm:items-start\">\n <div className=\"mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-red-100 sm:mx-0 sm:h-10 sm:w-10\">\n <svg className=\"h-6 w-6 text-red-600\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L3.732 16.5c-.77.833.192 2.5 1.732 2.5z\"\n />\n </svg>\n </div>\n <div className=\"mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left flex-1\">\n <h3 className=\"text-lg leading-6 font-medium text-gray-900\">\n {title}\n </h3>\n <div className=\"mt-2\">\n <p className=\"text-sm text-gray-500\">\n {description}\n </p>\n </div>\n\n </div>\n </div>\n </div>\n\n {/* Footer */}\n <div className=\"bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse\">\n <button\n type=\"button\"\n onClick={handleConfirm}\n disabled={loading}\n className=\"w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 sm:ml-3 sm:w-auto sm:text-sm disabled:bg-red-300 disabled:cursor-not-allowed\"\n >\n {loading ? 'Cancelling...' : 'Confirm Cancellation'}\n </button>\n <button\n type=\"button\"\n onClick={onClose}\n disabled={loading}\n className=\"mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm disabled:bg-gray-100 disabled:cursor-not-allowed\"\n >\n Cancel\n </button>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default SubscriptionCancelModal;\n","import React, { useState } from 'react';\nimport { clearSelectedPlan } from '../../utils/upgradeUtils';\nimport type { Subscription } from '../../types';\nimport { TransactionModal } from '../transaction/TransactionModal';\nimport { useCancelSubscription } from '../../hooks/useCancelSubscription';\nimport { ChangeCardButton } from '../payments/ChangeCardButton';\nimport { SubscriptionInfoGrid } from './SubscriptionInfoGrid';\nimport { SubscriptionUsageDisplay, type UsageMetric } from './SubscriptionUsageDisplay';\nimport { SubscriptionActionButtons } from './SubscriptionActionButtons';\nimport { SubscriptionCancelModal, type CancelOptions } from './SubscriptionCancelModal';\n\nexport interface SubscriptionDetailsProps {\n subscription: Subscription | null;\n externalId: string;\n onSubscriptionCancelled?: () => void;\n usageMetrics?: UsageMetric[];\n showTransactionButton?: boolean;\n showCancelButton?: boolean;\n showChangeCardButton?: boolean;\n customActions?: React.ReactNode[];\n className?: string;\n}\n\nexport const SubscriptionDetails: React.FC<SubscriptionDetailsProps> = ({\n subscription,\n externalId,\n onSubscriptionCancelled,\n usageMetrics = [\n { key: 'ACTIVE_JOBS', label: 'Active Jobs' },\n { key: 'CANDIDATES', label: 'Candidates' },\n ],\n showTransactionButton = true,\n showCancelButton = true,\n showChangeCardButton = true,\n customActions = [],\n className = '',\n}) => {\n const [isTransactionModalOpen, setIsTransactionModalOpen] = useState(false);\n const [showCancelConfirmation, setShowCancelConfirmation] = useState(false);\n\n const { cancelSubscription, loading: cancelLoading } = useCancelSubscription({\n onSuccess: () => {\n setShowCancelConfirmation(false);\n onSubscriptionCancelled?.();\n // Show success message or notification here\n alert('Subscription cancelled successfully');\n },\n onError: (error) => {\n // Show error message or notification here\n alert(`Failed to cancel subscription: ${error}`);\n },\n });\n\n const handleTransactionClick = () => {\n // Hide upgrade summary selection when navigating to transactions\n clearSelectedPlan();\n setIsTransactionModalOpen(true);\n };\n\n const handleCancelClick = () => {\n // Hide upgrade summary selection when initiating cancellation flow\n clearSelectedPlan();\n setShowCancelConfirmation(true);\n };\n\n const handleConfirmCancel = async (options: CancelOptions) => {\n await cancelSubscription(externalId, {\n cancellationMode: options.cancellationMode || 'endOfPeriod',\n cancellationReason: options.cancellationReason || 'subscription_user_canceled_request'\n });\n };\n\n const handleCancelModalClose = () => {\n setShowCancelConfirmation(false);\n };\n return (\n <>\n {/* Email summary and change button */}\n\n {/* Subscription Details Header */}\n <div className={`mb-6 ${className}`}>\n <div className=\"flex items-center justify-between mb-4\">\n <h2 className=\"text-lg font-semibold\">Subscription Details</h2>\n <div className=\"flex gap-4\">\n <SubscriptionActionButtons\n onTransactionClick={showTransactionButton ? handleTransactionClick : undefined}\n onCancelClick={showCancelButton ? handleCancelClick : undefined}\n showTransactionButton={showTransactionButton}\n showCancelButton={showCancelButton}\n customActions={[\n ...(showChangeCardButton ? [{\n key: 'changeCard',\n component: (\n <ChangeCardButton\n externalId={externalId}\n onSuccess={() => {\n // Optional: Show success message or refresh data\n }}\n onError={(error) => {\n // Optional: Show error message\n alert(`Failed to open payment portal: ${error}`);\n }}\n >\n Manage Billing\n </ChangeCardButton>\n ),\n show: true,\n }] : []),\n ...customActions.map((action, index) => ({\n key: `custom-${index}`,\n component: action,\n show: true,\n })),\n ]}\n />\n </div>\n </div>\n \n {/* Info + Usage in one row with equal spacing */}\n <div className=\"grid grid-cols-1 md:grid-cols-5 gap-4\">\n {/* Subscription Info Grid */}\n <SubscriptionInfoGrid\n subscription={subscription}\n className=\"!contents\"\n gridCols={usageMetrics.length > 0 ? 3 : 5}\n />\n\n {/* Usage Display */}\n {usageMetrics.length > 0 && (\n <SubscriptionUsageDisplay\n subscription={subscription}\n usageMetrics={usageMetrics}\n gridCols={Math.min(usageMetrics.length, 3) as 1 | 2 | 3}\n className=\"!contents\"\n />\n )}\n </div>\n </div>\n\n {/* Transaction Modal */}\n <TransactionModal\n isOpen={isTransactionModalOpen}\n onClose={() => setIsTransactionModalOpen(false)}\n externalId={externalId}\n />\n\n {/* Cancellation Confirmation Modal */}\n <SubscriptionCancelModal\n isOpen={showCancelConfirmation}\n onClose={handleCancelModalClose}\n onConfirm={handleConfirmCancel}\n loading={cancelLoading}\n />\n </>\n );\n};\n","import React, { useEffect, useState } from 'react';\nimport type { Plan } from '../../types';\nimport { subscriptionApi } from '../../api/client';\n\ninterface CheckoutInfo {\n planName: string;\n planPrice: number;\n planInterval: string;\n proration: number;\n planCode: string;\n planCurrency: string;\n}\n\nexport interface UpgradeSummaryProps {\n selectedPlan: Plan | null;\n externalId: string;\n onUpgrade: () => void;\n isVisible?: boolean;\n}\n\nexport const UpgradeSummary: React.FC<UpgradeSummaryProps> = ({\n selectedPlan,\n externalId,\n onUpgrade,\n isVisible = true,\n}) => {\n const [checkoutInfo, setCheckoutInfo] = useState<CheckoutInfo | null>(null);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n if (!selectedPlan || !isVisible || Number(selectedPlan.fixedCost) === 0) {\n setCheckoutInfo(null);\n return;\n }\n\n const fetchCheckoutInfo = async () => {\n setLoading(true);\n try {\n const response = await subscriptionApi.checkoutInfo(selectedPlan.code, externalId);\n const dataWrapper = (response as any)?.data;\n if (dataWrapper?.success && dataWrapper?.data) {\n setCheckoutInfo(dataWrapper.data as CheckoutInfo);\n }\n } catch (error) {\n console.error('Failed to fetch checkout info:', error);\n } finally {\n setLoading(false);\n }\n };\n\n fetchCheckoutInfo();\n }, [selectedPlan, externalId, isVisible]);\n\n if (!selectedPlan || !isVisible || Number(selectedPlan.fixedCost) === 0 || loading || !checkoutInfo) {\n return null;\n }\n const displayInfo = checkoutInfo;\n\n const intervalDisplay = displayInfo.planInterval === 'MONTHLY' ? 'Mo' : 'Yr';\n const dueToday = displayInfo.proration > 0 ? displayInfo.proration : displayInfo.planPrice;\n\n return (\n <div className='w-full'>\n <div className='w-full'>\n <div \n className='shadow-xl rounded-md border px-4 py-3'\n style={{\n backgroundColor: 'var(--subos-background, #ffffff)',\n borderColor: 'var(--subos-border, #e2e8f0)',\n boxShadow: 'var(--subos-shadow-card-hover, 0 8px 24px rgba(0,0,0,0.15))'\n }}\n >\n <div className='flex items-center justify-between'>\n <div>\n <p \n className='text-sm'\n style={{ color: 'var(--subos-muted-foreground, #64748b)' }}\n >\n Summary\n </p>\n <h2 \n className='text-sm font-medium'\n style={{ color: 'var(--subos-foreground, #1e293b)' }}\n >\n {displayInfo.planName}\n </h2>\n </div>\n <div className='flex items-center gap-6'>\n <div className='text-right'>\n <h3 \n className='text-2xl font-semibold'\n style={{ color: 'var(--subos-foreground, #1e293b)' }}\n >\n ${displayInfo.planPrice}/{intervalDisplay}\n </h3>\n </div>\n <div className='flex items-center gap-4'>\n <div className='text-right'>\n <p \n className='text-sm'\n style={{ color: 'var(--subos-muted-foreground, #64748b)' }}\n >\n Due Today\n </p>\n <p \n className='text-xl font-semibold'\n style={{ color: 'var(--subos-foreground, #1e293b)' }}\n >\n ${dueToday}\n </p>\n {displayInfo.proration > 0 && (\n <p \n className='text-xs mt-1'\n style={{ color: 'var(--subos-muted-foreground, #64748b)' }}\n >\n (Includes prorated discount for unused days of your current plan)\n </p>\n )}\n </div>\n <button\n onClick={onUpgrade}\n disabled={loading}\n className='text-white px-8 py-3 rounded-lg font-semibold transition-all duration-200 text-sm disabled:opacity-50 shadow-md'\n style={{\n backgroundColor: loading \n ? 'var(--subos-muted, #f1f5f9)' \n : 'var(--subos-primary-500, #ef4444)',\n color: loading ? 'var(--subos-muted-foreground, #64748b)' : 'white',\n border: 'none',\n boxShadow: loading ? 'none' : '0 4px 12px rgba(239, 68, 68, 0.3)'\n }}\n onMouseEnter={!loading ? (e) => {\n e.currentTarget.style.backgroundColor = '#dc2626';\n e.currentTarget.style.transform = 'translateY(-1px)';\n e.currentTarget.style.boxShadow = '0 6px 16px rgba(239, 68, 68, 0.4)';\n } : undefined}\n onMouseLeave={!loading ? (e) => {\n e.currentTarget.style.backgroundColor = 'var(--subos-primary-500, #ef4444)';\n e.currentTarget.style.transform = 'translateY(0)';\n e.currentTarget.style.boxShadow = '0 4px 12px rgba(239, 68, 68, 0.3)';\n } : undefined}\n >\n {loading ? 'Loading...' : 'Upgrade Now'}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\n","import React from \"react\";\n\n// Renders the public/file.svg inside an inline <svg>, so you can pass standard SVG props\n// like className, width, height, etc. You can also override the src via props if needed.\n\ntype Props = React.SVGProps<SVGSVGElement> & {\n src?: string;\n alt?: string;\n};\n\nexport const LogoInline = ({ src, alt = \"Logo\", viewBox = \"0 0 1024 1024\", ...props }: Props) => {\n // Resolve the public asset respecting Vite's base path\n const resolvedSrc = src ?? \"https://upload.wikimedia.org/wikipedia/commons/a/a7/React-icon.svg\";\n\n return (\n <svg\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={viewBox}\n aria-label={alt}\n role=\"img\"\n {...props}\n >\n {/* Embed the external SVG asset inside this inline <svg> */}\n <image href={resolvedSrc} width=\"100%\" height=\"100%\" preserveAspectRatio=\"xMidYMid meet\" />\n </svg>\n );\n}\n","import type { ReactNode } from 'react';\nimport { Link as RouterLink } from 'react-router-dom';\nimport { LogoInline } from '../LogoInline';\n\ninterface LayoutProps {\n children: ReactNode;\n}\n\nexport const Layout: React.FC<LayoutProps> = ({ children }) => {\n return (\n <div className=\"flex flex-col min-h-screen w-full\">\n <header className=\"bg-white/80 backdrop-blur border-b border-gray-200\">\n <nav className=\"w-full flex items-center justify-between px-4 py-3\">\n <div className=\"flex-grow\">\n <RouterLink to=\"/\" className=\"no-underline text-inherit\">\n <div className=\"flex items-center\">\n <LogoInline className=\"h-8 w-auto\" alt=\"SubOS\" />\n </div>\n </RouterLink>\n </div>\n </nav>\n </header>\n \n <main className=\"flex-1 w-full\">\n {children}\n </main>\n \n <footer className=\"bg-gray-100 py-6 w-full mt-auto\">\n <div className=\"max-w-7xl mx-auto px-4\">\n <p className=\"text-sm text-gray-600 text-center\">\n © {new Date().getFullYear()} SubOS. All rights reserved.\n </p>\n </div>\n </footer>\n </div>\n );\n};\n\n\n","import React, { createContext, useContext } from 'react';\nimport type { ReactNode } from 'react';\n\nexport interface SubOSTheme {\n // Primary colors\n primaryColors?: {\n 50?: string;\n 100?: string;\n 200?: string;\n 300?: string;\n 400?: string;\n 500?: string;\n 600?: string;\n 700?: string;\n 800?: string;\n 900?: string;\n };\n \n // Secondary colors\n secondaryColors?: {\n 50?: string;\n 100?: string;\n 200?: string;\n 300?: string;\n 400?: string;\n 500?: string;\n 600?: string;\n 700?: string;\n 800?: string;\n 900?: string;\n };\n \n // Neutral colors\n background?: string;\n foreground?: string;\n muted?: string;\n mutedForeground?: string;\n border?: string;\n accent?: string;\n accentForeground?: string;\n \n // Typography\n fontFamily?: string;\n \n // Font sizes for specific elements\n fontSizes?: {\n subscriptionLabel?: string;\n subscriptionValue?: string;\n buttonText?: string;\n planTitle?: string;\n planDescription?: string;\n planCardTitle?: string;\n planCardDescription?: string;\n planCardInfo?: string;\n planCardFeature?: string;\n };\n \n // Font weights for specific elements\n fontWeights?: {\n subscriptionLabel?: number | string;\n subscriptionValue?: number | string;\n buttonText?: number | string;\n planTitle?: number | string;\n planDescription?: number | string;\n planCardTitle?: number | string;\n planCardDescription?: number | string;\n planCardInfo?: number | string;\n planCardFeature?: number | string;\n };\n \n // Font colors for specific elements\n fontColors?: {\n subscriptionLabel?: string;\n subscriptionValue?: string;\n buttonText?: string;\n planTitle?: string;\n planDescription?: string;\n planCardTitle?: string;\n planCardDescription?: string;\n planCardInfo?: string;\n planCardFeature?: string;\n };\n \n // Layout\n borderRadius?: string;\n \n // Shadows\n shadowCard?: string;\n shadowCardHover?: string;\n}\n\ninterface SubOSThemeContextType {\n theme: SubOSTheme;\n setTheme: (theme: SubOSTheme) => void;\n}\n\nconst SubOSThemeContext = createContext<SubOSThemeContextType | undefined>(undefined);\n\nexport const useSubOSTheme = () => {\n const context = useContext(SubOSThemeContext);\n if (!context) {\n throw new Error('useSubOSTheme must be used within a SubOSThemeProvider');\n }\n return context;\n};\n\ninterface SubOSThemeProviderProps {\n children: ReactNode;\n theme?: SubOSTheme;\n className?: string;\n}\n\nexport const SubOSThemeProvider: React.FC<SubOSThemeProviderProps> = ({ \n children, \n theme = {},\n className = ''\n}) => {\n const [currentTheme, setCurrentTheme] = React.useState<SubOSTheme>(theme);\n \n // Generate CSS custom properties from theme\n const cssVariables = React.useMemo(() => {\n const vars: Record<string, string> = {};\n \n // Primary colors\n if (currentTheme.primaryColors) {\n Object.entries(currentTheme.primaryColors).forEach(([key, value]) => {\n if (value) vars[`--subos-primary-${key}`] = value;\n });\n }\n \n // Secondary colors\n if (currentTheme.secondaryColors) {\n Object.entries(currentTheme.secondaryColors).forEach(([key, value]) => {\n if (value) vars[`--subos-secondary-${key}`] = value;\n });\n }\n \n // Neutral colors\n if (currentTheme.background) vars['--subos-background'] = currentTheme.background;\n if (currentTheme.foreground) vars['--subos-foreground'] = currentTheme.foreground;\n if (currentTheme.muted) vars['--subos-muted'] = currentTheme.muted;\n if (currentTheme.mutedForeground) vars['--subos-muted-foreground'] = currentTheme.mutedForeground;\n if (currentTheme.border) vars['--subos-border'] = currentTheme.border;\n if (currentTheme.accent) vars['--subos-accent'] = currentTheme.accent;\n if (currentTheme.accentForeground) vars['--subos-accent-foreground'] = currentTheme.accentForeground;\n \n // Typography\n if (currentTheme.fontFamily) vars['--subos-font-family'] = currentTheme.fontFamily;\n \n // Font sizes\n if (currentTheme.fontSizes) {\n Object.entries(currentTheme.fontSizes).forEach(([key, value]) => {\n if (value) {\n const cssKey = key.replace(/([A-Z])/g, '-$1').toLowerCase();\n vars[`--subos-font-size-${cssKey}`] = value;\n }\n });\n }\n \n // Font weights\n if (currentTheme.fontWeights) {\n Object.entries(currentTheme.fontWeights).forEach(([key, value]) => {\n if (value !== undefined) {\n const cssKey = key.replace(/([A-Z])/g, '-$1').toLowerCase();\n vars[`--subos-font-weight-${cssKey}`] = String(value);\n }\n });\n }\n \n // Font colors\n if (currentTheme.fontColors) {\n Object.entries(currentTheme.fontColors).forEach(([key, value]) => {\n if (value) {\n const cssKey = key.replace(/([A-Z])/g, '-$1').toLowerCase();\n vars[`--subos-color-${cssKey}`] = value;\n }\n });\n }\n \n // Layout\n if (currentTheme.borderRadius) vars['--subos-border-radius'] = currentTheme.borderRadius;\n \n // Shadows\n if (currentTheme.shadowCard) vars['--subos-shadow-card'] = currentTheme.shadowCard;\n if (currentTheme.shadowCardHover) vars['--subos-shadow-card-hover'] = currentTheme.shadowCardHover;\n \n return vars;\n }, [currentTheme]);\n \n const contextValue = React.useMemo(() => ({\n theme: currentTheme,\n setTheme: setCurrentTheme,\n }), [currentTheme]);\n \n return (\n <SubOSThemeContext.Provider value={contextValue}>\n <div \n className={`subos-container ${className}`}\n style={cssVariables}\n >\n {children}\n </div>\n </SubOSThemeContext.Provider>\n );\n};\n\n// Hook to easily apply theme from host application\nexport const useApplyHostTheme = (hostTheme?: Partial<SubOSTheme>) => {\n const { setTheme } = useSubOSTheme();\n \n React.useEffect(() => {\n if (hostTheme) {\n setTheme(hostTheme);\n }\n }, [hostTheme, setTheme]);\n};\n","import React from 'react';\nimport type { PaginationMeta } from '../../types';\n\nexport interface PaginationProps {\n meta: PaginationMeta;\n onPageChange: (page: number) => void;\n onLimitChange?: (limit: number) => void;\n showLimitSelector?: boolean;\n limitOptions?: number[];\n className?: string;\n}\n\nexport const Pagination: React.FC<PaginationProps> = ({\n meta,\n onPageChange,\n onLimitChange,\n showLimitSelector = true,\n limitOptions = [10, 25, 50, 100],\n className = '',\n}) => {\n const { currentPage, totalPages, totalItems, itemsPerPage, hasNextPage, hasPreviousPage } = meta;\n\n // Generate page numbers to display\n const getPageNumbers = () => {\n const pages: (number | string)[] = [];\n const maxVisiblePages = 7;\n \n if (totalPages <= maxVisiblePages) {\n // Show all pages if total pages is small\n for (let i = 1; i <= totalPages; i++) {\n pages.push(i);\n }\n } else {\n // Show first page\n pages.push(1);\n \n if (currentPage > 4) {\n pages.push('...');\n }\n \n // Show pages around current page\n const start = Math.max(2, currentPage - 1);\n const end = Math.min(totalPages - 1, currentPage + 1);\n \n for (let i = start; i <= end; i++) {\n if (i !== 1 && i !== totalPages) {\n pages.push(i);\n }\n }\n \n if (currentPage < totalPages - 3) {\n pages.push('...');\n }\n \n // Show last page\n if (totalPages > 1) {\n pages.push(totalPages);\n }\n }\n \n return pages;\n };\n\n const pageNumbers = getPageNumbers();\n\n const startItem = (currentPage - 1) * itemsPerPage + 1;\n const endItem = Math.min(currentPage * itemsPerPage, totalItems);\n\n return (\n <div className={`flex flex-col sm:flex-row items-center justify-between gap-4 ${className}`}>\n {/* Items info */}\n <div className=\"text-sm text-gray-700\">\n Showing {startItem} to {endItem} of {totalItems} results\n </div>\n\n <div className=\"flex items-center gap-4\">\n {/* Limit selector */}\n {showLimitSelector && onLimitChange && (\n <div className=\"flex items-center gap-2\">\n <label htmlFor=\"limit-select\" className=\"text-sm text-gray-700\">\n Show:\n </label>\n <select\n id=\"limit-select\"\n value={itemsPerPage}\n onChange={(e) => onLimitChange(Number(e.target.value))}\n className=\"border border-gray-300 rounded px-2 py-1 text-sm focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent\"\n >\n {limitOptions.map((option) => (\n <option key={option} value={option}>\n {option}\n </option>\n ))}\n </select>\n </div>\n )}\n\n {/* Pagination controls */}\n <div className=\"flex items-center gap-1\">\n {/* Previous button */}\n <button\n onClick={() => onPageChange(currentPage - 1)}\n disabled={!hasPreviousPage}\n className=\"px-3 py-2 text-sm font-medium text-gray-500 bg-white border border-gray-300 rounded-l-md hover:bg-gray-50 disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n Previous\n </button>\n\n {/* Page numbers */}\n {pageNumbers.map((page, index) => (\n <React.Fragment key={index}>\n {page === '...' ? (\n <span className=\"px-3 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300\">\n ...\n </span>\n ) : (\n <button\n onClick={() => onPageChange(page as number)}\n className={`px-3 py-2 text-sm font-medium border ${\n currentPage === page\n ? 'bg-primary text-white border-primary'\n : 'text-gray-700 bg-white border-gray-300 hover:bg-gray-50'\n }`}\n >\n {page}\n </button>\n )}\n </React.Fragment>\n ))}\n\n {/* Next button */}\n <button\n onClick={() => onPageChange(currentPage + 1)}\n disabled={!hasNextPage}\n className=\"px-3 py-2 text-sm font-medium text-gray-500 bg-white border border-gray-300 rounded-r-md hover:bg-gray-50 disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n Next\n </button>\n </div>\n </div>\n </div>\n );\n};\n","import React, { useEffect, useRef } from 'react';\nimport { Layout } from '../components/common/Layout';\nimport { useSubscription } from '../hooks/useSubscription';\nimport { usePlans } from '../hooks/usePlans';\nimport { SubscriptionDetails } from '../components/subscription/SubscriptionDetails';\nimport { PlanSelector } from '../components/plans/PlanSelector';\nimport { UpgradeSummary } from '../components/upgrade/UpgradeSummary';\nimport { UpgradeProvider } from '../contexts/UpgradeContext';\nimport { registerClearSelectedPlan, unregisterClearSelectedPlan } from '../utils/upgradeUtils';\n\nexport interface DashboardPageProps {\n externalId: string;\n}\n\nexport const DashboardPage: React.FC<DashboardPageProps> = ({ \n externalId, \n}) => {\n // Custom hooks\n const subscription = useSubscription();\n const plans = usePlans();\n \n // Track the last loaded externalId to prevent unnecessary re-fetches\n const lastLoadedIdRef = useRef<string | null>(null);\n\n // Load dashboard data on mount or when externalId changes\n useEffect(() => {\n if (lastLoadedIdRef.current !== externalId) {\n subscription.fetchSubscription(externalId);\n plans.fetchPlans();\n lastLoadedIdRef.current = externalId;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [externalId]); // Only depend on externalId to prevent infinite loops\n\n // Register the clear function for global access\n useEffect(() => {\n registerClearSelectedPlan(plans.clearSelectedPlan);\n return () => {\n unregisterClearSelectedPlan();\n };\n }, [plans.clearSelectedPlan]);\n\n // Handle upgrade\n const handleUpgrade = () => {\n plans.handleUpgrade(externalId);\n };\n\n return (\n <UpgradeProvider>\n <Layout>\n <div className=\"max-w-7xl mx-auto w-full h-full py-8 px-4 pb-24\">\n <SubscriptionDetails\n subscription={subscription.subscription}\n externalId={externalId}\n onSubscriptionCancelled={() => {\n // Refresh subscription data after cancellation\n subscription.fetchSubscription(externalId);\n // Clear selected plan when subscription is cancelled\n plans.clearSelectedPlan();\n }}\n />\n\n <PlanSelector\n plans={plans.filteredPlans}\n selectedPlan={plans.selectedPlan}\n tierFilter={plans.tierFilter}\n billingCycle={plans.billingCycle}\n loading={plans.loading}\n error={plans.error}\n dropdownOptions={plans.dropdownOptions}\n currentSelectionText={plans.currentSelectionText}\n onPlanSelect={plans.handlePlanSelect}\n onTierFilterChange={plans.setTierFilter}\n onBillingCycleChange={plans.setBillingCycle}\n activePlanCode={subscription.subscription?.plan.code}\n />\n\n <UpgradeSummary\n selectedPlan={plans.selectedPlan}\n externalId={externalId}\n onUpgrade={handleUpgrade}\n isVisible={!!plans.selectedPlan}\n />\n </div>\n </Layout>\n </UpgradeProvider>\n );\n};\n","import { useMemo } from 'react';\n\nexport interface PaymentParams {\n gateway?: string;\n sessionId?: string;\n paymentId?: string;\n reason?: string;\n}\n\nexport const usePaymentParams = (): PaymentParams => {\n return useMemo(() => {\n const params = new URLSearchParams(window.location.search);\n return {\n gateway: params.get('gateway') || undefined,\n sessionId: params.get('session_id') || undefined,\n paymentId: params.get('payment_id') || undefined,\n reason: params.get('reason') || undefined,\n };\n }, []);\n};\n","import { useEffect, useState } from 'react';\nimport { getApiBaseUrl, getHeaders } from '../../api/config';\nimport type { PaymentParams } from './usePaymentParams';\n\ninterface SuccessHookResult {\n loading: boolean;\n error: string | null;\n}\n\nexport const useProcessPaymentSuccess = (params: PaymentParams): SuccessHookResult => {\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n const run = async () => {\n try {\n const qs = new URLSearchParams({\n ...(params.gateway ? { gateway: params.gateway } : {}),\n ...(params.sessionId ? { session_id: params.sessionId } : {}),\n ...(params.paymentId ? { payment_id: params.paymentId } : {}),\n }).toString();\n\n const url = `${getApiBaseUrl()}/api/payments/success?${qs}`;\n const response = await fetch(url, {\n headers: getHeaders(),\n credentials: 'include',\n });\n\n const contentType = response.headers.get('content-type') || '';\n if (!contentType.includes('application/json')) {\n const text = await response.text();\n throw new Error(`Unexpected response type: ${contentType}. Body: ${text.slice(0, 200)}...`);\n }\n\n const result = await response.json();\n if (!result.success) {\n setError(result.error || 'Failed to process payment');\n }\n } catch (err: any) {\n setError(err?.message || 'Failed to process payment');\n } finally {\n setLoading(false);\n }\n };\n\n run();\n // we only want to run once on mount with initial params\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return { loading, error };\n};\n","import React from 'react';\nimport { Layout } from '../components/common/Layout';\nimport { usePaymentParams } from '../hooks/payments/usePaymentParams';\nimport { useProcessPaymentSuccess } from '../hooks/payments/useProcessPaymentSuccess';\nimport PaymentSuccessView from '../components/payments/PaymentSuccessView';\n\nconst PaymentSuccessPage: React.FC = () => {\n const paymentDetails = usePaymentParams();\n const { loading, error } = useProcessPaymentSuccess(paymentDetails);\n\n if (loading) {\n return (\n <Layout>\n <div className=\"container mx-auto p-4\">\n <div className=\"max-w-md mx-auto bg-white rounded-lg shadow-md p-6\">\n <div className=\"text-center\">\n <div className=\"animate-spin rounded-full h-12 w-12 border-b-2 border-green-600 mx-auto\"></div>\n <p className=\"mt-4 text-gray-600\">Processing your payment...</p>\n </div>\n </div>\n </div>\n </Layout>\n );\n }\n\n if (error) {\n return (\n <Layout>\n <div className=\"container mx-auto p-4\">\n <div className=\"max-w-md mx-auto bg-white rounded-lg shadow-md p-6\">\n <div className=\"text-center\">\n <div className=\"text-red-600 text-4xl mb-4\">⚠️</div>\n <h2 className=\"text-xl font-semibold text-gray-900 mb-2\">Payment Processing Error</h2>\n <p className=\"text-red-600 mb-4\">{error}</p>\n <div className=\"space-y-2\">\n <button\n onClick={() => window.location.reload()}\n className=\"w-full bg-blue-600 hover:bg-blue-700 text-white font-medium py-2 px-4 rounded-md transition-colors\"\n >\n Try Again\n </button>\n <button\n onClick={() => window.location.href = '/'}\n className=\"w-full bg-gray-500 hover:bg-gray-600 text-white font-medium py-2 px-4 rounded-md transition-colors\"\n >\n Go Home\n </button>\n </div>\n </div>\n </div>\n </div>\n </Layout>\n );\n }\n\n return (\n <Layout>\n <div className=\"container mx-auto p-4\">\n <PaymentSuccessView details={paymentDetails} />\n </div>\n </Layout>\n );\n};\n\nexport default PaymentSuccessPage;\n\n","import { useEffect, useState } from 'react';\nimport { getApiBaseUrl, getHeaders } from '../../api/config';\nimport type { PaymentParams } from './usePaymentParams';\n\ninterface CancelHookResult {\n loading: boolean;\n error: string | null;\n}\n\nexport const useProcessPaymentCancel = (params: PaymentParams): CancelHookResult => {\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n const run = async () => {\n try {\n const qs = new URLSearchParams({\n ...(params.gateway ? { gateway: params.gateway } : {}),\n ...(params.sessionId ? { session_id: params.sessionId } : {}),\n ...(params.paymentId ? { payment_id: params.paymentId } : {}),\n ...(params.reason ? { reason: params.reason } : {}),\n }).toString();\n\n const url = `${getApiBaseUrl()}/api/payments/cancel?${qs}`;\n await fetch(url, {\n headers: getHeaders(),\n credentials: 'include',\n });\n } catch (err: any) {\n setError(err?.message || 'Failed to process cancellation');\n } finally {\n setLoading(false);\n }\n };\n\n run();\n // run once on mount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return { loading, error };\n};\n","import React from 'react';\nimport { Layout } from '../components/common/Layout';\nimport { usePaymentParams } from '../hooks/payments/usePaymentParams';\nimport { useProcessPaymentCancel } from '../hooks/payments/useProcessPaymentCancel';\nimport PaymentCancelView from '../components/payments/PaymentCancelView';\n\nconst PaymentCancelPage: React.FC = () => {\n const details = usePaymentParams();\n const { loading } = useProcessPaymentCancel(details);\n\n if (loading) {\n return (\n <Layout>\n <div className=\"container mx-auto p-4\">\n <div className=\"max-w-md mx-auto bg-white rounded-lg shadow-md p-6\">\n <div className=\"text-center\">\n <div className=\"animate-spin rounded-full h-12 w-12 border-b-2 border-orange-600 mx-auto\"></div>\n <p className=\"mt-4 text-gray-600\">Processing cancellation...</p>\n </div>\n </div>\n </div>\n </Layout>\n );\n }\n\n return (\n <Layout>\n <div className=\"container mx-auto p-4\">\n <PaymentCancelView details={details} />\n </div>\n </Layout>\n );\n};\n\nexport default PaymentCancelPage;\n","import { BrowserRouter as Router, Routes, Route, Navigate } from 'react-router-dom';\nimport { DashboardPage } from './pages/DashboardPage';\nimport PaymentSuccessPage from './pages/PaymentSuccessPage';\nimport PaymentCancelPage from './pages/PaymentCancelPage';\n\nexport interface AppProps {\n externalId: string;\n}\n<style>\n {`\n :root {\n --primary-light: #3f51b5;\n --primary-dark: #3f51b5;\n }\n `}\n </style>\nexport const App = function App({ externalId }: AppProps) {\n return (\n <Router>\n <Routes>\n <Route path=\"/\" element={<Navigate to=\"/dashboard\" replace />} />\n <Route path=\"/dashboard\" element={<DashboardPage externalId={externalId} />} />\n <Route path=\"/payment-success\" element={<PaymentSuccessPage />} />\n <Route path=\"/payment-cancel\" element={<PaymentCancelPage />} />\n </Routes>\n </Router>\n );\n}\n"]}