@nozle-js/react 0.9.0 → 0.10.0

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/provider.tsx","../src/hooks/use-plans.ts","../src/components/billing/checkout-navigation.ts","../src/hooks/use-checkout.ts","../src/components/billing/razorpay-checkout.ts","../src/components/billing/CheckoutButton.tsx","../src/components/pricing/PricingTable.tsx","../src/components/pricing/PlanCard.tsx","../src/components/pricing/PlanComparison.tsx","../src/components/billing/Checkout.tsx","../src/components/billing/UpgradeModal.tsx","../src/components/billing/UpgradeButton.tsx","../src/components/gates/FeatureGate.tsx","../src/components/gates/UsageGate.tsx","../src/components/gates/PlanGate.tsx","../src/components/gates/UpgradePrompt.tsx","../src/components/gates/LockedOverlay.tsx","../src/components/usage/UsageMeter.tsx","../src/components/usage/UsageDashboard.tsx","../src/components/usage/UsageAlert.tsx","../src/components/billing/PlanBadge.tsx","../src/components/billing/PaymentMethodDisplay.tsx"],"names":["createContext","useMemo","React","useContext","useState","useEffect","useCallback","useRef","jsxs","Fragment","jsx","useCheckout","useStripe","useElements","PaymentElement","loadStripe","EmbeddedCheckoutProvider","StripeEmbeddedCheckout","Elements"],"mappings":"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","file":"index.cjs","sourcesContent":["'use client';\n\nimport React, {\n createContext,\n useContext,\n useMemo,\n type ReactNode,\n} from 'react';\n\nexport interface CompletedCheckoutResult {\n type: 'completed';\n status: string;\n payment_source?: string;\n subscription_id?: string;\n plan_code?: string;\n invoice_id?: string;\n amount_cents?: number;\n currency?: string;\n}\n\nexport interface ScheduledCheckoutResult {\n type: 'scheduled';\n status: string;\n subscription_id?: string;\n plan_code?: string;\n}\n\nexport interface RazorpayCheckoutResult {\n type: 'razorpay';\n checkout_id: string;\n key_id: string;\n order_id: string;\n amount_cents: number;\n currency: string;\n expires_at?: string;\n invoice_id?: string;\n customer_id?: string;\n recurring?: boolean;\n mandate_max_amount_cents?: number;\n}\n\nexport interface ProcessingCheckoutResult {\n type: 'processing';\n checkout_id: string;\n status: string;\n}\n\nexport interface HostedCheckoutResult {\n type: 'hosted';\n payment_url: string;\n checkout_id?: string;\n}\n\nexport interface RazorpayVerification {\n razorpay_order_id: string;\n razorpay_payment_id: string;\n razorpay_signature: string;\n}\n\nexport interface CheckoutStatus {\n checkout_id: string;\n provider: 'razorpay';\n status:\n | 'processing'\n | 'awaiting_payment'\n | 'succeeded'\n | 'failed'\n | 'expired'\n | 'needs_review';\n fulfillment_status: 'pending' | 'processing' | 'succeeded';\n amount_cents?: number;\n currency?: string;\n invoice_id?: string | null;\n checkout?: CheckoutResult;\n}\n\n/** Call your authenticated merchant backend, which calls Nozle using its secret key. */\nexport type VerifyCheckout = (\n checkoutId: string,\n verification: RazorpayVerification,\n) => Promise<CheckoutStatus>;\nexport type GetCheckoutStatus = (checkoutId: string) => Promise<CheckoutStatus>;\n\nexport type CheckoutResult =\n | {\n type: 'stripe';\n url?: string;\n clientSecret?: string;\n client_secret?: string;\n }\n | RazorpayCheckoutResult\n | ProcessingCheckoutResult\n | HostedCheckoutResult\n | CompletedCheckoutResult\n | ScheduledCheckoutResult\n | { url: string };\n\nexport interface CreateCheckoutInput {\n planCode: string;\n returnUrl: string;\n idempotencyKey?: string;\n registerMandate?: boolean;\n}\n\nexport type CreateCheckout = (\n input: CreateCheckoutInput,\n) => Promise<CheckoutResult>;\n\nexport interface NozleClient {\n publishableKey: string;\n baseUrl: string;\n catalogFetch(path: string, init?: RequestInit): Promise<Response>;\n}\n\nfunction createClient(publishableKey: string, baseUrl: string): NozleClient {\n const base = baseUrl.replace(/\\/+$/, '');\n\n return {\n publishableKey,\n baseUrl: base,\n catalogFetch(path: string, init?: RequestInit): Promise<Response> {\n return fetch(`${base}${path}`, {\n ...init,\n headers: {\n Authorization: `Bearer ${publishableKey}`,\n 'Content-Type': 'application/json',\n ...init?.headers,\n },\n });\n },\n };\n}\n\nexport interface BillingContextValue {\n client: NozleClient;\n createCheckout?: CreateCheckout;\n verifyCheckout?: VerifyCheckout;\n getCheckoutStatus?: GetCheckoutStatus;\n}\n\nexport const BillingContext = createContext<BillingContextValue | null>(null);\n\nexport interface BillingProviderProps {\n publishableKey: string;\n createCheckout?: CreateCheckout;\n verifyCheckout?: VerifyCheckout;\n getCheckoutStatus?: GetCheckoutStatus;\n baseUrl?: string;\n children: ReactNode;\n}\n\nexport function BillingProvider({\n publishableKey,\n createCheckout,\n verifyCheckout,\n getCheckoutStatus,\n baseUrl = 'https://api.nozle.app/engine',\n children,\n}: BillingProviderProps): React.ReactElement {\n if (!publishableKey.startsWith('pk_')) {\n throw new Error(\n 'BillingProvider publishableKey must be a publishable key (pk_)',\n );\n }\n\n const client = useMemo(\n () => createClient(publishableKey, baseUrl),\n [publishableKey, baseUrl],\n );\n const contextValue = useMemo(\n () => ({ client, createCheckout, verifyCheckout, getCheckoutStatus }),\n [client, createCheckout, verifyCheckout, getCheckoutStatus],\n );\n\n return React.createElement(\n BillingContext.Provider,\n { value: contextValue },\n children,\n );\n}\n\nexport function useOptionalBillingContext(): BillingContextValue | null {\n return useContext(BillingContext);\n}\n\nexport function useBillingContext(): BillingContextValue {\n const context = useOptionalBillingContext();\n if (!context) {\n throw new Error('useBillingContext must be used within a BillingProvider');\n }\n return context;\n}\n\nexport function useNozleClient(): NozleClient {\n return useBillingContext().client;\n}\n","import { useEffect, useState } from \"react\";\nimport { useBillingContext } from '../provider.js';\n\nexport interface Plan {\n code: string;\n name: string;\n amount_cents: number;\n amount_currency: string;\n interval: string;\n}\n\nexport function usePlans() {\n const { client } = useBillingContext();\n const [plans, setPlans] = useState<Plan[]>([]);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n let cancelled = false;\n if (!client) {\n setIsLoading(false);\n return;\n }\n\n void client\n .catalogFetch(\"/api/v1/plans\")\n .then(async (response) => {\n if (!response.ok) throw new Error(`HTTP ${response.status}`);\n const data = (await response.json()) as { plans?: Plan[] };\n if (!cancelled) setPlans(data.plans ?? []);\n })\n .finally(() => {\n if (!cancelled) setIsLoading(false);\n });\n\n return () => {\n cancelled = true;\n };\n }, [client]);\n\n return { plans, isLoading };\n}\n","export function navigateToCheckout(\n url: string,\n location: Pick<Location, \"assign\"> = window.location,\n): void {\n location.assign(url);\n}\n","import { useCallback, useState } from 'react';\nimport { navigateToCheckout } from '../components/billing/checkout-navigation.js';\nimport { useBillingContext, type CheckoutResult } from '../provider.js';\n\nexport interface UseCheckoutResult {\n fetchClientSecret: (planCode: string, returnUrl?: string) => Promise<string | null>;\n checkout: CheckoutResult | null;\n isLoading: boolean;\n error: Error | null;\n}\n\nexport function useCheckout(): UseCheckoutResult {\n const { createCheckout } = useBillingContext();\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [checkout, setCheckout] = useState<CheckoutResult | null>(null);\n\n const fetchClientSecret = useCallback(\n async (planCode: string, returnUrl?: string): Promise<string | null> => {\n setIsLoading(true);\n setError(null);\n try {\n if (!createCheckout) {\n throw new Error('BillingProvider createCheckout callback is required for checkout');\n }\n const result = await createCheckout({\n planCode,\n returnUrl: returnUrl ?? window.location.href,\n });\n setCheckout(result);\n\n if ('client_secret' in result || 'clientSecret' in result) {\n const clientSecret = result.client_secret ?? result.clientSecret;\n if (clientSecret) return clientSecret;\n }\n if ('url' in result && result.url) {\n navigateToCheckout(result.url);\n return null;\n }\n if ('type' in result && result.type === 'hosted') {\n navigateToCheckout(result.payment_url);\n return null;\n }\n if ('type' in result && ['completed', 'scheduled', 'razorpay', 'processing'].includes(result.type)) {\n return null;\n }\n throw new Error('Checkout response did not include a supported result type');\n } catch (cause) {\n const checkoutError = cause instanceof Error ? cause : new Error(String(cause));\n setError(checkoutError);\n throw checkoutError;\n } finally {\n setIsLoading(false);\n }\n },\n [createCheckout],\n );\n\n return { fetchClientSecret, checkout, isLoading, error };\n}\n","import type {\n CheckoutResult,\n CheckoutStatus,\n RazorpayCheckoutResult,\n RazorpayVerification,\n VerifyCheckout,\n GetCheckoutStatus,\n} from '../../provider.js';\n\nexport interface RazorpayActions {\n verifyCheckout?: VerifyCheckout;\n getCheckoutStatus?: GetCheckoutStatus;\n onSuccess?: (paymentId: string) => void;\n onProcessing?: (status: CheckoutStatus) => void;\n onDismiss?: () => void;\n onError?: (error: Error) => void;\n}\n\ninterface RazorpayOptions {\n key: string;\n order_id: string;\n amount: number;\n currency: string;\n customer_id?: string;\n recurring?: '1';\n handler: (response: RazorpayVerification) => void;\n modal: { ondismiss: () => void };\n}\ninterface RazorpayInstance {\n open(): void;\n close(): void;\n on(event: string, callback: () => void): void;\n}\ndeclare global {\n interface Window {\n Razorpay?: new (options: RazorpayOptions) => RazorpayInstance;\n }\n}\nlet loadingScript: Promise<void> | undefined;\n\nexport function loadRazorpayScript(): Promise<void> {\n if (typeof window === 'undefined')\n return Promise.reject(new Error('Razorpay checkout requires a browser'));\n if (window.Razorpay) return Promise.resolve();\n if (loadingScript) return loadingScript;\n loadingScript = new Promise<void>((resolve, reject) => {\n const existing = document.querySelector<HTMLScriptElement>(\n 'script[src=\"https://checkout.razorpay.com/v1/checkout.js\"]',\n );\n const script = existing || document.createElement('script');\n const finish = (error?: Error) => {\n clearTimeout(timer);\n script.removeEventListener('load', onLoad);\n script.removeEventListener('error', onError);\n if (error) {\n script.remove();\n reject(error);\n } else {\n resolve();\n }\n };\n const onLoad = () =>\n finish(\n window.Razorpay\n ? undefined\n : new Error('Razorpay checkout did not initialize'),\n );\n const onError = () => finish(new Error('Failed to load Razorpay checkout'));\n const timer = setTimeout(\n () => finish(new Error('Razorpay checkout timed out while loading')),\n 15000,\n );\n script.addEventListener('load', onLoad);\n script.addEventListener('error', onError);\n if (!existing) {\n script.id = 'razorpay-js';\n script.src = 'https://checkout.razorpay.com/v1/checkout.js';\n document.body.appendChild(script);\n }\n }).catch((error) => {\n loadingScript = undefined;\n throw error;\n });\n return loadingScript;\n}\n\nfunction checkStatus(status: CheckoutStatus, id: string): void {\n if (status.checkout_id !== id || status.provider !== 'razorpay')\n throw new Error('Checkout status did not match this checkout');\n if (['failed', 'expired', 'needs_review'].includes(status.status))\n throw new Error(`Checkout ${status.status.replaceAll('_', ' ')}`);\n}\n\nexport async function waitForCheckout(\n id: string,\n actions: RazorpayActions,\n initial?: CheckoutStatus,\n phase: 'prepare' | 'confirm' = 'confirm',\n): Promise<CheckoutStatus> {\n let status = initial;\n if (!status && !actions.getCheckoutStatus)\n throw new Error('BillingProvider getCheckoutStatus callback is required');\n for (let attempt = 0; attempt < 30; attempt++) {\n status = status || (await actions.getCheckoutStatus!(id));\n checkStatus(status, id);\n if (\n (status.status === 'succeeded' &&\n status.fulfillment_status === 'succeeded') ||\n (phase === 'prepare' && status.status === 'awaiting_payment')\n )\n return status;\n actions.onProcessing?.(status);\n if (!actions.getCheckoutStatus) return status;\n if (attempt < 29) {\n await new Promise((resolve) => setTimeout(resolve, 1000));\n status = undefined;\n }\n }\n return status!;\n}\n\nexport async function openRazorpayCheckout(\n result: RazorpayCheckoutResult,\n actions: RazorpayActions,\n): Promise<void> {\n if (!result.checkout_id || !result.key_id || !result.order_id)\n throw new Error(\n 'Razorpay checkout requires server-issued checkout_id, key_id and order_id',\n );\n if (!actions.verifyCheckout)\n throw new Error(\n 'BillingProvider verifyCheckout callback is required for Razorpay checkout',\n );\n await loadRazorpayScript();\n await new Promise<void>((resolve, reject) => {\n let finishing = false;\n const checkout = new window.Razorpay!({\n key: result.key_id,\n order_id: result.order_id,\n amount: result.amount_cents,\n currency: result.currency,\n ...(result.recurring && {\n customer_id: result.customer_id,\n recurring: '1' as const,\n }),\n handler: (response) => {\n if (finishing) return;\n finishing = true;\n void (async () => {\n const verified = await actions.verifyCheckout!(\n result.checkout_id,\n response,\n );\n const status = await waitForCheckout(\n result.checkout_id,\n actions,\n verified,\n );\n if (\n status.status === 'succeeded' &&\n status.fulfillment_status === 'succeeded'\n )\n actions.onSuccess?.(response.razorpay_payment_id);\n else actions.onProcessing?.(status);\n resolve();\n })().catch(reject);\n },\n modal: {\n ondismiss: () => {\n if (!finishing) {\n finishing = true;\n actions.onDismiss?.();\n resolve();\n }\n },\n },\n });\n checkout.on('payment.failed', () => {\n if (finishing) return;\n finishing = true;\n checkout.close();\n reject(new Error('Payment failed. You can retry checkout.'));\n });\n checkout.open();\n });\n}\n\nexport async function resumeCheckout(\n result: Extract<CheckoutResult, { type: 'processing' }>,\n actions: RazorpayActions,\n): Promise<CheckoutResult | undefined> {\n const status = await waitForCheckout(\n result.checkout_id,\n actions,\n undefined,\n 'prepare',\n );\n if (status.status === 'awaiting_payment') return status.checkout;\n if (\n status.status === 'succeeded' &&\n status.fulfillment_status === 'succeeded'\n )\n return {\n type: 'completed',\n status: 'succeeded',\n invoice_id: status.invoice_id || undefined,\n };\n actions.onProcessing?.(status);\n return undefined;\n}\n","'use client';\n\nimport React, { useRef, useState } from 'react';\nimport {\n useBillingContext,\n type CheckoutResult,\n type CompletedCheckoutResult,\n type ScheduledCheckoutResult,\n} from '../../provider.js';\n\nimport {\n openRazorpayCheckout,\n resumeCheckout,\n type RazorpayActions,\n} from './razorpay-checkout.js';\n\nexport interface CheckoutButtonProps extends Omit<\n RazorpayActions,\n 'verifyCheckout' | 'getCheckoutStatus'\n> {\n planCode: string;\n returnUrl?: string;\n label?: string;\n className?: string;\n style?: React.CSSProperties;\n onError?: (error: Error) => void;\n /** @deprecated The server supplies the public Razorpay key in the checkout response. */\n razorpayKeyId?: string;\n registerMandate?: boolean;\n onStripeClientSecret?: (clientSecret: string) => void;\n onSuccess?: (paymentId: string) => void;\n onComplete?: (result: CompletedCheckoutResult) => void;\n onScheduled?: (result: ScheduledCheckoutResult) => void;\n}\n\nexport async function handleCheckoutResult(\n result: CheckoutResult,\n options: Pick<\n CheckoutButtonProps,\n | 'razorpayKeyId'\n | 'onStripeClientSecret'\n | 'onSuccess'\n | 'onComplete'\n | 'onScheduled'\n > &\n RazorpayActions,\n): Promise<void> {\n if ('type' in result && result.type === 'scheduled') {\n options.onScheduled?.(result);\n return;\n }\n if ('type' in result && result.type === 'completed') {\n options.onComplete?.(result);\n return;\n }\n if ('type' in result && result.type === 'razorpay') {\n await openRazorpayCheckout(result, options);\n return;\n }\n if ('type' in result && result.type === 'processing') {\n const next = await resumeCheckout(result, options);\n if (next) await handleCheckoutResult(next, options);\n return;\n }\n if ('type' in result && result.type === 'hosted') {\n window.location.assign(result.payment_url);\n return;\n }\n if ('url' in result && result.url) {\n window.location.assign(result.url);\n return;\n }\n if ('type' in result && result.type === 'stripe') {\n const clientSecret = result.clientSecret ?? result.client_secret;\n if (clientSecret && options.onStripeClientSecret) {\n options.onStripeClientSecret(clientSecret);\n return;\n }\n if (clientSecret)\n throw new Error(\n 'onStripeClientSecret is required for embedded Stripe checkout',\n );\n throw new Error('Stripe checkout did not include a URL or client secret');\n }\n throw new Error('Unknown checkout response format');\n}\n\nexport function CheckoutButton({\n planCode,\n returnUrl,\n label = 'Get Started',\n className,\n style,\n onError,\n razorpayKeyId,\n registerMandate,\n onProcessing,\n onDismiss,\n onStripeClientSecret,\n onSuccess,\n onComplete,\n onScheduled,\n}: CheckoutButtonProps): React.ReactElement {\n const { createCheckout, verifyCheckout, getCheckoutStatus } =\n useBillingContext();\n const attempt = useRef<{ plan: string; key: string } | undefined>(undefined);\n const inFlight = useRef(false);\n const [processing, setProcessing] = useState(false);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n async function handleClick(): Promise<void> {\n if (inFlight.current) return;\n inFlight.current = true;\n setLoading(true);\n setProcessing(false);\n setError(null);\n try {\n if (!createCheckout) {\n throw new Error(\n 'BillingProvider createCheckout callback is required for checkout',\n );\n }\n if (attempt.current?.plan !== planCode)\n attempt.current = { plan: planCode, key: crypto.randomUUID() };\n const result = await createCheckout({\n idempotencyKey: attempt.current.key,\n ...(registerMandate !== undefined && { registerMandate }),\n planCode,\n returnUrl: returnUrl ?? window.location.href,\n });\n await handleCheckoutResult(result, {\n razorpayKeyId,\n verifyCheckout,\n getCheckoutStatus,\n onProcessing: (status) => {\n setProcessing(true);\n onProcessing?.(status);\n },\n onDismiss,\n onStripeClientSecret,\n onSuccess: (id) => {\n setProcessing(false);\n onSuccess?.(id);\n },\n onComplete: (completed) => {\n setProcessing(false);\n onComplete?.(completed);\n },\n onScheduled,\n });\n } catch (cause) {\n const checkoutError =\n cause instanceof Error ? cause : new Error('Checkout failed');\n setError(checkoutError);\n onError?.(checkoutError);\n } finally {\n inFlight.current = false;\n setLoading(false);\n }\n }\n\n return (\n <>\n <button\n type=\"button\"\n onClick={() => void handleClick()}\n disabled={loading}\n className={className}\n style={{\n padding: '0.75rem 1.5rem',\n borderRadius: 'var(--nozle-radius, 0.5rem)',\n border: 'none',\n background: 'var(--nozle-primary, var(--primary))',\n color: 'var(--nozle-primary-foreground, var(--primary-foreground))',\n cursor: loading ? 'not-allowed' : 'pointer',\n fontWeight: 500,\n opacity: loading ? 0.7 : 1,\n ...style,\n }}\n aria-busy={loading}\n >\n {loading ? 'Loading...' : label}\n </button>\n {processing && (\n <span role=\"status\">\n Payment is processing. Confirmation may take a little while.\n </span>\n )}\n {error && <span role=\"alert\">{error.message}</span>}\n </>\n );\n}\n","'use client';\n\nimport React, { useState, useEffect, type CSSProperties } from 'react';\nimport {\n useOptionalBillingContext,\n type CheckoutResult,\n} from '../../provider.js';\nimport { handleCheckoutResult } from '../billing/CheckoutButton.js';\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface PricingPlan {\n code: string;\n name: string;\n amount_cents: number;\n amount_currency: string;\n interval: string;\n description?: string;\n}\n\nexport interface PricingTableProps {\n currentPlanCode?: string;\n plans?: PricingPlan[];\n features?: string[][];\n onSelect?: (plan: PricingPlan) => void;\n returnUrl?: string;\n onStripeClientSecret?: (clientSecret: string) => void;\n onCheckoutResult?: (result: CheckoutResult) => void;\n onCheckoutError?: (error: Error) => void;\n showToggle?: boolean;\n highlightPlan?: string;\n className?: string;\n enterpriseEmail?: string;\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nconst SYMBOLS: Record<string, string> = { USD: '$', EUR: '€', GBP: '£', JPY: '¥' };\n\nfunction fmtPrice(cents: number, cur: string): string {\n const s = SYMBOLS[cur] ?? cur + ' ';\n const val = cents % 100 === 0 ? String(cents / 100) : (cents / 100).toFixed(2);\n return `${s}${val}`;\n}\n\nfunction isEnterprise(p: PricingPlan): boolean {\n return /enterprise|custom/i.test(p.name + p.code);\n}\n\nfunction v(name: string, fb: string): string {\n return `var(${name}, ${fb})`;\n}\n\n// ─── CSS variable shortcuts ──────────────────────────────────────────────────\n\nconst C = {\n bg: v('--nozle-pricing-bg', v('--nozle-background', '#ffffff')),\n cardBg: v('--nozle-pricing-card-bg', v('--nozle-card', '#ffffff')),\n hl: v('--nozle-pricing-highlight', v('--nozle-primary', '#6366f1')),\n border: v('--nozle-pricing-border', v('--nozle-border', '#e5e7eb')),\n radius: v('--nozle-pricing-radius', v('--nozle-radius', '12px')),\n text: v('--nozle-foreground', '#111827'),\n muted: v('--nozle-muted-foreground', '#6b7280'),\n mutedBg: v('--nozle-muted', '#f3f4f6'),\n hlFg: v('--nozle-primary-foreground', '#ffffff'),\n};\n\n// ─── Check icon ──────────────────────────────────────────────────────────────\n\nfunction Check(): React.ReactElement {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" style={{ flexShrink: 0 }}>\n <path d=\"M3.5 8.5L6.5 11.5L12.5 4.5\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n\n// ─── Toggle ──────────────────────────────────────────────────────────────────\n\nfunction Toggle({ isAnnual, onChange }: { isAnnual: boolean; onChange: (v: boolean) => void }) {\n const pill: CSSProperties = {\n display: 'inline-flex',\n borderRadius: '9999px',\n padding: '4px',\n background: C.mutedBg,\n gap: '2px',\n };\n const tab = (active: boolean): CSSProperties => ({\n padding: '8px 20px',\n borderRadius: '9999px',\n border: 'none',\n background: active ? C.cardBg : 'transparent',\n color: active ? C.text : C.muted,\n fontWeight: active ? 600 : 400,\n fontSize: '0.875rem',\n cursor: 'pointer',\n boxShadow: active ? '0 1px 3px rgba(0,0,0,0.08)' : 'none',\n transition: 'all 0.15s ease',\n });\n\n return (\n <div style={{ display: 'flex', justifyContent: 'center', marginBottom: '2.5rem' }}>\n <div style={pill}>\n <button onClick={() => onChange(false)} style={tab(!isAnnual)} aria-pressed={!isAnnual}>\n Monthly\n </button>\n <button onClick={() => onChange(true)} style={tab(isAnnual)} aria-pressed={isAnnual}>\n Annual\n <span style={{\n marginLeft: '6px',\n fontSize: '0.7rem',\n fontWeight: 600,\n color: isAnnual ? C.hl : C.muted,\n }}>\n Save 20%\n </span>\n </button>\n </div>\n </div>\n );\n}\n\n// ─── Card ────────────────────────────────────────────────────────────────────\n\ninterface CardProps {\n plan: PricingPlan;\n features?: string[];\n isCurrent: boolean;\n isHighlighted: boolean;\n isEnt: boolean;\n enterpriseEmail?: string;\n onSelect?: () => void;\n}\n\nfunction Card({\n plan,\n features,\n isCurrent,\n isHighlighted,\n isEnt,\n enterpriseEmail,\n onSelect,\n}: CardProps): React.ReactElement {\n const [hover, setHover] = useState(false);\n\n const shadow = isHighlighted\n ? '0 8px 28px rgba(99,102,241,0.12), 0 2px 8px rgba(99,102,241,0.06)'\n : hover\n ? '0 8px 24px rgba(0,0,0,0.06), 0 2px 8px rgba(0,0,0,0.03)'\n : '0 1px 3px rgba(0,0,0,0.04), 0 1px 2px rgba(0,0,0,0.03)';\n\n const interval = plan.interval === 'yearly' ? '/year' : '/month';\n\n const handleClick = () => {\n if (isCurrent) return;\n if (isEnt && enterpriseEmail) {\n window.location.href = `mailto:${enterpriseEmail}?subject=Enterprise Plan Inquiry`;\n return;\n }\n onSelect?.();\n };\n\n return (\n <div\n onMouseEnter={() => setHover(true)}\n onMouseLeave={() => setHover(false)}\n style={{\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n background: C.cardBg,\n border: `1px solid ${isHighlighted ? C.hl : C.border}`,\n borderTopWidth: isHighlighted ? '3px' : '1px',\n borderRadius: C.radius,\n padding: '2rem',\n transition: 'box-shadow 0.2s ease, transform 0.2s ease',\n boxShadow: shadow,\n transform: hover && !isCurrent ? 'translateY(-2px)' : 'none',\n }}\n >\n {/* Badge */}\n {isHighlighted && (\n <div style={{\n position: 'absolute',\n top: '-1px',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n background: C.hl,\n color: C.hlFg,\n fontSize: '0.7rem',\n fontWeight: 700,\n padding: '4px 12px',\n borderRadius: '9999px',\n letterSpacing: '0.025em',\n textTransform: 'uppercase',\n whiteSpace: 'nowrap',\n }}>\n {isCurrent ? 'Current Plan' : 'Most Popular'}\n </div>\n )}\n {isCurrent && !isHighlighted && (\n <div style={{\n position: 'absolute',\n top: '0',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n background: C.mutedBg,\n color: C.muted,\n fontSize: '0.7rem',\n fontWeight: 700,\n padding: '4px 12px',\n borderRadius: '9999px',\n letterSpacing: '0.025em',\n textTransform: 'uppercase',\n whiteSpace: 'nowrap',\n }}>\n Current Plan\n </div>\n )}\n\n {/* Plan name + description */}\n <div style={{ marginBottom: '1.25rem', marginTop: isHighlighted || isCurrent ? '0.5rem' : 0 }}>\n <h3 style={{\n fontSize: '1.25rem',\n fontWeight: 700,\n color: C.text,\n margin: 0,\n lineHeight: 1.3,\n }}>\n {plan.name}\n </h3>\n {plan.description && (\n <p style={{\n fontSize: '0.875rem',\n color: C.muted,\n margin: '6px 0 0',\n lineHeight: 1.5,\n }}>\n {plan.description}\n </p>\n )}\n </div>\n\n {/* Price */}\n <div style={{ marginBottom: '1.5rem' }}>\n {isEnt ? (\n <span style={{ fontSize: '2.25rem', fontWeight: 700, color: C.text, lineHeight: 1 }}>\n Custom\n </span>\n ) : (\n <div style={{ display: 'flex', alignItems: 'baseline', gap: '2px' }}>\n <span style={{ fontSize: '2.75rem', fontWeight: 700, color: C.text, lineHeight: 1, letterSpacing: '-0.025em' }}>\n {fmtPrice(plan.amount_cents, plan.amount_currency)}\n </span>\n <span style={{ fontSize: '0.9375rem', color: C.muted, marginLeft: '4px' }}>\n {interval}\n </span>\n </div>\n )}\n </div>\n\n {/* Features */}\n {features && features.length > 0 && (\n <ul style={{\n listStyle: 'none',\n padding: 0,\n margin: '0 0 2rem',\n display: 'flex',\n flexDirection: 'column',\n gap: '0.75rem',\n flex: 1,\n }}>\n {features.map((feat) => (\n <li key={feat} style={{\n display: 'flex',\n alignItems: 'flex-start',\n gap: '10px',\n fontSize: '0.875rem',\n color: C.text,\n lineHeight: 1.5,\n }}>\n <span style={{ color: C.hl, marginTop: '2px' }}><Check /></span>\n <span>{feat}</span>\n </li>\n ))}\n </ul>\n )}\n\n {/* Spacer if no features */}\n {(!features || features.length === 0) && <div style={{ flex: 1 }} />}\n\n {/* CTA */}\n {onSelect && (\n <CTAButton\n onClick={handleClick}\n disabled={isCurrent}\n variant={isCurrent ? 'current' : isEnt ? 'outline' : isHighlighted ? 'primary' : 'secondary'}\n >\n {isCurrent ? 'Current Plan' : isEnt ? 'Contact Sales' : `Get ${plan.name}`}\n </CTAButton>\n )}\n </div>\n );\n}\n\n// ─── CTA Button ──────────────────────────────────────────────────────────────\n\ntype ButtonVariant = 'primary' | 'secondary' | 'outline' | 'current';\n\nfunction CTAButton({\n children,\n onClick,\n disabled,\n variant,\n}: {\n children: React.ReactNode;\n onClick: () => void;\n disabled?: boolean;\n variant: ButtonVariant;\n}) {\n const [hover, setHover] = useState(false);\n\n const base: CSSProperties = {\n width: '100%',\n padding: '12px 24px',\n borderRadius: '10px',\n fontSize: '0.9375rem',\n fontWeight: 600,\n cursor: disabled ? 'default' : 'pointer',\n border: 'none',\n transition: 'all 0.15s ease',\n lineHeight: 1.4,\n };\n\n const variants: Record<ButtonVariant, CSSProperties> = {\n primary: {\n background: hover && !disabled ? '#4f46e5' : C.hl,\n color: C.hlFg,\n },\n secondary: {\n background: hover && !disabled ? '#f0f0f3' : C.mutedBg,\n color: C.text,\n border: `1px solid ${C.border}`,\n },\n outline: {\n background: hover && !disabled ? 'rgba(99,102,241,0.04)' : 'transparent',\n color: C.hl,\n border: `1.5px solid ${C.hl}`,\n },\n current: {\n background: C.mutedBg,\n color: C.muted,\n },\n };\n\n return (\n <button\n onClick={disabled ? undefined : onClick}\n disabled={disabled}\n onMouseEnter={() => setHover(true)}\n onMouseLeave={() => setHover(false)}\n style={{ ...base, ...variants[variant] }}\n >\n {children}\n </button>\n );\n}\n\n// ─── Loading skeleton ────────────────────────────────────────────────────────\n\nfunction Skeleton(): React.ReactElement {\n return (\n <div style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fit, minmax(220px, 1fr))',\n gap: '1.5rem',\n }}>\n {[0, 1, 2].map((i) => (\n <div key={i} style={{\n background: C.cardBg,\n border: `1px solid ${C.border}`,\n borderRadius: C.radius,\n padding: '2rem',\n height: '380px',\n }}>\n <div style={{ height: 20, width: '40%', borderRadius: 6, background: '#f0f0f0', marginBottom: 12 }} />\n <div style={{ height: 40, width: '50%', borderRadius: 6, background: '#f0f0f0', marginBottom: 24 }} />\n <div style={{ height: 14, width: '80%', borderRadius: 6, background: '#f0f0f0', marginBottom: 10 }} />\n <div style={{ height: 14, width: '70%', borderRadius: 6, background: '#f0f0f0', marginBottom: 10 }} />\n <div style={{ height: 14, width: '60%', borderRadius: 6, background: '#f0f0f0' }} />\n </div>\n ))}\n </div>\n );\n}\n\n// ─── Main Component ──────────────────────────────────────────────────────────\n\nexport function PricingTable({\n currentPlanCode,\n plans: propPlans,\n features,\n onSelect,\n returnUrl,\n onStripeClientSecret,\n onCheckoutResult,\n onCheckoutError,\n showToggle = true,\n highlightPlan,\n className,\n enterpriseEmail,\n}: PricingTableProps): React.ReactElement {\n const billing = useOptionalBillingContext();\n const client = billing?.client;\n const [plans, setPlans] = useState<PricingPlan[]>(propPlans ?? []);\n const [currentPlan, setCurrentPlan] = useState<string | null>(currentPlanCode ?? null);\n const [isAnnual, setIsAnnual] = useState(false);\n const [loading, setLoading] = useState(!propPlans);\n const [processing, setProcessing] = useState(false);\n const [checkoutError, setCheckoutError] = useState<string | null>(null);\n\n useEffect(() => {\n if (propPlans) { setPlans(propPlans); return; }\n if (!client) {\n setLoading(false);\n setCheckoutError('BillingProvider with a publishableKey is required to load plans');\n return;\n }\n let cancelled = false;\n client.catalogFetch('/api/v1/plans').then(async (res) => {\n if (!cancelled && res.ok) {\n const data = await res.json();\n setPlans(data.plans || []);\n }\n }).finally(() => { if (!cancelled) setLoading(false); });\n return () => { cancelled = true; };\n }, [client, propPlans]);\n\n useEffect(() => {\n if (currentPlanCode !== undefined) setCurrentPlan(currentPlanCode);\n }, [currentPlanCode]);\n\n async function selectPlan(plan: PricingPlan): Promise<void> {\n setCheckoutError(null);\n if (onSelect) {\n onSelect(plan);\n return;\n }\n try {\n if (!billing?.createCheckout) {\n throw new Error('BillingProvider createCheckout callback is required for checkout');\n }\n const result = await billing.createCheckout({\n planCode: plan.code,\n returnUrl: returnUrl ?? window.location.href,\n });\n onCheckoutResult?.(result);\n await handleCheckoutResult(result, {\n onStripeClientSecret,\n verifyCheckout: billing?.verifyCheckout,\n getCheckoutStatus: billing?.getCheckoutStatus,\n onProcessing: () => setProcessing(true),\n onSuccess: () => setProcessing(false),\n onComplete: () => setProcessing(false),\n });\n } catch (cause) {\n const error = cause instanceof Error ? cause : new Error('Checkout failed');\n setCheckoutError(error.message);\n onCheckoutError?.(error);\n }\n }\n\n const hasAnnual = plans.some(p => p.interval === 'yearly');\n const filtered = showToggle && hasAnnual\n ? plans.filter(p => p.interval === (isAnnual ? 'yearly' : 'monthly') || isEnterprise(p))\n : plans;\n\n if (loading) return <Skeleton />;\n\n return (\n <div className={className} style={{\n fontFamily: \"system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n color: C.text,\n background: C.bg,\n }}>\n {showToggle && hasAnnual && (\n <Toggle isAnnual={isAnnual} onChange={setIsAnnual} />\n )}\n\n {processing && <p role=\"status\">Payment is processing. Confirmation may take a little while.</p>}\n {checkoutError && <p role=\"alert\">{checkoutError}</p>}\n\n <div style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fit, minmax(220px, 1fr))',\n gap: '1.5rem',\n }}>\n {filtered.map((plan, i) => (\n <Card\n key={plan.code}\n plan={plan}\n features={features?.[i]}\n isCurrent={currentPlan === plan.code}\n isHighlighted={highlightPlan === plan.code}\n isEnt={isEnterprise(plan)}\n enterpriseEmail={enterpriseEmail}\n onSelect={() => void selectPlan(plan)}\n />\n ))}\n </div>\n </div>\n );\n}\n","/**\n * PlanCard — Individual pricing plan card component.\n * UI-01: Shows plan name, price, interval, features list, and CTA button.\n * Uses CSS variable theming with --nozle-* namespace.\n */\n\n\"use client\";\nimport React from \"react\";\n\nimport type { ReactNode } from \"react\";\nimport type { CreateCheckoutInput } from \"../../provider.js\";\n\nexport interface Plan {\n id: string;\n name: string;\n monthlyPrice: number;\n annualPrice: number;\n features: string[];\n description?: string;\n}\n\nexport interface PlanCardProps extends Plan {\n isAnnual: boolean;\n isCurrent: boolean;\n returnUrl?: string;\n onSelect?: (input: CreateCheckoutInput) => void;\n children?: ReactNode;\n}\n\n/**\n * PlanCard renders a single pricing plan.\n * Highlighted with aria-current=\"true\" when isCurrent=true.\n */\nexport function PlanCard({\n id,\n name,\n monthlyPrice,\n annualPrice,\n features,\n description,\n isAnnual,\n isCurrent,\n returnUrl,\n onSelect,\n}: PlanCardProps): React.ReactElement {\n const price = isAnnual ? annualPrice : monthlyPrice;\n const interval = isAnnual ? \"year\" : \"month\";\n\n return (\n <div\n data-testid={`plan-card-${id}`}\n aria-current={isCurrent ? \"true\" : undefined}\n style={{\n background: \"var(--nozle-background, var(--background))\",\n border: isCurrent\n ? \"2px solid var(--nozle-primary, var(--primary))\"\n : \"1px solid var(--nozle-border, var(--border))\",\n borderRadius: \"var(--nozle-radius, 0.5rem)\",\n padding: \"1.5rem\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"1rem\",\n }}\n className={isCurrent ? \"border-primary\" : \"\"}\n >\n <div>\n <h3\n style={{\n fontSize: \"1.25rem\",\n fontWeight: 600,\n color: \"var(--nozle-foreground, var(--foreground))\",\n margin: 0,\n }}\n >\n {name}\n </h3>\n {description && (\n <p\n style={{\n color: \"var(--nozle-muted-foreground, var(--muted-foreground))\",\n fontSize: \"0.875rem\",\n margin: \"0.25rem 0 0\",\n }}\n >\n {description}\n </p>\n )}\n </div>\n\n <div>\n <span\n style={{\n fontSize: \"2rem\",\n fontWeight: 700,\n color: \"var(--nozle-foreground, var(--foreground))\",\n }}\n >\n ${price}\n </span>\n <span\n style={{\n color: \"var(--nozle-muted-foreground, var(--muted-foreground))\",\n marginLeft: \"0.25rem\",\n }}\n >\n /{interval}\n </span>\n </div>\n\n <ul\n style={{\n listStyle: \"none\",\n padding: 0,\n margin: 0,\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"0.5rem\",\n flex: 1,\n }}\n >\n {features.map((feature) => (\n <li\n key={feature}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"0.5rem\",\n color: \"var(--nozle-foreground, var(--foreground))\",\n fontSize: \"0.875rem\",\n }}\n >\n <span\n style={{ color: \"var(--nozle-primary, var(--primary))\" }}\n aria-hidden=\"true\"\n >\n ✓\n </span>\n {feature}\n </li>\n ))}\n </ul>\n\n {onSelect && (\n <button\n onClick={() =>\n onSelect?.({\n planCode: id,\n returnUrl: returnUrl ?? window.location.href,\n })\n }\n style={{\n background: isCurrent\n ? \"var(--nozle-muted, var(--muted))\"\n : \"var(--nozle-primary, var(--primary))\",\n color: isCurrent\n ? \"var(--nozle-muted-foreground, var(--muted-foreground))\"\n : \"var(--nozle-primary-foreground, var(--primary-foreground))\",\n border: \"none\",\n borderRadius: \"var(--nozle-radius, 0.5rem)\",\n padding: \"0.75rem 1.5rem\",\n cursor: isCurrent ? \"default\" : \"pointer\",\n fontWeight: 500,\n width: \"100%\",\n }}\n disabled={isCurrent}\n aria-label={isCurrent ? `Current plan: ${name}` : `Select ${name}`}\n >\n {isCurrent ? \"Current Plan\" : \"Get Started\"}\n </button>\n )}\n </div>\n );\n}\n","/**\n * PlanComparison — Side-by-side feature comparison table.\n * UI-01: Renders shadcn-style table with plan names as headers and features as rows.\n * Check/cross icons for boolean values. Uses CSS variable theming.\n */\n\n\"use client\";\nimport React from \"react\";\n\nimport type { Plan } from \"./PlanCard.js\";\n\nexport interface ComparisonFeature {\n key: string;\n label: string;\n values: Record<string, string | boolean>;\n}\n\nexport interface PlanComparisonProps {\n plans: Plan[];\n features: ComparisonFeature[];\n}\n\n/**\n * PlanComparison renders a side-by-side feature comparison table.\n *\n * Usage:\n * ```tsx\n * <PlanComparison\n * plans={plans}\n * features={[\n * { key: 'api_calls', label: 'API Calls', values: { starter: '10K', pro: '100K' } },\n * { key: 'analytics', label: 'Analytics', values: { starter: false, pro: true } },\n * ]}\n * />\n * ```\n */\nexport function PlanComparison({\n plans,\n features,\n}: PlanComparisonProps): React.ReactElement {\n return (\n <div\n style={{\n overflowX: \"auto\",\n background: \"var(--nozle-background, var(--background))\",\n }}\n >\n <table\n style={{\n width: \"100%\",\n borderCollapse: \"collapse\",\n fontSize: \"0.875rem\",\n color: \"var(--nozle-foreground, var(--foreground))\",\n }}\n >\n <thead>\n <tr>\n <th\n style={{\n padding: \"0.75rem 1rem\",\n textAlign: \"left\",\n borderBottom: \"1px solid var(--nozle-border, var(--border))\",\n color:\n \"var(--nozle-muted-foreground, var(--muted-foreground))\",\n fontWeight: 500,\n }}\n >\n Feature\n </th>\n {plans.map((plan) => (\n <th\n key={plan.id}\n style={{\n padding: \"0.75rem 1rem\",\n textAlign: \"center\",\n borderBottom: \"1px solid var(--nozle-border, var(--border))\",\n fontWeight: 600,\n color: \"var(--nozle-foreground, var(--foreground))\",\n }}\n >\n {plan.name}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {features.map((feature) => (\n <tr key={feature.key}>\n <td\n style={{\n padding: \"0.75rem 1rem\",\n borderBottom: \"1px solid var(--nozle-border, var(--border))\",\n color: \"var(--nozle-foreground, var(--foreground))\",\n }}\n >\n {feature.label}\n </td>\n {plans.map((plan) => {\n const value = feature.values[plan.id];\n return (\n <td\n key={plan.id}\n style={{\n padding: \"0.75rem 1rem\",\n textAlign: \"center\",\n borderBottom:\n \"1px solid var(--nozle-border, var(--border))\",\n }}\n >\n {typeof value === \"boolean\" ? (\n value ? (\n <span\n style={{\n color: \"var(--nozle-primary, var(--primary))\",\n }}\n aria-label=\"Included\"\n >\n ✓\n </span>\n ) : (\n <span\n style={{\n color:\n \"var(--nozle-muted-foreground, var(--muted-foreground))\",\n }}\n aria-label=\"Not included\"\n >\n ✕\n </span>\n )\n ) : (\n <span>{value ?? \"—\"}</span>\n )}\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n","'use client';\n\nimport React, { createContext, useContext, useMemo, useState } from 'react';\nimport {\n EmbeddedCheckout as StripeEmbeddedCheckout,\n EmbeddedCheckoutProvider,\n Elements,\n PaymentElement,\n useStripe,\n useElements,\n} from '@stripe/react-stripe-js';\nimport { loadStripe } from '@stripe/stripe-js';\nimport type { Appearance, StripeElementsOptions } from '@stripe/stripe-js';\n\nimport {\n useOptionalBillingContext,\n type CheckoutResult,\n type CheckoutStatus,\n} from '../../provider.js';\nimport { handleCheckoutResult } from './CheckoutButton.js';\n\n// ── Public interfaces ────────────────────────────────────────────────────────\n\nexport interface StripeCheckoutProps {\n /** Stripe PaymentIntent client secret */\n clientSecret: string;\n /** Stripe publishable key */\n publishableKey: string;\n /** Optional Stripe Connect account ID */\n stripeAccount?: string;\n /** Where Stripe should return the buyer after a redirect-required payment. */\n returnUrl?: string;\n /** Custom label for the submit button (default: \"Pay now\") */\n submitLabel?: string;\n /** Called with the paymentIntentId when payment succeeds without redirect */\n onSuccess?: (paymentIntentId: string) => void;\n /** Called when an embedded Checkout Session completes without a redirect. */\n onComplete?: () => void;\n /** Called with the error when payment fails */\n onError?: (error: Error) => void;\n /** Called when the PaymentElement becomes interactive */\n onReady?: () => void;\n /** Additional CSS class for the outer wrapper */\n className?: string;\n /** Inline styles for the outer wrapper */\n style?: React.CSSProperties;\n /** Optional custom controls for the PaymentIntent/PaymentElement branch. */\n children?: React.ReactNode;\n}\n\nexport interface UseCheckoutResult {\n /** Trigger payment confirmation programmatically */\n confirmPayment: () => Promise<void>;\n /** True while a payment confirmation is in-flight */\n isProcessing: boolean;\n /** Last payment error, or null if no error */\n error: Error | null;\n}\n\n// ── Internal context ──────────────────────────────────────────────────────────\n\ninterface CheckoutContextValue {\n confirmPayment: () => Promise<void>;\n isProcessing: boolean;\n error: Error | null;\n}\n\nconst CheckoutContext = createContext<CheckoutContextValue | null>(null);\n\n// ── Public hook ───────────────────────────────────────────────────────────────\n\nexport function useCheckout(): UseCheckoutResult {\n const ctx = useContext(CheckoutContext);\n if (ctx === null) {\n throw new Error('useCheckout must be used inside a <Checkout> component');\n }\n return ctx;\n}\n\n// ── Stripe appearance builder ─────────────────────────────────────────────────\n\nfunction buildStripeAppearance(): Appearance {\n if (typeof document === 'undefined') {\n return { theme: 'stripe' };\n }\n\n const style = getComputedStyle(document.documentElement);\n const get = (prop: string, fallback: string) =>\n style.getPropertyValue(prop).trim() || fallback;\n\n return {\n theme: 'stripe',\n variables: {\n colorPrimary: get('--nozle-primary', '#16a34a'),\n colorBackground: get('--nozle-background', '#f8fafc'),\n colorText: get('--nozle-foreground', '#1e293b'),\n colorDanger: get('--nozle-destructive', '#dc2626'),\n borderRadius: get('--nozle-radius', '0.5rem'),\n fontFamily: 'inherit',\n },\n };\n}\n\n// ── Inner form component ──────────────────────────────────────────────────────\n\ntype CheckoutInnerProps = Pick<\n StripeCheckoutProps,\n | 'submitLabel'\n | 'onSuccess'\n | 'onError'\n | 'onReady'\n | 'className'\n | 'style'\n | 'returnUrl'\n> & { children?: React.ReactNode };\n\nfunction CheckoutInner({\n submitLabel,\n onSuccess,\n onError,\n onReady,\n className,\n style,\n returnUrl,\n children,\n}: CheckoutInnerProps) {\n const stripe = useStripe();\n const elements = useElements();\n\n const [isProcessing, setIsProcessing] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [isReady, setIsReady] = useState(false);\n\n async function confirmPayment(): Promise<void> {\n if (!stripe || !elements) return;\n\n setIsProcessing(true);\n setError(null);\n\n const result = await stripe.confirmPayment({\n elements,\n confirmParams: { return_url: returnUrl ?? window.location.href },\n redirect: 'if_required',\n });\n\n setIsProcessing(false);\n\n if (result.error) {\n const err = new Error(result.error.message ?? 'Payment failed');\n setError(err);\n onError?.(err);\n } else if (result.paymentIntent?.status === 'succeeded') {\n onSuccess?.(result.paymentIntent.id);\n }\n }\n\n return (\n <CheckoutContext.Provider value={{ confirmPayment, isProcessing, error }}>\n <div className={className} style={style}>\n <style>{`@keyframes nozle-skeleton-pulse { 0%{background-position:200% 0} 100%{background-position:-200% 0} }`}</style>\n\n {!isReady && (\n <div\n data-testid=\"checkout-skeleton\"\n style={{\n height: '200px',\n borderRadius: 'var(--nozle-radius, 0.5rem)',\n background:\n 'linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%)',\n backgroundSize: '200% 100%',\n animation: 'nozle-skeleton-pulse 1.5s ease-in-out infinite',\n }}\n />\n )}\n\n <PaymentElement\n onReady={() => {\n setIsReady(true);\n onReady?.();\n }}\n />\n\n {error !== null && (\n <p\n style={{\n color: 'var(--nozle-destructive, #dc2626)',\n margin: '0.5rem 0 0',\n }}\n >\n {error.message}\n </p>\n )}\n\n {children ?? (\n <button\n type=\"button\"\n onClick={() => void confirmPayment()}\n disabled={isProcessing || !stripe}\n aria-busy={isProcessing}\n style={{\n padding: '0.75rem 1.5rem',\n borderRadius: 'var(--nozle-radius, 0.5rem)',\n border: 'none',\n background: 'var(--nozle-primary, var(--primary))',\n color:\n 'var(--nozle-primary-foreground, var(--primary-foreground))',\n cursor: isProcessing ? 'not-allowed' : 'pointer',\n fontWeight: 500,\n opacity: isProcessing ? 0.7 : 1,\n marginTop: '1rem',\n width: '100%',\n }}\n >\n {isProcessing ? 'Processing...' : (submitLabel ?? 'Pay now')}\n </button>\n )}\n </div>\n </CheckoutContext.Provider>\n );\n}\n\n// ── Public Checkout component ─────────────────────────────────────────────────\n\nfunction StripeCheckout({\n clientSecret,\n publishableKey,\n stripeAccount,\n returnUrl,\n submitLabel,\n onSuccess,\n onComplete,\n onError,\n onReady,\n className,\n style,\n children,\n}: StripeCheckoutProps) {\n const stripePromise = useMemo(\n () =>\n loadStripe(publishableKey, stripeAccount ? { stripeAccount } : undefined),\n [publishableKey, stripeAccount],\n );\n\n const appearance = useMemo(() => buildStripeAppearance(), []);\n\n const embeddedOptions = useMemo(\n () => ({ clientSecret, onComplete }),\n [clientSecret, onComplete],\n );\n\n if (clientSecret.startsWith('cs_')) {\n return (\n <div className={className} style={style}>\n <EmbeddedCheckoutProvider\n stripe={stripePromise}\n options={embeddedOptions}\n >\n <StripeEmbeddedCheckout />\n </EmbeddedCheckoutProvider>\n </div>\n );\n }\n\n const options: StripeElementsOptions = { clientSecret, appearance };\n\n return (\n <Elements key={clientSecret} stripe={stripePromise} options={options}>\n <CheckoutInner\n submitLabel={submitLabel}\n onSuccess={onSuccess}\n onError={onError}\n onReady={onReady}\n className={className}\n style={style}\n returnUrl={returnUrl}\n children={children}\n />\n </Elements>\n );\n}\n\nexport interface ProviderCheckoutProps {\n checkout: CheckoutResult;\n submitLabel?: string;\n onSuccess?: (paymentId: string) => void;\n onComplete?: () => void;\n onProcessing?: (status: CheckoutStatus) => void;\n onError?: (error: Error) => void;\n className?: string;\n}\n\nexport type CheckoutProps = StripeCheckoutProps | ProviderCheckoutProps;\n\nfunction ProviderCheckout(props: ProviderCheckoutProps) {\n const billing = useOptionalBillingContext();\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [processing, setProcessing] = useState(false);\n const pay = async () => {\n if (busy) return;\n setBusy(true);\n setError(null);\n try {\n await handleCheckoutResult(props.checkout, {\n verifyCheckout: billing?.verifyCheckout,\n getCheckoutStatus: billing?.getCheckoutStatus,\n onSuccess: (id) => {\n setProcessing(false);\n props.onSuccess?.(id);\n props.onComplete?.();\n },\n onComplete: () => {\n setProcessing(false);\n props.onComplete?.();\n },\n onProcessing: (status) => {\n setProcessing(true);\n props.onProcessing?.(status);\n },\n });\n } catch (cause) {\n const failure =\n cause instanceof Error ? cause : new Error('Checkout failed');\n setError(failure);\n props.onError?.(failure);\n } finally {\n setBusy(false);\n }\n };\n return (\n <CheckoutContext.Provider\n value={{ confirmPayment: pay, isProcessing: busy, error }}\n >\n <div className={props.className}>\n <button\n type=\"button\"\n disabled={busy}\n aria-busy={busy}\n onClick={() => void pay()}\n >\n {busy ? 'Processing…' : props.submitLabel || 'Pay now'}\n </button>\n {processing && (\n <p role=\"status\">\n Payment is processing. Confirmation may take a little while.\n </p>\n )}\n {error && <p role=\"alert\">{error.message}</p>}\n </div>\n </CheckoutContext.Provider>\n );\n}\n\nexport function Checkout(props: CheckoutProps) {\n return 'checkout' in props ? (\n <ProviderCheckout {...props} />\n ) : (\n <StripeCheckout {...props} />\n );\n}\n","'use client';\n\nimport React, { useState } from 'react';\nimport { useBillingContext } from '../../provider.js';\nimport { handleCheckoutResult } from './CheckoutButton.js';\n\nexport interface ProrationPreview {\n credit: number;\n debit: number;\n net: number;\n nextBillingDate: string;\n}\n\nexport interface UpgradeModalProps {\n isOpen: boolean;\n planCode: string;\n returnUrl?: string;\n preview?: ProrationPreview;\n onStripeClientSecret?: (clientSecret: string) => void;\n onCheckoutStarted?: () => void;\n onCompleted?: () => void;\n onScheduled?: () => void;\n onConfirm?: () => void;\n onCancel?: () => void;\n onError?: (error: Error) => void;\n}\n\nexport function UpgradeModal({\n isOpen,\n planCode,\n returnUrl,\n preview,\n onStripeClientSecret,\n onCheckoutStarted,\n onCompleted,\n onScheduled,\n onConfirm,\n onCancel,\n onError,\n}: UpgradeModalProps): React.ReactElement | null {\n const { createCheckout, verifyCheckout, getCheckoutStatus } = useBillingContext();\n const [processing, setProcessing] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [confirming, setConfirming] = useState(false);\n\n async function handleConfirm(): Promise<void> {\n setConfirming(true);\n setError(null);\n try {\n if (!createCheckout) {\n throw new Error('BillingProvider createCheckout callback is required for checkout');\n }\n const result = await createCheckout({\n planCode,\n returnUrl: returnUrl ?? window.location.href,\n });\n await handleCheckoutResult(result, {\n verifyCheckout,\n getCheckoutStatus,\n onSuccess: () => { setProcessing(false); onCompleted?.(); },\n onProcessing: () => setProcessing(true),\n onStripeClientSecret: (clientSecret) => {\n onStripeClientSecret?.(clientSecret);\n onCheckoutStarted?.();\n },\n onComplete: () => { setProcessing(false); onCompleted?.(); },\n onScheduled: () => onScheduled?.(),\n });\n onConfirm?.();\n } catch (cause) {\n const checkoutError = cause instanceof Error ? cause : new Error('Checkout failed');\n setError(checkoutError.message);\n onError?.(checkoutError);\n } finally {\n setConfirming(false);\n }\n }\n\n if (!isOpen) return null;\n\n return (\n <div\n style={{\n position: 'fixed',\n inset: 0,\n background: 'oklch(0 0 0 / 0.5)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 1000,\n }}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Change plan\"\n >\n <div\n style={{\n background: 'var(--nozle-background, var(--background))',\n color: 'var(--nozle-foreground, var(--foreground))',\n border: '1px solid var(--nozle-border, var(--border))',\n borderRadius: 'var(--nozle-radius, 0.5rem)',\n padding: '2rem',\n maxWidth: '28rem',\n width: '100%',\n boxShadow: 'var(--nozle-shadow, 0 4px 6px -1px rgb(0 0 0 / 0.1))',\n }}\n >\n <h2 style={{ fontSize: '1.25rem', fontWeight: 600, margin: '0 0 1rem' }}>\n Confirm plan change\n </h2>\n\n {processing && <p role=\"status\">Payment is processing. Confirmation may take a little while.</p>}\n {error && <p role=\"alert\" style={{ color: 'oklch(0.6 0.2 25)' }}>{error}</p>}\n\n {preview && (\n <div style={{ marginBottom: '1.5rem' }}>\n <div\n style={{\n background: 'var(--nozle-muted, var(--muted))',\n borderRadius: 'var(--nozle-radius, 0.5rem)',\n padding: '1rem',\n display: 'flex',\n flexDirection: 'column',\n gap: '0.5rem',\n }}\n >\n {preview.credit > 0 && <div>Credits applied: -${preview.credit.toFixed(2)}</div>}\n <div>New plan charge: ${preview.debit.toFixed(2)}</div>\n <strong>Due today: ${preview.net.toFixed(2)}</strong>\n </div>\n <p style={{ fontSize: '0.875rem' }}>\n Next billing date: {new Date(preview.nextBillingDate).toLocaleDateString()}.\n </p>\n </div>\n )}\n\n <div style={{ display: 'flex', gap: '0.75rem', justifyContent: 'flex-end' }}>\n <button type=\"button\" onClick={onCancel} disabled={confirming}>Cancel</button>\n <button type=\"button\" onClick={() => void handleConfirm()} disabled={confirming}>\n {confirming ? 'Starting checkout...' : 'Confirm'}\n </button>\n </div>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport React, { useState } from 'react';\nimport { UpgradeModal, type ProrationPreview } from './UpgradeModal.js';\n\nexport interface UpgradeButtonProps {\n planCode: string;\n returnUrl?: string;\n preview?: ProrationPreview;\n label?: string;\n className?: string;\n style?: React.CSSProperties;\n onStripeClientSecret?: (clientSecret: string) => void;\n onCheckoutStarted?: () => void;\n onDowngradeScheduled?: () => void;\n onUpgraded?: () => void;\n onError?: (error: Error) => void;\n}\n\nexport function UpgradeButton({\n planCode,\n returnUrl,\n preview,\n label = 'Upgrade',\n className,\n style,\n onStripeClientSecret,\n onCheckoutStarted,\n onDowngradeScheduled,\n onUpgraded,\n onError,\n}: UpgradeButtonProps): React.ReactElement {\n const [isOpen, setIsOpen] = useState(false);\n\n return (\n <>\n <button\n type=\"button\"\n onClick={() => setIsOpen(true)}\n className={className}\n style={{\n padding: '0.75rem 1.5rem',\n borderRadius: 'var(--nozle-radius, 0.5rem)',\n border: 'none',\n background: 'var(--nozle-primary, var(--primary))',\n color: 'var(--nozle-primary-foreground, var(--primary-foreground))',\n cursor: 'pointer',\n fontWeight: 500,\n ...style,\n }}\n >\n {label}\n </button>\n\n <UpgradeModal\n isOpen={isOpen}\n planCode={planCode}\n returnUrl={returnUrl}\n preview={preview}\n onStripeClientSecret={onStripeClientSecret}\n onCheckoutStarted={() => {\n setIsOpen(false);\n onCheckoutStarted?.();\n }}\n onCompleted={() => {\n setIsOpen(false);\n onUpgraded?.();\n }}\n onScheduled={() => {\n setIsOpen(false);\n onDowngradeScheduled?.();\n }}\n onError={onError}\n onCancel={() => setIsOpen(false)}\n />\n </>\n );\n}\n","/**\n * Presentational entitlement gate. The merchant backend owns entitlement\n * retrieval; callers pass the resulting state into this component.\n */\n\n\"use client\";\n\nimport React, { type ReactNode } from \"react\";\n\nexport interface FeatureGateProps {\n allowed: boolean;\n loading?: boolean;\n fallback?: ReactNode;\n children: ReactNode;\n}\n\nexport function FeatureGate({\n allowed,\n loading = false,\n fallback = null,\n children,\n}: FeatureGateProps): React.ReactElement | null {\n if (loading) return null;\n if (!allowed) return <>{fallback}</>;\n return <>{children}</>;\n}\n","/**\n * UsageGate — Renders children if usage is below limit.\n * UI-03: Renders fallback when usage >= limit.\n * Pure render logic — caller provides usage and limit values.\n */\n\n\"use client\";\n\nimport React, { type ReactNode } from \"react\";\n\nexport interface UsageGateProps {\n /** Current usage value */\n usage: number;\n /** Usage limit */\n limit: number;\n /** Rendered when usage is at or above limit. Defaults to null. */\n fallback?: ReactNode;\n /** Content to show when usage is below limit */\n children: ReactNode;\n}\n\n/**\n * UsageGate renders children only when current usage is below the limit.\n * When usage >= limit, renders fallback.\n *\n * Usage:\n * ```tsx\n * <UsageGate usage={currentUsage} limit={plan.apiCallLimit} fallback={<UpgradePrompt />}>\n * <ApiCallButton />\n * </UsageGate>\n * ```\n */\nexport function UsageGate({\n usage,\n limit,\n fallback = null,\n children,\n}: UsageGateProps): React.ReactElement {\n if (usage >= limit) {\n return <>{fallback}</>;\n }\n\n return <>{children}</>;\n}\n","/**\n * PlanGate — Renders children if customer's plan is in the allowed list.\n * UI-03: Pure render logic — caller provides currentPlan and allowedPlans.\n * Renders fallback when customer is not on an allowed plan tier.\n */\n\n\"use client\";\n\nimport React, { type ReactNode } from \"react\";\n\nexport interface PlanGateProps {\n /** The customer's current plan identifier */\n currentPlan: string;\n /** List of plan identifiers that are allowed to see the children */\n allowedPlans: string[];\n /** Rendered when customer is not on an allowed plan. Defaults to null. */\n fallback?: ReactNode;\n /** Content to show when customer is on an allowed plan */\n children: ReactNode;\n}\n\n/**\n * PlanGate renders children only when the customer's currentPlan is in allowedPlans.\n * When not on an allowed plan, renders fallback.\n *\n * Usage:\n * ```tsx\n * <PlanGate\n * currentPlan={customer.plan}\n * allowedPlans={['pro', 'enterprise']}\n * fallback={<UpgradePrompt planName=\"Pro\" />}\n * >\n * <ProFeature />\n * </PlanGate>\n * ```\n */\nexport function PlanGate({\n currentPlan,\n allowedPlans,\n fallback = null,\n children,\n}: PlanGateProps): React.ReactElement {\n if (!allowedPlans.includes(currentPlan)) {\n return <>{fallback}</>;\n }\n\n return <>{children}</>;\n}\n","/**\n * UpgradePrompt — Reusable upgrade message component.\n * UI-03: Shows plan name + upgrade button; used as default fallback for LockedOverlay.\n * Uses CSS variable theming with --nozle-* namespace.\n */\n\n\"use client\";\n\nimport React from \"react\";\n\nexport interface UpgradePromptProps {\n text?: string;\n planName?: string;\n onUpgrade?: () => void;\n}\n\n/**\n * UpgradePrompt renders an upgrade call-to-action with a message and button.\n * Used as default fallback in LockedOverlay and gate components.\n */\nexport function UpgradePrompt({\n text = \"Upgrade to access this feature\",\n planName,\n onUpgrade,\n}: UpgradePromptProps): React.ReactElement {\n const displayText = planName\n ? `Upgrade to ${planName} to access this feature`\n : text;\n\n function handleUpgrade(): void {\n if (onUpgrade) {\n onUpgrade();\n } else {\n window.location.href = \"/upgrade\";\n }\n }\n\n return (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n gap: \"0.75rem\",\n padding: \"1rem\",\n textAlign: \"center\",\n }}\n >\n <p\n style={{\n color: \"var(--nozle-foreground, var(--foreground))\",\n fontSize: \"0.875rem\",\n margin: 0,\n }}\n >\n {displayText}\n </p>\n <button\n onClick={handleUpgrade}\n style={{\n padding: \"0.5rem 1.25rem\",\n borderRadius: \"var(--nozle-radius, 0.5rem)\",\n border: \"none\",\n background: \"var(--nozle-primary, var(--primary))\",\n color: \"var(--nozle-primary-foreground, var(--primary-foreground))\",\n cursor: \"pointer\",\n fontWeight: 500,\n fontSize: \"0.875rem\",\n }}\n >\n Upgrade\n </button>\n </div>\n );\n}\n","/**\n * LockedOverlay — Wraps children with a blur filter + upgrade CTA overlay when locked.\n * UI-03: Applies CSS blur(4px) to children with an upgrade prompt overlay.\n * Uses CSS variable theming with --nozle-* namespace.\n */\n\n\"use client\";\n\nimport React, { type ReactNode } from \"react\";\nimport { UpgradePrompt } from \"./UpgradePrompt.js\";\n\nexport interface LockedOverlayProps {\n /** Whether to apply the locked blur + overlay state */\n locked: boolean;\n /** Text to show in the upgrade prompt */\n upgradeText?: string;\n /** Plan name to show in the upgrade prompt */\n upgradePlanName?: string;\n /** Called when the upgrade button is clicked */\n onUpgrade?: () => void;\n /** Content to blur when locked */\n children: ReactNode;\n}\n\n/**\n * LockedOverlay wraps children in a relative container.\n * When locked=true:\n * - Children receive CSS blur(4px) and pointer-events: none\n * - An upgrade CTA overlay is positioned on top\n *\n * When locked=false, children render normally without any overlay.\n *\n * Usage:\n * ```tsx\n * <LockedOverlay locked={!canAccessFeature} upgradeText=\"Upgrade to Pro\" onUpgrade={openUpgradeModal}>\n * <FeatureContent />\n * </LockedOverlay>\n * ```\n */\nexport function LockedOverlay({\n locked,\n upgradeText,\n upgradePlanName,\n onUpgrade,\n children,\n}: LockedOverlayProps): React.ReactElement {\n if (!locked) {\n return <>{children}</>;\n }\n\n return (\n <div style={{ position: \"relative\", display: \"inline-block\" }}>\n {/* Blurred content — inaccessible to users */}\n <div\n style={{\n filter: \"blur(4px)\",\n pointerEvents: \"none\",\n userSelect: \"none\",\n }}\n aria-hidden=\"true\"\n >\n {children}\n </div>\n\n {/* Upgrade CTA overlay */}\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n background: \"var(--nozle-background, var(--background))\",\n opacity: 0.92,\n borderRadius: \"var(--nozle-radius, 0.5rem)\",\n }}\n role=\"dialog\"\n aria-label=\"Feature locked — upgrade required\"\n >\n <UpgradePrompt\n text={upgradeText}\n planName={upgradePlanName}\n onUpgrade={onUpgrade}\n />\n </div>\n </div>\n );\n}\n","\"use client\";\n\n/**\n * UsageMeter — embeddable usage progress bar with automatic color thresholds.\n * Uses --nozle-* CSS variables for theming (customer-facing portal layer).\n *\n * Color thresholds:\n * < 80% → primary (normal)\n * 80-94% → warning (amber)\n * ≥ 95% → destructive (red)\n */\n\nexport function getUsageMeterColor(percentage: number): string {\n if (percentage >= 95) return \"var(--nozle-destructive, var(--destructive))\";\n if (percentage >= 80) return \"var(--nozle-warning, var(--warning))\";\n return \"var(--nozle-primary, var(--primary))\";\n}\n\nexport interface UsageMeterProps {\n used: number;\n limit: number;\n label?: string;\n showText?: boolean;\n}\n\nexport function UsageMeter({\n used,\n limit,\n label,\n showText = true,\n}: UsageMeterProps) {\n const percentage = limit > 0 ? Math.min(100, (used / limit) * 100) : 0;\n const color = getUsageMeterColor(percentage);\n\n return (\n <div className=\"w-full space-y-1\">\n {label && (\n <div className=\"flex justify-between text-sm\">\n <span>{label}</span>\n {showText && (\n <span style={{ color }}>\n {used.toLocaleString()} / {limit.toLocaleString()}\n </span>\n )}\n </div>\n )}\n <div\n className=\"h-2 rounded-full overflow-hidden\"\n style={{ background: \"var(--nozle-border, var(--border))\" }}\n >\n <div\n className=\"h-full rounded-full\"\n style={{\n width: `${percentage}%`,\n background: color,\n transition: \"width 0.3s ease\",\n }}\n />\n </div>\n </div>\n );\n}\n","\"use client\";\n\n/**\n * UsageDashboard — renders multiple UsageMeters for all features.\n *\n * Accepts features as props. When loading=true renders skeleton placeholders.\n */\n\nimport { UsageMeter } from \"./UsageMeter.js\";\n\nexport interface UsageDashboardFeature {\n key: string;\n label: string;\n used: number;\n limit: number;\n}\n\nexport interface UsageDashboardProps {\n features?: UsageDashboardFeature[];\n loading?: boolean;\n}\n\nexport function UsageDashboard({\n features = [],\n loading = false,\n}: UsageDashboardProps) {\n if (loading) {\n return (\n <div className=\"animate-pulse space-y-3\">\n {[1, 2, 3].map((i) => (\n <div\n key={i}\n className=\"h-8 rounded\"\n style={{ background: \"var(--nozle-border, var(--border))\" }}\n />\n ))}\n </div>\n );\n }\n\n return (\n <div className=\"space-y-4\">\n {features.map((f) => (\n <UsageMeter key={f.key} used={f.used} limit={f.limit} label={f.label} />\n ))}\n </div>\n );\n}\n","\"use client\";\n\n/**\n * UsageAlert — warning banner shown when any feature usage is >= threshold.\n *\n * Shows dismissible alerts for features approaching their limit.\n * Default threshold: 80% (amber zone entry point).\n */\n\nimport { useState } from \"react\";\n\nexport interface UsageAlertFeature {\n key: string;\n label: string;\n percentage: number;\n}\n\nexport interface UsageAlertProps {\n features: UsageAlertFeature[];\n threshold?: number;\n upgradeHref?: string;\n}\n\nexport function UsageAlert({\n features,\n threshold = 80,\n upgradeHref = \"/plans\",\n}: UsageAlertProps) {\n const [dismissed, setDismissed] = useState<Set<string>>(new Set());\n\n const alertFeatures = features.filter(\n (f) => f.percentage >= threshold && !dismissed.has(f.key),\n );\n\n if (alertFeatures.length === 0) {\n return null;\n }\n\n const handleDismiss = (key: string) => {\n setDismissed((prev) => new Set(prev).add(key));\n };\n\n return (\n <div className=\"space-y-2\">\n {alertFeatures.map((f) => (\n <div\n key={f.key}\n role=\"alert\"\n className=\"flex items-center justify-between rounded-md px-4 py-3 text-sm\"\n style={{\n background: \"var(--nozle-warning-bg, var(--warning-bg, #fef9c3))\",\n color: \"var(--nozle-warning-text, var(--warning-text, #854d0e))\",\n border:\n \"1px solid var(--nozle-warning-border, var(--warning-border, #fde047))\",\n }}\n >\n <span>\n <span\n aria-hidden=\"true\"\n style={{ marginRight: \"0.5rem\", fontSize: \"1rem\" }}\n >\n ⚠\n </span>\n You&apos;re approaching your <strong>{f.label}</strong> limit (\n {Math.round(f.percentage)}%).{\" \"}\n <a\n href={upgradeHref}\n style={{\n color: \"inherit\",\n fontWeight: 600,\n textDecoration: \"underline\",\n }}\n >\n Upgrade\n </a>\n </span>\n <button\n onClick={() => handleDismiss(f.key)}\n aria-label={`Dismiss ${f.label} alert`}\n style={{\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: \"0 0 0 0.75rem\",\n fontSize: \"1rem\",\n color: \"inherit\",\n }}\n >\n ×\n </button>\n </div>\n ))}\n </div>\n );\n}\n","\"use client\";\n\n/**\n * PlanBadge — simple badge displaying plan name with tier-based coloring.\n */\n\nimport type React from \"react\";\n\nexport interface PlanBadgeProps {\n plan: string;\n tier?: \"free\" | \"starter\" | \"pro\" | \"enterprise\";\n}\n\nconst TIER_STYLES: Record<string, React.CSSProperties> = {\n free: {\n background: \"var(--nozle-muted, var(--muted, #f1f5f9))\",\n color: \"var(--nozle-muted-foreground, var(--muted-foreground, #64748b))\",\n border: \"1px solid var(--nozle-border, var(--border, #e2e8f0))\",\n },\n starter: {\n background:\n \"color-mix(in srgb, var(--nozle-primary, var(--primary, #3b82f6)) 10%, transparent)\",\n color: \"var(--nozle-primary, var(--primary, #3b82f6))\",\n border:\n \"1px solid color-mix(in srgb, var(--nozle-primary, var(--primary, #3b82f6)) 30%, transparent)\",\n },\n pro: {\n background: \"var(--nozle-primary, var(--primary, #3b82f6))\",\n color:\n \"var(--nozle-primary-foreground, var(--primary-foreground, #ffffff))\",\n border: \"1px solid transparent\",\n },\n enterprise: {\n background: \"var(--nozle-accent, var(--accent, #8b5cf6))\",\n color: \"var(--nozle-accent-foreground, var(--accent-foreground, #ffffff))\",\n border: \"1px solid transparent\",\n },\n};\n\nexport function PlanBadge({ plan, tier = \"free\" }: PlanBadgeProps) {\n const style = TIER_STYLES[tier] ?? TIER_STYLES.free;\n\n return (\n <span\n style={{\n ...style,\n display: \"inline-flex\",\n alignItems: \"center\",\n padding: \"0.125rem 0.5rem\",\n borderRadius: \"9999px\",\n fontSize: \"0.75rem\",\n fontWeight: 600,\n lineHeight: \"1.25rem\",\n whiteSpace: \"nowrap\",\n }}\n >\n {plan}\n </span>\n );\n}\n","\"use client\";\n\n/**\n * PaymentMethodDisplay — shows saved payment method details.\n * Displays last4, brand, expiry. \"Update Payment Method\" button opens checkout.\n */\n\nexport interface PaymentMethod {\n last4: string;\n brand: string;\n expMonth: number;\n expYear: number;\n}\n\nexport interface PaymentMethodDisplayProps {\n paymentMethod?: PaymentMethod;\n onUpdatePaymentMethod?: () => void;\n updateHref?: string;\n}\n\nconst BRAND_LABELS: Record<string, string> = {\n visa: \"Visa\",\n mastercard: \"Mastercard\",\n amex: \"American Express\",\n discover: \"Discover\",\n jcb: \"JCB\",\n diners: \"Diners Club\",\n unionpay: \"UnionPay\",\n};\n\nexport function PaymentMethodDisplay({\n paymentMethod,\n onUpdatePaymentMethod,\n updateHref = \"/billing/update-payment\",\n}: PaymentMethodDisplayProps) {\n const handleUpdate = () => {\n if (onUpdatePaymentMethod) {\n onUpdatePaymentMethod();\n } else {\n window.location.href = updateHref;\n }\n };\n\n return (\n <div className=\"space-y-3\">\n {paymentMethod ? (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"0.75rem\",\n padding: \"0.75rem 1rem\",\n border: \"1px solid var(--nozle-border, var(--border))\",\n borderRadius: \"0.5rem\",\n fontSize: \"0.875rem\",\n }}\n >\n <span\n style={{\n fontWeight: 600,\n color: \"var(--nozle-foreground, var(--foreground))\",\n }}\n >\n {BRAND_LABELS[paymentMethod.brand.toLowerCase()] ??\n paymentMethod.brand}\n </span>\n <span\n style={{\n color: \"var(--nozle-muted-foreground, var(--muted-foreground))\",\n }}\n >\n •••• {paymentMethod.last4}\n </span>\n <span\n style={{\n color: \"var(--nozle-muted-foreground, var(--muted-foreground))\",\n fontSize: \"0.75rem\",\n }}\n >\n Expires {String(paymentMethod.expMonth).padStart(2, \"0\")}/\n {String(paymentMethod.expYear).slice(-2)}\n </span>\n </div>\n ) : (\n <p\n style={{\n color: \"var(--nozle-muted-foreground, var(--muted-foreground))\",\n fontSize: \"0.875rem\",\n }}\n >\n No payment method on file.\n </p>\n )}\n <button\n onClick={handleUpdate}\n style={{\n background: \"transparent\",\n border: \"1px solid var(--nozle-primary, var(--primary))\",\n color: \"var(--nozle-primary, var(--primary))\",\n padding: \"0.375rem 0.875rem\",\n borderRadius: \"0.375rem\",\n fontSize: \"0.875rem\",\n fontWeight: 500,\n cursor: \"pointer\",\n }}\n >\n Update Payment Method\n </button>\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/portal/client.ts","../src/components/portal/operations.ts","../src/components/portal/styles.ts","../src/components/portal/timezones.ts","../src/core/decimal.ts","../src/components/portal/amounts.ts","../src/components/portal/CancellationControl.tsx","../src/provider.tsx","../src/components/billing/razorpay-checkout.ts","../src/components/billing/checkout-navigation.ts","../src/components/billing/CheckoutButton.tsx","../src/components/billing/Checkout.tsx","../src/components/billing/UpgradeModal.tsx","../src/components/billing/amounts.ts","../src/components/portal/PlanChangeControl.tsx","../src/components/portal/BillingPortal.tsx","../src/hooks/use-plans.ts","../src/hooks/use-checkout.ts","../src/components/pricing/PricingTable.tsx","../src/components/pricing/PlanCard.tsx","../src/components/pricing/PlanComparison.tsx","../src/components/billing/UpgradeButton.tsx","../src/components/gates/FeatureGate.tsx","../src/components/gates/UsageGate.tsx","../src/components/gates/PlanGate.tsx","../src/components/gates/UpgradePrompt.tsx","../src/components/gates/LockedOverlay.tsx","../src/components/usage/UsageMeter.tsx","../src/components/usage/UsageDashboard.tsx","../src/components/usage/UsageAlert.tsx","../src/components/billing/PlanBadge.tsx","../src/components/billing/PaymentMethodDisplay.tsx"],"names":["jsx","useState","useRef","useId","useEffect","jsxs","Fragment","createContext","useMemo","React","useContext","completed","useStripe","useElements","PaymentElement","loadStripe","EmbeddedCheckoutProvider","StripeEmbeddedCheckout","Elements","styles","money","plan","result","useCheckout","useCallback","planName"],"mappings":"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","file":"index.cjs","sourcesContent":["/** A short-lived customer-portal credential issued by the merchant's backend. */\nexport interface BillingPortalSession {\n token: string;\n /** Nozle Core base URL, without /graphql. Defaults to https://api.nozle.app/core. */\n apiUrl?: string;\n}\n\nexport type CreateBillingPortalSession = (options: {\n signal: AbortSignal;\n}) => Promise<BillingPortalSession>;\n\nexport class BillingPortalError extends Error {\n constructor(\n public readonly code: \"session\" | \"unauthorized\" | \"request\" | \"changed\",\n ) {\n super(\n code === \"changed\"\n ? \"Your subscription changed. Review its latest details before confirming again.\"\n : code === \"unauthorized\"\n ? \"Your billing session has expired. Reconnect to continue.\"\n : code === \"session\"\n ? \"Could not start your billing session. Please try again.\"\n : \"Could not complete this billing request. Please try again.\",\n );\n this.name = \"BillingPortalError\";\n }\n}\n\n/** Internal transport: never attaches merchant secret keys, cookies or a customer ID. */\nexport function portalClient(session: BillingPortalSession) {\n let endpoint: URL;\n try {\n endpoint = new URL(\n `${(session.apiUrl ?? \"https://api.nozle.app/core\").replace(/\\/$/, \"\")}/graphql`,\n );\n if (\n endpoint.username ||\n endpoint.password ||\n endpoint.search ||\n endpoint.hash ||\n (endpoint.protocol !== \"https:\" &&\n !(\n endpoint.protocol === \"http:\" &&\n [\"localhost\", \"127.0.0.1\", \"[::1]\"].includes(endpoint.hostname)\n )) ||\n !session.token?.trim() ||\n /^(sk_|pk_)/.test(session.token) ||\n /[\\r\\n]/.test(session.token)\n ) {\n throw new Error();\n }\n } catch {\n throw new BillingPortalError(\"session\");\n }\n\n return {\n async request<T>(\n query: string,\n variables: Record<string, unknown> = {},\n signal?: AbortSignal,\n ): Promise<T> {\n const controller = new AbortController();\n const abort = () => controller.abort();\n if (signal?.aborted) abort();\n signal?.addEventListener(\"abort\", abort, { once: true });\n const timeout = setTimeout(abort, 20000);\n try {\n const response = await fetch(endpoint.href, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"customer-portal-token\": session.token,\n },\n body: JSON.stringify({ query, variables }),\n credentials: \"omit\",\n cache: \"no-store\",\n redirect: \"error\",\n referrerPolicy: \"no-referrer\",\n signal: controller.signal,\n });\n if ([401, 403].includes(response.status))\n throw new BillingPortalError(\"unauthorized\");\n if (!response.ok) throw new BillingPortalError(\"request\");\n const body = await response.json();\n if (body.errors?.length) {\n const unauthorized = body.errors.some(\n (error: { extensions?: { code?: string; status?: string } }) =>\n error.extensions?.code === \"unauthorized\" ||\n error.extensions?.status === \"unauthorized\",\n );\n throw new BillingPortalError(\n unauthorized ? \"unauthorized\" : \"request\",\n );\n }\n if (!body.data || typeof body.data !== \"object\")\n throw new BillingPortalError(\"request\");\n return body.data as T;\n } catch (error) {\n if (signal?.aborted) throw new DOMException(\"Aborted\", \"AbortError\");\n throw error instanceof BillingPortalError\n ? error\n : new BillingPortalError(\"request\");\n } finally {\n clearTimeout(timeout);\n signal?.removeEventListener(\"abort\", abort);\n }\n },\n };\n}\n\nexport type PortalClient = ReturnType<typeof portalClient>;\n\nexport function invoiceDownloadUrl(value: string): string {\n try {\n const url = new URL(value);\n if (url.protocol !== \"https:\" || url.username || url.password)\n throw new Error();\n // Core's Active Storage redirect can point at a private object-store host.\n // Its standard proxy route serves the same signed blob through the public\n // API origin, retaining the signed identifier and any query parameters.\n url.pathname = url.pathname.replace(\n \"/rails/active_storage/blobs/redirect/\",\n \"/rails/active_storage/blobs/proxy/\",\n );\n return url.href;\n } catch {\n throw new BillingPortalError(\"request\");\n }\n}\n","// Customer-scoped operations shared with the hosted portal's GraphQL contract.\n// Source: lago/front/src/components/customerPortal and pages/customerPortal.\nexport type Cents = string | number;\nexport interface Page<T> {\n collection: T[];\n metadata: { currentPage: number; totalPages: number; totalCount?: number };\n}\nexport interface Address {\n addressLine1: string | null;\n addressLine2: string | null;\n city: string | null;\n state: string | null;\n zipcode: string | null;\n country: string | null;\n}\nexport interface Customer extends Address {\n id: string;\n name: string | null;\n firstname: string | null;\n lastname: string | null;\n customerType: \"company\" | \"individual\" | null;\n email: string | null;\n legalName: string | null;\n taxIdentificationNumber: string | null;\n currency: string | null;\n applicableTimezone: string;\n shippingAddress: Address | null;\n}\nexport interface Identity {\n customerPortalUser: Customer;\n customerPortalOrganization: { id: string; name: string };\n}\nexport interface Subscription {\n id: string;\n externalId: string;\n status: string;\n endingAt: string | null;\n nextSubscription: {\n id: string;\n status: string;\n plan: { name: string };\n } | null;\n name: string | null;\n currentBillingPeriodEndingAt: string | null;\n plan: {\n id: string;\n name: string;\n invoiceDisplayName: string | null;\n code: string;\n amountCents: Cents;\n amountCurrency: string;\n interval: string;\n };\n}\nexport interface Usage {\n amountCents: Cents;\n currency: string;\n fromDatetime: string;\n toDatetime: string;\n chargesUsage: {\n id: string;\n units: string | number;\n amountCents: Cents;\n charge: { id: string; invoiceDisplayName: string | null } | null;\n feature: { id: string; code: string; name: string } | null;\n }[];\n}\nexport interface Invoice {\n id: string;\n number: string;\n issuingDate: string;\n totalAmountCents: Cents;\n totalDueAmountCents: Cents;\n currency: string;\n paymentStatus: string;\n paymentOverdue: boolean;\n paymentDisputeLostAt: string | null;\n}\nexport interface Wallet {\n id: string;\n name: string | null;\n currency: string;\n balanceCents: Cents;\n creditsBalance: number;\n consumedCredits: number;\n expirationAt: string | null;\n rateAmount: number;\n paidTopUpMinAmountCents: Cents | null;\n paidTopUpMaxAmountCents: Cents | null;\n}\nexport const identityQuery = `query SdkPortalIdentity {\n customerPortalUser { id name firstname lastname customerType email legalName\n taxIdentificationNumber currency applicableTimezone\n addressLine1 addressLine2 city state zipcode country\n shippingAddress { addressLine1 addressLine2 city state zipcode country }\n }\n customerPortalOrganization { id name }\n}`;\nexport const subscriptionsQuery = `query SdkPortalSubscriptions($page: Int) {\n customerPortalSubscriptions(status: [active], limit: 20, page: $page) {\n metadata { currentPage totalPages }\n collection { id externalId status endingAt name currentBillingPeriodEndingAt\n nextSubscription { id status plan { name } }\n plan { id name invoiceDisplayName code amountCents amountCurrency interval }\n }\n }\n}`;\nexport const subscriptionQuery = `query SdkPortalSubscription($id: ID!) {\n customerPortalSubscription(id: $id) {\n id externalId status endingAt name currentBillingPeriodEndingAt\n nextSubscription { id status plan { name } }\n plan { id name invoiceDisplayName code amountCents amountCurrency interval }\n }\n}`;\nexport const usageQuery = `query SdkPortalUsage($subscriptionId: ID!) {\n customerPortalCustomerUsage(subscriptionId: $subscriptionId) {\n amountCents currency fromDatetime toDatetime\n chargesUsage { id units amountCents charge { id invoiceDisplayName } feature { id code name } }\n }\n}`;\nexport const invoicesQuery = `query SdkPortalInvoices($page: Int, $searchTerm: String) {\n customerPortalInvoices(status: [finalized], limit: 8, page: $page, searchTerm: $searchTerm) {\n metadata { currentPage totalPages totalCount }\n collection { id number issuingDate totalAmountCents totalDueAmountCents currency\n paymentStatus paymentOverdue paymentDisputeLostAt }\n }\n}`;\nexport const walletsQuery = `query SdkPortalWallets($page: Int) {\n customerPortalWallets(status: active, limit: 10, page: $page) {\n metadata { currentPage totalPages }\n collection { id name currency balanceCents creditsBalance consumedCredits expirationAt rateAmount\n paidTopUpMinAmountCents paidTopUpMaxAmountCents }\n }\n}`;\nexport const updateCustomerMutation = `mutation SdkPortalUpdateCustomer($input: UpdateCustomerPortalCustomerInput!) {\n updateCustomerPortalCustomer(input: $input) { id }\n}`;\nexport const downloadInvoiceMutation = `mutation SdkPortalDownloadInvoice($input: DownloadCustomerPortalInvoiceInput!) {\n downloadCustomerPortalInvoice(input: $input) { id fileUrl }\n}`;\nexport const topUpMutation = `mutation SdkPortalTopUp($input: CreateCustomerPortalWalletTransactionInput!) {\n createCustomerPortalWalletTransaction(input: $input) { collection { id } }\n}`;\n","export const portalStyles = `\n.nozle-billing-portal{color:var(--nozle-portal-text,#202922);background:var(--nozle-portal-background,#fff);font:14px/1.55 system-ui,sans-serif;box-sizing:border-box;width:100%;min-width:0;padding:clamp(18px,4vw,40px);border-radius:12px}\n.nozle-billing-portal *{box-sizing:border-box}\n.nozle-billing-portal h2,.nozle-billing-portal h3,.nozle-billing-portal p{margin:0}\n.nozle-billing-portal h2{font-size:24px;letter-spacing:-.6px;line-height:1.3}\n.nozle-billing-portal h3{font-size:16px;line-height:1.4}\n.nozle-billing-portal header{margin-bottom:30px}\n.nozle-billing-portal section{margin-top:28px;padding-top:24px;border-top:1px solid var(--nozle-portal-border,#e6e9e5)}\n.nozle-billing-portal button,.nozle-billing-portal .nzp-link{appearance:none;display:inline-flex;align-items:center;justify-content:center;font:inherit;font-weight:550;line-height:1.4;border:1px solid var(--nozle-portal-border,#dce2d9);border-radius:7px;background:var(--nozle-portal-background,#fff);color:var(--nozle-portal-text,#202922);padding:9px 14px;cursor:pointer;text-decoration:none;white-space:normal}\n.nozle-billing-portal button:hover,.nozle-billing-portal .nzp-link:hover{background:var(--nozle-portal-muted-background,#f4f6f2)}\n.nozle-billing-portal button:disabled{opacity:.55;cursor:wait}\n.nozle-billing-portal :focus-visible{outline:2px solid var(--nozle-portal-accent,#526949);outline-offset:3px}\n.nozle-billing-portal .nzp-primary{background:var(--nozle-portal-accent,#526949);border-color:var(--nozle-portal-accent,#526949);color:#fff}\n.nozle-billing-portal .nzp-primary:hover{filter:brightness(.92);background:var(--nozle-portal-accent,#526949)}\n.nozle-billing-portal .nzp-muted{color:var(--nozle-portal-muted,#687166);font-size:13px}\n.nozle-billing-portal .nzp-row{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap}\n.nozle-billing-portal .nzp-stack{display:grid;gap:12px;margin-top:16px}\n.nozle-billing-portal .nzp-card{border:1px solid var(--nozle-portal-border,#e0e6dc);border-radius:10px;padding:20px;min-width:0}\n.nozle-billing-portal .nzp-price{font-size:26px;letter-spacing:-.5px;margin:12px 0 4px}\n.nozle-billing-portal .nzp-badge{display:inline-block;font-size:11px;font-weight:600;letter-spacing:.3px;border-radius:5px;background:var(--nozle-portal-muted-background,#edf3e8);padding:3px 7px}\n.nozle-billing-portal .nzp-empty{border:1px dashed var(--nozle-portal-border,#dce2d9);border-radius:8px;padding:22px;text-align:center;color:var(--nozle-portal-muted,#687166);margin-top:16px}\n.nozle-billing-portal .nzp-error{color:#922e25;background:#fff4f2;border:1px solid #f2d2ce;border-radius:8px;padding:14px;margin:16px 0;display:flex;gap:12px;align-items:center;flex-wrap:wrap}\n.nozle-billing-portal .nzp-table{overflow-x:auto;margin-top:16px}\n.nozle-billing-portal table{width:100%;border-collapse:collapse;text-align:left;font-size:13px}\n.nozle-billing-portal th{font-weight:500;color:var(--nozle-portal-muted,#687166);background:var(--nozle-portal-muted-background,#f7f8f5)}\n.nozle-billing-portal th,.nozle-billing-portal td{padding:12px 10px;border-bottom:1px solid var(--nozle-portal-border,#e6e9e5);white-space:nowrap}\n.nozle-billing-portal label{display:grid;gap:6px;font-size:13px;font-weight:500;min-width:0}\n.nozle-billing-portal input,.nozle-billing-portal select{width:100%;min-width:0;font:inherit;color:inherit;background:var(--nozle-portal-background,#fff);border:1px solid var(--nozle-portal-border,#dce2d9);border-radius:6px;padding:9px 10px}\n.nozle-billing-portal .nzp-fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:16px;margin:20px 0}\n.nozle-billing-portal .nzp-actions{display:flex;align-items:flex-end;gap:10px;flex-wrap:wrap;margin-top:20px}\n.nozle-billing-portal dl{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,210px),1fr));gap:18px;margin:16px 0 0}\n.nozle-billing-portal dt{font-size:12px;color:var(--nozle-portal-muted,#687166)}\n.nozle-billing-portal dd{margin:3px 0 0;overflow-wrap:anywhere}\n.nozle-billing-portal footer{margin-top:30px;text-align:center;color:var(--nozle-portal-muted,#687166);font-size:12px}\n`;\n","// GraphQL enum mapping from the hosted portal's core/timezone/config.ts.\nexport const portalTimezones: Record<string, string> = {\n TZ_AFRICA_ALGIERS: \"Africa/Algiers\",\n TZ_AFRICA_CAIRO: \"Africa/Cairo\",\n TZ_AFRICA_CASABLANCA: \"Africa/Casablanca\",\n TZ_AFRICA_HARARE: \"Africa/Harare\",\n TZ_AFRICA_JOHANNESBURG: \"Africa/Johannesburg\",\n TZ_AFRICA_MONROVIA: \"Africa/Monrovia\",\n TZ_AFRICA_NAIROBI: \"Africa/Nairobi\",\n TZ_AMERICA_ARGENTINA_BUENOS_AIRES: \"America/Argentina/Buenos_Aires\",\n TZ_AMERICA_BOGOTA: \"America/Bogota\",\n TZ_AMERICA_CARACAS: \"America/Caracas\",\n TZ_AMERICA_CHICAGO: \"America/Chicago\",\n TZ_AMERICA_CHIHUAHUA: \"America/Chihuahua\",\n TZ_AMERICA_DENVER: \"America/Denver\",\n TZ_AMERICA_NUUK: \"America/Nuuk\",\n TZ_AMERICA_GUATEMALA: \"America/Guatemala\",\n TZ_AMERICA_GUYANA: \"America/Guyana\",\n TZ_AMERICA_HALIFAX: \"America/Halifax\",\n TZ_AMERICA_INDIANA_INDIANAPOLIS: \"America/Indiana/Indianapolis\",\n TZ_AMERICA_JUNEAU: \"America/Juneau\",\n TZ_AMERICA_LA_PAZ: \"America/La_Paz\",\n TZ_AMERICA_LIMA: \"America/Lima\",\n TZ_AMERICA_LOS_ANGELES: \"America/Los_Angeles\",\n TZ_AMERICA_MAZATLAN: \"America/Mazatlan\",\n TZ_AMERICA_MEXICO_CITY: \"America/Mexico_City\",\n TZ_AMERICA_MONTERREY: \"America/Monterrey\",\n TZ_AMERICA_MONTEVIDEO: \"America/Montevideo\",\n TZ_AMERICA_NEW_YORK: \"America/New_York\",\n TZ_AMERICA_PHOENIX: \"America/Phoenix\",\n TZ_AMERICA_PUERTO_RICO: \"America/Puerto_Rico\",\n TZ_AMERICA_REGINA: \"America/Regina\",\n TZ_AMERICA_SANTIAGO: \"America/Santiago\",\n TZ_AMERICA_SAO_PAULO: \"America/Sao_Paulo\",\n TZ_AMERICA_ST_JOHNS: \"America/St_Johns\",\n TZ_AMERICA_TIJUANA: \"America/Tijuana\",\n TZ_ASIA_ALMATY: \"Asia/Almaty\",\n TZ_ASIA_BAGHDAD: \"Asia/Baghdad\",\n TZ_ASIA_BAKU: \"Asia/Baku\",\n TZ_ASIA_BANGKOK: \"Asia/Bangkok\",\n TZ_ASIA_CHONGQING: \"Asia/Chongqing\",\n TZ_ASIA_COLOMBO: \"Asia/Colombo\",\n TZ_ASIA_DHAKA: \"Asia/Dhaka\",\n TZ_ASIA_HONG_KONG: \"Asia/Hong_Kong\",\n TZ_ASIA_IRKUTSK: \"Asia/Irkutsk\",\n TZ_ASIA_JAKARTA: \"Asia/Jakarta\",\n TZ_ASIA_JERUSALEM: \"Asia/Jerusalem\",\n TZ_ASIA_KABUL: \"Asia/Kabul\",\n TZ_ASIA_KAMCHATKA: \"Asia/Kamchatka\",\n TZ_ASIA_KARACHI: \"Asia/Karachi\",\n TZ_ASIA_KATHMANDU: \"Asia/Kathmandu\",\n TZ_ASIA_KOLKATA: \"Asia/Kolkata\",\n TZ_ASIA_KRASNOYARSK: \"Asia/Krasnoyarsk\",\n TZ_ASIA_KUALA_LUMPUR: \"Asia/Kuala_Lumpur\",\n TZ_ASIA_KUWAIT: \"Asia/Kuwait\",\n TZ_ASIA_MAGADAN: \"Asia/Magadan\",\n TZ_ASIA_MUSCAT: \"Asia/Muscat\",\n TZ_ASIA_NOVOSIBIRSK: \"Asia/Novosibirsk\",\n TZ_ASIA_YANGON: \"Asia/Yangon\",\n TZ_ASIA_RIYADH: \"Asia/Riyadh\",\n TZ_ASIA_SEOUL: \"Asia/Seoul\",\n TZ_ASIA_SHANGHAI: \"Asia/Shanghai\",\n TZ_ASIA_SINGAPORE: \"Asia/Singapore\",\n TZ_ASIA_SREDNEKOLYMSK: \"Asia/Srednekolymsk\",\n TZ_ASIA_TAIPEI: \"Asia/Taipei\",\n TZ_ASIA_TASHKENT: \"Asia/Tashkent\",\n TZ_ASIA_TBILISI: \"Asia/Tbilisi\",\n TZ_ASIA_TEHRAN: \"Asia/Tehran\",\n TZ_ASIA_TOKYO: \"Asia/Tokyo\",\n TZ_ASIA_ULAANBAATAR: \"Asia/Ulaanbaatar\",\n TZ_ASIA_URUMQI: \"Asia/Urumqi\",\n TZ_ASIA_VLADIVOSTOK: \"Asia/Vladivostok\",\n TZ_ASIA_YAKUTSK: \"Asia/Yakutsk\",\n TZ_ASIA_YEKATERINBURG: \"Asia/Yekaterinburg\",\n TZ_ASIA_YEREVAN: \"Asia/Yerevan\",\n TZ_ATLANTIC_AZORES: \"Atlantic/Azores\",\n TZ_ATLANTIC_CAPE_VERDE: \"Atlantic/Cape_Verde\",\n TZ_ATLANTIC_SOUTH_GEORGIA: \"Atlantic/South_Georgia\",\n TZ_AUSTRALIA_ADELAIDE: \"Australia/Adelaide\",\n TZ_AUSTRALIA_BRISBANE: \"Australia/Brisbane\",\n TZ_AUSTRALIA_CANBERRA: \"Australia/Canberra\",\n TZ_AUSTRALIA_DARWIN: \"Australia/Darwin\",\n TZ_AUSTRALIA_HOBART: \"Australia/Hobart\",\n TZ_AUSTRALIA_MELBOURNE: \"Australia/Melbourne\",\n TZ_AUSTRALIA_PERTH: \"Australia/Perth\",\n TZ_AUSTRALIA_SYDNEY: \"Australia/Sydney\",\n TZ_EUROPE_AMSTERDAM: \"Europe/Amsterdam\",\n TZ_EUROPE_ATHENS: \"Europe/Athens\",\n TZ_EUROPE_BELGRADE: \"Europe/Belgrade\",\n TZ_EUROPE_BERLIN: \"Europe/Berlin\",\n TZ_EUROPE_BRATISLAVA: \"Europe/Bratislava\",\n TZ_EUROPE_BRUSSELS: \"Europe/Brussels\",\n TZ_EUROPE_BUCHAREST: \"Europe/Bucharest\",\n TZ_EUROPE_BUDAPEST: \"Europe/Budapest\",\n TZ_EUROPE_COPENHAGEN: \"Europe/Copenhagen\",\n TZ_EUROPE_DUBLIN: \"Europe/Dublin\",\n TZ_EUROPE_HELSINKI: \"Europe/Helsinki\",\n TZ_EUROPE_ISTANBUL: \"Europe/Istanbul\",\n TZ_EUROPE_KALININGRAD: \"Europe/Kaliningrad\",\n TZ_EUROPE_KYIV: \"Europe/Kyiv\",\n TZ_EUROPE_LISBON: \"Europe/Lisbon\",\n TZ_EUROPE_LJUBLJANA: \"Europe/Ljubljana\",\n TZ_EUROPE_LONDON: \"Europe/London\",\n TZ_EUROPE_MADRID: \"Europe/Madrid\",\n TZ_EUROPE_MINSK: \"Europe/Minsk\",\n TZ_EUROPE_MOSCOW: \"Europe/Moscow\",\n TZ_EUROPE_PARIS: \"Europe/Paris\",\n TZ_EUROPE_PRAGUE: \"Europe/Prague\",\n TZ_EUROPE_RIGA: \"Europe/Riga\",\n TZ_EUROPE_ROME: \"Europe/Rome\",\n TZ_EUROPE_SAMARA: \"Europe/Samara\",\n TZ_EUROPE_SARAJEVO: \"Europe/Sarajevo\",\n TZ_EUROPE_SKOPJE: \"Europe/Skopje\",\n TZ_EUROPE_SOFIA: \"Europe/Sofia\",\n TZ_EUROPE_STOCKHOLM: \"Europe/Stockholm\",\n TZ_EUROPE_TALLINN: \"Europe/Tallinn\",\n TZ_EUROPE_VIENNA: \"Europe/Vienna\",\n TZ_EUROPE_VILNIUS: \"Europe/Vilnius\",\n TZ_EUROPE_VOLGOGRAD: \"Europe/Volgograd\",\n TZ_EUROPE_WARSAW: \"Europe/Warsaw\",\n TZ_EUROPE_ZAGREB: \"Europe/Zagreb\",\n TZ_EUROPE_ZURICH: \"Europe/Zurich\",\n TZ_ETC_GMT_12: \"Etc/GMT+12\",\n TZ_PACIFIC_APIA: \"Pacific/Apia\",\n TZ_PACIFIC_AUCKLAND: \"Pacific/Auckland\",\n TZ_PACIFIC_CHATHAM: \"Pacific/Chatham\",\n TZ_PACIFIC_FAKAOFO: \"Pacific/Fakaofo\",\n TZ_PACIFIC_FIJI: \"Pacific/Fiji\",\n TZ_PACIFIC_GUADALCANAL: \"Pacific/Guadalcanal\",\n TZ_PACIFIC_GUAM: \"Pacific/Guam\",\n TZ_PACIFIC_HONOLULU: \"Pacific/Honolulu\",\n TZ_PACIFIC_MAJURO: \"Pacific/Majuro\",\n TZ_PACIFIC_MIDWAY: \"Pacific/Midway\",\n TZ_PACIFIC_NOUMEA: \"Pacific/Noumea\",\n TZ_PACIFIC_PAGO_PAGO: \"Pacific/Pago_Pago\",\n TZ_PACIFIC_PORT_MORESBY: \"Pacific/Port_Moresby\",\n TZ_PACIFIC_TONGATAPU: \"Pacific/Tongatapu\",\n TZ_UTC: \"UTC\",\n};\n","interface ParsedDecimal {\n sign: 1 | -1;\n integer: string;\n fraction: string;\n}\n\nfunction parseDecimal(value: string): ParsedDecimal | null {\n const match = value.trim().match(/^([+-]?)(\\d+)(?:\\.(\\d+))?$/);\n if (!match) return null;\n const rawInteger = match[2] ?? \"0\";\n let firstIntegerDigit = 0;\n while (\n firstIntegerDigit < rawInteger.length - 1 &&\n rawInteger[firstIntegerDigit] === \"0\"\n ) {\n firstIntegerDigit += 1;\n }\n const integer = rawInteger.slice(firstIntegerDigit);\n const rawFraction = match[3] ?? \"\";\n let fractionEnd = rawFraction.length;\n while (fractionEnd > 0 && rawFraction[fractionEnd - 1] === \"0\") {\n fractionEnd -= 1;\n }\n const fraction = rawFraction.slice(0, fractionEnd);\n const zero = integer === \"0\" && fraction === \"\";\n return {\n sign: !zero && match[1] === \"-\" ? -1 : 1,\n integer,\n fraction,\n };\n}\n\nexport function compareDecimalStrings(left: string, right: string): number {\n const a = parseDecimal(left);\n const b = parseDecimal(right);\n if (!a || !b) throw new Error(\"invalid decimal value\");\n if (a.sign !== b.sign) return a.sign > b.sign ? 1 : -1;\n\n let magnitude = 0;\n if (a.integer.length !== b.integer.length) {\n magnitude = a.integer.length > b.integer.length ? 1 : -1;\n } else if (a.integer !== b.integer) {\n magnitude = a.integer > b.integer ? 1 : -1;\n } else {\n const width = Math.max(a.fraction.length, b.fraction.length);\n const aFraction = a.fraction.padEnd(width, \"0\");\n const bFraction = b.fraction.padEnd(width, \"0\");\n if (aFraction !== bFraction) magnitude = aFraction > bFraction ? 1 : -1;\n }\n return magnitude * a.sign;\n}\n\nexport function formatDecimalString(\n value: string,\n maximumFractionDigits = 12,\n): string {\n const parsed = parseDecimal(value);\n if (!parsed) return value;\n const fractionLimit = Math.max(\n 0,\n Math.min(30, Math.trunc(maximumFractionDigits)),\n );\n const firstGroupLength = parsed.integer.length % 3 || 3;\n const groups = [parsed.integer.slice(0, firstGroupLength)];\n for (\n let index = firstGroupLength;\n index < parsed.integer.length;\n index += 3\n ) {\n groups.push(parsed.integer.slice(index, index + 3));\n }\n const groupedInteger = groups.join(\",\");\n const fraction = parsed.fraction.slice(0, fractionLimit);\n return `${parsed.sign < 0 ? \"-\" : \"\"}${groupedInteger}${fraction ? `.${fraction}` : \"\"}`;\n}\n\nexport function creditUnitLabel(value: string, unitName: string): string {\n return compareDecimalStrings(value, \"1\") === 0 ? unitName : `${unitName}s`;\n}\n","/** Exact decimal multiplication for wallet limit comparisons; the server calculates the final bill. */\nexport function walletAmountCents(\n credits: string,\n rate: number,\n currencyDigits: number,\n): string | null {\n if (\n !/^\\d{1,30}(\\.\\d{1,5})?$/.test(credits) ||\n !Number.isFinite(rate) ||\n rate <= 0\n )\n return null;\n const decimal = (value: string) => {\n const match = /^(\\d+)(?:\\.(\\d+))?(?:e([+-]?\\d+))?$/i.exec(value)!;\n return {\n value: BigInt(match[1] + (match[2] ?? \"\")),\n scale: (match[2]?.length ?? 0) - Number(match[3] ?? 0),\n };\n };\n const left = decimal(credits),\n right = decimal(String(rate));\n const coefficient = left.value * right.value;\n const scale = left.scale + right.scale - currencyDigits;\n if (scale <= 0) return String(coefficient * 10n ** BigInt(-scale));\n const padded = String(coefficient).padStart(scale + 1, \"0\");\n return `${padded.slice(0, -scale)}.${padded.slice(-scale)}`;\n}\n","\"use client\";\n\nimport { useEffect, useId, useRef, useState } from \"react\";\nimport { BillingPortalError } from \"./client.js\";\nimport { portalTimezones } from \"./timezones.js\";\n\nexport type CancellationOperation = \"cancel\" | \"uncancel\";\nexport interface CancellationSubscription {\n /** Core UUID, distinct from the external subscription identifier. */\n id: string;\n externalId: string;\n name: string;\n status: string;\n endingAt: string | null;\n pendingPlanName?: string | null;\n}\nexport interface CancellationPreview {\n operation: CancellationOperation;\n effectiveAt: string;\n renewalAt: string | null;\n}\nexport interface CancellationInput {\n /** External subscription identifier. The merchant authenticates the customer separately. */\n subscriptionId: string;\n operation: CancellationOperation;\n signal: AbortSignal;\n}\nexport interface CancellationApplyInput extends CancellationInput {\n idempotencyKey: string;\n /** Required for cancellation; the server must reject a changed access-end date. */\n expectedEffectiveAt?: string;\n}\nexport interface CancellationActions {\n preview: (input: CancellationInput) => Promise<CancellationPreview>;\n apply: (input: CancellationApplyInput) => Promise<unknown>;\n}\nexport interface CancellationControlProps {\n subscription: CancellationSubscription;\n actions: CancellationActions;\n /** Read persisted state after every attempt, including an ambiguous network failure. */\n refresh: (signal: AbortSignal) => Promise<CancellationSubscription | null>;\n onChanged?: () => void;\n onError?: (error: BillingPortalError) => void;\n locale?: string;\n timezone?: string;\n nonce?: string;\n}\n\nconst styles = `\n.nozle-cancellation{font:inherit;color:var(--nozle-portal-text,#202922)}\n.nozle-cancellation button{font:inherit;padding:9px 14px;border:1px solid var(--nozle-portal-border,#dce2d9);border-radius:7px;background:var(--nozle-portal-background,#fff);color:inherit;cursor:pointer}\n.nozle-cancellation button:disabled{opacity:.55;cursor:wait}\n.nozle-cancellation :focus-visible{outline:2px solid var(--nozle-portal-accent,#526949);outline-offset:3px}\n.nozle-cancellation .nzc-backdrop{position:fixed;inset:0;background:#0006;z-index:1000;display:flex;align-items:center;justify-content:center;padding:20px}\n.nozle-cancellation .nzc-dialog{box-sizing:border-box;background:var(--nozle-portal-background,#fff);border:1px solid var(--nozle-portal-border,#dce2d9);border-radius:12px;padding:24px;width:100%;max-width:440px;max-height:90dvh;overflow:auto;box-shadow:0 12px 48px #0003}\n.nozle-cancellation .nzc-dialog h3{margin:0 0 16px;font-size:20px}\n.nozle-cancellation .nzc-dialog p{margin:12px 0;line-height:1.55}\n.nozle-cancellation .nzc-buttons{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:10px;margin-top:20px}\n.nozle-cancellation [role=alert]{color:#922e25}\n`;\n\nfunction formatDate(value: string, locale: string, timezone: string) {\n const timeZone = timezone.startsWith(\"TZ_\")\n ? (portalTimezones[timezone] ?? \"UTC\")\n : timezone;\n return new Intl.DateTimeFormat(locale, {\n dateStyle: \"long\",\n timeZone,\n }).format(new Date(value));\n}\nfunction completed(\n operation: CancellationOperation,\n state: CancellationSubscription | null,\n) {\n if (!state) return false;\n return operation === \"cancel\"\n ? Boolean(state.endingAt) ||\n [\"terminated\", \"canceled\"].includes(state.status)\n : state.status === \"active\" && !state.endingAt;\n}\n\n/** Customer cancellation UI. All mutations go through the merchant's authenticated callbacks. */\nexport function CancellationControl(props: CancellationControlProps) {\n // A different subscription must never inherit a previous subscription's confirmation or request key.\n return (\n <CancellationFlow\n key={`${props.subscription.id}:${props.subscription.externalId}`}\n {...props}\n />\n );\n}\n\nfunction CancellationFlow({\n subscription,\n actions,\n refresh,\n onChanged,\n onError,\n locale = \"en-US\",\n timezone = \"UTC\",\n nonce,\n}: CancellationControlProps) {\n const [open, setOpen] = useState(false);\n const [busy, setBusy] = useState(false);\n const [preview, setPreview] = useState<CancellationPreview>();\n const [failure, setFailure] = useState<string>();\n const [notice, setNotice] = useState(\"\");\n const [observed, setObserved] = useState<CancellationSubscription | null>(\n subscription,\n );\n const request = useRef<\n | {\n operation: CancellationOperation;\n idempotencyKey: string;\n expectedEffectiveAt?: string;\n attempted: boolean;\n accepted: boolean;\n }\n | undefined\n >(undefined);\n const inFlight = useRef<AbortController | null>(null);\n const trigger = useRef<HTMLButtonElement>(null);\n const dialog = useRef<HTMLDivElement>(null);\n const titleId = useId();\n const descriptionId = useId();\n const active = observed?.status === \"active\";\n const ending = observed?.endingAt;\n const expired = Boolean(ending && Date.parse(ending) <= Date.now());\n const operation: CancellationOperation = ending ? \"uncancel\" : \"cancel\";\n\n useEffect(\n () => setObserved(subscription),\n [\n subscription.id,\n subscription.externalId,\n subscription.status,\n subscription.endingAt,\n subscription.name,\n subscription.pendingPlanName,\n ],\n );\n useEffect(() => () => inFlight.current?.abort(), []);\n useEffect(() => {\n if (!open) return;\n dialog.current?.focus();\n return () => trigger.current?.focus();\n }, [open]);\n\n function report(cause: unknown, message: string) {\n const error =\n cause instanceof BillingPortalError\n ? cause\n : new BillingPortalError(\"request\");\n setFailure(error.code === \"unauthorized\" ? error.message : message);\n onError?.(error);\n }\n async function run(task: (signal: AbortSignal) => Promise<void>) {\n if (inFlight.current) return;\n const controller = new AbortController();\n inFlight.current = controller;\n setBusy(true);\n let timedOut = false;\n let rejectAborted: () => void = () => {};\n const aborted = new Promise<never>((_resolve, reject) => {\n rejectAborted = () => reject(new DOMException(\"Aborted\", \"AbortError\"));\n controller.signal.addEventListener(\"abort\", rejectAborted, {\n once: true,\n });\n });\n const timeout = setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, 30_000);\n try {\n await Promise.race([task(controller.signal), aborted]);\n } catch (cause) {\n if (timedOut)\n report(\n cause,\n \"This request timed out. Check its status before trying again.\",\n );\n } finally {\n clearTimeout(timeout);\n controller.signal.removeEventListener(\"abort\", rejectAborted);\n if (!controller.signal.aborted || timedOut) setBusy(false);\n if (inFlight.current === controller) inFlight.current = null;\n }\n }\n function finish(\n state: CancellationSubscription | null,\n op: CancellationOperation,\n ) {\n setObserved(state);\n request.current = undefined;\n setOpen(false);\n setPreview(undefined);\n setFailure(undefined);\n setNotice(\n op === \"cancel\"\n ? \"Cancellation scheduled.\"\n : \"Your subscription will continue to renew.\",\n );\n onChanged?.();\n }\n async function loadPreview() {\n setOpen(true);\n setFailure(undefined);\n if (request.current) return; // Reopening an uncertain request must preserve its confirmation/key.\n setPreview(undefined);\n await run(async (signal) => {\n try {\n const state = await refresh(signal);\n if (signal.aborted) return;\n setObserved(state);\n if (\n !state ||\n state.status !== \"active\" ||\n Boolean(state.endingAt) !== Boolean(ending)\n ) {\n setFailure(\n \"Your subscription changed. Close this dialog and refresh your billing details.\",\n );\n return;\n }\n const result = await actions.preview({\n subscriptionId: subscription.externalId,\n operation,\n signal,\n });\n if (signal.aborted) return;\n if (\n result.operation !== operation ||\n !Number.isFinite(Date.parse(result.effectiveAt)) ||\n (result.renewalAt !== null &&\n !Number.isFinite(Date.parse(result.renewalAt)))\n )\n throw new Error();\n setPreview(result);\n } catch (cause) {\n if (!signal.aborted)\n report(cause, \"Could not load this change. Please try again.\");\n }\n });\n }\n async function confirm() {\n if (!preview || inFlight.current) return;\n if (!request.current) {\n request.current = {\n operation: preview.operation,\n idempotencyKey: crypto.randomUUID(),\n ...(preview.operation === \"cancel\"\n ? { expectedEffectiveAt: preview.effectiveAt }\n : {}),\n attempted: false,\n accepted: false,\n };\n }\n setFailure(undefined);\n await run(async (signal) => {\n const current = request.current!;\n let cause: unknown;\n try {\n // Check state before a retry. Reuse the same key if the first response was lost.\n if (current.attempted) {\n const state = await refresh(signal);\n if (signal.aborted) return;\n if (completed(current.operation, state)) {\n finish(state, current.operation);\n return;\n }\n }\n if (!current.accepted) {\n current.attempted = true;\n await actions.apply({\n subscriptionId: subscription.externalId,\n operation: current.operation,\n idempotencyKey: current.idempotencyKey,\n expectedEffectiveAt: current.expectedEffectiveAt,\n signal,\n });\n current.accepted = true;\n }\n } catch (error) {\n cause = error;\n if (\n !signal.aborted &&\n error instanceof BillingPortalError &&\n error.code === \"changed\"\n ) {\n request.current = undefined;\n setPreview(undefined);\n try {\n const state = await refresh(signal);\n if (signal.aborted) return;\n setObserved(state);\n } catch {\n if (signal.aborted) return;\n }\n setFailure(error.message);\n onError?.(error);\n return;\n }\n }\n if (signal.aborted) return;\n try {\n const state = await refresh(signal);\n if (signal.aborted) return;\n setObserved(state);\n if (completed(current.operation, state)) {\n finish(state, current.operation);\n return;\n }\n } catch (error) {\n cause ??= error;\n }\n if (!signal.aborted)\n report(\n cause,\n \"We could not confirm this change. Check its status before trying again.\",\n );\n });\n }\n\n return (\n <div className=\"nozle-cancellation\">\n <style nonce={nonce}>{styles}</style>\n {notice && <p role=\"status\">{notice}</p>}\n {active && !expired && (\n <button ref={trigger} type=\"button\" onClick={() => void loadPreview()}>\n {ending ? \"Keep my subscription\" : \"Cancel subscription\"}\n </button>\n )}\n {open && (\n <div className=\"nzc-backdrop\">\n <div\n className=\"nzc-dialog\"\n ref={dialog}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={descriptionId}\n tabIndex={-1}\n onKeyDown={(event) => {\n if (event.key === \"Escape\" && !busy) {\n event.preventDefault();\n setOpen(false);\n }\n if (event.key === \"Tab\") {\n const buttons = Array.from(\n dialog.current?.querySelectorAll<HTMLButtonElement>(\n \"button:not(:disabled)\",\n ) ?? [],\n );\n const first = buttons[0],\n last = buttons[buttons.length - 1];\n if (!first) {\n event.preventDefault();\n return;\n }\n if (\n event.shiftKey &&\n (document.activeElement === first ||\n document.activeElement === dialog.current)\n ) {\n event.preventDefault();\n last.focus();\n } else if (\n !event.shiftKey &&\n (document.activeElement === last ||\n document.activeElement === dialog.current)\n ) {\n event.preventDefault();\n first.focus();\n }\n }\n }}\n >\n <h3 id={titleId}>\n {(preview?.operation ?? operation) === \"cancel\"\n ? \"Cancel subscription?\"\n : \"Keep your subscription?\"}\n </h3>\n <p id={descriptionId}>{subscription.name}</p>\n {preview &&\n (preview.operation === \"cancel\" ? (\n <>\n <p>\n If you confirm, your subscription will end on{\" \"}\n <strong>\n {formatDate(preview.effectiveAt, locale, timezone)}\n </strong>\n .\n </p>\n <p>\n You can keep your subscription before cancellation takes\n effect. Outstanding invoices and usage charges still apply.\n </p>\n {observed?.pendingPlanName && (\n <p>\n Your scheduled change to {observed.pendingPlanName} will\n be removed. Keeping your subscription later will not\n restore that change.\n </p>\n )}\n </>\n ) : (\n <p>\n Your current plan will continue to renew\n {preview.renewalAt\n ? ` on ${formatDate(preview.renewalAt, locale, timezone)}`\n : \"\"}\n .\n </p>\n ))}\n {busy && (\n <p role=\"status\">\n {request.current\n ? \"Confirming subscription status…\"\n : \"Loading subscription details…\"}\n </p>\n )}\n {failure && <p role=\"alert\">{failure}</p>}\n <div className=\"nzc-buttons\">\n <button\n type=\"button\"\n disabled={busy}\n onClick={() => setOpen(false)}\n >\n Close\n </button>\n {!preview && failure && (\n <button\n type=\"button\"\n disabled={busy}\n onClick={() => void loadPreview()}\n >\n Try again\n </button>\n )}\n {preview && (\n <button\n type=\"button\"\n disabled={busy}\n onClick={() => void confirm()}\n >\n {request.current\n ? \"Check status / retry\"\n : preview.operation === \"cancel\"\n ? \"Confirm cancellation\"\n : \"Confirm keep subscription\"}\n </button>\n )}\n </div>\n </div>\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport React, {\n createContext,\n useContext,\n useMemo,\n type ReactNode,\n} from \"react\";\n\nexport interface CheckoutSubscriptionResult {\n external_entity_id?: string;\n external_subscription_id?: string;\n checkout_id?: string;\n effective_at?: string;\n renewal_at?: string | null;\n amount_due_cents?: number | string;\n currency?: string;\n}\n\nexport interface CompletedCheckoutResult extends CheckoutSubscriptionResult {\n type: \"completed\";\n status: string;\n payment_source?: string;\n subscription_id?: string;\n plan_code?: string;\n invoice_id?: string;\n amount_cents?: number;\n currency?: string;\n}\n\nexport interface ScheduledCheckoutResult extends CheckoutSubscriptionResult {\n type: \"scheduled\";\n status: string;\n subscription_id?: string;\n plan_code?: string;\n effective_at?: string;\n pending_subscription_id?: string;\n}\n\nexport interface RazorpayCheckoutResult {\n type: \"razorpay\";\n checkout_id: string;\n key_id: string;\n order_id: string;\n amount_cents: number;\n currency: string;\n expires_at?: string;\n invoice_id?: string;\n customer_id?: string;\n recurring?: boolean;\n mandate_max_amount_cents?: number;\n}\n\nexport interface ProcessingCheckoutResult {\n type: \"processing\";\n checkout_id: string;\n status: string;\n}\n\nexport interface HostedCheckoutResult {\n type: \"hosted\";\n payment_url: string;\n checkout_id?: string;\n}\n\nexport interface RazorpayVerification {\n razorpay_order_id: string;\n razorpay_payment_id: string;\n razorpay_signature: string;\n}\n\nexport interface CheckoutStatus {\n checkout_id: string;\n provider: \"razorpay\" | \"stripe\";\n status:\n | \"processing\"\n | \"awaiting_payment\"\n | \"succeeded\"\n | \"failed\"\n | \"expired\"\n | \"needs_review\";\n fulfillment_status: \"pending\" | \"processing\" | \"succeeded\";\n amount_cents?: number;\n currency?: string;\n invoice_id?: string | null;\n checkout?: CheckoutResult;\n}\n\n/** Call your authenticated merchant backend, which calls Nozle using its secret key. */\nexport type VerifyCheckout = (\n checkoutId: string,\n verification: RazorpayVerification,\n) => Promise<CheckoutStatus>;\nexport type GetCheckoutStatus = (checkoutId: string) => Promise<CheckoutStatus>;\n\nexport type CheckoutResult =\n | {\n type: \"stripe\";\n url?: string;\n clientSecret?: string;\n client_secret?: string;\n publishable_key?: string;\n stripe_account?: string;\n checkout_id?: string;\n invoice_id?: string;\n amount_cents?: number;\n currency?: string;\n external_entity_id?: string;\n external_subscription_id?: string;\n }\n | RazorpayCheckoutResult\n | ProcessingCheckoutResult\n | HostedCheckoutResult\n | CompletedCheckoutResult\n | ScheduledCheckoutResult\n | { url: string };\n\nexport interface CreateCheckoutInput {\n planCode: string;\n returnUrl: string;\n idempotencyKey?: string;\n registerMandate?: boolean;\n /** Select the customer's external subscription for a plan change. */\n subscriptionId?: string;\n /** Opaque, server-issued confirmation for the displayed quote. */\n quoteId?: string;\n}\n\nexport type CreateCheckout = (\n input: CreateCheckoutInput,\n) => Promise<CheckoutResult>;\n\nexport interface NozleClient {\n publishableKey: string;\n baseUrl: string;\n catalogFetch(path: string, init?: RequestInit): Promise<Response>;\n}\n\nfunction createClient(publishableKey: string, baseUrl: string): NozleClient {\n let end = baseUrl.length;\n while (end > 0 && baseUrl[end - 1] === \"/\") end--;\n const base = baseUrl.slice(0, end);\n\n return {\n publishableKey,\n baseUrl: base,\n catalogFetch(path: string, init?: RequestInit): Promise<Response> {\n return fetch(`${base}${path}`, {\n ...init,\n headers: {\n Authorization: `Bearer ${publishableKey}`,\n \"Content-Type\": \"application/json\",\n ...init?.headers,\n },\n });\n },\n };\n}\n\nexport interface BillingContextValue {\n client: NozleClient;\n createCheckout?: CreateCheckout;\n verifyCheckout?: VerifyCheckout;\n getCheckoutStatus?: GetCheckoutStatus;\n}\n\nexport const BillingContext = createContext<BillingContextValue | null>(null);\n\nexport interface BillingProviderProps {\n publishableKey: string;\n createCheckout?: CreateCheckout;\n verifyCheckout?: VerifyCheckout;\n getCheckoutStatus?: GetCheckoutStatus;\n baseUrl?: string;\n children: ReactNode;\n}\n\nexport function BillingProvider({\n publishableKey,\n createCheckout,\n verifyCheckout,\n getCheckoutStatus,\n baseUrl = \"https://api.nozle.app/engine\",\n children,\n}: BillingProviderProps): React.ReactElement {\n if (!publishableKey.startsWith(\"pk_\")) {\n throw new Error(\n \"BillingProvider publishableKey must be a publishable key (pk_)\",\n );\n }\n\n const client = useMemo(\n () => createClient(publishableKey, baseUrl),\n [publishableKey, baseUrl],\n );\n const contextValue = useMemo(\n () => ({ client, createCheckout, verifyCheckout, getCheckoutStatus }),\n [client, createCheckout, verifyCheckout, getCheckoutStatus],\n );\n\n return React.createElement(\n BillingContext.Provider,\n { value: contextValue },\n children,\n );\n}\n\nexport function useOptionalBillingContext(): BillingContextValue | null {\n return useContext(BillingContext);\n}\n\nexport function useBillingContext(): BillingContextValue {\n const context = useOptionalBillingContext();\n if (!context) {\n throw new Error(\"useBillingContext must be used within a BillingProvider\");\n }\n return context;\n}\n\nexport function useNozleClient(): NozleClient {\n return useBillingContext().client;\n}\n","import type {\n CheckoutResult,\n CheckoutStatus,\n RazorpayCheckoutResult,\n RazorpayVerification,\n VerifyCheckout,\n GetCheckoutStatus,\n} from '../../provider.js';\n\nexport interface RazorpayActions {\n verifyCheckout?: VerifyCheckout;\n getCheckoutStatus?: GetCheckoutStatus;\n onSuccess?: (paymentId: string) => void;\n onProcessing?: (status: CheckoutStatus) => void;\n onDismiss?: () => void;\n onError?: (error: Error) => void;\n}\n\ninterface RazorpayOptions {\n key: string;\n order_id: string;\n amount: number;\n currency: string;\n customer_id?: string;\n recurring?: '1';\n handler: (response: RazorpayVerification) => void;\n modal: { ondismiss: () => void };\n}\ninterface RazorpayInstance {\n open(): void;\n close(): void;\n on(event: string, callback: () => void): void;\n}\ndeclare global {\n interface Window {\n Razorpay?: new (options: RazorpayOptions) => RazorpayInstance;\n }\n}\nlet loadingScript: Promise<void> | undefined;\n\nexport function loadRazorpayScript(): Promise<void> {\n if (typeof window === 'undefined')\n return Promise.reject(new Error('Razorpay checkout requires a browser'));\n if (window.Razorpay) return Promise.resolve();\n if (loadingScript) return loadingScript;\n loadingScript = new Promise<void>((resolve, reject) => {\n const existing = document.querySelector<HTMLScriptElement>(\n 'script[src=\"https://checkout.razorpay.com/v1/checkout.js\"]',\n );\n const script = existing || document.createElement('script');\n const finish = (error?: Error) => {\n clearTimeout(timer);\n script.removeEventListener('load', onLoad);\n script.removeEventListener('error', onError);\n if (error) {\n script.remove();\n reject(error);\n } else {\n resolve();\n }\n };\n const onLoad = () =>\n finish(\n window.Razorpay\n ? undefined\n : new Error('Razorpay checkout did not initialize'),\n );\n const onError = () => finish(new Error('Failed to load Razorpay checkout'));\n const timer = setTimeout(\n () => finish(new Error('Razorpay checkout timed out while loading')),\n 15000,\n );\n script.addEventListener('load', onLoad);\n script.addEventListener('error', onError);\n if (!existing) {\n script.id = 'razorpay-js';\n script.src = 'https://checkout.razorpay.com/v1/checkout.js';\n document.body.appendChild(script);\n }\n }).catch((error) => {\n loadingScript = undefined;\n throw error;\n });\n return loadingScript;\n}\n\nfunction checkStatus(status: CheckoutStatus, id: string): void {\n if (status.checkout_id !== id || status.provider !== 'razorpay')\n throw new Error('Checkout status did not match this checkout');\n if (['failed', 'expired', 'needs_review'].includes(status.status))\n throw new Error(`Checkout ${status.status.replaceAll('_', ' ')}`);\n}\n\nexport async function waitForCheckout(\n id: string,\n actions: RazorpayActions,\n initial?: CheckoutStatus,\n phase: 'prepare' | 'confirm' = 'confirm',\n): Promise<CheckoutStatus> {\n let status = initial;\n if (!status && !actions.getCheckoutStatus)\n throw new Error('BillingProvider getCheckoutStatus callback is required');\n for (let attempt = 0; attempt < 30; attempt++) {\n status = status || (await actions.getCheckoutStatus!(id));\n checkStatus(status, id);\n if (\n (status.status === 'succeeded' &&\n status.fulfillment_status === 'succeeded') ||\n (phase === 'prepare' && status.status === 'awaiting_payment')\n )\n return status;\n actions.onProcessing?.(status);\n if (!actions.getCheckoutStatus) return status;\n if (attempt < 29) {\n await new Promise((resolve) => setTimeout(resolve, 1000));\n status = undefined;\n }\n }\n return status!;\n}\n\nexport async function openRazorpayCheckout(\n result: RazorpayCheckoutResult,\n actions: RazorpayActions,\n): Promise<void> {\n if (!result.checkout_id || !result.key_id || !result.order_id)\n throw new Error(\n 'Razorpay checkout requires server-issued checkout_id, key_id and order_id',\n );\n if (!actions.verifyCheckout)\n throw new Error(\n 'BillingProvider verifyCheckout callback is required for Razorpay checkout',\n );\n await loadRazorpayScript();\n await new Promise<void>((resolve, reject) => {\n let finishing = false;\n const checkout = new window.Razorpay!({\n key: result.key_id,\n order_id: result.order_id,\n amount: result.amount_cents,\n currency: result.currency,\n ...(result.recurring && {\n customer_id: result.customer_id,\n recurring: '1' as const,\n }),\n handler: (response) => {\n if (finishing) return;\n finishing = true;\n void (async () => {\n const verified = await actions.verifyCheckout!(\n result.checkout_id,\n response,\n );\n const status = await waitForCheckout(\n result.checkout_id,\n actions,\n verified,\n );\n if (\n status.status === 'succeeded' &&\n status.fulfillment_status === 'succeeded'\n )\n actions.onSuccess?.(response.razorpay_payment_id);\n else actions.onProcessing?.(status);\n resolve();\n })().catch(reject);\n },\n modal: {\n ondismiss: () => {\n if (!finishing) {\n finishing = true;\n actions.onDismiss?.();\n resolve();\n }\n },\n },\n });\n checkout.on('payment.failed', () => {\n if (finishing) return;\n finishing = true;\n checkout.close();\n reject(new Error('Payment failed. You can retry checkout.'));\n });\n checkout.open();\n });\n}\n\nexport async function resumeCheckout(\n result: Extract<CheckoutResult, { type: 'processing' }>,\n actions: RazorpayActions,\n): Promise<CheckoutResult | undefined> {\n const status = await waitForCheckout(\n result.checkout_id,\n actions,\n undefined,\n 'prepare',\n );\n if (status.status === 'awaiting_payment') return status.checkout;\n if (\n status.status === 'succeeded' &&\n status.fulfillment_status === 'succeeded'\n )\n return {\n type: 'completed',\n status: 'succeeded',\n invoice_id: status.invoice_id || undefined,\n };\n actions.onProcessing?.(status);\n return undefined;\n}\n","export function navigateToCheckout(\n url: string,\n location: Pick<Location, \"assign\"> = window.location,\n): void {\n const parsed = new URL(\n url,\n typeof window !== \"undefined\" ? window.location.href : undefined,\n );\n const local = [\"localhost\", \"127.0.0.1\", \"[::1]\"].includes(parsed.hostname);\n if (parsed.protocol !== \"https:\" && !(parsed.protocol === \"http:\" && local)) {\n throw new Error(\"Checkout URL must use HTTPS\");\n }\n if (parsed.username || parsed.password)\n throw new Error(\"Checkout URL must not contain credentials\");\n location.assign(url);\n}\n","\"use client\";\n\nimport React, { useRef, useState } from \"react\";\nimport {\n useBillingContext,\n type CheckoutResult,\n type CompletedCheckoutResult,\n type ScheduledCheckoutResult,\n} from \"../../provider.js\";\n\nimport {\n openRazorpayCheckout,\n resumeCheckout,\n type RazorpayActions,\n} from \"./razorpay-checkout.js\";\nimport { navigateToCheckout } from \"./checkout-navigation.js\";\n\nexport interface CheckoutButtonProps\n extends Omit<RazorpayActions, \"verifyCheckout\" | \"getCheckoutStatus\"> {\n planCode: string;\n returnUrl?: string;\n label?: string;\n className?: string;\n style?: React.CSSProperties;\n onError?: (error: Error) => void;\n /** @deprecated The server supplies the public Razorpay key in the checkout response. */\n razorpayKeyId?: string;\n registerMandate?: boolean;\n onStripeClientSecret?: (clientSecret: string) => void;\n onSuccess?: (paymentId: string) => void;\n onComplete?: (result: CompletedCheckoutResult) => void;\n onScheduled?: (result: ScheduledCheckoutResult) => void;\n}\n\nexport async function handleCheckoutResult(\n result: CheckoutResult,\n options: Pick<\n CheckoutButtonProps,\n | \"razorpayKeyId\"\n | \"onStripeClientSecret\"\n | \"onSuccess\"\n | \"onComplete\"\n | \"onScheduled\"\n > &\n RazorpayActions,\n): Promise<void> {\n if (\"type\" in result && result.type === \"scheduled\") {\n options.onScheduled?.(result);\n return;\n }\n if (\"type\" in result && result.type === \"completed\") {\n options.onComplete?.(result);\n return;\n }\n if (\"type\" in result && result.type === \"razorpay\") {\n await openRazorpayCheckout(result, options);\n return;\n }\n if (\"type\" in result && result.type === \"processing\") {\n const next = await resumeCheckout(result, options);\n if (next) await handleCheckoutResult(next, options);\n return;\n }\n if (\"type\" in result && result.type === \"hosted\") {\n navigateToCheckout(result.payment_url);\n return;\n }\n if (\"url\" in result && result.url) {\n navigateToCheckout(result.url);\n return;\n }\n if (\"type\" in result && result.type === \"stripe\") {\n const clientSecret = result.clientSecret ?? result.client_secret;\n if (clientSecret && options.onStripeClientSecret) {\n options.onStripeClientSecret(clientSecret);\n return;\n }\n if (clientSecret)\n throw new Error(\n \"onStripeClientSecret is required for embedded Stripe checkout\",\n );\n throw new Error(\"Stripe checkout did not include a URL or client secret\");\n }\n throw new Error(\"Unknown checkout response format\");\n}\n\nexport function CheckoutButton({\n planCode,\n returnUrl,\n label = \"Get Started\",\n className,\n style,\n onError,\n razorpayKeyId,\n registerMandate,\n onProcessing,\n onDismiss,\n onStripeClientSecret,\n onSuccess,\n onComplete,\n onScheduled,\n}: CheckoutButtonProps): React.ReactElement {\n const { createCheckout, verifyCheckout, getCheckoutStatus } =\n useBillingContext();\n const attempt = useRef<{ plan: string; key: string } | undefined>(undefined);\n const inFlight = useRef(false);\n const [processing, setProcessing] = useState(false);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n async function handleClick(): Promise<void> {\n if (inFlight.current) return;\n inFlight.current = true;\n setLoading(true);\n setProcessing(false);\n setError(null);\n try {\n if (!createCheckout) {\n throw new Error(\n \"BillingProvider createCheckout callback is required for checkout\",\n );\n }\n if (attempt.current?.plan !== planCode)\n attempt.current = { plan: planCode, key: crypto.randomUUID() };\n const result = await createCheckout({\n idempotencyKey: attempt.current.key,\n ...(registerMandate !== undefined && { registerMandate }),\n planCode,\n returnUrl: returnUrl ?? window.location.href,\n });\n await handleCheckoutResult(result, {\n razorpayKeyId,\n verifyCheckout,\n getCheckoutStatus,\n onProcessing: (status) => {\n setProcessing(true);\n onProcessing?.(status);\n },\n onDismiss,\n onStripeClientSecret,\n onSuccess: (id) => {\n setProcessing(false);\n onSuccess?.(id);\n },\n onComplete: (completed) => {\n setProcessing(false);\n onComplete?.(completed);\n },\n onScheduled,\n });\n } catch (cause) {\n const checkoutError =\n cause instanceof Error ? cause : new Error(\"Checkout failed\");\n setError(checkoutError);\n onError?.(checkoutError);\n } finally {\n inFlight.current = false;\n setLoading(false);\n }\n }\n\n return (\n <>\n <button\n type=\"button\"\n onClick={() => void handleClick()}\n disabled={loading}\n className={className}\n style={{\n padding: \"0.75rem 1.5rem\",\n borderRadius: \"var(--nozle-radius, 0.5rem)\",\n border: \"none\",\n background: \"var(--nozle-primary, var(--primary))\",\n color: \"var(--nozle-primary-foreground, var(--primary-foreground))\",\n cursor: loading ? \"not-allowed\" : \"pointer\",\n fontWeight: 500,\n opacity: loading ? 0.7 : 1,\n ...style,\n }}\n aria-busy={loading}\n >\n {loading ? \"Loading...\" : label}\n </button>\n {processing && (\n <span role=\"status\">\n Payment is processing. Confirmation may take a little while.\n </span>\n )}\n {error && <span role=\"alert\">{error.message}</span>}\n </>\n );\n}\n","\"use client\";\n\nimport React, {\n createContext,\n useContext,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport {\n EmbeddedCheckout as StripeEmbeddedCheckout,\n EmbeddedCheckoutProvider,\n Elements,\n PaymentElement,\n useStripe,\n useElements,\n} from \"@stripe/react-stripe-js\";\nimport { loadStripe } from \"@stripe/stripe-js\";\nimport type { Appearance, StripeElementsOptions } from \"@stripe/stripe-js\";\n\nimport {\n useOptionalBillingContext,\n type CheckoutResult,\n type CheckoutStatus,\n type VerifyCheckout,\n type GetCheckoutStatus,\n} from \"../../provider.js\";\nimport { handleCheckoutResult } from \"./CheckoutButton.js\";\n\n// ── Public interfaces ────────────────────────────────────────────────────────\n\nexport interface StripeCheckoutProps {\n /** Stripe PaymentIntent client secret */\n clientSecret: string;\n /** Stripe publishable key */\n publishableKey: string;\n /** Optional Stripe Connect account ID */\n stripeAccount?: string;\n /** Where Stripe should return the buyer after a redirect-required payment. */\n returnUrl?: string;\n /** Custom label for the submit button (default: \"Pay now\") */\n submitLabel?: string;\n /** Called with the paymentIntentId when payment succeeds without redirect */\n onSuccess?: (paymentIntentId: string) => void;\n /** Called when an embedded Checkout Session completes without a redirect. */\n onComplete?: () => void;\n /** Called with the error when payment fails */\n onError?: (error: Error) => void;\n /** Called when the PaymentElement becomes interactive */\n onReady?: () => void;\n /** Additional CSS class for the outer wrapper */\n className?: string;\n /** Inline styles for the outer wrapper */\n style?: React.CSSProperties;\n /** Optional custom controls for the PaymentIntent/PaymentElement branch. */\n children?: React.ReactNode;\n}\n\nexport interface UseCheckoutResult {\n /** Trigger payment confirmation programmatically */\n confirmPayment: () => Promise<void>;\n /** True while a payment confirmation is in-flight */\n isProcessing: boolean;\n /** Last payment error, or null if no error */\n error: Error | null;\n}\n\n// ── Internal context ──────────────────────────────────────────────────────────\n\ninterface CheckoutContextValue {\n confirmPayment: () => Promise<void>;\n isProcessing: boolean;\n error: Error | null;\n}\n\nconst CheckoutContext = createContext<CheckoutContextValue | null>(null);\n\n// ── Public hook ───────────────────────────────────────────────────────────────\n\nexport function useCheckout(): UseCheckoutResult {\n const ctx = useContext(CheckoutContext);\n if (ctx === null) {\n throw new Error(\"useCheckout must be used inside a <Checkout> component\");\n }\n return ctx;\n}\n\n// ── Stripe appearance builder ─────────────────────────────────────────────────\n\nfunction buildStripeAppearance(): Appearance {\n if (typeof document === \"undefined\") {\n return { theme: \"stripe\" };\n }\n\n const style = getComputedStyle(document.documentElement);\n const get = (prop: string, fallback: string) =>\n style.getPropertyValue(prop).trim() || fallback;\n\n return {\n theme: \"stripe\",\n variables: {\n colorPrimary: get(\"--nozle-primary\", \"#16a34a\"),\n colorBackground: get(\"--nozle-background\", \"#f8fafc\"),\n colorText: get(\"--nozle-foreground\", \"#1e293b\"),\n colorDanger: get(\"--nozle-destructive\", \"#dc2626\"),\n borderRadius: get(\"--nozle-radius\", \"0.5rem\"),\n fontFamily: \"inherit\",\n },\n };\n}\n\n// ── Inner form component ──────────────────────────────────────────────────────\n\ntype CheckoutInnerProps = Pick<\n StripeCheckoutProps,\n | \"submitLabel\"\n | \"onSuccess\"\n | \"onError\"\n | \"onReady\"\n | \"className\"\n | \"style\"\n | \"returnUrl\"\n> & { children?: React.ReactNode };\n\nfunction CheckoutInner({\n submitLabel,\n onSuccess,\n onError,\n onReady,\n className,\n style,\n returnUrl,\n children,\n}: CheckoutInnerProps) {\n const stripe = useStripe();\n const elements = useElements();\n\n const [isProcessing, setIsProcessing] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [isReady, setIsReady] = useState(false);\n const inFlight = useRef(false);\n\n async function confirmPayment(): Promise<void> {\n if (!stripe || !elements || inFlight.current) return;\n\n inFlight.current = true;\n setIsProcessing(true);\n setError(null);\n try {\n const result = await stripe.confirmPayment({\n elements,\n confirmParams: { return_url: returnUrl ?? window.location.href },\n redirect: \"if_required\",\n });\n if (result.error) {\n const err = new Error(result.error.message ?? \"Payment failed\");\n setError(err);\n onError?.(err);\n } else if (result.paymentIntent?.status === \"succeeded\") {\n onSuccess?.(result.paymentIntent.id);\n }\n } catch {\n const failure = new Error(\n \"Payment could not be confirmed. Check its status before retrying.\",\n );\n setError(failure);\n onError?.(failure);\n } finally {\n inFlight.current = false;\n setIsProcessing(false);\n }\n }\n\n return (\n <CheckoutContext.Provider value={{ confirmPayment, isProcessing, error }}>\n <div className={className} style={style}>\n <style>{`@keyframes nozle-skeleton-pulse { 0%{background-position:200% 0} 100%{background-position:-200% 0} }`}</style>\n\n {!isReady && (\n <div\n data-testid=\"checkout-skeleton\"\n style={{\n height: \"200px\",\n borderRadius: \"var(--nozle-radius, 0.5rem)\",\n background:\n \"linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%)\",\n backgroundSize: \"200% 100%\",\n animation: \"nozle-skeleton-pulse 1.5s ease-in-out infinite\",\n }}\n />\n )}\n\n <PaymentElement\n onReady={() => {\n setIsReady(true);\n onReady?.();\n }}\n />\n\n {error !== null && (\n <p\n style={{\n color: \"var(--nozle-destructive, #dc2626)\",\n margin: \"0.5rem 0 0\",\n }}\n >\n {error.message}\n </p>\n )}\n\n {children ?? (\n <button\n type=\"button\"\n onClick={() => void confirmPayment()}\n disabled={isProcessing || !stripe}\n aria-busy={isProcessing}\n style={{\n padding: \"0.75rem 1.5rem\",\n borderRadius: \"var(--nozle-radius, 0.5rem)\",\n border: \"none\",\n background: \"var(--nozle-primary, var(--primary))\",\n color:\n \"var(--nozle-primary-foreground, var(--primary-foreground))\",\n cursor: isProcessing ? \"not-allowed\" : \"pointer\",\n fontWeight: 500,\n opacity: isProcessing ? 0.7 : 1,\n marginTop: \"1rem\",\n width: \"100%\",\n }}\n >\n {isProcessing ? \"Processing...\" : (submitLabel ?? \"Pay now\")}\n </button>\n )}\n </div>\n </CheckoutContext.Provider>\n );\n}\n\n// ── Public Checkout component ─────────────────────────────────────────────────\n\nfunction StripeCheckout({\n clientSecret,\n publishableKey,\n stripeAccount,\n returnUrl,\n submitLabel,\n onSuccess,\n onComplete,\n onError,\n onReady,\n className,\n style,\n children,\n}: StripeCheckoutProps) {\n const stripePromise = useMemo(\n () =>\n loadStripe(publishableKey, stripeAccount ? { stripeAccount } : undefined),\n [publishableKey, stripeAccount],\n );\n\n const appearance = useMemo(() => buildStripeAppearance(), []);\n\n const embeddedOptions = useMemo(\n () => ({ clientSecret, onComplete }),\n [clientSecret, onComplete],\n );\n\n if (clientSecret.startsWith(\"cs_\")) {\n return (\n <div className={className} style={style}>\n <EmbeddedCheckoutProvider\n stripe={stripePromise}\n options={embeddedOptions}\n >\n <StripeEmbeddedCheckout />\n </EmbeddedCheckoutProvider>\n </div>\n );\n }\n\n const options: StripeElementsOptions = { clientSecret, appearance };\n\n return (\n <Elements key={clientSecret} stripe={stripePromise} options={options}>\n <CheckoutInner\n submitLabel={submitLabel}\n onSuccess={onSuccess}\n onError={onError}\n onReady={onReady}\n className={className}\n style={style}\n returnUrl={returnUrl}\n children={children}\n />\n </Elements>\n );\n}\n\nexport interface ProviderCheckoutProps {\n checkout: CheckoutResult;\n submitLabel?: string;\n onSuccess?: (paymentId: string) => void;\n onComplete?: () => void;\n onProcessing?: (status: CheckoutStatus) => void;\n onError?: (error: Error) => void;\n className?: string;\n returnUrl?: string;\n verifyCheckout?: VerifyCheckout;\n getCheckoutStatus?: GetCheckoutStatus;\n onDismiss?: () => void;\n}\n\nexport type CheckoutProps = StripeCheckoutProps | ProviderCheckoutProps;\n\nfunction ProviderCheckout(props: ProviderCheckoutProps) {\n const billing = useOptionalBillingContext();\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [processing, setProcessing] = useState(false);\n const pay = async () => {\n if (busy) return;\n setBusy(true);\n setError(null);\n try {\n await handleCheckoutResult(props.checkout, {\n verifyCheckout: props.verifyCheckout ?? billing?.verifyCheckout,\n getCheckoutStatus:\n props.getCheckoutStatus ?? billing?.getCheckoutStatus,\n onDismiss: props.onDismiss,\n onSuccess: (id) => {\n setProcessing(false);\n props.onSuccess?.(id);\n props.onComplete?.();\n },\n onComplete: () => {\n setProcessing(false);\n props.onComplete?.();\n },\n onScheduled: () => props.onComplete?.(),\n onProcessing: (status) => {\n setProcessing(true);\n props.onProcessing?.(status);\n },\n });\n } catch (cause) {\n const failure =\n cause instanceof Error ? cause : new Error(\"Checkout failed\");\n setError(failure);\n props.onError?.(failure);\n } finally {\n setBusy(false);\n }\n };\n if (\n \"type\" in props.checkout &&\n props.checkout.type === \"stripe\" &&\n !props.checkout.url\n ) {\n const result = props.checkout;\n const clientSecret = result.clientSecret ?? result.client_secret;\n if (clientSecret && result.publishable_key) {\n return (\n <StripeCheckout\n clientSecret={clientSecret}\n publishableKey={result.publishable_key}\n stripeAccount={result.stripe_account}\n returnUrl={props.returnUrl}\n submitLabel={props.submitLabel}\n onSuccess={props.onSuccess}\n onComplete={props.onComplete}\n onError={props.onError}\n />\n );\n }\n return (\n <p role=\"alert\">\n Payment setup is incomplete. Contact support to continue.\n </p>\n );\n }\n return (\n <CheckoutContext.Provider\n value={{ confirmPayment: pay, isProcessing: busy, error }}\n >\n <div className={props.className}>\n <button\n type=\"button\"\n disabled={busy}\n aria-busy={busy}\n onClick={() => void pay()}\n >\n {busy ? \"Processing…\" : props.submitLabel || \"Pay now\"}\n </button>\n {processing && (\n <p role=\"status\">\n Payment is processing. Confirmation may take a little while.\n </p>\n )}\n {error && <p role=\"alert\">{error.message}</p>}\n </div>\n </CheckoutContext.Provider>\n );\n}\n\nexport function Checkout(props: CheckoutProps) {\n return \"checkout\" in props ? (\n <ProviderCheckout {...props} />\n ) : (\n <StripeCheckout {...props} />\n );\n}\n","\"use client\";\n\nimport React, { useEffect, useId, useRef, useState } from \"react\";\nimport { useOptionalBillingContext } from \"../../provider.js\";\nimport { handleCheckoutResult } from \"./CheckoutButton.js\";\n\nexport interface ProrationPreview {\n credit: number;\n debit: number;\n net: number;\n nextBillingDate: string;\n /** Currency of legacy major-unit preview amounts. Defaults to USD for existing integrations. */\n currency?: string;\n}\n\nexport interface UpgradeModalProps {\n isOpen: boolean;\n planCode: string;\n returnUrl?: string;\n subscriptionId?: string;\n quoteId?: string;\n idempotencyKey?: string;\n preview?: ProrationPreview;\n locale?: string;\n title?: string;\n confirmLabel?: string;\n confirmDisabled?: boolean;\n busy?: boolean;\n nonce?: string;\n children?: React.ReactNode;\n /** Authenticated merchant action. Allows the same confirmation UI without BillingProvider. */\n onSubmit?: () => Promise<void>;\n onStripeClientSecret?: (clientSecret: string) => void;\n onCheckoutStarted?: () => void;\n onCompleted?: () => void;\n onScheduled?: () => void;\n onConfirm?: () => void;\n onCancel?: () => void;\n onError?: (error: Error) => void;\n}\n\nconst styles = `\n.nozle-upgrade-modal{position:fixed;inset:0;background:#0006;display:flex;align-items:center;justify-content:center;z-index:1000;padding:20px;color:var(--nozle-portal-text,#202922);font:inherit}\n.nozle-upgrade-modal .nzu-dialog{box-sizing:border-box;background:var(--nozle-portal-background,#fff);border:1px solid var(--nozle-portal-border,#dce2d9);border-radius:12px;padding:24px;max-width:480px;width:100%;max-height:90dvh;overflow:auto;box-shadow:0 12px 48px #0003}\n.nozle-upgrade-modal h2{font-size:20px;margin:0 0 16px}\n.nozle-upgrade-modal p{line-height:1.55}\n.nozle-upgrade-modal button{font:inherit;padding:9px 14px;border:1px solid var(--nozle-portal-border,#dce2d9);border-radius:7px;background:var(--nozle-portal-background,#fff);color:inherit;cursor:pointer}\n.nozle-upgrade-modal button:disabled{opacity:.55;cursor:wait}\n.nozle-upgrade-modal :focus-visible{outline:2px solid var(--nozle-portal-accent,#526949);outline-offset:3px}\n.nozle-upgrade-modal .nzu-buttons{display:flex;flex-wrap:wrap;gap:10px;justify-content:flex-end;margin-top:20px}\n.nozle-upgrade-modal [role=alert]{color:#922e25}\n`;\n\nexport function UpgradeModal(\n props: UpgradeModalProps,\n): React.ReactElement | null {\n const billing = useOptionalBillingContext();\n const [processing, setProcessing] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [confirming, setConfirming] = useState(false);\n const inFlight = useRef(false);\n const dialog = useRef<HTMLDivElement>(null);\n const titleId = useId();\n const busy = Boolean(props.busy || confirming);\n useEffect(() => {\n if (!props.isOpen) return;\n const previous = document.activeElement as HTMLElement | null;\n setError(null);\n dialog.current?.focus();\n return () => {\n if (previous?.isConnected) previous.focus();\n };\n }, [props.isOpen]);\n\n async function handleConfirm(): Promise<void> {\n if (inFlight.current || props.confirmDisabled || busy) return;\n inFlight.current = true;\n setConfirming(true);\n setError(null);\n try {\n if (props.onSubmit) {\n await props.onSubmit();\n } else {\n if (!billing?.createCheckout)\n throw new Error(\n \"BillingProvider createCheckout callback is required for checkout\",\n );\n const result = await billing.createCheckout({\n planCode: props.planCode,\n returnUrl: props.returnUrl ?? window.location.href,\n ...(props.subscriptionId && { subscriptionId: props.subscriptionId }),\n ...(props.quoteId && { quoteId: props.quoteId }),\n ...(props.idempotencyKey && { idempotencyKey: props.idempotencyKey }),\n });\n await handleCheckoutResult(result, {\n verifyCheckout: billing.verifyCheckout,\n getCheckoutStatus: billing.getCheckoutStatus,\n onSuccess: () => {\n setProcessing(false);\n props.onCompleted?.();\n },\n onProcessing: () => setProcessing(true),\n onStripeClientSecret: (secret) => {\n props.onStripeClientSecret?.(secret);\n props.onCheckoutStarted?.();\n },\n onComplete: () => {\n setProcessing(false);\n props.onCompleted?.();\n },\n onScheduled: () => props.onScheduled?.(),\n });\n }\n props.onConfirm?.();\n } catch (cause) {\n const failure =\n cause instanceof Error ? cause : new Error(\"Checkout failed\");\n setError(failure.message);\n props.onError?.(failure);\n } finally {\n inFlight.current = false;\n setConfirming(false);\n }\n }\n if (!props.isOpen) return null;\n const money = (value: number) =>\n new Intl.NumberFormat(props.locale ?? \"en-US\", {\n style: \"currency\",\n currency: props.preview?.currency ?? \"USD\",\n }).format(value);\n return (\n <div className=\"nozle-upgrade-modal\">\n <style nonce={props.nonce}>{styles}</style>\n <div\n ref={dialog}\n className=\"nzu-dialog\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n tabIndex={-1}\n aria-busy={busy}\n onKeyDown={(event) => {\n if (event.key === \"Escape\" && !busy) {\n event.preventDefault();\n props.onCancel?.();\n }\n if (event.key !== \"Tab\") return;\n const nodes = Array.from(\n dialog.current?.querySelectorAll<HTMLElement>(\n 'button:not(:disabled),input:not(:disabled),select:not(:disabled),a[href],[tabindex=\"0\"]',\n ) ?? [],\n );\n const first = nodes[0],\n last = nodes[nodes.length - 1];\n if (!first) {\n event.preventDefault();\n return;\n }\n if (\n event.shiftKey &&\n (document.activeElement === first ||\n document.activeElement === dialog.current)\n ) {\n event.preventDefault();\n last.focus();\n }\n if (\n !event.shiftKey &&\n (document.activeElement === last ||\n document.activeElement === dialog.current)\n ) {\n event.preventDefault();\n first.focus();\n }\n }}\n >\n <h2 id={titleId}>{props.title ?? \"Confirm plan change\"}</h2>\n {processing && (\n <p role=\"status\">\n Payment is processing. Confirmation may take a little while.\n </p>\n )}\n {error && <p role=\"alert\">{error}</p>}\n {props.preview && (\n <div>\n {props.preview.credit > 0 && (\n <p>Credits applied: {money(-props.preview.credit)}</p>\n )}\n <p>New plan charge: {money(props.preview.debit)}</p>\n <p>\n <strong>Due today: {money(props.preview.net)}</strong>\n </p>\n <p>\n Next billing date:{\" \"}\n {new Date(props.preview.nextBillingDate).toLocaleDateString(\n props.locale,\n )}\n .\n </p>\n </div>\n )}\n {props.children}\n <div className=\"nzu-buttons\">\n <button type=\"button\" onClick={props.onCancel} disabled={busy}>\n Close\n </button>\n <button\n type=\"button\"\n onClick={() => void handleConfirm()}\n disabled={busy || props.confirmDisabled}\n >\n {busy\n ? \"Checking subscription…\"\n : (props.confirmLabel ?? \"Confirm\")}\n </button>\n </div>\n </div>\n </div>\n );\n}\n","import { portalTimezones } from \"../portal/timezones.js\";\n\n/** Format integer minor units without converting billing amounts to floating point. */\nexport function formatMinorAmount(\n value: string | number,\n currency: string,\n locale = \"en-US\",\n): string {\n const raw = String(value);\n if (\n !/^-?\\d+$/.test(raw) ||\n (typeof value === \"number\" && !Number.isSafeInteger(value))\n ) {\n return \"Amount unavailable\";\n }\n try {\n const formatter = new Intl.NumberFormat(locale, {\n style: \"currency\",\n currency,\n });\n const digits = formatter.resolvedOptions().maximumFractionDigits ?? 2;\n const minor = BigInt(raw);\n const absolute = minor < 0n ? -minor : minor;\n const scale = 10n ** BigInt(digits);\n const whole = absolute / scale;\n const signed = minor < 0n ? (whole === 0n ? -0 : -whole) : whole;\n const decimal = String(absolute % scale).padStart(digits, \"0\");\n const digitFormatter = new Intl.NumberFormat(locale, {\n useGrouping: false,\n });\n const fraction = [...decimal]\n .map((digit) => digitFormatter.format(Number(digit)))\n .join(\"\");\n return formatter\n .formatToParts(signed)\n .map((part) => (part.type === \"fraction\" ? fraction : part.value))\n .join(\"\");\n } catch {\n return \"Amount unavailable\";\n }\n}\n\nexport function formatBillingDate(\n value: string | null,\n locale = \"en-US\",\n timezone?: string,\n): string {\n if (!value || !Number.isFinite(Date.parse(value))) return \"Not available\";\n try {\n return new Intl.DateTimeFormat(locale, {\n dateStyle: \"medium\",\n timeZone: timezone?.startsWith(\"TZ_\")\n ? (portalTimezones[timezone] ?? \"UTC\")\n : (timezone ?? \"UTC\"),\n }).format(new Date(value));\n } catch {\n return new Intl.DateTimeFormat(locale, {\n dateStyle: \"medium\",\n timeZone: \"UTC\",\n }).format(new Date(value));\n }\n}\n","\"use client\";\n\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { Checkout } from \"../billing/Checkout.js\";\nimport { UpgradeModal } from \"../billing/UpgradeModal.js\";\nimport { formatBillingDate, formatMinorAmount } from \"../billing/amounts.js\";\nimport type {\n CheckoutResult,\n CheckoutStatus,\n RazorpayVerification,\n} from \"../../provider.js\";\nimport { BillingPortalError } from \"./client.js\";\n\nexport interface PortalPlan {\n code: string;\n name: string;\n amountCents: string | number;\n currency: string;\n interval: string;\n}\nexport type PlanChangeOperation = \"upgrade\" | \"downgrade\";\nexport interface PlanChangeState {\n subscriptionId: string;\n status: string;\n currentPlan: PortalPlan;\n endingAt: string | null;\n pendingChange: { id: string; plan: PortalPlan; effectiveAt: string } | null;\n eligiblePlans: Array<PortalPlan & { operation: PlanChangeOperation }>;\n blockedReason: string | null;\n checkout: CheckoutResult | null;\n checkoutStatus:\n | \"none\"\n | \"awaiting_payment\"\n | \"processing\"\n | \"succeeded\"\n | \"failed\"\n | \"expired\"\n | \"needs_review\";\n}\nexport interface PlanChangePreview {\n operation: PlanChangeOperation;\n timing: \"immediate\" | \"end_of_period\";\n currency: string;\n creditAmountCents: string | number;\n debitAmountCents: string | number;\n netAmountCents: string | number;\n amountDueNowCents: string | number;\n amountDueAtEffectiveCents: string | number;\n effectiveAt: string;\n renewalAt: string | null;\n quoteToken: string;\n}\nexport interface PlanChangeInput {\n subscriptionId: string;\n signal: AbortSignal;\n}\nexport interface PlanChangePreviewInput extends PlanChangeInput {\n targetPlanCode: string;\n}\nexport interface PlanChangeApplyInput extends PlanChangePreviewInput {\n quoteToken: string;\n idempotencyKey: string;\n returnUrl: string;\n}\nexport interface PlanChangeWithdrawInput extends PlanChangeInput {\n pendingChangeId: string;\n idempotencyKey: string;\n}\nexport interface PlanChangeActions {\n load: (input: PlanChangeInput) => Promise<PlanChangeState>;\n status: (input: PlanChangeInput) => Promise<PlanChangeState>;\n preview: (input: PlanChangePreviewInput) => Promise<PlanChangePreview>;\n apply: (input: PlanChangeApplyInput) => Promise<CheckoutResult>;\n withdraw: (input: PlanChangeWithdrawInput) => Promise<unknown>;\n /** Merchant callbacks scoped to this selected subscription. */\n verifyCheckout?: (\n input: PlanChangeInput & {\n checkoutId: string;\n verification: RazorpayVerification;\n },\n ) => Promise<CheckoutStatus>;\n getCheckoutStatus?: (\n input: PlanChangeInput & { checkoutId: string },\n ) => Promise<CheckoutStatus>;\n}\nexport interface PlanChangeControlProps {\n subscriptionId: string;\n /** Change when another control updates this subscription; in-flight request keys are preserved. */\n refreshKey?: string;\n actions: PlanChangeActions;\n onChanged?: () => void;\n onError?: (error: BillingPortalError) => void;\n returnUrl?: string;\n locale?: string;\n timezone?: string;\n nonce?: string;\n}\ntype Attempt = {\n key: string;\n operation: PlanChangeOperation | \"withdraw\";\n target?: string;\n pendingId?: string;\n fromPlan?: string;\n quote?: PlanChangePreview;\n accepted: boolean;\n attempted: boolean;\n};\nconst styles = `\n.nozle-plan-change{font:inherit;color:var(--nozle-portal-text,#202922);margin-top:12px}\n.nozle-plan-change button{font:inherit;padding:9px 14px;border:1px solid var(--nozle-portal-border,#dce2d9);border-radius:7px;background:var(--nozle-portal-background,#fff);color:inherit;cursor:pointer}\n.nozle-plan-change button:disabled{opacity:.55;cursor:wait}\n.nozle-plan-change :focus-visible{outline:2px solid var(--nozle-portal-accent,#526949);outline-offset:3px}\n.nozle-plan-change [role=alert]{color:#922e25}\n.nozle-plan-change .nzpc-actions{display:flex;gap:10px;flex-wrap:wrap}\n.nozle-upgrade-modal select{box-sizing:border-box;width:100%;font:inherit;color:inherit;padding:10px;margin:8px 0;border:1px solid #dce2d9;border-radius:7px;background:var(--nozle-portal-background,#fff)}\n.nozle-upgrade-modal dl{display:block;margin:16px 0;padding:0}\n.nozle-upgrade-modal dl div{display:flex;justify-content:space-between;gap:16px;margin:12px 0}\n.nozle-upgrade-modal dd{margin:0;text-align:right}\n`;\nconst paymentPending = (state: PlanChangeState) =>\n [\"awaiting_payment\", \"processing\", \"needs_review\"].includes(\n state.checkoutStatus,\n );\nfunction paymentMessage(state: PlanChangeState) {\n if (state.checkoutStatus === \"needs_review\")\n return \"Payment needs review. Contact support before trying another payment.\";\n return state.checkoutStatus === \"awaiting_payment\"\n ? \"Complete payment to change your plan.\"\n : \"Your change is processing. Your current plan remains active until confirmation.\";\n}\nfunction done(attempt: Attempt, state: PlanChangeState) {\n if (attempt.operation === \"withdraw\")\n return (\n !state.pendingChange &&\n state.status === \"active\" &&\n state.currentPlan.code === attempt.fromPlan\n );\n return (\n (state.currentPlan.code === attempt.target && state.status === \"active\") ||\n state.pendingChange?.plan.code === attempt.target\n );\n}\n\n/** Payment-backed upgrades and scheduled downgrades for one external subscription. */\nexport function PlanChangeControl(props: PlanChangeControlProps) {\n return <PlanChangeFlow key={props.subscriptionId} {...props} />;\n}\nfunction PlanChangeFlow({\n subscriptionId,\n refreshKey,\n actions,\n onChanged,\n onError,\n returnUrl,\n locale = \"en-US\",\n timezone = \"UTC\",\n nonce,\n}: PlanChangeControlProps) {\n const owner = useMemo(\n () => ({ controller: new AbortController() }),\n [subscriptionId, actions],\n );\n const latest = useRef(owner);\n latest.current = owner;\n const [loaded, setLoaded] = useState<{\n owner: object;\n value: PlanChangeState;\n }>();\n const [busy, setBusy] = useState(false);\n const [failure, setFailure] = useState<string>();\n const [notice, setNotice] = useState(\"\");\n const [mode, setMode] = useState<\"choose\" | \"confirm\" | \"withdraw\" | null>(\n null,\n );\n const [target, setTarget] = useState(\"\");\n const [quote, setQuote] = useState<PlanChangePreview>();\n const [checkout, setCheckout] = useState<CheckoutResult | null>(null);\n const [withdrawTarget, setWithdrawTarget] = useState<{\n id: string;\n name: string;\n fromPlan: string;\n currentName: string;\n }>();\n const pending = useRef<Attempt | undefined>(undefined);\n const previousRefresh = useRef(refreshKey);\n const inFlight = useRef<AbortController | null>(null);\n const state = loaded?.owner === owner ? loaded.value : undefined;\n const errorCallback = useRef(onError),\n changedCallback = useRef(onChanged);\n errorCallback.current = onError;\n changedCallback.current = onChanged;\n\n async function run(task: (signal: AbortSignal) => Promise<void>) {\n if (latest.current !== owner || inFlight.current) return;\n const controller = new AbortController();\n inFlight.current = controller;\n setBusy(true);\n setFailure(undefined);\n let timedOut = false;\n let rejectAbort: () => void = () => {};\n const aborted = new Promise<never>((_, reject) => {\n rejectAbort = () => reject(new Error(\"aborted\"));\n controller.signal.addEventListener(\"abort\", rejectAbort, { once: true });\n });\n const timer = setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, 30000);\n try {\n await Promise.race([task(controller.signal), aborted]);\n } catch (error) {\n if (latest.current !== owner || (controller.signal.aborted && !timedOut))\n return;\n const safe =\n error instanceof BillingPortalError\n ? error\n : new BillingPortalError(\"request\");\n if (safe.code === \"changed\") {\n pending.current = undefined;\n setQuote(undefined);\n setTarget(\"\");\n setMode(\"choose\");\n setFailure(\n \"Your subscription or price changed. Check the latest details and confirm again.\",\n );\n } else\n setFailure(\n timedOut\n ? \"This request timed out. Check subscription status before retrying.\"\n : safe.code === \"unauthorized\"\n ? \"Your session expired. Reconnect to manage your subscription.\"\n : \"We could not confirm this change. Check subscription status before retrying.\",\n );\n errorCallback.current?.(safe);\n } finally {\n clearTimeout(timer);\n controller.signal.removeEventListener(\"abort\", rejectAbort);\n if (inFlight.current === controller) inFlight.current = null;\n if (latest.current === owner) setBusy(false);\n }\n }\n async function read(signal: AbortSignal, initial = false) {\n const value = await (initial ? actions.load : actions.status)({\n subscriptionId,\n signal,\n });\n if (signal.aborted || latest.current !== owner) return null;\n if (value.subscriptionId !== subscriptionId)\n throw new BillingPortalError(\"request\");\n setLoaded({ owner, value });\n setCheckout(paymentPending(value) ? value.checkout : null);\n return value;\n }\n function finish(attempt: Attempt, value: PlanChangeState) {\n pending.current = undefined;\n setMode(null);\n setQuote(undefined);\n setCheckout(null);\n setNotice(\n attempt.operation === \"withdraw\"\n ? \"Scheduled change removed. Your current plan will continue to renew.\"\n : value.pendingChange\n ? `Plan change scheduled for ${formatBillingDate(value.pendingChange.effectiveAt, locale, timezone)}.`\n : `Your ${value.currentPlan.name} plan is active.`,\n );\n changedCallback.current?.();\n }\n async function reconcile(signal: AbortSignal) {\n const value = await read(signal);\n if (!value) return null;\n const attempt = pending.current;\n if (attempt && done(attempt, value)) finish(attempt, value);\n else if (\n !attempt &&\n state &&\n (value.currentPlan.code !== state.currentPlan.code ||\n value.pendingChange?.id !== state.pendingChange?.id)\n ) {\n setNotice(\n value.pendingChange\n ? `Plan change scheduled for ${formatBillingDate(value.pendingChange.effectiveAt, locale, timezone)}.`\n : `Your ${value.currentPlan.name} plan is active.`,\n );\n changedCallback.current?.();\n } else if ([\"failed\", \"expired\"].includes(value.checkoutStatus)) {\n pending.current = undefined;\n setCheckout(null);\n setMode(null);\n setNotice(\n \"Payment did not complete. Your current plan is unchanged. You can choose a plan again.\",\n );\n } else if (paymentPending(value) || attempt?.accepted) {\n setNotice(paymentMessage(value));\n }\n return value;\n }\n useEffect(() => {\n inFlight.current?.abort();\n inFlight.current = null;\n if (owner.controller.signal.aborted)\n owner.controller = new AbortController();\n pending.current = undefined;\n setMode(null);\n setQuote(undefined);\n setCheckout(null);\n setNotice(\"\");\n void run(async (signal) => {\n await read(signal, true);\n });\n return () => {\n inFlight.current?.abort();\n owner.controller.abort();\n };\n }, [owner]);\n useEffect(() => {\n if (previousRefresh.current === refreshKey) return;\n previousRefresh.current = refreshKey;\n let stopped = false;\n let timer: ReturnType<typeof setTimeout>;\n const refresh = () => {\n if (stopped) return;\n if (inFlight.current) {\n timer = setTimeout(refresh, 100);\n return;\n }\n void run(async (signal) => {\n await reconcile(signal);\n });\n };\n refresh();\n return () => {\n stopped = true;\n clearTimeout(timer);\n };\n }, [refreshKey, owner]);\n // Recover delayed confirmations without keeping a dialog or a browser-only payment record alive.\n useEffect(() => {\n if (\n !state ||\n state.checkoutStatus === \"needs_review\" ||\n (!paymentPending(state) && !pending.current?.accepted)\n )\n return;\n const timer = setInterval(() => {\n if (!document.hidden)\n void run(async (signal) => {\n await reconcile(signal);\n });\n }, 5000);\n return () => clearInterval(timer);\n }, [state, owner]);\n\n function openChange() {\n if (pending.current) {\n setMode(\n pending.current.operation === \"withdraw\" ? \"withdraw\" : \"confirm\",\n );\n return;\n }\n setTarget(\"\");\n setQuote(undefined);\n setMode(\"choose\");\n setFailure(undefined);\n void run(async (signal) => {\n await read(signal);\n });\n }\n async function prepare() {\n await run(async (signal) => {\n const value = await read(signal);\n if (!value) return;\n if (\n value.endingAt ||\n value.pendingChange ||\n paymentPending(value) ||\n !value.eligiblePlans.some((plan) => plan.code === target)\n )\n throw new BillingPortalError(\"changed\");\n const result = await actions.preview({\n subscriptionId,\n targetPlanCode: target,\n signal,\n });\n if (signal.aborted) return;\n const plan = value.eligiblePlans.find((plan) => plan.code === target)!;\n if (\n result.operation !== plan.operation ||\n !result.quoteToken ||\n !Number.isFinite(Date.parse(result.effectiveAt)) ||\n (result.operation === \"downgrade\" && result.timing !== \"end_of_period\")\n )\n throw new BillingPortalError(\"request\");\n const amounts = [\n result.creditAmountCents,\n result.debitAmountCents,\n result.netAmountCents,\n result.amountDueNowCents,\n result.amountDueAtEffectiveCents,\n ];\n if (\n !/^[A-Z]{3}$/.test(result.currency) ||\n amounts.some(\n (amount) =>\n formatMinorAmount(amount, result.currency, locale) ===\n \"Amount unavailable\",\n ) ||\n ![\"immediate\", \"end_of_period\"].includes(result.timing) ||\n (result.renewalAt !== null &&\n !Number.isFinite(Date.parse(result.renewalAt)))\n )\n throw new BillingPortalError(\"request\");\n setQuote(result);\n setMode(\"confirm\");\n });\n }\n async function confirm() {\n if (mode === \"choose\") return prepare();\n await run(async (signal) => {\n let attempt = pending.current;\n if (!attempt) {\n if (mode === \"withdraw\") {\n if (!withdrawTarget) throw new BillingPortalError(\"changed\");\n attempt = {\n key: crypto.randomUUID(),\n operation: \"withdraw\",\n pendingId: withdrawTarget.id,\n fromPlan: withdrawTarget.fromPlan,\n accepted: false,\n attempted: false,\n };\n } else {\n if (!quote) throw new BillingPortalError(\"changed\");\n attempt = {\n key: crypto.randomUUID(),\n operation: quote.operation,\n target,\n quote,\n accepted: false,\n attempted: false,\n };\n }\n pending.current = attempt;\n }\n if (attempt.attempted) {\n await reconcile(signal);\n if (signal.aborted || pending.current !== attempt || attempt.accepted)\n return;\n }\n attempt.attempted = true;\n let result: CheckoutResult | undefined;\n try {\n if (attempt.operation === \"withdraw\")\n await actions.withdraw({\n subscriptionId,\n pendingChangeId: attempt.pendingId!,\n idempotencyKey: attempt.key,\n signal,\n });\n else\n result = await actions.apply({\n subscriptionId,\n targetPlanCode: attempt.target!,\n quoteToken: attempt.quote!.quoteToken,\n idempotencyKey: attempt.key,\n returnUrl:\n returnUrl ?? window.location.origin + window.location.pathname,\n signal,\n });\n if (signal.aborted) return;\n attempt.accepted = true;\n setMode(null);\n } catch (error) {\n if (!signal.aborted) {\n // A lost response may already have changed the subscription. Never blindly resubmit it.\n await reconcile(signal).catch(() => null);\n if (\n pending.current !== attempt &&\n !(error instanceof BillingPortalError && error.code === \"changed\")\n )\n return;\n }\n throw error;\n }\n const value = await reconcile(signal);\n if (!value || signal.aborted || pending.current !== attempt) return;\n if (\n result &&\n ![\"completed\", \"scheduled\"].includes(\n \"type\" in result ? result.type : \"\",\n )\n )\n setCheckout(result);\n });\n }\n const check = () =>\n void run(async (signal) => {\n await reconcile(signal);\n });\n const selected = state?.eligiblePlans.find((plan) => plan.code === target);\n const money = (amount: string | number) =>\n formatMinorAmount(\n amount,\n quote?.currency ?? state?.currentPlan.currency ?? \"USD\",\n locale,\n );\n const blocked = Boolean(\n state?.endingAt ||\n state?.pendingChange ||\n (state && paymentPending(state)) ||\n state?.blockedReason ||\n pending.current?.accepted,\n );\n return (\n <div className=\"nozle-plan-change\">\n <style nonce={nonce}>{styles}</style>\n {!state ? (\n <>\n <p role=\"status\">Loading plan changes…</p>\n {failure && <p role=\"alert\">{failure}</p>}\n <button type=\"button\" onClick={check} disabled={busy}>\n Check subscription status\n </button>\n </>\n ) : (\n <>\n {state.pendingChange && (\n <p>\n Current plan until{\" \"}\n {formatBillingDate(\n state.pendingChange.effectiveAt,\n locale,\n timezone,\n )}\n , then {state.pendingChange.plan.name} at{\" \"}\n {formatMinorAmount(\n state.pendingChange.plan.amountCents,\n state.pendingChange.plan.currency,\n locale,\n )}{\" \"}\n / {state.pendingChange.plan.interval}.\n </p>\n )}\n {state.endingAt && (\n <p>Keep your subscription before choosing another plan.</p>\n )}\n {state.blockedReason &&\n !state.endingAt &&\n !state.pendingChange &&\n !paymentPending(state) && (\n <p>\n Plan changes are currently unavailable. Contact support for your\n options.\n </p>\n )}\n {!state.blockedReason &&\n !state.endingAt &&\n !state.pendingChange &&\n !paymentPending(state) &&\n state.eligiblePlans.length === 0 && (\n <p>No other plans are available for this subscription.</p>\n )}\n {[\"failed\", \"expired\"].includes(state.checkoutStatus) && !notice && (\n <p>Payment did not complete. Your current plan is unchanged.</p>\n )}\n {paymentPending(state) && !notice && (\n <p role=\"status\">{paymentMessage(state)}</p>\n )}\n <div className=\"nzpc-actions\">\n {!blocked &&\n state.status === \"active\" &&\n state.eligiblePlans.length > 0 && (\n <button type=\"button\" disabled={busy} onClick={openChange}>\n Change plan\n </button>\n )}\n {state.pendingChange &&\n state.status === \"active\" &&\n !paymentPending(state) && (\n <button\n type=\"button\"\n disabled={busy}\n onClick={() => {\n setWithdrawTarget({\n id: state.pendingChange!.id,\n name: state.pendingChange!.plan.name,\n fromPlan: state.currentPlan.code,\n currentName: state.currentPlan.name,\n });\n setMode(\"withdraw\");\n setFailure(undefined);\n }}\n >\n Keep current plan\n </button>\n )}\n {(paymentPending(state) || pending.current || failure) && (\n <button type=\"button\" disabled={busy} onClick={check}>\n Check subscription status\n </button>\n )}\n {pending.current?.attempted && !pending.current.accepted && (\n <button type=\"button\" disabled={busy} onClick={openChange}>\n Review and retry change\n </button>\n )}\n </div>\n {failure && !mode && <p role=\"alert\">{failure}</p>}\n {notice && <p role=\"status\">{notice}</p>}\n {checkout && (\n <Checkout\n key={\"checkout_id\" in checkout ? checkout.checkout_id : \"payment\"}\n checkout={checkout}\n returnUrl={returnUrl}\n verifyCheckout={\n actions.verifyCheckout\n ? (checkoutId, verification) =>\n actions.verifyCheckout!({\n subscriptionId,\n checkoutId,\n verification,\n signal: owner.controller.signal,\n })\n : undefined\n }\n getCheckoutStatus={\n actions.getCheckoutStatus\n ? (checkoutId) =>\n actions.getCheckoutStatus!({\n subscriptionId,\n checkoutId,\n signal: owner.controller.signal,\n })\n : undefined\n }\n onSuccess={check}\n onComplete={check}\n onProcessing={check}\n onDismiss={() => {\n if (owner.controller.signal.aborted) return;\n setNotice(\n \"Payment was closed. Your plan changes only after payment is confirmed.\",\n );\n check();\n }}\n onError={() => {\n if (owner.controller.signal.aborted) return;\n setFailure(\n \"Payment could not be completed. Check subscription status to continue.\",\n );\n check();\n }}\n />\n )}\n <UpgradeModal\n isOpen={mode !== null}\n planCode={target}\n title={\n mode === \"withdraw\"\n ? \"Keep your current plan?\"\n : mode === \"choose\"\n ? \"Change plan\"\n : `Confirm ${quote?.operation ?? \"plan change\"}`\n }\n nonce={nonce}\n busy={busy}\n confirmDisabled={\n (mode === \"choose\" && (!target || blocked)) ||\n (mode === \"confirm\" && !quote)\n }\n confirmLabel={\n pending.current?.attempted\n ? \"Check status / retry\"\n : mode === \"choose\"\n ? \"Review change\"\n : mode === \"withdraw\"\n ? \"Confirm keep current plan\"\n : quote?.operation === \"downgrade\"\n ? \"Confirm downgrade\"\n : \"Confirm upgrade\"\n }\n onCancel={() => setMode(null)}\n onSubmit={confirm}\n >\n {failure && <p role=\"alert\">{failure}</p>}\n {mode === \"choose\" && (\n <label>\n Choose a plan\n <select\n value={target}\n onChange={(event) => {\n setTarget(event.target.value);\n setQuote(undefined);\n }}\n disabled={busy}\n >\n <option value=\"\">Select a plan</option>\n {state.eligiblePlans.map((plan) => (\n <option key={plan.code} value={plan.code}>\n {plan.name} —{\" \"}\n {formatMinorAmount(\n plan.amountCents,\n plan.currency,\n locale,\n )}{\" \"}\n / {plan.interval} ({plan.operation})\n </option>\n ))}\n </select>\n </label>\n )}\n {mode === \"withdraw\" && (\n <p>\n Remove the scheduled change to {withdrawTarget?.name}. Your{\" \"}\n {withdrawTarget?.currentName} plan will continue to renew.\n </p>\n )}\n {mode === \"confirm\" && quote && (\n <>\n <p>\n {state.currentPlan.name} → {selected?.name ?? target}\n </p>\n {selected && (\n <p>\n {formatMinorAmount(\n selected.amountCents,\n selected.currency,\n locale,\n )}{\" \"}\n / {selected.interval}. Base price, excluding tax and usage.\n </p>\n )}\n <dl>\n <div>\n <dt>New plan charge</dt>\n <dd>{money(quote.debitAmountCents)}</dd>\n </div>\n <div>\n <dt>Credits applied</dt>\n <dd>{money(quote.creditAmountCents)}</dd>\n </div>\n <div>\n <dt>Due now</dt>\n <dd>{money(quote.amountDueNowCents)}</dd>\n </div>\n <div>\n <dt>Due at effective date</dt>\n <dd>{money(quote.amountDueAtEffectiveCents)}</dd>\n </div>\n </dl>\n <p>\n Effective{\" \"}\n {formatBillingDate(quote.effectiveAt, locale, timezone)}.{\" \"}\n {quote.renewalAt &&\n `Next renewal ${formatBillingDate(quote.renewalAt, locale, timezone)}.`}\n </p>\n {quote.timing === \"end_of_period\" ? (\n <p>\n Your current plan and access continue until the effective\n date.\n </p>\n ) : BigInt(quote.amountDueNowCents) === 0n ? (\n <p>No payment is due now for this change.</p>\n ) : (\n <p>\n Your plan changes after the required payment is confirmed.\n </p>\n )}\n </>\n )}\n </UpgradeModal>\n </>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport {\n useEffect,\n useRef,\n useState,\n type CSSProperties,\n type FormEvent,\n} from \"react\";\nimport {\n BillingPortalError,\n invoiceDownloadUrl,\n portalClient,\n type CreateBillingPortalSession,\n type PortalClient,\n} from \"./client.js\";\nimport {\n identityQuery,\n subscriptionsQuery,\n subscriptionQuery,\n usageQuery,\n invoicesQuery,\n walletsQuery,\n updateCustomerMutation,\n downloadInvoiceMutation,\n topUpMutation,\n type Cents,\n type Customer,\n type Identity,\n type Page,\n type Subscription,\n type Usage,\n type Invoice,\n type Wallet,\n} from \"./operations.js\";\nimport { portalStyles } from \"./styles.js\";\nimport { portalTimezones } from \"./timezones.js\";\nimport { compareDecimalStrings } from \"../../core/decimal.js\";\nimport { walletAmountCents } from \"./amounts.js\";\nimport {\n CancellationControl,\n type CancellationActions,\n type CancellationSubscription,\n} from \"./CancellationControl.js\";\nimport {\n PlanChangeControl,\n type PlanChangeActions,\n} from \"./PlanChangeControl.js\";\n\nexport interface BillingPortalProps {\n /** Stable callback to an authenticated merchant endpoint. Never accept customer identity from browser input. */\n createSession: CreateBillingPortalSession;\n /** Optional authenticated merchant callbacks enabling cancel/keep controls. */\n cancellationActions?: CancellationActions;\n /** Optional authenticated merchant callbacks for upgrades and scheduled downgrades. */\n planChangeActions?: PlanChangeActions;\n /** Formats amounts and dates. Interface copy is currently English. */\n locale?: string;\n className?: string;\n style?: CSSProperties;\n /** CSP nonce for the component's scoped stylesheet. No Tailwind setup is required. */\n nonce?: string;\n onError?: (error: BillingPortalError) => void;\n}\n\nfunction asError(error: unknown) {\n return error instanceof BillingPortalError\n ? error\n : new BillingPortalError(\"request\");\n}\n\n/** Native React customer portal. Uses customer-scoped GraphQL, with no iframe or global auth storage. */\nexport function BillingPortal({\n createSession,\n cancellationActions,\n planChangeActions,\n locale = \"en-US\",\n className = \"\",\n style,\n nonce,\n onError,\n}: BillingPortalProps) {\n const [attempt, setAttempt] = useState(0);\n const [state, setState] = useState<{\n source: CreateBillingPortalSession;\n attempt: number;\n client?: PortalClient;\n error?: BillingPortalError;\n }>();\n const errorCallback = useRef(onError);\n errorCallback.current = onError;\n useEffect(() => {\n const controller = new AbortController();\n let active = true;\n const timer = setTimeout(() => {\n active = false;\n controller.abort();\n const error = new BillingPortalError(\"session\");\n setState({ source: createSession, attempt, error });\n errorCallback.current?.(error);\n }, 20000);\n Promise.resolve()\n .then(() => createSession({ signal: controller.signal }))\n .then((session) => {\n if (active)\n setState({\n source: createSession,\n attempt,\n client: portalClient(session),\n });\n })\n .catch(() => {\n if (active) {\n const error = new BillingPortalError(\"session\");\n setState({ source: createSession, attempt, error });\n errorCallback.current?.(error);\n }\n })\n .finally(() => clearTimeout(timer));\n return () => {\n active = false;\n clearTimeout(timer);\n controller.abort();\n };\n }, [createSession, attempt]);\n // Hide the previous customer's data during render, before effects run on identity changes.\n const current =\n state?.source === createSession && state.attempt === attempt\n ? state\n : undefined;\n const reconnect = () => setAttempt((value) => value + 1);\n return (\n <div\n className={`nozle-billing-portal ${className}`}\n style={style}\n aria-label=\"Nozle billing portal\"\n >\n <style nonce={nonce}>{portalStyles}</style>\n {current?.client ? (\n <Portal\n key={attempt}\n client={current.client}\n locale={locale}\n reconnect={reconnect}\n onError={onError}\n cancellationActions={cancellationActions}\n planChangeActions={planChangeActions}\n nonce={nonce}\n />\n ) : current?.error ? (\n <Failure error={current.error} retry={reconnect} />\n ) : (\n <Loading label=\"Starting billing session…\" />\n )}\n </div>\n );\n}\n\nfunction useQuery<T>(\n client: PortalClient,\n query: string,\n variables: Record<string, unknown>,\n onError?: BillingPortalProps[\"onError\"],\n retainDuringRefresh = false,\n) {\n const [attempt, setAttempt] = useState(0);\n const key = JSON.stringify(variables);\n const [state, setState] = useState<{\n client: PortalClient;\n key: string;\n attempt: number;\n data?: T;\n error?: BillingPortalError;\n }>();\n const callback = useRef(onError);\n callback.current = onError;\n useEffect(() => {\n const controller = new AbortController();\n client\n .request<T>(query, JSON.parse(key), controller.signal)\n .then((data) => {\n if (!controller.signal.aborted)\n setState({ client, key, attempt, data });\n })\n .catch((cause) => {\n if (!controller.signal.aborted) {\n const error = asError(cause);\n setState({ client, key, attempt, error });\n callback.current?.(error);\n }\n });\n return () => controller.abort();\n }, [client, query, key, attempt]);\n const current =\n state?.client === client && state.key === key && state.attempt === attempt\n ? state\n : undefined;\n return {\n data:\n current?.data ??\n (retainDuringRefresh &&\n !current &&\n state?.client === client &&\n state.key === key\n ? state.data\n : undefined),\n error: current?.error,\n retry: () => setAttempt((n) => n + 1),\n };\n}\n\nfunction useAction(onError?: BillingPortalProps[\"onError\"]) {\n const [pending, setPending] = useState(false);\n const [error, setError] = useState<BillingPortalError>();\n const controller = useRef<AbortController | null>(null);\n useEffect(() => () => controller.current?.abort(), []);\n return {\n pending,\n error,\n run: async (action: (signal: AbortSignal) => Promise<void>) => {\n if (controller.current) return;\n const next = new AbortController();\n controller.current = next;\n setPending(true);\n setError(undefined);\n try {\n await action(next.signal);\n } catch (cause) {\n if (!next.signal.aborted) {\n const failure = asError(cause);\n setError(failure);\n onError?.(failure);\n }\n } finally {\n if (!next.signal.aborted) setPending(false);\n if (controller.current === next) controller.current = null;\n }\n },\n };\n}\n\nfunction Loading({ label = \"Loading billing data…\" }: { label?: string }) {\n return (\n <p className=\"nzp-empty\" role=\"status\">\n {label}\n </p>\n );\n}\nfunction Failure({\n error,\n retry,\n reconnect,\n}: {\n error: BillingPortalError;\n retry?: () => void;\n reconnect?: () => void;\n}) {\n const action = error.code === \"unauthorized\" ? (reconnect ?? retry) : retry;\n return (\n <div role=\"alert\" className=\"nzp-error\">\n <span>{error.message}</span>\n {action && (\n <button type=\"button\" onClick={action}>\n {error.code === \"unauthorized\" ? \"Reconnect\" : \"Try again\"}\n </button>\n )}\n </div>\n );\n}\nfunction money(cents: Cents, currency: string, locale: string) {\n const formatter = new Intl.NumberFormat(locale, {\n style: \"currency\",\n currency,\n });\n const digits = formatter.resolvedOptions().maximumFractionDigits ?? 2;\n return formatter.format(Number(cents) / 10 ** digits);\n}\nfunction date(value: string | null, locale: string, timeZone?: string) {\n if (!value) return \"—\";\n // An invoice date is a calendar date, not midnight in the viewer's timezone.\n const dateOnly = /^\\d{4}-\\d{2}-\\d{2}$/.test(value);\n const zone = timeZone?.startsWith(\"TZ_\")\n ? (portalTimezones[timeZone] ?? \"UTC\")\n : (timeZone ?? \"UTC\");\n return new Intl.DateTimeFormat(locale, {\n dateStyle: \"medium\",\n timeZone: dateOnly ? \"UTC\" : zone,\n }).format(new Date(value));\n}\nconst planName = (subscription: Subscription) =>\n subscription.name ||\n subscription.plan.invoiceDisplayName ||\n subscription.plan.name;\nconst intervals: Record<string, string> = {\n weekly: \"week\",\n monthly: \"month\",\n quarterly: \"quarter\",\n semiannual: \"six months\",\n yearly: \"year\",\n};\n\ntype View =\n | { kind: \"overview\" }\n | { kind: \"usage\"; subscription: Subscription }\n | { kind: \"edit\" }\n | { kind: \"wallet\"; wallet: Wallet };\ntype SectionProps = {\n client: PortalClient;\n locale: string;\n reconnect: () => void;\n onError?: BillingPortalProps[\"onError\"];\n cancellationActions?: CancellationActions;\n planChangeActions?: PlanChangeActions;\n nonce?: string;\n};\nfunction Portal(props: SectionProps) {\n const { client, locale, reconnect, onError } = props;\n const { data, error, retry } = useQuery<Identity>(\n client,\n identityQuery,\n {},\n onError,\n );\n const [view, setView] = useState<View>({ kind: \"overview\" });\n const [notice, setNotice] = useState(\"\");\n const back = () => setView({ kind: \"overview\" });\n if (error)\n return <Failure error={error} retry={retry} reconnect={reconnect} />;\n if (!data) return <Loading />;\n const customer = data.customerPortalUser;\n return (\n <>\n <header>\n <div className=\"nzp-row\">\n <span className=\"nzp-muted\">\n {data.customerPortalOrganization.name}\n </span>\n <button type=\"button\" onClick={reconnect}>\n Refresh portal\n </button>\n </div>\n <h2>Billing portal</h2>\n <p className=\"nzp-muted\">\n {customer.name ||\n [customer.firstname, customer.lastname].filter(Boolean).join(\" \") ||\n customer.email ||\n \"Your account\"}\n </p>\n </header>\n {notice && <p role=\"status\">{notice}</p>}\n {view.kind !== \"overview\" && (\n <button type=\"button\" onClick={back}>\n ← Back to overview\n </button>\n )}\n {view.kind === \"overview\" && (\n <>\n <Subscriptions\n {...props}\n timezone={customer.applicableTimezone}\n onUsage={(subscription) => setView({ kind: \"usage\", subscription })}\n />\n <Wallets\n {...props}\n onWallet={(wallet) => setView({ kind: \"wallet\", wallet })}\n />\n <section aria-label=\"Billing information\">\n <div className=\"nzp-row\">\n <h3>Billing information</h3>\n <button type=\"button\" onClick={() => setView({ kind: \"edit\" })}>\n Edit billing information\n </button>\n </div>\n <dl>\n <div>\n <dt>Account name</dt>\n <dd>{customer.name || \"Not provided\"}</dd>\n </div>\n <div>\n <dt>Email</dt>\n <dd>{customer.email || \"Not provided\"}</dd>\n </div>\n <div>\n <dt>Legal name</dt>\n <dd>{customer.legalName || \"Not provided\"}</dd>\n </div>\n <div>\n <dt>Tax ID</dt>\n <dd>{customer.taxIdentificationNumber || \"Not provided\"}</dd>\n </div>\n <div>\n <dt>Billing address</dt>\n <dd>\n {[\n customer.addressLine1,\n customer.addressLine2,\n customer.city,\n customer.state,\n customer.zipcode,\n customer.country,\n ]\n .filter(Boolean)\n .join(\", \") || \"Not provided\"}\n </dd>\n </div>\n </dl>\n </section>\n <Invoices {...props} />\n </>\n )}\n {view.kind === \"usage\" && (\n <UsageDetails\n {...props}\n subscription={view.subscription}\n timezone={customer.applicableTimezone}\n />\n )}\n {view.kind === \"edit\" && (\n <CustomerForm\n {...props}\n customer={customer}\n onSaved={() => {\n setNotice(\"Billing information saved.\");\n back();\n retry();\n }}\n onCancel={back}\n />\n )}\n {view.kind === \"wallet\" && (\n <WalletTopUp\n {...props}\n wallet={view.wallet}\n onCreated={() => {\n setNotice(\n \"Top-up requested. Your balance updates after payment is processed.\",\n );\n back();\n }}\n />\n )}\n <footer>Powered by Nozle</footer>\n </>\n );\n}\n\nfunction Pager({\n page,\n total,\n setPage,\n}: {\n page: number;\n total: number;\n setPage: (page: number) => void;\n}) {\n if (total <= 1) return null;\n return (\n <div className=\"nzp-actions\" aria-label=\"Pagination\">\n <button\n type=\"button\"\n disabled={page <= 1}\n onClick={() => setPage(page - 1)}\n >\n Previous\n </button>\n <span>\n Page {page} of {total}\n </span>\n <button\n type=\"button\"\n disabled={page >= total}\n onClick={() => setPage(page + 1)}\n >\n Next\n </button>\n </div>\n );\n}\nfunction Subscriptions({\n client,\n locale,\n timezone,\n reconnect,\n onError,\n onUsage,\n cancellationActions,\n planChangeActions,\n nonce,\n}: SectionProps & {\n timezone: string;\n onUsage: (subscription: Subscription) => void;\n}) {\n const [page, setPage] = useState(1);\n const [updated, setUpdated] = useState<Record<string, Subscription>>({});\n const { data, error, retry } = useQuery<{\n customerPortalSubscriptions: Page<Subscription>;\n }>(client, subscriptionsQuery, { page }, onError, true);\n const result = data?.customerPortalSubscriptions;\n useEffect(() => setUpdated({}), [result]);\n return (\n <section aria-label=\"Subscriptions\">\n <h3>Subscriptions</h3>\n {error ? (\n <Failure error={error} retry={retry} reconnect={reconnect} />\n ) : !result ? (\n <Loading />\n ) : (\n <>\n {result.collection.length === 0 ? (\n <p className=\"nzp-empty\">No active subscriptions.</p>\n ) : (\n <div className=\"nzp-stack\">\n {result.collection\n .map((item) => updated[item.id] ?? item)\n .map((subscription) => (\n <article\n className=\"nzp-card\"\n data-subscription-id={subscription.externalId}\n key={subscription.externalId || subscription.id}\n >\n <div className=\"nzp-row\">\n <h3>{planName(subscription)}</h3>\n <span className=\"nzp-badge\">\n {subscription.endingAt ? \"Scheduled to end\" : \"Active\"}\n </span>\n </div>\n <div className=\"nzp-price\">\n {money(\n subscription.plan.amountCents,\n subscription.plan.amountCurrency,\n locale,\n )}{\" \"}\n <span className=\"nzp-muted\">\n /{\" \"}\n {intervals[subscription.plan.interval] ||\n subscription.plan.interval}\n </span>\n </div>\n <div className=\"nzp-row\">\n <p className=\"nzp-muted\">\n Base price, excluding tax and usage\n <br />\n Current period ends{\" \"}\n {date(\n subscription.currentBillingPeriodEndingAt,\n locale,\n timezone,\n )}\n </p>\n <button\n type=\"button\"\n onClick={() => onUsage(subscription)}\n >\n View usage\n </button>\n </div>\n {subscription.endingAt && (\n <p>\n Cancels on{\" \"}\n {date(subscription.endingAt, locale, timezone)}\n </p>\n )}\n {subscription.nextSubscription?.status === \"pending\" && (\n <p>\n Scheduled plan:{\" \"}\n {subscription.nextSubscription.plan.name}\n </p>\n )}\n {cancellationActions && subscription.externalId && (\n <CancellationControl\n subscription={cancellationState(subscription)}\n actions={cancellationActions}\n locale={locale}\n timezone={timezone}\n nonce={nonce}\n onError={onError}\n onChanged={retry}\n refresh={async (signal) => {\n const result = await client.request<{\n customerPortalSubscription: Subscription | null;\n }>(\n subscriptionQuery,\n { id: subscription.id },\n signal,\n );\n if (\n !signal.aborted &&\n result.customerPortalSubscription\n ) {\n const fresh = result.customerPortalSubscription;\n setUpdated((previous) => ({\n ...previous,\n [fresh.id]: fresh,\n }));\n }\n return result.customerPortalSubscription\n ? cancellationState(\n result.customerPortalSubscription,\n )\n : null;\n }}\n />\n )}\n {planChangeActions && subscription.externalId && (\n <PlanChangeControl\n subscriptionId={subscription.externalId}\n refreshKey={`${subscription.id}:${subscription.endingAt ?? \"\"}:${subscription.nextSubscription?.id ?? \"\"}:${subscription.plan.code}`}\n actions={planChangeActions}\n locale={locale}\n timezone={timezone}\n nonce={nonce}\n onError={onError}\n onChanged={retry}\n />\n )}\n </article>\n ))}\n </div>\n )}\n <Pager\n page={page}\n total={result.metadata.totalPages}\n setPage={setPage}\n />\n </>\n )}\n </section>\n );\n}\nfunction cancellationState(\n subscription: Subscription,\n): CancellationSubscription {\n return {\n id: subscription.id,\n externalId: subscription.externalId,\n name: planName(subscription),\n status: subscription.status,\n endingAt: subscription.endingAt,\n pendingPlanName:\n subscription.nextSubscription?.status === \"pending\"\n ? subscription.nextSubscription.plan.name\n : null,\n };\n}\nfunction UsageDetails({\n client,\n locale,\n reconnect,\n onError,\n subscription,\n timezone,\n}: SectionProps & { subscription: Subscription; timezone: string }) {\n const { data, error, retry } = useQuery<{\n customerPortalCustomerUsage: Usage;\n }>(client, usageQuery, { subscriptionId: subscription.id }, onError);\n const usage = data?.customerPortalCustomerUsage;\n return (\n <section aria-label=\"Subscription usage\">\n <h3>{planName(subscription)} · Usage</h3>\n {error ? (\n <Failure error={error} retry={retry} reconnect={reconnect} />\n ) : !usage ? (\n <Loading />\n ) : (\n <>\n <p className=\"nzp-muted\">\n {date(usage.fromDatetime, locale, timezone)} –{\" \"}\n {date(usage.toDatetime, locale, timezone)}\n </p>\n <p className=\"nzp-price\">\n {money(usage.amountCents, usage.currency, locale)}\n </p>\n <p className=\"nzp-muted\">Current usage, excluding tax</p>\n {usage.chargesUsage.length ? (\n <div className=\"nzp-table\">\n <table>\n <thead>\n <tr>\n <th>Feature</th>\n <th>Units</th>\n <th>Amount</th>\n </tr>\n </thead>\n <tbody>\n {usage.chargesUsage.map((charge, index) => (\n <tr key={`${charge.id}-${index}`}>\n <td>\n {charge.charge?.invoiceDisplayName ||\n charge.feature?.name ||\n charge.feature?.code ||\n \"Usage\"}\n </td>\n <td>{charge.units}</td>\n <td>\n {money(charge.amountCents, usage.currency, locale)}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n ) : (\n <p className=\"nzp-empty\">\n No usage recorded for this billing period.\n </p>\n )}\n </>\n )}\n </section>\n );\n}\n\nfunction Invoices(props: SectionProps) {\n const { client, locale, reconnect, onError } = props;\n const [search, setSearch] = useState(\"\");\n const [filter, setFilter] = useState({ page: 1, searchTerm: \"\" });\n const { data, error, retry } = useQuery<{\n customerPortalInvoices: Page<Invoice>;\n }>(client, invoicesQuery, filter, onError);\n const result = data?.customerPortalInvoices;\n return (\n <section aria-label=\"Invoice history\">\n <h3>Invoice history</h3>\n <form\n className=\"nzp-actions\"\n onSubmit={(event) => {\n event.preventDefault();\n setFilter({ page: 1, searchTerm: search.trim() });\n }}\n >\n <label>\n Search invoices\n <input\n type=\"search\"\n value={search}\n onChange={(event) => setSearch(event.target.value)}\n />\n </label>\n <button type=\"submit\">Search</button>\n </form>\n {error ? (\n <Failure error={error} retry={retry} reconnect={reconnect} />\n ) : !result ? (\n <Loading />\n ) : (\n <>\n {!result.collection.length ? (\n <p className=\"nzp-empty\">\n {filter.searchTerm\n ? \"No invoices match your search.\"\n : \"No invoices yet.\"}\n </p>\n ) : (\n <div className=\"nzp-table\">\n <table>\n <thead>\n <tr>\n <th>Invoice</th>\n <th>Date</th>\n <th>Amount</th>\n <th>Status</th>\n <th>PDF</th>\n </tr>\n </thead>\n <tbody>\n {result.collection.map((invoice) => (\n <tr key={invoice.id}>\n <td>{invoice.number}</td>\n <td>{date(invoice.issuingDate, locale)}</td>\n <td>\n {money(\n invoice.totalAmountCents,\n invoice.currency,\n locale,\n )}\n </td>\n <td>\n {invoice.paymentOverdue\n ? \"Overdue\"\n : invoice.paymentStatus === \"succeeded\"\n ? \"Paid\"\n : invoice.paymentDisputeLostAt\n ? \"Disputed\"\n : \"To pay\"}\n </td>\n <td>\n <InvoiceDownload {...props} invoice={invoice} />\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n <Pager\n page={filter.page}\n total={result.metadata.totalPages}\n setPage={(page) => setFilter({ ...filter, page })}\n />\n </>\n )}\n </section>\n );\n}\nfunction InvoiceDownload({\n client,\n invoice,\n onError,\n reconnect,\n}: SectionProps & { invoice: Invoice }) {\n const [url, setUrl] = useState(\"\");\n const [generating, setGenerating] = useState(false);\n const action = useAction(onError);\n const download = () =>\n action.run(async (signal) => {\n const data = await client.request<{\n downloadCustomerPortalInvoice: { fileUrl: string | null };\n }>(downloadInvoiceMutation, { input: { id: invoice.id } }, signal);\n if (signal.aborted) return;\n const file = data.downloadCustomerPortalInvoice.fileUrl;\n if (file) {\n setUrl(invoiceDownloadUrl(file));\n setGenerating(false);\n } else setGenerating(true);\n });\n return (\n <>\n {url ? (\n <a\n className=\"nzp-link\"\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n referrerPolicy=\"no-referrer\"\n >\n Open PDF\n </a>\n ) : (\n <button\n type=\"button\"\n disabled={action.pending}\n aria-label={`Download invoice ${invoice.number}`}\n onClick={download}\n >\n {action.pending\n ? \"Preparing…\"\n : generating\n ? \"Check PDF\"\n : \"Download\"}\n </button>\n )}\n {generating && (\n <p className=\"nzp-muted\" role=\"status\">\n PDF is being generated. Check again shortly.\n </p>\n )}\n {action.error && <Failure error={action.error} reconnect={reconnect} />}\n </>\n );\n}\n\nconst customerFields = [\n [\"name\", \"Account name\"],\n [\"firstname\", \"First name\"],\n [\"lastname\", \"Last name\"],\n [\"email\", \"Email\"],\n [\"legalName\", \"Legal name\"],\n [\"taxIdentificationNumber\", \"Tax ID\"],\n [\"addressLine1\", \"Address line 1\"],\n [\"addressLine2\", \"Address line 2\"],\n [\"city\", \"City\"],\n [\"state\", \"State / province\"],\n [\"zipcode\", \"Postal code\"],\n [\"country\", \"Country code\"],\n] as const;\nfunction CustomerForm({\n client,\n customer,\n reconnect,\n onError,\n onSaved,\n onCancel,\n}: SectionProps & {\n customer: Customer;\n onSaved: () => void;\n onCancel: () => void;\n}) {\n const [values, setValues] = useState(\n () =>\n Object.fromEntries(\n customerFields.map(([key]) => [key, customer[key] ?? \"\"]),\n ) as Record<(typeof customerFields)[number][0], string>,\n );\n const action = useAction(onError);\n const submit = (event: FormEvent) => {\n event.preventDefault();\n // Send only edited, supported fields. No customer ID or unrelated shipping changes.\n const input = Object.fromEntries(\n customerFields\n .filter(([key]) => values[key] !== (customer[key] ?? \"\"))\n .map(([key]) => [\n key,\n key === \"country\" ? values[key].toUpperCase() || null : values[key],\n ]),\n );\n void action.run(async (signal) => {\n await client.request(updateCustomerMutation, { input }, signal);\n if (!signal.aborted) onSaved();\n });\n };\n return (\n <section aria-label=\"Edit billing information\">\n <h3>Edit billing information</h3>\n <form onSubmit={submit}>\n <div className=\"nzp-fields\">\n {customerFields.map(([key, label]) => (\n <label key={key}>\n {label}\n <input\n type={key === \"email\" ? \"email\" : \"text\"}\n value={values[key]}\n disabled={action.pending}\n pattern={key === \"country\" ? \"[A-Za-z]{2}\" : undefined}\n maxLength={key === \"country\" ? 2 : 255}\n placeholder={key === \"country\" ? \"US\" : undefined}\n onChange={(event) =>\n setValues({ ...values, [key]: event.target.value })\n }\n />\n </label>\n ))}\n </div>\n {action.error && <Failure error={action.error} reconnect={reconnect} />}\n <div className=\"nzp-actions\">\n <button\n type=\"submit\"\n className=\"nzp-primary\"\n disabled={action.pending}\n >\n {action.pending ? \"Saving…\" : \"Save billing information\"}\n </button>\n <button type=\"button\" disabled={action.pending} onClick={onCancel}>\n Cancel\n </button>\n </div>\n </form>\n </section>\n );\n}\nfunction Wallets({\n client,\n locale,\n reconnect,\n onError,\n onWallet,\n}: SectionProps & { onWallet: (wallet: Wallet) => void }) {\n const [page, setPage] = useState(1);\n const { data, error, retry } = useQuery<{\n customerPortalWallets: Page<Wallet>;\n }>(client, walletsQuery, { page }, onError);\n const result = data?.customerPortalWallets;\n if (result && !result.collection.length) return null;\n return (\n <section aria-label=\"Wallets\">\n <h3>Wallets</h3>\n {error ? (\n <Failure error={error} retry={retry} reconnect={reconnect} />\n ) : !result ? (\n <Loading />\n ) : (\n <>\n <div className=\"nzp-stack\">\n {result.collection.map((wallet) => (\n <article className=\"nzp-card\" key={wallet.id}>\n <h3>{wallet.name || \"Prepaid credits\"}</h3>\n <div className=\"nzp-price\">\n {money(wallet.balanceCents, wallet.currency, locale)}\n </div>\n <div className=\"nzp-row\">\n <p className=\"nzp-muted\">\n {wallet.creditsBalance} credits available ·{\" \"}\n {wallet.consumedCredits} consumed\n </p>\n <button type=\"button\" onClick={() => onWallet(wallet)}>\n Add credits\n </button>\n </div>\n </article>\n ))}\n </div>\n <Pager\n page={page}\n total={result.metadata.totalPages}\n setPage={setPage}\n />\n </>\n )}\n </section>\n );\n}\nfunction WalletTopUp({\n client,\n locale,\n wallet,\n reconnect,\n onError,\n onCreated,\n}: SectionProps & { wallet: Wallet; onCreated: () => void }) {\n const [credits, setCredits] = useState(\"\");\n const action = useAction(onError);\n const digits =\n new Intl.NumberFormat(locale, {\n style: \"currency\",\n currency: wallet.currency,\n }).resolvedOptions().maximumFractionDigits ?? 2;\n const amountCents = walletAmountCents(credits, wallet.rateAmount, digits);\n const valid =\n amountCents !== null &&\n compareDecimalStrings(credits, \"0\") > 0 &&\n (wallet.paidTopUpMinAmountCents == null ||\n compareDecimalStrings(\n amountCents,\n String(wallet.paidTopUpMinAmountCents),\n ) >= 0) &&\n (wallet.paidTopUpMaxAmountCents == null ||\n compareDecimalStrings(\n amountCents,\n String(wallet.paidTopUpMaxAmountCents),\n ) <= 0);\n return (\n <section aria-label=\"Add credits\">\n <h3>Add credits · {wallet.name || \"Wallet\"}</h3>\n <p className=\"nzp-muted\">\n A paid top-up creates a billing transaction. Credits become available\n after payment is processed.\n </p>\n <form\n onSubmit={(event) => {\n event.preventDefault();\n if (valid)\n void action.run(async (signal) => {\n await client.request(\n topUpMutation,\n { input: { walletId: wallet.id, paidCredits: credits } },\n signal,\n );\n if (!signal.aborted) onCreated();\n });\n }}\n >\n <div className=\"nzp-fields\">\n <label>\n Credits to add\n <input\n inputMode=\"decimal\"\n maxLength={36}\n required\n value={credits}\n disabled={action.pending}\n onChange={(event) => setCredits(event.target.value)}\n />\n </label>\n </div>\n <p>\n {amountCents !== null\n ? money(amountCents, wallet.currency, locale)\n : \"—\"}{\" \"}\n excluding tax\n </p>\n {wallet.paidTopUpMinAmountCents != null && (\n <p className=\"nzp-muted\">\n Minimum{\" \"}\n {money(wallet.paidTopUpMinAmountCents, wallet.currency, locale)}\n </p>\n )}\n {wallet.paidTopUpMaxAmountCents != null && (\n <p className=\"nzp-muted\">\n Maximum{\" \"}\n {money(wallet.paidTopUpMaxAmountCents, wallet.currency, locale)}\n </p>\n )}\n {action.error && <Failure error={action.error} reconnect={reconnect} />}\n <div className=\"nzp-actions\">\n <button\n type=\"submit\"\n className=\"nzp-primary\"\n disabled={!valid || action.pending}\n >\n {action.pending ? \"Requesting…\" : \"Confirm paid top-up\"}\n </button>\n </div>\n </form>\n </section>\n );\n}\n","import { useEffect, useState } from \"react\";\nimport { useBillingContext } from '../provider.js';\n\nexport interface Plan {\n code: string;\n name: string;\n amount_cents: number;\n amount_currency: string;\n interval: string;\n}\n\nexport function usePlans() {\n const { client } = useBillingContext();\n const [plans, setPlans] = useState<Plan[]>([]);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n let cancelled = false;\n if (!client) {\n setIsLoading(false);\n return;\n }\n\n void client\n .catalogFetch(\"/api/v1/plans\")\n .then(async (response) => {\n if (!response.ok) throw new Error(`HTTP ${response.status}`);\n const data = (await response.json()) as { plans?: Plan[] };\n if (!cancelled) setPlans(data.plans ?? []);\n })\n .finally(() => {\n if (!cancelled) setIsLoading(false);\n });\n\n return () => {\n cancelled = true;\n };\n }, [client]);\n\n return { plans, isLoading };\n}\n","import { useCallback, useState } from 'react';\nimport { navigateToCheckout } from '../components/billing/checkout-navigation.js';\nimport { useBillingContext, type CheckoutResult } from '../provider.js';\n\nexport interface UseCheckoutResult {\n fetchClientSecret: (planCode: string, returnUrl?: string) => Promise<string | null>;\n checkout: CheckoutResult | null;\n isLoading: boolean;\n error: Error | null;\n}\n\nexport function useCheckout(): UseCheckoutResult {\n const { createCheckout } = useBillingContext();\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [checkout, setCheckout] = useState<CheckoutResult | null>(null);\n\n const fetchClientSecret = useCallback(\n async (planCode: string, returnUrl?: string): Promise<string | null> => {\n setIsLoading(true);\n setError(null);\n try {\n if (!createCheckout) {\n throw new Error('BillingProvider createCheckout callback is required for checkout');\n }\n const result = await createCheckout({\n planCode,\n returnUrl: returnUrl ?? window.location.href,\n });\n setCheckout(result);\n\n if ('client_secret' in result || 'clientSecret' in result) {\n const clientSecret = result.client_secret ?? result.clientSecret;\n if (clientSecret) return clientSecret;\n }\n if ('url' in result && result.url) {\n navigateToCheckout(result.url);\n return null;\n }\n if ('type' in result && result.type === 'hosted') {\n navigateToCheckout(result.payment_url);\n return null;\n }\n if ('type' in result && ['completed', 'scheduled', 'razorpay', 'processing'].includes(result.type)) {\n return null;\n }\n throw new Error('Checkout response did not include a supported result type');\n } catch (cause) {\n const checkoutError = cause instanceof Error ? cause : new Error(String(cause));\n setError(checkoutError);\n throw checkoutError;\n } finally {\n setIsLoading(false);\n }\n },\n [createCheckout],\n );\n\n return { fetchClientSecret, checkout, isLoading, error };\n}\n","'use client';\n\nimport React, { useState, useEffect, type CSSProperties } from 'react';\nimport {\n useOptionalBillingContext,\n type CheckoutResult,\n} from '../../provider.js';\nimport { handleCheckoutResult } from '../billing/CheckoutButton.js';\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface PricingPlan {\n code: string;\n name: string;\n amount_cents: number;\n amount_currency: string;\n interval: string;\n description?: string;\n}\n\nexport interface PricingTableProps {\n currentPlanCode?: string;\n plans?: PricingPlan[];\n features?: string[][];\n onSelect?: (plan: PricingPlan) => void;\n returnUrl?: string;\n onStripeClientSecret?: (clientSecret: string) => void;\n onCheckoutResult?: (result: CheckoutResult) => void;\n onCheckoutError?: (error: Error) => void;\n showToggle?: boolean;\n highlightPlan?: string;\n className?: string;\n enterpriseEmail?: string;\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nconst SYMBOLS: Record<string, string> = { USD: '$', EUR: '€', GBP: '£', JPY: '¥' };\n\nfunction fmtPrice(cents: number, cur: string): string {\n const s = SYMBOLS[cur] ?? cur + ' ';\n const val = cents % 100 === 0 ? String(cents / 100) : (cents / 100).toFixed(2);\n return `${s}${val}`;\n}\n\nfunction isEnterprise(p: PricingPlan): boolean {\n return /enterprise|custom/i.test(p.name + p.code);\n}\n\nfunction v(name: string, fb: string): string {\n return `var(${name}, ${fb})`;\n}\n\n// ─── CSS variable shortcuts ──────────────────────────────────────────────────\n\nconst C = {\n bg: v('--nozle-pricing-bg', v('--nozle-background', '#ffffff')),\n cardBg: v('--nozle-pricing-card-bg', v('--nozle-card', '#ffffff')),\n hl: v('--nozle-pricing-highlight', v('--nozle-primary', '#6366f1')),\n border: v('--nozle-pricing-border', v('--nozle-border', '#e5e7eb')),\n radius: v('--nozle-pricing-radius', v('--nozle-radius', '12px')),\n text: v('--nozle-foreground', '#111827'),\n muted: v('--nozle-muted-foreground', '#6b7280'),\n mutedBg: v('--nozle-muted', '#f3f4f6'),\n hlFg: v('--nozle-primary-foreground', '#ffffff'),\n};\n\n// ─── Check icon ──────────────────────────────────────────────────────────────\n\nfunction Check(): React.ReactElement {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" style={{ flexShrink: 0 }}>\n <path d=\"M3.5 8.5L6.5 11.5L12.5 4.5\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n\n// ─── Toggle ──────────────────────────────────────────────────────────────────\n\nfunction Toggle({ isAnnual, onChange }: { isAnnual: boolean; onChange: (v: boolean) => void }) {\n const pill: CSSProperties = {\n display: 'inline-flex',\n borderRadius: '9999px',\n padding: '4px',\n background: C.mutedBg,\n gap: '2px',\n };\n const tab = (active: boolean): CSSProperties => ({\n padding: '8px 20px',\n borderRadius: '9999px',\n border: 'none',\n background: active ? C.cardBg : 'transparent',\n color: active ? C.text : C.muted,\n fontWeight: active ? 600 : 400,\n fontSize: '0.875rem',\n cursor: 'pointer',\n boxShadow: active ? '0 1px 3px rgba(0,0,0,0.08)' : 'none',\n transition: 'all 0.15s ease',\n });\n\n return (\n <div style={{ display: 'flex', justifyContent: 'center', marginBottom: '2.5rem' }}>\n <div style={pill}>\n <button onClick={() => onChange(false)} style={tab(!isAnnual)} aria-pressed={!isAnnual}>\n Monthly\n </button>\n <button onClick={() => onChange(true)} style={tab(isAnnual)} aria-pressed={isAnnual}>\n Annual\n <span style={{\n marginLeft: '6px',\n fontSize: '0.7rem',\n fontWeight: 600,\n color: isAnnual ? C.hl : C.muted,\n }}>\n Save 20%\n </span>\n </button>\n </div>\n </div>\n );\n}\n\n// ─── Card ────────────────────────────────────────────────────────────────────\n\ninterface CardProps {\n plan: PricingPlan;\n features?: string[];\n isCurrent: boolean;\n isHighlighted: boolean;\n isEnt: boolean;\n enterpriseEmail?: string;\n onSelect?: () => void;\n}\n\nfunction Card({\n plan,\n features,\n isCurrent,\n isHighlighted,\n isEnt,\n enterpriseEmail,\n onSelect,\n}: CardProps): React.ReactElement {\n const [hover, setHover] = useState(false);\n\n const shadow = isHighlighted\n ? '0 8px 28px rgba(99,102,241,0.12), 0 2px 8px rgba(99,102,241,0.06)'\n : hover\n ? '0 8px 24px rgba(0,0,0,0.06), 0 2px 8px rgba(0,0,0,0.03)'\n : '0 1px 3px rgba(0,0,0,0.04), 0 1px 2px rgba(0,0,0,0.03)';\n\n const interval = plan.interval === 'yearly' ? '/year' : '/month';\n\n const handleClick = () => {\n if (isCurrent) return;\n if (isEnt && enterpriseEmail) {\n window.location.href = `mailto:${enterpriseEmail}?subject=Enterprise Plan Inquiry`;\n return;\n }\n onSelect?.();\n };\n\n return (\n <div\n onMouseEnter={() => setHover(true)}\n onMouseLeave={() => setHover(false)}\n style={{\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n background: C.cardBg,\n border: `1px solid ${isHighlighted ? C.hl : C.border}`,\n borderTopWidth: isHighlighted ? '3px' : '1px',\n borderRadius: C.radius,\n padding: '2rem',\n transition: 'box-shadow 0.2s ease, transform 0.2s ease',\n boxShadow: shadow,\n transform: hover && !isCurrent ? 'translateY(-2px)' : 'none',\n }}\n >\n {/* Badge */}\n {isHighlighted && (\n <div style={{\n position: 'absolute',\n top: '-1px',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n background: C.hl,\n color: C.hlFg,\n fontSize: '0.7rem',\n fontWeight: 700,\n padding: '4px 12px',\n borderRadius: '9999px',\n letterSpacing: '0.025em',\n textTransform: 'uppercase',\n whiteSpace: 'nowrap',\n }}>\n {isCurrent ? 'Current Plan' : 'Most Popular'}\n </div>\n )}\n {isCurrent && !isHighlighted && (\n <div style={{\n position: 'absolute',\n top: '0',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n background: C.mutedBg,\n color: C.muted,\n fontSize: '0.7rem',\n fontWeight: 700,\n padding: '4px 12px',\n borderRadius: '9999px',\n letterSpacing: '0.025em',\n textTransform: 'uppercase',\n whiteSpace: 'nowrap',\n }}>\n Current Plan\n </div>\n )}\n\n {/* Plan name + description */}\n <div style={{ marginBottom: '1.25rem', marginTop: isHighlighted || isCurrent ? '0.5rem' : 0 }}>\n <h3 style={{\n fontSize: '1.25rem',\n fontWeight: 700,\n color: C.text,\n margin: 0,\n lineHeight: 1.3,\n }}>\n {plan.name}\n </h3>\n {plan.description && (\n <p style={{\n fontSize: '0.875rem',\n color: C.muted,\n margin: '6px 0 0',\n lineHeight: 1.5,\n }}>\n {plan.description}\n </p>\n )}\n </div>\n\n {/* Price */}\n <div style={{ marginBottom: '1.5rem' }}>\n {isEnt ? (\n <span style={{ fontSize: '2.25rem', fontWeight: 700, color: C.text, lineHeight: 1 }}>\n Custom\n </span>\n ) : (\n <div style={{ display: 'flex', alignItems: 'baseline', gap: '2px' }}>\n <span style={{ fontSize: '2.75rem', fontWeight: 700, color: C.text, lineHeight: 1, letterSpacing: '-0.025em' }}>\n {fmtPrice(plan.amount_cents, plan.amount_currency)}\n </span>\n <span style={{ fontSize: '0.9375rem', color: C.muted, marginLeft: '4px' }}>\n {interval}\n </span>\n </div>\n )}\n </div>\n\n {/* Features */}\n {features && features.length > 0 && (\n <ul style={{\n listStyle: 'none',\n padding: 0,\n margin: '0 0 2rem',\n display: 'flex',\n flexDirection: 'column',\n gap: '0.75rem',\n flex: 1,\n }}>\n {features.map((feat) => (\n <li key={feat} style={{\n display: 'flex',\n alignItems: 'flex-start',\n gap: '10px',\n fontSize: '0.875rem',\n color: C.text,\n lineHeight: 1.5,\n }}>\n <span style={{ color: C.hl, marginTop: '2px' }}><Check /></span>\n <span>{feat}</span>\n </li>\n ))}\n </ul>\n )}\n\n {/* Spacer if no features */}\n {(!features || features.length === 0) && <div style={{ flex: 1 }} />}\n\n {/* CTA */}\n {onSelect && (\n <CTAButton\n onClick={handleClick}\n disabled={isCurrent}\n variant={isCurrent ? 'current' : isEnt ? 'outline' : isHighlighted ? 'primary' : 'secondary'}\n >\n {isCurrent ? 'Current Plan' : isEnt ? 'Contact Sales' : `Get ${plan.name}`}\n </CTAButton>\n )}\n </div>\n );\n}\n\n// ─── CTA Button ──────────────────────────────────────────────────────────────\n\ntype ButtonVariant = 'primary' | 'secondary' | 'outline' | 'current';\n\nfunction CTAButton({\n children,\n onClick,\n disabled,\n variant,\n}: {\n children: React.ReactNode;\n onClick: () => void;\n disabled?: boolean;\n variant: ButtonVariant;\n}) {\n const [hover, setHover] = useState(false);\n\n const base: CSSProperties = {\n width: '100%',\n padding: '12px 24px',\n borderRadius: '10px',\n fontSize: '0.9375rem',\n fontWeight: 600,\n cursor: disabled ? 'default' : 'pointer',\n border: 'none',\n transition: 'all 0.15s ease',\n lineHeight: 1.4,\n };\n\n const variants: Record<ButtonVariant, CSSProperties> = {\n primary: {\n background: hover && !disabled ? '#4f46e5' : C.hl,\n color: C.hlFg,\n },\n secondary: {\n background: hover && !disabled ? '#f0f0f3' : C.mutedBg,\n color: C.text,\n border: `1px solid ${C.border}`,\n },\n outline: {\n background: hover && !disabled ? 'rgba(99,102,241,0.04)' : 'transparent',\n color: C.hl,\n border: `1.5px solid ${C.hl}`,\n },\n current: {\n background: C.mutedBg,\n color: C.muted,\n },\n };\n\n return (\n <button\n onClick={disabled ? undefined : onClick}\n disabled={disabled}\n onMouseEnter={() => setHover(true)}\n onMouseLeave={() => setHover(false)}\n style={{ ...base, ...variants[variant] }}\n >\n {children}\n </button>\n );\n}\n\n// ─── Loading skeleton ────────────────────────────────────────────────────────\n\nfunction Skeleton(): React.ReactElement {\n return (\n <div style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fit, minmax(220px, 1fr))',\n gap: '1.5rem',\n }}>\n {[0, 1, 2].map((i) => (\n <div key={i} style={{\n background: C.cardBg,\n border: `1px solid ${C.border}`,\n borderRadius: C.radius,\n padding: '2rem',\n height: '380px',\n }}>\n <div style={{ height: 20, width: '40%', borderRadius: 6, background: '#f0f0f0', marginBottom: 12 }} />\n <div style={{ height: 40, width: '50%', borderRadius: 6, background: '#f0f0f0', marginBottom: 24 }} />\n <div style={{ height: 14, width: '80%', borderRadius: 6, background: '#f0f0f0', marginBottom: 10 }} />\n <div style={{ height: 14, width: '70%', borderRadius: 6, background: '#f0f0f0', marginBottom: 10 }} />\n <div style={{ height: 14, width: '60%', borderRadius: 6, background: '#f0f0f0' }} />\n </div>\n ))}\n </div>\n );\n}\n\n// ─── Main Component ──────────────────────────────────────────────────────────\n\nexport function PricingTable({\n currentPlanCode,\n plans: propPlans,\n features,\n onSelect,\n returnUrl,\n onStripeClientSecret,\n onCheckoutResult,\n onCheckoutError,\n showToggle = true,\n highlightPlan,\n className,\n enterpriseEmail,\n}: PricingTableProps): React.ReactElement {\n const billing = useOptionalBillingContext();\n const client = billing?.client;\n const [plans, setPlans] = useState<PricingPlan[]>(propPlans ?? []);\n const [currentPlan, setCurrentPlan] = useState<string | null>(currentPlanCode ?? null);\n const [isAnnual, setIsAnnual] = useState(false);\n const [loading, setLoading] = useState(!propPlans);\n const [processing, setProcessing] = useState(false);\n const [checkoutError, setCheckoutError] = useState<string | null>(null);\n\n useEffect(() => {\n if (propPlans) { setPlans(propPlans); return; }\n if (!client) {\n setLoading(false);\n setCheckoutError('BillingProvider with a publishableKey is required to load plans');\n return;\n }\n let cancelled = false;\n client.catalogFetch('/api/v1/plans').then(async (res) => {\n if (!cancelled && res.ok) {\n const data = await res.json();\n setPlans(data.plans || []);\n }\n }).finally(() => { if (!cancelled) setLoading(false); });\n return () => { cancelled = true; };\n }, [client, propPlans]);\n\n useEffect(() => {\n if (currentPlanCode !== undefined) setCurrentPlan(currentPlanCode);\n }, [currentPlanCode]);\n\n async function selectPlan(plan: PricingPlan): Promise<void> {\n setCheckoutError(null);\n if (onSelect) {\n onSelect(plan);\n return;\n }\n try {\n if (!billing?.createCheckout) {\n throw new Error('BillingProvider createCheckout callback is required for checkout');\n }\n const result = await billing.createCheckout({\n planCode: plan.code,\n returnUrl: returnUrl ?? window.location.href,\n });\n onCheckoutResult?.(result);\n await handleCheckoutResult(result, {\n onStripeClientSecret,\n verifyCheckout: billing?.verifyCheckout,\n getCheckoutStatus: billing?.getCheckoutStatus,\n onProcessing: () => setProcessing(true),\n onSuccess: () => setProcessing(false),\n onComplete: () => setProcessing(false),\n });\n } catch (cause) {\n const error = cause instanceof Error ? cause : new Error('Checkout failed');\n setCheckoutError(error.message);\n onCheckoutError?.(error);\n }\n }\n\n const hasAnnual = plans.some(p => p.interval === 'yearly');\n const filtered = showToggle && hasAnnual\n ? plans.filter(p => p.interval === (isAnnual ? 'yearly' : 'monthly') || isEnterprise(p))\n : plans;\n\n if (loading) return <Skeleton />;\n\n return (\n <div className={className} style={{\n fontFamily: \"system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n color: C.text,\n background: C.bg,\n }}>\n {showToggle && hasAnnual && (\n <Toggle isAnnual={isAnnual} onChange={setIsAnnual} />\n )}\n\n {processing && <p role=\"status\">Payment is processing. Confirmation may take a little while.</p>}\n {checkoutError && <p role=\"alert\">{checkoutError}</p>}\n\n <div style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fit, minmax(220px, 1fr))',\n gap: '1.5rem',\n }}>\n {filtered.map((plan, i) => (\n <Card\n key={plan.code}\n plan={plan}\n features={features?.[i]}\n isCurrent={currentPlan === plan.code}\n isHighlighted={highlightPlan === plan.code}\n isEnt={isEnterprise(plan)}\n enterpriseEmail={enterpriseEmail}\n onSelect={() => void selectPlan(plan)}\n />\n ))}\n </div>\n </div>\n );\n}\n","/**\n * PlanCard — Individual pricing plan card component.\n * UI-01: Shows plan name, price, interval, features list, and CTA button.\n * Uses CSS variable theming with --nozle-* namespace.\n */\n\n\"use client\";\nimport React from \"react\";\n\nimport type { ReactNode } from \"react\";\nimport type { CreateCheckoutInput } from \"../../provider.js\";\n\nexport interface Plan {\n id: string;\n name: string;\n monthlyPrice: number;\n annualPrice: number;\n features: string[];\n description?: string;\n}\n\nexport interface PlanCardProps extends Plan {\n isAnnual: boolean;\n isCurrent: boolean;\n returnUrl?: string;\n onSelect?: (input: CreateCheckoutInput) => void;\n children?: ReactNode;\n}\n\n/**\n * PlanCard renders a single pricing plan.\n * Highlighted with aria-current=\"true\" when isCurrent=true.\n */\nexport function PlanCard({\n id,\n name,\n monthlyPrice,\n annualPrice,\n features,\n description,\n isAnnual,\n isCurrent,\n returnUrl,\n onSelect,\n}: PlanCardProps): React.ReactElement {\n const price = isAnnual ? annualPrice : monthlyPrice;\n const interval = isAnnual ? \"year\" : \"month\";\n\n return (\n <div\n data-testid={`plan-card-${id}`}\n aria-current={isCurrent ? \"true\" : undefined}\n style={{\n background: \"var(--nozle-background, var(--background))\",\n border: isCurrent\n ? \"2px solid var(--nozle-primary, var(--primary))\"\n : \"1px solid var(--nozle-border, var(--border))\",\n borderRadius: \"var(--nozle-radius, 0.5rem)\",\n padding: \"1.5rem\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"1rem\",\n }}\n className={isCurrent ? \"border-primary\" : \"\"}\n >\n <div>\n <h3\n style={{\n fontSize: \"1.25rem\",\n fontWeight: 600,\n color: \"var(--nozle-foreground, var(--foreground))\",\n margin: 0,\n }}\n >\n {name}\n </h3>\n {description && (\n <p\n style={{\n color: \"var(--nozle-muted-foreground, var(--muted-foreground))\",\n fontSize: \"0.875rem\",\n margin: \"0.25rem 0 0\",\n }}\n >\n {description}\n </p>\n )}\n </div>\n\n <div>\n <span\n style={{\n fontSize: \"2rem\",\n fontWeight: 700,\n color: \"var(--nozle-foreground, var(--foreground))\",\n }}\n >\n ${price}\n </span>\n <span\n style={{\n color: \"var(--nozle-muted-foreground, var(--muted-foreground))\",\n marginLeft: \"0.25rem\",\n }}\n >\n /{interval}\n </span>\n </div>\n\n <ul\n style={{\n listStyle: \"none\",\n padding: 0,\n margin: 0,\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"0.5rem\",\n flex: 1,\n }}\n >\n {features.map((feature) => (\n <li\n key={feature}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"0.5rem\",\n color: \"var(--nozle-foreground, var(--foreground))\",\n fontSize: \"0.875rem\",\n }}\n >\n <span\n style={{ color: \"var(--nozle-primary, var(--primary))\" }}\n aria-hidden=\"true\"\n >\n ✓\n </span>\n {feature}\n </li>\n ))}\n </ul>\n\n {onSelect && (\n <button\n onClick={() =>\n onSelect?.({\n planCode: id,\n returnUrl: returnUrl ?? window.location.href,\n })\n }\n style={{\n background: isCurrent\n ? \"var(--nozle-muted, var(--muted))\"\n : \"var(--nozle-primary, var(--primary))\",\n color: isCurrent\n ? \"var(--nozle-muted-foreground, var(--muted-foreground))\"\n : \"var(--nozle-primary-foreground, var(--primary-foreground))\",\n border: \"none\",\n borderRadius: \"var(--nozle-radius, 0.5rem)\",\n padding: \"0.75rem 1.5rem\",\n cursor: isCurrent ? \"default\" : \"pointer\",\n fontWeight: 500,\n width: \"100%\",\n }}\n disabled={isCurrent}\n aria-label={isCurrent ? `Current plan: ${name}` : `Select ${name}`}\n >\n {isCurrent ? \"Current Plan\" : \"Get Started\"}\n </button>\n )}\n </div>\n );\n}\n","/**\n * PlanComparison — Side-by-side feature comparison table.\n * UI-01: Renders shadcn-style table with plan names as headers and features as rows.\n * Check/cross icons for boolean values. Uses CSS variable theming.\n */\n\n\"use client\";\nimport React from \"react\";\n\nimport type { Plan } from \"./PlanCard.js\";\n\nexport interface ComparisonFeature {\n key: string;\n label: string;\n values: Record<string, string | boolean>;\n}\n\nexport interface PlanComparisonProps {\n plans: Plan[];\n features: ComparisonFeature[];\n}\n\n/**\n * PlanComparison renders a side-by-side feature comparison table.\n *\n * Usage:\n * ```tsx\n * <PlanComparison\n * plans={plans}\n * features={[\n * { key: 'api_calls', label: 'API Calls', values: { starter: '10K', pro: '100K' } },\n * { key: 'analytics', label: 'Analytics', values: { starter: false, pro: true } },\n * ]}\n * />\n * ```\n */\nexport function PlanComparison({\n plans,\n features,\n}: PlanComparisonProps): React.ReactElement {\n return (\n <div\n style={{\n overflowX: \"auto\",\n background: \"var(--nozle-background, var(--background))\",\n }}\n >\n <table\n style={{\n width: \"100%\",\n borderCollapse: \"collapse\",\n fontSize: \"0.875rem\",\n color: \"var(--nozle-foreground, var(--foreground))\",\n }}\n >\n <thead>\n <tr>\n <th\n style={{\n padding: \"0.75rem 1rem\",\n textAlign: \"left\",\n borderBottom: \"1px solid var(--nozle-border, var(--border))\",\n color:\n \"var(--nozle-muted-foreground, var(--muted-foreground))\",\n fontWeight: 500,\n }}\n >\n Feature\n </th>\n {plans.map((plan) => (\n <th\n key={plan.id}\n style={{\n padding: \"0.75rem 1rem\",\n textAlign: \"center\",\n borderBottom: \"1px solid var(--nozle-border, var(--border))\",\n fontWeight: 600,\n color: \"var(--nozle-foreground, var(--foreground))\",\n }}\n >\n {plan.name}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {features.map((feature) => (\n <tr key={feature.key}>\n <td\n style={{\n padding: \"0.75rem 1rem\",\n borderBottom: \"1px solid var(--nozle-border, var(--border))\",\n color: \"var(--nozle-foreground, var(--foreground))\",\n }}\n >\n {feature.label}\n </td>\n {plans.map((plan) => {\n const value = feature.values[plan.id];\n return (\n <td\n key={plan.id}\n style={{\n padding: \"0.75rem 1rem\",\n textAlign: \"center\",\n borderBottom:\n \"1px solid var(--nozle-border, var(--border))\",\n }}\n >\n {typeof value === \"boolean\" ? (\n value ? (\n <span\n style={{\n color: \"var(--nozle-primary, var(--primary))\",\n }}\n aria-label=\"Included\"\n >\n ✓\n </span>\n ) : (\n <span\n style={{\n color:\n \"var(--nozle-muted-foreground, var(--muted-foreground))\",\n }}\n aria-label=\"Not included\"\n >\n ✕\n </span>\n )\n ) : (\n <span>{value ?? \"—\"}</span>\n )}\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useState } from \"react\";\nimport { UpgradeModal, type ProrationPreview } from \"./UpgradeModal.js\";\n\nexport interface UpgradeButtonProps {\n planCode: string;\n returnUrl?: string;\n subscriptionId?: string;\n quoteId?: string;\n idempotencyKey?: string;\n preview?: ProrationPreview;\n label?: string;\n className?: string;\n style?: React.CSSProperties;\n onStripeClientSecret?: (clientSecret: string) => void;\n onCheckoutStarted?: () => void;\n onDowngradeScheduled?: () => void;\n onUpgraded?: () => void;\n onError?: (error: Error) => void;\n}\n\nexport function UpgradeButton({\n planCode,\n returnUrl,\n subscriptionId,\n quoteId,\n idempotencyKey,\n preview,\n label = \"Upgrade\",\n className,\n style,\n onStripeClientSecret,\n onCheckoutStarted,\n onDowngradeScheduled,\n onUpgraded,\n onError,\n}: UpgradeButtonProps): React.ReactElement {\n const [isOpen, setIsOpen] = useState(false);\n\n return (\n <>\n <button\n type=\"button\"\n onClick={() => setIsOpen(true)}\n className={className}\n style={{\n padding: \"0.75rem 1.5rem\",\n borderRadius: \"var(--nozle-radius, 0.5rem)\",\n border: \"none\",\n background: \"var(--nozle-primary, var(--primary))\",\n color: \"var(--nozle-primary-foreground, var(--primary-foreground))\",\n cursor: \"pointer\",\n fontWeight: 500,\n ...style,\n }}\n >\n {label}\n </button>\n\n <UpgradeModal\n isOpen={isOpen}\n planCode={planCode}\n returnUrl={returnUrl}\n subscriptionId={subscriptionId}\n quoteId={quoteId}\n idempotencyKey={idempotencyKey}\n preview={preview}\n onStripeClientSecret={onStripeClientSecret}\n onCheckoutStarted={() => {\n setIsOpen(false);\n onCheckoutStarted?.();\n }}\n onCompleted={() => {\n setIsOpen(false);\n onUpgraded?.();\n }}\n onScheduled={() => {\n setIsOpen(false);\n onDowngradeScheduled?.();\n }}\n onError={onError}\n onCancel={() => setIsOpen(false)}\n />\n </>\n );\n}\n","/**\n * Presentational entitlement gate. The merchant backend owns entitlement\n * retrieval; callers pass the resulting state into this component.\n */\n\n\"use client\";\n\nimport React, { type ReactNode } from \"react\";\n\nexport interface FeatureGateProps {\n allowed: boolean;\n loading?: boolean;\n fallback?: ReactNode;\n children: ReactNode;\n}\n\nexport function FeatureGate({\n allowed,\n loading = false,\n fallback = null,\n children,\n}: FeatureGateProps): React.ReactElement | null {\n if (loading) return null;\n if (!allowed) return <>{fallback}</>;\n return <>{children}</>;\n}\n","/**\n * UsageGate — Renders children if usage is below limit.\n * UI-03: Renders fallback when usage >= limit.\n * Pure render logic — caller provides usage and limit values.\n */\n\n\"use client\";\n\nimport React, { type ReactNode } from \"react\";\n\nexport interface UsageGateProps {\n /** Current usage value */\n usage: number;\n /** Usage limit */\n limit: number;\n /** Rendered when usage is at or above limit. Defaults to null. */\n fallback?: ReactNode;\n /** Content to show when usage is below limit */\n children: ReactNode;\n}\n\n/**\n * UsageGate renders children only when current usage is below the limit.\n * When usage >= limit, renders fallback.\n *\n * Usage:\n * ```tsx\n * <UsageGate usage={currentUsage} limit={plan.apiCallLimit} fallback={<UpgradePrompt />}>\n * <ApiCallButton />\n * </UsageGate>\n * ```\n */\nexport function UsageGate({\n usage,\n limit,\n fallback = null,\n children,\n}: UsageGateProps): React.ReactElement {\n if (usage >= limit) {\n return <>{fallback}</>;\n }\n\n return <>{children}</>;\n}\n","/**\n * PlanGate — Renders children if customer's plan is in the allowed list.\n * UI-03: Pure render logic — caller provides currentPlan and allowedPlans.\n * Renders fallback when customer is not on an allowed plan tier.\n */\n\n\"use client\";\n\nimport React, { type ReactNode } from \"react\";\n\nexport interface PlanGateProps {\n /** The customer's current plan identifier */\n currentPlan: string;\n /** List of plan identifiers that are allowed to see the children */\n allowedPlans: string[];\n /** Rendered when customer is not on an allowed plan. Defaults to null. */\n fallback?: ReactNode;\n /** Content to show when customer is on an allowed plan */\n children: ReactNode;\n}\n\n/**\n * PlanGate renders children only when the customer's currentPlan is in allowedPlans.\n * When not on an allowed plan, renders fallback.\n *\n * Usage:\n * ```tsx\n * <PlanGate\n * currentPlan={customer.plan}\n * allowedPlans={['pro', 'enterprise']}\n * fallback={<UpgradePrompt planName=\"Pro\" />}\n * >\n * <ProFeature />\n * </PlanGate>\n * ```\n */\nexport function PlanGate({\n currentPlan,\n allowedPlans,\n fallback = null,\n children,\n}: PlanGateProps): React.ReactElement {\n if (!allowedPlans.includes(currentPlan)) {\n return <>{fallback}</>;\n }\n\n return <>{children}</>;\n}\n","/**\n * UpgradePrompt — Reusable upgrade message component.\n * UI-03: Shows plan name + upgrade button; used as default fallback for LockedOverlay.\n * Uses CSS variable theming with --nozle-* namespace.\n */\n\n\"use client\";\n\nimport React from \"react\";\n\nexport interface UpgradePromptProps {\n text?: string;\n planName?: string;\n onUpgrade?: () => void;\n}\n\n/**\n * UpgradePrompt renders an upgrade call-to-action with a message and button.\n * Used as default fallback in LockedOverlay and gate components.\n */\nexport function UpgradePrompt({\n text = \"Upgrade to access this feature\",\n planName,\n onUpgrade,\n}: UpgradePromptProps): React.ReactElement {\n const displayText = planName\n ? `Upgrade to ${planName} to access this feature`\n : text;\n\n function handleUpgrade(): void {\n if (onUpgrade) {\n onUpgrade();\n } else {\n window.location.href = \"/upgrade\";\n }\n }\n\n return (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n gap: \"0.75rem\",\n padding: \"1rem\",\n textAlign: \"center\",\n }}\n >\n <p\n style={{\n color: \"var(--nozle-foreground, var(--foreground))\",\n fontSize: \"0.875rem\",\n margin: 0,\n }}\n >\n {displayText}\n </p>\n <button\n onClick={handleUpgrade}\n style={{\n padding: \"0.5rem 1.25rem\",\n borderRadius: \"var(--nozle-radius, 0.5rem)\",\n border: \"none\",\n background: \"var(--nozle-primary, var(--primary))\",\n color: \"var(--nozle-primary-foreground, var(--primary-foreground))\",\n cursor: \"pointer\",\n fontWeight: 500,\n fontSize: \"0.875rem\",\n }}\n >\n Upgrade\n </button>\n </div>\n );\n}\n","/**\n * LockedOverlay — Wraps children with a blur filter + upgrade CTA overlay when locked.\n * UI-03: Applies CSS blur(4px) to children with an upgrade prompt overlay.\n * Uses CSS variable theming with --nozle-* namespace.\n */\n\n\"use client\";\n\nimport React, { type ReactNode } from \"react\";\nimport { UpgradePrompt } from \"./UpgradePrompt.js\";\n\nexport interface LockedOverlayProps {\n /** Whether to apply the locked blur + overlay state */\n locked: boolean;\n /** Text to show in the upgrade prompt */\n upgradeText?: string;\n /** Plan name to show in the upgrade prompt */\n upgradePlanName?: string;\n /** Called when the upgrade button is clicked */\n onUpgrade?: () => void;\n /** Content to blur when locked */\n children: ReactNode;\n}\n\n/**\n * LockedOverlay wraps children in a relative container.\n * When locked=true:\n * - Children receive CSS blur(4px) and pointer-events: none\n * - An upgrade CTA overlay is positioned on top\n *\n * When locked=false, children render normally without any overlay.\n *\n * Usage:\n * ```tsx\n * <LockedOverlay locked={!canAccessFeature} upgradeText=\"Upgrade to Pro\" onUpgrade={openUpgradeModal}>\n * <FeatureContent />\n * </LockedOverlay>\n * ```\n */\nexport function LockedOverlay({\n locked,\n upgradeText,\n upgradePlanName,\n onUpgrade,\n children,\n}: LockedOverlayProps): React.ReactElement {\n if (!locked) {\n return <>{children}</>;\n }\n\n return (\n <div style={{ position: \"relative\", display: \"inline-block\" }}>\n {/* Blurred content — inaccessible to users */}\n <div\n style={{\n filter: \"blur(4px)\",\n pointerEvents: \"none\",\n userSelect: \"none\",\n }}\n aria-hidden=\"true\"\n >\n {children}\n </div>\n\n {/* Upgrade CTA overlay */}\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n background: \"var(--nozle-background, var(--background))\",\n opacity: 0.92,\n borderRadius: \"var(--nozle-radius, 0.5rem)\",\n }}\n role=\"dialog\"\n aria-label=\"Feature locked — upgrade required\"\n >\n <UpgradePrompt\n text={upgradeText}\n planName={upgradePlanName}\n onUpgrade={onUpgrade}\n />\n </div>\n </div>\n );\n}\n","\"use client\";\n\n/**\n * UsageMeter — embeddable usage progress bar with automatic color thresholds.\n * Uses --nozle-* CSS variables for theming (customer-facing portal layer).\n *\n * Color thresholds:\n * < 80% → primary (normal)\n * 80-94% → warning (amber)\n * ≥ 95% → destructive (red)\n */\n\nexport function getUsageMeterColor(percentage: number): string {\n if (percentage >= 95) return \"var(--nozle-destructive, var(--destructive))\";\n if (percentage >= 80) return \"var(--nozle-warning, var(--warning))\";\n return \"var(--nozle-primary, var(--primary))\";\n}\n\nexport interface UsageMeterProps {\n used: number;\n limit: number;\n label?: string;\n showText?: boolean;\n}\n\nexport function UsageMeter({\n used,\n limit,\n label,\n showText = true,\n}: UsageMeterProps) {\n const percentage = limit > 0 ? Math.min(100, (used / limit) * 100) : 0;\n const color = getUsageMeterColor(percentage);\n\n return (\n <div className=\"w-full space-y-1\">\n {label && (\n <div className=\"flex justify-between text-sm\">\n <span>{label}</span>\n {showText && (\n <span style={{ color }}>\n {used.toLocaleString()} / {limit.toLocaleString()}\n </span>\n )}\n </div>\n )}\n <div\n className=\"h-2 rounded-full overflow-hidden\"\n style={{ background: \"var(--nozle-border, var(--border))\" }}\n >\n <div\n className=\"h-full rounded-full\"\n style={{\n width: `${percentage}%`,\n background: color,\n transition: \"width 0.3s ease\",\n }}\n />\n </div>\n </div>\n );\n}\n","\"use client\";\n\n/**\n * UsageDashboard — renders multiple UsageMeters for all features.\n *\n * Accepts features as props. When loading=true renders skeleton placeholders.\n */\n\nimport { UsageMeter } from \"./UsageMeter.js\";\n\nexport interface UsageDashboardFeature {\n key: string;\n label: string;\n used: number;\n limit: number;\n}\n\nexport interface UsageDashboardProps {\n features?: UsageDashboardFeature[];\n loading?: boolean;\n}\n\nexport function UsageDashboard({\n features = [],\n loading = false,\n}: UsageDashboardProps) {\n if (loading) {\n return (\n <div className=\"animate-pulse space-y-3\">\n {[1, 2, 3].map((i) => (\n <div\n key={i}\n className=\"h-8 rounded\"\n style={{ background: \"var(--nozle-border, var(--border))\" }}\n />\n ))}\n </div>\n );\n }\n\n return (\n <div className=\"space-y-4\">\n {features.map((f) => (\n <UsageMeter key={f.key} used={f.used} limit={f.limit} label={f.label} />\n ))}\n </div>\n );\n}\n","\"use client\";\n\n/**\n * UsageAlert — warning banner shown when any feature usage is >= threshold.\n *\n * Shows dismissible alerts for features approaching their limit.\n * Default threshold: 80% (amber zone entry point).\n */\n\nimport { useState } from \"react\";\n\nexport interface UsageAlertFeature {\n key: string;\n label: string;\n percentage: number;\n}\n\nexport interface UsageAlertProps {\n features: UsageAlertFeature[];\n threshold?: number;\n upgradeHref?: string;\n}\n\nexport function UsageAlert({\n features,\n threshold = 80,\n upgradeHref = \"/plans\",\n}: UsageAlertProps) {\n const [dismissed, setDismissed] = useState<Set<string>>(new Set());\n\n const alertFeatures = features.filter(\n (f) => f.percentage >= threshold && !dismissed.has(f.key),\n );\n\n if (alertFeatures.length === 0) {\n return null;\n }\n\n const handleDismiss = (key: string) => {\n setDismissed((prev) => new Set(prev).add(key));\n };\n\n return (\n <div className=\"space-y-2\">\n {alertFeatures.map((f) => (\n <div\n key={f.key}\n role=\"alert\"\n className=\"flex items-center justify-between rounded-md px-4 py-3 text-sm\"\n style={{\n background: \"var(--nozle-warning-bg, var(--warning-bg, #fef9c3))\",\n color: \"var(--nozle-warning-text, var(--warning-text, #854d0e))\",\n border:\n \"1px solid var(--nozle-warning-border, var(--warning-border, #fde047))\",\n }}\n >\n <span>\n <span\n aria-hidden=\"true\"\n style={{ marginRight: \"0.5rem\", fontSize: \"1rem\" }}\n >\n ⚠\n </span>\n You&apos;re approaching your <strong>{f.label}</strong> limit (\n {Math.round(f.percentage)}%).{\" \"}\n <a\n href={upgradeHref}\n style={{\n color: \"inherit\",\n fontWeight: 600,\n textDecoration: \"underline\",\n }}\n >\n Upgrade\n </a>\n </span>\n <button\n onClick={() => handleDismiss(f.key)}\n aria-label={`Dismiss ${f.label} alert`}\n style={{\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: \"0 0 0 0.75rem\",\n fontSize: \"1rem\",\n color: \"inherit\",\n }}\n >\n ×\n </button>\n </div>\n ))}\n </div>\n );\n}\n","\"use client\";\n\n/**\n * PlanBadge — simple badge displaying plan name with tier-based coloring.\n */\n\nimport type React from \"react\";\n\nexport interface PlanBadgeProps {\n plan: string;\n tier?: \"free\" | \"starter\" | \"pro\" | \"enterprise\";\n}\n\nconst TIER_STYLES: Record<string, React.CSSProperties> = {\n free: {\n background: \"var(--nozle-muted, var(--muted, #f1f5f9))\",\n color: \"var(--nozle-muted-foreground, var(--muted-foreground, #64748b))\",\n border: \"1px solid var(--nozle-border, var(--border, #e2e8f0))\",\n },\n starter: {\n background:\n \"color-mix(in srgb, var(--nozle-primary, var(--primary, #3b82f6)) 10%, transparent)\",\n color: \"var(--nozle-primary, var(--primary, #3b82f6))\",\n border:\n \"1px solid color-mix(in srgb, var(--nozle-primary, var(--primary, #3b82f6)) 30%, transparent)\",\n },\n pro: {\n background: \"var(--nozle-primary, var(--primary, #3b82f6))\",\n color:\n \"var(--nozle-primary-foreground, var(--primary-foreground, #ffffff))\",\n border: \"1px solid transparent\",\n },\n enterprise: {\n background: \"var(--nozle-accent, var(--accent, #8b5cf6))\",\n color: \"var(--nozle-accent-foreground, var(--accent-foreground, #ffffff))\",\n border: \"1px solid transparent\",\n },\n};\n\nexport function PlanBadge({ plan, tier = \"free\" }: PlanBadgeProps) {\n const style = TIER_STYLES[tier] ?? TIER_STYLES.free;\n\n return (\n <span\n style={{\n ...style,\n display: \"inline-flex\",\n alignItems: \"center\",\n padding: \"0.125rem 0.5rem\",\n borderRadius: \"9999px\",\n fontSize: \"0.75rem\",\n fontWeight: 600,\n lineHeight: \"1.25rem\",\n whiteSpace: \"nowrap\",\n }}\n >\n {plan}\n </span>\n );\n}\n","\"use client\";\n\n/**\n * PaymentMethodDisplay — shows saved payment method details.\n * Displays last4, brand, expiry. \"Update Payment Method\" button opens checkout.\n */\n\nexport interface PaymentMethod {\n last4: string;\n brand: string;\n expMonth: number;\n expYear: number;\n}\n\nexport interface PaymentMethodDisplayProps {\n paymentMethod?: PaymentMethod;\n onUpdatePaymentMethod?: () => void;\n updateHref?: string;\n}\n\nconst BRAND_LABELS: Record<string, string> = {\n visa: \"Visa\",\n mastercard: \"Mastercard\",\n amex: \"American Express\",\n discover: \"Discover\",\n jcb: \"JCB\",\n diners: \"Diners Club\",\n unionpay: \"UnionPay\",\n};\n\nexport function PaymentMethodDisplay({\n paymentMethod,\n onUpdatePaymentMethod,\n updateHref = \"/billing/update-payment\",\n}: PaymentMethodDisplayProps) {\n const handleUpdate = () => {\n if (onUpdatePaymentMethod) {\n onUpdatePaymentMethod();\n } else {\n window.location.href = updateHref;\n }\n };\n\n return (\n <div className=\"space-y-3\">\n {paymentMethod ? (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"0.75rem\",\n padding: \"0.75rem 1rem\",\n border: \"1px solid var(--nozle-border, var(--border))\",\n borderRadius: \"0.5rem\",\n fontSize: \"0.875rem\",\n }}\n >\n <span\n style={{\n fontWeight: 600,\n color: \"var(--nozle-foreground, var(--foreground))\",\n }}\n >\n {BRAND_LABELS[paymentMethod.brand.toLowerCase()] ??\n paymentMethod.brand}\n </span>\n <span\n style={{\n color: \"var(--nozle-muted-foreground, var(--muted-foreground))\",\n }}\n >\n •••• {paymentMethod.last4}\n </span>\n <span\n style={{\n color: \"var(--nozle-muted-foreground, var(--muted-foreground))\",\n fontSize: \"0.75rem\",\n }}\n >\n Expires {String(paymentMethod.expMonth).padStart(2, \"0\")}/\n {String(paymentMethod.expYear).slice(-2)}\n </span>\n </div>\n ) : (\n <p\n style={{\n color: \"var(--nozle-muted-foreground, var(--muted-foreground))\",\n fontSize: \"0.875rem\",\n }}\n >\n No payment method on file.\n </p>\n )}\n <button\n onClick={handleUpdate}\n style={{\n background: \"transparent\",\n border: \"1px solid var(--nozle-primary, var(--primary))\",\n color: \"var(--nozle-primary, var(--primary))\",\n padding: \"0.375rem 0.875rem\",\n borderRadius: \"0.375rem\",\n fontSize: \"0.875rem\",\n fontWeight: 500,\n cursor: \"pointer\",\n }}\n >\n Update Payment Method\n </button>\n </div>\n );\n}\n"]}