@nozle-js/react 0.10.2 → 0.12.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/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: 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 /** `credits` or `none`. */\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 /** `upgrade` or `downgrade`. */\n transition_direction?: string;\n transition_policy?: 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 /** Set for an invoice checkout. A paid upgrade returns `plan_upgrade_intent_id` instead. */\n invoice_id?: string;\n plan_upgrade_intent_id?: string;\n external_entity_id?: string;\n external_subscription_id?: string;\n customer_id?: string;\n recurring?: boolean;\n mandate_max_amount_cents?: number;\n}\n\n/**\n * The checkout is not ready to collect payment yet: Razorpay while the order is\n * being created, and Stripe when a quoted upgrade is replayed while its webhook is\n * still pending. Recover with the checkout status call using `checkout_id`.\n */\nexport interface ProcessingCheckoutResult {\n type: \"processing\";\n checkout_id: string;\n status: string;\n amount_cents?: number;\n currency?: string;\n expires_at?: string;\n invoice_id?: string;\n plan_upgrade_intent_id?: string;\n}\n\n/** A Razorpay payment link. The customer is redirected to `payment_url`. */\nexport interface HostedCheckoutResult {\n type: \"hosted\";\n payment_url: string;\n checkout_id?: string;\n amount_cents?: number;\n currency?: string;\n expires_at?: string;\n invoice_id?: string;\n plan_upgrade_intent_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 /** Not returned by plan and invoice checkout, which never issue a Stripe-hosted URL. */\n url?: string;\n /** Embedded Checkout Session secret (`cs_...`). */\n clientSecret?: string;\n client_secret?: string;\n /** Not returned by Nozle. Pass your Stripe publishable key to `Checkout`. */\n publishable_key?: string;\n /** Not returned by Nozle. */\n stripe_account?: string;\n checkout_id?: string;\n invoice_id?: string;\n /** Set instead of `invoice_id` for a paid upgrade. */\n plan_upgrade_intent_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 /**\n * Called when an embedded Checkout Session completes without a redirect. It does\n * not fire when the session redirects to `returnUrl`: show success from the return\n * page, or reload billing status there.\n */\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 const [error, setError] = useState<Error | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n setIsLoading(true);\n setError(null);\n setPlans([]);\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 .catch((cause: unknown) => {\n if (!cancelled) {\n setError(\n cause instanceof Error ? cause : new Error(\"Failed to load plans\"),\n );\n }\n })\n .finally(() => {\n if (!cancelled) setIsLoading(false);\n });\n\n return () => {\n cancelled = true;\n };\n }, [client]);\n\n return { plans, isLoading, error };\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 (!res.ok) throw new Error(`HTTP ${res.status}`);\n const data = await res.json();\n if (!cancelled) setPlans(data.plans || []);\n }).catch((cause: unknown) => {\n if (!cancelled) setCheckoutError(`Plans could not be loaded: ${cause instanceof Error ? cause.message : 'unknown error'}`);\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"]}
1
+ {"version":3,"sources":["../src/appearance/tokens.ts","../src/appearance/context.tsx","../src/provider.tsx","../src/hooks/use-plans.ts","../src/components/branding/logo.ts","../src/components/branding/PoweredByNozle.tsx","../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/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/pricing/plan-features.ts","../src/components/portal/PlanChangeControl.tsx","../src/components/portal/BillingPortal.tsx","../src/hooks/use-billing.ts","../src/hooks/use-checkout.ts","../src/components/pricing/catalog.ts","../src/components/pricing/PanelPlanCard.tsx","../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/CurrentPlan.tsx","../src/components/billing/PlanBadge.tsx","../src/components/billing/PaymentMethodDisplay.tsx","../src/components/credits/CreditBalance.tsx","../src/components/credits/CreditHistory.tsx","../src/components/usage/usage-data.ts","../src/components/usage/UsageBreakdown.tsx","../src/components/usage/UsageTrend.tsx"],"names":["createContext","useContext","useMemo","QueryClient","useState","React","useQuery","jsxs","jsx","useRef","useId","useEffect","Fragment","completed","useStripe","useElements","PaymentElement","loadStripe","EmbeddedCheckoutProvider","StripeEmbeddedCheckout","Elements","styles","money","plan","result","useInfiniteQuery","useCallback","useCheckout","INTERVAL_LABELS","text","muted","card","planName","date"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { CSSProperties } from \"react\";\n\n/** Design tokens. Every value is a CSS value, for example `#4f46e5`, `oklch(...)` or `var(--primary)`. */\nexport interface Variables {\n colorPrimary?: string;\n colorPrimaryForeground?: string;\n colorBackground?: string;\n colorCard?: string;\n colorForeground?: string;\n colorMuted?: string;\n colorMutedForeground?: string;\n colorAccent?: string;\n colorAccentForeground?: string;\n colorBorder?: string;\n colorDanger?: string;\n colorWarning?: string;\n colorSuccess?: string;\n /** Fill of secondary buttons. Defaults to `colorMuted`. */\n colorSecondary?: string;\n /** Border of secondary buttons and other controls. Defaults to `colorBorder`. */\n colorInput?: string;\n /** The highlighted pricing card (`highlightPlan`). Defaults to `colorPrimary`. */\n colorHighlight?: string;\n /** Text on a filled highlighted card. Defaults to `colorPrimaryForeground`. */\n colorHighlightForeground?: string;\n fontFamily?: string;\n /** Font of numbers in tables. Defaults to the surrounding font. */\n fontFamilyNumbers?: string;\n /** CSS `font` shorthand of small labels: table headers and plan card status labels. */\n labelFont?: string;\n /** `text-transform` of small labels, for example `uppercase`. */\n labelTextTransform?: string;\n /** `letter-spacing` of small labels. */\n labelLetterSpacing?: string;\n /** CSS `font` shorthand of titles: dialog and portal titles. Default `700 20px/1.25` in `fontFamily`. */\n fontTitle?: string;\n /** CSS `font` shorthand of headings: plan names and section headings. Default `600 16px/1.35` in `fontFamily`. */\n fontHeading?: string;\n /**\n * CSS `font` shorthand of large numbers: prices, balances and totals, shown in tabular figures.\n * Default `700 28px/1.1` in `fontFamilyNumbers`, else `fontFamily`.\n */\n fontMetric?: string;\n /** CSS `font` shorthand of body text and descriptions. Default `400 14px/1.5` in `fontFamily`. */\n fontBody?: string;\n /** CSS `font` shorthand of small text: dates, intervals and hints. Default `400 12px/1.4` in `fontFamily`. */\n fontMeta?: string;\n /** CSS `font` shorthand of buttons and links. Default `600 14px/1.4` in `fontFamily`. */\n fontAction?: string;\n borderRadius?: string;\n borderWidth?: string;\n shadow?: string;\n /** Corner radius of buttons. Defaults to a fraction of `borderRadius`. */\n buttonRadius?: string;\n /** Border width of buttons. Defaults to `borderWidth`. */\n buttonBorderWidth?: string;\n /** Border colour of primary buttons. Defaults to the button's fill colour. */\n buttonBorderColor?: string;\n /** Shadow of primary buttons only, for example a hard offset. Defaults to none. */\n buttonShadow?: string;\n /** Sets the CSS `color-scheme` of the component, so native controls follow the theme. */\n colorScheme?: \"light\" | \"dark\" | \"light dark\";\n}\n\nexport type ElementKey =\n | \"pricingTable\"\n | \"pricingTable__toggle\"\n | \"pricingTable__toggleButton\"\n | \"pricingTable__grid\"\n | \"planCard\"\n | \"planCard__header\"\n | \"planCard__badge\"\n | \"planCard__name\"\n | \"planCard__description\"\n | \"planCard__price\"\n | \"planCard__features\"\n | \"planCard__feature\"\n | \"planCard__cta\"\n | \"planComparison\"\n | \"planComparison__table\"\n | \"planComparison__row\"\n | \"planComparison__cell\"\n | \"creditBalance\"\n | \"creditBalance__amount\"\n | \"creditHistory\"\n | \"creditHistory__table\"\n | \"creditHistory__row\"\n | \"usageBreakdown\"\n | \"usageBreakdown__row\"\n | \"usageTrend\"\n | \"usageTrend__bar\"\n | \"usageMeter\"\n | \"usageMeter__label\"\n | \"usageMeter__value\"\n | \"usageMeter__track\"\n | \"usageMeter__fill\"\n | \"usageDashboard\"\n | \"usageAlert\"\n | \"usageAlert__dismiss\"\n | \"currentPlan\"\n | \"currentPlan__name\"\n | \"currentPlan__status\"\n | \"currentPlan__price\"\n | \"currentPlan__scheduled\"\n | \"currentPlan__notice\"\n | \"currentPlan__usage\"\n | \"currentPlan__details\"\n | \"planBadge\"\n | \"paymentMethod\"\n | \"checkoutButton\"\n | \"upgradeButton\"\n | \"checkout\"\n | \"checkout__submit\"\n | \"checkout__error\"\n | \"upgradeModal\"\n | \"upgradeModal__dialog\"\n | \"upgradeModal__actions\"\n | \"upgradePrompt\"\n | \"lockedOverlay\"\n | \"lockedOverlay__panel\"\n | \"billingPortal\"\n | \"billingPortal__section\"\n | \"billingPortal__card\"\n | \"billingPortal__table\"\n | \"billingPortal__error\"\n | \"cancellationControl\"\n | \"planChangeControl\"\n | \"poweredBy\";\n\n/** A string adds a class name; an object adds inline styles. */\nexport type Elements = Partial<Record<ElementKey, string | CSSProperties>>;\n\nexport interface Theme {\n variables?: Variables;\n elements?: Elements;\n /**\n * How plan cards are laid out. `card` (default): name, description, price and ticked features.\n * `panel`: the name in a header band with the plan's status on the right, then price,\n * description and plain feature lines.\n */\n planCardLayout?: \"card\" | \"panel\";\n}\n\n/** A theme (or a stack of themes, last wins) plus your own variables and elements on top. */\nexport interface Appearance extends Theme {\n theme?: Theme | Theme[];\n}\n\ntype ColorKey = Exclude<keyof Variables, \"colorScheme\">;\n\nconst CSS_VAR: Record<ColorKey, string> = {\n colorPrimary: \"--nozle-primary\",\n colorPrimaryForeground: \"--nozle-primary-foreground\",\n colorBackground: \"--nozle-background\",\n colorCard: \"--nozle-card\",\n colorForeground: \"--nozle-foreground\",\n colorMuted: \"--nozle-muted\",\n colorMutedForeground: \"--nozle-muted-foreground\",\n colorAccent: \"--nozle-accent\",\n colorAccentForeground: \"--nozle-accent-foreground\",\n colorBorder: \"--nozle-border\",\n colorDanger: \"--nozle-destructive\",\n colorWarning: \"--nozle-warning\",\n colorSuccess: \"--nozle-success\",\n colorSecondary: \"--nozle-secondary\",\n colorInput: \"--nozle-input\",\n colorHighlight: \"--nozle-highlight\",\n colorHighlightForeground: \"--nozle-highlight-foreground\",\n fontFamily: \"--nozle-font\",\n fontFamilyNumbers: \"--nozle-font-numbers\",\n labelFont: \"--nozle-label-font\",\n labelTextTransform: \"--nozle-label-transform\",\n labelLetterSpacing: \"--nozle-label-spacing\",\n fontTitle: \"--nozle-font-title\",\n fontHeading: \"--nozle-font-heading\",\n fontMetric: \"--nozle-font-metric\",\n fontBody: \"--nozle-font-body\",\n fontMeta: \"--nozle-font-meta\",\n fontAction: \"--nozle-font-action\",\n borderRadius: \"--nozle-radius\",\n borderWidth: \"--nozle-border-width\",\n shadow: \"--nozle-shadow\",\n buttonRadius: \"--nozle-button-radius\",\n buttonBorderWidth: \"--nozle-button-border-width\",\n buttonBorderColor: \"--nozle-button-border\",\n buttonShadow: \"--nozle-button-shadow\",\n};\n\n/** The light values every component falls back to when nothing else sets a token. */\n// The highlight colours default to the primary colours, the muted text to a mix of the text and card\n// colours, the text roles to sizes in `fontFamily`, and the button values to the general ones or to\n// each button's own, so they have no value of their own here.\ntype DerivedKey =\n | \"colorMutedForeground\"\n | \"colorHighlight\"\n | \"colorHighlightForeground\"\n | \"colorSecondary\"\n | \"colorInput\"\n | \"fontFamilyNumbers\"\n | \"labelFont\"\n | \"labelTextTransform\"\n | \"labelLetterSpacing\"\n | \"fontTitle\"\n | \"fontHeading\"\n | \"fontMetric\"\n | \"fontBody\"\n | \"fontMeta\"\n | \"fontAction\"\n | \"buttonRadius\"\n | \"buttonBorderWidth\"\n | \"buttonBorderColor\"\n | \"buttonShadow\";\n\nexport const LIGHT: Required<Omit<Variables, \"colorScheme\" | DerivedKey>> = {\n colorPrimary: \"#4f46e5\",\n colorPrimaryForeground: \"#ffffff\",\n colorBackground: \"#ffffff\",\n colorCard: \"#ffffff\",\n colorForeground: \"#111827\",\n colorMuted: \"#f3f4f6\",\n colorAccent: \"#eef2ff\",\n colorAccentForeground: \"#3730a3\",\n colorBorder: \"#e5e7eb\",\n colorDanger: \"#dc2626\",\n colorWarning: \"#d97706\",\n colorSuccess: \"#16a34a\",\n fontFamily: \"system-ui, -apple-system, 'Segoe UI', sans-serif\",\n borderRadius: \"12px\",\n borderWidth: \"1px\",\n shadow: \"0 1px 3px rgba(0,0,0,0.06), 0 1px 2px rgba(0,0,0,0.04)\",\n};\n\n// Variable names from earlier releases, still read after the --nozle-* name.\nconst ALIASES: Partial<Record<ColorKey, string[]>> = {\n colorPrimary: [\"--nozle-pricing-highlight\", \"--nozle-portal-accent\"],\n colorBackground: [\"--nozle-pricing-bg\", \"--nozle-portal-background\"],\n colorCard: [\"--nozle-pricing-card-bg\"],\n colorForeground: [\"--nozle-portal-text\"],\n colorMuted: [\"--nozle-portal-muted-background\"],\n colorMutedForeground: [\"--nozle-portal-muted\"],\n colorBorder: [\"--nozle-pricing-border\", \"--nozle-portal-border\"],\n borderRadius: [\"--nozle-pricing-radius\"],\n};\n\nfunction chain(key: ColorKey, last: string = LIGHT[key as Exclude<ColorKey, DerivedKey>]): string {\n return [CSS_VAR[key], ...(ALIASES[key] ?? [])].reduceRight(\n (fallback, name) => `var(${name}, ${fallback})`,\n last,\n );\n}\n\nconst soft = (color: string, base: string, percent: number) =>\n `color-mix(in srgb, ${color} ${percent}%, ${base})`;\n\nconst primary = chain(\"colorPrimary\");\nconst card = chain(\"colorCard\");\nconst danger = chain(\"colorDanger\");\nconst warning = chain(\"colorWarning\");\nconst success = chain(\"colorSuccess\");\nconst foreground = chain(\"colorForeground\");\nconst primaryForeground = chain(\"colorPrimaryForeground\");\nconst font = chain(\"fontFamily\");\n\n/**\n * Muted text when `colorMutedForeground` is not set: the text colour mixed into the card colour, so\n * changing `colorForeground` recolours muted text too.\n */\nexport const DERIVED_MUTED_FOREGROUND = `color-mix(in srgb, ${foreground} 62%, ${card})`;\n\n/** CSS values for component styles: each reads its token, then older names, then the light value. */\nexport const T = {\n primary,\n primaryForeground,\n highlight: `var(--nozle-highlight, ${primary})`,\n highlightForeground: `var(--nozle-highlight-foreground, ${primaryForeground})`,\n background: chain(\"colorBackground\"),\n card,\n foreground,\n muted: chain(\"colorMuted\"),\n mutedForeground: chain(\"colorMutedForeground\", DERIVED_MUTED_FOREGROUND),\n accent: chain(\"colorAccent\"),\n secondary: `var(--nozle-secondary, ${chain(\"colorMuted\")})`,\n input: `var(--nozle-input, ${chain(\"colorBorder\")})`,\n accentForeground: chain(\"colorAccentForeground\"),\n border: chain(\"colorBorder\"),\n danger,\n warning,\n success,\n font,\n fontNumbers: \"var(--nozle-font-numbers, inherit)\",\n labelFont: `var(--nozle-label-font, 600 12px/1.4 ${font})`,\n fontTitle: `var(--nozle-font-title, 700 20px/1.25 ${font})`,\n fontHeading: `var(--nozle-font-heading, 600 16px/1.35 ${font})`,\n fontMetric: `var(--nozle-font-metric, 700 28px/1.1 var(--nozle-font-numbers, ${font}))`,\n fontBody: `var(--nozle-font-body, 400 14px/1.5 ${font})`,\n fontMeta: `var(--nozle-font-meta, 400 12px/1.4 ${font})`,\n fontAction: `var(--nozle-font-action, 600 14px/1.4 ${font})`,\n labelTransform: \"var(--nozle-label-transform, none)\",\n labelSpacing: \"var(--nozle-label-spacing, normal)\",\n radius: chain(\"borderRadius\"),\n borderWidth: chain(\"borderWidth\"),\n shadow: chain(\"shadow\"),\n /** Tinted backgrounds and borders for notices, derived from the matching colour. */\n dangerSoft: soft(danger, card, 10),\n dangerBorder: soft(danger, card, 30),\n warningSoft: soft(warning, card, 12),\n warningBorder: soft(warning, card, 35),\n /** Status text: the status colour mixed with the text colour, so it stays readable on its soft background. */\n dangerText: soft(danger, foreground, 70),\n warningText: soft(warning, foreground, 70),\n successText: soft(success, foreground, 70),\n successSoft: soft(success, card, 12),\n primarySoft: soft(primary, card, 10),\n primaryHover: soft(primary, \"black\", 88),\n skeleton: soft(foreground, card, 8),\n /** Table header band and the lighter line between table rows. */\n tableHeader: soft(chain(\"colorMuted\"), card, 50),\n rowLine: soft(chain(\"colorBorder\"), card, 70),\n} as const;\n\n/**\n * Text roles. Each sets the role's font (a `font` shorthand variable) and its default colour; a\n * component may change the colour, for example to a status colour or the text on a filled card.\n * `font` comes first because the shorthand resets the longhands after it.\n */\nexport const text = {\n title: { font: T.fontTitle, color: T.foreground },\n heading: { font: T.fontHeading, color: T.foreground },\n metric: { font: T.fontMetric, fontVariantNumeric: \"tabular-nums\", color: T.foreground },\n body: { font: T.fontBody, color: T.foreground },\n secondary: { font: T.fontBody, color: T.mutedForeground },\n meta: { font: T.fontMeta, color: T.mutedForeground },\n label: {\n font: T.labelFont,\n letterSpacing: T.labelSpacing,\n textTransform: T.labelTransform as CSSProperties[\"textTransform\"],\n color: T.mutedForeground,\n },\n action: { font: T.fontAction },\n} satisfies Record<string, CSSProperties>;\n\n/** `border` shorthand using the theme's border width and colour. */\nexport const border = (color: string = T.border) => `${T.borderWidth} solid ${color}`;\n\nconst buttonBorderWidth = `var(--nozle-button-border-width, ${T.borderWidth})`;\n\n/** `border` shorthand for a primary button: `buttonBorderColor` first, then `color`. */\nexport const primaryButtonBorder = (color: string) => `${buttonBorderWidth} solid var(--nozle-button-border, ${color})`;\n\n/** `border` shorthand for any other button. */\nexport const buttonBorder = (color: string) => `${buttonBorderWidth} solid ${color}`;\n\n/** Button corner radius: the `buttonRadius` token, else `fallback`. */\nexport const buttonRadius = (fallback: string) => `var(--nozle-button-radius, ${fallback})`;\n\nexport const buttonShadow = \"var(--nozle-button-shadow, none)\";\n\nexport interface ResolvedAppearance {\n variables: Variables;\n planCardLayout?: \"card\" | \"panel\";\n elements: Partial<Record<ElementKey, { className?: string; style?: CSSProperties }>>;\n}\n\nfunction addTheme(target: ResolvedAppearance, theme: Theme | undefined) {\n if (!theme) return;\n Object.assign(target.variables, theme.variables);\n if (theme.planCardLayout) target.planCardLayout = theme.planCardLayout;\n for (const [key, value] of Object.entries(theme.elements ?? {}) as [ElementKey, string | CSSProperties][]) {\n const current = target.elements[key] ?? {};\n target.elements[key] =\n typeof value === \"string\"\n ? { ...current, className: [current.className, value].filter(Boolean).join(\" \") }\n : { ...current, style: { ...current.style, ...value } };\n }\n}\n\n/**\n * Merges appearances in order, each later one winning: for each, its theme (or themes, in order) then\n * its own variables and elements. Pass the provider's appearance first, then the component's.\n */\nexport function mergeAppearance(...layers: (Appearance | undefined)[]): ResolvedAppearance {\n const resolved: ResolvedAppearance = { variables: {}, elements: {} };\n for (const layer of layers) {\n if (!layer) continue;\n const themes = Array.isArray(layer.theme) ? layer.theme : [layer.theme];\n themes.forEach((theme) => addTheme(resolved, theme));\n addTheme(resolved, layer);\n }\n return resolved;\n}\n\n/** Inline CSS custom properties for a set of variables; `colorScheme` becomes `color-scheme`. */\nexport function toCssVars(variables: Variables): CSSProperties {\n const style: Record<string, string> = {};\n for (const [key, value] of Object.entries(variables)) {\n if (value == null || value === \"\") continue;\n if (key === \"colorScheme\") style.colorScheme = value;\n else style[CSS_VAR[key as ColorKey]] = value;\n }\n return style as CSSProperties;\n}\n\n/** The card frame shared by the data components. */\nexport const surface: CSSProperties = {\n ...text.body,\n background: T.card,\n border: border(),\n borderRadius: T.radius,\n boxShadow: T.shadow,\n padding: \"1.25rem\",\n};\n\n/** Tables, after the Nozle dashboard table: a bordered frame, a tinted header band with small\n * uppercase labels, roomy rows, and numbers right-aligned in tabular figures. */\nexport const table = {\n frame: {\n ...text.body,\n background: T.card,\n border: border(),\n borderRadius: T.radius,\n overflowX: \"auto\",\n minWidth: 0,\n maxWidth: \"100%\",\n } as CSSProperties,\n table: { width: \"100%\", borderCollapse: \"collapse\", font: \"inherit\" } as CSSProperties,\n head: (numeric = false): CSSProperties => ({\n height: \"44px\",\n padding: \"0 20px\",\n textAlign: numeric ? \"right\" : \"left\",\n verticalAlign: \"middle\",\n ...text.label,\n whiteSpace: \"nowrap\",\n background: T.tableHeader,\n borderBottom: border(),\n }),\n /** `last`: the final body row, whose line the frame already draws. */\n cell: (numeric = false, last = false): CSSProperties => ({\n height: \"48px\",\n padding: \"14px 20px\",\n verticalAlign: \"middle\",\n whiteSpace: \"nowrap\",\n textAlign: numeric ? \"right\" : \"left\",\n borderBottom: last ? \"none\" : border(T.rowLine),\n ...(numeric && { fontFamily: T.fontNumbers, fontVariantNumeric: \"tabular-nums\" }),\n }),\n foot: (numeric = false): CSSProperties => ({\n ...table.cell(numeric, true),\n borderTop: border(),\n background: T.tableHeader,\n fontWeight: 600,\n }),\n};\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"outline\";\n\n/** Button look shared by every component, from the theme tokens. */\nexport function buttonStyle(variant: ButtonVariant = \"primary\", busy = false): CSSProperties {\n const colors: Record<ButtonVariant, CSSProperties> = {\n primary: { background: T.primary, color: T.primaryForeground, border: primaryButtonBorder(T.primary), boxShadow: buttonShadow },\n secondary: { background: T.secondary, color: T.foreground, border: buttonBorder(T.input) },\n outline: { background: \"transparent\", color: T.primary, border: buttonBorder(T.primary) },\n };\n return {\n ...colors[variant],\n padding: \"0.75rem 1.5rem\",\n borderRadius: buttonRadius(`calc(${T.radius} * 0.75)`),\n ...text.action,\n cursor: busy ? \"wait\" : \"pointer\",\n opacity: busy ? 0.7 : 1,\n transition: \"filter 0.15s ease\",\n };\n}\n","\"use client\";\n\nimport React, { createContext, useContext, useMemo, type CSSProperties } from \"react\";\nimport { mergeAppearance, toCssVars, type Appearance, type ElementKey } from \"./tokens.js\";\n\nconst AppearanceContext = createContext<Appearance | undefined>(undefined);\n\n/** Set by `BillingProvider`; renders no element of its own. */\nexport function AppearanceProvider({\n appearance,\n children,\n}: {\n appearance?: Appearance;\n children: React.ReactNode;\n}): React.ReactElement {\n return <AppearanceContext.Provider value={appearance}>{children}</AppearanceContext.Provider>;\n}\n\nexport interface ElementProps {\n className?: string;\n style?: CSSProperties;\n}\n\nexport interface UseAppearance {\n /** Props for a component's root: its `nozle-<key>` class, the theme's CSS variables and its element overrides. */\n root(key: ElementKey, style?: CSSProperties, className?: string): ElementProps;\n /** Props for an inner element: its `nozle-<key>` class and its element overrides. */\n el(key: ElementKey, style?: CSSProperties, className?: string): ElementProps;\n /** The plan card layout the theme asks for. */\n planCardLayout: \"card\" | \"panel\";\n /** The theme's CSS variables, for an element rendered beside the root rather than inside it. */\n vars: CSSProperties;\n}\n\n/**\n * Resolves the provider's appearance with the component's own on top. Without any appearance no\n * variables are written, so CSS variables an app sets on `:root` keep working.\n */\nexport function useAppearance(appearance?: Appearance): UseAppearance {\n const inherited = useContext(AppearanceContext);\n return useMemo(() => {\n const { variables, elements, planCardLayout = \"card\" } = mergeAppearance(inherited, appearance);\n const vars = toCssVars(variables);\n const el = (key: ElementKey, style?: CSSProperties, className?: string): ElementProps => {\n const override = elements[key];\n return {\n className: [\"nozle-\" + key, className, override?.className].filter(Boolean).join(\" \"),\n style: { ...style, ...override?.style },\n };\n };\n return {\n el,\n planCardLayout,\n vars,\n root: (key, style, className) => {\n const props = el(key, style, className);\n return { ...props, style: { ...vars, ...props.style } };\n },\n };\n }, [inherited, appearance]);\n}\n","\"use client\";\n\nimport React, {\n createContext,\n useContext,\n useMemo,\n useState,\n type ReactNode,\n} from \"react\";\nimport { QueryClient } from \"@tanstack/react-query\";\nimport { AppearanceProvider } from \"./appearance/context.js\";\nimport type { Appearance } from \"./appearance/tokens.js\";\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 /** `credits` or `none`. */\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 /** `upgrade` or `downgrade`. */\n transition_direction?: string;\n transition_policy?: 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 /** Set for an invoice checkout. A paid upgrade returns `plan_upgrade_intent_id` instead. */\n invoice_id?: string;\n plan_upgrade_intent_id?: string;\n external_entity_id?: string;\n external_subscription_id?: string;\n customer_id?: string;\n recurring?: boolean;\n mandate_max_amount_cents?: number;\n}\n\n/**\n * The checkout is not ready to collect payment yet: Razorpay while the order is\n * being created, and Stripe when a quoted upgrade is replayed while its webhook is\n * still pending. Recover with the checkout status call using `checkout_id`.\n */\nexport interface ProcessingCheckoutResult {\n type: \"processing\";\n checkout_id: string;\n status: string;\n amount_cents?: number;\n currency?: string;\n expires_at?: string;\n invoice_id?: string;\n plan_upgrade_intent_id?: string;\n}\n\n/** A Razorpay payment link. The customer is redirected to `payment_url`. */\nexport interface HostedCheckoutResult {\n type: \"hosted\";\n payment_url: string;\n checkout_id?: string;\n amount_cents?: number;\n currency?: string;\n expires_at?: string;\n invoice_id?: string;\n plan_upgrade_intent_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 /** Not returned by plan and invoice checkout, which never issue a Stripe-hosted URL. */\n url?: string;\n /** Embedded Checkout Session secret (`cs_...`). */\n clientSecret?: string;\n client_secret?: string;\n /** Not returned by Nozle. Pass your Stripe publishable key to `Checkout`. */\n publishable_key?: string;\n /** Not returned by Nozle. */\n stripe_account?: string;\n checkout_id?: string;\n invoice_id?: string;\n /** Set instead of `invoice_id` for a paid upgrade. */\n plan_upgrade_intent_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\n/** A failed request to your billing endpoint. `code` is the error code the endpoint returned. */\nexport class BillingRequestError extends Error {\n constructor(\n readonly status: number,\n readonly code: string | undefined,\n readonly requestId?: string,\n ) {\n super(`Billing request failed: ${status}${code ? ` ${code}` : \"\"}`);\n this.name = \"BillingRequestError\";\n }\n}\n\nexport type BillingFetch = <T>(route: string, params?: Record<string, string | number | undefined>) => Promise<T>;\n\nexport interface BillingContextValue {\n client: NozleClient;\n createCheckout?: CreateCheckout;\n verifyCheckout?: VerifyCheckout;\n getCheckoutStatus?: GetCheckoutStatus;\n /** The query client the billing hooks use: the `queryClient` prop, or one the provider made. */\n queryClient: QueryClient;\n /** Reads a route of your billing endpoint; undefined when `billingEndpoint` is not set. */\n billingFetch?: BillingFetch;\n billingEndpoint?: string;\n}\n\nfunction createBillingFetch(\n endpoint: string,\n headers?: () => HeadersInit | Promise<HeadersInit>,\n): BillingFetch {\n // Trim trailing slashes without a regex: /\\/+$/ is quadratic on long runs of \"/\".\n let end = endpoint.length;\n while (end > 0 && endpoint[end - 1] === \"/\") end--;\n const base = endpoint.slice(0, end);\n return async <T,>(route: string, params: Record<string, string | number | undefined> = {}) => {\n const query = new URLSearchParams();\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined && value !== \"\") query.set(key, String(value));\n }\n const search = query.toString();\n const response = await fetch(`${base}/${route}${search ? `?${search}` : \"\"}`, {\n credentials: \"same-origin\",\n headers: { Accept: \"application/json\", ...(headers ? await headers() : {}) },\n });\n if (!response.ok) {\n const body = (await response.json().catch(() => ({}))) as { code?: string; request_id?: string };\n throw new BillingRequestError(response.status, body.code, body.request_id);\n }\n return (await response.json()) as T;\n };\n}\n\nfunction createQueryClient(): QueryClient {\n return new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: 30_000,\n // Retry only failures that may pass on a second try; a 4xx will not.\n retry: (count, error) =>\n count < 2 && !(error instanceof BillingRequestError && error.status < 500),\n },\n },\n });\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 /**\n * Path of your backend route that serves the customer hooks (`useSubscription`,\n * `useEntitlement`, `useCreditBalance`, `useCreditHistory`, `useUsage`, `useUpgradePreview`),\n * for example `/api/nozle`. Serve it with `createBillingHandler` from `@nozle-js/node`.\n */\n billingEndpoint?: string;\n /** Extra headers for billing endpoint requests, such as a CSRF token. */\n billingHeaders?: () => HeadersInit | Promise<HeadersInit>;\n /**\n * Your app's TanStack Query client, to share its cache and devtools. Without it the provider\n * makes its own. The hooks pass their client explicitly, so they never use or replace a\n * `QueryClientProvider` of your app.\n */\n queryClient?: QueryClient;\n /**\n * Look of every component inside: a predefined theme from `@nozle-js/react/themes`, your own\n * variables, and per-element class names or styles. A component's own `appearance` goes on top.\n */\n appearance?: Appearance;\n children: ReactNode;\n}\n\nexport function BillingProvider({\n publishableKey,\n createCheckout,\n verifyCheckout,\n getCheckoutStatus,\n baseUrl = \"https://api.nozle.app/engine\",\n billingEndpoint,\n billingHeaders,\n queryClient,\n appearance,\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 [ownQueryClient] = useState(createQueryClient);\n const activeQueryClient = queryClient ?? ownQueryClient;\n const billingFetch = useMemo(\n () => (billingEndpoint ? createBillingFetch(billingEndpoint, billingHeaders) : undefined),\n [billingEndpoint, billingHeaders],\n );\n const contextValue = useMemo(\n () => ({\n client,\n createCheckout,\n verifyCheckout,\n getCheckoutStatus,\n queryClient: activeQueryClient,\n billingFetch,\n billingEndpoint,\n }),\n [client, createCheckout, verifyCheckout, getCheckoutStatus, activeQueryClient, billingFetch, billingEndpoint],\n );\n\n return React.createElement(\n BillingContext.Provider,\n { value: contextValue },\n React.createElement(AppearanceProvider, { appearance, 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 { QueryClient, useQuery } from \"@tanstack/react-query\";\nimport { useBillingContext, type NozleClient } from \"../provider.js\";\nimport type {\n PricingFamily,\n PricingPlan,\n} from \"../components/pricing/catalog.js\";\n\n/**\n * A plan from the public catalog (`GET /api/v1/plans`). The catalog also returns entitlements, credit\n * grants and charges; they are absent from an older or reduced response.\n */\nexport type Plan = PricingPlan;\n\n/** Keeps a catalog query call unconditional when there is no BillingProvider; never fetches. */\nexport const idleQueryClient = new QueryClient();\n\n/**\n * One request for the catalog: the plans, the plan families (null when the API returns no `families`\n * key) and whether the components show \"Powered by Nozle\".\n */\nexport function catalogQuery(client: NozleClient | undefined) {\n return {\n queryKey: [\"nozle\", \"plans\", client?.baseUrl, client?.publishableKey],\n queryFn: async ({ signal }: { signal: AbortSignal }) => {\n const response = await client!.catalogFetch(\"/api/v1/plans\", { signal });\n if (!response.ok) throw new Error(`HTTP ${response.status}`);\n const data = (await response.json()) as {\n plans?: Plan[];\n families?: PricingFamily[] | null;\n meta?: { nozle_branding?: boolean };\n };\n return {\n plans: data.plans ?? [],\n families: Array.isArray(data.families) ? data.families : null,\n nozleBranding: data.meta?.nozle_branding === true,\n };\n },\n staleTime: 5 * 60_000,\n // The pricing page shows a load error at once; the app can call refetch().\n retry: false,\n };\n}\n\n/**\n * The public plan catalog, read with the publishable key and cached by TanStack Query. `families` is\n * null when the API returns no `families` key (older APIs); pass `{ plans, families }` to\n * `getPricingCards` either way.\n */\nexport function usePlans() {\n const { client, queryClient } = useBillingContext();\n const query = useQuery(catalogQuery(client), queryClient);\n return {\n plans: query.data?.plans ?? [],\n families: query.data?.families ?? null,\n isLoading: query.isPending,\n error: (query.error as Error | null) ?? null,\n refetch: query.refetch,\n };\n}\n","// The Nozle integrated logo from the dashboard sidebar: the mark in Nozle orange and the wordmark in\n// the surrounding text colour, so one drawing works on light and dark themes.\nexport const LOGO_VIEW_BOX = \"0 0 3208 1122\";\nexport const LOGO_MARK_PATH = \"M 1108.89 330.512 C 1131.49 326.989 1184.16 334.391 1207.63 338.298 L 1207.63 511.329 C 1203.66 515.246 1199.46 519.132 1195.4 522.972 L 1286.52 523.006 C 1282.75 519.093 1278.87 515.284 1274.89 511.585 L 1274.92 358.597 C 1311.02 374.213 1344.6 395.09 1374.58 420.548 C 1451.3 486.571 1498.83 580.231 1506.81 681.131 C 1515 782.133 1482.24 882.187 1415.89 958.782 C 1362.73 1020.34 1289.84 1065.92 1209.97 1082.75 C 1185.45 1087.92 1168.82 1089.01 1144.24 1090.82 C 1092.37 1092.55 1040.69 1083.81 992.278 1065.1 C 899.111 1029.72 824.189 955.46 783.642 864.858 C 743.243 772.802 740.63 668.558 776.367 574.594 C 807.572 492.815 865.841 424.187 941.477 380.133 C 955.897 371.807 970.834 365.19 986.004 358.415 L 986.997 511.83 C 982.504 514.698 977.232 518.881 972.988 522.219 C 982.441 521.793 993.966 522.74 1003.69 522.843 L 1066.51 523.012 C 1062.58 519.054 1058.6 514.702 1054 511.616 C 1053.71 494.114 1055.01 476.198 1054.99 458.475 L 1054 337.726 C 1074.93 333.524 1088.73 333.1 1108.89 330.512 z M 1136.49 834.878 C 1198.61 831.142 1246.02 777.893 1242.55 715.759 C 1239.08 653.625 1186.03 605.989 1123.88 609.196 C 1061.36 612.423 1013.37 665.861 1016.87 728.369 C 1020.36 790.878 1074 838.637 1136.49 834.878 z\";\nexport const LOGO_WORDMARK_PATH = \"M2807.48 317.546C2812.82 316.693 2819.27 316.959 2824.49 316.891 3043.76 314.061 3223.51 517.798 3205.41 733.935 3204.36 746.553 3203.33 760.715 3203.2 773.228 3175.25 773.336 3148.36 772.242 3120.74 772.167L2889.16 773.329C2863.8 773.347 2650.02 771.22 2643.56 776.302 2643.49 776.742 2643.33 778.022 2643.41 778.366 2650.33 808.489 2668.08 838.036 2690.04 858.674 2726.37 892.826 2776.29 910.3 2825.39 908.765 2887.65 906.818 2929.65 884.535 2971.8 840.731L3187.64 841.821C3176.73 876.79 3145.09 927.003 3121.73 956.25 3057.95 1036.16 2965.03 1087.46 2863.43 1098.86 2764.86 1109.46 2666.11 1080.6 2588.77 1018.59 2504.68 952.597 2450.51 855.672 2438.38 749.464 2415.16 540.793 2579.74 336.515 2790.2 318.706 2795.97 318.218 2801.75 318.181 2807.48 317.546zM2836.5 625.92 3004.04 625.92C2976.56 571.597 2937.23 529.14 2878.08 508.386 2862.06 502.767 2834.68 498.432 2817.69 499.447 2811.66 500.426 2805.72 500.948 2799.66 501.626 2736.71 508.675 2678.99 552.56 2653.08 609.964 2650.95 614.667 2649.24 618.489 2648.22 623.618L2648.73 625.573C2666.65 626.805 2695.47 625.951 2714.08 625.95L2836.5 625.92zM350.026 327.534C351.059 327.376 351.817 327.251 352.866 327.196 440.33 322.588 528.279 352.28 593.965 409.932 660.794 468.083 703.294 549.252 713.018 637.303 717.397 678.934 715.385 718.263 715.162 759.723L714.249 949.463C714.221 978.726 713.328 1009.12 714.526 1038.31 715.585 1064.08 724.618 1074.23 742.925 1090.23 655.133 1089.48 574.896 1088.28 486.53 1091.14 506.936 1074.25 516.198 1062.6 516.991 1034.69 517.509 1016.48 517.681 998.316 517.701 980.062L517.678 871.454 518.327 744.743C518.417 708.921 519.234 677.156 513.6 641.605 504.197 582.258 457.155 536.074 396.911 528.341 387.723 526.897 378.419 526.337 369.124 526.669 330.893 527.948 296.354 540.985 270.002 569.309 252.159 588.394 239.802 611.944 234.238 637.471 228.538 663.791 228.617 711.497 228.796 738.55L229.47 833.874 229.051 964.879C229.043 985.892 228.914 1006.79 229.398 1027.79 230.072 1057 235.364 1070.31 256.803 1090.19 210.541 1092.85 167.594 1091.93 121.604 1091.28L2.29567 1090.29C23.4576 1071.55 31.3577 1057.22 32.9306 1028.58 34.6194 997.827 33.8844 967.966 33.5542 937.249L33.0591 779.859C32.8532 653.775 26.6617 550.025 115.68 447.849 180 374.022 252.997 336.686 350.026 327.534zM1552.98 329.783C1585.23 341.06 1694.79 336.137 1732.02 336.28L1987.95 337.925C2031.97 338.036 2076.24 335.822 2120.7 337.349 2118.21 357.823 2118.97 389.029 2118.96 410.256 2118.6 445.944 2118.97 481.634 2120.07 517.306L1961.06 704.338C1908.01 766.03 1851.33 830.755 1801.51 894.952 1819.57 894.053 1845.55 894.949 1864.37 894.958L1989.79 895.045C2037.99 895.176 2070.48 897.452 2119.04 886.152 2118.97 952.443 2120.33 1018.73 2118.99 1085 2118.85 1091.75 2120.17 1104.35 2118.4 1110.48L2115.98 1111.17C2070.03 1077.75 2034.35 1081.57 1981.3 1081.89L1888.49 1081.97 1544.82 1082.03C1545.37 1024.58 1544.47 968.65 1544.02 911.354 1563.44 886.164 1589.99 857.395 1611.19 832.365L1782.61 629.927C1814.21 592.718 1847.38 556.886 1876.98 518.016L1552 517.984C1551.65 496.963 1554.2 471.241 1553.87 449.778 1553.69 437.667 1553.18 425.595 1553.07 413.5L1552.98 329.783zM2373.44 4.75901C2374.2 55.5907 2372.32 106.262 2372.3 157.309L2372.39 599.153 2373.25 737.25C2373.29 771.822 2369.91 823.05 2379.51 856.818 2384.04 872.719 2405.1 883.099 2420.05 889.245L2420.03 1090.04C2375.69 1091.15 2312.39 1065.98 2279.04 1037.28 2271.95 1032.7 2261.78 1023.12 2255.56 1016.95 2219.14 980.786 2191.86 928.49 2181.81 878.203 2174.98 844.049 2176.85 799.114 2176.92 763.235L2177.02 625.401 2176.97 73.7487C2189.94 73.6898 2202.93 74.1053 2215.89 73.9192 2264.74 73.2173 2312.58 61.8792 2349.93 28.7315 2357.84 21.7113 2365.92 12.4727 2373.44 4.75901z\";\n","\"use client\";\n\nimport React, { createContext, useContext, type ReactNode } from \"react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useOptionalBillingContext } from \"../../provider.js\";\nimport { catalogQuery, idleQueryClient } from \"../../hooks/use-plans.js\";\nimport { useAppearance } from \"../../appearance/context.js\";\nimport { T, text } from \"../../appearance/tokens.js\";\nimport { LOGO_MARK_PATH, LOGO_VIEW_BOX, LOGO_WORDMARK_PATH } from \"./logo.js\";\n\n// Set inside a branded component, so a branded component it renders (Checkout in a modal, the\n// modal in the portal) does not repeat the badge.\nconst BrandingScope = createContext(false);\n\n/**\n * Whether the merchant's Nozle plan keeps the \"Powered by Nozle\" badge. The server decides\n * (`meta.nozle_branding` in the publishable-key plan catalog); without a BillingProvider, or\n * before the answer arrives, there is no badge.\n */\nexport function useNozleBranding(): boolean {\n const billing = useOptionalBillingContext();\n const { data } = useQuery(\n // Reads the catalog request the components already make: mounting this must not refetch a\n // failed catalog, or a table that shows the error would loop back into loading.\n { ...catalogQuery(billing?.client), enabled: Boolean(billing), refetchOnMount: false, retryOnMount: false },\n billing?.queryClient ?? idleQueryClient,\n );\n return data?.nozleBranding === true;\n}\n\n/** \"Powered by\" and the Nozle logo, linking to nozle.dev. */\nexport function PoweredByNozle(): React.ReactElement {\n // root, not el: on its own the badge needs the theme's variables, not only its class.\n const { root } = useAppearance();\n return (\n <a\n href=\"https://nozle.dev\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n {...root(\"poweredBy\", {\n ...text.meta,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: \"6px\",\n marginTop: \"1rem\",\n textDecoration: \"none\",\n })}\n >\n Powered by\n <svg viewBox={LOGO_VIEW_BOX} height=\"14\" width=\"40\" role=\"img\" aria-label=\"Nozle\" style={{ color: T.foreground }}>\n <path fill=\"#F34213\" d={LOGO_MARK_PATH} />\n <path fill=\"currentColor\" d={LOGO_WORDMARK_PATH} />\n </svg>\n </a>\n );\n}\n\n/**\n * Wraps a branded component's content and adds the badge after it, once: only the outermost\n * branded component shows it. `show` overrides the catalog answer (the portal has its own).\n */\nexport function NozleBranding({ show, children }: { show?: boolean; children?: ReactNode }): React.ReactElement {\n const nested = useContext(BrandingScope);\n const fromCatalog = useNozleBranding();\n return (\n <BrandingScope.Provider value={true}>\n {children}\n {!nested && (show ?? fromCatalog) && <PoweredByNozle />}\n </BrandingScope.Provider>\n );\n}\n","/** 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: 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; nozleBranding?: boolean };\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 nozleBranding }\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","import { T } from \"../../appearance/tokens.js\";\n\nconst line = `${T.borderWidth} solid ${T.border}`;\nconst r = (factor: number) => `calc(${T.radius} * ${factor})`;\n\nexport const portalStyles = `\n.nozle-billing-portal{color:${T.foreground};background:${T.background};font:${T.fontBody};box-sizing:border-box;width:100%;min-width:0;padding:clamp(18px,4vw,40px);border-radius:${T.radius}}\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:${T.fontTitle}}\n.nozle-billing-portal h3{font:${T.fontHeading}}\n.nozle-billing-portal header{margin-bottom:30px}\n.nozle-billing-portal section{margin-top:28px;padding-top:24px;border-top:${line}}\n.nozle-billing-portal button,.nozle-billing-portal .nzp-link{appearance:none;display:inline-flex;align-items:center;justify-content:center;font:${T.fontAction};border:var(--nozle-button-border-width, ${T.borderWidth}) solid ${T.input};border-radius:var(--nozle-button-radius, ${r(0.6)});background:${T.card};color:${T.foreground};padding:9px 14px;cursor:pointer;text-decoration:none;white-space:normal}\n.nozle-billing-portal button:hover,.nozle-billing-portal .nzp-link:hover{background:${T.muted}}\n.nozle-billing-portal button:disabled{opacity:.55;cursor:wait}\n.nozle-billing-portal :focus-visible{outline:2px solid ${T.primary};outline-offset:3px}\n.nozle-billing-portal .nzp-primary{background:${T.primary};border-color:var(--nozle-button-border, ${T.primary});box-shadow:var(--nozle-button-shadow, none);color:${T.primaryForeground}}\n.nozle-billing-portal .nzp-primary:hover{filter:brightness(.92);background:${T.primary}}\n.nozle-billing-portal .nzp-muted{color:${T.mutedForeground}}\n.nozle-billing-portal .nzp-notice{color:${T.successText}}\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{background:${T.card};border:${line};border-radius:${r(0.85)};box-shadow:${T.shadow};padding:20px;min-width:0}\n.nozle-billing-portal .nzp-card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-top:16px;padding-top:16px;border-top:${line}}\n.nozle-billing-portal .nzp-card-actions>.nozle-plan-change,.nozle-billing-portal .nzp-card-actions>.nozle-cancellation,.nozle-billing-portal .nzp-card-actions .nzpc-actions{display:contents}\n.nozle-billing-portal .nzp-card-actions>.nozle-plan-change>:not(.nzpc-actions),.nozle-billing-portal .nzp-card-actions>.nozle-cancellation>:not(button){flex-basis:100%;margin:0}\n.nozle-billing-portal .nzp-card-actions>.nozle-cancellation>button{margin-left:auto}\n.nozle-billing-portal .nzp-price{font:${T.fontMetric};font-variant-numeric:tabular-nums;margin:12px 0 4px}\n.nozle-billing-portal .nzp-price .nzp-muted{font:${T.fontMeta}}\n.nozle-billing-portal .nzp-badge{display:inline-block;font:${T.labelFont};letter-spacing:${T.labelSpacing};text-transform:${T.labelTransform};border-radius:${r(0.4)};background:${T.accent};color:${T.accentForeground};padding:3px 7px}\n.nozle-billing-portal .nzp-empty{border:${T.borderWidth} dashed ${T.border};border-radius:${r(0.65)};padding:22px;text-align:center;color:${T.mutedForeground};margin-top:16px}\n.nozle-billing-portal .nzp-error{color:${T.dangerText};background:${T.dangerSoft};border:${T.borderWidth} solid ${T.dangerBorder};border-radius:${r(0.65)};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;background:${T.card};border:${line};border-radius:${T.radius}}\n.nozle-billing-portal table{width:100%;border-collapse:collapse;text-align:left;font:inherit}\n.nozle-billing-portal th{height:44px;padding:0 20px;font:${T.labelFont};letter-spacing:${T.labelSpacing};text-transform:${T.labelTransform};color:${T.mutedForeground};background:${T.tableHeader};border-bottom:${line};white-space:nowrap}\n.nozle-billing-portal td{height:48px;padding:14px 20px;border-bottom:${T.borderWidth} solid ${T.rowLine};white-space:nowrap}\n.nozle-billing-portal tbody tr:last-child td{border-bottom:0}\n.nozle-billing-portal .nzp-num{text-align:right}\n.nozle-billing-portal td.nzp-num{font-family:${T.fontNumbers};font-variant-numeric:tabular-nums}\n.nozle-billing-portal .nzp-search{display:flex;font-weight:400;align-items:center;gap:8px;flex:1;min-width:min(100%,200px);height:40px;padding:0 12px;background:${T.card};border:${T.borderWidth} solid ${T.input};border-radius:${r(0.7)};color:${T.mutedForeground}}\n.nozle-billing-portal .nzp-search:focus-within{border-color:${T.foreground}}\n.nozle-billing-portal .nzp-search input{flex:1;height:100%;border:0;padding:0;background:transparent;color:${T.foreground};outline:none}\n.nozle-billing-portal .nzp-search input::placeholder{color:${T.mutedForeground}}\n.nozle-billing-portal label{display:grid;gap:6px;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:${T.card};border:${line};border-radius:${r(0.5)};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:${T.fontMeta};color:${T.mutedForeground}}\n.nozle-billing-portal dd{margin:3px 0 0;overflow-wrap:anywhere}\n.nozle-billing-portal footer{margin-top:30px;text-align:center;color:${T.mutedForeground};font:${T.fontMeta}}\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 { useAppearance } from \"../../appearance/context.js\";\nimport { T, type Appearance } from \"../../appearance/tokens.js\";\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 appearance?: Appearance;\n}\n\nconst styles = `\n.nozle-cancellation{font:${T.fontBody};color:${T.foreground}}\n.nozle-cancellation button{font:${T.fontAction};padding:9px 14px;border:var(--nozle-button-border-width, ${T.borderWidth}) solid ${T.input};border-radius:var(--nozle-button-radius, calc(${T.radius} * 0.6));background:${T.card};color:inherit;cursor:pointer}\n.nozle-cancellation button:disabled{opacity:.55;cursor:wait}\n.nozle-cancellation :focus-visible{outline:2px solid ${T.primary};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:${T.card};border:${T.borderWidth} solid ${T.border};border-radius:${T.radius};padding:24px;width:100%;max-width:440px;max-height:90dvh;overflow:auto;box-shadow:${T.shadow},0 12px 48px #0003}\n.nozle-cancellation .nzc-dialog h3{margin:0 0 16px;font:${T.fontTitle};letter-spacing:normal;color:${T.foreground}}\n.nozle-cancellation .nzc-dialog p{margin:12px 0}\n.nozle-cancellation .nzc-buttons{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:10px;margin-top:20px}\n.nozle-cancellation [role=alert],.nozle-cancellation .nzc-danger{color:${T.dangerText}}\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 appearance,\n}: CancellationControlProps) {\n const { root } = useAppearance(appearance);\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 {...root(\"cancellationControl\", undefined, \"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 className={preview.operation === \"cancel\" ? \"nzc-danger\" : undefined}\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","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 { useAppearance } from \"../../appearance/context.js\";\nimport { T, buttonStyle, text, type Appearance } from \"../../appearance/tokens.js\";\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 appearance?: Appearance;\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 appearance,\n}: CheckoutButtonProps): React.ReactElement {\n const { root, vars } = useAppearance(appearance);\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 {...root(\"checkoutButton\", { ...buttonStyle(\"primary\", loading), ...style }, className)}\n aria-busy={loading}\n >\n {loading ? \"Loading...\" : label}\n </button>\n {processing && (\n <span role=\"status\" style={{ ...vars, ...text.body }}>\n Payment is processing. Confirmation may take a little while.\n </span>\n )}\n {error && <span role=\"alert\" style={{ ...vars, ...text.body, color: T.dangerText }}>{error.message}</span>}\n </>\n );\n}\n","\"use client\";\n\nimport React, {\n createContext,\n useContext,\n useEffect,\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 as StripeAppearance, StripeElementsOptions } from \"@stripe/stripe-js\";\nimport { useAppearance } from \"../../appearance/context.js\";\nimport { NozleBranding } from \"../branding/PoweredByNozle.js\";\nimport { T, buttonStyle, text, type Appearance } from \"../../appearance/tokens.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 /**\n * Called when an embedded Checkout Session completes without a redirect. It does\n * not fire when the session redirects to `returnUrl`: show success from the return\n * page, or reload billing status there.\n */\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 /** Also passed to Stripe's Payment Element. Stripe's embedded Checkout uses your Stripe branding instead. */\n appearance?: Appearance;\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\n/** Colours resolved by the browser (any CSS colour syntax), read from a probe element. */\nexport interface ResolvedColors {\n primary?: string;\n background?: string;\n foreground?: string;\n danger?: string;\n radius?: string;\n font?: string;\n}\n\nfunction rgb(color: string | undefined): [number, number, number] | null {\n const match = color?.match(/^rgba?\\(\\s*([\\d.]+)[,\\s]+([\\d.]+)[,\\s]+([\\d.]+)/);\n return match ? [Number(match[1]), Number(match[2]), Number(match[3])] : null;\n}\n\n// Stripe reads hex and rgb colours; a colour the browser reports in another space is left to Stripe's theme.\nfunction stripeColor(color: string | undefined): string | undefined {\n return rgb(color) ? color : color?.startsWith(\"#\") ? color : undefined;\n}\n\n/** Maps the theme's resolved colours to Stripe's appearance; a dark background picks Stripe's `night` theme. */\nexport function toStripeAppearance(colors: ResolvedColors): StripeAppearance {\n const background = rgb(colors.background);\n const dark = background ? (0.2126 * background[0] + 0.7152 * background[1] + 0.0722 * background[2]) / 255 < 0.5 : false;\n const variables = Object.fromEntries(\n Object.entries({\n colorPrimary: stripeColor(colors.primary),\n colorBackground: stripeColor(colors.background),\n colorText: stripeColor(colors.foreground),\n colorDanger: stripeColor(colors.danger),\n borderRadius: colors.radius,\n fontFamily: colors.font,\n }).filter(([, value]) => value),\n );\n return { theme: dark ? \"night\" : \"stripe\", variables };\n}\n\n/** A hidden element styled with the theme tokens, whose computed colours feed Stripe. */\nfunction useStripeAppearance(appearanceKey: unknown) {\n const probe = useRef<HTMLSpanElement>(null);\n const [stripeAppearance, setStripeAppearance] = useState<StripeAppearance | null>(null);\n useEffect(() => {\n if (!probe.current) return;\n const style = getComputedStyle(probe.current);\n setStripeAppearance(\n toStripeAppearance({\n primary: style.color,\n background: style.backgroundColor,\n foreground: style.borderTopColor,\n danger: style.borderBottomColor,\n radius: style.borderTopLeftRadius,\n font: style.fontFamily,\n }),\n );\n }, [appearanceKey]);\n const probeElement = (\n <span\n ref={probe}\n aria-hidden=\"true\"\n style={{\n display: \"none\",\n color: T.primary,\n backgroundColor: T.card,\n borderTop: `1px solid ${T.foreground}`,\n borderBottom: `1px solid ${T.danger}`,\n borderRadius: T.radius,\n fontFamily: T.font,\n }}\n />\n );\n return { probeElement, stripeAppearance };\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 | \"appearance\"\n> & { children?: React.ReactNode };\n\nfunction CheckoutInner({\n submitLabel,\n onSuccess,\n onError,\n onReady,\n className,\n style,\n returnUrl,\n children,\n appearance,\n}: CheckoutInnerProps) {\n const stripe = useStripe();\n const elements = useElements();\n const { el } = useAppearance(appearance);\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>\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: T.radius,\n background: `linear-gradient(90deg, ${T.muted} 25%, ${T.skeleton} 50%, ${T.muted} 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 {...el(\"checkout__error\", { color: T.dangerText, margin: \"0.5rem 0 0\" })}>\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 {...el(\"checkout__submit\", { ...buttonStyle(\"primary\", isProcessing), marginTop: \"1rem\", width: \"100%\" })}\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 appearance: themeAppearance,\n}: StripeCheckoutProps) {\n const { root } = useAppearance(themeAppearance);\n // Re-read the colours whenever the resolved theme variables change, from the provider or this component.\n const { probeElement, stripeAppearance } = useStripeAppearance(JSON.stringify(root(\"checkout\").style));\n const stripePromise = useMemo(\n () =>\n loadStripe(publishableKey, stripeAccount ? { stripeAccount } : undefined),\n [publishableKey, stripeAccount],\n );\n\n const embeddedOptions = useMemo(\n () => ({ clientSecret, onComplete }),\n [clientSecret, onComplete],\n );\n\n if (clientSecret.startsWith(\"cs_\")) {\n return (\n <div {...root(\"checkout\", { ...text.body, ...style }, className)}>\n <EmbeddedCheckoutProvider\n stripe={stripePromise}\n options={embeddedOptions}\n >\n <StripeEmbeddedCheckout />\n </EmbeddedCheckoutProvider>\n </div>\n );\n }\n\n const options: StripeElementsOptions | null = stripeAppearance && { clientSecret, appearance: stripeAppearance };\n\n return (\n <div {...root(\"checkout\", { ...text.body, ...style }, className)}>\n {probeElement}\n {options && (\n <Elements key={clientSecret} stripe={stripePromise} options={options}>\n <CheckoutInner\n submitLabel={submitLabel}\n onSuccess={onSuccess}\n onError={onError}\n onReady={onReady}\n returnUrl={returnUrl}\n children={children}\n appearance={themeAppearance}\n />\n </Elements>\n )}\n </div>\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 appearance?: Appearance;\n}\n\nexport type CheckoutProps = StripeCheckoutProps | ProviderCheckoutProps;\n\nfunction ProviderCheckout(props: ProviderCheckoutProps) {\n const billing = useOptionalBillingContext();\n const { root, el } = useAppearance(props.appearance);\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 className={props.className}\n appearance={props.appearance}\n />\n );\n }\n return (\n <p {...root(\"checkout\", { ...text.body, color: T.dangerText }, props.className)} 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 {...root(\"checkout\", text.body, props.className)}>\n <button\n type=\"button\"\n disabled={busy}\n aria-busy={busy}\n onClick={() => void pay()}\n {...el(\"checkout__submit\", buttonStyle(\"primary\", busy))}\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 && (\n <p role=\"alert\" {...el(\"checkout__error\", { color: T.dangerText })}>\n {error.message}\n </p>\n )}\n </div>\n </CheckoutContext.Provider>\n );\n}\n\nexport function Checkout(props: CheckoutProps) {\n return (\n <NozleBranding>\n {\"checkout\" in props ? <ProviderCheckout {...props} /> : <StripeCheckout {...props} />}\n </NozleBranding>\n );\n}\n","\"use client\";\n\nimport React, { useEffect, useId, useRef, useState } from \"react\";\nimport { NozleBranding } from \"../branding/PoweredByNozle.js\";\nimport { useAppearance } from \"../../appearance/context.js\";\nimport { T, type Appearance } from \"../../appearance/tokens.js\";\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 /** Shows a Back button on the left of the actions, for a step that has a previous step. */\n onBack?: () => void;\n onError?: (error: Error) => void;\n appearance?: Appearance;\n}\n\nconst styles = `\n.nozle-upgradeModal{position:fixed;inset:0;background:#0006;display:flex;align-items:center;justify-content:center;z-index:1000;padding:20px;color:${T.foreground};font:${T.fontBody}}\n.nozle-upgradeModal .nozle-upgradeModal__dialog{box-sizing:border-box;background:${T.card};border:${T.borderWidth} solid ${T.border};border-radius:${T.radius};padding:24px;max-width:480px;width:100%;max-height:90dvh;overflow:auto;box-shadow:${T.shadow},0 12px 48px #0003}\n.nozle-upgradeModal h2{font:${T.fontTitle};letter-spacing:normal;color:${T.foreground};margin:0 0 16px}\n.nozle-upgradeModal button{font:${T.fontAction};padding:9px 14px;border:var(--nozle-button-border-width, ${T.borderWidth}) solid ${T.input};border-radius:var(--nozle-button-radius, calc(${T.radius} * 0.6));background:${T.card};color:inherit;cursor:pointer}\n.nozle-upgradeModal button.nzu-primary{background:${T.primary};border-color:var(--nozle-button-border, ${T.primary});box-shadow:var(--nozle-button-shadow, none);color:${T.primaryForeground}}\n.nozle-upgradeModal button:disabled{opacity:.55;cursor:wait}\n.nozle-upgradeModal :focus-visible{outline:2px solid ${T.primary};outline-offset:3px}\n.nozle-upgradeModal .nozle-upgradeModal__actions{display:flex;flex-wrap:wrap;gap:10px;justify-content:flex-end;margin-top:20px}\n.nozle-upgradeModal .nzu-back{margin-right:auto}\n.nozle-upgradeModal [role=alert]{color:${T.dangerText}}\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 const { root, el } = useAppearance(props.appearance);\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 {...root(\"upgradeModal\", undefined, \"nozle-upgrade-modal\")}>\n <style nonce={props.nonce}>{styles}</style>\n <div\n ref={dialog}\n {...el(\"upgradeModal__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 {...el(\"upgradeModal__actions\")}>\n {props.onBack && (\n <button type=\"button\" className=\"nzu-back\" onClick={props.onBack} disabled={busy}>\n Back\n </button>\n )}\n <button type=\"button\" onClick={props.onCancel} disabled={busy}>\n Close\n </button>\n <button\n type=\"button\"\n className=\"nzu-primary\"\n onClick={() => void handleConfirm()}\n disabled={busy || props.confirmDisabled}\n >\n {busy\n ? \"Checking subscription…\"\n : (props.confirmLabel ?? \"Confirm\")}\n </button>\n </div>\n <NozleBranding />\n </div>\n </div>\n );\n}\n","import { portalTimezones } from \"../portal/timezones.js\";\n\nexport interface FormatMinorAmountOptions {\n /** Omit the fraction (for example \".00\") when the amount is a whole number of major units. */\n trimZeroFraction?: boolean;\n}\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 options: FormatMinorAmountOptions = {},\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 remainder = absolute % scale;\n const trim = options.trimZeroFraction === true && remainder === 0n;\n const decimal = String(remainder).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 .filter(\n (part) => !trim || (part.type !== \"fraction\" && part.type !== \"decimal\"),\n )\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","export interface CatalogPrivilege {\n code: string;\n name: string;\n value_type: string;\n value: string | number | boolean | null;\n}\n\nexport interface CatalogEntitlement {\n feature_type: string;\n code: string;\n name: string;\n description?: string | null;\n usage_limit?: number | null;\n privileges?: CatalogPrivilege[];\n}\n\nexport interface CatalogCreditGrantRule {\n credit_system_code: string;\n amount: string;\n interval: string;\n interval_count?: number;\n}\n\nexport interface CatalogChargeRange {\n from_value: number;\n to_value: number | null;\n per_unit_amount?: string;\n flat_amount?: string;\n rate?: string;\n}\n\n/** A usage charge. Amounts inside `properties` are decimal strings in currency units, not cents. */\nexport interface CatalogCharge {\n code?: string | null;\n feature_code?: string | null;\n charge_model: string;\n properties?: {\n amount?: string;\n package_size?: number;\n free_units?: number;\n rate?: string;\n fixed_amount?: string;\n graduated_ranges?: CatalogChargeRange[];\n volume_ranges?: CatalogChargeRange[];\n graduated_percentage_ranges?: CatalogChargeRange[];\n };\n}\n\nexport interface PlanFeatureSource {\n amount_currency: string;\n entitlements?: CatalogEntitlement[];\n credit_grant_rules?: CatalogCreditGrantRule[];\n charges?: CatalogCharge[];\n}\n\nfunction number(value: number | string): string {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed.toLocaleString(\"en-US\", { maximumFractionDigits: 6 }) : String(value);\n}\n\nfunction money(amount: string, currency: string): string {\n const parsed = Number(amount);\n if (!Number.isFinite(parsed)) return `${amount} ${currency}`;\n try {\n return new Intl.NumberFormat(\"en-US\", { style: \"currency\", currency, maximumFractionDigits: 6 }).format(parsed);\n } catch {\n return `${currency} ${number(amount)}`;\n }\n}\n\nfunction words(code: string): string {\n return code.replace(/_/g, \" \");\n}\n\nfunction entitlementRows(entitlement: CatalogEntitlement): string[] {\n if (entitlement.feature_type === \"config\") {\n return (entitlement.privileges ?? []).flatMap((privilege) => {\n if (privilege.value === null || privilege.value === false) return [];\n if (privilege.value === true) return [`${entitlement.name}: ${privilege.name}`];\n return [`${entitlement.name}: ${privilege.value}`];\n });\n }\n if (entitlement.feature_type === \"metered\" && entitlement.usage_limit != null) {\n return [`${number(entitlement.usage_limit)} ${entitlement.name}`];\n }\n return [entitlement.name];\n}\n\nfunction creditGrantRow(rule: CatalogCreditGrantRule): string {\n const credits = `${number(rule.amount)} ${words(rule.credit_system_code)}`;\n if (rule.interval === \"lifetime\") return `${credits} (one time)`;\n const count = rule.interval_count ?? 1;\n return count === 1 ? `${credits} every ${rule.interval}` : `${credits} every ${count} ${rule.interval}s`;\n}\n\nfunction isZero(amount?: string): boolean {\n return amount === undefined || Number(amount) === 0;\n}\n\nfunction rangeLabel(range: CatalogChargeRange, unit: string): string {\n const from = number(range.from_value);\n return range.to_value === null ? `${from}+ ${unit}` : `${from} to ${number(range.to_value)} ${unit}`;\n}\n\nfunction rangeRows(ranges: CatalogChargeRange[], unit: string, currency: string): string[] {\n return ranges.map((range) => {\n const parts: string[] = [];\n if (!isZero(range.flat_amount)) parts.push(`${money(range.flat_amount as string, currency)} flat`);\n if (!isZero(range.per_unit_amount)) parts.push(`${money(range.per_unit_amount as string, currency)} each`);\n if (!isZero(range.rate)) parts.push(`${number(range.rate as string)}%`);\n return `${rangeLabel(range, unit)}: ${parts.length ? parts.join(\" + \") : \"free\"}`;\n });\n}\n\nfunction chargeRows(charge: CatalogCharge, currency: string): string[] {\n const properties = charge.properties ?? {};\n const unit = charge.feature_code ? words(charge.feature_code) : \"unit\";\n switch (charge.charge_model) {\n case \"standard\":\n return properties.amount === undefined ? [] : [`${money(properties.amount, currency)} per ${unit}`];\n case \"package\": {\n if (properties.amount === undefined || !properties.package_size) return [];\n const free = properties.free_units ? `, first ${number(properties.free_units)} free` : \"\";\n return [`${money(properties.amount, currency)} per ${number(properties.package_size)} ${unit}${free}`];\n }\n case \"graduated\":\n return rangeRows(properties.graduated_ranges ?? [], unit, currency);\n case \"volume\":\n return rangeRows(properties.volume_ranges ?? [], unit, currency);\n case \"graduated_percentage\":\n return rangeRows(properties.graduated_percentage_ranges ?? [], unit, currency);\n case \"percentage\": {\n if (properties.rate === undefined) return [];\n const fixed = isZero(properties.fixed_amount) ? \"\" : ` + ${money(properties.fixed_amount as string, currency)} per ${unit}`;\n return [`${number(properties.rate)}% of each ${unit}${fixed}`];\n }\n default:\n return [];\n }\n}\n\n/**\n * One line per thing a plan gives, built only from the catalog: entitlements, credit grants and usage\n * prices, in the order the catalog returns them. Charges whose price cannot be written as a line\n * (`custom`, `dynamic`) are skipped.\n */\nexport function planFeatures(plan: PlanFeatureSource): string[] {\n const rows = (plan.entitlements ?? []).flatMap(entitlementRows);\n rows.push(...(plan.credit_grant_rules ?? []).map(creditGrantRow));\n for (const charge of plan.charges ?? []) rows.push(...chargeRows(charge, plan.amount_currency));\n return rows;\n}\n\nconst INTERVAL_LABELS: Record<string, string> = {\n weekly: \"week\",\n monthly: \"month\",\n quarterly: \"quarter\",\n semiannual: \"6 months\",\n yearly: \"year\",\n};\n\n/** The unit a plan's base price is billed per, for example `month`. Unknown intervals are shown as sent. */\nexport function intervalLabel(interval: string): string {\n return INTERVAL_LABELS[interval] ?? interval;\n}\n\n/** A plan's base price in its own currency, for example `$14.99` or `₹999`. */\nexport function formatPlanPrice(amountCents: number, currency: string): string {\n const amount = amountCents / 100;\n try {\n return new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency,\n minimumFractionDigits: Number.isInteger(amount) ? 0 : 2,\n maximumFractionDigits: 2,\n }).format(amount);\n } catch {\n return `${currency} ${amount}`;\n }\n}\n\nexport interface ComparisonPlan extends PlanFeatureSource {\n code: string;\n}\n\nexport interface ComparisonRow {\n key: string;\n label: string;\n values: Record<string, string | boolean>;\n}\n\nfunction entitlementValue(entitlement: CatalogEntitlement): string | boolean {\n if (entitlement.feature_type === \"config\") {\n const values = (entitlement.privileges ?? [])\n .filter((privilege) => privilege.value !== null && privilege.value !== false)\n .map((privilege) => (privilege.value === true ? privilege.name : String(privilege.value)));\n return values.length ? values.join(\", \") : false;\n }\n if (entitlement.feature_type === \"metered\" && entitlement.usage_limit != null) {\n return number(entitlement.usage_limit);\n }\n return true;\n}\n\n/**\n * One row per entitlement and per granted credit system across the plans, in the order they first\n * appear. A plan that does not have the entitlement gets `false`, so the table shows the real gap.\n */\nexport function comparisonRows(plans: ComparisonPlan[]): ComparisonRow[] {\n const rows = new Map<string, ComparisonRow>();\n const row = (key: string, label: string): ComparisonRow => {\n let existing = rows.get(key);\n if (!existing) {\n existing = { key, label, values: {} };\n rows.set(key, existing);\n }\n return existing;\n };\n for (const plan of plans) {\n for (const entitlement of plan.entitlements ?? []) {\n row(`entitlement:${entitlement.code}`, entitlement.name).values[plan.code] = entitlementValue(entitlement);\n }\n for (const rule of plan.credit_grant_rules ?? []) {\n row(`credit:${rule.credit_system_code}`, words(rule.credit_system_code)).values[plan.code] = creditGrantRow(rule);\n }\n }\n const all = [...rows.values()];\n for (const item of all) {\n for (const plan of plans) item.values[plan.code] ??= false;\n }\n return all;\n}\n\nexport interface SortablePlan {\n amount_cents: number;\n amount_currency: string;\n}\n\n/**\n * The default plan order: cheapest base price first, so a free plan comes first. Plans in different\n * currencies stay grouped in the order each currency first appears, because their amounts cannot be\n * compared. Plans with the same price keep the order the catalog returned them in.\n */\nexport function sortPlansByPrice<T extends SortablePlan>(plans: T[]): T[] {\n const currencyRank = new Map<string, number>();\n for (const plan of plans) {\n if (!currencyRank.has(plan.amount_currency)) currencyRank.set(plan.amount_currency, currencyRank.size);\n }\n return plans\n .map((plan, index) => ({ plan, index }))\n .sort(\n (a, b) =>\n (currencyRank.get(a.plan.amount_currency) as number) - (currencyRank.get(b.plan.amount_currency) as number) ||\n a.plan.amount_cents - b.plan.amount_cents ||\n a.index - b.index,\n )\n .map(({ plan }) => plan);\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 { useAppearance } from \"../../appearance/context.js\";\nimport { T, type Appearance } from \"../../appearance/tokens.js\";\nimport { formatBillingDate, formatMinorAmount } from \"../billing/amounts.js\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useOptionalBillingContext } from \"../../provider.js\";\nimport { catalogQuery, idleQueryClient } from \"../../hooks/use-plans.js\";\nimport { planFeatures } from \"../pricing/plan-features.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 appearance?: Appearance;\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:${T.fontBody};color:${T.foreground};margin-top:12px}\n.nozle-plan-change button{font:${T.fontAction};padding:9px 14px;border:var(--nozle-button-border-width, ${T.borderWidth}) solid ${T.input};border-radius:var(--nozle-button-radius, calc(${T.radius} * 0.6));background:${T.card};color:inherit;cursor:pointer}\n.nozle-plan-change button:disabled{opacity:.55;cursor:wait}\n.nozle-plan-change :focus-visible{outline:2px solid ${T.primary};outline-offset:3px}\n.nozle-plan-change [role=alert]{color:${T.dangerText}}\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:${T.borderWidth} solid ${T.border};border-radius:calc(${T.radius} * 0.6);background:${T.card}}\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 dt{font:${T.fontMeta};color:${T.mutedForeground}}\n.nozle-upgrade-modal dd{margin:0;text-align:right}\n.nozle-upgrade-modal label{font:${T.fontBody};font-weight:500}\n.nozle-plan-change .nzpc-plans{display:grid;gap:10px}\n.nozle-plan-change label.nzpc-plan{display:flex;gap:12px;align-items:flex-start;padding:14px 16px;border:${T.borderWidth} solid ${T.border};border-radius:calc(${T.radius} * 0.75);background:${T.card};cursor:pointer;font:${T.fontBody};color:${T.foreground}}\n.nozle-plan-change label.nzpc-plan[data-selected]{border-color:${T.primary};background:${T.primarySoft}}\n.nozle-plan-change label.nzpc-plan input{flex:none;width:auto;margin:4px 0 0;padding:0;accent-color:${T.primary}}\n.nozle-plan-change .nzpc-plan-body{display:grid;gap:4px;min-width:0;flex:1}\n.nozle-plan-change .nzpc-plan-head{display:flex;justify-content:space-between;align-items:baseline;gap:8px}\n.nozle-plan-change .nzpc-plan-name{font:${T.fontHeading}}\n.nozle-plan-change .nzpc-plan-op{font:${T.labelFont};letter-spacing:${T.labelSpacing};text-transform:${T.labelTransform};color:${T.mutedForeground}}\n.nozle-plan-change .nzpc-plan-price{font-variant-numeric:tabular-nums}\n.nozle-plan-change .nzpc-plan-muted{font:${T.fontMeta};color:${T.mutedForeground};margin:0}\n.nozle-plan-change .nzpc-plan ul{list-style:none;margin:2px 0 0;padding:0;display:grid;gap:2px;font:${T.fontMeta};color:${T.mutedForeground}}\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 appearance,\n}: PlanChangeControlProps) {\n const { root } = useAppearance(appearance);\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 // The public catalog adds each plan's description and features to the choices, when the\n // control is inside a BillingProvider; without one the choices show name and price.\n const billing = useOptionalBillingContext();\n const catalog = useQuery(\n { ...catalogQuery(billing?.client), enabled: Boolean(billing) },\n billing?.queryClient ?? idleQueryClient,\n );\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 {...root(\"planChangeControl\", undefined, \"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 appearance={appearance}\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 onBack={\n mode === \"confirm\"\n ? () => {\n setMode(\"choose\");\n setQuote(undefined);\n setFailure(undefined);\n }\n : undefined\n }\n onSubmit={confirm}\n >\n {failure && <p role=\"alert\">{failure}</p>}\n {mode === \"choose\" && (\n <div className=\"nzpc-plans\" role=\"radiogroup\" aria-label=\"Choose a plan\">\n {state.eligiblePlans.map((plan) => {\n const details = catalog.data?.plans.find((entry) => entry.code === plan.code);\n const features = details ? planFeatures(details) : [];\n return (\n <label\n key={plan.code}\n className=\"nzpc-plan\"\n data-selected={target === plan.code ? \"\" : undefined}\n >\n <input\n type=\"radio\"\n name={`nozle-plan-${subscriptionId}`}\n value={plan.code}\n checked={target === plan.code}\n disabled={busy}\n onChange={() => {\n setTarget(plan.code);\n setQuote(undefined);\n }}\n />\n <span className=\"nzpc-plan-body\">\n <span className=\"nzpc-plan-head\">\n <span className=\"nzpc-plan-name\">{plan.name}</span>\n <span className=\"nzpc-plan-op\">\n {plan.operation === \"upgrade\" ? \"Upgrade\" : \"Downgrade\"}\n </span>\n </span>\n <span className=\"nzpc-plan-price\">\n {formatMinorAmount(plan.amountCents, plan.currency, locale)} / {plan.interval}\n </span>\n {details?.description && <p className=\"nzpc-plan-muted\">{details.description}</p>}\n {features.length > 0 && (\n <ul>\n {features.map((feature) => (\n <li key={feature}>{feature}</li>\n ))}\n </ul>\n )}\n </span>\n </label>\n );\n })}\n </div>\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 createContext,\n useContext,\n useEffect,\n useRef,\n useState,\n type CSSProperties,\n type FormEvent,\n type HTMLAttributes,\n} from \"react\";\nimport { useAppearance, type UseAppearance } from \"../../appearance/context.js\";\nimport { NozleBranding } from \"../branding/PoweredByNozle.js\";\nimport type { Appearance, ElementKey } from \"../../appearance/tokens.js\";\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 appearance?: Appearance;\n}\n\n// Element overrides for the portal's inner parts, set once by BillingPortal.\nconst PortalAppearance = createContext<{ el: UseAppearance[\"el\"]; appearance?: Appearance }>({\n el: (key) => ({ className: \"nozle-\" + key }),\n});\n\n/** A portal element that also takes its `appearance.elements` class name and style. */\nfunction Part({\n as: Tag = \"div\",\n part,\n className,\n style,\n ...rest\n}: HTMLAttributes<HTMLElement> & { as?: \"div\" | \"section\" | \"article\"; part: ElementKey }) {\n const themed = useContext(PortalAppearance).el(part, style, className);\n return <Tag {...rest} {...themed} />;\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 appearance,\n}: BillingPortalProps) {\n const { root, el } = useAppearance(appearance);\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 <PortalAppearance.Provider value={{ el, appearance }}>\n <div\n {...root(\"billingPortal\", style, `nozle-billing-portal ${className}`)}\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 </PortalAppearance.Provider>\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 <Part role=\"alert\" className=\"nzp-error\" part=\"billingPortal__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 </Part>\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 <NozleBranding show={data.customerPortalOrganization.nozleBranding === true}>\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 className=\"nzp-notice\" 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 <Part as=\"section\" part=\"billingPortal__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 </Part>\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 </NozleBranding>\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 portalAppearance = useContext(PortalAppearance).appearance;\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 <Part as=\"section\" part=\"billingPortal__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 <Part\n as=\"article\"\n part=\"billingPortal__card\"\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 <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 {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 <div className=\"nzp-card-actions\">\n <button\n type=\"button\"\n onClick={() => onUsage(subscription)}\n >\n View usage\n </button>\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 appearance={portalAppearance}\n locale={locale}\n timezone={timezone}\n nonce={nonce}\n onError={onError}\n onChanged={retry}\n />\n )}\n {cancellationActions && subscription.externalId && (\n <CancellationControl\n subscription={cancellationState(subscription)}\n actions={cancellationActions}\n appearance={portalAppearance}\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 </div>\n </Part>\n ))}\n </div>\n )}\n <Pager\n page={page}\n total={result.metadata.totalPages}\n setPage={setPage}\n />\n </>\n )}\n </Part>\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 <Part as=\"section\" part=\"billingPortal__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 <Part className=\"nzp-table\" part=\"billingPortal__table\">\n <table>\n <thead>\n <tr>\n <th>Feature</th>\n <th className=\"nzp-num\">Units</th>\n <th className=\"nzp-num\">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 className=\"nzp-num\">{charge.units}</td>\n <td className=\"nzp-num\">\n {money(charge.amountCents, usage.currency, locale)}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </Part>\n ) : (\n <p className=\"nzp-empty\">\n No usage recorded for this billing period.\n </p>\n )}\n </>\n )}\n </Part>\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 <Part as=\"section\" part=\"billingPortal__section\" aria-label=\"Invoice history\">\n <h3>Invoice history</h3>\n <form\n className=\"nzp-actions\"\n role=\"search\"\n onSubmit={(event) => {\n event.preventDefault();\n setFilter({ page: 1, searchTerm: search.trim() });\n }}\n >\n <label className=\"nzp-search\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.25\" strokeLinecap=\"round\" aria-hidden=\"true\">\n <circle cx=\"11\" cy=\"11\" r=\"7\" />\n <path d=\"m20 20-3.5-3.5\" />\n </svg>\n <input\n type=\"search\"\n aria-label=\"Search invoices\"\n placeholder=\"Search invoices\"\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 <Part className=\"nzp-table\" part=\"billingPortal__table\">\n <table>\n <thead>\n <tr>\n <th>Invoice</th>\n <th>Date</th>\n <th className=\"nzp-num\">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 className=\"nzp-num\">\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 </Part>\n )}\n <Pager\n page={filter.page}\n total={result.metadata.totalPages}\n setPage={(page) => setFilter({ ...filter, page })}\n />\n </>\n )}\n </Part>\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 <Part as=\"section\" part=\"billingPortal__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 </Part>\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 <Part as=\"section\" part=\"billingPortal__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 <Part as=\"article\" part=\"billingPortal__card\" 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 </Part>\n ))}\n </div>\n <Pager\n page={page}\n total={result.metadata.totalPages}\n setPage={setPage}\n />\n </>\n )}\n </Part>\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 <Part as=\"section\" part=\"billingPortal__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 </Part>\n );\n}\n","import { useInfiniteQuery, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { useCallback } from \"react\";\nimport { useBillingContext, type BillingFetch } from \"../provider.js\";\nimport type { CreditBalanceData } from \"../components/credits/CreditBalance.js\";\nimport type { CreditOperationData } from \"../components/credits/CreditHistory.js\";\nimport type { CustomerUsageData } from \"../components/usage/usage-data.js\";\n\n/** The customer's subscription with its plan and any scheduled change, or nulls without one. */\nexport interface BillingSubscription {\n subscription: {\n external_id: string;\n plan_code: string;\n status: string;\n ending_at: string | null;\n plan: { code: string; name: string; amount_cents: number | string; currency: string; interval: string };\n } | null;\n pending_change: {\n plan_code: string;\n name: string;\n effective_at: string;\n } | null;\n /** The customer has an unpaid invoice past its due date. */\n past_due?: boolean;\n}\n\n/** An entitlement decision for one feature (`can()` on your backend). */\nexport interface EntitlementResult {\n allowed: boolean;\n used?: number;\n limit: number | null;\n remaining: number | null;\n reason?: string;\n}\n\n/** The price of changing to another plan, before the customer confirms. */\nexport interface UpgradePreview {\n quote_id: string;\n currency: string;\n net_amount_cents: number | string;\n amount_due_now_cents: number | string;\n amount_due_at_effective_cents: number | string;\n transition_direction: \"upgrade\" | \"downgrade\";\n timing: \"immediate\" | \"end_of_period\";\n effective_at: string;\n renewal_at: string | null;\n}\n\ninterface CreditBalancesResponse {\n balances: Array<CreditBalanceData & { credit_system: string }>;\n}\n\ninterface CreditHistoryPage {\n operations: CreditOperationData[];\n next_cursor: string | null;\n}\n\nfunction useBilling(): { fetchRoute: BillingFetch; queryClient: ReturnType<typeof useBillingContext>[\"queryClient\"]; endpoint: string } {\n const { billingFetch, billingEndpoint, queryClient } = useBillingContext();\n if (!billingFetch || !billingEndpoint) {\n throw new Error(\"Billing hooks need BillingProvider billingEndpoint, a backend route served by createBillingHandler\");\n }\n return { fetchRoute: billingFetch, queryClient, endpoint: billingEndpoint };\n}\n\n/** The signed-in customer's subscription, plan and scheduled change. */\nexport function useSubscription() {\n const { fetchRoute, queryClient, endpoint } = useBilling();\n return useQuery(\n { queryKey: [\"nozle\", endpoint, \"subscription\"], queryFn: () => fetchRoute<BillingSubscription>(\"subscription\") },\n queryClient,\n );\n}\n\n/** Whether the customer may use a feature now, with used, limit and remaining. */\nexport function useEntitlement(featureCode: string, options: { enabled?: boolean } = {}) {\n const { fetchRoute, queryClient, endpoint } = useBilling();\n return useQuery(\n {\n queryKey: [\"nozle\", endpoint, \"entitlement\", featureCode],\n queryFn: () => fetchRoute<EntitlementResult>(\"entitlement\", { feature: featureCode }),\n enabled: Boolean(featureCode) && options.enabled !== false,\n staleTime: 10_000,\n },\n queryClient,\n );\n}\n\n/**\n * One credit balance, ready for `<CreditBalance balance={data} />`: the given credit system,\n * or the first one with credits, or the first one.\n */\nexport function useCreditBalance(creditSystemCode?: string) {\n const { fetchRoute, queryClient, endpoint } = useBilling();\n return useQuery(\n {\n queryKey: [\"nozle\", endpoint, \"credits\"],\n queryFn: () => fetchRoute<CreditBalancesResponse>(\"credits\"),\n select: (data): CreditBalanceData | null => {\n const balances = data.balances ?? [];\n if (creditSystemCode) return balances.find((b) => b.credit_system === creditSystemCode) ?? null;\n return balances.find((b) => Number(b.available) > 0) ?? balances[0] ?? null;\n },\n },\n queryClient,\n );\n}\n\n/**\n * Credit operations, newest first, a page at a time. `operations` flattens the loaded pages for\n * `<CreditHistory operations={operations} hasMore={hasNextPage} onLoadMore={fetchNextPage} />`.\n */\nexport function useCreditHistory(options: { creditSystemCode?: string; limit?: number } = {}) {\n const { fetchRoute, queryClient, endpoint } = useBilling();\n const query = useInfiniteQuery(\n {\n queryKey: [\"nozle\", endpoint, \"credit-history\", options.creditSystemCode, options.limit],\n queryFn: ({ pageParam }) =>\n fetchRoute<CreditHistoryPage>(\"credit-history\", {\n credit_system: options.creditSystemCode,\n limit: options.limit,\n cursor: pageParam,\n }),\n initialPageParam: undefined as string | undefined,\n getNextPageParam: (page) => page.next_cursor ?? undefined,\n },\n queryClient,\n );\n return { ...query, operations: query.data?.pages.flatMap((page) => page.operations) ?? [] };\n}\n\n/**\n * The current billing period's usage (`period: \"current\"`, the default) for `<UsageBreakdown>`,\n * or past periods (`period: \"past\"`) for `<UsageTrend>`.\n */\nexport function useUsage(options?: { period?: \"current\" }): UseQueryResult<CustomerUsageData | null>;\nexport function useUsage(options: { period: \"past\"; periods?: number }): UseQueryResult<CustomerUsageData[]>;\nexport function useUsage(\n options: { period?: \"current\" | \"past\"; periods?: number } = {},\n): UseQueryResult<CustomerUsageData | CustomerUsageData[] | null> {\n const { fetchRoute, queryClient, endpoint } = useBilling();\n const period = options.period ?? \"current\";\n return useQuery(\n {\n queryKey: [\"nozle\", endpoint, \"usage\", period, options.periods],\n queryFn: () =>\n fetchRoute<{ usage?: CustomerUsageData | null; periods?: CustomerUsageData[] }>(\"usage\", {\n period,\n periods: options.periods,\n }),\n select: (data) => (period === \"past\" ? (data.periods ?? []) : (data.usage ?? null)),\n },\n queryClient,\n );\n}\n\n/** One of the customer's finalized invoices. */\nexport interface InvoiceData {\n nozle_id: string;\n number: string;\n issuing_date: string;\n payment_due_date?: string | null;\n payment_status: string;\n payment_overdue?: boolean;\n currency: string;\n total_amount_cents: number;\n file_url?: string | null;\n}\n\nexport interface InvoicePageData {\n invoices: InvoiceData[];\n meta: { current_page: number; next_page: number | null; prev_page: number | null; total_pages: number; total_count: number };\n}\n\n/** The customer's finalized invoices, newest first, 20 per page. */\nexport function useInvoices(options: { page?: number } = {}) {\n const { fetchRoute, queryClient, endpoint } = useBilling();\n const page = options.page ?? 1;\n return useQuery(\n {\n queryKey: [\"nozle\", endpoint, \"invoices\", page],\n queryFn: () => fetchRoute<InvoicePageData>(\"invoices\", { page }),\n },\n queryClient,\n );\n}\n\n/**\n * Returns a function that resolves an invoice's PDF URL, or `null` while Nozle is still generating\n * the PDF (ask again in a few seconds). Your backend only answers for the customer's own invoices.\n */\nexport function useInvoiceDownload(): (invoiceId: string) => Promise<string | null> {\n const { fetchRoute } = useBilling();\n return useCallback(\n async (invoiceId: string) => (await fetchRoute<{ url: string | null }>(\"invoice-download\", { id: invoiceId })).url,\n [fetchRoute],\n );\n}\n\n/** What changing to `planCode` would cost now and later. Does nothing until a plan is given. */\nexport function useUpgradePreview(planCode: string | undefined) {\n const { fetchRoute, queryClient, endpoint } = useBilling();\n return useQuery(\n {\n queryKey: [\"nozle\", endpoint, \"preview\", planCode],\n queryFn: () => fetchRoute<UpgradePreview>(\"preview\", { plan: planCode }),\n enabled: Boolean(planCode),\n staleTime: 0,\n },\n queryClient,\n );\n}\n\n/** Returns a function that reloads every billing hook, for example after checkout or a plan change. */\nexport function useBillingRefresh(): () => Promise<void> {\n const { queryClient } = useBillingContext();\n return useCallback(() => queryClient.invalidateQueries({ queryKey: [\"nozle\"] }), [queryClient]);\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","// Public catalog types and pure helpers for the pricing table.\n//\n// `GET /api/v1/plans` returns `plans` and, on current APIs, `families`. A\n// family groups the billing intervals of one offer and carries the pricing\n// table settings; the pricing table shows one card per family. Older APIs\n// return no `families` key: each plan is then its own card.\n\nimport { formatMinorAmount } from \"../billing/amounts.js\";\nimport {\n intervalLabel,\n planFeatures as catalogPlanFeatures,\n sortPlansByPrice,\n type CatalogCharge,\n type CatalogCreditGrantRule,\n type CatalogEntitlement,\n type CatalogPrivilege,\n} from \"./plan-features.js\";\n\nexport type PricingInterval =\n | \"weekly\"\n | \"monthly\"\n | \"quarterly\"\n | \"semiannual\"\n | \"yearly\";\n\nexport type PricingPrivilege = CatalogPrivilege;\n\nexport type PricingEntitlement = CatalogEntitlement;\n\nexport interface PricingPlan {\n code: string;\n name: string;\n amount_cents: number;\n amount_currency: string;\n // Older APIs may return other interval strings.\n interval: PricingInterval | (string & {});\n description?: string | null;\n pending_deletion?: boolean;\n plan_family_code?: string | null;\n /** Present in the public catalog. Absent from an older or reduced response. */\n entitlements?: PricingEntitlement[];\n credit_grant_rules?: CatalogCreditGrantRule[];\n charges?: CatalogCharge[];\n}\n\n/** Display settings of one feature on a family's pricing card. */\nexport interface PricingFamilyFeature {\n code: string;\n name?: string | null;\n description?: string | null;\n show_on_pricing?: boolean;\n show_description?: boolean;\n display_position?: number | null;\n}\n\nexport interface PricingFamily {\n code: string;\n name: string;\n description?: string | null;\n show_on_pricing?: boolean;\n pricing_position?: number | null;\n pricing_highlighted?: boolean;\n badge_text?: string | null;\n cta_text?: string | null;\n /** Codes of the family's plans, ordered weekly to yearly. */\n plan_codes: string[];\n features?: PricingFamilyFeature[];\n}\n\n/** The `GET /api/v1/plans` payload. `families` is absent on older APIs. */\nexport interface PricingCatalog {\n plans: PricingPlan[];\n families?: PricingFamily[] | null;\n}\n\nexport interface PricingFeature {\n label: string;\n description?: string | null;\n}\n\n/**\n * Feature overrides: a record keyed by family code or plan code, or an array\n * aligned to the cards in display order.\n */\nexport type PricingFeatureOverrides =\n | Record<string, Array<string | PricingFeature>>\n | Array<Array<string | PricingFeature> | undefined>;\n\nexport interface PricingIntervalOption {\n interval: PricingInterval;\n label: string;\n /** Best whole-percent saving of any visible family against its monthly plan. */\n savingsPercent: number | null;\n}\n\nexport interface PricingCard {\n /** Family code, or the plan code when the catalog has no families. */\n key: string;\n /** Null when the catalog has no families (older APIs). */\n family: PricingFamily | null;\n /** The family's live plans, ordered weekly to yearly. */\n plans: PricingPlan[];\n /** The plan shown, checked out and passed to `onSelect`. */\n plan: PricingPlan;\n /** True when the family has no plan for the requested interval. */\n isFallbackInterval: boolean;\n name: string;\n description: string | null;\n /**\n * Family cards: the per-month equivalent of the plan's price, for example\n * \"$40.83\". Without families: the plan's price, for example \"$14.99\".\n */\n price: string;\n /** \"/mo\" on family cards; the plan's own interval (\"/quarter\") without families. */\n pricePeriod: string;\n /**\n * Family cards: for example \"Billed $490 yearly · save 17%\" or \"Billed\n * monthly\". Empty without families.\n */\n billing: string;\n /** Whole-percent saving against the family's monthly plan, when positive. */\n savingsPercent: number | null;\n features: PricingFeature[];\n highlighted: boolean;\n /** Badge text when highlighted, otherwise null. */\n badge: string | null;\n /** Call-to-action text (family `cta_text` or \"Get {name}\"). */\n cta: string;\n /** The family code or one of its plan codes is listed in `contactSales`. */\n enterprise: boolean;\n}\n\nexport interface GetPricingCardsOptions {\n /**\n * Interval to show (\"annual\" is accepted for \"yearly\"). Defaults to\n * monthly when offered, else the first available interval. Without\n * families, plans of other intervals are left out only when an interval\n * is given.\n */\n interval?: PricingInterval | \"annual\" | null;\n locale?: string;\n /** Family code or plan code to highlight instead of `pricing_highlighted`. */\n highlight?: string | null;\n /**\n * Badge on the highlighted card, replacing the family's `badge_text`\n * (default \"Most Popular\"). `null` shows no badge.\n */\n badge?: string | null;\n features?: PricingFeatureOverrides;\n /**\n * Codes of families or plans sold on request. Their card's `enterprise` is\n * true. Without families they also stay visible whatever the interval and\n * come last.\n */\n contactSales?: readonly string[];\n /**\n * Orders the plans of a catalog without families. By default they are\n * sorted by base price, cheapest first, with `contactSales` plans last.\n * Families are ordered by `pricing_position`.\n */\n sort?: (a: PricingPlan, b: PricingPlan) => number;\n}\n\n// ─── Intervals ───────────────────────────────────────────────────────────────\n\nexport const PRICING_INTERVALS: readonly PricingInterval[] = [\n \"weekly\",\n \"monthly\",\n \"quarterly\",\n \"semiannual\",\n \"yearly\",\n];\n\nconst INTERVAL_LABELS: Record<PricingInterval, string> = {\n weekly: \"Weekly\",\n monthly: \"Monthly\",\n quarterly: \"Quarterly\",\n semiannual: \"Every 6 months\",\n yearly: \"Annual\",\n};\n\nconst BILLED_WORDS: Record<PricingInterval, string> = {\n weekly: \"weekly\",\n monthly: \"monthly\",\n quarterly: \"quarterly\",\n semiannual: \"every 6 months\",\n yearly: \"yearly\",\n};\n\n// Billing periods per year, and the months-per-period ratio as a fraction\n// (numerator / denominator) for the exact per-month equivalent.\nconst PERIODS_PER_YEAR: Record<PricingInterval, bigint> = {\n weekly: 52n,\n monthly: 12n,\n quarterly: 4n,\n semiannual: 2n,\n yearly: 1n,\n};\n\nfunction isPricingInterval(value: unknown): value is PricingInterval {\n return (\n typeof value === \"string\" &&\n (PRICING_INTERVALS as readonly string[]).includes(value)\n );\n}\n\nfunction intervalRank(interval: string): number {\n return (PRICING_INTERVALS as readonly string[]).indexOf(interval);\n}\n\n/** Normalizes an interval name, accepting \"annual\" for \"yearly\". */\nexport function normalizePricingInterval(\n value: string | null | undefined,\n): PricingInterval | null {\n if (value === \"annual\") return \"yearly\";\n return isPricingInterval(value) ? value : null;\n}\n\nexport function getPricingIntervalLabel(interval: PricingInterval): string {\n return INTERVAL_LABELS[interval];\n}\n\n// ─── Ordering ────────────────────────────────────────────────────────────────\n\nfunction hasPosition(value: number | null | undefined): value is number {\n return typeof value === \"number\" && Number.isFinite(value);\n}\n\n/** Compare two optional positions: positioned items first, ascending; nulls last. */\nfunction comparePositions(\n a: number | null | undefined,\n b: number | null | undefined,\n): number {\n const aSet = hasPosition(a);\n const bSet = hasPosition(b);\n if (aSet && bSet) return a - b;\n if (aSet) return -1;\n if (bSet) return 1;\n return 0;\n}\n\n// ─── Locale ──────────────────────────────────────────────────────────────────\n\nconst DEFAULT_LOCALE = \"en-US\";\n\n/**\n * Returns `locale` when it is a well-formed BCP 47 tag, otherwise `en-US`.\n * Intl constructors and `localeCompare` throw a RangeError on malformed tags\n * such as \"en_US\"; this keeps a bad `locale` prop from crashing a render.\n */\nexport function resolvePricingLocale(locale: string | null | undefined): string {\n if (typeof locale !== \"string\" || locale.trim() === \"\") return DEFAULT_LOCALE;\n try {\n Intl.getCanonicalLocales(locale);\n return locale;\n } catch {\n return DEFAULT_LOCALE;\n }\n}\n\n// ─── Groups ──────────────────────────────────────────────────────────────────\n\ninterface PricingGroup {\n key: string;\n family: PricingFamily | null;\n plans: PricingPlan[];\n}\n\nfunction isLive(plan: PricingPlan): boolean {\n return plan.pending_deletion !== true;\n}\n\nfunction hasFamilies(\n catalog: PricingCatalog,\n): catalog is PricingCatalog & { families: PricingFamily[] } {\n return Array.isArray(catalog.families);\n}\n\n/**\n * Visible groups in display order. With families: one per family with\n * `show_on_pricing !== false` and at least one live plan, ordered by\n * `pricing_position` (nulls last) then API order. Without families: one per\n * live plan, in API order.\n */\nfunction getPricingGroups(catalog: PricingCatalog): PricingGroup[] {\n const plans = catalog.plans ?? [];\n if (!hasFamilies(catalog)) {\n return plans\n .filter(isLive)\n .map((plan) => ({ key: plan.code, family: null, plans: [plan] }));\n }\n const byCode = new Map<string, PricingPlan>();\n for (const plan of plans) {\n if (isLive(plan) && !byCode.has(plan.code)) byCode.set(plan.code, plan);\n }\n return catalog.families\n .map((family, index) => ({ family, index }))\n .filter(({ family }) => family.show_on_pricing !== false)\n .sort(\n (a, b) =>\n comparePositions(a.family.pricing_position, b.family.pricing_position) ||\n a.index - b.index,\n )\n .map(({ family }) => {\n const seen = new Set<string>();\n const familyPlans: PricingPlan[] = [];\n for (const code of family.plan_codes ?? []) {\n const plan = byCode.get(code);\n if (plan && !seen.has(code)) {\n seen.add(code);\n familyPlans.push(plan);\n }\n }\n return { key: family.code, family, plans: familyPlans };\n })\n .filter((group) => group.plans.length > 0);\n}\n\n// ─── Money ───────────────────────────────────────────────────────────────────\n\nfunction toMinor(value: number | string): bigint | null {\n const raw = String(value);\n if (!/^-?\\d+$/.test(raw)) return null;\n if (typeof value === \"number\" && !Number.isSafeInteger(value)) return null;\n return BigInt(raw);\n}\n\n/** Round-half-up of numerator / denominator for non-negative integers. */\nfunction divideRounded(numerator: bigint, denominator: bigint): bigint {\n if (numerator < 0n) return -divideRounded(-numerator, denominator);\n return (2n * numerator + denominator) / (2n * denominator);\n}\n\nfunction perMonthMinor(amount: bigint, interval: PricingInterval): bigint {\n return divideRounded(amount * PERIODS_PER_YEAR[interval], 12n);\n}\n\nfunction fmt(amount: bigint | number, currency: string, locale: string): string {\n return formatMinorAmount(String(amount), currency, locale, {\n trimZeroFraction: true,\n });\n}\n\n/**\n * Whole-percent saving of `plan` over a year against `monthly`, or null when\n * not positive, not comparable or not computable.\n */\nfunction savingsAgainstMonthly(\n plan: PricingPlan,\n monthly: PricingPlan | undefined,\n): number | null {\n if (!monthly || monthly === plan) return null;\n if (!isPricingInterval(plan.interval) || plan.interval === \"monthly\") return null;\n if (monthly.amount_currency !== plan.amount_currency) return null;\n const monthlyAmount = toMinor(monthly.amount_cents);\n const amount = toMinor(plan.amount_cents);\n if (monthlyAmount === null || amount === null) return null;\n const base = monthlyAmount * 12n;\n const cost = amount * PERIODS_PER_YEAR[plan.interval];\n if (base <= 0n || cost >= base) return null;\n const percent = Number(divideRounded(100n * (base - cost), base));\n return percent > 0 ? percent : null;\n}\n\nfunction monthlyPlanOf(group: PricingGroup): PricingPlan | undefined {\n return group.family\n ? group.plans.find((plan) => plan.interval === \"monthly\")\n : undefined;\n}\n\n// ─── Intervals available ─────────────────────────────────────────────────────\n\n/** Intervals offered by the visible cards, ordered weekly to yearly. */\nexport function getAvailableIntervals(catalog: PricingCatalog): PricingInterval[] {\n const present = new Set<string>();\n for (const group of getPricingGroups(catalog)) {\n for (const plan of group.plans) present.add(plan.interval);\n }\n return PRICING_INTERVALS.filter((interval) => present.has(interval));\n}\n\n/**\n * Options for an interval switch: each available interval with its label\n * and the best family saving against the family's monthly plan.\n */\nexport function getPricingIntervalOptions(\n catalog: PricingCatalog,\n): PricingIntervalOption[] {\n const groups = getPricingGroups(catalog);\n return getAvailableIntervals(catalog).map((interval) => {\n let best: number | null = null;\n if (interval !== \"monthly\") {\n for (const group of groups) {\n const plan = group.plans.find((p) => p.interval === interval);\n const saving = plan ? savingsAgainstMonthly(plan, monthlyPlanOf(group)) : null;\n if (saving !== null && (best === null || saving > best)) best = saving;\n }\n }\n return { interval, label: INTERVAL_LABELS[interval], savingsPercent: best };\n });\n}\n\n/**\n * The interval to show first: `preferred` (\"annual\" means \"yearly\") when it\n * is available, otherwise monthly when available, otherwise the first one.\n */\nexport function getDefaultInterval(\n catalog: PricingCatalog,\n preferred?: string | null,\n): PricingInterval | null {\n const available = getAvailableIntervals(catalog);\n const wanted = normalizePricingInterval(preferred);\n if (wanted && available.includes(wanted)) return wanted;\n if (available.includes(\"monthly\")) return \"monthly\";\n return available[0] ?? null;\n}\n\n/** The family's plan for `interval`, else the plan of the nearest interval (shorter on a tie). */\nfunction pickPlan(plans: PricingPlan[], interval: PricingInterval | null): PricingPlan {\n if (interval === null) return plans[0];\n const exact = plans.find((plan) => plan.interval === interval);\n if (exact) return exact;\n const target = intervalRank(interval);\n let best = plans[0];\n let bestScore = Number.POSITIVE_INFINITY;\n for (const plan of plans) {\n const rank = intervalRank(plan.interval);\n if (rank < 0) continue;\n // Distance first; on a tie the shorter interval wins.\n const score = Math.abs(rank - target) * 2 + (rank > target ? 1 : 0);\n if (score < bestScore) {\n best = plan;\n bestScore = score;\n }\n }\n return best;\n}\n\n// ─── Features ────────────────────────────────────────────────────────────────\n\nfunction isTrueBoolean(privilege: PricingPrivilege): boolean {\n const { value } = privilege;\n if (value === true) return true;\n return (\n privilege.value_type === \"boolean\" &&\n typeof value === \"string\" &&\n value.toLowerCase() === \"true\"\n );\n}\n\nfunction formatPrivilegeValue(\n privilege: PricingPrivilege,\n numberFormat: Intl.NumberFormat,\n): string | null {\n const { value } = privilege;\n if (value === null || value === undefined) return null;\n if (isTrueBoolean(privilege)) return null;\n if (value === false) return \"No\";\n if (typeof value === \"number\") {\n return Number.isFinite(value) ? numberFormat.format(value) : null;\n }\n const text = String(value).trim();\n if (text === \"\") return null;\n if (privilege.value_type === \"boolean\" && text.toLowerCase() === \"false\") {\n return \"No\";\n }\n if (privilege.value_type === \"integer\" && /^-?\\d+$/.test(text)) {\n const parsed = Number(text);\n if (Number.isSafeInteger(parsed)) return numberFormat.format(parsed);\n }\n return text;\n}\n\n/** \"Projects: 20\", \"Storage (GB: 10, Tier: fast)\", \"API calls: 100,000\" or just the name. */\nfunction featureLabel(\n name: string,\n entitlement: PricingEntitlement | undefined,\n numberFormat: Intl.NumberFormat,\n): string {\n const values = (entitlement?.privileges ?? [])\n .map((privilege) => ({\n privilege,\n text: formatPrivilegeValue(privilege, numberFormat),\n }))\n .filter(\n (entry): entry is { privilege: PricingPrivilege; text: string } =>\n entry.text !== null,\n );\n if (values.length === 1) return `${name}: ${values[0].text}`;\n if (values.length > 1) {\n const parts = values.map(({ privilege, text }) => {\n const privilegeName = privilege.name?.trim() || privilege.code;\n return `${privilegeName}: ${text}`;\n });\n return `${name} (${parts.join(\", \")})`;\n }\n const limit = entitlement?.usage_limit;\n if (typeof limit === \"number\" && Number.isFinite(limit)) {\n return `${name}: ${numberFormat.format(limit)}`;\n }\n return name;\n}\n\nfunction trimmed(value: string | null | undefined): string {\n return typeof value === \"string\" ? value.trim() : \"\";\n}\n\n/** Features of a family card, with values from the selected plan. */\nfunction familyFeatures(\n family: PricingFamily,\n plan: PricingPlan,\n locale: string,\n): PricingFeature[] {\n const numberFormat = new Intl.NumberFormat(locale);\n const entitlements = new Map<string, PricingEntitlement>();\n for (const entitlement of plan.entitlements ?? []) {\n if (!entitlements.has(entitlement.code)) {\n entitlements.set(entitlement.code, entitlement);\n }\n }\n return (family.features ?? [])\n .filter((feature) => feature.show_on_pricing !== false)\n .map((feature, index) => {\n const entitlement = entitlements.get(feature.code);\n const name =\n trimmed(feature.name) || trimmed(entitlement?.name) || feature.code;\n return { feature, entitlement, index, name };\n })\n .sort(\n (a, b) =>\n comparePositions(a.feature.display_position, b.feature.display_position) ||\n a.name.localeCompare(b.name, locale) ||\n a.index - b.index,\n )\n .map(({ feature, entitlement, name }) => {\n const label = featureLabel(name, entitlement, numberFormat);\n const description = trimmed(feature.description);\n return feature.show_description === true && description\n ? { label, description }\n : { label };\n });\n}\n\n/**\n * Features of a plan card on an older API: what the plan gives (entitlements,\n * credit grants and usage prices), as `planFeatures` lists it.\n */\nfunction planCardFeatures(plan: PricingPlan): PricingFeature[] {\n return catalogPlanFeatures(plan).map((label) => ({ label }));\n}\n\nfunction normalizeFeatures(items: Array<string | PricingFeature>): PricingFeature[] {\n return items\n .map((item) => (typeof item === \"string\" ? { label: item } : item))\n .filter(\n (item): item is PricingFeature =>\n Boolean(item) && typeof item.label === \"string\",\n );\n}\n\nfunction overrideFeatures(\n overrides: PricingFeatureOverrides | undefined,\n group: PricingGroup,\n plan: PricingPlan,\n cardIndex: number,\n): PricingFeature[] | null {\n if (!overrides) return null;\n if (Array.isArray(overrides)) {\n const entry = overrides[cardIndex];\n return entry ? normalizeFeatures(entry) : null;\n }\n const keys = [group.key, plan.code, ...group.plans.map((p) => p.code)];\n for (const key of keys) {\n if (Object.prototype.hasOwnProperty.call(overrides, key)) {\n return normalizeFeatures(overrides[key] ?? []);\n }\n }\n return null;\n}\n\n// ─── Cards ───────────────────────────────────────────────────────────────────\n\n/**\n * A plan's cost over a year in minor units, or null when its interval or\n * amount is not known. Compares plans of different intervals.\n */\nexport function yearlyMinor(plan: PricingPlan): bigint | null {\n const amount = toMinor(plan.amount_cents);\n if (amount === null || !isPricingInterval(plan.interval)) return null;\n return amount * PERIODS_PER_YEAR[plan.interval];\n}\n\n/** A card without families shows the plan's price per its own interval, as before families. */\nfunction planPriceStrings(\n plan: PricingPlan,\n locale: string,\n): { price: string; pricePeriod: string; billing: string; savingsPercent: null } {\n const amount = toMinor(plan.amount_cents);\n return {\n price: fmt(amount ?? plan.amount_cents, plan.amount_currency, locale),\n pricePeriod: plan.interval ? `/${intervalLabel(plan.interval)}` : \"\",\n billing: \"\",\n savingsPercent: null,\n };\n}\n\nfunction priceStrings(\n plan: PricingPlan,\n monthly: PricingPlan | undefined,\n locale: string,\n): { price: string; pricePeriod: string; billing: string; savingsPercent: number | null } {\n const amount = toMinor(plan.amount_cents);\n const currency = plan.amount_currency;\n if (!isPricingInterval(plan.interval) || amount === null) {\n return {\n price: fmt(amount ?? plan.amount_cents, currency, locale),\n pricePeriod: \"\",\n billing: plan.interval ? `Billed ${plan.interval}` : \"\",\n savingsPercent: null,\n };\n }\n const price = fmt(perMonthMinor(amount, plan.interval), currency, locale);\n if (plan.interval === \"monthly\") {\n return { price, pricePeriod: \"/mo\", billing: \"Billed monthly\", savingsPercent: null };\n }\n const savingsPercent = savingsAgainstMonthly(plan, monthly);\n const billed = `Billed ${fmt(amount, currency, locale)} ${BILLED_WORDS[plan.interval]}`;\n return {\n price,\n pricePeriod: \"/mo\",\n billing: savingsPercent === null ? billed : `${billed} · save ${savingsPercent}%`,\n savingsPercent,\n };\n}\n\n/**\n * Pricing cards in display order for one interval: the selected plan of each\n * visible family (or the nearest interval's plan when the family has none for\n * it), its per-month price and billing line, its features, the highlight,\n * badge and call to action. Without families each live plan is a card.\n */\nexport function getPricingCards(\n catalog: PricingCatalog,\n options: GetPricingCardsOptions = {},\n): PricingCard[] {\n const locale = resolvePricingLocale(options.locale);\n const families = hasFamilies(catalog);\n const requested = normalizePricingInterval(options.interval ?? null);\n const interval = requested ?? getDefaultInterval(catalog);\n const contactSales = new Set(options.contactSales ?? []);\n const isContactSales = (group: PricingGroup) =>\n contactSales.has(group.key) || group.plans.some((plan) => contactSales.has(plan.code));\n let groups = getPricingGroups(catalog);\n if (!families) {\n if (options.sort) {\n const sort = options.sort;\n groups = groups\n .map((group, index) => ({ group, index }))\n .sort((a, b) => sort(a.group.plans[0], b.group.plans[0]) || a.index - b.index)\n .map(({ group }) => group);\n } else {\n const sales = groups.filter(isContactSales);\n const byPlan = new Map(groups.map((group) => [group.plans[0], group]));\n groups = [\n ...sortPlansByPrice(groups.filter((group) => !isContactSales(group)).map((group) => group.plans[0]))\n .map((plan) => byPlan.get(plan) as PricingGroup),\n ...sales,\n ];\n }\n if (requested) {\n groups = groups.filter(\n (group) => group.plans[0].interval === requested || isContactSales(group),\n );\n }\n }\n\n const highlight = options.highlight ?? null;\n const highlightedKey =\n highlight !== null\n ? groups.find(\n (group) =>\n group.key === highlight ||\n group.plans.some((plan) => plan.code === highlight),\n )?.key\n : groups.find((group) => group.family?.pricing_highlighted === true)?.key;\n\n const badge = (family: PricingFamily | null) =>\n options.badge !== undefined\n ? options.badge === null ? null : trimmed(options.badge) || null\n : trimmed(family?.badge_text) || \"Most Popular\";\n\n return groups.map((group, cardIndex) => {\n const plan = pickPlan(group.plans, interval);\n const family = group.family;\n const name = trimmed(family?.name) || plan.name;\n const description = trimmed(family?.description) || trimmed(plan.description) || null;\n const highlighted = highlightedKey !== undefined && highlightedKey === group.key;\n const features =\n overrideFeatures(options.features, group, plan, cardIndex) ??\n (family ? familyFeatures(family, plan, locale) : planCardFeatures(plan));\n return {\n key: group.key,\n family,\n plans: group.plans,\n plan,\n isFallbackInterval: families && interval !== null && plan.interval !== interval,\n name,\n description,\n ...(family ? priceStrings(plan, monthlyPlanOf(group), locale) : planPriceStrings(plan, locale)),\n features,\n highlighted,\n badge: highlighted ? badge(family) : null,\n cta: trimmed(family?.cta_text) || `Get ${name}`,\n enterprise: isContactSales(group),\n };\n });\n}\n","import React, { type CSSProperties, type ReactNode } from \"react\";\nimport type { ElementProps, UseAppearance } from \"../../appearance/context.js\";\nimport { T, border, text as role } from \"../../appearance/tokens.js\";\n\nexport interface PanelPlanCardProps {\n /** Props for the card element: `el` or `root` of the calling component. */\n frame: (style: CSSProperties) => ElementProps;\n el: UseAppearance[\"el\"];\n name: string;\n description?: string | null;\n /** Formatted price, or a word such as \"Custom\". */\n price: string;\n /** \"month\", \"year\"…; omitted for a price without an interval. */\n interval?: string;\n /** A line under the price, for example \"Billed $490 yearly · save 17%\". */\n priceNote?: string | null;\n /** Feature lines; an object adds a muted description under its label. */\n features: Array<string | { label: string; description?: string | null }>;\n isCurrent: boolean;\n isHighlighted: boolean;\n /** The highlighted card takes the highlight colour as its fill instead of its border. */\n filled: boolean;\n /** Shown on the right of the header of a highlighted card that is not the current plan. */\n highlightLabel?: string | null;\n children?: ReactNode;\n}\n\n/**\n * The `panel` plan card layout: the name in a header band with the plan's status on the right,\n * then price, description, plain feature lines and the action.\n */\nexport function PanelPlanCard({\n frame,\n el,\n name,\n description,\n price,\n interval,\n priceNote,\n features,\n isCurrent,\n isHighlighted,\n filled: filledStyle,\n highlightLabel,\n children,\n}: PanelPlanCardProps): React.ReactElement {\n const filled = isHighlighted && filledStyle;\n const text = filled ? T.highlightForeground : T.foreground;\n const muted = filled ? `color-mix(in srgb, ${T.highlightForeground} 75%, ${T.highlight})` : T.mutedForeground;\n const edge = isHighlighted ? T.highlight : isCurrent ? T.foreground : T.border;\n const label = isCurrent ? \"Active\" : isHighlighted ? highlightLabel : null;\n\n return (\n <div\n {...frame({\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n ...role.body,\n background: filled ? T.highlight : T.card,\n color: text,\n border: border(edge),\n borderRadius: T.radius,\n boxShadow: T.shadow,\n })}\n >\n <div\n {...el(\"planCard__header\", {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: \"0.75rem\",\n padding: \"0.875rem 1.25rem\",\n borderBottom: border(filled ? `color-mix(in srgb, ${T.highlightForeground} 30%, ${T.highlight})` : T.border),\n })}\n >\n <h3 {...el(\"planCard__name\", { ...role.heading, color: text, margin: 0 })}>\n {name}\n </h3>\n {label && (\n <span\n {...el(\"planCard__badge\", {\n ...role.label,\n whiteSpace: \"nowrap\",\n // The current plan's label takes the colour of its button.\n color: filled ? text : isCurrent ? T.mutedForeground : T.highlight,\n })}\n >\n {label}\n </span>\n )}\n </div>\n\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"1rem\", padding: \"1.25rem\", flex: 1 }}>\n <div>\n <p {...el(\"planCard__price\", { ...role.metric, color: text, margin: 0 })}>\n {price}\n {interval && <span style={{ ...role.meta, color: muted }}> / {interval}</span>}\n </p>\n {priceNote && (\n <p data-testid=\"pricing-billing\" style={{ ...role.meta, color: muted, margin: \"0.25rem 0 0\" }}>\n {priceNote}\n </p>\n )}\n {description && (\n <p {...el(\"planCard__description\", { ...role.secondary, color: muted, margin: \"0.25rem 0 0\" })}>\n {description}\n </p>\n )}\n </div>\n\n <ul\n {...el(\"planCard__features\", {\n listStyle: \"none\",\n margin: 0,\n padding: 0,\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"0.375rem\",\n flex: 1,\n ...role.secondary,\n color: muted,\n })}\n >\n {features.map((feature, index) => {\n const item = typeof feature === \"string\" ? { label: feature } : feature;\n return (\n <li key={`${index}:${item.label}`} {...el(\"planCard__feature\")}>\n {item.label}\n {item.description && (\n <span style={{ display: \"block\", ...role.meta, color: muted }}>{item.description}</span>\n )}\n </li>\n );\n })}\n </ul>\n\n {children}\n </div>\n </div>\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';\nimport {\n getAvailableIntervals,\n getDefaultInterval,\n getPricingCards,\n getPricingIntervalOptions,\n resolvePricingLocale,\n yearlyMinor,\n type PricingCard,\n type PricingCatalog,\n type PricingFamily,\n type PricingFeatureOverrides,\n type PricingInterval,\n type PricingIntervalOption,\n type PricingPlan,\n} from './catalog.js';\nimport { useAppearance, type UseAppearance } from '../../appearance/context.js';\nimport { PanelPlanCard } from './PanelPlanCard.js';\nimport { NozleBranding } from '../branding/PoweredByNozle.js';\nimport { useQuery } from '@tanstack/react-query';\nimport { catalogQuery, idleQueryClient } from '../../hooks/use-plans.js';\nimport { T, border, primaryButtonBorder, buttonStyle, text as role, type Appearance, type ButtonVariant } from '../../appearance/tokens.js';\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport type {\n PricingCard,\n PricingCatalog,\n PricingEntitlement,\n PricingFamily,\n PricingFamilyFeature,\n PricingFeature,\n PricingFeatureOverrides,\n PricingInterval,\n PricingIntervalOption,\n PricingPlan,\n PricingPrivilege,\n} from './catalog.js';\n\nexport interface PricingTableProps {\n currentPlanCode?: string;\n /** Plans to show instead of fetching the catalog. */\n plans?: PricingPlan[];\n /**\n * Plan families for `plans`. When omitted with `plans`, each plan is its\n * own card, as with older APIs.\n */\n families?: PricingFamily[] | null;\n /**\n * Optional. By default each card lists its family's features with values\n * from the selected plan, or, without families, what the plan gives. Pass\n * an object keyed by family code or plan code, or an array aligned to the\n * rendered cards, to replace the lines of a card.\n */\n features?: PricingFeatureOverrides;\n /**\n * Optional. Orders the plans of a catalog without families. By default\n * they are sorted by base price, cheapest first, with `contactSalesPlans`\n * last. Families are ordered by their `pricing_position`.\n */\n sort?: (a: PricingPlan, b: PricingPlan) => number;\n /** Called with the selected interval's plan and its family (null without families). */\n onSelect?: (plan: PricingPlan, family: PricingFamily | null) => void;\n returnUrl?: string;\n onStripeClientSecret?: (clientSecret: string) => void;\n onCheckoutResult?: (result: CheckoutResult) => void;\n onCheckoutError?: (error: Error) => void;\n /** Show the interval switch when several intervals exist. Defaults to true. */\n showToggle?: boolean;\n /** Interval shown first (\"annual\" is accepted for \"yearly\"). Defaults to monthly when offered. */\n defaultInterval?: PricingInterval | 'annual';\n /** Family code or plan code to highlight. Overrides the family's `pricing_highlighted`. */\n highlightPlan?: string;\n /**\n * How the highlighted card stands out: `outline` (default) draws a border in `colorHighlight`;\n * `filled` paints the card in `colorHighlight` and its text and button in `colorHighlightForeground`.\n */\n highlightStyle?: 'outline' | 'filled';\n /**\n * Badge on the highlighted card. Replaces the family's `badge_text`; without either it is\n * \"Most Popular\". Pass `null` for no badge.\n */\n highlightLabel?: string | null;\n className?: string;\n /**\n * Codes of plans (or plan families) sold on request. Their card shows \"Custom\" instead of a price\n * and a \"Contact Sales\" button, which opens `enterpriseEmail` when set.\n */\n contactSalesPlans?: string[];\n enterpriseEmail?: string;\n /** Text next to the Annual option, replacing the computed \"Save N%\". */\n annualDiscountLabel?: string;\n /** Locale for prices and feature values. Defaults to `en-US`. */\n locale?: string;\n appearance?: Appearance;\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// ─── Interval switch ─────────────────────────────────────────────────────────\n\nfunction IntervalSwitch({\n options,\n selected,\n onChange,\n annualDiscountLabel,\n el,\n}: {\n options: PricingIntervalOption[];\n selected: PricingInterval;\n onChange: (interval: PricingInterval) => void;\n annualDiscountLabel?: string;\n el: UseAppearance['el'];\n}) {\n const pill: CSSProperties = {\n display: 'inline-flex',\n flexWrap: 'wrap',\n justifyContent: 'center',\n borderRadius: '9999px',\n padding: '4px',\n background: T.muted,\n gap: '2px',\n };\n const tab = (active: boolean): CSSProperties => ({\n padding: '8px 20px',\n borderRadius: '9999px',\n border: 'none',\n background: active ? T.card : 'transparent',\n ...role.action,\n color: active ? T.foreground : T.mutedForeground,\n cursor: 'pointer',\n boxShadow: active ? T.shadow : 'none',\n transition: 'all 0.15s ease',\n });\n\n return (\n <div style={{ display: 'flex', justifyContent: 'center', marginBottom: '2.5rem' }}>\n <div role=\"group\" aria-label=\"Billing interval\" {...el('pricingTable__toggle', pill)}>\n {options.map((option) => {\n const active = option.interval === selected;\n const note = option.interval === 'yearly' && annualDiscountLabel\n ? annualDiscountLabel\n : option.interval !== 'monthly' && option.savingsPercent !== null\n ? `Save ${option.savingsPercent}%`\n : null;\n return (\n <button\n key={option.interval}\n type=\"button\"\n data-interval={option.interval}\n onClick={() => onChange(option.interval)}\n {...el('pricingTable__toggleButton', tab(active))}\n aria-pressed={active}\n aria-label={note ? `${option.label}, ${note.replace(/^Save /, 'save ')}` : undefined}\n >\n {option.label}\n {note && (\n <span style={{\n marginLeft: '6px',\n ...role.meta,\n fontWeight: 600,\n color: active ? T.primary : T.mutedForeground,\n }}>\n {note}\n </span>\n )}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\n// ─── Card ────────────────────────────────────────────────────────────────────\n\ninterface CardProps {\n card: PricingCard;\n isCurrent: boolean;\n filled: boolean;\n enterpriseEmail?: string;\n onSelect?: () => void;\n el: UseAppearance['el'];\n panel: boolean;\n /** Costs more per year than the current plan; undefined when there is no current plan to compare with. */\n isUpgrade?: boolean;\n}\n\nfunction Card({\n card,\n isCurrent,\n filled: filledStyle,\n enterpriseEmail,\n onSelect,\n el,\n panel,\n isUpgrade,\n}: CardProps): React.ReactElement {\n const [hover, setHover] = useState(false);\n const { plan, features } = card;\n const isHighlighted = card.highlighted;\n const isEnt = card.enterprise;\n // A filled highlight swaps the card's colours: highlight background, highlight-foreground text.\n const filled = isHighlighted && filledStyle;\n const text = filled ? T.highlightForeground : T.foreground;\n const muted = filled ? `color-mix(in srgb, ${T.highlightForeground} 75%, ${T.highlight})` : T.mutedForeground;\n const accent = filled ? T.highlightForeground : T.primary;\n const badgeLabel = isCurrent ? 'Current Plan' : card.badge;\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 const ctaText = isCurrent\n ? 'Current Plan'\n : card.family?.cta_text?.trim()\n ? card.cta\n : isEnt\n ? 'Contact Sales'\n : card.cta;\n\n // Plans above the current one get the primary button; the current plan and cheaper ones the plain one.\n // Without a current plan, only the highlighted plan does.\n const emphasised = isUpgrade ?? isHighlighted;\n const cta = onSelect && (\n <CTAButton\n onClick={handleClick}\n disabled={isCurrent}\n variant={\n isCurrent ? 'current' : isEnt ? 'outline' : !emphasised ? 'secondary' : filled ? 'inverse' : isHighlighted ? 'highlight' : 'primary'\n }\n el={el}\n >\n {ctaText}\n </CTAButton>\n );\n\n const dataAttributes = {\n 'data-card-key': card.key,\n 'data-family-code': card.family?.code,\n 'data-plan-code': plan.code,\n 'data-interval': plan.interval,\n 'data-highlighted': isHighlighted ? 'true' : undefined,\n };\n\n if (panel) {\n return (\n <PanelPlanCard\n frame={(style) => ({ ...el('planCard', style), ...dataAttributes })}\n el={el}\n name={card.name}\n description={card.description}\n price={isEnt ? 'Custom' : card.price}\n interval={isEnt || !card.pricePeriod ? undefined : card.pricePeriod.replace(/^\\//, '')}\n priceNote={isEnt ? null : card.billing}\n features={features}\n isCurrent={isCurrent}\n isHighlighted={isHighlighted}\n filled={filledStyle}\n highlightLabel={card.badge}\n >\n {cta}\n </PanelPlanCard>\n );\n }\n\n return (\n <div\n {...dataAttributes}\n onMouseEnter={() => setHover(true)}\n onMouseLeave={() => setHover(false)}\n {...el('planCard', {\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n background: filled ? T.highlight : T.card,\n color: text,\n border: border(isHighlighted ? T.highlight : T.border),\n borderTopWidth: isHighlighted && !filled ? `calc(${T.borderWidth} + 2px)` : T.borderWidth,\n borderRadius: T.radius,\n padding: '2rem',\n transition: 'box-shadow 0.2s ease, transform 0.2s ease',\n boxShadow: T.shadow,\n transform: hover && !isCurrent ? 'translateY(-2px)' : 'none',\n })}\n >\n {/* Badge */}\n {isHighlighted && badgeLabel && (\n <div {...el('planCard__badge', {\n position: 'absolute',\n top: '-1px',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n background: filled ? T.highlightForeground : T.highlight,\n border: filled ? border(T.highlight) : undefined,\n ...role.label,\n color: filled ? T.highlight : T.highlightForeground,\n padding: '4px 12px',\n borderRadius: '9999px',\n whiteSpace: 'nowrap',\n })}>\n {badgeLabel}\n </div>\n )}\n {isCurrent && !isHighlighted && (\n <div {...el('planCard__badge', {\n position: 'absolute',\n top: '0',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n background: T.muted,\n ...role.label,\n padding: '4px 12px',\n borderRadius: '9999px',\n whiteSpace: 'nowrap',\n })}>\n Current Plan\n </div>\n )}\n\n {/* Name + description */}\n <div style={{ marginBottom: '1.25rem', marginTop: (isHighlighted && badgeLabel) || isCurrent ? '0.5rem' : 0 }}>\n <h3 {...el('planCard__name', {\n ...role.heading,\n color: text,\n margin: 0,\n })}>\n {card.name}\n </h3>\n {card.description && (\n <p {...el('planCard__description', {\n ...role.secondary,\n color: muted,\n margin: '6px 0 0',\n })}>\n {card.description}\n </p>\n )}\n </div>\n\n {/* Price */}\n <div {...el('planCard__price', { marginBottom: '1.5rem' })}>\n {isEnt ? (\n <span style={{ ...role.metric, color: text }}>\n Custom\n </span>\n ) : (\n <>\n <div style={{ display: 'flex', alignItems: 'baseline', gap: '2px' }}>\n <span data-testid=\"pricing-price\" style={{ ...role.metric, color: text }}>\n {card.price}\n </span>\n {card.pricePeriod && (\n <span style={{ ...role.meta, color: muted, marginLeft: '4px' }}>\n {card.pricePeriod}\n </span>\n )}\n </div>\n {card.billing && (\n <p data-testid=\"pricing-billing\" style={{ ...role.meta, color: muted, margin: '8px 0 0' }}>\n {card.billing}\n </p>\n )}\n </>\n )}\n </div>\n\n {/* Features */}\n {features.length > 0 && (\n <ul {...el('planCard__features', {\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, index) => (\n <li key={`${index}:${feat.label}`} {...el('planCard__feature', {\n display: 'flex',\n alignItems: 'flex-start',\n gap: '10px',\n ...role.body,\n color: text,\n })}>\n <span style={{ color: accent, marginTop: '2px' }}><Check /></span>\n <span style={{ display: 'flex', flexDirection: 'column' }}>\n <span>{feat.label}</span>\n {feat.description && (\n <span style={{ ...role.meta, color: muted, marginTop: '2px' }}>\n {feat.description}\n </span>\n )}\n </span>\n </li>\n ))}\n </ul>\n )}\n\n {/* Spacer if no features */}\n {features.length === 0 && <div style={{ flex: 1 }} />}\n\n {/* CTA */}\n {cta}\n </div>\n );\n}\n\n// ─── CTA Button ──────────────────────────────────────────────────────────────\n\nfunction CTAButton({\n children,\n onClick,\n disabled,\n variant,\n el,\n}: {\n children: React.ReactNode;\n onClick: () => void;\n disabled?: boolean;\n variant: ButtonVariant | 'current' | 'highlight' | 'inverse';\n el: UseAppearance['el'];\n}) {\n const [hover, setHover] = useState(false);\n const look =\n variant === 'current'\n ? { ...buttonStyle('secondary'), background: T.muted, color: T.mutedForeground, cursor: 'default' }\n : variant === 'highlight'\n ? { ...buttonStyle('primary'), background: T.highlight, color: T.highlightForeground, border: primaryButtonBorder(T.highlight) }\n : variant === 'inverse'\n ? { ...buttonStyle('primary'), background: T.highlightForeground, color: T.highlight, border: primaryButtonBorder(T.highlightForeground) }\n : buttonStyle(variant);\n\n return (\n <button type=\"button\"\n onClick={disabled ? undefined : onClick}\n disabled={disabled}\n onMouseEnter={() => setHover(true)}\n onMouseLeave={() => setHover(false)}\n {...el('planCard__cta', {\n ...look,\n width: '100%',\n filter: hover && !disabled ? 'brightness(0.95)' : undefined,\n })}\n >\n {children}\n </button>\n );\n}\n\n// ─── Loading skeleton ────────────────────────────────────────────────────────\n\nfunction Skeleton({ rootProps }: { rootProps: ReturnType<UseAppearance['root']> }): React.ReactElement {\n return (\n <div {...rootProps} aria-busy=\"true\" style={{ ...rootProps.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: T.card,\n border: border(),\n borderRadius: T.radius,\n padding: '2rem',\n height: '380px',\n }}>\n <div style={{ height: 20, width: '40%', borderRadius: 6, background: T.skeleton, marginBottom: 12 }} />\n <div style={{ height: 40, width: '50%', borderRadius: 6, background: T.skeleton, marginBottom: 24 }} />\n <div style={{ height: 14, width: '80%', borderRadius: 6, background: T.skeleton, marginBottom: 10 }} />\n <div style={{ height: 14, width: '70%', borderRadius: 6, background: T.skeleton, marginBottom: 10 }} />\n <div style={{ height: 14, width: '60%', borderRadius: 6, background: T.skeleton }} />\n </div>\n ))}\n </div>\n );\n}\n\n// ─── Main Component ──────────────────────────────────────────────────────────\n\nexport function PricingTable({\n currentPlanCode,\n plans: propPlans,\n families: propFamilies,\n features,\n sort,\n onSelect,\n returnUrl,\n onStripeClientSecret,\n onCheckoutResult,\n onCheckoutError,\n showToggle = true,\n defaultInterval,\n highlightPlan,\n highlightStyle = 'outline',\n highlightLabel,\n className,\n contactSalesPlans,\n enterpriseEmail,\n annualDiscountLabel,\n locale: localeProp,\n appearance,\n}: PricingTableProps): React.ReactElement {\n const { root, el, planCardLayout } = useAppearance(appearance);\n // A malformed tag (e.g. \"en_US\") falls back to en-US instead of throwing\n // during render or turning every price into \"Amount unavailable\".\n const locale = resolvePricingLocale(localeProp);\n const billing = useOptionalBillingContext();\n const client = billing?.client;\n // One cached catalog request, shared with usePlans and the \"Powered by Nozle\" check.\n const fetched = useQuery(\n { ...catalogQuery(client), enabled: !propPlans && Boolean(client) },\n billing?.queryClient ?? idleQueryClient,\n );\n const catalog: PricingCatalog = propPlans\n ? { plans: propPlans, families: Array.isArray(propFamilies) ? propFamilies : null }\n : { plans: fetched.data?.plans ?? [], families: fetched.data?.families ?? null };\n const loading = !propPlans && Boolean(client) && fetched.isPending;\n const loadError = propPlans\n ? null\n : !client\n ? 'BillingProvider with a publishableKey is required to load plans'\n : fetched.error\n ? `Plans could not be loaded: ${fetched.error.message}`\n : null;\n const [currentPlan, setCurrentPlan] = useState<string | null>(currentPlanCode ?? null);\n const [selectedInterval, setSelectedInterval] = useState<PricingInterval | null>(null);\n const [processing, setProcessing] = useState(false);\n const [checkoutError, setCheckoutError] = useState<string | null>(null);\n\n useEffect(() => {\n if (currentPlanCode !== undefined) setCurrentPlan(currentPlanCode);\n }, [currentPlanCode]);\n\n const withFamilies = Array.isArray(catalog.families);\n\n async function selectPlan(plan: PricingPlan, family: PricingFamily | null): Promise<void> {\n setCheckoutError(null);\n if (onSelect) {\n onSelect(plan, family);\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 available = getAvailableIntervals(catalog);\n const interval = selectedInterval !== null && available.includes(selectedInterval)\n ? selectedInterval\n : getDefaultInterval(catalog, defaultInterval);\n const switchVisible = showToggle && available.length > 1 && interval !== null;\n // Without families the switch filters plans by interval, as before; with\n // the switch hidden every plan is shown.\n const cards = getPricingCards(catalog, {\n interval: withFamilies || switchVisible ? interval : null,\n locale,\n highlight: highlightPlan,\n badge: highlightLabel,\n features,\n contactSales: contactSalesPlans,\n sort,\n });\n // Plans of different intervals are compared by their cost over a year.\n const current = catalog.plans.find((p) => p.code === currentPlan);\n const currentYearly = current ? yearlyMinor(current) : null;\n const isUpgrade = (plan: PricingPlan): boolean | undefined => {\n if (!current || current.amount_currency !== plan.amount_currency) return undefined;\n const yearly = yearlyMinor(plan);\n return currentYearly !== null && yearly !== null\n ? yearly > currentYearly\n : plan.amount_cents > current.amount_cents;\n };\n\n const rootProps = root('pricingTable', role.body, className);\n if (loading) return <Skeleton rootProps={rootProps} />;\n\n return (\n <div {...rootProps}>\n {switchVisible && interval !== null && (\n <IntervalSwitch\n options={getPricingIntervalOptions(catalog)}\n selected={interval}\n onChange={setSelectedInterval}\n annualDiscountLabel={annualDiscountLabel}\n el={el}\n />\n )}\n\n {processing && <p role=\"status\">Payment is processing. Confirmation may take a little while.</p>}\n {(checkoutError ?? loadError) && <p role=\"alert\" style={{ color: T.dangerText }}>{checkoutError ?? loadError}</p>}\n\n <div {...el('pricingTable__grid', {\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fit, minmax(220px, 1fr))',\n gap: '1.5rem',\n })}>\n {cards.map((card) => (\n <Card\n key={card.key}\n card={card}\n isCurrent={currentPlan === card.plan.code}\n isUpgrade={isUpgrade(card.plan)}\n filled={highlightStyle === 'filled'}\n enterpriseEmail={enterpriseEmail}\n onSelect={() => void selectPlan(card.plan, card.family)}\n el={el}\n panel={planCardLayout === 'panel'}\n />\n ))}\n </div>\n <NozleBranding />\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 * Themed through `appearance` (see the appearance tokens).\n */\n\n\"use client\";\nimport React from \"react\";\n\nimport type { CreateCheckoutInput } from \"../../provider.js\";\nimport type { PricingPlan } from \"./PricingTable.js\";\nimport { formatPlanPrice, intervalLabel, planFeatures } from \"./plan-features.js\";\nimport { useAppearance, type ElementProps } from \"../../appearance/context.js\";\nimport { PanelPlanCard } from \"./PanelPlanCard.js\";\nimport { T, border, buttonStyle, text, type Appearance } from \"../../appearance/tokens.js\";\n\nexport interface PlanCardProps {\n /** A plan from the public catalog. Its price and feature lines are read from it. */\n plan: PricingPlan;\n /** Optional. Replaces the lines read from the plan. */\n features?: string[];\n isCurrent: boolean;\n returnUrl?: string;\n onSelect?: (input: CreateCheckoutInput) => void;\n appearance?: Appearance;\n}\n\n/**\n * PlanCard renders a single pricing plan from the catalog.\n * Highlighted with aria-current=\"true\" when isCurrent=true.\n */\nexport function PlanCard({\n plan,\n features: featureOverride,\n isCurrent,\n returnUrl,\n onSelect,\n appearance,\n}: PlanCardProps): React.ReactElement {\n const { root, el, planCardLayout } = useAppearance(appearance);\n const { code: id, name, description } = plan;\n const price = formatPlanPrice(plan.amount_cents, plan.amount_currency);\n const interval = intervalLabel(plan.interval);\n const features = featureOverride ?? planFeatures(plan);\n\n const cta = onSelect && (\n <button type=\"button\"\n onClick={() =>\n onSelect?.({\n planCode: id,\n returnUrl: returnUrl ?? window.location.href,\n })\n }\n {...el(\"planCard__cta\", {\n ...buttonStyle(isCurrent ? \"secondary\" : \"primary\"),\n ...(isCurrent && { background: T.muted, color: T.mutedForeground, cursor: \"default\" }),\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\n if (planCardLayout === \"panel\") {\n return (\n <PanelPlanCard\n frame={(style) => ({ \"data-testid\": `plan-card-${id}`, \"aria-current\": isCurrent ? \"true\" : undefined, ...root(\"planCard\", style) }) as ElementProps}\n el={el}\n name={name}\n description={description}\n price={price}\n interval={interval}\n features={features}\n isCurrent={Boolean(isCurrent)}\n isHighlighted={false}\n filled={false}\n >\n {cta}\n </PanelPlanCard>\n );\n }\n\n return (\n <div\n data-testid={`plan-card-${id}`}\n aria-current={isCurrent ? \"true\" : undefined}\n {...root(\"planCard\", {\n ...text.body,\n background: T.card,\n border: border(isCurrent ? T.primary : T.border),\n outline: isCurrent ? `1px solid ${T.primary}` : undefined,\n borderRadius: T.radius,\n boxShadow: T.shadow,\n padding: \"1.5rem\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"1rem\",\n })}\n >\n <div>\n <h3 {...el(\"planCard__name\", { ...text.heading, margin: 0 })}>{name}</h3>\n {description && (\n <p {...el(\"planCard__description\", { ...text.secondary, margin: \"0.25rem 0 0\" })}>\n {description}\n </p>\n )}\n </div>\n\n <div {...el(\"planCard__price\")}>\n <span style={text.metric}>{price}</span>\n <span style={{ ...text.meta, marginLeft: \"0.25rem\" }}>/{interval}</span>\n </div>\n\n <ul\n {...el(\"planCard__features\", {\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 key={feature} {...el(\"planCard__feature\", { display: \"flex\", alignItems: \"center\", gap: \"0.5rem\", ...text.body })}>\n <span style={{ color: T.primary }} aria-hidden=\"true\">\n ✓\n </span>\n {feature}\n </li>\n ))}\n </ul>\n\n {cta}\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. Themed through `appearance`.\n */\n\n\"use client\";\nimport React from \"react\";\n\nimport type { PricingPlan } from \"./PricingTable.js\";\nimport {\n comparisonRows,\n formatPlanPrice,\n intervalLabel,\n sortPlansByPrice,\n type ComparisonRow,\n} from \"./plan-features.js\";\nimport { useAppearance } from \"../../appearance/context.js\";\nimport { NozleBranding } from \"../branding/PoweredByNozle.js\";\nimport { T, table, text, type Appearance } from \"../../appearance/tokens.js\";\n\nexport type ComparisonFeature = ComparisonRow;\n\nexport interface PlanComparisonProps {\n /** Plans from the public catalog. The rows are built from their entitlements and credit grants. */\n plans: PricingPlan[];\n /** Optional. Replaces the rows built from the plans. `values` is keyed by plan code. */\n features?: ComparisonFeature[];\n /** Optional. Orders the plans. By default they are sorted by base price, cheapest first. */\n sort?: (a: PricingPlan, b: PricingPlan) => number;\n appearance?: Appearance;\n}\n\n/**\n * PlanComparison renders a side-by-side comparison of catalog plans. A plan that does not have an\n * entitlement shows a cross, so the table shows the real difference between plans.\n */\nexport function PlanComparison({\n plans: catalogPlans,\n features: featureOverride,\n sort,\n appearance,\n}: PlanComparisonProps): React.ReactElement {\n const { root, el } = useAppearance(appearance);\n const plans = sort ? [...catalogPlans].sort(sort) : sortPlansByPrice(catalogPlans);\n const features = featureOverride ?? comparisonRows(plans);\n const cell = (style: React.CSSProperties) => el(\"planComparison__cell\", style);\n return (\n <div {...root(\"planComparison\", { minWidth: 0 })}>\n <div style={table.frame}>\n <table {...el(\"planComparison__table\", table.table)}>\n <thead>\n <tr>\n <th {...cell(table.head())}>Feature</th>\n {plans.map((plan) => (\n <th key={plan.code} {...cell({ ...table.head(), textAlign: \"center\", padding: \"10px 20px\" })}>\n {plan.name}\n <div style={{ ...text.meta, letterSpacing: \"normal\", textTransform: \"none\" }}>\n {formatPlanPrice(plan.amount_cents, plan.amount_currency)} / {intervalLabel(plan.interval)}\n </div>\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {features.map((feature, index) => (\n <tr key={feature.key} {...el(\"planComparison__row\")}>\n <td {...cell(table.cell(false, index === features.length - 1))}>{feature.label}</td>\n {plans.map((plan) => {\n const value = feature.values[plan.code];\n return (\n <td key={plan.code} {...cell({ ...table.cell(false, index === features.length - 1), textAlign: \"center\" })}>\n {typeof value === \"boolean\" ? (\n value ? (\n <span style={{ color: T.primary }} aria-label=\"Included\">\n ✓\n </span>\n ) : (\n <span style={{ color: T.mutedForeground }} aria-label=\"Not included\">\n ✕\n </span>\n )\n ) : (\n <span>{value ?? \"—\"}</span>\n )}\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n <NozleBranding />\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useState } from \"react\";\nimport { useAppearance } from \"../../appearance/context.js\";\nimport { buttonStyle, type Appearance } from \"../../appearance/tokens.js\";\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 appearance?: Appearance;\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 appearance,\n}: UpgradeButtonProps): React.ReactElement {\n const [isOpen, setIsOpen] = useState(false);\n const { root } = useAppearance(appearance);\n\n return (\n <>\n <button\n type=\"button\"\n onClick={() => setIsOpen(true)}\n {...root(\"upgradeButton\", { ...buttonStyle(), ...style }, className)}\n >\n {label}\n </button>\n\n <UpgradeModal\n isOpen={isOpen}\n appearance={appearance}\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 * Themed through `appearance` (see the appearance tokens).\n */\n\n\"use client\";\n\nimport React from \"react\";\nimport { useAppearance } from \"../../appearance/context.js\";\nimport { buttonStyle, text as role, type Appearance } from \"../../appearance/tokens.js\";\n\nexport interface UpgradePromptProps {\n text?: string;\n planName?: string;\n onUpgrade?: () => void;\n appearance?: Appearance;\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 appearance,\n}: UpgradePromptProps): React.ReactElement {\n const { root } = useAppearance(appearance);\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 {...root(\"upgradePrompt\", {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n gap: \"0.75rem\",\n padding: \"1rem\",\n textAlign: \"center\",\n ...role.body,\n })}\n >\n <p style={{ margin: 0 }}>\n {displayText}\n </p>\n <button type=\"button\"\n onClick={handleUpgrade}\n style={{ ...buttonStyle(), padding: \"0.5rem 1.25rem\" }}\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 * Themed through `appearance` (see the appearance tokens).\n */\n\n\"use client\";\n\nimport React, { type ReactNode } from \"react\";\nimport { UpgradePrompt } from \"./UpgradePrompt.js\";\nimport { useAppearance } from \"../../appearance/context.js\";\nimport { T, type Appearance } from \"../../appearance/tokens.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 appearance?: Appearance;\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 appearance,\n}: LockedOverlayProps): React.ReactElement {\n const { root, el } = useAppearance(appearance);\n if (!locked) {\n return <>{children}</>;\n }\n\n return (\n <div {...root(\"lockedOverlay\", { 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 {...el(\"lockedOverlay__panel\", {\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n background: `color-mix(in srgb, ${T.background} 92%, transparent)`,\n borderRadius: T.radius,\n })}\n role=\"dialog\"\n aria-label=\"Feature locked — upgrade required\"\n >\n <UpgradePrompt\n text={upgradeText}\n planName={upgradePlanName}\n onUpgrade={onUpgrade}\n appearance={appearance}\n />\n </div>\n </div>\n );\n}\n","\"use client\";\n\n/**\n * UsageMeter — embeddable usage progress bar with automatic color thresholds.\n * Colours come from the appearance tokens (see `appearance`).\n *\n * Color thresholds:\n * < 80% → primary (normal)\n * 80-94% → warning (amber)\n * ≥ 95% → destructive (red)\n */\nimport { useAppearance } from \"../../appearance/context.js\";\nimport { T, text, type Appearance } from \"../../appearance/tokens.js\";\n\nexport function getUsageMeterColor(percentage: number): string {\n if (percentage >= 95) return T.danger;\n if (percentage >= 80) return T.warning;\n return T.primary;\n}\n\nexport interface UsageMeterProps {\n used: number;\n /** `null` or `undefined` means the feature has no limit. */\n limit?: number | null;\n label?: string;\n showText?: boolean;\n appearance?: Appearance;\n}\n\nexport function UsageMeter({\n used,\n limit,\n label,\n showText = true,\n appearance,\n}: UsageMeterProps) {\n const { root, el } = useAppearance(appearance);\n const unlimited = limit == null;\n const percentage = !unlimited && limit > 0 ? Math.min(100, (used / limit) * 100) : 0;\n const color = getUsageMeterColor(percentage);\n\n return (\n <div\n {...root(\"usageMeter\", {\n width: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"0.25rem\",\n ...text.body,\n })}\n >\n {label && (\n <div style={{ display: \"flex\", justifyContent: \"space-between\" }}>\n <span {...el(\"usageMeter__label\")}>{label}</span>\n {showText && (\n <span {...el(\"usageMeter__value\", { color: percentage >= 95 ? T.dangerText : percentage >= 80 ? T.warningText : T.foreground })}>\n {used.toLocaleString()} / {unlimited ? \"Unlimited\" : limit.toLocaleString()}\n </span>\n )}\n </div>\n )}\n <div\n {...el(\"usageMeter__track\", {\n height: \"0.5rem\",\n borderRadius: \"9999px\",\n overflow: \"hidden\",\n background: T.muted,\n })}\n >\n <div\n {...el(\"usageMeter__fill\", {\n height: \"100%\",\n borderRadius: \"9999px\",\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, or build them from the catalog and your usage results with\n * `usageItems`. Shows a skeleton while loading, an alert on error and a message when empty.\n */\n\nimport { UsageMeter } from \"./UsageMeter.js\";\nimport { useAppearance } from \"../../appearance/context.js\";\nimport { T, surface, text, type Appearance } from \"../../appearance/tokens.js\";\nimport type { CatalogEntitlement } from \"../pricing/plan-features.js\";\n\nexport interface UsageDashboardFeature {\n key: string;\n label: string;\n used: number;\n /** `null` or `undefined` means the feature has no limit. */\n limit?: number | null;\n}\n\n/** The `can()` result fields the dashboard needs. */\nexport interface UsageResult {\n used: number;\n limit?: number | null;\n}\n\n/**\n * Joins a plan's metered entitlements (names come from the catalog) with the usage results you read\n * on your backend, keyed by feature code. Entitlements without a result are left out.\n */\nexport function usageItems(\n entitlements: CatalogEntitlement[],\n results: Record<string, UsageResult | undefined>,\n): UsageDashboardFeature[] {\n return entitlements.flatMap((entitlement) => {\n const result = results[entitlement.code];\n if (entitlement.feature_type !== \"metered\" || !result) return [];\n return [{ key: entitlement.code, label: entitlement.name, used: result.used, limit: result.limit ?? null }];\n });\n}\n\nexport interface UsageDashboardProps {\n features?: UsageDashboardFeature[];\n loading?: boolean;\n /** Shown in place of the meters when set. */\n error?: Error | string | null;\n /** Shown when there are no features. */\n emptyMessage?: string;\n appearance?: Appearance;\n}\n\nexport function UsageDashboard({\n features = [],\n loading = false,\n error = null,\n emptyMessage = \"No usage to show yet.\",\n appearance,\n}: UsageDashboardProps) {\n const { root } = useAppearance(appearance);\n const props = root(\"usageDashboard\", {\n ...surface,\n margin: 0,\n display: \"flex\",\n flexDirection: \"column\",\n gap: loading ? \"0.75rem\" : \"1rem\",\n // Errors and the empty message take the same colours as in the other components.\n ...(error ? { color: T.dangerText } : features.length === 0 && !loading && text.secondary),\n });\n\n if (loading) {\n return (\n <div {...props} aria-busy=\"true\">\n {[1, 2, 3].map((i) => (\n <div key={i} style={{ height: \"2rem\", borderRadius: `calc(${T.radius} / 3)`, background: T.skeleton }} />\n ))}\n </div>\n );\n }\n\n if (error) {\n return (\n <p {...props} role=\"alert\">\n {typeof error === \"string\" ? error : error.message}\n </p>\n );\n }\n\n if (features.length === 0) {\n return (\n <p {...props} role=\"status\">\n {emptyMessage}\n </p>\n );\n }\n\n return (\n <div {...props}>\n {features.map((f) => (\n <UsageMeter key={f.key} used={f.used} limit={f.limit} label={f.label} appearance={appearance} />\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\";\nimport { useAppearance } from \"../../appearance/context.js\";\nimport { T, border, text, type Appearance } from \"../../appearance/tokens.js\";\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 appearance?: Appearance;\n}\n\nexport function UsageAlert({\n features,\n threshold = 80,\n upgradeHref = \"/plans\",\n appearance,\n}: UsageAlertProps) {\n const { root, el } = useAppearance(appearance);\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 {...root(\"usageAlert\", { display: \"flex\", flexDirection: \"column\", gap: \"0.5rem\", ...text.body })}>\n {alertFeatures.map((f) => (\n <div\n key={f.key}\n role=\"alert\"\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n borderRadius: `calc(${T.radius} / 2)`,\n padding: \"0.75rem 1rem\",\n background: T.warningSoft,\n color: T.warningText,\n border: border(T.warningBorder),\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 ...text.action,\n color: \"inherit\",\n textDecoration: \"underline\",\n }}\n >\n Upgrade\n </a>\n </span>\n <button type=\"button\"\n onClick={() => handleDismiss(f.key)}\n aria-label={`Dismiss ${f.label} alert`}\n {...el(\"usageAlert__dismiss\", {\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: \"0 0 0 0.75rem\",\n ...text.action,\n color: \"inherit\",\n })}\n >\n ×\n </button>\n </div>\n ))}\n </div>\n );\n}\n","\"use client\";\n\n/**\n * CurrentPlan — the customer's plan at a glance: name, status, price, a scheduled change, usage\n * against the plan's limits, and a notice when a limit is close.\n *\n * Inside a BillingProvider with `billingEndpoint` it reads everything itself (useSubscription,\n * usePlans for the limits, useUsage for this period). Pass `subscription` and `usage` to render it\n * from your own data instead.\n */\nimport { NozleBranding } from \"../branding/PoweredByNozle.js\";\nimport React, { type ReactNode } from \"react\";\nimport { useAppearance } from \"../../appearance/context.js\";\nimport { T, border, surface, text, type Appearance } from \"../../appearance/tokens.js\";\nimport { useSubscription, useUsage, type BillingSubscription } from \"../../hooks/use-billing.js\";\nimport { usePlans } from \"../../hooks/use-plans.js\";\nimport { formatPlanPrice, intervalLabel } from \"../pricing/plan-features.js\";\nimport { UsageMeter } from \"../usage/UsageMeter.js\";\nimport type { UsageDashboardFeature } from \"../usage/UsageDashboard.js\";\nimport type { CustomerUsageData } from \"../usage/usage-data.js\";\n\nexport interface CurrentPlanDetail {\n label: string;\n value: ReactNode;\n}\n\nexport interface CurrentPlanProps {\n /** The `useSubscription` result. Omit it to read it through `billingEndpoint`. */\n subscription?: BillingSubscription | null;\n /** Meters to show. Omit to build them from the plan's metered limits and this period's usage. */\n usage?: UsageDashboardFeature[];\n /** Extra label and value rows, for example included events or a renewal date. */\n details?: CurrentPlanDetail[];\n /** Buttons for the header, for example a link to your billing portal. */\n actions?: ReactNode;\n /** Text of the notice shown when the customer is past due. */\n pastDueMessage?: string;\n /** A meter at or above this percentage shows a notice. Default 80; `null` turns notices off. */\n warningPercent?: number | null;\n title?: string;\n isLoading?: boolean;\n error?: Error | string | null;\n emptyMessage?: string;\n locale?: string;\n appearance?: Appearance;\n}\n\n// Core subscription statuses, compared exactly.\nconst STATUS_LABELS: Record<string, string> = {\n active: \"Active\",\n pending: \"Pending\",\n incomplete: \"Awaiting payment\",\n canceled: \"Canceled\",\n terminated: \"Ended\",\n};\n\nfunction statusColors(status: string, ending: boolean): React.CSSProperties {\n if (status === \"active\" && !ending) return { background: T.successSoft, color: T.successText };\n if (status === \"active\" || status === \"pending\" || status === \"incomplete\") {\n return { background: T.warningSoft, color: T.warningText };\n }\n return { background: T.muted, color: T.mutedForeground };\n}\n\nfunction day(value: string, locale: string): string {\n const parsed = new Date(value);\n return Number.isNaN(parsed.getTime()) ? value : parsed.toLocaleDateString(locale, { dateStyle: \"medium\" });\n}\n\n/** Meters from the plan's metered limits joined with this period's units, by feature code. */\nexport function currentPlanMeters(\n entitlements: { feature_type: string; code: string; name: string; usage_limit?: number | null }[] | undefined,\n usage: CustomerUsageData | null | undefined,\n): UsageDashboardFeature[] {\n const units = new Map<string, number>();\n for (const charge of usage?.charges_usage ?? []) {\n units.set(charge.feature.code, (units.get(charge.feature.code) ?? 0) + (Number(charge.units) || 0));\n }\n return (entitlements ?? [])\n .filter((entitlement) => entitlement.feature_type === \"metered\")\n .map((entitlement) => ({\n key: entitlement.code,\n label: entitlement.name,\n used: units.get(entitlement.code) ?? 0,\n limit: entitlement.usage_limit ?? null,\n }));\n}\n\nexport function CurrentPlan(props: CurrentPlanProps): React.ReactElement {\n return props.subscription === undefined ? <CurrentPlanFromBackend {...props} /> : <CurrentPlanView {...props} />;\n}\n\nfunction CurrentPlanFromBackend(props: CurrentPlanProps): React.ReactElement {\n const subscription = useSubscription();\n const plans = usePlans();\n const usage = useUsage();\n const planCode = subscription.data?.subscription?.plan_code;\n const meters =\n props.usage ??\n currentPlanMeters(plans.plans.find((plan) => plan.code === planCode)?.entitlements, usage.data as CustomerUsageData | null);\n return (\n <CurrentPlanView\n {...props}\n subscription={subscription.data ?? null}\n usage={meters}\n isLoading={props.isLoading || subscription.isPending}\n error={props.error ?? (subscription.error as Error | null)}\n />\n );\n}\n\nfunction CurrentPlanView({\n subscription,\n usage = [],\n details = [],\n actions,\n warningPercent = 80,\n title = \"Current plan\",\n isLoading = false,\n error = null,\n emptyMessage = \"No active plan.\",\n pastDueMessage = \"A payment is overdue. Pay the open invoice to keep your plan active.\",\n locale = \"en-US\",\n appearance,\n}: CurrentPlanProps): React.ReactElement {\n const { root, el } = useAppearance(appearance);\n const frame = { ...surface, padding: 0, overflow: \"hidden\" } as const;\n const header = (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 12,\n padding: \"0.875rem 1.25rem\",\n borderBottom: border(),\n }}\n >\n <span style={text.heading}>{title}</span>\n {actions}\n </div>\n );\n const body = (children: ReactNode) => <div style={{ padding: \"1.25rem\", display: \"grid\", gap: \"1rem\" }}>{children}</div>;\n\n if (isLoading) {\n return (\n <section {...root(\"currentPlan\", frame)} aria-busy=\"true\">\n {header}\n {body(<div style={{ height: 72, borderRadius: `calc(${T.radius} / 2)`, background: T.skeleton }} />)}\n </section>\n );\n }\n if (error) {\n return (\n <section {...root(\"currentPlan\", frame)}>\n {header}\n {body(<p role=\"alert\" style={{ margin: 0, color: T.dangerText }}>{typeof error === \"string\" ? error : error.message}</p>)}\n </section>\n );\n }\n const current = subscription?.subscription;\n if (!current) {\n return (\n <section {...root(\"currentPlan\", frame)}>\n {header}\n {body(<p role=\"status\" style={{ ...text.secondary, margin: 0 }}>{emptyMessage}</p>)}\n </section>\n );\n }\n\n const pending = subscription?.pending_change;\n const ending = Boolean(current.ending_at);\n const near = warningPercent === null ? [] : usage.filter((meter) => meter.limit != null && meter.limit > 0 && (meter.used / meter.limit) * 100 >= warningPercent);\n const statusLabel = ending && current.ending_at ? `Ends ${day(current.ending_at, locale)}` : STATUS_LABELS[current.status] ?? current.status;\n\n return (\n <section {...root(\"currentPlan\", frame)} aria-label={title}>\n {header}\n {body(\n <>\n {subscription?.past_due && (\n <p\n role=\"alert\"\n {...el(\"currentPlan__notice\", {\n margin: 0,\n padding: \"0.625rem 0.875rem\",\n ...text.body,\n borderRadius: `calc(${T.radius} / 2)`,\n background: T.dangerSoft,\n color: T.dangerText,\n border: border(T.dangerBorder),\n })}\n >\n {pastDueMessage}\n </p>\n )}\n {near.map((meter) => (\n <p\n key={meter.key}\n role=\"status\"\n {...el(\"currentPlan__notice\", {\n margin: 0,\n padding: \"0.625rem 0.875rem\",\n ...text.body,\n borderRadius: `calc(${T.radius} / 2)`,\n background: T.warningSoft,\n color: T.warningText,\n border: border(T.warningBorder),\n })}\n >\n You have used {Math.round((meter.used / (meter.limit as number)) * 100)}% of the {meter.label} included in{\" \"}\n {current.plan.name}.\n </p>\n ))}\n\n <div style={{ display: \"flex\", flexWrap: \"wrap\", alignItems: \"center\", gap: \"0.625rem\" }}>\n <span {...el(\"currentPlan__name\", text.heading)}>{current.plan.name}</span>\n <span\n {...el(\"currentPlan__status\", {\n ...text.label,\n ...statusColors(current.status, ending),\n padding: \"0.125rem 0.625rem\",\n borderRadius: 9999,\n })}\n >\n {statusLabel}\n </span>\n {pending && (\n <span\n {...el(\"currentPlan__scheduled\", {\n ...text.label,\n padding: \"0.125rem 0.625rem\",\n borderRadius: 9999,\n border: border(),\n })}\n >\n Changes to {pending.name} on {day(pending.effective_at, locale)}\n </span>\n )}\n <span {...el(\"currentPlan__price\", { ...text.secondary, marginLeft: \"auto\" })}>\n {formatPlanPrice(Number(current.plan.amount_cents), current.plan.currency)} / {intervalLabel(current.plan.interval)}\n </span>\n </div>\n\n {usage.length > 0 && (\n <div {...el(\"currentPlan__usage\", { display: \"grid\", gap: \"0.875rem\" })}>\n {usage.map((meter) => (\n <UsageMeter\n key={meter.key}\n label={`${meter.label} used this period`}\n used={meter.used}\n limit={meter.limit}\n appearance={appearance}\n />\n ))}\n </div>\n )}\n\n {details.length > 0 && (\n <dl\n {...el(\"currentPlan__details\", {\n margin: 0,\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fit, minmax(160px, 1fr))\",\n gap: \"0.75rem\",\n })}\n >\n {details.map((detail) => (\n <div key={detail.label}>\n <dt style={text.meta}>{detail.label}</dt>\n <dd style={{ margin: \"0.125rem 0 0\", fontWeight: 600 }}>{detail.value}</dd>\n </div>\n ))}\n </dl>\n )}\n </>,\n )}\n <NozleBranding />\n </section>\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\";\nimport { useAppearance } from \"../../appearance/context.js\";\nimport { T, border, text, type Appearance } from \"../../appearance/tokens.js\";\n\nexport interface PlanBadgeProps {\n plan: string;\n tier?: \"free\" | \"starter\" | \"pro\" | \"enterprise\";\n appearance?: Appearance;\n}\n\nconst TIER_STYLES: Record<string, React.CSSProperties> = {\n free: { background: T.muted, color: T.mutedForeground, border: border() },\n starter: { background: T.primarySoft, color: T.primary, border: border(`color-mix(in srgb, ${T.primary} 30%, transparent)`) },\n pro: { background: T.primary, color: T.primaryForeground, border: border(\"transparent\") },\n enterprise: { background: T.accent, color: T.accentForeground, border: border(\"transparent\") },\n};\n\nexport function PlanBadge({ plan, tier = \"free\", appearance }: PlanBadgeProps) {\n const { root } = useAppearance(appearance);\n const style = TIER_STYLES[tier] ?? TIER_STYLES.free;\n\n return (\n <span\n {...root(\"planBadge\", {\n ...text.label,\n ...style,\n display: \"inline-flex\",\n alignItems: \"center\",\n padding: \"0.125rem 0.5rem\",\n borderRadius: \"9999px\",\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\nimport { useAppearance } from \"../../appearance/context.js\";\nimport { T, border, buttonRadius, buttonStyle, surface, text, type Appearance } from \"../../appearance/tokens.js\";\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 appearance?: Appearance;\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 appearance,\n}: PaymentMethodDisplayProps) {\n const { root } = useAppearance(appearance);\n const handleUpdate = () => {\n if (onUpdatePaymentMethod) {\n onUpdatePaymentMethod();\n } else {\n window.location.href = updateHref;\n }\n };\n\n return (\n <div {...root(\"paymentMethod\", { ...surface, display: \"flex\", flexDirection: \"column\", gap: \"0.75rem\" })}>\n {paymentMethod ? (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"0.75rem\",\n padding: \"0.75rem 1rem\",\n border: border(),\n borderRadius: `calc(${T.radius} * 0.6)`,\n }}\n >\n <span style={{ fontWeight: 600, color: T.foreground }}>\n {BRAND_LABELS[paymentMethod.brand.toLowerCase()] ??\n paymentMethod.brand}\n </span>\n <span style={text.secondary}>•••• {paymentMethod.last4}</span>\n <span style={text.meta}>\n Expires {String(paymentMethod.expMonth).padStart(2, \"0\")}/\n {String(paymentMethod.expYear).slice(-2)}\n </span>\n </div>\n ) : (\n <p style={{ ...text.secondary, margin: 0 }}>\n No payment method on file.\n </p>\n )}\n <button type=\"button\"\n onClick={handleUpdate}\n style={{\n ...buttonStyle(\"outline\"),\n alignSelf: \"flex-start\",\n padding: \"0.375rem 0.875rem\",\n borderRadius: buttonRadius(`calc(${T.radius} / 2)`),\n }}\n >\n Update Payment Method\n </button>\n </div>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { useAppearance } from \"../../appearance/context.js\";\nimport { T, border as themeBorder, surface, text, type Appearance } from \"../../appearance/tokens.js\";\nimport { creditUnitLabel, formatDecimalString } from \"../../core/decimal.js\";\n\nexport interface CreditBalanceSource {\n id: string;\n type: \"subscription_grant\" | \"top_up\" | \"manual_grant\" | \"adjustment\" | \"allocated_top_up\";\n remaining: string;\n expires_at: string | null;\n}\n\n/** The fields of the SDK's credit balance (`nozle.credits.balance`) that this component reads. */\nexport interface CreditBalanceData {\n credit_system_name: string;\n unit_name: string;\n available: string;\n as_of: string;\n sources?: CreditBalanceSource[];\n}\n\nexport interface CreditBalanceProps {\n /** One balance from your backend. `null` or `undefined` shows the empty message. */\n balance?: CreditBalanceData | null;\n isLoading?: boolean;\n error?: Error | string | null;\n emptyMessage?: string;\n appearance?: Appearance;\n}\n\nconst SOURCE_LABELS: Record<CreditBalanceSource[\"type\"], string> = {\n subscription_grant: \"Plan grant\",\n top_up: \"Top-up\",\n manual_grant: \"Granted\",\n adjustment: \"Adjustment\",\n allocated_top_up: \"Allocated top-up\",\n};\n\nconst muted = T.mutedForeground;\n\nfunction date(value: string): string {\n const parsed = new Date(value);\n return Number.isNaN(parsed.getTime()) ? value : parsed.toLocaleDateString(\"en-US\", { dateStyle: \"medium\" });\n}\n\nexport function CreditBalance({\n balance,\n isLoading = false,\n error = null,\n emptyMessage = \"No credit balance yet.\",\n appearance,\n}: CreditBalanceProps): React.ReactElement {\n const { root, el } = useAppearance(appearance);\n if (isLoading) return <div {...root(\"creditBalance\", { ...surface, height: 96, background: T.skeleton })} role=\"status\" aria-label=\"Loading credit balance\" />;\n if (error) return <p {...root(\"creditBalance\", { ...surface, color: T.dangerText })} role=\"alert\">{typeof error === \"string\" ? error : error.message}</p>;\n if (!balance) return <p {...root(\"creditBalance\", { ...surface, color: muted })} role=\"status\">{emptyMessage}</p>;\n\n const sources = (balance.sources ?? []).filter((source) => source.remaining !== \"0\");\n\n return (\n <section aria-label={balance.credit_system_name} {...root(\"creditBalance\", surface)}>\n <h3 style={{ ...text.heading, margin: 0 }}>{balance.credit_system_name}</h3>\n <p style={{ margin: \"0.25rem 0 0\" }}>\n <span {...el(\"creditBalance__amount\", text.metric)}>{formatDecimalString(balance.available)}</span>{\" \"}\n <span style={text.secondary}>{creditUnitLabel(balance.available, balance.unit_name)} available</span>\n </p>\n <p style={{ ...text.meta, margin: \"0.25rem 0 0\" }}>As of {date(balance.as_of)}</p>\n {sources.length > 0 && (\n <ul style={{ listStyle: \"none\", padding: 0, margin: \"1rem 0 0\" }}>\n {sources.map((source) => (\n <li key={source.id} style={{ display: \"flex\", justifyContent: \"space-between\", padding: \"0.25rem 0\" }}>\n <span>{SOURCE_LABELS[source.type] ?? source.type}</span>\n <span style={text.secondary}>\n {formatDecimalString(source.remaining)}\n {source.expires_at ? ` · expires ${date(source.expires_at)}` : \"\"}\n </span>\n </li>\n ))}\n </ul>\n )}\n </section>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { useAppearance } from \"../../appearance/context.js\";\nimport { T, buttonRadius, buttonStyle, surface, table, text, type Appearance } from \"../../appearance/tokens.js\";\nimport { formatDecimalString } from \"../../core/decimal.js\";\n\n/** The fields of the SDK's credit operation (`nozle.credits.operations`) that this component reads. */\nexport interface CreditOperationData {\n id: string;\n type: \"consume\" | \"grant\" | \"adjustment\" | \"expire\" | \"revoke\" | \"refund\" | \"transfer\";\n status: \"succeeded\" | \"denied\" | \"reversed\";\n credit_amount: string;\n feature_code: string | null;\n occurred_at: string;\n}\n\nexport interface CreditHistoryProps {\n operations?: CreditOperationData[];\n isLoading?: boolean;\n error?: Error | string | null;\n emptyMessage?: string;\n /** When true a \"Load more\" button is shown. Fetch the next page with the SDK's `next_cursor`. */\n hasMore?: boolean;\n onLoadMore?: () => void;\n appearance?: Appearance;\n}\n\nconst TYPE_LABELS: Record<CreditOperationData[\"type\"], string> = {\n consume: \"Used\",\n grant: \"Granted\",\n adjustment: \"Adjustment\",\n expire: \"Expired\",\n revoke: \"Revoked\",\n refund: \"Refunded\",\n transfer: \"Transfer\",\n};\n\nconst muted = T.mutedForeground;\n\nfunction when(value: string): string {\n const parsed = new Date(value);\n return Number.isNaN(parsed.getTime()) ? value : parsed.toLocaleString(\"en-US\", { dateStyle: \"medium\", timeStyle: \"short\" });\n}\n\nexport function CreditHistory({\n operations = [],\n isLoading = false,\n error = null,\n emptyMessage = \"No credit activity yet.\",\n hasMore = false,\n onLoadMore,\n appearance,\n}: CreditHistoryProps): React.ReactElement {\n const { root, el } = useAppearance(appearance);\n if (error) return <p {...root(\"creditHistory\", { ...surface, color: T.dangerText })} role=\"alert\">{typeof error === \"string\" ? error : error.message}</p>;\n if (isLoading && operations.length === 0) return <div {...root(\"creditHistory\", { ...surface, height: 120, background: T.skeleton })} role=\"status\" aria-label=\"Loading credit history\" />;\n if (operations.length === 0) return <p {...root(\"creditHistory\", { ...surface, color: muted })} role=\"status\">{emptyMessage}</p>;\n\n return (\n <div {...root(\"creditHistory\", { ...text.body, minWidth: 0 })}>\n <div style={table.frame}>\n <table {...el(\"creditHistory__table\", table.table)}>\n <thead>\n <tr>\n {[\"When\", \"Type\", \"Feature\", \"Credits\", \"Status\"].map((heading) => (\n <th key={heading} style={table.head(heading === \"Credits\")}>{heading}</th>\n ))}\n </tr>\n </thead>\n <tbody>\n {operations.map((operation, index) => {\n const last = index === operations.length - 1;\n return (\n <tr key={operation.id} {...el(\"creditHistory__row\")}>\n <td style={table.cell(false, last)}>{when(operation.occurred_at)}</td>\n <td style={table.cell(false, last)}>{TYPE_LABELS[operation.type] ?? operation.type}</td>\n <td style={table.cell(false, last)}>{operation.feature_code ?? \"—\"}</td>\n <td style={table.cell(true, last)}>{formatDecimalString(operation.credit_amount)}</td>\n <td style={{ ...table.cell(false, last), color: operation.status === \"succeeded\" ? undefined : muted }}>{operation.status}</td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n {hasMore && onLoadMore && (\n <button\n type=\"button\"\n onClick={onLoadMore}\n disabled={isLoading}\n style={{\n ...buttonStyle(\"secondary\", isLoading),\n marginTop: \"0.75rem\",\n padding: \"0.5rem 0.875rem\",\n borderRadius: buttonRadius(`calc(${T.radius} / 2)`),\n opacity: 1,\n }}\n >\n {isLoading ? \"Loading…\" : \"Load more\"}\n </button>\n )}\n </div>\n );\n}\n","/** One charge's usage in a period, as returned by Core's `current_usage` and `past_usage`. */\nexport interface ChargeUsageData {\n /** Decimal string, for example `\"1200.0\"`. */\n units: string;\n amount_cents: number;\n amount_currency: string;\n events_count?: number;\n charge: { nozle_id: string; charge_model: string; invoice_display_name?: string | null };\n feature: { nozle_id: string; code: string; name: string; aggregation_type?: string };\n}\n\n/**\n * A customer's usage for one billing period: the `customer_usage` object of\n * `GET /customers/{external_customer_id}/current_usage`, or one item of `usage_periods` in\n * `GET /customers/{external_customer_id}/past_usage`. Read them on your backend with a secret key.\n */\nexport interface CustomerUsageData {\n from_datetime: string;\n to_datetime: string;\n currency: string;\n amount_cents: number;\n charges_usage: ChargeUsageData[];\n}\n\nexport function formatAmount(amountCents: number, currency: string): string {\n const amount = amountCents / 100;\n try {\n return new Intl.NumberFormat(\"en-US\", { style: \"currency\", currency }).format(amount);\n } catch {\n return `${currency} ${amount.toFixed(2)}`;\n }\n}\n\nexport function formatDay(value: string): string {\n const parsed = new Date(value);\n return Number.isNaN(parsed.getTime()) ? value : parsed.toLocaleDateString(\"en-US\", { dateStyle: \"medium\", timeZone: \"UTC\" });\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { useAppearance } from \"../../appearance/context.js\";\nimport { T, surface, table, text, type Appearance } from \"../../appearance/tokens.js\";\nimport { formatDecimalString } from \"../../core/decimal.js\";\nimport { formatAmount, formatDay, type CustomerUsageData } from \"./usage-data.js\";\n\nexport interface UsageBreakdownProps {\n /** The `customer_usage` object from Core's `current_usage`, read on your backend. */\n usage?: CustomerUsageData | null;\n isLoading?: boolean;\n error?: Error | string | null;\n emptyMessage?: string;\n appearance?: Appearance;\n}\n\nconst muted = T.mutedForeground;\n\nexport function UsageBreakdown({\n usage,\n isLoading = false,\n error = null,\n emptyMessage = \"No usage in this period yet.\",\n appearance,\n}: UsageBreakdownProps): React.ReactElement {\n const { root, el } = useAppearance(appearance);\n if (isLoading) return <div {...root(\"usageBreakdown\", { ...surface, height: 120, background: T.skeleton })} role=\"status\" aria-label=\"Loading usage\" />;\n if (error) return <p {...root(\"usageBreakdown\", { ...surface, color: T.dangerText })} role=\"alert\">{typeof error === \"string\" ? error : error.message}</p>;\n if (!usage || usage.charges_usage.length === 0) return <p {...root(\"usageBreakdown\", { ...surface, color: muted })} role=\"status\">{emptyMessage}</p>;\n\n const rows = [...usage.charges_usage].sort((a, b) => b.amount_cents - a.amount_cents);\n\n return (\n <section {...root(\"usageBreakdown\", { ...text.body, minWidth: 0 })}>\n <p style={{ ...text.secondary, margin: \"0 0 0.5rem\" }}>\n {formatDay(usage.from_datetime)} to {formatDay(usage.to_datetime)}\n </p>\n <div style={table.frame}>\n <table style={table.table}>\n <thead>\n <tr>\n <th style={table.head()}>Feature</th>\n <th style={table.head(true)}>Units</th>\n <th style={table.head(true)}>Amount</th>\n </tr>\n </thead>\n <tbody>\n {rows.map((row, index) => {\n const last = index === rows.length - 1;\n return (\n <tr key={row.charge.nozle_id} {...el(\"usageBreakdown__row\")}>\n <td style={table.cell(false, last)}>{row.charge.invoice_display_name || row.feature.name}</td>\n <td style={table.cell(true, last)}>{formatDecimalString(row.units, 6)}</td>\n <td style={table.cell(true, last)}>{formatAmount(row.amount_cents, row.amount_currency)}</td>\n </tr>\n );\n })}\n </tbody>\n <tfoot>\n <tr>\n <td style={table.foot()} colSpan={2}>Total</td>\n <td style={table.foot(true)}>{formatAmount(usage.amount_cents, usage.currency)}</td>\n </tr>\n </tfoot>\n </table>\n </div>\n </section>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { useAppearance } from \"../../appearance/context.js\";\nimport { T, border as themeBorder, surface, text, type Appearance } from \"../../appearance/tokens.js\";\nimport { formatAmount, formatDay, type CustomerUsageData } from \"./usage-data.js\";\n\nexport interface UsageTrendProps {\n /** The `usage_periods` of Core's `past_usage`, read on your backend, in any order. */\n periods?: CustomerUsageData[] | null;\n /**\n * Chart the units of this feature code in each period instead of the amount. Periods without the\n * feature show zero.\n */\n featureCode?: string;\n isLoading?: boolean;\n error?: Error | string | null;\n emptyMessage?: string;\n appearance?: Appearance;\n}\n\nconst muted = T.mutedForeground;\nconst BAR_AREA = 120;\n\nfunction unitsFor(period: CustomerUsageData, featureCode: string): number {\n return period.charges_usage\n .filter((charge) => charge.feature.code === featureCode)\n .reduce((sum, charge) => sum + (Number(charge.units) || 0), 0);\n}\n\nexport function UsageTrend({\n periods,\n featureCode,\n isLoading = false,\n error = null,\n emptyMessage = \"No past usage yet.\",\n appearance,\n}: UsageTrendProps): React.ReactElement {\n const { root, el } = useAppearance(appearance);\n if (isLoading) return <div {...root(\"usageTrend\", { ...surface, height: 160, background: T.skeleton })} role=\"status\" aria-label=\"Loading usage trend\" />;\n if (error) return <p {...root(\"usageTrend\", { ...surface, color: T.dangerText })} role=\"alert\">{typeof error === \"string\" ? error : error.message}</p>;\n if (!periods || periods.length === 0) return <p {...root(\"usageTrend\", { ...surface, color: muted })} role=\"status\">{emptyMessage}</p>;\n\n const ordered = [...periods].sort((a, b) => Date.parse(a.from_datetime) - Date.parse(b.from_datetime));\n const points = ordered.map((period) => ({\n key: period.from_datetime,\n label: formatDay(period.from_datetime),\n value: featureCode ? unitsFor(period, featureCode) : period.amount_cents,\n text: featureCode\n ? `${unitsFor(period, featureCode).toLocaleString(\"en-US\")} ${featureCode}`\n : formatAmount(period.amount_cents, period.currency),\n }));\n const max = Math.max(...points.map((point) => point.value), 0);\n\n return (\n <figure {...root(\"usageTrend\", { ...surface, margin: 0 })}>\n <div style={{ display: \"flex\", alignItems: \"flex-end\", gap: \"0.5rem\", height: BAR_AREA + 40 }}>\n {points.map((point) => (\n <div key={point.key} style={{ ...text.meta, flex: 1, minWidth: 0, textAlign: \"center\" }}>\n <div>{point.text}</div>\n <div\n role=\"img\"\n aria-label={`${point.label}: ${point.text}`}\n title={`${point.label}: ${point.text}`}\n {...el(\"usageTrend__bar\", {\n height: max > 0 ? Math.max(2, (point.value / max) * BAR_AREA) : 2,\n marginTop: 4,\n borderRadius: `min(4px, ${T.radius}) min(4px, ${T.radius}) 0 0`,\n background: T.primary,\n })}\n />\n <div style={{ marginTop: 4 }}>{point.label}</div>\n </div>\n ))}\n </div>\n </figure>\n );\n}\n"]}