@open-mercato/checkout 0.6.7 → 0.6.8-develop.6874.1.982d6097d8

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.
Files changed (75) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/dist/modules/checkout/__integration__/TC-CHKT-042.spec.js +39 -0
  3. package/dist/modules/checkout/__integration__/TC-CHKT-042.spec.js.map +7 -0
  4. package/dist/modules/checkout/__integration__/TC-CHKT-043-concurrent-status-update.spec.js +62 -0
  5. package/dist/modules/checkout/__integration__/TC-CHKT-043-concurrent-status-update.spec.js.map +7 -0
  6. package/dist/modules/checkout/api/pay/[slug]/submit/route.js +43 -28
  7. package/dist/modules/checkout/api/pay/[slug]/submit/route.js.map +2 -2
  8. package/dist/modules/checkout/api/transactions/route.js +23 -6
  9. package/dist/modules/checkout/api/transactions/route.js.map +2 -2
  10. package/dist/modules/checkout/backend/checkout/pay-links/page.js +2 -1
  11. package/dist/modules/checkout/backend/checkout/pay-links/page.js.map +2 -2
  12. package/dist/modules/checkout/backend/checkout/templates/page.js +2 -1
  13. package/dist/modules/checkout/backend/checkout/templates/page.js.map +2 -2
  14. package/dist/modules/checkout/backend/checkout/transactions/page.js +2 -1
  15. package/dist/modules/checkout/backend/checkout/transactions/page.js.map +2 -2
  16. package/dist/modules/checkout/commands/links.js +1 -1
  17. package/dist/modules/checkout/commands/links.js.map +2 -2
  18. package/dist/modules/checkout/commands/transactions.js +45 -13
  19. package/dist/modules/checkout/commands/transactions.js.map +2 -2
  20. package/dist/modules/checkout/components/CustomerFieldsEditor.js +2 -2
  21. package/dist/modules/checkout/components/CustomerFieldsEditor.js.map +2 -2
  22. package/dist/modules/checkout/components/GatewaySettingsFields.js +2 -2
  23. package/dist/modules/checkout/components/GatewaySettingsFields.js.map +2 -2
  24. package/dist/modules/checkout/components/LinkTemplateForm.js +8 -8
  25. package/dist/modules/checkout/components/LinkTemplateForm.js.map +2 -2
  26. package/dist/modules/checkout/components/LogoUploadField.js +1 -1
  27. package/dist/modules/checkout/components/LogoUploadField.js.map +2 -2
  28. package/dist/modules/checkout/components/PayPage.js +39 -38
  29. package/dist/modules/checkout/components/PayPage.js.map +2 -2
  30. package/dist/modules/checkout/extension-points.js +68 -0
  31. package/dist/modules/checkout/extension-points.js.map +7 -0
  32. package/dist/modules/checkout/lib/transaction-status-machine.js +31 -0
  33. package/dist/modules/checkout/lib/transaction-status-machine.js.map +7 -0
  34. package/dist/modules/checkout/search.js +44 -6
  35. package/dist/modules/checkout/search.js.map +2 -2
  36. package/dist/modules/checkout/setup.js +28 -0
  37. package/dist/modules/checkout/setup.js.map +2 -2
  38. package/dist/modules/checkout/subscribers/search-reindex-transaction-created.js +32 -0
  39. package/dist/modules/checkout/subscribers/search-reindex-transaction-created.js.map +7 -0
  40. package/dist/modules/checkout/workers/transaction-expiry.worker.js +9 -2
  41. package/dist/modules/checkout/workers/transaction-expiry.worker.js.map +2 -2
  42. package/package.json +10 -9
  43. package/src/modules/checkout/__integration__/TC-CHKT-042.spec.ts +41 -0
  44. package/src/modules/checkout/__integration__/TC-CHKT-043-concurrent-status-update.spec.ts +112 -0
  45. package/src/modules/checkout/__tests__/search.test.ts +21 -0
  46. package/src/modules/checkout/__tests__/setup-schedules.test.ts +99 -0
  47. package/src/modules/checkout/api/pay/[slug]/submit/__tests__/route.test.ts +77 -0
  48. package/src/modules/checkout/api/pay/[slug]/submit/route.ts +58 -28
  49. package/src/modules/checkout/api/transactions/__tests__/route.test.ts +113 -0
  50. package/src/modules/checkout/api/transactions/route.ts +30 -6
  51. package/src/modules/checkout/backend/checkout/pay-links/page.tsx +2 -1
  52. package/src/modules/checkout/backend/checkout/templates/page.tsx +2 -1
  53. package/src/modules/checkout/backend/checkout/transactions/page.tsx +2 -1
  54. package/src/modules/checkout/commands/__tests__/update-transaction-status.test.ts +363 -0
  55. package/src/modules/checkout/commands/links.ts +5 -1
  56. package/src/modules/checkout/commands/transactions.ts +68 -13
  57. package/src/modules/checkout/components/CustomerFieldsEditor.tsx +2 -2
  58. package/src/modules/checkout/components/GatewaySettingsFields.tsx +2 -2
  59. package/src/modules/checkout/components/LinkTemplateForm.tsx +8 -8
  60. package/src/modules/checkout/components/LogoUploadField.tsx +1 -1
  61. package/src/modules/checkout/components/PayPage.tsx +38 -37
  62. package/src/modules/checkout/extension-points.ts +67 -0
  63. package/src/modules/checkout/i18n/de.json +1 -0
  64. package/src/modules/checkout/i18n/en.json +1 -0
  65. package/src/modules/checkout/i18n/es.json +1 -0
  66. package/src/modules/checkout/i18n/ko.json +463 -0
  67. package/src/modules/checkout/i18n/pl.json +1 -0
  68. package/src/modules/checkout/lib/__tests__/transaction-status-machine.test.ts +152 -0
  69. package/src/modules/checkout/lib/transaction-status-machine.ts +71 -0
  70. package/src/modules/checkout/search.ts +44 -6
  71. package/src/modules/checkout/setup.ts +51 -0
  72. package/src/modules/checkout/subscribers/__tests__/search-reindex-transaction-created.test.ts +29 -0
  73. package/src/modules/checkout/subscribers/search-reindex-transaction-created.ts +39 -0
  74. package/src/modules/checkout/workers/__tests__/transaction-expiry.worker.test.ts +124 -0
  75. package/src/modules/checkout/workers/transaction-expiry.worker.ts +11 -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 { 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'\nimport { createLogger } from '@open-mercato/shared/lib/logger'\n\nconst logger = createLogger('checkout').child({ component: 'PayPage' })\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 const fieldId = `checkout-customer-${field.key}`\n const fieldErrorId = `${fieldId}-error`\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 aria-required={field.required ? true : undefined}\n aria-invalid={fieldError ? true : undefined}\n aria-describedby={fieldError ? fieldErrorId : undefined}\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 htmlFor={fieldId} className=\"text-sm font-medium\">\n {field.label}\n {field.required ? ' *' : ''}\n </label>\n {field.kind === 'multiline' ? (\n <Textarea\n id={fieldId}\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 aria-required={field.required ? true : undefined}\n aria-invalid={fieldError ? true : undefined}\n aria-describedby={fieldError ? fieldErrorId : 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 id={fieldId}\n className={`rounded-xl ${READABLE_INPUT_CLASSNAME}`}\n aria-required={field.required ? true : undefined}\n aria-invalid={Boolean(fieldError)}\n aria-describedby={fieldError ? fieldErrorId : undefined}\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 id={fieldId}\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 aria-required={field.required ? true : undefined}\n aria-invalid={fieldError ? true : undefined}\n aria-describedby={fieldError ? fieldErrorId : undefined}\n style={buildReadableInputStyle(themeTokens, Boolean(fieldError), inputsLocked)}\n />\n )}\n </>\n )}\n {fieldError ? (\n <p id={fieldErrorId} 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 logger.error('Error in transformValidation', { err: 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 logger.error('Error in onFieldChange', { err: 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 logger.error('Error in transformFormData', { err: 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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",
4
+ "sourcesContent": ["\"use client\"\n\nimport * as React from 'react'\nimport { extensionPoints } from '@open-mercato/checkout/modules/checkout/extension-points'\nimport Link from 'next/link'\nimport { useParams, useRouter, useSearchParams } from 'next/navigation'\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'\nimport { createLogger } from '@open-mercato/shared/lib/logger'\n\nconst logger = createLogger('checkout').child({ component: 'PayPage' })\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 = extensionPoints.hosts.payPage.componentId\nconst HEADER_HANDLE = extensionPoints.hosts.header.componentId\nconst DESCRIPTION_HANDLE = extensionPoints.hosts.description.componentId\nconst SUMMARY_HANDLE = extensionPoints.hosts.summary.componentId\nconst PRICING_HANDLE = extensionPoints.hosts.pricing.componentId\nconst PAYMENT_HANDLE = extensionPoints.hosts.payment.componentId\nconst CUSTOMER_FORM_HANDLE = extensionPoints.hosts.customerForm.componentId\nconst LEGAL_CONSENT_HANDLE = extensionPoints.hosts.legalConsent.componentId\nconst GATEWAY_FORM_HANDLE = extensionPoints.hosts.gatewayForm.componentId\nconst HELP_HANDLE = extensionPoints.hosts.help.componentId\nconst FOOTER_HANDLE = extensionPoints.hosts.footer.componentId\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 const fieldId = `checkout-customer-${field.key}`\n const fieldErrorId = `${fieldId}-error`\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 aria-required={field.required ? true : undefined}\n aria-invalid={fieldError ? true : undefined}\n aria-describedby={fieldError ? fieldErrorId : undefined}\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 htmlFor={fieldId} className=\"text-sm font-medium\">\n {field.label}\n {field.required ? ' *' : ''}\n </label>\n {field.kind === 'multiline' ? (\n <Textarea\n id={fieldId}\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 aria-required={field.required ? true : undefined}\n aria-invalid={fieldError ? true : undefined}\n aria-describedby={fieldError ? fieldErrorId : 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 id={fieldId}\n className={`rounded-xl ${READABLE_INPUT_CLASSNAME}`}\n aria-required={field.required ? true : undefined}\n aria-invalid={Boolean(fieldError)}\n aria-describedby={fieldError ? fieldErrorId : undefined}\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 id={fieldId}\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 aria-required={field.required ? true : undefined}\n aria-invalid={fieldError ? true : undefined}\n aria-describedby={fieldError ? fieldErrorId : undefined}\n style={buildReadableInputStyle(themeTokens, Boolean(fieldError), inputsLocked)}\n />\n )}\n </>\n )}\n {fieldError ? (\n <p id={fieldErrorId} 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={extensionPoints.hosts.gatewayWidgetBefore.spotId} context={injectionContext} />\n {embeddedPaymentSession && embeddedRenderer ? (\n <>\n <InjectionSpot spotId={extensionPoints.hosts.gatewayRendererBefore.spotId} 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={extensionPoints.hosts.gatewayRendererAfter.spotId} context={injectionContext} />\n </>\n ) : (\n <>\n <InjectionSpot spotId={extensionPoints.hosts.gatewayActionsBefore.spotId} 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={extensionPoints.hosts.gatewayActionsAfter.spotId} context={injectionContext} />\n </>\n )}\n <InjectionSpot spotId={extensionPoints.hosts.gatewayWidgetAfter.spotId} 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 ko: t('common.languages.korean', '\uD55C\uAD6D\uC5B4'),\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 logger.error('Error in transformValidation', { err: 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 logger.error('Error in onFieldChange', { err: 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 logger.error('Error in transformFormData', { err: 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={extensionPoints.hosts.headerBefore.spotId} context={injectionContext} />\n <div data-component-handle={HEADER_HANDLE}>\n <HeaderComponent payload={payload} preview={isPreview} themeTokens={themeTokens} />\n </div>\n <InjectionSpot spotId={extensionPoints.hosts.headerAfter.spotId} 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={extensionPoints.hosts.descriptionAfter.spotId} context={injectionContext} />\n </>\n ) : null}\n\n <InjectionSpot spotId={extensionPoints.hosts.customerFieldsBefore.spotId} 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={extensionPoints.hosts.customerFieldsAfter.spotId} context={injectionContext} />\n </div>\n )\n\n const paymentFlow = (\n <>\n <InjectionSpot spotId={extensionPoints.hosts.pricingBefore.spotId} 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={extensionPoints.hosts.pricingAfter.spotId} context={injectionContext} />\n\n <InjectionSpot spotId={extensionPoints.hosts.summaryBefore.spotId} 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={extensionPoints.hosts.summaryAfter.spotId} context={injectionContext} />\n\n <InjectionSpot spotId={extensionPoints.hosts.legalConsentBefore.spotId} 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={extensionPoints.hosts.legalConsentAfter.spotId} context={injectionContext} />\n\n <InjectionSpot spotId={extensionPoints.hosts.submitBefore.spotId} 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={extensionPoints.hosts.submitAfter.spotId} context={injectionContext} />\n\n <InjectionSpot spotId={extensionPoints.hosts.helpBefore.spotId} context={injectionContext} />\n <div data-component-handle={HELP_HANDLE}>\n <HelpComponent payload={payload} preview={isPreview} themeTokens={themeTokens} />\n </div>\n <InjectionSpot spotId={extensionPoints.hosts.helpAfter.spotId} context={injectionContext} />\n </>\n )\n\n const rightColumn = (\n <>\n <InjectionSpot spotId={extensionPoints.hosts.paymentBefore.spotId} 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={extensionPoints.hosts.paymentAfter.spotId} context={injectionContext} />\n </>\n )\n\n const footer = (\n <>\n <InjectionSpot spotId={extensionPoints.hosts.footerBefore.spotId} context={injectionContext} />\n <div data-component-handle={FOOTER_HANDLE}>\n <FooterComponent payload={payload} themeTokens={themeTokens} />\n </div>\n <InjectionSpot spotId={extensionPoints.hosts.footerAfter.spotId} 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": ";AAsmBM,SAoOU,UApOV,KAaE,YAbF;AApmBN,YAAY,WAAW;AACvB,SAAS,uBAAuB;AAChC,OAAO,UAAU;AACjB,SAAS,WAAW,WAAW,uBAAuB;AACtD,SAAS,WAAW,YAAY;AAChC,SAAS,eAA4B;AAErC,SAAS,mCAAmC;AAC5C,SAAS,iCAAiC;AAG1C,SAAS,eAAe,wBAAwB,2BAA2B;AAC3E,SAAS,8BAA8B;AACvC,SAAS,uBAAuB;AAChC,SAAS,gBAAgB,sBAAsB,mCAAmC;AAClF,SAAS,sCAAsC;AAC/C,SAAS,OAAO,kBAAkB,kBAAkB;AACpD,SAAS,cAAc;AACvB,SAAS,MAAM,mBAAmB;AAClC,SAAS,gBAAgB;AACzB,SAAS,QAAQ,eAAe,cAAc,mBAAmB;AACjE,SAAS,aAAa;AACtB,SAAS,qBAAqB;AAC9B,SAAS,OAAO,kBAAkB;AAClC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,eAAe;AACxB,SAAS,gBAAgB;AACzB;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,oBAAoB;AAE7B,MAAM,SAAS,aAAa,UAAU,EAAE,MAAM,EAAE,WAAW,UAAU,CAAC;AAuOtE,MAAM,cAAc,gBAAgB,MAAM,QAAQ;AAClD,MAAM,gBAAgB,gBAAgB,MAAM,OAAO;AACnD,MAAM,qBAAqB,gBAAgB,MAAM,YAAY;AAC7D,MAAM,iBAAiB,gBAAgB,MAAM,QAAQ;AACrD,MAAM,iBAAiB,gBAAgB,MAAM,QAAQ;AACrD,MAAM,iBAAiB,gBAAgB,MAAM,QAAQ;AACrD,MAAM,uBAAuB,gBAAgB,MAAM,aAAa;AAChE,MAAM,uBAAuB,gBAAgB,MAAM,aAAa;AAChE,MAAM,sBAAsB,gBAAgB,MAAM,YAAY;AAC9D,MAAM,cAAc,gBAAgB,MAAM,KAAK;AAC/C,MAAM,gBAAgB,gBAAgB,MAAM,OAAO;AAGnD,MAAM,2BAA2B;AAAA,EAC/B,QAAQ;AAAA,EACR,iBAAiB;AAAA,EACjB,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,UAAU;AAAA,EACV,WAAW;AAAA,EACX,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,aAAa;AAAA,EACb,cAAc;AAAA,EACd,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,WAAW;AACb;AAEA,MAAM,8BAA8B;AAEpC,SAAS,MAAM,OAAe,KAAa,KAAa;AACtD,SAAO,KAAK,IAAI,KAAK,IAAI,OAAO,GAAG,GAAG,GAAG;AAC3C;AAEA,SAAS,iBAAiB,OAAgB,UAAkB;AAC1D,SAAO,iBAAiB,SAAS,MAAM,UAAU,MAAM,UAAU;AACnE;AAEA,SAAS,2BACP,OACA,WACA,UACA;AACA,SAAO,UAAU,iBAAiB,OAAO,QAAQ,GAAG,QAAQ;AAC9D;AAEA,SAAS,kBAAkB,OAA8B;AACvD,QAAM,UAAU,MAAM,KAAK;AAC3B,MAAI,CAAC,QAAS,QAAO;AACrB,QAAM,SAAS,OAAO,OAAO;AAC7B,SAAO,OAAO,SAAS,MAAM,IAAI,SAAS;AAC5C;AAEA,SAAS,wBACP,MACA,WACA,OACmB;AACnB,MAAI,UAAU,WAAW,eAAe,GAAG;AACzC,UAAM,WAAW,UAAU,MAAM,gBAAgB,MAAM;AACvD,WAAO;AAAA,MACL,GAAG;AAAA,MACH,cAAc;AAAA,QACZ,GAAG,KAAK;AAAA,QACR,CAAC,QAAQ,GAAG;AAAA,MACd;AAAA,IACF;AAAA,EACF;AACA,MAAI,UAAU,WAAW,wBAAwB,GAAG;AAClD,UAAM,WAAW,UAAU,MAAM,yBAAyB,MAAM;AAChE,QAAI,aAAa,WAAW,aAAa,iBAAiB;AACxD,aAAO;AAAA,QACL,GAAG;AAAA,QACH,uBAAuB;AAAA,UACrB,GAAG,KAAK;AAAA,UACR,CAAC,QAAQ,GAAG,UAAU;AAAA,QACxB;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACA,MAAI,cAAc,UAAU;AAC1B,WAAO;AAAA,MACL,GAAG;AAAA,MACH,QAAQ,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,IAAI,QAAQ;AAAA,IACxE;AAAA,EACF;AACA,MAAI,cAAc,uBAAuB;AACvC,WAAO;AAAA,MACL,GAAG;AAAA,MACH,qBAAqB,OAAO,UAAU,YAAY,MAAM,KAAK,EAAE,SAAS,IAAI,QAAQ;AAAA,IACtF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,2BACP,MACA,aACmB;AACnB,MAAI,CAAC,YAAa,QAAO;AACzB,SAAO,OAAO,QAAQ,WAAW,EAAE;AAAA,IACjC,CAAC,SAAS,CAAC,WAAW,KAAK,MAAM,wBAAwB,SAAS,WAAW,KAAK;AAAA,IAClF;AAAA,EACF;AACF;AAEA,SAAS,kBAAkB,OAAkC,UAAkB;AAC7E,QAAM,aAAa,OAAO,UAAU,WAAW,MAAM,KAAK,EAAE,QAAQ,MAAM,EAAE,IAAI;AAChF,MAAI,mBAAmB,KAAK,UAAU,GAAG;AACvC,WAAO,IAAI,WAAW,MAAM,EAAE,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,YAAY;AAAA,EACzF;AACA,MAAI,mBAAmB,KAAK,UAAU,GAAG;AACvC,WAAO,IAAI,UAAU,GAAG,YAAY;AAAA,EACtC;AACA,SAAO,SAAS,YAAY;AAC9B;AAEA,SAAS,SAAS,OAAe;AAC/B,QAAM,aAAa,kBAAkB,OAAO,SAAS,EAAE,QAAQ,KAAK,EAAE;AACtE,SAAO;AAAA,IACL,GAAG,OAAO,SAAS,WAAW,MAAM,GAAG,CAAC,GAAG,EAAE;AAAA,IAC7C,GAAG,OAAO,SAAS,WAAW,MAAM,GAAG,CAAC,GAAG,EAAE;AAAA,IAC7C,GAAG,OAAO,SAAS,WAAW,MAAM,GAAG,CAAC,GAAG,EAAE;AAAA,EAC/C;AACF;AAEA,SAAS,SAAS,KAA0C;AAC1D,QAAM,SAAS,CAAC,UAAkB,MAAM,KAAK,MAAM,KAAK,GAAG,GAAG,GAAG,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG;AAC/F,SAAO,IAAI,OAAO,IAAI,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC,GAAG,YAAY;AACzE;AAEA,SAAS,aAAa,OAAe,KAAa,QAAgB;AAChE,QAAM,OAAO,SAAS,KAAK;AAC3B,QAAM,KAAK,SAAS,GAAG;AACvB,QAAM,SAAS,MAAM,QAAQ,GAAG,CAAC;AACjC,SAAO,SAAS;AAAA,IACd,GAAG,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK;AAAA,IAC9B,GAAG,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK;AAAA,IAC9B,GAAG,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK;AAAA,EAChC,CAAC;AACH;AAEA,SAAS,UAAU,OAAe,OAAe;AAC/C,QAAM,EAAE,GAAG,GAAG,EAAE,IAAI,SAAS,KAAK;AAClC,SAAO,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,MAAM,OAAO,GAAG,CAAC,CAAC;AACrD;AAEA,SAAS,gBAAgB,OAAe;AACtC,QAAM,EAAE,GAAG,GAAG,EAAE,IAAI,SAAS,KAAK;AAClC,QAAM,aAAa,QAAQ,IAAI,QAAQ,IAAI,QAAQ,KAAK;AACxD,SAAO,YAAY,OAAO,yBAAyB,YAAY,yBAAyB;AAC1F;AAEA,SAAS,mBAAmB,SAAgC,aAA0C;AACpG,QAAM,SAAS,kBAAkB,SAAS,cAAc,yBAAyB,MAAM;AACvF,QAAM,kBAAkB,kBAAkB,SAAS,gBAAgB,yBAAyB,eAAe;AAC3G,QAAM,gBAAgB,SAAS,aAAa;AAC5C,QAAM,OAAO,kBAAkB,UAAW,kBAAkB,UAAU,cAAe,SAAS;AAC9F,QAAM,aAAa;AAAA,IACjB,SAAS;AAAA,IACT,SAAS,SAAS,yBAAyB,iBAAiB,yBAAyB;AAAA,EACvF;AACA,QAAM,OAAO,SAAS,SAAS,yBAAyB,WAAW,yBAAyB;AAC5F,QAAM,YAAY,SAAS,SAAS,yBAAyB,gBAAgB,yBAAyB;AACtG,QAAM,UAAU;AAAA,IACd;AAAA,IACA,SAAS,SAAS,yBAAyB,cAAc,yBAAyB;AAAA,IAClF,SAAS,SAAS,OAAO;AAAA,EAC3B;AACA,QAAM,eAAe,aAAa,iBAAiB,YAAY,SAAS,SAAS,OAAO,IAAI;AAC5F,QAAM,gBAAgB,aAAa,QAAQ,YAAY,SAAS,SAAS,OAAO,GAAG;AACnF,QAAM,SAAS,UAAU,SAAS,SAAS,yBAAyB,aAAa,QAAQ,SAAS,SAAS,OAAO,IAAI;AACtH,QAAM,eAAe,UAAU,QAAQ,SAAS,SAAS,OAAO,IAAI;AACpE,QAAM,kBAAkB;AAAA,IACtB;AAAA,IACA,SAAS,SAAS,yBAAyB,YAAY,yBAAyB;AAAA,IAChF,SAAS,SAAS,OAAO;AAAA,EAC3B;AACA,QAAM,YAAY,UAAU,QAAQ,SAAS,SAAS,OAAO,IAAI;AACjE,QAAM,UAAU,UAAU,iBAAiB,SAAS,SAAS,OAAO,GAAG;AACvE,QAAM,YAAY,SAAS,SAAS,YAAY;AAEhD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,gBAAgB,gBAAgB,MAAM;AAAA,IACtC;AAAA,IACA;AAAA,IACA,gBAAgB;AAAA,4CACwB,UAAU,QAAQ,SAAS,SAAS,MAAM,IAAI,CAAC;AAAA,gDAC3C,UAAU,iBAAiB,SAAS,SAAS,OAAO,IAAI,CAAC;AAAA,gCACzE,UAAU,QAAQ,eAAe;AAAA;AAAA,IAE7D;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ,SAAS,SACb,eAAe,UAAU,yBAAyB,WAAW,IAAI,CAAC,KAClE,eAAe,UAAU,QAAQ,IAAI,CAAC;AAAA,IAC1C,cAAc,eAAe,UAAU,QAAQ,SAAS,SAAS,MAAM,IAAI,CAAC;AAAA,IAC5E,gBAAgB,2BAA2B,SAAS,QAAQ,OAAO;AAAA,IACnE,WAAW,SAAS,SAAS,YAAY;AAAA,IACzC,aAAa;AAAA,IACb,cAAc,UAAU,WAAW,SAAS,SAAS,OAAO,IAAI;AAAA,IAChE,oBAAoB,UAAU,WAAW,SAAS,SAAS,MAAM,IAAI;AAAA,IACrE,WAAW,UAAU,WAAW,SAAS,SAAS,OAAO,IAAI;AAAA,EAC/D;AACF;AAEA,SAAS,wBAAwB,aAAiC,UAAmB,WAAW,OAA4B;AAC1H,MAAI,UAAU;AACZ,WAAO;AAAA,MACL,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,aAAa;AAAA,IACf;AAAA,EACF;AAEA,SAAO;AAAA,IACL,YAAY,yBAAyB;AAAA,IACrC,OAAO,yBAAyB;AAAA,IAChC,aAAa,WAAW,YAAY,cAAc,UAAU,yBAAyB,WAAW,IAAI;AAAA,IACpG,WAAW,WAAW,aAAa,YAAY,SAAS,KAAK;AAAA,EAC/D;AACF;AAEA,SAAS,4BAA4B,aAAsD;AACzF,SAAO;AAAA,IACL,OAAO,YAAY;AAAA,IACnB,YAAY;AAAA,EACd;AACF;AAEA,SAAS,uBAAuB,OAAgB,eAAmE;AACjH,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO,MAAM,IAAI,CAAC,UAAU,OAAO,KAAK,CAAC,EAAE,KAAK,IAAI;AAC9E,MAAI,OAAO,UAAU,WAAW;AAC9B,QAAI,cAAe,QAAO,QAAQ,cAAc,YAAY,cAAc;AAC1E,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACA,MAAI,SAAS,KAAM,QAAO;AAC1B,SAAO,OAAO,KAAK;AACrB;AAEA,SAAS,qBAAqB;AAC5B,QAAM,CAAC,aAAa,cAAc,IAAI,MAAM,SAAS,KAAK;AAE1D,QAAM,UAAU,MAAM;AACpB,QAAI,OAAO,WAAW,eAAe,OAAO,OAAO,eAAe,WAAY;AAC9E,UAAM,aAAa,OAAO,WAAW,8BAA8B;AACnE,UAAM,mBAAmB,MAAM,eAAe,WAAW,OAAO;AAChE,qBAAiB;AACjB,QAAI,OAAO,WAAW,qBAAqB,YAAY;AACrD,iBAAW,iBAAiB,UAAU,gBAAgB;AACtD,aAAO,MAAM,WAAW,oBAAoB,UAAU,gBAAgB;AAAA,IACxE;AACA,eAAW,YAAY,gBAAgB;AACvC,WAAO,MAAM,WAAW,eAAe,gBAAgB;AAAA,EACzD,GAAG,CAAC,CAAC;AAEL,SAAO;AACT;AAEA,SAAS,4BAA4B;AACnC,MAAI,OAAO,aAAa,YAAa,QAAO;AAE5C,SAAO,SAAS,OACb,MAAM,GAAG,EACT,KAAK,CAAC,SAAS,KAAK,KAAK,EAAE,WAAW,SAAS,CAAC;AACrD;AAEA,eAAe,wBAAwB,QAAgB;AACrD,QAAM,WAAW,MAAM,MAAM,oBAAoB;AAAA,IAC/C,QAAQ;AAAA,IACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,IAC9C,MAAM,KAAK,UAAU,EAAE,OAAO,CAAC;AAAA,EACjC,CAAC;AAED,SAAO,SAAS;AAClB;AAEA,SAAS,gBAAgB,aAAiC,UAAmD,WAAgC;AAC3I,MAAI,YAAY,QAAQ;AACtB,WAAO;AAAA,MACL,YAAY,YAAY;AAAA,MACxB,aAAa,YAAY;AAAA,MACzB,WAAW,YAAY;AAAA,MACvB,OAAO,YAAY;AAAA,IACrB;AAAA,EACF;AACA,MAAI,YAAY,UAAU;AACxB,WAAO;AAAA,MACL,YAAY,2BAA2B,YAAY,MAAM,QAAQ,aAAa,YAAY,QAAQ,YAAY,iBAAiB,GAAG,CAAC;AAAA,MACnI,aAAa,UAAU,YAAY,gBAAgB,IAAI;AAAA,MACvD,WAAW,YAAY;AAAA,MACvB,OAAO,YAAY;AAAA,IACrB;AAAA,EACF;AACA,SAAO;AAAA,IACL,YAAY,YAAY,UAAU,YAAY,eAAe,YAAY;AAAA,IACzE,aAAa,YAAY,UAAU,YAAY,eAAe,YAAY;AAAA,IAC1E,WAAW,YAAY;AAAA,IACvB,OAAO,YAAY;AAAA,EACrB;AACF;AAEA,SAAS,iBAAiB,aAAiC,UAA+B,SAA8B;AACtH,MAAI,YAAY,WAAW;AACzB,WAAO;AAAA,MACL,aAAa,YAAY;AAAA,MACzB,OAAO,YAAY;AAAA,MACnB,YAAY,UAAU,YAAY,SAAS,IAAI;AAAA,IACjD;AAAA,EACF;AACA,SAAO;AAAA,IACL,YAAY,YAAY;AAAA,IACxB,OAAO,YAAY;AAAA,IACnB,WAAW,YAAY;AAAA,EACzB;AACF;AAEA,MAAM,2BAA2B;AAE1B,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAwB;AACtB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO,EAAE,YAAY,YAAY,gBAAgB,OAAO,YAAY,KAAK;AAAA,MAEzE;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,eAAY;AAAA,YACZ,WAAU;AAAA,YACV,OAAO,EAAE,YAAY,UAAU,YAAY,QAAQ,IAAI,EAAE;AAAA;AAAA,QAC3D;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,eAAY;AAAA,YACZ,WAAU;AAAA,YACV,OAAO,EAAE,YAAY,UAAU,YAAY,iBAAiB,IAAI,EAAE;AAAA;AAAA,QACpE;AAAA,QAEA,qBAAC,SAAI,WAAU,wCACZ;AAAA;AAAA,UACD,qBAAC,SAAI,WAAU,iFACb;AAAA,gCAAC,SAAI,WAAU,aAAa,sBAAW;AAAA,YACvC,oBAAC,SAAI,WAAU,gCAAgC,uBAAY;AAAA,aAC7D;AAAA,UACC;AAAA,WACH;AAAA;AAAA;AAAA,EACF;AAEJ;AAEO,SAAS,cAAc,EAAE,SAAS,SAAS,YAAY,GAAuB;AACnF,QAAM,IAAI,KAAK;AACf,QAAM,kBAAkB,QAAQ,kBAAkB,QAAQ,WAAW;AAErE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO,gBAAgB,aAAa,MAAM;AAAA,MAE1C;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,eAAY;AAAA,YACZ,WAAU;AAAA,YACV,OAAO,EAAE,YAAY,UAAU,YAAY,iBAAiB,IAAI,EAAE;AAAA;AAAA,QACpE;AAAA,QACA,oBAAC,SAAI,WAAU,gCACb,+BAAC,SAAI,WAAU,aACb;AAAA,+BAAC,SAAI,WAAU,qCACb;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,OAAO;AAAA,kBACL,YAAY,UAAU,YAAY,QAAQ,IAAI;AAAA,kBAC9C,OAAO,YAAY;AAAA,gBACrB;AAAA,gBAEC,YAAE,kCAAkC,iBAAiB;AAAA;AAAA,YACxD;AAAA,YACC,UACC;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,OAAO;AAAA,kBACL,YAAY,UAAU,YAAY,iBAAiB,IAAI;AAAA,kBACvD,OAAO,YAAY;AAAA,gBACrB;AAAA,gBAEC,YAAE,mCAAmC,SAAS;AAAA;AAAA,YACjD,IACE;AAAA,aACN;AAAA,UAEC,kBACC;AAAA,YAAC;AAAA;AAAA,cACC,KAAK;AAAA,cACL,KAAK,QAAQ,SAAS,QAAQ;AAAA,cAC9B,WAAU;AAAA;AAAA,UACZ,IACE;AAAA,UAEJ,qBAAC,SAAI,WAAU,aACb;AAAA,gCAAC,QAAG,WAAU,+DACX,kBAAQ,SAAS,QAAQ,MAC5B;AAAA,YACC,QAAQ,WACP,oBAAC,OAAE,WAAU,iCAAgC,OAAO,EAAE,OAAO,YAAY,UAAU,GAChF,kBAAQ,UACX,IACE;AAAA,aACN;AAAA,WACF,GACF;AAAA;AAAA;AAAA,EACF;AAEJ;AAEO,SAAS,mBAAmB,EAAE,SAAS,oBAAoB,YAAY,GAA4B;AACxG,QAAM,IAAI,KAAK;AACf,QAAM,iBAAiB,QAAQ,QAAQ,WAAW;AAClD,QAAM,gBAAgB,mBAAmB,OAAO,CAAC,UAAU;AACzD,UAAM,iBAAiB,uBAAuB,MAAM,OAAO;AAAA,MACzD,WAAW,EAAE,uCAAuC,KAAK;AAAA,MACzD,YAAY,EAAE,wCAAwC,IAAI;AAAA,IAC5D,CAAC;AACD,WAAO,eAAe,KAAK,EAAE,SAAS;AAAA,EACxC,CAAC;AAED,MAAI,CAAC,kBAAkB,cAAc,WAAW,EAAG,QAAO;AAE1D,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO,gBAAgB,aAAa,SAAS;AAAA,MAE5C;AAAA,yBACC,qBAAC,SAAI,WAAU,aACb;AAAA,8BAAC,SAAI,WAAU,yDAAwD,OAAO,EAAE,OAAO,YAAY,UAAU,GAC1G,YAAE,uCAAuC,gBAAgB,GAC5D;AAAA,UACA,oBAAC,SAAI,WAAU,6BACb,8BAAC,mBAAgB,MAAM,QAAQ,eAAe,IAAI,QAAO,YAAW,GACtE;AAAA,WACF,IACE;AAAA,QAEH,cAAc,SAAS,IACtB,qBAAC,SAAI,WAAU,aACb;AAAA,+BAAC,SAAI,WAAU,aACb;AAAA,gCAAC,QAAG,WAAU,yBAAyB,YAAE,4CAA4C,iBAAiB,GAAE;AAAA,YACxG,oBAAC,OAAE,WAAU,WAAU,OAAO,EAAE,OAAO,YAAY,UAAU,GAC1D,YAAE,wCAAwC,4DAA4D,GACzG;AAAA,aACF;AAAA,UACA,oBAAC,SAAI,WAAU,6BACZ,wBAAc,IAAI,CAAC,UAAU;AAC5B,kBAAM,iBAAiB,uBAAuB,MAAM,OAAO;AAAA,cACzD,WAAW,EAAE,uCAAuC,KAAK;AAAA,cACzD,YAAY,EAAE,wCAAwC,IAAI;AAAA,YAC5D,CAAC;AACD,kBAAM,cAAc,MAAM,SAAS,eAAe,eAAe,SAAS,IAAI;AAE9E,mBACE;AAAA,cAAC;AAAA;AAAA,gBAEC,WAAW,cAAc,wCAAwC;AAAA,gBACjE,OAAO;AAAA,kBACL,YAAY,UAAU,YAAY,iBAAiB,IAAI;AAAA,kBACvD,aAAa,YAAY;AAAA,gBAC3B;AAAA,gBAEA;AAAA,sCAAC,SAAI,WAAU,uBAAuB,gBAAM,SAAS,MAAM,KAAI;AAAA,kBAC/D;AAAA,oBAAC;AAAA;AAAA,sBACC,WAAW,cAAc,qCAAqC;AAAA,sBAC9D,OAAO,EAAE,OAAO,YAAY,UAAU;AAAA,sBAErC;AAAA;AAAA,kBACH;AAAA;AAAA;AAAA,cAbK,MAAM;AAAA,YAcb;AAAA,UAEJ,CAAC,GACH;AAAA,WACF,IACE;AAAA;AAAA;AAAA,EACN;AAEJ;AAEO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA6B;AAC3B,QAAM,IAAI,KAAK;AAEf,OAAK,QAAQ,sBAAsB,UAAU,OAAO,KAAK,QAAQ,2BAA2B,OAAO;AACjG,WAAO;AAAA,EACT;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO,gBAAgB,aAAa,SAAS;AAAA,MAE7C;AAAA,6BAAC,SAAI,WAAU,aACb;AAAA,8BAAC,QAAG,WAAU,yBAAyB,YAAE,6CAA6C,kBAAkB,GAAE;AAAA,UAC1G,oBAAC,OAAE,WAAU,WAAU,OAAO,EAAE,OAAO,YAAY,UAAU,GAC1D,YAAE,yCAAyC,uDAAuD,GACrG;AAAA,WACF;AAAA,QAEA,oBAAC,SAAI,WAAU,6BACX,mBAAQ,wBAAwB,CAAC,GAAG,IAAI,CAAC,UAAU;AACnD,gBAAM,YAAY,gBAAgB,MAAM,GAAG;AAC3C,gBAAM,aAAa,YAAY,SAAS;AACxC,gBAAM,QAAQ,aAAa,MAAM,GAAG;AACpC,gBAAM,iBAAiB,MAAM,SAAS,cAAc,4BAA4B;AAChF,gBAAM,eAAe,qCAAqC,KAAK;AAC/D,gBAAM,UAAU,qBAAqB,MAAM,GAAG;AAC9C,gBAAM,eAAe,GAAG,OAAO;AAE/B,iBACE,qBAAC,SAAoB,WAAW,gBAC7B;AAAA,kBAAM,SAAS,YACd;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,OAAO;AAAA,kBACL,YAAY,aACR,YAAY,eACZ,UAAU,YAAY,iBAAiB,IAAI;AAAA,kBAC/C,aAAa,aAAa,YAAY,cAAc,YAAY;AAAA,kBAChE,WAAW,aAAa,aAAa,YAAY,SAAS,KAAK;AAAA,gBACjE;AAAA,gBAEA;AAAA;AAAA,oBAAC;AAAA;AAAA,sBACC,SAAS,UAAU;AAAA,sBACnB,UAAU;AAAA,sBACV,iBAAe,MAAM,WAAW,OAAO;AAAA,sBACvC,gBAAc,aAAa,OAAO;AAAA,sBAClC,oBAAkB,aAAa,eAAe;AAAA,sBAC9C,iBAAiB,CAAC,YAAY,cAAc,MAAM,KAAK,YAAY,IAAI;AAAA;AAAA,kBACzE;AAAA,kBACA,qBAAC,UAAK,WAAU,aACd;AAAA,yCAAC,UAAK,WAAU,eACb;AAAA,4BAAM;AAAA,sBACN,MAAM,WAAW,OAAO;AAAA,uBAC3B;AAAA,oBACC,MAAM,cACL,oBAAC,UAAK,WAAU,SAAQ,OAAO,EAAE,OAAO,YAAY,UAAU,GAC3D,gBAAM,aACT,IACE;AAAA,qBACN;AAAA;AAAA;AAAA,YACF,IAEA,iCACE;AAAA,mCAAC,WAAM,SAAS,SAAS,WAAU,uBAChC;AAAA,sBAAM;AAAA,gBACN,MAAM,WAAW,OAAO;AAAA,iBAC3B;AAAA,cACC,MAAM,SAAS,cACd;AAAA,gBAAC;AAAA;AAAA,kBACC,IAAI;AAAA,kBACJ,WAAW;AAAA,kBACX,OAAO,OAAO,UAAU,WAAW,QAAQ;AAAA,kBAC3C,UAAU;AAAA,kBACV,UAAU,CAAC,UAAU,cAAc,MAAM,KAAK,MAAM,OAAO,KAAK;AAAA,kBAChE,aAAa,MAAM,eAAe;AAAA,kBAClC,iBAAe,MAAM,WAAW,OAAO;AAAA,kBACvC,gBAAc,aAAa,OAAO;AAAA,kBAClC,oBAAkB,aAAa,eAAe;AAAA,kBAC9C,OAAO,wBAAwB,aAAa,QAAQ,UAAU,GAAG,YAAY;AAAA;AAAA,cAC/E,IACE,MAAM,SAAS,YAAY,MAAM,SAAS,UAC5C;AAAA,gBAAC;AAAA;AAAA,kBACC,OAAO,OAAO,UAAU,YAAY,MAAM,SAAS,IAAI,QAAQ;AAAA,kBAC/D,UAAU;AAAA,kBACV,eAAe,CAAC,cAAc;AAC5B,kCAAc,MAAM,KAAK,cAAc,8BAA8B,KAAK,SAAS;AAAA,kBACrF;AAAA,kBAEA;AAAA;AAAA,sBAAC;AAAA;AAAA,wBACC,IAAI;AAAA,wBACJ,WAAW,cAAc,wBAAwB;AAAA,wBACjD,iBAAe,MAAM,WAAW,OAAO;AAAA,wBACvC,gBAAc,QAAQ,UAAU;AAAA,wBAChC,oBAAkB,aAAa,eAAe;AAAA,wBAC9C,OAAO,wBAAwB,aAAa,QAAQ,UAAU,GAAG,YAAY;AAAA,wBAE7E,8BAAC,eAAY,aAAa,EAAE,6CAA6C,WAAW,GAAG;AAAA;AAAA,oBACzF;AAAA,oBACA,qBAAC,iBACC;AAAA,0CAAC,cAAW,OAAO,6BAChB,YAAE,6CAA6C,WAAW,GAC7D;AAAA,uBACE,MAAM,WAAW,CAAC,GAAG,IAAI,CAAC,WAC1B,oBAAC,cAA8B,OAAO,OAAO,OAAQ,iBAAO,SAA3C,OAAO,KAA0C,CACnE;AAAA,uBACH;AAAA;AAAA;AAAA,cACF,IAEA;AAAA,gBAAC;AAAA;AAAA,kBACC,IAAI;AAAA,kBACJ,WAAW;AAAA,kBACX,MAAM,iBAAiB,UAAU,UAAU,iBAAiB,UAAU,QAAQ;AAAA,kBAC9E,OAAO,OAAO,UAAU,WAAW,QAAQ;AAAA,kBAC3C,UAAU;AAAA,kBACV,UAAU,CAAC,UAAU,cAAc,MAAM,KAAK,MAAM,OAAO,KAAK;AAAA,kBAChE,aAAa,MAAM,eAAe;AAAA,kBAClC,cAAc,iBAAiB,UAAU,UAAU,iBAAiB,UAAU,QAAQ;AAAA,kBACtF,iBAAe,MAAM,WAAW,OAAO;AAAA,kBACvC,gBAAc,aAAa,OAAO;AAAA,kBAClC,oBAAkB,aAAa,eAAe;AAAA,kBAC9C,OAAO,wBAAwB,aAAa,QAAQ,UAAU,GAAG,YAAY;AAAA;AAAA,cAC/E;AAAA,eAEJ;AAAA,YAED,aACC,oBAAC,OAAE,IAAI,cAAc,WAAU,WAAU,OAAO,4BAA4B,WAAW,GACpF,qCAA2B,YAAY,SAAS,GACnD,IACE;AAAA,eApGI,MAAM,GAqGhB;AAAA,QAEJ,CAAC,GACH;AAAA;AAAA;AAAA,EACF;AAEJ;AAEO,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAwB;AACtB,QAAM,IAAI,KAAK;AAEf,SACE,qBAAC,aAAQ,WAAU,aACjB;AAAA,yBAAC,SAAI,WAAU,aACb;AAAA,0BAAC,SAAI,WAAU,yDAAwD,OAAO,EAAE,OAAO,YAAY,UAAU,GAC1G,YAAE,mCAAmC,eAAe,GACvD;AAAA,MACA,oBAAC,QAAG,WAAU,yBAAyB,YAAE,kCAAkC,4BAA4B,GAAE;AAAA,OAC3G;AAAA,IAEC,QAAQ,gBAAgB,UACvB,qBAAC,SAAI,WAAU,yBAAwB,OAAO,gBAAgB,aAAa,SAAS,GACjF;AAAA,aAAO,QAAQ,6BAA6B,WAC3C,oBAAC,SAAI,WAAU,wBAAuB,OAAO,EAAE,OAAO,YAAY,UAAU,GACzE,uBAAa,QAAQ,0BAA0B,QAAQ,sBAAsB,GAChF,IACE;AAAA,MACJ,oBAAC,SAAI,WAAU,+BACZ,uBAAa,QAAQ,kBAAkB,QAAQ,sBAAsB,GACxE;AAAA,OACF,IACE;AAAA,IAEH,QAAQ,gBAAgB,kBACvB,qBAAC,SAAI,WAAU,mCAAkC,OAAO,gBAAgB,aAAa,SAAS,GAC5F;AAAA,0BAAC,WAAM,WAAU,uBAAuB,YAAE,wCAAwC,QAAQ,GAAE;AAAA,MAC5F;AAAA,QAAC;AAAA;AAAA,UACC,WAAW;AAAA,UACX,MAAK;AAAA,UACL,OAAO,UAAU;AAAA,UACjB,UAAU;AAAA,UACV,UAAU,CAAC,UAAU,eAAe,MAAM,OAAO,KAAK;AAAA,UACtD,aAAa;AAAA,YACX,QAAQ,mBAAmB,OAAO,aAAa,QAAQ,iBAAiB,QAAQ,wBAAwB,IAAI;AAAA,YAC5G,QAAQ,mBAAmB,OAAO,aAAa,QAAQ,iBAAiB,QAAQ,wBAAwB,IAAI;AAAA,UAC9G,EAAE,OAAO,OAAO,EAAE,KAAK,KAAK;AAAA,UAC5B,OAAO,wBAAwB,aAAa,QAAQ,YAAY,MAAM,GAAG,YAAY;AAAA;AAAA,MACvF;AAAA,MACC,YAAY,SACX,oBAAC,OAAE,WAAU,WAAU,OAAO,4BAA4B,WAAW,GAClE,qCAA2B,YAAY,QAAQ,QAAQ,GAC1D,IACE;AAAA,OACN,IACE;AAAA,IAEH,QAAQ,gBAAgB,eACvB,iCACE;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAO,uBAAuB;AAAA,UAC9B,UAAU;AAAA,UACV,eAAe,CAAC,WAAW;AACzB,kBAAM,QAAQ,QAAQ,kBAAkB,CAAC,GAAG,KAAK,CAAC,cAAc,UAAU,OAAO,MAAM;AACvF,gBAAI,KAAM,mBAAkB,IAAI;AAAA,UAClC;AAAA,UAEE,mBAAQ,kBAAkB,CAAC,GAAG,IAAI,CAAC,SACnC;AAAA,YAAC;AAAA;AAAA,cAEC,WAAU;AAAA,cACV,OAAO;AAAA,gBACL,YAAY,wBAAwB,KAAK,KACrC,UAAU,YAAY,QAAQ,IAAI,IAClC,UAAU,YAAY,iBAAiB,IAAI;AAAA,gBAC/C,aAAa,wBAAwB,KAAK,KACtC,YAAY,eACZ,YAAY;AAAA,cAClB;AAAA,cAEA;AAAA,qCAAC,UAAK,WAAU,2BACd;AAAA;AAAA,oBAAC;AAAA;AAAA,sBACC,OAAO,KAAK;AAAA,sBACZ,UAAU;AAAA;AAAA,kBACZ;AAAA,kBACA,oBAAC,UAAK,WAAU,eAAe,eAAK,aAAY;AAAA,mBAClD;AAAA,gBACA,oBAAC,UAAK,WAAU,mCAAmC,uBAAa,KAAK,QAAQ,KAAK,YAAY,GAAE;AAAA;AAAA;AAAA,YAlB3F,KAAK;AAAA,UAmBZ,CACD;AAAA;AAAA,MACH;AAAA,MACC,YAAY,sBACX,oBAAC,OAAE,WAAU,WAAU,OAAO,4BAA4B,WAAW,GAClE,qCAA2B,YAAY,qBAAqB,qBAAqB,GACpF,IACE;AAAA,OACN,IACE;AAAA,KACN;AAEJ;AAEO,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAwB;AACtB,QAAM,IAAI,KAAK;AACf,QAAM,cAAc,kBAAkB,QAAQ,eAC1C,aAAa,gBAAgB,YAAY,IACzC,EAAE,8CAA8C,kBAAkB;AAEtE,SACE,oBAAC,aAAQ,WAAU,yBAAwB,OAAO,gBAAgB,aAAa,QAAQ,GACrF,+BAAC,SAAI,WAAU,0CACb;AAAA,yBAAC,SACC;AAAA,0BAAC,SAAI,WAAU,yEACZ,YAAE,sCAAsC,YAAY,GACvD;AAAA,MACA,oBAAC,SAAI,WAAU,+BAA+B,uBAAY;AAAA,OAC5D;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,YAAY,UAAU,YAAY,gBAAgB,IAAI,EAAE;AAAA,QAEhE,oBACG,EAAE,yCAAyC,SAAS,IACpD,EAAE,sCAAsC,MAAM;AAAA;AAAA,IACpD;AAAA,KACF,GACF;AAEJ;AAEO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA6B;AAC3B,QAAM,IAAI,KAAK;AACf,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,MAAM,SAA2C,IAAI;AACjG,QAAM,WAAW,QAAQ,QAAQ,gBAAgB,OAAO,QAAQ;AAChE,QAAM,mBAAmB,QAAQ,QAAQ,gBAAgB,eAAe,QAAQ;AAChF,QAAM,wBAAwB,iBAAiB,QAAQ,iBAAiB,cAAc,IAAI;AAE1F,MAAI,CAAC,YAAY,CAAC,iBAAkB,QAAO;AAE3C,SACE,iCACE;AAAA,yBAAC,aAAQ,WAAU,mCAAkC,OAAO,gBAAgB,aAAa,SAAS,GAChG;AAAA,2BAAC,SAAI,WAAU,aACb;AAAA,4BAAC,QAAG,WAAU,2BAA2B,YAAE,mCAAmC,qBAAqB,GAAE;AAAA,QACrG,oBAAC,OAAE,WAAU,WAAU,OAAO,EAAE,OAAO,YAAY,UAAU,GAC1D,YAAE,+BAA+B,yEAAyE,GAC7G;AAAA,SACF;AAAA,MAEC,WACC,qBAAC,SAAI,WAAU,aACb;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO;AAAA,cACL,YAAY,UAAU,YAAY,iBAAiB,IAAI;AAAA,cACvD,aAAa,YAAY,6BAA6B,IAAI,YAAY,cAAc,YAAY;AAAA,YAClG;AAAA,YAEA,+BAAC,WAAM,WAAU,kCACf;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,SAAS,sBAAsB,UAAU;AAAA,kBACzC,UAAU;AAAA,kBACV,iBAAiB,CAAC,YAAY,gBAAgB,SAAS,YAAY,IAAI;AAAA;AAAA,cACzE;AAAA,cACA,qBAAC,UAAK,WAAU,aACd;AAAA,oCAAC,UAAK,WAAU,SACb;AAAA,kBACC;AAAA,kBACA;AAAA,kBACA;AAAA,oBACE,UAAU,QAAQ,gBAAgB,OAAO,SAAS,EAAE,4CAA4C,0BAA0B;AAAA,kBAC5H;AAAA,gBACF,GACF;AAAA,gBACA;AAAA,kBAAC;AAAA;AAAA,oBACC,MAAK;AAAA,oBACL,SAAQ;AAAA,oBACR,WAAU;AAAA,oBACV,OAAO,EAAE,OAAO,YAAY,KAAK;AAAA,oBACjC,SAAS,MAAM,kBAAkB,OAAO;AAAA,oBAEvC,YAAE,uCAAuC,eAAe;AAAA;AAAA,gBAC3D;AAAA,iBACF;AAAA,eACF;AAAA;AAAA,QACF;AAAA,QACC,YAAY,6BAA6B,IACxC,oBAAC,OAAE,WAAU,WAAU,OAAO,4BAA4B,WAAW,GAClE,qCAA2B,YAAY,6BAA6B,GAAG,6BAA6B,GACvG,IACE;AAAA,SACN,IACE;AAAA,MAEH,mBACC,qBAAC,SAAI,WAAU,aACb;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO;AAAA,cACL,YAAY,UAAU,YAAY,iBAAiB,IAAI;AAAA,cACvD,aAAa,YAAY,qCAAqC,IAAI,YAAY,cAAc,YAAY;AAAA,YAC1G;AAAA,YAEA,+BAAC,WAAM,WAAU,kCACf;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,SAAS,sBAAsB,kBAAkB;AAAA,kBACjD,UAAU;AAAA,kBACV,iBAAiB,CAAC,YAAY,gBAAgB,iBAAiB,YAAY,IAAI;AAAA;AAAA,cACjF;AAAA,cACA,qBAAC,UAAK,WAAU,aACd;AAAA,oCAAC,UAAK,WAAU,SACb;AAAA,kBACC;AAAA,kBACA;AAAA,kBACA;AAAA,oBACE,UAAU,QAAQ,gBAAgB,eAAe,SAAS,EAAE,8CAA8C,oBAAoB;AAAA,kBAChI;AAAA,gBACF,GACF;AAAA,gBACA;AAAA,kBAAC;AAAA;AAAA,oBACC,MAAK;AAAA,oBACL,SAAQ;AAAA,oBACR,WAAU;AAAA,oBACV,OAAO,EAAE,OAAO,YAAY,KAAK;AAAA,oBACjC,SAAS,MAAM,kBAAkB,eAAe;AAAA,oBAE/C,YAAE,uCAAuC,eAAe;AAAA;AAAA,gBAC3D;AAAA,iBACF;AAAA,eACF;AAAA;AAAA,QACF;AAAA,QACC,YAAY,qCAAqC,IAChD,oBAAC,OAAE,WAAU,WAAU,OAAO,4BAA4B,WAAW,GAClE,qCAA2B,YAAY,qCAAqC,GAAG,qCAAqC,GACvH,IACE;AAAA,SACN,IACE;AAAA,OACN;AAAA,IAEA,oBAAC,UAAO,MAAM,mBAAmB,MAAM,cAAc,CAAC,SAAS;AAAE,UAAI,CAAC,KAAM,mBAAkB,IAAI;AAAA,IAAE,GAClG,+BAAC,iBAAc,WAAU,6CACvB;AAAA,0BAAC,gBACC,8BAAC,eACE,iCAAuB,UAClB,mBAAmB,kBACnB,EAAE,8CAA8C,oBAAoB,IACpE,EAAE,4CAA4C,0BAA0B,IAChF,GACF;AAAA,MACA,oBAAC,SAAI,WAAU,wBACb,8BAAC,SAAI,WAAU,6BACb,8BAAC,mBAAgB,MAAM,uBAAuB,YAAY,IAAI,QAAO,YAAW,GAClF,GACF;AAAA,OACF,GACF;AAAA,KACF;AAEJ;AAEO,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA4B;AAC1B,QAAM,IAAI,KAAK;AACf,QAAM,yBAAyB,gBAAgB,SAAS,aAAa,iBAAiB;AAEtF,SACE,qBAAC,aAAQ,WAAU,aAChB;AAAA,sBACC,oBAAC,SAAM,QAAO,SAAQ,OAAM,WAAU,MAAK,WACzC,8BAAC,oBAAkB,2BAAgB,GACrC,IACE;AAAA,IAEJ,oBAAC,iBAAc,QAAQ,gBAAgB,MAAM,oBAAoB,QAAQ,SAAS,kBAAkB;AAAA,IACnG,0BAA0B,mBACzB,iCACE;AAAA,0BAAC,iBAAc,QAAQ,gBAAgB,MAAM,sBAAsB,QAAQ,SAAS,kBAAkB;AAAA,MACrG,MAAM,cAAc,kBAAkB;AAAA,QACrC,aAAa,uBAAuB,eAAe;AAAA,QACnD,eAAe,uBAAuB;AAAA,QACtC,sBAAsB,uBAAuB;AAAA,QAC7C,SAAS;AAAA,QACT,UAAU;AAAA,QACV;AAAA,QACA;AAAA,MACF,CAAC;AAAA,MACD,oBAAC,iBAAc,QAAQ,gBAAgB,MAAM,qBAAqB,QAAQ,SAAS,kBAAkB;AAAA,OACvG,IAEA,iCACE;AAAA,0BAAC,iBAAc,QAAQ,gBAAgB,MAAM,qBAAqB,QAAQ,SAAS,kBAAkB;AAAA,MACrG;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAU;AAAA,UACV,UAAU,WAAW;AAAA,UACrB,OAAO,iBAAiB,WAAW;AAAA,UACnC,SAAS,MAAM;AAAE,iBAAK,SAAS;AAAA,UAAE;AAAA,UAEjC,+BAAC,UAAK,WAAU,0CACb;AAAA,2BAAe,oBAAC,WAAQ,MAAK,MAAK,IAAK;AAAA,YACvC,UACG,EAAE,4CAA4C,cAAc,IAC5D,eACE,EAAE,8CAA8C,uBAAuB,IACvE,EAAE,mCAAmC,SAAS;AAAA,aACtD;AAAA;AAAA,MACF;AAAA,MACA,oBAAC,iBAAc,QAAQ,gBAAgB,MAAM,oBAAoB,QAAQ,SAAS,kBAAkB;AAAA,OACtG;AAAA,IAEF,oBAAC,iBAAc,QAAQ,gBAAgB,MAAM,mBAAmB,QAAQ,SAAS,kBAAkB;AAAA,IAElG,iBACC;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAQ;AAAA,QACR,WAAU;AAAA,QACV,OAAO,iBAAiB,aAAa,SAAS;AAAA,QAC9C,SAAS;AAAA,QAER,YAAE,wCAAwC,cAAc;AAAA;AAAA,IAC3D,IACE;AAAA,IAEH,QAAQ,qBACP,oBAAC,SAAI,WAAU,uBAAsB,OAAO,EAAE,OAAO,YAAY,UAAU,GACxE,YAAE,yCAAyC,+CAA+C;AAAA,MACzF,UAAU,QAAQ;AAAA,IACpB,CAAC,GACH,IACE;AAAA,IAEJ,oBAAC,SAAI,WAAU,kBAAiB,sBAAoB,MAAM;AAAA,KAC5D;AAEJ;AAEO,SAAS,sBAAsB,EAAE,SAAS,SAAS,aAAa,SAAS,GAA+B;AAC7G,QAAM,IAAI,KAAK;AAEf,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO;AAAA,QACL,GAAG,gBAAgB,aAAa,SAAS;AAAA,QACzC,YAAY,2BAA2B,UAAU,YAAY,SAAS,IAAI,CAAC,QAAQ,UAAU,YAAY,iBAAiB,IAAI,CAAC;AAAA,MACjI;AAAA,MAEA,+BAAC,eAAY,WAAU,wBACrB;AAAA,6BAAC,SAAI,WAAU,aACb;AAAA,+BAAC,SAAI,WAAU,2CACb;AAAA,iCAAC,SACC;AAAA,kCAAC,SAAI,WAAU,yDAAwD,OAAO,EAAE,OAAO,YAAY,UAAU,GAC1G,YAAE,mCAAmC,cAAc,GACtD;AAAA,cACA,oBAAC,QAAG,WAAU,8BAA8B,YAAE,qCAAqC,SAAS,GAAE;AAAA,eAChG;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,OAAO;AAAA,kBACL,YAAY,UAAU,UAAU,YAAY,kBAAkB,YAAY,QAAQ,IAAI;AAAA,kBACtF,OAAO,YAAY;AAAA,gBACrB;AAAA,gBAEC,oBACG,EAAE,yCAAyC,WAAW,IACtD,EAAE,sCAAsC,OAAO;AAAA;AAAA,YACrD;AAAA,aACF;AAAA,UACA,oBAAC,OAAE,WAAU,WAAU,OAAO,EAAE,OAAO,YAAY,UAAU,GAC1D,YAAE,iCAAiC,oFAAoF,GAC1H;AAAA,UACC,QAAQ,qBACP,oBAAC,SAAI,WAAU,uBAAuB,kBAAQ,oBAAmB,IAC/D;AAAA,WACN;AAAA,QACC;AAAA,SACH;AAAA;AAAA,EACF;AAEJ;AAEO,SAAS,YAAY,EAAE,SAAS,SAAS,YAAY,GAAqB;AAC/E,QAAM,IAAI,KAAK;AAEf,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO;AAAA,QACL,YAAY,UAAU,YAAY,iBAAiB,GAAG;AAAA,QACtD,aAAa,YAAY;AAAA,QACzB,OAAO,YAAY;AAAA,MACrB;AAAA,MAEA;AAAA,4BAAC,SAAI,WAAU,eAAc,OAAO,EAAE,OAAO,YAAY,KAAK,GAC3D,oBACG,EAAE,yCAAyC,wCAAwC,IACnF,EAAE,sCAAsC,6DAA6D,GAC3G;AAAA,QACA,oBAAC,SAAI,WAAU,QACZ,kBAAQ,qBACL,EAAE,sCAAsC,yBAAyB,EAAE,UAAU,QAAQ,mBAAmB,CAAC,IACzG,EAAE,0CAA0C,8DAA8D,GAChH;AAAA;AAAA;AAAA,EACF;AAEJ;AAEO,SAAS,cAAc,EAAE,SAAS,YAAY,GAAuB;AAC1E,QAAM,IAAI,KAAK;AACf,QAAM,SAAS,UAAU;AACzB,QAAM,SAAS,UAAU;AACzB,QAAM,WAAW,MAAM,MAAM;AAC7B,QAAM,CAAC,SAAS,eAAe,IAAI,MAAM,cAAc;AAEvD,QAAM,iBAAiB,MAAM,QAAgC,OAAO;AAAA,IAClE,IAAI,EAAE,4BAA4B,SAAS;AAAA,IAC3C,IAAI,EAAE,2BAA2B,QAAQ;AAAA,IACzC,IAAI,EAAE,4BAA4B,YAAS;AAAA,IAC3C,IAAI,EAAE,2BAA2B,SAAS;AAAA,IAC1C,IAAI,EAAE,2BAA2B,oBAAK;AAAA,EACxC,IAAI,CAAC,CAAC,CAAC;AAEP,QAAM,YAAY,MAAM,YAAY,OAAO,eAAuB;AAChE,QAAI,eAAe,OAAQ;AAE3B,QAAI;AACF,YAAM,UAAU,MAAM,wBAAwB,UAAU;AACxD,UAAI,CAAC,QAAS;AAEd,sBAAgB,MAAM,OAAO,QAAQ,CAAC;AAAA,IACxC,QAAQ;AAAA,IAER;AAAA,EACF,GAAG,CAAC,QAAQ,QAAQ,eAAe,CAAC;AAEpC,QAAM,UAAU,MAAM;AACpB,QAAI,0BAA0B,KAAK,OAAO,cAAc,YAAa;AAErE,UAAM,kBAAkB,4BAA4B;AAAA,MAClD,GAAI,MAAM,QAAQ,UAAU,SAAS,IAAI,UAAU,YAAY,CAAC;AAAA,MAChE,UAAU;AAAA,IACZ,CAAC;AAED,QAAI,CAAC,gBAAiB;AAEtB,QAAI,SAAS;AAEb,UAAM,YAAY;AAChB,UAAI;AACF,cAAM,UAAU,MAAM,wBAAwB,eAAe;AAC7D,YAAI,CAAC,WAAW,CAAC,UAAU,oBAAoB,OAAQ;AAEvD,wBAAgB,MAAM,OAAO,QAAQ,CAAC;AAAA,MACxC,QAAQ;AAAA,MAER;AAAA,IACF,GAAG;AAEH,WAAO,MAAM;AACX,eAAS;AAAA,IACX;AAAA,EACF,GAAG,CAAC,QAAQ,QAAQ,eAAe,CAAC;AAEpC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO;AAAA,QACL,YAAY,UAAU,YAAY,SAAS,IAAI;AAAA,QAC/C,aAAa,YAAY;AAAA,QACzB,OAAO,YAAY;AAAA,MACrB;AAAA,MAEA,+BAAC,SAAI,WAAU,sEACb;AAAA,6BAAC,SACC;AAAA,8BAAC,SAAI,WAAU,eAAc,OAAO,EAAE,OAAO,YAAY,KAAK,GAAI,kBAAQ,SAAS,QAAQ,MAAK;AAAA,UAChG,oBAAC,SAAK,YAAE,oCAAoC,6CAA6C,GAAE;AAAA,WAC7F;AAAA,QACA,qBAAC,SAAI,WAAU,oDACb;AAAA,+BAAC,SAAI,WAAU,mCAAkC,OAAO,EAAE,OAAO,YAAY,UAAU,GACrF;AAAA,gCAAC,WAAM,SAAS,UAAW,YAAE,mBAAmB,UAAU,GAAE;AAAA,YAC5D;AAAA,cAAC;AAAA;AAAA,gBACC,OAAO;AAAA,gBACP,eAAe,CAAC,eAAe,UAAU,UAAoB;AAAA,gBAC7D,UAAU;AAAA,gBAEV;AAAA;AAAA,oBAAC;AAAA;AAAA,sBACC,IAAI;AAAA,sBACJ,MAAK;AAAA,sBACL,WAAU;AAAA,sBACV,OAAO;AAAA,wBACL,YAAY,UAAU,YAAY,SAAS,IAAI;AAAA,wBAC/C,aAAa,YAAY;AAAA,wBACzB,OAAO,YAAY;AAAA,sBACrB;AAAA,sBAEA,8BAAC,eAAY;AAAA;AAAA,kBACf;AAAA,kBACA,oBAAC,iBACE,kBAAQ,IAAI,CAAC,UACZ,oBAAC,cAAuB,OAAO,OAC5B,yBAAe,KAAK,KADN,KAEjB,CACD,GACH;AAAA;AAAA;AAAA,YACF;AAAA,aACF;AAAA,UACA,oBAAC,SAAI,WAAU,qCACZ,kBAAQ,sBAAsB,EAAE,wCAAwC,wBAAwB,GACnG;AAAA,WACF;AAAA,SACF;AAAA;AAAA,EACF;AAEJ;AAEO,SAAS,QAAQ;AAAA,EACtB,OAAO;AAAA,EACP;AAAA,EACA,iBAAiB;AAAA,EACjB,mBAAmB;AACrB,GAAiB;AACf,QAAM,SAAS,UAA4B;AAC3C,QAAM,SAAS,UAAU;AACzB,QAAM,eAAe,gBAAgB;AACrC,QAAM,IAAI,KAAK;AACf,QAAM,SAAS,UAAU;AACzB,QAAM,cAAc,mBAAmB;AAEvC,QAAM,YAAY,OAAO,QAAQ,SAAS,WAAW,OAAO,OAAO;AACnE,QAAM,OAAO,YAAY;AACzB,QAAM,mBAAmB,aAAa,IAAI,SAAS,MAAM,UAAU,SAAS;AAE5E,QAAM,CAAC,SAAS,UAAU,IAAI,MAAM,SAAgC,cAAc;AAClF,QAAM,CAAC,WAAW,YAAY,IAAI,MAAM,SAAS,kBAAkB,QAAQ,oBAAoB,IAAI;AACnG,QAAM,CAAC,WAAW,YAAY,IAAI,MAAM,SAAwB,gBAAgB;AAChF,QAAM,CAAC,UAAU,WAAW,IAAI,MAAM,SAAS,EAAE;AACjD,QAAM,CAAC,eAAe,gBAAgB,IAAI,MAAM,SAAwB,IAAI;AAC5E,QAAM,CAAC,qBAAqB,sBAAsB,IAAI,MAAM,SAAS,KAAK;AAC1E,QAAM,CAAC,cAAc,eAAe,IAAI,MAAM,SAAkC,CAAC,CAAC;AAClF,QAAM,CAAC,uBAAuB,wBAAwB,IAAI,MAAM,SAAkC,CAAC,CAAC;AACpG,QAAM,CAAC,QAAQ,SAAS,IAAI,MAAM,SAAwB,IAAI;AAC9D,QAAM,CAAC,qBAAqB,sBAAsB,IAAI,MAAM,SAAwB,IAAI;AACxF,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,MAAM,SAAwB,IAAI;AAChF,QAAM,CAAC,aAAa,cAAc,IAAI,MAAM,SAAsB,CAAC,CAAC;AACpE,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,MAAM,SAA2C,IAAI;AACjG,QAAM,CAAC,qBAAqB,sBAAsB,IAAI,MAAM,SAAwB,IAAI;AACxF,QAAM,CAAC,cAAc,eAAe,IAAI,MAAM,SAAS,KAAK;AAE5D,QAAM,cAAc,MAAM;AAAA,IACxB,MAAM,mBAAmB,SAAS,WAAW;AAAA,IAC7C,CAAC,SAAS,WAAW;AAAA,EACvB;AAEA,QAAM,cAAc,MAAM,YAAY,YAAY;AAChD,QAAI,CAAC,KAAM;AACX,iBAAa,IAAI;AACjB,iBAAa,IAAI;AACjB,UAAM,WAAW,SAAS,aACtB,2BAA2B,mBAAmB,IAAI,CAAC,aACnD,qBAAqB,mBAAmB,IAAI,CAAC,GAAG,mBAAmB,kBAAkB,EAAE;AAE3F,QAAI;AACF,YAAM,SAAS,MAAM,qBAAqC,QAAQ;AAClE,iBAAW,MAAM;AACjB,wBAAkB,IAAI;AACtB,6BAAuB,IAAI;AAC3B,UAAI,OAAO,gBAAgB,WAAW,OAAO,OAAO,qBAAqB,UAAU;AACjF,kBAAU,OAAO,gBAAgB;AAAA,MACnC;AAAA,IACF,SAAS,OAAO;AACd,iBAAW,IAAI;AACf,mBAAa,iBAAiB,OAAO,EAAE,uCAAuC,uDAAuD,CAAC,CAAC;AAAA,IACzI,UAAE;AACA,mBAAa,KAAK;AAAA,IACpB;AAAA,EACF,GAAG,CAAC,MAAM,kBAAkB,MAAM,CAAC,CAAC;AAEpC,QAAM,UAAU,MAAM;AACpB,QAAI,CAAC,KAAM;AACX,QAAI,eAAgB;AACpB,SAAK,YAAY;AAAA,EACnB,GAAG,CAAC,gBAAgB,aAAa,IAAI,CAAC;AAEtC,QAAM,UAAU,MAAM;AACpB,QAAI,CAAC,QAAS;AACd,QAAI,QAAQ,gBAAgB,WAAW,OAAO,QAAQ,qBAAqB,UAAU;AACnF,gBAAU,QAAQ,gBAAgB;AAClC;AAAA,IACF;AACA,QAAI,QAAQ,gBAAgB,cAAc;AACxC,6BAAuB,IAAI;AAAA,IAC7B;AAAA,EACF,GAAG,CAAC,OAAO,CAAC;AAEZ,QAAM,eAAe,MAAM,YAAY,CAAC,OAAkC,iBAAiC;AACzG,UAAM,kBAAkB,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,IAAI,QAAQ;AACtF,QAAI,cAAc;AAChB,UAAI;AACF,eAAO,IAAI,KAAK,aAAa,QAAQ;AAAA,UACnC,OAAO;AAAA,UACP,UAAU;AAAA,QACZ,CAAC,EAAE,OAAO,eAAe;AAAA,MAC3B,QAAQ;AACN,eAAO,GAAG,gBAAgB,QAAQ,CAAC,CAAC,IAAI,YAAY;AAAA,MACtD;AAAA,IACF;AACA,WAAO,IAAI,KAAK,aAAa,QAAQ;AAAA,MACnC,uBAAuB;AAAA,MACvB,uBAAuB;AAAA,IACzB,CAAC,EAAE,OAAO,eAAe;AAAA,EAC3B,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,YAAY,SAAS,YAAY,QAAQ;AAC/C,QAAM,oBAAoB,SAAS,gBAAgB,KAAK,CAAC,SAAS,KAAK,OAAO,mBAAmB,KAAK;AACtG,QAAM,+BAA+B,WAAW,QAC3C,QAAQ,2BAA2B,UAClC,QAAQ,sBAAsB,UAAU,KAAK;AACnD,QAAM,kBAAkB,mBAAmB,UAAU;AACrD,QAAM,wBAAwB,mBAAmB,gBAC5C,SAAS,0BACT,SAAS,4BACT;AACL,QAAM,eAAe,gBAAgB,kBAAkB;AACvD,QAAM,qBAAqB,SAAS,sBAAsB,CAAC;AAC3D,QAAM,aAAa,MAAM,QAA2B,OAAO;AAAA,IACzD;AAAA,IACA;AAAA,IACA,QAAQ,mBAAmB;AAAA,IAC3B;AAAA,EACF,IAAI,CAAC,uBAAuB,cAAc,iBAAiB,mBAAmB,CAAC;AAE/E,QAAM,oBAAoB,MAAM,YAAY,CAAC,cAA8B;AACzE,QAAI,CAAC,QAAS,QAAO,EAAE,yCAAyC,YAAY;AAC5E,QAAI,UAAU,WAAW,eAAe,GAAG;AACzC,YAAM,WAAW,UAAU,MAAM,gBAAgB,MAAM;AACvD,aAAO,QAAQ,sBAAsB,KAAK,CAAC,UAAU,MAAM,QAAQ,QAAQ,GAAG,SACzE;AAAA,IACP;AACA,QAAI,cAAc,UAAU;AAC1B,aAAO,EAAE,sCAAsC,YAAY;AAAA,IAC7D;AACA,QAAI,cAAc,uBAAuB;AACvC,aAAO,EAAE,6CAA6C,gBAAgB;AAAA,IACxE;AACA,QAAI,UAAU,WAAW,wBAAwB,GAAG;AAClD,YAAM,aAAa,UAAU,MAAM,yBAAyB,MAAM;AAClE,UAAI,eAAe,SAAS;AAC1B,eAAO,QAAQ,gBAAgB,OAAO,SACjC,EAAE,4CAA4C,0BAA0B;AAAA,MAC/E;AACA,UAAI,eAAe,iBAAiB;AAClC,eAAO,QAAQ,gBAAgB,eAAe,SACzC,EAAE,8CAA8C,oBAAoB;AAAA,MAC3E;AAAA,IACF;AACA,WAAO,EAAE,yCAAyC,YAAY;AAAA,EAChE,GAAG,CAAC,SAAS,CAAC,CAAC;AAEf,QAAM,6BAA6B,MAAM,YAAY,CAAC,SAAoC,cAAuB;AAC/G,UAAM,UAAU,OAAO,YAAY,WAAW,QAAQ,KAAK,IAAI;AAC/D,QAAI,CAAC,QAAS,QAAO;AACrB,QAAI,YAAY,6CAA6C;AAC3D,aAAO,EAAE,SAAS,kBAAkB,EAAE,OAAO,kBAAkB,aAAa,EAAE,EAAE,CAAC;AAAA,IACnF;AACA,QAAI,YAAY,gDAAgD;AAC9D,aAAO,EAAE,SAAS,+BAA+B,EAAE,OAAO,kBAAkB,aAAa,EAAE,EAAE,CAAC;AAAA,IAChG;AACA,WAAO,EAAE,SAAS,OAAO;AAAA,EAC3B,GAAG,CAAC,mBAAmB,CAAC,CAAC;AAEzB,QAAM,kBAAkB,MAAM,YAAY,CAAC,cAAsB;AAC/D,mBAAe,CAAC,YAAY;AAC1B,UAAI,CAAC,QAAQ,SAAS,EAAG,QAAO;AAChC,YAAM,OAAO,EAAE,GAAG,QAAQ;AAC1B,aAAO,KAAK,SAAS;AACrB,aAAO;AAAA,IACT,CAAC;AAAA,EACH,GAAG,CAAC,CAAC;AAEL,QAAM,yBAAyB,MAAM,YAAY,CAAC,aAAgC;AAChF,oBAAgB,SAAS,YAAY;AACrC,6BAAyB,SAAS,qBAAqB;AACvD,cAAU,SAAS,MAAM;AACzB,2BAAuB,SAAS,mBAAmB;AAAA,EACrD,GAAG,CAAC,CAAC;AAEL,QAAM,uBAAuB,MAAM,YAAY,MAAmB;AAChE,QAAI,CAAC,QAAS,QAAO,CAAC;AACtB,UAAM,aAA0B,CAAC;AAEjC,QAAI,8BAA8B;AAChC,aAAO;AAAA,QACL;AAAA,QACA,6BAA6B,QAAQ,wBAAwB,CAAC,GAAG,YAAY;AAAA,MAC/E;AAAA,IACF;AAEA,QAAI,QAAQ,gBAAgB,iBAAiB;AAC3C,UAAI,mBAAmB,QAAQ,CAAC,OAAO,SAAS,eAAe,GAAG;AAChE,mBAAW,SAAS;AAAA,MACtB,OAAO;AACL,YAAI,QAAQ,mBAAmB,QAAQ,kBAAkB,QAAQ,iBAAiB;AAChF,qBAAW,SAAS;AAAA,YAClB;AAAA,YACA;AAAA,YACA,EAAE,QAAQ,aAAa,QAAQ,iBAAiB,QAAQ,wBAAwB,EAAE;AAAA,UACpF;AAAA,QACF;AACA,YAAI,QAAQ,mBAAmB,QAAQ,kBAAkB,QAAQ,iBAAiB;AAChF,qBAAW,SAAS;AAAA,YAClB;AAAA,YACA;AAAA,YACA,EAAE,QAAQ,aAAa,QAAQ,iBAAiB,QAAQ,wBAAwB,EAAE;AAAA,UACpF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,QAAI,QAAQ,gBAAgB,gBAAgB,CAAC,qBAAqB;AAChE,iBAAW,sBAAsB;AAAA,IACnC;AAEA,eAAW,OAAO,CAAC,SAAS,eAAe,GAAY;AACrD,YAAMA,YAAW,QAAQ,iBAAiB,GAAG;AAC7C,UAAIA,WAAU,aAAa,QAAQ,sBAAsB,GAAG,MAAM,MAAM;AACtE,mBAAW,yBAAyB,GAAG,EAAE,IAAI;AAAA,MAC/C;AAAA,IACF;AAEA,WAAO;AAAA,EACT,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,mBAAmB,gBAAgB,SAAS,cAAc,eAAe,cAC3E,0BAA0B,eAAe,aAAa,eAAe,WAAW,IAChF;AAEJ,QAAM,cAAsD,kBAAkB,OAC1E,SACA,mBACE,aACA;AAEN,QAAM,mBAAmB,MAAM,QAAwC,MAAM;AAC3E,QAAI,CAAC,QAAS,QAAO;AACrB,WAAO;AAAA,MACL,MAAM;AAAA,MACN,WAAW,YAAY;AAAA,MACvB;AAAA,MACA,SAAS;AAAA,MACT,gBAAgB,mBAAmB;AAAA,MACnC,cAAc;AAAA,MACd,aAAa,QAAQ;AAAA,MACrB,gBAAgB,QAAQ,wBAAwB,CAAC;AAAA,MACjD;AAAA,MACA,gBAAgB,QAAQ,kBAAkB,CAAC;AAAA,MAC3C;AAAA,MACA,aAAa,sBAAsB,EAAE,IAAI,oBAAoB,IAAI;AAAA,MACjE;AAAA,MACA;AAAA,MACA,oBAAoB,gBAAgB,eAAe,QAAQ,sBAAsB;AAAA,MACjF,oBAAoB,gBAAgB,SAAS,aAAa,eAAe,cAAc;AAAA,MACvF;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW,CAAC,aAAa,CAAC;AAAA,MAC1B,WAAW;AAAA,IACb;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,sBAAsB,MAAM,OAAuC,gBAAgB;AACzF,QAAM,gBAAgB,MAAM,OAAO,UAAU;AAE7C,QAAM,UAAU,MAAM;AACpB,wBAAoB,UAAU;AAAA,EAChC,GAAG,CAAC,gBAAgB,CAAC;AAErB,QAAM,UAAU,MAAM;AACpB,kBAAc,UAAU;AAAA,EAC1B,GAAG,CAAC,UAAU,CAAC;AAEf,QAAM,EAAE,SAAS,mBAAmB,IAAI;AAAA,IACtC,mBAAmB,2BAA2B;AAAA,IAC9C;AAAA,MACE,SAAS,oBAAoB;AAAA,MAC7B,eAAe;AAAA,IACjB;AAAA,EACF;AACA,QAAM,EAAE,cAAc,wBAAwB,IAAI;AAAA,IAChD;AAAA,IACA;AAAA,EACF;AAEA,QAAM,4BAA4B,MAAM,YAAY,OAAO,eAAkD;AAC3G,QAAI,CAAC,oBAAoB,WAAW,CAAC,OAAO,KAAK,UAAU,EAAE,OAAQ,QAAO;AAC5E,QAAI;AACF,YAAM,SAAS,MAAM;AAAA,QACnB;AAAA,QACA;AAAA,QACA,oBAAoB;AAAA,QACpB,EAAE,cAAc,cAAc,QAAQ;AAAA,MACxC;AACA,YAAM,cAAc,OAAO;AAC3B,UAAI,CAAC,eAAe,OAAO,gBAAgB,YAAY,MAAM,QAAQ,WAAW,GAAG;AACjF,eAAO;AAAA,MACT;AACA,aAAO,OAAO;AAAA,QACZ,OAAO,QAAQ,WAAsC,EAAE,IAAI,CAAC,CAAC,WAAW,KAAK,MAAM,CAAC,WAAW,OAAO,KAAK,CAAC,CAAC;AAAA,MAC/G;AAAA,IACF,SAAS,OAAO;AACd,aAAO,MAAM,gCAAgC,EAAE,KAAK,MAAM,CAAC;AAC3D,aAAO;AAAA,IACT;AAAA,EACF,GAAG,CAAC,uBAAuB,CAAC;AAE5B,QAAM,sBAAsB,MAAM,YAAY,CAAC,WAAmB,OAAgB,aAAgC;AAChH,QAAI,CAAC,oBAAoB,QAAS;AAClC,UAAM,YAAY;AAChB,UAAI;AACF,cAAM,SAAS,MAAM;AAAA,UACnB;AAAA,UACA;AAAA,UACA,oBAAoB;AAAA,UACpB;AAAA,YACE,SAAS;AAAA,YACT,YAAY;AAAA,YACZ,cAAc,cAAc;AAAA,UAC9B;AAAA,QACF;AACA,cAAM,eAAe;AAAA,UACnB;AAAA,YACE;AAAA,YACA;AAAA,YACA,OAAO,aAAa,UAAU,SAAY,OAAO,YAAY,QAAQ;AAAA,UACvE;AAAA,UACA,OAAO,aAAa;AAAA,QACtB;AACA,YAAI,iBAAiB,UAAU;AAC7B,iCAAuB,YAAY;AAAA,QACrC;AACA,cAAM,cAAc,OAAO,aAAa,UAAU,KAAK,CAAC,YAAY,QAAQ,aAAa,OAAO,GAAG;AACnG,YAAI,aAAa;AACf,yBAAe,CAAC,aAAa,EAAE,GAAG,SAAS,CAAC,SAAS,GAAG,YAAY,EAAE;AAAA,QACxE;AAAA,MACF,SAAS,OAAO;AACd,eAAO,MAAM,0BAA0B,EAAE,KAAK,MAAM,CAAC;AAAA,MACvD;AAAA,IACF,GAAG;AAAA,EACL,GAAG,CAAC,wBAAwB,uBAAuB,CAAC;AAEpD,QAAM,sBAAsB,MAAM,YAAY,CAAC,UAAkB,UAAmB;AAClF,UAAM,YAAY,gBAAgB,QAAQ;AAC1C,UAAM,WAAW,wBAAwB,cAAc,SAAS,WAAW,KAAK;AAChF,2BAAuB,QAAQ;AAC/B,oBAAgB,SAAS;AACzB,uBAAmB,IAAI;AACvB,wBAAoB,WAAW,OAAO,QAAQ;AAAA,EAChD,GAAG,CAAC,wBAAwB,iBAAiB,mBAAmB,CAAC;AAEjE,QAAM,gBAAgB,MAAM,YAAY,CAAC,UAAqC,UAAmB;AAC/F,UAAM,YAAY,yBAAyB,QAAQ;AACnD,UAAM,WAAW,wBAAwB,cAAc,SAAS,WAAW,KAAK;AAChF,2BAAuB,QAAQ;AAC/B,oBAAgB,SAAS;AACzB,uBAAmB,IAAI;AACvB,wBAAoB,WAAW,OAAO,QAAQ;AAAA,EAChD,GAAG,CAAC,wBAAwB,iBAAiB,mBAAmB,CAAC;AAEjE,QAAM,gBAAgB,UACpB,YACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO;AAAA,QACL,YAAY,UAAU,YAAY,iBAAiB,IAAI;AAAA,QACvD,aAAa,UAAU,YAAY,iBAAiB,IAAI;AAAA,QACxD,OAAO,YAAY;AAAA,MACrB;AAAA,MAEA,+BAAC,SAAI,WAAU,qDACb;AAAA,4BAAC,UAAK,WAAU,uBAAuB,YAAE,kCAAkC,sCAAsC,GAAE;AAAA,QACnH,oBAAC,UAAO,SAAO,MAAC,MAAK,UAAS,SAAQ,WAAU,OAAO,iBAAiB,aAAa,SAAS,GAC5F;AAAA,UAAC;AAAA;AAAA,YAAK,MAAM,SAAS,aACjB,+BAA+B,mBAAmB,QAAQ,EAAE,CAAC,KAC7D,+BAA+B,mBAAmB,QAAQ,EAAE,CAAC;AAAA,YAE9D,YAAE,wCAAwC,eAAe;AAAA;AAAA,QAC5D,GACF;AAAA,SACF;AAAA;AAAA,EACF,IACE,OACF;AAEJ,QAAM,mBAAmB,uBAA4C,aAAa,cAAc;AAChG,QAAM,kBAAkB,uBAA2C,eAAe,aAAa;AAC/F,QAAM,uBAAuB,uBAAgD,oBAAoB,kBAAkB;AACnH,QAAM,wBAAwB,uBAAiD,sBAAsB,mBAAmB;AACxH,QAAM,mBAAmB,uBAA4C,gBAAgB,cAAc;AACnG,QAAM,mBAAmB,uBAA4C,gBAAgB,cAAc;AACnG,QAAM,wBAAwB,uBAAiD,sBAAsB,mBAAmB;AACxH,QAAM,0BAA0B,uBAAmD,gBAAgB,qBAAqB;AACxH,QAAM,uBAAuB,uBAAgD,qBAAqB,kBAAkB;AACpH,QAAM,gBAAgB,uBAAyC,aAAa,WAAW;AACvF,QAAM,kBAAkB,uBAA2C,eAAe,aAAa;AAE/F,QAAM,gBAAgB,MAAM,YAAY,YAAY;AAClD,QAAI,aAAa,CAAC,QAAS;AAC3B,UAAM,aAAa,MAAM,0BAA0B,qBAAqB,CAAC;AACzE,QAAI,OAAO,KAAK,UAAU,EAAE,SAAS,GAAG;AACtC,qBAAe,UAAU;AACzB,yBAAmB,EAAE,yCAAyC,6CAA6C,CAAC;AAC5G;AAAA,IACF;AAEA,oBAAgB,IAAI;AACpB,uBAAmB,IAAI;AACvB,mBAAe,CAAC,CAAC;AAEjB,QAAI;AACF,UAAI,iBAAiB,cAAc;AACnC,UAAI,oBAAoB,SAAS;AAC/B,YAAI;AACF,gBAAM,cAAc,MAAM;AAAA,YACxB;AAAA,YACA;AAAA,YACA,oBAAoB;AAAA,UACtB;AACA,cAAI,YAAY,MAAM;AACpB,6BAAiB,YAAY;AAC7B,gBAAI,YAAY,aAAa;AAC3B,qCAAuB,cAAc;AAAA,YACvC;AAAA,UACF;AAAA,QACF,SAAS,OAAO;AACd,iBAAO,MAAM,8BAA8B,EAAE,KAAK,MAAM,CAAC;AAAA,QAC3D;AAAA,MACF;AAEA,UAAI;AACJ,UAAI,oBAAoB,SAAS;AAC/B,cAAM,QAAQ,MAAM,wBAAwB,gBAAgB,gBAAgB,oBAAoB,OAAO;AACvG,YAAI,CAAC,MAAM,IAAI;AACb,gBAAM,oBAAoB,MAAM,0BAA0B,MAAM,eAAe,CAAC,CAAC;AACjF,cAAI,OAAO,KAAK,iBAAiB,EAAE,SAAS,GAAG;AAC7C,2BAAe,iBAAiB;AAAA,UAClC;AACA;AAAA,YACE,MAAM,WACH,EAAE,yCAAyC,6CAA6C;AAAA,UAC7F;AACA,0BAAgB,KAAK;AACrB;AAAA,QACF;AACA,kCAA0B,MAAM;AAChC,cAAM,wBAAwB,UAAU,gBAAgB,oBAAoB,OAAO;AAAA,MACrF;AAEA,YAAM,YAAY,YAAY;AAAA,QAC5B,qBAAqB,mBAAmB,IAAI,CAAC;AAAA,QAC7C;AAAA,UACE,QAAQ;AAAA,UACR,SAAS;AAAA,YACP,gBAAgB;AAAA,YAChB,mBAAmB,OAAO,WAAW;AAAA,YACrC,8BAA8B;AAAA,UAChC;AAAA,UACA,MAAM,KAAK,UAAU,cAAc;AAAA,QACrC;AAAA,MACF;AAEA,YAAM,SAAS,2BAA2B,OAAO,KAAK,uBAAuB,EAAE,SAAS,IACpF,MAAM,4BAA4B,yBAAyB,SAAS,IACpE,MAAM,UAAU;AAEpB,6BAAuB,OAAO,aAAa;AAE3C,UAAI,OAAO,gBAAgB,SAAS,YAAY;AAC9C,cAAM,eAAe,OAAO,eAAe,cACvC,0BAA0B,OAAO,eAAe,aAAa,OAAO,eAAe,WAAW,IAC9F;AAEJ,YAAI,cAAc;AAChB,4BAAkB,OAAO,cAAc;AACvC,cAAI,oBAAoB,SAAS;AAC/B,kBAAM,wBAAwB,eAAe,gBAAgB,oBAAoB,OAAO;AAAA,UAC1F;AACA;AAAA,QACF;AAEA,YAAI,OAAO,aAAa;AACtB,cAAI,oBAAoB,SAAS;AAC/B,kBAAM,wBAAwB,eAAe,gBAAgB,oBAAoB,OAAO;AAAA,UAC1F;AACA,iBAAO,SAAS,OAAO,OAAO;AAC9B;AAAA,QACF;AAEA,2BAAmB;AAAA,UACjB;AAAA,UACA;AAAA,QACF,CAAC;AACD;AAAA,MACF;AAEA,UAAI,OAAO,aAAa;AACtB,YAAI,oBAAoB,SAAS;AAC/B,gBAAM,wBAAwB,eAAe,gBAAgB,oBAAoB,OAAO;AAAA,QAC1F;AACA,eAAO,SAAS,OAAO,OAAO;AAC9B;AAAA,MACF;AAEA,UAAI,oBAAoB,SAAS;AAC/B,cAAM,wBAAwB,eAAe,gBAAgB,oBAAoB,OAAO;AAAA,MAC1F;AACA,aAAO,KAAK,QAAQ,mBAAmB,IAAI,CAAC,YAAY,mBAAmB,OAAO,aAAa,CAAC,EAAE;AAAA,IACpG,SAAS,OAAO;AACd,YAAM,aAAa,+BAA+B,KAAK;AACvD,YAAM,kBAAkB,MAAM,0BAA0B,OAAO;AAAA,QAC7D,OAAO,QAAQ,WAAW,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,WAAW,OAAO,MAAM;AAAA,UACzE;AAAA,UACA,2BAA2B,SAAS,SAAS;AAAA,QAC/C,CAAC;AAAA,MACH,CAAC;AACD,UAAI,OAAO,KAAK,eAAe,EAAE,SAAS,GAAG;AAC3C,uBAAe,eAAe;AAAA,MAChC;AACA;AAAA,QACE,2BAA2B,WAAW,OAAO,KAC1C,EAAE,kCAAkC,gDAAgD;AAAA,MACzF;AAAA,IACF,UAAE;AACA,sBAAgB,KAAK;AAAA,IACvB;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,MAAI,CAAC,QAAQ,WAAW;AACtB,WACE;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,OAAO,YAAY,UAAU;AAAA,QAEtC;AAAA,8BAAC,WAAQ,MAAK,MAAK;AAAA,UACnB,oBAAC,UAAM,YAAE,4BAA4B,yBAAyB,GAAE;AAAA;AAAA;AAAA,IAClE;AAAA,EAEJ;AAEA,MAAI,aAAa,CAAC,SAAS;AACzB,WACE,oBAAC,SAAI,WAAU,gCACb;AAAA,MAAC;AAAA;AAAA,QACC,QAAO;AAAA,QACP,OAAM;AAAA,QACN,MAAK;AAAA,QACL,QACE,oBAAC,UAAO,MAAK,UAAS,SAAQ,WAAU,SAAS,MAAM;AAAE,eAAK,YAAY;AAAA,QAAE,GACzE,YAAE,kCAAkC,OAAO,GAC9C;AAAA,QAGF,+BAAC,SAAI,WAAU,aACb;AAAA,8BAAC,cAAY,YAAE,qCAAqC,6BAA6B,GAAE;AAAA,UACnF,oBAAC,oBACE,uBAAa,EAAE,uCAAuC,uDAAuD,GAChH;AAAA,WACF;AAAA;AAAA,IACF,GACF;AAAA,EAEJ;AAEA,MAAI,QAAQ,kBAAkB;AAC5B,WACE;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,YAAY,YAAY,gBAAgB,OAAO,YAAY,KAAK;AAAA,QAEzE,8BAAC,SAAI,WAAU,oBACb;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,gBAAgB,aAAa,SAAS;AAAA,YAE7C,+BAAC,eAAY,WAAU,wBACrB;AAAA,mCAAC,SAAI,WAAU,aACb;AAAA,oCAAC,SAAI,WAAU,yDAAwD,OAAO,EAAE,OAAO,YAAY,UAAU,GAC1G,YAAE,kCAAkC,iBAAiB,GACxD;AAAA,gBACA,oBAAC,QAAG,WAAU,0BAA0B,kBAAQ,SAAS,EAAE,mCAAmC,wBAAwB,GAAE;AAAA,iBAC1H;AAAA,cACA;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAW;AAAA,kBACX,OAAO;AAAA,kBACP,UAAU,CAAC,UAAU,YAAY,MAAM,OAAO,KAAK;AAAA,kBACnD,aAAa,EAAE,wCAAwC,UAAU;AAAA,kBACjE,OAAO,wBAAwB,aAAa,QAAQ,aAAa,CAAC;AAAA;AAAA,cACpE;AAAA,cACC,gBACC,oBAAC,OAAE,WAAU,WAAU,OAAO,4BAA4B,WAAW,GAClE,yBACH,IACE;AAAA,cACJ;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,UAAU;AAAA,kBACV,OAAO,iBAAiB,WAAW;AAAA,kBACnC,SAAS,YAAY;AACnB,2CAAuB,IAAI;AAC3B,qCAAiB,IAAI;AACrB,wBAAI;AACF,4BAAM,eAAe,qBAAqB,mBAAmB,IAAI,CAAC,oBAAoB;AAAA,wBACpF,QAAQ;AAAA,wBACR,SAAS;AAAA,0BACP,gBAAgB;AAAA,0BAChB,8BAA8B;AAAA,wBAChC;AAAA,wBACA,MAAM,KAAK,UAAU,EAAE,SAAS,CAAC;AAAA,sBACnC,CAAC;AACD,4BAAM,YAAY;AAAA,oBACpB,SAAS,OAAO;AACd,uCAAiB;AAAA,wBACf;AAAA,wBACA;AAAA,wBACA,EAAE,oCAAoC,8CAA8C;AAAA,sBACtF,CAAC;AAAA,oBACH,UAAE;AACA,6CAAuB,KAAK;AAAA,oBAC9B;AAAA,kBACF;AAAA,kBAEA,+BAAC,UAAK,WAAU,2BACb;AAAA,0CAAsB,oBAAC,WAAQ,MAAK,MAAK,IAAK;AAAA,oBAC9C,sBACG,EAAE,sCAAsC,cAAc,IACtD,EAAE,qCAAqC,UAAU;AAAA,qBACvD;AAAA;AAAA,cACF;AAAA,eACF;AAAA;AAAA,QACF,GACF;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,MAAI,QAAQ,cAAc,SAAS,CAAC,WAAW;AAC7C,WACE,oBAAC,SAAI,WAAU,oDAAmD,OAAO,EAAE,OAAO,YAAY,UAAU,GACrG,YAAE,gCAAgC,2CAA2C,GAChF;AAAA,EAEJ;AAEA,MAAI,CAAC,iBAAkB,QAAO;AAE9B,QAAM,aACJ,qBAAC,SAAI,WAAU,aACb;AAAA,wBAAC,iBAAc,QAAQ,gBAAgB,MAAM,aAAa,QAAQ,SAAS,kBAAkB;AAAA,IAC7F,oBAAC,SAAI,yBAAuB,eAC1B,8BAAC,mBAAgB,SAAkB,SAAS,WAAW,aAA0B,GACnF;AAAA,IACA,oBAAC,iBAAc,QAAQ,gBAAgB,MAAM,YAAY,QAAQ,SAAS,kBAAkB;AAAA,IAE1F,QAAQ,eAAe,mBAAmB,SAAS,IACnD,iCACE;AAAA,0BAAC,SAAI,yBAAuB,oBAC1B;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA;AAAA,MACF,GACF;AAAA,MACA,oBAAC,iBAAc,QAAQ,gBAAgB,MAAM,iBAAiB,QAAQ,SAAS,kBAAkB;AAAA,OACnG,IACE;AAAA,IAEJ,oBAAC,iBAAc,QAAQ,gBAAgB,MAAM,qBAAqB,QAAQ,SAAS,kBAAkB;AAAA,IACpG,+BACC,oBAAC,SAAI,yBAAuB,sBAC1B;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,eAAe;AAAA,QACf;AAAA,QACA;AAAA;AAAA,IACF,GACF,IACE;AAAA,IACJ,oBAAC,iBAAc,QAAQ,gBAAgB,MAAM,oBAAoB,QAAQ,SAAS,kBAAkB;AAAA,KACtG;AAGF,QAAM,cACJ,iCACE;AAAA,wBAAC,iBAAc,QAAQ,gBAAgB,MAAM,cAAc,QAAQ,SAAS,kBAAkB;AAAA,IAC9F,oBAAC,SAAI,yBAAuB,gBAC1B;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,gBAAgB,CAAC,UAAU;AACzB,gBAAM,aAAa,kBAAkB,KAAK;AAC1C,gBAAM,WAAW,wBAAwB,cAAc,SAAS,UAAU,UAAU;AACpF,iCAAuB,QAAQ;AAC/B,0BAAgB,QAAQ;AACxB,6BAAmB,IAAI;AACvB,8BAAoB,UAAU,YAAY,QAAQ;AAAA,QACpD;AAAA,QACA,mBAAmB,CAAC,SAAS;AAC3B,gBAAM,WAAW;AAAA,YACf,GAAG,cAAc;AAAA,YACjB,QAAQ,KAAK;AAAA,YACb,qBAAqB,KAAK;AAAA,UAC5B;AACA,iCAAuB,QAAQ;AAC/B,0BAAgB,qBAAqB;AACrC,6BAAmB,IAAI;AACvB,8BAAoB,uBAAuB,KAAK,IAAI,QAAQ;AAAA,QAC9D;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACF,GACF;AAAA,IACA,oBAAC,iBAAc,QAAQ,gBAAgB,MAAM,aAAa,QAAQ,SAAS,kBAAkB;AAAA,IAE7F,oBAAC,iBAAc,QAAQ,gBAAgB,MAAM,cAAc,QAAQ,SAAS,kBAAkB;AAAA,IAC9F,oBAAC,SAAI,yBAAuB,gBAC1B;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,gBAAgB;AAAA,QAChB,cAAc;AAAA,QACd;AAAA,QACA,SAAS;AAAA,QACT;AAAA;AAAA,IACF,GACF;AAAA,IACA,oBAAC,iBAAc,QAAQ,gBAAgB,MAAM,aAAa,QAAQ,SAAS,kBAAkB;AAAA,IAE7F,oBAAC,iBAAc,QAAQ,gBAAgB,MAAM,mBAAmB,QAAQ,SAAS,kBAAkB;AAAA,IACnG,oBAAC,SAAI,yBAAuB,sBAC1B;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,iBAAiB;AAAA,QACjB;AAAA,QACA;AAAA;AAAA,IACF,GACF;AAAA,IACA,oBAAC,iBAAc,QAAQ,gBAAgB,MAAM,kBAAkB,QAAQ,SAAS,kBAAkB;AAAA,IAElG,oBAAC,iBAAc,QAAQ,gBAAgB,MAAM,aAAa,QAAQ,SAAS,kBAAkB;AAAA,IAC7F,oBAAC,SAAI,yBAAuB,qBAC1B;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,SAAS;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,UAAU;AAAA,QACV,SAAS,MAAM;AACb,4BAAkB,IAAI;AACtB,iCAAuB,IAAI;AAC3B,6BAAmB,IAAI;AAAA,QACzB;AAAA,QACA,YAAY,MAAM;AAChB,cAAI,CAAC,oBAAqB;AAC1B,iBAAO,KAAK,QAAQ,mBAAmB,IAAI,CAAC,YAAY,mBAAmB,mBAAmB,CAAC,EAAE;AAAA,QACnG;AAAA,QACA,SAAS,CAAC,YAAY;AACpB,6BAAmB,OAAO;AAAA,QAC5B;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACF,GACF;AAAA,IACA,oBAAC,iBAAc,QAAQ,gBAAgB,MAAM,YAAY,QAAQ,SAAS,kBAAkB;AAAA,IAE5F,oBAAC,iBAAc,QAAQ,gBAAgB,MAAM,WAAW,QAAQ,SAAS,kBAAkB;AAAA,IAC3F,oBAAC,SAAI,yBAAuB,aAC1B,8BAAC,iBAAc,SAAkB,SAAS,WAAW,aAA0B,GACjF;AAAA,IACA,oBAAC,iBAAc,QAAQ,gBAAgB,MAAM,UAAU,QAAQ,SAAS,kBAAkB;AAAA,KAC5F;AAGF,QAAM,cACJ,iCACE;AAAA,wBAAC,iBAAc,QAAQ,gBAAgB,MAAM,cAAc,QAAQ,SAAS,kBAAkB;AAAA,IAC9F,oBAAC,SAAI,yBAAuB,gBAC1B,8BAAC,2BAAwB,SAAkB,SAAS,WAAW,aAC5D,uBACH,GACF;AAAA,IACA,oBAAC,iBAAc,QAAQ,gBAAgB,MAAM,aAAa,QAAQ,SAAS,kBAAkB;AAAA,KAC/F;AAGF,QAAM,SACJ,iCACE;AAAA,wBAAC,iBAAc,QAAQ,gBAAgB,MAAM,aAAa,QAAQ,SAAS,kBAAkB;AAAA,IAC7F,oBAAC,SAAI,yBAAuB,eAC1B,8BAAC,mBAAgB,SAAkB,aAA0B,GAC/D;AAAA,IACA,oBAAC,iBAAc,QAAQ,gBAAgB,MAAM,YAAY,QAAQ,SAAS,kBAAkB;AAAA,KAC9F;AAGF,SACE,oBAAC,SAAI,yBAAuB,aAC1B;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,EACF,GACF;AAEJ;AAEA,IAAO,kBAAQ;",
6
6
  "names": ["document"]
7
7
  }