@open-mercato/checkout 0.6.6-develop.6184.1.b7e55f8d61 → 0.6.6-develop.6201.1.8ceb502c4b
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/modules/checkout/__integration__/TC-CHKT-035.spec.js +2 -2
- package/dist/modules/checkout/__integration__/TC-CHKT-035.spec.js.map +2 -2
- package/dist/modules/checkout/components/PayPage.js +163 -103
- package/dist/modules/checkout/components/PayPage.js.map +2 -2
- package/package.json +5 -5
- package/src/modules/checkout/__integration__/TC-CHKT-035.spec.ts +2 -2
- package/src/modules/checkout/components/PayPage.tsx +160 -99
- package/src/modules/checkout/components/__tests__/PayPage.ds-contract.test.ts +26 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/modules/checkout/components/PayPage.tsx"],
|
|
4
|
-
"sourcesContent": ["\"use client\"\n\nimport * as React from 'react'\nimport Link from 'next/link'\nimport { useParams, useRouter, useSearchParams } from 'next/navigation'\nimport { ComponentReplacementHandles } from '@open-mercato/shared/modules/widgets/component-registry'\nimport { useLocale, useT } from '@open-mercato/shared/lib/i18n/context'\nimport { locales, type Locale } from '@open-mercato/shared/lib/i18n/config'\nimport type { CustomFieldDisplayEntry } from '@open-mercato/shared/lib/crud/custom-fields'\nimport { resolveLocaleFromCandidates } from '@open-mercato/shared/lib/i18n/locale'\nimport { getPaymentGatewayRenderer } from '@open-mercato/shared/modules/payment_gateways/client'\nimport type { PaymentGatewayRendererProps } from '@open-mercato/shared/modules/payment_gateways/client'\nimport type { PaymentGatewayClientSession } from '@open-mercato/shared/modules/payment_gateways/types'\nimport { InjectionSpot, useInjectionSpotEvents, useInjectionWidgets } from '@open-mercato/ui/backend/injection/InjectionSpot'\nimport { useRegisteredComponent } from '@open-mercato/ui/backend/injection/useRegisteredComponent'\nimport { MarkdownContent } from '@open-mercato/ui/backend/markdown/MarkdownContent'\nimport { apiCallOrThrow, readApiResultOrThrow, withScopedApiRequestHeaders } from '@open-mercato/ui/backend/utils/apiCall'\nimport { mapCrudServerErrorToFormErrors } from '@open-mercato/ui/backend/utils/serverErrors'\nimport { Alert, AlertDescription, AlertTitle } from '@open-mercato/ui/primitives/alert'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { Card, CardContent } from '@open-mercato/ui/primitives/card'\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from '@open-mercato/ui/primitives/dialog'\nimport { Input } from '@open-mercato/ui/primitives/input'\nimport { PasswordInput } from '@open-mercato/ui/primitives/password-input'\nimport { Spinner } from '@open-mercato/ui/primitives/spinner'\nimport { Textarea } from '@open-mercato/ui/primitives/textarea'\nimport {\n getCheckoutCustomerFieldSemanticType,\n validateCheckoutCustomerData,\n} from '../lib/customerDataValidation'\n\ntype CustomerFieldOption = {\n value: string\n label: string\n}\n\ntype CustomerFieldDefinition = {\n key: string\n label: string\n kind: string\n required: boolean\n placeholder?: string | null\n options?: CustomerFieldOption[]\n}\n\ntype PriceListItem = {\n id: string\n description: string\n amount: number\n currencyCode: string\n}\n\ntype CheckoutThemeMode = 'light' | 'dark' | 'auto'\n\nexport type PayLinkPayload = {\n id: string\n slug?: string | null\n name: string\n title?: string | null\n subtitle?: string | null\n description?: string | null\n logoUrl?: string | null\n logoPreviewUrl?: string | null\n primaryColor?: string | null\n secondaryColor?: string | null\n backgroundColor?: string | null\n themeMode?: CheckoutThemeMode | null\n status?: 'draft' | 'active' | 'inactive'\n pricingMode: 'fixed' | 'custom_amount' | 'price_list'\n fixedPriceAmount?: number | null\n fixedPriceCurrencyCode?: string | null\n fixedPriceOriginalAmount?: number | null\n customAmountMin?: number | null\n customAmountMax?: number | null\n customAmountCurrencyCode?: string | null\n priceListItems?: PriceListItem[]\n collectCustomerDetails?: boolean\n customerFieldsSchema?: CustomerFieldDefinition[]\n publicCustomFields?: CustomFieldDisplayEntry[]\n legalDocuments?: {\n terms?: { title?: string; markdown?: string; required?: boolean }\n privacyPolicy?: { title?: string; markdown?: string; required?: boolean }\n }\n requiresPassword?: boolean\n available?: boolean\n preview?: boolean\n gatewayProviderKey?: string | null\n}\n\ntype SubmitResponse = {\n transactionId: string\n redirectUrl?: string | null\n paymentSession?: (PaymentGatewayClientSession & {\n providerKey: string | null\n gatewayTransactionId: string\n }) | null\n}\n\ntype PayPageProps = {\n mode?: 'link' | 'template'\n sourceId?: string\n initialPayload?: PayLinkPayload | null\n initialLoadError?: string | null\n}\n\ntype FieldErrors = Record<string, string>\n\ntype PayPageSubmitData = {\n customerData: Record<string, unknown>\n acceptedLegalConsents: Record<string, boolean>\n amount: number | null\n selectedPriceItemId: string | null\n}\n\nexport type PayPageThemeTokens = {\n mode: 'light' | 'dark'\n accent: string\n accentSecondary: string\n accentContrast: string\n text: string\n mutedText: string\n pageBackground: string\n shellBackground: string\n surface: string\n surfaceMuted: string\n surfaceStrong: string\n border: string\n borderStrong: string\n shadow: string\n accentShadow: string\n heroBackground: string\n errorText: string\n errorBorder: string\n errorSurface: string\n errorSurfaceStrong: string\n errorRing: string\n}\n\ntype PayPageInjectionContext = {\n link: PayLinkPayload\n themeMode: 'light' | 'dark'\n themeTokens: PayPageThemeTokens\n preview: boolean\n selectedAmount: number | null\n currencyCode: string | null\n pricingMode: PayLinkPayload['pricingMode']\n customerSchema: CustomerFieldDefinition[]\n customerData: Record<string, unknown>\n legalDocuments: NonNullable<PayLinkPayload['legalDocuments']>\n acceptedLegalConsents: Record<string, boolean>\n transaction: { id: string } | null\n paymentView: 'idle' | 'embedded' | 'redirect'\n paymentSession: SubmitResponse['paymentSession']\n paymentProviderKey: string | null\n paymentRendererKey: string | null\n fieldErrors: FieldErrors\n submissionError: string | null\n inputsLocked: boolean\n isSubmitting: boolean\n canSubmit: boolean\n operation: 'create'\n}\n\nexport type PayPageSurfaceProps = {\n previewBanner: React.ReactNode\n leftColumn: React.ReactNode\n rightColumn: React.ReactNode\n footer: React.ReactNode\n themeTokens: PayPageThemeTokens\n}\n\nexport type PayPageHeaderProps = {\n payload: PayLinkPayload\n preview: boolean\n themeTokens: PayPageThemeTokens\n}\n\nexport type PayPageDescriptionProps = {\n payload: PayLinkPayload\n publicCustomFields: CustomFieldDisplayEntry[]\n themeTokens: PayPageThemeTokens\n}\n\nexport type PayPageCustomerFormProps = {\n payload: PayLinkPayload\n customerData: Record<string, unknown>\n fieldErrors: FieldErrors\n inputsLocked: boolean\n onFieldChange: (fieldKey: string, value: unknown) => void\n translateValidationMessage: (message: string | null | undefined, fieldPath?: string) => string\n themeTokens: PayPageThemeTokens\n}\n\nexport type PayPagePricingProps = {\n payload: PayLinkPayload\n amount: number | null\n selectedPriceItemId: string | null\n fieldErrors: FieldErrors\n inputsLocked: boolean\n formatAmount: (value: number | null | undefined, currencyCode?: string | null) => string\n onAmountChange: (value: string) => void\n onPriceItemSelect: (item: PriceListItem) => void\n translateValidationMessage: (message: string | null | undefined, fieldPath?: string) => string\n themeTokens: PayPageThemeTokens\n}\n\nexport type PayPageSummaryProps = {\n payload: PayLinkPayload\n selectedAmount: number | null\n currencyCode: string | null\n formatAmount: (value: number | null | undefined, currencyCode?: string | null) => string\n preview: boolean\n themeTokens: PayPageThemeTokens\n}\n\nexport type PayPageLegalConsentProps = {\n payload: PayLinkPayload\n acceptedLegalConsents: Record<string, boolean>\n fieldErrors: FieldErrors\n inputsLocked: boolean\n onConsentChange: (fieldKey: 'terms' | 'privacyPolicy', value: boolean) => void\n translateValidationMessage: (message: string | null | undefined, fieldPath?: string) => string\n themeTokens: PayPageThemeTokens\n}\n\nexport type PayPagePaymentFormProps = {\n payload: PayLinkPayload\n slug: string\n preview: boolean\n isSubmitting: boolean\n submissionError: string | null\n paymentSession: SubmitResponse['paymentSession']\n activeTransactionId: string | null\n embeddedRenderer: React.ComponentType<PaymentGatewayRendererProps> | null | undefined\n onSubmit: () => Promise<void>\n onReset: () => void\n onComplete: () => void\n onError: (message: string) => void\n injectionContext: PayPageInjectionContext\n themeTokens: PayPageThemeTokens\n}\n\nexport type PayPagePaymentSectionProps = {\n payload: PayLinkPayload\n preview: boolean\n themeTokens: PayPageThemeTokens\n children: React.ReactNode\n}\n\nexport type PayPageHelpProps = {\n payload: PayLinkPayload\n preview: boolean\n themeTokens: PayPageThemeTokens\n}\n\nexport type PayPageFooterProps = {\n payload: PayLinkPayload\n themeTokens: PayPageThemeTokens\n}\n\nconst PAGE_HANDLE = ComponentReplacementHandles.page('checkout.pay-page')\nconst HEADER_HANDLE = ComponentReplacementHandles.section('checkout.pay-page', 'header')\nconst DESCRIPTION_HANDLE = ComponentReplacementHandles.section('checkout.pay-page', 'description')\nconst SUMMARY_HANDLE = ComponentReplacementHandles.section('checkout.pay-page', 'summary')\nconst PRICING_HANDLE = ComponentReplacementHandles.section('checkout.pay-page', 'pricing')\nconst PAYMENT_HANDLE = ComponentReplacementHandles.section('checkout.pay-page', 'payment')\nconst CUSTOMER_FORM_HANDLE = ComponentReplacementHandles.section('checkout.pay-page', 'customer-form')\nconst LEGAL_CONSENT_HANDLE = ComponentReplacementHandles.section('checkout.pay-page', 'legal-consent')\nconst GATEWAY_FORM_HANDLE = ComponentReplacementHandles.section('checkout.pay-page', 'gateway-form')\nconst HELP_HANDLE = ComponentReplacementHandles.section('checkout.pay-page', 'help')\nconst FOOTER_HANDLE = ComponentReplacementHandles.section('checkout.pay-page', 'footer')\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.min(Math.max(value, min), max)\n}\n\nfunction readErrorMessage(error: unknown, fallback: string) {\n return error instanceof Error && error.message ? error.message : fallback\n}\n\nfunction readTranslatedErrorMessage(\n error: unknown,\n translate: (key: string, fallback: string) => string,\n fallback: string,\n) {\n return translate(readErrorMessage(error, fallback), fallback)\n}\n\nfunction parseNumericInput(value: string): number | null {\n const trimmed = value.trim()\n if (!trimmed) return null\n const parsed = Number(trimmed)\n return Number.isFinite(parsed) ? parsed : null\n}\n\nfunction setSubmitDataFieldValue(\n data: PayPageSubmitData,\n fieldPath: string,\n value: unknown,\n): PayPageSubmitData {\n if (fieldPath.startsWith('customerData.')) {\n const fieldKey = fieldPath.slice('customerData.'.length)\n return {\n ...data,\n customerData: {\n ...data.customerData,\n [fieldKey]: value,\n },\n }\n }\n if (fieldPath.startsWith('acceptedLegalConsents.')) {\n const fieldKey = fieldPath.slice('acceptedLegalConsents.'.length)\n if (fieldKey === 'terms' || fieldKey === 'privacyPolicy') {\n return {\n ...data,\n acceptedLegalConsents: {\n ...data.acceptedLegalConsents,\n [fieldKey]: value === true,\n },\n }\n }\n return data\n }\n if (fieldPath === 'amount') {\n return {\n ...data,\n amount: typeof value === 'number' && Number.isFinite(value) ? value : null,\n }\n }\n if (fieldPath === 'selectedPriceItemId') {\n return {\n ...data,\n selectedPriceItemId: typeof value === 'string' && value.trim().length > 0 ? value : null,\n }\n }\n return data\n}\n\nfunction applySubmitDataSideEffects(\n data: PayPageSubmitData,\n sideEffects: Record<string, unknown> | undefined,\n): PayPageSubmitData {\n if (!sideEffects) return data\n return Object.entries(sideEffects).reduce(\n (current, [fieldPath, value]) => setSubmitDataFieldValue(current, fieldPath, value),\n data,\n )\n}\n\nfunction normalizeHexColor(value: string | null | undefined, fallback: string) {\n const normalized = typeof value === 'string' ? value.trim().replace(/^#/, '') : ''\n if (/^[0-9a-fA-F]{3}$/.test(normalized)) {\n return `#${normalized.split('').map((part) => `${part}${part}`).join('')}`.toUpperCase()\n }\n if (/^[0-9a-fA-F]{6}$/.test(normalized)) {\n return `#${normalized}`.toUpperCase()\n }\n return fallback.toUpperCase()\n}\n\nfunction hexToRgb(color: string) {\n const normalized = normalizeHexColor(color, '#000000').replace('#', '')\n return {\n r: Number.parseInt(normalized.slice(0, 2), 16),\n g: Number.parseInt(normalized.slice(2, 4), 16),\n b: Number.parseInt(normalized.slice(4, 6), 16),\n }\n}\n\nfunction rgbToHex(rgb: { r: number; g: number; b: number }) {\n const encode = (value: number) => clamp(Math.round(value), 0, 255).toString(16).padStart(2, '0')\n return `#${encode(rgb.r)}${encode(rgb.g)}${encode(rgb.b)}`.toUpperCase()\n}\n\nfunction mixHexColors(start: string, end: string, weight: number) {\n const from = hexToRgb(start)\n const to = hexToRgb(end)\n const amount = clamp(weight, 0, 1)\n return rgbToHex({\n r: from.r + (to.r - from.r) * amount,\n g: from.g + (to.g - from.g) * amount,\n b: from.b + (to.b - from.b) * amount,\n })\n}\n\nfunction withAlpha(color: string, alpha: number) {\n const { r, g, b } = hexToRgb(color)\n return `rgba(${r}, ${g}, ${b}, ${clamp(alpha, 0, 1)})`\n}\n\nfunction getContrastText(color: string) {\n const { r, g, b } = hexToRgb(color)\n const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255\n return luminance > 0.62 ? '#0F172A' : '#F8FAFC'\n}\n\nfunction resolveThemeTokens(payload: PayLinkPayload | null, prefersDark: boolean): PayPageThemeTokens {\n const accent = normalizeHexColor(payload?.primaryColor, '#1E3A8A')\n const accentSecondary = normalizeHexColor(payload?.secondaryColor, '#F59E0B')\n const requestedMode = payload?.themeMode ?? 'auto'\n const mode = requestedMode === 'dark' || (requestedMode === 'auto' && prefersDark) ? 'dark' : 'light'\n const background = normalizeHexColor(payload?.backgroundColor, mode === 'dark' ? '#0B1020' : '#F5EFE6')\n const text = mode === 'dark' ? '#F8FAFC' : '#111827'\n const mutedText = mode === 'dark' ? '#CBD5E1' : '#6B7280'\n const surface = mixHexColors(background, mode === 'dark' ? '#111827' : '#FFFFFF', mode === 'dark' ? 0.62 : 0.76)\n const surfaceMuted = mixHexColors(accentSecondary, background, mode === 'dark' ? 0.18 : 0.88)\n const surfaceStrong = mixHexColors(accent, background, mode === 'dark' ? 0.22 : 0.9)\n const border = withAlpha(mode === 'dark' ? '#E2E8F0' : accent, mode === 'dark' ? 0.16 : 0.14)\n const borderStrong = withAlpha(accent, mode === 'dark' ? 0.34 : 0.22)\n const shellBackground = mixHexColors(background, mode === 'dark' ? '#020617' : '#FFFDF8', mode === 'dark' ? 0.82 : 0.64)\n const heroStart = withAlpha(accent, mode === 'dark' ? 0.26 : 0.16)\n const heroEnd = withAlpha(accentSecondary, mode === 'dark' ? 0.22 : 0.2)\n const errorBase = mode === 'dark' ? '#F87171' : '#DC2626'\n\n return {\n mode,\n accent,\n accentSecondary,\n accentContrast: getContrastText(accent),\n text,\n mutedText,\n pageBackground: `\n radial-gradient(circle at top left, ${withAlpha(accent, mode === 'dark' ? 0.2 : 0.12)} 0%, transparent 38%),\n radial-gradient(circle at bottom right, ${withAlpha(accentSecondary, mode === 'dark' ? 0.24 : 0.15)} 0%, transparent 34%),\n linear-gradient(140deg, ${background} 0%, ${shellBackground} 100%)\n `,\n shellBackground,\n surface,\n surfaceMuted,\n surfaceStrong,\n border,\n borderStrong,\n shadow: mode === 'dark'\n ? `0 32px 80px ${withAlpha('#020617', 0.55)}`\n : `0 28px 72px ${withAlpha(accent, 0.12)}`,\n accentShadow: `0 22px 48px ${withAlpha(accent, mode === 'dark' ? 0.3 : 0.22)}`,\n heroBackground: `linear-gradient(145deg, ${heroStart} 0%, ${heroEnd} 100%)`,\n errorText: mode === 'dark' ? '#FCA5A5' : '#B91C1C',\n errorBorder: errorBase,\n errorSurface: withAlpha(errorBase, mode === 'dark' ? 0.14 : 0.08),\n errorSurfaceStrong: withAlpha(errorBase, mode === 'dark' ? 0.2 : 0.12),\n errorRing: withAlpha(errorBase, mode === 'dark' ? 0.28 : 0.18),\n }\n}\n\nfunction buildReadableInputStyle(themeTokens: PayPageThemeTokens, hasError: boolean): React.CSSProperties {\n return {\n background: 'rgba(255, 255, 255, 0.96)',\n color: '#0F172A',\n borderColor: hasError ? themeTokens.errorBorder : withAlpha('#0F172A', 0.12),\n boxShadow: hasError ? `0 0 0 3px ${themeTokens.errorRing}` : undefined,\n }\n}\n\nfunction buildValidationMessageStyle(themeTokens: PayPageThemeTokens): React.CSSProperties {\n return {\n color: themeTokens.errorText,\n fontWeight: 500,\n }\n}\n\nfunction buildValidationNoticeStyle(themeTokens: PayPageThemeTokens): React.CSSProperties {\n return {\n borderColor: themeTokens.errorBorder,\n background: themeTokens.errorSurface,\n color: themeTokens.errorText,\n boxShadow: `0 0 0 1px ${themeTokens.errorSurfaceStrong} inset`,\n }\n}\n\nfunction formatPublicFieldValue(value: unknown, booleanLabels?: { trueLabel: string; falseLabel: string }): string {\n if (Array.isArray(value)) return value.map((entry) => String(entry)).join(', ')\n if (typeof value === 'boolean') {\n if (booleanLabels) return value ? booleanLabels.trueLabel : booleanLabels.falseLabel\n return value ? 'Yes' : 'No'\n }\n if (value == null) return ''\n return String(value)\n}\n\nfunction usePrefersDarkMode() {\n const [prefersDark, setPrefersDark] = React.useState(false)\n\n React.useEffect(() => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') return\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\n const updatePreference = () => setPrefersDark(mediaQuery.matches)\n updatePreference()\n if (typeof mediaQuery.addEventListener === 'function') {\n mediaQuery.addEventListener('change', updatePreference)\n return () => mediaQuery.removeEventListener('change', updatePreference)\n }\n mediaQuery.addListener(updatePreference)\n return () => mediaQuery.removeListener(updatePreference)\n }, [])\n\n return prefersDark\n}\n\nfunction hasStoredLocalePreference() {\n if (typeof document === 'undefined') return false\n\n return document.cookie\n .split(';')\n .some((part) => part.trim().startsWith('locale='))\n}\n\nasync function persistLocalePreference(locale: Locale) {\n const response = await fetch('/api/auth/locale', {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ locale }),\n })\n\n return response.ok\n}\n\nfunction buildPanelStyle(themeTokens: PayPageThemeTokens, variant: 'default' | 'muted' | 'hero' | 'accent' = 'default'): React.CSSProperties {\n if (variant === 'hero') {\n return {\n background: themeTokens.heroBackground,\n borderColor: themeTokens.borderStrong,\n boxShadow: themeTokens.shadow,\n color: themeTokens.text,\n }\n }\n if (variant === 'accent') {\n return {\n background: `linear-gradient(145deg, ${themeTokens.accent} 0%, ${mixHexColors(themeTokens.accent, themeTokens.accentSecondary, 0.4)} 100%)`,\n borderColor: withAlpha(themeTokens.accentContrast, 0.12),\n boxShadow: themeTokens.accentShadow,\n color: themeTokens.accentContrast,\n }\n }\n return {\n background: variant === 'muted' ? themeTokens.surfaceMuted : themeTokens.surface,\n borderColor: variant === 'muted' ? themeTokens.borderStrong : themeTokens.border,\n boxShadow: themeTokens.shadow,\n color: themeTokens.text,\n }\n}\n\nfunction buildButtonStyle(themeTokens: PayPageThemeTokens, variant: 'solid' | 'outline' = 'solid'): React.CSSProperties {\n if (variant === 'outline') {\n return {\n borderColor: themeTokens.borderStrong,\n color: themeTokens.text,\n background: withAlpha(themeTokens.surface, 0.72),\n }\n }\n return {\n background: themeTokens.accent,\n color: themeTokens.accentContrast,\n boxShadow: themeTokens.accentShadow,\n }\n}\n\nconst READABLE_INPUT_CLASSNAME = 'border bg-white/95 text-slate-900 placeholder:text-slate-400 disabled:cursor-not-allowed disabled:opacity-50'\n\nexport function PayPageSurface({\n previewBanner,\n leftColumn,\n rightColumn,\n footer,\n themeTokens,\n}: PayPageSurfaceProps) {\n return (\n <div\n className=\"relative min-h-screen overflow-hidden px-4 py-6 sm:px-6 lg:px-8 lg:py-10\"\n style={{ background: themeTokens.pageBackground, color: themeTokens.text }}\n >\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute left-[-10%] top-[-5%] h-80 w-80 rounded-full blur-3xl\"\n style={{ background: withAlpha(themeTokens.accent, 0.16) }}\n />\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute bottom-[-8%] right-[-4%] h-96 w-96 rounded-full blur-3xl\"\n style={{ background: withAlpha(themeTokens.accentSecondary, 0.16) }}\n />\n\n <div className=\"relative mx-auto max-w-7xl space-y-6\">\n {previewBanner}\n <div className=\"grid gap-6 lg:grid-cols-[minmax(0,1.12fr)_minmax(360px,430px)] lg:items-start\">\n <div className=\"space-y-6\">{leftColumn}</div>\n <div className=\"space-y-6 lg:sticky lg:top-6\">{rightColumn}</div>\n </div>\n {footer}\n </div>\n </div>\n )\n}\n\nexport function PayPageHeader({ payload, preview, themeTokens }: PayPageHeaderProps) {\n const t = useT()\n const resolvedLogoUrl = payload.logoPreviewUrl ?? payload.logoUrl ?? null\n\n return (\n <section\n className=\"relative overflow-hidden rounded-xl border p-6 sm:p-8\"\n style={buildPanelStyle(themeTokens, 'hero')}\n >\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute right-[-4rem] top-[-3rem] h-40 w-40 rounded-full blur-3xl\"\n style={{ background: withAlpha(themeTokens.accentSecondary, 0.22) }}\n />\n <div className=\"relative flex flex-col gap-6\">\n <div className=\"space-y-4\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <span\n className=\"inline-flex rounded-full px-3 py-1 text-overline font-semibold uppercase tracking-widest\"\n style={{\n background: withAlpha(themeTokens.accent, 0.14),\n color: themeTokens.text,\n }}\n >\n {t('checkout.payPage.badges.secure', 'Secure checkout')}\n </span>\n {preview ? (\n <span\n className=\"inline-flex rounded-full px-3 py-1 text-overline font-semibold uppercase tracking-widest\"\n style={{\n background: withAlpha(themeTokens.accentSecondary, 0.16),\n color: themeTokens.text,\n }}\n >\n {t('checkout.payPage.badges.preview', 'Preview')}\n </span>\n ) : null}\n </div>\n\n {resolvedLogoUrl ? (\n <img\n src={resolvedLogoUrl}\n alt={payload.title ?? payload.name}\n className=\"h-14 w-auto max-w-[180px] object-contain\"\n />\n ) : null}\n\n <div className=\"space-y-3\">\n <h1 className=\"max-w-3xl text-3xl font-semibold tracking-tight sm:text-5xl\">\n {payload.title ?? payload.name}\n </h1>\n {payload.subtitle ? (\n <p className=\"max-w-2xl text-base leading-7\" style={{ color: themeTokens.mutedText }}>\n {payload.subtitle}\n </p>\n ) : null}\n </div>\n </div>\n </div>\n </section>\n )\n}\n\nexport function PayPageDescription({ payload, publicCustomFields, themeTokens }: PayPageDescriptionProps) {\n const t = useT()\n const hasDescription = Boolean(payload.description)\n const visibleFields = publicCustomFields.filter((field) => {\n const formattedValue = formatPublicFieldValue(field.value, {\n trueLabel: t('checkout.payPage.fields.booleanTrue', 'Yes'),\n falseLabel: t('checkout.payPage.fields.booleanFalse', 'No'),\n })\n return formattedValue.trim().length > 0\n })\n\n if (!hasDescription && visibleFields.length === 0) return null\n\n return (\n <section\n className=\"space-y-5 rounded-xl border p-6 sm:p-7\"\n style={buildPanelStyle(themeTokens, 'default')}\n >\n {hasDescription ? (\n <div className=\"space-y-3\">\n <div className=\"text-overline font-semibold uppercase tracking-widest\" style={{ color: themeTokens.mutedText }}>\n {t('checkout.payPage.description.kicker', 'Offer overview')}\n </div>\n <div className=\"prose prose-sm max-w-none\">\n <MarkdownContent body={payload.description ?? ''} format=\"markdown\" />\n </div>\n </div>\n ) : null}\n\n {visibleFields.length > 0 ? (\n <div className=\"space-y-4\">\n <div className=\"space-y-1\">\n <h2 className=\"text-lg font-semibold\">{t('checkout.payPage.sections.productDetails', 'Product details')}</h2>\n <p className=\"text-sm\" style={{ color: themeTokens.mutedText }}>\n {t('checkout.payPage.help.productDetails', 'Additional offer details configured for this payment link.')}\n </p>\n </div>\n <div className=\"grid gap-4 sm:grid-cols-2\">\n {visibleFields.map((field) => {\n const formattedValue = formatPublicFieldValue(field.value, {\n trueLabel: t('checkout.payPage.fields.booleanTrue', 'Yes'),\n falseLabel: t('checkout.payPage.fields.booleanFalse', 'No'),\n })\n const isMultiline = field.kind === 'multiline' || formattedValue.includes('\\n')\n\n return (\n <div\n key={field.key}\n className={isMultiline ? 'rounded-xl border p-4 sm:col-span-2' : 'rounded-xl border p-4'}\n style={{\n background: withAlpha(themeTokens.shellBackground, 0.72),\n borderColor: themeTokens.border,\n }}\n >\n <div className=\"text-sm font-medium\">{field.label ?? field.key}</div>\n <div\n className={isMultiline ? 'mt-2 whitespace-pre-wrap text-sm' : 'mt-2 text-sm'}\n style={{ color: themeTokens.mutedText }}\n >\n {formattedValue}\n </div>\n </div>\n )\n })}\n </div>\n </div>\n ) : null}\n </section>\n )\n}\n\nexport function PayPageCustomerForm({\n payload,\n customerData,\n fieldErrors,\n inputsLocked,\n onFieldChange,\n translateValidationMessage,\n themeTokens,\n}: PayPageCustomerFormProps) {\n const t = useT()\n\n if ((payload.customerFieldsSchema?.length ?? 0) === 0 || payload.collectCustomerDetails === false) {\n return null\n }\n\n return (\n <section\n className=\"space-y-5 rounded-xl border p-6 sm:p-7\"\n style={buildPanelStyle(themeTokens, 'default')}\n >\n <div className=\"space-y-1\">\n <h2 className=\"text-xl font-semibold\">{t('checkout.payPage.sections.customerDetails', 'Customer details')}</h2>\n <p className=\"text-sm\" style={{ color: themeTokens.mutedText }}>\n {t('checkout.payPage.help.customerDetails', 'Add the buyer details once, then continue to payment.')}\n </p>\n </div>\n\n <div className=\"grid gap-4 sm:grid-cols-2\">\n {(payload.customerFieldsSchema ?? []).map((field) => {\n const fieldPath = `customerData.${field.key}`\n const fieldError = fieldErrors[fieldPath]\n const value = customerData[field.key]\n const containerClass = field.kind === 'multiline' ? 'space-y-2 sm:col-span-2' : 'space-y-2'\n const semanticType = getCheckoutCustomerFieldSemanticType(field)\n\n return (\n <div key={field.key} className={containerClass}>\n {field.kind === 'boolean' ? (\n <label\n className=\"flex items-start gap-3 rounded-xl border px-4 py-3 text-sm\"\n style={{\n background: fieldError\n ? themeTokens.errorSurface\n : withAlpha(themeTokens.shellBackground, 0.72),\n borderColor: fieldError ? themeTokens.errorBorder : themeTokens.border,\n boxShadow: fieldError ? `0 0 0 2px ${themeTokens.errorRing}` : undefined,\n }}\n >\n <input\n type=\"checkbox\"\n checked={value === true}\n disabled={inputsLocked}\n onChange={(event) => onFieldChange(field.key, event.target.checked)}\n />\n <span className=\"space-y-1\">\n <span className=\"font-medium\">\n {field.label}\n {field.required ? ' *' : ''}\n </span>\n {field.placeholder ? (\n <span className=\"block\" style={{ color: themeTokens.mutedText }}>\n {field.placeholder}\n </span>\n ) : null}\n </span>\n </label>\n ) : (\n <>\n <label className=\"text-sm font-medium\">\n {field.label}\n {field.required ? ' *' : ''}\n </label>\n {field.kind === 'multiline' ? (\n <Textarea\n className={READABLE_INPUT_CLASSNAME}\n value={typeof value === 'string' ? value : ''}\n disabled={inputsLocked}\n onChange={(event) => onFieldChange(field.key, event.target.value)}\n placeholder={field.placeholder ?? undefined}\n style={buildReadableInputStyle(themeTokens, Boolean(fieldError))}\n />\n ) : field.kind === 'select' || field.kind === 'radio' ? (\n <select\n className={`w-full rounded-xl px-3 py-2.5 text-sm ${READABLE_INPUT_CLASSNAME}`}\n value={typeof value === 'string' ? value : ''}\n disabled={inputsLocked}\n onChange={(event) => onFieldChange(field.key, event.target.value)}\n style={buildReadableInputStyle(themeTokens, Boolean(fieldError))}\n >\n <option value=\"\">{t('checkout.payPage.fields.selectPlaceholder', 'Select...')}</option>\n {(field.options ?? []).map((option) => (\n <option key={option.value} value={option.value}>{option.label}</option>\n ))}\n </select>\n ) : (\n <Input\n className={READABLE_INPUT_CLASSNAME}\n type={semanticType === 'email' ? 'email' : semanticType === 'phone' ? 'tel' : 'text'}\n value={typeof value === 'string' ? value : ''}\n disabled={inputsLocked}\n onChange={(event) => onFieldChange(field.key, event.target.value)}\n placeholder={field.placeholder ?? undefined}\n autoComplete={semanticType === 'email' ? 'email' : semanticType === 'phone' ? 'tel' : undefined}\n style={buildReadableInputStyle(themeTokens, Boolean(fieldError))}\n />\n )}\n </>\n )}\n {fieldError ? (\n <p className=\"text-sm\" style={buildValidationMessageStyle(themeTokens)}>\n {translateValidationMessage(fieldError, fieldPath)}\n </p>\n ) : null}\n </div>\n )\n })}\n </div>\n </section>\n )\n}\n\nexport function PayPagePricing({\n payload,\n amount,\n selectedPriceItemId,\n fieldErrors,\n inputsLocked,\n formatAmount,\n onAmountChange,\n onPriceItemSelect,\n translateValidationMessage,\n themeTokens,\n}: PayPagePricingProps) {\n const t = useT()\n\n return (\n <section className=\"space-y-4\">\n <div className=\"space-y-1\">\n <div className=\"text-overline font-semibold uppercase tracking-widest\" style={{ color: themeTokens.mutedText }}>\n {t('checkout.payPage.pricing.kicker', 'Payment setup')}\n </div>\n <h2 className=\"text-lg font-semibold\">{t('checkout.payPage.pricing.title', 'Choose how you want to pay')}</h2>\n </div>\n\n {payload.pricingMode === 'fixed' ? (\n <div className=\"rounded-xl border p-5\" style={buildPanelStyle(themeTokens, 'default')}>\n {typeof payload.fixedPriceOriginalAmount === 'number' ? (\n <div className=\"text-sm line-through\" style={{ color: themeTokens.mutedText }}>\n {formatAmount(payload.fixedPriceOriginalAmount, payload.fixedPriceCurrencyCode)}\n </div>\n ) : null}\n <div className=\"mt-1 text-4xl font-semibold\">\n {formatAmount(payload.fixedPriceAmount, payload.fixedPriceCurrencyCode)}\n </div>\n </div>\n ) : null}\n\n {payload.pricingMode === 'custom_amount' ? (\n <div className=\"space-y-2 rounded-xl border p-5\" style={buildPanelStyle(themeTokens, 'default')}>\n <label className=\"text-sm font-medium\">{t('checkout.payPage.fields.customAmount', 'Amount')}</label>\n <Input\n className={READABLE_INPUT_CLASSNAME}\n type=\"number\"\n value={amount ?? ''}\n disabled={inputsLocked}\n onChange={(event) => onAmountChange(event.target.value)}\n placeholder={[\n payload.customAmountMin != null ? formatAmount(payload.customAmountMin, payload.customAmountCurrencyCode) : null,\n payload.customAmountMax != null ? formatAmount(payload.customAmountMax, payload.customAmountCurrencyCode) : null,\n ].filter(Boolean).join(' - ')}\n style={buildReadableInputStyle(themeTokens, Boolean(fieldErrors.amount))}\n />\n {fieldErrors.amount ? (\n <p className=\"text-sm\" style={buildValidationMessageStyle(themeTokens)}>\n {translateValidationMessage(fieldErrors.amount, 'amount')}\n </p>\n ) : null}\n </div>\n ) : null}\n\n {payload.pricingMode === 'price_list' ? (\n <div className=\"space-y-3\">\n {(payload.priceListItems ?? []).map((item) => (\n <label\n key={item.id}\n className=\"flex cursor-pointer items-center justify-between gap-3 rounded-xl border px-4 py-4 text-sm transition\"\n style={{\n background: selectedPriceItemId === item.id\n ? withAlpha(themeTokens.accent, 0.08)\n : withAlpha(themeTokens.shellBackground, 0.66),\n borderColor: selectedPriceItemId === item.id\n ? themeTokens.borderStrong\n : themeTokens.border,\n }}\n >\n <span className=\"flex items-center gap-3\">\n <input\n type=\"radio\"\n name=\"priceItem\"\n checked={selectedPriceItemId === item.id}\n disabled={inputsLocked}\n onChange={() => onPriceItemSelect(item)}\n />\n <span className=\"font-medium\">{item.description}</span>\n </span>\n <span className=\"whitespace-nowrap font-semibold\">{formatAmount(item.amount, item.currencyCode)}</span>\n </label>\n ))}\n {fieldErrors.selectedPriceItemId ? (\n <p className=\"text-sm\" style={buildValidationMessageStyle(themeTokens)}>\n {translateValidationMessage(fieldErrors.selectedPriceItemId, 'selectedPriceItemId')}\n </p>\n ) : null}\n </div>\n ) : null}\n </section>\n )\n}\n\nexport function PayPageSummary({\n payload,\n selectedAmount,\n currencyCode,\n formatAmount,\n preview,\n themeTokens,\n}: PayPageSummaryProps) {\n const t = useT()\n const amountLabel = selectedAmount != null && currencyCode\n ? formatAmount(selectedAmount, currencyCode)\n : t('checkout.payPage.summary.awaitingSelection', 'Select an amount')\n\n return (\n <section className=\"rounded-xl border p-5\" style={buildPanelStyle(themeTokens, 'accent')}>\n <div className=\"flex items-start justify-between gap-3\">\n <div>\n <div className=\"text-overline font-semibold uppercase tracking-widest text-current/70\">\n {t('checkout.payPage.summary.amountDue', 'Amount due')}\n </div>\n <div className=\"mt-2 text-4xl font-semibold\">{amountLabel}</div>\n </div>\n <div\n className=\"rounded-full px-3 py-1 text-overline font-semibold uppercase tracking-widest\"\n style={{ background: withAlpha(themeTokens.accentContrast, 0.12) }}\n >\n {preview\n ? t('checkout.payPage.summary.previewState', 'Preview')\n : t('checkout.payPage.summary.liveState', 'Live')}\n </div>\n </div>\n </section>\n )\n}\n\nexport function PayPageLegalConsent({\n payload,\n acceptedLegalConsents,\n fieldErrors,\n inputsLocked,\n onConsentChange,\n translateValidationMessage,\n themeTokens,\n}: PayPageLegalConsentProps) {\n const t = useT()\n const [activeDocument, setActiveDocument] = React.useState<'terms' | 'privacyPolicy' | null>(null)\n const hasTerms = Boolean(payload.legalDocuments?.terms?.markdown)\n const hasPrivacyPolicy = Boolean(payload.legalDocuments?.privacyPolicy?.markdown)\n const activeDocumentPayload = activeDocument ? payload.legalDocuments?.[activeDocument] : null\n\n if (!hasTerms && !hasPrivacyPolicy) return null\n\n return (\n <>\n <section className=\"space-y-4 rounded-xl border p-5\" style={buildPanelStyle(themeTokens, 'default')}>\n <div className=\"space-y-1\">\n <h3 className=\"text-base font-semibold\">{t('checkout.payPage.sections.legal', 'Legal confirmations')}</h3>\n <p className=\"text-sm\" style={{ color: themeTokens.mutedText }}>\n {t('checkout.payPage.help.legal', 'Required confirmations must be accepted before the payment step starts.')}\n </p>\n </div>\n\n {hasTerms ? (\n <div className=\"space-y-2\">\n <div\n className=\"rounded-xl border px-4 py-3\"\n style={{\n background: withAlpha(themeTokens.shellBackground, 0.72),\n borderColor: fieldErrors['acceptedLegalConsents.terms'] ? themeTokens.errorBorder : themeTokens.border,\n }}\n >\n <label className=\"flex items-start gap-3 text-sm\">\n <input\n type=\"checkbox\"\n checked={acceptedLegalConsents.terms === true}\n disabled={inputsLocked}\n onChange={(event) => onConsentChange('terms', event.target.checked)}\n />\n <span className=\"space-y-2\">\n <span className=\"block\">\n {t(\n 'checkout.payPage.legal.acceptDocument',\n 'I accept {document}.',\n {\n document: payload.legalDocuments?.terms?.title || t('checkout.payPage.legal.defaultTermsTitle', 'the terms and conditions'),\n },\n )}\n </span>\n <Button\n type=\"button\"\n variant=\"link\"\n className=\"h-auto p-0 text-sm font-medium underline\"\n style={{ color: themeTokens.text }}\n onClick={() => setActiveDocument('terms')}\n >\n {t('checkout.payPage.legal.readDocument', 'Read document')}\n </Button>\n </span>\n </label>\n </div>\n {fieldErrors['acceptedLegalConsents.terms'] ? (\n <p className=\"text-sm\" style={buildValidationMessageStyle(themeTokens)}>\n {translateValidationMessage(fieldErrors['acceptedLegalConsents.terms'], 'acceptedLegalConsents.terms')}\n </p>\n ) : null}\n </div>\n ) : null}\n\n {hasPrivacyPolicy ? (\n <div className=\"space-y-2\">\n <div\n className=\"rounded-xl border px-4 py-3\"\n style={{\n background: withAlpha(themeTokens.shellBackground, 0.72),\n borderColor: fieldErrors['acceptedLegalConsents.privacyPolicy'] ? themeTokens.errorBorder : themeTokens.border,\n }}\n >\n <label className=\"flex items-start gap-3 text-sm\">\n <input\n type=\"checkbox\"\n checked={acceptedLegalConsents.privacyPolicy === true}\n disabled={inputsLocked}\n onChange={(event) => onConsentChange('privacyPolicy', event.target.checked)}\n />\n <span className=\"space-y-2\">\n <span className=\"block\">\n {t(\n 'checkout.payPage.legal.acceptDocument',\n 'I accept {document}.',\n {\n document: payload.legalDocuments?.privacyPolicy?.title || t('checkout.payPage.legal.defaultPrivacyTitle', 'the privacy policy'),\n },\n )}\n </span>\n <Button\n type=\"button\"\n variant=\"link\"\n className=\"h-auto p-0 text-sm font-medium underline\"\n style={{ color: themeTokens.text }}\n onClick={() => setActiveDocument('privacyPolicy')}\n >\n {t('checkout.payPage.legal.readDocument', 'Read document')}\n </Button>\n </span>\n </label>\n </div>\n {fieldErrors['acceptedLegalConsents.privacyPolicy'] ? (\n <p className=\"text-sm\" style={buildValidationMessageStyle(themeTokens)}>\n {translateValidationMessage(fieldErrors['acceptedLegalConsents.privacyPolicy'], 'acceptedLegalConsents.privacyPolicy')}\n </p>\n ) : null}\n </div>\n ) : null}\n </section>\n\n <Dialog open={activeDocument !== null} onOpenChange={(open) => { if (!open) setActiveDocument(null) }}>\n <DialogContent className=\"max-h-[80vh] overflow-hidden sm:max-w-2xl\">\n <DialogHeader>\n <DialogTitle>\n {activeDocumentPayload?.title\n || (activeDocument === 'privacyPolicy'\n ? t('checkout.payPage.legal.defaultPrivacyTitle', 'the privacy policy')\n : t('checkout.payPage.legal.defaultTermsTitle', 'the terms and conditions'))}\n </DialogTitle>\n </DialogHeader>\n <div className=\"overflow-y-auto pr-2\">\n <div className=\"prose prose-sm max-w-none\">\n <MarkdownContent body={activeDocumentPayload?.markdown ?? ''} format=\"markdown\" />\n </div>\n </div>\n </DialogContent>\n </Dialog>\n </>\n )\n}\n\nexport function PayPagePaymentForm({\n payload,\n slug,\n preview,\n isSubmitting,\n submissionError,\n paymentSession,\n activeTransactionId,\n embeddedRenderer,\n onSubmit,\n onReset,\n onComplete,\n onError,\n injectionContext,\n themeTokens,\n}: PayPagePaymentFormProps) {\n const t = useT()\n const embeddedPaymentSession = paymentSession?.type === 'embedded' ? paymentSession : null\n\n return (\n <section className=\"space-y-4\">\n {submissionError ? (\n <div className=\"rounded-xl border px-4 py-3 text-sm\" style={buildValidationNoticeStyle(themeTokens)}>\n {submissionError}\n </div>\n ) : null}\n\n <InjectionSpot spotId=\"checkout.pay-page:gateway-widget:before\" context={injectionContext} />\n {embeddedPaymentSession && embeddedRenderer ? (\n <>\n <InjectionSpot spotId=\"checkout.pay-page:gateway-widget:renderer:before\" context={injectionContext} />\n {React.createElement(embeddedRenderer, {\n providerKey: embeddedPaymentSession.providerKey ?? '',\n transactionId: activeTransactionId ?? '',\n gatewayTransactionId: embeddedPaymentSession.gatewayTransactionId,\n session: embeddedPaymentSession,\n disabled: preview,\n onComplete,\n onError,\n })}\n <InjectionSpot spotId=\"checkout.pay-page:gateway-widget:renderer:after\" context={injectionContext} />\n </>\n ) : (\n <>\n <InjectionSpot spotId=\"checkout.pay-page:gateway-widget:actions:before\" context={injectionContext} />\n <Button\n type=\"button\"\n className=\"h-12 w-full rounded-xl text-base\"\n disabled={preview || isSubmitting}\n style={buildButtonStyle(themeTokens)}\n onClick={() => { void onSubmit() }}\n >\n <span className=\"flex items-center justify-center gap-2\">\n {isSubmitting ? <Spinner size=\"sm\" /> : null}\n {preview\n ? t('checkout.payPage.actions.previewDisabled', 'Preview only')\n : isSubmitting\n ? t('checkout.payPage.actions.processingPayment', 'Processing payment...')\n : t('checkout.payPage.actions.payNow', 'Pay now')}\n </span>\n </Button>\n <InjectionSpot spotId=\"checkout.pay-page:gateway-widget:actions:after\" context={injectionContext} />\n </>\n )}\n <InjectionSpot spotId=\"checkout.pay-page:gateway-widget:after\" context={injectionContext} />\n\n {paymentSession ? (\n <Button\n type=\"button\"\n variant=\"outline\"\n className=\"w-full rounded-xl\"\n style={buildButtonStyle(themeTokens, 'outline')}\n onClick={onReset}\n >\n {t('checkout.payPage.actions.editDetails', 'Edit details')}\n </Button>\n ) : null}\n\n {payload.gatewayProviderKey ? (\n <div className=\"text-center text-xs\" style={{ color: themeTokens.mutedText }}>\n {t('checkout.payPage.payment.providerHint', 'Your payment will be handled by {provider}.', {\n provider: payload.gatewayProviderKey,\n })}\n </div>\n ) : null}\n\n <div className=\"hidden text-xs\" data-pay-link-slug={slug} />\n </section>\n )\n}\n\nexport function PayPagePaymentSection({ payload, preview, themeTokens, children }: PayPagePaymentSectionProps) {\n const t = useT()\n\n return (\n <Card\n className=\"overflow-hidden rounded-xl border backdrop-blur\"\n style={{\n ...buildPanelStyle(themeTokens, 'default'),\n background: `linear-gradient(180deg, ${withAlpha(themeTokens.surface, 0.96)} 0%, ${withAlpha(themeTokens.shellBackground, 0.94)} 100%)`,\n }}\n >\n <CardContent className=\"space-y-6 p-5 sm:p-6\">\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between gap-3\">\n <div>\n <div className=\"text-overline font-semibold uppercase tracking-widest\" style={{ color: themeTokens.mutedText }}>\n {t('checkout.payPage.payment.kicker', 'Payment rail')}\n </div>\n <h2 className=\"mt-1 text-xl font-semibold\">{t('checkout.payPage.sections.payment', 'Payment')}</h2>\n </div>\n <div\n className=\"rounded-full px-3 py-1 text-overline font-semibold uppercase tracking-widest\"\n style={{\n background: withAlpha(preview ? themeTokens.accentSecondary : themeTokens.accent, 0.12),\n color: themeTokens.text,\n }}\n >\n {preview\n ? t('checkout.payPage.payment.previewState', 'No charge')\n : t('checkout.payPage.payment.liveState', 'Ready')}\n </div>\n </div>\n <p className=\"text-sm\" style={{ color: themeTokens.mutedText }}>\n {t('checkout.payPage.help.payment', 'Choose the amount, review the summary, then continue with the secure payment step.')}\n </p>\n {payload.gatewayProviderKey ? (\n <div className=\"text-sm font-medium\">{payload.gatewayProviderKey}</div>\n ) : null}\n </div>\n {children}\n </CardContent>\n </Card>\n )\n}\n\nexport function PayPageHelp({ payload, preview, themeTokens }: PayPageHelpProps) {\n const t = useT()\n\n return (\n <section\n className=\"rounded-xl border px-4 py-4 text-sm\"\n style={{\n background: withAlpha(themeTokens.shellBackground, 0.7),\n borderColor: themeTokens.border,\n color: themeTokens.mutedText,\n }}\n >\n <div className=\"font-medium\" style={{ color: themeTokens.text }}>\n {preview\n ? t('checkout.payPage.help.previewHeadline', 'This is a preview of the payment flow.')\n : t('checkout.payPage.help.liveHeadline', 'The provider widget appears in this panel after validation.')}\n </div>\n <div className=\"mt-2\">\n {payload.gatewayProviderKey\n ? t('checkout.payPage.help.providerLine', 'Provider: {provider}.', { provider: payload.gatewayProviderKey })\n : t('checkout.payPage.help.providerFallback', 'The payment provider is configured in the checkout settings.')}\n </div>\n </section>\n )\n}\n\nexport function PayPageFooter({ payload, themeTokens }: PayPageFooterProps) {\n const t = useT()\n const locale = useLocale()\n const router = useRouter()\n const selectId = React.useId()\n const [pending, startTransition] = React.useTransition()\n\n const languageLabels = React.useMemo<Record<Locale, string>>(() => ({\n en: t('common.languages.english', 'English'),\n pl: t('common.languages.polish', 'Polski'),\n es: t('common.languages.spanish', 'Espa\u00F1ol'),\n de: t('common.languages.german', 'Deutsch'),\n }), [t])\n\n const setLocale = React.useCallback(async (nextLocale: Locale) => {\n if (nextLocale === locale) return\n\n try {\n const updated = await persistLocalePreference(nextLocale)\n if (!updated) return\n\n startTransition(() => router.refresh())\n } catch {\n // Keep the current locale when persistence fails.\n }\n }, [locale, router, startTransition])\n\n React.useEffect(() => {\n if (hasStoredLocalePreference() || typeof navigator === 'undefined') return\n\n const preferredLocale = resolveLocaleFromCandidates([\n ...(Array.isArray(navigator.languages) ? navigator.languages : []),\n navigator.language,\n ])\n\n if (!preferredLocale) return\n\n let active = true\n\n void (async () => {\n try {\n const updated = await persistLocalePreference(preferredLocale)\n if (!updated || !active || preferredLocale === locale) return\n\n startTransition(() => router.refresh())\n } catch {\n // Keep the current locale when auto-detection persistence fails.\n }\n })()\n\n return () => {\n active = false\n }\n }, [locale, router, startTransition])\n\n return (\n <footer\n className=\"rounded-xl border px-5 py-4 text-sm sm:px-6\"\n style={{\n background: withAlpha(themeTokens.surface, 0.86),\n borderColor: themeTokens.border,\n color: themeTokens.mutedText,\n }}\n >\n <div className=\"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between\">\n <div>\n <div className=\"font-medium\" style={{ color: themeTokens.text }}>{payload.title ?? payload.name}</div>\n <div>{t('checkout.payPage.footer.subtitle', 'Public payment page configured in checkout.')}</div>\n </div>\n <div className=\"flex flex-wrap items-center gap-3 sm:justify-end\">\n <div className=\"flex items-center gap-2 text-xs\" style={{ color: themeTokens.mutedText }}>\n <label htmlFor={selectId}>{t('common.language', 'Language')}</label>\n <div className=\"relative\">\n <select\n id={selectId}\n className=\"appearance-none rounded-full border px-3 py-1.5 pr-8 text-xs font-medium shadow-sm outline-none disabled:cursor-not-allowed disabled:opacity-50\"\n style={{\n background: withAlpha(themeTokens.surface, 0.92),\n borderColor: themeTokens.borderStrong,\n color: themeTokens.text,\n }}\n value={locale}\n onChange={(event) => setLocale(event.target.value as Locale)}\n disabled={pending}\n >\n {locales.map((entry) => (\n <option key={entry} value={entry}>\n {languageLabels[entry]}\n </option>\n ))}\n </select>\n <span\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute right-2 top-1/2 -translate-y-1/2 text-overline\"\n style={{ color: themeTokens.mutedText }}\n >\n \u25BC\n </span>\n </div>\n </div>\n <div className=\"text-xs uppercase tracking-widest\">\n {payload.gatewayProviderKey ?? t('checkout.payPage.header.autoProvider', 'Configured in checkout')}\n </div>\n </div>\n </div>\n </footer>\n )\n}\n\nexport function PayPage({\n mode = 'link',\n sourceId,\n initialPayload = null,\n initialLoadError = null,\n}: PayPageProps) {\n const params = useParams<{ slug: string }>()\n const router = useRouter()\n const searchParams = useSearchParams()\n const t = useT()\n const locale = useLocale()\n const prefersDark = usePrefersDarkMode()\n\n const routeSlug = typeof params?.slug === 'string' ? params.slug : ''\n const slug = sourceId ?? routeSlug\n const previewRequested = searchParams.get('preview') === 'true' || mode === 'template'\n\n const [payload, setPayload] = React.useState<PayLinkPayload | null>(initialPayload)\n const [isLoading, setIsLoading] = React.useState(initialPayload == null && initialLoadError == null)\n const [loadError, setLoadError] = React.useState<string | null>(initialLoadError)\n const [password, setPassword] = React.useState('')\n const [passwordError, setPasswordError] = React.useState<string | null>(null)\n const [isVerifyingPassword, setIsVerifyingPassword] = React.useState(false)\n const [customerData, setCustomerData] = React.useState<Record<string, unknown>>({})\n const [acceptedLegalConsents, setAcceptedLegalConsents] = React.useState<Record<string, boolean>>({})\n const [amount, setAmount] = React.useState<number | null>(null)\n const [selectedPriceItemId, setSelectedPriceItemId] = React.useState<string | null>(null)\n const [submissionError, setSubmissionError] = React.useState<string | null>(null)\n const [fieldErrors, setFieldErrors] = React.useState<FieldErrors>({})\n const [paymentSession, setPaymentSession] = React.useState<SubmitResponse['paymentSession']>(null)\n const [activeTransactionId, setActiveTransactionId] = React.useState<string | null>(null)\n const [isSubmitting, setIsSubmitting] = React.useState(false)\n\n const themeTokens = React.useMemo(\n () => resolveThemeTokens(payload, prefersDark),\n [payload, prefersDark],\n )\n\n const loadPayload = React.useCallback(async () => {\n if (!slug) return\n setIsLoading(true)\n setLoadError(null)\n const endpoint = mode === 'template'\n ? `/api/checkout/templates/${encodeURIComponent(slug)}/preview`\n : `/api/checkout/pay/${encodeURIComponent(slug)}${previewRequested ? '?preview=true' : ''}`\n\n try {\n const result = await readApiResultOrThrow<PayLinkPayload>(endpoint)\n setPayload(result)\n setPaymentSession(null)\n setActiveTransactionId(null)\n if (result.pricingMode === 'fixed' && typeof result.fixedPriceAmount === 'number') {\n setAmount(result.fixedPriceAmount)\n }\n } catch (error) {\n setPayload(null)\n setLoadError(readErrorMessage(error, t('checkout.payPage.errors.loadMessage', \"We couldn't load this payment page. Please try again.\")))\n } finally {\n setIsLoading(false)\n }\n }, [mode, previewRequested, slug, t])\n\n React.useEffect(() => {\n if (!slug) return\n if (initialPayload) return\n void loadPayload()\n }, [initialPayload, loadPayload, slug])\n\n React.useEffect(() => {\n if (!payload) return\n if (payload.pricingMode === 'fixed' && typeof payload.fixedPriceAmount === 'number') {\n setAmount(payload.fixedPriceAmount)\n return\n }\n if (payload.pricingMode !== 'price_list') {\n setSelectedPriceItemId(null)\n }\n }, [payload])\n\n const formatAmount = React.useCallback((value: number | null | undefined, currencyCode?: string | null) => {\n const normalizedValue = typeof value === 'number' && Number.isFinite(value) ? value : 0\n if (currencyCode) {\n try {\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency: currencyCode,\n }).format(normalizedValue)\n } catch {\n return `${normalizedValue.toFixed(2)} ${currencyCode}`\n }\n }\n return new Intl.NumberFormat(locale, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(normalizedValue)\n }, [locale])\n\n const isPreview = payload?.preview === true || previewRequested\n const selectedPriceItem = payload?.priceListItems?.find((item) => item.id === selectedPriceItemId) ?? null\n const shouldCollectCustomerDetails = payload != null\n && payload.collectCustomerDetails !== false\n && (payload.customerFieldsSchema?.length ?? 0) > 0\n const effectiveAmount = selectedPriceItem?.amount ?? amount\n const effectiveCurrencyCode = selectedPriceItem?.currencyCode\n ?? payload?.fixedPriceCurrencyCode\n ?? payload?.customAmountCurrencyCode\n ?? null\n const inputsLocked = isSubmitting || paymentSession != null\n const publicCustomFields = payload?.publicCustomFields ?? []\n const submitData = React.useMemo<PayPageSubmitData>(() => ({\n customerData,\n acceptedLegalConsents,\n amount: effectiveAmount ?? null,\n selectedPriceItemId,\n }), [acceptedLegalConsents, customerData, effectiveAmount, selectedPriceItemId])\n\n const resolveFieldLabel = React.useCallback((fieldPath: string): string => {\n if (!payload) return t('checkout.payPage.validation.thisField', 'this field')\n if (fieldPath.startsWith('customerData.')) {\n const fieldKey = fieldPath.slice('customerData.'.length)\n return payload.customerFieldsSchema?.find((field) => field.key === fieldKey)?.label\n ?? fieldKey\n }\n if (fieldPath === 'amount') {\n return t('checkout.payPage.summary.amountDue', 'Amount due')\n }\n if (fieldPath === 'selectedPriceItemId') {\n return t('checkout.payPage.validation.labels.option', 'payment option')\n }\n if (fieldPath.startsWith('acceptedLegalConsents.')) {\n const consentKey = fieldPath.slice('acceptedLegalConsents.'.length)\n if (consentKey === 'terms') {\n return payload.legalDocuments?.terms?.title\n ?? t('checkout.payPage.legal.defaultTermsTitle', 'the terms and conditions')\n }\n if (consentKey === 'privacyPolicy') {\n return payload.legalDocuments?.privacyPolicy?.title\n ?? t('checkout.payPage.legal.defaultPrivacyTitle', 'the privacy policy')\n }\n }\n return t('checkout.payPage.validation.thisField', 'this field')\n }, [payload, t])\n\n const translateValidationMessage = React.useCallback((message: string | null | undefined, fieldPath?: string) => {\n const trimmed = typeof message === 'string' ? message.trim() : ''\n if (!trimmed) return ''\n if (trimmed === 'checkout.payPage.validation.requiredField') {\n return t(trimmed, 'Enter {field}.', { field: resolveFieldLabel(fieldPath ?? '') })\n }\n if (trimmed === 'checkout.payPage.validation.documentRequired') {\n return t(trimmed, 'Accept {field} to continue.', { field: resolveFieldLabel(fieldPath ?? '') })\n }\n return t(trimmed, trimmed)\n }, [resolveFieldLabel, t])\n\n const clearFieldError = React.useCallback((fieldPath: string) => {\n setFieldErrors((current) => {\n if (!current[fieldPath]) return current\n const next = { ...current }\n delete next[fieldPath]\n return next\n })\n }, [])\n\n const applySubmitDataToState = React.useCallback((nextData: PayPageSubmitData) => {\n setCustomerData(nextData.customerData)\n setAcceptedLegalConsents(nextData.acceptedLegalConsents)\n setAmount(nextData.amount)\n setSelectedPriceItemId(nextData.selectedPriceItemId)\n }, [])\n\n const validateBeforeSubmit = React.useCallback((): FieldErrors => {\n if (!payload) return {}\n const nextErrors: FieldErrors = {}\n\n if (shouldCollectCustomerDetails) {\n Object.assign(\n nextErrors,\n validateCheckoutCustomerData(payload.customerFieldsSchema ?? [], customerData),\n )\n }\n\n if (payload.pricingMode === 'custom_amount') {\n if (effectiveAmount == null || !Number.isFinite(effectiveAmount)) {\n nextErrors.amount = 'checkout.payPage.validation.amountRequired'\n } else {\n if (payload.customAmountMin != null && effectiveAmount < payload.customAmountMin) {\n nextErrors.amount = t(\n 'checkout.payPage.validation.amountMin',\n 'Enter at least {amount}.',\n { amount: formatAmount(payload.customAmountMin, payload.customAmountCurrencyCode) },\n )\n }\n if (payload.customAmountMax != null && effectiveAmount > payload.customAmountMax) {\n nextErrors.amount = t(\n 'checkout.payPage.validation.amountMax',\n 'Enter no more than {amount}.',\n { amount: formatAmount(payload.customAmountMax, payload.customAmountCurrencyCode) },\n )\n }\n }\n }\n\n if (payload.pricingMode === 'price_list' && !selectedPriceItemId) {\n nextErrors.selectedPriceItemId = 'checkout.payPage.validation.priceSelectionRequired'\n }\n\n for (const key of ['terms', 'privacyPolicy'] as const) {\n const document = payload.legalDocuments?.[key]\n if (document?.required === true && acceptedLegalConsents[key] !== true) {\n nextErrors[`acceptedLegalConsents.${key}`] = 'checkout.payPage.validation.documentRequired'\n }\n }\n\n return nextErrors\n }, [\n acceptedLegalConsents,\n customerData,\n effectiveAmount,\n formatAmount,\n payload,\n selectedPriceItemId,\n shouldCollectCustomerDetails,\n t,\n ])\n\n const embeddedRenderer = paymentSession?.type === 'embedded' && paymentSession.providerKey\n ? getPaymentGatewayRenderer(paymentSession.providerKey, paymentSession.rendererKey)\n : null\n\n const paymentView: PayPageInjectionContext['paymentView'] = paymentSession == null\n ? 'idle'\n : embeddedRenderer\n ? 'embedded'\n : 'redirect'\n\n const injectionContext = React.useMemo<PayPageInjectionContext | null>(() => {\n if (!payload) return null\n return {\n link: payload,\n themeMode: themeTokens.mode,\n themeTokens,\n preview: isPreview,\n selectedAmount: effectiveAmount ?? null,\n currencyCode: effectiveCurrencyCode,\n pricingMode: payload.pricingMode,\n customerSchema: payload.customerFieldsSchema ?? [],\n customerData,\n legalDocuments: payload.legalDocuments ?? {},\n acceptedLegalConsents,\n transaction: activeTransactionId ? { id: activeTransactionId } : null,\n paymentView,\n paymentSession,\n paymentProviderKey: paymentSession?.providerKey ?? payload.gatewayProviderKey ?? null,\n paymentRendererKey: paymentSession?.type === 'embedded' ? paymentSession.rendererKey : null,\n fieldErrors,\n submissionError,\n inputsLocked,\n isSubmitting,\n canSubmit: !isPreview && !inputsLocked,\n operation: 'create',\n }\n }, [\n acceptedLegalConsents,\n activeTransactionId,\n customerData,\n effectiveAmount,\n effectiveCurrencyCode,\n isPreview,\n isSubmitting,\n inputsLocked,\n payload,\n fieldErrors,\n paymentSession,\n paymentView,\n submissionError,\n themeTokens,\n ])\n\n const injectionContextRef = React.useRef<PayPageInjectionContext | null>(injectionContext)\n const submitDataRef = React.useRef(submitData)\n\n React.useEffect(() => {\n injectionContextRef.current = injectionContext\n }, [injectionContext])\n\n React.useEffect(() => {\n submitDataRef.current = submitData\n }, [submitData])\n\n const { widgets: payPageFormWidgets } = useInjectionWidgets<PayPageInjectionContext>(\n injectionContext ? 'checkout.pay-page:form' : null,\n {\n context: injectionContext ?? undefined,\n triggerOnLoad: true,\n },\n )\n const { triggerEvent: triggerPayPageFormEvent } = useInjectionSpotEvents<PayPageInjectionContext, PayPageSubmitData>(\n 'checkout.pay-page:form',\n payPageFormWidgets,\n )\n\n const transformValidationErrors = React.useCallback(async (nextErrors: FieldErrors): Promise<FieldErrors> => {\n if (!injectionContextRef.current || !Object.keys(nextErrors).length) return nextErrors\n try {\n const result = await triggerPayPageFormEvent(\n 'transformValidation',\n nextErrors as unknown as PayPageSubmitData,\n injectionContextRef.current,\n { originalData: submitDataRef.current },\n )\n const transformed = result.data\n if (!transformed || typeof transformed !== 'object' || Array.isArray(transformed)) {\n return nextErrors\n }\n return Object.fromEntries(\n Object.entries(transformed as Record<string, unknown>).map(([fieldPath, value]) => [fieldPath, String(value)]),\n )\n } catch (error) {\n console.error('[PayPage] Error in transformValidation:', error)\n return nextErrors\n }\n }, [triggerPayPageFormEvent])\n\n const dispatchFieldChange = React.useCallback((fieldPath: string, value: unknown, nextData: PayPageSubmitData) => {\n if (!injectionContextRef.current) return\n void (async () => {\n try {\n const result = await triggerPayPageFormEvent(\n 'onFieldChange',\n nextData,\n injectionContextRef.current as PayPageInjectionContext,\n {\n fieldId: fieldPath,\n fieldValue: value,\n originalData: submitDataRef.current,\n },\n )\n const adjustedData = applySubmitDataSideEffects(\n setSubmitDataFieldValue(\n nextData,\n fieldPath,\n result.fieldChange?.value !== undefined ? result.fieldChange.value : value,\n ),\n result.fieldChange?.sideEffects,\n )\n if (adjustedData !== nextData) {\n applySubmitDataToState(adjustedData)\n }\n const nextMessage = result.fieldChange?.messages?.find((message) => message.severity === 'error')?.text\n if (nextMessage) {\n setFieldErrors((current) => ({ ...current, [fieldPath]: nextMessage }))\n }\n } catch (error) {\n console.error('[PayPage] Error in onFieldChange:', error)\n }\n })()\n }, [applySubmitDataToState, triggerPayPageFormEvent])\n\n const updateCustomerField = React.useCallback((fieldKey: string, value: unknown) => {\n const fieldPath = `customerData.${fieldKey}`\n const nextData = setSubmitDataFieldValue(submitDataRef.current, fieldPath, value)\n applySubmitDataToState(nextData)\n clearFieldError(fieldPath)\n setSubmissionError(null)\n dispatchFieldChange(fieldPath, value, nextData)\n }, [applySubmitDataToState, clearFieldError, dispatchFieldChange])\n\n const updateConsent = React.useCallback((fieldKey: 'terms' | 'privacyPolicy', value: boolean) => {\n const fieldPath = `acceptedLegalConsents.${fieldKey}`\n const nextData = setSubmitDataFieldValue(submitDataRef.current, fieldPath, value)\n applySubmitDataToState(nextData)\n clearFieldError(fieldPath)\n setSubmissionError(null)\n dispatchFieldChange(fieldPath, value, nextData)\n }, [applySubmitDataToState, clearFieldError, dispatchFieldChange])\n\n const previewBanner = payload ? (\n isPreview ? (\n <div\n className=\"rounded-xl border px-5 py-4\"\n style={{\n background: withAlpha(themeTokens.accentSecondary, 0.12),\n borderColor: withAlpha(themeTokens.accentSecondary, 0.44),\n color: themeTokens.text,\n }}\n >\n <div className=\"flex flex-wrap items-center justify-between gap-3\">\n <span className=\"text-sm font-medium\">{t('checkout.payPage.previewBanner', 'Preview mode. Payments are disabled.')}</span>\n <Button asChild type=\"button\" variant=\"outline\" style={buildButtonStyle(themeTokens, 'outline')}>\n <Link href={mode === 'template'\n ? `/backend/checkout/templates/${encodeURIComponent(payload.id)}`\n : `/backend/checkout/pay-links/${encodeURIComponent(payload.id)}`}\n >\n {t('checkout.payPage.actions.backToAdmin', 'Back to admin')}\n </Link>\n </Button>\n </div>\n </div>\n ) : null\n ) : null\n\n const SurfaceComponent = useRegisteredComponent<PayPageSurfaceProps>(PAGE_HANDLE, PayPageSurface)\n const HeaderComponent = useRegisteredComponent<PayPageHeaderProps>(HEADER_HANDLE, PayPageHeader)\n const DescriptionComponent = useRegisteredComponent<PayPageDescriptionProps>(DESCRIPTION_HANDLE, PayPageDescription)\n const CustomerFormComponent = useRegisteredComponent<PayPageCustomerFormProps>(CUSTOMER_FORM_HANDLE, PayPageCustomerForm)\n const PricingComponent = useRegisteredComponent<PayPagePricingProps>(PRICING_HANDLE, PayPagePricing)\n const SummaryComponent = useRegisteredComponent<PayPageSummaryProps>(SUMMARY_HANDLE, PayPageSummary)\n const LegalConsentComponent = useRegisteredComponent<PayPageLegalConsentProps>(LEGAL_CONSENT_HANDLE, PayPageLegalConsent)\n const PaymentSectionComponent = useRegisteredComponent<PayPagePaymentSectionProps>(PAYMENT_HANDLE, PayPagePaymentSection)\n const PaymentFormComponent = useRegisteredComponent<PayPagePaymentFormProps>(GATEWAY_FORM_HANDLE, PayPagePaymentForm)\n const HelpComponent = useRegisteredComponent<PayPageHelpProps>(HELP_HANDLE, PayPageHelp)\n const FooterComponent = useRegisteredComponent<PayPageFooterProps>(FOOTER_HANDLE, PayPageFooter)\n\n const submitPayment = React.useCallback(async () => {\n if (isPreview || !payload) return\n const nextErrors = await transformValidationErrors(validateBeforeSubmit())\n if (Object.keys(nextErrors).length > 0) {\n setFieldErrors(nextErrors)\n setSubmissionError(t('checkout.payPage.validation.fixErrors', 'Check the highlighted fields and try again.'))\n return\n }\n\n setIsSubmitting(true)\n setSubmissionError(null)\n setFieldErrors({})\n\n try {\n let nextSubmitData = submitDataRef.current\n if (injectionContextRef.current) {\n try {\n const transformed = await triggerPayPageFormEvent(\n 'transformFormData',\n nextSubmitData,\n injectionContextRef.current,\n )\n if (transformed.data) {\n nextSubmitData = transformed.data\n if (transformed.applyToForm) {\n applySubmitDataToState(nextSubmitData)\n }\n }\n } catch (error) {\n console.error('[PayPage] Error in transformFormData:', error)\n }\n }\n\n let injectionRequestHeaders: Record<string, string> | undefined\n if (injectionContextRef.current) {\n const guard = await triggerPayPageFormEvent('onBeforeSave', nextSubmitData, injectionContextRef.current)\n if (!guard.ok) {\n const transformedErrors = await transformValidationErrors(guard.fieldErrors ?? {})\n if (Object.keys(transformedErrors).length > 0) {\n setFieldErrors(transformedErrors)\n }\n setSubmissionError(\n guard.message\n || t('checkout.payPage.validation.fixErrors', 'Check the highlighted fields and try again.'),\n )\n setIsSubmitting(false)\n return\n }\n injectionRequestHeaders = guard.requestHeaders\n await triggerPayPageFormEvent('onSave', nextSubmitData, injectionContextRef.current)\n }\n\n const runSubmit = async () => readApiResultOrThrow<SubmitResponse>(\n `/api/checkout/pay/${encodeURIComponent(slug)}/submit`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Idempotency-Key': crypto.randomUUID(),\n 'x-om-unauthorized-redirect': '0',\n },\n body: JSON.stringify(nextSubmitData),\n },\n )\n\n const result = injectionRequestHeaders && Object.keys(injectionRequestHeaders).length > 0\n ? await withScopedApiRequestHeaders(injectionRequestHeaders, runSubmit)\n : await runSubmit()\n\n setActiveTransactionId(result.transactionId)\n\n if (result.paymentSession?.type === 'embedded') {\n const nextRenderer = result.paymentSession.providerKey\n ? getPaymentGatewayRenderer(result.paymentSession.providerKey, result.paymentSession.rendererKey)\n : null\n\n if (nextRenderer) {\n setPaymentSession(result.paymentSession)\n if (injectionContextRef.current) {\n await triggerPayPageFormEvent('onAfterSave', nextSubmitData, injectionContextRef.current)\n }\n return\n }\n\n if (result.redirectUrl) {\n if (injectionContextRef.current) {\n await triggerPayPageFormEvent('onAfterSave', nextSubmitData, injectionContextRef.current)\n }\n window.location.href = result.redirectUrl\n return\n }\n\n setSubmissionError(t(\n 'checkout.payPage.errors.embeddedUnavailable',\n 'The payment form is unavailable right now. Please try again or use the hosted payment page.',\n ))\n return\n }\n\n if (result.redirectUrl) {\n if (injectionContextRef.current) {\n await triggerPayPageFormEvent('onAfterSave', nextSubmitData, injectionContextRef.current)\n }\n window.location.href = result.redirectUrl\n return\n }\n\n if (injectionContextRef.current) {\n await triggerPayPageFormEvent('onAfterSave', nextSubmitData, injectionContextRef.current)\n }\n router.push(`/pay/${encodeURIComponent(slug)}/success/${encodeURIComponent(result.transactionId)}`)\n } catch (error) {\n const normalized = mapCrudServerErrorToFormErrors(error)\n const nextFieldErrors = await transformValidationErrors(Object.fromEntries(\n Object.entries(normalized.fieldErrors ?? {}).map(([fieldPath, message]) => [\n fieldPath,\n translateValidationMessage(message, fieldPath),\n ]),\n ))\n if (Object.keys(nextFieldErrors).length > 0) {\n setFieldErrors(nextFieldErrors)\n }\n setSubmissionError(\n translateValidationMessage(normalized.message)\n || t('checkout.payPage.errors.submit', 'Unable to start the payment. Please try again.'),\n )\n } finally {\n setIsSubmitting(false)\n }\n }, [\n acceptedLegalConsents,\n applySubmitDataToState,\n customerData,\n effectiveAmount,\n isPreview,\n payload,\n router,\n selectedPriceItemId,\n slug,\n t,\n transformValidationErrors,\n triggerPayPageFormEvent,\n translateValidationMessage,\n validateBeforeSubmit,\n ])\n\n if (!slug || isLoading) {\n return (\n <div\n className=\"mx-auto flex min-h-[50vh] max-w-4xl items-center justify-center gap-3 px-4 py-16 text-sm\"\n style={{ color: themeTokens.mutedText }}\n >\n <Spinner size=\"sm\" />\n <span>{t('checkout.payPage.loading', 'Loading payment link...')}</span>\n </div>\n )\n }\n\n if (loadError || !payload) {\n return (\n <div className=\"mx-auto max-w-3xl px-4 py-16\">\n <Alert variant=\"destructive\">\n <AlertTitle>{t('checkout.payPage.errors.loadTitle', 'Unable to load payment link')}</AlertTitle>\n <AlertDescription>{loadError ?? t('checkout.payPage.errors.loadMessage', \"We couldn't load this payment page. Please try again.\")}</AlertDescription>\n <div className=\"mt-2\">\n <Button type=\"button\" variant=\"outline\" onClick={() => { void loadPayload() }}>\n {t('checkout.payPage.actions.retry', 'Retry')}\n </Button>\n </div>\n </Alert>\n </div>\n )\n }\n\n if (payload.requiresPassword) {\n return (\n <div\n className=\"min-h-screen px-4 py-8 sm:px-6\"\n style={{ background: themeTokens.pageBackground, color: themeTokens.text }}\n >\n <div className=\"mx-auto max-w-lg\">\n <Card\n className=\"rounded-xl border backdrop-blur\"\n style={buildPanelStyle(themeTokens, 'default')}\n >\n <CardContent className=\"space-y-5 p-6 sm:p-8\">\n <div className=\"space-y-2\">\n <div className=\"text-overline font-semibold uppercase tracking-widest\" style={{ color: themeTokens.mutedText }}>\n {t('checkout.payPage.badges.secure', 'Secure checkout')}\n </div>\n <h1 className=\"text-2xl font-semibold\">{payload.title ?? t('checkout.payPage.protectedTitle', 'Protected payment link')}</h1>\n </div>\n <PasswordInput\n className={READABLE_INPUT_CLASSNAME}\n value={password}\n onChange={(event) => setPassword(event.target.value)}\n placeholder={t('checkout.payPage.passwordPlaceholder', 'Password')}\n style={buildReadableInputStyle(themeTokens, Boolean(passwordError))}\n />\n {passwordError ? (\n <p className=\"text-sm\" style={buildValidationMessageStyle(themeTokens)}>\n {passwordError}\n </p>\n ) : null}\n <Button\n type=\"button\"\n disabled={isVerifyingPassword}\n style={buildButtonStyle(themeTokens)}\n onClick={async () => {\n setIsVerifyingPassword(true)\n setPasswordError(null)\n try {\n await apiCallOrThrow(`/api/checkout/pay/${encodeURIComponent(slug)}/verify-password`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-om-unauthorized-redirect': '0',\n },\n body: JSON.stringify({ password }),\n })\n await loadPayload()\n } catch (error) {\n setPasswordError(readTranslatedErrorMessage(\n error,\n t,\n t('checkout.payPage.errors.password', 'Unable to verify password. Please try again.'),\n ))\n } finally {\n setIsVerifyingPassword(false)\n }\n }}\n >\n <span className=\"flex items-center gap-2\">\n {isVerifyingPassword ? <Spinner size=\"sm\" /> : null}\n {isVerifyingPassword\n ? t('checkout.payPage.actions.verifying', 'Verifying...')\n : t('checkout.payPage.actions.continue', 'Continue')}\n </span>\n </Button>\n </CardContent>\n </Card>\n </div>\n </div>\n )\n }\n\n if (payload.available === false && !isPreview) {\n return (\n <div className=\"mx-auto max-w-3xl px-4 py-16 text-center text-sm\" style={{ color: themeTokens.mutedText }}>\n {t('checkout.payPage.unavailable', 'This payment link is no longer available.')}\n </div>\n )\n }\n\n if (!injectionContext) return null\n\n const leftColumn = (\n <div className=\"space-y-6\">\n <InjectionSpot spotId=\"checkout.pay-page:header:before\" context={injectionContext} />\n <div data-component-handle={HEADER_HANDLE}>\n <HeaderComponent payload={payload} preview={isPreview} themeTokens={themeTokens} />\n </div>\n <InjectionSpot spotId=\"checkout.pay-page:header:after\" context={injectionContext} />\n\n {(payload.description || publicCustomFields.length > 0) ? (\n <>\n <div data-component-handle={DESCRIPTION_HANDLE}>\n <DescriptionComponent\n payload={payload}\n publicCustomFields={publicCustomFields}\n themeTokens={themeTokens}\n />\n </div>\n <InjectionSpot spotId=\"checkout.pay-page:description:after\" context={injectionContext} />\n </>\n ) : null}\n\n <InjectionSpot spotId=\"checkout.pay-page:customer-fields:before\" context={injectionContext} />\n {shouldCollectCustomerDetails ? (\n <div data-component-handle={CUSTOMER_FORM_HANDLE}>\n <CustomerFormComponent\n payload={payload}\n customerData={customerData}\n fieldErrors={fieldErrors}\n inputsLocked={inputsLocked}\n onFieldChange={updateCustomerField}\n translateValidationMessage={translateValidationMessage}\n themeTokens={themeTokens}\n />\n </div>\n ) : null}\n <InjectionSpot spotId=\"checkout.pay-page:customer-fields:after\" context={injectionContext} />\n </div>\n )\n\n const paymentFlow = (\n <>\n <InjectionSpot spotId=\"checkout.pay-page:pricing:before\" context={injectionContext} />\n <div data-component-handle={PRICING_HANDLE}>\n <PricingComponent\n payload={payload}\n amount={amount}\n selectedPriceItemId={selectedPriceItemId}\n fieldErrors={fieldErrors}\n inputsLocked={inputsLocked}\n formatAmount={formatAmount}\n onAmountChange={(value) => {\n const nextAmount = parseNumericInput(value)\n const nextData = setSubmitDataFieldValue(submitDataRef.current, 'amount', nextAmount)\n applySubmitDataToState(nextData)\n clearFieldError('amount')\n setSubmissionError(null)\n dispatchFieldChange('amount', nextAmount, nextData)\n }}\n onPriceItemSelect={(item) => {\n const nextData = {\n ...submitDataRef.current,\n amount: item.amount,\n selectedPriceItemId: item.id,\n }\n applySubmitDataToState(nextData)\n clearFieldError('selectedPriceItemId')\n setSubmissionError(null)\n dispatchFieldChange('selectedPriceItemId', item.id, nextData)\n }}\n translateValidationMessage={translateValidationMessage}\n themeTokens={themeTokens}\n />\n </div>\n <InjectionSpot spotId=\"checkout.pay-page:pricing:after\" context={injectionContext} />\n\n <InjectionSpot spotId=\"checkout.pay-page:summary:before\" context={injectionContext} />\n <div data-component-handle={SUMMARY_HANDLE}>\n <SummaryComponent\n payload={payload}\n selectedAmount={effectiveAmount}\n currencyCode={effectiveCurrencyCode}\n formatAmount={formatAmount}\n preview={isPreview}\n themeTokens={themeTokens}\n />\n </div>\n <InjectionSpot spotId=\"checkout.pay-page:summary:after\" context={injectionContext} />\n\n <InjectionSpot spotId=\"checkout.pay-page:legal-consent:before\" context={injectionContext} />\n <div data-component-handle={LEGAL_CONSENT_HANDLE}>\n <LegalConsentComponent\n payload={payload}\n acceptedLegalConsents={acceptedLegalConsents}\n fieldErrors={fieldErrors}\n inputsLocked={inputsLocked}\n onConsentChange={updateConsent}\n translateValidationMessage={translateValidationMessage}\n themeTokens={themeTokens}\n />\n </div>\n <InjectionSpot spotId=\"checkout.pay-page:legal-consent:after\" context={injectionContext} />\n\n <InjectionSpot spotId=\"checkout.pay-page:submit:before\" context={injectionContext} />\n <div data-component-handle={GATEWAY_FORM_HANDLE}>\n <PaymentFormComponent\n payload={payload}\n slug={slug}\n preview={isPreview}\n isSubmitting={isSubmitting}\n submissionError={submissionError}\n paymentSession={paymentSession}\n activeTransactionId={activeTransactionId}\n embeddedRenderer={embeddedRenderer}\n onSubmit={submitPayment}\n onReset={() => {\n setPaymentSession(null)\n setActiveTransactionId(null)\n setSubmissionError(null)\n }}\n onComplete={() => {\n if (!activeTransactionId) return\n router.push(`/pay/${encodeURIComponent(slug)}/success/${encodeURIComponent(activeTransactionId)}`)\n }}\n onError={(message) => {\n setSubmissionError(message)\n }}\n injectionContext={injectionContext}\n themeTokens={themeTokens}\n />\n </div>\n <InjectionSpot spotId=\"checkout.pay-page:submit:after\" context={injectionContext} />\n\n <InjectionSpot spotId=\"checkout.pay-page:help:before\" context={injectionContext} />\n <div data-component-handle={HELP_HANDLE}>\n <HelpComponent payload={payload} preview={isPreview} themeTokens={themeTokens} />\n </div>\n <InjectionSpot spotId=\"checkout.pay-page:help:after\" context={injectionContext} />\n </>\n )\n\n const rightColumn = (\n <>\n <InjectionSpot spotId=\"checkout.pay-page:payment:before\" context={injectionContext} />\n <div data-component-handle={PAYMENT_HANDLE}>\n <PaymentSectionComponent payload={payload} preview={isPreview} themeTokens={themeTokens}>\n {paymentFlow}\n </PaymentSectionComponent>\n </div>\n <InjectionSpot spotId=\"checkout.pay-page:payment:after\" context={injectionContext} />\n </>\n )\n\n const footer = (\n <>\n <InjectionSpot spotId=\"checkout.pay-page:footer:before\" context={injectionContext} />\n <div data-component-handle={FOOTER_HANDLE}>\n <FooterComponent payload={payload} themeTokens={themeTokens} />\n </div>\n <InjectionSpot spotId=\"checkout.pay-page:footer:after\" context={injectionContext} />\n </>\n )\n\n return (\n <div data-component-handle={PAGE_HANDLE}>\n <SurfaceComponent\n previewBanner={previewBanner}\n leftColumn={leftColumn}\n rightColumn={rightColumn}\n footer={footer}\n themeTokens={themeTokens}\n />\n </div>\n )\n}\n\nexport default PayPage\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["\"use client\"\n\nimport * as React from 'react'\nimport Link from 'next/link'\nimport { useParams, useRouter, useSearchParams } from 'next/navigation'\nimport { ComponentReplacementHandles } from '@open-mercato/shared/modules/widgets/component-registry'\nimport { useLocale, useT } from '@open-mercato/shared/lib/i18n/context'\nimport { locales, type Locale } from '@open-mercato/shared/lib/i18n/config'\nimport type { CustomFieldDisplayEntry } from '@open-mercato/shared/lib/crud/custom-fields'\nimport { resolveLocaleFromCandidates } from '@open-mercato/shared/lib/i18n/locale'\nimport { getPaymentGatewayRenderer } from '@open-mercato/shared/modules/payment_gateways/client'\nimport type { PaymentGatewayRendererProps } from '@open-mercato/shared/modules/payment_gateways/client'\nimport type { PaymentGatewayClientSession } from '@open-mercato/shared/modules/payment_gateways/types'\nimport { InjectionSpot, useInjectionSpotEvents, useInjectionWidgets } from '@open-mercato/ui/backend/injection/InjectionSpot'\nimport { useRegisteredComponent } from '@open-mercato/ui/backend/injection/useRegisteredComponent'\nimport { MarkdownContent } from '@open-mercato/ui/backend/markdown/MarkdownContent'\nimport { apiCallOrThrow, readApiResultOrThrow, withScopedApiRequestHeaders } from '@open-mercato/ui/backend/utils/apiCall'\nimport { mapCrudServerErrorToFormErrors } from '@open-mercato/ui/backend/utils/serverErrors'\nimport { Alert, AlertDescription, AlertTitle } from '@open-mercato/ui/primitives/alert'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { Card, CardContent } from '@open-mercato/ui/primitives/card'\nimport { Checkbox } from '@open-mercato/ui/primitives/checkbox'\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from '@open-mercato/ui/primitives/dialog'\nimport { Input } from '@open-mercato/ui/primitives/input'\nimport { PasswordInput } from '@open-mercato/ui/primitives/password-input'\nimport { Radio, RadioGroup } from '@open-mercato/ui/primitives/radio'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@open-mercato/ui/primitives/select'\nimport { Spinner } from '@open-mercato/ui/primitives/spinner'\nimport { Textarea } from '@open-mercato/ui/primitives/textarea'\nimport {\n getCheckoutCustomerFieldSemanticType,\n validateCheckoutCustomerData,\n} from '../lib/customerDataValidation'\n\ntype CustomerFieldOption = {\n value: string\n label: string\n}\n\ntype CustomerFieldDefinition = {\n key: string\n label: string\n kind: string\n required: boolean\n placeholder?: string | null\n options?: CustomerFieldOption[]\n}\n\ntype PriceListItem = {\n id: string\n description: string\n amount: number\n currencyCode: string\n}\n\ntype CheckoutThemeMode = 'light' | 'dark' | 'auto'\n\nexport type PayLinkPayload = {\n id: string\n slug?: string | null\n name: string\n title?: string | null\n subtitle?: string | null\n description?: string | null\n logoUrl?: string | null\n logoPreviewUrl?: string | null\n primaryColor?: string | null\n secondaryColor?: string | null\n backgroundColor?: string | null\n themeMode?: CheckoutThemeMode | null\n status?: 'draft' | 'active' | 'inactive'\n pricingMode: 'fixed' | 'custom_amount' | 'price_list'\n fixedPriceAmount?: number | null\n fixedPriceCurrencyCode?: string | null\n fixedPriceOriginalAmount?: number | null\n customAmountMin?: number | null\n customAmountMax?: number | null\n customAmountCurrencyCode?: string | null\n priceListItems?: PriceListItem[]\n collectCustomerDetails?: boolean\n customerFieldsSchema?: CustomerFieldDefinition[]\n publicCustomFields?: CustomFieldDisplayEntry[]\n legalDocuments?: {\n terms?: { title?: string; markdown?: string; required?: boolean }\n privacyPolicy?: { title?: string; markdown?: string; required?: boolean }\n }\n requiresPassword?: boolean\n available?: boolean\n preview?: boolean\n gatewayProviderKey?: string | null\n}\n\ntype SubmitResponse = {\n transactionId: string\n redirectUrl?: string | null\n paymentSession?: (PaymentGatewayClientSession & {\n providerKey: string | null\n gatewayTransactionId: string\n }) | null\n}\n\ntype PayPageProps = {\n mode?: 'link' | 'template'\n sourceId?: string\n initialPayload?: PayLinkPayload | null\n initialLoadError?: string | null\n}\n\ntype FieldErrors = Record<string, string>\n\ntype PayPageSubmitData = {\n customerData: Record<string, unknown>\n acceptedLegalConsents: Record<string, boolean>\n amount: number | null\n selectedPriceItemId: string | null\n}\n\nexport type PayPageThemeTokens = {\n mode: 'light' | 'dark'\n accent: string\n accentSecondary: string\n accentContrast: string\n text: string\n mutedText: string\n pageBackground: string\n shellBackground: string\n surface: string\n surfaceMuted: string\n surfaceStrong: string\n border: string\n borderStrong: string\n shadow: string\n accentShadow: string\n heroBackground: string\n errorText: string\n errorBorder: string\n errorSurface: string\n errorSurfaceStrong: string\n errorRing: string\n}\n\ntype PayPageInjectionContext = {\n link: PayLinkPayload\n themeMode: 'light' | 'dark'\n themeTokens: PayPageThemeTokens\n preview: boolean\n selectedAmount: number | null\n currencyCode: string | null\n pricingMode: PayLinkPayload['pricingMode']\n customerSchema: CustomerFieldDefinition[]\n customerData: Record<string, unknown>\n legalDocuments: NonNullable<PayLinkPayload['legalDocuments']>\n acceptedLegalConsents: Record<string, boolean>\n transaction: { id: string } | null\n paymentView: 'idle' | 'embedded' | 'redirect'\n paymentSession: SubmitResponse['paymentSession']\n paymentProviderKey: string | null\n paymentRendererKey: string | null\n fieldErrors: FieldErrors\n submissionError: string | null\n inputsLocked: boolean\n isSubmitting: boolean\n canSubmit: boolean\n operation: 'create'\n}\n\nexport type PayPageSurfaceProps = {\n previewBanner: React.ReactNode\n leftColumn: React.ReactNode\n rightColumn: React.ReactNode\n footer: React.ReactNode\n themeTokens: PayPageThemeTokens\n}\n\nexport type PayPageHeaderProps = {\n payload: PayLinkPayload\n preview: boolean\n themeTokens: PayPageThemeTokens\n}\n\nexport type PayPageDescriptionProps = {\n payload: PayLinkPayload\n publicCustomFields: CustomFieldDisplayEntry[]\n themeTokens: PayPageThemeTokens\n}\n\nexport type PayPageCustomerFormProps = {\n payload: PayLinkPayload\n customerData: Record<string, unknown>\n fieldErrors: FieldErrors\n inputsLocked: boolean\n onFieldChange: (fieldKey: string, value: unknown) => void\n translateValidationMessage: (message: string | null | undefined, fieldPath?: string) => string\n themeTokens: PayPageThemeTokens\n}\n\nexport type PayPagePricingProps = {\n payload: PayLinkPayload\n amount: number | null\n selectedPriceItemId: string | null\n fieldErrors: FieldErrors\n inputsLocked: boolean\n formatAmount: (value: number | null | undefined, currencyCode?: string | null) => string\n onAmountChange: (value: string) => void\n onPriceItemSelect: (item: PriceListItem) => void\n translateValidationMessage: (message: string | null | undefined, fieldPath?: string) => string\n themeTokens: PayPageThemeTokens\n}\n\nexport type PayPageSummaryProps = {\n payload: PayLinkPayload\n selectedAmount: number | null\n currencyCode: string | null\n formatAmount: (value: number | null | undefined, currencyCode?: string | null) => string\n preview: boolean\n themeTokens: PayPageThemeTokens\n}\n\nexport type PayPageLegalConsentProps = {\n payload: PayLinkPayload\n acceptedLegalConsents: Record<string, boolean>\n fieldErrors: FieldErrors\n inputsLocked: boolean\n onConsentChange: (fieldKey: 'terms' | 'privacyPolicy', value: boolean) => void\n translateValidationMessage: (message: string | null | undefined, fieldPath?: string) => string\n themeTokens: PayPageThemeTokens\n}\n\nexport type PayPagePaymentFormProps = {\n payload: PayLinkPayload\n slug: string\n preview: boolean\n isSubmitting: boolean\n submissionError: string | null\n paymentSession: SubmitResponse['paymentSession']\n activeTransactionId: string | null\n embeddedRenderer: React.ComponentType<PaymentGatewayRendererProps> | null | undefined\n onSubmit: () => Promise<void>\n onReset: () => void\n onComplete: () => void\n onError: (message: string) => void\n injectionContext: PayPageInjectionContext\n themeTokens: PayPageThemeTokens\n}\n\nexport type PayPagePaymentSectionProps = {\n payload: PayLinkPayload\n preview: boolean\n themeTokens: PayPageThemeTokens\n children: React.ReactNode\n}\n\nexport type PayPageHelpProps = {\n payload: PayLinkPayload\n preview: boolean\n themeTokens: PayPageThemeTokens\n}\n\nexport type PayPageFooterProps = {\n payload: PayLinkPayload\n themeTokens: PayPageThemeTokens\n}\n\nconst PAGE_HANDLE = ComponentReplacementHandles.page('checkout.pay-page')\nconst HEADER_HANDLE = ComponentReplacementHandles.section('checkout.pay-page', 'header')\nconst DESCRIPTION_HANDLE = ComponentReplacementHandles.section('checkout.pay-page', 'description')\nconst SUMMARY_HANDLE = ComponentReplacementHandles.section('checkout.pay-page', 'summary')\nconst PRICING_HANDLE = ComponentReplacementHandles.section('checkout.pay-page', 'pricing')\nconst PAYMENT_HANDLE = ComponentReplacementHandles.section('checkout.pay-page', 'payment')\nconst CUSTOMER_FORM_HANDLE = ComponentReplacementHandles.section('checkout.pay-page', 'customer-form')\nconst LEGAL_CONSENT_HANDLE = ComponentReplacementHandles.section('checkout.pay-page', 'legal-consent')\nconst GATEWAY_FORM_HANDLE = ComponentReplacementHandles.section('checkout.pay-page', 'gateway-form')\nconst HELP_HANDLE = ComponentReplacementHandles.section('checkout.pay-page', 'help')\nconst FOOTER_HANDLE = ComponentReplacementHandles.section('checkout.pay-page', 'footer')\n\n// Checkout supports merchant branding defaults; keep those theme fallbacks isolated from general UI state colors.\nconst CHECKOUT_THEME_FALLBACKS = {\n accent: '#1E3A8A',\n accentSecondary: '#F59E0B',\n darkBackground: '#0B1020',\n lightBackground: '#F5EFE6',\n darkText: '#F8FAFC',\n lightText: '#111827',\n darkMutedText: '#CBD5E1',\n lightMutedText: '#6B7280',\n darkSurface: '#111827',\n lightSurface: '#FFFFFF',\n darkShell: '#020617',\n lightShell: '#FFFDF8',\n darkBorder: '#E2E8F0',\n inputBackground: 'rgba(255, 255, 255, 0.96)',\n inputText: '#0F172A',\n} as const\n\nconst PAY_PAGE_EMPTY_SELECT_VALUE = '__om_checkout_empty__'\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.min(Math.max(value, min), max)\n}\n\nfunction readErrorMessage(error: unknown, fallback: string) {\n return error instanceof Error && error.message ? error.message : fallback\n}\n\nfunction readTranslatedErrorMessage(\n error: unknown,\n translate: (key: string, fallback: string) => string,\n fallback: string,\n) {\n return translate(readErrorMessage(error, fallback), fallback)\n}\n\nfunction parseNumericInput(value: string): number | null {\n const trimmed = value.trim()\n if (!trimmed) return null\n const parsed = Number(trimmed)\n return Number.isFinite(parsed) ? parsed : null\n}\n\nfunction setSubmitDataFieldValue(\n data: PayPageSubmitData,\n fieldPath: string,\n value: unknown,\n): PayPageSubmitData {\n if (fieldPath.startsWith('customerData.')) {\n const fieldKey = fieldPath.slice('customerData.'.length)\n return {\n ...data,\n customerData: {\n ...data.customerData,\n [fieldKey]: value,\n },\n }\n }\n if (fieldPath.startsWith('acceptedLegalConsents.')) {\n const fieldKey = fieldPath.slice('acceptedLegalConsents.'.length)\n if (fieldKey === 'terms' || fieldKey === 'privacyPolicy') {\n return {\n ...data,\n acceptedLegalConsents: {\n ...data.acceptedLegalConsents,\n [fieldKey]: value === true,\n },\n }\n }\n return data\n }\n if (fieldPath === 'amount') {\n return {\n ...data,\n amount: typeof value === 'number' && Number.isFinite(value) ? value : null,\n }\n }\n if (fieldPath === 'selectedPriceItemId') {\n return {\n ...data,\n selectedPriceItemId: typeof value === 'string' && value.trim().length > 0 ? value : null,\n }\n }\n return data\n}\n\nfunction applySubmitDataSideEffects(\n data: PayPageSubmitData,\n sideEffects: Record<string, unknown> | undefined,\n): PayPageSubmitData {\n if (!sideEffects) return data\n return Object.entries(sideEffects).reduce(\n (current, [fieldPath, value]) => setSubmitDataFieldValue(current, fieldPath, value),\n data,\n )\n}\n\nfunction normalizeHexColor(value: string | null | undefined, fallback: string) {\n const normalized = typeof value === 'string' ? value.trim().replace(/^#/, '') : ''\n if (/^[0-9a-fA-F]{3}$/.test(normalized)) {\n return `#${normalized.split('').map((part) => `${part}${part}`).join('')}`.toUpperCase()\n }\n if (/^[0-9a-fA-F]{6}$/.test(normalized)) {\n return `#${normalized}`.toUpperCase()\n }\n return fallback.toUpperCase()\n}\n\nfunction hexToRgb(color: string) {\n const normalized = normalizeHexColor(color, '#000000').replace('#', '')\n return {\n r: Number.parseInt(normalized.slice(0, 2), 16),\n g: Number.parseInt(normalized.slice(2, 4), 16),\n b: Number.parseInt(normalized.slice(4, 6), 16),\n }\n}\n\nfunction rgbToHex(rgb: { r: number; g: number; b: number }) {\n const encode = (value: number) => clamp(Math.round(value), 0, 255).toString(16).padStart(2, '0')\n return `#${encode(rgb.r)}${encode(rgb.g)}${encode(rgb.b)}`.toUpperCase()\n}\n\nfunction mixHexColors(start: string, end: string, weight: number) {\n const from = hexToRgb(start)\n const to = hexToRgb(end)\n const amount = clamp(weight, 0, 1)\n return rgbToHex({\n r: from.r + (to.r - from.r) * amount,\n g: from.g + (to.g - from.g) * amount,\n b: from.b + (to.b - from.b) * amount,\n })\n}\n\nfunction withAlpha(color: string, alpha: number) {\n const { r, g, b } = hexToRgb(color)\n return `rgba(${r}, ${g}, ${b}, ${clamp(alpha, 0, 1)})`\n}\n\nfunction getContrastText(color: string) {\n const { r, g, b } = hexToRgb(color)\n const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255\n return luminance > 0.62 ? CHECKOUT_THEME_FALLBACKS.inputText : CHECKOUT_THEME_FALLBACKS.darkText\n}\n\nfunction resolveThemeTokens(payload: PayLinkPayload | null, prefersDark: boolean): PayPageThemeTokens {\n const accent = normalizeHexColor(payload?.primaryColor, CHECKOUT_THEME_FALLBACKS.accent)\n const accentSecondary = normalizeHexColor(payload?.secondaryColor, CHECKOUT_THEME_FALLBACKS.accentSecondary)\n const requestedMode = payload?.themeMode ?? 'auto'\n const mode = requestedMode === 'dark' || (requestedMode === 'auto' && prefersDark) ? 'dark' : 'light'\n const background = normalizeHexColor(\n payload?.backgroundColor,\n mode === 'dark' ? CHECKOUT_THEME_FALLBACKS.darkBackground : CHECKOUT_THEME_FALLBACKS.lightBackground,\n )\n const text = mode === 'dark' ? CHECKOUT_THEME_FALLBACKS.darkText : CHECKOUT_THEME_FALLBACKS.lightText\n const mutedText = mode === 'dark' ? CHECKOUT_THEME_FALLBACKS.darkMutedText : CHECKOUT_THEME_FALLBACKS.lightMutedText\n const surface = mixHexColors(\n background,\n mode === 'dark' ? CHECKOUT_THEME_FALLBACKS.darkSurface : CHECKOUT_THEME_FALLBACKS.lightSurface,\n mode === 'dark' ? 0.62 : 0.76,\n )\n const surfaceMuted = mixHexColors(accentSecondary, background, mode === 'dark' ? 0.18 : 0.88)\n const surfaceStrong = mixHexColors(accent, background, mode === 'dark' ? 0.22 : 0.9)\n const border = withAlpha(mode === 'dark' ? CHECKOUT_THEME_FALLBACKS.darkBorder : accent, mode === 'dark' ? 0.16 : 0.14)\n const borderStrong = withAlpha(accent, mode === 'dark' ? 0.34 : 0.22)\n const shellBackground = mixHexColors(\n background,\n mode === 'dark' ? CHECKOUT_THEME_FALLBACKS.darkShell : CHECKOUT_THEME_FALLBACKS.lightShell,\n mode === 'dark' ? 0.82 : 0.64,\n )\n const heroStart = withAlpha(accent, mode === 'dark' ? 0.26 : 0.16)\n const heroEnd = withAlpha(accentSecondary, mode === 'dark' ? 0.22 : 0.2)\n const errorBase = mode === 'dark' ? '#F87171' : '#DC2626'\n\n return {\n mode,\n accent,\n accentSecondary,\n accentContrast: getContrastText(accent),\n text,\n mutedText,\n pageBackground: `\n radial-gradient(circle at top left, ${withAlpha(accent, mode === 'dark' ? 0.2 : 0.12)} 0%, transparent 38%),\n radial-gradient(circle at bottom right, ${withAlpha(accentSecondary, mode === 'dark' ? 0.24 : 0.15)} 0%, transparent 34%),\n linear-gradient(140deg, ${background} 0%, ${shellBackground} 100%)\n `,\n shellBackground,\n surface,\n surfaceMuted,\n surfaceStrong,\n border,\n borderStrong,\n shadow: mode === 'dark'\n ? `0 32px 80px ${withAlpha(CHECKOUT_THEME_FALLBACKS.darkShell, 0.55)}`\n : `0 28px 72px ${withAlpha(accent, 0.12)}`,\n accentShadow: `0 22px 48px ${withAlpha(accent, mode === 'dark' ? 0.3 : 0.22)}`,\n heroBackground: `linear-gradient(145deg, ${heroStart} 0%, ${heroEnd} 100%)`,\n errorText: mode === 'dark' ? '#FCA5A5' : '#B91C1C',\n errorBorder: errorBase,\n errorSurface: withAlpha(errorBase, mode === 'dark' ? 0.14 : 0.08),\n errorSurfaceStrong: withAlpha(errorBase, mode === 'dark' ? 0.2 : 0.12),\n errorRing: withAlpha(errorBase, mode === 'dark' ? 0.28 : 0.18),\n }\n}\n\nfunction buildReadableInputStyle(themeTokens: PayPageThemeTokens, hasError: boolean, disabled = false): React.CSSProperties {\n if (disabled) {\n return {\n background: 'var(--bg-disabled)',\n color: 'var(--text-disabled)',\n borderColor: 'var(--border-disabled)',\n }\n }\n\n return {\n background: CHECKOUT_THEME_FALLBACKS.inputBackground,\n color: CHECKOUT_THEME_FALLBACKS.inputText,\n borderColor: hasError ? themeTokens.errorBorder : withAlpha(CHECKOUT_THEME_FALLBACKS.inputText, 0.12),\n boxShadow: hasError ? `0 0 0 3px ${themeTokens.errorRing}` : undefined,\n }\n}\n\nfunction buildValidationMessageStyle(themeTokens: PayPageThemeTokens): React.CSSProperties {\n return {\n color: themeTokens.errorText,\n fontWeight: 500,\n }\n}\n\nfunction formatPublicFieldValue(value: unknown, booleanLabels?: { trueLabel: string; falseLabel: string }): string {\n if (Array.isArray(value)) return value.map((entry) => String(entry)).join(', ')\n if (typeof value === 'boolean') {\n if (booleanLabels) return value ? booleanLabels.trueLabel : booleanLabels.falseLabel\n return value ? 'Yes' : 'No'\n }\n if (value == null) return ''\n return String(value)\n}\n\nfunction usePrefersDarkMode() {\n const [prefersDark, setPrefersDark] = React.useState(false)\n\n React.useEffect(() => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') return\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\n const updatePreference = () => setPrefersDark(mediaQuery.matches)\n updatePreference()\n if (typeof mediaQuery.addEventListener === 'function') {\n mediaQuery.addEventListener('change', updatePreference)\n return () => mediaQuery.removeEventListener('change', updatePreference)\n }\n mediaQuery.addListener(updatePreference)\n return () => mediaQuery.removeListener(updatePreference)\n }, [])\n\n return prefersDark\n}\n\nfunction hasStoredLocalePreference() {\n if (typeof document === 'undefined') return false\n\n return document.cookie\n .split(';')\n .some((part) => part.trim().startsWith('locale='))\n}\n\nasync function persistLocalePreference(locale: Locale) {\n const response = await fetch('/api/auth/locale', {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ locale }),\n })\n\n return response.ok\n}\n\nfunction buildPanelStyle(themeTokens: PayPageThemeTokens, variant: 'default' | 'muted' | 'hero' | 'accent' = 'default'): React.CSSProperties {\n if (variant === 'hero') {\n return {\n background: themeTokens.heroBackground,\n borderColor: themeTokens.borderStrong,\n boxShadow: themeTokens.shadow,\n color: themeTokens.text,\n }\n }\n if (variant === 'accent') {\n return {\n background: `linear-gradient(145deg, ${themeTokens.accent} 0%, ${mixHexColors(themeTokens.accent, themeTokens.accentSecondary, 0.4)} 100%)`,\n borderColor: withAlpha(themeTokens.accentContrast, 0.12),\n boxShadow: themeTokens.accentShadow,\n color: themeTokens.accentContrast,\n }\n }\n return {\n background: variant === 'muted' ? themeTokens.surfaceMuted : themeTokens.surface,\n borderColor: variant === 'muted' ? themeTokens.borderStrong : themeTokens.border,\n boxShadow: themeTokens.shadow,\n color: themeTokens.text,\n }\n}\n\nfunction buildButtonStyle(themeTokens: PayPageThemeTokens, variant: 'solid' | 'outline' = 'solid'): React.CSSProperties {\n if (variant === 'outline') {\n return {\n borderColor: themeTokens.borderStrong,\n color: themeTokens.text,\n background: withAlpha(themeTokens.surface, 0.72),\n }\n }\n return {\n background: themeTokens.accent,\n color: themeTokens.accentContrast,\n boxShadow: themeTokens.accentShadow,\n }\n}\n\nconst READABLE_INPUT_CLASSNAME = 'border bg-white/95 text-slate-900 placeholder:text-slate-400 disabled:cursor-not-allowed disabled:bg-bg-disabled disabled:border-border-disabled disabled:text-text-disabled'\n\nexport function PayPageSurface({\n previewBanner,\n leftColumn,\n rightColumn,\n footer,\n themeTokens,\n}: PayPageSurfaceProps) {\n return (\n <div\n className=\"relative min-h-screen overflow-hidden px-4 py-6 sm:px-6 lg:px-8 lg:py-10\"\n style={{ background: themeTokens.pageBackground, color: themeTokens.text }}\n >\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute left-[-10%] top-[-5%] h-80 w-80 rounded-full blur-3xl\"\n style={{ background: withAlpha(themeTokens.accent, 0.16) }}\n />\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute bottom-[-8%] right-[-4%] h-96 w-96 rounded-full blur-3xl\"\n style={{ background: withAlpha(themeTokens.accentSecondary, 0.16) }}\n />\n\n <div className=\"relative mx-auto max-w-7xl space-y-6\">\n {previewBanner}\n <div className=\"grid gap-6 lg:grid-cols-[minmax(0,1.12fr)_minmax(360px,430px)] lg:items-start\">\n <div className=\"space-y-6\">{leftColumn}</div>\n <div className=\"space-y-6 lg:sticky lg:top-6\">{rightColumn}</div>\n </div>\n {footer}\n </div>\n </div>\n )\n}\n\nexport function PayPageHeader({ payload, preview, themeTokens }: PayPageHeaderProps) {\n const t = useT()\n const resolvedLogoUrl = payload.logoPreviewUrl ?? payload.logoUrl ?? null\n\n return (\n <section\n className=\"relative overflow-hidden rounded-xl border p-6 sm:p-8\"\n style={buildPanelStyle(themeTokens, 'hero')}\n >\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute right-[-4rem] top-[-3rem] h-40 w-40 rounded-full blur-3xl\"\n style={{ background: withAlpha(themeTokens.accentSecondary, 0.22) }}\n />\n <div className=\"relative flex flex-col gap-6\">\n <div className=\"space-y-4\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <span\n className=\"inline-flex rounded-full px-3 py-1 text-overline font-semibold uppercase tracking-widest\"\n style={{\n background: withAlpha(themeTokens.accent, 0.14),\n color: themeTokens.text,\n }}\n >\n {t('checkout.payPage.badges.secure', 'Secure checkout')}\n </span>\n {preview ? (\n <span\n className=\"inline-flex rounded-full px-3 py-1 text-overline font-semibold uppercase tracking-widest\"\n style={{\n background: withAlpha(themeTokens.accentSecondary, 0.16),\n color: themeTokens.text,\n }}\n >\n {t('checkout.payPage.badges.preview', 'Preview')}\n </span>\n ) : null}\n </div>\n\n {resolvedLogoUrl ? (\n <img\n src={resolvedLogoUrl}\n alt={payload.title ?? payload.name}\n className=\"h-14 w-auto max-w-[180px] object-contain\"\n />\n ) : null}\n\n <div className=\"space-y-3\">\n <h1 className=\"max-w-3xl text-3xl font-semibold tracking-tight sm:text-5xl\">\n {payload.title ?? payload.name}\n </h1>\n {payload.subtitle ? (\n <p className=\"max-w-2xl text-base leading-7\" style={{ color: themeTokens.mutedText }}>\n {payload.subtitle}\n </p>\n ) : null}\n </div>\n </div>\n </div>\n </section>\n )\n}\n\nexport function PayPageDescription({ payload, publicCustomFields, themeTokens }: PayPageDescriptionProps) {\n const t = useT()\n const hasDescription = Boolean(payload.description)\n const visibleFields = publicCustomFields.filter((field) => {\n const formattedValue = formatPublicFieldValue(field.value, {\n trueLabel: t('checkout.payPage.fields.booleanTrue', 'Yes'),\n falseLabel: t('checkout.payPage.fields.booleanFalse', 'No'),\n })\n return formattedValue.trim().length > 0\n })\n\n if (!hasDescription && visibleFields.length === 0) return null\n\n return (\n <section\n className=\"space-y-5 rounded-xl border p-6 sm:p-7\"\n style={buildPanelStyle(themeTokens, 'default')}\n >\n {hasDescription ? (\n <div className=\"space-y-3\">\n <div className=\"text-overline font-semibold uppercase tracking-widest\" style={{ color: themeTokens.mutedText }}>\n {t('checkout.payPage.description.kicker', 'Offer overview')}\n </div>\n <div className=\"prose prose-sm max-w-none\">\n <MarkdownContent body={payload.description ?? ''} format=\"markdown\" />\n </div>\n </div>\n ) : null}\n\n {visibleFields.length > 0 ? (\n <div className=\"space-y-4\">\n <div className=\"space-y-1\">\n <h2 className=\"text-lg font-semibold\">{t('checkout.payPage.sections.productDetails', 'Product details')}</h2>\n <p className=\"text-sm\" style={{ color: themeTokens.mutedText }}>\n {t('checkout.payPage.help.productDetails', 'Additional offer details configured for this payment link.')}\n </p>\n </div>\n <div className=\"grid gap-4 sm:grid-cols-2\">\n {visibleFields.map((field) => {\n const formattedValue = formatPublicFieldValue(field.value, {\n trueLabel: t('checkout.payPage.fields.booleanTrue', 'Yes'),\n falseLabel: t('checkout.payPage.fields.booleanFalse', 'No'),\n })\n const isMultiline = field.kind === 'multiline' || formattedValue.includes('\\n')\n\n return (\n <div\n key={field.key}\n className={isMultiline ? 'rounded-xl border p-4 sm:col-span-2' : 'rounded-xl border p-4'}\n style={{\n background: withAlpha(themeTokens.shellBackground, 0.72),\n borderColor: themeTokens.border,\n }}\n >\n <div className=\"text-sm font-medium\">{field.label ?? field.key}</div>\n <div\n className={isMultiline ? 'mt-2 whitespace-pre-wrap text-sm' : 'mt-2 text-sm'}\n style={{ color: themeTokens.mutedText }}\n >\n {formattedValue}\n </div>\n </div>\n )\n })}\n </div>\n </div>\n ) : null}\n </section>\n )\n}\n\nexport function PayPageCustomerForm({\n payload,\n customerData,\n fieldErrors,\n inputsLocked,\n onFieldChange,\n translateValidationMessage,\n themeTokens,\n}: PayPageCustomerFormProps) {\n const t = useT()\n\n if ((payload.customerFieldsSchema?.length ?? 0) === 0 || payload.collectCustomerDetails === false) {\n return null\n }\n\n return (\n <section\n className=\"space-y-5 rounded-xl border p-6 sm:p-7\"\n style={buildPanelStyle(themeTokens, 'default')}\n >\n <div className=\"space-y-1\">\n <h2 className=\"text-xl font-semibold\">{t('checkout.payPage.sections.customerDetails', 'Customer details')}</h2>\n <p className=\"text-sm\" style={{ color: themeTokens.mutedText }}>\n {t('checkout.payPage.help.customerDetails', 'Add the buyer details once, then continue to payment.')}\n </p>\n </div>\n\n <div className=\"grid gap-4 sm:grid-cols-2\">\n {(payload.customerFieldsSchema ?? []).map((field) => {\n const fieldPath = `customerData.${field.key}`\n const fieldError = fieldErrors[fieldPath]\n const value = customerData[field.key]\n const containerClass = field.kind === 'multiline' ? 'space-y-2 sm:col-span-2' : 'space-y-2'\n const semanticType = getCheckoutCustomerFieldSemanticType(field)\n\n return (\n <div key={field.key} className={containerClass}>\n {field.kind === 'boolean' ? (\n <label\n className=\"flex items-start gap-3 rounded-xl border px-4 py-3 text-sm\"\n style={{\n background: fieldError\n ? themeTokens.errorSurface\n : withAlpha(themeTokens.shellBackground, 0.72),\n borderColor: fieldError ? themeTokens.errorBorder : themeTokens.border,\n boxShadow: fieldError ? `0 0 0 2px ${themeTokens.errorRing}` : undefined,\n }}\n >\n <Checkbox\n checked={value === true}\n disabled={inputsLocked}\n onCheckedChange={(checked) => onFieldChange(field.key, checked === true)}\n />\n <span className=\"space-y-1\">\n <span className=\"font-medium\">\n {field.label}\n {field.required ? ' *' : ''}\n </span>\n {field.placeholder ? (\n <span className=\"block\" style={{ color: themeTokens.mutedText }}>\n {field.placeholder}\n </span>\n ) : null}\n </span>\n </label>\n ) : (\n <>\n <label className=\"text-sm font-medium\">\n {field.label}\n {field.required ? ' *' : ''}\n </label>\n {field.kind === 'multiline' ? (\n <Textarea\n className={READABLE_INPUT_CLASSNAME}\n value={typeof value === 'string' ? value : ''}\n disabled={inputsLocked}\n onChange={(event) => onFieldChange(field.key, event.target.value)}\n placeholder={field.placeholder ?? undefined}\n style={buildReadableInputStyle(themeTokens, Boolean(fieldError), inputsLocked)}\n />\n ) : field.kind === 'select' || field.kind === 'radio' ? (\n <Select\n value={typeof value === 'string' && value.length > 0 ? value : PAY_PAGE_EMPTY_SELECT_VALUE}\n disabled={inputsLocked}\n onValueChange={(nextValue) => {\n onFieldChange(field.key, nextValue === PAY_PAGE_EMPTY_SELECT_VALUE ? '' : nextValue)\n }}\n >\n <SelectTrigger\n className={`rounded-xl ${READABLE_INPUT_CLASSNAME}`}\n aria-invalid={Boolean(fieldError)}\n style={buildReadableInputStyle(themeTokens, Boolean(fieldError), inputsLocked)}\n >\n <SelectValue placeholder={t('checkout.payPage.fields.selectPlaceholder', 'Select...')} />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value={PAY_PAGE_EMPTY_SELECT_VALUE}>\n {t('checkout.payPage.fields.selectPlaceholder', 'Select...')}\n </SelectItem>\n {(field.options ?? []).map((option) => (\n <SelectItem key={option.value} value={option.value}>{option.label}</SelectItem>\n ))}\n </SelectContent>\n </Select>\n ) : (\n <Input\n className={READABLE_INPUT_CLASSNAME}\n type={semanticType === 'email' ? 'email' : semanticType === 'phone' ? 'tel' : 'text'}\n value={typeof value === 'string' ? value : ''}\n disabled={inputsLocked}\n onChange={(event) => onFieldChange(field.key, event.target.value)}\n placeholder={field.placeholder ?? undefined}\n autoComplete={semanticType === 'email' ? 'email' : semanticType === 'phone' ? 'tel' : undefined}\n style={buildReadableInputStyle(themeTokens, Boolean(fieldError), inputsLocked)}\n />\n )}\n </>\n )}\n {fieldError ? (\n <p className=\"text-sm\" style={buildValidationMessageStyle(themeTokens)}>\n {translateValidationMessage(fieldError, fieldPath)}\n </p>\n ) : null}\n </div>\n )\n })}\n </div>\n </section>\n )\n}\n\nexport function PayPagePricing({\n payload,\n amount,\n selectedPriceItemId,\n fieldErrors,\n inputsLocked,\n formatAmount,\n onAmountChange,\n onPriceItemSelect,\n translateValidationMessage,\n themeTokens,\n}: PayPagePricingProps) {\n const t = useT()\n\n return (\n <section className=\"space-y-4\">\n <div className=\"space-y-1\">\n <div className=\"text-overline font-semibold uppercase tracking-widest\" style={{ color: themeTokens.mutedText }}>\n {t('checkout.payPage.pricing.kicker', 'Payment setup')}\n </div>\n <h2 className=\"text-lg font-semibold\">{t('checkout.payPage.pricing.title', 'Choose how you want to pay')}</h2>\n </div>\n\n {payload.pricingMode === 'fixed' ? (\n <div className=\"rounded-xl border p-5\" style={buildPanelStyle(themeTokens, 'default')}>\n {typeof payload.fixedPriceOriginalAmount === 'number' ? (\n <div className=\"text-sm line-through\" style={{ color: themeTokens.mutedText }}>\n {formatAmount(payload.fixedPriceOriginalAmount, payload.fixedPriceCurrencyCode)}\n </div>\n ) : null}\n <div className=\"mt-1 text-4xl font-semibold\">\n {formatAmount(payload.fixedPriceAmount, payload.fixedPriceCurrencyCode)}\n </div>\n </div>\n ) : null}\n\n {payload.pricingMode === 'custom_amount' ? (\n <div className=\"space-y-2 rounded-xl border p-5\" style={buildPanelStyle(themeTokens, 'default')}>\n <label className=\"text-sm font-medium\">{t('checkout.payPage.fields.customAmount', 'Amount')}</label>\n <Input\n className={READABLE_INPUT_CLASSNAME}\n type=\"number\"\n value={amount ?? ''}\n disabled={inputsLocked}\n onChange={(event) => onAmountChange(event.target.value)}\n placeholder={[\n payload.customAmountMin != null ? formatAmount(payload.customAmountMin, payload.customAmountCurrencyCode) : null,\n payload.customAmountMax != null ? formatAmount(payload.customAmountMax, payload.customAmountCurrencyCode) : null,\n ].filter(Boolean).join(' - ')}\n style={buildReadableInputStyle(themeTokens, Boolean(fieldErrors.amount), inputsLocked)}\n />\n {fieldErrors.amount ? (\n <p className=\"text-sm\" style={buildValidationMessageStyle(themeTokens)}>\n {translateValidationMessage(fieldErrors.amount, 'amount')}\n </p>\n ) : null}\n </div>\n ) : null}\n\n {payload.pricingMode === 'price_list' ? (\n <>\n <RadioGroup\n className=\"space-y-3\"\n value={selectedPriceItemId ?? ''}\n disabled={inputsLocked}\n onValueChange={(itemId) => {\n const item = (payload.priceListItems ?? []).find((candidate) => candidate.id === itemId)\n if (item) onPriceItemSelect(item)\n }}\n >\n {(payload.priceListItems ?? []).map((item) => (\n <label\n key={item.id}\n className=\"flex cursor-pointer items-center justify-between gap-3 rounded-xl border px-4 py-4 text-sm transition\"\n style={{\n background: selectedPriceItemId === item.id\n ? withAlpha(themeTokens.accent, 0.08)\n : withAlpha(themeTokens.shellBackground, 0.66),\n borderColor: selectedPriceItemId === item.id\n ? themeTokens.borderStrong\n : themeTokens.border,\n }}\n >\n <span className=\"flex items-center gap-3\">\n <Radio\n value={item.id}\n disabled={inputsLocked}\n />\n <span className=\"font-medium\">{item.description}</span>\n </span>\n <span className=\"whitespace-nowrap font-semibold\">{formatAmount(item.amount, item.currencyCode)}</span>\n </label>\n ))}\n </RadioGroup>\n {fieldErrors.selectedPriceItemId ? (\n <p className=\"text-sm\" style={buildValidationMessageStyle(themeTokens)}>\n {translateValidationMessage(fieldErrors.selectedPriceItemId, 'selectedPriceItemId')}\n </p>\n ) : null}\n </>\n ) : null}\n </section>\n )\n}\n\nexport function PayPageSummary({\n payload,\n selectedAmount,\n currencyCode,\n formatAmount,\n preview,\n themeTokens,\n}: PayPageSummaryProps) {\n const t = useT()\n const amountLabel = selectedAmount != null && currencyCode\n ? formatAmount(selectedAmount, currencyCode)\n : t('checkout.payPage.summary.awaitingSelection', 'Select an amount')\n\n return (\n <section className=\"rounded-xl border p-5\" style={buildPanelStyle(themeTokens, 'accent')}>\n <div className=\"flex items-start justify-between gap-3\">\n <div>\n <div className=\"text-overline font-semibold uppercase tracking-widest text-current/70\">\n {t('checkout.payPage.summary.amountDue', 'Amount due')}\n </div>\n <div className=\"mt-2 text-4xl font-semibold\">{amountLabel}</div>\n </div>\n <div\n className=\"rounded-full px-3 py-1 text-overline font-semibold uppercase tracking-widest\"\n style={{ background: withAlpha(themeTokens.accentContrast, 0.12) }}\n >\n {preview\n ? t('checkout.payPage.summary.previewState', 'Preview')\n : t('checkout.payPage.summary.liveState', 'Live')}\n </div>\n </div>\n </section>\n )\n}\n\nexport function PayPageLegalConsent({\n payload,\n acceptedLegalConsents,\n fieldErrors,\n inputsLocked,\n onConsentChange,\n translateValidationMessage,\n themeTokens,\n}: PayPageLegalConsentProps) {\n const t = useT()\n const [activeDocument, setActiveDocument] = React.useState<'terms' | 'privacyPolicy' | null>(null)\n const hasTerms = Boolean(payload.legalDocuments?.terms?.markdown)\n const hasPrivacyPolicy = Boolean(payload.legalDocuments?.privacyPolicy?.markdown)\n const activeDocumentPayload = activeDocument ? payload.legalDocuments?.[activeDocument] : null\n\n if (!hasTerms && !hasPrivacyPolicy) return null\n\n return (\n <>\n <section className=\"space-y-4 rounded-xl border p-5\" style={buildPanelStyle(themeTokens, 'default')}>\n <div className=\"space-y-1\">\n <h3 className=\"text-base font-semibold\">{t('checkout.payPage.sections.legal', 'Legal confirmations')}</h3>\n <p className=\"text-sm\" style={{ color: themeTokens.mutedText }}>\n {t('checkout.payPage.help.legal', 'Required confirmations must be accepted before the payment step starts.')}\n </p>\n </div>\n\n {hasTerms ? (\n <div className=\"space-y-2\">\n <div\n className=\"rounded-xl border px-4 py-3\"\n style={{\n background: withAlpha(themeTokens.shellBackground, 0.72),\n borderColor: fieldErrors['acceptedLegalConsents.terms'] ? themeTokens.errorBorder : themeTokens.border,\n }}\n >\n <label className=\"flex items-start gap-3 text-sm\">\n <Checkbox\n checked={acceptedLegalConsents.terms === true}\n disabled={inputsLocked}\n onCheckedChange={(checked) => onConsentChange('terms', checked === true)}\n />\n <span className=\"space-y-2\">\n <span className=\"block\">\n {t(\n 'checkout.payPage.legal.acceptDocument',\n 'I accept {document}.',\n {\n document: payload.legalDocuments?.terms?.title || t('checkout.payPage.legal.defaultTermsTitle', 'the terms and conditions'),\n },\n )}\n </span>\n <Button\n type=\"button\"\n variant=\"link\"\n className=\"h-auto p-0 text-sm font-medium underline\"\n style={{ color: themeTokens.text }}\n onClick={() => setActiveDocument('terms')}\n >\n {t('checkout.payPage.legal.readDocument', 'Read document')}\n </Button>\n </span>\n </label>\n </div>\n {fieldErrors['acceptedLegalConsents.terms'] ? (\n <p className=\"text-sm\" style={buildValidationMessageStyle(themeTokens)}>\n {translateValidationMessage(fieldErrors['acceptedLegalConsents.terms'], 'acceptedLegalConsents.terms')}\n </p>\n ) : null}\n </div>\n ) : null}\n\n {hasPrivacyPolicy ? (\n <div className=\"space-y-2\">\n <div\n className=\"rounded-xl border px-4 py-3\"\n style={{\n background: withAlpha(themeTokens.shellBackground, 0.72),\n borderColor: fieldErrors['acceptedLegalConsents.privacyPolicy'] ? themeTokens.errorBorder : themeTokens.border,\n }}\n >\n <label className=\"flex items-start gap-3 text-sm\">\n <Checkbox\n checked={acceptedLegalConsents.privacyPolicy === true}\n disabled={inputsLocked}\n onCheckedChange={(checked) => onConsentChange('privacyPolicy', checked === true)}\n />\n <span className=\"space-y-2\">\n <span className=\"block\">\n {t(\n 'checkout.payPage.legal.acceptDocument',\n 'I accept {document}.',\n {\n document: payload.legalDocuments?.privacyPolicy?.title || t('checkout.payPage.legal.defaultPrivacyTitle', 'the privacy policy'),\n },\n )}\n </span>\n <Button\n type=\"button\"\n variant=\"link\"\n className=\"h-auto p-0 text-sm font-medium underline\"\n style={{ color: themeTokens.text }}\n onClick={() => setActiveDocument('privacyPolicy')}\n >\n {t('checkout.payPage.legal.readDocument', 'Read document')}\n </Button>\n </span>\n </label>\n </div>\n {fieldErrors['acceptedLegalConsents.privacyPolicy'] ? (\n <p className=\"text-sm\" style={buildValidationMessageStyle(themeTokens)}>\n {translateValidationMessage(fieldErrors['acceptedLegalConsents.privacyPolicy'], 'acceptedLegalConsents.privacyPolicy')}\n </p>\n ) : null}\n </div>\n ) : null}\n </section>\n\n <Dialog open={activeDocument !== null} onOpenChange={(open) => { if (!open) setActiveDocument(null) }}>\n <DialogContent className=\"max-h-[80vh] overflow-hidden sm:max-w-2xl\">\n <DialogHeader>\n <DialogTitle>\n {activeDocumentPayload?.title\n || (activeDocument === 'privacyPolicy'\n ? t('checkout.payPage.legal.defaultPrivacyTitle', 'the privacy policy')\n : t('checkout.payPage.legal.defaultTermsTitle', 'the terms and conditions'))}\n </DialogTitle>\n </DialogHeader>\n <div className=\"overflow-y-auto pr-2\">\n <div className=\"prose prose-sm max-w-none\">\n <MarkdownContent body={activeDocumentPayload?.markdown ?? ''} format=\"markdown\" />\n </div>\n </div>\n </DialogContent>\n </Dialog>\n </>\n )\n}\n\nexport function PayPagePaymentForm({\n payload,\n slug,\n preview,\n isSubmitting,\n submissionError,\n paymentSession,\n activeTransactionId,\n embeddedRenderer,\n onSubmit,\n onReset,\n onComplete,\n onError,\n injectionContext,\n themeTokens,\n}: PayPagePaymentFormProps) {\n const t = useT()\n const embeddedPaymentSession = paymentSession?.type === 'embedded' ? paymentSession : null\n\n return (\n <section className=\"space-y-4\">\n {submissionError ? (\n <Alert status=\"error\" style=\"lighter\" size=\"default\">\n <AlertDescription>{submissionError}</AlertDescription>\n </Alert>\n ) : null}\n\n <InjectionSpot spotId=\"checkout.pay-page:gateway-widget:before\" context={injectionContext} />\n {embeddedPaymentSession && embeddedRenderer ? (\n <>\n <InjectionSpot spotId=\"checkout.pay-page:gateway-widget:renderer:before\" context={injectionContext} />\n {React.createElement(embeddedRenderer, {\n providerKey: embeddedPaymentSession.providerKey ?? '',\n transactionId: activeTransactionId ?? '',\n gatewayTransactionId: embeddedPaymentSession.gatewayTransactionId,\n session: embeddedPaymentSession,\n disabled: preview,\n onComplete,\n onError,\n })}\n <InjectionSpot spotId=\"checkout.pay-page:gateway-widget:renderer:after\" context={injectionContext} />\n </>\n ) : (\n <>\n <InjectionSpot spotId=\"checkout.pay-page:gateway-widget:actions:before\" context={injectionContext} />\n <Button\n type=\"button\"\n className=\"h-12 w-full rounded-xl text-base\"\n disabled={preview || isSubmitting}\n style={buildButtonStyle(themeTokens)}\n onClick={() => { void onSubmit() }}\n >\n <span className=\"flex items-center justify-center gap-2\">\n {isSubmitting ? <Spinner size=\"sm\" /> : null}\n {preview\n ? t('checkout.payPage.actions.previewDisabled', 'Preview only')\n : isSubmitting\n ? t('checkout.payPage.actions.processingPayment', 'Processing payment...')\n : t('checkout.payPage.actions.payNow', 'Pay now')}\n </span>\n </Button>\n <InjectionSpot spotId=\"checkout.pay-page:gateway-widget:actions:after\" context={injectionContext} />\n </>\n )}\n <InjectionSpot spotId=\"checkout.pay-page:gateway-widget:after\" context={injectionContext} />\n\n {paymentSession ? (\n <Button\n type=\"button\"\n variant=\"outline\"\n className=\"w-full rounded-xl\"\n style={buildButtonStyle(themeTokens, 'outline')}\n onClick={onReset}\n >\n {t('checkout.payPage.actions.editDetails', 'Edit details')}\n </Button>\n ) : null}\n\n {payload.gatewayProviderKey ? (\n <div className=\"text-center text-xs\" style={{ color: themeTokens.mutedText }}>\n {t('checkout.payPage.payment.providerHint', 'Your payment will be handled by {provider}.', {\n provider: payload.gatewayProviderKey,\n })}\n </div>\n ) : null}\n\n <div className=\"hidden text-xs\" data-pay-link-slug={slug} />\n </section>\n )\n}\n\nexport function PayPagePaymentSection({ payload, preview, themeTokens, children }: PayPagePaymentSectionProps) {\n const t = useT()\n\n return (\n <Card\n className=\"overflow-hidden rounded-xl border backdrop-blur\"\n style={{\n ...buildPanelStyle(themeTokens, 'default'),\n background: `linear-gradient(180deg, ${withAlpha(themeTokens.surface, 0.96)} 0%, ${withAlpha(themeTokens.shellBackground, 0.94)} 100%)`,\n }}\n >\n <CardContent className=\"space-y-6 p-5 sm:p-6\">\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between gap-3\">\n <div>\n <div className=\"text-overline font-semibold uppercase tracking-widest\" style={{ color: themeTokens.mutedText }}>\n {t('checkout.payPage.payment.kicker', 'Payment rail')}\n </div>\n <h2 className=\"mt-1 text-xl font-semibold\">{t('checkout.payPage.sections.payment', 'Payment')}</h2>\n </div>\n <div\n className=\"rounded-full px-3 py-1 text-overline font-semibold uppercase tracking-widest\"\n style={{\n background: withAlpha(preview ? themeTokens.accentSecondary : themeTokens.accent, 0.12),\n color: themeTokens.text,\n }}\n >\n {preview\n ? t('checkout.payPage.payment.previewState', 'No charge')\n : t('checkout.payPage.payment.liveState', 'Ready')}\n </div>\n </div>\n <p className=\"text-sm\" style={{ color: themeTokens.mutedText }}>\n {t('checkout.payPage.help.payment', 'Choose the amount, review the summary, then continue with the secure payment step.')}\n </p>\n {payload.gatewayProviderKey ? (\n <div className=\"text-sm font-medium\">{payload.gatewayProviderKey}</div>\n ) : null}\n </div>\n {children}\n </CardContent>\n </Card>\n )\n}\n\nexport function PayPageHelp({ payload, preview, themeTokens }: PayPageHelpProps) {\n const t = useT()\n\n return (\n <section\n className=\"rounded-xl border px-4 py-4 text-sm\"\n style={{\n background: withAlpha(themeTokens.shellBackground, 0.7),\n borderColor: themeTokens.border,\n color: themeTokens.mutedText,\n }}\n >\n <div className=\"font-medium\" style={{ color: themeTokens.text }}>\n {preview\n ? t('checkout.payPage.help.previewHeadline', 'This is a preview of the payment flow.')\n : t('checkout.payPage.help.liveHeadline', 'The provider widget appears in this panel after validation.')}\n </div>\n <div className=\"mt-2\">\n {payload.gatewayProviderKey\n ? t('checkout.payPage.help.providerLine', 'Provider: {provider}.', { provider: payload.gatewayProviderKey })\n : t('checkout.payPage.help.providerFallback', 'The payment provider is configured in the checkout settings.')}\n </div>\n </section>\n )\n}\n\nexport function PayPageFooter({ payload, themeTokens }: PayPageFooterProps) {\n const t = useT()\n const locale = useLocale()\n const router = useRouter()\n const selectId = React.useId()\n const [pending, startTransition] = React.useTransition()\n\n const languageLabels = React.useMemo<Record<Locale, string>>(() => ({\n en: t('common.languages.english', 'English'),\n pl: t('common.languages.polish', 'Polski'),\n es: t('common.languages.spanish', 'Espa\u00F1ol'),\n de: t('common.languages.german', 'Deutsch'),\n }), [t])\n\n const setLocale = React.useCallback(async (nextLocale: Locale) => {\n if (nextLocale === locale) return\n\n try {\n const updated = await persistLocalePreference(nextLocale)\n if (!updated) return\n\n startTransition(() => router.refresh())\n } catch {\n // Keep the current locale when persistence fails.\n }\n }, [locale, router, startTransition])\n\n React.useEffect(() => {\n if (hasStoredLocalePreference() || typeof navigator === 'undefined') return\n\n const preferredLocale = resolveLocaleFromCandidates([\n ...(Array.isArray(navigator.languages) ? navigator.languages : []),\n navigator.language,\n ])\n\n if (!preferredLocale) return\n\n let active = true\n\n void (async () => {\n try {\n const updated = await persistLocalePreference(preferredLocale)\n if (!updated || !active || preferredLocale === locale) return\n\n startTransition(() => router.refresh())\n } catch {\n // Keep the current locale when auto-detection persistence fails.\n }\n })()\n\n return () => {\n active = false\n }\n }, [locale, router, startTransition])\n\n return (\n <footer\n className=\"rounded-xl border px-5 py-4 text-sm sm:px-6\"\n style={{\n background: withAlpha(themeTokens.surface, 0.86),\n borderColor: themeTokens.border,\n color: themeTokens.mutedText,\n }}\n >\n <div className=\"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between\">\n <div>\n <div className=\"font-medium\" style={{ color: themeTokens.text }}>{payload.title ?? payload.name}</div>\n <div>{t('checkout.payPage.footer.subtitle', 'Public payment page configured in checkout.')}</div>\n </div>\n <div className=\"flex flex-wrap items-center gap-3 sm:justify-end\">\n <div className=\"flex items-center gap-2 text-xs\" style={{ color: themeTokens.mutedText }}>\n <label htmlFor={selectId}>{t('common.language', 'Language')}</label>\n <Select\n value={locale}\n onValueChange={(nextLocale) => setLocale(nextLocale as Locale)}\n disabled={pending}\n >\n <SelectTrigger\n id={selectId}\n size=\"sm\"\n className=\"w-auto min-w-28 rounded-full text-xs font-medium\"\n style={{\n background: withAlpha(themeTokens.surface, 0.92),\n borderColor: themeTokens.borderStrong,\n color: themeTokens.text,\n }}\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {locales.map((entry) => (\n <SelectItem key={entry} value={entry}>\n {languageLabels[entry]}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"text-xs uppercase tracking-widest\">\n {payload.gatewayProviderKey ?? t('checkout.payPage.header.autoProvider', 'Configured in checkout')}\n </div>\n </div>\n </div>\n </footer>\n )\n}\n\nexport function PayPage({\n mode = 'link',\n sourceId,\n initialPayload = null,\n initialLoadError = null,\n}: PayPageProps) {\n const params = useParams<{ slug: string }>()\n const router = useRouter()\n const searchParams = useSearchParams()\n const t = useT()\n const locale = useLocale()\n const prefersDark = usePrefersDarkMode()\n\n const routeSlug = typeof params?.slug === 'string' ? params.slug : ''\n const slug = sourceId ?? routeSlug\n const previewRequested = searchParams.get('preview') === 'true' || mode === 'template'\n\n const [payload, setPayload] = React.useState<PayLinkPayload | null>(initialPayload)\n const [isLoading, setIsLoading] = React.useState(initialPayload == null && initialLoadError == null)\n const [loadError, setLoadError] = React.useState<string | null>(initialLoadError)\n const [password, setPassword] = React.useState('')\n const [passwordError, setPasswordError] = React.useState<string | null>(null)\n const [isVerifyingPassword, setIsVerifyingPassword] = React.useState(false)\n const [customerData, setCustomerData] = React.useState<Record<string, unknown>>({})\n const [acceptedLegalConsents, setAcceptedLegalConsents] = React.useState<Record<string, boolean>>({})\n const [amount, setAmount] = React.useState<number | null>(null)\n const [selectedPriceItemId, setSelectedPriceItemId] = React.useState<string | null>(null)\n const [submissionError, setSubmissionError] = React.useState<string | null>(null)\n const [fieldErrors, setFieldErrors] = React.useState<FieldErrors>({})\n const [paymentSession, setPaymentSession] = React.useState<SubmitResponse['paymentSession']>(null)\n const [activeTransactionId, setActiveTransactionId] = React.useState<string | null>(null)\n const [isSubmitting, setIsSubmitting] = React.useState(false)\n\n const themeTokens = React.useMemo(\n () => resolveThemeTokens(payload, prefersDark),\n [payload, prefersDark],\n )\n\n const loadPayload = React.useCallback(async () => {\n if (!slug) return\n setIsLoading(true)\n setLoadError(null)\n const endpoint = mode === 'template'\n ? `/api/checkout/templates/${encodeURIComponent(slug)}/preview`\n : `/api/checkout/pay/${encodeURIComponent(slug)}${previewRequested ? '?preview=true' : ''}`\n\n try {\n const result = await readApiResultOrThrow<PayLinkPayload>(endpoint)\n setPayload(result)\n setPaymentSession(null)\n setActiveTransactionId(null)\n if (result.pricingMode === 'fixed' && typeof result.fixedPriceAmount === 'number') {\n setAmount(result.fixedPriceAmount)\n }\n } catch (error) {\n setPayload(null)\n setLoadError(readErrorMessage(error, t('checkout.payPage.errors.loadMessage', \"We couldn't load this payment page. Please try again.\")))\n } finally {\n setIsLoading(false)\n }\n }, [mode, previewRequested, slug, t])\n\n React.useEffect(() => {\n if (!slug) return\n if (initialPayload) return\n void loadPayload()\n }, [initialPayload, loadPayload, slug])\n\n React.useEffect(() => {\n if (!payload) return\n if (payload.pricingMode === 'fixed' && typeof payload.fixedPriceAmount === 'number') {\n setAmount(payload.fixedPriceAmount)\n return\n }\n if (payload.pricingMode !== 'price_list') {\n setSelectedPriceItemId(null)\n }\n }, [payload])\n\n const formatAmount = React.useCallback((value: number | null | undefined, currencyCode?: string | null) => {\n const normalizedValue = typeof value === 'number' && Number.isFinite(value) ? value : 0\n if (currencyCode) {\n try {\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency: currencyCode,\n }).format(normalizedValue)\n } catch {\n return `${normalizedValue.toFixed(2)} ${currencyCode}`\n }\n }\n return new Intl.NumberFormat(locale, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(normalizedValue)\n }, [locale])\n\n const isPreview = payload?.preview === true || previewRequested\n const selectedPriceItem = payload?.priceListItems?.find((item) => item.id === selectedPriceItemId) ?? null\n const shouldCollectCustomerDetails = payload != null\n && payload.collectCustomerDetails !== false\n && (payload.customerFieldsSchema?.length ?? 0) > 0\n const effectiveAmount = selectedPriceItem?.amount ?? amount\n const effectiveCurrencyCode = selectedPriceItem?.currencyCode\n ?? payload?.fixedPriceCurrencyCode\n ?? payload?.customAmountCurrencyCode\n ?? null\n const inputsLocked = isSubmitting || paymentSession != null\n const publicCustomFields = payload?.publicCustomFields ?? []\n const submitData = React.useMemo<PayPageSubmitData>(() => ({\n customerData,\n acceptedLegalConsents,\n amount: effectiveAmount ?? null,\n selectedPriceItemId,\n }), [acceptedLegalConsents, customerData, effectiveAmount, selectedPriceItemId])\n\n const resolveFieldLabel = React.useCallback((fieldPath: string): string => {\n if (!payload) return t('checkout.payPage.validation.thisField', 'this field')\n if (fieldPath.startsWith('customerData.')) {\n const fieldKey = fieldPath.slice('customerData.'.length)\n return payload.customerFieldsSchema?.find((field) => field.key === fieldKey)?.label\n ?? fieldKey\n }\n if (fieldPath === 'amount') {\n return t('checkout.payPage.summary.amountDue', 'Amount due')\n }\n if (fieldPath === 'selectedPriceItemId') {\n return t('checkout.payPage.validation.labels.option', 'payment option')\n }\n if (fieldPath.startsWith('acceptedLegalConsents.')) {\n const consentKey = fieldPath.slice('acceptedLegalConsents.'.length)\n if (consentKey === 'terms') {\n return payload.legalDocuments?.terms?.title\n ?? t('checkout.payPage.legal.defaultTermsTitle', 'the terms and conditions')\n }\n if (consentKey === 'privacyPolicy') {\n return payload.legalDocuments?.privacyPolicy?.title\n ?? t('checkout.payPage.legal.defaultPrivacyTitle', 'the privacy policy')\n }\n }\n return t('checkout.payPage.validation.thisField', 'this field')\n }, [payload, t])\n\n const translateValidationMessage = React.useCallback((message: string | null | undefined, fieldPath?: string) => {\n const trimmed = typeof message === 'string' ? message.trim() : ''\n if (!trimmed) return ''\n if (trimmed === 'checkout.payPage.validation.requiredField') {\n return t(trimmed, 'Enter {field}.', { field: resolveFieldLabel(fieldPath ?? '') })\n }\n if (trimmed === 'checkout.payPage.validation.documentRequired') {\n return t(trimmed, 'Accept {field} to continue.', { field: resolveFieldLabel(fieldPath ?? '') })\n }\n return t(trimmed, trimmed)\n }, [resolveFieldLabel, t])\n\n const clearFieldError = React.useCallback((fieldPath: string) => {\n setFieldErrors((current) => {\n if (!current[fieldPath]) return current\n const next = { ...current }\n delete next[fieldPath]\n return next\n })\n }, [])\n\n const applySubmitDataToState = React.useCallback((nextData: PayPageSubmitData) => {\n setCustomerData(nextData.customerData)\n setAcceptedLegalConsents(nextData.acceptedLegalConsents)\n setAmount(nextData.amount)\n setSelectedPriceItemId(nextData.selectedPriceItemId)\n }, [])\n\n const validateBeforeSubmit = React.useCallback((): FieldErrors => {\n if (!payload) return {}\n const nextErrors: FieldErrors = {}\n\n if (shouldCollectCustomerDetails) {\n Object.assign(\n nextErrors,\n validateCheckoutCustomerData(payload.customerFieldsSchema ?? [], customerData),\n )\n }\n\n if (payload.pricingMode === 'custom_amount') {\n if (effectiveAmount == null || !Number.isFinite(effectiveAmount)) {\n nextErrors.amount = 'checkout.payPage.validation.amountRequired'\n } else {\n if (payload.customAmountMin != null && effectiveAmount < payload.customAmountMin) {\n nextErrors.amount = t(\n 'checkout.payPage.validation.amountMin',\n 'Enter at least {amount}.',\n { amount: formatAmount(payload.customAmountMin, payload.customAmountCurrencyCode) },\n )\n }\n if (payload.customAmountMax != null && effectiveAmount > payload.customAmountMax) {\n nextErrors.amount = t(\n 'checkout.payPage.validation.amountMax',\n 'Enter no more than {amount}.',\n { amount: formatAmount(payload.customAmountMax, payload.customAmountCurrencyCode) },\n )\n }\n }\n }\n\n if (payload.pricingMode === 'price_list' && !selectedPriceItemId) {\n nextErrors.selectedPriceItemId = 'checkout.payPage.validation.priceSelectionRequired'\n }\n\n for (const key of ['terms', 'privacyPolicy'] as const) {\n const document = payload.legalDocuments?.[key]\n if (document?.required === true && acceptedLegalConsents[key] !== true) {\n nextErrors[`acceptedLegalConsents.${key}`] = 'checkout.payPage.validation.documentRequired'\n }\n }\n\n return nextErrors\n }, [\n acceptedLegalConsents,\n customerData,\n effectiveAmount,\n formatAmount,\n payload,\n selectedPriceItemId,\n shouldCollectCustomerDetails,\n t,\n ])\n\n const embeddedRenderer = paymentSession?.type === 'embedded' && paymentSession.providerKey\n ? getPaymentGatewayRenderer(paymentSession.providerKey, paymentSession.rendererKey)\n : null\n\n const paymentView: PayPageInjectionContext['paymentView'] = paymentSession == null\n ? 'idle'\n : embeddedRenderer\n ? 'embedded'\n : 'redirect'\n\n const injectionContext = React.useMemo<PayPageInjectionContext | null>(() => {\n if (!payload) return null\n return {\n link: payload,\n themeMode: themeTokens.mode,\n themeTokens,\n preview: isPreview,\n selectedAmount: effectiveAmount ?? null,\n currencyCode: effectiveCurrencyCode,\n pricingMode: payload.pricingMode,\n customerSchema: payload.customerFieldsSchema ?? [],\n customerData,\n legalDocuments: payload.legalDocuments ?? {},\n acceptedLegalConsents,\n transaction: activeTransactionId ? { id: activeTransactionId } : null,\n paymentView,\n paymentSession,\n paymentProviderKey: paymentSession?.providerKey ?? payload.gatewayProviderKey ?? null,\n paymentRendererKey: paymentSession?.type === 'embedded' ? paymentSession.rendererKey : null,\n fieldErrors,\n submissionError,\n inputsLocked,\n isSubmitting,\n canSubmit: !isPreview && !inputsLocked,\n operation: 'create',\n }\n }, [\n acceptedLegalConsents,\n activeTransactionId,\n customerData,\n effectiveAmount,\n effectiveCurrencyCode,\n isPreview,\n isSubmitting,\n inputsLocked,\n payload,\n fieldErrors,\n paymentSession,\n paymentView,\n submissionError,\n themeTokens,\n ])\n\n const injectionContextRef = React.useRef<PayPageInjectionContext | null>(injectionContext)\n const submitDataRef = React.useRef(submitData)\n\n React.useEffect(() => {\n injectionContextRef.current = injectionContext\n }, [injectionContext])\n\n React.useEffect(() => {\n submitDataRef.current = submitData\n }, [submitData])\n\n const { widgets: payPageFormWidgets } = useInjectionWidgets<PayPageInjectionContext>(\n injectionContext ? 'checkout.pay-page:form' : null,\n {\n context: injectionContext ?? undefined,\n triggerOnLoad: true,\n },\n )\n const { triggerEvent: triggerPayPageFormEvent } = useInjectionSpotEvents<PayPageInjectionContext, PayPageSubmitData>(\n 'checkout.pay-page:form',\n payPageFormWidgets,\n )\n\n const transformValidationErrors = React.useCallback(async (nextErrors: FieldErrors): Promise<FieldErrors> => {\n if (!injectionContextRef.current || !Object.keys(nextErrors).length) return nextErrors\n try {\n const result = await triggerPayPageFormEvent(\n 'transformValidation',\n nextErrors as unknown as PayPageSubmitData,\n injectionContextRef.current,\n { originalData: submitDataRef.current },\n )\n const transformed = result.data\n if (!transformed || typeof transformed !== 'object' || Array.isArray(transformed)) {\n return nextErrors\n }\n return Object.fromEntries(\n Object.entries(transformed as Record<string, unknown>).map(([fieldPath, value]) => [fieldPath, String(value)]),\n )\n } catch (error) {\n console.error('[PayPage] Error in transformValidation:', error)\n return nextErrors\n }\n }, [triggerPayPageFormEvent])\n\n const dispatchFieldChange = React.useCallback((fieldPath: string, value: unknown, nextData: PayPageSubmitData) => {\n if (!injectionContextRef.current) return\n void (async () => {\n try {\n const result = await triggerPayPageFormEvent(\n 'onFieldChange',\n nextData,\n injectionContextRef.current as PayPageInjectionContext,\n {\n fieldId: fieldPath,\n fieldValue: value,\n originalData: submitDataRef.current,\n },\n )\n const adjustedData = applySubmitDataSideEffects(\n setSubmitDataFieldValue(\n nextData,\n fieldPath,\n result.fieldChange?.value !== undefined ? result.fieldChange.value : value,\n ),\n result.fieldChange?.sideEffects,\n )\n if (adjustedData !== nextData) {\n applySubmitDataToState(adjustedData)\n }\n const nextMessage = result.fieldChange?.messages?.find((message) => message.severity === 'error')?.text\n if (nextMessage) {\n setFieldErrors((current) => ({ ...current, [fieldPath]: nextMessage }))\n }\n } catch (error) {\n console.error('[PayPage] Error in onFieldChange:', error)\n }\n })()\n }, [applySubmitDataToState, triggerPayPageFormEvent])\n\n const updateCustomerField = React.useCallback((fieldKey: string, value: unknown) => {\n const fieldPath = `customerData.${fieldKey}`\n const nextData = setSubmitDataFieldValue(submitDataRef.current, fieldPath, value)\n applySubmitDataToState(nextData)\n clearFieldError(fieldPath)\n setSubmissionError(null)\n dispatchFieldChange(fieldPath, value, nextData)\n }, [applySubmitDataToState, clearFieldError, dispatchFieldChange])\n\n const updateConsent = React.useCallback((fieldKey: 'terms' | 'privacyPolicy', value: boolean) => {\n const fieldPath = `acceptedLegalConsents.${fieldKey}`\n const nextData = setSubmitDataFieldValue(submitDataRef.current, fieldPath, value)\n applySubmitDataToState(nextData)\n clearFieldError(fieldPath)\n setSubmissionError(null)\n dispatchFieldChange(fieldPath, value, nextData)\n }, [applySubmitDataToState, clearFieldError, dispatchFieldChange])\n\n const previewBanner = payload ? (\n isPreview ? (\n <div\n className=\"rounded-xl border px-5 py-4\"\n style={{\n background: withAlpha(themeTokens.accentSecondary, 0.12),\n borderColor: withAlpha(themeTokens.accentSecondary, 0.44),\n color: themeTokens.text,\n }}\n >\n <div className=\"flex flex-wrap items-center justify-between gap-3\">\n <span className=\"text-sm font-medium\">{t('checkout.payPage.previewBanner', 'Preview mode. Payments are disabled.')}</span>\n <Button asChild type=\"button\" variant=\"outline\" style={buildButtonStyle(themeTokens, 'outline')}>\n <Link href={mode === 'template'\n ? `/backend/checkout/templates/${encodeURIComponent(payload.id)}`\n : `/backend/checkout/pay-links/${encodeURIComponent(payload.id)}`}\n >\n {t('checkout.payPage.actions.backToAdmin', 'Back to admin')}\n </Link>\n </Button>\n </div>\n </div>\n ) : null\n ) : null\n\n const SurfaceComponent = useRegisteredComponent<PayPageSurfaceProps>(PAGE_HANDLE, PayPageSurface)\n const HeaderComponent = useRegisteredComponent<PayPageHeaderProps>(HEADER_HANDLE, PayPageHeader)\n const DescriptionComponent = useRegisteredComponent<PayPageDescriptionProps>(DESCRIPTION_HANDLE, PayPageDescription)\n const CustomerFormComponent = useRegisteredComponent<PayPageCustomerFormProps>(CUSTOMER_FORM_HANDLE, PayPageCustomerForm)\n const PricingComponent = useRegisteredComponent<PayPagePricingProps>(PRICING_HANDLE, PayPagePricing)\n const SummaryComponent = useRegisteredComponent<PayPageSummaryProps>(SUMMARY_HANDLE, PayPageSummary)\n const LegalConsentComponent = useRegisteredComponent<PayPageLegalConsentProps>(LEGAL_CONSENT_HANDLE, PayPageLegalConsent)\n const PaymentSectionComponent = useRegisteredComponent<PayPagePaymentSectionProps>(PAYMENT_HANDLE, PayPagePaymentSection)\n const PaymentFormComponent = useRegisteredComponent<PayPagePaymentFormProps>(GATEWAY_FORM_HANDLE, PayPagePaymentForm)\n const HelpComponent = useRegisteredComponent<PayPageHelpProps>(HELP_HANDLE, PayPageHelp)\n const FooterComponent = useRegisteredComponent<PayPageFooterProps>(FOOTER_HANDLE, PayPageFooter)\n\n const submitPayment = React.useCallback(async () => {\n if (isPreview || !payload) return\n const nextErrors = await transformValidationErrors(validateBeforeSubmit())\n if (Object.keys(nextErrors).length > 0) {\n setFieldErrors(nextErrors)\n setSubmissionError(t('checkout.payPage.validation.fixErrors', 'Check the highlighted fields and try again.'))\n return\n }\n\n setIsSubmitting(true)\n setSubmissionError(null)\n setFieldErrors({})\n\n try {\n let nextSubmitData = submitDataRef.current\n if (injectionContextRef.current) {\n try {\n const transformed = await triggerPayPageFormEvent(\n 'transformFormData',\n nextSubmitData,\n injectionContextRef.current,\n )\n if (transformed.data) {\n nextSubmitData = transformed.data\n if (transformed.applyToForm) {\n applySubmitDataToState(nextSubmitData)\n }\n }\n } catch (error) {\n console.error('[PayPage] Error in transformFormData:', error)\n }\n }\n\n let injectionRequestHeaders: Record<string, string> | undefined\n if (injectionContextRef.current) {\n const guard = await triggerPayPageFormEvent('onBeforeSave', nextSubmitData, injectionContextRef.current)\n if (!guard.ok) {\n const transformedErrors = await transformValidationErrors(guard.fieldErrors ?? {})\n if (Object.keys(transformedErrors).length > 0) {\n setFieldErrors(transformedErrors)\n }\n setSubmissionError(\n guard.message\n || t('checkout.payPage.validation.fixErrors', 'Check the highlighted fields and try again.'),\n )\n setIsSubmitting(false)\n return\n }\n injectionRequestHeaders = guard.requestHeaders\n await triggerPayPageFormEvent('onSave', nextSubmitData, injectionContextRef.current)\n }\n\n const runSubmit = async () => readApiResultOrThrow<SubmitResponse>(\n `/api/checkout/pay/${encodeURIComponent(slug)}/submit`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Idempotency-Key': crypto.randomUUID(),\n 'x-om-unauthorized-redirect': '0',\n },\n body: JSON.stringify(nextSubmitData),\n },\n )\n\n const result = injectionRequestHeaders && Object.keys(injectionRequestHeaders).length > 0\n ? await withScopedApiRequestHeaders(injectionRequestHeaders, runSubmit)\n : await runSubmit()\n\n setActiveTransactionId(result.transactionId)\n\n if (result.paymentSession?.type === 'embedded') {\n const nextRenderer = result.paymentSession.providerKey\n ? getPaymentGatewayRenderer(result.paymentSession.providerKey, result.paymentSession.rendererKey)\n : null\n\n if (nextRenderer) {\n setPaymentSession(result.paymentSession)\n if (injectionContextRef.current) {\n await triggerPayPageFormEvent('onAfterSave', nextSubmitData, injectionContextRef.current)\n }\n return\n }\n\n if (result.redirectUrl) {\n if (injectionContextRef.current) {\n await triggerPayPageFormEvent('onAfterSave', nextSubmitData, injectionContextRef.current)\n }\n window.location.href = result.redirectUrl\n return\n }\n\n setSubmissionError(t(\n 'checkout.payPage.errors.embeddedUnavailable',\n 'The payment form is unavailable right now. Please try again or use the hosted payment page.',\n ))\n return\n }\n\n if (result.redirectUrl) {\n if (injectionContextRef.current) {\n await triggerPayPageFormEvent('onAfterSave', nextSubmitData, injectionContextRef.current)\n }\n window.location.href = result.redirectUrl\n return\n }\n\n if (injectionContextRef.current) {\n await triggerPayPageFormEvent('onAfterSave', nextSubmitData, injectionContextRef.current)\n }\n router.push(`/pay/${encodeURIComponent(slug)}/success/${encodeURIComponent(result.transactionId)}`)\n } catch (error) {\n const normalized = mapCrudServerErrorToFormErrors(error)\n const nextFieldErrors = await transformValidationErrors(Object.fromEntries(\n Object.entries(normalized.fieldErrors ?? {}).map(([fieldPath, message]) => [\n fieldPath,\n translateValidationMessage(message, fieldPath),\n ]),\n ))\n if (Object.keys(nextFieldErrors).length > 0) {\n setFieldErrors(nextFieldErrors)\n }\n setSubmissionError(\n translateValidationMessage(normalized.message)\n || t('checkout.payPage.errors.submit', 'Unable to start the payment. Please try again.'),\n )\n } finally {\n setIsSubmitting(false)\n }\n }, [\n acceptedLegalConsents,\n applySubmitDataToState,\n customerData,\n effectiveAmount,\n isPreview,\n payload,\n router,\n selectedPriceItemId,\n slug,\n t,\n transformValidationErrors,\n triggerPayPageFormEvent,\n translateValidationMessage,\n validateBeforeSubmit,\n ])\n\n if (!slug || isLoading) {\n return (\n <div\n className=\"mx-auto flex min-h-[50vh] max-w-4xl items-center justify-center gap-3 px-4 py-16 text-sm\"\n style={{ color: themeTokens.mutedText }}\n >\n <Spinner size=\"sm\" />\n <span>{t('checkout.payPage.loading', 'Loading payment link...')}</span>\n </div>\n )\n }\n\n if (loadError || !payload) {\n return (\n <div className=\"mx-auto max-w-3xl px-4 py-16\">\n <Alert\n status=\"error\"\n style=\"lighter\"\n size=\"default\"\n action={(\n <Button type=\"button\" variant=\"outline\" onClick={() => { void loadPayload() }}>\n {t('checkout.payPage.actions.retry', 'Retry')}\n </Button>\n )}\n >\n <div className=\"space-y-1\">\n <AlertTitle>{t('checkout.payPage.errors.loadTitle', 'Unable to load payment link')}</AlertTitle>\n <AlertDescription>\n {loadError ?? t('checkout.payPage.errors.loadMessage', \"We couldn't load this payment page. Please try again.\")}\n </AlertDescription>\n </div>\n </Alert>\n </div>\n )\n }\n\n if (payload.requiresPassword) {\n return (\n <div\n className=\"min-h-screen px-4 py-8 sm:px-6\"\n style={{ background: themeTokens.pageBackground, color: themeTokens.text }}\n >\n <div className=\"mx-auto max-w-lg\">\n <Card\n className=\"rounded-xl border backdrop-blur\"\n style={buildPanelStyle(themeTokens, 'default')}\n >\n <CardContent className=\"space-y-5 p-6 sm:p-8\">\n <div className=\"space-y-2\">\n <div className=\"text-overline font-semibold uppercase tracking-widest\" style={{ color: themeTokens.mutedText }}>\n {t('checkout.payPage.badges.secure', 'Secure checkout')}\n </div>\n <h1 className=\"text-2xl font-semibold\">{payload.title ?? t('checkout.payPage.protectedTitle', 'Protected payment link')}</h1>\n </div>\n <PasswordInput\n className={READABLE_INPUT_CLASSNAME}\n value={password}\n onChange={(event) => setPassword(event.target.value)}\n placeholder={t('checkout.payPage.passwordPlaceholder', 'Password')}\n style={buildReadableInputStyle(themeTokens, Boolean(passwordError))}\n />\n {passwordError ? (\n <p className=\"text-sm\" style={buildValidationMessageStyle(themeTokens)}>\n {passwordError}\n </p>\n ) : null}\n <Button\n type=\"button\"\n disabled={isVerifyingPassword}\n style={buildButtonStyle(themeTokens)}\n onClick={async () => {\n setIsVerifyingPassword(true)\n setPasswordError(null)\n try {\n await apiCallOrThrow(`/api/checkout/pay/${encodeURIComponent(slug)}/verify-password`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-om-unauthorized-redirect': '0',\n },\n body: JSON.stringify({ password }),\n })\n await loadPayload()\n } catch (error) {\n setPasswordError(readTranslatedErrorMessage(\n error,\n t,\n t('checkout.payPage.errors.password', 'Unable to verify password. Please try again.'),\n ))\n } finally {\n setIsVerifyingPassword(false)\n }\n }}\n >\n <span className=\"flex items-center gap-2\">\n {isVerifyingPassword ? <Spinner size=\"sm\" /> : null}\n {isVerifyingPassword\n ? t('checkout.payPage.actions.verifying', 'Verifying...')\n : t('checkout.payPage.actions.continue', 'Continue')}\n </span>\n </Button>\n </CardContent>\n </Card>\n </div>\n </div>\n )\n }\n\n if (payload.available === false && !isPreview) {\n return (\n <div className=\"mx-auto max-w-3xl px-4 py-16 text-center text-sm\" style={{ color: themeTokens.mutedText }}>\n {t('checkout.payPage.unavailable', 'This payment link is no longer available.')}\n </div>\n )\n }\n\n if (!injectionContext) return null\n\n const leftColumn = (\n <div className=\"space-y-6\">\n <InjectionSpot spotId=\"checkout.pay-page:header:before\" context={injectionContext} />\n <div data-component-handle={HEADER_HANDLE}>\n <HeaderComponent payload={payload} preview={isPreview} themeTokens={themeTokens} />\n </div>\n <InjectionSpot spotId=\"checkout.pay-page:header:after\" context={injectionContext} />\n\n {(payload.description || publicCustomFields.length > 0) ? (\n <>\n <div data-component-handle={DESCRIPTION_HANDLE}>\n <DescriptionComponent\n payload={payload}\n publicCustomFields={publicCustomFields}\n themeTokens={themeTokens}\n />\n </div>\n <InjectionSpot spotId=\"checkout.pay-page:description:after\" context={injectionContext} />\n </>\n ) : null}\n\n <InjectionSpot spotId=\"checkout.pay-page:customer-fields:before\" context={injectionContext} />\n {shouldCollectCustomerDetails ? (\n <div data-component-handle={CUSTOMER_FORM_HANDLE}>\n <CustomerFormComponent\n payload={payload}\n customerData={customerData}\n fieldErrors={fieldErrors}\n inputsLocked={inputsLocked}\n onFieldChange={updateCustomerField}\n translateValidationMessage={translateValidationMessage}\n themeTokens={themeTokens}\n />\n </div>\n ) : null}\n <InjectionSpot spotId=\"checkout.pay-page:customer-fields:after\" context={injectionContext} />\n </div>\n )\n\n const paymentFlow = (\n <>\n <InjectionSpot spotId=\"checkout.pay-page:pricing:before\" context={injectionContext} />\n <div data-component-handle={PRICING_HANDLE}>\n <PricingComponent\n payload={payload}\n amount={amount}\n selectedPriceItemId={selectedPriceItemId}\n fieldErrors={fieldErrors}\n inputsLocked={inputsLocked}\n formatAmount={formatAmount}\n onAmountChange={(value) => {\n const nextAmount = parseNumericInput(value)\n const nextData = setSubmitDataFieldValue(submitDataRef.current, 'amount', nextAmount)\n applySubmitDataToState(nextData)\n clearFieldError('amount')\n setSubmissionError(null)\n dispatchFieldChange('amount', nextAmount, nextData)\n }}\n onPriceItemSelect={(item) => {\n const nextData = {\n ...submitDataRef.current,\n amount: item.amount,\n selectedPriceItemId: item.id,\n }\n applySubmitDataToState(nextData)\n clearFieldError('selectedPriceItemId')\n setSubmissionError(null)\n dispatchFieldChange('selectedPriceItemId', item.id, nextData)\n }}\n translateValidationMessage={translateValidationMessage}\n themeTokens={themeTokens}\n />\n </div>\n <InjectionSpot spotId=\"checkout.pay-page:pricing:after\" context={injectionContext} />\n\n <InjectionSpot spotId=\"checkout.pay-page:summary:before\" context={injectionContext} />\n <div data-component-handle={SUMMARY_HANDLE}>\n <SummaryComponent\n payload={payload}\n selectedAmount={effectiveAmount}\n currencyCode={effectiveCurrencyCode}\n formatAmount={formatAmount}\n preview={isPreview}\n themeTokens={themeTokens}\n />\n </div>\n <InjectionSpot spotId=\"checkout.pay-page:summary:after\" context={injectionContext} />\n\n <InjectionSpot spotId=\"checkout.pay-page:legal-consent:before\" context={injectionContext} />\n <div data-component-handle={LEGAL_CONSENT_HANDLE}>\n <LegalConsentComponent\n payload={payload}\n acceptedLegalConsents={acceptedLegalConsents}\n fieldErrors={fieldErrors}\n inputsLocked={inputsLocked}\n onConsentChange={updateConsent}\n translateValidationMessage={translateValidationMessage}\n themeTokens={themeTokens}\n />\n </div>\n <InjectionSpot spotId=\"checkout.pay-page:legal-consent:after\" context={injectionContext} />\n\n <InjectionSpot spotId=\"checkout.pay-page:submit:before\" context={injectionContext} />\n <div data-component-handle={GATEWAY_FORM_HANDLE}>\n <PaymentFormComponent\n payload={payload}\n slug={slug}\n preview={isPreview}\n isSubmitting={isSubmitting}\n submissionError={submissionError}\n paymentSession={paymentSession}\n activeTransactionId={activeTransactionId}\n embeddedRenderer={embeddedRenderer}\n onSubmit={submitPayment}\n onReset={() => {\n setPaymentSession(null)\n setActiveTransactionId(null)\n setSubmissionError(null)\n }}\n onComplete={() => {\n if (!activeTransactionId) return\n router.push(`/pay/${encodeURIComponent(slug)}/success/${encodeURIComponent(activeTransactionId)}`)\n }}\n onError={(message) => {\n setSubmissionError(message)\n }}\n injectionContext={injectionContext}\n themeTokens={themeTokens}\n />\n </div>\n <InjectionSpot spotId=\"checkout.pay-page:submit:after\" context={injectionContext} />\n\n <InjectionSpot spotId=\"checkout.pay-page:help:before\" context={injectionContext} />\n <div data-component-handle={HELP_HANDLE}>\n <HelpComponent payload={payload} preview={isPreview} themeTokens={themeTokens} />\n </div>\n <InjectionSpot spotId=\"checkout.pay-page:help:after\" context={injectionContext} />\n </>\n )\n\n const rightColumn = (\n <>\n <InjectionSpot spotId=\"checkout.pay-page:payment:before\" context={injectionContext} />\n <div data-component-handle={PAYMENT_HANDLE}>\n <PaymentSectionComponent payload={payload} preview={isPreview} themeTokens={themeTokens}>\n {paymentFlow}\n </PaymentSectionComponent>\n </div>\n <InjectionSpot spotId=\"checkout.pay-page:payment:after\" context={injectionContext} />\n </>\n )\n\n const footer = (\n <>\n <InjectionSpot spotId=\"checkout.pay-page:footer:before\" context={injectionContext} />\n <div data-component-handle={FOOTER_HANDLE}>\n <FooterComponent payload={payload} themeTokens={themeTokens} />\n </div>\n <InjectionSpot spotId=\"checkout.pay-page:footer:after\" context={injectionContext} />\n </>\n )\n\n return (\n <div data-component-handle={PAGE_HANDLE}>\n <SurfaceComponent\n previewBanner={previewBanner}\n leftColumn={leftColumn}\n rightColumn={rightColumn}\n footer={footer}\n themeTokens={themeTokens}\n />\n </div>\n )\n}\n\nexport default PayPage\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["document"]
|
|
7
7
|
}
|