import { Suspense, lazy } from 'react'; import { Enums } from '@kit/supabase/database'; import { LoadingOverlay } from '@kit/ui/loading-overlay'; type BillingProvider = Enums<'billing_provider'>; // Create lazy components at module level (not during render) const StripeCheckoutLazy = lazy(async () => { const { StripeCheckout } = await import('@kit/stripe/components'); return { default: StripeCheckout }; }); const LemonSqueezyCheckoutLazy = lazy(async () => { const { LemonSqueezyEmbeddedCheckout } = await import( '@kit/lemon-squeezy/components' ); return { default: LemonSqueezyEmbeddedCheckout }; }); type CheckoutProps = { onClose: (() => unknown) | undefined; checkoutToken: string; }; export function EmbeddedCheckout( props: React.PropsWithChildren<{ checkoutToken: string; provider: BillingProvider; onClose?: () => void; }>, ) { return ( <> }> ); } function CheckoutSelector( props: CheckoutProps & { provider: BillingProvider }, ) { switch (props.provider) { case 'stripe': return ( ); case 'lemon-squeezy': return ( ); case 'paddle': throw new Error('Paddle is not yet supported'); default: throw new Error(`Unsupported provider: ${props.provider as string}`); } } function BlurryBackdrop() { return (
); }