azirid-react 0.10.3 → 0.10.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/index.cjs +12 -9
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +12 -9
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/schemas/index.ts","../src/utils/cn.ts","../src/client/index.ts","../src/i18n/es.ts","../src/i18n/en.ts","../src/i18n/index.ts","../src/styles/generated.ts","../src/utils/inject-styles.ts","../src/providers/mutations.ts","../src/providers/access-provider.tsx","../src/components/ui/button.tsx","../src/components/ui/card.tsx","../src/components/ui/field.tsx","../src/components/ui/input.tsx","../src/components/login-form.tsx","../src/components/signup-form.tsx","../src/hooks/use-password-reset.ts","../src/components/forgot-password-form.tsx","../src/components/reset-password-form.tsx","../src/components/auth-form.tsx","../src/hooks/use-referral.ts","../src/components/referral-card.tsx","../src/hooks/use-referral-stats.ts","../src/components/referral-stats.tsx","../../shared/src/utils/format-amount.ts","../src/hooks/use-plans.ts","../src/hooks/use-subscription.ts","../src/hooks/use-checkout.ts","../src/hooks/use-payment-providers.ts","../src/utils/payphone-loader.ts","../src/components/payphone-checkout.tsx","../src/components/payphone-modal.tsx","../src/components/pricing-feature-list.tsx","../src/components/pricing-card.tsx","../src/components/pricing-table.tsx","../src/components/checkout-button.tsx","../src/hooks/use-payphone-confirm.ts","../src/hooks/use-pay-button.tsx","../src/components/pay-button-modal.tsx","../src/components/pay-button.tsx","../src/components/payphone-callback.tsx","../src/components/subscription-badge.tsx","../src/hooks/use-invoices.ts","../src/components/invoice-list.tsx","../src/hooks/use-login.ts","../src/hooks/use-signup.ts","../src/hooks/use-logout.ts","../src/hooks/use-session.ts","../src/hooks/use-magic-link.ts","../src/hooks/use-social-login.ts","../src/hooks/use-change-password.ts","../src/hooks/use-refresh.ts","../src/hooks/use-bootstrap.ts","../src/hooks/use-passkeys.ts","../src/hooks/use-transfer-proof.ts","../src/hooks/use-payphone-checkout.ts","../src/hooks/use-transfer-payment.tsx","../src/hooks/use-tenants.ts","../src/hooks/create-mutation-hook.ts","../src/hooks/use-form-state.ts","../src/hooks/use-password-toggle.ts","../src/index.ts"],"names":["z","twMerge","clsx","json","useQueryClient","useMutation","useCallback","createContext","useContext","QueryClient","useState","useMemo","useRef","useEffect","jsx","QueryClientProvider","cva","Slot","forwardRef","useForm","zodResolver","jsxs","Fragment","useQuery","styles","intervalLabels","PROVIDER_LABELS","PROVIDER_ICONS","TransferModal","statusColors","formatDate"],"mappings":"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","file":"index.cjs","sourcesContent":["import { z } from 'zod'\nimport type { AccessMessages } from '../types'\n\n// ─── Schema Factories (locale-aware) ─────────────────────────\n\nexport function createLoginSchema(v: AccessMessages['validation']) {\n return z.object({\n email: z\n .string({ required_error: v.emailRequired })\n .min(1, v.emailRequired)\n .email(v.emailInvalid),\n password: z.string({ required_error: v.passwordRequired }).min(1, v.passwordRequired),\n })\n}\n\nexport function createSignupSchema(v: AccessMessages['validation']) {\n return z.object({\n email: z\n .string({ required_error: v.emailRequired })\n .min(1, v.emailRequired)\n .email(v.emailInvalid),\n password: z.string({ required_error: v.passwordRequired }).min(10, v.passwordMinLength),\n acceptedTosVersion: z.string().optional(),\n acceptedPrivacyVersion: z.string().optional(),\n })\n}\n\n// ─── Login ───────────────────────────────────────────────────\nexport const loginSchema = z.object({\n email: z\n .string({ required_error: 'El correo es requerido' })\n .min(1, 'El correo es requerido')\n .email('Correo electrónico inválido'),\n password: z\n .string({ required_error: 'La contraseña es requerida' })\n .min(1, 'La contraseña es requerida'),\n})\n\nexport type LoginInput = z.infer<typeof loginSchema>\n\n// ─── Signup ──────────────────────────────────────────────────\nexport const signupSchema = z.object({\n email: z\n .string({ required_error: 'El correo es requerido' })\n .min(1, 'El correo es requerido')\n .email('Correo electrónico inválido'),\n password: z\n .string({ required_error: 'La contraseña es requerida' })\n .min(10, 'La contraseña debe tener al menos 10 caracteres'),\n acceptedTosVersion: z.string().optional(),\n acceptedPrivacyVersion: z.string().optional(),\n})\n\nexport type SignupInput = z.infer<typeof signupSchema>\n\n// ─── Change Password ─────────────────────────────────────────\nexport const changePasswordSchema = z.object({\n currentPassword: z\n .string({ required_error: 'La contraseña actual es requerida' })\n .min(1, 'La contraseña actual es requerida'),\n newPassword: z\n .string({ required_error: 'La nueva contraseña es requerida' })\n .min(10, 'La contraseña debe tener al menos 10 caracteres'),\n})\n\nexport type ChangePasswordInput = z.infer<typeof changePasswordSchema>\n\n// ─── Magic Link ──────────────────────────────────────────────\nexport const magicLinkRequestSchema = z.object({\n email: z\n .string({ required_error: 'El correo es requerido' })\n .min(1, 'El correo es requerido')\n .email('Correo electrónico inválido'),\n})\n\nexport type MagicLinkRequestInput = z.infer<typeof magicLinkRequestSchema>\n\nexport const magicLinkVerifySchema = z.object({\n token: z.string({ required_error: 'El token es requerido' }).min(1, 'El token es requerido'),\n})\n\nexport type MagicLinkVerifyInput = z.infer<typeof magicLinkVerifySchema>\n\n// ─── Social Login ────────────────────────────────────────────\nexport const socialLoginSchema = z.object({\n provider: z.enum(['google', 'github'], {\n required_error: 'El proveedor es requerido',\n }),\n providerAccountId: z\n .string({ required_error: 'El ID de proveedor es requerido' })\n .min(1, 'El ID de proveedor es requerido'),\n email: z\n .string({ required_error: 'El correo es requerido' })\n .min(1, 'El correo es requerido')\n .email('Correo electrónico inválido'),\n emailVerified: z.boolean().optional(),\n firstName: z.string().optional(),\n lastName: z.string().optional(),\n createUserIfNotExists: z.boolean().optional(),\n turnstileToken: z.string().optional(),\n acceptedTosVersion: z.string().optional(),\n acceptedPrivacyVersion: z.string().optional(),\n})\n\nexport type SocialLoginInput = z.infer<typeof socialLoginSchema>\n\n// ─── Forgot Password (request reset) ────────────────────────\nexport function createForgotPasswordSchema(v: AccessMessages['validation']) {\n return z.object({\n email: z\n .string({ required_error: v.emailRequired })\n .min(1, v.emailRequired)\n .email(v.emailInvalid),\n })\n}\n\nexport const forgotPasswordSchema = z.object({\n email: z\n .string({ required_error: 'El correo es requerido' })\n .min(1, 'El correo es requerido')\n .email('Correo electrónico inválido'),\n})\n\nexport type ForgotPasswordInput = z.infer<typeof forgotPasswordSchema>\n\n// ─── Reset Password (confirm reset) ─────────────────────────\nexport function createResetPasswordConfirmSchema(v: AccessMessages['validation']) {\n return z\n .object({\n token: z.string({ required_error: v.tokenRequired }).min(1, v.tokenRequired),\n newPassword: z.string({ required_error: v.newPasswordRequired }).min(10, v.passwordMinLength),\n confirmPassword: z\n .string({ required_error: v.confirmPasswordRequired })\n .min(1, v.confirmPasswordRequired),\n })\n .refine((data) => data.newPassword === data.confirmPassword, {\n message: v.passwordsMismatch,\n path: ['confirmPassword'],\n })\n}\n\nexport const resetPasswordConfirmSchema = z\n .object({\n token: z.string({ required_error: 'El token es requerido' }).min(1, 'El token es requerido'),\n newPassword: z\n .string({ required_error: 'La nueva contraseña es requerida' })\n .min(10, 'La contraseña debe tener al menos 10 caracteres'),\n confirmPassword: z\n .string({ required_error: 'Confirma tu contraseña' })\n .min(1, 'Confirma tu contraseña'),\n })\n .refine((data) => data.newPassword === data.confirmPassword, {\n message: 'Las contraseñas no coinciden',\n path: ['confirmPassword'],\n })\n\nexport type ResetPasswordConfirmInput = z.infer<typeof resetPasswordConfirmSchema>\n\n// ─── Passkey Register Start ──────────────────────────────────\nexport const passkeyRegisterStartSchema = z.object({\n deviceName: z.string().optional(),\n})\n\nexport type PasskeyRegisterStartInput = z.infer<typeof passkeyRegisterStartSchema>\n","import { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","// ─── ApiError ────────────────────────────────────────────────\n/** Error thrown by the API client — carries the HTTP status code. */\nexport interface ApiError extends Error {\n status: number\n}\n\n/** Check if an error is an API auth error (401/403). */\nexport function isAuthError(err: unknown): boolean {\n return (\n err instanceof Error &&\n typeof (err as ApiError).status === 'number' &&\n ((err as ApiError).status === 401 || (err as ApiError).status === 403)\n )\n}\n\n// ─── Path suffixes (appended to basePath) ───────────────────\nconst SUFFIXES = {\n login: 'login',\n signup: 'signup',\n logout: 'logout',\n me: 'me',\n refresh: 'refresh',\n bootstrap: 'session/bootstrap',\n magicLinkRequest: 'magic-link/request',\n magicLinkVerify: 'magic-link/verify',\n socialLogin: 'social/login',\n changePassword: 'password/change',\n passkeyLogin: 'passkeys/login',\n passkeyLoginStart: 'passkeys/login/start',\n passkeyLoginVerify: 'passkeys/login/verify',\n passkeyRegisterStart: 'passkeys/register/start',\n passkeyRegisterVerify: 'passkeys/register/verify',\n passkeys: 'passkeys',\n providers: 'billing/providers',\n plans: 'billing/plans',\n subscription: 'billing/subscription',\n checkout: 'billing/checkout',\n billingPortal: 'billing/portal',\n invoices: 'billing/invoices',\n submitTransferProof: 'billing/transfer-proof',\n transferProofs: 'billing/transfer-proofs',\n payphoneConfirm: 'billing/payphone/confirm',\n passwordResetRequest: 'password/reset/request',\n passwordResetConfirm: 'password/reset/confirm',\n referralMe: 'referrals/me',\n referralStats: 'referrals/stats',\n userTenants: 'tenants',\n} as const\n\n/** Base paths for each mode */\nexport const BASE_PATHS = {\n /** Proxy mode (Next.js): requests go to the same origin via route handler */\n proxy: '/api/auth',\n /** Direct mode: requests go straight to the Azirid API */\n direct: '/v1/users/auth',\n} as const\n\n/** Build full path map from a basePath */\nexport function buildPaths(basePath: string): AuthPaths {\n const bp = basePath.replace(/\\/$/, '')\n return Object.fromEntries(\n Object.entries(SUFFIXES).map(([key, suffix]) => [key, `${bp}/${suffix}`]),\n ) as unknown as AuthPaths\n}\n\n/** Default paths (direct mode — backward compatible) */\nconst PATHS = buildPaths(BASE_PATHS.direct)\n\nexport type AuthPaths = { [K in keyof typeof SUFFIXES]: string }\n\n// ─── Client config ───────────────────────────────────────────\nexport interface AccessClientConfig {\n /** Base URL of the Azirid API (empty string for proxy mode) */\n baseUrl: string\n /**\n * Base path for auth endpoints.\n * - Proxy mode: '/api/auth' (matches Next.js route handler)\n * - Direct mode: '/v1/users/auth' (matches API routes)\n * @default '/v1/users/auth'\n */\n basePath?: string\n /** Extra headers (e.g. Authorization) */\n headers?: Record<string, string>\n}\n\nexport interface AccessClient {\n /** HTTP methods */\n post: <T = unknown>(path: string, body?: unknown) => Promise<T>\n get: <T = unknown>(path: string) => Promise<T>\n patch: <T = unknown>(path: string, body?: unknown) => Promise<T>\n del: <T = unknown>(path: string) => Promise<T>\n /** Resolved paths */\n paths: AuthPaths\n /** Base URL */\n baseUrl: string\n /** App context */\n appContext?: {\n publishableKey: string\n tenantId?: string\n }\n /** Manually set the access token (used by refresh/bootstrap) */\n setAccessToken: (token: string | null) => void\n /** Get the current access token */\n getAccessToken: () => string | null\n /** Store refresh token received from the API body (cross-origin support) */\n setRefreshToken: (token: string | null) => void\n /** Get the current in-memory refresh token */\n getRefreshToken: () => string | null\n /** Store CSRF token received from the API body (cross-origin support) */\n setCsrfToken: (token: string | null) => void\n /** Get the current CSRF token (from memory or cookie) */\n getCsrfToken: () => string | null\n /** Deduplicated refresh — safe to call from multiple places concurrently */\n refreshSession: (opts?: { tenantId?: string }) => Promise<void>\n}\n\nexport function createAccessClient(\n config: AccessClientConfig,\n appContext?: AccessClient['appContext'],\n): AccessClient {\n const baseUrl = config.baseUrl.replace(/\\/$/, '')\n const paths = config.basePath ? buildPaths(config.basePath) : PATHS\n\n // sessionStorage keys (per-tab, survives page refresh)\n const storageKeyRt = '__azrt'\n const storageKeyCsrf = '__azxc'\n\n function ssGet(key: string): string | null {\n try {\n return typeof sessionStorage !== 'undefined' ? sessionStorage.getItem(key) : null\n } catch {\n return null\n }\n }\n function ssSet(key: string, value: string | null) {\n try {\n if (typeof sessionStorage === 'undefined') return\n if (value) sessionStorage.setItem(key, value)\n else sessionStorage.removeItem(key)\n } catch {\n /* SSR or private browsing */\n }\n }\n\n let accessToken: string | null = null\n let refreshToken: string | null = ssGet(storageKeyRt)\n let csrfToken: string | null = ssGet(storageKeyCsrf)\n let isRefreshing = false\n let refreshPromise: Promise<void> | null = null\n\n // ── Cross-tab token sync via BroadcastChannel ──────────────\n type TokenMessage = {\n type: 'token-refreshed'\n accessToken: string | null\n refreshToken: string | null\n csrfToken: string | null\n }\n\n let channel: BroadcastChannel | null = null\n try {\n if (typeof BroadcastChannel !== 'undefined') {\n channel = new BroadcastChannel('azirid-auth')\n channel.onmessage = (event: MessageEvent<TokenMessage>) => {\n if (event.data?.type === 'token-refreshed') {\n accessToken = event.data.accessToken\n if (event.data.refreshToken) setRefreshToken(event.data.refreshToken)\n if (event.data.csrfToken) setCsrfToken(event.data.csrfToken)\n }\n }\n }\n } catch {\n // BroadcastChannel not available (SSR, old browsers)\n }\n\n function broadcastTokens() {\n try {\n channel?.postMessage({\n type: 'token-refreshed',\n accessToken,\n refreshToken,\n csrfToken,\n } satisfies TokenMessage)\n } catch {\n // ignore\n }\n }\n\n function setAccessToken(token: string | null) {\n accessToken = token\n }\n\n function getAccessToken() {\n return accessToken\n }\n\n function setRefreshToken(token: string | null) {\n refreshToken = token\n ssSet(storageKeyRt, token)\n }\n\n function getRefreshToken() {\n return refreshToken\n }\n\n function setCsrfToken(token: string | null) {\n csrfToken = token\n ssSet(storageKeyCsrf, token)\n }\n\n const csrfCookieName = '_axc'\n\n /** Read CSRF token: prefer in-memory (cross-origin), fallback to cookie (same-origin) */\n function getCsrfToken(): string | null {\n if (csrfToken) return csrfToken\n if (typeof document === 'undefined') return null\n const match = document.cookie.match(new RegExp(`(?:^|;\\\\s*)${csrfCookieName}=([^;]*)`))\n return match ? decodeURIComponent(match[1]) : null\n }\n\n // Paths that rely on refresh token (not Bearer JWT)\n const sessionPaths: readonly string[] = [paths.refresh, paths.bootstrap, paths.logout]\n\n async function refreshTokensInternal(opts?: { tenantId?: string }): Promise<void> {\n const reqHeaders: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...config.headers,\n }\n if (appContext?.publishableKey) {\n reqHeaders['X-Publishable-Key'] = appContext.publishableKey\n }\n const csrf = getCsrfToken()\n if (csrf) reqHeaders['X-CSRF-Token'] = csrf\n\n // Send refresh token in body for cross-origin support\n const bodyPayload: Record<string, string> = {}\n if (refreshToken) {\n bodyPayload['rt'] = refreshToken\n }\n if (opts?.tenantId) {\n bodyPayload['tenantId'] = opts.tenantId\n }\n\n const res = await fetch(`${baseUrl}${paths.refresh}`, {\n method: 'POST',\n headers: reqHeaders,\n credentials: 'include',\n body: JSON.stringify(bodyPayload),\n })\n\n if (!res.ok) {\n accessToken = null\n setRefreshToken(null)\n setCsrfToken(null)\n throw new Error('Session expired')\n }\n\n const raw = await res.json()\n // Unwrap API envelope { data, meta } → extract data payload\n const json = raw && typeof raw === 'object' && 'data' in raw && 'meta' in raw ? raw.data : raw\n accessToken = json.at ?? json.accessToken ?? null\n // Update tokens from body (dual delivery) — persisted to sessionStorage\n const rt = json.rt ?? json.refreshToken\n const xc = json.xc ?? json.csrfToken\n if (rt) setRefreshToken(rt)\n if (xc) setCsrfToken(xc)\n\n // Notify other tabs about the new tokens\n broadcastTokens()\n }\n\n /**\n * Deduplicated refresh: if a refresh is already in flight, all callers\n * await the same promise instead of firing a second request with the\n * same (soon-to-be-revoked) token.\n */\n function refreshTokens(opts?: { tenantId?: string }): Promise<void> {\n // If switching tenant, bypass deduplication cache to force a new request\n if (opts?.tenantId) {\n isRefreshing = true\n return refreshTokensInternal(opts).finally(() => {\n isRefreshing = false\n })\n }\n\n if (refreshPromise) return refreshPromise\n\n isRefreshing = true\n refreshPromise = refreshTokensInternal().finally(() => {\n isRefreshing = false\n refreshPromise = null\n })\n\n return refreshPromise\n }\n\n async function request<T>(method: string, path: string, body?: unknown): Promise<T> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...config.headers,\n }\n\n // Publishable key header for public endpoints\n if (appContext?.publishableKey) {\n headers['X-Publishable-Key'] = appContext.publishableKey\n }\n\n // Only send Bearer token on endpoints that use JWT guard (not session-based)\n const isSessionPath = sessionPaths.includes(path)\n if (accessToken && !isSessionPath) {\n headers['Authorization'] = `Bearer ${accessToken}`\n }\n\n // CSRF token (from memory or cookie)\n const csrf = getCsrfToken()\n if (csrf) {\n headers['X-CSRF-Token'] = csrf\n }\n\n // For session paths (refresh/bootstrap/logout), inject refresh token into body\n let requestBody = body\n if (isSessionPath && refreshToken) {\n const existing =\n typeof body === 'object' && body !== null ? (body as Record<string, unknown>) : {}\n if (!existing['rt']) {\n requestBody = { ...existing, rt: refreshToken }\n }\n }\n\n let res = await fetch(`${baseUrl}${path}`, {\n method,\n headers,\n credentials: 'include',\n ...(requestBody !== undefined ? { body: JSON.stringify(requestBody) } : {}),\n })\n\n // Auto-refresh on 401 (skip for auth endpoints that don't use JWT)\n const skipRefreshPaths = [\n paths.refresh,\n paths.login,\n paths.signup,\n paths.bootstrap,\n paths.logout,\n ]\n if (res.status === 401 && !skipRefreshPaths.includes(path as typeof paths.refresh)) {\n try {\n await refreshTokens()\n } catch {\n let msg = 'Session expired'\n try {\n const json = await res.json()\n msg =\n json.message ||\n json.error?.message ||\n (typeof json.error === 'string' ? json.error : null) ||\n msg\n } catch {\n // ignore parse errors\n }\n throw new Error(msg)\n }\n\n // Retry the original request with the new token\n const retryHeaders: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...config.headers,\n }\n if (appContext?.publishableKey) {\n retryHeaders['X-Publishable-Key'] = appContext.publishableKey\n }\n if (accessToken && !isSessionPath) {\n retryHeaders['Authorization'] = `Bearer ${accessToken}`\n }\n const retryCsrf = getCsrfToken()\n if (retryCsrf) {\n retryHeaders['X-CSRF-Token'] = retryCsrf\n }\n\n res = await fetch(`${baseUrl}${path}`, {\n method,\n headers: retryHeaders,\n credentials: 'include',\n ...(requestBody !== undefined ? { body: JSON.stringify(requestBody) } : {}),\n })\n }\n\n if (!res.ok) {\n let msg = `Error ${res.status}`\n try {\n const json = await res.json()\n msg =\n json.message ||\n json.error?.message ||\n (typeof json.error === 'string' ? json.error : null) ||\n msg\n } catch {\n // ignore parse errors\n }\n const err = new Error(msg)\n ;(err as ApiError).status = res.status\n throw err\n }\n\n // Handle 204 No Content\n if (res.status === 204) return undefined as T\n\n // Unwrap API envelope { data, meta } → return inner data\n const json = await res.json()\n if (json && typeof json === 'object' && 'data' in json && 'meta' in json) {\n return json.data as T\n }\n return json as T\n }\n\n return {\n post: <T = unknown>(path: string, body?: unknown) => request<T>('POST', path, body),\n get: <T = unknown>(path: string) => request<T>('GET', path),\n patch: <T = unknown>(path: string, body?: unknown) => request<T>('PATCH', path, body),\n del: <T = unknown>(path: string) => request<T>('DELETE', path),\n paths,\n baseUrl,\n appContext,\n setAccessToken,\n getAccessToken,\n setRefreshToken,\n getRefreshToken,\n setCsrfToken,\n getCsrfToken,\n refreshSession: (opts?: { tenantId?: string }) => refreshTokens(opts),\n }\n}\n\nexport { PATHS }\n","import type { AccessMessages } from '../types'\n\nexport const es: AccessMessages = {\n login: {\n title: 'Inicia sesión en tu cuenta',\n description: 'Ingresa tus credenciales para acceder al dashboard.',\n submit: 'Iniciar sesión',\n emailLabel: 'Correo electrónico',\n emailPlaceholder: 'tu@empresa.com',\n passwordLabel: 'Contraseña',\n passwordPlaceholder: '••••••••',\n },\n signup: {\n title: 'Crea tu cuenta',\n description: 'Ingresa tus datos para registrarte.',\n submit: 'Crear cuenta',\n emailLabel: 'Correo electrónico',\n emailPlaceholder: 'tu@empresa.com',\n passwordLabel: 'Contraseña',\n passwordPlaceholder: 'Mín. 10 caracteres',\n confirmPasswordLabel: 'Confirmar contraseña',\n confirmPasswordPlaceholder: 'Repite tu contraseña',\n },\n forgotPassword: {\n title: 'Recuperar contraseña',\n description:\n 'Ingresa tu correo electrónico y te enviaremos un enlace para restablecer tu contraseña.',\n submit: 'Enviar enlace',\n emailLabel: 'Correo electrónico',\n emailPlaceholder: 'tu@empresa.com',\n successMessage: 'Revisa tu correo electrónico para restablecer tu contraseña.',\n },\n resetPassword: {\n title: 'Restablecer contraseña',\n description: 'Ingresa tu nueva contraseña.',\n submit: 'Restablecer contraseña',\n newPasswordLabel: 'Nueva contraseña',\n newPasswordPlaceholder: 'Mín. 10 caracteres',\n confirmPasswordLabel: 'Confirmar contraseña',\n confirmPasswordPlaceholder: 'Repite tu contraseña',\n },\n social: {\n google: 'Continuar con Google',\n apple: 'Continuar con Apple',\n separator: 'o continuar con correo',\n comingSoon: 'Próximamente',\n },\n passwordToggle: {\n show: 'Ver',\n hide: 'Ocultar',\n },\n securedBy: 'Protegido por',\n billing: {\n pay: 'Pagar',\n selectPaymentMethod: 'Selecciona método de pago',\n creditCard: 'Tarjeta de crédito/débito',\n paypal: 'PayPal',\n payphone: 'Payphone',\n bankTransfer: 'Transferencia bancaria',\n cancel: 'Cancelar',\n processing: 'Procesando...',\n },\n navigation: {\n noAccountText: '¿No tienes cuenta?',\n signUpLink: 'Regístrate',\n hasAccountText: '¿Ya tienes cuenta?',\n signInLink: 'Inicia sesión',\n forgotPassword: '¿Olvidaste tu contraseña?',\n backToLogin: 'Volver a iniciar sesión',\n },\n validation: {\n emailRequired: 'El correo es requerido',\n emailInvalid: 'Correo electrónico inválido',\n passwordRequired: 'La contraseña es requerida',\n passwordMinLength: 'La contraseña debe tener al menos 10 caracteres',\n confirmPasswordRequired: 'Confirma tu contraseña',\n passwordsMismatch: 'Las contraseñas no coinciden',\n tokenRequired: 'El token es requerido',\n newPasswordRequired: 'La nueva contraseña es requerida',\n currentPasswordRequired: 'La contraseña actual es requerida',\n mfaCodeRequired: 'El código es requerido',\n mfaCodeLength: 'El código debe tener 6 dígitos',\n providerRequired: 'El proveedor es requerido',\n providerIdRequired: 'El ID de proveedor es requerido',\n urlInvalid: 'URL inválida',\n },\n}\n","import type { AccessMessages } from '../types'\n\nexport const en: AccessMessages = {\n login: {\n title: 'Sign in to your account',\n description: 'Enter your credentials to access the dashboard.',\n submit: 'Sign in',\n emailLabel: 'Email',\n emailPlaceholder: 'you@company.com',\n passwordLabel: 'Password',\n passwordPlaceholder: '••••••••',\n },\n signup: {\n title: 'Create your account',\n description: 'Enter your details to sign up.',\n submit: 'Create account',\n emailLabel: 'Email',\n emailPlaceholder: 'you@company.com',\n passwordLabel: 'Password',\n passwordPlaceholder: 'Min. 10 characters',\n confirmPasswordLabel: 'Confirm password',\n confirmPasswordPlaceholder: 'Repeat your password',\n },\n forgotPassword: {\n title: 'Reset password',\n description: \"Enter your email and we'll send you a link to reset your password.\",\n submit: 'Send link',\n emailLabel: 'Email',\n emailPlaceholder: 'you@company.com',\n successMessage: 'Check your email to reset your password.',\n },\n resetPassword: {\n title: 'Reset password',\n description: 'Enter your new password.',\n submit: 'Reset password',\n newPasswordLabel: 'New password',\n newPasswordPlaceholder: 'Min. 10 characters',\n confirmPasswordLabel: 'Confirm password',\n confirmPasswordPlaceholder: 'Repeat your password',\n },\n social: {\n google: 'Continue with Google',\n apple: 'Continue with Apple',\n separator: 'or continue with email',\n comingSoon: 'Coming soon',\n },\n passwordToggle: {\n show: 'Show',\n hide: 'Hide',\n },\n securedBy: 'Secured by',\n billing: {\n pay: 'Pay',\n selectPaymentMethod: 'Select payment method',\n creditCard: 'Credit/Debit Card',\n paypal: 'PayPal',\n payphone: 'Payphone',\n bankTransfer: 'Bank Transfer',\n cancel: 'Cancel',\n processing: 'Processing...',\n },\n navigation: {\n noAccountText: \"Don't have an account?\",\n signUpLink: 'Sign up',\n hasAccountText: 'Already have an account?',\n signInLink: 'Sign in',\n forgotPassword: 'Forgot your password?',\n backToLogin: 'Back to sign in',\n },\n validation: {\n emailRequired: 'Email is required',\n emailInvalid: 'Invalid email address',\n passwordRequired: 'Password is required',\n passwordMinLength: 'Password must be at least 10 characters',\n confirmPasswordRequired: 'Please confirm your password',\n passwordsMismatch: 'Passwords do not match',\n tokenRequired: 'Token is required',\n newPasswordRequired: 'New password is required',\n currentPasswordRequired: 'Current password is required',\n mfaCodeRequired: 'Code is required',\n mfaCodeLength: 'Code must be 6 digits',\n providerRequired: 'Provider is required',\n providerIdRequired: 'Provider ID is required',\n urlInvalid: 'Invalid URL',\n },\n}\n","import type { AccessMessages, SupportedLocale } from '../types'\nimport { es } from './es'\nimport { en } from './en'\n\nconst dictionaries: Record<SupportedLocale, AccessMessages> = { es, en }\n\n/**\n * Resolve the messages dictionary for a given locale.\n * Optional overrides are shallow-merged per section.\n */\nexport function resolveMessages(\n locale: SupportedLocale = 'es',\n overrides?: Partial<AccessMessages>,\n): AccessMessages {\n const base = dictionaries[locale] ?? dictionaries.es\n if (!overrides) return base\n\n return {\n login: { ...base.login, ...overrides.login },\n signup: { ...base.signup, ...overrides.signup },\n forgotPassword: { ...base.forgotPassword, ...overrides.forgotPassword },\n resetPassword: { ...base.resetPassword, ...overrides.resetPassword },\n navigation: { ...base.navigation, ...overrides.navigation },\n social: { ...base.social, ...overrides.social },\n passwordToggle: { ...base.passwordToggle, ...overrides.passwordToggle },\n securedBy: overrides.securedBy ?? base.securedBy,\n billing: { ...base.billing, ...overrides.billing },\n validation: { ...base.validation, ...overrides.validation },\n }\n}\n\nexport { es, en }\n","// Auto-generated — do not edit.\nexport const css = \"/*! tailwindcss v4.2.1 | MIT License | https://tailwindcss.com */\\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){[data-azirid] *,[data-azirid] :before,[data-azirid] :after,[data-azirid] ::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-content:\\\"\\\"}}[data-azirid]{--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \\\"Liberation Mono\\\", \\\"Courier New\\\", monospace;--color-green-50:oklch(98.2% .018 155.826);--color-green-200:oklch(92.5% .084 155.995);--color-green-800:oklch(44.8% .119 151.328);--color-green-950:oklch(26.6% .065 152.934);--color-blue-500:oklch(62.3% .214 259.815);--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--font-weight-medium:500;--leading-snug:1.375;--radius-md:calc(var(--aa-radius) - 2px);--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--aa-font-sans,ui-sans-serif, system-ui, sans-serif);--default-mono-font-family:var(--font-mono)}.\\\\@container\\\\/card-header{container:card-header/inline-size}.collapse{visibility:collapse}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.start{inset-inline-start:var(--spacing)}.z-10{z-index:10}.col-start-2{grid-column-start:2}.row-span-2{grid-row:span 2/span 2}.row-start-1{grid-row-start:1}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.mx-auto{margin-inline:auto}.mr-2{margin-right:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.h-4{height:calc(var(--spacing) * 4)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.w-4{width:calc(var(--spacing) * 4)}.w-auto{width:auto}.w-full{width:100%}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:calc(var(--spacing) * 0)}.shrink-0{flex-shrink:0}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-spin{animation:var(--animate-spin)}.cursor-pointer{cursor:pointer}.auto-rows-min{grid-auto-rows:min-content}.flex-col{flex-direction:column}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\\\\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}.self-center{align-self:center}.self-start{align-self:flex-start}.justify-self-end{justify-self:flex-end}.overflow-hidden{overflow:hidden}.rounded-\\\\[min\\\\(var\\\\(--radius-md\\\\)\\\\,10px\\\\)\\\\]{border-radius:min(var(--radius-md), 10px)}.rounded-\\\\[min\\\\(var\\\\(--radius-md\\\\)\\\\,12px\\\\)\\\\]{border-radius:min(var(--radius-md), 12px)}.rounded-lg{border-radius:var(--aa-radius)}.rounded-md{border-radius:calc(var(--aa-radius) - 2px)}.rounded-xl{border-radius:calc(var(--aa-radius) + 4px)}.rounded-t-xl{border-top-left-radius:calc(var(--aa-radius) + 4px);border-top-right-radius:calc(var(--aa-radius) + 4px)}.rounded-b-xl{border-bottom-right-radius:calc(var(--aa-radius) + 4px);border-bottom-left-radius:calc(var(--aa-radius) + 4px)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-border{border-color:var(--aa-border)}.border-destructive,.border-destructive\\\\/50{border-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.border-destructive\\\\/50{border-color:color-mix(in oklab, var(--aa-destructive) 50%, transparent)}}.border-green-200{border-color:var(--color-green-200)}.border-input{border-color:var(--aa-input)}.border-transparent{border-color:#0000}.bg-background{background-color:var(--aa-background)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-border{background-color:var(--aa-border)}.bg-card{background-color:var(--aa-card)}.bg-destructive,.bg-destructive\\\\/10{background-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.bg-destructive\\\\/10{background-color:color-mix(in oklab, var(--aa-destructive) 10%, transparent)}}.bg-green-50{background-color:var(--color-green-50)}.bg-muted,.bg-muted\\\\/50{background-color:var(--aa-muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\\\\/50{background-color:color-mix(in oklab, var(--aa-muted) 50%, transparent)}}.bg-primary{background-color:var(--aa-primary)}.bg-secondary{background-color:var(--aa-secondary)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-clip-padding{background-clip:padding-box}.p-4{padding:calc(var(--spacing) * 4)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\\\\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.text-center{text-align:center}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\\\[0\\\\.8rem\\\\]{font-size:.8rem}.leading-none{--tw-leading:1;line-height:1}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.whitespace-nowrap{white-space:nowrap}.text-card-foreground{color:var(--aa-card-foreground)}.text-destructive{color:var(--aa-destructive)}.text-green-800{color:var(--color-green-800)}.text-muted-foreground{color:var(--aa-muted-foreground)}.text-primary{color:var(--aa-primary)}.text-primary-foreground{color:var(--aa-primary-foreground)}.text-secondary-foreground{color:var(--aa-secondary-foreground)}.uppercase{text-transform:uppercase}.underline-offset-4{text-underline-offset:4px}.opacity-25{opacity:.25}.opacity-75{opacity:.75}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-foreground,.ring-foreground\\\\/10{--tw-ring-color:var(--aa-foreground)}@supports (color:color-mix(in lab, red, red)){.ring-foreground\\\\/10{--tw-ring-color:color-mix(in oklab, var(--aa-foreground) 10%, transparent)}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.group-data-\\\\[disabled\\\\=true\\\\]\\\\:pointer-events-none:is(:where(.group)[data-disabled=true] *){pointer-events:none}.group-data-\\\\[disabled\\\\=true\\\\]\\\\:opacity-50:is(:where(.group)[data-disabled=true] *){opacity:.5}.group-data-\\\\[size\\\\=sm\\\\]\\\\/card\\\\:p-3:is(:where(.group\\\\/card)[data-size=sm] *){padding:calc(var(--spacing) * 3)}.group-data-\\\\[size\\\\=sm\\\\]\\\\/card\\\\:px-3:is(:where(.group\\\\/card)[data-size=sm] *){padding-inline:calc(var(--spacing) * 3)}.group-data-\\\\[size\\\\=sm\\\\]\\\\/card\\\\:text-sm:is(:where(.group\\\\/card)[data-size=sm] *){font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.peer-disabled\\\\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\\\\:opacity-50:is(:where(.peer):disabled~*){opacity:.5}.file\\\\:inline-flex::file-selector-button{display:inline-flex}.file\\\\:h-6::file-selector-button{height:calc(var(--spacing) * 6)}.file\\\\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\\\\:bg-transparent::file-selector-button{background-color:#0000}.file\\\\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\\\\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\\\\:text-foreground::file-selector-button{color:var(--aa-foreground)}.placeholder\\\\:text-muted-foreground::placeholder{color:var(--aa-muted-foreground)}.after\\\\:absolute:after{content:var(--tw-content);position:absolute}.after\\\\:inset-0:after{content:var(--tw-content);inset:calc(var(--spacing) * 0)}.after\\\\:top-1\\\\/2:after{content:var(--tw-content);top:50%}.after\\\\:z-0:after{content:var(--tw-content);z-index:0}.after\\\\:flex:after{content:var(--tw-content);display:flex}.after\\\\:items-center:after{content:var(--tw-content);align-items:center}.after\\\\:border-t:after{content:var(--tw-content);border-top-style:var(--tw-border-style);border-top-width:1px}.after\\\\:border-border:after{content:var(--tw-content);border-color:var(--aa-border)}@media (hover:hover){.hover\\\\:bg-destructive\\\\/20:hover{background-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.hover\\\\:bg-destructive\\\\/20:hover{background-color:color-mix(in oklab, var(--aa-destructive) 20%, transparent)}}.hover\\\\:bg-muted:hover{background-color:var(--aa-muted)}.hover\\\\:bg-secondary\\\\/80:hover{background-color:var(--aa-secondary)}@supports (color:color-mix(in lab, red, red)){.hover\\\\:bg-secondary\\\\/80:hover{background-color:color-mix(in oklab, var(--aa-secondary) 80%, transparent)}}.hover\\\\:text-foreground:hover{color:var(--aa-foreground)}.hover\\\\:underline:hover{text-decoration-line:underline}}.focus-visible\\\\:border-destructive\\\\/40:focus-visible{border-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\\\:border-destructive\\\\/40:focus-visible{border-color:color-mix(in oklab, var(--aa-destructive) 40%, transparent)}}.focus-visible\\\\:border-ring:focus-visible{border-color:var(--aa-ring)}.focus-visible\\\\:ring-3:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\\\\:ring-destructive\\\\/20:focus-visible{--tw-ring-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\\\:ring-destructive\\\\/20:focus-visible{--tw-ring-color:color-mix(in oklab, var(--aa-destructive) 20%, transparent)}}.focus-visible\\\\:ring-ring\\\\/50:focus-visible{--tw-ring-color:var(--aa-ring)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\\\:ring-ring\\\\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--aa-ring) 50%, transparent)}}.disabled\\\\:pointer-events-none:disabled{pointer-events:none}.disabled\\\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\\\:bg-input\\\\/50:disabled{background-color:var(--aa-input)}@supports (color:color-mix(in lab, red, red)){.disabled\\\\:bg-input\\\\/50:disabled{background-color:color-mix(in oklab, var(--aa-input) 50%, transparent)}}.disabled\\\\:opacity-50:disabled{opacity:.5}:where([data-slot=button-group]) .in-data-\\\\[slot\\\\=button-group\\\\]\\\\:rounded-lg{border-radius:var(--aa-radius)}.has-data-\\\\[icon\\\\=inline-end\\\\]\\\\:pr-1\\\\.5:has([data-icon=inline-end]){padding-right:calc(var(--spacing) * 1.5)}.has-data-\\\\[icon\\\\=inline-end\\\\]\\\\:pr-2:has([data-icon=inline-end]){padding-right:calc(var(--spacing) * 2)}.has-data-\\\\[icon\\\\=inline-end\\\\]\\\\:pr-3:has([data-icon=inline-end]){padding-right:calc(var(--spacing) * 3)}.has-data-\\\\[icon\\\\=inline-start\\\\]\\\\:pl-1\\\\.5:has([data-icon=inline-start]){padding-left:calc(var(--spacing) * 1.5)}.has-data-\\\\[icon\\\\=inline-start\\\\]\\\\:pl-2:has([data-icon=inline-start]){padding-left:calc(var(--spacing) * 2)}.has-data-\\\\[icon\\\\=inline-start\\\\]\\\\:pl-3:has([data-icon=inline-start]){padding-left:calc(var(--spacing) * 3)}.has-data-\\\\[slot\\\\=card-action\\\\]\\\\:grid-cols-\\\\[1fr_auto\\\\]:has([data-slot=card-action]){grid-template-columns:1fr auto}.has-data-\\\\[slot\\\\=card-description\\\\]\\\\:grid-rows-\\\\[auto_auto\\\\]:has([data-slot=card-description]){grid-template-rows:auto auto}.has-data-\\\\[slot\\\\=card-footer\\\\]\\\\:pb-0:has([data-slot=card-footer]){padding-bottom:calc(var(--spacing) * 0)}.has-\\\\[\\\\>img\\\\:first-child\\\\]\\\\:pt-0:has(>img:first-child){padding-top:calc(var(--spacing) * 0)}.aria-expanded\\\\:bg-muted[aria-expanded=true]{background-color:var(--aa-muted)}.aria-expanded\\\\:bg-secondary[aria-expanded=true]{background-color:var(--aa-secondary)}.aria-expanded\\\\:text-foreground[aria-expanded=true]{color:var(--aa-foreground)}.aria-expanded\\\\:text-secondary-foreground[aria-expanded=true]{color:var(--aa-secondary-foreground)}.aria-invalid\\\\:border-destructive[aria-invalid=true]{border-color:var(--aa-destructive)}.aria-invalid\\\\:ring-3[aria-invalid=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.aria-invalid\\\\:ring-destructive\\\\/20[aria-invalid=true]{--tw-ring-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.aria-invalid\\\\:ring-destructive\\\\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--aa-destructive) 20%, transparent)}}.data-horizontal\\\\:h-px[data-horizontal]{height:1px}.data-horizontal\\\\:w-full[data-horizontal]{width:100%}.data-vertical\\\\:w-px[data-vertical]{width:1px}.data-vertical\\\\:self-stretch[data-vertical]{align-self:stretch}.data-\\\\[size\\\\=sm\\\\]\\\\:gap-3[data-size=sm]{gap:calc(var(--spacing) * 3)}.data-\\\\[size\\\\=sm\\\\]\\\\:py-3[data-size=sm]{padding-block:calc(var(--spacing) * 3)}.data-\\\\[size\\\\=sm\\\\]\\\\:has-data-\\\\[slot\\\\=card-footer\\\\]\\\\:pb-0[data-size=sm]:has([data-slot=card-footer]){padding-bottom:calc(var(--spacing) * 0)}@media (min-width:48rem){.md\\\\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.dark\\\\:border-green-800:is(.dark *){border-color:var(--color-green-800)}.dark\\\\:border-input:is(.dark *){border-color:var(--aa-input)}.dark\\\\:bg-destructive\\\\/20:is(.dark *){background-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:bg-destructive\\\\/20:is(.dark *){background-color:color-mix(in oklab, var(--aa-destructive) 20%, transparent)}}.dark\\\\:bg-green-950:is(.dark *){background-color:var(--color-green-950)}.dark\\\\:bg-input\\\\/30:is(.dark *){background-color:var(--aa-input)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:bg-input\\\\/30:is(.dark *){background-color:color-mix(in oklab, var(--aa-input) 30%, transparent)}}.dark\\\\:text-green-200:is(.dark *){color:var(--color-green-200)}@media (hover:hover){.dark\\\\:hover\\\\:bg-destructive\\\\/30:is(.dark *):hover{background-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:hover\\\\:bg-destructive\\\\/30:is(.dark *):hover{background-color:color-mix(in oklab, var(--aa-destructive) 30%, transparent)}}.dark\\\\:hover\\\\:bg-input\\\\/50:is(.dark *):hover{background-color:var(--aa-input)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:hover\\\\:bg-input\\\\/50:is(.dark *):hover{background-color:color-mix(in oklab, var(--aa-input) 50%, transparent)}}.dark\\\\:hover\\\\:bg-muted\\\\/50:is(.dark *):hover{background-color:var(--aa-muted)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:hover\\\\:bg-muted\\\\/50:is(.dark *):hover{background-color:color-mix(in oklab, var(--aa-muted) 50%, transparent)}}}.dark\\\\:focus-visible\\\\:ring-destructive\\\\/40:is(.dark *):focus-visible{--tw-ring-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:focus-visible\\\\:ring-destructive\\\\/40:is(.dark *):focus-visible{--tw-ring-color:color-mix(in oklab, var(--aa-destructive) 40%, transparent)}}.dark\\\\:disabled\\\\:bg-input\\\\/80:is(.dark *):disabled{background-color:var(--aa-input)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:disabled\\\\:bg-input\\\\/80:is(.dark *):disabled{background-color:color-mix(in oklab, var(--aa-input) 80%, transparent)}}.dark\\\\:aria-invalid\\\\:border-destructive\\\\/50:is(.dark *)[aria-invalid=true]{border-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:aria-invalid\\\\:border-destructive\\\\/50:is(.dark *)[aria-invalid=true]{border-color:color-mix(in oklab, var(--aa-destructive) 50%, transparent)}}.dark\\\\:aria-invalid\\\\:ring-destructive\\\\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:aria-invalid\\\\:ring-destructive\\\\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--aa-destructive) 40%, transparent)}}.\\\\[\\\\&_a\\\\]\\\\:underline a{text-decoration-line:underline}.\\\\[\\\\&_a\\\\]\\\\:underline-offset-4 a{text-underline-offset:4px}@media (hover:hover){.\\\\[\\\\&_a\\\\]\\\\:hover\\\\:text-primary a:hover{color:var(--aa-primary)}}.\\\\[\\\\&_svg\\\\]\\\\:pointer-events-none svg{pointer-events:none}.\\\\[\\\\&_svg\\\\]\\\\:shrink-0 svg{flex-shrink:0}.\\\\[\\\\&_svg\\\\:not\\\\(\\\\[class\\\\*\\\\=\\\\'size-\\\\'\\\\]\\\\)\\\\]\\\\:size-3 svg:not([class*=size-]){width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.\\\\[\\\\&_svg\\\\:not\\\\(\\\\[class\\\\*\\\\=\\\\'size-\\\\'\\\\]\\\\)\\\\]\\\\:size-3\\\\.5 svg:not([class*=size-]){width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.\\\\[\\\\&_svg\\\\:not\\\\(\\\\[class\\\\*\\\\=\\\\'size-\\\\'\\\\]\\\\)\\\\]\\\\:size-4 svg:not([class*=size-]){width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\\\\[\\\\.border-b\\\\]\\\\:pb-4.border-b{padding-bottom:calc(var(--spacing) * 4)}.group-data-\\\\[size\\\\=sm\\\\]\\\\/card\\\\:\\\\[\\\\.border-b\\\\]\\\\:pb-3:is(:where(.group\\\\/card)[data-size=sm] *).border-b{padding-bottom:calc(var(--spacing) * 3)}@media (hover:hover){.\\\\[a\\\\]\\\\:hover\\\\:bg-primary\\\\/80:is(a):hover{background-color:var(--aa-primary)}@supports (color:color-mix(in lab, red, red)){.\\\\[a\\\\]\\\\:hover\\\\:bg-primary\\\\/80:is(a):hover{background-color:color-mix(in oklab, var(--aa-primary) 80%, transparent)}}}:is(.\\\\*\\\\:\\\\[img\\\\:first-child\\\\]\\\\:rounded-t-xl>*):is(img:first-child){border-top-left-radius:calc(var(--aa-radius) + 4px);border-top-right-radius:calc(var(--aa-radius) + 4px)}:is(.\\\\*\\\\:\\\\[img\\\\:last-child\\\\]\\\\:rounded-b-xl>*):is(img:last-child){border-bottom-right-radius:calc(var(--aa-radius) + 4px);border-bottom-left-radius:calc(var(--aa-radius) + 4px)}[data-azirid]{--aa-radius:.625rem;--aa-background:oklch(100% 0 0);--aa-foreground:oklch(14.5% 0 0);--aa-card:oklch(100% 0 0);--aa-card-foreground:oklch(14.5% 0 0);--aa-popover:oklch(100% 0 0);--aa-popover-foreground:oklch(14.5% 0 0);--aa-primary:oklch(20.5% 0 0);--aa-primary-foreground:oklch(98.5% 0 0);--aa-secondary:oklch(97% 0 0);--aa-secondary-foreground:oklch(20.5% 0 0);--aa-muted:oklch(97% 0 0);--aa-muted-foreground:oklch(55.6% 0 0);--aa-accent:oklch(97% 0 0);--aa-accent-foreground:oklch(20.5% 0 0);--aa-destructive:oklch(57.7% .245 27.325);--aa-border:oklch(92.2% 0 0);--aa-input:oklch(92.2% 0 0);--aa-ring:oklch(70.8% 0 0);--aa-font-sans:ui-sans-serif, system-ui, sans-serif}@layer base{[data-azirid]{font-family:var(--aa-font-sans);color:var(--aa-foreground);background-color:var(--aa-background);-webkit-text-size-adjust:100%;tab-size:4;-webkit-font-smoothing:antialiased;line-height:1.5}[data-azirid] *,[data-azirid] :before,[data-azirid] :after{box-sizing:border-box;border:0 solid;border-color:var(--aa-border);margin:0;padding:0}[data-azirid] hr{height:0;color:inherit;border-top-width:1px}[data-azirid] h1,[data-azirid] h2,[data-azirid] h3,[data-azirid] h4,[data-azirid] h5,[data-azirid] h6{font-size:inherit;font-weight:inherit}[data-azirid] a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}[data-azirid] b,[data-azirid] strong{font-weight:bolder}[data-azirid] code,[data-azirid] kbd,[data-azirid] samp,[data-azirid] pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}[data-azirid] small{font-size:80%}[data-azirid] table{text-indent:0;border-color:inherit;border-collapse:collapse}[data-azirid] button,[data-azirid] input,[data-azirid] optgroup,[data-azirid] select,[data-azirid] textarea{font-feature-settings:inherit;font-variation-settings:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}[data-azirid] button,[data-azirid] select{text-transform:none}[data-azirid] button,[data-azirid] input[type=button],[data-azirid] input[type=reset],[data-azirid] input[type=submit]{-webkit-appearance:button;background-color:#0000;background-image:none}[data-azirid] :-moz-focusring{outline:auto}[data-azirid] ::-moz-focus-inner{border-style:none;padding:0}[data-azirid] :-moz-ui-invalid{box-shadow:none}[data-azirid] progress{vertical-align:baseline}[data-azirid] ::-webkit-inner-spin-button{height:auto}[data-azirid] ::-webkit-outer-spin-button{height:auto}[data-azirid] [type=search]{-webkit-appearance:textfield;outline-offset:-2px}[data-azirid] ::-webkit-search-decoration{-webkit-appearance:none}[data-azirid] ::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}[data-azirid] summary{display:list-item}[data-azirid] ol,[data-azirid] ul,[data-azirid] menu{margin:0;padding:0;list-style:none}[data-azirid] textarea{resize:vertical}[data-azirid] ::placeholder{opacity:1;color:currentColor}@supports (color:color-mix(in lab, red, red)){[data-azirid] ::placeholder{color:color-mix(in oklch, currentColor 50%, transparent)}}[data-azirid] img,[data-azirid] svg,[data-azirid] video,[data-azirid] canvas,[data-azirid] audio,[data-azirid] iframe,[data-azirid] embed,[data-azirid] object{vertical-align:middle;display:block}[data-azirid] img,[data-azirid] video{max-width:100%;height:auto}[data-azirid] [hidden]:not([hidden=until-found]){display:none}}@property --tw-rotate-x{syntax:\\\"*\\\";inherits:false}@property --tw-rotate-y{syntax:\\\"*\\\";inherits:false}@property --tw-rotate-z{syntax:\\\"*\\\";inherits:false}@property --tw-skew-x{syntax:\\\"*\\\";inherits:false}@property --tw-skew-y{syntax:\\\"*\\\";inherits:false}@property --tw-border-style{syntax:\\\"*\\\";inherits:false;initial-value:solid}@property --tw-leading{syntax:\\\"*\\\";inherits:false}@property --tw-font-weight{syntax:\\\"*\\\";inherits:false}@property --tw-shadow{syntax:\\\"*\\\";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:\\\"*\\\";inherits:false}@property --tw-shadow-alpha{syntax:\\\"<percentage>\\\";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:\\\"*\\\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:\\\"*\\\";inherits:false}@property --tw-inset-shadow-alpha{syntax:\\\"<percentage>\\\";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:\\\"*\\\";inherits:false}@property --tw-ring-shadow{syntax:\\\"*\\\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:\\\"*\\\";inherits:false}@property --tw-inset-ring-shadow{syntax:\\\"*\\\";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:\\\"*\\\";inherits:false}@property --tw-ring-offset-width{syntax:\\\"<length>\\\";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:\\\"*\\\";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:\\\"*\\\";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:\\\"*\\\";inherits:false;initial-value:solid}@property --tw-content{syntax:\\\"*\\\";inherits:false;initial-value:\\\"\\\"}@keyframes spin{to{transform:rotate(360deg)}}\"\n","import { css } from '../styles/generated'\n\nconst STYLE_ID = 'azirid-access-styles'\nlet injected = false\n\nexport function injectStyles() {\n if (injected || typeof document === 'undefined') return\n if (document.getElementById(STYLE_ID)) {\n injected = true\n return\n }\n const style = document.createElement('style')\n style.id = STYLE_ID\n style.textContent = css\n document.head.appendChild(style)\n injected = true\n}\n\n/** Remove injected styles from the DOM (useful when embedding in host apps). */\nexport function removeStyles() {\n if (typeof document === 'undefined') return\n document.getElementById(STYLE_ID)?.remove()\n injected = false\n}\n","import { useCallback } from 'react'\nimport { useMutation, useQueryClient } from '@tanstack/react-query'\nimport type { AccessClient } from '../client'\nimport type { AuthSuccessResponse, AziridProviderProps, SignupData } from '../types'\n\nexport interface MutationDeps {\n client: AccessClient\n props: AziridProviderProps\n setUser: (user: AuthSuccessResponse['user'] | null) => void\n setError: (error: string | null) => void\n updateAccessToken: (token: string | null) => void\n saveSessionTokens: (data: Record<string, unknown>) => void\n normalizeToken: (data: Record<string, unknown>) => string\n withAppContext: (body: Record<string, unknown>) => Record<string, unknown>\n clearSession: () => void\n}\n\nexport function useAuthMutations(deps: MutationDeps) {\n const {\n client,\n props,\n setUser,\n setError,\n updateAccessToken,\n saveSessionTokens,\n normalizeToken,\n withAppContext,\n clearSession,\n } = deps\n\n const queryClient = useQueryClient()\n\n // ─── Login ─────────────────────────────────────────────────\n const loginMutation = useMutation({\n mutationFn: (data: { email: string; password: string }) =>\n client.post<AuthSuccessResponse>(client.paths.login, withAppContext(data)),\n onSuccess: (data) => {\n setUser(data.user)\n updateAccessToken(normalizeToken(data as unknown as Record<string, unknown>))\n saveSessionTokens(data as unknown as Record<string, unknown>)\n setError(null)\n props.onAuthStateChange?.()\n props.onLoginSuccess?.(data)\n },\n onError: (err: Error) => {\n setError(err.message)\n props.onError?.(err.message)\n },\n })\n\n // ─── Signup ────────────────────────────────────────────────\n const signupMutation = useMutation({\n mutationFn: (data: SignupData) => {\n const { confirmPassword: _, ...payload } = data as SignupData & { confirmPassword?: string }\n return client.post<AuthSuccessResponse>(client.paths.signup, withAppContext({ ...payload }))\n },\n onSuccess: (data) => {\n setUser(data.user)\n updateAccessToken(normalizeToken(data as unknown as Record<string, unknown>))\n saveSessionTokens(data as unknown as Record<string, unknown>)\n setError(null)\n props.onAuthStateChange?.()\n props.onSignupSuccess?.(data)\n },\n onError: (err: Error) => {\n setError(err.message)\n props.onError?.(err.message)\n },\n })\n\n // ─── Logout ────────────────────────────────────────────────\n const logoutMutation = useMutation({\n mutationFn: () => client.post(client.paths.logout),\n onSettled: () => {\n clearSession()\n setError(null)\n queryClient.clear()\n props.onAuthStateChange?.()\n props.onLogoutSuccess?.()\n },\n })\n\n // ─── Refresh ───────────────────────────────────────────────\n const refreshFn = useCallback(async () => {\n try {\n await client.refreshSession()\n updateAccessToken(client.getAccessToken())\n } catch (err) {\n clearSession()\n queryClient.clear()\n props.onSessionExpired?.()\n throw err\n }\n }, [client, queryClient, props, updateAccessToken, clearSession])\n\n // ─── Switch Tenant ─────────────────────────────────────────\n const switchTenantFn = useCallback(\n async (tenantId: string) => {\n await client.refreshSession({ tenantId })\n updateAccessToken(client.getAccessToken())\n await queryClient.invalidateQueries({ queryKey: ['azirid-access'] })\n },\n [client, queryClient, updateAccessToken],\n )\n\n return {\n loginMutation,\n signupMutation,\n logoutMutation,\n refreshFn,\n switchTenantFn,\n }\n}\n","import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react'\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query'\nimport { createAccessClient, isAuthError, BASE_PATHS, type AccessClient } from '../client'\nimport type {\n AziridContextValue,\n AccessMessages,\n AziridProviderProps,\n AppBranding,\n AuthUser,\n BootstrapResponse,\n SignupData,\n} from '../types'\nimport { resolveMessages } from '../i18n'\nimport { injectStyles, removeStyles } from '../utils/inject-styles'\nimport { useAuthMutations } from './mutations'\n\n// ─── Contexts ────────────────────────────────────────────────\nconst AziridContext = createContext<AziridContextValue | null>(null)\nAziridContext.displayName = 'AziridContext'\n\nconst ClientContext = createContext<AccessClient | null>(null)\nClientContext.displayName = 'AccessClientContext'\n\ninterface BrandingContextValue {\n branding: AppBranding | null\n messages: AccessMessages\n}\n\nconst BrandingContext = createContext<BrandingContextValue | null>(null)\nBrandingContext.displayName = 'BrandingContext'\n\n/** Access the raw API client for custom calls */\nexport function useAccessClient(): AccessClient {\n const ctx = useContext(ClientContext)\n if (!ctx) {\n throw new Error('useAccessClient must be used within an <AziridProvider>.')\n }\n return ctx\n}\n\n/**\n * Get the current app branding from bootstrap.\n * Returns null when no branding is configured.\n */\nexport function useBranding(): AppBranding | null {\n const ctx = useContext(BrandingContext)\n return ctx?.branding ?? null\n}\n\n/**\n * Get resolved i18n messages for the current locale.\n * Falls back to Spanish (es) if no provider is found.\n */\nexport function useMessages(): AccessMessages {\n const ctx = useContext(BrandingContext)\n if (ctx) return ctx.messages\n return resolveMessages('es')\n}\n\n// Default query client\nconst defaultQueryClient = new QueryClient({\n defaultOptions: {\n queries: { retry: false, refetchOnWindowFocus: false },\n },\n})\n\n// ─── Inner Provider ──────────────────────────────────────────\nfunction AziridProviderInner({\n children,\n client,\n props,\n}: {\n children: React.ReactNode\n client: AccessClient\n props: AziridProviderProps\n}) {\n const [user, setUser] = useState<AuthUser | null>(null)\n const [accessToken, setAccessToken] = useState<string | null>(null)\n const [error, setError] = useState<string | null>(null)\n const [branding, setBranding] = useState<AppBranding | null>(null)\n // Start as true when autoBootstrap is enabled — prevents flash of login form on F5.\n const [isBootstrapping, setIsBootstrapping] = useState(props.autoBootstrap ?? true)\n\n // ─── Branding & i18n ────────────────────────────────────────\n const messages = useMemo(\n () => resolveMessages(props.locale ?? 'es', props.messages),\n [props.locale, props.messages],\n )\n\n const brandingValue = useMemo(() => ({ branding, messages }), [branding, messages])\n\n // ─── Proxy mode detection ───────────────────────────────────\n // Proxy mode when no apiUrl is provided (requests go to same-origin route handler)\n const isProxyMode = !props.apiUrl\n\n // ─── Session Sync (cookie for server components/actions) ────\n const syncUrl = useMemo(() => {\n if (props.sessionSyncUrl === false) return null\n if (props.sessionSyncUrl) return props.sessionSyncUrl\n // In proxy mode: cookies flow through the proxy as first-party — no sync needed.\n if (isProxyMode) return null\n // Cross-origin direct (dev or legacy): sync to local cookie\n if (client.appContext?.publishableKey?.startsWith('pk_dev')) {\n return '/api/auth/session'\n }\n return null\n }, [props.sessionSyncUrl, client.appContext?.publishableKey, isProxyMode])\n\n const syncSession = useCallback(\n (token: string | null) => {\n if (!syncUrl) return\n if (token) {\n fetch(syncUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ token }),\n }).catch(() => {})\n } else {\n fetch(syncUrl, { method: 'DELETE' }).catch(() => {})\n }\n },\n [syncUrl],\n )\n\n /** Sync access token with the client and local cookie */\n const updateAccessToken = useCallback(\n (token: string | null) => {\n setAccessToken(token)\n client.setAccessToken(token)\n syncSession(token)\n },\n [client, syncSession],\n )\n\n /**\n * Save session tokens from API response body.\n * Handles both obfuscated (rt/xc) and explicit (refreshToken/csrfToken) keys.\n */\n const saveSessionTokens = useCallback(\n (data: Record<string, unknown>) => {\n const rt = (data.rt ?? data.refreshToken) as string | undefined\n const xc = (data.xc ?? data.csrfToken) as string | undefined\n if (rt) client.setRefreshToken(rt)\n if (xc) client.setCsrfToken(xc)\n },\n [client],\n )\n\n /** Clear all session state */\n const clearSession = useCallback(() => {\n setUser(null)\n updateAccessToken(null)\n client.setRefreshToken(null)\n client.setCsrfToken(null)\n }, [client, updateAccessToken])\n\n /** Inject tenantId (appId/environment resolved by PublishableKeyGuard via header) */\n const withAppContext = useCallback(\n (body: Record<string, unknown>) => {\n if (client.appContext?.tenantId) {\n return { ...body, tenantId: client.appContext.tenantId }\n }\n return body\n },\n [client],\n )\n\n // ─── Bootstrap ──────────────────────────────────────────────\n const bootstrapCalled = useRef(false)\n\n useEffect(() => {\n const autoBootstrap = props.autoBootstrap ?? true\n if (!autoBootstrap) return\n\n // Prevent double execution in React 18 Strict Mode\n if (bootstrapCalled.current) {\n setIsBootstrapping(false)\n return\n }\n bootstrapCalled.current = true\n\n let cancelled = false\n\n async function bootstrap() {\n setIsBootstrapping(true)\n try {\n const response = await client.post<BootstrapResponse>(client.paths.bootstrap)\n\n if (cancelled) return\n\n if (response.branding) {\n setBranding(response.branding)\n }\n\n if (response.authenticated) {\n const r = response as unknown as Record<string, unknown>\n setUser(response.user)\n updateAccessToken((r.at ?? r.accessToken) as string)\n saveSessionTokens(r)\n }\n } catch (err) {\n if (typeof console !== 'undefined') {\n const msg = err instanceof Error ? err.message : JSON.stringify(err)\n console.warn('[azirid-access] bootstrap failed:', msg)\n }\n } finally {\n if (!cancelled) {\n setIsBootstrapping(false)\n }\n }\n }\n\n bootstrap()\n\n return () => {\n cancelled = true\n }\n }, [client, props.autoBootstrap, updateAccessToken, saveSessionTokens])\n\n // ─── Silent Token Refresh (shared logic) ───────────────────\n // Uses client.refreshSession() which deduplicates concurrent calls.\n // If two triggers fire at the same time (e.g. timer + visibilitychange),\n // only ONE request is sent; the second caller awaits the same promise.\n const silentRefresh = useCallback(async () => {\n if (!client.getAccessToken()) return\n\n // Use Web Locks API to prevent multiple tabs from refreshing simultaneously.\n // If another tab is already refreshing, this tab skips and waits for the\n // BroadcastChannel message with updated tokens.\n if (typeof navigator !== 'undefined' && 'locks' in navigator) {\n let acquired = false\n try {\n await navigator.locks.request(\n 'azirid-token-refresh',\n { ifAvailable: true },\n async (lock) => {\n if (!lock) return // Another tab holds the lock — skip refresh\n acquired = true\n await client.refreshSession()\n updateAccessToken(client.getAccessToken())\n },\n )\n } catch (err) {\n if (acquired && isAuthError(err)) {\n clearSession()\n props.onSessionExpired?.()\n }\n }\n return\n }\n\n // Fallback for browsers without Web Locks\n try {\n await client.refreshSession()\n updateAccessToken(client.getAccessToken())\n } catch (err) {\n if (isAuthError(err)) {\n clearSession()\n props.onSessionExpired?.()\n }\n }\n }, [client, updateAccessToken, clearSession, props])\n\n // ─── Cross-tab Token Sync ─────────────────────────────────\n // When another tab refreshes tokens, sync the React state here.\n useEffect(() => {\n let channel: BroadcastChannel | null = null\n try {\n if (typeof BroadcastChannel !== 'undefined') {\n channel = new BroadcastChannel('azirid-auth')\n channel.onmessage = (event: MessageEvent) => {\n if (event.data?.type === 'token-refreshed' && event.data.accessToken) {\n client.setAccessToken(event.data.accessToken)\n updateAccessToken(event.data.accessToken)\n }\n }\n }\n } catch {\n // BroadcastChannel not available\n }\n return () => {\n try {\n channel?.close()\n } catch {\n // ignore\n }\n }\n }, [client, updateAccessToken])\n\n // ─── Periodic Token Refresh ────────────────────────────────\n useEffect(() => {\n const intervalMs = props.refreshInterval ?? 50_000\n if (intervalMs <= 0) return\n\n const id = setInterval(silentRefresh, intervalMs)\n return () => clearInterval(id)\n }, [props.refreshInterval, silentRefresh])\n\n // ─── Refresh on Tab Visibility ─────────────────────────────\n useEffect(() => {\n function handleVisibilityChange() {\n if (document.visibilityState === 'visible') {\n silentRefresh()\n }\n }\n\n document.addEventListener('visibilitychange', handleVisibilityChange)\n return () => document.removeEventListener('visibilitychange', handleVisibilityChange)\n }, [silentRefresh])\n\n /** Normalize accessToken from API response (obfuscated \"at\" or \"accessToken\") */\n const normalizeToken = useCallback(\n (data: Record<string, unknown>): string => (data.at ?? data.accessToken) as string,\n [],\n )\n\n // ─── Mutations (extracted) ─────────────────────────────────\n const { loginMutation, signupMutation, logoutMutation, refreshFn, switchTenantFn } =\n useAuthMutations({\n client,\n props,\n setUser,\n setError,\n updateAccessToken,\n saveSessionTokens,\n normalizeToken,\n withAppContext,\n clearSession,\n })\n\n // ─── Actions ───────────────────────────────────────────────\n const login = useCallback(\n (data: { email: string; password: string }) => loginMutation.mutate(data),\n [loginMutation],\n )\n\n const signup = useCallback((data: SignupData) => signupMutation.mutate(data), [signupMutation])\n\n const logout = useCallback(() => logoutMutation.mutate(), [logoutMutation])\n const clearError = useCallback(() => setError(null), [])\n\n const setUserFn = useCallback((u: AuthUser | null) => {\n setUser(u)\n }, [])\n\n const value = useMemo<AziridContextValue>(\n () => ({\n user,\n accessToken,\n isAuthenticated: user !== null,\n isLoading: loginMutation.isPending || signupMutation.isPending,\n error,\n login,\n signup,\n logout,\n clearError,\n refresh: refreshFn,\n switchTenant: switchTenantFn,\n setUser: setUserFn,\n isLoginPending: loginMutation.isPending,\n isSignupPending: signupMutation.isPending,\n isBootstrapping,\n loginMutation,\n signupMutation,\n logoutMutation,\n }),\n [\n user,\n accessToken,\n error,\n login,\n signup,\n logout,\n clearError,\n refreshFn,\n switchTenantFn,\n setUserFn,\n loginMutation,\n signupMutation,\n logoutMutation,\n isBootstrapping,\n ],\n )\n\n return (\n <ClientContext.Provider value={client}>\n <AziridContext.Provider value={value}>\n <BrandingContext.Provider value={brandingValue}>{children}</BrandingContext.Provider>\n </AziridContext.Provider>\n </ClientContext.Provider>\n )\n}\n\n// ─── Public Provider ─────────────────────────────────────────\nexport function AziridProvider(props: AziridProviderProps) {\n useEffect(() => {\n injectStyles()\n return () => removeStyles()\n }, [])\n\n const client = useMemo(() => {\n const appContext = props.publishableKey\n ? {\n publishableKey: props.publishableKey,\n tenantId: props.tenantId,\n }\n : undefined\n\n // Proxy mode (no apiUrl): requests go to same-origin /api/auth/*\n // Direct mode (apiUrl set): requests go straight to the Azirid API\n const isProxy = !props.apiUrl\n const baseUrl = isProxy ? '' : props.apiUrl!.replace(/\\/$/, '')\n const basePath = isProxy ? BASE_PATHS.proxy : BASE_PATHS.direct\n\n return createAccessClient(\n { baseUrl, basePath, headers: props.fetchOptions as Record<string, string> },\n appContext,\n )\n }, [props.publishableKey, props.tenantId, props.fetchOptions, props.apiUrl])\n\n return (\n <QueryClientProvider client={defaultQueryClient}>\n <AziridProviderInner client={client} props={props}>\n {props.children}\n </AziridProviderInner>\n </QueryClientProvider>\n )\n}\n\n// ─── Hook ────────────────────────────────────────────────────\nexport function useAzirid(): AziridContextValue {\n const ctx = useContext(AziridContext)\n if (!ctx) {\n throw new Error(\n 'useAzirid must be used within an <AziridProvider>. ' +\n 'Wrap your app (or the relevant subtree) with <AziridProvider>.',\n )\n }\n return ctx\n}\n","import * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { Slot } from 'radix-ui'\n\nimport { cn } from '../../utils/cn'\n\nconst buttonVariants = cva(\n \"cursor-pointer focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-lg border border-transparent bg-clip-padding text-sm font-medium focus-visible:ring-3 aria-invalid:ring-3 [&_svg:not([class*='size-'])]:size-4 group/button inline-flex shrink-0 items-center justify-center whitespace-nowrap transition-all outline-none select-none disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground [a]:hover:bg-primary/80',\n outline:\n 'border-border bg-background hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground',\n secondary:\n 'bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground',\n ghost:\n 'hover:bg-muted hover:text-foreground dark:hover:bg-muted/50 aria-expanded:bg-muted aria-expanded:text-foreground',\n destructive:\n 'bg-destructive/10 hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/20 text-destructive focus-visible:border-destructive/40 dark:hover:bg-destructive/30',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n size: {\n default:\n 'h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2',\n xs: \"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5\",\n lg: 'h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3',\n icon: 'size-8',\n 'icon-xs':\n \"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3\",\n 'icon-sm':\n 'size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg',\n 'icon-lg': 'size-9',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n)\n\nfunction Button({\n className,\n variant = 'default',\n size = 'default',\n asChild = false,\n ...props\n}: React.ComponentProps<'button'> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? Slot.Root : 'button'\n\n return (\n <Comp\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","import * as React from 'react'\n\nimport { cn } from '../../utils/cn'\n\nfunction Card({\n className,\n size = 'default',\n ...props\n}: React.ComponentProps<'div'> & { size?: 'default' | 'sm' }) {\n return (\n <div\n data-slot=\"card\"\n data-size={size}\n className={cn(\n 'ring-foreground/10 bg-card text-card-foreground group/card flex flex-col gap-4 overflow-hidden rounded-xl py-4 text-sm ring-1 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n 'group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\n 'text-base leading-snug font-medium group-data-[size=sm]/card:text-sm',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn('col-start-2 row-span-2 row-start-1 self-start justify-self-end', className)}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn('px-4 group-data-[size=sm]/card:px-3', className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\n 'bg-muted/50 flex items-center rounded-b-xl border-t p-4 group-data-[size=sm]/card:p-3',\n className,\n )}\n {...props}\n />\n )\n}\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardAction, CardDescription, CardContent }\n","import * as React from 'react'\n\nimport { cn } from '../../utils/cn'\n\nfunction FieldGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"field-group\" className={cn('flex flex-col gap-6', className)} {...props} />\n}\n\nfunction Field({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"field\" className={cn('grid gap-3', className)} {...props} />\n}\n\nfunction FieldLabel({ className, ...props }: React.ComponentProps<'label'>) {\n return (\n <label\n data-slot=\"field-label\"\n className={cn('text-sm leading-none font-medium', className)}\n {...props}\n />\n )\n}\n\nfunction FieldDescription({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"field-description\"\n className={cn(\n 'text-muted-foreground [&_a]:hover:text-primary text-sm [&_a]:underline [&_a]:underline-offset-4',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction FieldSeparator({ className, children, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"field-separator\"\n className={cn(\n 'after:border-border relative text-center text-sm after:absolute after:inset-0 after:top-1/2 after:z-0 after:flex after:items-center after:border-t',\n className,\n )}\n {...props}\n >\n <span\n data-slot=\"field-separator-content\"\n className=\"bg-card text-muted-foreground relative z-10 px-2\"\n >\n {children}\n </span>\n </div>\n )\n}\n\nexport { FieldGroup, Field, FieldLabel, FieldDescription, FieldSeparator }\n","import * as React from 'react'\n\nimport { cn } from '../../utils/cn'\n\nfunction Input({ className, type, ...props }: React.ComponentProps<'input'>) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n 'dark:bg-input/30 border-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 disabled:bg-input/50 dark:disabled:bg-input/80 file:text-foreground placeholder:text-muted-foreground h-8 w-full min-w-0 rounded-lg border bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:ring-3 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:ring-3 md:text-sm',\n className,\n )}\n {...props}\n />\n )\n}\n\nexport { Input }\n","import { forwardRef, useCallback, useMemo } from 'react'\nimport { useForm } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport type { LoginFormProps } from '../types'\nimport { createLoginSchema, type LoginInput } from '../schemas'\nimport { cn } from '../utils/cn'\nimport { useAzirid, useBranding, useMessages } from '../providers/access-provider'\nimport { Button } from './ui/button'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from './ui/card'\nimport { Field, FieldDescription, FieldGroup, FieldLabel, FieldSeparator } from './ui/field'\nimport { Input } from './ui/input'\n\nexport const LoginForm = forwardRef<HTMLFormElement, LoginFormProps>(\n (\n {\n onSubmit: onSubmitProp,\n schema: schemaProp,\n isLoading: externalLoading,\n error: externalError,\n className,\n style,\n title: titleProp,\n description: descriptionProp,\n logo: logoProp,\n submitText: submitTextProp,\n footer,\n forgotPassword,\n showSocialButtons = true,\n labels,\n defaultValues,\n },\n ref,\n ) => {\n const msg = useMessages()\n const branding = useBranding()\n\n const title = titleProp ?? (branding?.displayName || msg.login.title)\n const description = descriptionProp ?? msg.login.description\n const submitText = submitTextProp ?? msg.login.submit\n\n const logo =\n logoProp !== undefined ? (\n logoProp\n ) : branding?.logoUrl ? (\n <img src={branding.logoUrl} alt={branding.displayName ?? ''} className=\"h-10 w-auto\" />\n ) : null\n\n const schema = useMemo(\n () => schemaProp ?? createLoginSchema(msg.validation),\n [schemaProp, msg.validation],\n )\n\n let ctxLogin: ((data: LoginInput) => void) | undefined\n let ctxError: string | null = null\n let ctxLoading = false\n\n try {\n const ctx = useAzirid()\n ctxLogin = ctx.login\n ctxError = ctx.error\n ctxLoading = ctx.isLoginPending\n } catch {\n // Not inside AziridProvider — that's fine if onSubmitProp is passed\n }\n\n const {\n register,\n handleSubmit,\n formState: { errors, isSubmitting },\n } = useForm<LoginInput>({\n resolver: zodResolver(schema as never),\n defaultValues: { email: '', password: '', ...defaultValues },\n })\n\n const onSubmit = useCallback(\n async (values: LoginInput) => {\n if (onSubmitProp) {\n await onSubmitProp(values)\n } else if (ctxLogin) {\n ctxLogin(values)\n }\n },\n [onSubmitProp, ctxLogin],\n )\n\n const loading = externalLoading ?? ctxLoading ?? isSubmitting\n const error = externalError ?? ctxError\n\n const wrapperStyle = useMemo((): React.CSSProperties => {\n if (!branding?.primaryColor) return style ?? {}\n return {\n ...style,\n '--aa-primary': branding.primaryColor,\n '--aa-primary-foreground': '#fff',\n } as React.CSSProperties\n }, [style, branding?.primaryColor])\n\n return (\n <div data-azirid className={cn('flex flex-col gap-6', className)} style={wrapperStyle}>\n {logo && <div className=\"flex items-center gap-2 self-center font-medium\">{logo}</div>}\n\n <Card>\n <CardHeader className=\"text-center\">\n {title && <CardTitle className=\"text-xl\">{title}</CardTitle>}\n {description && <CardDescription>{description}</CardDescription>}\n </CardHeader>\n\n <CardContent>\n <form ref={ref} onSubmit={handleSubmit(onSubmit)} noValidate>\n <FieldGroup>\n {error && (\n <div\n role=\"alert\"\n className=\"border-destructive/50 bg-destructive/10 text-destructive rounded-md border px-4 py-3 text-sm\"\n >\n {error}\n </div>\n )}\n\n {showSocialButtons && (\n <>\n <Field>\n <Button variant=\"outline\" type=\"button\" className=\"w-full\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.546 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.83c.843-1.012 1.4-2.427 1.245-3.83-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.559-1.701\"\n fill=\"currentColor\"\n />\n </svg>\n {msg.social.apple}\n </Button>\n <Button variant=\"outline\" type=\"button\" className=\"w-full\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12.48 10.92v3.28h7.84c-.24 1.84-.853 3.187-1.787 4.133-1.147 1.147-2.933 2.4-6.053 2.4-4.827 0-8.6-3.893-8.6-8.72s3.773-8.72 8.6-8.72c2.6 0 4.507 1.027 5.907 2.347l2.307-2.307C18.747 1.44 16.133 0 12.48 0 5.867 0 .307 5.387.307 12s5.56 12 12.173 12c3.573 0 6.267-1.173 8.373-3.36 2.16-2.16 2.84-5.213 2.84-7.667 0-.76-.053-1.467-.173-2.053H12.48z\"\n fill=\"currentColor\"\n />\n </svg>\n {msg.social.google}\n </Button>\n </Field>\n <FieldSeparator>{msg.social.separator}</FieldSeparator>\n </>\n )}\n\n <Field>\n <FieldLabel htmlFor=\"aa-login-email\">\n {labels?.email ?? msg.login.emailLabel}\n </FieldLabel>\n <Input\n id=\"aa-login-email\"\n type=\"email\"\n autoComplete=\"email\"\n placeholder={labels?.emailPlaceholder ?? msg.login.emailPlaceholder}\n disabled={loading}\n aria-invalid={!!errors.email}\n aria-describedby={errors.email ? 'aa-login-email-err' : undefined}\n {...register('email')}\n />\n {errors.email && (\n <p id=\"aa-login-email-err\" className=\"text-destructive text-xs\">\n {errors.email.message}\n </p>\n )}\n </Field>\n\n <Field>\n <div className=\"flex items-center\">\n <FieldLabel htmlFor=\"aa-login-password\">\n {labels?.password ?? msg.login.passwordLabel}\n </FieldLabel>\n {forgotPassword && (\n <span className=\"ml-auto text-sm underline-offset-4 hover:underline\">\n {forgotPassword}\n </span>\n )}\n </div>\n <Input\n id=\"aa-login-password\"\n type=\"password\"\n autoComplete=\"current-password\"\n placeholder={labels?.passwordPlaceholder ?? msg.login.passwordPlaceholder}\n disabled={loading}\n aria-invalid={!!errors.password}\n aria-describedby={errors.password ? 'aa-login-pass-err' : undefined}\n {...register('password')}\n />\n {errors.password && (\n <p id=\"aa-login-pass-err\" className=\"text-destructive text-xs\">\n {errors.password.message}\n </p>\n )}\n </Field>\n\n <Field>\n <Button type=\"submit\" disabled={loading} className=\"w-full\">\n {loading && (\n <svg\n className=\"mr-2 h-4 w-4 animate-spin\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n />\n </svg>\n )}\n {submitText}\n </Button>\n {footer && <FieldDescription className=\"text-center\">{footer}</FieldDescription>}\n </Field>\n </FieldGroup>\n </form>\n </CardContent>\n </Card>\n </div>\n )\n },\n)\n\nLoginForm.displayName = 'LoginForm'\n","import { forwardRef, useCallback, useMemo } from 'react'\nimport { useForm } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport type { SignupFormProps } from '../types'\nimport { createSignupSchema, type SignupInput } from '../schemas'\nimport { cn } from '../utils/cn'\nimport { useAzirid, useBranding, useMessages } from '../providers/access-provider'\nimport { Button } from './ui/button'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from './ui/card'\nimport { Field, FieldDescription, FieldGroup, FieldLabel, FieldSeparator } from './ui/field'\nimport { Input } from './ui/input'\n\nexport const SignupForm = forwardRef<HTMLFormElement, SignupFormProps>(\n (\n {\n onSubmit: onSubmitProp,\n schema: schemaProp,\n isLoading: externalLoading,\n error: externalError,\n className,\n style,\n title: titleProp,\n description: descriptionProp,\n logo: logoProp,\n submitText: submitTextProp,\n footer,\n showSocialButtons = true,\n labels,\n },\n ref,\n ) => {\n const msg = useMessages()\n const branding = useBranding()\n\n const title = titleProp ?? (branding?.displayName || msg.signup.title)\n const description = descriptionProp ?? msg.signup.description\n const submitText = submitTextProp ?? msg.signup.submit\n\n const logo =\n logoProp !== undefined ? (\n logoProp\n ) : branding?.logoUrl ? (\n <img src={branding.logoUrl} alt={branding.displayName ?? ''} className=\"h-10 w-auto\" />\n ) : null\n\n const schema = useMemo(\n () => schemaProp ?? createSignupSchema(msg.validation),\n [schemaProp, msg.validation],\n )\n\n let ctxSignup: ((data: SignupInput) => void) | undefined\n let ctxError: string | null = null\n let ctxLoading = false\n\n try {\n const ctx = useAzirid()\n ctxSignup = ctx.signup as (data: SignupInput) => void\n ctxError = ctx.error\n ctxLoading = ctx.isSignupPending\n } catch {\n // Not inside AziridProvider — that's fine if onSubmitProp is passed\n }\n\n const {\n register,\n handleSubmit,\n formState: { errors, isSubmitting },\n } = useForm<SignupInput>({\n resolver: zodResolver(schema as never),\n defaultValues: { email: '', password: '' },\n })\n\n const onSubmit = useCallback(\n async (values: SignupInput) => {\n if (onSubmitProp) {\n await onSubmitProp(values)\n } else if (ctxSignup) {\n ctxSignup(values)\n }\n },\n [onSubmitProp, ctxSignup],\n )\n\n const loading = externalLoading ?? ctxLoading ?? isSubmitting\n const error = externalError ?? ctxError\n\n const wrapperStyle = useMemo((): React.CSSProperties => {\n if (!branding?.primaryColor) return style ?? {}\n return {\n ...style,\n '--aa-primary': branding.primaryColor,\n '--aa-primary-foreground': '#fff',\n } as React.CSSProperties\n }, [style, branding?.primaryColor])\n\n return (\n <div data-azirid className={cn('flex flex-col gap-6', className)} style={wrapperStyle}>\n {logo && <div className=\"flex items-center gap-2 self-center font-medium\">{logo}</div>}\n\n <Card>\n <CardHeader className=\"text-center\">\n {title && <CardTitle className=\"text-xl\">{title}</CardTitle>}\n {description && <CardDescription>{description}</CardDescription>}\n </CardHeader>\n\n <CardContent>\n <form ref={ref} onSubmit={handleSubmit(onSubmit)} noValidate>\n <FieldGroup>\n {error && (\n <div\n role=\"alert\"\n className=\"border-destructive/50 bg-destructive/10 text-destructive rounded-md border px-4 py-3 text-sm\"\n >\n {error}\n </div>\n )}\n\n {showSocialButtons && (\n <>\n <Field>\n <Button variant=\"outline\" type=\"button\" className=\"w-full\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.546 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.83c.843-1.012 1.4-2.427 1.245-3.83-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.559-1.701\"\n fill=\"currentColor\"\n />\n </svg>\n {msg.social.apple}\n </Button>\n <Button variant=\"outline\" type=\"button\" className=\"w-full\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12.48 10.92v3.28h7.84c-.24 1.84-.853 3.187-1.787 4.133-1.147 1.147-2.933 2.4-6.053 2.4-4.827 0-8.6-3.893-8.6-8.72s3.773-8.72 8.6-8.72c2.6 0 4.507 1.027 5.907 2.347l2.307-2.307C18.747 1.44 16.133 0 12.48 0 5.867 0 .307 5.387.307 12s5.56 12 12.173 12c3.573 0 6.267-1.173 8.373-3.36 2.16-2.16 2.84-5.213 2.84-7.667 0-.76-.053-1.467-.173-2.053H12.48z\"\n fill=\"currentColor\"\n />\n </svg>\n {msg.social.google}\n </Button>\n </Field>\n <FieldSeparator>{msg.social.separator}</FieldSeparator>\n </>\n )}\n\n <Field>\n <FieldLabel htmlFor=\"aa-signup-email\">\n {labels?.email ?? msg.signup.emailLabel}\n </FieldLabel>\n <Input\n id=\"aa-signup-email\"\n type=\"email\"\n autoComplete=\"email\"\n placeholder={labels?.emailPlaceholder ?? msg.signup.emailPlaceholder}\n disabled={loading}\n aria-invalid={!!errors.email}\n aria-describedby={errors.email ? 'aa-signup-email-err' : undefined}\n {...register('email')}\n />\n {errors.email && (\n <p id=\"aa-signup-email-err\" className=\"text-destructive text-xs\">\n {errors.email.message}\n </p>\n )}\n </Field>\n\n <Field>\n <FieldLabel htmlFor=\"aa-signup-password\">\n {labels?.password ?? msg.signup.passwordLabel}\n </FieldLabel>\n <Input\n id=\"aa-signup-password\"\n type=\"password\"\n autoComplete=\"new-password\"\n placeholder={labels?.passwordPlaceholder ?? msg.signup.passwordPlaceholder}\n disabled={loading}\n aria-invalid={!!errors.password}\n aria-describedby={errors.password ? 'aa-signup-pass-err' : undefined}\n {...register('password')}\n />\n {errors.password && (\n <p id=\"aa-signup-pass-err\" className=\"text-destructive text-xs\">\n {errors.password.message}\n </p>\n )}\n </Field>\n\n <Field>\n <Button type=\"submit\" disabled={loading} className=\"w-full\">\n {loading && (\n <svg\n className=\"mr-2 h-4 w-4 animate-spin\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n />\n </svg>\n )}\n {submitText}\n </Button>\n {footer && <FieldDescription className=\"text-center\">{footer}</FieldDescription>}\n </Field>\n </FieldGroup>\n </form>\n </CardContent>\n </Card>\n </div>\n )\n },\n)\n\nSignupForm.displayName = 'SignupForm'\n","import { useMutation, type UseMutationResult } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\n\nexport interface PasswordResetRequestData {\n email: string\n}\n\nexport interface PasswordResetConfirmData {\n token: string\n newPassword: string\n}\n\nexport interface UsePasswordResetOptions {\n /** Callback after reset email sent */\n onRequestSuccess?: () => void\n /** Callback after password successfully reset */\n onConfirmSuccess?: () => void\n /** Callback on error */\n onError?: (error: Error) => void\n}\n\nexport interface UsePasswordResetReturn {\n /** Request a password reset email */\n request: UseMutationResult<unknown, Error, PasswordResetRequestData>\n /** Confirm the password reset with token + new password */\n confirm: UseMutationResult<unknown, Error, PasswordResetConfirmData>\n}\n\n/**\n * Standalone hook for password reset flow. Requires `<AziridProvider>`.\n *\n * @example\n * ```tsx\n * const passwordReset = usePasswordReset({\n * onRequestSuccess: () => toast.success(\"Check your email\"),\n * onConfirmSuccess: () => router.push(\"/login\"),\n * });\n *\n * // Step 1: request reset\n * passwordReset.request.mutate({ email: \"user@test.com\" });\n *\n * // Step 2: confirm with token from URL\n * passwordReset.confirm.mutate({ token: \"abc\", newPassword: \"newPass123!\" });\n * ```\n */\nexport function usePasswordReset(options?: UsePasswordResetOptions): UsePasswordResetReturn {\n const client = useAccessClient()\n\n const request = useMutation({\n mutationKey: ['azirid-access', 'password-reset', 'request'],\n mutationFn: (data: PasswordResetRequestData) =>\n client.post(client.paths.passwordResetRequest, data),\n onSuccess: () => options?.onRequestSuccess?.(),\n onError: options?.onError,\n })\n\n const confirm = useMutation({\n mutationKey: ['azirid-access', 'password-reset', 'confirm'],\n mutationFn: (data: PasswordResetConfirmData) =>\n client.post(client.paths.passwordResetConfirm, data),\n onSuccess: () => options?.onConfirmSuccess?.(),\n onError: options?.onError,\n })\n\n return { request, confirm }\n}\n","import { forwardRef, useCallback, useMemo, useState } from 'react'\nimport { useForm } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport type { ForgotPasswordFormProps } from '../types'\nimport { createForgotPasswordSchema, type ForgotPasswordInput } from '../schemas'\nimport { cn } from '../utils/cn'\nimport { useBranding, useMessages } from '../providers/access-provider'\nimport { usePasswordReset } from '../hooks/use-password-reset'\nimport { Button } from './ui/button'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from './ui/card'\nimport { Field, FieldDescription, FieldGroup, FieldLabel } from './ui/field'\nimport { Input } from './ui/input'\n\nexport const ForgotPasswordForm = forwardRef<HTMLFormElement, ForgotPasswordFormProps>(\n (\n {\n onSubmit: onSubmitProp,\n schema: schemaProp,\n isLoading: externalLoading,\n error: externalError,\n className,\n style,\n title: titleProp,\n description: descriptionProp,\n logo: logoProp,\n submitText: submitTextProp,\n footer,\n defaultValues,\n },\n ref,\n ) => {\n const msg = useMessages()\n const branding = useBranding()\n const [success, setSuccess] = useState(false)\n const [hookError, setHookError] = useState<string | null>(null)\n\n const title = titleProp ?? msg.forgotPassword.title\n const description = descriptionProp ?? msg.forgotPassword.description\n const submitText = submitTextProp ?? msg.forgotPassword.submit\n\n const logo =\n logoProp !== undefined ? (\n logoProp\n ) : branding?.logoUrl ? (\n <img src={branding.logoUrl} alt={branding.displayName ?? ''} className=\"h-10 w-auto\" />\n ) : null\n\n const schema = useMemo(\n () => schemaProp ?? createForgotPasswordSchema(msg.validation),\n [schemaProp, msg.validation],\n )\n\n let passwordReset: ReturnType<typeof usePasswordReset> | null = null\n try {\n passwordReset = usePasswordReset({\n onRequestSuccess: () => setSuccess(true),\n onError: (err) => setHookError(err.message),\n })\n } catch {\n // Not inside AziridProvider — that's fine if onSubmitProp is passed\n }\n\n const {\n register,\n handleSubmit,\n formState: { errors, isSubmitting },\n } = useForm<ForgotPasswordInput>({\n resolver: zodResolver(schema as never),\n defaultValues: { email: '', ...defaultValues },\n })\n\n const onSubmit = useCallback(\n async (values: ForgotPasswordInput) => {\n setHookError(null)\n if (onSubmitProp) {\n await onSubmitProp(values)\n } else if (passwordReset) {\n passwordReset.request.mutate(values)\n }\n },\n [onSubmitProp, passwordReset],\n )\n\n const loading = externalLoading ?? passwordReset?.request.isPending ?? isSubmitting\n const error = externalError ?? hookError\n\n const wrapperStyle = useMemo((): React.CSSProperties => {\n if (!branding?.primaryColor) return style ?? {}\n return {\n ...style,\n '--aa-primary': branding.primaryColor,\n '--aa-primary-foreground': '#fff',\n } as React.CSSProperties\n }, [style, branding?.primaryColor])\n\n return (\n <div data-azirid className={cn('flex flex-col gap-6', className)} style={wrapperStyle}>\n {logo && <div className=\"flex items-center gap-2 self-center font-medium\">{logo}</div>}\n\n <Card>\n <CardHeader className=\"text-center\">\n {title && <CardTitle className=\"text-xl\">{title}</CardTitle>}\n {description && <CardDescription>{description}</CardDescription>}\n </CardHeader>\n\n <CardContent>\n {success ? (\n <div className=\"rounded-md border border-green-200 bg-green-50 px-4 py-3 text-center text-sm text-green-800 dark:border-green-800 dark:bg-green-950 dark:text-green-200\">\n {msg.forgotPassword.successMessage}\n </div>\n ) : (\n <form ref={ref} onSubmit={handleSubmit(onSubmit)} noValidate>\n <FieldGroup>\n {error && (\n <div\n role=\"alert\"\n className=\"border-destructive/50 bg-destructive/10 text-destructive rounded-md border px-4 py-3 text-sm\"\n >\n {error}\n </div>\n )}\n\n <Field>\n <FieldLabel htmlFor=\"aa-forgot-email\">\n {msg.forgotPassword.emailLabel}\n </FieldLabel>\n <Input\n id=\"aa-forgot-email\"\n type=\"email\"\n autoComplete=\"email\"\n placeholder={msg.forgotPassword.emailPlaceholder}\n disabled={loading}\n aria-invalid={!!errors.email}\n aria-describedby={errors.email ? 'aa-forgot-email-err' : undefined}\n {...register('email')}\n />\n {errors.email && (\n <p id=\"aa-forgot-email-err\" className=\"text-destructive text-xs\">\n {errors.email.message}\n </p>\n )}\n </Field>\n\n <Field>\n <Button type=\"submit\" disabled={loading} className=\"w-full\">\n {loading && (\n <svg\n className=\"mr-2 h-4 w-4 animate-spin\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n />\n </svg>\n )}\n {submitText}\n </Button>\n {footer && (\n <FieldDescription className=\"text-center\">{footer}</FieldDescription>\n )}\n </Field>\n </FieldGroup>\n </form>\n )}\n </CardContent>\n </Card>\n </div>\n )\n },\n)\n\nForgotPasswordForm.displayName = 'ForgotPasswordForm'\n","import { forwardRef, useCallback, useMemo, useState } from 'react'\nimport { useForm } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport type { ResetPasswordFormProps } from '../types'\nimport { createResetPasswordConfirmSchema, type ResetPasswordConfirmInput } from '../schemas'\nimport { cn } from '../utils/cn'\nimport { useBranding, useMessages } from '../providers/access-provider'\nimport { usePasswordReset } from '../hooks/use-password-reset'\nimport { Button } from './ui/button'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from './ui/card'\nimport { Field, FieldGroup, FieldLabel, FieldDescription } from './ui/field'\nimport { Input } from './ui/input'\n\nexport const ResetPasswordForm = forwardRef<HTMLFormElement, ResetPasswordFormProps>(\n (\n {\n token,\n onSubmit: onSubmitProp,\n schema: schemaProp,\n isLoading: externalLoading,\n error: externalError,\n className,\n style,\n title: titleProp,\n description: descriptionProp,\n logo: logoProp,\n submitText: submitTextProp,\n footer,\n onSuccess,\n },\n ref,\n ) => {\n const msg = useMessages()\n const branding = useBranding()\n const [hookError, setHookError] = useState<string | null>(null)\n\n const title = titleProp ?? msg.resetPassword.title\n const description = descriptionProp ?? msg.resetPassword.description\n const submitText = submitTextProp ?? msg.resetPassword.submit\n\n const logo =\n logoProp !== undefined ? (\n logoProp\n ) : branding?.logoUrl ? (\n <img src={branding.logoUrl} alt={branding.displayName ?? ''} className=\"h-10 w-auto\" />\n ) : null\n\n const schema = useMemo(\n () => schemaProp ?? createResetPasswordConfirmSchema(msg.validation),\n [schemaProp, msg.validation],\n )\n\n let passwordReset: ReturnType<typeof usePasswordReset> | null = null\n try {\n passwordReset = usePasswordReset({\n onConfirmSuccess: () => onSuccess?.(),\n onError: (err) => setHookError(err.message),\n })\n } catch {\n // Not inside AziridProvider — that's fine if onSubmitProp is passed\n }\n\n const {\n register,\n handleSubmit,\n formState: { errors, isSubmitting },\n } = useForm<ResetPasswordConfirmInput>({\n resolver: zodResolver(schema as never),\n defaultValues: { token, newPassword: '', confirmPassword: '' },\n })\n\n const onSubmit = useCallback(\n async (values: ResetPasswordConfirmInput) => {\n setHookError(null)\n if (onSubmitProp) {\n await onSubmitProp({ token: values.token, newPassword: values.newPassword })\n } else if (passwordReset) {\n passwordReset.confirm.mutate({\n token: values.token,\n newPassword: values.newPassword,\n })\n }\n },\n [onSubmitProp, passwordReset],\n )\n\n const loading = externalLoading ?? passwordReset?.confirm.isPending ?? isSubmitting\n const error = externalError ?? hookError\n\n const wrapperStyle = useMemo((): React.CSSProperties => {\n if (!branding?.primaryColor) return style ?? {}\n return {\n ...style,\n '--aa-primary': branding.primaryColor,\n '--aa-primary-foreground': '#fff',\n } as React.CSSProperties\n }, [style, branding?.primaryColor])\n\n return (\n <div data-azirid className={cn('flex flex-col gap-6', className)} style={wrapperStyle}>\n {logo && <div className=\"flex items-center gap-2 self-center font-medium\">{logo}</div>}\n\n <Card>\n <CardHeader className=\"text-center\">\n {title && <CardTitle className=\"text-xl\">{title}</CardTitle>}\n {description && <CardDescription>{description}</CardDescription>}\n </CardHeader>\n\n <CardContent>\n <form ref={ref} onSubmit={handleSubmit(onSubmit)} noValidate>\n <input type=\"hidden\" {...register('token')} />\n <FieldGroup>\n {error && (\n <div\n role=\"alert\"\n className=\"border-destructive/50 bg-destructive/10 text-destructive rounded-md border px-4 py-3 text-sm\"\n >\n {error}\n </div>\n )}\n\n <Field>\n <FieldLabel htmlFor=\"aa-reset-new-password\">\n {msg.resetPassword.newPasswordLabel}\n </FieldLabel>\n <Input\n id=\"aa-reset-new-password\"\n type=\"password\"\n autoComplete=\"new-password\"\n placeholder={msg.resetPassword.newPasswordPlaceholder}\n disabled={loading}\n aria-invalid={!!errors.newPassword}\n aria-describedby={errors.newPassword ? 'aa-reset-newpass-err' : undefined}\n {...register('newPassword')}\n />\n {errors.newPassword && (\n <p id=\"aa-reset-newpass-err\" className=\"text-destructive text-xs\">\n {errors.newPassword.message}\n </p>\n )}\n </Field>\n\n <Field>\n <FieldLabel htmlFor=\"aa-reset-confirm-password\">\n {msg.resetPassword.confirmPasswordLabel}\n </FieldLabel>\n <Input\n id=\"aa-reset-confirm-password\"\n type=\"password\"\n autoComplete=\"new-password\"\n placeholder={msg.resetPassword.confirmPasswordPlaceholder}\n disabled={loading}\n aria-invalid={!!errors.confirmPassword}\n aria-describedby={\n errors.confirmPassword ? 'aa-reset-confirmpass-err' : undefined\n }\n {...register('confirmPassword')}\n />\n {errors.confirmPassword && (\n <p id=\"aa-reset-confirmpass-err\" className=\"text-destructive text-xs\">\n {errors.confirmPassword.message}\n </p>\n )}\n </Field>\n\n <Field>\n <Button type=\"submit\" disabled={loading} className=\"w-full\">\n {loading && (\n <svg\n className=\"mr-2 h-4 w-4 animate-spin\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n />\n </svg>\n )}\n {submitText}\n </Button>\n {footer && <FieldDescription className=\"text-center\">{footer}</FieldDescription>}\n </Field>\n </FieldGroup>\n </form>\n </CardContent>\n </Card>\n </div>\n )\n },\n)\n\nResetPasswordForm.displayName = 'ResetPasswordForm'\n","import { useState, useCallback } from 'react'\nimport type { AuthView, AuthFormProps } from '../types'\nimport { useMessages } from '../providers/access-provider'\nimport { LoginForm } from './login-form'\nimport { SignupForm } from './signup-form'\nimport { ForgotPasswordForm } from './forgot-password-form'\nimport { ResetPasswordForm } from './reset-password-form'\n\nexport function AuthForm({\n view: controlledView,\n onViewChange,\n defaultView = 'login',\n className,\n style,\n logo,\n showSocialButtons,\n hideNavigation,\n resetToken,\n defaultValues,\n loginProps,\n signupProps,\n forgotPasswordProps,\n resetPasswordProps,\n}: AuthFormProps) {\n const [internalView, setInternalView] = useState<AuthView>(defaultView)\n const msg = useMessages()\n\n const currentView = controlledView ?? internalView\n\n const navigate = useCallback(\n (target: AuthView) => {\n if (onViewChange) {\n onViewChange(target)\n } else {\n setInternalView(target)\n }\n },\n [onViewChange],\n )\n\n const navLink = (text: string, target: AuthView) => (\n <button\n type=\"button\"\n onClick={() => navigate(target)}\n className=\"text-primary font-medium underline-offset-4 hover:underline\"\n >\n {text}\n </button>\n )\n\n const sharedProps = { className, style, logo }\n\n switch (currentView) {\n case 'login':\n return (\n <LoginForm\n {...sharedProps}\n showSocialButtons={showSocialButtons}\n defaultValues={defaultValues}\n {...loginProps}\n forgotPassword={\n hideNavigation ? undefined : navLink(msg.navigation.forgotPassword, 'forgot-password')\n }\n footer={\n hideNavigation ? undefined : (\n <span>\n {msg.navigation.noAccountText} {navLink(msg.navigation.signUpLink, 'signup')}\n </span>\n )\n }\n />\n )\n\n case 'signup':\n return (\n <SignupForm\n {...sharedProps}\n showSocialButtons={showSocialButtons}\n {...signupProps}\n footer={\n hideNavigation ? undefined : (\n <span>\n {msg.navigation.hasAccountText} {navLink(msg.navigation.signInLink, 'login')}\n </span>\n )\n }\n />\n )\n\n case 'forgot-password':\n return (\n <ForgotPasswordForm\n {...sharedProps}\n defaultValues={defaultValues ? { email: defaultValues.email } : undefined}\n {...forgotPasswordProps}\n footer={\n hideNavigation ? undefined : <span>{navLink(msg.navigation.backToLogin, 'login')}</span>\n }\n />\n )\n\n case 'reset-password':\n return (\n <ResetPasswordForm\n {...sharedProps}\n token={resetToken ?? ''}\n {...resetPasswordProps}\n footer={\n hideNavigation ? undefined : <span>{navLink(msg.navigation.backToLogin, 'login')}</span>\n }\n />\n )\n }\n}\n\nAuthForm.displayName = 'AuthForm'\n","import { useCallback, useMemo } from 'react'\nimport { useQuery } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { ReferralInfo } from '../types'\n\nexport function useReferral() {\n const client = useAccessClient()\n\n const query = useQuery({\n queryKey: ['azirid-access', 'referral', 'me'],\n queryFn: () => client.get<ReferralInfo>(client.paths.referralMe),\n enabled: !!client.getAccessToken(),\n })\n\n const copyToClipboard = useCallback(async () => {\n if (query.data?.referralUrl) {\n await navigator.clipboard.writeText(query.data.referralUrl)\n return true\n }\n return false\n }, [query.data?.referralUrl])\n\n return useMemo(() => ({ ...query, copyToClipboard }), [query, copyToClipboard])\n}\n","import { useCallback, useState } from 'react'\nimport type { CSSProperties } from 'react'\nimport { useReferral } from '../hooks/use-referral'\n\nexport interface ReferralCardProps {\n className?: string\n style?: CSSProperties\n title?: string\n description?: string\n}\n\nconst styles = {\n card: {\n border: '1px solid #e5e7eb',\n borderRadius: '12px',\n padding: '24px',\n backgroundColor: '#ffffff',\n fontFamily:\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n } satisfies CSSProperties,\n title: {\n margin: '0 0 4px 0',\n fontSize: '18px',\n fontWeight: 600,\n color: '#111827',\n } satisfies CSSProperties,\n description: {\n margin: '0 0 16px 0',\n fontSize: '14px',\n color: '#6b7280',\n } satisfies CSSProperties,\n codeContainer: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n marginBottom: '16px',\n } satisfies CSSProperties,\n codeInput: {\n flex: 1,\n padding: '10px 12px',\n border: '1px solid #d1d5db',\n borderRadius: '8px',\n backgroundColor: '#f9fafb',\n fontSize: '14px',\n fontFamily: 'monospace',\n color: '#374151',\n outline: 'none',\n } satisfies CSSProperties,\n copyButton: {\n padding: '10px 16px',\n border: '1px solid #d1d5db',\n borderRadius: '8px',\n backgroundColor: '#ffffff',\n fontSize: '14px',\n fontWeight: 500,\n color: '#374151',\n cursor: 'pointer',\n whiteSpace: 'nowrap',\n transition: 'background-color 0.15s',\n } satisfies CSSProperties,\n copyButtonCopied: {\n backgroundColor: '#ecfdf5',\n borderColor: '#a7f3d0',\n color: '#065f46',\n } satisfies CSSProperties,\n statsRow: {\n display: 'flex',\n gap: '24px',\n } satisfies CSSProperties,\n stat: {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: '2px',\n } satisfies CSSProperties,\n statValue: {\n fontSize: '20px',\n fontWeight: 600,\n color: '#111827',\n } satisfies CSSProperties,\n statLabel: {\n fontSize: '12px',\n color: '#6b7280',\n } satisfies CSSProperties,\n skeleton: {\n backgroundColor: '#f3f4f6',\n borderRadius: '8px',\n animation: 'pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite',\n } satisfies CSSProperties,\n emptyMessage: {\n fontSize: '14px',\n color: '#9ca3af',\n textAlign: 'center' as const,\n padding: '12px 0',\n } satisfies CSSProperties,\n}\n\nexport function ReferralCard({\n className,\n style,\n title = 'Refer a Friend',\n description = 'Share your referral link and earn rewards for every friend who signs up.',\n}: ReferralCardProps) {\n const { data, isLoading } = useReferral()\n const [copied, setCopied] = useState(false)\n\n const handleCopy = useCallback(async () => {\n if (!data?.referralUrl) return\n try {\n await navigator.clipboard.writeText(data.referralUrl)\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n } catch {\n // Clipboard API not available\n }\n }, [data?.referralUrl])\n\n if (isLoading) {\n return (\n <div className={className} style={{ ...styles.card, ...style }}>\n <div style={{ ...styles.skeleton, height: '20px', width: '140px', marginBottom: '8px' }} />\n <div style={{ ...styles.skeleton, height: '14px', width: '260px', marginBottom: '16px' }} />\n <div style={{ ...styles.skeleton, height: '42px', width: '100%', marginBottom: '16px' }} />\n <div style={{ display: 'flex', gap: '24px' }}>\n <div style={{ ...styles.skeleton, height: '40px', width: '80px' }} />\n <div style={{ ...styles.skeleton, height: '40px', width: '80px' }} />\n <div style={{ ...styles.skeleton, height: '40px', width: '80px' }} />\n </div>\n </div>\n )\n }\n\n if (!data?.referralCode) {\n return (\n <div className={className} style={{ ...styles.card, ...style }}>\n <h3 style={styles.title}>{title}</h3>\n <p style={styles.emptyMessage}>Referral program is not available at this time.</p>\n </div>\n )\n }\n\n return (\n <div className={className} style={{ ...styles.card, ...style }}>\n <h3 style={styles.title}>{title}</h3>\n <p style={styles.description}>{description}</p>\n\n <div style={styles.codeContainer}>\n <input\n type=\"text\"\n readOnly\n value={data.referralUrl}\n style={styles.codeInput}\n onClick={(e) => (e.target as HTMLInputElement).select()}\n />\n <button\n type=\"button\"\n onClick={handleCopy}\n style={{\n ...styles.copyButton,\n ...(copied ? styles.copyButtonCopied : {}),\n }}\n >\n {copied ? 'Copied!' : 'Copy'}\n </button>\n </div>\n\n <div style={styles.statsRow}>\n <div style={styles.stat}>\n <span style={styles.statValue}>{data.totalReferred}</span>\n <span style={styles.statLabel}>Total Referred</span>\n </div>\n <div style={styles.stat}>\n <span style={styles.statValue}>{data.completedReferrals}</span>\n <span style={styles.statLabel}>Completed</span>\n </div>\n <div style={styles.stat}>\n <span style={styles.statValue}>{data.pendingReferrals}</span>\n <span style={styles.statLabel}>Pending</span>\n </div>\n </div>\n </div>\n )\n}\n\nReferralCard.displayName = 'ReferralCard'\n","import { useQuery } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { ReferralStatsData } from '../types'\n\nexport function useReferralStats() {\n const client = useAccessClient()\n return useQuery({\n queryKey: ['azirid-access', 'referral', 'stats'],\n queryFn: () => client.get<ReferralStatsData>(client.paths.referralStats),\n enabled: !!client.getAccessToken(),\n })\n}\n","import type { CSSProperties } from 'react'\nimport { useReferralStats } from '../hooks/use-referral-stats'\nimport type { ReferralItem } from '../types'\n\nexport interface ReferralStatsProps {\n className?: string\n style?: CSSProperties\n}\n\nconst statusColors: Record<ReferralItem['status'], { bg: string; color: string }> = {\n PENDING: { bg: '#fef3c7', color: '#92400e' },\n COMPLETED: { bg: '#d1fae5', color: '#065f46' },\n EXPIRED: { bg: '#fee2e2', color: '#991b1b' },\n}\n\nconst rewardStatusColors: Record<ReferralItem['rewardStatus'], { bg: string; color: string }> = {\n PENDING: { bg: '#fef3c7', color: '#92400e' },\n GRANTED: { bg: '#d1fae5', color: '#065f46' },\n EXPIRED: { bg: '#fee2e2', color: '#991b1b' },\n FAILED: { bg: '#fee2e2', color: '#991b1b' },\n}\n\nconst styles = {\n container: {\n border: '1px solid #e5e7eb',\n borderRadius: '12px',\n backgroundColor: '#ffffff',\n overflow: 'hidden',\n fontFamily:\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n } satisfies CSSProperties,\n header: {\n padding: '16px 24px',\n borderBottom: '1px solid #e5e7eb',\n } satisfies CSSProperties,\n title: {\n margin: 0,\n fontSize: '16px',\n fontWeight: 600,\n color: '#111827',\n } satisfies CSSProperties,\n summaryRow: {\n display: 'flex',\n gap: '24px',\n padding: '12px 24px',\n backgroundColor: '#f9fafb',\n borderBottom: '1px solid #e5e7eb',\n } satisfies CSSProperties,\n summaryItem: {\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontSize: '13px',\n color: '#6b7280',\n } satisfies CSSProperties,\n summaryValue: {\n fontWeight: 600,\n color: '#111827',\n } satisfies CSSProperties,\n table: {\n width: '100%',\n borderCollapse: 'collapse' as const,\n fontSize: '14px',\n } satisfies CSSProperties,\n th: {\n padding: '12px 24px',\n textAlign: 'left' as const,\n fontSize: '12px',\n fontWeight: 500,\n color: '#6b7280',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n borderBottom: '1px solid #e5e7eb',\n backgroundColor: '#f9fafb',\n } satisfies CSSProperties,\n td: {\n padding: '12px 24px',\n borderBottom: '1px solid #f3f4f6',\n color: '#374151',\n } satisfies CSSProperties,\n badge: (bg: string, color: string): CSSProperties => ({\n display: 'inline-block',\n padding: '2px 8px',\n borderRadius: '9999px',\n fontSize: '12px',\n fontWeight: 500,\n backgroundColor: bg,\n color,\n }),\n skeleton: {\n backgroundColor: '#f3f4f6',\n borderRadius: '4px',\n height: '14px',\n } satisfies CSSProperties,\n emptyRow: {\n padding: '24px',\n textAlign: 'center' as const,\n color: '#9ca3af',\n fontSize: '14px',\n } satisfies CSSProperties,\n}\n\nfunction formatDate(dateStr: string): string {\n try {\n return new Date(dateStr).toLocaleDateString(undefined, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n })\n } catch {\n return dateStr\n }\n}\n\nexport function ReferralStats({ className, style }: ReferralStatsProps) {\n const { data, isLoading } = useReferralStats()\n\n if (isLoading) {\n return (\n <div className={className} style={{ ...styles.container, ...style }}>\n <div style={styles.header}>\n <div style={{ ...styles.skeleton, width: '140px', height: '18px' }} />\n </div>\n <div style={{ padding: '24px' }}>\n {[1, 2, 3].map((i) => (\n <div\n key={i}\n style={{ ...styles.skeleton, width: '100%', height: '16px', marginBottom: '16px' }}\n />\n ))}\n </div>\n </div>\n )\n }\n\n return (\n <div className={className} style={{ ...styles.container, ...style }}>\n <div style={styles.header}>\n <h3 style={styles.title}>Referral History</h3>\n </div>\n\n {data && (\n <div style={styles.summaryRow}>\n <span style={styles.summaryItem}>\n Total: <span style={styles.summaryValue}>{data.totalReferred}</span>\n </span>\n <span style={styles.summaryItem}>\n Completed: <span style={styles.summaryValue}>{data.completedReferrals}</span>\n </span>\n <span style={styles.summaryItem}>\n Pending: <span style={styles.summaryValue}>{data.pendingReferrals}</span>\n </span>\n <span style={styles.summaryItem}>\n Rewards: <span style={styles.summaryValue}>{data.totalRewards}</span>\n </span>\n </div>\n )}\n\n <table style={styles.table}>\n <thead>\n <tr>\n <th style={styles.th}>Email</th>\n <th style={styles.th}>Status</th>\n <th style={styles.th}>Reward</th>\n <th style={styles.th}>Date</th>\n </tr>\n </thead>\n <tbody>\n {(!data?.referrals || data.referrals.length === 0) && (\n <tr>\n <td colSpan={4} style={styles.emptyRow}>\n No referrals yet.\n </td>\n </tr>\n )}\n {data?.referrals.map((item) => {\n const sc = statusColors[item.status]\n const rc = rewardStatusColors[item.rewardStatus]\n return (\n <tr key={item.id}>\n <td style={styles.td}>{item.referredEmail}</td>\n <td style={styles.td}>\n <span style={styles.badge(sc.bg, sc.color)}>{item.status}</span>\n </td>\n <td style={styles.td}>\n <span style={styles.badge(rc.bg, rc.color)}>\n {item.rewardStatus}\n {item.rewardAmount != null && ` ($${item.rewardAmount})`}\n </span>\n </td>\n <td style={styles.td}>{formatDate(item.createdAt)}</td>\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n )\n}\n\nReferralStats.displayName = 'ReferralStats'\n","/**\n * Format a minor-unit amount (e.g. cents) into a locale-aware currency string.\n *\n * @param amount - The amount in minor units (e.g. 1500 = $15.00)\n * @param currency - ISO 4217 currency code (e.g. \"USD\", \"EUR\")\n */\nexport function formatAmount(amount: number, currency: string): string {\n try {\n return new Intl.NumberFormat(undefined, {\n style: 'currency',\n currency,\n minimumFractionDigits: 0,\n maximumFractionDigits: 2,\n }).format(amount / 100)\n } catch {\n return `${currency} ${(amount / 100).toFixed(2)}`\n }\n}\n","import { useQuery } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { BillingPlan } from '../types'\n\nexport function usePlans() {\n const client = useAccessClient()\n return useQuery({\n queryKey: ['azirid-access', 'billing', 'plans'],\n queryFn: () => client.get<BillingPlan[]>(client.paths.plans),\n })\n}\n","import { useQuery } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { UserSubscription } from '../types'\n\nexport function useSubscription() {\n const client = useAccessClient()\n return useQuery({\n queryKey: ['azirid-access', 'billing', 'subscription'],\n queryFn: () => client.get<UserSubscription>(client.paths.subscription),\n enabled: !!client.getAccessToken(),\n })\n}\n","import { useCallback, useMemo } from 'react'\nimport { useMutation } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { CheckoutResponse, PaymentProviderType } from '../types'\n\nexport interface CheckoutParams {\n planId?: string\n intentId?: string\n successUrl: string\n cancelUrl: string\n provider?: PaymentProviderType\n}\n\nexport interface UseCheckoutOptions {\n onSuccess?: (data: CheckoutResponse) => void\n onError?: (error: Error) => void\n redirectOnSuccess?: boolean\n}\n\nexport function useCheckout(options?: UseCheckoutOptions) {\n const client = useAccessClient()\n\n const mutation = useMutation({\n mutationFn: (params: CheckoutParams) =>\n client.post<CheckoutResponse>(client.paths.checkout, params),\n onSuccess: (data) => {\n // Only redirect for card providers (not MANUAL_TRANSFER or PAYPHONE)\n if (\n options?.redirectOnSuccess !== false &&\n data.url &&\n data.provider !== 'MANUAL_TRANSFER' &&\n data.provider !== 'PAYPHONE'\n ) {\n window.location.href = data.url\n }\n options?.onSuccess?.(data)\n },\n onError: options?.onError,\n })\n\n const checkout = useCallback(\n (params: CheckoutParams) => {\n mutation.mutate(params)\n },\n [mutation],\n )\n\n return useMemo(() => ({ ...mutation, checkout }), [mutation, checkout])\n}\n","import { useQuery } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { AvailableProvider } from '../types'\n\nexport function usePaymentProviders() {\n const client = useAccessClient()\n\n return useQuery({\n queryKey: ['azirid-access', 'billing', 'providers'],\n queryFn: () => client.get<AvailableProvider[]>(client.paths.providers),\n })\n}\n","const PAYPHONE_CDN = 'https://cdn.payphonetodoesposible.com'\nconst PAYPHONE_CSS_URL = `${PAYPHONE_CDN}/box/v1.1/payphone-payment-box.css`\nconst PAYPHONE_JS_URL = `${PAYPHONE_CDN}/box/v1.1/payphone-payment-box.js`\n\nlet loadPromise: Promise<void> | null = null\n\nfunction loadCss(href: string): void {\n if (document.querySelector(`link[href=\"${href}\"]`)) return\n const link = document.createElement('link')\n link.rel = 'stylesheet'\n link.href = href\n document.head.appendChild(link)\n}\n\nfunction loadScript(src: string): Promise<void> {\n return new Promise((resolve, reject) => {\n if (document.querySelector(`script[src=\"${src}\"]`)) {\n resolve()\n return\n }\n const script = document.createElement('script')\n script.src = src\n script.onload = () => resolve()\n script.onerror = () =>\n reject(\n new Error(\n `Failed to load Payphone SDK from ${src}. ` +\n `If your app uses a Content-Security-Policy, add \"${PAYPHONE_CDN}\" ` +\n `to both script-src and style-src directives.`,\n ),\n )\n document.head.appendChild(script)\n })\n}\n\nexport function loadPayphoneSdk(): Promise<void> {\n if (loadPromise) return loadPromise\n\n loadPromise = (async () => {\n loadCss(PAYPHONE_CSS_URL)\n await loadScript(PAYPHONE_JS_URL)\n })().catch((err) => {\n // Reset so the next call retries instead of returning the cached rejection\n loadPromise = null\n throw err\n })\n\n return loadPromise\n}\n","import { useEffect, useRef } from 'react'\nimport { loadPayphoneSdk } from '../utils/payphone-loader'\nimport type { PayphoneWidgetConfig } from '../types'\n\ndeclare global {\n interface Window {\n PPaymentButtonBox: new (config: Record<string, unknown>) => {\n render: (containerId: string) => void\n }\n }\n}\n\n/**\n * Internal widget renderer — loads Payphone SDK and mounts PPaymentButtonBox.\n * Used by usePayphoneCheckout, usePayButton hooks and PayphoneModal component.\n */\nexport function PayphoneWidgetRenderer({\n config,\n containerId,\n onReady,\n onError,\n}: {\n config: PayphoneWidgetConfig\n containerId: string\n onReady?: () => void\n onError?: (error: Error) => void\n}) {\n const initialized = useRef(false)\n\n useEffect(() => {\n if (initialized.current) return\n initialized.current = true\n\n loadPayphoneSdk()\n .then(() => {\n requestAnimationFrame(() => {\n if (typeof window.PPaymentButtonBox === 'undefined') {\n onError?.(new Error('Payphone SDK failed to initialize'))\n return\n }\n\n new window.PPaymentButtonBox({\n token: config.token,\n clientTransactionId: config.clientTransactionId,\n amount: config.amount,\n amountWithoutTax: config.amountWithoutTax,\n currency: config.currency,\n storeId: config.storeId,\n reference: config.reference,\n }).render(containerId)\n\n onReady?.()\n })\n })\n .catch((err) => {\n onError?.(new Error(err instanceof Error ? err.message : 'Failed to load Payphone SDK'))\n })\n }, [config, containerId, onReady, onError])\n\n return <div id={containerId} />\n}\n","import { useState, type CSSProperties } from 'react'\nimport { PayphoneWidgetRenderer } from './payphone-checkout'\nimport type { PayphoneWidgetConfig } from '../types'\n\nexport interface PayphoneModalProps {\n config: PayphoneWidgetConfig\n onClose: () => void\n}\n\nexport function PayphoneModal({ config, onClose }: PayphoneModalProps) {\n const [error, setError] = useState<string | null>(null)\n\n return (\n <div style={overlayStyle} onClick={onClose}>\n <div style={cardStyle} onClick={(e) => e.stopPropagation()}>\n <h2 style={titleStyle}>Payphone</h2>\n\n {error && <p style={{ ...messageStyle, color: '#ef4444' }}>{error}</p>}\n\n <PayphoneWidgetRenderer\n config={config}\n containerId=\"pp-button-azirid\"\n onError={(err) => setError(err.message)}\n />\n\n <p style={warningStyle}>Do not close this window until the payment is complete.</p>\n\n <button type=\"button\" style={cancelStyle} onClick={onClose}>\n Cancel\n </button>\n </div>\n </div>\n )\n}\n\nconst overlayStyle: CSSProperties = {\n position: 'fixed',\n inset: 0,\n backgroundColor: 'rgba(0,0,0,0.5)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 9999,\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n}\n\nconst cardStyle: CSSProperties = {\n backgroundColor: '#fff',\n borderRadius: '12px',\n padding: '24px',\n maxWidth: '480px',\n width: '90%',\n boxShadow: '0 25px 50px -12px rgba(0,0,0,0.25)',\n}\n\nconst titleStyle: CSSProperties = {\n fontSize: '18px',\n fontWeight: 700,\n color: '#111827',\n margin: '0 0 16px 0',\n textAlign: 'center',\n}\n\nconst messageStyle: CSSProperties = {\n fontSize: '14px',\n color: '#6b7280',\n textAlign: 'center',\n margin: '12px 0',\n}\n\nconst warningStyle: CSSProperties = {\n fontSize: '12px',\n color: '#d97706',\n textAlign: 'center',\n margin: '16px 0 0 0',\n}\n\nconst cancelStyle: CSSProperties = {\n display: 'block',\n width: '100%',\n marginTop: '12px',\n padding: '10px',\n border: 'none',\n borderRadius: '8px',\n backgroundColor: '#f3f4f6',\n color: '#6b7280',\n fontSize: '14px',\n fontWeight: 500,\n cursor: 'pointer',\n fontFamily: 'inherit',\n}\n","import type { CSSProperties } from 'react'\n\nexport interface PricingFeatureListProps {\n features: string[]\n}\n\nconst styles = {\n featuresList: {\n listStyle: 'none',\n padding: 0,\n margin: '0 0 24px 0',\n flex: 1,\n } satisfies CSSProperties,\n featureItem: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '6px 0',\n fontSize: '14px',\n color: '#374151',\n } satisfies CSSProperties,\n checkmark: {\n color: '#10b981',\n fontSize: '16px',\n fontWeight: 700,\n flexShrink: 0,\n } satisfies CSSProperties,\n}\n\nexport function PricingFeatureList({ features }: PricingFeatureListProps) {\n if (!features || features.length === 0) return null\n\n return (\n <ul style={styles.featuresList}>\n {features.map((feature, i) => (\n <li key={i} style={styles.featureItem}>\n <span style={styles.checkmark} aria-hidden=\"true\">\n ✓\n </span>\n {feature}\n </li>\n ))}\n </ul>\n )\n}\n\nPricingFeatureList.displayName = 'PricingFeatureList'\n","import type { CSSProperties } from 'react'\nimport { formatAmount } from '@azirid/shared'\nimport { PricingFeatureList } from './pricing-feature-list'\nimport type { BillingPlan } from '../types'\n\nexport interface PricingCardProps {\n plan: BillingPlan\n isCurrentPlan: boolean\n isCheckoutPending: boolean\n onSelect: (plan: BillingPlan) => void\n}\n\nconst intervalLabels: Record<BillingPlan['interval'], string> = {\n MONTHLY: '/mo',\n YEARLY: '/yr',\n ONE_TIME: '',\n}\n\nconst styles = {\n card: (isCurrentPlan: boolean): CSSProperties => ({\n border: isCurrentPlan ? '2px solid #6366f1' : '1px solid #e5e7eb',\n borderRadius: '12px',\n padding: '24px',\n backgroundColor: '#ffffff',\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n }),\n currentBadge: {\n position: 'absolute' as const,\n top: '-12px',\n left: '50%',\n transform: 'translateX(-50%)',\n backgroundColor: '#6366f1',\n color: '#ffffff',\n fontSize: '12px',\n fontWeight: 600,\n padding: '2px 12px',\n borderRadius: '9999px',\n whiteSpace: 'nowrap' as const,\n } satisfies CSSProperties,\n planName: {\n margin: '0 0 4px 0',\n fontSize: '20px',\n fontWeight: 600,\n color: '#111827',\n } satisfies CSSProperties,\n planDescription: {\n margin: '0 0 16px 0',\n fontSize: '14px',\n color: '#6b7280',\n lineHeight: '1.5',\n } satisfies CSSProperties,\n priceRow: {\n display: 'flex',\n alignItems: 'baseline',\n gap: '4px',\n marginBottom: '20px',\n } satisfies CSSProperties,\n priceAmount: {\n fontSize: '36px',\n fontWeight: 700,\n color: '#111827',\n lineHeight: 1,\n } satisfies CSSProperties,\n priceInterval: {\n fontSize: '16px',\n color: '#6b7280',\n } satisfies CSSProperties,\n selectButton: (isCurrentPlan: boolean): CSSProperties => ({\n width: '100%',\n padding: '12px 24px',\n borderRadius: '8px',\n border: isCurrentPlan ? '1px solid #d1d5db' : 'none',\n backgroundColor: isCurrentPlan ? '#ffffff' : '#111827',\n color: isCurrentPlan ? '#6b7280' : '#ffffff',\n fontSize: '14px',\n fontWeight: 600,\n cursor: isCurrentPlan ? 'default' : 'pointer',\n transition: 'background-color 0.15s',\n }),\n}\n\nexport function PricingCard({\n plan,\n isCurrentPlan,\n isCheckoutPending,\n onSelect,\n}: PricingCardProps) {\n return (\n <div style={styles.card(isCurrentPlan)}>\n {isCurrentPlan && <span style={styles.currentBadge}>Current Plan</span>}\n\n <h3 style={styles.planName}>{plan.name}</h3>\n {plan.description && <p style={styles.planDescription}>{plan.description}</p>}\n\n <div style={styles.priceRow}>\n <span style={styles.priceAmount}>{formatAmount(plan.amount, plan.currency)}</span>\n <span style={styles.priceInterval}>{intervalLabels[plan.interval]}</span>\n </div>\n\n {plan.features && plan.features.length > 0 && <PricingFeatureList features={plan.features} />}\n\n <button\n type=\"button\"\n onClick={() => onSelect(plan)}\n disabled={isCurrentPlan || isCheckoutPending}\n style={{\n ...styles.selectButton(isCurrentPlan),\n ...(isCheckoutPending && !isCurrentPlan ? { opacity: 0.6 } : {}),\n }}\n >\n {isCurrentPlan ? 'Current Plan' : 'Subscribe'}\n </button>\n </div>\n )\n}\n\nPricingCard.displayName = 'PricingCard'\n","import { useState, type CSSProperties } from 'react'\nimport { formatAmount } from '@azirid/shared'\nimport { usePlans } from '../hooks/use-plans'\nimport { useSubscription } from '../hooks/use-subscription'\nimport { useCheckout } from '../hooks/use-checkout'\nimport { usePaymentProviders } from '../hooks/use-payment-providers'\nimport { PayphoneModal } from './payphone-modal'\nimport { PricingCard } from './pricing-card'\nimport type {\n AvailableProvider,\n BillingPlan,\n CheckoutResponse,\n PaymentProviderType,\n} from '../types'\n\nexport interface PricingTableProps {\n className?: string\n style?: CSSProperties\n successUrl: string\n cancelUrl: string\n columns?: number\n onPlanSelect?: (plan: BillingPlan) => void\n}\n\nconst styles = {\n grid: (columns: number): CSSProperties => ({\n display: 'grid',\n gridTemplateColumns: `repeat(${columns}, 1fr)`,\n gap: '24px',\n fontFamily:\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n }),\n skeletonCard: {\n border: '1px solid #e5e7eb',\n borderRadius: '12px',\n padding: '24px',\n backgroundColor: '#ffffff',\n } satisfies CSSProperties,\n skeletonLine: {\n backgroundColor: '#f3f4f6',\n borderRadius: '4px',\n marginBottom: '12px',\n } satisfies CSSProperties,\n overlay: {\n position: 'fixed' as const,\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 9999,\n } satisfies CSSProperties,\n modal: {\n backgroundColor: '#ffffff',\n borderRadius: '16px',\n padding: '32px',\n maxWidth: '480px',\n width: '90%',\n maxHeight: '80vh',\n overflow: 'auto',\n } satisfies CSSProperties,\n modalTitle: {\n margin: '0 0 8px 0',\n fontSize: '20px',\n fontWeight: 600,\n color: '#111827',\n } satisfies CSSProperties,\n modalSubtitle: {\n margin: '0 0 24px 0',\n fontSize: '14px',\n color: '#6b7280',\n } satisfies CSSProperties,\n bankDetailRow: {\n display: 'flex',\n justifyContent: 'space-between',\n padding: '8px 0',\n borderBottom: '1px solid #f3f4f6',\n fontSize: '14px',\n } satisfies CSSProperties,\n bankDetailLabel: {\n color: '#6b7280',\n fontWeight: 500,\n } satisfies CSSProperties,\n bankDetailValue: {\n color: '#111827',\n fontWeight: 600,\n fontFamily: 'monospace',\n } satisfies CSSProperties,\n instructions: {\n margin: '16px 0',\n padding: '12px 16px',\n backgroundColor: '#f9fafb',\n borderRadius: '8px',\n fontSize: '14px',\n color: '#374151',\n lineHeight: '1.5',\n } satisfies CSSProperties,\n closeButton: {\n width: '100%',\n padding: '12px 24px',\n borderRadius: '8px',\n border: '1px solid #d1d5db',\n backgroundColor: '#ffffff',\n color: '#374151',\n fontSize: '14px',\n fontWeight: 600,\n cursor: 'pointer',\n marginTop: '16px',\n } satisfies CSSProperties,\n}\n\n/* ------------------------------------------------------------------ */\n/* Provider Selection Modal */\n/* ------------------------------------------------------------------ */\n\nconst PROVIDER_LABELS: Record<PaymentProviderType, string> = {\n STRIPE: 'Credit/Debit Card',\n PAYPAL: 'PayPal',\n PAYPHONE: 'Payphone',\n NUVEI: 'Nuvei',\n MANUAL_TRANSFER: 'Bank Transfer',\n}\n\nconst PROVIDER_ICONS: Record<PaymentProviderType, string> = {\n STRIPE: '\\uD83D\\uDCB3',\n PAYPAL: '\\uD83C\\uDD7F\\uFE0F',\n PAYPHONE: '\\uD83D\\uDCF1',\n NUVEI: '\\uD83D\\uDCB3',\n MANUAL_TRANSFER: '\\uD83C\\uDFE6',\n}\n\nfunction ProviderSelectModal({\n providers,\n isPending,\n onSelect,\n onClose,\n}: {\n providers: AvailableProvider[]\n isPending: boolean\n onSelect: (provider: PaymentProviderType) => void\n onClose: () => void\n}) {\n return (\n <div style={styles.overlay} onClick={onClose}>\n <div style={styles.modal} onClick={(e) => e.stopPropagation()}>\n <h2 style={styles.modalTitle}>Select payment method</h2>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n {providers.map((p) => (\n <button\n key={p.provider}\n type=\"button\"\n onClick={() => onSelect(p.provider)}\n disabled={isPending}\n style={{\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n padding: '12px 16px',\n border: '1px solid #e5e7eb',\n borderRadius: '8px',\n backgroundColor: '#fff',\n cursor: isPending ? 'not-allowed' : 'pointer',\n fontSize: '14px',\n fontWeight: 500,\n color: '#111827',\n fontFamily: 'inherit',\n }}\n >\n <span style={{ fontSize: '20px', marginRight: '12px' }}>\n {PROVIDER_ICONS[p.provider]}\n </span>\n <span>{PROVIDER_LABELS[p.provider] ?? p.provider}</span>\n </button>\n ))}\n </div>\n <button type=\"button\" style={styles.closeButton} onClick={onClose}>\n Cancel\n </button>\n </div>\n </div>\n )\n}\n\n/* ------------------------------------------------------------------ */\n/* Manual Transfer Modal */\n/* ------------------------------------------------------------------ */\n\nconst intervalLabels: Record<BillingPlan['interval'], string> = {\n MONTHLY: '/mo',\n YEARLY: '/yr',\n ONE_TIME: '',\n}\n\nfunction TransferModal({ data, onClose }: { data: CheckoutResponse; onClose: () => void }) {\n const bankDetails = data.bankDetails as Record<string, string> | null\n\n return (\n <div style={styles.overlay} onClick={onClose}>\n <div style={styles.modal} onClick={(e) => e.stopPropagation()}>\n <h2 style={styles.modalTitle}>Manual Transfer</h2>\n <p style={styles.modalSubtitle}>\n Transfer the amount below to subscribe to <strong>{data.plan?.name}</strong>\n </p>\n\n {/* Amount */}\n <div\n style={{\n textAlign: 'center',\n padding: '16px',\n backgroundColor: '#f9fafb',\n borderRadius: '8px',\n marginBottom: '20px',\n }}\n >\n <div style={{ fontSize: '32px', fontWeight: 700, color: '#111827' }}>\n {data.plan ? formatAmount(data.plan.amount, data.plan.currency) : ''}\n </div>\n <div style={{ fontSize: '14px', color: '#6b7280' }}>\n {data.plan?.interval\n ? (intervalLabels[data.plan.interval as keyof typeof intervalLabels] ?? '')\n : ''}\n </div>\n </div>\n\n {/* Bank Details */}\n {bankDetails && Object.keys(bankDetails).length > 0 && (\n <div style={{ marginBottom: '16px' }}>\n <div\n style={{\n fontSize: '14px',\n fontWeight: 600,\n color: '#111827',\n marginBottom: '8px',\n }}\n >\n Bank Details\n </div>\n {Object.entries(bankDetails)\n .filter(([, v]) => v)\n .map(([key, value]) => (\n <div key={key} style={styles.bankDetailRow}>\n <span style={styles.bankDetailLabel}>\n {key.replace(/([A-Z])/g, ' $1').replace(/^./, (s) => s.toUpperCase())}\n </span>\n <span style={styles.bankDetailValue}>{value}</span>\n </div>\n ))}\n </div>\n )}\n\n {/* Instructions */}\n {data.transferInstructions && (\n <div style={styles.instructions}>{data.transferInstructions}</div>\n )}\n\n <p\n style={{\n fontSize: '13px',\n color: '#9ca3af',\n margin: '12px 0 0 0',\n }}\n >\n After completing the transfer, submit your proof of payment. Your subscription will be\n activated once the transfer is verified.\n </p>\n\n <button type=\"button\" style={styles.closeButton} onClick={onClose}>\n Close\n </button>\n </div>\n </div>\n )\n}\n\n/* ------------------------------------------------------------------ */\n/* PricingTable */\n/* ------------------------------------------------------------------ */\n\nexport function PricingTable({\n className,\n style,\n successUrl,\n cancelUrl,\n columns = 3,\n onPlanSelect,\n}: PricingTableProps) {\n const { data: plans, isLoading: plansLoading } = usePlans()\n const { data: subscription } = useSubscription()\n const { data: providers } = usePaymentProviders()\n const [transferData, setTransferData] = useState<CheckoutResponse | null>(null)\n const [payphoneData, setPayphoneData] = useState<CheckoutResponse | null>(null)\n const [pendingPlan, setPendingPlan] = useState<BillingPlan | null>(null)\n const [showProviderModal, setShowProviderModal] = useState(false)\n\n const { checkout, isPending: checkoutPending } = useCheckout({\n redirectOnSuccess: true,\n onSuccess: (data) => {\n setShowProviderModal(false)\n setPendingPlan(null)\n if (data.provider === 'MANUAL_TRANSFER') {\n setTransferData(data)\n } else if (data.provider === 'PAYPHONE' && data.widgetConfig) {\n setPayphoneData(data)\n }\n },\n })\n\n const doCheckout = (planId: string, provider: PaymentProviderType) => {\n checkout({ planId, provider, successUrl, cancelUrl })\n }\n\n const handleSelect = (plan: BillingPlan) => {\n if (subscription?.planId === plan.id && subscription.status === 'ACTIVE') return\n\n if (onPlanSelect) {\n onPlanSelect(plan)\n return\n }\n\n // If multiple providers, show selection modal\n if (providers && providers.length > 1) {\n setPendingPlan(plan)\n setShowProviderModal(true)\n return\n }\n\n // Single provider — checkout directly\n const provider = providers?.[0]?.provider\n checkout({ planId: plan.id, provider, successUrl, cancelUrl })\n }\n\n if (plansLoading) {\n return (\n <div className={className} style={{ ...styles.grid(columns), ...style }}>\n {Array.from({ length: columns }).map((_, i) => (\n <div key={i} style={styles.skeletonCard}>\n <div\n style={{\n ...styles.skeletonLine,\n width: '60%',\n height: '20px',\n }}\n />\n <div\n style={{\n ...styles.skeletonLine,\n width: '80%',\n height: '14px',\n }}\n />\n <div\n style={{\n ...styles.skeletonLine,\n width: '40%',\n height: '36px',\n marginTop: '8px',\n }}\n />\n <div style={{ marginTop: '16px' }}>\n {[1, 2, 3].map((j) => (\n <div\n key={j}\n style={{\n ...styles.skeletonLine,\n width: '90%',\n height: '14px',\n }}\n />\n ))}\n </div>\n <div\n style={{\n ...styles.skeletonLine,\n width: '100%',\n height: '44px',\n marginTop: '16px',\n }}\n />\n </div>\n ))}\n </div>\n )\n }\n\n const sortedPlans = plans ? [...plans].sort((a, b) => a.sortOrder - b.sortOrder) : []\n\n return (\n <>\n <div className={className} style={{ ...styles.grid(columns), ...style }}>\n {sortedPlans.map((plan) => {\n const isCurrentPlan = subscription?.planId === plan.id && subscription.status === 'ACTIVE'\n\n return (\n <PricingCard\n key={plan.id}\n plan={plan}\n isCurrentPlan={isCurrentPlan}\n isCheckoutPending={checkoutPending}\n onSelect={handleSelect}\n />\n )\n })}\n </div>\n\n {showProviderModal && pendingPlan && providers && providers.length > 1 && (\n <ProviderSelectModal\n providers={providers}\n isPending={checkoutPending}\n onSelect={(provider) => doCheckout(pendingPlan.id, provider)}\n onClose={() => {\n setShowProviderModal(false)\n setPendingPlan(null)\n }}\n />\n )}\n\n {transferData && <TransferModal data={transferData} onClose={() => setTransferData(null)} />}\n\n {payphoneData?.widgetConfig && (\n <PayphoneModal\n config={payphoneData.widgetConfig}\n onClose={() => setPayphoneData(null)}\n />\n )}\n </>\n )\n}\n\nPricingTable.displayName = 'PricingTable'\n","import type { CSSProperties, ReactNode } from 'react'\nimport { useCheckout } from '../hooks/use-checkout'\n\nexport interface CheckoutButtonProps {\n planId: string\n successUrl: string\n cancelUrl: string\n className?: string\n style?: CSSProperties\n children?: ReactNode\n}\n\nconst defaultStyle: CSSProperties = {\n padding: '12px 24px',\n borderRadius: '8px',\n border: 'none',\n backgroundColor: '#111827',\n color: '#ffffff',\n fontSize: '14px',\n fontWeight: 600,\n cursor: 'pointer',\n transition: 'background-color 0.15s',\n fontFamily:\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n}\n\nexport function CheckoutButton({\n planId,\n successUrl,\n cancelUrl,\n className,\n style,\n children,\n}: CheckoutButtonProps) {\n const { checkout, isPending } = useCheckout({ redirectOnSuccess: true })\n\n return (\n <button\n type=\"button\"\n className={className}\n style={{\n ...defaultStyle,\n ...style,\n ...(isPending ? { opacity: 0.6, cursor: 'not-allowed' } : {}),\n }}\n disabled={isPending}\n onClick={() => checkout({ planId, successUrl, cancelUrl })}\n >\n {isPending ? 'Loading...' : (children ?? 'Subscribe')}\n </button>\n )\n}\n\nCheckoutButton.displayName = 'CheckoutButton'\n","import { useMutation } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\n\nexport interface PayphoneConfirmParams {\n id: number\n clientTransactionId: string\n}\n\nexport interface PayphoneConfirmResult {\n status: 'confirmed' | 'cancelled' | 'already_confirmed'\n intentId: string\n}\n\nexport interface UsePayphoneConfirmOptions {\n onSuccess?: (data: PayphoneConfirmResult) => void\n onError?: (error: Error) => void\n}\n\nexport function usePayphoneConfirm(options?: UsePayphoneConfirmOptions) {\n const client = useAccessClient()\n\n return useMutation({\n mutationFn: (params: PayphoneConfirmParams) =>\n client.post<PayphoneConfirmResult>(client.paths.payphoneConfirm, params),\n onSuccess: options?.onSuccess,\n onError: options?.onError,\n })\n}\n","import type { ReactElement } from 'react'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { useCheckout } from './use-checkout'\nimport { usePaymentProviders } from './use-payment-providers'\nimport { usePayphoneConfirm } from './use-payphone-confirm'\nimport type { PayphoneConfirmResult } from './use-payphone-confirm'\nimport { PayphoneWidgetRenderer } from '../components/payphone-checkout'\nimport { useAzirid } from '../providers/access-provider'\nimport { formatAmount } from '@azirid/shared'\nimport type {\n AvailableProvider,\n CheckoutResponse,\n PaymentProviderType,\n PayphoneWidgetConfig,\n} from '../types'\n\n// ─── Types ───────────────────────────────────────────────────\n\nexport type PayButtonStatus =\n | 'idle'\n | 'loading_providers'\n | 'ready'\n | 'processing'\n | 'redirecting'\n | 'success'\n | 'error'\n\nexport interface UsePayButtonOptions {\n intentId?: string\n planId?: string\n onSuccess?: (data: CheckoutResponse) => void\n onError?: (error: Error) => void\n}\n\nexport interface UsePayButtonReturn {\n providers: AvailableProvider[]\n checkout: (provider: PaymentProviderType) => void\n ProviderSelector: () => ReactElement | null\n TransferDetails: () => ReactElement | null\n PayphoneWidget: () => ReactElement | null\n status: PayButtonStatus\n selectedProvider: PaymentProviderType | null\n checkoutData: CheckoutResponse | null\n isPending: boolean\n error: Error | null\n}\n\n// ─── Provider display config ────────────────────────────────\n\nconst PROVIDER_LABELS: Record<PaymentProviderType, string> = {\n STRIPE: 'Credit/Debit Card',\n PAYPAL: 'PayPal',\n PAYPHONE: 'Payphone',\n NUVEI: 'Nuvei',\n MANUAL_TRANSFER: 'Bank Transfer',\n}\n\nconst PROVIDER_ICONS: Record<PaymentProviderType, string> = {\n STRIPE: '\\uD83D\\uDCB3',\n PAYPAL: '\\uD83C\\uDD7F\\uFE0F',\n PAYPHONE: '\\uD83D\\uDCF1',\n NUVEI: '\\uD83D\\uDCB3',\n MANUAL_TRANSFER: '\\uD83C\\uDFE6',\n}\n\nconst PP_CONTAINER_ID = 'pp-paybtn-azirid'\n\n// ─── Hook ───────────────────────────────────────────────────\n\nexport function usePayButton({\n intentId,\n planId,\n onSuccess,\n onError,\n}: UsePayButtonOptions): UsePayButtonReturn {\n const [status, setStatus] = useState<PayButtonStatus>('idle')\n const [selectedProvider, setSelectedProvider] = useState<PaymentProviderType | null>(null)\n const [checkoutData, setCheckoutData] = useState<CheckoutResponse | null>(null)\n const [payphoneConfig, setPayphoneConfig] = useState<PayphoneWidgetConfig | null>(null)\n const [currentError, setCurrentError] = useState<Error | null>(null)\n const payphoneConfirmTriggered = useRef(false)\n const { isBootstrapping } = useAzirid()\n\n // Detect Payphone callback params\n const params =\n typeof window !== 'undefined'\n ? new URLSearchParams(window.location.search)\n : new URLSearchParams()\n const callbackId = params.get('id')\n const callbackClientTxId = params.get('clientTransactionId')\n const isPayphoneCallback = !!(callbackId && callbackClientTxId)\n\n // ── Load providers ─────────────────────────────────────────\n const {\n data: providerList,\n isLoading: providersLoading,\n } = usePaymentProviders()\n\n const providers = providerList ?? []\n\n useEffect(() => {\n if (isPayphoneCallback) return\n if (providersLoading) {\n setStatus('loading_providers')\n } else if (providers.length > 0 && status === 'loading_providers') {\n setStatus('ready')\n }\n }, [providersLoading, providers.length, status, isPayphoneCallback])\n\n // ── Checkout ───────────────────────────────────────────────\n const { checkout: doCheckout, isPending } = useCheckout({\n redirectOnSuccess: false,\n onSuccess: (data) => {\n setCheckoutData(data)\n\n if (data.provider === 'PAYPHONE' && data.widgetConfig) {\n setPayphoneConfig(data.widgetConfig)\n setStatus('processing')\n return\n }\n\n if (data.provider === 'MANUAL_TRANSFER') {\n setStatus('success')\n onSuccess?.(data)\n return\n }\n\n // Redirect-based providers (Stripe, PayPal, Nuvei)\n if (data.url) {\n setStatus('redirecting')\n window.location.href = data.url\n return\n }\n\n setStatus('success')\n onSuccess?.(data)\n },\n onError: (err) => {\n setCurrentError(err)\n setStatus('error')\n onError?.(err)\n },\n })\n\n const checkout = useCallback(\n (provider: PaymentProviderType) => {\n setSelectedProvider(provider)\n setStatus('processing')\n setCurrentError(null)\n\n const currentUrl =\n typeof window !== 'undefined' ? window.location.href.split('?')[0] : ''\n\n doCheckout({\n intentId,\n planId,\n provider,\n successUrl: currentUrl,\n cancelUrl: currentUrl,\n })\n },\n [doCheckout, intentId, planId],\n )\n\n // ── Payphone confirmation ──────────────────────────────────\n const { mutate: confirmPayphone } = usePayphoneConfirm({\n onSuccess: (data: PayphoneConfirmResult) => {\n const isConfirmed = data.status === 'confirmed' || data.status === 'already_confirmed'\n setStatus(isConfirmed ? 'success' : 'error')\n\n const response: CheckoutResponse = {\n provider: 'PAYPHONE',\n ...(checkoutData ?? {}),\n }\n if (isConfirmed) {\n onSuccess?.(response)\n } else {\n onError?.(new Error('Payment was cancelled'))\n }\n },\n onError: (err) => {\n setCurrentError(err)\n setStatus('error')\n onError?.(err)\n },\n })\n\n useEffect(() => {\n if (!isPayphoneCallback || payphoneConfirmTriggered.current || isBootstrapping) return\n payphoneConfirmTriggered.current = true\n setSelectedProvider('PAYPHONE')\n setStatus('processing')\n confirmPayphone({ id: Number(callbackId), clientTransactionId: callbackClientTxId! })\n }, [isPayphoneCallback, isBootstrapping, callbackId, callbackClientTxId, confirmPayphone])\n\n // ── SDK error handler ──────────────────────────────────────\n const handleSdkError = useCallback(\n (err: Error) => {\n setCurrentError(err)\n setStatus('error')\n onError?.(err)\n },\n [onError],\n )\n\n // ── ProviderSelector component ─────────────────────────────\n const ProviderSelector = useMemo(() => {\n return function ProviderSelectorInner() {\n if (providers.length === 0 || isPayphoneCallback) return null\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n {providers.map((p) => (\n <button\n key={p.provider}\n type=\"button\"\n style={{\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n padding: '12px 16px',\n border: '1px solid #e5e7eb',\n borderRadius: '8px',\n backgroundColor: selectedProvider === p.provider ? '#f3f4f6' : '#fff',\n cursor: isPending ? 'not-allowed' : 'pointer',\n fontSize: '14px',\n fontWeight: 500,\n color: '#111827',\n fontFamily: 'inherit',\n }}\n onClick={() => checkout(p.provider)}\n disabled={isPending}\n >\n <span style={{ fontSize: '20px', marginRight: '12px' }}>\n {PROVIDER_ICONS[p.provider]}\n </span>\n <span>{PROVIDER_LABELS[p.provider]}</span>\n </button>\n ))}\n </div>\n )\n }\n }, [providers, selectedProvider, isPending, checkout, isPayphoneCallback])\n\n // ── TransferDetails component ──────────────────────────────\n const TransferDetails = useMemo(() => {\n return function TransferDetailsInner() {\n if (!checkoutData || checkoutData.provider !== 'MANUAL_TRANSFER') return null\n\n const bankDetails = checkoutData.bankDetails as Record<string, string> | null\n const plan = checkoutData.plan\n const intent = (checkoutData as any).intent as\n | { id: string; amount: number; currency: string; description?: string }\n | undefined\n\n const displayAmount = plan\n ? formatAmount(plan.amount, plan.currency)\n : intent\n ? formatAmount(intent.amount, intent.currency)\n : ''\n\n return (\n <div>\n {displayAmount && (\n <div\n style={{\n textAlign: 'center',\n padding: '16px',\n backgroundColor: '#f9fafb',\n borderRadius: '8px',\n marginBottom: '20px',\n }}\n >\n <div style={{ fontSize: '32px', fontWeight: 700, color: '#111827' }}>\n {displayAmount}\n </div>\n {plan?.name && (\n <div style={{ fontSize: '14px', color: '#6b7280' }}>{plan.name}</div>\n )}\n {intent?.description && (\n <div style={{ fontSize: '14px', color: '#6b7280' }}>{intent.description}</div>\n )}\n </div>\n )}\n\n {bankDetails && Object.keys(bankDetails).length > 0 && (\n <div style={{ marginBottom: '16px' }}>\n <div\n style={{\n fontSize: '14px',\n fontWeight: 600,\n color: '#111827',\n marginBottom: '8px',\n }}\n >\n Bank Details\n </div>\n {Object.entries(bankDetails)\n .filter(([, v]) => v)\n .map(([key, value]) => (\n <div\n key={key}\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n padding: '6px 0',\n borderBottom: '1px solid #f3f4f6',\n fontSize: '13px',\n }}\n >\n <span style={{ color: '#6b7280' }}>\n {key.replace(/([A-Z])/g, ' $1').replace(/^./, (s) => s.toUpperCase())}\n </span>\n <span style={{ color: '#111827', fontWeight: 500 }}>{value}</span>\n </div>\n ))}\n </div>\n )}\n\n {checkoutData.transferInstructions && (\n <div\n style={{\n padding: '12px',\n backgroundColor: '#eff6ff',\n borderRadius: '6px',\n fontSize: '13px',\n color: '#1e40af',\n lineHeight: 1.5,\n }}\n >\n {checkoutData.transferInstructions}\n </div>\n )}\n </div>\n )\n }\n }, [checkoutData])\n\n // ── PayphoneWidget component ───────────────────────────────\n const PayphoneWidget = useMemo(() => {\n return function PayphoneWidgetInner() {\n if (!payphoneConfig || isPayphoneCallback) return null\n\n return PayphoneWidgetRenderer({\n config: payphoneConfig,\n containerId: PP_CONTAINER_ID,\n onError: handleSdkError,\n })\n }\n }, [payphoneConfig, isPayphoneCallback, handleSdkError])\n\n return {\n providers,\n checkout,\n ProviderSelector,\n TransferDetails,\n PayphoneWidget,\n status,\n selectedProvider,\n checkoutData,\n isPending,\n error: currentError,\n }\n}\n","import type { CSSProperties } from 'react'\nimport { formatAmount } from '@azirid/shared'\nimport type { AvailableProvider, CheckoutResponse, PaymentProviderType } from '../types'\n\n// ─── Constants ───────────────────────────────────────────────\n\nconst PROVIDER_LABELS: Record<PaymentProviderType, { en: string; es: string }> = {\n STRIPE: { en: 'Credit/Debit Card', es: 'Tarjeta de crédito/débito' },\n PAYPAL: { en: 'PayPal', es: 'PayPal' },\n PAYPHONE: { en: 'Payphone', es: 'Payphone' },\n NUVEI: { en: 'Nuvei', es: 'Nuvei' },\n MANUAL_TRANSFER: { en: 'Bank Transfer', es: 'Transferencia bancaria' },\n}\n\nconst PROVIDER_ICONS: Record<PaymentProviderType, string> = {\n STRIPE: '\\uD83D\\uDCB3',\n PAYPAL: '\\uD83C\\uDD7F\\uFE0F',\n PAYPHONE: '\\uD83D\\uDCF1',\n NUVEI: '\\uD83D\\uDCB3',\n MANUAL_TRANSFER: '\\uD83C\\uDFE6',\n}\n\n// ─── Styles ──────────────────────────────────────────────────\n\nconst modalStyles: Record<string, CSSProperties> = {\n overlay: {\n position: 'fixed',\n inset: 0,\n backgroundColor: 'rgba(0,0,0,0.5)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 9999,\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n },\n card: {\n backgroundColor: '#fff',\n borderRadius: '12px',\n padding: '24px',\n maxWidth: '420px',\n width: '90%',\n boxShadow: '0 25px 50px -12px rgba(0,0,0,0.25)',\n },\n title: {\n fontSize: '18px',\n fontWeight: 700,\n color: '#111827',\n margin: '0 0 20px 0',\n textAlign: 'center',\n },\n providerButton: {\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n padding: '12px 16px',\n border: '1px solid #e5e7eb',\n borderRadius: '8px',\n backgroundColor: '#fff',\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: 500,\n color: '#111827',\n transition: 'background-color 0.15s',\n fontFamily: 'inherit',\n },\n cancelButton: {\n display: 'block',\n width: '100%',\n marginTop: '16px',\n padding: '10px',\n border: 'none',\n borderRadius: '8px',\n backgroundColor: '#f3f4f6',\n color: '#6b7280',\n fontSize: '14px',\n fontWeight: 500,\n cursor: 'pointer',\n fontFamily: 'inherit',\n },\n}\n\n// ─── ProviderModal ───────────────────────────────────────────\n\nexport interface ProviderModalProps {\n providers: AvailableProvider[]\n isPending: boolean\n onSelect: (provider: PaymentProviderType) => void\n onClose: () => void\n labels?: Record<string, string>\n}\n\nexport function ProviderModal({\n providers,\n isPending,\n onSelect,\n onClose,\n labels,\n}: ProviderModalProps) {\n return (\n <div style={modalStyles.overlay} onClick={onClose}>\n <div style={modalStyles.card} onClick={(e) => e.stopPropagation()}>\n <h2 style={modalStyles.title}>{labels?.selectPaymentMethod ?? 'Select payment method'}</h2>\n\n <div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n {providers.map((p) => {\n const label = PROVIDER_LABELS[p.provider]\n return (\n <button\n key={p.provider}\n type=\"button\"\n style={modalStyles.providerButton}\n onClick={() => onSelect(p.provider)}\n disabled={isPending}\n >\n <span style={{ fontSize: '20px', marginRight: '12px' }}>\n {PROVIDER_ICONS[p.provider]}\n </span>\n <span>{label?.en ?? p.provider}</span>\n </button>\n )\n })}\n </div>\n\n <button type=\"button\" style={modalStyles.cancelButton} onClick={onClose}>\n {labels?.cancel ?? 'Cancel'}\n </button>\n </div>\n </div>\n )\n}\n\n// ─── TransferModal ───────────────────────────────────────────\n\nexport interface TransferModalProps {\n data: CheckoutResponse\n onClose: () => void\n labels?: Record<string, string>\n}\n\nexport function TransferModal({ data, onClose, labels }: TransferModalProps) {\n const bankDetails = data.bankDetails as Record<string, string> | null\n const plan = data.plan\n const intent = (data as any).intent as\n | { id: string; amount: number; currency: string; description?: string }\n | undefined\n\n const displayAmount = plan\n ? formatAmount(plan.amount, plan.currency)\n : intent\n ? formatAmount(intent.amount, intent.currency)\n : ''\n\n return (\n <div style={modalStyles.overlay} onClick={onClose}>\n <div style={modalStyles.card} onClick={(e) => e.stopPropagation()}>\n <h2 style={modalStyles.title}>{labels?.bankTransfer ?? 'Bank Transfer'}</h2>\n\n {displayAmount && (\n <div\n style={{\n textAlign: 'center',\n padding: '16px',\n backgroundColor: '#f9fafb',\n borderRadius: '8px',\n marginBottom: '20px',\n }}\n >\n <div style={{ fontSize: '32px', fontWeight: 700, color: '#111827' }}>\n {displayAmount}\n </div>\n {plan?.name && <div style={{ fontSize: '14px', color: '#6b7280' }}>{plan.name}</div>}\n {intent?.description && (\n <div style={{ fontSize: '14px', color: '#6b7280' }}>{intent.description}</div>\n )}\n </div>\n )}\n\n {bankDetails && Object.keys(bankDetails).length > 0 && (\n <div style={{ marginBottom: '16px' }}>\n <div\n style={{\n fontSize: '14px',\n fontWeight: 600,\n color: '#111827',\n marginBottom: '8px',\n }}\n >\n Bank Details\n </div>\n {Object.entries(bankDetails)\n .filter(([, v]) => v)\n .map(([key, value]) => (\n <div\n key={key}\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n padding: '6px 0',\n borderBottom: '1px solid #f3f4f6',\n fontSize: '13px',\n }}\n >\n <span style={{ color: '#6b7280' }}>\n {key.replace(/([A-Z])/g, ' $1').replace(/^./, (s) => s.toUpperCase())}\n </span>\n <span style={{ color: '#111827', fontWeight: 500 }}>{value}</span>\n </div>\n ))}\n </div>\n )}\n\n {data.transferInstructions && (\n <div\n style={{\n padding: '12px',\n backgroundColor: '#eff6ff',\n borderRadius: '6px',\n fontSize: '13px',\n color: '#1e40af',\n lineHeight: 1.5,\n marginBottom: '16px',\n }}\n >\n {data.transferInstructions}\n </div>\n )}\n\n <p\n style={{\n fontSize: '13px',\n color: '#9ca3af',\n margin: '12px 0 0 0',\n }}\n >\n After completing the transfer, submit your proof of payment. Your access will be activated\n once the transfer is verified.\n </p>\n\n <button type=\"button\" style={modalStyles.cancelButton} onClick={onClose}>\n Close\n </button>\n </div>\n </div>\n )\n}\n","import { useState, type CSSProperties, type ReactNode } from 'react'\nimport { usePayButton } from '../hooks/use-pay-button'\nimport { useMessages } from '../providers/access-provider'\nimport { PayphoneModal } from './payphone-modal'\nimport { ProviderModal, TransferModal } from './pay-button-modal'\nimport type { CheckoutResponse, PaymentProviderType } from '../types'\n\nexport interface PayButtonProps {\n planId?: string\n intentId?: string\n successUrl: string\n cancelUrl: string\n className?: string\n style?: CSSProperties\n children?: ReactNode\n disabled?: boolean\n onSuccess?: (data: CheckoutResponse) => void\n onError?: (error: Error) => void\n onProviderSelect?: (provider: PaymentProviderType) => void\n}\n\nexport function PayButton({\n planId,\n intentId,\n successUrl,\n cancelUrl,\n className,\n style,\n children,\n disabled,\n onSuccess,\n onError,\n onProviderSelect,\n}: PayButtonProps) {\n const messages = useMessages()\n const billing = (messages as any)?.billing\n const [showProviderModal, setShowProviderModal] = useState(false)\n const [showTransferModal, setShowTransferModal] = useState(false)\n\n const {\n providers,\n checkout,\n checkoutData,\n PayphoneWidget,\n isPending,\n status,\n } = usePayButton({\n intentId,\n planId,\n onSuccess: (data) => {\n if (data.provider === 'MANUAL_TRANSFER') {\n setShowTransferModal(true)\n setShowProviderModal(false)\n return\n }\n if (data.provider === 'PAYPHONE') {\n setShowProviderModal(false)\n return\n }\n onSuccess?.(data)\n },\n onError,\n })\n\n const handleClick = () => {\n if (!providers || providers.length === 0) return\n\n if (providers.length === 1) {\n doCheckout(providers[0].provider)\n } else {\n setShowProviderModal(true)\n }\n }\n\n const doCheckout = (provider: PaymentProviderType) => {\n onProviderSelect?.(provider)\n checkout(provider)\n }\n\n const isDisabled = disabled || isPending || status === 'loading_providers' || (!planId && !intentId)\n\n return (\n <>\n <button\n type=\"button\"\n className={className}\n style={{\n padding: '10px 24px',\n fontSize: '14px',\n fontWeight: 600,\n color: '#fff',\n backgroundColor: isDisabled ? '#9ca3af' : '#111827',\n border: 'none',\n borderRadius: '8px',\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n ...style,\n }}\n onClick={handleClick}\n disabled={isDisabled}\n >\n {isPending ? (billing?.processing ?? 'Processing...') : (children ?? billing?.pay ?? 'Pay')}\n </button>\n\n {/* Provider Selection Modal */}\n {showProviderModal && providers && providers.length > 1 && (\n <ProviderModal\n providers={providers}\n isPending={isPending}\n onSelect={doCheckout}\n onClose={() => setShowProviderModal(false)}\n labels={billing}\n />\n )}\n\n {/* Transfer Details Modal */}\n {showTransferModal && checkoutData && checkoutData.provider === 'MANUAL_TRANSFER' && (\n <TransferModal\n data={checkoutData}\n onClose={() => {\n setShowTransferModal(false)\n onSuccess?.(checkoutData)\n }}\n labels={billing}\n />\n )}\n\n {/* Payphone Widget Modal */}\n {status === 'processing' && checkoutData?.provider === 'PAYPHONE' && checkoutData.widgetConfig && (\n <PayphoneModal\n config={checkoutData.widgetConfig}\n onClose={() => {\n onSuccess?.(checkoutData)\n }}\n />\n )}\n </>\n )\n}\n","import { useEffect, useRef, type CSSProperties } from 'react'\nimport { usePayphoneConfirm } from '../hooks/use-payphone-confirm'\nimport { useAzirid } from '../providers/access-provider'\n\nexport interface PayphoneCallbackProps {\n onSuccess?: (data: { status: string; intentId: string }) => void\n onError?: (error: Error) => void\n className?: string\n style?: CSSProperties\n}\n\nexport function PayphoneCallback({ onSuccess, onError, className, style }: PayphoneCallbackProps) {\n const { mutate, isPending, isSuccess, isError, error, data } = usePayphoneConfirm({\n onSuccess,\n onError,\n })\n\n const { isBootstrapping } = useAzirid()\n const called = useRef(false)\n\n useEffect(() => {\n if (called.current || isBootstrapping) return\n called.current = true\n\n const params = new URLSearchParams(window.location.search)\n const id = params.get('id')\n const clientTransactionId = params.get('clientTransactionId')\n\n if (!id || !clientTransactionId) return\n\n mutate({ id: Number(id), clientTransactionId })\n }, [mutate, isBootstrapping])\n\n return (\n <div className={className} style={{ textAlign: 'center', padding: '32px', ...style }}>\n {isPending && (\n <div>\n <p style={textStyle}>Confirming your payment...</p>\n <p style={subtextStyle}>Please do not close this page.</p>\n </div>\n )}\n\n {isSuccess && data && (\n <div>\n {data.status === 'confirmed' || data.status === 'already_confirmed' ? (\n <>\n <p style={{ ...textStyle, color: '#059669' }}>Payment confirmed!</p>\n <p style={subtextStyle}>Your payment has been processed successfully.</p>\n </>\n ) : (\n <>\n <p style={{ ...textStyle, color: '#d97706' }}>Payment was cancelled</p>\n <p style={subtextStyle}>The transaction was not completed.</p>\n </>\n )}\n </div>\n )}\n\n {isError && (\n <div>\n <p style={{ ...textStyle, color: '#dc2626' }}>Payment confirmation failed</p>\n <p style={subtextStyle}>{error?.message ?? 'An error occurred'}</p>\n </div>\n )}\n </div>\n )\n}\n\nconst textStyle: CSSProperties = {\n fontSize: '18px',\n fontWeight: 600,\n color: '#111827',\n margin: '0 0 8px 0',\n}\n\nconst subtextStyle: CSSProperties = {\n fontSize: '14px',\n color: '#6b7280',\n margin: 0,\n}\n","import type { CSSProperties } from 'react'\nimport { useSubscription } from '../hooks/use-subscription'\nimport type { UserSubscription } from '../types'\n\nexport interface SubscriptionBadgeProps {\n className?: string\n style?: CSSProperties\n}\n\nconst statusConfig: Record<\n UserSubscription['status'],\n { bg: string; color: string; label: string }\n> = {\n ACTIVE: { bg: '#d1fae5', color: '#065f46', label: 'Active' },\n TRIALING: { bg: '#dbeafe', color: '#1e40af', label: 'Trial' },\n PAST_DUE: { bg: '#fef3c7', color: '#92400e', label: 'Past Due' },\n CANCELED: { bg: '#fee2e2', color: '#991b1b', label: 'Canceled' },\n UNPAID: { bg: '#fee2e2', color: '#991b1b', label: 'Unpaid' },\n INCOMPLETE: { bg: '#f3f4f6', color: '#6b7280', label: 'Incomplete' },\n}\n\nconst styles = {\n badge: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '6px',\n padding: '6px 12px',\n borderRadius: '9999px',\n fontSize: '13px',\n fontWeight: 500,\n fontFamily:\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n } satisfies CSSProperties,\n dot: (color: string): CSSProperties => ({\n width: '6px',\n height: '6px',\n borderRadius: '50%',\n backgroundColor: color,\n flexShrink: 0,\n }),\n skeleton: {\n display: 'inline-block',\n width: '120px',\n height: '32px',\n borderRadius: '9999px',\n backgroundColor: '#f3f4f6',\n } satisfies CSSProperties,\n}\n\nexport function SubscriptionBadge({ className, style }: SubscriptionBadgeProps) {\n const { data: subscription, isLoading } = useSubscription()\n\n if (isLoading) {\n return <span className={className} style={{ ...styles.skeleton, ...style }} />\n }\n\n if (!subscription) {\n return (\n <span\n className={className}\n style={{\n ...styles.badge,\n backgroundColor: '#f3f4f6',\n color: '#6b7280',\n ...style,\n }}\n >\n No Plan\n </span>\n )\n }\n\n const config = statusConfig[subscription.status]\n\n return (\n <span\n className={className}\n style={{\n ...styles.badge,\n backgroundColor: config.bg,\n color: config.color,\n ...style,\n }}\n >\n <span style={styles.dot(config.color)} aria-hidden=\"true\" />\n {subscription.plan.name} · {config.label}\n </span>\n )\n}\n\nSubscriptionBadge.displayName = 'SubscriptionBadge'\n","import { useQuery } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { BillingInvoice } from '../types'\n\nexport function useInvoices() {\n const client = useAccessClient()\n return useQuery({\n queryKey: ['azirid-access', 'billing', 'invoices'],\n queryFn: () => client.get<BillingInvoice[]>(client.paths.invoices),\n enabled: !!client.getAccessToken(),\n })\n}\n","import type { CSSProperties } from 'react'\nimport { formatAmount } from '@azirid/shared'\nimport { useInvoices } from '../hooks/use-invoices'\nimport type { BillingInvoice } from '../types'\n\nexport interface InvoiceListProps {\n className?: string\n style?: CSSProperties\n}\n\nconst statusColors: Record<BillingInvoice['status'], { bg: string; color: string }> = {\n PENDING: { bg: '#fef3c7', color: '#92400e' },\n PAID: { bg: '#d1fae5', color: '#065f46' },\n FAILED: { bg: '#fee2e2', color: '#991b1b' },\n REFUNDED: { bg: '#f3f4f6', color: '#6b7280' },\n}\n\nfunction formatDate(dateStr: string): string {\n try {\n return new Date(dateStr).toLocaleDateString(undefined, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n })\n } catch {\n return dateStr\n }\n}\n\nconst styles = {\n container: {\n border: '1px solid #e5e7eb',\n borderRadius: '12px',\n backgroundColor: '#ffffff',\n overflow: 'hidden',\n fontFamily:\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n } satisfies CSSProperties,\n header: {\n padding: '16px 24px',\n borderBottom: '1px solid #e5e7eb',\n } satisfies CSSProperties,\n title: {\n margin: 0,\n fontSize: '16px',\n fontWeight: 600,\n color: '#111827',\n } satisfies CSSProperties,\n table: {\n width: '100%',\n borderCollapse: 'collapse' as const,\n fontSize: '14px',\n } satisfies CSSProperties,\n th: {\n padding: '12px 24px',\n textAlign: 'left' as const,\n fontSize: '12px',\n fontWeight: 500,\n color: '#6b7280',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n borderBottom: '1px solid #e5e7eb',\n backgroundColor: '#f9fafb',\n } satisfies CSSProperties,\n td: {\n padding: '12px 24px',\n borderBottom: '1px solid #f3f4f6',\n color: '#374151',\n } satisfies CSSProperties,\n badge: (bg: string, color: string): CSSProperties => ({\n display: 'inline-block',\n padding: '2px 8px',\n borderRadius: '9999px',\n fontSize: '12px',\n fontWeight: 500,\n backgroundColor: bg,\n color,\n }),\n link: {\n color: '#6366f1',\n textDecoration: 'none',\n fontWeight: 500,\n fontSize: '13px',\n } satisfies CSSProperties,\n skeleton: {\n backgroundColor: '#f3f4f6',\n borderRadius: '4px',\n height: '14px',\n } satisfies CSSProperties,\n emptyRow: {\n padding: '24px',\n textAlign: 'center' as const,\n color: '#9ca3af',\n fontSize: '14px',\n } satisfies CSSProperties,\n}\n\nexport function InvoiceList({ className, style }: InvoiceListProps) {\n const { data: invoices, isLoading } = useInvoices()\n\n if (isLoading) {\n return (\n <div className={className} style={{ ...styles.container, ...style }}>\n <div style={styles.header}>\n <div style={{ ...styles.skeleton, width: '100px', height: '18px' }} />\n </div>\n <div style={{ padding: '24px' }}>\n {[1, 2, 3].map((i) => (\n <div\n key={i}\n style={{ ...styles.skeleton, width: '100%', height: '16px', marginBottom: '16px' }}\n />\n ))}\n </div>\n </div>\n )\n }\n\n return (\n <div className={className} style={{ ...styles.container, ...style }}>\n <div style={styles.header}>\n <h3 style={styles.title}>Invoices</h3>\n </div>\n\n <table style={styles.table}>\n <thead>\n <tr>\n <th style={styles.th}>Date</th>\n <th style={styles.th}>Amount</th>\n <th style={styles.th}>Status</th>\n <th style={styles.th}>Invoice</th>\n </tr>\n </thead>\n <tbody>\n {(!invoices || invoices.length === 0) && (\n <tr>\n <td colSpan={4} style={styles.emptyRow}>\n No invoices yet.\n </td>\n </tr>\n )}\n {invoices?.map((invoice) => {\n const sc = statusColors[invoice.status]\n return (\n <tr key={invoice.id}>\n <td style={styles.td}>{formatDate(invoice.createdAt)}</td>\n <td style={styles.td}>{formatAmount(invoice.amount, invoice.currency)}</td>\n <td style={styles.td}>\n <span style={styles.badge(sc.bg, sc.color)}>{invoice.status}</span>\n </td>\n <td style={styles.td}>\n {invoice.invoiceUrl ? (\n <a\n href={invoice.invoiceUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={styles.link}\n >\n View\n </a>\n ) : (\n <span style={{ color: '#d1d5db' }}>—</span>\n )}\n </td>\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n )\n}\n\nInvoiceList.displayName = 'InvoiceList'\n","import { useCallback, useMemo } from 'react'\nimport type { UseMutationResult } from '@tanstack/react-query'\nimport { useAzirid } from '../providers/access-provider'\nimport type { AuthSuccessResponse } from '../types'\n\nexport interface LoginData {\n email: string\n password: string\n}\n\nexport interface UseLoginOptions {\n /** Callback after successful login */\n onSuccess?: (response: AuthSuccessResponse) => void\n /** Callback on login error */\n onError?: (error: Error) => void\n}\n\nexport type UseLoginReturn = UseMutationResult<AuthSuccessResponse, Error, LoginData> & {\n /** Convenience: call mutate() with consumer callbacks */\n login: (data: LoginData) => void\n}\n\n/**\n * Hook for login. Uses the **same mutation** as `<LoginForm>` and\n * `useAzirid().login()`, so the provider state (user, tokens, callbacks)\n * is always in sync.\n *\n * @example\n * ```tsx\n * const { login, isPending, error } = useLogin({\n * onSuccess: (res) => router.push(\"/dashboard\"),\n * onError: (err) => toast.error(err.message),\n * });\n *\n * login({ email: \"user@test.com\", password: \"secret\" });\n * ```\n */\nexport function useLogin(options?: UseLoginOptions): UseLoginReturn {\n const { loginMutation } = useAzirid()\n\n const login = useCallback(\n (data: LoginData) => {\n loginMutation.mutate(data, {\n onSuccess: options?.onSuccess,\n onError: options?.onError,\n })\n },\n [loginMutation, options?.onSuccess, options?.onError],\n )\n\n return useMemo(() => Object.assign({}, loginMutation, { login }), [loginMutation, login])\n}\n","import { useCallback, useMemo } from 'react'\nimport type { UseMutationResult } from '@tanstack/react-query'\nimport { useAzirid } from '../providers/access-provider'\nimport type { AuthSuccessResponse, SignupData } from '../types'\n\nexport interface UseSignupOptions {\n /** Callback after successful signup */\n onSuccess?: (response: AuthSuccessResponse) => void\n /** Callback on signup error */\n onError?: (error: Error) => void\n}\n\nexport type UseSignupReturn = UseMutationResult<AuthSuccessResponse, Error, SignupData> & {\n /** Convenience: call mutate() with consumer callbacks */\n signup: (data: SignupData) => void\n}\n\n/**\n * Hook for signup. Uses the **same mutation** as `<SignupForm>` and\n * `useAzirid().signup()`, so the provider state (user, tokens, callbacks)\n * is always in sync.\n *\n * @example\n * ```tsx\n * const { signup, isPending, error } = useSignup({\n * onSuccess: (res) => router.push(\"/welcome\"),\n * });\n *\n * signup({ email: \"new@user.com\", password: \"SecurePass10\" });\n * ```\n */\nexport function useSignup(options?: UseSignupOptions): UseSignupReturn {\n const { signupMutation } = useAzirid()\n\n const signup = useCallback(\n (data: SignupData) => {\n signupMutation.mutate(data, {\n onSuccess: options?.onSuccess,\n onError: options?.onError,\n })\n },\n [signupMutation, options?.onSuccess, options?.onError],\n )\n\n return useMemo(() => Object.assign({}, signupMutation, { signup }), [signupMutation, signup])\n}\n","import { useCallback, useMemo } from 'react'\nimport type { UseMutationResult } from '@tanstack/react-query'\nimport { useAzirid } from '../providers/access-provider'\n\nexport interface UseLogoutOptions {\n /** Callback after successful logout */\n onSuccess?: () => void\n /** Callback on logout error */\n onError?: (error: Error) => void\n}\n\nexport type UseLogoutReturn = UseMutationResult<unknown, Error, void> & {\n /** Convenience: call mutate() with consumer callbacks */\n logout: () => void\n}\n\n/**\n * Hook for logout. Uses the **same mutation** as `useAzirid().logout()`,\n * so the provider state is always in sync.\n *\n * @example\n * ```tsx\n * const { logout, isPending } = useLogout({\n * onSuccess: () => router.push(\"/login\"),\n * });\n *\n * <button onClick={logout}>Cerrar sesión</button>\n * ```\n */\nexport function useLogout(options?: UseLogoutOptions): UseLogoutReturn {\n const { logoutMutation } = useAzirid()\n\n const logout = useCallback(() => {\n logoutMutation.mutate(undefined, {\n onSuccess: options?.onSuccess,\n onError: options?.onError,\n })\n }, [logoutMutation, options?.onSuccess, options?.onError])\n\n return useMemo(() => Object.assign({}, logoutMutation, { logout }), [logoutMutation, logout])\n}\n","import { useQuery, type UseQueryResult } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { AuthUser } from '../types'\n\nexport interface UseSessionOptions {\n /** Enable/disable auto-fetching (default: true) */\n enabled?: boolean\n /** Refetch interval in ms (default: disabled) */\n refetchInterval?: number\n /** Refetch when window gets focus (default: false) */\n refetchOnWindowFocus?: boolean\n}\n\nexport type UseSessionReturn = UseQueryResult<AuthUser, Error> & {\n /** Shorthand: is the user authenticated? */\n isAuthenticated: boolean\n}\n\n/**\n * Standalone hook to fetch the current session (GET /me).\n * Requires `<AziridProvider>`.\n *\n * Useful for:\n * - Checking if the user is still logged in on mount\n * - Getting fresh user data from the server\n * - Bootstrapping auth state on page load\n *\n * @example\n * ```tsx\n * const session = useSession();\n *\n * if (session.isLoading) return <Spinner />;\n * if (!session.isAuthenticated) return <Redirect to=\"/login\" />;\n *\n * return <p>Hola, {session.data?.firstName}</p>;\n * ```\n */\nexport function useSession(options?: UseSessionOptions): UseSessionReturn {\n const client = useAccessClient()\n\n const query = useQuery({\n queryKey: ['azirid-access', 'session'],\n queryFn: () => client.get<AuthUser>(client.paths.me),\n retry: false,\n enabled: options?.enabled ?? true,\n refetchInterval: options?.refetchInterval,\n refetchOnWindowFocus: options?.refetchOnWindowFocus ?? false,\n })\n\n return {\n ...query,\n isAuthenticated: query.isSuccess && query.data !== null,\n }\n}\n","import { useMutation, type UseMutationResult } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { AuthSuccessResponse } from '../types'\n\nexport interface MagicLinkRequestData {\n email: string\n}\n\nexport interface MagicLinkVerifyData {\n token: string\n}\n\nexport interface UseMagicLinkOptions {\n /** Callback after magic link email sent */\n onRequestSuccess?: () => void\n /** Callback after magic link verified (user logged in) */\n onVerifySuccess?: (response: AuthSuccessResponse) => void\n /** Callback on error */\n onError?: (error: Error) => void\n}\n\nexport interface UseMagicLinkReturn {\n /** Request a magic link email */\n request: UseMutationResult<unknown, Error, MagicLinkRequestData>\n /** Verify the magic link token */\n verify: UseMutationResult<AuthSuccessResponse, Error, MagicLinkVerifyData>\n}\n\n/**\n * Standalone hook for magic link auth flow. Requires `<AziridProvider>`.\n *\n * @example\n * ```tsx\n * const magicLink = useMagicLink({\n * onRequestSuccess: () => toast.success(\"Revisa tu correo\"),\n * onVerifySuccess: (res) => router.push(\"/dashboard\"),\n * });\n *\n * // Step 1: request magic link\n * magicLink.request.mutate({ email: \"user@test.com\" });\n *\n * // Step 2: verify token (from URL params)\n * magicLink.verify.mutate({ token: searchParams.get(\"token\")! });\n * ```\n */\nexport function useMagicLink(options?: UseMagicLinkOptions): UseMagicLinkReturn {\n const client = useAccessClient()\n\n const request = useMutation({\n mutationKey: ['azirid-access', 'magic-link', 'request'],\n mutationFn: (data: MagicLinkRequestData) => client.post(client.paths.magicLinkRequest, data),\n onSuccess: () => options?.onRequestSuccess?.(),\n onError: options?.onError,\n })\n\n const verify = useMutation({\n mutationKey: ['azirid-access', 'magic-link', 'verify'],\n mutationFn: (data: MagicLinkVerifyData) =>\n client.post<AuthSuccessResponse>(client.paths.magicLinkVerify, data),\n onSuccess: options?.onVerifySuccess,\n onError: options?.onError,\n })\n\n return { request, verify }\n}\n","import { useMutation, type UseMutationResult } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { AuthSuccessResponse, SocialLoginData } from '../types'\n\nexport interface UseSocialLoginOptions {\n /** Callback after successful social login */\n onSuccess?: (response: AuthSuccessResponse) => void\n /** Callback on error */\n onError?: (error: Error) => void\n}\n\nexport type UseSocialLoginReturn = UseMutationResult<AuthSuccessResponse, Error, SocialLoginData>\n\n/**\n * Standalone hook for social login (Google, GitHub). Requires `<AziridProvider>`.\n *\n * @example\n * ```tsx\n * const socialLogin = useSocialLogin({\n * onSuccess: (res) => router.push(\"/dashboard\"),\n * });\n *\n * socialLogin.mutate({\n * provider: \"google\",\n * providerAccountId: googleUser.id,\n * email: googleUser.email,\n * });\n * ```\n */\nexport function useSocialLogin(options?: UseSocialLoginOptions): UseSocialLoginReturn {\n const client = useAccessClient()\n\n return useMutation({\n mutationKey: ['azirid-access', 'social-login'],\n mutationFn: async (data: SocialLoginData) => {\n const body: Record<string, unknown> = { ...data }\n\n if (client.appContext?.tenantId) {\n body.tenantId = client.appContext.tenantId\n }\n\n return client.post<AuthSuccessResponse>(client.paths.socialLogin, body)\n },\n onSuccess: options?.onSuccess,\n onError: options?.onError,\n })\n}\n","import { useMutation, type UseMutationResult } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { ChangePasswordData } from '../types'\n\nexport interface UseChangePasswordOptions {\n /** Callback after password changed */\n onSuccess?: (response: { updated: boolean }) => void\n /** Callback on error */\n onError?: (error: Error) => void\n}\n\nexport type UseChangePasswordReturn = UseMutationResult<\n { updated: boolean },\n Error,\n ChangePasswordData\n>\n\n/**\n * Standalone hook for changing password. Requires `<AziridProvider>`.\n *\n * @example\n * ```tsx\n * const changePassword = useChangePassword({\n * onSuccess: () => toast.success(\"Contraseña actualizada\"),\n * });\n *\n * changePassword.mutate({\n * currentPassword: \"OldPass123!\",\n * newPassword: \"NewSecure10!\",\n * });\n * ```\n */\nexport function useChangePassword(options?: UseChangePasswordOptions): UseChangePasswordReturn {\n const client = useAccessClient()\n\n return useMutation({\n mutationKey: ['azirid-access', 'change-password'],\n mutationFn: (data: ChangePasswordData) =>\n client.post<{ updated: boolean }>(client.paths.changePassword, data),\n onSuccess: options?.onSuccess,\n onError: options?.onError,\n })\n}\n","import { useMutation, type UseMutationResult } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { AuthSuccessResponse } from '../types'\n\nexport interface UseRefreshOptions {\n /** Callback after tokens refreshed */\n onSuccess?: (response: AuthSuccessResponse) => void\n /** Callback on error (e.g. session expired) */\n onError?: (error: Error) => void\n}\n\nexport type UseRefreshReturn = UseMutationResult<AuthSuccessResponse, Error, void>\n\n/**\n * Standalone hook for manually refreshing the access token.\n * Requires `<AziridProvider>`. Uses the refresh token cookie.\n *\n * Note: The AccessClient automatically handles 401 responses with token refresh.\n * This hook is for cases where you want to proactively refresh.\n *\n * @example\n * ```tsx\n * const refresh = useRefresh({\n * onSuccess: (res) => console.log(\"Token renovado\"),\n * onError: () => router.push(\"/login\"),\n * });\n *\n * refresh.mutate();\n * ```\n */\nexport function useRefresh(options?: UseRefreshOptions): UseRefreshReturn {\n const client = useAccessClient()\n\n return useMutation({\n mutationKey: ['azirid-access', 'refresh'],\n mutationFn: async () => {\n await client.refreshSession()\n // refreshSession already updated internal tokens; return a\n // minimal response so onSuccess callers still get data.\n return { accessToken: client.getAccessToken() } as AuthSuccessResponse\n },\n onSuccess: (data) => {\n options?.onSuccess?.(data)\n },\n onError: options?.onError,\n })\n}\n","import { useQuery, type UseQueryResult } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { BootstrapResponse } from '../types'\n\nexport interface UseBootstrapOptions {\n /** Enable auto-fetching on mount (default: true) */\n enabled?: boolean\n /** Callback after bootstrap succeeds with an authenticated session */\n onAuthenticated?: (response: Extract<BootstrapResponse, { authenticated: true }>) => void\n /** Callback when no valid session exists */\n onUnauthenticated?: () => void\n}\n\nexport type UseBootstrapReturn = UseQueryResult<BootstrapResponse, Error> & {\n /** Whether the bootstrap resolved to an authenticated session */\n isAuthenticated: boolean\n}\n\n/**\n * Standalone hook for silent session bootstrap using refresh token cookie.\n * Requires `<AziridProvider>`. Posts to the bootstrap endpoint on mount.\n *\n * @example\n * ```tsx\n * const bootstrap = useBootstrap({\n * onAuthenticated: (res) => console.log(\"Sesión restaurada:\", res.user.email),\n * onUnauthenticated: () => router.push(\"/login\"),\n * });\n *\n * if (bootstrap.isLoading) return <Spinner />;\n * if (!bootstrap.isAuthenticated) return <LoginPage />;\n * ```\n */\nexport function useBootstrap(options?: UseBootstrapOptions): UseBootstrapReturn {\n const client = useAccessClient()\n\n const query = useQuery({\n queryKey: ['azirid-access', 'bootstrap'],\n queryFn: async () => {\n const response = await client.post<BootstrapResponse>(client.paths.bootstrap)\n\n if (response.authenticated) {\n client.setAccessToken(response.accessToken)\n options?.onAuthenticated?.(response)\n } else {\n options?.onUnauthenticated?.()\n }\n\n return response\n },\n retry: false,\n enabled: options?.enabled ?? true,\n staleTime: Infinity,\n refetchOnWindowFocus: false,\n })\n\n const isAuthenticated =\n query.isSuccess && query.data !== undefined && query.data.authenticated === true\n\n return {\n ...query,\n isAuthenticated,\n }\n}\n","import {\n useMutation,\n useQuery,\n useQueryClient,\n type UseMutationResult,\n type UseQueryResult,\n} from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type {\n AuthSuccessResponse,\n PasskeyItem,\n PasskeyLoginData,\n PasskeyLoginStartData,\n PasskeyLoginStartResponse,\n PasskeyLoginVerifyData,\n PasskeyRegisterStartData,\n PasskeyRegisterStartResponse,\n PasskeyRegisterVerifyData,\n RegisterPasskeyData,\n} from '../types'\n\nexport interface UsePasskeysOptions {\n /** Enable auto-fetching of passkey list (default: false) */\n listEnabled?: boolean\n /** Callback after passkey registered */\n onRegisterSuccess?: () => void\n /** Callback after passkey revoked */\n onRevokeSuccess?: (data: { revoked: boolean; passkeyId: string }) => void\n /** Callback after passkey login */\n onLoginSuccess?: (response: AuthSuccessResponse) => void\n /** Callback on error */\n onError?: (error: Error) => void\n}\n\nexport interface UsePasskeysReturn {\n /** List registered passkeys (authenticated) */\n list: UseQueryResult<PasskeyItem[], Error>\n /** Start passkey registration challenge (authenticated) */\n registerStart: UseMutationResult<PasskeyRegisterStartResponse, Error, PasskeyRegisterStartData>\n /** Verify passkey registration (authenticated) */\n registerVerify: UseMutationResult<{ message: string }, Error, PasskeyRegisterVerifyData>\n /** Register a passkey directly (authenticated) */\n register: UseMutationResult<{ message: string }, Error, RegisterPasskeyData>\n /** Revoke a passkey (authenticated) */\n revoke: UseMutationResult<{ revoked: boolean; passkeyId: string }, Error, string>\n /** Simple passkey login by credentialId (public) */\n login: UseMutationResult<AuthSuccessResponse, Error, PasskeyLoginData>\n /** Start passkey login challenge (public) */\n loginStart: UseMutationResult<PasskeyLoginStartResponse, Error, PasskeyLoginStartData | void>\n /** Verify passkey login (public) */\n loginVerify: UseMutationResult<AuthSuccessResponse, Error, PasskeyLoginVerifyData>\n}\n\n/**\n * Standalone hook for passkey (WebAuthn) management. Requires `<AziridProvider>`.\n *\n * @example\n * ```tsx\n * const passkeys = usePasskeys({\n * listEnabled: true,\n * onLoginSuccess: (res) => router.push(\"/dashboard\"),\n * onRegisterSuccess: () => toast.success(\"Passkey registrada\"),\n * });\n *\n * // List passkeys\n * const { data: passkeyList } = passkeys.list;\n *\n * // Start registration flow\n * const challenge = await passkeys.registerStart.mutateAsync({ deviceName: \"Mi Mac\" });\n * // ... get credential from navigator.credentials.create() ...\n * await passkeys.registerVerify.mutateAsync({ challengeId: challenge.challengeId, credential });\n *\n * // Login with passkey\n * const loginChallenge = await passkeys.loginStart.mutateAsync();\n * // ... get assertion from navigator.credentials.get() ...\n * await passkeys.loginVerify.mutateAsync({ challengeId: loginChallenge.challengeId, credential: assertion });\n * ```\n */\nexport function usePasskeys(options?: UsePasskeysOptions): UsePasskeysReturn {\n const client = useAccessClient()\n const queryClient = useQueryClient()\n\n const list = useQuery({\n queryKey: ['azirid-access', 'passkeys'],\n queryFn: () => client.get<PasskeyItem[]>(client.paths.passkeys),\n enabled: options?.listEnabled ?? false,\n })\n\n const registerStart = useMutation({\n mutationKey: ['azirid-access', 'passkeys', 'register-start'],\n mutationFn: (data: PasskeyRegisterStartData) =>\n client.post<PasskeyRegisterStartResponse>(client.paths.passkeyRegisterStart, data),\n onError: options?.onError,\n })\n\n const registerVerify = useMutation({\n mutationKey: ['azirid-access', 'passkeys', 'register-verify'],\n mutationFn: (data: PasskeyRegisterVerifyData) =>\n client.post<{ message: string }>(client.paths.passkeyRegisterVerify, data),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['azirid-access', 'passkeys'] })\n options?.onRegisterSuccess?.()\n },\n onError: options?.onError,\n })\n\n const register = useMutation({\n mutationKey: ['azirid-access', 'passkeys', 'register'],\n mutationFn: (data: RegisterPasskeyData) =>\n client.post<{ message: string }>(client.paths.passkeys, data),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['azirid-access', 'passkeys'] })\n options?.onRegisterSuccess?.()\n },\n onError: options?.onError,\n })\n\n const revoke = useMutation({\n mutationKey: ['azirid-access', 'passkeys', 'revoke'],\n mutationFn: (passkeyId: string) =>\n client.post<{ revoked: boolean; passkeyId: string }>(\n `${client.paths.passkeys}/${passkeyId}/revoke`,\n ),\n onSuccess: (data) => {\n queryClient.invalidateQueries({ queryKey: ['azirid-access', 'passkeys'] })\n options?.onRevokeSuccess?.(data)\n },\n onError: options?.onError,\n })\n\n const login = useMutation({\n mutationKey: ['azirid-access', 'passkeys', 'login'],\n mutationFn: async (data: PasskeyLoginData) => {\n const body: Record<string, unknown> = { ...data }\n\n if (client.appContext?.tenantId) {\n body.tenantId = client.appContext.tenantId\n }\n\n return client.post<AuthSuccessResponse>(client.paths.passkeyLogin, body)\n },\n onSuccess: options?.onLoginSuccess,\n onError: options?.onError,\n })\n\n const loginStart = useMutation({\n mutationKey: ['azirid-access', 'passkeys', 'login-start'],\n mutationFn: async (data?: PasskeyLoginStartData | void) => {\n const body: Record<string, unknown> = {}\n\n if (client.appContext?.tenantId) {\n body.tenantId = client.appContext.tenantId\n }\n\n if (data) {\n Object.assign(body, data)\n }\n\n return client.post<PasskeyLoginStartResponse>(client.paths.passkeyLoginStart, body)\n },\n onError: options?.onError,\n })\n\n const loginVerify = useMutation({\n mutationKey: ['azirid-access', 'passkeys', 'login-verify'],\n mutationFn: async (data: PasskeyLoginVerifyData) => {\n const body: Record<string, unknown> = { ...data }\n\n if (client.appContext?.tenantId) {\n body.tenantId = client.appContext.tenantId\n }\n\n return client.post<AuthSuccessResponse>(client.paths.passkeyLoginVerify, body)\n },\n onSuccess: options?.onLoginSuccess,\n onError: options?.onError,\n })\n\n return {\n list,\n registerStart,\n registerVerify,\n register,\n revoke,\n login,\n loginStart,\n loginVerify,\n }\n}\n","import { useCallback, useMemo } from 'react'\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { SubmitTransferProofData, TransferProof } from '../types'\n\nexport interface UseTransferProofOptions {\n onSuccess?: (data: TransferProof) => void\n onError?: (error: Error) => void\n}\n\nexport function useSubmitTransferProof(options?: UseTransferProofOptions) {\n const client = useAccessClient()\n const queryClient = useQueryClient()\n\n const mutation = useMutation({\n mutationFn: (data: SubmitTransferProofData) =>\n client.post<TransferProof>(client.paths.submitTransferProof, data),\n onSuccess: (data) => {\n void queryClient.invalidateQueries({ queryKey: ['transferProofs'] })\n options?.onSuccess?.(data)\n },\n onError: options?.onError,\n })\n\n const submit = useCallback(\n (data: SubmitTransferProofData) => {\n mutation.mutate(data)\n },\n [mutation],\n )\n\n return useMemo(() => ({ ...mutation, submit }), [mutation, submit])\n}\n\nexport function useTransferProofs() {\n const client = useAccessClient()\n\n return useQuery({\n queryKey: ['transferProofs'],\n queryFn: () => client.get<TransferProof[]>(client.paths.transferProofs),\n })\n}\n","import type { ReactElement } from 'react'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { useCheckout } from './use-checkout'\nimport { usePayphoneConfirm } from './use-payphone-confirm'\nimport type { PayphoneConfirmResult } from './use-payphone-confirm'\nimport { PayphoneWidgetRenderer } from '../components/payphone-checkout'\nimport { useAzirid } from '../providers/access-provider'\nimport type { PayphoneWidgetConfig } from '../types'\n\nexport type PayphoneCheckoutStatus =\n | 'idle'\n | 'loading'\n | 'ready'\n | 'confirming'\n | 'confirmed'\n | 'cancelled'\n | 'error'\n\nexport interface UsePayphoneCheckoutOptions {\n intentId: string\n onSuccess?: (data: PayphoneConfirmResult) => void\n onError?: (error: Error) => void\n}\n\nexport interface UsePayphoneCheckoutReturn {\n PayphoneWidget: () => ReactElement | null\n status: PayphoneCheckoutStatus\n intentId: string\n error: Error | null\n}\n\nconst CONTAINER_ID = 'pp-checkout-azirid'\n\nexport function usePayphoneCheckout({\n intentId,\n onSuccess,\n onError,\n}: UsePayphoneCheckoutOptions): UsePayphoneCheckoutReturn {\n const [status, setStatus] = useState<PayphoneCheckoutStatus>('idle')\n const [widgetConfig, setWidgetConfig] = useState<PayphoneWidgetConfig | null>(null)\n const [currentError, setCurrentError] = useState<Error | null>(null)\n const checkoutTriggered = useRef(false)\n const confirmTriggered = useRef(false)\n const { isBootstrapping } = useAzirid()\n\n // Detect callback params from Payphone redirect\n const params =\n typeof window !== 'undefined'\n ? new URLSearchParams(window.location.search)\n : new URLSearchParams()\n const callbackId = params.get('id')\n const callbackClientTxId = params.get('clientTransactionId')\n const isCallback = !!(callbackId && callbackClientTxId)\n\n // ── Checkout (Phase 1) ─────────────────────────────────────\n const { checkout } = useCheckout({\n redirectOnSuccess: false,\n onSuccess: (data) => {\n if (data.provider === 'PAYPHONE' && data.widgetConfig) {\n setWidgetConfig(data.widgetConfig)\n setStatus('ready')\n }\n },\n onError: (err) => {\n setCurrentError(err)\n setStatus('error')\n onError?.(err)\n },\n })\n\n useEffect(() => {\n if (isCallback || checkoutTriggered.current) return\n checkoutTriggered.current = true\n setStatus('loading')\n\n checkout({\n intentId,\n provider: 'PAYPHONE',\n successUrl: window.location.href,\n cancelUrl: window.location.href,\n })\n }, [checkout, intentId, isCallback])\n\n // ── Confirmation (Phase 2) ─────────────────────────────────\n const { mutate: confirm } = usePayphoneConfirm({\n onSuccess: (data) => {\n setStatus(data.status === 'confirmed' || data.status === 'already_confirmed'\n ? 'confirmed'\n : 'cancelled')\n onSuccess?.(data)\n },\n onError: (err) => {\n setCurrentError(err)\n setStatus('error')\n onError?.(err)\n },\n })\n\n useEffect(() => {\n if (!isCallback || confirmTriggered.current || isBootstrapping) return\n confirmTriggered.current = true\n setStatus('confirming')\n confirm({ id: Number(callbackId), clientTransactionId: callbackClientTxId! })\n }, [isCallback, isBootstrapping, callbackId, callbackClientTxId, confirm])\n\n // ── Widget component ───────────────────────────────────────\n const handleSdkError = useCallback(\n (err: Error) => {\n setCurrentError(err)\n setStatus('error')\n onError?.(err)\n },\n [onError],\n )\n\n const PayphoneWidget = useMemo(() => {\n return function PayphoneWidgetInner() {\n if (!widgetConfig || isCallback) return null\n\n return PayphoneWidgetRenderer({\n config: widgetConfig,\n containerId: CONTAINER_ID,\n onError: handleSdkError,\n })\n }\n }, [widgetConfig, isCallback, handleSdkError])\n\n return { PayphoneWidget, status, intentId, error: currentError }\n}\n","import type { ReactElement } from 'react'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { useCheckout } from './use-checkout'\nimport { useSubmitTransferProof } from './use-transfer-proof'\nimport { formatAmount } from '@azirid/shared'\nimport type { CheckoutResponse, TransferProof } from '../types'\n\n// ─── Types ───────────────────────────────────────────────────\n\nexport type TransferPaymentStatus =\n | 'idle'\n | 'loading'\n | 'ready'\n | 'submitting'\n | 'submitted'\n | 'error'\n\nexport interface SubmitProofData {\n fileUrl: string\n fileName?: string\n fileType?: string\n amount: number\n currency?: string\n notes?: string\n}\n\nexport interface UseTransferPaymentOptions {\n intentId: string\n onSuccess?: (data: CheckoutResponse) => void\n onProofSubmitted?: (proof: TransferProof) => void\n onError?: (error: Error) => void\n}\n\nexport interface UseTransferPaymentReturn {\n TransferDetails: () => ReactElement | null\n submitProof: (data: SubmitProofData) => void\n status: TransferPaymentStatus\n checkoutData: CheckoutResponse | null\n isSubmitting: boolean\n error: Error | null\n}\n\n// ─── Hook ───────────────────────────────────────────────────\n\nexport function useTransferPayment({\n intentId,\n onSuccess,\n onProofSubmitted,\n onError,\n}: UseTransferPaymentOptions): UseTransferPaymentReturn {\n const [status, setStatus] = useState<TransferPaymentStatus>('idle')\n const [checkoutData, setCheckoutData] = useState<CheckoutResponse | null>(null)\n const [currentError, setCurrentError] = useState<Error | null>(null)\n const checkoutTriggered = useRef(false)\n\n const responseUrl =\n typeof window !== 'undefined' ? window.location.href.split('?')[0] : ''\n\n // ── Checkout ───────────────────────────────────────────────\n const { checkout } = useCheckout({\n redirectOnSuccess: false,\n onSuccess: (data) => {\n setCheckoutData(data)\n setStatus('ready')\n onSuccess?.(data)\n },\n onError: (err) => {\n setCurrentError(err)\n setStatus('error')\n onError?.(err)\n },\n })\n\n useEffect(() => {\n if (checkoutTriggered.current) return\n checkoutTriggered.current = true\n setStatus('loading')\n\n checkout({\n intentId,\n provider: 'MANUAL_TRANSFER',\n successUrl: responseUrl,\n cancelUrl: responseUrl,\n })\n }, [checkout, intentId, responseUrl])\n\n // ── Submit proof ───────────────────────────────────────────\n const { submit, isPending: isSubmitting } = useSubmitTransferProof({\n onSuccess: (proof) => {\n setStatus('submitted')\n onProofSubmitted?.(proof)\n },\n onError: (err) => {\n setCurrentError(err)\n setStatus('error')\n onError?.(err)\n },\n })\n\n const submitProof = useCallback(\n (data: SubmitProofData) => {\n if (!checkoutData?.intent) return\n setStatus('submitting')\n setCurrentError(null)\n submit({\n planId: checkoutData.intent.id,\n fileUrl: data.fileUrl,\n fileName: data.fileName,\n fileType: data.fileType,\n amount: data.amount,\n currency: data.currency,\n notes: data.notes,\n })\n },\n [submit, checkoutData],\n )\n\n // ── TransferDetails component ──────────────────────────────\n const TransferDetails = useMemo(() => {\n return function TransferDetailsInner(): ReactElement | null {\n if (!checkoutData) return null\n\n const bankDetails = checkoutData.bankDetails as Record<string, string> | null\n const plan = checkoutData.plan\n const intent = checkoutData.intent as\n | { id: string; amount: number; currency: string; description?: string | null }\n | undefined\n\n const displayAmount = plan\n ? formatAmount(plan.amount, plan.currency)\n : intent\n ? formatAmount(intent.amount, intent.currency)\n : ''\n\n return (\n <div>\n {displayAmount && (\n <div\n style={{\n textAlign: 'center',\n padding: '16px',\n backgroundColor: '#f9fafb',\n borderRadius: '8px',\n marginBottom: '20px',\n }}\n >\n <div style={{ fontSize: '32px', fontWeight: 700, color: '#111827' }}>\n {displayAmount}\n </div>\n {plan?.name && (\n <div style={{ fontSize: '14px', color: '#6b7280' }}>{plan.name}</div>\n )}\n {intent?.description && (\n <div style={{ fontSize: '14px', color: '#6b7280' }}>{intent.description}</div>\n )}\n </div>\n )}\n\n {bankDetails && Object.keys(bankDetails).length > 0 && (\n <div style={{ marginBottom: '16px' }}>\n <div\n style={{\n fontSize: '14px',\n fontWeight: 600,\n color: '#111827',\n marginBottom: '8px',\n }}\n >\n Bank Details\n </div>\n {Object.entries(bankDetails)\n .filter(([, v]) => v)\n .map(([key, value]) => (\n <div\n key={key}\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n padding: '6px 0',\n borderBottom: '1px solid #f3f4f6',\n fontSize: '13px',\n }}\n >\n <span style={{ color: '#6b7280' }}>\n {key.replace(/([A-Z])/g, ' $1').replace(/^./, (s) => s.toUpperCase())}\n </span>\n <span style={{ color: '#111827', fontWeight: 500 }}>{value}</span>\n </div>\n ))}\n </div>\n )}\n\n {checkoutData.transferInstructions && (\n <div\n style={{\n padding: '12px',\n backgroundColor: '#eff6ff',\n borderRadius: '6px',\n fontSize: '13px',\n color: '#1e40af',\n lineHeight: 1.5,\n }}\n >\n {checkoutData.transferInstructions}\n </div>\n )}\n </div>\n )\n }\n }, [checkoutData])\n\n return {\n TransferDetails,\n submitProof,\n status,\n checkoutData,\n isSubmitting,\n error: currentError,\n }\n}\n","import { useQueryClient, useQuery } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { TenantWithRole, TenantMemberInfo } from '../types'\n\nexport function useTenants() {\n const client = useAccessClient()\n\n return useQuery({\n queryKey: ['azirid-access', 'tenants'],\n queryFn: () => client.get<TenantWithRole[]>(client.paths.userTenants),\n enabled: !!client.getAccessToken(),\n })\n}\n\nexport function useTenantMembers(tenantId: string) {\n const client = useAccessClient()\n\n return useQuery({\n queryKey: ['azirid-access', 'tenants', tenantId, 'members'],\n queryFn: () =>\n client.get<TenantMemberInfo[]>(`${client.paths.userTenants}/${tenantId}/members`),\n enabled: !!client.getAccessToken() && !!tenantId,\n })\n}\n\nexport function useSwitchTenant() {\n const client = useAccessClient()\n const queryClient = useQueryClient()\n\n const switchTenant = async (tenantId: string) => {\n await client.refreshSession({ tenantId })\n await queryClient.invalidateQueries({ queryKey: ['azirid-access'] })\n }\n\n return { switchTenant }\n}\n","import { useMutation, type UseMutationResult } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { AccessClient } from '../client'\n\n/**\n * Options common to all simple mutation hooks created via `createMutationHook`.\n */\nexport interface SimpleMutationOptions<TData> {\n onSuccess?: (data: TData) => void\n onError?: (error: Error) => void\n}\n\n/**\n * Configuration for `createMutationHook`.\n *\n * @template TData The response type from the API\n * @template TInput The input/variables type for the mutation\n */\nexport interface MutationHookConfig<TData, TInput> {\n /** Static mutation key for deduplication / devtools */\n mutationKey: string[]\n /**\n * Derive the mutation function from the AccessClient and input.\n * Most hooks simply call `client.post<TData>(client.paths.someEndpoint, data)`.\n */\n mutationFn: (client: AccessClient, input: TInput) => Promise<TData>\n}\n\n/**\n * Factory that creates a simple `useMutation`-based hook.\n *\n * Eliminates the boilerplate of:\n * 1. Calling `useAccessClient()`\n * 2. Creating a `useMutation` with `mutationKey`, `mutationFn`, `onSuccess`, `onError`\n *\n * The resulting hook has the same return type as `useMutation` (`UseMutationResult`),\n * preserving full compatibility with TanStack Query.\n *\n * @example\n * ```ts\n * export const useChangePassword = createMutationHook<\n * { updated: boolean },\n * ChangePasswordData\n * >({\n * mutationKey: ['azirid-access', 'change-password'],\n * mutationFn: (client, data) =>\n * client.post<{ updated: boolean }>(client.paths.changePassword, data),\n * })\n * ```\n */\nexport function createMutationHook<TData, TInput = void>(\n config: MutationHookConfig<TData, TInput>,\n): (options?: SimpleMutationOptions<TData>) => UseMutationResult<TData, Error, TInput> {\n return function useGeneratedMutation(\n options?: SimpleMutationOptions<TData>,\n ): UseMutationResult<TData, Error, TInput> {\n const client = useAccessClient()\n\n return useMutation({\n mutationKey: config.mutationKey,\n mutationFn: (input: TInput) => config.mutationFn(client, input),\n onSuccess: options?.onSuccess,\n onError: options?.onError,\n })\n }\n}\n","import { useCallback, useRef, useState, type FormEvent } from 'react'\nimport type { z } from 'zod'\nimport type { FieldError, UseFormReturn } from '../types'\n\n/** Convert Zod issues to our FieldError format */\nfunction zodToFieldErrors(zodError: z.ZodError): FieldError[] {\n return zodError.issues.map((issue) => ({\n field: issue.path.join('.'),\n message: issue.message,\n }))\n}\n\nexport function useFormState<T extends Record<string, unknown>>(\n initialValues: T,\n schema: z.ZodType<unknown, z.ZodTypeDef, unknown>,\n onSubmit: (values: T) => void | Promise<void>,\n): UseFormReturn<T> {\n const [values, setValues] = useState<T>(initialValues)\n const [errors, setErrors] = useState<FieldError[]>([])\n const [isSubmitting, setIsSubmitting] = useState(false)\n const mountedRef = useRef(true)\n\n const handleChange = useCallback(\n (field: keyof T) => (e: React.ChangeEvent<HTMLInputElement>) => {\n const next = { ...values, [field]: e.target.value } as T\n setValues(next)\n setErrors((prev) => prev.filter((err) => err.field !== field))\n },\n [values],\n )\n\n const setFieldValue = useCallback((field: keyof T, value: string) => {\n setValues((prev) => ({ ...prev, [field]: value }) as T)\n setErrors((prev) => prev.filter((err) => err.field !== field))\n }, [])\n\n const handleSubmit = useCallback(\n async (e: FormEvent) => {\n e.preventDefault()\n const result = schema.safeParse(values)\n if (!result.success) {\n setErrors(zodToFieldErrors(result.error))\n return\n }\n setIsSubmitting(true)\n try {\n await onSubmit(values)\n } finally {\n if (mountedRef.current) {\n setIsSubmitting(false)\n }\n }\n },\n [values, schema, onSubmit],\n )\n\n const reset = useCallback(() => {\n setValues(initialValues)\n setErrors([])\n setIsSubmitting(false)\n }, [initialValues])\n\n return { values, errors, isSubmitting, handleChange, handleSubmit, setFieldValue, reset }\n}\n","import { useCallback, useState } from 'react'\n\nexport function usePasswordToggle() {\n const [visible, setVisible] = useState(false)\n const toggle = useCallback(() => setVisible((v) => !v), [])\n return { visible, toggle, type: visible ? ('text' as const) : ('password' as const) }\n}\n","// ─── Components ──────────────────────────────────────────────\nexport { LoginForm } from './components/login-form'\nexport { SignupForm } from './components/signup-form'\nexport { ForgotPasswordForm } from './components/forgot-password-form'\nexport { ResetPasswordForm } from './components/reset-password-form'\nexport { AuthForm } from './components/auth-form'\nexport { ReferralCard } from './components/referral-card'\nexport { ReferralStats } from './components/referral-stats'\nexport { PricingTable } from './components/pricing-table'\nexport { CheckoutButton } from './components/checkout-button'\nexport { PayButton } from './components/pay-button'\nexport { PayphoneCallback } from './components/payphone-callback'\nexport { PayphoneWidgetRenderer } from './components/payphone-checkout'\nexport { SubscriptionBadge } from './components/subscription-badge'\nexport { InvoiceList } from './components/invoice-list'\n\n// ─── Provider & Context Hook ────────────────────────────────\nexport {\n AziridProvider,\n useAzirid,\n useAccessClient,\n useBranding,\n useMessages,\n} from './providers/access-provider'\nexport { resolveMessages, es, en } from './i18n'\n\n// ─── Standalone Auth Hooks ──────────────────────────────────\n// These hooks can be used to build custom UI without the built-in components.\n// They require <AziridProvider> for the client context.\nexport { useLogin } from './hooks/use-login'\nexport { useSignup } from './hooks/use-signup'\nexport { useLogout } from './hooks/use-logout'\nexport { useSession } from './hooks/use-session'\nexport { useMagicLink } from './hooks/use-magic-link'\nexport { useSocialLogin } from './hooks/use-social-login'\nexport { useChangePassword } from './hooks/use-change-password'\nexport { useRefresh } from './hooks/use-refresh'\nexport { useBootstrap } from './hooks/use-bootstrap'\nexport { usePasskeys } from './hooks/use-passkeys'\nexport { useReferral } from './hooks/use-referral'\nexport { useReferralStats } from './hooks/use-referral-stats'\nexport { usePlans } from './hooks/use-plans'\nexport { useSubscription } from './hooks/use-subscription'\nexport { useCheckout } from './hooks/use-checkout'\nexport { useInvoices } from './hooks/use-invoices'\nexport { useSubmitTransferProof, useTransferProofs } from './hooks/use-transfer-proof'\nexport { usePaymentProviders } from './hooks/use-payment-providers'\nexport { usePayphoneConfirm } from './hooks/use-payphone-confirm'\nexport { usePayphoneCheckout } from './hooks/use-payphone-checkout'\nexport { usePayButton } from './hooks/use-pay-button'\nexport { useTransferPayment } from './hooks/use-transfer-payment'\nexport { useTenants, useTenantMembers, useSwitchTenant } from './hooks/use-tenants'\nexport { usePasswordReset } from './hooks/use-password-reset'\n\n// ─── Mutation Hook Factory ───────────────────────────────────\nexport { createMutationHook } from './hooks/create-mutation-hook'\n\n// ─── Form Utility Hooks ─────────────────────────────────────\nexport { useFormState } from './hooks/use-form-state'\nexport { usePasswordToggle } from './hooks/use-password-toggle'\n\n// ─── Zod Schemas ─────────────────────────────────────────────\nexport {\n loginSchema,\n signupSchema,\n changePasswordSchema,\n magicLinkRequestSchema,\n magicLinkVerifySchema,\n socialLoginSchema,\n passkeyRegisterStartSchema,\n createLoginSchema,\n createSignupSchema,\n forgotPasswordSchema,\n createForgotPasswordSchema,\n resetPasswordConfirmSchema,\n createResetPasswordConfirmSchema,\n} from './schemas'\n\n// ─── Client ──────────────────────────────────────────────────\nexport { createAccessClient, isAuthError, PATHS, BASE_PATHS, buildPaths } from './client'\n\n// ─── Utilities ───────────────────────────────────────────────\nexport { cn } from './utils/cn'\nexport { removeStyles } from './utils/inject-styles'\n\n// ─── Version ─────────────────────────────────────────────────\ndeclare const __SDK_VERSION__: string\nexport const SDK_VERSION: string = __SDK_VERSION__\n\n// ─── Types ───────────────────────────────────────────────────\nexport type {\n AuthUser,\n AuthSuccessResponse,\n AuthState,\n SignupData,\n SocialLoginData,\n ChangePasswordData,\n BootstrapResponse,\n PasskeyItem,\n PasskeyRegisterStartData,\n PasskeyRegisterStartResponse,\n PasskeyRegisterVerifyData,\n PasskeyLoginStartData,\n PasskeyLoginStartResponse,\n PasskeyLoginVerifyData,\n PasskeyLoginData,\n RegisterPasskeyData,\n AziridProviderProps,\n AziridContextValue,\n LoginFormProps,\n SignupFormProps,\n ForgotPasswordFormProps,\n ResetPasswordFormProps,\n AuthView,\n AuthFormProps,\n FieldError,\n UseFormReturn,\n AppBranding,\n SupportedLocale,\n AccessMessages,\n ReferralInfo,\n ReferralStatsData,\n ReferralItem,\n BillingPlan,\n UserSubscription,\n CheckoutResponse,\n BillingInvoice,\n SubmitTransferProofData,\n TransferProof,\n PaymentProviderType,\n AvailableProvider,\n PaymentIntent,\n PayphoneWidgetConfig,\n TenantWithRole,\n TenantMemberInfo,\n CreateTenantData,\n} from './types'\n\nexport type {\n LoginInput,\n SignupInput,\n ChangePasswordInput,\n MagicLinkRequestInput,\n MagicLinkVerifyInput,\n SocialLoginInput,\n PasskeyRegisterStartInput,\n ForgotPasswordInput,\n ResetPasswordConfirmInput,\n} from './schemas'\n\nexport type { AccessClient, AccessClientConfig, ApiError, AuthPaths } from './client'\n\n// ─── Standalone Hook Types ──────────────────────────────────\nexport type { LoginData, UseLoginOptions, UseLoginReturn } from './hooks/use-login'\nexport type { UseSignupOptions, UseSignupReturn } from './hooks/use-signup'\nexport type { UseLogoutOptions, UseLogoutReturn } from './hooks/use-logout'\nexport type { UseSessionOptions, UseSessionReturn } from './hooks/use-session'\nexport type {\n MagicLinkRequestData,\n MagicLinkVerifyData,\n UseMagicLinkOptions,\n UseMagicLinkReturn,\n} from './hooks/use-magic-link'\nexport type { UseSocialLoginOptions, UseSocialLoginReturn } from './hooks/use-social-login'\nexport type { UseChangePasswordOptions, UseChangePasswordReturn } from './hooks/use-change-password'\nexport type { UseRefreshOptions, UseRefreshReturn } from './hooks/use-refresh'\nexport type { UseBootstrapOptions, UseBootstrapReturn } from './hooks/use-bootstrap'\nexport type { UsePasskeysOptions, UsePasskeysReturn } from './hooks/use-passkeys'\nexport type { CheckoutParams, UseCheckoutOptions } from './hooks/use-checkout'\nexport type {\n PayphoneConfirmParams,\n PayphoneConfirmResult,\n UsePayphoneConfirmOptions,\n} from './hooks/use-payphone-confirm'\nexport type {\n PasswordResetRequestData,\n PasswordResetConfirmData,\n UsePasswordResetOptions,\n UsePasswordResetReturn,\n} from './hooks/use-password-reset'\nexport type { SimpleMutationOptions, MutationHookConfig } from './hooks/create-mutation-hook'\nexport type { PricingCardProps } from './components/pricing-card'\nexport type { PricingFeatureListProps } from './components/pricing-feature-list'\nexport type { ProviderModalProps, TransferModalProps } from './components/pay-button-modal'\nexport type { ReferralCardProps } from './components/referral-card'\nexport type { ReferralStatsProps } from './components/referral-stats'\nexport type { PricingTableProps } from './components/pricing-table'\nexport type { CheckoutButtonProps } from './components/checkout-button'\nexport type { PayButtonProps } from './components/pay-button'\nexport type { SubscriptionBadgeProps } from './components/subscription-badge'\nexport type { InvoiceListProps } from './components/invoice-list'\nexport type { PayphoneModalProps } from './components/payphone-modal'\nexport type { PayphoneCallbackProps } from './components/payphone-callback'\nexport type {\n UsePayphoneCheckoutOptions,\n UsePayphoneCheckoutReturn,\n PayphoneCheckoutStatus,\n} from './hooks/use-payphone-checkout'\nexport type {\n UsePayButtonOptions,\n UsePayButtonReturn,\n PayButtonStatus,\n} from './hooks/use-pay-button'\nexport type {\n UseTransferPaymentOptions,\n UseTransferPaymentReturn,\n TransferPaymentStatus,\n SubmitProofData,\n} from './hooks/use-transfer-payment'\n\n// ─── Server Types (re-exported for convenience) ─────────────\nexport type { SessionSyncOptions } from './server'\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/schemas/index.ts","../src/utils/cn.ts","../src/client/index.ts","../src/i18n/es.ts","../src/i18n/en.ts","../src/i18n/index.ts","../src/styles/generated.ts","../src/utils/inject-styles.ts","../src/providers/mutations.ts","../src/providers/access-provider.tsx","../src/components/ui/button.tsx","../src/components/ui/card.tsx","../src/components/ui/field.tsx","../src/components/ui/input.tsx","../src/components/login-form.tsx","../src/components/signup-form.tsx","../src/hooks/use-password-reset.ts","../src/components/forgot-password-form.tsx","../src/components/reset-password-form.tsx","../src/components/auth-form.tsx","../src/hooks/use-referral.ts","../src/components/referral-card.tsx","../src/hooks/use-referral-stats.ts","../src/components/referral-stats.tsx","../../shared/src/utils/format-amount.ts","../src/hooks/use-plans.ts","../src/hooks/use-subscription.ts","../src/hooks/use-checkout.ts","../src/hooks/use-payment-providers.ts","../src/utils/payphone-loader.ts","../src/components/payphone-checkout.tsx","../src/components/payphone-modal.tsx","../src/components/pricing-feature-list.tsx","../src/components/pricing-card.tsx","../src/components/pricing-table.tsx","../src/components/checkout-button.tsx","../src/hooks/use-payphone-confirm.ts","../src/hooks/use-pay-button.tsx","../src/components/pay-button-modal.tsx","../src/components/pay-button.tsx","../src/components/payphone-callback.tsx","../src/components/subscription-badge.tsx","../src/hooks/use-invoices.ts","../src/components/invoice-list.tsx","../src/hooks/use-login.ts","../src/hooks/use-signup.ts","../src/hooks/use-logout.ts","../src/hooks/use-session.ts","../src/hooks/use-magic-link.ts","../src/hooks/use-social-login.ts","../src/hooks/use-change-password.ts","../src/hooks/use-refresh.ts","../src/hooks/use-bootstrap.ts","../src/hooks/use-passkeys.ts","../src/hooks/use-transfer-proof.ts","../src/hooks/use-payphone-checkout.ts","../src/hooks/use-transfer-payment.tsx","../src/hooks/use-tenants.ts","../src/hooks/create-mutation-hook.ts","../src/hooks/use-form-state.ts","../src/hooks/use-password-toggle.ts","../src/index.ts"],"names":["z","twMerge","clsx","json","useQueryClient","useMutation","useCallback","createContext","useContext","QueryClient","useState","useMemo","useEffect","jsx","QueryClientProvider","cva","Slot","forwardRef","useForm","zodResolver","jsxs","Fragment","useQuery","styles","useRef","intervalLabels","PROVIDER_LABELS","PROVIDER_ICONS","TransferModal","statusColors","formatDate"],"mappings":";;;;;;;;;;;;;AAKO,SAAS,kBAAkB,CAAA,EAAiC;AACjE,EAAA,OAAOA,MAAE,MAAA,CAAO;AAAA,IACd,OAAOA,KAAA,CACJ,MAAA,CAAO,EAAE,cAAA,EAAgB,EAAE,aAAA,EAAe,CAAA,CAC1C,GAAA,CAAI,GAAG,CAAA,CAAE,aAAa,CAAA,CACtB,KAAA,CAAM,EAAE,YAAY,CAAA;AAAA,IACvB,QAAA,EAAUA,KAAA,CAAE,MAAA,CAAO,EAAE,cAAA,EAAgB,CAAA,CAAE,gBAAA,EAAkB,CAAA,CAAE,GAAA,CAAI,CAAA,EAAG,CAAA,CAAE,gBAAgB;AAAA,GACrF,CAAA;AACH;AAEO,SAAS,mBAAmB,CAAA,EAAiC;AAClE,EAAA,OAAOA,MAAE,MAAA,CAAO;AAAA,IACd,OAAOA,KAAA,CACJ,MAAA,CAAO,EAAE,cAAA,EAAgB,EAAE,aAAA,EAAe,CAAA,CAC1C,GAAA,CAAI,GAAG,CAAA,CAAE,aAAa,CAAA,CACtB,KAAA,CAAM,EAAE,YAAY,CAAA;AAAA,IACvB,QAAA,EAAUA,KAAA,CAAE,MAAA,CAAO,EAAE,cAAA,EAAgB,CAAA,CAAE,gBAAA,EAAkB,CAAA,CAAE,GAAA,CAAI,EAAA,EAAI,CAAA,CAAE,iBAAiB,CAAA;AAAA,IACtF,kBAAA,EAAoBA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IACxC,sBAAA,EAAwBA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAAS,GAC7C,CAAA;AACH;AAGO,IAAM,WAAA,GAAcA,MAAE,MAAA,CAAO;AAAA,EAClC,KAAA,EAAOA,KAAA,CACJ,MAAA,CAAO,EAAE,cAAA,EAAgB,wBAAA,EAA0B,CAAA,CACnD,GAAA,CAAI,CAAA,EAAG,wBAAwB,CAAA,CAC/B,MAAM,mCAA6B,CAAA;AAAA,EACtC,QAAA,EAAUA,KAAA,CACP,MAAA,CAAO,EAAE,cAAA,EAAgB,iCAA8B,CAAA,CACvD,GAAA,CAAI,CAAA,EAAG,+BAA4B;AACxC,CAAC;AAKM,IAAM,YAAA,GAAeA,MAAE,MAAA,CAAO;AAAA,EACnC,KAAA,EAAOA,KAAA,CACJ,MAAA,CAAO,EAAE,cAAA,EAAgB,wBAAA,EAA0B,CAAA,CACnD,GAAA,CAAI,CAAA,EAAG,wBAAwB,CAAA,CAC/B,MAAM,mCAA6B,CAAA;AAAA,EACtC,QAAA,EAAUA,KAAA,CACP,MAAA,CAAO,EAAE,cAAA,EAAgB,iCAA8B,CAAA,CACvD,GAAA,CAAI,EAAA,EAAI,oDAAiD,CAAA;AAAA,EAC5D,kBAAA,EAAoBA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACxC,sBAAA,EAAwBA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACrC,CAAC;AAKM,IAAM,oBAAA,GAAuBA,MAAE,MAAA,CAAO;AAAA,EAC3C,eAAA,EAAiBA,KAAA,CACd,MAAA,CAAO,EAAE,cAAA,EAAgB,wCAAqC,CAAA,CAC9D,GAAA,CAAI,CAAA,EAAG,sCAAmC,CAAA;AAAA,EAC7C,WAAA,EAAaA,KAAA,CACV,MAAA,CAAO,EAAE,cAAA,EAAgB,uCAAoC,CAAA,CAC7D,GAAA,CAAI,EAAA,EAAI,oDAAiD;AAC9D,CAAC;AAKM,IAAM,sBAAA,GAAyBA,MAAE,MAAA,CAAO;AAAA,EAC7C,KAAA,EAAOA,KAAA,CACJ,MAAA,CAAO,EAAE,cAAA,EAAgB,wBAAA,EAA0B,CAAA,CACnD,GAAA,CAAI,CAAA,EAAG,wBAAwB,CAAA,CAC/B,MAAM,mCAA6B;AACxC,CAAC;AAIM,IAAM,qBAAA,GAAwBA,MAAE,MAAA,CAAO;AAAA,EAC5C,KAAA,EAAOA,KAAA,CAAE,MAAA,CAAO,EAAE,cAAA,EAAgB,yBAAyB,CAAA,CAAE,GAAA,CAAI,CAAA,EAAG,uBAAuB;AAC7F,CAAC;AAKM,IAAM,iBAAA,GAAoBA,MAAE,MAAA,CAAO;AAAA,EACxC,UAAUA,KAAA,CAAE,IAAA,CAAK,CAAC,QAAA,EAAU,QAAQ,CAAA,EAAG;AAAA,IACrC,cAAA,EAAgB;AAAA,GACjB,CAAA;AAAA,EACD,iBAAA,EAAmBA,KAAA,CAChB,MAAA,CAAO,EAAE,cAAA,EAAgB,mCAAmC,CAAA,CAC5D,GAAA,CAAI,CAAA,EAAG,iCAAiC,CAAA;AAAA,EAC3C,KAAA,EAAOA,KAAA,CACJ,MAAA,CAAO,EAAE,cAAA,EAAgB,wBAAA,EAA0B,CAAA,CACnD,GAAA,CAAI,CAAA,EAAG,wBAAwB,CAAA,CAC/B,MAAM,mCAA6B,CAAA;AAAA,EACtC,aAAA,EAAeA,KAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EACpC,SAAA,EAAWA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC/B,QAAA,EAAUA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,qBAAA,EAAuBA,KAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC5C,cAAA,EAAgBA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACpC,kBAAA,EAAoBA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACxC,sBAAA,EAAwBA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACrC,CAAC;AAKM,SAAS,2BAA2B,CAAA,EAAiC;AAC1E,EAAA,OAAOA,MAAE,MAAA,CAAO;AAAA,IACd,OAAOA,KAAA,CACJ,MAAA,CAAO,EAAE,cAAA,EAAgB,EAAE,aAAA,EAAe,CAAA,CAC1C,GAAA,CAAI,GAAG,CAAA,CAAE,aAAa,CAAA,CACtB,KAAA,CAAM,EAAE,YAAY;AAAA,GACxB,CAAA;AACH;AAEO,IAAM,oBAAA,GAAuBA,MAAE,MAAA,CAAO;AAAA,EAC3C,KAAA,EAAOA,KAAA,CACJ,MAAA,CAAO,EAAE,cAAA,EAAgB,wBAAA,EAA0B,CAAA,CACnD,GAAA,CAAI,CAAA,EAAG,wBAAwB,CAAA,CAC/B,MAAM,mCAA6B;AACxC,CAAC;AAKM,SAAS,iCAAiC,CAAA,EAAiC;AAChF,EAAA,OAAOA,MACJ,MAAA,CAAO;AAAA,IACN,KAAA,EAAOA,KAAA,CAAE,MAAA,CAAO,EAAE,cAAA,EAAgB,CAAA,CAAE,aAAA,EAAe,CAAA,CAAE,GAAA,CAAI,CAAA,EAAG,CAAA,CAAE,aAAa,CAAA;AAAA,IAC3E,WAAA,EAAaA,KAAA,CAAE,MAAA,CAAO,EAAE,cAAA,EAAgB,CAAA,CAAE,mBAAA,EAAqB,CAAA,CAAE,GAAA,CAAI,EAAA,EAAI,CAAA,CAAE,iBAAiB,CAAA;AAAA,IAC5F,eAAA,EAAiBA,KAAA,CACd,MAAA,CAAO,EAAE,cAAA,EAAgB,CAAA,CAAE,uBAAA,EAAyB,CAAA,CACpD,GAAA,CAAI,CAAA,EAAG,CAAA,CAAE,uBAAuB;AAAA,GACpC,EACA,MAAA,CAAO,CAAC,SAAS,IAAA,CAAK,WAAA,KAAgB,KAAK,eAAA,EAAiB;AAAA,IAC3D,SAAS,CAAA,CAAE,iBAAA;AAAA,IACX,IAAA,EAAM,CAAC,iBAAiB;AAAA,GACzB,CAAA;AACL;AAEO,IAAM,0BAAA,GAA6BA,MACvC,MAAA,CAAO;AAAA,EACN,KAAA,EAAOA,KAAA,CAAE,MAAA,CAAO,EAAE,cAAA,EAAgB,yBAAyB,CAAA,CAAE,GAAA,CAAI,CAAA,EAAG,uBAAuB,CAAA;AAAA,EAC3F,WAAA,EAAaA,KAAA,CACV,MAAA,CAAO,EAAE,cAAA,EAAgB,uCAAoC,CAAA,CAC7D,GAAA,CAAI,EAAA,EAAI,oDAAiD,CAAA;AAAA,EAC5D,eAAA,EAAiBA,KAAA,CACd,MAAA,CAAO,EAAE,cAAA,EAAgB,6BAA0B,CAAA,CACnD,GAAA,CAAI,CAAA,EAAG,2BAAwB;AACpC,CAAC,EACA,MAAA,CAAO,CAAC,SAAS,IAAA,CAAK,WAAA,KAAgB,KAAK,eAAA,EAAiB;AAAA,EAC3D,OAAA,EAAS,iCAAA;AAAA,EACT,IAAA,EAAM,CAAC,iBAAiB;AAC1B,CAAC;AAKI,IAAM,0BAAA,GAA6BA,MAAE,MAAA,CAAO;AAAA,EACjD,UAAA,EAAYA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACzB,CAAC;AC9JM,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAOC,qBAAA,CAAQC,SAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;;;ACEO,SAAS,YAAY,GAAA,EAAuB;AACjD,EAAA,OACE,GAAA,YAAe,KAAA,IACf,OAAQ,GAAA,CAAiB,MAAA,KAAW,aAClC,GAAA,CAAiB,MAAA,KAAW,GAAA,IAAQ,GAAA,CAAiB,MAAA,KAAW,GAAA,CAAA;AAEtE;AAGA,IAAM,QAAA,GAAW;AAAA,EACf,KAAA,EAAO,OAAA;AAAA,EACP,MAAA,EAAQ,QAAA;AAAA,EACR,MAAA,EAAQ,QAAA;AAAA,EACR,EAAA,EAAI,IAAA;AAAA,EACJ,OAAA,EAAS,SAAA;AAAA,EACT,SAAA,EAAW,mBAAA;AAAA,EACX,gBAAA,EAAkB,oBAAA;AAAA,EAClB,eAAA,EAAiB,mBAAA;AAAA,EACjB,WAAA,EAAa,cAAA;AAAA,EACb,cAAA,EAAgB,iBAAA;AAAA,EAChB,YAAA,EAAc,gBAAA;AAAA,EACd,iBAAA,EAAmB,sBAAA;AAAA,EACnB,kBAAA,EAAoB,uBAAA;AAAA,EACpB,oBAAA,EAAsB,yBAAA;AAAA,EACtB,qBAAA,EAAuB,0BAAA;AAAA,EACvB,QAAA,EAAU,UAAA;AAAA,EACV,SAAA,EAAW,mBAAA;AAAA,EACX,KAAA,EAAO,eAAA;AAAA,EACP,YAAA,EAAc,sBAAA;AAAA,EACd,QAAA,EAAU,kBAAA;AAAA,EACV,aAAA,EAAe,gBAAA;AAAA,EACf,QAAA,EAAU,kBAAA;AAAA,EACV,mBAAA,EAAqB,wBAAA;AAAA,EACrB,cAAA,EAAgB,yBAAA;AAAA,EAChB,eAAA,EAAiB,0BAAA;AAAA,EACjB,oBAAA,EAAsB,wBAAA;AAAA,EACtB,oBAAA,EAAsB,wBAAA;AAAA,EACtB,UAAA,EAAY,cAAA;AAAA,EACZ,aAAA,EAAe,iBAAA;AAAA,EACf,WAAA,EAAa;AACf,CAAA;AAGO,IAAM,UAAA,GAAa;AAAA;AAAA,EAExB,KAAA,EAAO,WAAA;AAAA;AAAA,EAEP,MAAA,EAAQ;AACV;AAGO,SAAS,WAAW,QAAA,EAA6B;AACtD,EAAA,MAAM,EAAA,GAAK,QAAA,CAAS,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AACrC,EAAA,OAAO,MAAA,CAAO,WAAA;AAAA,IACZ,OAAO,OAAA,CAAQ,QAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,MAAM,CAAA,KAAM,CAAC,GAAA,EAAK,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,MAAM,EAAE,CAAC;AAAA,GAC1E;AACF;AAGA,IAAM,KAAA,GAAQ,UAAA,CAAW,UAAA,CAAW,MAAM;AAoDnC,SAAS,kBAAA,CACd,QACA,UAAA,EACc;AACd,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,OAAO,EAAE,CAAA;AAChD,EAAA,MAAM,QAAQ,MAAA,CAAO,QAAA,GAAW,UAAA,CAAW,MAAA,CAAO,QAAQ,CAAA,GAAI,KAAA;AAG9D,EAAA,MAAM,YAAA,GAAe,QAAA;AACrB,EAAA,MAAM,cAAA,GAAiB,QAAA;AAEvB,EAAA,SAAS,MAAM,GAAA,EAA4B;AACzC,IAAA,IAAI;AACF,MAAA,OAAO,OAAO,cAAA,KAAmB,WAAA,GAAc,cAAA,CAAe,OAAA,CAAQ,GAAG,CAAA,GAAI,IAAA;AAAA,IAC/E,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,SAAS,KAAA,CAAM,KAAa,KAAA,EAAsB;AAChD,IAAA,IAAI;AACF,MAAA,IAAI,OAAO,mBAAmB,WAAA,EAAa;AAC3C,MAAA,IAAI,KAAA,EAAO,cAAA,CAAe,OAAA,CAAQ,GAAA,EAAK,KAAK,CAAA;AAAA,WACvC,cAAA,CAAe,WAAW,GAAG,CAAA;AAAA,IACpC,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAEA,EAAA,IAAI,WAAA,GAA6B,IAAA;AACjC,EAAA,IAAI,YAAA,GAA8B,MAAM,YAAY,CAAA;AACpD,EAAA,IAAI,SAAA,GAA2B,MAAM,cAAc,CAAA;AAEnD,EAAA,IAAI,cAAA,GAAuC,IAAA;AAC3C,EAAA,IAAI,gBAAA,GAA4C,IAAA;AAUhD,EAAA,IAAI,OAAA,GAAmC,IAAA;AACvC,EAAA,IAAI;AACF,IAAA,IAAI,OAAO,qBAAqB,WAAA,EAAa;AAC3C,MAAA,OAAA,GAAU,IAAI,iBAAiB,aAAa,CAAA;AAC5C,MAAA,OAAA,CAAQ,SAAA,GAAY,CAAC,KAAA,KAAsC;AACzD,QAAA,IAAI,KAAA,CAAM,IAAA,EAAM,IAAA,KAAS,iBAAA,EAAmB;AAC1C,UAAA,WAAA,GAAc,MAAM,IAAA,CAAK,WAAA;AACzB,UAAA,IAAI,MAAM,IAAA,CAAK,YAAA,EAAc,eAAA,CAAgB,KAAA,CAAM,KAAK,YAAY,CAAA;AACpE,UAAA,IAAI,MAAM,IAAA,CAAK,SAAA,EAAW,YAAA,CAAa,KAAA,CAAM,KAAK,SAAS,CAAA;AAAA,QAC7D;AAAA,MACF,CAAA;AAAA,IACF;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AAEA,EAAA,SAAS,eAAA,GAAkB;AACzB,IAAA,IAAI;AACF,MAAA,OAAA,EAAS,WAAA,CAAY;AAAA,QACnB,IAAA,EAAM,iBAAA;AAAA,QACN,WAAA;AAAA,QACA,YAAA;AAAA,QACA;AAAA,OACsB,CAAA;AAAA,IAC1B,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAEA,EAAA,SAAS,eAAe,KAAA,EAAsB;AAC5C,IAAA,WAAA,GAAc,KAAA;AAAA,EAChB;AAEA,EAAA,SAAS,cAAA,GAAiB;AACxB,IAAA,OAAO,WAAA;AAAA,EACT;AAEA,EAAA,SAAS,gBAAgB,KAAA,EAAsB;AAC7C,IAAA,YAAA,GAAe,KAAA;AACf,IAAA,KAAA,CAAM,cAAc,KAAK,CAAA;AAAA,EAC3B;AAEA,EAAA,SAAS,eAAA,GAAkB;AACzB,IAAA,OAAO,YAAA;AAAA,EACT;AAEA,EAAA,SAAS,aAAa,KAAA,EAAsB;AAC1C,IAAA,SAAA,GAAY,KAAA;AACZ,IAAA,KAAA,CAAM,gBAAgB,KAAK,CAAA;AAAA,EAC7B;AAEA,EAAA,MAAM,cAAA,GAAiB,MAAA;AAGvB,EAAA,SAAS,YAAA,GAA8B;AACrC,IAAA,IAAI,WAAW,OAAO,SAAA;AACtB,IAAA,IAAI,OAAO,QAAA,KAAa,WAAA,EAAa,OAAO,IAAA;AAC5C,IAAA,MAAM,KAAA,GAAQ,SAAS,MAAA,CAAO,KAAA,CAAM,IAAI,MAAA,CAAO,CAAA,WAAA,EAAc,cAAc,CAAA,QAAA,CAAU,CAAC,CAAA;AACtF,IAAA,OAAO,KAAA,GAAQ,kBAAA,CAAmB,KAAA,CAAM,CAAC,CAAC,CAAA,GAAI,IAAA;AAAA,EAChD;AAGA,EAAA,MAAM,eAAkC,CAAC,KAAA,CAAM,SAAS,KAAA,CAAM,SAAA,EAAW,MAAM,MAAM,CAAA;AAErF,EAAA,eAAe,sBAAsB,IAAA,EAA6C;AAChF,IAAA,MAAM,UAAA,GAAqC;AAAA,MACzC,cAAA,EAAgB,kBAAA;AAAA,MAChB,GAAG,MAAA,CAAO;AAAA,KACZ;AACA,IAAA,IAAI,YAAY,cAAA,EAAgB;AAC9B,MAAA,UAAA,CAAW,mBAAmB,IAAI,UAAA,CAAW,cAAA;AAAA,IAC/C;AACA,IAAA,MAAM,OAAO,YAAA,EAAa;AAC1B,IAAA,IAAI,IAAA,EAAM,UAAA,CAAW,cAAc,CAAA,GAAI,IAAA;AAGvC,IAAA,MAAM,cAAsC,EAAC;AAC7C,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,WAAA,CAAY,IAAI,CAAA,GAAI,YAAA;AAAA,IACtB;AACA,IAAA,IAAI,MAAM,QAAA,EAAU;AAClB,MAAA,WAAA,CAAY,UAAU,IAAI,IAAA,CAAK,QAAA;AAAA,IACjC;AAEA,IAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,EAAG,KAAA,CAAM,OAAO,CAAA,CAAA,EAAI;AAAA,MACpD,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,UAAA;AAAA,MACT,WAAA,EAAa,SAAA;AAAA,MACb,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,WAAW;AAAA,KACjC,CAAA;AAED,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,MAAA,WAAA,GAAc,IAAA;AACd,MAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAA,MAAM,IAAI,MAAM,iBAAiB,CAAA;AAAA,IACnC;AAEA,IAAA,MAAM,GAAA,GAAM,MAAM,GAAA,CAAI,IAAA,EAAK;AAE3B,IAAA,MAAM,IAAA,GAAO,GAAA,IAAO,OAAO,GAAA,KAAQ,QAAA,IAAY,UAAU,GAAA,IAAO,MAAA,IAAU,GAAA,GAAM,GAAA,CAAI,IAAA,GAAO,GAAA;AAC3F,IAAA,WAAA,GAAc,IAAA,CAAK,EAAA,IAAM,IAAA,CAAK,WAAA,IAAe,IAAA;AAE7C,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,EAAA,IAAM,IAAA,CAAK,YAAA;AAC3B,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,EAAA,IAAM,IAAA,CAAK,SAAA;AAC3B,IAAA,IAAI,EAAA,kBAAoB,EAAE,CAAA;AAC1B,IAAA,IAAI,EAAA,eAAiB,EAAE,CAAA;AAGvB,IAAA,eAAA,EAAgB;AAAA,EAClB;AAOA,EAAA,SAAS,cAAc,IAAA,EAA6C;AAElE,IAAA,IAAI,MAAM,QAAA,EAAU;AAElB,MAAA,OAAO,qBAAA,CAAsB,IAAI,CAAA,CAAE,OAAA,CAAQ,MAAM;AAChC,MACjB,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,gBAAgB,OAAO,cAAA;AAG3B,IAAA,cAAA,GAAiB,qBAAA,EAAsB,CAAE,OAAA,CAAQ,MAAM;AAErD,MAAA,cAAA,GAAiB,IAAA;AAAA,IACnB,CAAC,CAAA;AAED,IAAA,OAAO,cAAA;AAAA,EACT;AAOA,EAAA,SAAS,qBAAA,GAAuC;AAC9C,IAAA,IAAI,kBAAkB,OAAO,gBAAA;AAE7B,IAAA,gBAAA,GAAmB,QAAW,MAAA,EAAQ,KAAA,CAAM,SAAS,CAAA,CAAE,QAAQ,MAAM;AACnE,MAAA,gBAAA,GAAmB,IAAA;AAAA,IACrB,CAAC,CAAA;AAED,IAAA,OAAO,gBAAA;AAAA,EACT;AAEA,EAAA,eAAe,OAAA,CAAW,MAAA,EAAgB,IAAA,EAAc,IAAA,EAA4B;AAClF,IAAA,MAAM,OAAA,GAAkC;AAAA,MACtC,cAAA,EAAgB,kBAAA;AAAA,MAChB,GAAG,MAAA,CAAO;AAAA,KACZ;AAGA,IAAA,IAAI,YAAY,cAAA,EAAgB;AAC9B,MAAA,OAAA,CAAQ,mBAAmB,IAAI,UAAA,CAAW,cAAA;AAAA,IAC5C;AAGA,IAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,QAAA,CAAS,IAAI,CAAA;AAChD,IAAA,IAAI,WAAA,IAAe,CAAC,aAAA,EAAe;AACjC,MAAA,OAAA,CAAQ,eAAe,CAAA,GAAI,CAAA,OAAA,EAAU,WAAW,CAAA,CAAA;AAAA,IAClD;AAGA,IAAA,MAAM,OAAO,YAAA,EAAa;AAC1B,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,OAAA,CAAQ,cAAc,CAAA,GAAI,IAAA;AAAA,IAC5B;AAGA,IAAA,IAAI,WAAA,GAAc,IAAA;AAClB,IAAA,IAAI,iBAAiB,YAAA,EAAc;AACjC,MAAA,MAAM,WACJ,OAAO,IAAA,KAAS,YAAY,IAAA,KAAS,IAAA,GAAQ,OAAmC,EAAC;AACnF,MAAA,IAAI,CAAC,QAAA,CAAS,IAAI,CAAA,EAAG;AACnB,QAAA,WAAA,GAAc,EAAE,GAAG,QAAA,EAAU,EAAA,EAAI,YAAA,EAAa;AAAA,MAChD;AAAA,IACF;AAEA,IAAA,IAAI,MAAM,MAAM,KAAA,CAAM,GAAG,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI;AAAA,MACzC,MAAA;AAAA,MACA,OAAA;AAAA,MACA,WAAA,EAAa,SAAA;AAAA,MACb,GAAI,WAAA,KAAgB,MAAA,GAAY,EAAE,IAAA,EAAM,KAAK,SAAA,CAAU,WAAW,CAAA,EAAE,GAAI;AAAC,KAC1E,CAAA;AAGD,IAAA,MAAM,gBAAA,GAAmB;AAAA,MACvB,KAAA,CAAM,OAAA;AAAA,MACN,KAAA,CAAM,KAAA;AAAA,MACN,KAAA,CAAM,MAAA;AAAA,MACN,KAAA,CAAM,SAAA;AAAA,MACN,KAAA,CAAM;AAAA,KACR;AACA,IAAA,IAAI,IAAI,MAAA,KAAW,GAAA,IAAO,CAAC,gBAAA,CAAiB,QAAA,CAAS,IAA4B,CAAA,EAAG;AAClF,MAAA,IAAI;AACF,QAAA,MAAM,aAAA,EAAc;AAAA,MACtB,CAAA,CAAA,MAAQ;AACN,QAAA,IAAI,GAAA,GAAM,iBAAA;AACV,QAAA,IAAI;AACF,UAAA,MAAMC,KAAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,UAAA,GAAA,GACEA,KAAAA,CAAK,OAAA,IACLA,KAAAA,CAAK,KAAA,EAAO,OAAA,KACX,OAAOA,KAAAA,CAAK,KAAA,KAAU,QAAA,GAAWA,KAAAA,CAAK,KAAA,GAAQ,IAAA,CAAA,IAC/C,GAAA;AAAA,QACJ,CAAA,CAAA,MAAQ;AAAA,QAER;AACA,QAAA,MAAM,IAAI,MAAM,GAAG,CAAA;AAAA,MACrB;AAGA,MAAA,MAAM,YAAA,GAAuC;AAAA,QAC3C,cAAA,EAAgB,kBAAA;AAAA,QAChB,GAAG,MAAA,CAAO;AAAA,OACZ;AACA,MAAA,IAAI,YAAY,cAAA,EAAgB;AAC9B,QAAA,YAAA,CAAa,mBAAmB,IAAI,UAAA,CAAW,cAAA;AAAA,MACjD;AACA,MAAA,IAAI,WAAA,IAAe,CAAC,aAAA,EAAe;AACjC,QAAA,YAAA,CAAa,eAAe,CAAA,GAAI,CAAA,OAAA,EAAU,WAAW,CAAA,CAAA;AAAA,MACvD;AACA,MAAA,MAAM,YAAY,YAAA,EAAa;AAC/B,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,YAAA,CAAa,cAAc,CAAA,GAAI,SAAA;AAAA,MACjC;AAEA,MAAA,GAAA,GAAM,MAAM,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI;AAAA,QACrC,MAAA;AAAA,QACA,OAAA,EAAS,YAAA;AAAA,QACT,WAAA,EAAa,SAAA;AAAA,QACb,GAAI,WAAA,KAAgB,MAAA,GAAY,EAAE,IAAA,EAAM,KAAK,SAAA,CAAU,WAAW,CAAA,EAAE,GAAI;AAAC,OAC1E,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,MAAA,IAAI,GAAA,GAAM,CAAA,MAAA,EAAS,GAAA,CAAI,MAAM,CAAA,CAAA;AAC7B,MAAA,IAAI;AACF,QAAA,MAAMA,KAAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,QAAA,GAAA,GACEA,KAAAA,CAAK,OAAA,IACLA,KAAAA,CAAK,KAAA,EAAO,OAAA,KACX,OAAOA,KAAAA,CAAK,KAAA,KAAU,QAAA,GAAWA,KAAAA,CAAK,KAAA,GAAQ,IAAA,CAAA,IAC/C,GAAA;AAAA,MACJ,CAAA,CAAA,MAAQ;AAAA,MAER;AACA,MAAA,MAAM,GAAA,GAAM,IAAI,KAAA,CAAM,GAAG,CAAA;AACxB,MAAC,GAAA,CAAiB,SAAS,GAAA,CAAI,MAAA;AAChC,MAAA,MAAM,GAAA;AAAA,IACR;AAGA,IAAA,IAAI,GAAA,CAAI,MAAA,KAAW,GAAA,EAAK,OAAO,MAAA;AAG/B,IAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,IAAA,IAAI,QAAQ,OAAO,IAAA,KAAS,YAAY,MAAA,IAAU,IAAA,IAAQ,UAAU,IAAA,EAAM;AACxE,MAAA,OAAO,IAAA,CAAK,IAAA;AAAA,IACd;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,MAAM,CAAc,IAAA,EAAc,SAAmB,OAAA,CAAW,MAAA,EAAQ,MAAM,IAAI,CAAA;AAAA,IAClF,GAAA,EAAK,CAAc,IAAA,KAAiB,OAAA,CAAW,OAAO,IAAI,CAAA;AAAA,IAC1D,OAAO,CAAc,IAAA,EAAc,SAAmB,OAAA,CAAW,OAAA,EAAS,MAAM,IAAI,CAAA;AAAA,IACpF,GAAA,EAAK,CAAc,IAAA,KAAiB,OAAA,CAAW,UAAU,IAAI,CAAA;AAAA,IAC7D,KAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,eAAA;AAAA,IACA,eAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,cAAA,EAAgB,CAAC,IAAA,KAAiC,aAAA,CAAc,IAAI,CAAA;AAAA,IACpE,gBAAA,EAAkB,MAAmB,qBAAA;AAAyB,GAChE;AACF;;;AC9bO,IAAM,EAAA,GAAqB;AAAA,EAChC,KAAA,EAAO;AAAA,IACL,KAAA,EAAO,+BAAA;AAAA,IACP,WAAA,EAAa,qDAAA;AAAA,IACb,MAAA,EAAQ,mBAAA;AAAA,IACR,UAAA,EAAY,uBAAA;AAAA,IACZ,gBAAA,EAAkB,gBAAA;AAAA,IAClB,aAAA,EAAe,eAAA;AAAA,IACf,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,gBAAA;AAAA,IACP,WAAA,EAAa,qCAAA;AAAA,IACb,MAAA,EAAQ,cAAA;AAAA,IACR,UAAA,EAAY,uBAAA;AAAA,IACZ,gBAAA,EAAkB,gBAAA;AAAA,IAClB,aAAA,EAAe,eAAA;AAAA,IACf,mBAAA,EAAqB,uBAAA;AAAA,IACrB,oBAAA,EAAsB,yBAAA;AAAA,IACtB,0BAAA,EAA4B;AAAA,GAC9B;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,KAAA,EAAO,yBAAA;AAAA,IACP,WAAA,EACE,+FAAA;AAAA,IACF,MAAA,EAAQ,eAAA;AAAA,IACR,UAAA,EAAY,uBAAA;AAAA,IACZ,gBAAA,EAAkB,gBAAA;AAAA,IAClB,cAAA,EAAgB;AAAA,GAClB;AAAA,EACA,aAAA,EAAe;AAAA,IACb,KAAA,EAAO,2BAAA;AAAA,IACP,WAAA,EAAa,iCAAA;AAAA,IACb,MAAA,EAAQ,2BAAA;AAAA,IACR,gBAAA,EAAkB,qBAAA;AAAA,IAClB,sBAAA,EAAwB,uBAAA;AAAA,IACxB,oBAAA,EAAsB,yBAAA;AAAA,IACtB,0BAAA,EAA4B;AAAA,GAC9B;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,sBAAA;AAAA,IACR,KAAA,EAAO,qBAAA;AAAA,IACP,SAAA,EAAW,wBAAA;AAAA,IACX,UAAA,EAAY;AAAA,GACd;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,IAAA,EAAM,KAAA;AAAA,IACN,IAAA,EAAM;AAAA,GACR;AAAA,EACA,SAAA,EAAW,eAAA;AAAA,EACX,OAAA,EAAS;AAAA,IACP,GAAA,EAAK,OAAA;AAAA,IACL,mBAAA,EAAqB,8BAAA;AAAA,IACrB,UAAA,EAAY,iCAAA;AAAA,IACZ,MAAA,EAAQ,QAAA;AAAA,IACR,QAAA,EAAU,UAAA;AAAA,IACV,YAAA,EAAc,wBAAA;AAAA,IACd,MAAA,EAAQ,UAAA;AAAA,IACR,UAAA,EAAY;AAAA,GACd;AAAA,EACA,UAAA,EAAY;AAAA,IACV,aAAA,EAAe,uBAAA;AAAA,IACf,UAAA,EAAY,eAAA;AAAA,IACZ,cAAA,EAAgB,uBAAA;AAAA,IAChB,UAAA,EAAY,kBAAA;AAAA,IACZ,cAAA,EAAgB,iCAAA;AAAA,IAChB,WAAA,EAAa;AAAA,GACf;AAAA,EACA,UAAA,EAAY;AAAA,IACV,aAAA,EAAe,wBAAA;AAAA,IACf,YAAA,EAAc,mCAAA;AAAA,IACd,gBAAA,EAAkB,+BAAA;AAAA,IAClB,iBAAA,EAAmB,oDAAA;AAAA,IACnB,uBAAA,EAAyB,2BAAA;AAAA,IACzB,iBAAA,EAAmB,iCAAA;AAAA,IACnB,aAAA,EAAe,uBAAA;AAAA,IACf,mBAAA,EAAqB,qCAAA;AAAA,IACrB,uBAAA,EAAyB,sCAAA;AAAA,IACzB,eAAA,EAAiB,2BAAA;AAAA,IACjB,aAAA,EAAe,sCAAA;AAAA,IACf,gBAAA,EAAkB,2BAAA;AAAA,IAClB,kBAAA,EAAoB,iCAAA;AAAA,IACpB,UAAA,EAAY;AAAA;AAEhB;;;ACpFO,IAAM,EAAA,GAAqB;AAAA,EAChC,KAAA,EAAO;AAAA,IACL,KAAA,EAAO,yBAAA;AAAA,IACP,WAAA,EAAa,iDAAA;AAAA,IACb,MAAA,EAAQ,SAAA;AAAA,IACR,UAAA,EAAY,OAAA;AAAA,IACZ,gBAAA,EAAkB,iBAAA;AAAA,IAClB,aAAA,EAAe,UAAA;AAAA,IACf,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,qBAAA;AAAA,IACP,WAAA,EAAa,gCAAA;AAAA,IACb,MAAA,EAAQ,gBAAA;AAAA,IACR,UAAA,EAAY,OAAA;AAAA,IACZ,gBAAA,EAAkB,iBAAA;AAAA,IAClB,aAAA,EAAe,UAAA;AAAA,IACf,mBAAA,EAAqB,oBAAA;AAAA,IACrB,oBAAA,EAAsB,kBAAA;AAAA,IACtB,0BAAA,EAA4B;AAAA,GAC9B;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,KAAA,EAAO,gBAAA;AAAA,IACP,WAAA,EAAa,oEAAA;AAAA,IACb,MAAA,EAAQ,WAAA;AAAA,IACR,UAAA,EAAY,OAAA;AAAA,IACZ,gBAAA,EAAkB,iBAAA;AAAA,IAClB,cAAA,EAAgB;AAAA,GAClB;AAAA,EACA,aAAA,EAAe;AAAA,IACb,KAAA,EAAO,gBAAA;AAAA,IACP,WAAA,EAAa,0BAAA;AAAA,IACb,MAAA,EAAQ,gBAAA;AAAA,IACR,gBAAA,EAAkB,cAAA;AAAA,IAClB,sBAAA,EAAwB,oBAAA;AAAA,IACxB,oBAAA,EAAsB,kBAAA;AAAA,IACtB,0BAAA,EAA4B;AAAA,GAC9B;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,sBAAA;AAAA,IACR,KAAA,EAAO,qBAAA;AAAA,IACP,SAAA,EAAW,wBAAA;AAAA,IACX,UAAA,EAAY;AAAA,GACd;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,IAAA,EAAM,MAAA;AAAA,IACN,IAAA,EAAM;AAAA,GACR;AAAA,EACA,SAAA,EAAW,YAAA;AAAA,EACX,OAAA,EAAS;AAAA,IACP,GAAA,EAAK,KAAA;AAAA,IACL,mBAAA,EAAqB,uBAAA;AAAA,IACrB,UAAA,EAAY,mBAAA;AAAA,IACZ,MAAA,EAAQ,QAAA;AAAA,IACR,QAAA,EAAU,UAAA;AAAA,IACV,YAAA,EAAc,eAAA;AAAA,IACd,MAAA,EAAQ,QAAA;AAAA,IACR,UAAA,EAAY;AAAA,GACd;AAAA,EACA,UAAA,EAAY;AAAA,IACV,aAAA,EAAe,wBAAA;AAAA,IACf,UAAA,EAAY,SAAA;AAAA,IACZ,cAAA,EAAgB,0BAAA;AAAA,IAChB,UAAA,EAAY,SAAA;AAAA,IACZ,cAAA,EAAgB,uBAAA;AAAA,IAChB,WAAA,EAAa;AAAA,GACf;AAAA,EACA,UAAA,EAAY;AAAA,IACV,aAAA,EAAe,mBAAA;AAAA,IACf,YAAA,EAAc,uBAAA;AAAA,IACd,gBAAA,EAAkB,sBAAA;AAAA,IAClB,iBAAA,EAAmB,yCAAA;AAAA,IACnB,uBAAA,EAAyB,8BAAA;AAAA,IACzB,iBAAA,EAAmB,wBAAA;AAAA,IACnB,aAAA,EAAe,mBAAA;AAAA,IACf,mBAAA,EAAqB,0BAAA;AAAA,IACrB,uBAAA,EAAyB,8BAAA;AAAA,IACzB,eAAA,EAAiB,kBAAA;AAAA,IACjB,aAAA,EAAe,uBAAA;AAAA,IACf,gBAAA,EAAkB,sBAAA;AAAA,IAClB,kBAAA,EAAoB,yBAAA;AAAA,IACpB,UAAA,EAAY;AAAA;AAEhB;;;ACjFA,IAAM,YAAA,GAAwD,EAAE,EAAA,EAAI,EAAA,EAAG;AAMhE,SAAS,eAAA,CACd,MAAA,GAA0B,IAAA,EAC1B,SAAA,EACgB;AAChB,EAAA,MAAM,IAAA,GAAO,YAAA,CAAa,MAAM,CAAA,IAAK,YAAA,CAAa,EAAA;AAClD,EAAA,IAAI,CAAC,WAAW,OAAO,IAAA;AAEvB,EAAA,OAAO;AAAA,IACL,OAAO,EAAE,GAAG,KAAK,KAAA,EAAO,GAAG,UAAU,KAAA,EAAM;AAAA,IAC3C,QAAQ,EAAE,GAAG,KAAK,MAAA,EAAQ,GAAG,UAAU,MAAA,EAAO;AAAA,IAC9C,gBAAgB,EAAE,GAAG,KAAK,cAAA,EAAgB,GAAG,UAAU,cAAA,EAAe;AAAA,IACtE,eAAe,EAAE,GAAG,KAAK,aAAA,EAAe,GAAG,UAAU,aAAA,EAAc;AAAA,IACnE,YAAY,EAAE,GAAG,KAAK,UAAA,EAAY,GAAG,UAAU,UAAA,EAAW;AAAA,IAC1D,QAAQ,EAAE,GAAG,KAAK,MAAA,EAAQ,GAAG,UAAU,MAAA,EAAO;AAAA,IAC9C,gBAAgB,EAAE,GAAG,KAAK,cAAA,EAAgB,GAAG,UAAU,cAAA,EAAe;AAAA,IACtE,SAAA,EAAW,SAAA,CAAU,SAAA,IAAa,IAAA,CAAK,SAAA;AAAA,IACvC,SAAS,EAAE,GAAG,KAAK,OAAA,EAAS,GAAG,UAAU,OAAA,EAAQ;AAAA,IACjD,YAAY,EAAE,GAAG,KAAK,UAAA,EAAY,GAAG,UAAU,UAAA;AAAW,GAC5D;AACF;;;AC5BO,IAAM,GAAA,GAAM,CAAA;AAAA,g4yBAAA,CAAA;;;ACCnB,IAAM,QAAA,GAAW,sBAAA;AACjB,IAAI,QAAA,GAAW,KAAA;AAER,SAAS,YAAA,GAAe;AAC7B,EAAA,IAAI,QAAA,IAAY,OAAO,QAAA,KAAa,WAAA,EAAa;AACjD,EAAA,IAAI,QAAA,CAAS,cAAA,CAAe,QAAQ,CAAA,EAAG;AACrC,IAAA,QAAA,GAAW,IAAA;AACX,IAAA;AAAA,EACF;AACA,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA;AAC5C,EAAA,KAAA,CAAM,EAAA,GAAK,QAAA;AACX,EAAA,KAAA,CAAM,WAAA,GAAc,GAAA;AACpB,EAAA,QAAA,CAAS,IAAA,CAAK,YAAY,KAAK,CAAA;AAC/B,EAAA,QAAA,GAAW,IAAA;AACb;AAGO,SAAS,YAAA,GAAe;AAC7B,EAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACrC,EAAA,QAAA,CAAS,cAAA,CAAe,QAAQ,CAAA,EAAG,MAAA,EAAO;AAC1C,EAAA,QAAA,GAAW,KAAA;AACb;ACNO,SAAS,iBAAiB,IAAA,EAAoB;AACnD,EAAA,MAAM;AAAA,IACJ,MAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,iBAAA;AAAA,IACA,iBAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACF,GAAI,IAAA;AAEJ,EAAA,MAAM,cAAcC,yBAAA,EAAe;AAGnC,EAAA,MAAM,gBAAgBC,sBAAA,CAAY;AAAA,IAChC,UAAA,EAAY,CAAC,IAAA,KACX,MAAA,CAAO,IAAA,CAA0B,OAAO,KAAA,CAAM,KAAA,EAAO,cAAA,CAAe,IAAI,CAAC,CAAA;AAAA,IAC3E,SAAA,EAAW,CAAC,IAAA,KAAS;AACnB,MAAA,OAAA,CAAQ,KAAK,IAAI,CAAA;AACjB,MAAA,iBAAA,CAAkB,cAAA,CAAe,IAA0C,CAAC,CAAA;AAC5E,MAAA,iBAAA,CAAkB,IAA0C,CAAA;AAC5D,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,KAAA,CAAM,iBAAA,IAAoB;AAC1B,MAAA,KAAA,CAAM,iBAAiB,IAAI,CAAA;AAAA,IAC7B,CAAA;AAAA,IACA,OAAA,EAAS,CAAC,GAAA,KAAe;AACvB,MAAA,QAAA,CAAS,IAAI,OAAO,CAAA;AACpB,MAAA,KAAA,CAAM,OAAA,GAAU,IAAI,OAAO,CAAA;AAAA,IAC7B;AAAA,GACD,CAAA;AAGD,EAAA,MAAM,iBAAiBA,sBAAA,CAAY;AAAA,IACjC,UAAA,EAAY,CAAC,IAAA,KAAqB;AAChC,MAAA,MAAM,EAAE,eAAA,EAAiB,CAAA,EAAG,GAAG,SAAQ,GAAI,IAAA;AAC3C,MAAA,OAAO,MAAA,CAAO,IAAA,CAA0B,MAAA,CAAO,KAAA,CAAM,MAAA,EAAQ,eAAe,EAAE,GAAG,OAAA,EAAS,CAAC,CAAA;AAAA,IAC7F,CAAA;AAAA,IACA,SAAA,EAAW,CAAC,IAAA,KAAS;AACnB,MAAA,OAAA,CAAQ,KAAK,IAAI,CAAA;AACjB,MAAA,iBAAA,CAAkB,cAAA,CAAe,IAA0C,CAAC,CAAA;AAC5E,MAAA,iBAAA,CAAkB,IAA0C,CAAA;AAC5D,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,KAAA,CAAM,iBAAA,IAAoB;AAC1B,MAAA,KAAA,CAAM,kBAAkB,IAAI,CAAA;AAAA,IAC9B,CAAA;AAAA,IACA,OAAA,EAAS,CAAC,GAAA,KAAe;AACvB,MAAA,QAAA,CAAS,IAAI,OAAO,CAAA;AACpB,MAAA,KAAA,CAAM,OAAA,GAAU,IAAI,OAAO,CAAA;AAAA,IAC7B;AAAA,GACD,CAAA;AAGD,EAAA,MAAM,iBAAiBA,sBAAA,CAAY;AAAA,IACjC,YAAY,MAAM,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,IACjD,WAAW,MAAM;AACf,MAAA,YAAA,EAAa;AACb,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,WAAA,CAAY,KAAA,EAAM;AAClB,MAAA,KAAA,CAAM,iBAAA,IAAoB;AAC1B,MAAA,KAAA,CAAM,eAAA,IAAkB;AAAA,IAC1B;AAAA,GACD,CAAA;AAGD,EAAA,MAAM,SAAA,GAAYC,kBAAY,YAAY;AACxC,IAAA,IAAI;AACF,MAAA,MAAM,OAAO,cAAA,EAAe;AAC5B,MAAA,iBAAA,CAAkB,MAAA,CAAO,gBAAgB,CAAA;AAAA,IAC3C,SAAS,GAAA,EAAK;AACZ,MAAA,YAAA,EAAa;AACb,MAAA,WAAA,CAAY,KAAA,EAAM;AAClB,MAAA,KAAA,CAAM,gBAAA,IAAmB;AACzB,MAAA,MAAM,GAAA;AAAA,IACR;AAAA,EACF,GAAG,CAAC,MAAA,EAAQ,aAAa,KAAA,EAAO,iBAAA,EAAmB,YAAY,CAAC,CAAA;AAGhE,EAAA,MAAM,cAAA,GAAiBA,iBAAA;AAAA,IACrB,OAAO,QAAA,KAAqB;AAC1B,MAAA,MAAM,MAAA,CAAO,cAAA,CAAe,EAAE,QAAA,EAAU,CAAA;AACxC,MAAA,iBAAA,CAAkB,MAAA,CAAO,gBAAgB,CAAA;AACzC,MAAA,MAAM,YAAY,iBAAA,CAAkB,EAAE,UAAU,CAAC,eAAe,GAAG,CAAA;AAAA,IACrE,CAAA;AAAA,IACA,CAAC,MAAA,EAAQ,WAAA,EAAa,iBAAiB;AAAA,GACzC;AAEA,EAAA,OAAO;AAAA,IACL,aAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACF;AACF;AC/FA,IAAM,aAAA,GAAgBC,oBAAyC,IAAI,CAAA;AACnE,aAAA,CAAc,WAAA,GAAc,eAAA;AAE5B,IAAM,aAAA,GAAgBA,oBAAmC,IAAI,CAAA;AAC7D,aAAA,CAAc,WAAA,GAAc,qBAAA;AAO5B,IAAM,eAAA,GAAkBA,oBAA2C,IAAI,CAAA;AACvE,eAAA,CAAgB,WAAA,GAAc,iBAAA;AAGvB,SAAS,eAAA,GAAgC;AAC9C,EAAA,MAAM,GAAA,GAAMC,iBAAW,aAAa,CAAA;AACpC,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,IAAI,MAAM,0DAA0D,CAAA;AAAA,EAC5E;AACA,EAAA,OAAO,GAAA;AACT;AAMO,SAAS,WAAA,GAAkC;AAChD,EAAA,MAAM,GAAA,GAAMA,iBAAW,eAAe,CAAA;AACtC,EAAA,OAAO,KAAK,QAAA,IAAY,IAAA;AAC1B;AAMO,SAAS,WAAA,GAA8B;AAC5C,EAAA,MAAM,GAAA,GAAMA,iBAAW,eAAe,CAAA;AACtC,EAAA,IAAI,GAAA,SAAY,GAAA,CAAI,QAAA;AACpB,EAAA,OAAO,gBAAgB,IAAI,CAAA;AAC7B;AAGA,IAAM,kBAAA,GAAqB,IAAIC,sBAAA,CAAY;AAAA,EACzC,cAAA,EAAgB;AAAA,IACd,OAAA,EAAS,EAAE,KAAA,EAAO,KAAA,EAAO,sBAAsB,KAAA;AAAM;AAEzD,CAAC,CAAA;AAGD,SAAS,mBAAA,CAAoB;AAAA,EAC3B,QAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIC,eAA0B,IAAI,CAAA;AACtD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAAwB,IAAI,CAAA;AAClE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAwB,IAAI,CAAA;AACtD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,eAA6B,IAAI,CAAA;AAEjE,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,IAAIA,cAAA,CAAS,KAAA,CAAM,iBAAiB,IAAI,CAAA;AAGlF,EAAA,MAAM,QAAA,GAAWC,aAAA;AAAA,IACf,MAAM,eAAA,CAAgB,KAAA,CAAM,MAAA,IAAU,IAAA,EAAM,MAAM,QAAQ,CAAA;AAAA,IAC1D,CAAC,KAAA,CAAM,MAAA,EAAQ,KAAA,CAAM,QAAQ;AAAA,GAC/B;AAEA,EAAA,MAAM,aAAA,GAAgBA,aAAA,CAAQ,OAAO,EAAE,QAAA,EAAU,UAAS,CAAA,EAAI,CAAC,QAAA,EAAU,QAAQ,CAAC,CAAA;AAIlF,EAAA,MAAM,WAAA,GAAc,CAAC,KAAA,CAAM,MAAA;AAG3B,EAAA,MAAM,OAAA,GAAUA,cAAQ,MAAM;AAC5B,IAAA,IAAI,KAAA,CAAM,cAAA,KAAmB,KAAA,EAAO,OAAO,IAAA;AAC3C,IAAA,IAAI,KAAA,CAAM,cAAA,EAAgB,OAAO,KAAA,CAAM,cAAA;AAEvC,IAAA,IAAI,aAAa,OAAO,IAAA;AAExB,IAAA,IAAI,MAAA,CAAO,UAAA,EAAY,cAAA,EAAgB,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC3D,MAAA,OAAO,mBAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,EAAG,CAAC,KAAA,CAAM,cAAA,EAAgB,OAAO,UAAA,EAAY,cAAA,EAAgB,WAAW,CAAC,CAAA;AAEzE,EAAA,MAAM,WAAA,GAAcL,iBAAAA;AAAA,IAClB,CAAC,KAAA,KAAyB;AACxB,MAAA,IAAI,CAAC,OAAA,EAAS;AACd,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,KAAA,CAAM,OAAA,EAAS;AAAA,UACb,MAAA,EAAQ,MAAA;AAAA,UACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,UAC9C,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,OAAO;AAAA,SAC/B,CAAA,CAAE,KAAA,CAAM,MAAM;AAAA,QAAC,CAAC,CAAA;AAAA,MACnB,CAAA,MAAO;AACL,QAAA,KAAA,CAAM,SAAS,EAAE,MAAA,EAAQ,UAAU,CAAA,CAAE,MAAM,MAAM;AAAA,QAAC,CAAC,CAAA;AAAA,MACrD;AAAA,IACF,CAAA;AAAA,IACA,CAAC,OAAO;AAAA,GACV;AAGA,EAAA,MAAM,iBAAA,GAAoBA,iBAAAA;AAAA,IACxB,CAAC,KAAA,KAAyB;AACxB,MAAA,cAAA,CAAe,KAAK,CAAA;AACpB,MAAA,MAAA,CAAO,eAAe,KAAK,CAAA;AAC3B,MAAA,WAAA,CAAY,KAAK,CAAA;AAAA,IACnB,CAAA;AAAA,IACA,CAAC,QAAQ,WAAW;AAAA,GACtB;AAMA,EAAA,MAAM,iBAAA,GAAoBA,iBAAAA;AAAA,IACxB,CAAC,IAAA,KAAkC;AACjC,MAAA,MAAM,EAAA,GAAM,IAAA,CAAK,EAAA,IAAM,IAAA,CAAK,YAAA;AAC5B,MAAA,MAAM,EAAA,GAAM,IAAA,CAAK,EAAA,IAAM,IAAA,CAAK,SAAA;AAC5B,MAAA,IAAI,EAAA,EAAI,MAAA,CAAO,eAAA,CAAgB,EAAE,CAAA;AACjC,MAAA,IAAI,EAAA,EAAI,MAAA,CAAO,YAAA,CAAa,EAAE,CAAA;AAAA,IAChC,CAAA;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AAGA,EAAA,MAAM,YAAA,GAAeA,kBAAY,MAAM;AACrC,IAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,IAAA,iBAAA,CAAkB,IAAI,CAAA;AACtB,IAAA,MAAA,CAAO,gBAAgB,IAAI,CAAA;AAC3B,IAAA,MAAA,CAAO,aAAa,IAAI,CAAA;AAAA,EAC1B,CAAA,EAAG,CAAC,MAAA,EAAQ,iBAAiB,CAAC,CAAA;AAG9B,EAAA,MAAM,cAAA,GAAiBA,iBAAAA;AAAA,IACrB,CAAC,IAAA,KAAkC;AACjC,MAAA,IAAI,MAAA,CAAO,YAAY,QAAA,EAAU;AAC/B,QAAA,OAAO,EAAE,GAAG,IAAA,EAAM,QAAA,EAAU,MAAA,CAAO,WAAW,QAAA,EAAS;AAAA,MACzD;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AAMA,EAAAM,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,aAAA,GAAgB,MAAM,aAAA,IAAiB,IAAA;AAC7C,IAAA,IAAI,CAAC,aAAA,EAAe;AAEpB,IAAA,IAAI,SAAA,GAAY,KAAA;AAEhB,IAAA,eAAe,SAAA,GAAY;AACzB,MAAA,kBAAA,CAAmB,IAAI,CAAA;AACvB,MAAA,IAAI;AACF,QAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,gBAAA,EAAoC;AAElE,QAAA,IAAI,SAAA,EAAW;AAEf,QAAA,IAAI,SAAS,QAAA,EAAU;AACrB,UAAA,WAAA,CAAY,SAAS,QAAQ,CAAA;AAAA,QAC/B;AAEA,QAAA,IAAI,SAAS,aAAA,EAAe;AAC1B,UAAA,MAAM,CAAA,GAAI,QAAA;AACV,UAAA,OAAA,CAAQ,SAAS,IAAI,CAAA;AACrB,UAAA,iBAAA,CAAmB,CAAA,CAAE,EAAA,IAAM,CAAA,CAAE,WAAsB,CAAA;AACnD,UAAA,iBAAA,CAAkB,CAAC,CAAA;AAAA,QACrB;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,IAAI,OAAO,YAAY,WAAA,EAAa;AAClC,UAAA,MAAM,MAAM,GAAA,YAAe,KAAA,GAAQ,IAAI,OAAA,GAAU,IAAA,CAAK,UAAU,GAAG,CAAA;AACnE,UAAA,OAAA,CAAQ,IAAA,CAAK,qCAAqC,GAAG,CAAA;AAAA,QACvD;AAAA,MACF,CAAA,SAAE;AACA,QAAA,IAAI,CAAC,SAAA,EAAW;AACd,UAAA,kBAAA,CAAmB,KAAK,CAAA;AAAA,QAC1B;AAAA,MACF;AAAA,IACF;AAEA,IAAA,SAAA,EAAU;AAEV,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,GAAY,IAAA;AAAA,IACd,CAAA;AAAA,EACF,GAAG,CAAC,MAAA,EAAQ,MAAM,aAAA,EAAe,iBAAA,EAAmB,iBAAiB,CAAC,CAAA;AAMtE,EAAA,MAAM,aAAA,GAAgBN,kBAAY,YAAY;AAC5C,IAAA,IAAI,CAAC,MAAA,CAAO,cAAA,EAAe,EAAG;AAK9B,IAAA,IAAI,OAAO,SAAA,KAAc,WAAA,IAAe,OAAA,IAAW,SAAA,EAAW;AAC5D,MAAA,IAAI,QAAA,GAAW,KAAA;AACf,MAAA,IAAI;AACF,QAAA,MAAM,UAAU,KAAA,CAAM,OAAA;AAAA,UACpB,sBAAA;AAAA,UACA,EAAE,aAAa,IAAA,EAAK;AAAA,UACpB,OAAO,IAAA,KAAS;AACd,YAAA,IAAI,CAAC,IAAA,EAAM;AACX,YAAA,QAAA,GAAW,IAAA;AACX,YAAA,MAAM,OAAO,cAAA,EAAe;AAC5B,YAAA,iBAAA,CAAkB,MAAA,CAAO,gBAAgB,CAAA;AAAA,UAC3C;AAAA,SACF;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,IAAI,QAAA,IAAY,WAAA,CAAY,GAAG,CAAA,EAAG;AAChC,UAAA,YAAA,EAAa;AACb,UAAA,KAAA,CAAM,gBAAA,IAAmB;AAAA,QAC3B;AAAA,MACF;AACA,MAAA;AAAA,IACF;AAGA,IAAA,IAAI;AACF,MAAA,MAAM,OAAO,cAAA,EAAe;AAC5B,MAAA,iBAAA,CAAkB,MAAA,CAAO,gBAAgB,CAAA;AAAA,IAC3C,SAAS,GAAA,EAAK;AACZ,MAAA,IAAI,WAAA,CAAY,GAAG,CAAA,EAAG;AACpB,QAAA,YAAA,EAAa;AACb,QAAA,KAAA,CAAM,gBAAA,IAAmB;AAAA,MAC3B;AAAA,IACF;AAAA,EACF,GAAG,CAAC,MAAA,EAAQ,iBAAA,EAAmB,YAAA,EAAc,KAAK,CAAC,CAAA;AAInD,EAAAM,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,OAAA,GAAmC,IAAA;AACvC,IAAA,IAAI;AACF,MAAA,IAAI,OAAO,qBAAqB,WAAA,EAAa;AAC3C,QAAA,OAAA,GAAU,IAAI,iBAAiB,aAAa,CAAA;AAC5C,QAAA,OAAA,CAAQ,SAAA,GAAY,CAAC,KAAA,KAAwB;AAC3C,UAAA,IAAI,MAAM,IAAA,EAAM,IAAA,KAAS,iBAAA,IAAqB,KAAA,CAAM,KAAK,WAAA,EAAa;AACpE,YAAA,MAAA,CAAO,cAAA,CAAe,KAAA,CAAM,IAAA,CAAK,WAAW,CAAA;AAC5C,YAAA,iBAAA,CAAkB,KAAA,CAAM,KAAK,WAAW,CAAA;AAAA,UAC1C;AAAA,QACF,CAAA;AAAA,MACF;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AACA,IAAA,OAAO,MAAM;AACX,MAAA,IAAI;AACF,QAAA,OAAA,EAAS,KAAA,EAAM;AAAA,MACjB,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,iBAAiB,CAAC,CAAA;AAG9B,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,UAAA,GAAa,MAAM,eAAA,IAAmB,GAAA;AAC5C,IAAA,IAAI,cAAc,CAAA,EAAG;AAErB,IAAA,MAAM,EAAA,GAAK,WAAA,CAAY,aAAA,EAAe,UAAU,CAAA;AAChD,IAAA,OAAO,MAAM,cAAc,EAAE,CAAA;AAAA,EAC/B,CAAA,EAAG,CAAC,KAAA,CAAM,eAAA,EAAiB,aAAa,CAAC,CAAA;AAGzC,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,SAAS,sBAAA,GAAyB;AAChC,MAAA,IAAI,QAAA,CAAS,oBAAoB,SAAA,EAAW;AAC1C,QAAA,aAAA,EAAc;AAAA,MAChB;AAAA,IACF;AAEA,IAAA,QAAA,CAAS,gBAAA,CAAiB,oBAAoB,sBAAsB,CAAA;AACpE,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,kBAAA,EAAoB,sBAAsB,CAAA;AAAA,EACtF,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAGlB,EAAA,MAAM,cAAA,GAAiBN,iBAAAA;AAAA,IACrB,CAAC,IAAA,KAA2C,IAAA,CAAK,EAAA,IAAM,IAAA,CAAK,WAAA;AAAA,IAC5D;AAAC,GACH;AAGA,EAAA,MAAM,EAAE,aAAA,EAAe,cAAA,EAAgB,gBAAgB,SAAA,EAAW,cAAA,KAChE,gBAAA,CAAiB;AAAA,IACf,MAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,iBAAA;AAAA,IACA,iBAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACD,CAAA;AAGH,EAAA,MAAM,KAAA,GAAQA,iBAAAA;AAAA,IACZ,CAAC,IAAA,KAA8C,aAAA,CAAc,MAAA,CAAO,IAAI,CAAA;AAAA,IACxE,CAAC,aAAa;AAAA,GAChB;AAEA,EAAA,MAAM,MAAA,GAASA,iBAAAA,CAAY,CAAC,IAAA,KAAqB,cAAA,CAAe,OAAO,IAAI,CAAA,EAAG,CAAC,cAAc,CAAC,CAAA;AAE9F,EAAA,MAAM,MAAA,GAASA,kBAAY,MAAM,cAAA,CAAe,QAAO,EAAG,CAAC,cAAc,CAAC,CAAA;AAC1E,EAAA,MAAM,aAAaA,iBAAAA,CAAY,MAAM,SAAS,IAAI,CAAA,EAAG,EAAE,CAAA;AAEvD,EAAA,MAAM,SAAA,GAAYA,iBAAAA,CAAY,CAAC,CAAA,KAAuB;AACpD,IAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,EACX,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,KAAA,GAAQK,aAAA;AAAA,IACZ,OAAO;AAAA,MACL,IAAA;AAAA,MACA,WAAA;AAAA,MACA,iBAAiB,IAAA,KAAS,IAAA;AAAA,MAC1B,SAAA,EAAW,aAAA,CAAc,SAAA,IAAa,cAAA,CAAe,SAAA;AAAA,MACrD,KAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,MACA,OAAA,EAAS,SAAA;AAAA,MACT,YAAA,EAAc,cAAA;AAAA,MACd,OAAA,EAAS,SAAA;AAAA,MACT,gBAAgB,aAAA,CAAc,SAAA;AAAA,MAC9B,iBAAiB,cAAA,CAAe,SAAA;AAAA,MAChC,eAAA;AAAA,MACA,aAAA;AAAA,MACA,cAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA;AAAA,MACA,WAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA,cAAA;AAAA,MACA,SAAA;AAAA,MACA,aAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,sCACG,aAAA,CAAc,QAAA,EAAd,EAAuB,KAAA,EAAO,MAAA,EAC7B,yCAAC,aAAA,CAAc,QAAA,EAAd,EAAuB,KAAA,EACtB,QAAA,kBAAAE,cAAA,CAAC,gBAAgB,QAAA,EAAhB,EAAyB,OAAO,aAAA,EAAgB,QAAA,EAAS,GAC5D,CAAA,EACF,CAAA;AAEJ;AAGO,SAAS,eAAe,KAAA,EAA4B;AACzD,EAAAD,eAAA,CAAU,MAAM;AACd,IAAA,YAAA,EAAa;AACb,IAAA,OAAO,MAAM,YAAA,EAAa;AAAA,EAC5B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,MAAA,GAASD,cAAQ,MAAM;AAC3B,IAAA,MAAM,UAAA,GAAa,MAAM,cAAA,GACrB;AAAA,MACE,gBAAgB,KAAA,CAAM,cAAA;AAAA,MACtB,UAAU,KAAA,CAAM;AAAA,KAClB,GACA,MAAA;AAIJ,IAAA,MAAM,OAAA,GAAU,CAAC,KAAA,CAAM,MAAA;AACvB,IAAA,MAAM,UAAU,OAAA,GAAU,EAAA,GAAK,MAAM,MAAA,CAAQ,OAAA,CAAQ,OAAO,EAAE,CAAA;AAC9D,IAAA,MAAM,QAAA,GAAW,OAAA,GAAU,UAAA,CAAW,KAAA,GAAQ,UAAA,CAAW,MAAA;AAEzD,IAAA,OAAO,kBAAA;AAAA,MACL,EAAE,OAAA,EAAS,QAAA,EAAU,OAAA,EAAS,MAAM,YAAA,EAAuC;AAAA,MAC3E;AAAA,KACF;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,CAAM,cAAA,EAAgB,KAAA,CAAM,UAAU,KAAA,CAAM,YAAA,EAAc,KAAA,CAAM,MAAM,CAAC,CAAA;AAE3E,EAAA,uBACEE,cAAA,CAACC,8BAAA,EAAA,EAAoB,MAAA,EAAQ,kBAAA,EAC3B,QAAA,kBAAAD,cAAA,CAAC,uBAAoB,MAAA,EAAgB,KAAA,EAClC,QAAA,EAAA,KAAA,CAAM,QAAA,EACT,CAAA,EACF,CAAA;AAEJ;AAGO,SAAS,SAAA,GAAgC;AAC9C,EAAA,MAAM,GAAA,GAAML,iBAAW,aAAa,CAAA;AACpC,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KAEF;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;AC3aA,IAAM,cAAA,GAAiBO,0BAAA;AAAA,EACrB,ikBAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,4DAAA;AAAA,QACT,OAAA,EACE,iLAAA;AAAA,QACF,SAAA,EACE,iIAAA;AAAA,QACF,KAAA,EACE,kHAAA;AAAA,QACF,WAAA,EACE,6NAAA;AAAA,QACF,IAAA,EAAM;AAAA,OACR;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,OAAA,EACE,sFAAA;AAAA,QACF,EAAA,EAAI,+MAAA;AAAA,QACJ,EAAA,EAAI,yNAAA;AAAA,QACJ,EAAA,EAAI,sFAAA;AAAA,QACJ,IAAA,EAAM,QAAA;AAAA,QACN,SAAA,EACE,yHAAA;AAAA,QACF,SAAA,EACE,oFAAA;AAAA,QACF,SAAA,EAAW;AAAA;AACb,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACR;AAEJ,CAAA;AAEA,SAAS,MAAA,CAAO;AAAA,EACd,SAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,SAAA;AAAA,EACP,OAAA,GAAU,KAAA;AAAA,EACV,GAAG;AACL,CAAA,EAGK;AACH,EAAA,MAAM,IAAA,GAAO,OAAA,GAAUC,YAAA,CAAK,IAAA,GAAO,QAAA;AAEnC,EAAA,uBACEH,cAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,QAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,WAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW,GAAG,cAAA,CAAe,EAAE,SAAS,IAAA,EAAM,SAAA,EAAW,CAAC,CAAA;AAAA,MACzD,GAAG;AAAA;AAAA,GACN;AAEJ;AC5DA,SAAS,IAAA,CAAK;AAAA,EACZ,SAAA;AAAA,EACA,IAAA,GAAO,SAAA;AAAA,EACP,GAAG;AACL,CAAA,EAA8D;AAC5D,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,MAAA;AAAA,MACV,WAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW,EAAA;AAAA,QACT,sVAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACxE,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,oSAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,SAAA,CAAU,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACvE,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,YAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,sEAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,eAAA,CAAgB,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AAC7E,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,kBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA;AAAA,MACvD,GAAG;AAAA;AAAA,GACN;AAEJ;AAYA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACzE,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,qCAAA,EAAuC,SAAS,CAAA;AAAA,MAC7D,GAAG;AAAA;AAAA,GACN;AAEJ;ACxEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACxE,EAAA,uBAAOA,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAA,EAAU,aAAA,EAAc,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAClG;AAEA,SAAS,KAAA,CAAM,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACnE,EAAA,uBAAOA,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAA,EAAU,OAAA,EAAQ,SAAA,EAAW,EAAA,CAAG,YAAA,EAAc,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AACnF;AAEA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,GAAG,OAAM,EAAkC;AAC1E,EAAA,uBACEA,cAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,kCAAA,EAAoC,SAAS,CAAA;AAAA,MAC1D,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,gBAAA,CAAiB,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AAC9E,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,iGAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,eAAe,EAAE,SAAA,EAAW,QAAA,EAAU,GAAG,OAAM,EAAgC;AACtF,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,oJAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAAA,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,WAAA,EAAU,yBAAA;AAAA,UACV,SAAA,EAAU,kDAAA;AAAA,UAET;AAAA;AAAA;AACH;AAAA,GACF;AAEJ;ACjDA,SAAS,MAAM,EAAE,SAAA,EAAW,IAAA,EAAM,GAAG,OAAM,EAAkC;AAC3E,EAAA,uBACEA,cAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,WAAA,EAAU,OAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,6oBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;ACJO,IAAM,SAAA,GAAYI,gBAAA;AAAA,EACvB,CACE;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,MAAA,EAAQ,UAAA;AAAA,IACR,SAAA,EAAW,eAAA;AAAA,IACX,KAAA,EAAO,aAAA;AAAA,IACP,SAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA,EAAO,SAAA;AAAA,IACP,WAAA,EAAa,eAAA;AAAA,IACb,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY,cAAA;AAAA,IACZ,MAAA;AAAA,IACA,cAAA;AAAA,IACA,iBAAA,GAAoB,IAAA;AAAA,IACpB,MAAA;AAAA,IACA;AAAA,KAEF,GAAA,KACG;AACH,IAAA,MAAM,MAAM,WAAA,EAAY;AACxB,IAAA,MAAM,WAAW,WAAA,EAAY;AAE7B,IAAA,MAAM,KAAA,GAAQ,SAAA,KAAc,QAAA,EAAU,WAAA,IAAe,IAAI,KAAA,CAAM,KAAA,CAAA;AAC/D,IAAA,MAAM,WAAA,GAAc,eAAA,IAAmB,GAAA,CAAI,KAAA,CAAM,WAAA;AACjD,IAAA,MAAM,UAAA,GAAa,cAAA,IAAkB,GAAA,CAAI,KAAA,CAAM,MAAA;AAE/C,IAAA,MAAM,OACJ,QAAA,KAAa,MAAA,GACX,WACE,QAAA,EAAU,OAAA,mBACZJ,cAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,QAAA,CAAS,SAAS,GAAA,EAAK,QAAA,CAAS,eAAe,EAAA,EAAI,SAAA,EAAU,eAAc,CAAA,GACnF,IAAA;AAEN,IAAA,MAAM,MAAA,GAASF,aAAAA;AAAA,MACb,MAAM,UAAA,IAAc,iBAAA,CAAkB,GAAA,CAAI,UAAU,CAAA;AAAA,MACpD,CAAC,UAAA,EAAY,GAAA,CAAI,UAAU;AAAA,KAC7B;AAEA,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI,QAAA,GAA0B,IAAA;AAC9B,IAAA,IAAI,UAAA,GAAa,KAAA;AAEjB,IAAA,IAAI;AACF,MAAA,MAAM,MAAM,SAAA,EAAU;AACtB,MAAA,QAAA,GAAW,GAAA,CAAI,KAAA;AACf,MAAA,QAAA,GAAW,GAAA,CAAI,KAAA;AACf,MAAA,UAAA,GAAa,GAAA,CAAI,cAAA;AAAA,IACnB,CAAA,CAAA,MAAQ;AAAA,IAER;AAEA,IAAA,MAAM;AAAA,MACJ,QAAA;AAAA,MACA,YAAA;AAAA,MACA,SAAA,EAAW,EAAE,MAAA,EAAQ,YAAA;AAAa,QAChCO,qBAAA,CAAoB;AAAA,MACtB,QAAA,EAAUC,kBAAY,MAAe,CAAA;AAAA,MACrC,eAAe,EAAE,KAAA,EAAO,IAAI,QAAA,EAAU,EAAA,EAAI,GAAG,aAAA;AAAc,KAC5D,CAAA;AAED,IAAA,MAAM,QAAA,GAAWb,iBAAAA;AAAA,MACf,OAAO,MAAA,KAAuB;AAC5B,QAAA,IAAI,YAAA,EAAc;AAChB,UAAA,MAAM,aAAa,MAAM,CAAA;AAAA,QAC3B,WAAW,QAAA,EAAU;AACnB,UAAA,QAAA,CAAS,MAAM,CAAA;AAAA,QACjB;AAAA,MACF,CAAA;AAAA,MACA,CAAC,cAAc,QAAQ;AAAA,KACzB;AAEA,IAAA,MAAM,OAAA,GAAU,mBAAmB,UAAA,IAAc,YAAA;AACjD,IAAA,MAAM,QAAQ,aAAA,IAAiB,QAAA;AAE/B,IAAA,MAAM,YAAA,GAAeK,cAAQ,MAA2B;AACtD,MAAA,IAAI,CAAC,QAAA,EAAU,YAAA,EAAc,OAAO,SAAS,EAAC;AAC9C,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,gBAAgB,QAAA,CAAS,YAAA;AAAA,QACzB,yBAAA,EAA2B;AAAA,OAC7B;AAAA,IACF,CAAA,EAAG,CAAC,KAAA,EAAO,QAAA,EAAU,YAAY,CAAC,CAAA;AAElC,IAAA,uBACES,eAAA,CAAC,KAAA,EAAA,EAAI,aAAA,EAAW,IAAA,EAAC,SAAA,EAAW,GAAG,qBAAA,EAAuB,SAAS,CAAA,EAAG,KAAA,EAAO,YAAA,EACtE,QAAA,EAAA;AAAA,MAAA,IAAA,oBAAQP,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAmD,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,sCAE/E,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAO,eAAA,CAAC,UAAA,EAAA,EAAW,WAAU,aAAA,EACnB,QAAA,EAAA;AAAA,UAAA,KAAA,oBAASP,cAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,WAAW,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,UAC/C,WAAA,oBAAeA,cAAAA,CAAC,eAAA,EAAA,EAAiB,QAAA,EAAA,WAAA,EAAY;AAAA,SAAA,EAChD,CAAA;AAAA,wBAEAA,cAAAA,CAAC,WAAA,EAAA,EACC,QAAA,kBAAAA,eAAC,MAAA,EAAA,EAAK,GAAA,EAAU,QAAA,EAAU,YAAA,CAAa,QAAQ,CAAA,EAAG,UAAA,EAAU,IAAA,EAC1D,0CAAC,UAAA,EAAA,EACE,QAAA,EAAA;AAAA,UAAA,KAAA,oBACCA,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,OAAA;AAAA,cACL,SAAA,EAAU,8FAAA;AAAA,cAET,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,UAGD,qCACCO,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,4BAAAD,eAAA,CAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAA,eAAA,CAAC,UAAO,OAAA,EAAQ,SAAA,EAAU,IAAA,EAAK,QAAA,EAAS,WAAU,QAAA,EAChD,QAAA,EAAA;AAAA,gCAAAP,eAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,OAAA,EAAQ,aAC9C,QAAA,kBAAAA,cAAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,CAAA,EAAE,+hBAAA;AAAA,oBACF,IAAA,EAAK;AAAA;AAAA,iBACP,EACF,CAAA;AAAA,gBACC,IAAI,MAAA,CAAO;AAAA,eAAA,EACd,CAAA;AAAA,8CACC,MAAA,EAAA,EAAO,OAAA,EAAQ,WAAU,IAAA,EAAK,QAAA,EAAS,WAAU,QAAA,EAChD,QAAA,EAAA;AAAA,gCAAAA,eAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,OAAA,EAAQ,aAC9C,QAAA,kBAAAA,cAAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,CAAA,EAAE,6VAAA;AAAA,oBACF,IAAA,EAAK;AAAA;AAAA,iBACP,EACF,CAAA;AAAA,gBACC,IAAI,MAAA,CAAO;AAAA,eAAA,EACd;AAAA,aAAA,EACF,CAAA;AAAA,4BACAA,cAAAA,CAAC,cAAA,EAAA,EAAgB,QAAA,EAAA,GAAA,CAAI,OAAO,SAAA,EAAU;AAAA,WAAA,EACxC,CAAA;AAAA,0CAGD,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAA,cAAAA,CAAC,cAAW,OAAA,EAAQ,gBAAA,EACjB,kBAAQ,KAAA,IAAS,GAAA,CAAI,MAAM,UAAA,EAC9B,CAAA;AAAA,4BACAA,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAG,gBAAA;AAAA,gBACH,IAAA,EAAK,OAAA;AAAA,gBACL,YAAA,EAAa,OAAA;AAAA,gBACb,WAAA,EAAa,MAAA,EAAQ,gBAAA,IAAoB,GAAA,CAAI,KAAA,CAAM,gBAAA;AAAA,gBACnD,QAAA,EAAU,OAAA;AAAA,gBACV,cAAA,EAAc,CAAC,CAAC,MAAA,CAAO,KAAA;AAAA,gBACvB,kBAAA,EAAkB,MAAA,CAAO,KAAA,GAAQ,oBAAA,GAAuB,MAAA;AAAA,gBACvD,GAAG,SAAS,OAAO;AAAA;AAAA,aACtB;AAAA,YACC,MAAA,CAAO,KAAA,oBACNA,cAAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAG,oBAAA,EAAqB,SAAA,EAAU,0BAAA,EAClC,QAAA,EAAA,MAAA,CAAO,KAAA,CAAM,OAAA,EAChB;AAAA,WAAA,EAEJ,CAAA;AAAA,0CAEC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAO,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mBAAA,EACb,QAAA,EAAA;AAAA,8BAAAP,cAAAA,CAAC,cAAW,OAAA,EAAQ,mBAAA,EACjB,kBAAQ,QAAA,IAAY,GAAA,CAAI,MAAM,aAAA,EACjC,CAAA;AAAA,cACC,kCACCA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sDACb,QAAA,EAAA,cAAA,EACH;AAAA,aAAA,EAEJ,CAAA;AAAA,4BACAA,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAG,mBAAA;AAAA,gBACH,IAAA,EAAK,UAAA;AAAA,gBACL,YAAA,EAAa,kBAAA;AAAA,gBACb,WAAA,EAAa,MAAA,EAAQ,mBAAA,IAAuB,GAAA,CAAI,KAAA,CAAM,mBAAA;AAAA,gBACtD,QAAA,EAAU,OAAA;AAAA,gBACV,cAAA,EAAc,CAAC,CAAC,MAAA,CAAO,QAAA;AAAA,gBACvB,kBAAA,EAAkB,MAAA,CAAO,QAAA,GAAW,mBAAA,GAAsB,MAAA;AAAA,gBACzD,GAAG,SAAS,UAAU;AAAA;AAAA,aACzB;AAAA,YACC,MAAA,CAAO,QAAA,oBACNA,cAAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAG,mBAAA,EAAoB,SAAA,EAAU,0BAAA,EACjC,QAAA,EAAA,MAAA,CAAO,QAAA,CAAS,OAAA,EACnB;AAAA,WAAA,EAEJ,CAAA;AAAA,0CAEC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAO,eAAA,CAAC,UAAO,IAAA,EAAK,QAAA,EAAS,QAAA,EAAU,OAAA,EAAS,WAAU,QAAA,EAChD,QAAA,EAAA;AAAA,cAAA,OAAA,oBACCA,eAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAU,2BAAA;AAAA,kBACV,KAAA,EAAM,4BAAA;AAAA,kBACN,IAAA,EAAK,MAAA;AAAA,kBACL,OAAA,EAAQ,WAAA;AAAA,kBACR,aAAA,EAAY,MAAA;AAAA,kBAEZ,QAAA,EAAA;AAAA,oCAAAP,cAAAA;AAAA,sBAAC,QAAA;AAAA,sBAAA;AAAA,wBACC,SAAA,EAAU,YAAA;AAAA,wBACV,EAAA,EAAG,IAAA;AAAA,wBACH,EAAA,EAAG,IAAA;AAAA,wBACH,CAAA,EAAE,IAAA;AAAA,wBACF,MAAA,EAAO,cAAA;AAAA,wBACP,WAAA,EAAY;AAAA;AAAA,qBACd;AAAA,oCACAA,cAAAA;AAAA,sBAAC,MAAA;AAAA,sBAAA;AAAA,wBACC,SAAA,EAAU,YAAA;AAAA,wBACV,IAAA,EAAK,cAAA;AAAA,wBACL,CAAA,EAAE;AAAA;AAAA;AACJ;AAAA;AAAA,eACF;AAAA,cAED;AAAA,aAAA,EACH,CAAA;AAAA,YACC,0BAAUA,cAAAA,CAAC,gBAAA,EAAA,EAAiB,SAAA,EAAU,eAAe,QAAA,EAAA,MAAA,EAAO;AAAA,WAAA,EAC/D;AAAA,SAAA,EACF,GACF,CAAA,EACF;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AACF;AAEA,SAAA,CAAU,WAAA,GAAc,WAAA;AC5NjB,IAAM,UAAA,GAAaI,gBAAAA;AAAA,EACxB,CACE;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,MAAA,EAAQ,UAAA;AAAA,IACR,SAAA,EAAW,eAAA;AAAA,IACX,KAAA,EAAO,aAAA;AAAA,IACP,SAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA,EAAO,SAAA;AAAA,IACP,WAAA,EAAa,eAAA;AAAA,IACb,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY,cAAA;AAAA,IACZ,MAAA;AAAA,IACA,iBAAA,GAAoB,IAAA;AAAA,IACpB;AAAA,KAEF,GAAA,KACG;AACH,IAAA,MAAM,MAAM,WAAA,EAAY;AACxB,IAAA,MAAM,WAAW,WAAA,EAAY;AAE7B,IAAA,MAAM,KAAA,GAAQ,SAAA,KAAc,QAAA,EAAU,WAAA,IAAe,IAAI,MAAA,CAAO,KAAA,CAAA;AAChE,IAAA,MAAM,WAAA,GAAc,eAAA,IAAmB,GAAA,CAAI,MAAA,CAAO,WAAA;AAClD,IAAA,MAAM,UAAA,GAAa,cAAA,IAAkB,GAAA,CAAI,MAAA,CAAO,MAAA;AAEhD,IAAA,MAAM,OACJ,QAAA,KAAa,MAAA,GACX,WACE,QAAA,EAAU,OAAA,mBACZJ,cAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,QAAA,CAAS,SAAS,GAAA,EAAK,QAAA,CAAS,eAAe,EAAA,EAAI,SAAA,EAAU,eAAc,CAAA,GACnF,IAAA;AAEN,IAAA,MAAM,MAAA,GAASF,aAAAA;AAAA,MACb,MAAM,UAAA,IAAc,kBAAA,CAAmB,GAAA,CAAI,UAAU,CAAA;AAAA,MACrD,CAAC,UAAA,EAAY,GAAA,CAAI,UAAU;AAAA,KAC7B;AAEA,IAAA,IAAI,SAAA;AACJ,IAAA,IAAI,QAAA,GAA0B,IAAA;AAC9B,IAAA,IAAI,UAAA,GAAa,KAAA;AAEjB,IAAA,IAAI;AACF,MAAA,MAAM,MAAM,SAAA,EAAU;AACtB,MAAA,SAAA,GAAY,GAAA,CAAI,MAAA;AAChB,MAAA,QAAA,GAAW,GAAA,CAAI,KAAA;AACf,MAAA,UAAA,GAAa,GAAA,CAAI,eAAA;AAAA,IACnB,CAAA,CAAA,MAAQ;AAAA,IAER;AAEA,IAAA,MAAM;AAAA,MACJ,QAAA;AAAA,MACA,YAAA;AAAA,MACA,SAAA,EAAW,EAAE,MAAA,EAAQ,YAAA;AAAa,QAChCO,qBAAAA,CAAqB;AAAA,MACvB,QAAA,EAAUC,kBAAY,MAAe,CAAA;AAAA,MACrC,aAAA,EAAe,EAAE,KAAA,EAAO,EAAA,EAAI,UAAU,EAAA;AAAG,KAC1C,CAAA;AAED,IAAA,MAAM,QAAA,GAAWb,iBAAAA;AAAA,MACf,OAAO,MAAA,KAAwB;AAC7B,QAAA,IAAI,YAAA,EAAc;AAChB,UAAA,MAAM,aAAa,MAAM,CAAA;AAAA,QAC3B,WAAW,SAAA,EAAW;AACpB,UAAA,SAAA,CAAU,MAAM,CAAA;AAAA,QAClB;AAAA,MACF,CAAA;AAAA,MACA,CAAC,cAAc,SAAS;AAAA,KAC1B;AAEA,IAAA,MAAM,OAAA,GAAU,mBAAmB,UAAA,IAAc,YAAA;AACjD,IAAA,MAAM,QAAQ,aAAA,IAAiB,QAAA;AAE/B,IAAA,MAAM,YAAA,GAAeK,cAAQ,MAA2B;AACtD,MAAA,IAAI,CAAC,QAAA,EAAU,YAAA,EAAc,OAAO,SAAS,EAAC;AAC9C,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,gBAAgB,QAAA,CAAS,YAAA;AAAA,QACzB,yBAAA,EAA2B;AAAA,OAC7B;AAAA,IACF,CAAA,EAAG,CAAC,KAAA,EAAO,QAAA,EAAU,YAAY,CAAC,CAAA;AAElC,IAAA,uBACES,eAAAA,CAAC,KAAA,EAAA,EAAI,aAAA,EAAW,IAAA,EAAC,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA,EAAG,KAAA,EAAO,YAAA,EACtE,QAAA,EAAA;AAAA,MAAA,IAAA,oBAAQP,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAmD,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,sBAEhFO,gBAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAA,eAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,aAAA,EACnB,QAAA,EAAA;AAAA,UAAA,KAAA,oBAASP,cAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,WAAW,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,UAC/C,WAAA,oBAAeA,cAAAA,CAAC,eAAA,EAAA,EAAiB,QAAA,EAAA,WAAA,EAAY;AAAA,SAAA,EAChD,CAAA;AAAA,wBAEAA,cAAAA,CAAC,WAAA,EAAA,EACC,QAAA,kBAAAA,eAAC,MAAA,EAAA,EAAK,GAAA,EAAU,QAAA,EAAU,YAAA,CAAa,QAAQ,CAAA,EAAG,UAAA,EAAU,IAAA,EAC1D,QAAA,kBAAAO,gBAAC,UAAA,EAAA,EACE,QAAA,EAAA;AAAA,UAAA,KAAA,oBACCP,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,OAAA;AAAA,cACL,SAAA,EAAU,8FAAA;AAAA,cAET,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,UAGD,iBAAA,oBACCO,eAAAA,CAAAC,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,4BAAAD,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAA,gBAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,WAAU,IAAA,EAAK,QAAA,EAAS,WAAU,QAAA,EAChD,QAAA,EAAA;AAAA,gCAAAP,eAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,OAAA,EAAQ,aAC9C,QAAA,kBAAAA,cAAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,CAAA,EAAE,+hBAAA;AAAA,oBACF,IAAA,EAAK;AAAA;AAAA,iBACP,EACF,CAAA;AAAA,gBACC,IAAI,MAAA,CAAO;AAAA,eAAA,EACd,CAAA;AAAA,8BACAO,gBAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,WAAU,IAAA,EAAK,QAAA,EAAS,WAAU,QAAA,EAChD,QAAA,EAAA;AAAA,gCAAAP,eAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAAA,EAA6B,OAAA,EAAQ,aAC9C,QAAA,kBAAAA,cAAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,CAAA,EAAE,6VAAA;AAAA,oBACF,IAAA,EAAK;AAAA;AAAA,iBACP,EACF,CAAA;AAAA,gBACC,IAAI,MAAA,CAAO;AAAA,eAAA,EACd;AAAA,aAAA,EACF,CAAA;AAAA,4BACAA,cAAAA,CAAC,cAAA,EAAA,EAAgB,QAAA,EAAA,GAAA,CAAI,OAAO,SAAA,EAAU;AAAA,WAAA,EACxC,CAAA;AAAA,0BAGFO,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAP,cAAAA,CAAC,cAAW,OAAA,EAAQ,iBAAA,EACjB,kBAAQ,KAAA,IAAS,GAAA,CAAI,OAAO,UAAA,EAC/B,CAAA;AAAA,4BACAA,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAG,iBAAA;AAAA,gBACH,IAAA,EAAK,OAAA;AAAA,gBACL,YAAA,EAAa,OAAA;AAAA,gBACb,WAAA,EAAa,MAAA,EAAQ,gBAAA,IAAoB,GAAA,CAAI,MAAA,CAAO,gBAAA;AAAA,gBACpD,QAAA,EAAU,OAAA;AAAA,gBACV,cAAA,EAAc,CAAC,CAAC,MAAA,CAAO,KAAA;AAAA,gBACvB,kBAAA,EAAkB,MAAA,CAAO,KAAA,GAAQ,qBAAA,GAAwB,MAAA;AAAA,gBACxD,GAAG,SAAS,OAAO;AAAA;AAAA,aACtB;AAAA,YACC,MAAA,CAAO,KAAA,oBACNA,cAAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAG,qBAAA,EAAsB,SAAA,EAAU,0BAAA,EACnC,QAAA,EAAA,MAAA,CAAO,KAAA,CAAM,OAAA,EAChB;AAAA,WAAA,EAEJ,CAAA;AAAA,0BAEAO,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAP,cAAAA,CAAC,cAAW,OAAA,EAAQ,oBAAA,EACjB,kBAAQ,QAAA,IAAY,GAAA,CAAI,OAAO,aAAA,EAClC,CAAA;AAAA,4BACAA,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAG,oBAAA;AAAA,gBACH,IAAA,EAAK,UAAA;AAAA,gBACL,YAAA,EAAa,cAAA;AAAA,gBACb,WAAA,EAAa,MAAA,EAAQ,mBAAA,IAAuB,GAAA,CAAI,MAAA,CAAO,mBAAA;AAAA,gBACvD,QAAA,EAAU,OAAA;AAAA,gBACV,cAAA,EAAc,CAAC,CAAC,MAAA,CAAO,QAAA;AAAA,gBACvB,kBAAA,EAAkB,MAAA,CAAO,QAAA,GAAW,oBAAA,GAAuB,MAAA;AAAA,gBAC1D,GAAG,SAAS,UAAU;AAAA;AAAA,aACzB;AAAA,YACC,MAAA,CAAO,QAAA,oBACNA,cAAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAG,oBAAA,EAAqB,SAAA,EAAU,0BAAA,EAClC,QAAA,EAAA,MAAA,CAAO,QAAA,CAAS,OAAA,EACnB;AAAA,WAAA,EAEJ,CAAA;AAAA,0BAEAO,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAA,gBAAC,MAAA,EAAA,EAAO,IAAA,EAAK,UAAS,QAAA,EAAU,OAAA,EAAS,WAAU,QAAA,EAChD,QAAA,EAAA;AAAA,cAAA,OAAA,oBACCA,eAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAU,2BAAA;AAAA,kBACV,KAAA,EAAM,4BAAA;AAAA,kBACN,IAAA,EAAK,MAAA;AAAA,kBACL,OAAA,EAAQ,WAAA;AAAA,kBACR,aAAA,EAAY,MAAA;AAAA,kBAEZ,QAAA,EAAA;AAAA,oCAAAP,cAAAA;AAAA,sBAAC,QAAA;AAAA,sBAAA;AAAA,wBACC,SAAA,EAAU,YAAA;AAAA,wBACV,EAAA,EAAG,IAAA;AAAA,wBACH,EAAA,EAAG,IAAA;AAAA,wBACH,CAAA,EAAE,IAAA;AAAA,wBACF,MAAA,EAAO,cAAA;AAAA,wBACP,WAAA,EAAY;AAAA;AAAA,qBACd;AAAA,oCACAA,cAAAA;AAAA,sBAAC,MAAA;AAAA,sBAAA;AAAA,wBACC,SAAA,EAAU,YAAA;AAAA,wBACV,IAAA,EAAK,cAAA;AAAA,wBACL,CAAA,EAAE;AAAA;AAAA;AACJ;AAAA;AAAA,eACF;AAAA,cAED;AAAA,aAAA,EACH,CAAA;AAAA,YACC,0BAAUA,cAAAA,CAAC,gBAAA,EAAA,EAAiB,SAAA,EAAU,eAAe,QAAA,EAAA,MAAA,EAAO;AAAA,WAAA,EAC/D;AAAA,SAAA,EACF,GACF,CAAA,EACF;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AACF;AAEA,UAAA,CAAW,WAAA,GAAc,YAAA;AClLlB,SAAS,iBAAiB,OAAA,EAA2D;AAC1F,EAAA,MAAM,SAAS,eAAA,EAAgB;AAE/B,EAAA,MAAM,UAAUR,sBAAAA,CAAY;AAAA,IAC1B,WAAA,EAAa,CAAC,eAAA,EAAiB,gBAAA,EAAkB,SAAS,CAAA;AAAA,IAC1D,UAAA,EAAY,CAAC,IAAA,KACX,MAAA,CAAO,KAAK,MAAA,CAAO,KAAA,CAAM,sBAAsB,IAAI,CAAA;AAAA,IACrD,SAAA,EAAW,MAAM,OAAA,EAAS,gBAAA,IAAmB;AAAA,IAC7C,SAAS,OAAA,EAAS;AAAA,GACnB,CAAA;AAED,EAAA,MAAM,UAAUA,sBAAAA,CAAY;AAAA,IAC1B,WAAA,EAAa,CAAC,eAAA,EAAiB,gBAAA,EAAkB,SAAS,CAAA;AAAA,IAC1D,UAAA,EAAY,CAAC,IAAA,KACX,MAAA,CAAO,KAAK,MAAA,CAAO,KAAA,CAAM,sBAAsB,IAAI,CAAA;AAAA,IACrD,SAAA,EAAW,MAAM,OAAA,EAAS,gBAAA,IAAmB;AAAA,IAC7C,SAAS,OAAA,EAAS;AAAA,GACnB,CAAA;AAED,EAAA,OAAO,EAAE,SAAS,OAAA,EAAQ;AAC5B;ACpDO,IAAM,kBAAA,GAAqBY,gBAAAA;AAAA,EAChC,CACE;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,MAAA,EAAQ,UAAA;AAAA,IACR,SAAA,EAAW,eAAA;AAAA,IACX,KAAA,EAAO,aAAA;AAAA,IACP,SAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA,EAAO,SAAA;AAAA,IACP,WAAA,EAAa,eAAA;AAAA,IACb,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY,cAAA;AAAA,IACZ,MAAA;AAAA,IACA;AAAA,KAEF,GAAA,KACG;AACH,IAAA,MAAM,MAAM,WAAA,EAAY;AACxB,IAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,IAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIP,eAAS,KAAK,CAAA;AAC5C,IAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAwB,IAAI,CAAA;AAE9D,IAAA,MAAM,KAAA,GAAQ,SAAA,IAAa,GAAA,CAAI,cAAA,CAAe,KAAA;AAC9C,IAAA,MAAM,WAAA,GAAc,eAAA,IAAmB,GAAA,CAAI,cAAA,CAAe,WAAA;AAC1D,IAAA,MAAM,UAAA,GAAa,cAAA,IAAkB,GAAA,CAAI,cAAA,CAAe,MAAA;AAExD,IAAA,MAAM,OACJ,QAAA,KAAa,MAAA,GACX,WACE,QAAA,EAAU,OAAA,mBACZG,cAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,QAAA,CAAS,SAAS,GAAA,EAAK,QAAA,CAAS,eAAe,EAAA,EAAI,SAAA,EAAU,eAAc,CAAA,GACnF,IAAA;AAEN,IAAA,MAAM,MAAA,GAASF,aAAAA;AAAA,MACb,MAAM,UAAA,IAAc,0BAAA,CAA2B,GAAA,CAAI,UAAU,CAAA;AAAA,MAC7D,CAAC,UAAA,EAAY,GAAA,CAAI,UAAU;AAAA,KAC7B;AAEA,IAAA,IAAI,aAAA,GAA4D,IAAA;AAChE,IAAA,IAAI;AACF,MAAA,aAAA,GAAgB,gBAAA,CAAiB;AAAA,QAC/B,gBAAA,EAAkB,MAAM,UAAA,CAAW,IAAI,CAAA;AAAA,QACvC,OAAA,EAAS,CAAC,GAAA,KAAQ,YAAA,CAAa,IAAI,OAAO;AAAA,OAC3C,CAAA;AAAA,IACH,CAAA,CAAA,MAAQ;AAAA,IAER;AAEA,IAAA,MAAM;AAAA,MACJ,QAAA;AAAA,MACA,YAAA;AAAA,MACA,SAAA,EAAW,EAAE,MAAA,EAAQ,YAAA;AAAa,QAChCO,qBAAAA,CAA6B;AAAA,MAC/B,QAAA,EAAUC,kBAAY,MAAe,CAAA;AAAA,MACrC,aAAA,EAAe,EAAE,KAAA,EAAO,EAAA,EAAI,GAAG,aAAA;AAAc,KAC9C,CAAA;AAED,IAAA,MAAM,QAAA,GAAWb,iBAAAA;AAAA,MACf,OAAO,MAAA,KAAgC;AACrC,QAAA,YAAA,CAAa,IAAI,CAAA;AACjB,QAAA,IAAI,YAAA,EAAc;AAChB,UAAA,MAAM,aAAa,MAAM,CAAA;AAAA,QAC3B,WAAW,aAAA,EAAe;AACxB,UAAA,aAAA,CAAc,OAAA,CAAQ,OAAO,MAAM,CAAA;AAAA,QACrC;AAAA,MACF,CAAA;AAAA,MACA,CAAC,cAAc,aAAa;AAAA,KAC9B;AAEA,IAAA,MAAM,OAAA,GAAU,eAAA,IAAmB,aAAA,EAAe,OAAA,CAAQ,SAAA,IAAa,YAAA;AACvE,IAAA,MAAM,QAAQ,aAAA,IAAiB,SAAA;AAE/B,IAAA,MAAM,YAAA,GAAeK,cAAQ,MAA2B;AACtD,MAAA,IAAI,CAAC,QAAA,EAAU,YAAA,EAAc,OAAO,SAAS,EAAC;AAC9C,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,gBAAgB,QAAA,CAAS,YAAA;AAAA,QACzB,yBAAA,EAA2B;AAAA,OAC7B;AAAA,IACF,CAAA,EAAG,CAAC,KAAA,EAAO,QAAA,EAAU,YAAY,CAAC,CAAA;AAElC,IAAA,uBACES,eAAAA,CAAC,KAAA,EAAA,EAAI,aAAA,EAAW,IAAA,EAAC,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA,EAAG,KAAA,EAAO,YAAA,EACtE,QAAA,EAAA;AAAA,MAAA,IAAA,oBAAQP,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAmD,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,sBAEhFO,gBAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAA,eAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,aAAA,EACnB,QAAA,EAAA;AAAA,UAAA,KAAA,oBAASP,cAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,WAAW,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,UAC/C,WAAA,oBAAeA,cAAAA,CAAC,eAAA,EAAA,EAAiB,QAAA,EAAA,WAAA,EAAY;AAAA,SAAA,EAChD,CAAA;AAAA,wBAEAA,cAAAA,CAAC,WAAA,EAAA,EACE,QAAA,EAAA,OAAA,mBACCA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yJAAA,EACZ,QAAA,EAAA,GAAA,CAAI,cAAA,CAAe,cAAA,EACtB,oBAEAA,cAAAA,CAAC,MAAA,EAAA,EAAK,GAAA,EAAU,QAAA,EAAU,YAAA,CAAa,QAAQ,CAAA,EAAG,UAAA,EAAU,IAAA,EAC1D,QAAA,kBAAAO,eAAAA,CAAC,UAAA,EAAA,EACE,QAAA,EAAA;AAAA,UAAA,KAAA,oBACCP,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,OAAA;AAAA,cACL,SAAA,EAAU,8FAAA;AAAA,cAET,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,0BAGFO,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAP,eAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,iBAAA,EACjB,QAAA,EAAA,GAAA,CAAI,eAAe,UAAA,EACtB,CAAA;AAAA,4BACAA,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAG,iBAAA;AAAA,gBACH,IAAA,EAAK,OAAA;AAAA,gBACL,YAAA,EAAa,OAAA;AAAA,gBACb,WAAA,EAAa,IAAI,cAAA,CAAe,gBAAA;AAAA,gBAChC,QAAA,EAAU,OAAA;AAAA,gBACV,cAAA,EAAc,CAAC,CAAC,MAAA,CAAO,KAAA;AAAA,gBACvB,kBAAA,EAAkB,MAAA,CAAO,KAAA,GAAQ,qBAAA,GAAwB,MAAA;AAAA,gBACxD,GAAG,SAAS,OAAO;AAAA;AAAA,aACtB;AAAA,YACC,MAAA,CAAO,KAAA,oBACNA,cAAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAG,qBAAA,EAAsB,SAAA,EAAU,0BAAA,EACnC,QAAA,EAAA,MAAA,CAAO,KAAA,CAAM,OAAA,EAChB;AAAA,WAAA,EAEJ,CAAA;AAAA,0BAEAO,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAA,gBAAC,MAAA,EAAA,EAAO,IAAA,EAAK,UAAS,QAAA,EAAU,OAAA,EAAS,WAAU,QAAA,EAChD,QAAA,EAAA;AAAA,cAAA,OAAA,oBACCA,eAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAU,2BAAA;AAAA,kBACV,KAAA,EAAM,4BAAA;AAAA,kBACN,IAAA,EAAK,MAAA;AAAA,kBACL,OAAA,EAAQ,WAAA;AAAA,kBACR,aAAA,EAAY,MAAA;AAAA,kBAEZ,QAAA,EAAA;AAAA,oCAAAP,cAAAA;AAAA,sBAAC,QAAA;AAAA,sBAAA;AAAA,wBACC,SAAA,EAAU,YAAA;AAAA,wBACV,EAAA,EAAG,IAAA;AAAA,wBACH,EAAA,EAAG,IAAA;AAAA,wBACH,CAAA,EAAE,IAAA;AAAA,wBACF,MAAA,EAAO,cAAA;AAAA,wBACP,WAAA,EAAY;AAAA;AAAA,qBACd;AAAA,oCACAA,cAAAA;AAAA,sBAAC,MAAA;AAAA,sBAAA;AAAA,wBACC,SAAA,EAAU,YAAA;AAAA,wBACV,IAAA,EAAK,cAAA;AAAA,wBACL,CAAA,EAAE;AAAA;AAAA;AACJ;AAAA;AAAA,eACF;AAAA,cAED;AAAA,aAAA,EACH,CAAA;AAAA,YACC,0BACCA,cAAAA,CAAC,gBAAA,EAAA,EAAiB,SAAA,EAAU,eAAe,QAAA,EAAA,MAAA,EAAO;AAAA,WAAA,EAEtD;AAAA,SAAA,EACF,GACF,CAAA,EAEJ;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AACF;AAEA,kBAAA,CAAmB,WAAA,GAAc,oBAAA;AC3K1B,IAAM,iBAAA,GAAoBI,gBAAAA;AAAA,EAC/B,CACE;AAAA,IACE,KAAA;AAAA,IACA,QAAA,EAAU,YAAA;AAAA,IACV,MAAA,EAAQ,UAAA;AAAA,IACR,SAAA,EAAW,eAAA;AAAA,IACX,KAAA,EAAO,aAAA;AAAA,IACP,SAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA,EAAO,SAAA;AAAA,IACP,WAAA,EAAa,eAAA;AAAA,IACb,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY,cAAA;AAAA,IACZ,MAAA;AAAA,IACA;AAAA,KAEF,GAAA,KACG;AACH,IAAA,MAAM,MAAM,WAAA,EAAY;AACxB,IAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,IAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIP,eAAwB,IAAI,CAAA;AAE9D,IAAA,MAAM,KAAA,GAAQ,SAAA,IAAa,GAAA,CAAI,aAAA,CAAc,KAAA;AAC7C,IAAA,MAAM,WAAA,GAAc,eAAA,IAAmB,GAAA,CAAI,aAAA,CAAc,WAAA;AACzD,IAAA,MAAM,UAAA,GAAa,cAAA,IAAkB,GAAA,CAAI,aAAA,CAAc,MAAA;AAEvD,IAAA,MAAM,OACJ,QAAA,KAAa,MAAA,GACX,WACE,QAAA,EAAU,OAAA,mBACZG,cAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,QAAA,CAAS,SAAS,GAAA,EAAK,QAAA,CAAS,eAAe,EAAA,EAAI,SAAA,EAAU,eAAc,CAAA,GACnF,IAAA;AAEN,IAAA,MAAM,MAAA,GAASF,aAAAA;AAAA,MACb,MAAM,UAAA,IAAc,gCAAA,CAAiC,GAAA,CAAI,UAAU,CAAA;AAAA,MACnE,CAAC,UAAA,EAAY,GAAA,CAAI,UAAU;AAAA,KAC7B;AAEA,IAAA,IAAI,aAAA,GAA4D,IAAA;AAChE,IAAA,IAAI;AACF,MAAA,aAAA,GAAgB,gBAAA,CAAiB;AAAA,QAC/B,gBAAA,EAAkB,MAAM,SAAA,IAAY;AAAA,QACpC,OAAA,EAAS,CAAC,GAAA,KAAQ,YAAA,CAAa,IAAI,OAAO;AAAA,OAC3C,CAAA;AAAA,IACH,CAAA,CAAA,MAAQ;AAAA,IAER;AAEA,IAAA,MAAM;AAAA,MACJ,QAAA;AAAA,MACA,YAAA;AAAA,MACA,SAAA,EAAW,EAAE,MAAA,EAAQ,YAAA;AAAa,QAChCO,qBAAAA,CAAmC;AAAA,MACrC,QAAA,EAAUC,kBAAY,MAAe,CAAA;AAAA,MACrC,eAAe,EAAE,KAAA,EAAO,WAAA,EAAa,EAAA,EAAI,iBAAiB,EAAA;AAAG,KAC9D,CAAA;AAED,IAAA,MAAM,QAAA,GAAWb,iBAAAA;AAAA,MACf,OAAO,MAAA,KAAsC;AAC3C,QAAA,YAAA,CAAa,IAAI,CAAA;AACjB,QAAA,IAAI,YAAA,EAAc;AAChB,UAAA,MAAM,YAAA,CAAa,EAAE,KAAA,EAAO,MAAA,CAAO,OAAO,WAAA,EAAa,MAAA,CAAO,aAAa,CAAA;AAAA,QAC7E,WAAW,aAAA,EAAe;AACxB,UAAA,aAAA,CAAc,QAAQ,MAAA,CAAO;AAAA,YAC3B,OAAO,MAAA,CAAO,KAAA;AAAA,YACd,aAAa,MAAA,CAAO;AAAA,WACrB,CAAA;AAAA,QACH;AAAA,MACF,CAAA;AAAA,MACA,CAAC,cAAc,aAAa;AAAA,KAC9B;AAEA,IAAA,MAAM,OAAA,GAAU,eAAA,IAAmB,aAAA,EAAe,OAAA,CAAQ,SAAA,IAAa,YAAA;AACvE,IAAA,MAAM,QAAQ,aAAA,IAAiB,SAAA;AAE/B,IAAA,MAAM,YAAA,GAAeK,cAAQ,MAA2B;AACtD,MAAA,IAAI,CAAC,QAAA,EAAU,YAAA,EAAc,OAAO,SAAS,EAAC;AAC9C,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,gBAAgB,QAAA,CAAS,YAAA;AAAA,QACzB,yBAAA,EAA2B;AAAA,OAC7B;AAAA,IACF,CAAA,EAAG,CAAC,KAAA,EAAO,QAAA,EAAU,YAAY,CAAC,CAAA;AAElC,IAAA,uBACES,eAAAA,CAAC,KAAA,EAAA,EAAI,aAAA,EAAW,IAAA,EAAC,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA,EAAG,KAAA,EAAO,YAAA,EACtE,QAAA,EAAA;AAAA,MAAA,IAAA,oBAAQP,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAmD,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,sBAEhFO,gBAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAA,eAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,aAAA,EACnB,QAAA,EAAA;AAAA,UAAA,KAAA,oBAASP,cAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,WAAW,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,UAC/C,WAAA,oBAAeA,cAAAA,CAAC,eAAA,EAAA,EAAiB,QAAA,EAAA,WAAA,EAAY;AAAA,SAAA,EAChD,CAAA;AAAA,wBAEAA,cAAAA,CAAC,WAAA,EAAA,EACC,QAAA,kBAAAO,eAAAA,CAAC,MAAA,EAAA,EAAK,GAAA,EAAU,QAAA,EAAU,YAAA,CAAa,QAAQ,CAAA,EAAG,UAAA,EAAU,IAAA,EAC1D,QAAA,EAAA;AAAA,0BAAAP,eAAC,OAAA,EAAA,EAAM,IAAA,EAAK,UAAU,GAAG,QAAA,CAAS,OAAO,CAAA,EAAG,CAAA;AAAA,0BAC5CO,gBAAC,UAAA,EAAA,EACE,QAAA,EAAA;AAAA,YAAA,KAAA,oBACCP,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,OAAA;AAAA,gBACL,SAAA,EAAU,8FAAA;AAAA,gBAET,QAAA,EAAA;AAAA;AAAA,aACH;AAAA,4BAGFO,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAP,eAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,uBAAA,EACjB,QAAA,EAAA,GAAA,CAAI,cAAc,gBAAA,EACrB,CAAA;AAAA,8BACAA,cAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,EAAA,EAAG,uBAAA;AAAA,kBACH,IAAA,EAAK,UAAA;AAAA,kBACL,YAAA,EAAa,cAAA;AAAA,kBACb,WAAA,EAAa,IAAI,aAAA,CAAc,sBAAA;AAAA,kBAC/B,QAAA,EAAU,OAAA;AAAA,kBACV,cAAA,EAAc,CAAC,CAAC,MAAA,CAAO,WAAA;AAAA,kBACvB,kBAAA,EAAkB,MAAA,CAAO,WAAA,GAAc,sBAAA,GAAyB,MAAA;AAAA,kBAC/D,GAAG,SAAS,aAAa;AAAA;AAAA,eAC5B;AAAA,cACC,MAAA,CAAO,WAAA,oBACNA,cAAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAG,sBAAA,EAAuB,SAAA,EAAU,0BAAA,EACpC,QAAA,EAAA,MAAA,CAAO,WAAA,CAAY,OAAA,EACtB;AAAA,aAAA,EAEJ,CAAA;AAAA,4BAEAO,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAP,eAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,2BAAA,EACjB,QAAA,EAAA,GAAA,CAAI,cAAc,oBAAA,EACrB,CAAA;AAAA,8BACAA,cAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,EAAA,EAAG,2BAAA;AAAA,kBACH,IAAA,EAAK,UAAA;AAAA,kBACL,YAAA,EAAa,cAAA;AAAA,kBACb,WAAA,EAAa,IAAI,aAAA,CAAc,0BAAA;AAAA,kBAC/B,QAAA,EAAU,OAAA;AAAA,kBACV,cAAA,EAAc,CAAC,CAAC,MAAA,CAAO,eAAA;AAAA,kBACvB,kBAAA,EACE,MAAA,CAAO,eAAA,GAAkB,0BAAA,GAA6B,MAAA;AAAA,kBAEvD,GAAG,SAAS,iBAAiB;AAAA;AAAA,eAChC;AAAA,cACC,MAAA,CAAO,eAAA,oBACNA,cAAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAG,0BAAA,EAA2B,SAAA,EAAU,0BAAA,EACxC,QAAA,EAAA,MAAA,CAAO,eAAA,CAAgB,OAAA,EAC1B;AAAA,aAAA,EAEJ,CAAA;AAAA,4BAEAO,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAA,gBAAC,MAAA,EAAA,EAAO,IAAA,EAAK,UAAS,QAAA,EAAU,OAAA,EAAS,WAAU,QAAA,EAChD,QAAA,EAAA;AAAA,gBAAA,OAAA,oBACCA,eAAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAU,2BAAA;AAAA,oBACV,KAAA,EAAM,4BAAA;AAAA,oBACN,IAAA,EAAK,MAAA;AAAA,oBACL,OAAA,EAAQ,WAAA;AAAA,oBACR,aAAA,EAAY,MAAA;AAAA,oBAEZ,QAAA,EAAA;AAAA,sCAAAP,cAAAA;AAAA,wBAAC,QAAA;AAAA,wBAAA;AAAA,0BACC,SAAA,EAAU,YAAA;AAAA,0BACV,EAAA,EAAG,IAAA;AAAA,0BACH,EAAA,EAAG,IAAA;AAAA,0BACH,CAAA,EAAE,IAAA;AAAA,0BACF,MAAA,EAAO,cAAA;AAAA,0BACP,WAAA,EAAY;AAAA;AAAA,uBACd;AAAA,sCACAA,cAAAA;AAAA,wBAAC,MAAA;AAAA,wBAAA;AAAA,0BACC,SAAA,EAAU,YAAA;AAAA,0BACV,IAAA,EAAK,cAAA;AAAA,0BACL,CAAA,EAAE;AAAA;AAAA;AACJ;AAAA;AAAA,iBACF;AAAA,gBAED;AAAA,eAAA,EACH,CAAA;AAAA,cACC,0BAAUA,cAAAA,CAAC,gBAAA,EAAA,EAAiB,SAAA,EAAU,eAAe,QAAA,EAAA,MAAA,EAAO;AAAA,aAAA,EAC/D;AAAA,WAAA,EACF;AAAA,SAAA,EACF,CAAA,EACF;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AACF;AAEA,iBAAA,CAAkB,WAAA,GAAc,mBAAA;ACnMzB,SAAS,QAAA,CAAS;AAAA,EACvB,IAAA,EAAM,cAAA;AAAA,EACN,YAAA;AAAA,EACA,WAAA,GAAc,OAAA;AAAA,EACd,SAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,iBAAA;AAAA,EACA,cAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACF,CAAA,EAAkB;AAChB,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIH,eAAmB,WAAW,CAAA;AACtE,EAAA,MAAM,MAAM,WAAA,EAAY;AAExB,EAAA,MAAM,cAAc,cAAA,IAAkB,YAAA;AAEtC,EAAA,MAAM,QAAA,GAAWJ,iBAAAA;AAAA,IACf,CAAC,MAAA,KAAqB;AACpB,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,YAAA,CAAa,MAAM,CAAA;AAAA,MACrB,CAAA,MAAO;AACL,QAAA,eAAA,CAAgB,MAAM,CAAA;AAAA,MACxB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,YAAY;AAAA,GACf;AAEA,EAAA,MAAM,OAAA,GAAU,CAAC,IAAA,EAAc,MAAA,qBAC7BO,cAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAS,MAAM,QAAA,CAAS,MAAM,CAAA;AAAA,MAC9B,SAAA,EAAU,6DAAA;AAAA,MAET,QAAA,EAAA;AAAA;AAAA,GACH;AAGF,EAAA,MAAM,WAAA,GAAc,EAAE,SAAA,EAAW,KAAA,EAAO,IAAA,EAAK;AAE7C,EAAA,QAAQ,WAAA;AAAa,IACnB,KAAK,OAAA;AACH,MAAA,uBACEA,cAAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UACE,GAAG,WAAA;AAAA,UACJ,iBAAA;AAAA,UACA,aAAA;AAAA,UACC,GAAG,UAAA;AAAA,UACJ,gBACE,cAAA,GAAiB,MAAA,GAAY,QAAQ,GAAA,CAAI,UAAA,CAAW,gBAAgB,iBAAiB,CAAA;AAAA,UAEvF,MAAA,EACE,cAAA,GAAiB,MAAA,mBACfO,gBAAC,MAAA,EAAA,EACE,QAAA,EAAA;AAAA,YAAA,GAAA,CAAI,UAAA,CAAW,aAAA;AAAA,YAAc,GAAA;AAAA,YAAE,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,UAAA,EAAY,QAAQ;AAAA,WAAA,EAC7E;AAAA;AAAA,OAGN;AAAA,IAGJ,KAAK,QAAA;AACH,MAAA,uBACEP,cAAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACE,GAAG,WAAA;AAAA,UACJ,iBAAA;AAAA,UACC,GAAG,WAAA;AAAA,UACJ,MAAA,EACE,cAAA,GAAiB,MAAA,mBACfO,gBAAC,MAAA,EAAA,EACE,QAAA,EAAA;AAAA,YAAA,GAAA,CAAI,UAAA,CAAW,cAAA;AAAA,YAAe,GAAA;AAAA,YAAE,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,UAAA,EAAY,OAAO;AAAA,WAAA,EAC7E;AAAA;AAAA,OAGN;AAAA,IAGJ,KAAK,iBAAA;AACH,MAAA,uBACEP,cAAAA;AAAA,QAAC,kBAAA;AAAA,QAAA;AAAA,UACE,GAAG,WAAA;AAAA,UACJ,eAAe,aAAA,GAAgB,EAAE,KAAA,EAAO,aAAA,CAAc,OAAM,GAAI,MAAA;AAAA,UAC/D,GAAG,mBAAA;AAAA,UACJ,MAAA,EACE,cAAA,GAAiB,MAAA,mBAAYA,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,WAAA,EAAa,OAAO,CAAA,EAAE;AAAA;AAAA,OAErF;AAAA,IAGJ,KAAK,gBAAA;AACH,MAAA,uBACEA,cAAAA;AAAA,QAAC,iBAAA;AAAA,QAAA;AAAA,UACE,GAAG,WAAA;AAAA,UACJ,OAAO,UAAA,IAAc,EAAA;AAAA,UACpB,GAAG,kBAAA;AAAA,UACJ,MAAA,EACE,cAAA,GAAiB,MAAA,mBAAYA,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,WAAA,EAAa,OAAO,CAAA,EAAE;AAAA;AAAA,OAErF;AAAA;AAGR;AAEA,QAAA,CAAS,WAAA,GAAc,UAAA;AC9GhB,SAAS,WAAA,GAAc;AAC5B,EAAA,MAAM,SAAS,eAAA,EAAgB;AAE/B,EAAA,MAAM,QAAQS,mBAAA,CAAS;AAAA,IACrB,QAAA,EAAU,CAAC,eAAA,EAAiB,UAAA,EAAY,IAAI,CAAA;AAAA,IAC5C,SAAS,MAAM,MAAA,CAAO,GAAA,CAAkB,MAAA,CAAO,MAAM,UAAU,CAAA;AAAA,IAC/D,OAAA,EAAS,CAAC,CAAC,MAAA,CAAO,cAAA;AAAe,GAClC,CAAA;AAED,EAAA,MAAM,eAAA,GAAkBhB,kBAAY,YAAY;AAC9C,IAAA,IAAI,KAAA,CAAM,MAAM,WAAA,EAAa;AAC3B,MAAA,MAAM,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,KAAA,CAAM,KAAK,WAAW,CAAA;AAC1D,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA,EAAG,CAAC,KAAA,CAAM,IAAA,EAAM,WAAW,CAAC,CAAA;AAE5B,EAAA,OAAOK,aAAAA,CAAQ,OAAO,EAAE,GAAG,KAAA,EAAO,iBAAgB,CAAA,EAAI,CAAC,KAAA,EAAO,eAAe,CAAC,CAAA;AAChF;ACZA,IAAM,MAAA,GAAS;AAAA,EACb,IAAA,EAAM;AAAA,IACJ,MAAA,EAAQ,mBAAA;AAAA,IACR,YAAA,EAAc,MAAA;AAAA,IACd,OAAA,EAAS,MAAA;AAAA,IACT,eAAA,EAAiB,SAAA;AAAA,IACjB,UAAA,EACE;AAAA,GACJ;AAAA,EACA,KAAA,EAAO;AAAA,IACL,MAAA,EAAQ,WAAA;AAAA,IACR,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,KAAA,EAAO;AAAA,GACT;AAAA,EACA,WAAA,EAAa;AAAA,IACX,MAAA,EAAQ,YAAA;AAAA,IACR,QAAA,EAAU,MAAA;AAAA,IACV,KAAA,EAAO;AAAA,GACT;AAAA,EACA,aAAA,EAAe;AAAA,IACb,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,GAAA,EAAK,KAAA;AAAA,IACL,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,SAAA,EAAW;AAAA,IACT,IAAA,EAAM,CAAA;AAAA,IACN,OAAA,EAAS,WAAA;AAAA,IACT,MAAA,EAAQ,mBAAA;AAAA,IACR,YAAA,EAAc,KAAA;AAAA,IACd,eAAA,EAAiB,SAAA;AAAA,IACjB,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,WAAA;AAAA,IACZ,KAAA,EAAO,SAAA;AAAA,IACP,OAAA,EAAS;AAAA,GACX;AAAA,EACA,UAAA,EAAY;AAAA,IACV,OAAA,EAAS,WAAA;AAAA,IACT,MAAA,EAAQ,mBAAA;AAAA,IACR,YAAA,EAAc,KAAA;AAAA,IACd,eAAA,EAAiB,SAAA;AAAA,IACjB,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,KAAA,EAAO,SAAA;AAAA,IACP,MAAA,EAAQ,SAAA;AAAA,IACR,UAAA,EAAY,QAAA;AAAA,IACZ,UAAA,EAAY;AAAA,GACd;AAAA,EACA,gBAAA,EAAkB;AAAA,IAChB,eAAA,EAAiB,SAAA;AAAA,IACjB,WAAA,EAAa,SAAA;AAAA,IACb,KAAA,EAAO;AAAA,GACT;AAAA,EACA,QAAA,EAAU;AAAA,IACR,OAAA,EAAS,MAAA;AAAA,IACT,GAAA,EAAK;AAAA,GACP;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,OAAA,EAAS,MAAA;AAAA,IACT,aAAA,EAAe,QAAA;AAAA,IACf,GAAA,EAAK;AAAA,GACP;AAAA,EACA,SAAA,EAAW;AAAA,IACT,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,KAAA,EAAO;AAAA,GACT;AAAA,EACA,SAAA,EAAW;AAAA,IACT,QAAA,EAAU,MAAA;AAAA,IACV,KAAA,EAAO;AAAA,GACT;AAAA,EACA,QAAA,EAAU;AAAA,IACR,eAAA,EAAiB,SAAA;AAAA,IACjB,YAAA,EAAc,KAAA;AAAA,IACd,SAAA,EAAW;AAAA,GACb;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,QAAA,EAAU,MAAA;AAAA,IACV,KAAA,EAAO,SAAA;AAAA,IACP,SAAA,EAAW,QAAA;AAAA,IACX,OAAA,EAAS;AAAA;AAEb,CAAA;AAEO,SAAS,YAAA,CAAa;AAAA,EAC3B,SAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA,GAAQ,gBAAA;AAAA,EACR,WAAA,GAAc;AAChB,CAAA,EAAsB;AACpB,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAU,GAAI,WAAA,EAAY;AACxC,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAID,eAAS,KAAK,CAAA;AAE1C,EAAA,MAAM,UAAA,GAAaJ,kBAAY,YAAY;AACzC,IAAA,IAAI,CAAC,MAAM,WAAA,EAAa;AACxB,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,IAAA,CAAK,WAAW,CAAA;AACpD,MAAA,SAAA,CAAU,IAAI,CAAA;AACd,MAAA,UAAA,CAAW,MAAM,SAAA,CAAU,KAAK,CAAA,EAAG,GAAI,CAAA;AAAA,IACzC,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF,CAAA,EAAG,CAAC,IAAA,EAAM,WAAW,CAAC,CAAA;AAEtB,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,uBACEc,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,KAAA,EAAO,EAAE,GAAG,MAAA,CAAO,IAAA,EAAM,GAAG,KAAA,EAAM,EAC3D,QAAA,EAAA;AAAA,sBAAAP,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,GAAG,MAAA,CAAO,QAAA,EAAU,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS,YAAA,EAAc,OAAM,EAAG,CAAA;AAAA,sBACzFA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,GAAG,MAAA,CAAO,QAAA,EAAU,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS,YAAA,EAAc,QAAO,EAAG,CAAA;AAAA,sBAC1FA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,GAAG,MAAA,CAAO,QAAA,EAAU,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,QAAO,EAAG,CAAA;AAAA,sBACzFO,gBAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,GAAA,EAAK,MAAA,EAAO,EACzC,QAAA,EAAA;AAAA,wBAAAP,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,GAAG,MAAA,CAAO,QAAA,EAAU,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO,EAAG,CAAA;AAAA,wBACnEA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,GAAG,MAAA,CAAO,QAAA,EAAU,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO,EAAG,CAAA;AAAA,wBACnEA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,GAAG,MAAA,CAAO,QAAA,EAAU,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO,EAAG;AAAA,OAAA,EACrE;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,IAAI,CAAC,MAAM,YAAA,EAAc;AACvB,IAAA,uBACEO,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,KAAA,EAAO,EAAE,GAAG,MAAA,CAAO,IAAA,EAAM,GAAG,KAAA,EAAM,EAC3D,QAAA,EAAA;AAAA,sBAAAP,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAO,MAAA,CAAO,OAAQ,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,sBAChCA,cAAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,MAAA,CAAO,cAAc,QAAA,EAAA,iDAAA,EAA+C;AAAA,KAAA,EAChF,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEO,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,KAAA,EAAO,EAAE,GAAG,MAAA,CAAO,IAAA,EAAM,GAAG,KAAA,EAAM,EAC3D,QAAA,EAAA;AAAA,oBAAAP,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAO,MAAA,CAAO,OAAQ,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBAChCA,cAAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,MAAA,CAAO,aAAc,QAAA,EAAA,WAAA,EAAY,CAAA;AAAA,oBAE3CO,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,OAAO,aAAA,EACjB,QAAA,EAAA;AAAA,sBAAAP,cAAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,MAAA;AAAA,UACL,QAAA,EAAQ,IAAA;AAAA,UACR,OAAO,IAAA,CAAK,WAAA;AAAA,UACZ,OAAO,MAAA,CAAO,SAAA;AAAA,UACd,OAAA,EAAS,CAAC,CAAA,KAAO,CAAA,CAAE,OAA4B,MAAA;AAAO;AAAA,OACxD;AAAA,sBACAA,cAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAS,UAAA;AAAA,UACT,KAAA,EAAO;AAAA,YACL,GAAG,MAAA,CAAO,UAAA;AAAA,YACV,GAAI,MAAA,GAAS,MAAA,CAAO,gBAAA,GAAmB;AAAC,WAC1C;AAAA,UAEC,mBAAS,SAAA,GAAY;AAAA;AAAA;AACxB,KAAA,EACF,CAAA;AAAA,oBAEAO,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,OAAO,QAAA,EACjB,QAAA,EAAA;AAAA,sBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,CAAO,IAAA,EACjB,QAAA,EAAA;AAAA,wBAAAP,eAAC,MAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,SAAA,EAAY,eAAK,aAAA,EAAc,CAAA;AAAA,wBACnDA,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,WAAW,QAAA,EAAA,gBAAA,EAAc;AAAA,OAAA,EAC/C,CAAA;AAAA,sBACAO,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,OAAO,IAAA,EACjB,QAAA,EAAA;AAAA,wBAAAP,eAAC,MAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,SAAA,EAAY,eAAK,kBAAA,EAAmB,CAAA;AAAA,wBACxDA,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,WAAW,QAAA,EAAA,WAAA,EAAS;AAAA,OAAA,EAC1C,CAAA;AAAA,sBACAO,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,OAAO,IAAA,EACjB,QAAA,EAAA;AAAA,wBAAAP,eAAC,MAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,SAAA,EAAY,eAAK,gBAAA,EAAiB,CAAA;AAAA,wBACtDA,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,WAAW,QAAA,EAAA,SAAA,EAAO;AAAA,OAAA,EACxC;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AAEA,YAAA,CAAa,WAAA,GAAc,cAAA;ACnLpB,SAAS,gBAAA,GAAmB;AACjC,EAAA,MAAM,SAAS,eAAA,EAAgB;AAC/B,EAAA,OAAOS,mBAAAA,CAAS;AAAA,IACd,QAAA,EAAU,CAAC,eAAA,EAAiB,UAAA,EAAY,OAAO,CAAA;AAAA,IAC/C,SAAS,MAAM,MAAA,CAAO,GAAA,CAAuB,MAAA,CAAO,MAAM,aAAa,CAAA;AAAA,IACvE,OAAA,EAAS,CAAC,CAAC,MAAA,CAAO,cAAA;AAAe,GAClC,CAAA;AACH;ACFA,IAAM,YAAA,GAA8E;AAAA,EAClF,OAAA,EAAS,EAAE,EAAA,EAAI,SAAA,EAAW,OAAO,SAAA,EAAU;AAAA,EAC3C,SAAA,EAAW,EAAE,EAAA,EAAI,SAAA,EAAW,OAAO,SAAA,EAAU;AAAA,EAC7C,OAAA,EAAS,EAAE,EAAA,EAAI,SAAA,EAAW,OAAO,SAAA;AACnC,CAAA;AAEA,IAAM,kBAAA,GAA0F;AAAA,EAC9F,OAAA,EAAS,EAAE,EAAA,EAAI,SAAA,EAAW,OAAO,SAAA,EAAU;AAAA,EAC3C,OAAA,EAAS,EAAE,EAAA,EAAI,SAAA,EAAW,OAAO,SAAA,EAAU;AAAA,EAC3C,OAAA,EAAS,EAAE,EAAA,EAAI,SAAA,EAAW,OAAO,SAAA,EAAU;AAAA,EAC3C,MAAA,EAAQ,EAAE,EAAA,EAAI,SAAA,EAAW,OAAO,SAAA;AAClC,CAAA;AAEA,IAAMC,OAAAA,GAAS;AAAA,EACb,SAAA,EAAW;AAAA,IACT,MAAA,EAAQ,mBAAA;AAAA,IACR,YAAA,EAAc,MAAA;AAAA,IACd,eAAA,EAAiB,SAAA;AAAA,IACjB,QAAA,EAAU,QAAA;AAAA,IACV,UAAA,EACE;AAAA,GACJ;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,OAAA,EAAS,WAAA;AAAA,IACT,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,KAAA,EAAO;AAAA,IACL,MAAA,EAAQ,CAAA;AAAA,IACR,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,KAAA,EAAO;AAAA,GACT;AAAA,EACA,UAAA,EAAY;AAAA,IACV,OAAA,EAAS,MAAA;AAAA,IACT,GAAA,EAAK,MAAA;AAAA,IACL,OAAA,EAAS,WAAA;AAAA,IACT,eAAA,EAAiB,SAAA;AAAA,IACjB,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,WAAA,EAAa;AAAA,IACX,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,MAAA;AAAA,IACV,KAAA,EAAO;AAAA,GACT;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,UAAA,EAAY,GAAA;AAAA,IACZ,KAAA,EAAO;AAAA,GACT;AAAA,EACA,KAAA,EAAO;AAAA,IACL,KAAA,EAAO,MAAA;AAAA,IACP,cAAA,EAAgB,UAAA;AAAA,IAChB,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,EAAA,EAAI;AAAA,IACF,OAAA,EAAS,WAAA;AAAA,IACT,SAAA,EAAW,MAAA;AAAA,IACX,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,KAAA,EAAO,SAAA;AAAA,IACP,aAAA,EAAe,WAAA;AAAA,IACf,aAAA,EAAe,QAAA;AAAA,IACf,YAAA,EAAc,mBAAA;AAAA,IACd,eAAA,EAAiB;AAAA,GACnB;AAAA,EACA,EAAA,EAAI;AAAA,IACF,OAAA,EAAS,WAAA;AAAA,IACT,YAAA,EAAc,mBAAA;AAAA,IACd,KAAA,EAAO;AAAA,GACT;AAAA,EACA,KAAA,EAAO,CAAC,EAAA,EAAY,KAAA,MAAkC;AAAA,IACpD,OAAA,EAAS,cAAA;AAAA,IACT,OAAA,EAAS,SAAA;AAAA,IACT,YAAA,EAAc,QAAA;AAAA,IACd,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,eAAA,EAAiB,EAAA;AAAA,IACjB;AAAA,GACF,CAAA;AAAA,EACA,QAAA,EAAU;AAAA,IACR,eAAA,EAAiB,SAAA;AAAA,IACjB,YAAA,EAAc,KAAA;AAAA,IACd,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,QAAA,EAAU;AAAA,IACR,OAAA,EAAS,MAAA;AAAA,IACT,SAAA,EAAW,QAAA;AAAA,IACX,KAAA,EAAO,SAAA;AAAA,IACP,QAAA,EAAU;AAAA;AAEd,CAAA;AAEA,SAAS,WAAW,OAAA,EAAyB;AAC3C,EAAA,IAAI;AACF,IAAA,OAAO,IAAI,IAAA,CAAK,OAAO,CAAA,CAAE,mBAAmB,KAAA,CAAA,EAAW;AAAA,MACrD,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO,OAAA;AAAA,MACP,GAAA,EAAK;AAAA,KACN,CAAA;AAAA,EACH,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,OAAA;AAAA,EACT;AACF;AAEO,SAAS,aAAA,CAAc,EAAE,SAAA,EAAW,KAAA,EAAM,EAAuB;AACtE,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAU,GAAI,gBAAA,EAAiB;AAE7C,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,uBACEH,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,KAAA,EAAO,EAAE,GAAGG,OAAAA,CAAO,SAAA,EAAW,GAAG,KAAA,EAAM,EAChE,QAAA,EAAA;AAAA,sBAAAV,eAAC,KAAA,EAAA,EAAI,KAAA,EAAOU,QAAO,MAAA,EACjB,QAAA,kBAAAV,eAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,GAAGU,QAAO,QAAA,EAAU,KAAA,EAAO,SAAS,MAAA,EAAQ,MAAA,IAAU,CAAA,EACtE,CAAA;AAAA,sBACAV,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,SAAS,MAAA,EAAO,EAC3B,QAAA,EAAA,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,sBACdA,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UAEC,KAAA,EAAO,EAAE,GAAGU,OAAAA,CAAO,QAAA,EAAU,OAAO,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,YAAA,EAAc,MAAA;AAAO,SAAA;AAAA,QAD5E;AAAA,OAGR,CAAA,EACH;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEH,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,KAAA,EAAO,EAAE,GAAGG,OAAAA,CAAO,SAAA,EAAW,GAAG,KAAA,EAAM,EAChE,QAAA,EAAA;AAAA,oBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAOU,OAAAA,CAAO,MAAA,EACjB,QAAA,kBAAAV,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAOU,OAAAA,CAAO,KAAA,EAAO,QAAA,EAAA,kBAAA,EAAgB,CAAA,EAC3C,CAAA;AAAA,IAEC,wBACCH,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAOG,QAAO,UAAA,EACjB,QAAA,EAAA;AAAA,sBAAAH,eAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAOG,OAAAA,CAAO,WAAA,EAAa,QAAA,EAAA;AAAA,QAAA,SAAA;AAAA,wBACxBV,cAAAA,CAAC,MAAA,EAAA,EAAK,OAAOU,OAAAA,CAAO,YAAA,EAAe,eAAK,aAAA,EAAc;AAAA,OAAA,EAC/D,CAAA;AAAA,sBACAH,eAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAOG,QAAO,WAAA,EAAa,QAAA,EAAA;AAAA,QAAA,aAAA;AAAA,wBACpBV,cAAAA,CAAC,MAAA,EAAA,EAAK,OAAOU,OAAAA,CAAO,YAAA,EAAe,eAAK,kBAAA,EAAmB;AAAA,OAAA,EACxE,CAAA;AAAA,sBACAH,eAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAOG,QAAO,WAAA,EAAa,QAAA,EAAA;AAAA,QAAA,WAAA;AAAA,wBACtBV,cAAAA,CAAC,MAAA,EAAA,EAAK,OAAOU,OAAAA,CAAO,YAAA,EAAe,eAAK,gBAAA,EAAiB;AAAA,OAAA,EACpE,CAAA;AAAA,sBACAH,eAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAOG,QAAO,WAAA,EAAa,QAAA,EAAA;AAAA,QAAA,WAAA;AAAA,wBACtBV,cAAAA,CAAC,MAAA,EAAA,EAAK,OAAOU,OAAAA,CAAO,YAAA,EAAe,eAAK,YAAA,EAAa;AAAA,OAAA,EAChE;AAAA,KAAA,EACF,CAAA;AAAA,oBAGFH,eAAAA,CAAC,OAAA,EAAA,EAAM,KAAA,EAAOG,QAAO,KAAA,EACnB,QAAA,EAAA;AAAA,sBAAAV,cAAAA,CAAC,OAAA,EAAA,EACC,QAAA,kBAAAO,eAAAA,CAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAP,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAOU,OAAAA,CAAO,IAAI,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,wBAC3BV,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAOU,OAAAA,CAAO,IAAI,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,wBAC5BV,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAOU,OAAAA,CAAO,IAAI,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,wBAC5BV,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAOU,OAAAA,CAAO,IAAI,QAAA,EAAA,MAAA,EAAI;AAAA,OAAA,EAC5B,CAAA,EACF,CAAA;AAAA,sBACAH,gBAAC,OAAA,EAAA,EACG,QAAA,EAAA;AAAA,QAAA,CAAA,CAAC,MAAM,SAAA,IAAa,IAAA,CAAK,UAAU,MAAA,KAAW,CAAA,qBAC9CP,cAAAA,CAAC,IAAA,EAAA,EACC,QAAA,kBAAAA,cAAAA,CAAC,QAAG,OAAA,EAAS,CAAA,EAAG,OAAOU,OAAAA,CAAO,QAAA,EAAU,+BAExC,CAAA,EACF,CAAA;AAAA,QAED,IAAA,EAAM,SAAA,CAAU,GAAA,CAAI,CAAC,IAAA,KAAS;AAC7B,UAAA,MAAM,EAAA,GAAK,YAAA,CAAa,IAAA,CAAK,MAAM,CAAA;AACnC,UAAA,MAAM,EAAA,GAAK,kBAAA,CAAmB,IAAA,CAAK,YAAY,CAAA;AAC/C,UAAA,uBACEH,gBAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAP,eAAC,IAAA,EAAA,EAAG,KAAA,EAAOU,OAAAA,CAAO,EAAA,EAAK,eAAK,aAAA,EAAc,CAAA;AAAA,4BAC1CV,cAAAA,CAAC,IAAA,EAAA,EAAG,OAAOU,OAAAA,CAAO,EAAA,EAChB,0BAAAV,cAAAA,CAAC,MAAA,EAAA,EAAK,OAAOU,OAAAA,CAAO,KAAA,CAAM,GAAG,EAAA,EAAI,EAAA,CAAG,KAAK,CAAA,EAAI,QAAA,EAAA,IAAA,CAAK,QAAO,CAAA,EAC3D,CAAA;AAAA,4BACAV,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAOU,OAAAA,CAAO,IAChB,QAAA,kBAAAH,eAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAOG,QAAO,KAAA,CAAM,EAAA,CAAG,EAAA,EAAI,EAAA,CAAG,KAAK,CAAA,EACtC,QAAA,EAAA;AAAA,cAAA,IAAA,CAAK,YAAA;AAAA,cACL,IAAA,CAAK,YAAA,IAAgB,IAAA,IAAQ,CAAA,GAAA,EAAM,KAAK,YAAY,CAAA,CAAA;AAAA,aAAA,EACvD,CAAA,EACF,CAAA;AAAA,4BACAV,eAAC,IAAA,EAAA,EAAG,KAAA,EAAOU,QAAO,EAAA,EAAK,QAAA,EAAA,UAAA,CAAW,IAAA,CAAK,SAAS,CAAA,EAAE;AAAA,WAAA,EAAA,EAX3C,KAAK,EAYd,CAAA;AAAA,QAEJ,CAAC;AAAA,OAAA,EACH;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AAEA,aAAA,CAAc,WAAA,GAAc,eAAA;;;AClMrB,SAAS,YAAA,CAAa,QAAgB,QAAA,EAA0B;AACrE,EAAA,IAAI;AACF,IAAA,OAAO,IAAI,IAAA,CAAK,YAAA,CAAa,KAAA,CAAA,EAAW;MACtC,KAAA,EAAO,UAAA;AACP,MAAA,QAAA;MACA,qBAAA,EAAuB,CAAA;MACvB,qBAAA,EAAuB;KACxB,CAAA,CAAE,MAAA,CAAO,MAAA,GAAS,GAAG,CAAA;EACxB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,GAAG,QAAQ,CAAA,CAAA,EAAA,CAAK,SAAS,GAAA,EAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AACjD,EAAA;AACF;ACbO,SAAS,QAAA,GAAW;AACzB,EAAA,MAAM,SAAS,eAAA,EAAgB;AAC/B,EAAA,OAAOD,mBAAAA,CAAS;AAAA,IACd,QAAA,EAAU,CAAC,eAAA,EAAiB,SAAA,EAAW,OAAO,CAAA;AAAA,IAC9C,SAAS,MAAM,MAAA,CAAO,GAAA,CAAmB,MAAA,CAAO,MAAM,KAAK;AAAA,GAC5D,CAAA;AACH;ACNO,SAAS,eAAA,GAAkB;AAChC,EAAA,MAAM,SAAS,eAAA,EAAgB;AAC/B,EAAA,OAAOA,mBAAAA,CAAS;AAAA,IACd,QAAA,EAAU,CAAC,eAAA,EAAiB,SAAA,EAAW,cAAc,CAAA;AAAA,IACrD,SAAS,MAAM,MAAA,CAAO,GAAA,CAAsB,MAAA,CAAO,MAAM,YAAY,CAAA;AAAA,IACrE,OAAA,EAAS,CAAC,CAAC,MAAA,CAAO,cAAA;AAAe,GAClC,CAAA;AACH;ACQO,SAAS,YAAY,OAAA,EAA8B;AACxD,EAAA,MAAM,SAAS,eAAA,EAAgB;AAE/B,EAAA,MAAM,WAAWjB,sBAAAA,CAAY;AAAA,IAC3B,UAAA,EAAY,CAAC,MAAA,KACX,MAAA,CAAO,KAAuB,MAAA,CAAO,KAAA,CAAM,UAAU,MAAM,CAAA;AAAA,IAC7D,SAAA,EAAW,CAAC,IAAA,KAAS;AAEnB,MAAA,IACE,OAAA,EAAS,iBAAA,KAAsB,KAAA,IAC/B,IAAA,CAAK,GAAA,IACL,KAAK,QAAA,KAAa,iBAAA,IAClB,IAAA,CAAK,QAAA,KAAa,UAAA,EAClB;AACA,QAAA,MAAA,CAAO,QAAA,CAAS,OAAO,IAAA,CAAK,GAAA;AAAA,MAC9B;AACA,MAAA,OAAA,EAAS,YAAY,IAAI,CAAA;AAAA,IAC3B,CAAA;AAAA,IACA,SAAS,OAAA,EAAS;AAAA,GACnB,CAAA;AAED,EAAA,MAAM,QAAA,GAAWC,iBAAAA;AAAA,IACf,CAAC,MAAA,KAA2B;AAC1B,MAAA,QAAA,CAAS,OAAO,MAAM,CAAA;AAAA,IACxB,CAAA;AAAA,IACA,CAAC,QAAQ;AAAA,GACX;AAEA,EAAA,OAAOK,aAAAA,CAAQ,OAAO,EAAE,GAAG,QAAA,EAAU,UAAS,CAAA,EAAI,CAAC,QAAA,EAAU,QAAQ,CAAC,CAAA;AACxE;AC5CO,SAAS,mBAAA,GAAsB;AACpC,EAAA,MAAM,SAAS,eAAA,EAAgB;AAE/B,EAAA,OAAOW,mBAAAA,CAAS;AAAA,IACd,QAAA,EAAU,CAAC,eAAA,EAAiB,SAAA,EAAW,WAAW,CAAA;AAAA,IAClD,SAAS,MAAM,MAAA,CAAO,GAAA,CAAyB,MAAA,CAAO,MAAM,SAAS;AAAA,GACtE,CAAA;AACH;;;ACXA,IAAM,YAAA,GAAe,uCAAA;AACrB,IAAM,gBAAA,GAAmB,GAAG,YAAY,CAAA,kCAAA,CAAA;AACxC,IAAM,eAAA,GAAkB,GAAG,YAAY,CAAA,iCAAA,CAAA;AAEvC,IAAI,WAAA,GAAoC,IAAA;AAExC,SAAS,QAAQ,IAAA,EAAoB;AACnC,EAAA,IAAI,QAAA,CAAS,aAAA,CAAc,CAAA,WAAA,EAAc,IAAI,IAAI,CAAA,EAAG;AACpD,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,aAAA,CAAc,MAAM,CAAA;AAC1C,EAAA,IAAA,CAAK,GAAA,GAAM,YAAA;AACX,EAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,EAAA,QAAA,CAAS,IAAA,CAAK,YAAY,IAAI,CAAA;AAChC;AAEA,SAAS,WAAW,GAAA,EAA4B;AAC9C,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,IAAA,IAAI,QAAA,CAAS,aAAA,CAAc,CAAA,YAAA,EAAe,GAAG,IAAI,CAAA,EAAG;AAClD,MAAA,OAAA,EAAQ;AACR,MAAA;AAAA,IACF;AACA,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA;AAC9C,IAAA,MAAA,CAAO,GAAA,GAAM,GAAA;AACb,IAAA,MAAA,CAAO,MAAA,GAAS,MAAM,OAAA,EAAQ;AAC9B,IAAA,MAAA,CAAO,UAAU,MACf,MAAA;AAAA,MACE,IAAI,KAAA;AAAA,QACF,CAAA,iCAAA,EAAoC,GAAG,CAAA,mDAAA,EACe,YAAY,CAAA,8CAAA;AAAA;AAEpE,KACF;AACF,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,MAAM,CAAA;AAAA,EAClC,CAAC,CAAA;AACH;AAEO,SAAS,eAAA,GAAiC;AAC/C,EAAA,IAAI,aAAa,OAAO,WAAA;AAExB,EAAA,WAAA,GAAA,CAAe,YAAY;AACzB,IAAA,OAAA,CAAQ,gBAAgB,CAAA;AACxB,IAAA,MAAM,WAAW,eAAe,CAAA;AAAA,EAClC,CAAA,GAAG,CAAE,KAAA,CAAM,CAAC,GAAA,KAAQ;AAElB,IAAA,WAAA,GAAc,IAAA;AACd,IAAA,MAAM,GAAA;AAAA,EACR,CAAC,CAAA;AAED,EAAA,OAAO,WAAA;AACT;AChCO,SAAS,sBAAA,CAAuB;AAAA,EACrC,MAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,MAAM,WAAA,GAAcE,aAAO,KAAK,CAAA;AAEhC,EAAAZ,gBAAU,MAAM;AACd,IAAA,IAAI,YAAY,OAAA,EAAS;AACzB,IAAA,WAAA,CAAY,OAAA,GAAU,IAAA;AAEtB,IAAA,eAAA,EAAgB,CACb,KAAK,MAAM;AACV,MAAA,qBAAA,CAAsB,MAAM;AAC1B,QAAA,IAAI,OAAO,MAAA,CAAO,iBAAA,KAAsB,WAAA,EAAa;AACnD,UAAA,OAAA,GAAU,IAAI,KAAA,CAAM,mCAAmC,CAAC,CAAA;AACxD,UAAA;AAAA,QACF;AAEA,QAAA,IAAI,OAAO,iBAAA,CAAkB;AAAA,UAC3B,OAAO,MAAA,CAAO,KAAA;AAAA,UACd,qBAAqB,MAAA,CAAO,mBAAA;AAAA,UAC5B,QAAQ,MAAA,CAAO,MAAA;AAAA,UACf,kBAAkB,MAAA,CAAO,gBAAA;AAAA,UACzB,UAAU,MAAA,CAAO,QAAA;AAAA,UACjB,SAAS,MAAA,CAAO,OAAA;AAAA,UAChB,WAAW,MAAA,CAAO;AAAA,SACnB,CAAA,CAAE,MAAA,CAAO,WAAW,CAAA;AAErB,QAAA,OAAA,IAAU;AAAA,MACZ,CAAC,CAAA;AAAA,IACH,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,GAAA,KAAQ;AACd,MAAA,OAAA,GAAU,IAAI,KAAA,CAAM,GAAA,YAAe,QAAQ,GAAA,CAAI,OAAA,GAAU,6BAA6B,CAAC,CAAA;AAAA,IACzF,CAAC,CAAA;AAAA,EACL,GAAG,CAAC,MAAA,EAAQ,WAAA,EAAa,OAAA,EAAS,OAAO,CAAC,CAAA;AAE1C,EAAA,uBAAOC,cAAAA,CAAC,KAAA,EAAA,EAAI,EAAA,EAAI,WAAA,EAAa,CAAA;AAC/B;ACnDO,SAAS,aAAA,CAAc,EAAE,MAAA,EAAQ,OAAA,EAAQ,EAAuB;AACrE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIH,eAAwB,IAAI,CAAA;AAEtD,EAAA,uBACEG,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,YAAA,EAAc,SAAS,OAAA,EACjC,QAAA,kBAAAO,eAAAA,CAAC,KAAA,EAAA,EAAI,OAAO,SAAA,EAAW,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,iBAAgB,EACvD,QAAA,EAAA;AAAA,oBAAAP,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAO,UAAA,EAAY,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,IAE9B,KAAA,oBAASA,cAAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,EAAE,GAAG,YAAA,EAAc,KAAA,EAAO,SAAA,EAAU,EAAI,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBAElEA,cAAAA;AAAA,MAAC,sBAAA;AAAA,MAAA;AAAA,QACC,MAAA;AAAA,QACA,WAAA,EAAY,kBAAA;AAAA,QACZ,OAAA,EAAS,CAAC,GAAA,KAAQ,QAAA,CAAS,IAAI,OAAO;AAAA;AAAA,KACxC;AAAA,oBAEAA,cAAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,cAAc,QAAA,EAAA,yDAAA,EAAuD,CAAA;AAAA,oBAE/EA,eAAC,QAAA,EAAA,EAAO,IAAA,EAAK,UAAS,KAAA,EAAO,WAAA,EAAa,OAAA,EAAS,OAAA,EAAS,QAAA,EAAA,QAAA,EAE5D;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AAEA,IAAM,YAAA,GAA8B;AAAA,EAClC,QAAA,EAAU,OAAA;AAAA,EACV,KAAA,EAAO,CAAA;AAAA,EACP,eAAA,EAAiB,iBAAA;AAAA,EACjB,OAAA,EAAS,MAAA;AAAA,EACT,UAAA,EAAY,QAAA;AAAA,EACZ,cAAA,EAAgB,QAAA;AAAA,EAChB,MAAA,EAAQ,IAAA;AAAA,EACR,UAAA,EAAY;AACd,CAAA;AAEA,IAAM,SAAA,GAA2B;AAAA,EAC/B,eAAA,EAAiB,MAAA;AAAA,EACjB,YAAA,EAAc,MAAA;AAAA,EACd,OAAA,EAAS,MAAA;AAAA,EACT,QAAA,EAAU,OAAA;AAAA,EACV,KAAA,EAAO,KAAA;AAAA,EACP,SAAA,EAAW;AACb,CAAA;AAEA,IAAM,UAAA,GAA4B;AAAA,EAChC,QAAA,EAAU,MAAA;AAAA,EACV,UAAA,EAAY,GAAA;AAAA,EACZ,KAAA,EAAO,SAAA;AAAA,EACP,MAAA,EAAQ,YAAA;AAAA,EACR,SAAA,EAAW;AACb,CAAA;AAEA,IAAM,YAAA,GAA8B;AAAA,EAClC,QAAA,EAAU,MAAA;AAAA,EACV,KAAA,EAAO,SAAA;AAAA,EACP,SAAA,EAAW,QAAA;AAAA,EACX,MAAA,EAAQ;AACV,CAAA;AAEA,IAAM,YAAA,GAA8B;AAAA,EAClC,QAAA,EAAU,MAAA;AAAA,EACV,KAAA,EAAO,SAAA;AAAA,EACP,SAAA,EAAW,QAAA;AAAA,EACX,MAAA,EAAQ;AACV,CAAA;AAEA,IAAM,WAAA,GAA6B;AAAA,EACjC,OAAA,EAAS,OAAA;AAAA,EACT,KAAA,EAAO,MAAA;AAAA,EACP,SAAA,EAAW,MAAA;AAAA,EACX,OAAA,EAAS,MAAA;AAAA,EACT,MAAA,EAAQ,MAAA;AAAA,EACR,YAAA,EAAc,KAAA;AAAA,EACd,eAAA,EAAiB,SAAA;AAAA,EACjB,KAAA,EAAO,SAAA;AAAA,EACP,QAAA,EAAU,MAAA;AAAA,EACV,UAAA,EAAY,GAAA;AAAA,EACZ,MAAA,EAAQ,SAAA;AAAA,EACR,UAAA,EAAY;AACd,CAAA;ACpFA,IAAMU,OAAAA,GAAS;AAAA,EACb,YAAA,EAAc;AAAA,IACZ,SAAA,EAAW,MAAA;AAAA,IACX,OAAA,EAAS,CAAA;AAAA,IACT,MAAA,EAAQ,YAAA;AAAA,IACR,IAAA,EAAM;AAAA,GACR;AAAA,EACA,WAAA,EAAa;AAAA,IACX,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,GAAA,EAAK,KAAA;AAAA,IACL,OAAA,EAAS,OAAA;AAAA,IACT,QAAA,EAAU,MAAA;AAAA,IACV,KAAA,EAAO;AAAA,GACT;AAAA,EACA,SAAA,EAAW;AAAA,IACT,KAAA,EAAO,SAAA;AAAA,IACP,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,UAAA,EAAY;AAAA;AAEhB,CAAA;AAEO,SAAS,kBAAA,CAAmB,EAAE,QAAA,EAAS,EAA4B;AACxE,EAAA,IAAI,CAAC,QAAA,IAAY,QAAA,CAAS,MAAA,KAAW,GAAG,OAAO,IAAA;AAE/C,EAAA,uBACEV,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAOU,OAAAA,CAAO,cACf,QAAA,EAAA,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,EAAS,sBACtBH,eAAAA,CAAC,IAAA,EAAA,EAAW,KAAA,EAAOG,QAAO,WAAA,EACxB,QAAA,EAAA;AAAA,oBAAAV,eAAC,MAAA,EAAA,EAAK,KAAA,EAAOU,QAAO,SAAA,EAAW,aAAA,EAAY,QAAO,QAAA,EAAA,QAAA,EAElD,CAAA;AAAA,IACC;AAAA,GAAA,EAAA,EAJM,CAKT,CACD,CAAA,EACH,CAAA;AAEJ;AAEA,kBAAA,CAAmB,WAAA,GAAc,oBAAA;AClCjC,IAAM,cAAA,GAA0D;AAAA,EAC9D,OAAA,EAAS,KAAA;AAAA,EACT,MAAA,EAAQ,KAAA;AAAA,EACR,QAAA,EAAU;AACZ,CAAA;AAEA,IAAMA,OAAAA,GAAS;AAAA,EACb,IAAA,EAAM,CAAC,aAAA,MAA2C;AAAA,IAChD,MAAA,EAAQ,gBAAgB,mBAAA,GAAsB,mBAAA;AAAA,IAC9C,YAAA,EAAc,MAAA;AAAA,IACd,OAAA,EAAS,MAAA;AAAA,IACT,eAAA,EAAiB,SAAA;AAAA,IACjB,OAAA,EAAS,MAAA;AAAA,IACT,aAAA,EAAe,QAAA;AAAA,IACf,QAAA,EAAU;AAAA,GACZ,CAAA;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,QAAA,EAAU,UAAA;AAAA,IACV,GAAA,EAAK,OAAA;AAAA,IACL,IAAA,EAAM,KAAA;AAAA,IACN,SAAA,EAAW,kBAAA;AAAA,IACX,eAAA,EAAiB,SAAA;AAAA,IACjB,KAAA,EAAO,SAAA;AAAA,IACP,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,OAAA,EAAS,UAAA;AAAA,IACT,YAAA,EAAc,QAAA;AAAA,IACd,UAAA,EAAY;AAAA,GACd;AAAA,EACA,QAAA,EAAU;AAAA,IACR,MAAA,EAAQ,WAAA;AAAA,IACR,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,KAAA,EAAO;AAAA,GACT;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,MAAA,EAAQ,YAAA;AAAA,IACR,QAAA,EAAU,MAAA;AAAA,IACV,KAAA,EAAO,SAAA;AAAA,IACP,UAAA,EAAY;AAAA,GACd;AAAA,EACA,QAAA,EAAU;AAAA,IACR,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,UAAA;AAAA,IACZ,GAAA,EAAK,KAAA;AAAA,IACL,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,WAAA,EAAa;AAAA,IACX,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,KAAA,EAAO,SAAA;AAAA,IACP,UAAA,EAAY;AAAA,GACd;AAAA,EACA,aAAA,EAAe;AAAA,IACb,QAAA,EAAU,MAAA;AAAA,IACV,KAAA,EAAO;AAAA,GACT;AAAA,EACA,YAAA,EAAc,CAAC,aAAA,MAA2C;AAAA,IACxD,KAAA,EAAO,MAAA;AAAA,IACP,OAAA,EAAS,WAAA;AAAA,IACT,YAAA,EAAc,KAAA;AAAA,IACd,MAAA,EAAQ,gBAAgB,mBAAA,GAAsB,MAAA;AAAA,IAC9C,eAAA,EAAiB,gBAAgB,SAAA,GAAY,SAAA;AAAA,IAC7C,KAAA,EAAO,gBAAgB,SAAA,GAAY,SAAA;AAAA,IACnC,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,MAAA,EAAQ,gBAAgB,SAAA,GAAY,SAAA;AAAA,IACpC,UAAA,EAAY;AAAA,GACd;AACF,CAAA;AAEO,SAAS,WAAA,CAAY;AAAA,EAC1B,IAAA;AAAA,EACA,aAAA;AAAA,EACA,iBAAA;AAAA,EACA;AACF,CAAA,EAAqB;AACnB,EAAA,uBACEH,eAAAA,CAAC,KAAA,EAAA,EAAI,OAAOG,OAAAA,CAAO,IAAA,CAAK,aAAa,CAAA,EAClC,QAAA,EAAA;AAAA,IAAA,aAAA,oBAAiBV,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAOU,OAAAA,CAAO,cAAc,QAAA,EAAA,cAAA,EAAY,CAAA;AAAA,oBAEhEV,cAAAA,CAAC,IAAA,EAAA,EAAG,OAAOU,OAAAA,CAAO,QAAA,EAAW,eAAK,IAAA,EAAK,CAAA;AAAA,IACtC,IAAA,CAAK,+BAAeV,cAAAA,CAAC,OAAE,KAAA,EAAOU,OAAAA,CAAO,eAAA,EAAkB,QAAA,EAAA,IAAA,CAAK,WAAA,EAAY,CAAA;AAAA,oBAEzEH,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAOG,QAAO,QAAA,EACjB,QAAA,EAAA;AAAA,sBAAAV,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAOU,OAAAA,CAAO,WAAA,EAAc,uBAAa,IAAA,CAAK,MAAA,EAAQ,IAAA,CAAK,QAAQ,CAAA,EAAE,CAAA;AAAA,sBAC3EV,eAAC,MAAA,EAAA,EAAK,KAAA,EAAOU,QAAO,aAAA,EAAgB,QAAA,EAAA,cAAA,CAAe,IAAA,CAAK,QAAQ,CAAA,EAAE;AAAA,KAAA,EACpE,CAAA;AAAA,IAEC,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,QAAA,CAAS,MAAA,GAAS,CAAA,oBAAKV,cAAAA,CAAC,kBAAA,EAAA,EAAmB,QAAA,EAAU,IAAA,CAAK,QAAA,EAAU,CAAA;AAAA,oBAE3FA,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,MAAM,QAAA,CAAS,IAAI,CAAA;AAAA,QAC5B,UAAU,aAAA,IAAiB,iBAAA;AAAA,QAC3B,KAAA,EAAO;AAAA,UACL,GAAGU,OAAAA,CAAO,YAAA,CAAa,aAAa,CAAA;AAAA,UACpC,GAAI,qBAAqB,CAAC,aAAA,GAAgB,EAAE,OAAA,EAAS,GAAA,KAAQ;AAAC,SAChE;AAAA,QAEC,0BAAgB,cAAA,GAAiB;AAAA;AAAA;AACpC,GAAA,EACF,CAAA;AAEJ;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA;AC9F1B,IAAMA,OAAAA,GAAS;AAAA,EACb,IAAA,EAAM,CAAC,OAAA,MAAoC;AAAA,IACzC,OAAA,EAAS,MAAA;AAAA,IACT,mBAAA,EAAqB,UAAU,OAAO,CAAA,MAAA,CAAA;AAAA,IACtC,GAAA,EAAK,MAAA;AAAA,IACL,UAAA,EACE;AAAA,GACJ,CAAA;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,MAAA,EAAQ,mBAAA;AAAA,IACR,YAAA,EAAc,MAAA;AAAA,IACd,OAAA,EAAS,MAAA;AAAA,IACT,eAAA,EAAiB;AAAA,GACnB;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,eAAA,EAAiB,SAAA;AAAA,IACjB,YAAA,EAAc,KAAA;AAAA,IACd,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,OAAA,EAAS;AAAA,IACP,QAAA,EAAU,OAAA;AAAA,IACV,GAAA,EAAK,CAAA;AAAA,IACL,IAAA,EAAM,CAAA;AAAA,IACN,KAAA,EAAO,CAAA;AAAA,IACP,MAAA,EAAQ,CAAA;AAAA,IACR,eAAA,EAAiB,oBAAA;AAAA,IACjB,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,cAAA,EAAgB,QAAA;AAAA,IAChB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,KAAA,EAAO;AAAA,IACL,eAAA,EAAiB,SAAA;AAAA,IACjB,YAAA,EAAc,MAAA;AAAA,IACd,OAAA,EAAS,MAAA;AAAA,IACT,QAAA,EAAU,OAAA;AAAA,IACV,KAAA,EAAO,KAAA;AAAA,IACP,SAAA,EAAW,MAAA;AAAA,IACX,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,UAAA,EAAY;AAAA,IACV,MAAA,EAAQ,WAAA;AAAA,IACR,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,KAAA,EAAO;AAAA,GACT;AAAA,EACA,aAAA,EAAe;AAAA,IACb,MAAA,EAAQ,YAAA;AAAA,IACR,QAAA,EAAU,MAAA;AAAA,IACV,KAAA,EAAO;AAAA,GACT;AAAA,EACA,aAAA,EAAe;AAAA,IACb,OAAA,EAAS,MAAA;AAAA,IACT,cAAA,EAAgB,eAAA;AAAA,IAChB,OAAA,EAAS,OAAA;AAAA,IACT,YAAA,EAAc,mBAAA;AAAA,IACd,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,KAAA,EAAO,SAAA;AAAA,IACP,UAAA,EAAY;AAAA,GACd;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,KAAA,EAAO,SAAA;AAAA,IACP,UAAA,EAAY,GAAA;AAAA,IACZ,UAAA,EAAY;AAAA,GACd;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,MAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAS,WAAA;AAAA,IACT,eAAA,EAAiB,SAAA;AAAA,IACjB,YAAA,EAAc,KAAA;AAAA,IACd,QAAA,EAAU,MAAA;AAAA,IACV,KAAA,EAAO,SAAA;AAAA,IACP,UAAA,EAAY;AAAA,GACd;AAAA,EACA,WAAA,EAAa;AAAA,IACX,KAAA,EAAO,MAAA;AAAA,IACP,OAAA,EAAS,WAAA;AAAA,IACT,YAAA,EAAc,KAAA;AAAA,IACd,MAAA,EAAQ,mBAAA;AAAA,IACR,eAAA,EAAiB,SAAA;AAAA,IACjB,KAAA,EAAO,SAAA;AAAA,IACP,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,MAAA,EAAQ,SAAA;AAAA,IACR,SAAA,EAAW;AAAA;AAEf,CAAA;AAMA,IAAM,eAAA,GAAuD;AAAA,EAC3D,MAAA,EAAQ,mBAAA;AAAA,EACR,MAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAU,UAAA;AAAA,EACV,KAAA,EAAO,OAAA;AAAA,EACP,eAAA,EAAiB;AACnB,CAAA;AAEA,IAAM,cAAA,GAAsD;AAAA,EAC1D,MAAA,EAAQ,WAAA;AAAA,EACR,MAAA,EAAQ,iBAAA;AAAA,EACR,QAAA,EAAU,WAAA;AAAA,EACV,KAAA,EAAO,WAAA;AAAA,EACP,eAAA,EAAiB;AACnB,CAAA;AAEA,SAAS,mBAAA,CAAoB;AAAA,EAC3B,SAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,uBACEV,cAAAA,CAAC,KAAA,EAAA,EAAI,OAAOU,OAAAA,CAAO,OAAA,EAAS,SAAS,OAAA,EACnC,QAAA,kBAAAH,gBAAC,KAAA,EAAA,EAAI,KAAA,EAAOG,QAAO,KAAA,EAAO,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,iBAAgB,EAC1D,QAAA,EAAA;AAAA,oBAAAV,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAOU,OAAAA,CAAO,YAAY,QAAA,EAAA,uBAAA,EAAqB,CAAA;AAAA,oBACnDV,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,SAAS,MAAA,EAAQ,aAAA,EAAe,QAAA,EAAU,GAAA,EAAK,OAAM,EAChE,QAAA,EAAA,SAAA,CAAU,GAAA,CAAI,CAAC,sBACdO,eAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QAEC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,MAAM,QAAA,CAAS,CAAA,CAAE,QAAQ,CAAA;AAAA,QAClC,QAAA,EAAU,SAAA;AAAA,QACV,KAAA,EAAO;AAAA,UACL,OAAA,EAAS,MAAA;AAAA,UACT,UAAA,EAAY,QAAA;AAAA,UACZ,KAAA,EAAO,MAAA;AAAA,UACP,OAAA,EAAS,WAAA;AAAA,UACT,MAAA,EAAQ,mBAAA;AAAA,UACR,YAAA,EAAc,KAAA;AAAA,UACd,eAAA,EAAiB,MAAA;AAAA,UACjB,MAAA,EAAQ,YAAY,aAAA,GAAgB,SAAA;AAAA,UACpC,QAAA,EAAU,MAAA;AAAA,UACV,UAAA,EAAY,GAAA;AAAA,UACZ,KAAA,EAAO,SAAA;AAAA,UACP,UAAA,EAAY;AAAA,SACd;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAP,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,WAAA,EAAa,MAAA,EAAO,EAClD,QAAA,EAAA,cAAA,CAAe,CAAA,CAAE,QAAQ,CAAA,EAC5B,CAAA;AAAA,0BACAA,eAAC,MAAA,EAAA,EAAM,QAAA,EAAA,eAAA,CAAgB,EAAE,QAAQ,CAAA,IAAK,EAAE,QAAA,EAAS;AAAA;AAAA,OAAA;AAAA,MAtB5C,CAAA,CAAE;AAAA,KAwBV,CAAA,EACH,CAAA;AAAA,oBACAA,cAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,OAAOU,OAAAA,CAAO,WAAA,EAAa,OAAA,EAAS,OAAA,EAAS,QAAA,EAAA,QAAA,EAEnE;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AAMA,IAAME,eAAAA,GAA0D;AAAA,EAC9D,OAAA,EAAS,KAAA;AAAA,EACT,MAAA,EAAQ,KAAA;AAAA,EACR,QAAA,EAAU;AACZ,CAAA;AAEA,SAAS,aAAA,CAAc,EAAE,IAAA,EAAM,OAAA,EAAQ,EAAoD;AACzF,EAAA,MAAM,cAAc,IAAA,CAAK,WAAA;AAEzB,EAAA,uBACEZ,cAAAA,CAAC,KAAA,EAAA,EAAI,OAAOU,OAAAA,CAAO,OAAA,EAAS,SAAS,OAAA,EACnC,QAAA,kBAAAH,gBAAC,KAAA,EAAA,EAAI,KAAA,EAAOG,QAAO,KAAA,EAAO,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,iBAAgB,EAC1D,QAAA,EAAA;AAAA,oBAAAV,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAOU,OAAAA,CAAO,YAAY,QAAA,EAAA,iBAAA,EAAe,CAAA;AAAA,oBAC7CH,eAAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAOG,QAAO,aAAA,EAAe,QAAA,EAAA;AAAA,MAAA,4CAAA;AAAA,sBACYV,cAAAA,CAAC,QAAA,EAAA,EAAQ,QAAA,EAAA,IAAA,CAAK,MAAM,IAAA,EAAK;AAAA,KAAA,EACrE,CAAA;AAAA,oBAGAO,eAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO;AAAA,UACL,SAAA,EAAW,QAAA;AAAA,UACX,OAAA,EAAS,MAAA;AAAA,UACT,eAAA,EAAiB,SAAA;AAAA,UACjB,YAAA,EAAc,KAAA;AAAA,UACd,YAAA,EAAc;AAAA,SAChB;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAP,cAAAA,CAAC,SAAI,KAAA,EAAO,EAAE,UAAU,MAAA,EAAQ,UAAA,EAAY,KAAK,KAAA,EAAO,SAAA,IACrD,QAAA,EAAA,IAAA,CAAK,IAAA,GAAO,aAAa,IAAA,CAAK,IAAA,CAAK,QAAQ,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,GAAI,EAAA,EACpE,CAAA;AAAA,0BACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,OAAO,EAAE,QAAA,EAAU,QAAQ,KAAA,EAAO,SAAA,IACpC,QAAA,EAAA,IAAA,CAAK,IAAA,EAAM,WACPY,eAAAA,CAAe,IAAA,CAAK,KAAK,QAAuC,CAAA,IAAK,KACtE,EAAA,EACN;AAAA;AAAA;AAAA,KACF;AAAA,IAGC,WAAA,IAAe,MAAA,CAAO,IAAA,CAAK,WAAW,EAAE,MAAA,GAAS,CAAA,oBAChDL,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,YAAA,EAAc,QAAO,EACjC,QAAA,EAAA;AAAA,sBAAAP,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO;AAAA,YACL,QAAA,EAAU,MAAA;AAAA,YACV,UAAA,EAAY,GAAA;AAAA,YACZ,KAAA,EAAO,SAAA;AAAA,YACP,YAAA,EAAc;AAAA,WAChB;AAAA,UACD,QAAA,EAAA;AAAA;AAAA,OAED;AAAA,MACC,MAAA,CAAO,QAAQ,WAAW,CAAA,CACxB,OAAO,CAAC,GAAG,CAAC,CAAA,KAAM,CAAC,EACnB,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,qBACfO,eAAAA,CAAC,KAAA,EAAA,EAAc,KAAA,EAAOG,OAAAA,CAAO,aAAA,EAC3B,QAAA,EAAA;AAAA,wBAAAV,eAAC,MAAA,EAAA,EAAK,KAAA,EAAOU,OAAAA,CAAO,eAAA,EACjB,cAAI,OAAA,CAAQ,UAAA,EAAY,KAAK,CAAA,CAAE,QAAQ,IAAA,EAAM,CAAC,MAAM,CAAA,CAAE,WAAA,EAAa,CAAA,EACtE,CAAA;AAAA,wBACAV,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAOU,OAAAA,CAAO,iBAAkB,QAAA,EAAA,KAAA,EAAM;AAAA,OAAA,EAAA,EAJpC,GAKV,CACD;AAAA,KAAA,EACL,CAAA;AAAA,IAID,IAAA,CAAK,wCACJV,cAAAA,CAAC,SAAI,KAAA,EAAOU,OAAAA,CAAO,YAAA,EAAe,QAAA,EAAA,IAAA,CAAK,oBAAA,EAAqB,CAAA;AAAA,oBAG9DV,cAAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO;AAAA,UACL,QAAA,EAAU,MAAA;AAAA,UACV,KAAA,EAAO,SAAA;AAAA,UACP,MAAA,EAAQ;AAAA,SACV;AAAA,QACD,QAAA,EAAA;AAAA;AAAA,KAGD;AAAA,oBAEAA,cAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,OAAOU,OAAAA,CAAO,WAAA,EAAa,OAAA,EAAS,OAAA,EAAS,QAAA,EAAA,OAAA,EAEnE;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AAMO,SAAS,YAAA,CAAa;AAAA,EAC3B,SAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA,GAAU,CAAA;AAAA,EACV;AACF,CAAA,EAAsB;AACpB,EAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,SAAA,EAAW,YAAA,KAAiB,QAAA,EAAS;AAC1D,EAAA,MAAM,EAAE,IAAA,EAAM,YAAA,EAAa,GAAI,eAAA,EAAgB;AAC/C,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAU,GAAI,mBAAA,EAAoB;AAChD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIb,eAAkC,IAAI,CAAA;AAC9E,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAkC,IAAI,CAAA;AAC9E,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAA6B,IAAI,CAAA;AACvE,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAIA,eAAS,KAAK,CAAA;AAEhE,EAAA,MAAM,EAAE,QAAA,EAAU,SAAA,EAAW,eAAA,KAAoB,WAAA,CAAY;AAAA,IAC3D,iBAAA,EAAmB,IAAA;AAAA,IACnB,SAAA,EAAW,CAAC,IAAA,KAAS;AACnB,MAAA,oBAAA,CAAqB,KAAK,CAAA;AAC1B,MAAA,cAAA,CAAe,IAAI,CAAA;AACnB,MAAA,IAAI,IAAA,CAAK,aAAa,iBAAA,EAAmB;AACvC,QAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,MACtB,CAAA,MAAA,IAAW,IAAA,CAAK,QAAA,KAAa,UAAA,IAAc,KAAK,YAAA,EAAc;AAC5D,QAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,MACtB;AAAA,IACF;AAAA,GACD,CAAA;AAED,EAAA,MAAM,UAAA,GAAa,CAAC,MAAA,EAAgB,QAAA,KAAkC;AACpE,IAAA,QAAA,CAAS,EAAE,MAAA,EAAQ,QAAA,EAAU,UAAA,EAAY,WAAW,CAAA;AAAA,EACtD,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,IAAA,KAAsB;AAC1C,IAAA,IAAI,cAAc,MAAA,KAAW,IAAA,CAAK,EAAA,IAAM,YAAA,CAAa,WAAW,QAAA,EAAU;AAE1E,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,SAAA,IAAa,SAAA,CAAU,MAAA,GAAS,CAAA,EAAG;AACrC,MAAA,cAAA,CAAe,IAAI,CAAA;AACnB,MAAA,oBAAA,CAAqB,IAAI,CAAA;AACzB,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,QAAA,GAAW,SAAA,GAAY,CAAC,CAAA,EAAG,QAAA;AACjC,IAAA,QAAA,CAAS,EAAE,MAAA,EAAQ,IAAA,CAAK,IAAI,QAAA,EAAU,UAAA,EAAY,WAAW,CAAA;AAAA,EAC/D,CAAA;AAEA,EAAA,IAAI,YAAA,EAAc;AAChB,IAAA,uBACEG,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,KAAA,EAAO,EAAE,GAAGU,OAAAA,CAAO,IAAA,CAAK,OAAO,CAAA,EAAG,GAAG,OAAM,EACnE,QAAA,EAAA,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,OAAA,EAAS,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,qBACvCH,eAAAA,CAAC,KAAA,EAAA,EAAY,KAAA,EAAOG,QAAO,YAAA,EACzB,QAAA,EAAA;AAAA,sBAAAV,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO;AAAA,YACL,GAAGU,OAAAA,CAAO,YAAA;AAAA,YACV,KAAA,EAAO,KAAA;AAAA,YACP,MAAA,EAAQ;AAAA;AACV;AAAA,OACF;AAAA,sBACAV,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO;AAAA,YACL,GAAGU,OAAAA,CAAO,YAAA;AAAA,YACV,KAAA,EAAO,KAAA;AAAA,YACP,MAAA,EAAQ;AAAA;AACV;AAAA,OACF;AAAA,sBACAV,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO;AAAA,YACL,GAAGU,OAAAA,CAAO,YAAA;AAAA,YACV,KAAA,EAAO,KAAA;AAAA,YACP,MAAA,EAAQ,MAAA;AAAA,YACR,SAAA,EAAW;AAAA;AACb;AAAA,OACF;AAAA,sBACAV,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,WAAW,MAAA,EAAO,EAC7B,QAAA,EAAA,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,sBACdA,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UAEC,KAAA,EAAO;AAAA,YACL,GAAGU,OAAAA,CAAO,YAAA;AAAA,YACV,KAAA,EAAO,KAAA;AAAA,YACP,MAAA,EAAQ;AAAA;AACV,SAAA;AAAA,QALK;AAAA,OAOR,CAAA,EACH,CAAA;AAAA,sBACAV,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO;AAAA,YACL,GAAGU,OAAAA,CAAO,YAAA;AAAA,YACV,KAAA,EAAO,MAAA;AAAA,YACP,MAAA,EAAQ,MAAA;AAAA,YACR,SAAA,EAAW;AAAA;AACb;AAAA;AACF,KAAA,EAAA,EA1CQ,CA2CV,CACD,CAAA,EACH,CAAA;AAAA,EAEJ;AAEA,EAAA,MAAM,WAAA,GAAc,KAAA,GAAQ,CAAC,GAAG,KAAK,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,SAAA,GAAY,CAAA,CAAE,SAAS,IAAI,EAAC;AAEpF,EAAA,uBACEH,eAAAA,CAAAC,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAR,eAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,KAAA,EAAO,EAAE,GAAGU,OAAAA,CAAO,IAAA,CAAK,OAAO,CAAA,EAAG,GAAG,KAAA,EAAM,EACnE,QAAA,EAAA,WAAA,CAAY,GAAA,CAAI,CAAC,IAAA,KAAS;AACzB,MAAA,MAAM,gBAAgB,YAAA,EAAc,MAAA,KAAW,IAAA,CAAK,EAAA,IAAM,aAAa,MAAA,KAAW,QAAA;AAElF,MAAA,uBACEV,cAAAA;AAAA,QAAC,WAAA;AAAA,QAAA;AAAA,UAEC,IAAA;AAAA,UACA,aAAA;AAAA,UACA,iBAAA,EAAmB,eAAA;AAAA,UACnB,QAAA,EAAU;AAAA,SAAA;AAAA,QAJL,IAAA,CAAK;AAAA,OAKZ;AAAA,IAEJ,CAAC,CAAA,EACH,CAAA;AAAA,IAEC,qBAAqB,WAAA,IAAe,SAAA,IAAa,SAAA,CAAU,MAAA,GAAS,qBACnEA,cAAAA;AAAA,MAAC,mBAAA;AAAA,MAAA;AAAA,QACC,SAAA;AAAA,QACA,SAAA,EAAW,eAAA;AAAA,QACX,UAAU,CAAC,QAAA,KAAa,UAAA,CAAW,WAAA,CAAY,IAAI,QAAQ,CAAA;AAAA,QAC3D,SAAS,MAAM;AACb,UAAA,oBAAA,CAAqB,KAAK,CAAA;AAC1B,UAAA,cAAA,CAAe,IAAI,CAAA;AAAA,QACrB;AAAA;AAAA,KACF;AAAA,IAGD,YAAA,oBAAgBA,cAAAA,CAAC,aAAA,EAAA,EAAc,IAAA,EAAM,cAAc,OAAA,EAAS,MAAM,eAAA,CAAgB,IAAI,CAAA,EAAG,CAAA;AAAA,IAEzF,YAAA,EAAc,gCACbA,cAAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,QAAQ,YAAA,CAAa,YAAA;AAAA,QACrB,OAAA,EAAS,MAAM,eAAA,CAAgB,IAAI;AAAA;AAAA;AACrC,GAAA,EAEJ,CAAA;AAEJ;AAEA,YAAA,CAAa,WAAA,GAAc,cAAA;ACna3B,IAAM,YAAA,GAA8B;AAAA,EAClC,OAAA,EAAS,WAAA;AAAA,EACT,YAAA,EAAc,KAAA;AAAA,EACd,MAAA,EAAQ,MAAA;AAAA,EACR,eAAA,EAAiB,SAAA;AAAA,EACjB,KAAA,EAAO,SAAA;AAAA,EACP,QAAA,EAAU,MAAA;AAAA,EACV,UAAA,EAAY,GAAA;AAAA,EACZ,MAAA,EAAQ,SAAA;AAAA,EACR,UAAA,EAAY,wBAAA;AAAA,EACZ,UAAA,EACE;AACJ,CAAA;AAEO,SAAS,cAAA,CAAe;AAAA,EAC7B,MAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAAwB;AACtB,EAAA,MAAM,EAAE,UAAU,SAAA,EAAU,GAAI,YAAY,EAAE,iBAAA,EAAmB,MAAM,CAAA;AAEvE,EAAA,uBACEA,cAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,SAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACL,GAAG,YAAA;AAAA,QACH,GAAG,KAAA;AAAA,QACH,GAAI,YAAY,EAAE,OAAA,EAAS,KAAK,MAAA,EAAQ,aAAA,KAAkB;AAAC,OAC7D;AAAA,MACA,QAAA,EAAU,SAAA;AAAA,MACV,SAAS,MAAM,QAAA,CAAS,EAAE,MAAA,EAAQ,UAAA,EAAY,WAAW,CAAA;AAAA,MAExD,QAAA,EAAA,SAAA,GAAY,eAAgB,QAAA,IAAY;AAAA;AAAA,GAC3C;AAEJ;AAEA,cAAA,CAAe,WAAA,GAAc,gBAAA;ACnCtB,SAAS,mBAAmB,OAAA,EAAqC;AACtE,EAAA,MAAM,SAAS,eAAA,EAAgB;AAE/B,EAAA,OAAOR,sBAAAA,CAAY;AAAA,IACjB,UAAA,EAAY,CAAC,MAAA,KACX,MAAA,CAAO,KAA4B,MAAA,CAAO,KAAA,CAAM,iBAAiB,MAAM,CAAA;AAAA,IACzE,WAAW,OAAA,EAAS,SAAA;AAAA,IACpB,SAAS,OAAA,EAAS;AAAA,GACnB,CAAA;AACH;ACsBA,IAAMqB,gBAAAA,GAAuD;AAAA,EAC3D,MAAA,EAAQ,mBAAA;AAAA,EACR,MAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAU,UAAA;AAAA,EACV,KAAA,EAAO,OAAA;AAAA,EACP,eAAA,EAAiB;AACnB,CAAA;AAEA,IAAMC,eAAAA,GAAsD;AAAA,EAC1D,MAAA,EAAQ,WAAA;AAAA,EACR,MAAA,EAAQ,iBAAA;AAAA,EACR,QAAA,EAAU,WAAA;AAAA,EACV,KAAA,EAAO,WAAA;AAAA,EACP,eAAA,EAAiB;AACnB,CAAA;AAEA,IAAM,eAAA,GAAkB,kBAAA;AAIjB,SAAS,YAAA,CAAa;AAAA,EAC3B,QAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAA4C;AAC1C,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIjB,eAA0B,MAAM,CAAA;AAC5D,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIA,eAAqC,IAAI,CAAA;AACzF,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAkC,IAAI,CAAA;AAC9E,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIA,eAAsC,IAAI,CAAA;AACtF,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAuB,IAAI,CAAA;AACnE,EAAA,MAAM,wBAAA,GAA2Bc,aAAO,KAAK,CAAA;AAC7C,EAAA,MAAM,EAAE,eAAA,EAAgB,GAAI,SAAA,EAAU;AAGtC,EAAA,MAAM,MAAA,GACJ,OAAO,MAAA,KAAW,WAAA,GACd,IAAI,eAAA,CAAgB,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,GAC1C,IAAI,eAAA,EAAgB;AAC1B,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,GAAA,CAAI,IAAI,CAAA;AAClC,EAAA,MAAM,kBAAA,GAAqB,MAAA,CAAO,GAAA,CAAI,qBAAqB,CAAA;AAC3D,EAAA,MAAM,kBAAA,GAAqB,CAAC,EAAE,UAAA,IAAc,kBAAA,CAAA;AAG5C,EAAA,MAAM;AAAA,IACJ,IAAA,EAAM,YAAA;AAAA,IACN,SAAA,EAAW;AAAA,MACT,mBAAA,EAAoB;AAExB,EAAA,MAAM,SAAA,GAAY,gBAAgB,EAAC;AAEnC,EAAAZ,gBAAU,MAAM;AACd,IAAA,IAAI,kBAAA,EAAoB;AACxB,IAAA,IAAI,gBAAA,EAAkB;AACpB,MAAA,SAAA,CAAU,mBAAmB,CAAA;AAAA,IAC/B,CAAA,MAAA,IAAW,SAAA,CAAU,MAAA,GAAS,CAAA,IAAK,WAAW,mBAAA,EAAqB;AACjE,MAAA,SAAA,CAAU,OAAO,CAAA;AAAA,IACnB;AAAA,EACF,GAAG,CAAC,gBAAA,EAAkB,UAAU,MAAA,EAAQ,MAAA,EAAQ,kBAAkB,CAAC,CAAA;AAGnE,EAAA,MAAM,EAAE,QAAA,EAAU,UAAA,EAAY,SAAA,KAAc,WAAA,CAAY;AAAA,IACtD,iBAAA,EAAmB,KAAA;AAAA,IACnB,SAAA,EAAW,CAAC,IAAA,KAAS;AACnB,MAAA,eAAA,CAAgB,IAAI,CAAA;AAEpB,MAAA,IAAI,IAAA,CAAK,QAAA,KAAa,UAAA,IAAc,IAAA,CAAK,YAAA,EAAc;AACrD,QAAA,iBAAA,CAAkB,KAAK,YAAY,CAAA;AACnC,QAAA,SAAA,CAAU,YAAY,CAAA;AACtB,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,IAAA,CAAK,aAAa,iBAAA,EAAmB;AACvC,QAAA,SAAA,CAAU,SAAS,CAAA;AACnB,QAAA,SAAA,GAAY,IAAI,CAAA;AAChB,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,KAAK,GAAA,EAAK;AACZ,QAAA,SAAA,CAAU,aAAa,CAAA;AACvB,QAAA,MAAA,CAAO,QAAA,CAAS,OAAO,IAAA,CAAK,GAAA;AAC5B,QAAA;AAAA,MACF;AAEA,MAAA,SAAA,CAAU,SAAS,CAAA;AACnB,MAAA,SAAA,GAAY,IAAI,CAAA;AAAA,IAClB,CAAA;AAAA,IACA,OAAA,EAAS,CAAC,GAAA,KAAQ;AAChB,MAAA,eAAA,CAAgB,GAAG,CAAA;AACnB,MAAA,SAAA,CAAU,OAAO,CAAA;AACjB,MAAA,OAAA,GAAU,GAAG,CAAA;AAAA,IACf;AAAA,GACD,CAAA;AAED,EAAA,MAAM,QAAA,GAAWN,iBAAAA;AAAA,IACf,CAAC,QAAA,KAAkC;AACjC,MAAA,mBAAA,CAAoB,QAAQ,CAAA;AAC5B,MAAA,SAAA,CAAU,YAAY,CAAA;AACtB,MAAA,eAAA,CAAgB,IAAI,CAAA;AAEpB,MAAA,MAAM,UAAA,GACJ,OAAO,MAAA,KAAW,WAAA,GAAc,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,GAAI,EAAA;AAEvE,MAAA,UAAA,CAAW;AAAA,QACT,QAAA;AAAA,QACA,MAAA;AAAA,QACA,QAAA;AAAA,QACA,UAAA,EAAY,UAAA;AAAA,QACZ,SAAA,EAAW;AAAA,OACZ,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,UAAA,EAAY,QAAA,EAAU,MAAM;AAAA,GAC/B;AAGA,EAAA,MAAM,EAAE,MAAA,EAAQ,eAAA,EAAgB,GAAI,kBAAA,CAAmB;AAAA,IACrD,SAAA,EAAW,CAAC,IAAA,KAAgC;AAC1C,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,MAAA,KAAW,WAAA,IAAe,KAAK,MAAA,KAAW,mBAAA;AACnE,MAAA,SAAA,CAAU,WAAA,GAAc,YAAY,OAAO,CAAA;AAE3C,MAAA,MAAM,QAAA,GAA6B;AAAA,QACjC,QAAA,EAAU,UAAA;AAAA,QACV,GAAI,gBAAgB;AAAC,OACvB;AACA,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,SAAA,GAAY,QAAQ,CAAA;AAAA,MACtB,CAAA,MAAO;AACL,QAAA,OAAA,GAAU,IAAI,KAAA,CAAM,uBAAuB,CAAC,CAAA;AAAA,MAC9C;AAAA,IACF,CAAA;AAAA,IACA,OAAA,EAAS,CAAC,GAAA,KAAQ;AAChB,MAAA,eAAA,CAAgB,GAAG,CAAA;AACnB,MAAA,SAAA,CAAU,OAAO,CAAA;AACjB,MAAA,OAAA,GAAU,GAAG,CAAA;AAAA,IACf;AAAA,GACD,CAAA;AAED,EAAAM,gBAAU,MAAM;AACd,IAAA,IAAI,CAAC,kBAAA,IAAsB,wBAAA,CAAyB,OAAA,IAAW,eAAA,EAAiB;AAChF,IAAA,wBAAA,CAAyB,OAAA,GAAU,IAAA;AACnC,IAAA,mBAAA,CAAoB,UAAU,CAAA;AAC9B,IAAA,SAAA,CAAU,YAAY,CAAA;AACtB,IAAA,eAAA,CAAgB,EAAE,EAAA,EAAI,MAAA,CAAO,UAAU,CAAA,EAAG,mBAAA,EAAqB,oBAAqB,CAAA;AAAA,EACtF,GAAG,CAAC,kBAAA,EAAoB,iBAAiB,UAAA,EAAY,kBAAA,EAAoB,eAAe,CAAC,CAAA;AAGzF,EAAA,MAAM,cAAA,GAAiBN,iBAAAA;AAAA,IACrB,CAAC,GAAA,KAAe;AACd,MAAA,eAAA,CAAgB,GAAG,CAAA;AACnB,MAAA,SAAA,CAAU,OAAO,CAAA;AACjB,MAAA,OAAA,GAAU,GAAG,CAAA;AAAA,IACf,CAAA;AAAA,IACA,CAAC,OAAO;AAAA,GACV;AAGA,EAAA,MAAM,gBAAA,GAAmBK,cAAQ,MAAM;AACrC,IAAA,OAAO,SAAS,qBAAA,GAAwB;AACtC,MAAA,IAAI,SAAA,CAAU,MAAA,KAAW,CAAA,IAAK,kBAAA,EAAoB,OAAO,IAAA;AAEzD,MAAA,uBACEE,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,SAAS,MAAA,EAAQ,aAAA,EAAe,QAAA,EAAU,GAAA,EAAK,OAAM,EAChE,QAAA,EAAA,SAAA,CAAU,GAAA,CAAI,CAAC,sBACdO,eAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UAEC,IAAA,EAAK,QAAA;AAAA,UACL,KAAA,EAAO;AAAA,YACL,OAAA,EAAS,MAAA;AAAA,YACT,UAAA,EAAY,QAAA;AAAA,YACZ,KAAA,EAAO,MAAA;AAAA,YACP,OAAA,EAAS,WAAA;AAAA,YACT,MAAA,EAAQ,mBAAA;AAAA,YACR,YAAA,EAAc,KAAA;AAAA,YACd,eAAA,EAAiB,gBAAA,KAAqB,CAAA,CAAE,QAAA,GAAW,SAAA,GAAY,MAAA;AAAA,YAC/D,MAAA,EAAQ,YAAY,aAAA,GAAgB,SAAA;AAAA,YACpC,QAAA,EAAU,MAAA;AAAA,YACV,UAAA,EAAY,GAAA;AAAA,YACZ,KAAA,EAAO,SAAA;AAAA,YACP,UAAA,EAAY;AAAA,WACd;AAAA,UACA,OAAA,EAAS,MAAM,QAAA,CAAS,CAAA,CAAE,QAAQ,CAAA;AAAA,UAClC,QAAA,EAAU,SAAA;AAAA,UAEV,QAAA,EAAA;AAAA,4BAAAP,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,WAAA,EAAa,MAAA,EAAO,EAClD,QAAA,EAAAc,eAAAA,CAAe,CAAA,CAAE,QAAQ,CAAA,EAC5B,CAAA;AAAA,4BACAd,cAAAA,CAAC,MAAA,EAAA,EAAM,UAAAa,gBAAAA,CAAgB,CAAA,CAAE,QAAQ,CAAA,EAAE;AAAA;AAAA,SAAA;AAAA,QAtB9B,CAAA,CAAE;AAAA,OAwBV,CAAA,EACH,CAAA;AAAA,IAEJ,CAAA;AAAA,EACF,GAAG,CAAC,SAAA,EAAW,kBAAkB,SAAA,EAAW,QAAA,EAAU,kBAAkB,CAAC,CAAA;AAGzE,EAAA,MAAM,eAAA,GAAkBf,cAAQ,MAAM;AACpC,IAAA,OAAO,SAAS,oBAAA,GAAuB;AACrC,MAAA,IAAI,CAAC,YAAA,IAAgB,YAAA,CAAa,QAAA,KAAa,mBAAmB,OAAO,IAAA;AAEzE,MAAA,MAAM,cAAc,YAAA,CAAa,WAAA;AACjC,MAAA,MAAM,OAAO,YAAA,CAAa,IAAA;AAC1B,MAAA,MAAM,SAAU,YAAA,CAAqB,MAAA;AAIrC,MAAA,MAAM,aAAA,GAAgB,IAAA,GAClB,YAAA,CAAa,IAAA,CAAK,QAAQ,IAAA,CAAK,QAAQ,CAAA,GACvC,MAAA,GACE,YAAA,CAAa,MAAA,CAAO,MAAA,EAAQ,MAAA,CAAO,QAAQ,CAAA,GAC3C,EAAA;AAEN,MAAA,uBACES,gBAAC,KAAA,EAAA,EACE,QAAA,EAAA;AAAA,QAAA,aAAA,oBACCA,eAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO;AAAA,cACL,SAAA,EAAW,QAAA;AAAA,cACX,OAAA,EAAS,MAAA;AAAA,cACT,eAAA,EAAiB,SAAA;AAAA,cACjB,YAAA,EAAc,KAAA;AAAA,cACd,YAAA,EAAc;AAAA,aAChB;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAAP,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,UAAA,EAAY,GAAA,EAAK,KAAA,EAAO,SAAA,EAAU,EAC/D,QAAA,EAAA,aAAA,EACH,CAAA;AAAA,cACC,IAAA,EAAM,IAAA,oBACLA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAU,EAAI,eAAK,IAAA,EAAK,CAAA;AAAA,cAEhE,MAAA,EAAQ,WAAA,oBACPA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAU,EAAI,iBAAO,WAAA,EAAY;AAAA;AAAA;AAAA,SAE5E;AAAA,QAGD,WAAA,IAAe,MAAA,CAAO,IAAA,CAAK,WAAW,EAAE,MAAA,GAAS,CAAA,oBAChDO,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,YAAA,EAAc,QAAO,EACjC,QAAA,EAAA;AAAA,0BAAAP,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO;AAAA,gBACL,QAAA,EAAU,MAAA;AAAA,gBACV,UAAA,EAAY,GAAA;AAAA,gBACZ,KAAA,EAAO,SAAA;AAAA,gBACP,YAAA,EAAc;AAAA,eAChB;AAAA,cACD,QAAA,EAAA;AAAA;AAAA,WAED;AAAA,UACC,OAAO,OAAA,CAAQ,WAAW,EACxB,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA,KAAM,CAAC,EACnB,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,sBACfO,eAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cAEC,KAAA,EAAO;AAAA,gBACL,OAAA,EAAS,MAAA;AAAA,gBACT,cAAA,EAAgB,eAAA;AAAA,gBAChB,OAAA,EAAS,OAAA;AAAA,gBACT,YAAA,EAAc,mBAAA;AAAA,gBACd,QAAA,EAAU;AAAA,eACZ;AAAA,cAEA,QAAA,EAAA;AAAA,gCAAAP,eAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,IACnB,QAAA,EAAA,GAAA,CAAI,OAAA,CAAQ,YAAY,KAAK,CAAA,CAAE,QAAQ,IAAA,EAAM,CAAC,MAAM,CAAA,CAAE,WAAA,EAAa,CAAA,EACtE,CAAA;AAAA,gCACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,OAAO,SAAA,EAAW,UAAA,EAAY,GAAA,EAAI,EAAI,QAAA,EAAA,KAAA,EAAM;AAAA;AAAA,aAAA;AAAA,YAZtD;AAAA,WAcR;AAAA,SAAA,EACL,CAAA;AAAA,QAGD,YAAA,CAAa,wCACZA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO;AAAA,cACL,OAAA,EAAS,MAAA;AAAA,cACT,eAAA,EAAiB,SAAA;AAAA,cACjB,YAAA,EAAc,KAAA;AAAA,cACd,QAAA,EAAU,MAAA;AAAA,cACV,KAAA,EAAO,SAAA;AAAA,cACP,UAAA,EAAY;AAAA,aACd;AAAA,YAEC,QAAA,EAAA,YAAA,CAAa;AAAA;AAAA;AAChB,OAAA,EAEJ,CAAA;AAAA,IAEJ,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAGjB,EAAA,MAAM,cAAA,GAAiBF,cAAQ,MAAM;AACnC,IAAA,OAAO,SAAS,mBAAA,GAAsB;AACpC,MAAA,IAAI,CAAC,cAAA,IAAkB,kBAAA,EAAoB,OAAO,IAAA;AAElD,MAAA,OAAO,sBAAA,CAAuB;AAAA,QAC5B,MAAA,EAAQ,cAAA;AAAA,QACR,WAAA,EAAa,eAAA;AAAA,QACb,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,IACH,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,cAAA,EAAgB,kBAAA,EAAoB,cAAc,CAAC,CAAA;AAEvD,EAAA,OAAO;AAAA,IACL,SAAA;AAAA,IACA,QAAA;AAAA,IACA,gBAAA;AAAA,IACA,eAAA;AAAA,IACA,cAAA;AAAA,IACA,MAAA;AAAA,IACA,gBAAA;AAAA,IACA,YAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA,EAAO;AAAA,GACT;AACF;ACrWA,IAAMe,gBAAAA,GAA2E;AAAA,EAC/E,MAAA,EAAQ,EAAE,EAAA,EAAI,mBAAA,EAAqB,IAAI,iCAAA,EAA4B;AAAA,EACnE,MAAA,EAAQ,EAAE,EAAA,EAAI,QAAA,EAAU,IAAI,QAAA,EAAS;AAAA,EACrC,QAAA,EAAU,EAAE,EAAA,EAAI,UAAA,EAAY,IAAI,UAAA,EAAW;AAAA,EAC3C,KAAA,EAAO,EAAE,EAAA,EAAI,OAAA,EAAS,IAAI,OAAA,EAAQ;AAAA,EAClC,eAAA,EAAiB,EAAE,EAAA,EAAI,eAAA,EAAiB,IAAI,wBAAA;AAC9C,CAAA;AAEA,IAAMC,eAAAA,GAAsD;AAAA,EAC1D,MAAA,EAAQ,WAAA;AAAA,EACR,MAAA,EAAQ,iBAAA;AAAA,EACR,QAAA,EAAU,WAAA;AAAA,EACV,KAAA,EAAO,WAAA;AAAA,EACP,eAAA,EAAiB;AACnB,CAAA;AAIA,IAAM,WAAA,GAA6C;AAAA,EACjD,OAAA,EAAS;AAAA,IACP,QAAA,EAAU,OAAA;AAAA,IACV,KAAA,EAAO,CAAA;AAAA,IACP,eAAA,EAAiB,iBAAA;AAAA,IACjB,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,cAAA,EAAgB,QAAA;AAAA,IAChB,MAAA,EAAQ,IAAA;AAAA,IACR,UAAA,EAAY;AAAA,GACd;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,eAAA,EAAiB,MAAA;AAAA,IACjB,YAAA,EAAc,MAAA;AAAA,IACd,OAAA,EAAS,MAAA;AAAA,IACT,QAAA,EAAU,OAAA;AAAA,IACV,KAAA,EAAO,KAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb;AAAA,EACA,KAAA,EAAO;AAAA,IACL,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,KAAA,EAAO,SAAA;AAAA,IACP,MAAA,EAAQ,YAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,KAAA,EAAO,MAAA;AAAA,IACP,OAAA,EAAS,WAAA;AAAA,IACT,MAAA,EAAQ,mBAAA;AAAA,IACR,YAAA,EAAc,KAAA;AAAA,IACd,eAAA,EAAiB,MAAA;AAAA,IACjB,MAAA,EAAQ,SAAA;AAAA,IACR,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,KAAA,EAAO,SAAA;AAAA,IACP,UAAA,EAAY,wBAAA;AAAA,IACZ,UAAA,EAAY;AAAA,GACd;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,OAAA,EAAS,OAAA;AAAA,IACT,KAAA,EAAO,MAAA;AAAA,IACP,SAAA,EAAW,MAAA;AAAA,IACX,OAAA,EAAS,MAAA;AAAA,IACT,MAAA,EAAQ,MAAA;AAAA,IACR,YAAA,EAAc,KAAA;AAAA,IACd,eAAA,EAAiB,SAAA;AAAA,IACjB,KAAA,EAAO,SAAA;AAAA,IACP,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,MAAA,EAAQ,SAAA;AAAA,IACR,UAAA,EAAY;AAAA;AAEhB,CAAA;AAYO,SAAS,aAAA,CAAc;AAAA,EAC5B,SAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAAuB;AACrB,EAAA,uBACEd,cAAAA,CAAC,KAAA,EAAA,EAAI,OAAO,WAAA,CAAY,OAAA,EAAS,SAAS,OAAA,EACxC,QAAA,kBAAAO,gBAAC,KAAA,EAAA,EAAI,KAAA,EAAO,YAAY,IAAA,EAAM,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,iBAAgB,EAC9D,QAAA,EAAA;AAAA,oBAAAP,eAAC,IAAA,EAAA,EAAG,KAAA,EAAO,YAAY,KAAA,EAAQ,QAAA,EAAA,MAAA,EAAQ,uBAAuB,uBAAA,EAAwB,CAAA;AAAA,oBAEtFA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,aAAA,EAAe,QAAA,EAAU,KAAK,KAAA,EAAM,EAChE,QAAA,EAAA,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM;AACpB,MAAA,MAAM,KAAA,GAAQa,gBAAAA,CAAgB,CAAA,CAAE,QAAQ,CAAA;AACxC,MAAA,uBACEN,eAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UAEC,IAAA,EAAK,QAAA;AAAA,UACL,OAAO,WAAA,CAAY,cAAA;AAAA,UACnB,OAAA,EAAS,MAAM,QAAA,CAAS,CAAA,CAAE,QAAQ,CAAA;AAAA,UAClC,QAAA,EAAU,SAAA;AAAA,UAEV,QAAA,EAAA;AAAA,4BAAAP,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,WAAA,EAAa,MAAA,EAAO,EAClD,QAAA,EAAAc,eAAAA,CAAe,CAAA,CAAE,QAAQ,CAAA,EAC5B,CAAA;AAAA,4BACAd,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,KAAA,EAAO,EAAA,IAAM,EAAE,QAAA,EAAS;AAAA;AAAA,SAAA;AAAA,QAT1B,CAAA,CAAE;AAAA,OAUT;AAAA,IAEJ,CAAC,CAAA,EACH,CAAA;AAAA,oBAEAA,cAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,KAAA,EAAO,WAAA,CAAY,YAAA,EAAc,OAAA,EAAS,OAAA,EAC7D,QAAA,EAAA,MAAA,EAAQ,MAAA,IAAU,QAAA,EACrB;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AAUO,SAASe,cAAAA,CAAc,EAAE,IAAA,EAAM,OAAA,EAAS,QAAO,EAAuB;AAC3E,EAAA,MAAM,cAAc,IAAA,CAAK,WAAA;AACzB,EAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,EAAA,MAAM,SAAU,IAAA,CAAa,MAAA;AAI7B,EAAA,MAAM,aAAA,GAAgB,IAAA,GAClB,YAAA,CAAa,IAAA,CAAK,QAAQ,IAAA,CAAK,QAAQ,CAAA,GACvC,MAAA,GACE,YAAA,CAAa,MAAA,CAAO,MAAA,EAAQ,MAAA,CAAO,QAAQ,CAAA,GAC3C,EAAA;AAEN,EAAA,uBACEf,cAAAA,CAAC,KAAA,EAAA,EAAI,OAAO,WAAA,CAAY,OAAA,EAAS,SAAS,OAAA,EACxC,QAAA,kBAAAO,gBAAC,KAAA,EAAA,EAAI,KAAA,EAAO,YAAY,IAAA,EAAM,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,iBAAgB,EAC9D,QAAA,EAAA;AAAA,oBAAAP,eAAC,IAAA,EAAA,EAAG,KAAA,EAAO,YAAY,KAAA,EAAQ,QAAA,EAAA,MAAA,EAAQ,gBAAgB,eAAA,EAAgB,CAAA;AAAA,IAEtE,iCACCO,eAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO;AAAA,UACL,SAAA,EAAW,QAAA;AAAA,UACX,OAAA,EAAS,MAAA;AAAA,UACT,eAAA,EAAiB,SAAA;AAAA,UACjB,YAAA,EAAc,KAAA;AAAA,UACd,YAAA,EAAc;AAAA,SAChB;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAP,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,UAAA,EAAY,GAAA,EAAK,KAAA,EAAO,SAAA,EAAU,EAC/D,QAAA,EAAA,aAAA,EACH,CAAA;AAAA,UACC,IAAA,EAAM,IAAA,oBAAQA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAU,EAAI,eAAK,IAAA,EAAK,CAAA;AAAA,UAC7E,MAAA,EAAQ,WAAA,oBACPA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAU,EAAI,iBAAO,WAAA,EAAY;AAAA;AAAA;AAAA,KAE5E;AAAA,IAGD,WAAA,IAAe,MAAA,CAAO,IAAA,CAAK,WAAW,EAAE,MAAA,GAAS,CAAA,oBAChDO,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,YAAA,EAAc,QAAO,EACjC,QAAA,EAAA;AAAA,sBAAAP,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO;AAAA,YACL,QAAA,EAAU,MAAA;AAAA,YACV,UAAA,EAAY,GAAA;AAAA,YACZ,KAAA,EAAO,SAAA;AAAA,YACP,YAAA,EAAc;AAAA,WAChB;AAAA,UACD,QAAA,EAAA;AAAA;AAAA,OAED;AAAA,MACC,OAAO,OAAA,CAAQ,WAAW,EACxB,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA,KAAM,CAAC,EACnB,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,sBACfO,eAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UAEC,KAAA,EAAO;AAAA,YACL,OAAA,EAAS,MAAA;AAAA,YACT,cAAA,EAAgB,eAAA;AAAA,YAChB,OAAA,EAAS,OAAA;AAAA,YACT,YAAA,EAAc,mBAAA;AAAA,YACd,QAAA,EAAU;AAAA,WACZ;AAAA,UAEA,QAAA,EAAA;AAAA,4BAAAP,eAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,IACnB,QAAA,EAAA,GAAA,CAAI,OAAA,CAAQ,YAAY,KAAK,CAAA,CAAE,QAAQ,IAAA,EAAM,CAAC,MAAM,CAAA,CAAE,WAAA,EAAa,CAAA,EACtE,CAAA;AAAA,4BACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,OAAO,SAAA,EAAW,UAAA,EAAY,GAAA,EAAI,EAAI,QAAA,EAAA,KAAA,EAAM;AAAA;AAAA,SAAA;AAAA,QAZtD;AAAA,OAcR;AAAA,KAAA,EACL,CAAA;AAAA,IAGD,IAAA,CAAK,wCACJA,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO;AAAA,UACL,OAAA,EAAS,MAAA;AAAA,UACT,eAAA,EAAiB,SAAA;AAAA,UACjB,YAAA,EAAc,KAAA;AAAA,UACd,QAAA,EAAU,MAAA;AAAA,UACV,KAAA,EAAO,SAAA;AAAA,UACP,UAAA,EAAY,GAAA;AAAA,UACZ,YAAA,EAAc;AAAA,SAChB;AAAA,QAEC,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,KACR;AAAA,oBAGFA,cAAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO;AAAA,UACL,QAAA,EAAU,MAAA;AAAA,UACV,KAAA,EAAO,SAAA;AAAA,UACP,MAAA,EAAQ;AAAA,SACV;AAAA,QACD,QAAA,EAAA;AAAA;AAAA,KAGD;AAAA,oBAEAA,cAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,OAAO,WAAA,CAAY,YAAA,EAAc,OAAA,EAAS,OAAA,EAAS,QAAA,EAAA,OAAA,EAEzE;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AC/NO,SAAS,SAAA,CAAU;AAAA,EACxB,MAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAAmB;AACjB,EAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,UAAW,QAAA,EAAkB,OAAA;AACnC,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAIH,eAAS,KAAK,CAAA;AAChE,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAIA,eAAS,KAAK,CAAA;AAEhE,EAAA,MAAM;AAAA,IACJ,SAAA;AAAA,IACA,QAAA;AAAA,IACA,YAAA;AAAA,IACA,cAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,MACE,YAAA,CAAa;AAAA,IACf,QAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA,EAAW,CAAC,IAAA,KAAS;AACnB,MAAA,IAAI,IAAA,CAAK,aAAa,iBAAA,EAAmB;AACvC,QAAA,oBAAA,CAAqB,IAAI,CAAA;AACzB,QAAA,oBAAA,CAAqB,KAAK,CAAA;AAC1B,QAAA;AAAA,MACF;AACA,MAAA,IAAI,IAAA,CAAK,aAAa,UAAA,EAAY;AAChC,QAAA,oBAAA,CAAqB,KAAK,CAAA;AAC1B,QAAA;AAAA,MACF;AACA,MAAA,SAAA,GAAY,IAAI,CAAA;AAAA,IAClB,CAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,IAAI,CAAC,SAAA,IAAa,SAAA,CAAU,MAAA,KAAW,CAAA,EAAG;AAE1C,IAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,MAAA,UAAA,CAAW,SAAA,CAAU,CAAC,CAAA,CAAE,QAAQ,CAAA;AAAA,IAClC,CAAA,MAAO;AACL,MAAA,oBAAA,CAAqB,IAAI,CAAA;AAAA,IAC3B;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CAAC,QAAA,KAAkC;AACpD,IAAA,gBAAA,GAAmB,QAAQ,CAAA;AAC3B,IAAA,QAAA,CAAS,QAAQ,CAAA;AAAA,EACnB,CAAA;AAEA,EAAA,MAAM,aAAa,QAAA,IAAY,SAAA,IAAa,WAAW,mBAAA,IAAwB,CAAC,UAAU,CAAC,QAAA;AAE3F,EAAA,uBACEU,eAAAA,CAAAC,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAR,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,SAAA;AAAA,QACA,KAAA,EAAO;AAAA,UACL,OAAA,EAAS,WAAA;AAAA,UACT,QAAA,EAAU,MAAA;AAAA,UACV,UAAA,EAAY,GAAA;AAAA,UACZ,KAAA,EAAO,MAAA;AAAA,UACP,eAAA,EAAiB,aAAa,SAAA,GAAY,SAAA;AAAA,UAC1C,MAAA,EAAQ,MAAA;AAAA,UACR,YAAA,EAAc,KAAA;AAAA,UACd,MAAA,EAAQ,aAAa,aAAA,GAAgB,SAAA;AAAA,UACrC,UAAA,EAAY,mEAAA;AAAA,UACZ,GAAG;AAAA,SACL;AAAA,QACA,OAAA,EAAS,WAAA;AAAA,QACT,QAAA,EAAU,UAAA;AAAA,QAET,sBAAa,OAAA,EAAS,UAAA,IAAc,eAAA,GAAoB,QAAA,IAAY,SAAS,GAAA,IAAO;AAAA;AAAA,KACvF;AAAA,IAGC,iBAAA,IAAqB,SAAA,IAAa,SAAA,CAAU,MAAA,GAAS,qBACpDA,cAAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,SAAA;AAAA,QACA,SAAA;AAAA,QACA,QAAA,EAAU,UAAA;AAAA,QACV,OAAA,EAAS,MAAM,oBAAA,CAAqB,KAAK,CAAA;AAAA,QACzC,MAAA,EAAQ;AAAA;AAAA,KACV;AAAA,IAID,iBAAA,IAAqB,YAAA,IAAgB,YAAA,CAAa,QAAA,KAAa,qCAC9DA,cAAAA;AAAA,MAACe,cAAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,YAAA;AAAA,QACN,SAAS,MAAM;AACb,UAAA,oBAAA,CAAqB,KAAK,CAAA;AAC1B,UAAA,SAAA,GAAY,YAAY,CAAA;AAAA,QAC1B,CAAA;AAAA,QACA,MAAA,EAAQ;AAAA;AAAA,KACV;AAAA,IAID,WAAW,YAAA,IAAgB,YAAA,EAAc,aAAa,UAAA,IAAc,YAAA,CAAa,gCAChFf,cAAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,QAAQ,YAAA,CAAa,YAAA;AAAA,QACrB,SAAS,MAAM;AACb,UAAA,SAAA,GAAY,YAAY,CAAA;AAAA,QAC1B;AAAA;AAAA;AACF,GAAA,EAEJ,CAAA;AAEJ;AC/HO,SAAS,iBAAiB,EAAE,SAAA,EAAW,OAAA,EAAS,SAAA,EAAW,OAAM,EAA0B;AAChG,EAAA,MAAM,EAAE,QAAQ,SAAA,EAAW,SAAA,EAAW,SAAS,KAAA,EAAO,IAAA,KAAS,kBAAA,CAAmB;AAAA,IAChF,SAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,EAAE,eAAA,EAAgB,GAAI,SAAA,EAAU;AACtC,EAAA,MAAM,MAAA,GAASW,aAAO,KAAK,CAAA;AAE3B,EAAAZ,gBAAU,MAAM;AACd,IAAA,IAAI,MAAA,CAAO,WAAW,eAAA,EAAiB;AACvC,IAAA,MAAA,CAAO,OAAA,GAAU,IAAA;AAEjB,IAAA,MAAM,MAAA,GAAS,IAAI,eAAA,CAAgB,MAAA,CAAO,SAAS,MAAM,CAAA;AACzD,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,GAAA,CAAI,IAAI,CAAA;AAC1B,IAAA,MAAM,mBAAA,GAAsB,MAAA,CAAO,GAAA,CAAI,qBAAqB,CAAA;AAE5D,IAAA,IAAI,CAAC,EAAA,IAAM,CAAC,mBAAA,EAAqB;AAEjC,IAAA,MAAA,CAAO,EAAE,EAAA,EAAI,MAAA,CAAO,EAAE,CAAA,EAAG,qBAAqB,CAAA;AAAA,EAChD,CAAA,EAAG,CAAC,MAAA,EAAQ,eAAe,CAAC,CAAA;AAE5B,EAAA,uBACEQ,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,KAAA,EAAO,EAAE,SAAA,EAAW,QAAA,EAAU,OAAA,EAAS,MAAA,EAAQ,GAAG,KAAA,EAAM,EAChF,QAAA,EAAA;AAAA,IAAA,SAAA,oBACCA,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAP,cAAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,SAAA,EAAW,QAAA,EAAA,4BAAA,EAA0B,CAAA;AAAA,sBAC/CA,cAAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,cAAc,QAAA,EAAA,gCAAA,EAA8B;AAAA,KAAA,EACxD,CAAA;AAAA,IAGD,SAAA,IAAa,IAAA,oBACZA,cAAAA,CAAC,SACE,QAAA,EAAA,IAAA,CAAK,MAAA,KAAW,WAAA,IAAe,IAAA,CAAK,MAAA,KAAW,mBAAA,mBAC9CO,eAAAA,CAAAC,qBAAA,EACE,QAAA,EAAA;AAAA,sBAAAR,cAAAA,CAAC,OAAE,KAAA,EAAO,EAAE,GAAG,SAAA,EAAW,KAAA,EAAO,SAAA,EAAU,EAAG,QAAA,EAAA,oBAAA,EAAkB,CAAA;AAAA,sBAChEA,cAAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,cAAc,QAAA,EAAA,+CAAA,EAA6C;AAAA,KAAA,EACvE,CAAA,mBAEAO,eAAAA,CAAAC,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAR,cAAAA,CAAC,OAAE,KAAA,EAAO,EAAE,GAAG,SAAA,EAAW,KAAA,EAAO,SAAA,EAAU,EAAG,QAAA,EAAA,uBAAA,EAAqB,CAAA;AAAA,sBACnEA,cAAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,cAAc,QAAA,EAAA,oCAAA,EAAkC;AAAA,KAAA,EAC5D,CAAA,EAEJ,CAAA;AAAA,IAGD,OAAA,oBACCO,eAAAA,CAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAP,cAAAA,CAAC,OAAE,KAAA,EAAO,EAAE,GAAG,SAAA,EAAW,KAAA,EAAO,SAAA,EAAU,EAAG,QAAA,EAAA,6BAAA,EAA2B,CAAA;AAAA,sBACzEA,cAAAA,CAAC,GAAA,EAAA,EAAE,OAAO,YAAA,EAAe,QAAA,EAAA,KAAA,EAAO,WAAW,mBAAA,EAAoB;AAAA,KAAA,EACjE;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAEA,IAAM,SAAA,GAA2B;AAAA,EAC/B,QAAA,EAAU,MAAA;AAAA,EACV,UAAA,EAAY,GAAA;AAAA,EACZ,KAAA,EAAO,SAAA;AAAA,EACP,MAAA,EAAQ;AACV,CAAA;AAEA,IAAM,YAAA,GAA8B;AAAA,EAClC,QAAA,EAAU,MAAA;AAAA,EACV,KAAA,EAAO,SAAA;AAAA,EACP,MAAA,EAAQ;AACV,CAAA;ACtEA,IAAM,YAAA,GAGF;AAAA,EACF,QAAQ,EAAE,EAAA,EAAI,WAAW,KAAA,EAAO,SAAA,EAAW,OAAO,QAAA,EAAS;AAAA,EAC3D,UAAU,EAAE,EAAA,EAAI,WAAW,KAAA,EAAO,SAAA,EAAW,OAAO,OAAA,EAAQ;AAAA,EAC5D,UAAU,EAAE,EAAA,EAAI,WAAW,KAAA,EAAO,SAAA,EAAW,OAAO,UAAA,EAAW;AAAA,EAC/D,UAAU,EAAE,EAAA,EAAI,WAAW,KAAA,EAAO,SAAA,EAAW,OAAO,UAAA,EAAW;AAAA,EAC/D,QAAQ,EAAE,EAAA,EAAI,WAAW,KAAA,EAAO,SAAA,EAAW,OAAO,QAAA,EAAS;AAAA,EAC3D,YAAY,EAAE,EAAA,EAAI,WAAW,KAAA,EAAO,SAAA,EAAW,OAAO,YAAA;AACxD,CAAA;AAEA,IAAMU,OAAAA,GAAS;AAAA,EACb,KAAA,EAAO;AAAA,IACL,OAAA,EAAS,aAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,GAAA,EAAK,KAAA;AAAA,IACL,OAAA,EAAS,UAAA;AAAA,IACT,YAAA,EAAc,QAAA;AAAA,IACd,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,UAAA,EACE;AAAA,GACJ;AAAA,EACA,GAAA,EAAK,CAAC,KAAA,MAAkC;AAAA,IACtC,KAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,YAAA,EAAc,KAAA;AAAA,IACd,eAAA,EAAiB,KAAA;AAAA,IACjB,UAAA,EAAY;AAAA,GACd,CAAA;AAAA,EACA,QAAA,EAAU;AAAA,IACR,OAAA,EAAS,cAAA;AAAA,IACT,KAAA,EAAO,OAAA;AAAA,IACP,MAAA,EAAQ,MAAA;AAAA,IACR,YAAA,EAAc,QAAA;AAAA,IACd,eAAA,EAAiB;AAAA;AAErB,CAAA;AAEO,SAAS,iBAAA,CAAkB,EAAE,SAAA,EAAW,KAAA,EAAM,EAA2B;AAC9E,EAAA,MAAM,EAAE,IAAA,EAAM,YAAA,EAAc,SAAA,KAAc,eAAA,EAAgB;AAE1D,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,uBAAOV,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAsB,KAAA,EAAO,EAAE,GAAGU,OAAAA,CAAO,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,CAAA;AAAA,EAC9E;AAEA,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,uBACEV,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA;AAAA,QACA,KAAA,EAAO;AAAA,UACL,GAAGU,OAAAA,CAAO,KAAA;AAAA,UACV,eAAA,EAAiB,SAAA;AAAA,UACjB,KAAA,EAAO,SAAA;AAAA,UACP,GAAG;AAAA,SACL;AAAA,QACD,QAAA,EAAA;AAAA;AAAA,KAED;AAAA,EAEJ;AAEA,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,YAAA,CAAa,MAAM,CAAA;AAE/C,EAAA,uBACEH,eAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACL,GAAGG,OAAAA,CAAO,KAAA;AAAA,QACV,iBAAiB,MAAA,CAAO,EAAA;AAAA,QACxB,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,GAAG;AAAA,OACL;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAV,cAAAA,CAAC,UAAK,KAAA,EAAOU,OAAAA,CAAO,IAAI,MAAA,CAAO,KAAK,CAAA,EAAG,aAAA,EAAY,MAAA,EAAO,CAAA;AAAA,QACzD,aAAa,IAAA,CAAK,IAAA;AAAA,QAAK,QAAA;AAAA,QAAW,MAAA,CAAO;AAAA;AAAA;AAAA,GAC5C;AAEJ;AAEA,iBAAA,CAAkB,WAAA,GAAc,mBAAA;ACtFzB,SAAS,WAAA,GAAc;AAC5B,EAAA,MAAM,SAAS,eAAA,EAAgB;AAC/B,EAAA,OAAOD,mBAAAA,CAAS;AAAA,IACd,QAAA,EAAU,CAAC,eAAA,EAAiB,SAAA,EAAW,UAAU,CAAA;AAAA,IACjD,SAAS,MAAM,MAAA,CAAO,GAAA,CAAsB,MAAA,CAAO,MAAM,QAAQ,CAAA;AAAA,IACjE,OAAA,EAAS,CAAC,CAAC,MAAA,CAAO,cAAA;AAAe,GAClC,CAAA;AACH;ACDA,IAAMO,aAAAA,GAAgF;AAAA,EACpF,OAAA,EAAS,EAAE,EAAA,EAAI,SAAA,EAAW,OAAO,SAAA,EAAU;AAAA,EAC3C,IAAA,EAAM,EAAE,EAAA,EAAI,SAAA,EAAW,OAAO,SAAA,EAAU;AAAA,EACxC,MAAA,EAAQ,EAAE,EAAA,EAAI,SAAA,EAAW,OAAO,SAAA,EAAU;AAAA,EAC1C,QAAA,EAAU,EAAE,EAAA,EAAI,SAAA,EAAW,OAAO,SAAA;AACpC,CAAA;AAEA,SAASC,YAAW,OAAA,EAAyB;AAC3C,EAAA,IAAI;AACF,IAAA,OAAO,IAAI,IAAA,CAAK,OAAO,CAAA,CAAE,mBAAmB,KAAA,CAAA,EAAW;AAAA,MACrD,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO,OAAA;AAAA,MACP,GAAA,EAAK;AAAA,KACN,CAAA;AAAA,EACH,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,OAAA;AAAA,EACT;AACF;AAEA,IAAMP,OAAAA,GAAS;AAAA,EACb,SAAA,EAAW;AAAA,IACT,MAAA,EAAQ,mBAAA;AAAA,IACR,YAAA,EAAc,MAAA;AAAA,IACd,eAAA,EAAiB,SAAA;AAAA,IACjB,QAAA,EAAU,QAAA;AAAA,IACV,UAAA,EACE;AAAA,GACJ;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,OAAA,EAAS,WAAA;AAAA,IACT,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,KAAA,EAAO;AAAA,IACL,MAAA,EAAQ,CAAA;AAAA,IACR,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,KAAA,EAAO;AAAA,GACT;AAAA,EACA,KAAA,EAAO;AAAA,IACL,KAAA,EAAO,MAAA;AAAA,IACP,cAAA,EAAgB,UAAA;AAAA,IAChB,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,EAAA,EAAI;AAAA,IACF,OAAA,EAAS,WAAA;AAAA,IACT,SAAA,EAAW,MAAA;AAAA,IACX,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,KAAA,EAAO,SAAA;AAAA,IACP,aAAA,EAAe,WAAA;AAAA,IACf,aAAA,EAAe,QAAA;AAAA,IACf,YAAA,EAAc,mBAAA;AAAA,IACd,eAAA,EAAiB;AAAA,GACnB;AAAA,EACA,EAAA,EAAI;AAAA,IACF,OAAA,EAAS,WAAA;AAAA,IACT,YAAA,EAAc,mBAAA;AAAA,IACd,KAAA,EAAO;AAAA,GACT;AAAA,EACA,KAAA,EAAO,CAAC,EAAA,EAAY,KAAA,MAAkC;AAAA,IACpD,OAAA,EAAS,cAAA;AAAA,IACT,OAAA,EAAS,SAAA;AAAA,IACT,YAAA,EAAc,QAAA;AAAA,IACd,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,eAAA,EAAiB,EAAA;AAAA,IACjB;AAAA,GACF,CAAA;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,SAAA;AAAA,IACP,cAAA,EAAgB,MAAA;AAAA,IAChB,UAAA,EAAY,GAAA;AAAA,IACZ,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,QAAA,EAAU;AAAA,IACR,eAAA,EAAiB,SAAA;AAAA,IACjB,YAAA,EAAc,KAAA;AAAA,IACd,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,QAAA,EAAU;AAAA,IACR,OAAA,EAAS,MAAA;AAAA,IACT,SAAA,EAAW,QAAA;AAAA,IACX,KAAA,EAAO,SAAA;AAAA,IACP,QAAA,EAAU;AAAA;AAEd,CAAA;AAEO,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,KAAA,EAAM,EAAqB;AAClE,EAAA,MAAM,EAAE,IAAA,EAAM,QAAA,EAAU,SAAA,KAAc,WAAA,EAAY;AAElD,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,uBACEH,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,KAAA,EAAO,EAAE,GAAGG,OAAAA,CAAO,SAAA,EAAW,GAAG,KAAA,EAAM,EAChE,QAAA,EAAA;AAAA,sBAAAV,eAAC,KAAA,EAAA,EAAI,KAAA,EAAOU,QAAO,MAAA,EACjB,QAAA,kBAAAV,eAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,GAAGU,QAAO,QAAA,EAAU,KAAA,EAAO,SAAS,MAAA,EAAQ,MAAA,IAAU,CAAA,EACtE,CAAA;AAAA,sBACAV,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,SAAS,MAAA,EAAO,EAC3B,QAAA,EAAA,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,sBACdA,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UAEC,KAAA,EAAO,EAAE,GAAGU,OAAAA,CAAO,QAAA,EAAU,OAAO,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,YAAA,EAAc,MAAA;AAAO,SAAA;AAAA,QAD5E;AAAA,OAGR,CAAA,EACH;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEH,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,KAAA,EAAO,EAAE,GAAGG,OAAAA,CAAO,SAAA,EAAW,GAAG,KAAA,EAAM,EAChE,QAAA,EAAA;AAAA,oBAAAV,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAOU,OAAAA,CAAO,MAAA,EACjB,QAAA,kBAAAV,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAOU,OAAAA,CAAO,KAAA,EAAO,QAAA,EAAA,UAAA,EAAQ,CAAA,EACnC,CAAA;AAAA,oBAEAH,eAAAA,CAAC,OAAA,EAAA,EAAM,KAAA,EAAOG,QAAO,KAAA,EACnB,QAAA,EAAA;AAAA,sBAAAV,cAAAA,CAAC,OAAA,EAAA,EACC,QAAA,kBAAAO,eAAAA,CAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAP,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAOU,OAAAA,CAAO,IAAI,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,wBAC1BV,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAOU,OAAAA,CAAO,IAAI,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,wBAC5BV,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAOU,OAAAA,CAAO,IAAI,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,wBAC5BV,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAOU,OAAAA,CAAO,IAAI,QAAA,EAAA,SAAA,EAAO;AAAA,OAAA,EAC/B,CAAA,EACF,CAAA;AAAA,sBACAH,gBAAC,OAAA,EAAA,EACG,QAAA,EAAA;AAAA,QAAA,CAAA,CAAC,YAAY,QAAA,CAAS,MAAA,KAAW,CAAA,qBACjCP,eAAC,IAAA,EAAA,EACC,QAAA,kBAAAA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAS,CAAA,EAAG,KAAA,EAAOU,OAAAA,CAAO,QAAA,EAAU,8BAExC,CAAA,EACF,CAAA;AAAA,QAED,QAAA,EAAU,GAAA,CAAI,CAAC,OAAA,KAAY;AAC1B,UAAA,MAAM,EAAA,GAAKM,aAAAA,CAAa,OAAA,CAAQ,MAAM,CAAA;AACtC,UAAA,uBACET,gBAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAP,cAAAA,CAAC,QAAG,KAAA,EAAOU,OAAAA,CAAO,IAAK,QAAA,EAAAO,WAAAA,CAAW,OAAA,CAAQ,SAAS,CAAA,EAAE,CAAA;AAAA,4BACrDjB,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAOU,OAAAA,CAAO,EAAA,EAAK,QAAA,EAAA,YAAA,CAAa,OAAA,CAAQ,MAAA,EAAQ,OAAA,CAAQ,QAAQ,CAAA,EAAE,CAAA;AAAA,4BACtEV,cAAAA,CAAC,IAAA,EAAA,EAAG,OAAOU,OAAAA,CAAO,EAAA,EAChB,0BAAAV,cAAAA,CAAC,MAAA,EAAA,EAAK,OAAOU,OAAAA,CAAO,KAAA,CAAM,GAAG,EAAA,EAAI,EAAA,CAAG,KAAK,CAAA,EAAI,QAAA,EAAA,OAAA,CAAQ,QAAO,CAAA,EAC9D,CAAA;AAAA,4BACAV,eAAC,IAAA,EAAA,EAAG,KAAA,EAAOU,QAAO,EAAA,EACf,QAAA,EAAA,OAAA,CAAQ,6BACPV,cAAAA;AAAA,cAAC,GAAA;AAAA,cAAA;AAAA,gBACC,MAAM,OAAA,CAAQ,UAAA;AAAA,gBACd,MAAA,EAAO,QAAA;AAAA,gBACP,GAAA,EAAI,qBAAA;AAAA,gBACJ,OAAOU,OAAAA,CAAO,IAAA;AAAA,gBACf,QAAA,EAAA;AAAA;AAAA,aAED,mBAEAV,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,EAAU,EAAG,QAAA,EAAA,QAAA,EAAO,CAAA,EAE9C;AAAA,WAAA,EAAA,EAnBO,QAAQ,EAoBjB,CAAA;AAAA,QAEJ,CAAC;AAAA,OAAA,EACH;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA;ACxInB,SAAS,SAAS,OAAA,EAA2C;AAClE,EAAA,MAAM,EAAE,aAAA,EAAc,GAAI,SAAA,EAAU;AAEpC,EAAA,MAAM,KAAA,GAAQP,iBAAAA;AAAA,IACZ,CAAC,IAAA,KAAoB;AACnB,MAAA,aAAA,CAAc,OAAO,IAAA,EAAM;AAAA,QACzB,WAAW,OAAA,EAAS,SAAA;AAAA,QACpB,SAAS,OAAA,EAAS;AAAA,OACnB,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,aAAA,EAAe,OAAA,EAAS,SAAA,EAAW,SAAS,OAAO;AAAA,GACtD;AAEA,EAAA,OAAOK,aAAAA,CAAQ,MAAM,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,aAAA,EAAe,EAAE,KAAA,EAAO,CAAA,EAAG,CAAC,aAAA,EAAe,KAAK,CAAC,CAAA;AAC1F;ACpBO,SAAS,UAAU,OAAA,EAA6C;AACrE,EAAA,MAAM,EAAE,cAAA,EAAe,GAAI,SAAA,EAAU;AAErC,EAAA,MAAM,MAAA,GAASL,iBAAAA;AAAA,IACb,CAAC,IAAA,KAAqB;AACpB,MAAA,cAAA,CAAe,OAAO,IAAA,EAAM;AAAA,QAC1B,WAAW,OAAA,EAAS,SAAA;AAAA,QACpB,SAAS,OAAA,EAAS;AAAA,OACnB,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,cAAA,EAAgB,OAAA,EAAS,SAAA,EAAW,SAAS,OAAO;AAAA,GACvD;AAEA,EAAA,OAAOK,aAAAA,CAAQ,MAAM,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,cAAA,EAAgB,EAAE,MAAA,EAAQ,CAAA,EAAG,CAAC,cAAA,EAAgB,MAAM,CAAC,CAAA;AAC9F;AChBO,SAAS,UAAU,OAAA,EAA6C;AACrE,EAAA,MAAM,EAAE,cAAA,EAAe,GAAI,SAAA,EAAU;AAErC,EAAA,MAAM,MAAA,GAASL,kBAAY,MAAM;AAC/B,IAAA,cAAA,CAAe,OAAO,MAAA,EAAW;AAAA,MAC/B,WAAW,OAAA,EAAS,SAAA;AAAA,MACpB,SAAS,OAAA,EAAS;AAAA,KACnB,CAAA;AAAA,EACH,GAAG,CAAC,cAAA,EAAgB,SAAS,SAAA,EAAW,OAAA,EAAS,OAAO,CAAC,CAAA;AAEzD,EAAA,OAAOK,aAAAA,CAAQ,MAAM,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,cAAA,EAAgB,EAAE,MAAA,EAAQ,CAAA,EAAG,CAAC,cAAA,EAAgB,MAAM,CAAC,CAAA;AAC9F;ACHO,SAAS,WAAW,OAAA,EAA+C;AACxE,EAAA,MAAM,SAAS,eAAA,EAAgB;AAE/B,EAAA,MAAM,QAAQW,mBAAAA,CAAS;AAAA,IACrB,QAAA,EAAU,CAAC,eAAA,EAAiB,SAAS,CAAA;AAAA,IACrC,SAAS,MAAM,MAAA,CAAO,GAAA,CAAc,MAAA,CAAO,MAAM,EAAE,CAAA;AAAA,IACnD,KAAA,EAAO,KAAA;AAAA,IACP,OAAA,EAAS,SAAS,OAAA,IAAW,IAAA;AAAA,IAC7B,iBAAiB,OAAA,EAAS,eAAA;AAAA,IAC1B,oBAAA,EAAsB,SAAS,oBAAA,IAAwB;AAAA,GACxD,CAAA;AAED,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH,eAAA,EAAiB,KAAA,CAAM,SAAA,IAAa,KAAA,CAAM,IAAA,KAAS;AAAA,GACrD;AACF;ACRO,SAAS,aAAa,OAAA,EAAmD;AAC9E,EAAA,MAAM,SAAS,eAAA,EAAgB;AAE/B,EAAA,MAAM,UAAUjB,sBAAAA,CAAY;AAAA,IAC1B,WAAA,EAAa,CAAC,eAAA,EAAiB,YAAA,EAAc,SAAS,CAAA;AAAA,IACtD,UAAA,EAAY,CAAC,IAAA,KAA+B,MAAA,CAAO,KAAK,MAAA,CAAO,KAAA,CAAM,kBAAkB,IAAI,CAAA;AAAA,IAC3F,SAAA,EAAW,MAAM,OAAA,EAAS,gBAAA,IAAmB;AAAA,IAC7C,SAAS,OAAA,EAAS;AAAA,GACnB,CAAA;AAED,EAAA,MAAM,SAASA,sBAAAA,CAAY;AAAA,IACzB,WAAA,EAAa,CAAC,eAAA,EAAiB,YAAA,EAAc,QAAQ,CAAA;AAAA,IACrD,UAAA,EAAY,CAAC,IAAA,KACX,MAAA,CAAO,KAA0B,MAAA,CAAO,KAAA,CAAM,iBAAiB,IAAI,CAAA;AAAA,IACrE,WAAW,OAAA,EAAS,eAAA;AAAA,IACpB,SAAS,OAAA,EAAS;AAAA,GACnB,CAAA;AAED,EAAA,OAAO,EAAE,SAAS,MAAA,EAAO;AAC3B;ACnCO,SAAS,eAAe,OAAA,EAAuD;AACpF,EAAA,MAAM,SAAS,eAAA,EAAgB;AAE/B,EAAA,OAAOA,sBAAAA,CAAY;AAAA,IACjB,WAAA,EAAa,CAAC,eAAA,EAAiB,cAAc,CAAA;AAAA,IAC7C,UAAA,EAAY,OAAO,IAAA,KAA0B;AAC3C,MAAA,MAAM,IAAA,GAAgC,EAAE,GAAG,IAAA,EAAK;AAEhD,MAAA,IAAI,MAAA,CAAO,YAAY,QAAA,EAAU;AAC/B,QAAA,IAAA,CAAK,QAAA,GAAW,OAAO,UAAA,CAAW,QAAA;AAAA,MACpC;AAEA,MAAA,OAAO,MAAA,CAAO,IAAA,CAA0B,MAAA,CAAO,KAAA,CAAM,aAAa,IAAI,CAAA;AAAA,IACxE,CAAA;AAAA,IACA,WAAW,OAAA,EAAS,SAAA;AAAA,IACpB,SAAS,OAAA,EAAS;AAAA,GACnB,CAAA;AACH;ACdO,SAAS,kBAAkB,OAAA,EAA6D;AAC7F,EAAA,MAAM,SAAS,eAAA,EAAgB;AAE/B,EAAA,OAAOA,sBAAAA,CAAY;AAAA,IACjB,WAAA,EAAa,CAAC,eAAA,EAAiB,iBAAiB,CAAA;AAAA,IAChD,UAAA,EAAY,CAAC,IAAA,KACX,MAAA,CAAO,KAA2B,MAAA,CAAO,KAAA,CAAM,gBAAgB,IAAI,CAAA;AAAA,IACrE,WAAW,OAAA,EAAS,SAAA;AAAA,IACpB,SAAS,OAAA,EAAS;AAAA,GACnB,CAAA;AACH;ACZO,SAAS,WAAW,OAAA,EAA+C;AACxE,EAAA,MAAM,SAAS,eAAA,EAAgB;AAE/B,EAAA,OAAOA,sBAAAA,CAAY;AAAA,IACjB,WAAA,EAAa,CAAC,eAAA,EAAiB,SAAS,CAAA;AAAA,IACxC,YAAY,YAAY;AACtB,MAAA,MAAM,OAAO,cAAA,EAAe;AAG5B,MAAA,OAAO,EAAE,WAAA,EAAa,MAAA,CAAO,cAAA,EAAe,EAAE;AAAA,IAChD,CAAA;AAAA,IACA,SAAA,EAAW,CAAC,IAAA,KAAS;AACnB,MAAA,OAAA,EAAS,YAAY,IAAI,CAAA;AAAA,IAC3B,CAAA;AAAA,IACA,SAAS,OAAA,EAAS;AAAA,GACnB,CAAA;AACH;ACbO,SAAS,aAAa,OAAA,EAAmD;AAC9E,EAAA,MAAM,SAAS,eAAA,EAAgB;AAE/B,EAAA,MAAM,QAAQiB,mBAAAA,CAAS;AAAA,IACrB,QAAA,EAAU,CAAC,eAAA,EAAiB,WAAW,CAAA;AAAA,IACvC,SAAS,YAAY;AACnB,MAAA,MAAM,WAAW,MAAM,MAAA,CAAO,IAAA,CAAwB,MAAA,CAAO,MAAM,SAAS,CAAA;AAE5E,MAAA,IAAI,SAAS,aAAA,EAAe;AAC1B,QAAA,MAAA,CAAO,cAAA,CAAe,SAAS,WAAW,CAAA;AAC1C,QAAA,OAAA,EAAS,kBAAkB,QAAQ,CAAA;AAAA,MACrC,CAAA,MAAO;AACL,QAAA,OAAA,EAAS,iBAAA,IAAoB;AAAA,MAC/B;AAEA,MAAA,OAAO,QAAA;AAAA,IACT,CAAA;AAAA,IACA,KAAA,EAAO,KAAA;AAAA,IACP,OAAA,EAAS,SAAS,OAAA,IAAW,IAAA;AAAA,IAC7B,SAAA,EAAW,QAAA;AAAA,IACX,oBAAA,EAAsB;AAAA,GACvB,CAAA;AAED,EAAA,MAAM,eAAA,GACJ,MAAM,SAAA,IAAa,KAAA,CAAM,SAAS,MAAA,IAAa,KAAA,CAAM,KAAK,aAAA,KAAkB,IAAA;AAE9E,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH;AAAA,GACF;AACF;ACeO,SAAS,YAAY,OAAA,EAAiD;AAC3E,EAAA,MAAM,SAAS,eAAA,EAAgB;AAC/B,EAAA,MAAM,cAAclB,yBAAAA,EAAe;AAEnC,EAAA,MAAM,OAAOkB,mBAAAA,CAAS;AAAA,IACpB,QAAA,EAAU,CAAC,eAAA,EAAiB,UAAU,CAAA;AAAA,IACtC,SAAS,MAAM,MAAA,CAAO,GAAA,CAAmB,MAAA,CAAO,MAAM,QAAQ,CAAA;AAAA,IAC9D,OAAA,EAAS,SAAS,WAAA,IAAe;AAAA,GAClC,CAAA;AAED,EAAA,MAAM,gBAAgBjB,sBAAAA,CAAY;AAAA,IAChC,WAAA,EAAa,CAAC,eAAA,EAAiB,UAAA,EAAY,gBAAgB,CAAA;AAAA,IAC3D,UAAA,EAAY,CAAC,IAAA,KACX,MAAA,CAAO,KAAmC,MAAA,CAAO,KAAA,CAAM,sBAAsB,IAAI,CAAA;AAAA,IACnF,SAAS,OAAA,EAAS;AAAA,GACnB,CAAA;AAED,EAAA,MAAM,iBAAiBA,sBAAAA,CAAY;AAAA,IACjC,WAAA,EAAa,CAAC,eAAA,EAAiB,UAAA,EAAY,iBAAiB,CAAA;AAAA,IAC5D,UAAA,EAAY,CAAC,IAAA,KACX,MAAA,CAAO,KAA0B,MAAA,CAAO,KAAA,CAAM,uBAAuB,IAAI,CAAA;AAAA,IAC3E,WAAW,MAAM;AACf,MAAA,WAAA,CAAY,kBAAkB,EAAE,QAAA,EAAU,CAAC,eAAA,EAAiB,UAAU,GAAG,CAAA;AACzE,MAAA,OAAA,EAAS,iBAAA,IAAoB;AAAA,IAC/B,CAAA;AAAA,IACA,SAAS,OAAA,EAAS;AAAA,GACnB,CAAA;AAED,EAAA,MAAM,WAAWA,sBAAAA,CAAY;AAAA,IAC3B,WAAA,EAAa,CAAC,eAAA,EAAiB,UAAA,EAAY,UAAU,CAAA;AAAA,IACrD,UAAA,EAAY,CAAC,IAAA,KACX,MAAA,CAAO,KAA0B,MAAA,CAAO,KAAA,CAAM,UAAU,IAAI,CAAA;AAAA,IAC9D,WAAW,MAAM;AACf,MAAA,WAAA,CAAY,kBAAkB,EAAE,QAAA,EAAU,CAAC,eAAA,EAAiB,UAAU,GAAG,CAAA;AACzE,MAAA,OAAA,EAAS,iBAAA,IAAoB;AAAA,IAC/B,CAAA;AAAA,IACA,SAAS,OAAA,EAAS;AAAA,GACnB,CAAA;AAED,EAAA,MAAM,SAASA,sBAAAA,CAAY;AAAA,IACzB,WAAA,EAAa,CAAC,eAAA,EAAiB,UAAA,EAAY,QAAQ,CAAA;AAAA,IACnD,UAAA,EAAY,CAAC,SAAA,KACX,MAAA,CAAO,IAAA;AAAA,MACL,CAAA,EAAG,MAAA,CAAO,KAAA,CAAM,QAAQ,IAAI,SAAS,CAAA,OAAA;AAAA,KACvC;AAAA,IACF,SAAA,EAAW,CAAC,IAAA,KAAS;AACnB,MAAA,WAAA,CAAY,kBAAkB,EAAE,QAAA,EAAU,CAAC,eAAA,EAAiB,UAAU,GAAG,CAAA;AACzE,MAAA,OAAA,EAAS,kBAAkB,IAAI,CAAA;AAAA,IACjC,CAAA;AAAA,IACA,SAAS,OAAA,EAAS;AAAA,GACnB,CAAA;AAED,EAAA,MAAM,QAAQA,sBAAAA,CAAY;AAAA,IACxB,WAAA,EAAa,CAAC,eAAA,EAAiB,UAAA,EAAY,OAAO,CAAA;AAAA,IAClD,UAAA,EAAY,OAAO,IAAA,KAA2B;AAC5C,MAAA,MAAM,IAAA,GAAgC,EAAE,GAAG,IAAA,EAAK;AAEhD,MAAA,IAAI,MAAA,CAAO,YAAY,QAAA,EAAU;AAC/B,QAAA,IAAA,CAAK,QAAA,GAAW,OAAO,UAAA,CAAW,QAAA;AAAA,MACpC;AAEA,MAAA,OAAO,MAAA,CAAO,IAAA,CAA0B,MAAA,CAAO,KAAA,CAAM,cAAc,IAAI,CAAA;AAAA,IACzE,CAAA;AAAA,IACA,WAAW,OAAA,EAAS,cAAA;AAAA,IACpB,SAAS,OAAA,EAAS;AAAA,GACnB,CAAA;AAED,EAAA,MAAM,aAAaA,sBAAAA,CAAY;AAAA,IAC7B,WAAA,EAAa,CAAC,eAAA,EAAiB,UAAA,EAAY,aAAa,CAAA;AAAA,IACxD,UAAA,EAAY,OAAO,IAAA,KAAwC;AACzD,MAAA,MAAM,OAAgC,EAAC;AAEvC,MAAA,IAAI,MAAA,CAAO,YAAY,QAAA,EAAU;AAC/B,QAAA,IAAA,CAAK,QAAA,GAAW,OAAO,UAAA,CAAW,QAAA;AAAA,MACpC;AAEA,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,IAAI,CAAA;AAAA,MAC1B;AAEA,MAAA,OAAO,MAAA,CAAO,IAAA,CAAgC,MAAA,CAAO,KAAA,CAAM,mBAAmB,IAAI,CAAA;AAAA,IACpF,CAAA;AAAA,IACA,SAAS,OAAA,EAAS;AAAA,GACnB,CAAA;AAED,EAAA,MAAM,cAAcA,sBAAAA,CAAY;AAAA,IAC9B,WAAA,EAAa,CAAC,eAAA,EAAiB,UAAA,EAAY,cAAc,CAAA;AAAA,IACzD,UAAA,EAAY,OAAO,IAAA,KAAiC;AAClD,MAAA,MAAM,IAAA,GAAgC,EAAE,GAAG,IAAA,EAAK;AAEhD,MAAA,IAAI,MAAA,CAAO,YAAY,QAAA,EAAU;AAC/B,QAAA,IAAA,CAAK,QAAA,GAAW,OAAO,UAAA,CAAW,QAAA;AAAA,MACpC;AAEA,MAAA,OAAO,MAAA,CAAO,IAAA,CAA0B,MAAA,CAAO,KAAA,CAAM,oBAAoB,IAAI,CAAA;AAAA,IAC/E,CAAA;AAAA,IACA,WAAW,OAAA,EAAS,cAAA;AAAA,IACpB,SAAS,OAAA,EAAS;AAAA,GACnB,CAAA;AAED,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,aAAA;AAAA,IACA,cAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACF;AACF;AClLO,SAAS,uBAAuB,OAAA,EAAmC;AACxE,EAAA,MAAM,SAAS,eAAA,EAAgB;AAC/B,EAAA,MAAM,cAAcD,yBAAAA,EAAe;AAEnC,EAAA,MAAM,WAAWC,sBAAAA,CAAY;AAAA,IAC3B,UAAA,EAAY,CAAC,IAAA,KACX,MAAA,CAAO,KAAoB,MAAA,CAAO,KAAA,CAAM,qBAAqB,IAAI,CAAA;AAAA,IACnE,SAAA,EAAW,CAAC,IAAA,KAAS;AACnB,MAAA,KAAK,YAAY,iBAAA,CAAkB,EAAE,UAAU,CAAC,gBAAgB,GAAG,CAAA;AACnE,MAAA,OAAA,EAAS,YAAY,IAAI,CAAA;AAAA,IAC3B,CAAA;AAAA,IACA,SAAS,OAAA,EAAS;AAAA,GACnB,CAAA;AAED,EAAA,MAAM,MAAA,GAASC,iBAAAA;AAAA,IACb,CAAC,IAAA,KAAkC;AACjC,MAAA,QAAA,CAAS,OAAO,IAAI,CAAA;AAAA,IACtB,CAAA;AAAA,IACA,CAAC,QAAQ;AAAA,GACX;AAEA,EAAA,OAAOK,aAAAA,CAAQ,OAAO,EAAE,GAAG,QAAA,EAAU,QAAO,CAAA,EAAI,CAAC,QAAA,EAAU,MAAM,CAAC,CAAA;AACpE;AAEO,SAAS,iBAAA,GAAoB;AAClC,EAAA,MAAM,SAAS,eAAA,EAAgB;AAE/B,EAAA,OAAOW,mBAAAA,CAAS;AAAA,IACd,QAAA,EAAU,CAAC,gBAAgB,CAAA;AAAA,IAC3B,SAAS,MAAM,MAAA,CAAO,GAAA,CAAqB,MAAA,CAAO,MAAM,cAAc;AAAA,GACvE,CAAA;AACH;ACVA,IAAM,YAAA,GAAe,oBAAA;AAEd,SAAS,mBAAA,CAAoB;AAAA,EAClC,QAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAA0D;AACxD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIZ,eAAiC,MAAM,CAAA;AACnE,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAsC,IAAI,CAAA;AAClF,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAuB,IAAI,CAAA;AACnE,EAAA,MAAM,iBAAA,GAAoBc,aAAO,KAAK,CAAA;AACtC,EAAA,MAAM,gBAAA,GAAmBA,aAAO,KAAK,CAAA;AACrC,EAAA,MAAM,EAAE,eAAA,EAAgB,GAAI,SAAA,EAAU;AAGtC,EAAA,MAAM,MAAA,GACJ,OAAO,MAAA,KAAW,WAAA,GACd,IAAI,eAAA,CAAgB,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,GAC1C,IAAI,eAAA,EAAgB;AAC1B,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,GAAA,CAAI,IAAI,CAAA;AAClC,EAAA,MAAM,kBAAA,GAAqB,MAAA,CAAO,GAAA,CAAI,qBAAqB,CAAA;AAC3D,EAAA,MAAM,UAAA,GAAa,CAAC,EAAE,UAAA,IAAc,kBAAA,CAAA;AAGpC,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,WAAA,CAAY;AAAA,IAC/B,iBAAA,EAAmB,KAAA;AAAA,IACnB,SAAA,EAAW,CAAC,IAAA,KAAS;AACnB,MAAA,IAAI,IAAA,CAAK,QAAA,KAAa,UAAA,IAAc,IAAA,CAAK,YAAA,EAAc;AACrD,QAAA,eAAA,CAAgB,KAAK,YAAY,CAAA;AACjC,QAAA,SAAA,CAAU,OAAO,CAAA;AAAA,MACnB;AAAA,IACF,CAAA;AAAA,IACA,OAAA,EAAS,CAAC,GAAA,KAAQ;AAChB,MAAA,eAAA,CAAgB,GAAG,CAAA;AACnB,MAAA,SAAA,CAAU,OAAO,CAAA;AACjB,MAAA,OAAA,GAAU,GAAG,CAAA;AAAA,IACf;AAAA,GACD,CAAA;AAED,EAAAZ,gBAAU,MAAM;AACd,IAAA,IAAI,UAAA,IAAc,kBAAkB,OAAA,EAAS;AAC7C,IAAA,iBAAA,CAAkB,OAAA,GAAU,IAAA;AAC5B,IAAA,SAAA,CAAU,SAAS,CAAA;AAEnB,IAAA,QAAA,CAAS;AAAA,MACP,QAAA;AAAA,MACA,QAAA,EAAU,UAAA;AAAA,MACV,UAAA,EAAY,OAAO,QAAA,CAAS,IAAA;AAAA,MAC5B,SAAA,EAAW,OAAO,QAAA,CAAS;AAAA,KAC5B,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,QAAA,EAAU,QAAA,EAAU,UAAU,CAAC,CAAA;AAGnC,EAAA,MAAM,EAAE,MAAA,EAAQ,OAAA,EAAQ,GAAI,kBAAA,CAAmB;AAAA,IAC7C,SAAA,EAAW,CAAC,IAAA,KAAS;AACnB,MAAA,SAAA,CAAU,KAAK,MAAA,KAAW,WAAA,IAAe,KAAK,MAAA,KAAW,mBAAA,GACrD,cACA,WAAW,CAAA;AACf,MAAA,SAAA,GAAY,IAAI,CAAA;AAAA,IAClB,CAAA;AAAA,IACA,OAAA,EAAS,CAAC,GAAA,KAAQ;AAChB,MAAA,eAAA,CAAgB,GAAG,CAAA;AACnB,MAAA,SAAA,CAAU,OAAO,CAAA;AACjB,MAAA,OAAA,GAAU,GAAG,CAAA;AAAA,IACf;AAAA,GACD,CAAA;AAED,EAAAA,gBAAU,MAAM;AACd,IAAA,IAAI,CAAC,UAAA,IAAc,gBAAA,CAAiB,OAAA,IAAW,eAAA,EAAiB;AAChE,IAAA,gBAAA,CAAiB,OAAA,GAAU,IAAA;AAC3B,IAAA,SAAA,CAAU,YAAY,CAAA;AACtB,IAAA,OAAA,CAAQ,EAAE,EAAA,EAAI,MAAA,CAAO,UAAU,CAAA,EAAG,mBAAA,EAAqB,oBAAqB,CAAA;AAAA,EAC9E,GAAG,CAAC,UAAA,EAAY,iBAAiB,UAAA,EAAY,kBAAA,EAAoB,OAAO,CAAC,CAAA;AAGzE,EAAA,MAAM,cAAA,GAAiBN,iBAAAA;AAAA,IACrB,CAAC,GAAA,KAAe;AACd,MAAA,eAAA,CAAgB,GAAG,CAAA;AACnB,MAAA,SAAA,CAAU,OAAO,CAAA;AACjB,MAAA,OAAA,GAAU,GAAG,CAAA;AAAA,IACf,CAAA;AAAA,IACA,CAAC,OAAO;AAAA,GACV;AAEA,EAAA,MAAM,cAAA,GAAiBK,cAAQ,MAAM;AACnC,IAAA,OAAO,SAAS,mBAAA,GAAsB;AACpC,MAAA,IAAI,CAAC,YAAA,IAAgB,UAAA,EAAY,OAAO,IAAA;AAExC,MAAA,OAAO,sBAAA,CAAuB;AAAA,QAC5B,MAAA,EAAQ,YAAA;AAAA,QACR,WAAA,EAAa,YAAA;AAAA,QACb,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,IACH,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,YAAA,EAAc,UAAA,EAAY,cAAc,CAAC,CAAA;AAE7C,EAAA,OAAO,EAAE,cAAA,EAAgB,MAAA,EAAQ,QAAA,EAAU,OAAO,YAAA,EAAa;AACjE;ACpFO,SAAS,kBAAA,CAAmB;AAAA,EACjC,QAAA;AAAA,EACA,SAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAAA,EAAwD;AACtD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAID,eAAgC,MAAM,CAAA;AAClE,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAkC,IAAI,CAAA;AAC9E,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAuB,IAAI,CAAA;AACnE,EAAA,MAAM,iBAAA,GAAoBc,aAAO,KAAK,CAAA;AAEtC,EAAA,MAAM,WAAA,GACJ,OAAO,MAAA,KAAW,WAAA,GAAc,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,GAAI,EAAA;AAGvE,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,WAAA,CAAY;AAAA,IAC/B,iBAAA,EAAmB,KAAA;AAAA,IACnB,SAAA,EAAW,CAAC,IAAA,KAAS;AACnB,MAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,MAAA,SAAA,CAAU,OAAO,CAAA;AACjB,MAAA,SAAA,GAAY,IAAI,CAAA;AAAA,IAClB,CAAA;AAAA,IACA,OAAA,EAAS,CAAC,GAAA,KAAQ;AAChB,MAAA,eAAA,CAAgB,GAAG,CAAA;AACnB,MAAA,SAAA,CAAU,OAAO,CAAA;AACjB,MAAA,OAAA,GAAU,GAAG,CAAA;AAAA,IACf;AAAA,GACD,CAAA;AAED,EAAAZ,gBAAU,MAAM;AACd,IAAA,IAAI,kBAAkB,OAAA,EAAS;AAC/B,IAAA,iBAAA,CAAkB,OAAA,GAAU,IAAA;AAC5B,IAAA,SAAA,CAAU,SAAS,CAAA;AAEnB,IAAA,QAAA,CAAS;AAAA,MACP,QAAA;AAAA,MACA,QAAA,EAAU,iBAAA;AAAA,MACV,UAAA,EAAY,WAAA;AAAA,MACZ,SAAA,EAAW;AAAA,KACZ,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,QAAA,EAAU,QAAA,EAAU,WAAW,CAAC,CAAA;AAGpC,EAAA,MAAM,EAAE,MAAA,EAAQ,SAAA,EAAW,YAAA,KAAiB,sBAAA,CAAuB;AAAA,IACjE,SAAA,EAAW,CAAC,KAAA,KAAU;AACpB,MAAA,SAAA,CAAU,WAAW,CAAA;AACrB,MAAA,gBAAA,GAAmB,KAAK,CAAA;AAAA,IAC1B,CAAA;AAAA,IACA,OAAA,EAAS,CAAC,GAAA,KAAQ;AAChB,MAAA,eAAA,CAAgB,GAAG,CAAA;AACnB,MAAA,SAAA,CAAU,OAAO,CAAA;AACjB,MAAA,OAAA,GAAU,GAAG,CAAA;AAAA,IACf;AAAA,GACD,CAAA;AAED,EAAA,MAAM,WAAA,GAAcN,iBAAAA;AAAA,IAClB,CAAC,IAAA,KAA0B;AACzB,MAAA,IAAI,CAAC,cAAc,MAAA,EAAQ;AAC3B,MAAA,SAAA,CAAU,YAAY,CAAA;AACtB,MAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,MAAA,MAAA,CAAO;AAAA,QACL,MAAA,EAAQ,aAAa,MAAA,CAAO,EAAA;AAAA,QAC5B,SAAS,IAAA,CAAK,OAAA;AAAA,QACd,UAAU,IAAA,CAAK,QAAA;AAAA,QACf,UAAU,IAAA,CAAK,QAAA;AAAA,QACf,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,UAAU,IAAA,CAAK,QAAA;AAAA,QACf,OAAO,IAAA,CAAK;AAAA,OACb,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,QAAQ,YAAY;AAAA,GACvB;AAGA,EAAA,MAAM,eAAA,GAAkBK,cAAQ,MAAM;AACpC,IAAA,OAAO,SAAS,oBAAA,GAA4C;AAC1D,MAAA,IAAI,CAAC,cAAc,OAAO,IAAA;AAE1B,MAAA,MAAM,cAAc,YAAA,CAAa,WAAA;AACjC,MAAA,MAAM,OAAO,YAAA,CAAa,IAAA;AAC1B,MAAA,MAAM,SAAS,YAAA,CAAa,MAAA;AAI5B,MAAA,MAAM,aAAA,GAAgB,IAAA,GAClB,YAAA,CAAa,IAAA,CAAK,QAAQ,IAAA,CAAK,QAAQ,CAAA,GACvC,MAAA,GACE,YAAA,CAAa,MAAA,CAAO,MAAA,EAAQ,MAAA,CAAO,QAAQ,CAAA,GAC3C,EAAA;AAEN,MAAA,uBACES,gBAAC,KAAA,EAAA,EACE,QAAA,EAAA;AAAA,QAAA,aAAA,oBACCA,eAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO;AAAA,cACL,SAAA,EAAW,QAAA;AAAA,cACX,OAAA,EAAS,MAAA;AAAA,cACT,eAAA,EAAiB,SAAA;AAAA,cACjB,YAAA,EAAc,KAAA;AAAA,cACd,YAAA,EAAc;AAAA,aAChB;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAAP,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,UAAA,EAAY,GAAA,EAAK,KAAA,EAAO,SAAA,EAAU,EAC/D,QAAA,EAAA,aAAA,EACH,CAAA;AAAA,cACC,IAAA,EAAM,IAAA,oBACLA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAU,EAAI,eAAK,IAAA,EAAK,CAAA;AAAA,cAEhE,MAAA,EAAQ,WAAA,oBACPA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAU,EAAI,iBAAO,WAAA,EAAY;AAAA;AAAA;AAAA,SAE5E;AAAA,QAGD,WAAA,IAAe,MAAA,CAAO,IAAA,CAAK,WAAW,EAAE,MAAA,GAAS,CAAA,oBAChDO,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,YAAA,EAAc,QAAO,EACjC,QAAA,EAAA;AAAA,0BAAAP,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO;AAAA,gBACL,QAAA,EAAU,MAAA;AAAA,gBACV,UAAA,EAAY,GAAA;AAAA,gBACZ,KAAA,EAAO,SAAA;AAAA,gBACP,YAAA,EAAc;AAAA,eAChB;AAAA,cACD,QAAA,EAAA;AAAA;AAAA,WAED;AAAA,UACC,OAAO,OAAA,CAAQ,WAAW,EACxB,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA,KAAM,CAAC,EACnB,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,sBACfO,eAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cAEC,KAAA,EAAO;AAAA,gBACL,OAAA,EAAS,MAAA;AAAA,gBACT,cAAA,EAAgB,eAAA;AAAA,gBAChB,OAAA,EAAS,OAAA;AAAA,gBACT,YAAA,EAAc,mBAAA;AAAA,gBACd,QAAA,EAAU;AAAA,eACZ;AAAA,cAEA,QAAA,EAAA;AAAA,gCAAAP,eAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,IACnB,QAAA,EAAA,GAAA,CAAI,OAAA,CAAQ,YAAY,KAAK,CAAA,CAAE,QAAQ,IAAA,EAAM,CAAC,MAAM,CAAA,CAAE,WAAA,EAAa,CAAA,EACtE,CAAA;AAAA,gCACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,OAAO,SAAA,EAAW,UAAA,EAAY,GAAA,EAAI,EAAI,QAAA,EAAA,KAAA,EAAM;AAAA;AAAA,aAAA;AAAA,YAZtD;AAAA,WAcR;AAAA,SAAA,EACL,CAAA;AAAA,QAGD,YAAA,CAAa,wCACZA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO;AAAA,cACL,OAAA,EAAS,MAAA;AAAA,cACT,eAAA,EAAiB,SAAA;AAAA,cACjB,YAAA,EAAc,KAAA;AAAA,cACd,QAAA,EAAU,MAAA;AAAA,cACV,KAAA,EAAO,SAAA;AAAA,cACP,UAAA,EAAY;AAAA,aACd;AAAA,YAEC,QAAA,EAAA,YAAA,CAAa;AAAA;AAAA;AAChB,OAAA,EAEJ,CAAA;AAAA,IAEJ,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,EAAA,OAAO;AAAA,IACL,eAAA;AAAA,IACA,WAAA;AAAA,IACA,MAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,KAAA,EAAO;AAAA,GACT;AACF;ACvNO,SAAS,UAAA,GAAa;AAC3B,EAAA,MAAM,SAAS,eAAA,EAAgB;AAE/B,EAAA,OAAOS,mBAAAA,CAAS;AAAA,IACd,QAAA,EAAU,CAAC,eAAA,EAAiB,SAAS,CAAA;AAAA,IACrC,SAAS,MAAM,MAAA,CAAO,GAAA,CAAsB,MAAA,CAAO,MAAM,WAAW,CAAA;AAAA,IACpE,OAAA,EAAS,CAAC,CAAC,MAAA,CAAO,cAAA;AAAe,GAClC,CAAA;AACH;AAEO,SAAS,iBAAiB,QAAA,EAAkB;AACjD,EAAA,MAAM,SAAS,eAAA,EAAgB;AAE/B,EAAA,OAAOA,mBAAAA,CAAS;AAAA,IACd,QAAA,EAAU,CAAC,eAAA,EAAiB,SAAA,EAAW,UAAU,SAAS,CAAA;AAAA,IAC1D,OAAA,EAAS,MACP,MAAA,CAAO,GAAA,CAAwB,CAAA,EAAG,OAAO,KAAA,CAAM,WAAW,CAAA,CAAA,EAAI,QAAQ,CAAA,QAAA,CAAU,CAAA;AAAA,IAClF,SAAS,CAAC,CAAC,OAAO,cAAA,EAAe,IAAK,CAAC,CAAC;AAAA,GACzC,CAAA;AACH;AAEO,SAAS,eAAA,GAAkB;AAChC,EAAA,MAAM,SAAS,eAAA,EAAgB;AAC/B,EAAA,MAAM,cAAclB,yBAAAA,EAAe;AAEnC,EAAA,MAAM,YAAA,GAAe,OAAO,QAAA,KAAqB;AAC/C,IAAA,MAAM,MAAA,CAAO,cAAA,CAAe,EAAE,QAAA,EAAU,CAAA;AACxC,IAAA,MAAM,YAAY,iBAAA,CAAkB,EAAE,UAAU,CAAC,eAAe,GAAG,CAAA;AAAA,EACrE,CAAA;AAEA,EAAA,OAAO,EAAE,YAAA,EAAa;AACxB;ACeO,SAAS,mBACd,MAAA,EACqF;AACrF,EAAA,OAAO,SAAS,qBACd,OAAA,EACyC;AACzC,IAAA,MAAM,SAAS,eAAA,EAAgB;AAE/B,IAAA,OAAOC,sBAAAA,CAAY;AAAA,MACjB,aAAa,MAAA,CAAO,WAAA;AAAA,MACpB,YAAY,CAAC,KAAA,KAAkB,MAAA,CAAO,UAAA,CAAW,QAAQ,KAAK,CAAA;AAAA,MAC9D,WAAW,OAAA,EAAS,SAAA;AAAA,MACpB,SAAS,OAAA,EAAS;AAAA,KACnB,CAAA;AAAA,EACH,CAAA;AACF;AC5DA,SAAS,iBAAiB,QAAA,EAAoC;AAC5D,EAAA,OAAO,QAAA,CAAS,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,IACrC,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAAA,IAC1B,SAAS,KAAA,CAAM;AAAA,GACjB,CAAE,CAAA;AACJ;AAEO,SAAS,YAAA,CACd,aAAA,EACA,MAAA,EACA,QAAA,EACkB;AAClB,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIK,eAAY,aAAa,CAAA;AACrD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,cAAAA,CAAuB,EAAE,CAAA;AACrD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAS,KAAK,CAAA;AACtD,EAAA,MAAM,UAAA,GAAac,aAAO,IAAI,CAAA;AAE9B,EAAA,MAAM,YAAA,GAAelB,iBAAAA;AAAA,IACnB,CAAC,KAAA,KAAmB,CAAC,CAAA,KAA2C;AAC9D,MAAA,MAAM,IAAA,GAAO,EAAE,GAAG,MAAA,EAAQ,CAAC,KAAK,GAAG,CAAA,CAAE,MAAA,CAAO,KAAA,EAAM;AAClD,MAAA,SAAA,CAAU,IAAI,CAAA;AACd,MAAA,SAAA,CAAU,CAAC,SAAS,IAAA,CAAK,MAAA,CAAO,CAAC,GAAA,KAAQ,GAAA,CAAI,KAAA,KAAU,KAAK,CAAC,CAAA;AAAA,IAC/D,CAAA;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AAEA,EAAA,MAAM,aAAA,GAAgBA,iBAAAA,CAAY,CAAC,KAAA,EAAgB,KAAA,KAAkB;AACnE,IAAA,SAAA,CAAU,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,KAAK,GAAG,KAAA,EAAM,CAAO,CAAA;AACtD,IAAA,SAAA,CAAU,CAAC,SAAS,IAAA,CAAK,MAAA,CAAO,CAAC,GAAA,KAAQ,GAAA,CAAI,KAAA,KAAU,KAAK,CAAC,CAAA;AAAA,EAC/D,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,YAAA,GAAeA,iBAAAA;AAAA,IACnB,OAAO,CAAA,KAAiB;AACtB,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,SAAA,CAAU,MAAM,CAAA;AACtC,MAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,QAAA,SAAA,CAAU,gBAAA,CAAiB,MAAA,CAAO,KAAK,CAAC,CAAA;AACxC,QAAA;AAAA,MACF;AACA,MAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,MAAA,IAAI;AACF,QAAA,MAAM,SAAS,MAAM,CAAA;AAAA,MACvB,CAAA,SAAE;AACA,QAAA,IAAI,WAAW,OAAA,EAAS;AACtB,UAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,QACvB;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,CAAC,MAAA,EAAQ,MAAA,EAAQ,QAAQ;AAAA,GAC3B;AAEA,EAAA,MAAM,KAAA,GAAQA,kBAAY,MAAM;AAC9B,IAAA,SAAA,CAAU,aAAa,CAAA;AACvB,IAAA,SAAA,CAAU,EAAE,CAAA;AACZ,IAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,EACvB,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,EAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,cAAc,YAAA,EAAc,YAAA,EAAc,eAAe,KAAA,EAAM;AAC1F;AC7DO,SAAS,iBAAA,GAAoB;AAClC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAII,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,MAAA,GAASJ,iBAAAA,CAAY,MAAM,UAAA,CAAW,CAAC,MAAM,CAAC,CAAC,CAAA,EAAG,EAAE,CAAA;AAC1D,EAAA,OAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,IAAA,EAAM,OAAA,GAAW,SAAoB,UAAA,EAAqB;AACtF;;;ACiFO,IAAM,WAAA,GAAsB","file":"index.cjs","sourcesContent":["import { z } from 'zod'\nimport type { AccessMessages } from '../types'\n\n// ─── Schema Factories (locale-aware) ─────────────────────────\n\nexport function createLoginSchema(v: AccessMessages['validation']) {\n return z.object({\n email: z\n .string({ required_error: v.emailRequired })\n .min(1, v.emailRequired)\n .email(v.emailInvalid),\n password: z.string({ required_error: v.passwordRequired }).min(1, v.passwordRequired),\n })\n}\n\nexport function createSignupSchema(v: AccessMessages['validation']) {\n return z.object({\n email: z\n .string({ required_error: v.emailRequired })\n .min(1, v.emailRequired)\n .email(v.emailInvalid),\n password: z.string({ required_error: v.passwordRequired }).min(10, v.passwordMinLength),\n acceptedTosVersion: z.string().optional(),\n acceptedPrivacyVersion: z.string().optional(),\n })\n}\n\n// ─── Login ───────────────────────────────────────────────────\nexport const loginSchema = z.object({\n email: z\n .string({ required_error: 'El correo es requerido' })\n .min(1, 'El correo es requerido')\n .email('Correo electrónico inválido'),\n password: z\n .string({ required_error: 'La contraseña es requerida' })\n .min(1, 'La contraseña es requerida'),\n})\n\nexport type LoginInput = z.infer<typeof loginSchema>\n\n// ─── Signup ──────────────────────────────────────────────────\nexport const signupSchema = z.object({\n email: z\n .string({ required_error: 'El correo es requerido' })\n .min(1, 'El correo es requerido')\n .email('Correo electrónico inválido'),\n password: z\n .string({ required_error: 'La contraseña es requerida' })\n .min(10, 'La contraseña debe tener al menos 10 caracteres'),\n acceptedTosVersion: z.string().optional(),\n acceptedPrivacyVersion: z.string().optional(),\n})\n\nexport type SignupInput = z.infer<typeof signupSchema>\n\n// ─── Change Password ─────────────────────────────────────────\nexport const changePasswordSchema = z.object({\n currentPassword: z\n .string({ required_error: 'La contraseña actual es requerida' })\n .min(1, 'La contraseña actual es requerida'),\n newPassword: z\n .string({ required_error: 'La nueva contraseña es requerida' })\n .min(10, 'La contraseña debe tener al menos 10 caracteres'),\n})\n\nexport type ChangePasswordInput = z.infer<typeof changePasswordSchema>\n\n// ─── Magic Link ──────────────────────────────────────────────\nexport const magicLinkRequestSchema = z.object({\n email: z\n .string({ required_error: 'El correo es requerido' })\n .min(1, 'El correo es requerido')\n .email('Correo electrónico inválido'),\n})\n\nexport type MagicLinkRequestInput = z.infer<typeof magicLinkRequestSchema>\n\nexport const magicLinkVerifySchema = z.object({\n token: z.string({ required_error: 'El token es requerido' }).min(1, 'El token es requerido'),\n})\n\nexport type MagicLinkVerifyInput = z.infer<typeof magicLinkVerifySchema>\n\n// ─── Social Login ────────────────────────────────────────────\nexport const socialLoginSchema = z.object({\n provider: z.enum(['google', 'github'], {\n required_error: 'El proveedor es requerido',\n }),\n providerAccountId: z\n .string({ required_error: 'El ID de proveedor es requerido' })\n .min(1, 'El ID de proveedor es requerido'),\n email: z\n .string({ required_error: 'El correo es requerido' })\n .min(1, 'El correo es requerido')\n .email('Correo electrónico inválido'),\n emailVerified: z.boolean().optional(),\n firstName: z.string().optional(),\n lastName: z.string().optional(),\n createUserIfNotExists: z.boolean().optional(),\n turnstileToken: z.string().optional(),\n acceptedTosVersion: z.string().optional(),\n acceptedPrivacyVersion: z.string().optional(),\n})\n\nexport type SocialLoginInput = z.infer<typeof socialLoginSchema>\n\n// ─── Forgot Password (request reset) ────────────────────────\nexport function createForgotPasswordSchema(v: AccessMessages['validation']) {\n return z.object({\n email: z\n .string({ required_error: v.emailRequired })\n .min(1, v.emailRequired)\n .email(v.emailInvalid),\n })\n}\n\nexport const forgotPasswordSchema = z.object({\n email: z\n .string({ required_error: 'El correo es requerido' })\n .min(1, 'El correo es requerido')\n .email('Correo electrónico inválido'),\n})\n\nexport type ForgotPasswordInput = z.infer<typeof forgotPasswordSchema>\n\n// ─── Reset Password (confirm reset) ─────────────────────────\nexport function createResetPasswordConfirmSchema(v: AccessMessages['validation']) {\n return z\n .object({\n token: z.string({ required_error: v.tokenRequired }).min(1, v.tokenRequired),\n newPassword: z.string({ required_error: v.newPasswordRequired }).min(10, v.passwordMinLength),\n confirmPassword: z\n .string({ required_error: v.confirmPasswordRequired })\n .min(1, v.confirmPasswordRequired),\n })\n .refine((data) => data.newPassword === data.confirmPassword, {\n message: v.passwordsMismatch,\n path: ['confirmPassword'],\n })\n}\n\nexport const resetPasswordConfirmSchema = z\n .object({\n token: z.string({ required_error: 'El token es requerido' }).min(1, 'El token es requerido'),\n newPassword: z\n .string({ required_error: 'La nueva contraseña es requerida' })\n .min(10, 'La contraseña debe tener al menos 10 caracteres'),\n confirmPassword: z\n .string({ required_error: 'Confirma tu contraseña' })\n .min(1, 'Confirma tu contraseña'),\n })\n .refine((data) => data.newPassword === data.confirmPassword, {\n message: 'Las contraseñas no coinciden',\n path: ['confirmPassword'],\n })\n\nexport type ResetPasswordConfirmInput = z.infer<typeof resetPasswordConfirmSchema>\n\n// ─── Passkey Register Start ──────────────────────────────────\nexport const passkeyRegisterStartSchema = z.object({\n deviceName: z.string().optional(),\n})\n\nexport type PasskeyRegisterStartInput = z.infer<typeof passkeyRegisterStartSchema>\n","import { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","// ─── ApiError ────────────────────────────────────────────────\n/** Error thrown by the API client — carries the HTTP status code. */\nexport interface ApiError extends Error {\n status: number\n}\n\n/** Check if an error is an API auth error (401/403). */\nexport function isAuthError(err: unknown): boolean {\n return (\n err instanceof Error &&\n typeof (err as ApiError).status === 'number' &&\n ((err as ApiError).status === 401 || (err as ApiError).status === 403)\n )\n}\n\n// ─── Path suffixes (appended to basePath) ───────────────────\nconst SUFFIXES = {\n login: 'login',\n signup: 'signup',\n logout: 'logout',\n me: 'me',\n refresh: 'refresh',\n bootstrap: 'session/bootstrap',\n magicLinkRequest: 'magic-link/request',\n magicLinkVerify: 'magic-link/verify',\n socialLogin: 'social/login',\n changePassword: 'password/change',\n passkeyLogin: 'passkeys/login',\n passkeyLoginStart: 'passkeys/login/start',\n passkeyLoginVerify: 'passkeys/login/verify',\n passkeyRegisterStart: 'passkeys/register/start',\n passkeyRegisterVerify: 'passkeys/register/verify',\n passkeys: 'passkeys',\n providers: 'billing/providers',\n plans: 'billing/plans',\n subscription: 'billing/subscription',\n checkout: 'billing/checkout',\n billingPortal: 'billing/portal',\n invoices: 'billing/invoices',\n submitTransferProof: 'billing/transfer-proof',\n transferProofs: 'billing/transfer-proofs',\n payphoneConfirm: 'billing/payphone/confirm',\n passwordResetRequest: 'password/reset/request',\n passwordResetConfirm: 'password/reset/confirm',\n referralMe: 'referrals/me',\n referralStats: 'referrals/stats',\n userTenants: 'tenants',\n} as const\n\n/** Base paths for each mode */\nexport const BASE_PATHS = {\n /** Proxy mode (Next.js): requests go to the same origin via route handler */\n proxy: '/api/auth',\n /** Direct mode: requests go straight to the Azirid API */\n direct: '/v1/users/auth',\n} as const\n\n/** Build full path map from a basePath */\nexport function buildPaths(basePath: string): AuthPaths {\n const bp = basePath.replace(/\\/$/, '')\n return Object.fromEntries(\n Object.entries(SUFFIXES).map(([key, suffix]) => [key, `${bp}/${suffix}`]),\n ) as unknown as AuthPaths\n}\n\n/** Default paths (direct mode — backward compatible) */\nconst PATHS = buildPaths(BASE_PATHS.direct)\n\nexport type AuthPaths = { [K in keyof typeof SUFFIXES]: string }\n\n// ─── Client config ───────────────────────────────────────────\nexport interface AccessClientConfig {\n /** Base URL of the Azirid API (empty string for proxy mode) */\n baseUrl: string\n /**\n * Base path for auth endpoints.\n * - Proxy mode: '/api/auth' (matches Next.js route handler)\n * - Direct mode: '/v1/users/auth' (matches API routes)\n * @default '/v1/users/auth'\n */\n basePath?: string\n /** Extra headers (e.g. Authorization) */\n headers?: Record<string, string>\n}\n\nexport interface AccessClient {\n /** HTTP methods */\n post: <T = unknown>(path: string, body?: unknown) => Promise<T>\n get: <T = unknown>(path: string) => Promise<T>\n patch: <T = unknown>(path: string, body?: unknown) => Promise<T>\n del: <T = unknown>(path: string) => Promise<T>\n /** Resolved paths */\n paths: AuthPaths\n /** Base URL */\n baseUrl: string\n /** App context */\n appContext?: {\n publishableKey: string\n tenantId?: string\n }\n /** Manually set the access token (used by refresh/bootstrap) */\n setAccessToken: (token: string | null) => void\n /** Get the current access token */\n getAccessToken: () => string | null\n /** Store refresh token received from the API body (cross-origin support) */\n setRefreshToken: (token: string | null) => void\n /** Get the current in-memory refresh token */\n getRefreshToken: () => string | null\n /** Store CSRF token received from the API body (cross-origin support) */\n setCsrfToken: (token: string | null) => void\n /** Get the current CSRF token (from memory or cookie) */\n getCsrfToken: () => string | null\n /** Deduplicated refresh — safe to call from multiple places concurrently */\n refreshSession: (opts?: { tenantId?: string }) => Promise<void>\n /** Deduplicated bootstrap — safe to call from Strict Mode double-mounts */\n bootstrapSession: <T = unknown>() => Promise<T>\n}\n\nexport function createAccessClient(\n config: AccessClientConfig,\n appContext?: AccessClient['appContext'],\n): AccessClient {\n const baseUrl = config.baseUrl.replace(/\\/$/, '')\n const paths = config.basePath ? buildPaths(config.basePath) : PATHS\n\n // sessionStorage keys (per-tab, survives page refresh)\n const storageKeyRt = '__azrt'\n const storageKeyCsrf = '__azxc'\n\n function ssGet(key: string): string | null {\n try {\n return typeof sessionStorage !== 'undefined' ? sessionStorage.getItem(key) : null\n } catch {\n return null\n }\n }\n function ssSet(key: string, value: string | null) {\n try {\n if (typeof sessionStorage === 'undefined') return\n if (value) sessionStorage.setItem(key, value)\n else sessionStorage.removeItem(key)\n } catch {\n /* SSR or private browsing */\n }\n }\n\n let accessToken: string | null = null\n let refreshToken: string | null = ssGet(storageKeyRt)\n let csrfToken: string | null = ssGet(storageKeyCsrf)\n let isRefreshing = false\n let refreshPromise: Promise<void> | null = null\n let bootstrapPromise: Promise<unknown> | null = null\n\n // ── Cross-tab token sync via BroadcastChannel ──────────────\n type TokenMessage = {\n type: 'token-refreshed'\n accessToken: string | null\n refreshToken: string | null\n csrfToken: string | null\n }\n\n let channel: BroadcastChannel | null = null\n try {\n if (typeof BroadcastChannel !== 'undefined') {\n channel = new BroadcastChannel('azirid-auth')\n channel.onmessage = (event: MessageEvent<TokenMessage>) => {\n if (event.data?.type === 'token-refreshed') {\n accessToken = event.data.accessToken\n if (event.data.refreshToken) setRefreshToken(event.data.refreshToken)\n if (event.data.csrfToken) setCsrfToken(event.data.csrfToken)\n }\n }\n }\n } catch {\n // BroadcastChannel not available (SSR, old browsers)\n }\n\n function broadcastTokens() {\n try {\n channel?.postMessage({\n type: 'token-refreshed',\n accessToken,\n refreshToken,\n csrfToken,\n } satisfies TokenMessage)\n } catch {\n // ignore\n }\n }\n\n function setAccessToken(token: string | null) {\n accessToken = token\n }\n\n function getAccessToken() {\n return accessToken\n }\n\n function setRefreshToken(token: string | null) {\n refreshToken = token\n ssSet(storageKeyRt, token)\n }\n\n function getRefreshToken() {\n return refreshToken\n }\n\n function setCsrfToken(token: string | null) {\n csrfToken = token\n ssSet(storageKeyCsrf, token)\n }\n\n const csrfCookieName = '_axc'\n\n /** Read CSRF token: prefer in-memory (cross-origin), fallback to cookie (same-origin) */\n function getCsrfToken(): string | null {\n if (csrfToken) return csrfToken\n if (typeof document === 'undefined') return null\n const match = document.cookie.match(new RegExp(`(?:^|;\\\\s*)${csrfCookieName}=([^;]*)`))\n return match ? decodeURIComponent(match[1]) : null\n }\n\n // Paths that rely on refresh token (not Bearer JWT)\n const sessionPaths: readonly string[] = [paths.refresh, paths.bootstrap, paths.logout]\n\n async function refreshTokensInternal(opts?: { tenantId?: string }): Promise<void> {\n const reqHeaders: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...config.headers,\n }\n if (appContext?.publishableKey) {\n reqHeaders['X-Publishable-Key'] = appContext.publishableKey\n }\n const csrf = getCsrfToken()\n if (csrf) reqHeaders['X-CSRF-Token'] = csrf\n\n // Send refresh token in body for cross-origin support\n const bodyPayload: Record<string, string> = {}\n if (refreshToken) {\n bodyPayload['rt'] = refreshToken\n }\n if (opts?.tenantId) {\n bodyPayload['tenantId'] = opts.tenantId\n }\n\n const res = await fetch(`${baseUrl}${paths.refresh}`, {\n method: 'POST',\n headers: reqHeaders,\n credentials: 'include',\n body: JSON.stringify(bodyPayload),\n })\n\n if (!res.ok) {\n accessToken = null\n setRefreshToken(null)\n setCsrfToken(null)\n throw new Error('Session expired')\n }\n\n const raw = await res.json()\n // Unwrap API envelope { data, meta } → extract data payload\n const json = raw && typeof raw === 'object' && 'data' in raw && 'meta' in raw ? raw.data : raw\n accessToken = json.at ?? json.accessToken ?? null\n // Update tokens from body (dual delivery) — persisted to sessionStorage\n const rt = json.rt ?? json.refreshToken\n const xc = json.xc ?? json.csrfToken\n if (rt) setRefreshToken(rt)\n if (xc) setCsrfToken(xc)\n\n // Notify other tabs about the new tokens\n broadcastTokens()\n }\n\n /**\n * Deduplicated refresh: if a refresh is already in flight, all callers\n * await the same promise instead of firing a second request with the\n * same (soon-to-be-revoked) token.\n */\n function refreshTokens(opts?: { tenantId?: string }): Promise<void> {\n // If switching tenant, bypass deduplication cache to force a new request\n if (opts?.tenantId) {\n isRefreshing = true\n return refreshTokensInternal(opts).finally(() => {\n isRefreshing = false\n })\n }\n\n if (refreshPromise) return refreshPromise\n\n isRefreshing = true\n refreshPromise = refreshTokensInternal().finally(() => {\n isRefreshing = false\n refreshPromise = null\n })\n\n return refreshPromise\n }\n\n /**\n * Deduplicated bootstrap: if a bootstrap is already in flight (e.g. React 18\n * Strict Mode double-mount), all callers await the same promise instead of\n * firing a second request that would rotate the token and invalidate the first.\n */\n function deduplicatedBootstrap<T>(): Promise<T> {\n if (bootstrapPromise) return bootstrapPromise as Promise<T>\n\n bootstrapPromise = request<T>('POST', paths.bootstrap).finally(() => {\n bootstrapPromise = null\n })\n\n return bootstrapPromise as Promise<T>\n }\n\n async function request<T>(method: string, path: string, body?: unknown): Promise<T> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...config.headers,\n }\n\n // Publishable key header for public endpoints\n if (appContext?.publishableKey) {\n headers['X-Publishable-Key'] = appContext.publishableKey\n }\n\n // Only send Bearer token on endpoints that use JWT guard (not session-based)\n const isSessionPath = sessionPaths.includes(path)\n if (accessToken && !isSessionPath) {\n headers['Authorization'] = `Bearer ${accessToken}`\n }\n\n // CSRF token (from memory or cookie)\n const csrf = getCsrfToken()\n if (csrf) {\n headers['X-CSRF-Token'] = csrf\n }\n\n // For session paths (refresh/bootstrap/logout), inject refresh token into body\n let requestBody = body\n if (isSessionPath && refreshToken) {\n const existing =\n typeof body === 'object' && body !== null ? (body as Record<string, unknown>) : {}\n if (!existing['rt']) {\n requestBody = { ...existing, rt: refreshToken }\n }\n }\n\n let res = await fetch(`${baseUrl}${path}`, {\n method,\n headers,\n credentials: 'include',\n ...(requestBody !== undefined ? { body: JSON.stringify(requestBody) } : {}),\n })\n\n // Auto-refresh on 401 (skip for auth endpoints that don't use JWT)\n const skipRefreshPaths = [\n paths.refresh,\n paths.login,\n paths.signup,\n paths.bootstrap,\n paths.logout,\n ]\n if (res.status === 401 && !skipRefreshPaths.includes(path as typeof paths.refresh)) {\n try {\n await refreshTokens()\n } catch {\n let msg = 'Session expired'\n try {\n const json = await res.json()\n msg =\n json.message ||\n json.error?.message ||\n (typeof json.error === 'string' ? json.error : null) ||\n msg\n } catch {\n // ignore parse errors\n }\n throw new Error(msg)\n }\n\n // Retry the original request with the new token\n const retryHeaders: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...config.headers,\n }\n if (appContext?.publishableKey) {\n retryHeaders['X-Publishable-Key'] = appContext.publishableKey\n }\n if (accessToken && !isSessionPath) {\n retryHeaders['Authorization'] = `Bearer ${accessToken}`\n }\n const retryCsrf = getCsrfToken()\n if (retryCsrf) {\n retryHeaders['X-CSRF-Token'] = retryCsrf\n }\n\n res = await fetch(`${baseUrl}${path}`, {\n method,\n headers: retryHeaders,\n credentials: 'include',\n ...(requestBody !== undefined ? { body: JSON.stringify(requestBody) } : {}),\n })\n }\n\n if (!res.ok) {\n let msg = `Error ${res.status}`\n try {\n const json = await res.json()\n msg =\n json.message ||\n json.error?.message ||\n (typeof json.error === 'string' ? json.error : null) ||\n msg\n } catch {\n // ignore parse errors\n }\n const err = new Error(msg)\n ;(err as ApiError).status = res.status\n throw err\n }\n\n // Handle 204 No Content\n if (res.status === 204) return undefined as T\n\n // Unwrap API envelope { data, meta } → return inner data\n const json = await res.json()\n if (json && typeof json === 'object' && 'data' in json && 'meta' in json) {\n return json.data as T\n }\n return json as T\n }\n\n return {\n post: <T = unknown>(path: string, body?: unknown) => request<T>('POST', path, body),\n get: <T = unknown>(path: string) => request<T>('GET', path),\n patch: <T = unknown>(path: string, body?: unknown) => request<T>('PATCH', path, body),\n del: <T = unknown>(path: string) => request<T>('DELETE', path),\n paths,\n baseUrl,\n appContext,\n setAccessToken,\n getAccessToken,\n setRefreshToken,\n getRefreshToken,\n setCsrfToken,\n getCsrfToken,\n refreshSession: (opts?: { tenantId?: string }) => refreshTokens(opts),\n bootstrapSession: <T = unknown>() => deduplicatedBootstrap<T>(),\n }\n}\n\nexport { PATHS }\n","import type { AccessMessages } from '../types'\n\nexport const es: AccessMessages = {\n login: {\n title: 'Inicia sesión en tu cuenta',\n description: 'Ingresa tus credenciales para acceder al dashboard.',\n submit: 'Iniciar sesión',\n emailLabel: 'Correo electrónico',\n emailPlaceholder: 'tu@empresa.com',\n passwordLabel: 'Contraseña',\n passwordPlaceholder: '••••••••',\n },\n signup: {\n title: 'Crea tu cuenta',\n description: 'Ingresa tus datos para registrarte.',\n submit: 'Crear cuenta',\n emailLabel: 'Correo electrónico',\n emailPlaceholder: 'tu@empresa.com',\n passwordLabel: 'Contraseña',\n passwordPlaceholder: 'Mín. 10 caracteres',\n confirmPasswordLabel: 'Confirmar contraseña',\n confirmPasswordPlaceholder: 'Repite tu contraseña',\n },\n forgotPassword: {\n title: 'Recuperar contraseña',\n description:\n 'Ingresa tu correo electrónico y te enviaremos un enlace para restablecer tu contraseña.',\n submit: 'Enviar enlace',\n emailLabel: 'Correo electrónico',\n emailPlaceholder: 'tu@empresa.com',\n successMessage: 'Revisa tu correo electrónico para restablecer tu contraseña.',\n },\n resetPassword: {\n title: 'Restablecer contraseña',\n description: 'Ingresa tu nueva contraseña.',\n submit: 'Restablecer contraseña',\n newPasswordLabel: 'Nueva contraseña',\n newPasswordPlaceholder: 'Mín. 10 caracteres',\n confirmPasswordLabel: 'Confirmar contraseña',\n confirmPasswordPlaceholder: 'Repite tu contraseña',\n },\n social: {\n google: 'Continuar con Google',\n apple: 'Continuar con Apple',\n separator: 'o continuar con correo',\n comingSoon: 'Próximamente',\n },\n passwordToggle: {\n show: 'Ver',\n hide: 'Ocultar',\n },\n securedBy: 'Protegido por',\n billing: {\n pay: 'Pagar',\n selectPaymentMethod: 'Selecciona método de pago',\n creditCard: 'Tarjeta de crédito/débito',\n paypal: 'PayPal',\n payphone: 'Payphone',\n bankTransfer: 'Transferencia bancaria',\n cancel: 'Cancelar',\n processing: 'Procesando...',\n },\n navigation: {\n noAccountText: '¿No tienes cuenta?',\n signUpLink: 'Regístrate',\n hasAccountText: '¿Ya tienes cuenta?',\n signInLink: 'Inicia sesión',\n forgotPassword: '¿Olvidaste tu contraseña?',\n backToLogin: 'Volver a iniciar sesión',\n },\n validation: {\n emailRequired: 'El correo es requerido',\n emailInvalid: 'Correo electrónico inválido',\n passwordRequired: 'La contraseña es requerida',\n passwordMinLength: 'La contraseña debe tener al menos 10 caracteres',\n confirmPasswordRequired: 'Confirma tu contraseña',\n passwordsMismatch: 'Las contraseñas no coinciden',\n tokenRequired: 'El token es requerido',\n newPasswordRequired: 'La nueva contraseña es requerida',\n currentPasswordRequired: 'La contraseña actual es requerida',\n mfaCodeRequired: 'El código es requerido',\n mfaCodeLength: 'El código debe tener 6 dígitos',\n providerRequired: 'El proveedor es requerido',\n providerIdRequired: 'El ID de proveedor es requerido',\n urlInvalid: 'URL inválida',\n },\n}\n","import type { AccessMessages } from '../types'\n\nexport const en: AccessMessages = {\n login: {\n title: 'Sign in to your account',\n description: 'Enter your credentials to access the dashboard.',\n submit: 'Sign in',\n emailLabel: 'Email',\n emailPlaceholder: 'you@company.com',\n passwordLabel: 'Password',\n passwordPlaceholder: '••••••••',\n },\n signup: {\n title: 'Create your account',\n description: 'Enter your details to sign up.',\n submit: 'Create account',\n emailLabel: 'Email',\n emailPlaceholder: 'you@company.com',\n passwordLabel: 'Password',\n passwordPlaceholder: 'Min. 10 characters',\n confirmPasswordLabel: 'Confirm password',\n confirmPasswordPlaceholder: 'Repeat your password',\n },\n forgotPassword: {\n title: 'Reset password',\n description: \"Enter your email and we'll send you a link to reset your password.\",\n submit: 'Send link',\n emailLabel: 'Email',\n emailPlaceholder: 'you@company.com',\n successMessage: 'Check your email to reset your password.',\n },\n resetPassword: {\n title: 'Reset password',\n description: 'Enter your new password.',\n submit: 'Reset password',\n newPasswordLabel: 'New password',\n newPasswordPlaceholder: 'Min. 10 characters',\n confirmPasswordLabel: 'Confirm password',\n confirmPasswordPlaceholder: 'Repeat your password',\n },\n social: {\n google: 'Continue with Google',\n apple: 'Continue with Apple',\n separator: 'or continue with email',\n comingSoon: 'Coming soon',\n },\n passwordToggle: {\n show: 'Show',\n hide: 'Hide',\n },\n securedBy: 'Secured by',\n billing: {\n pay: 'Pay',\n selectPaymentMethod: 'Select payment method',\n creditCard: 'Credit/Debit Card',\n paypal: 'PayPal',\n payphone: 'Payphone',\n bankTransfer: 'Bank Transfer',\n cancel: 'Cancel',\n processing: 'Processing...',\n },\n navigation: {\n noAccountText: \"Don't have an account?\",\n signUpLink: 'Sign up',\n hasAccountText: 'Already have an account?',\n signInLink: 'Sign in',\n forgotPassword: 'Forgot your password?',\n backToLogin: 'Back to sign in',\n },\n validation: {\n emailRequired: 'Email is required',\n emailInvalid: 'Invalid email address',\n passwordRequired: 'Password is required',\n passwordMinLength: 'Password must be at least 10 characters',\n confirmPasswordRequired: 'Please confirm your password',\n passwordsMismatch: 'Passwords do not match',\n tokenRequired: 'Token is required',\n newPasswordRequired: 'New password is required',\n currentPasswordRequired: 'Current password is required',\n mfaCodeRequired: 'Code is required',\n mfaCodeLength: 'Code must be 6 digits',\n providerRequired: 'Provider is required',\n providerIdRequired: 'Provider ID is required',\n urlInvalid: 'Invalid URL',\n },\n}\n","import type { AccessMessages, SupportedLocale } from '../types'\nimport { es } from './es'\nimport { en } from './en'\n\nconst dictionaries: Record<SupportedLocale, AccessMessages> = { es, en }\n\n/**\n * Resolve the messages dictionary for a given locale.\n * Optional overrides are shallow-merged per section.\n */\nexport function resolveMessages(\n locale: SupportedLocale = 'es',\n overrides?: Partial<AccessMessages>,\n): AccessMessages {\n const base = dictionaries[locale] ?? dictionaries.es\n if (!overrides) return base\n\n return {\n login: { ...base.login, ...overrides.login },\n signup: { ...base.signup, ...overrides.signup },\n forgotPassword: { ...base.forgotPassword, ...overrides.forgotPassword },\n resetPassword: { ...base.resetPassword, ...overrides.resetPassword },\n navigation: { ...base.navigation, ...overrides.navigation },\n social: { ...base.social, ...overrides.social },\n passwordToggle: { ...base.passwordToggle, ...overrides.passwordToggle },\n securedBy: overrides.securedBy ?? base.securedBy,\n billing: { ...base.billing, ...overrides.billing },\n validation: { ...base.validation, ...overrides.validation },\n }\n}\n\nexport { es, en }\n","// Auto-generated — do not edit.\nexport const css = \"/*! tailwindcss v4.2.1 | MIT License | https://tailwindcss.com */\\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){[data-azirid] *,[data-azirid] :before,[data-azirid] :after,[data-azirid] ::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-content:\\\"\\\"}}[data-azirid]{--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \\\"Liberation Mono\\\", \\\"Courier New\\\", monospace;--color-green-50:oklch(98.2% .018 155.826);--color-green-200:oklch(92.5% .084 155.995);--color-green-800:oklch(44.8% .119 151.328);--color-green-950:oklch(26.6% .065 152.934);--color-blue-500:oklch(62.3% .214 259.815);--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--font-weight-medium:500;--leading-snug:1.375;--radius-md:calc(var(--aa-radius) - 2px);--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--aa-font-sans,ui-sans-serif, system-ui, sans-serif);--default-mono-font-family:var(--font-mono)}.\\\\@container\\\\/card-header{container:card-header/inline-size}.collapse{visibility:collapse}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.start{inset-inline-start:var(--spacing)}.z-10{z-index:10}.col-start-2{grid-column-start:2}.row-span-2{grid-row:span 2/span 2}.row-start-1{grid-row-start:1}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.mx-auto{margin-inline:auto}.mr-2{margin-right:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.h-4{height:calc(var(--spacing) * 4)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.w-4{width:calc(var(--spacing) * 4)}.w-auto{width:auto}.w-full{width:100%}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:calc(var(--spacing) * 0)}.shrink-0{flex-shrink:0}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-spin{animation:var(--animate-spin)}.cursor-pointer{cursor:pointer}.auto-rows-min{grid-auto-rows:min-content}.flex-col{flex-direction:column}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\\\\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}.self-center{align-self:center}.self-start{align-self:flex-start}.justify-self-end{justify-self:flex-end}.overflow-hidden{overflow:hidden}.rounded-\\\\[min\\\\(var\\\\(--radius-md\\\\)\\\\,10px\\\\)\\\\]{border-radius:min(var(--radius-md), 10px)}.rounded-\\\\[min\\\\(var\\\\(--radius-md\\\\)\\\\,12px\\\\)\\\\]{border-radius:min(var(--radius-md), 12px)}.rounded-lg{border-radius:var(--aa-radius)}.rounded-md{border-radius:calc(var(--aa-radius) - 2px)}.rounded-xl{border-radius:calc(var(--aa-radius) + 4px)}.rounded-t-xl{border-top-left-radius:calc(var(--aa-radius) + 4px);border-top-right-radius:calc(var(--aa-radius) + 4px)}.rounded-b-xl{border-bottom-right-radius:calc(var(--aa-radius) + 4px);border-bottom-left-radius:calc(var(--aa-radius) + 4px)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-border{border-color:var(--aa-border)}.border-destructive,.border-destructive\\\\/50{border-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.border-destructive\\\\/50{border-color:color-mix(in oklab, var(--aa-destructive) 50%, transparent)}}.border-green-200{border-color:var(--color-green-200)}.border-input{border-color:var(--aa-input)}.border-transparent{border-color:#0000}.bg-background{background-color:var(--aa-background)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-border{background-color:var(--aa-border)}.bg-card{background-color:var(--aa-card)}.bg-destructive,.bg-destructive\\\\/10{background-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.bg-destructive\\\\/10{background-color:color-mix(in oklab, var(--aa-destructive) 10%, transparent)}}.bg-green-50{background-color:var(--color-green-50)}.bg-muted,.bg-muted\\\\/50{background-color:var(--aa-muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\\\\/50{background-color:color-mix(in oklab, var(--aa-muted) 50%, transparent)}}.bg-primary{background-color:var(--aa-primary)}.bg-secondary{background-color:var(--aa-secondary)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-clip-padding{background-clip:padding-box}.p-4{padding:calc(var(--spacing) * 4)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\\\\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.text-center{text-align:center}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\\\[0\\\\.8rem\\\\]{font-size:.8rem}.leading-none{--tw-leading:1;line-height:1}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.whitespace-nowrap{white-space:nowrap}.text-card-foreground{color:var(--aa-card-foreground)}.text-destructive{color:var(--aa-destructive)}.text-green-800{color:var(--color-green-800)}.text-muted-foreground{color:var(--aa-muted-foreground)}.text-primary{color:var(--aa-primary)}.text-primary-foreground{color:var(--aa-primary-foreground)}.text-secondary-foreground{color:var(--aa-secondary-foreground)}.uppercase{text-transform:uppercase}.underline-offset-4{text-underline-offset:4px}.opacity-25{opacity:.25}.opacity-75{opacity:.75}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-foreground,.ring-foreground\\\\/10{--tw-ring-color:var(--aa-foreground)}@supports (color:color-mix(in lab, red, red)){.ring-foreground\\\\/10{--tw-ring-color:color-mix(in oklab, var(--aa-foreground) 10%, transparent)}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.group-data-\\\\[disabled\\\\=true\\\\]\\\\:pointer-events-none:is(:where(.group)[data-disabled=true] *){pointer-events:none}.group-data-\\\\[disabled\\\\=true\\\\]\\\\:opacity-50:is(:where(.group)[data-disabled=true] *){opacity:.5}.group-data-\\\\[size\\\\=sm\\\\]\\\\/card\\\\:p-3:is(:where(.group\\\\/card)[data-size=sm] *){padding:calc(var(--spacing) * 3)}.group-data-\\\\[size\\\\=sm\\\\]\\\\/card\\\\:px-3:is(:where(.group\\\\/card)[data-size=sm] *){padding-inline:calc(var(--spacing) * 3)}.group-data-\\\\[size\\\\=sm\\\\]\\\\/card\\\\:text-sm:is(:where(.group\\\\/card)[data-size=sm] *){font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.peer-disabled\\\\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\\\\:opacity-50:is(:where(.peer):disabled~*){opacity:.5}.file\\\\:inline-flex::file-selector-button{display:inline-flex}.file\\\\:h-6::file-selector-button{height:calc(var(--spacing) * 6)}.file\\\\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\\\\:bg-transparent::file-selector-button{background-color:#0000}.file\\\\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\\\\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\\\\:text-foreground::file-selector-button{color:var(--aa-foreground)}.placeholder\\\\:text-muted-foreground::placeholder{color:var(--aa-muted-foreground)}.after\\\\:absolute:after{content:var(--tw-content);position:absolute}.after\\\\:inset-0:after{content:var(--tw-content);inset:calc(var(--spacing) * 0)}.after\\\\:top-1\\\\/2:after{content:var(--tw-content);top:50%}.after\\\\:z-0:after{content:var(--tw-content);z-index:0}.after\\\\:flex:after{content:var(--tw-content);display:flex}.after\\\\:items-center:after{content:var(--tw-content);align-items:center}.after\\\\:border-t:after{content:var(--tw-content);border-top-style:var(--tw-border-style);border-top-width:1px}.after\\\\:border-border:after{content:var(--tw-content);border-color:var(--aa-border)}@media (hover:hover){.hover\\\\:bg-destructive\\\\/20:hover{background-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.hover\\\\:bg-destructive\\\\/20:hover{background-color:color-mix(in oklab, var(--aa-destructive) 20%, transparent)}}.hover\\\\:bg-muted:hover{background-color:var(--aa-muted)}.hover\\\\:bg-secondary\\\\/80:hover{background-color:var(--aa-secondary)}@supports (color:color-mix(in lab, red, red)){.hover\\\\:bg-secondary\\\\/80:hover{background-color:color-mix(in oklab, var(--aa-secondary) 80%, transparent)}}.hover\\\\:text-foreground:hover{color:var(--aa-foreground)}.hover\\\\:underline:hover{text-decoration-line:underline}}.focus-visible\\\\:border-destructive\\\\/40:focus-visible{border-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\\\:border-destructive\\\\/40:focus-visible{border-color:color-mix(in oklab, var(--aa-destructive) 40%, transparent)}}.focus-visible\\\\:border-ring:focus-visible{border-color:var(--aa-ring)}.focus-visible\\\\:ring-3:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\\\\:ring-destructive\\\\/20:focus-visible{--tw-ring-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\\\:ring-destructive\\\\/20:focus-visible{--tw-ring-color:color-mix(in oklab, var(--aa-destructive) 20%, transparent)}}.focus-visible\\\\:ring-ring\\\\/50:focus-visible{--tw-ring-color:var(--aa-ring)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\\\:ring-ring\\\\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--aa-ring) 50%, transparent)}}.disabled\\\\:pointer-events-none:disabled{pointer-events:none}.disabled\\\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\\\:bg-input\\\\/50:disabled{background-color:var(--aa-input)}@supports (color:color-mix(in lab, red, red)){.disabled\\\\:bg-input\\\\/50:disabled{background-color:color-mix(in oklab, var(--aa-input) 50%, transparent)}}.disabled\\\\:opacity-50:disabled{opacity:.5}:where([data-slot=button-group]) .in-data-\\\\[slot\\\\=button-group\\\\]\\\\:rounded-lg{border-radius:var(--aa-radius)}.has-data-\\\\[icon\\\\=inline-end\\\\]\\\\:pr-1\\\\.5:has([data-icon=inline-end]){padding-right:calc(var(--spacing) * 1.5)}.has-data-\\\\[icon\\\\=inline-end\\\\]\\\\:pr-2:has([data-icon=inline-end]){padding-right:calc(var(--spacing) * 2)}.has-data-\\\\[icon\\\\=inline-end\\\\]\\\\:pr-3:has([data-icon=inline-end]){padding-right:calc(var(--spacing) * 3)}.has-data-\\\\[icon\\\\=inline-start\\\\]\\\\:pl-1\\\\.5:has([data-icon=inline-start]){padding-left:calc(var(--spacing) * 1.5)}.has-data-\\\\[icon\\\\=inline-start\\\\]\\\\:pl-2:has([data-icon=inline-start]){padding-left:calc(var(--spacing) * 2)}.has-data-\\\\[icon\\\\=inline-start\\\\]\\\\:pl-3:has([data-icon=inline-start]){padding-left:calc(var(--spacing) * 3)}.has-data-\\\\[slot\\\\=card-action\\\\]\\\\:grid-cols-\\\\[1fr_auto\\\\]:has([data-slot=card-action]){grid-template-columns:1fr auto}.has-data-\\\\[slot\\\\=card-description\\\\]\\\\:grid-rows-\\\\[auto_auto\\\\]:has([data-slot=card-description]){grid-template-rows:auto auto}.has-data-\\\\[slot\\\\=card-footer\\\\]\\\\:pb-0:has([data-slot=card-footer]){padding-bottom:calc(var(--spacing) * 0)}.has-\\\\[\\\\>img\\\\:first-child\\\\]\\\\:pt-0:has(>img:first-child){padding-top:calc(var(--spacing) * 0)}.aria-expanded\\\\:bg-muted[aria-expanded=true]{background-color:var(--aa-muted)}.aria-expanded\\\\:bg-secondary[aria-expanded=true]{background-color:var(--aa-secondary)}.aria-expanded\\\\:text-foreground[aria-expanded=true]{color:var(--aa-foreground)}.aria-expanded\\\\:text-secondary-foreground[aria-expanded=true]{color:var(--aa-secondary-foreground)}.aria-invalid\\\\:border-destructive[aria-invalid=true]{border-color:var(--aa-destructive)}.aria-invalid\\\\:ring-3[aria-invalid=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.aria-invalid\\\\:ring-destructive\\\\/20[aria-invalid=true]{--tw-ring-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.aria-invalid\\\\:ring-destructive\\\\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--aa-destructive) 20%, transparent)}}.data-horizontal\\\\:h-px[data-horizontal]{height:1px}.data-horizontal\\\\:w-full[data-horizontal]{width:100%}.data-vertical\\\\:w-px[data-vertical]{width:1px}.data-vertical\\\\:self-stretch[data-vertical]{align-self:stretch}.data-\\\\[size\\\\=sm\\\\]\\\\:gap-3[data-size=sm]{gap:calc(var(--spacing) * 3)}.data-\\\\[size\\\\=sm\\\\]\\\\:py-3[data-size=sm]{padding-block:calc(var(--spacing) * 3)}.data-\\\\[size\\\\=sm\\\\]\\\\:has-data-\\\\[slot\\\\=card-footer\\\\]\\\\:pb-0[data-size=sm]:has([data-slot=card-footer]){padding-bottom:calc(var(--spacing) * 0)}@media (min-width:48rem){.md\\\\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.dark\\\\:border-green-800:is(.dark *){border-color:var(--color-green-800)}.dark\\\\:border-input:is(.dark *){border-color:var(--aa-input)}.dark\\\\:bg-destructive\\\\/20:is(.dark *){background-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:bg-destructive\\\\/20:is(.dark *){background-color:color-mix(in oklab, var(--aa-destructive) 20%, transparent)}}.dark\\\\:bg-green-950:is(.dark *){background-color:var(--color-green-950)}.dark\\\\:bg-input\\\\/30:is(.dark *){background-color:var(--aa-input)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:bg-input\\\\/30:is(.dark *){background-color:color-mix(in oklab, var(--aa-input) 30%, transparent)}}.dark\\\\:text-green-200:is(.dark *){color:var(--color-green-200)}@media (hover:hover){.dark\\\\:hover\\\\:bg-destructive\\\\/30:is(.dark *):hover{background-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:hover\\\\:bg-destructive\\\\/30:is(.dark *):hover{background-color:color-mix(in oklab, var(--aa-destructive) 30%, transparent)}}.dark\\\\:hover\\\\:bg-input\\\\/50:is(.dark *):hover{background-color:var(--aa-input)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:hover\\\\:bg-input\\\\/50:is(.dark *):hover{background-color:color-mix(in oklab, var(--aa-input) 50%, transparent)}}.dark\\\\:hover\\\\:bg-muted\\\\/50:is(.dark *):hover{background-color:var(--aa-muted)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:hover\\\\:bg-muted\\\\/50:is(.dark *):hover{background-color:color-mix(in oklab, var(--aa-muted) 50%, transparent)}}}.dark\\\\:focus-visible\\\\:ring-destructive\\\\/40:is(.dark *):focus-visible{--tw-ring-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:focus-visible\\\\:ring-destructive\\\\/40:is(.dark *):focus-visible{--tw-ring-color:color-mix(in oklab, var(--aa-destructive) 40%, transparent)}}.dark\\\\:disabled\\\\:bg-input\\\\/80:is(.dark *):disabled{background-color:var(--aa-input)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:disabled\\\\:bg-input\\\\/80:is(.dark *):disabled{background-color:color-mix(in oklab, var(--aa-input) 80%, transparent)}}.dark\\\\:aria-invalid\\\\:border-destructive\\\\/50:is(.dark *)[aria-invalid=true]{border-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:aria-invalid\\\\:border-destructive\\\\/50:is(.dark *)[aria-invalid=true]{border-color:color-mix(in oklab, var(--aa-destructive) 50%, transparent)}}.dark\\\\:aria-invalid\\\\:ring-destructive\\\\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--aa-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:aria-invalid\\\\:ring-destructive\\\\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--aa-destructive) 40%, transparent)}}.\\\\[\\\\&_a\\\\]\\\\:underline a{text-decoration-line:underline}.\\\\[\\\\&_a\\\\]\\\\:underline-offset-4 a{text-underline-offset:4px}@media (hover:hover){.\\\\[\\\\&_a\\\\]\\\\:hover\\\\:text-primary a:hover{color:var(--aa-primary)}}.\\\\[\\\\&_svg\\\\]\\\\:pointer-events-none svg{pointer-events:none}.\\\\[\\\\&_svg\\\\]\\\\:shrink-0 svg{flex-shrink:0}.\\\\[\\\\&_svg\\\\:not\\\\(\\\\[class\\\\*\\\\=\\\\'size-\\\\'\\\\]\\\\)\\\\]\\\\:size-3 svg:not([class*=size-]){width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.\\\\[\\\\&_svg\\\\:not\\\\(\\\\[class\\\\*\\\\=\\\\'size-\\\\'\\\\]\\\\)\\\\]\\\\:size-3\\\\.5 svg:not([class*=size-]){width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.\\\\[\\\\&_svg\\\\:not\\\\(\\\\[class\\\\*\\\\=\\\\'size-\\\\'\\\\]\\\\)\\\\]\\\\:size-4 svg:not([class*=size-]){width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\\\\[\\\\.border-b\\\\]\\\\:pb-4.border-b{padding-bottom:calc(var(--spacing) * 4)}.group-data-\\\\[size\\\\=sm\\\\]\\\\/card\\\\:\\\\[\\\\.border-b\\\\]\\\\:pb-3:is(:where(.group\\\\/card)[data-size=sm] *).border-b{padding-bottom:calc(var(--spacing) * 3)}@media (hover:hover){.\\\\[a\\\\]\\\\:hover\\\\:bg-primary\\\\/80:is(a):hover{background-color:var(--aa-primary)}@supports (color:color-mix(in lab, red, red)){.\\\\[a\\\\]\\\\:hover\\\\:bg-primary\\\\/80:is(a):hover{background-color:color-mix(in oklab, var(--aa-primary) 80%, transparent)}}}:is(.\\\\*\\\\:\\\\[img\\\\:first-child\\\\]\\\\:rounded-t-xl>*):is(img:first-child){border-top-left-radius:calc(var(--aa-radius) + 4px);border-top-right-radius:calc(var(--aa-radius) + 4px)}:is(.\\\\*\\\\:\\\\[img\\\\:last-child\\\\]\\\\:rounded-b-xl>*):is(img:last-child){border-bottom-right-radius:calc(var(--aa-radius) + 4px);border-bottom-left-radius:calc(var(--aa-radius) + 4px)}[data-azirid]{--aa-radius:.625rem;--aa-background:oklch(100% 0 0);--aa-foreground:oklch(14.5% 0 0);--aa-card:oklch(100% 0 0);--aa-card-foreground:oklch(14.5% 0 0);--aa-popover:oklch(100% 0 0);--aa-popover-foreground:oklch(14.5% 0 0);--aa-primary:oklch(20.5% 0 0);--aa-primary-foreground:oklch(98.5% 0 0);--aa-secondary:oklch(97% 0 0);--aa-secondary-foreground:oklch(20.5% 0 0);--aa-muted:oklch(97% 0 0);--aa-muted-foreground:oklch(55.6% 0 0);--aa-accent:oklch(97% 0 0);--aa-accent-foreground:oklch(20.5% 0 0);--aa-destructive:oklch(57.7% .245 27.325);--aa-border:oklch(92.2% 0 0);--aa-input:oklch(92.2% 0 0);--aa-ring:oklch(70.8% 0 0);--aa-font-sans:ui-sans-serif, system-ui, sans-serif}@layer base{[data-azirid]{font-family:var(--aa-font-sans);color:var(--aa-foreground);background-color:var(--aa-background);-webkit-text-size-adjust:100%;tab-size:4;-webkit-font-smoothing:antialiased;line-height:1.5}[data-azirid] *,[data-azirid] :before,[data-azirid] :after{box-sizing:border-box;border:0 solid;border-color:var(--aa-border);margin:0;padding:0}[data-azirid] hr{height:0;color:inherit;border-top-width:1px}[data-azirid] h1,[data-azirid] h2,[data-azirid] h3,[data-azirid] h4,[data-azirid] h5,[data-azirid] h6{font-size:inherit;font-weight:inherit}[data-azirid] a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}[data-azirid] b,[data-azirid] strong{font-weight:bolder}[data-azirid] code,[data-azirid] kbd,[data-azirid] samp,[data-azirid] pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}[data-azirid] small{font-size:80%}[data-azirid] table{text-indent:0;border-color:inherit;border-collapse:collapse}[data-azirid] button,[data-azirid] input,[data-azirid] optgroup,[data-azirid] select,[data-azirid] textarea{font-feature-settings:inherit;font-variation-settings:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}[data-azirid] button,[data-azirid] select{text-transform:none}[data-azirid] button,[data-azirid] input[type=button],[data-azirid] input[type=reset],[data-azirid] input[type=submit]{-webkit-appearance:button;background-color:#0000;background-image:none}[data-azirid] :-moz-focusring{outline:auto}[data-azirid] ::-moz-focus-inner{border-style:none;padding:0}[data-azirid] :-moz-ui-invalid{box-shadow:none}[data-azirid] progress{vertical-align:baseline}[data-azirid] ::-webkit-inner-spin-button{height:auto}[data-azirid] ::-webkit-outer-spin-button{height:auto}[data-azirid] [type=search]{-webkit-appearance:textfield;outline-offset:-2px}[data-azirid] ::-webkit-search-decoration{-webkit-appearance:none}[data-azirid] ::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}[data-azirid] summary{display:list-item}[data-azirid] ol,[data-azirid] ul,[data-azirid] menu{margin:0;padding:0;list-style:none}[data-azirid] textarea{resize:vertical}[data-azirid] ::placeholder{opacity:1;color:currentColor}@supports (color:color-mix(in lab, red, red)){[data-azirid] ::placeholder{color:color-mix(in oklch, currentColor 50%, transparent)}}[data-azirid] img,[data-azirid] svg,[data-azirid] video,[data-azirid] canvas,[data-azirid] audio,[data-azirid] iframe,[data-azirid] embed,[data-azirid] object{vertical-align:middle;display:block}[data-azirid] img,[data-azirid] video{max-width:100%;height:auto}[data-azirid] [hidden]:not([hidden=until-found]){display:none}}@property --tw-rotate-x{syntax:\\\"*\\\";inherits:false}@property --tw-rotate-y{syntax:\\\"*\\\";inherits:false}@property --tw-rotate-z{syntax:\\\"*\\\";inherits:false}@property --tw-skew-x{syntax:\\\"*\\\";inherits:false}@property --tw-skew-y{syntax:\\\"*\\\";inherits:false}@property --tw-border-style{syntax:\\\"*\\\";inherits:false;initial-value:solid}@property --tw-leading{syntax:\\\"*\\\";inherits:false}@property --tw-font-weight{syntax:\\\"*\\\";inherits:false}@property --tw-shadow{syntax:\\\"*\\\";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:\\\"*\\\";inherits:false}@property --tw-shadow-alpha{syntax:\\\"<percentage>\\\";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:\\\"*\\\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:\\\"*\\\";inherits:false}@property --tw-inset-shadow-alpha{syntax:\\\"<percentage>\\\";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:\\\"*\\\";inherits:false}@property --tw-ring-shadow{syntax:\\\"*\\\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:\\\"*\\\";inherits:false}@property --tw-inset-ring-shadow{syntax:\\\"*\\\";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:\\\"*\\\";inherits:false}@property --tw-ring-offset-width{syntax:\\\"<length>\\\";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:\\\"*\\\";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:\\\"*\\\";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:\\\"*\\\";inherits:false;initial-value:solid}@property --tw-content{syntax:\\\"*\\\";inherits:false;initial-value:\\\"\\\"}@keyframes spin{to{transform:rotate(360deg)}}\"\n","import { css } from '../styles/generated'\n\nconst STYLE_ID = 'azirid-access-styles'\nlet injected = false\n\nexport function injectStyles() {\n if (injected || typeof document === 'undefined') return\n if (document.getElementById(STYLE_ID)) {\n injected = true\n return\n }\n const style = document.createElement('style')\n style.id = STYLE_ID\n style.textContent = css\n document.head.appendChild(style)\n injected = true\n}\n\n/** Remove injected styles from the DOM (useful when embedding in host apps). */\nexport function removeStyles() {\n if (typeof document === 'undefined') return\n document.getElementById(STYLE_ID)?.remove()\n injected = false\n}\n","import { useCallback } from 'react'\nimport { useMutation, useQueryClient } from '@tanstack/react-query'\nimport type { AccessClient } from '../client'\nimport type { AuthSuccessResponse, AziridProviderProps, SignupData } from '../types'\n\nexport interface MutationDeps {\n client: AccessClient\n props: AziridProviderProps\n setUser: (user: AuthSuccessResponse['user'] | null) => void\n setError: (error: string | null) => void\n updateAccessToken: (token: string | null) => void\n saveSessionTokens: (data: Record<string, unknown>) => void\n normalizeToken: (data: Record<string, unknown>) => string\n withAppContext: (body: Record<string, unknown>) => Record<string, unknown>\n clearSession: () => void\n}\n\nexport function useAuthMutations(deps: MutationDeps) {\n const {\n client,\n props,\n setUser,\n setError,\n updateAccessToken,\n saveSessionTokens,\n normalizeToken,\n withAppContext,\n clearSession,\n } = deps\n\n const queryClient = useQueryClient()\n\n // ─── Login ─────────────────────────────────────────────────\n const loginMutation = useMutation({\n mutationFn: (data: { email: string; password: string }) =>\n client.post<AuthSuccessResponse>(client.paths.login, withAppContext(data)),\n onSuccess: (data) => {\n setUser(data.user)\n updateAccessToken(normalizeToken(data as unknown as Record<string, unknown>))\n saveSessionTokens(data as unknown as Record<string, unknown>)\n setError(null)\n props.onAuthStateChange?.()\n props.onLoginSuccess?.(data)\n },\n onError: (err: Error) => {\n setError(err.message)\n props.onError?.(err.message)\n },\n })\n\n // ─── Signup ────────────────────────────────────────────────\n const signupMutation = useMutation({\n mutationFn: (data: SignupData) => {\n const { confirmPassword: _, ...payload } = data as SignupData & { confirmPassword?: string }\n return client.post<AuthSuccessResponse>(client.paths.signup, withAppContext({ ...payload }))\n },\n onSuccess: (data) => {\n setUser(data.user)\n updateAccessToken(normalizeToken(data as unknown as Record<string, unknown>))\n saveSessionTokens(data as unknown as Record<string, unknown>)\n setError(null)\n props.onAuthStateChange?.()\n props.onSignupSuccess?.(data)\n },\n onError: (err: Error) => {\n setError(err.message)\n props.onError?.(err.message)\n },\n })\n\n // ─── Logout ────────────────────────────────────────────────\n const logoutMutation = useMutation({\n mutationFn: () => client.post(client.paths.logout),\n onSettled: () => {\n clearSession()\n setError(null)\n queryClient.clear()\n props.onAuthStateChange?.()\n props.onLogoutSuccess?.()\n },\n })\n\n // ─── Refresh ───────────────────────────────────────────────\n const refreshFn = useCallback(async () => {\n try {\n await client.refreshSession()\n updateAccessToken(client.getAccessToken())\n } catch (err) {\n clearSession()\n queryClient.clear()\n props.onSessionExpired?.()\n throw err\n }\n }, [client, queryClient, props, updateAccessToken, clearSession])\n\n // ─── Switch Tenant ─────────────────────────────────────────\n const switchTenantFn = useCallback(\n async (tenantId: string) => {\n await client.refreshSession({ tenantId })\n updateAccessToken(client.getAccessToken())\n await queryClient.invalidateQueries({ queryKey: ['azirid-access'] })\n },\n [client, queryClient, updateAccessToken],\n )\n\n return {\n loginMutation,\n signupMutation,\n logoutMutation,\n refreshFn,\n switchTenantFn,\n }\n}\n","import { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react'\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query'\nimport { createAccessClient, isAuthError, BASE_PATHS, type AccessClient } from '../client'\nimport type {\n AziridContextValue,\n AccessMessages,\n AziridProviderProps,\n AppBranding,\n AuthUser,\n BootstrapResponse,\n SignupData,\n} from '../types'\nimport { resolveMessages } from '../i18n'\nimport { injectStyles, removeStyles } from '../utils/inject-styles'\nimport { useAuthMutations } from './mutations'\n\n// ─── Contexts ────────────────────────────────────────────────\nconst AziridContext = createContext<AziridContextValue | null>(null)\nAziridContext.displayName = 'AziridContext'\n\nconst ClientContext = createContext<AccessClient | null>(null)\nClientContext.displayName = 'AccessClientContext'\n\ninterface BrandingContextValue {\n branding: AppBranding | null\n messages: AccessMessages\n}\n\nconst BrandingContext = createContext<BrandingContextValue | null>(null)\nBrandingContext.displayName = 'BrandingContext'\n\n/** Access the raw API client for custom calls */\nexport function useAccessClient(): AccessClient {\n const ctx = useContext(ClientContext)\n if (!ctx) {\n throw new Error('useAccessClient must be used within an <AziridProvider>.')\n }\n return ctx\n}\n\n/**\n * Get the current app branding from bootstrap.\n * Returns null when no branding is configured.\n */\nexport function useBranding(): AppBranding | null {\n const ctx = useContext(BrandingContext)\n return ctx?.branding ?? null\n}\n\n/**\n * Get resolved i18n messages for the current locale.\n * Falls back to Spanish (es) if no provider is found.\n */\nexport function useMessages(): AccessMessages {\n const ctx = useContext(BrandingContext)\n if (ctx) return ctx.messages\n return resolveMessages('es')\n}\n\n// Default query client\nconst defaultQueryClient = new QueryClient({\n defaultOptions: {\n queries: { retry: false, refetchOnWindowFocus: false },\n },\n})\n\n// ─── Inner Provider ──────────────────────────────────────────\nfunction AziridProviderInner({\n children,\n client,\n props,\n}: {\n children: React.ReactNode\n client: AccessClient\n props: AziridProviderProps\n}) {\n const [user, setUser] = useState<AuthUser | null>(null)\n const [accessToken, setAccessToken] = useState<string | null>(null)\n const [error, setError] = useState<string | null>(null)\n const [branding, setBranding] = useState<AppBranding | null>(null)\n // Start as true when autoBootstrap is enabled — prevents flash of login form on F5.\n const [isBootstrapping, setIsBootstrapping] = useState(props.autoBootstrap ?? true)\n\n // ─── Branding & i18n ────────────────────────────────────────\n const messages = useMemo(\n () => resolveMessages(props.locale ?? 'es', props.messages),\n [props.locale, props.messages],\n )\n\n const brandingValue = useMemo(() => ({ branding, messages }), [branding, messages])\n\n // ─── Proxy mode detection ───────────────────────────────────\n // Proxy mode when no apiUrl is provided (requests go to same-origin route handler)\n const isProxyMode = !props.apiUrl\n\n // ─── Session Sync (cookie for server components/actions) ────\n const syncUrl = useMemo(() => {\n if (props.sessionSyncUrl === false) return null\n if (props.sessionSyncUrl) return props.sessionSyncUrl\n // In proxy mode: cookies flow through the proxy as first-party — no sync needed.\n if (isProxyMode) return null\n // Cross-origin direct (dev or legacy): sync to local cookie\n if (client.appContext?.publishableKey?.startsWith('pk_dev')) {\n return '/api/auth/session'\n }\n return null\n }, [props.sessionSyncUrl, client.appContext?.publishableKey, isProxyMode])\n\n const syncSession = useCallback(\n (token: string | null) => {\n if (!syncUrl) return\n if (token) {\n fetch(syncUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ token }),\n }).catch(() => {})\n } else {\n fetch(syncUrl, { method: 'DELETE' }).catch(() => {})\n }\n },\n [syncUrl],\n )\n\n /** Sync access token with the client and local cookie */\n const updateAccessToken = useCallback(\n (token: string | null) => {\n setAccessToken(token)\n client.setAccessToken(token)\n syncSession(token)\n },\n [client, syncSession],\n )\n\n /**\n * Save session tokens from API response body.\n * Handles both obfuscated (rt/xc) and explicit (refreshToken/csrfToken) keys.\n */\n const saveSessionTokens = useCallback(\n (data: Record<string, unknown>) => {\n const rt = (data.rt ?? data.refreshToken) as string | undefined\n const xc = (data.xc ?? data.csrfToken) as string | undefined\n if (rt) client.setRefreshToken(rt)\n if (xc) client.setCsrfToken(xc)\n },\n [client],\n )\n\n /** Clear all session state */\n const clearSession = useCallback(() => {\n setUser(null)\n updateAccessToken(null)\n client.setRefreshToken(null)\n client.setCsrfToken(null)\n }, [client, updateAccessToken])\n\n /** Inject tenantId (appId/environment resolved by PublishableKeyGuard via header) */\n const withAppContext = useCallback(\n (body: Record<string, unknown>) => {\n if (client.appContext?.tenantId) {\n return { ...body, tenantId: client.appContext.tenantId }\n }\n return body\n },\n [client],\n )\n\n // ─── Bootstrap ──────────────────────────────────────────────\n // Uses client.bootstrapSession() which deduplicates concurrent calls.\n // In React 18 Strict Mode (dev), the effect runs twice but both calls\n // await the SAME promise — only one HTTP request is made.\n useEffect(() => {\n const autoBootstrap = props.autoBootstrap ?? true\n if (!autoBootstrap) return\n\n let cancelled = false\n\n async function bootstrap() {\n setIsBootstrapping(true)\n try {\n const response = await client.bootstrapSession<BootstrapResponse>()\n\n if (cancelled) return\n\n if (response.branding) {\n setBranding(response.branding)\n }\n\n if (response.authenticated) {\n const r = response as unknown as Record<string, unknown>\n setUser(response.user)\n updateAccessToken((r.at ?? r.accessToken) as string)\n saveSessionTokens(r)\n }\n } catch (err) {\n if (typeof console !== 'undefined') {\n const msg = err instanceof Error ? err.message : JSON.stringify(err)\n console.warn('[azirid-access] bootstrap failed:', msg)\n }\n } finally {\n if (!cancelled) {\n setIsBootstrapping(false)\n }\n }\n }\n\n bootstrap()\n\n return () => {\n cancelled = true\n }\n }, [client, props.autoBootstrap, updateAccessToken, saveSessionTokens])\n\n // ─── Silent Token Refresh (shared logic) ───────────────────\n // Uses client.refreshSession() which deduplicates concurrent calls.\n // If two triggers fire at the same time (e.g. timer + visibilitychange),\n // only ONE request is sent; the second caller awaits the same promise.\n const silentRefresh = useCallback(async () => {\n if (!client.getAccessToken()) return\n\n // Use Web Locks API to prevent multiple tabs from refreshing simultaneously.\n // If another tab is already refreshing, this tab skips and waits for the\n // BroadcastChannel message with updated tokens.\n if (typeof navigator !== 'undefined' && 'locks' in navigator) {\n let acquired = false\n try {\n await navigator.locks.request(\n 'azirid-token-refresh',\n { ifAvailable: true },\n async (lock) => {\n if (!lock) return // Another tab holds the lock — skip refresh\n acquired = true\n await client.refreshSession()\n updateAccessToken(client.getAccessToken())\n },\n )\n } catch (err) {\n if (acquired && isAuthError(err)) {\n clearSession()\n props.onSessionExpired?.()\n }\n }\n return\n }\n\n // Fallback for browsers without Web Locks\n try {\n await client.refreshSession()\n updateAccessToken(client.getAccessToken())\n } catch (err) {\n if (isAuthError(err)) {\n clearSession()\n props.onSessionExpired?.()\n }\n }\n }, [client, updateAccessToken, clearSession, props])\n\n // ─── Cross-tab Token Sync ─────────────────────────────────\n // When another tab refreshes tokens, sync the React state here.\n useEffect(() => {\n let channel: BroadcastChannel | null = null\n try {\n if (typeof BroadcastChannel !== 'undefined') {\n channel = new BroadcastChannel('azirid-auth')\n channel.onmessage = (event: MessageEvent) => {\n if (event.data?.type === 'token-refreshed' && event.data.accessToken) {\n client.setAccessToken(event.data.accessToken)\n updateAccessToken(event.data.accessToken)\n }\n }\n }\n } catch {\n // BroadcastChannel not available\n }\n return () => {\n try {\n channel?.close()\n } catch {\n // ignore\n }\n }\n }, [client, updateAccessToken])\n\n // ─── Periodic Token Refresh ────────────────────────────────\n useEffect(() => {\n const intervalMs = props.refreshInterval ?? 50_000\n if (intervalMs <= 0) return\n\n const id = setInterval(silentRefresh, intervalMs)\n return () => clearInterval(id)\n }, [props.refreshInterval, silentRefresh])\n\n // ─── Refresh on Tab Visibility ─────────────────────────────\n useEffect(() => {\n function handleVisibilityChange() {\n if (document.visibilityState === 'visible') {\n silentRefresh()\n }\n }\n\n document.addEventListener('visibilitychange', handleVisibilityChange)\n return () => document.removeEventListener('visibilitychange', handleVisibilityChange)\n }, [silentRefresh])\n\n /** Normalize accessToken from API response (obfuscated \"at\" or \"accessToken\") */\n const normalizeToken = useCallback(\n (data: Record<string, unknown>): string => (data.at ?? data.accessToken) as string,\n [],\n )\n\n // ─── Mutations (extracted) ─────────────────────────────────\n const { loginMutation, signupMutation, logoutMutation, refreshFn, switchTenantFn } =\n useAuthMutations({\n client,\n props,\n setUser,\n setError,\n updateAccessToken,\n saveSessionTokens,\n normalizeToken,\n withAppContext,\n clearSession,\n })\n\n // ─── Actions ───────────────────────────────────────────────\n const login = useCallback(\n (data: { email: string; password: string }) => loginMutation.mutate(data),\n [loginMutation],\n )\n\n const signup = useCallback((data: SignupData) => signupMutation.mutate(data), [signupMutation])\n\n const logout = useCallback(() => logoutMutation.mutate(), [logoutMutation])\n const clearError = useCallback(() => setError(null), [])\n\n const setUserFn = useCallback((u: AuthUser | null) => {\n setUser(u)\n }, [])\n\n const value = useMemo<AziridContextValue>(\n () => ({\n user,\n accessToken,\n isAuthenticated: user !== null,\n isLoading: loginMutation.isPending || signupMutation.isPending,\n error,\n login,\n signup,\n logout,\n clearError,\n refresh: refreshFn,\n switchTenant: switchTenantFn,\n setUser: setUserFn,\n isLoginPending: loginMutation.isPending,\n isSignupPending: signupMutation.isPending,\n isBootstrapping,\n loginMutation,\n signupMutation,\n logoutMutation,\n }),\n [\n user,\n accessToken,\n error,\n login,\n signup,\n logout,\n clearError,\n refreshFn,\n switchTenantFn,\n setUserFn,\n loginMutation,\n signupMutation,\n logoutMutation,\n isBootstrapping,\n ],\n )\n\n return (\n <ClientContext.Provider value={client}>\n <AziridContext.Provider value={value}>\n <BrandingContext.Provider value={brandingValue}>{children}</BrandingContext.Provider>\n </AziridContext.Provider>\n </ClientContext.Provider>\n )\n}\n\n// ─── Public Provider ─────────────────────────────────────────\nexport function AziridProvider(props: AziridProviderProps) {\n useEffect(() => {\n injectStyles()\n return () => removeStyles()\n }, [])\n\n const client = useMemo(() => {\n const appContext = props.publishableKey\n ? {\n publishableKey: props.publishableKey,\n tenantId: props.tenantId,\n }\n : undefined\n\n // Proxy mode (no apiUrl): requests go to same-origin /api/auth/*\n // Direct mode (apiUrl set): requests go straight to the Azirid API\n const isProxy = !props.apiUrl\n const baseUrl = isProxy ? '' : props.apiUrl!.replace(/\\/$/, '')\n const basePath = isProxy ? BASE_PATHS.proxy : BASE_PATHS.direct\n\n return createAccessClient(\n { baseUrl, basePath, headers: props.fetchOptions as Record<string, string> },\n appContext,\n )\n }, [props.publishableKey, props.tenantId, props.fetchOptions, props.apiUrl])\n\n return (\n <QueryClientProvider client={defaultQueryClient}>\n <AziridProviderInner client={client} props={props}>\n {props.children}\n </AziridProviderInner>\n </QueryClientProvider>\n )\n}\n\n// ─── Hook ────────────────────────────────────────────────────\nexport function useAzirid(): AziridContextValue {\n const ctx = useContext(AziridContext)\n if (!ctx) {\n throw new Error(\n 'useAzirid must be used within an <AziridProvider>. ' +\n 'Wrap your app (or the relevant subtree) with <AziridProvider>.',\n )\n }\n return ctx\n}\n","import * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { Slot } from 'radix-ui'\n\nimport { cn } from '../../utils/cn'\n\nconst buttonVariants = cva(\n \"cursor-pointer focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-lg border border-transparent bg-clip-padding text-sm font-medium focus-visible:ring-3 aria-invalid:ring-3 [&_svg:not([class*='size-'])]:size-4 group/button inline-flex shrink-0 items-center justify-center whitespace-nowrap transition-all outline-none select-none disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground [a]:hover:bg-primary/80',\n outline:\n 'border-border bg-background hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground',\n secondary:\n 'bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground',\n ghost:\n 'hover:bg-muted hover:text-foreground dark:hover:bg-muted/50 aria-expanded:bg-muted aria-expanded:text-foreground',\n destructive:\n 'bg-destructive/10 hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/20 text-destructive focus-visible:border-destructive/40 dark:hover:bg-destructive/30',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n size: {\n default:\n 'h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2',\n xs: \"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5\",\n lg: 'h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3',\n icon: 'size-8',\n 'icon-xs':\n \"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3\",\n 'icon-sm':\n 'size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg',\n 'icon-lg': 'size-9',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n)\n\nfunction Button({\n className,\n variant = 'default',\n size = 'default',\n asChild = false,\n ...props\n}: React.ComponentProps<'button'> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? Slot.Root : 'button'\n\n return (\n <Comp\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","import * as React from 'react'\n\nimport { cn } from '../../utils/cn'\n\nfunction Card({\n className,\n size = 'default',\n ...props\n}: React.ComponentProps<'div'> & { size?: 'default' | 'sm' }) {\n return (\n <div\n data-slot=\"card\"\n data-size={size}\n className={cn(\n 'ring-foreground/10 bg-card text-card-foreground group/card flex flex-col gap-4 overflow-hidden rounded-xl py-4 text-sm ring-1 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n 'group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\n 'text-base leading-snug font-medium group-data-[size=sm]/card:text-sm',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn('col-start-2 row-span-2 row-start-1 self-start justify-self-end', className)}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn('px-4 group-data-[size=sm]/card:px-3', className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\n 'bg-muted/50 flex items-center rounded-b-xl border-t p-4 group-data-[size=sm]/card:p-3',\n className,\n )}\n {...props}\n />\n )\n}\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardAction, CardDescription, CardContent }\n","import * as React from 'react'\n\nimport { cn } from '../../utils/cn'\n\nfunction FieldGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"field-group\" className={cn('flex flex-col gap-6', className)} {...props} />\n}\n\nfunction Field({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"field\" className={cn('grid gap-3', className)} {...props} />\n}\n\nfunction FieldLabel({ className, ...props }: React.ComponentProps<'label'>) {\n return (\n <label\n data-slot=\"field-label\"\n className={cn('text-sm leading-none font-medium', className)}\n {...props}\n />\n )\n}\n\nfunction FieldDescription({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"field-description\"\n className={cn(\n 'text-muted-foreground [&_a]:hover:text-primary text-sm [&_a]:underline [&_a]:underline-offset-4',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction FieldSeparator({ className, children, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"field-separator\"\n className={cn(\n 'after:border-border relative text-center text-sm after:absolute after:inset-0 after:top-1/2 after:z-0 after:flex after:items-center after:border-t',\n className,\n )}\n {...props}\n >\n <span\n data-slot=\"field-separator-content\"\n className=\"bg-card text-muted-foreground relative z-10 px-2\"\n >\n {children}\n </span>\n </div>\n )\n}\n\nexport { FieldGroup, Field, FieldLabel, FieldDescription, FieldSeparator }\n","import * as React from 'react'\n\nimport { cn } from '../../utils/cn'\n\nfunction Input({ className, type, ...props }: React.ComponentProps<'input'>) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n 'dark:bg-input/30 border-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 disabled:bg-input/50 dark:disabled:bg-input/80 file:text-foreground placeholder:text-muted-foreground h-8 w-full min-w-0 rounded-lg border bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:ring-3 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:ring-3 md:text-sm',\n className,\n )}\n {...props}\n />\n )\n}\n\nexport { Input }\n","import { forwardRef, useCallback, useMemo } from 'react'\nimport { useForm } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport type { LoginFormProps } from '../types'\nimport { createLoginSchema, type LoginInput } from '../schemas'\nimport { cn } from '../utils/cn'\nimport { useAzirid, useBranding, useMessages } from '../providers/access-provider'\nimport { Button } from './ui/button'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from './ui/card'\nimport { Field, FieldDescription, FieldGroup, FieldLabel, FieldSeparator } from './ui/field'\nimport { Input } from './ui/input'\n\nexport const LoginForm = forwardRef<HTMLFormElement, LoginFormProps>(\n (\n {\n onSubmit: onSubmitProp,\n schema: schemaProp,\n isLoading: externalLoading,\n error: externalError,\n className,\n style,\n title: titleProp,\n description: descriptionProp,\n logo: logoProp,\n submitText: submitTextProp,\n footer,\n forgotPassword,\n showSocialButtons = true,\n labels,\n defaultValues,\n },\n ref,\n ) => {\n const msg = useMessages()\n const branding = useBranding()\n\n const title = titleProp ?? (branding?.displayName || msg.login.title)\n const description = descriptionProp ?? msg.login.description\n const submitText = submitTextProp ?? msg.login.submit\n\n const logo =\n logoProp !== undefined ? (\n logoProp\n ) : branding?.logoUrl ? (\n <img src={branding.logoUrl} alt={branding.displayName ?? ''} className=\"h-10 w-auto\" />\n ) : null\n\n const schema = useMemo(\n () => schemaProp ?? createLoginSchema(msg.validation),\n [schemaProp, msg.validation],\n )\n\n let ctxLogin: ((data: LoginInput) => void) | undefined\n let ctxError: string | null = null\n let ctxLoading = false\n\n try {\n const ctx = useAzirid()\n ctxLogin = ctx.login\n ctxError = ctx.error\n ctxLoading = ctx.isLoginPending\n } catch {\n // Not inside AziridProvider — that's fine if onSubmitProp is passed\n }\n\n const {\n register,\n handleSubmit,\n formState: { errors, isSubmitting },\n } = useForm<LoginInput>({\n resolver: zodResolver(schema as never),\n defaultValues: { email: '', password: '', ...defaultValues },\n })\n\n const onSubmit = useCallback(\n async (values: LoginInput) => {\n if (onSubmitProp) {\n await onSubmitProp(values)\n } else if (ctxLogin) {\n ctxLogin(values)\n }\n },\n [onSubmitProp, ctxLogin],\n )\n\n const loading = externalLoading ?? ctxLoading ?? isSubmitting\n const error = externalError ?? ctxError\n\n const wrapperStyle = useMemo((): React.CSSProperties => {\n if (!branding?.primaryColor) return style ?? {}\n return {\n ...style,\n '--aa-primary': branding.primaryColor,\n '--aa-primary-foreground': '#fff',\n } as React.CSSProperties\n }, [style, branding?.primaryColor])\n\n return (\n <div data-azirid className={cn('flex flex-col gap-6', className)} style={wrapperStyle}>\n {logo && <div className=\"flex items-center gap-2 self-center font-medium\">{logo}</div>}\n\n <Card>\n <CardHeader className=\"text-center\">\n {title && <CardTitle className=\"text-xl\">{title}</CardTitle>}\n {description && <CardDescription>{description}</CardDescription>}\n </CardHeader>\n\n <CardContent>\n <form ref={ref} onSubmit={handleSubmit(onSubmit)} noValidate>\n <FieldGroup>\n {error && (\n <div\n role=\"alert\"\n className=\"border-destructive/50 bg-destructive/10 text-destructive rounded-md border px-4 py-3 text-sm\"\n >\n {error}\n </div>\n )}\n\n {showSocialButtons && (\n <>\n <Field>\n <Button variant=\"outline\" type=\"button\" className=\"w-full\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.546 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.83c.843-1.012 1.4-2.427 1.245-3.83-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.559-1.701\"\n fill=\"currentColor\"\n />\n </svg>\n {msg.social.apple}\n </Button>\n <Button variant=\"outline\" type=\"button\" className=\"w-full\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12.48 10.92v3.28h7.84c-.24 1.84-.853 3.187-1.787 4.133-1.147 1.147-2.933 2.4-6.053 2.4-4.827 0-8.6-3.893-8.6-8.72s3.773-8.72 8.6-8.72c2.6 0 4.507 1.027 5.907 2.347l2.307-2.307C18.747 1.44 16.133 0 12.48 0 5.867 0 .307 5.387.307 12s5.56 12 12.173 12c3.573 0 6.267-1.173 8.373-3.36 2.16-2.16 2.84-5.213 2.84-7.667 0-.76-.053-1.467-.173-2.053H12.48z\"\n fill=\"currentColor\"\n />\n </svg>\n {msg.social.google}\n </Button>\n </Field>\n <FieldSeparator>{msg.social.separator}</FieldSeparator>\n </>\n )}\n\n <Field>\n <FieldLabel htmlFor=\"aa-login-email\">\n {labels?.email ?? msg.login.emailLabel}\n </FieldLabel>\n <Input\n id=\"aa-login-email\"\n type=\"email\"\n autoComplete=\"email\"\n placeholder={labels?.emailPlaceholder ?? msg.login.emailPlaceholder}\n disabled={loading}\n aria-invalid={!!errors.email}\n aria-describedby={errors.email ? 'aa-login-email-err' : undefined}\n {...register('email')}\n />\n {errors.email && (\n <p id=\"aa-login-email-err\" className=\"text-destructive text-xs\">\n {errors.email.message}\n </p>\n )}\n </Field>\n\n <Field>\n <div className=\"flex items-center\">\n <FieldLabel htmlFor=\"aa-login-password\">\n {labels?.password ?? msg.login.passwordLabel}\n </FieldLabel>\n {forgotPassword && (\n <span className=\"ml-auto text-sm underline-offset-4 hover:underline\">\n {forgotPassword}\n </span>\n )}\n </div>\n <Input\n id=\"aa-login-password\"\n type=\"password\"\n autoComplete=\"current-password\"\n placeholder={labels?.passwordPlaceholder ?? msg.login.passwordPlaceholder}\n disabled={loading}\n aria-invalid={!!errors.password}\n aria-describedby={errors.password ? 'aa-login-pass-err' : undefined}\n {...register('password')}\n />\n {errors.password && (\n <p id=\"aa-login-pass-err\" className=\"text-destructive text-xs\">\n {errors.password.message}\n </p>\n )}\n </Field>\n\n <Field>\n <Button type=\"submit\" disabled={loading} className=\"w-full\">\n {loading && (\n <svg\n className=\"mr-2 h-4 w-4 animate-spin\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n />\n </svg>\n )}\n {submitText}\n </Button>\n {footer && <FieldDescription className=\"text-center\">{footer}</FieldDescription>}\n </Field>\n </FieldGroup>\n </form>\n </CardContent>\n </Card>\n </div>\n )\n },\n)\n\nLoginForm.displayName = 'LoginForm'\n","import { forwardRef, useCallback, useMemo } from 'react'\nimport { useForm } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport type { SignupFormProps } from '../types'\nimport { createSignupSchema, type SignupInput } from '../schemas'\nimport { cn } from '../utils/cn'\nimport { useAzirid, useBranding, useMessages } from '../providers/access-provider'\nimport { Button } from './ui/button'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from './ui/card'\nimport { Field, FieldDescription, FieldGroup, FieldLabel, FieldSeparator } from './ui/field'\nimport { Input } from './ui/input'\n\nexport const SignupForm = forwardRef<HTMLFormElement, SignupFormProps>(\n (\n {\n onSubmit: onSubmitProp,\n schema: schemaProp,\n isLoading: externalLoading,\n error: externalError,\n className,\n style,\n title: titleProp,\n description: descriptionProp,\n logo: logoProp,\n submitText: submitTextProp,\n footer,\n showSocialButtons = true,\n labels,\n },\n ref,\n ) => {\n const msg = useMessages()\n const branding = useBranding()\n\n const title = titleProp ?? (branding?.displayName || msg.signup.title)\n const description = descriptionProp ?? msg.signup.description\n const submitText = submitTextProp ?? msg.signup.submit\n\n const logo =\n logoProp !== undefined ? (\n logoProp\n ) : branding?.logoUrl ? (\n <img src={branding.logoUrl} alt={branding.displayName ?? ''} className=\"h-10 w-auto\" />\n ) : null\n\n const schema = useMemo(\n () => schemaProp ?? createSignupSchema(msg.validation),\n [schemaProp, msg.validation],\n )\n\n let ctxSignup: ((data: SignupInput) => void) | undefined\n let ctxError: string | null = null\n let ctxLoading = false\n\n try {\n const ctx = useAzirid()\n ctxSignup = ctx.signup as (data: SignupInput) => void\n ctxError = ctx.error\n ctxLoading = ctx.isSignupPending\n } catch {\n // Not inside AziridProvider — that's fine if onSubmitProp is passed\n }\n\n const {\n register,\n handleSubmit,\n formState: { errors, isSubmitting },\n } = useForm<SignupInput>({\n resolver: zodResolver(schema as never),\n defaultValues: { email: '', password: '' },\n })\n\n const onSubmit = useCallback(\n async (values: SignupInput) => {\n if (onSubmitProp) {\n await onSubmitProp(values)\n } else if (ctxSignup) {\n ctxSignup(values)\n }\n },\n [onSubmitProp, ctxSignup],\n )\n\n const loading = externalLoading ?? ctxLoading ?? isSubmitting\n const error = externalError ?? ctxError\n\n const wrapperStyle = useMemo((): React.CSSProperties => {\n if (!branding?.primaryColor) return style ?? {}\n return {\n ...style,\n '--aa-primary': branding.primaryColor,\n '--aa-primary-foreground': '#fff',\n } as React.CSSProperties\n }, [style, branding?.primaryColor])\n\n return (\n <div data-azirid className={cn('flex flex-col gap-6', className)} style={wrapperStyle}>\n {logo && <div className=\"flex items-center gap-2 self-center font-medium\">{logo}</div>}\n\n <Card>\n <CardHeader className=\"text-center\">\n {title && <CardTitle className=\"text-xl\">{title}</CardTitle>}\n {description && <CardDescription>{description}</CardDescription>}\n </CardHeader>\n\n <CardContent>\n <form ref={ref} onSubmit={handleSubmit(onSubmit)} noValidate>\n <FieldGroup>\n {error && (\n <div\n role=\"alert\"\n className=\"border-destructive/50 bg-destructive/10 text-destructive rounded-md border px-4 py-3 text-sm\"\n >\n {error}\n </div>\n )}\n\n {showSocialButtons && (\n <>\n <Field>\n <Button variant=\"outline\" type=\"button\" className=\"w-full\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.546 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.83c.843-1.012 1.4-2.427 1.245-3.83-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.559-1.701\"\n fill=\"currentColor\"\n />\n </svg>\n {msg.social.apple}\n </Button>\n <Button variant=\"outline\" type=\"button\" className=\"w-full\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12.48 10.92v3.28h7.84c-.24 1.84-.853 3.187-1.787 4.133-1.147 1.147-2.933 2.4-6.053 2.4-4.827 0-8.6-3.893-8.6-8.72s3.773-8.72 8.6-8.72c2.6 0 4.507 1.027 5.907 2.347l2.307-2.307C18.747 1.44 16.133 0 12.48 0 5.867 0 .307 5.387.307 12s5.56 12 12.173 12c3.573 0 6.267-1.173 8.373-3.36 2.16-2.16 2.84-5.213 2.84-7.667 0-.76-.053-1.467-.173-2.053H12.48z\"\n fill=\"currentColor\"\n />\n </svg>\n {msg.social.google}\n </Button>\n </Field>\n <FieldSeparator>{msg.social.separator}</FieldSeparator>\n </>\n )}\n\n <Field>\n <FieldLabel htmlFor=\"aa-signup-email\">\n {labels?.email ?? msg.signup.emailLabel}\n </FieldLabel>\n <Input\n id=\"aa-signup-email\"\n type=\"email\"\n autoComplete=\"email\"\n placeholder={labels?.emailPlaceholder ?? msg.signup.emailPlaceholder}\n disabled={loading}\n aria-invalid={!!errors.email}\n aria-describedby={errors.email ? 'aa-signup-email-err' : undefined}\n {...register('email')}\n />\n {errors.email && (\n <p id=\"aa-signup-email-err\" className=\"text-destructive text-xs\">\n {errors.email.message}\n </p>\n )}\n </Field>\n\n <Field>\n <FieldLabel htmlFor=\"aa-signup-password\">\n {labels?.password ?? msg.signup.passwordLabel}\n </FieldLabel>\n <Input\n id=\"aa-signup-password\"\n type=\"password\"\n autoComplete=\"new-password\"\n placeholder={labels?.passwordPlaceholder ?? msg.signup.passwordPlaceholder}\n disabled={loading}\n aria-invalid={!!errors.password}\n aria-describedby={errors.password ? 'aa-signup-pass-err' : undefined}\n {...register('password')}\n />\n {errors.password && (\n <p id=\"aa-signup-pass-err\" className=\"text-destructive text-xs\">\n {errors.password.message}\n </p>\n )}\n </Field>\n\n <Field>\n <Button type=\"submit\" disabled={loading} className=\"w-full\">\n {loading && (\n <svg\n className=\"mr-2 h-4 w-4 animate-spin\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n />\n </svg>\n )}\n {submitText}\n </Button>\n {footer && <FieldDescription className=\"text-center\">{footer}</FieldDescription>}\n </Field>\n </FieldGroup>\n </form>\n </CardContent>\n </Card>\n </div>\n )\n },\n)\n\nSignupForm.displayName = 'SignupForm'\n","import { useMutation, type UseMutationResult } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\n\nexport interface PasswordResetRequestData {\n email: string\n}\n\nexport interface PasswordResetConfirmData {\n token: string\n newPassword: string\n}\n\nexport interface UsePasswordResetOptions {\n /** Callback after reset email sent */\n onRequestSuccess?: () => void\n /** Callback after password successfully reset */\n onConfirmSuccess?: () => void\n /** Callback on error */\n onError?: (error: Error) => void\n}\n\nexport interface UsePasswordResetReturn {\n /** Request a password reset email */\n request: UseMutationResult<unknown, Error, PasswordResetRequestData>\n /** Confirm the password reset with token + new password */\n confirm: UseMutationResult<unknown, Error, PasswordResetConfirmData>\n}\n\n/**\n * Standalone hook for password reset flow. Requires `<AziridProvider>`.\n *\n * @example\n * ```tsx\n * const passwordReset = usePasswordReset({\n * onRequestSuccess: () => toast.success(\"Check your email\"),\n * onConfirmSuccess: () => router.push(\"/login\"),\n * });\n *\n * // Step 1: request reset\n * passwordReset.request.mutate({ email: \"user@test.com\" });\n *\n * // Step 2: confirm with token from URL\n * passwordReset.confirm.mutate({ token: \"abc\", newPassword: \"newPass123!\" });\n * ```\n */\nexport function usePasswordReset(options?: UsePasswordResetOptions): UsePasswordResetReturn {\n const client = useAccessClient()\n\n const request = useMutation({\n mutationKey: ['azirid-access', 'password-reset', 'request'],\n mutationFn: (data: PasswordResetRequestData) =>\n client.post(client.paths.passwordResetRequest, data),\n onSuccess: () => options?.onRequestSuccess?.(),\n onError: options?.onError,\n })\n\n const confirm = useMutation({\n mutationKey: ['azirid-access', 'password-reset', 'confirm'],\n mutationFn: (data: PasswordResetConfirmData) =>\n client.post(client.paths.passwordResetConfirm, data),\n onSuccess: () => options?.onConfirmSuccess?.(),\n onError: options?.onError,\n })\n\n return { request, confirm }\n}\n","import { forwardRef, useCallback, useMemo, useState } from 'react'\nimport { useForm } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport type { ForgotPasswordFormProps } from '../types'\nimport { createForgotPasswordSchema, type ForgotPasswordInput } from '../schemas'\nimport { cn } from '../utils/cn'\nimport { useBranding, useMessages } from '../providers/access-provider'\nimport { usePasswordReset } from '../hooks/use-password-reset'\nimport { Button } from './ui/button'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from './ui/card'\nimport { Field, FieldDescription, FieldGroup, FieldLabel } from './ui/field'\nimport { Input } from './ui/input'\n\nexport const ForgotPasswordForm = forwardRef<HTMLFormElement, ForgotPasswordFormProps>(\n (\n {\n onSubmit: onSubmitProp,\n schema: schemaProp,\n isLoading: externalLoading,\n error: externalError,\n className,\n style,\n title: titleProp,\n description: descriptionProp,\n logo: logoProp,\n submitText: submitTextProp,\n footer,\n defaultValues,\n },\n ref,\n ) => {\n const msg = useMessages()\n const branding = useBranding()\n const [success, setSuccess] = useState(false)\n const [hookError, setHookError] = useState<string | null>(null)\n\n const title = titleProp ?? msg.forgotPassword.title\n const description = descriptionProp ?? msg.forgotPassword.description\n const submitText = submitTextProp ?? msg.forgotPassword.submit\n\n const logo =\n logoProp !== undefined ? (\n logoProp\n ) : branding?.logoUrl ? (\n <img src={branding.logoUrl} alt={branding.displayName ?? ''} className=\"h-10 w-auto\" />\n ) : null\n\n const schema = useMemo(\n () => schemaProp ?? createForgotPasswordSchema(msg.validation),\n [schemaProp, msg.validation],\n )\n\n let passwordReset: ReturnType<typeof usePasswordReset> | null = null\n try {\n passwordReset = usePasswordReset({\n onRequestSuccess: () => setSuccess(true),\n onError: (err) => setHookError(err.message),\n })\n } catch {\n // Not inside AziridProvider — that's fine if onSubmitProp is passed\n }\n\n const {\n register,\n handleSubmit,\n formState: { errors, isSubmitting },\n } = useForm<ForgotPasswordInput>({\n resolver: zodResolver(schema as never),\n defaultValues: { email: '', ...defaultValues },\n })\n\n const onSubmit = useCallback(\n async (values: ForgotPasswordInput) => {\n setHookError(null)\n if (onSubmitProp) {\n await onSubmitProp(values)\n } else if (passwordReset) {\n passwordReset.request.mutate(values)\n }\n },\n [onSubmitProp, passwordReset],\n )\n\n const loading = externalLoading ?? passwordReset?.request.isPending ?? isSubmitting\n const error = externalError ?? hookError\n\n const wrapperStyle = useMemo((): React.CSSProperties => {\n if (!branding?.primaryColor) return style ?? {}\n return {\n ...style,\n '--aa-primary': branding.primaryColor,\n '--aa-primary-foreground': '#fff',\n } as React.CSSProperties\n }, [style, branding?.primaryColor])\n\n return (\n <div data-azirid className={cn('flex flex-col gap-6', className)} style={wrapperStyle}>\n {logo && <div className=\"flex items-center gap-2 self-center font-medium\">{logo}</div>}\n\n <Card>\n <CardHeader className=\"text-center\">\n {title && <CardTitle className=\"text-xl\">{title}</CardTitle>}\n {description && <CardDescription>{description}</CardDescription>}\n </CardHeader>\n\n <CardContent>\n {success ? (\n <div className=\"rounded-md border border-green-200 bg-green-50 px-4 py-3 text-center text-sm text-green-800 dark:border-green-800 dark:bg-green-950 dark:text-green-200\">\n {msg.forgotPassword.successMessage}\n </div>\n ) : (\n <form ref={ref} onSubmit={handleSubmit(onSubmit)} noValidate>\n <FieldGroup>\n {error && (\n <div\n role=\"alert\"\n className=\"border-destructive/50 bg-destructive/10 text-destructive rounded-md border px-4 py-3 text-sm\"\n >\n {error}\n </div>\n )}\n\n <Field>\n <FieldLabel htmlFor=\"aa-forgot-email\">\n {msg.forgotPassword.emailLabel}\n </FieldLabel>\n <Input\n id=\"aa-forgot-email\"\n type=\"email\"\n autoComplete=\"email\"\n placeholder={msg.forgotPassword.emailPlaceholder}\n disabled={loading}\n aria-invalid={!!errors.email}\n aria-describedby={errors.email ? 'aa-forgot-email-err' : undefined}\n {...register('email')}\n />\n {errors.email && (\n <p id=\"aa-forgot-email-err\" className=\"text-destructive text-xs\">\n {errors.email.message}\n </p>\n )}\n </Field>\n\n <Field>\n <Button type=\"submit\" disabled={loading} className=\"w-full\">\n {loading && (\n <svg\n className=\"mr-2 h-4 w-4 animate-spin\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n />\n </svg>\n )}\n {submitText}\n </Button>\n {footer && (\n <FieldDescription className=\"text-center\">{footer}</FieldDescription>\n )}\n </Field>\n </FieldGroup>\n </form>\n )}\n </CardContent>\n </Card>\n </div>\n )\n },\n)\n\nForgotPasswordForm.displayName = 'ForgotPasswordForm'\n","import { forwardRef, useCallback, useMemo, useState } from 'react'\nimport { useForm } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport type { ResetPasswordFormProps } from '../types'\nimport { createResetPasswordConfirmSchema, type ResetPasswordConfirmInput } from '../schemas'\nimport { cn } from '../utils/cn'\nimport { useBranding, useMessages } from '../providers/access-provider'\nimport { usePasswordReset } from '../hooks/use-password-reset'\nimport { Button } from './ui/button'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from './ui/card'\nimport { Field, FieldGroup, FieldLabel, FieldDescription } from './ui/field'\nimport { Input } from './ui/input'\n\nexport const ResetPasswordForm = forwardRef<HTMLFormElement, ResetPasswordFormProps>(\n (\n {\n token,\n onSubmit: onSubmitProp,\n schema: schemaProp,\n isLoading: externalLoading,\n error: externalError,\n className,\n style,\n title: titleProp,\n description: descriptionProp,\n logo: logoProp,\n submitText: submitTextProp,\n footer,\n onSuccess,\n },\n ref,\n ) => {\n const msg = useMessages()\n const branding = useBranding()\n const [hookError, setHookError] = useState<string | null>(null)\n\n const title = titleProp ?? msg.resetPassword.title\n const description = descriptionProp ?? msg.resetPassword.description\n const submitText = submitTextProp ?? msg.resetPassword.submit\n\n const logo =\n logoProp !== undefined ? (\n logoProp\n ) : branding?.logoUrl ? (\n <img src={branding.logoUrl} alt={branding.displayName ?? ''} className=\"h-10 w-auto\" />\n ) : null\n\n const schema = useMemo(\n () => schemaProp ?? createResetPasswordConfirmSchema(msg.validation),\n [schemaProp, msg.validation],\n )\n\n let passwordReset: ReturnType<typeof usePasswordReset> | null = null\n try {\n passwordReset = usePasswordReset({\n onConfirmSuccess: () => onSuccess?.(),\n onError: (err) => setHookError(err.message),\n })\n } catch {\n // Not inside AziridProvider — that's fine if onSubmitProp is passed\n }\n\n const {\n register,\n handleSubmit,\n formState: { errors, isSubmitting },\n } = useForm<ResetPasswordConfirmInput>({\n resolver: zodResolver(schema as never),\n defaultValues: { token, newPassword: '', confirmPassword: '' },\n })\n\n const onSubmit = useCallback(\n async (values: ResetPasswordConfirmInput) => {\n setHookError(null)\n if (onSubmitProp) {\n await onSubmitProp({ token: values.token, newPassword: values.newPassword })\n } else if (passwordReset) {\n passwordReset.confirm.mutate({\n token: values.token,\n newPassword: values.newPassword,\n })\n }\n },\n [onSubmitProp, passwordReset],\n )\n\n const loading = externalLoading ?? passwordReset?.confirm.isPending ?? isSubmitting\n const error = externalError ?? hookError\n\n const wrapperStyle = useMemo((): React.CSSProperties => {\n if (!branding?.primaryColor) return style ?? {}\n return {\n ...style,\n '--aa-primary': branding.primaryColor,\n '--aa-primary-foreground': '#fff',\n } as React.CSSProperties\n }, [style, branding?.primaryColor])\n\n return (\n <div data-azirid className={cn('flex flex-col gap-6', className)} style={wrapperStyle}>\n {logo && <div className=\"flex items-center gap-2 self-center font-medium\">{logo}</div>}\n\n <Card>\n <CardHeader className=\"text-center\">\n {title && <CardTitle className=\"text-xl\">{title}</CardTitle>}\n {description && <CardDescription>{description}</CardDescription>}\n </CardHeader>\n\n <CardContent>\n <form ref={ref} onSubmit={handleSubmit(onSubmit)} noValidate>\n <input type=\"hidden\" {...register('token')} />\n <FieldGroup>\n {error && (\n <div\n role=\"alert\"\n className=\"border-destructive/50 bg-destructive/10 text-destructive rounded-md border px-4 py-3 text-sm\"\n >\n {error}\n </div>\n )}\n\n <Field>\n <FieldLabel htmlFor=\"aa-reset-new-password\">\n {msg.resetPassword.newPasswordLabel}\n </FieldLabel>\n <Input\n id=\"aa-reset-new-password\"\n type=\"password\"\n autoComplete=\"new-password\"\n placeholder={msg.resetPassword.newPasswordPlaceholder}\n disabled={loading}\n aria-invalid={!!errors.newPassword}\n aria-describedby={errors.newPassword ? 'aa-reset-newpass-err' : undefined}\n {...register('newPassword')}\n />\n {errors.newPassword && (\n <p id=\"aa-reset-newpass-err\" className=\"text-destructive text-xs\">\n {errors.newPassword.message}\n </p>\n )}\n </Field>\n\n <Field>\n <FieldLabel htmlFor=\"aa-reset-confirm-password\">\n {msg.resetPassword.confirmPasswordLabel}\n </FieldLabel>\n <Input\n id=\"aa-reset-confirm-password\"\n type=\"password\"\n autoComplete=\"new-password\"\n placeholder={msg.resetPassword.confirmPasswordPlaceholder}\n disabled={loading}\n aria-invalid={!!errors.confirmPassword}\n aria-describedby={\n errors.confirmPassword ? 'aa-reset-confirmpass-err' : undefined\n }\n {...register('confirmPassword')}\n />\n {errors.confirmPassword && (\n <p id=\"aa-reset-confirmpass-err\" className=\"text-destructive text-xs\">\n {errors.confirmPassword.message}\n </p>\n )}\n </Field>\n\n <Field>\n <Button type=\"submit\" disabled={loading} className=\"w-full\">\n {loading && (\n <svg\n className=\"mr-2 h-4 w-4 animate-spin\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n />\n </svg>\n )}\n {submitText}\n </Button>\n {footer && <FieldDescription className=\"text-center\">{footer}</FieldDescription>}\n </Field>\n </FieldGroup>\n </form>\n </CardContent>\n </Card>\n </div>\n )\n },\n)\n\nResetPasswordForm.displayName = 'ResetPasswordForm'\n","import { useState, useCallback } from 'react'\nimport type { AuthView, AuthFormProps } from '../types'\nimport { useMessages } from '../providers/access-provider'\nimport { LoginForm } from './login-form'\nimport { SignupForm } from './signup-form'\nimport { ForgotPasswordForm } from './forgot-password-form'\nimport { ResetPasswordForm } from './reset-password-form'\n\nexport function AuthForm({\n view: controlledView,\n onViewChange,\n defaultView = 'login',\n className,\n style,\n logo,\n showSocialButtons,\n hideNavigation,\n resetToken,\n defaultValues,\n loginProps,\n signupProps,\n forgotPasswordProps,\n resetPasswordProps,\n}: AuthFormProps) {\n const [internalView, setInternalView] = useState<AuthView>(defaultView)\n const msg = useMessages()\n\n const currentView = controlledView ?? internalView\n\n const navigate = useCallback(\n (target: AuthView) => {\n if (onViewChange) {\n onViewChange(target)\n } else {\n setInternalView(target)\n }\n },\n [onViewChange],\n )\n\n const navLink = (text: string, target: AuthView) => (\n <button\n type=\"button\"\n onClick={() => navigate(target)}\n className=\"text-primary font-medium underline-offset-4 hover:underline\"\n >\n {text}\n </button>\n )\n\n const sharedProps = { className, style, logo }\n\n switch (currentView) {\n case 'login':\n return (\n <LoginForm\n {...sharedProps}\n showSocialButtons={showSocialButtons}\n defaultValues={defaultValues}\n {...loginProps}\n forgotPassword={\n hideNavigation ? undefined : navLink(msg.navigation.forgotPassword, 'forgot-password')\n }\n footer={\n hideNavigation ? undefined : (\n <span>\n {msg.navigation.noAccountText} {navLink(msg.navigation.signUpLink, 'signup')}\n </span>\n )\n }\n />\n )\n\n case 'signup':\n return (\n <SignupForm\n {...sharedProps}\n showSocialButtons={showSocialButtons}\n {...signupProps}\n footer={\n hideNavigation ? undefined : (\n <span>\n {msg.navigation.hasAccountText} {navLink(msg.navigation.signInLink, 'login')}\n </span>\n )\n }\n />\n )\n\n case 'forgot-password':\n return (\n <ForgotPasswordForm\n {...sharedProps}\n defaultValues={defaultValues ? { email: defaultValues.email } : undefined}\n {...forgotPasswordProps}\n footer={\n hideNavigation ? undefined : <span>{navLink(msg.navigation.backToLogin, 'login')}</span>\n }\n />\n )\n\n case 'reset-password':\n return (\n <ResetPasswordForm\n {...sharedProps}\n token={resetToken ?? ''}\n {...resetPasswordProps}\n footer={\n hideNavigation ? undefined : <span>{navLink(msg.navigation.backToLogin, 'login')}</span>\n }\n />\n )\n }\n}\n\nAuthForm.displayName = 'AuthForm'\n","import { useCallback, useMemo } from 'react'\nimport { useQuery } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { ReferralInfo } from '../types'\n\nexport function useReferral() {\n const client = useAccessClient()\n\n const query = useQuery({\n queryKey: ['azirid-access', 'referral', 'me'],\n queryFn: () => client.get<ReferralInfo>(client.paths.referralMe),\n enabled: !!client.getAccessToken(),\n })\n\n const copyToClipboard = useCallback(async () => {\n if (query.data?.referralUrl) {\n await navigator.clipboard.writeText(query.data.referralUrl)\n return true\n }\n return false\n }, [query.data?.referralUrl])\n\n return useMemo(() => ({ ...query, copyToClipboard }), [query, copyToClipboard])\n}\n","import { useCallback, useState } from 'react'\nimport type { CSSProperties } from 'react'\nimport { useReferral } from '../hooks/use-referral'\n\nexport interface ReferralCardProps {\n className?: string\n style?: CSSProperties\n title?: string\n description?: string\n}\n\nconst styles = {\n card: {\n border: '1px solid #e5e7eb',\n borderRadius: '12px',\n padding: '24px',\n backgroundColor: '#ffffff',\n fontFamily:\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n } satisfies CSSProperties,\n title: {\n margin: '0 0 4px 0',\n fontSize: '18px',\n fontWeight: 600,\n color: '#111827',\n } satisfies CSSProperties,\n description: {\n margin: '0 0 16px 0',\n fontSize: '14px',\n color: '#6b7280',\n } satisfies CSSProperties,\n codeContainer: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n marginBottom: '16px',\n } satisfies CSSProperties,\n codeInput: {\n flex: 1,\n padding: '10px 12px',\n border: '1px solid #d1d5db',\n borderRadius: '8px',\n backgroundColor: '#f9fafb',\n fontSize: '14px',\n fontFamily: 'monospace',\n color: '#374151',\n outline: 'none',\n } satisfies CSSProperties,\n copyButton: {\n padding: '10px 16px',\n border: '1px solid #d1d5db',\n borderRadius: '8px',\n backgroundColor: '#ffffff',\n fontSize: '14px',\n fontWeight: 500,\n color: '#374151',\n cursor: 'pointer',\n whiteSpace: 'nowrap',\n transition: 'background-color 0.15s',\n } satisfies CSSProperties,\n copyButtonCopied: {\n backgroundColor: '#ecfdf5',\n borderColor: '#a7f3d0',\n color: '#065f46',\n } satisfies CSSProperties,\n statsRow: {\n display: 'flex',\n gap: '24px',\n } satisfies CSSProperties,\n stat: {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: '2px',\n } satisfies CSSProperties,\n statValue: {\n fontSize: '20px',\n fontWeight: 600,\n color: '#111827',\n } satisfies CSSProperties,\n statLabel: {\n fontSize: '12px',\n color: '#6b7280',\n } satisfies CSSProperties,\n skeleton: {\n backgroundColor: '#f3f4f6',\n borderRadius: '8px',\n animation: 'pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite',\n } satisfies CSSProperties,\n emptyMessage: {\n fontSize: '14px',\n color: '#9ca3af',\n textAlign: 'center' as const,\n padding: '12px 0',\n } satisfies CSSProperties,\n}\n\nexport function ReferralCard({\n className,\n style,\n title = 'Refer a Friend',\n description = 'Share your referral link and earn rewards for every friend who signs up.',\n}: ReferralCardProps) {\n const { data, isLoading } = useReferral()\n const [copied, setCopied] = useState(false)\n\n const handleCopy = useCallback(async () => {\n if (!data?.referralUrl) return\n try {\n await navigator.clipboard.writeText(data.referralUrl)\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n } catch {\n // Clipboard API not available\n }\n }, [data?.referralUrl])\n\n if (isLoading) {\n return (\n <div className={className} style={{ ...styles.card, ...style }}>\n <div style={{ ...styles.skeleton, height: '20px', width: '140px', marginBottom: '8px' }} />\n <div style={{ ...styles.skeleton, height: '14px', width: '260px', marginBottom: '16px' }} />\n <div style={{ ...styles.skeleton, height: '42px', width: '100%', marginBottom: '16px' }} />\n <div style={{ display: 'flex', gap: '24px' }}>\n <div style={{ ...styles.skeleton, height: '40px', width: '80px' }} />\n <div style={{ ...styles.skeleton, height: '40px', width: '80px' }} />\n <div style={{ ...styles.skeleton, height: '40px', width: '80px' }} />\n </div>\n </div>\n )\n }\n\n if (!data?.referralCode) {\n return (\n <div className={className} style={{ ...styles.card, ...style }}>\n <h3 style={styles.title}>{title}</h3>\n <p style={styles.emptyMessage}>Referral program is not available at this time.</p>\n </div>\n )\n }\n\n return (\n <div className={className} style={{ ...styles.card, ...style }}>\n <h3 style={styles.title}>{title}</h3>\n <p style={styles.description}>{description}</p>\n\n <div style={styles.codeContainer}>\n <input\n type=\"text\"\n readOnly\n value={data.referralUrl}\n style={styles.codeInput}\n onClick={(e) => (e.target as HTMLInputElement).select()}\n />\n <button\n type=\"button\"\n onClick={handleCopy}\n style={{\n ...styles.copyButton,\n ...(copied ? styles.copyButtonCopied : {}),\n }}\n >\n {copied ? 'Copied!' : 'Copy'}\n </button>\n </div>\n\n <div style={styles.statsRow}>\n <div style={styles.stat}>\n <span style={styles.statValue}>{data.totalReferred}</span>\n <span style={styles.statLabel}>Total Referred</span>\n </div>\n <div style={styles.stat}>\n <span style={styles.statValue}>{data.completedReferrals}</span>\n <span style={styles.statLabel}>Completed</span>\n </div>\n <div style={styles.stat}>\n <span style={styles.statValue}>{data.pendingReferrals}</span>\n <span style={styles.statLabel}>Pending</span>\n </div>\n </div>\n </div>\n )\n}\n\nReferralCard.displayName = 'ReferralCard'\n","import { useQuery } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { ReferralStatsData } from '../types'\n\nexport function useReferralStats() {\n const client = useAccessClient()\n return useQuery({\n queryKey: ['azirid-access', 'referral', 'stats'],\n queryFn: () => client.get<ReferralStatsData>(client.paths.referralStats),\n enabled: !!client.getAccessToken(),\n })\n}\n","import type { CSSProperties } from 'react'\nimport { useReferralStats } from '../hooks/use-referral-stats'\nimport type { ReferralItem } from '../types'\n\nexport interface ReferralStatsProps {\n className?: string\n style?: CSSProperties\n}\n\nconst statusColors: Record<ReferralItem['status'], { bg: string; color: string }> = {\n PENDING: { bg: '#fef3c7', color: '#92400e' },\n COMPLETED: { bg: '#d1fae5', color: '#065f46' },\n EXPIRED: { bg: '#fee2e2', color: '#991b1b' },\n}\n\nconst rewardStatusColors: Record<ReferralItem['rewardStatus'], { bg: string; color: string }> = {\n PENDING: { bg: '#fef3c7', color: '#92400e' },\n GRANTED: { bg: '#d1fae5', color: '#065f46' },\n EXPIRED: { bg: '#fee2e2', color: '#991b1b' },\n FAILED: { bg: '#fee2e2', color: '#991b1b' },\n}\n\nconst styles = {\n container: {\n border: '1px solid #e5e7eb',\n borderRadius: '12px',\n backgroundColor: '#ffffff',\n overflow: 'hidden',\n fontFamily:\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n } satisfies CSSProperties,\n header: {\n padding: '16px 24px',\n borderBottom: '1px solid #e5e7eb',\n } satisfies CSSProperties,\n title: {\n margin: 0,\n fontSize: '16px',\n fontWeight: 600,\n color: '#111827',\n } satisfies CSSProperties,\n summaryRow: {\n display: 'flex',\n gap: '24px',\n padding: '12px 24px',\n backgroundColor: '#f9fafb',\n borderBottom: '1px solid #e5e7eb',\n } satisfies CSSProperties,\n summaryItem: {\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontSize: '13px',\n color: '#6b7280',\n } satisfies CSSProperties,\n summaryValue: {\n fontWeight: 600,\n color: '#111827',\n } satisfies CSSProperties,\n table: {\n width: '100%',\n borderCollapse: 'collapse' as const,\n fontSize: '14px',\n } satisfies CSSProperties,\n th: {\n padding: '12px 24px',\n textAlign: 'left' as const,\n fontSize: '12px',\n fontWeight: 500,\n color: '#6b7280',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n borderBottom: '1px solid #e5e7eb',\n backgroundColor: '#f9fafb',\n } satisfies CSSProperties,\n td: {\n padding: '12px 24px',\n borderBottom: '1px solid #f3f4f6',\n color: '#374151',\n } satisfies CSSProperties,\n badge: (bg: string, color: string): CSSProperties => ({\n display: 'inline-block',\n padding: '2px 8px',\n borderRadius: '9999px',\n fontSize: '12px',\n fontWeight: 500,\n backgroundColor: bg,\n color,\n }),\n skeleton: {\n backgroundColor: '#f3f4f6',\n borderRadius: '4px',\n height: '14px',\n } satisfies CSSProperties,\n emptyRow: {\n padding: '24px',\n textAlign: 'center' as const,\n color: '#9ca3af',\n fontSize: '14px',\n } satisfies CSSProperties,\n}\n\nfunction formatDate(dateStr: string): string {\n try {\n return new Date(dateStr).toLocaleDateString(undefined, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n })\n } catch {\n return dateStr\n }\n}\n\nexport function ReferralStats({ className, style }: ReferralStatsProps) {\n const { data, isLoading } = useReferralStats()\n\n if (isLoading) {\n return (\n <div className={className} style={{ ...styles.container, ...style }}>\n <div style={styles.header}>\n <div style={{ ...styles.skeleton, width: '140px', height: '18px' }} />\n </div>\n <div style={{ padding: '24px' }}>\n {[1, 2, 3].map((i) => (\n <div\n key={i}\n style={{ ...styles.skeleton, width: '100%', height: '16px', marginBottom: '16px' }}\n />\n ))}\n </div>\n </div>\n )\n }\n\n return (\n <div className={className} style={{ ...styles.container, ...style }}>\n <div style={styles.header}>\n <h3 style={styles.title}>Referral History</h3>\n </div>\n\n {data && (\n <div style={styles.summaryRow}>\n <span style={styles.summaryItem}>\n Total: <span style={styles.summaryValue}>{data.totalReferred}</span>\n </span>\n <span style={styles.summaryItem}>\n Completed: <span style={styles.summaryValue}>{data.completedReferrals}</span>\n </span>\n <span style={styles.summaryItem}>\n Pending: <span style={styles.summaryValue}>{data.pendingReferrals}</span>\n </span>\n <span style={styles.summaryItem}>\n Rewards: <span style={styles.summaryValue}>{data.totalRewards}</span>\n </span>\n </div>\n )}\n\n <table style={styles.table}>\n <thead>\n <tr>\n <th style={styles.th}>Email</th>\n <th style={styles.th}>Status</th>\n <th style={styles.th}>Reward</th>\n <th style={styles.th}>Date</th>\n </tr>\n </thead>\n <tbody>\n {(!data?.referrals || data.referrals.length === 0) && (\n <tr>\n <td colSpan={4} style={styles.emptyRow}>\n No referrals yet.\n </td>\n </tr>\n )}\n {data?.referrals.map((item) => {\n const sc = statusColors[item.status]\n const rc = rewardStatusColors[item.rewardStatus]\n return (\n <tr key={item.id}>\n <td style={styles.td}>{item.referredEmail}</td>\n <td style={styles.td}>\n <span style={styles.badge(sc.bg, sc.color)}>{item.status}</span>\n </td>\n <td style={styles.td}>\n <span style={styles.badge(rc.bg, rc.color)}>\n {item.rewardStatus}\n {item.rewardAmount != null && ` ($${item.rewardAmount})`}\n </span>\n </td>\n <td style={styles.td}>{formatDate(item.createdAt)}</td>\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n )\n}\n\nReferralStats.displayName = 'ReferralStats'\n","/**\n * Format a minor-unit amount (e.g. cents) into a locale-aware currency string.\n *\n * @param amount - The amount in minor units (e.g. 1500 = $15.00)\n * @param currency - ISO 4217 currency code (e.g. \"USD\", \"EUR\")\n */\nexport function formatAmount(amount: number, currency: string): string {\n try {\n return new Intl.NumberFormat(undefined, {\n style: 'currency',\n currency,\n minimumFractionDigits: 0,\n maximumFractionDigits: 2,\n }).format(amount / 100)\n } catch {\n return `${currency} ${(amount / 100).toFixed(2)}`\n }\n}\n","import { useQuery } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { BillingPlan } from '../types'\n\nexport function usePlans() {\n const client = useAccessClient()\n return useQuery({\n queryKey: ['azirid-access', 'billing', 'plans'],\n queryFn: () => client.get<BillingPlan[]>(client.paths.plans),\n })\n}\n","import { useQuery } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { UserSubscription } from '../types'\n\nexport function useSubscription() {\n const client = useAccessClient()\n return useQuery({\n queryKey: ['azirid-access', 'billing', 'subscription'],\n queryFn: () => client.get<UserSubscription>(client.paths.subscription),\n enabled: !!client.getAccessToken(),\n })\n}\n","import { useCallback, useMemo } from 'react'\nimport { useMutation } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { CheckoutResponse, PaymentProviderType } from '../types'\n\nexport interface CheckoutParams {\n planId?: string\n intentId?: string\n successUrl: string\n cancelUrl: string\n provider?: PaymentProviderType\n}\n\nexport interface UseCheckoutOptions {\n onSuccess?: (data: CheckoutResponse) => void\n onError?: (error: Error) => void\n redirectOnSuccess?: boolean\n}\n\nexport function useCheckout(options?: UseCheckoutOptions) {\n const client = useAccessClient()\n\n const mutation = useMutation({\n mutationFn: (params: CheckoutParams) =>\n client.post<CheckoutResponse>(client.paths.checkout, params),\n onSuccess: (data) => {\n // Only redirect for card providers (not MANUAL_TRANSFER or PAYPHONE)\n if (\n options?.redirectOnSuccess !== false &&\n data.url &&\n data.provider !== 'MANUAL_TRANSFER' &&\n data.provider !== 'PAYPHONE'\n ) {\n window.location.href = data.url\n }\n options?.onSuccess?.(data)\n },\n onError: options?.onError,\n })\n\n const checkout = useCallback(\n (params: CheckoutParams) => {\n mutation.mutate(params)\n },\n [mutation],\n )\n\n return useMemo(() => ({ ...mutation, checkout }), [mutation, checkout])\n}\n","import { useQuery } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { AvailableProvider } from '../types'\n\nexport function usePaymentProviders() {\n const client = useAccessClient()\n\n return useQuery({\n queryKey: ['azirid-access', 'billing', 'providers'],\n queryFn: () => client.get<AvailableProvider[]>(client.paths.providers),\n })\n}\n","const PAYPHONE_CDN = 'https://cdn.payphonetodoesposible.com'\nconst PAYPHONE_CSS_URL = `${PAYPHONE_CDN}/box/v1.1/payphone-payment-box.css`\nconst PAYPHONE_JS_URL = `${PAYPHONE_CDN}/box/v1.1/payphone-payment-box.js`\n\nlet loadPromise: Promise<void> | null = null\n\nfunction loadCss(href: string): void {\n if (document.querySelector(`link[href=\"${href}\"]`)) return\n const link = document.createElement('link')\n link.rel = 'stylesheet'\n link.href = href\n document.head.appendChild(link)\n}\n\nfunction loadScript(src: string): Promise<void> {\n return new Promise((resolve, reject) => {\n if (document.querySelector(`script[src=\"${src}\"]`)) {\n resolve()\n return\n }\n const script = document.createElement('script')\n script.src = src\n script.onload = () => resolve()\n script.onerror = () =>\n reject(\n new Error(\n `Failed to load Payphone SDK from ${src}. ` +\n `If your app uses a Content-Security-Policy, add \"${PAYPHONE_CDN}\" ` +\n `to both script-src and style-src directives.`,\n ),\n )\n document.head.appendChild(script)\n })\n}\n\nexport function loadPayphoneSdk(): Promise<void> {\n if (loadPromise) return loadPromise\n\n loadPromise = (async () => {\n loadCss(PAYPHONE_CSS_URL)\n await loadScript(PAYPHONE_JS_URL)\n })().catch((err) => {\n // Reset so the next call retries instead of returning the cached rejection\n loadPromise = null\n throw err\n })\n\n return loadPromise\n}\n","import { useEffect, useRef } from 'react'\nimport { loadPayphoneSdk } from '../utils/payphone-loader'\nimport type { PayphoneWidgetConfig } from '../types'\n\ndeclare global {\n interface Window {\n PPaymentButtonBox: new (config: Record<string, unknown>) => {\n render: (containerId: string) => void\n }\n }\n}\n\n/**\n * Internal widget renderer — loads Payphone SDK and mounts PPaymentButtonBox.\n * Used by usePayphoneCheckout, usePayButton hooks and PayphoneModal component.\n */\nexport function PayphoneWidgetRenderer({\n config,\n containerId,\n onReady,\n onError,\n}: {\n config: PayphoneWidgetConfig\n containerId: string\n onReady?: () => void\n onError?: (error: Error) => void\n}) {\n const initialized = useRef(false)\n\n useEffect(() => {\n if (initialized.current) return\n initialized.current = true\n\n loadPayphoneSdk()\n .then(() => {\n requestAnimationFrame(() => {\n if (typeof window.PPaymentButtonBox === 'undefined') {\n onError?.(new Error('Payphone SDK failed to initialize'))\n return\n }\n\n new window.PPaymentButtonBox({\n token: config.token,\n clientTransactionId: config.clientTransactionId,\n amount: config.amount,\n amountWithoutTax: config.amountWithoutTax,\n currency: config.currency,\n storeId: config.storeId,\n reference: config.reference,\n }).render(containerId)\n\n onReady?.()\n })\n })\n .catch((err) => {\n onError?.(new Error(err instanceof Error ? err.message : 'Failed to load Payphone SDK'))\n })\n }, [config, containerId, onReady, onError])\n\n return <div id={containerId} />\n}\n","import { useState, type CSSProperties } from 'react'\nimport { PayphoneWidgetRenderer } from './payphone-checkout'\nimport type { PayphoneWidgetConfig } from '../types'\n\nexport interface PayphoneModalProps {\n config: PayphoneWidgetConfig\n onClose: () => void\n}\n\nexport function PayphoneModal({ config, onClose }: PayphoneModalProps) {\n const [error, setError] = useState<string | null>(null)\n\n return (\n <div style={overlayStyle} onClick={onClose}>\n <div style={cardStyle} onClick={(e) => e.stopPropagation()}>\n <h2 style={titleStyle}>Payphone</h2>\n\n {error && <p style={{ ...messageStyle, color: '#ef4444' }}>{error}</p>}\n\n <PayphoneWidgetRenderer\n config={config}\n containerId=\"pp-button-azirid\"\n onError={(err) => setError(err.message)}\n />\n\n <p style={warningStyle}>Do not close this window until the payment is complete.</p>\n\n <button type=\"button\" style={cancelStyle} onClick={onClose}>\n Cancel\n </button>\n </div>\n </div>\n )\n}\n\nconst overlayStyle: CSSProperties = {\n position: 'fixed',\n inset: 0,\n backgroundColor: 'rgba(0,0,0,0.5)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 9999,\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n}\n\nconst cardStyle: CSSProperties = {\n backgroundColor: '#fff',\n borderRadius: '12px',\n padding: '24px',\n maxWidth: '480px',\n width: '90%',\n boxShadow: '0 25px 50px -12px rgba(0,0,0,0.25)',\n}\n\nconst titleStyle: CSSProperties = {\n fontSize: '18px',\n fontWeight: 700,\n color: '#111827',\n margin: '0 0 16px 0',\n textAlign: 'center',\n}\n\nconst messageStyle: CSSProperties = {\n fontSize: '14px',\n color: '#6b7280',\n textAlign: 'center',\n margin: '12px 0',\n}\n\nconst warningStyle: CSSProperties = {\n fontSize: '12px',\n color: '#d97706',\n textAlign: 'center',\n margin: '16px 0 0 0',\n}\n\nconst cancelStyle: CSSProperties = {\n display: 'block',\n width: '100%',\n marginTop: '12px',\n padding: '10px',\n border: 'none',\n borderRadius: '8px',\n backgroundColor: '#f3f4f6',\n color: '#6b7280',\n fontSize: '14px',\n fontWeight: 500,\n cursor: 'pointer',\n fontFamily: 'inherit',\n}\n","import type { CSSProperties } from 'react'\n\nexport interface PricingFeatureListProps {\n features: string[]\n}\n\nconst styles = {\n featuresList: {\n listStyle: 'none',\n padding: 0,\n margin: '0 0 24px 0',\n flex: 1,\n } satisfies CSSProperties,\n featureItem: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '6px 0',\n fontSize: '14px',\n color: '#374151',\n } satisfies CSSProperties,\n checkmark: {\n color: '#10b981',\n fontSize: '16px',\n fontWeight: 700,\n flexShrink: 0,\n } satisfies CSSProperties,\n}\n\nexport function PricingFeatureList({ features }: PricingFeatureListProps) {\n if (!features || features.length === 0) return null\n\n return (\n <ul style={styles.featuresList}>\n {features.map((feature, i) => (\n <li key={i} style={styles.featureItem}>\n <span style={styles.checkmark} aria-hidden=\"true\">\n ✓\n </span>\n {feature}\n </li>\n ))}\n </ul>\n )\n}\n\nPricingFeatureList.displayName = 'PricingFeatureList'\n","import type { CSSProperties } from 'react'\nimport { formatAmount } from '@azirid/shared'\nimport { PricingFeatureList } from './pricing-feature-list'\nimport type { BillingPlan } from '../types'\n\nexport interface PricingCardProps {\n plan: BillingPlan\n isCurrentPlan: boolean\n isCheckoutPending: boolean\n onSelect: (plan: BillingPlan) => void\n}\n\nconst intervalLabels: Record<BillingPlan['interval'], string> = {\n MONTHLY: '/mo',\n YEARLY: '/yr',\n ONE_TIME: '',\n}\n\nconst styles = {\n card: (isCurrentPlan: boolean): CSSProperties => ({\n border: isCurrentPlan ? '2px solid #6366f1' : '1px solid #e5e7eb',\n borderRadius: '12px',\n padding: '24px',\n backgroundColor: '#ffffff',\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n }),\n currentBadge: {\n position: 'absolute' as const,\n top: '-12px',\n left: '50%',\n transform: 'translateX(-50%)',\n backgroundColor: '#6366f1',\n color: '#ffffff',\n fontSize: '12px',\n fontWeight: 600,\n padding: '2px 12px',\n borderRadius: '9999px',\n whiteSpace: 'nowrap' as const,\n } satisfies CSSProperties,\n planName: {\n margin: '0 0 4px 0',\n fontSize: '20px',\n fontWeight: 600,\n color: '#111827',\n } satisfies CSSProperties,\n planDescription: {\n margin: '0 0 16px 0',\n fontSize: '14px',\n color: '#6b7280',\n lineHeight: '1.5',\n } satisfies CSSProperties,\n priceRow: {\n display: 'flex',\n alignItems: 'baseline',\n gap: '4px',\n marginBottom: '20px',\n } satisfies CSSProperties,\n priceAmount: {\n fontSize: '36px',\n fontWeight: 700,\n color: '#111827',\n lineHeight: 1,\n } satisfies CSSProperties,\n priceInterval: {\n fontSize: '16px',\n color: '#6b7280',\n } satisfies CSSProperties,\n selectButton: (isCurrentPlan: boolean): CSSProperties => ({\n width: '100%',\n padding: '12px 24px',\n borderRadius: '8px',\n border: isCurrentPlan ? '1px solid #d1d5db' : 'none',\n backgroundColor: isCurrentPlan ? '#ffffff' : '#111827',\n color: isCurrentPlan ? '#6b7280' : '#ffffff',\n fontSize: '14px',\n fontWeight: 600,\n cursor: isCurrentPlan ? 'default' : 'pointer',\n transition: 'background-color 0.15s',\n }),\n}\n\nexport function PricingCard({\n plan,\n isCurrentPlan,\n isCheckoutPending,\n onSelect,\n}: PricingCardProps) {\n return (\n <div style={styles.card(isCurrentPlan)}>\n {isCurrentPlan && <span style={styles.currentBadge}>Current Plan</span>}\n\n <h3 style={styles.planName}>{plan.name}</h3>\n {plan.description && <p style={styles.planDescription}>{plan.description}</p>}\n\n <div style={styles.priceRow}>\n <span style={styles.priceAmount}>{formatAmount(plan.amount, plan.currency)}</span>\n <span style={styles.priceInterval}>{intervalLabels[plan.interval]}</span>\n </div>\n\n {plan.features && plan.features.length > 0 && <PricingFeatureList features={plan.features} />}\n\n <button\n type=\"button\"\n onClick={() => onSelect(plan)}\n disabled={isCurrentPlan || isCheckoutPending}\n style={{\n ...styles.selectButton(isCurrentPlan),\n ...(isCheckoutPending && !isCurrentPlan ? { opacity: 0.6 } : {}),\n }}\n >\n {isCurrentPlan ? 'Current Plan' : 'Subscribe'}\n </button>\n </div>\n )\n}\n\nPricingCard.displayName = 'PricingCard'\n","import { useState, type CSSProperties } from 'react'\nimport { formatAmount } from '@azirid/shared'\nimport { usePlans } from '../hooks/use-plans'\nimport { useSubscription } from '../hooks/use-subscription'\nimport { useCheckout } from '../hooks/use-checkout'\nimport { usePaymentProviders } from '../hooks/use-payment-providers'\nimport { PayphoneModal } from './payphone-modal'\nimport { PricingCard } from './pricing-card'\nimport type {\n AvailableProvider,\n BillingPlan,\n CheckoutResponse,\n PaymentProviderType,\n} from '../types'\n\nexport interface PricingTableProps {\n className?: string\n style?: CSSProperties\n successUrl: string\n cancelUrl: string\n columns?: number\n onPlanSelect?: (plan: BillingPlan) => void\n}\n\nconst styles = {\n grid: (columns: number): CSSProperties => ({\n display: 'grid',\n gridTemplateColumns: `repeat(${columns}, 1fr)`,\n gap: '24px',\n fontFamily:\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n }),\n skeletonCard: {\n border: '1px solid #e5e7eb',\n borderRadius: '12px',\n padding: '24px',\n backgroundColor: '#ffffff',\n } satisfies CSSProperties,\n skeletonLine: {\n backgroundColor: '#f3f4f6',\n borderRadius: '4px',\n marginBottom: '12px',\n } satisfies CSSProperties,\n overlay: {\n position: 'fixed' as const,\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 9999,\n } satisfies CSSProperties,\n modal: {\n backgroundColor: '#ffffff',\n borderRadius: '16px',\n padding: '32px',\n maxWidth: '480px',\n width: '90%',\n maxHeight: '80vh',\n overflow: 'auto',\n } satisfies CSSProperties,\n modalTitle: {\n margin: '0 0 8px 0',\n fontSize: '20px',\n fontWeight: 600,\n color: '#111827',\n } satisfies CSSProperties,\n modalSubtitle: {\n margin: '0 0 24px 0',\n fontSize: '14px',\n color: '#6b7280',\n } satisfies CSSProperties,\n bankDetailRow: {\n display: 'flex',\n justifyContent: 'space-between',\n padding: '8px 0',\n borderBottom: '1px solid #f3f4f6',\n fontSize: '14px',\n } satisfies CSSProperties,\n bankDetailLabel: {\n color: '#6b7280',\n fontWeight: 500,\n } satisfies CSSProperties,\n bankDetailValue: {\n color: '#111827',\n fontWeight: 600,\n fontFamily: 'monospace',\n } satisfies CSSProperties,\n instructions: {\n margin: '16px 0',\n padding: '12px 16px',\n backgroundColor: '#f9fafb',\n borderRadius: '8px',\n fontSize: '14px',\n color: '#374151',\n lineHeight: '1.5',\n } satisfies CSSProperties,\n closeButton: {\n width: '100%',\n padding: '12px 24px',\n borderRadius: '8px',\n border: '1px solid #d1d5db',\n backgroundColor: '#ffffff',\n color: '#374151',\n fontSize: '14px',\n fontWeight: 600,\n cursor: 'pointer',\n marginTop: '16px',\n } satisfies CSSProperties,\n}\n\n/* ------------------------------------------------------------------ */\n/* Provider Selection Modal */\n/* ------------------------------------------------------------------ */\n\nconst PROVIDER_LABELS: Record<PaymentProviderType, string> = {\n STRIPE: 'Credit/Debit Card',\n PAYPAL: 'PayPal',\n PAYPHONE: 'Payphone',\n NUVEI: 'Nuvei',\n MANUAL_TRANSFER: 'Bank Transfer',\n}\n\nconst PROVIDER_ICONS: Record<PaymentProviderType, string> = {\n STRIPE: '\\uD83D\\uDCB3',\n PAYPAL: '\\uD83C\\uDD7F\\uFE0F',\n PAYPHONE: '\\uD83D\\uDCF1',\n NUVEI: '\\uD83D\\uDCB3',\n MANUAL_TRANSFER: '\\uD83C\\uDFE6',\n}\n\nfunction ProviderSelectModal({\n providers,\n isPending,\n onSelect,\n onClose,\n}: {\n providers: AvailableProvider[]\n isPending: boolean\n onSelect: (provider: PaymentProviderType) => void\n onClose: () => void\n}) {\n return (\n <div style={styles.overlay} onClick={onClose}>\n <div style={styles.modal} onClick={(e) => e.stopPropagation()}>\n <h2 style={styles.modalTitle}>Select payment method</h2>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n {providers.map((p) => (\n <button\n key={p.provider}\n type=\"button\"\n onClick={() => onSelect(p.provider)}\n disabled={isPending}\n style={{\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n padding: '12px 16px',\n border: '1px solid #e5e7eb',\n borderRadius: '8px',\n backgroundColor: '#fff',\n cursor: isPending ? 'not-allowed' : 'pointer',\n fontSize: '14px',\n fontWeight: 500,\n color: '#111827',\n fontFamily: 'inherit',\n }}\n >\n <span style={{ fontSize: '20px', marginRight: '12px' }}>\n {PROVIDER_ICONS[p.provider]}\n </span>\n <span>{PROVIDER_LABELS[p.provider] ?? p.provider}</span>\n </button>\n ))}\n </div>\n <button type=\"button\" style={styles.closeButton} onClick={onClose}>\n Cancel\n </button>\n </div>\n </div>\n )\n}\n\n/* ------------------------------------------------------------------ */\n/* Manual Transfer Modal */\n/* ------------------------------------------------------------------ */\n\nconst intervalLabels: Record<BillingPlan['interval'], string> = {\n MONTHLY: '/mo',\n YEARLY: '/yr',\n ONE_TIME: '',\n}\n\nfunction TransferModal({ data, onClose }: { data: CheckoutResponse; onClose: () => void }) {\n const bankDetails = data.bankDetails as Record<string, string> | null\n\n return (\n <div style={styles.overlay} onClick={onClose}>\n <div style={styles.modal} onClick={(e) => e.stopPropagation()}>\n <h2 style={styles.modalTitle}>Manual Transfer</h2>\n <p style={styles.modalSubtitle}>\n Transfer the amount below to subscribe to <strong>{data.plan?.name}</strong>\n </p>\n\n {/* Amount */}\n <div\n style={{\n textAlign: 'center',\n padding: '16px',\n backgroundColor: '#f9fafb',\n borderRadius: '8px',\n marginBottom: '20px',\n }}\n >\n <div style={{ fontSize: '32px', fontWeight: 700, color: '#111827' }}>\n {data.plan ? formatAmount(data.plan.amount, data.plan.currency) : ''}\n </div>\n <div style={{ fontSize: '14px', color: '#6b7280' }}>\n {data.plan?.interval\n ? (intervalLabels[data.plan.interval as keyof typeof intervalLabels] ?? '')\n : ''}\n </div>\n </div>\n\n {/* Bank Details */}\n {bankDetails && Object.keys(bankDetails).length > 0 && (\n <div style={{ marginBottom: '16px' }}>\n <div\n style={{\n fontSize: '14px',\n fontWeight: 600,\n color: '#111827',\n marginBottom: '8px',\n }}\n >\n Bank Details\n </div>\n {Object.entries(bankDetails)\n .filter(([, v]) => v)\n .map(([key, value]) => (\n <div key={key} style={styles.bankDetailRow}>\n <span style={styles.bankDetailLabel}>\n {key.replace(/([A-Z])/g, ' $1').replace(/^./, (s) => s.toUpperCase())}\n </span>\n <span style={styles.bankDetailValue}>{value}</span>\n </div>\n ))}\n </div>\n )}\n\n {/* Instructions */}\n {data.transferInstructions && (\n <div style={styles.instructions}>{data.transferInstructions}</div>\n )}\n\n <p\n style={{\n fontSize: '13px',\n color: '#9ca3af',\n margin: '12px 0 0 0',\n }}\n >\n After completing the transfer, submit your proof of payment. Your subscription will be\n activated once the transfer is verified.\n </p>\n\n <button type=\"button\" style={styles.closeButton} onClick={onClose}>\n Close\n </button>\n </div>\n </div>\n )\n}\n\n/* ------------------------------------------------------------------ */\n/* PricingTable */\n/* ------------------------------------------------------------------ */\n\nexport function PricingTable({\n className,\n style,\n successUrl,\n cancelUrl,\n columns = 3,\n onPlanSelect,\n}: PricingTableProps) {\n const { data: plans, isLoading: plansLoading } = usePlans()\n const { data: subscription } = useSubscription()\n const { data: providers } = usePaymentProviders()\n const [transferData, setTransferData] = useState<CheckoutResponse | null>(null)\n const [payphoneData, setPayphoneData] = useState<CheckoutResponse | null>(null)\n const [pendingPlan, setPendingPlan] = useState<BillingPlan | null>(null)\n const [showProviderModal, setShowProviderModal] = useState(false)\n\n const { checkout, isPending: checkoutPending } = useCheckout({\n redirectOnSuccess: true,\n onSuccess: (data) => {\n setShowProviderModal(false)\n setPendingPlan(null)\n if (data.provider === 'MANUAL_TRANSFER') {\n setTransferData(data)\n } else if (data.provider === 'PAYPHONE' && data.widgetConfig) {\n setPayphoneData(data)\n }\n },\n })\n\n const doCheckout = (planId: string, provider: PaymentProviderType) => {\n checkout({ planId, provider, successUrl, cancelUrl })\n }\n\n const handleSelect = (plan: BillingPlan) => {\n if (subscription?.planId === plan.id && subscription.status === 'ACTIVE') return\n\n if (onPlanSelect) {\n onPlanSelect(plan)\n return\n }\n\n // If multiple providers, show selection modal\n if (providers && providers.length > 1) {\n setPendingPlan(plan)\n setShowProviderModal(true)\n return\n }\n\n // Single provider — checkout directly\n const provider = providers?.[0]?.provider\n checkout({ planId: plan.id, provider, successUrl, cancelUrl })\n }\n\n if (plansLoading) {\n return (\n <div className={className} style={{ ...styles.grid(columns), ...style }}>\n {Array.from({ length: columns }).map((_, i) => (\n <div key={i} style={styles.skeletonCard}>\n <div\n style={{\n ...styles.skeletonLine,\n width: '60%',\n height: '20px',\n }}\n />\n <div\n style={{\n ...styles.skeletonLine,\n width: '80%',\n height: '14px',\n }}\n />\n <div\n style={{\n ...styles.skeletonLine,\n width: '40%',\n height: '36px',\n marginTop: '8px',\n }}\n />\n <div style={{ marginTop: '16px' }}>\n {[1, 2, 3].map((j) => (\n <div\n key={j}\n style={{\n ...styles.skeletonLine,\n width: '90%',\n height: '14px',\n }}\n />\n ))}\n </div>\n <div\n style={{\n ...styles.skeletonLine,\n width: '100%',\n height: '44px',\n marginTop: '16px',\n }}\n />\n </div>\n ))}\n </div>\n )\n }\n\n const sortedPlans = plans ? [...plans].sort((a, b) => a.sortOrder - b.sortOrder) : []\n\n return (\n <>\n <div className={className} style={{ ...styles.grid(columns), ...style }}>\n {sortedPlans.map((plan) => {\n const isCurrentPlan = subscription?.planId === plan.id && subscription.status === 'ACTIVE'\n\n return (\n <PricingCard\n key={plan.id}\n plan={plan}\n isCurrentPlan={isCurrentPlan}\n isCheckoutPending={checkoutPending}\n onSelect={handleSelect}\n />\n )\n })}\n </div>\n\n {showProviderModal && pendingPlan && providers && providers.length > 1 && (\n <ProviderSelectModal\n providers={providers}\n isPending={checkoutPending}\n onSelect={(provider) => doCheckout(pendingPlan.id, provider)}\n onClose={() => {\n setShowProviderModal(false)\n setPendingPlan(null)\n }}\n />\n )}\n\n {transferData && <TransferModal data={transferData} onClose={() => setTransferData(null)} />}\n\n {payphoneData?.widgetConfig && (\n <PayphoneModal\n config={payphoneData.widgetConfig}\n onClose={() => setPayphoneData(null)}\n />\n )}\n </>\n )\n}\n\nPricingTable.displayName = 'PricingTable'\n","import type { CSSProperties, ReactNode } from 'react'\nimport { useCheckout } from '../hooks/use-checkout'\n\nexport interface CheckoutButtonProps {\n planId: string\n successUrl: string\n cancelUrl: string\n className?: string\n style?: CSSProperties\n children?: ReactNode\n}\n\nconst defaultStyle: CSSProperties = {\n padding: '12px 24px',\n borderRadius: '8px',\n border: 'none',\n backgroundColor: '#111827',\n color: '#ffffff',\n fontSize: '14px',\n fontWeight: 600,\n cursor: 'pointer',\n transition: 'background-color 0.15s',\n fontFamily:\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n}\n\nexport function CheckoutButton({\n planId,\n successUrl,\n cancelUrl,\n className,\n style,\n children,\n}: CheckoutButtonProps) {\n const { checkout, isPending } = useCheckout({ redirectOnSuccess: true })\n\n return (\n <button\n type=\"button\"\n className={className}\n style={{\n ...defaultStyle,\n ...style,\n ...(isPending ? { opacity: 0.6, cursor: 'not-allowed' } : {}),\n }}\n disabled={isPending}\n onClick={() => checkout({ planId, successUrl, cancelUrl })}\n >\n {isPending ? 'Loading...' : (children ?? 'Subscribe')}\n </button>\n )\n}\n\nCheckoutButton.displayName = 'CheckoutButton'\n","import { useMutation } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\n\nexport interface PayphoneConfirmParams {\n id: number\n clientTransactionId: string\n}\n\nexport interface PayphoneConfirmResult {\n status: 'confirmed' | 'cancelled' | 'already_confirmed'\n intentId: string\n}\n\nexport interface UsePayphoneConfirmOptions {\n onSuccess?: (data: PayphoneConfirmResult) => void\n onError?: (error: Error) => void\n}\n\nexport function usePayphoneConfirm(options?: UsePayphoneConfirmOptions) {\n const client = useAccessClient()\n\n return useMutation({\n mutationFn: (params: PayphoneConfirmParams) =>\n client.post<PayphoneConfirmResult>(client.paths.payphoneConfirm, params),\n onSuccess: options?.onSuccess,\n onError: options?.onError,\n })\n}\n","import type { ReactElement } from 'react'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { useCheckout } from './use-checkout'\nimport { usePaymentProviders } from './use-payment-providers'\nimport { usePayphoneConfirm } from './use-payphone-confirm'\nimport type { PayphoneConfirmResult } from './use-payphone-confirm'\nimport { PayphoneWidgetRenderer } from '../components/payphone-checkout'\nimport { useAzirid } from '../providers/access-provider'\nimport { formatAmount } from '@azirid/shared'\nimport type {\n AvailableProvider,\n CheckoutResponse,\n PaymentProviderType,\n PayphoneWidgetConfig,\n} from '../types'\n\n// ─── Types ───────────────────────────────────────────────────\n\nexport type PayButtonStatus =\n | 'idle'\n | 'loading_providers'\n | 'ready'\n | 'processing'\n | 'redirecting'\n | 'success'\n | 'error'\n\nexport interface UsePayButtonOptions {\n intentId?: string\n planId?: string\n onSuccess?: (data: CheckoutResponse) => void\n onError?: (error: Error) => void\n}\n\nexport interface UsePayButtonReturn {\n providers: AvailableProvider[]\n checkout: (provider: PaymentProviderType) => void\n ProviderSelector: () => ReactElement | null\n TransferDetails: () => ReactElement | null\n PayphoneWidget: () => ReactElement | null\n status: PayButtonStatus\n selectedProvider: PaymentProviderType | null\n checkoutData: CheckoutResponse | null\n isPending: boolean\n error: Error | null\n}\n\n// ─── Provider display config ────────────────────────────────\n\nconst PROVIDER_LABELS: Record<PaymentProviderType, string> = {\n STRIPE: 'Credit/Debit Card',\n PAYPAL: 'PayPal',\n PAYPHONE: 'Payphone',\n NUVEI: 'Nuvei',\n MANUAL_TRANSFER: 'Bank Transfer',\n}\n\nconst PROVIDER_ICONS: Record<PaymentProviderType, string> = {\n STRIPE: '\\uD83D\\uDCB3',\n PAYPAL: '\\uD83C\\uDD7F\\uFE0F',\n PAYPHONE: '\\uD83D\\uDCF1',\n NUVEI: '\\uD83D\\uDCB3',\n MANUAL_TRANSFER: '\\uD83C\\uDFE6',\n}\n\nconst PP_CONTAINER_ID = 'pp-paybtn-azirid'\n\n// ─── Hook ───────────────────────────────────────────────────\n\nexport function usePayButton({\n intentId,\n planId,\n onSuccess,\n onError,\n}: UsePayButtonOptions): UsePayButtonReturn {\n const [status, setStatus] = useState<PayButtonStatus>('idle')\n const [selectedProvider, setSelectedProvider] = useState<PaymentProviderType | null>(null)\n const [checkoutData, setCheckoutData] = useState<CheckoutResponse | null>(null)\n const [payphoneConfig, setPayphoneConfig] = useState<PayphoneWidgetConfig | null>(null)\n const [currentError, setCurrentError] = useState<Error | null>(null)\n const payphoneConfirmTriggered = useRef(false)\n const { isBootstrapping } = useAzirid()\n\n // Detect Payphone callback params\n const params =\n typeof window !== 'undefined'\n ? new URLSearchParams(window.location.search)\n : new URLSearchParams()\n const callbackId = params.get('id')\n const callbackClientTxId = params.get('clientTransactionId')\n const isPayphoneCallback = !!(callbackId && callbackClientTxId)\n\n // ── Load providers ─────────────────────────────────────────\n const {\n data: providerList,\n isLoading: providersLoading,\n } = usePaymentProviders()\n\n const providers = providerList ?? []\n\n useEffect(() => {\n if (isPayphoneCallback) return\n if (providersLoading) {\n setStatus('loading_providers')\n } else if (providers.length > 0 && status === 'loading_providers') {\n setStatus('ready')\n }\n }, [providersLoading, providers.length, status, isPayphoneCallback])\n\n // ── Checkout ───────────────────────────────────────────────\n const { checkout: doCheckout, isPending } = useCheckout({\n redirectOnSuccess: false,\n onSuccess: (data) => {\n setCheckoutData(data)\n\n if (data.provider === 'PAYPHONE' && data.widgetConfig) {\n setPayphoneConfig(data.widgetConfig)\n setStatus('processing')\n return\n }\n\n if (data.provider === 'MANUAL_TRANSFER') {\n setStatus('success')\n onSuccess?.(data)\n return\n }\n\n // Redirect-based providers (Stripe, PayPal, Nuvei)\n if (data.url) {\n setStatus('redirecting')\n window.location.href = data.url\n return\n }\n\n setStatus('success')\n onSuccess?.(data)\n },\n onError: (err) => {\n setCurrentError(err)\n setStatus('error')\n onError?.(err)\n },\n })\n\n const checkout = useCallback(\n (provider: PaymentProviderType) => {\n setSelectedProvider(provider)\n setStatus('processing')\n setCurrentError(null)\n\n const currentUrl =\n typeof window !== 'undefined' ? window.location.href.split('?')[0] : ''\n\n doCheckout({\n intentId,\n planId,\n provider,\n successUrl: currentUrl,\n cancelUrl: currentUrl,\n })\n },\n [doCheckout, intentId, planId],\n )\n\n // ── Payphone confirmation ──────────────────────────────────\n const { mutate: confirmPayphone } = usePayphoneConfirm({\n onSuccess: (data: PayphoneConfirmResult) => {\n const isConfirmed = data.status === 'confirmed' || data.status === 'already_confirmed'\n setStatus(isConfirmed ? 'success' : 'error')\n\n const response: CheckoutResponse = {\n provider: 'PAYPHONE',\n ...(checkoutData ?? {}),\n }\n if (isConfirmed) {\n onSuccess?.(response)\n } else {\n onError?.(new Error('Payment was cancelled'))\n }\n },\n onError: (err) => {\n setCurrentError(err)\n setStatus('error')\n onError?.(err)\n },\n })\n\n useEffect(() => {\n if (!isPayphoneCallback || payphoneConfirmTriggered.current || isBootstrapping) return\n payphoneConfirmTriggered.current = true\n setSelectedProvider('PAYPHONE')\n setStatus('processing')\n confirmPayphone({ id: Number(callbackId), clientTransactionId: callbackClientTxId! })\n }, [isPayphoneCallback, isBootstrapping, callbackId, callbackClientTxId, confirmPayphone])\n\n // ── SDK error handler ──────────────────────────────────────\n const handleSdkError = useCallback(\n (err: Error) => {\n setCurrentError(err)\n setStatus('error')\n onError?.(err)\n },\n [onError],\n )\n\n // ── ProviderSelector component ─────────────────────────────\n const ProviderSelector = useMemo(() => {\n return function ProviderSelectorInner() {\n if (providers.length === 0 || isPayphoneCallback) return null\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n {providers.map((p) => (\n <button\n key={p.provider}\n type=\"button\"\n style={{\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n padding: '12px 16px',\n border: '1px solid #e5e7eb',\n borderRadius: '8px',\n backgroundColor: selectedProvider === p.provider ? '#f3f4f6' : '#fff',\n cursor: isPending ? 'not-allowed' : 'pointer',\n fontSize: '14px',\n fontWeight: 500,\n color: '#111827',\n fontFamily: 'inherit',\n }}\n onClick={() => checkout(p.provider)}\n disabled={isPending}\n >\n <span style={{ fontSize: '20px', marginRight: '12px' }}>\n {PROVIDER_ICONS[p.provider]}\n </span>\n <span>{PROVIDER_LABELS[p.provider]}</span>\n </button>\n ))}\n </div>\n )\n }\n }, [providers, selectedProvider, isPending, checkout, isPayphoneCallback])\n\n // ── TransferDetails component ──────────────────────────────\n const TransferDetails = useMemo(() => {\n return function TransferDetailsInner() {\n if (!checkoutData || checkoutData.provider !== 'MANUAL_TRANSFER') return null\n\n const bankDetails = checkoutData.bankDetails as Record<string, string> | null\n const plan = checkoutData.plan\n const intent = (checkoutData as any).intent as\n | { id: string; amount: number; currency: string; description?: string }\n | undefined\n\n const displayAmount = plan\n ? formatAmount(plan.amount, plan.currency)\n : intent\n ? formatAmount(intent.amount, intent.currency)\n : ''\n\n return (\n <div>\n {displayAmount && (\n <div\n style={{\n textAlign: 'center',\n padding: '16px',\n backgroundColor: '#f9fafb',\n borderRadius: '8px',\n marginBottom: '20px',\n }}\n >\n <div style={{ fontSize: '32px', fontWeight: 700, color: '#111827' }}>\n {displayAmount}\n </div>\n {plan?.name && (\n <div style={{ fontSize: '14px', color: '#6b7280' }}>{plan.name}</div>\n )}\n {intent?.description && (\n <div style={{ fontSize: '14px', color: '#6b7280' }}>{intent.description}</div>\n )}\n </div>\n )}\n\n {bankDetails && Object.keys(bankDetails).length > 0 && (\n <div style={{ marginBottom: '16px' }}>\n <div\n style={{\n fontSize: '14px',\n fontWeight: 600,\n color: '#111827',\n marginBottom: '8px',\n }}\n >\n Bank Details\n </div>\n {Object.entries(bankDetails)\n .filter(([, v]) => v)\n .map(([key, value]) => (\n <div\n key={key}\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n padding: '6px 0',\n borderBottom: '1px solid #f3f4f6',\n fontSize: '13px',\n }}\n >\n <span style={{ color: '#6b7280' }}>\n {key.replace(/([A-Z])/g, ' $1').replace(/^./, (s) => s.toUpperCase())}\n </span>\n <span style={{ color: '#111827', fontWeight: 500 }}>{value}</span>\n </div>\n ))}\n </div>\n )}\n\n {checkoutData.transferInstructions && (\n <div\n style={{\n padding: '12px',\n backgroundColor: '#eff6ff',\n borderRadius: '6px',\n fontSize: '13px',\n color: '#1e40af',\n lineHeight: 1.5,\n }}\n >\n {checkoutData.transferInstructions}\n </div>\n )}\n </div>\n )\n }\n }, [checkoutData])\n\n // ── PayphoneWidget component ───────────────────────────────\n const PayphoneWidget = useMemo(() => {\n return function PayphoneWidgetInner() {\n if (!payphoneConfig || isPayphoneCallback) return null\n\n return PayphoneWidgetRenderer({\n config: payphoneConfig,\n containerId: PP_CONTAINER_ID,\n onError: handleSdkError,\n })\n }\n }, [payphoneConfig, isPayphoneCallback, handleSdkError])\n\n return {\n providers,\n checkout,\n ProviderSelector,\n TransferDetails,\n PayphoneWidget,\n status,\n selectedProvider,\n checkoutData,\n isPending,\n error: currentError,\n }\n}\n","import type { CSSProperties } from 'react'\nimport { formatAmount } from '@azirid/shared'\nimport type { AvailableProvider, CheckoutResponse, PaymentProviderType } from '../types'\n\n// ─── Constants ───────────────────────────────────────────────\n\nconst PROVIDER_LABELS: Record<PaymentProviderType, { en: string; es: string }> = {\n STRIPE: { en: 'Credit/Debit Card', es: 'Tarjeta de crédito/débito' },\n PAYPAL: { en: 'PayPal', es: 'PayPal' },\n PAYPHONE: { en: 'Payphone', es: 'Payphone' },\n NUVEI: { en: 'Nuvei', es: 'Nuvei' },\n MANUAL_TRANSFER: { en: 'Bank Transfer', es: 'Transferencia bancaria' },\n}\n\nconst PROVIDER_ICONS: Record<PaymentProviderType, string> = {\n STRIPE: '\\uD83D\\uDCB3',\n PAYPAL: '\\uD83C\\uDD7F\\uFE0F',\n PAYPHONE: '\\uD83D\\uDCF1',\n NUVEI: '\\uD83D\\uDCB3',\n MANUAL_TRANSFER: '\\uD83C\\uDFE6',\n}\n\n// ─── Styles ──────────────────────────────────────────────────\n\nconst modalStyles: Record<string, CSSProperties> = {\n overlay: {\n position: 'fixed',\n inset: 0,\n backgroundColor: 'rgba(0,0,0,0.5)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 9999,\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n },\n card: {\n backgroundColor: '#fff',\n borderRadius: '12px',\n padding: '24px',\n maxWidth: '420px',\n width: '90%',\n boxShadow: '0 25px 50px -12px rgba(0,0,0,0.25)',\n },\n title: {\n fontSize: '18px',\n fontWeight: 700,\n color: '#111827',\n margin: '0 0 20px 0',\n textAlign: 'center',\n },\n providerButton: {\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n padding: '12px 16px',\n border: '1px solid #e5e7eb',\n borderRadius: '8px',\n backgroundColor: '#fff',\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: 500,\n color: '#111827',\n transition: 'background-color 0.15s',\n fontFamily: 'inherit',\n },\n cancelButton: {\n display: 'block',\n width: '100%',\n marginTop: '16px',\n padding: '10px',\n border: 'none',\n borderRadius: '8px',\n backgroundColor: '#f3f4f6',\n color: '#6b7280',\n fontSize: '14px',\n fontWeight: 500,\n cursor: 'pointer',\n fontFamily: 'inherit',\n },\n}\n\n// ─── ProviderModal ───────────────────────────────────────────\n\nexport interface ProviderModalProps {\n providers: AvailableProvider[]\n isPending: boolean\n onSelect: (provider: PaymentProviderType) => void\n onClose: () => void\n labels?: Record<string, string>\n}\n\nexport function ProviderModal({\n providers,\n isPending,\n onSelect,\n onClose,\n labels,\n}: ProviderModalProps) {\n return (\n <div style={modalStyles.overlay} onClick={onClose}>\n <div style={modalStyles.card} onClick={(e) => e.stopPropagation()}>\n <h2 style={modalStyles.title}>{labels?.selectPaymentMethod ?? 'Select payment method'}</h2>\n\n <div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n {providers.map((p) => {\n const label = PROVIDER_LABELS[p.provider]\n return (\n <button\n key={p.provider}\n type=\"button\"\n style={modalStyles.providerButton}\n onClick={() => onSelect(p.provider)}\n disabled={isPending}\n >\n <span style={{ fontSize: '20px', marginRight: '12px' }}>\n {PROVIDER_ICONS[p.provider]}\n </span>\n <span>{label?.en ?? p.provider}</span>\n </button>\n )\n })}\n </div>\n\n <button type=\"button\" style={modalStyles.cancelButton} onClick={onClose}>\n {labels?.cancel ?? 'Cancel'}\n </button>\n </div>\n </div>\n )\n}\n\n// ─── TransferModal ───────────────────────────────────────────\n\nexport interface TransferModalProps {\n data: CheckoutResponse\n onClose: () => void\n labels?: Record<string, string>\n}\n\nexport function TransferModal({ data, onClose, labels }: TransferModalProps) {\n const bankDetails = data.bankDetails as Record<string, string> | null\n const plan = data.plan\n const intent = (data as any).intent as\n | { id: string; amount: number; currency: string; description?: string }\n | undefined\n\n const displayAmount = plan\n ? formatAmount(plan.amount, plan.currency)\n : intent\n ? formatAmount(intent.amount, intent.currency)\n : ''\n\n return (\n <div style={modalStyles.overlay} onClick={onClose}>\n <div style={modalStyles.card} onClick={(e) => e.stopPropagation()}>\n <h2 style={modalStyles.title}>{labels?.bankTransfer ?? 'Bank Transfer'}</h2>\n\n {displayAmount && (\n <div\n style={{\n textAlign: 'center',\n padding: '16px',\n backgroundColor: '#f9fafb',\n borderRadius: '8px',\n marginBottom: '20px',\n }}\n >\n <div style={{ fontSize: '32px', fontWeight: 700, color: '#111827' }}>\n {displayAmount}\n </div>\n {plan?.name && <div style={{ fontSize: '14px', color: '#6b7280' }}>{plan.name}</div>}\n {intent?.description && (\n <div style={{ fontSize: '14px', color: '#6b7280' }}>{intent.description}</div>\n )}\n </div>\n )}\n\n {bankDetails && Object.keys(bankDetails).length > 0 && (\n <div style={{ marginBottom: '16px' }}>\n <div\n style={{\n fontSize: '14px',\n fontWeight: 600,\n color: '#111827',\n marginBottom: '8px',\n }}\n >\n Bank Details\n </div>\n {Object.entries(bankDetails)\n .filter(([, v]) => v)\n .map(([key, value]) => (\n <div\n key={key}\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n padding: '6px 0',\n borderBottom: '1px solid #f3f4f6',\n fontSize: '13px',\n }}\n >\n <span style={{ color: '#6b7280' }}>\n {key.replace(/([A-Z])/g, ' $1').replace(/^./, (s) => s.toUpperCase())}\n </span>\n <span style={{ color: '#111827', fontWeight: 500 }}>{value}</span>\n </div>\n ))}\n </div>\n )}\n\n {data.transferInstructions && (\n <div\n style={{\n padding: '12px',\n backgroundColor: '#eff6ff',\n borderRadius: '6px',\n fontSize: '13px',\n color: '#1e40af',\n lineHeight: 1.5,\n marginBottom: '16px',\n }}\n >\n {data.transferInstructions}\n </div>\n )}\n\n <p\n style={{\n fontSize: '13px',\n color: '#9ca3af',\n margin: '12px 0 0 0',\n }}\n >\n After completing the transfer, submit your proof of payment. Your access will be activated\n once the transfer is verified.\n </p>\n\n <button type=\"button\" style={modalStyles.cancelButton} onClick={onClose}>\n Close\n </button>\n </div>\n </div>\n )\n}\n","import { useState, type CSSProperties, type ReactNode } from 'react'\nimport { usePayButton } from '../hooks/use-pay-button'\nimport { useMessages } from '../providers/access-provider'\nimport { PayphoneModal } from './payphone-modal'\nimport { ProviderModal, TransferModal } from './pay-button-modal'\nimport type { CheckoutResponse, PaymentProviderType } from '../types'\n\nexport interface PayButtonProps {\n planId?: string\n intentId?: string\n successUrl: string\n cancelUrl: string\n className?: string\n style?: CSSProperties\n children?: ReactNode\n disabled?: boolean\n onSuccess?: (data: CheckoutResponse) => void\n onError?: (error: Error) => void\n onProviderSelect?: (provider: PaymentProviderType) => void\n}\n\nexport function PayButton({\n planId,\n intentId,\n successUrl,\n cancelUrl,\n className,\n style,\n children,\n disabled,\n onSuccess,\n onError,\n onProviderSelect,\n}: PayButtonProps) {\n const messages = useMessages()\n const billing = (messages as any)?.billing\n const [showProviderModal, setShowProviderModal] = useState(false)\n const [showTransferModal, setShowTransferModal] = useState(false)\n\n const {\n providers,\n checkout,\n checkoutData,\n PayphoneWidget,\n isPending,\n status,\n } = usePayButton({\n intentId,\n planId,\n onSuccess: (data) => {\n if (data.provider === 'MANUAL_TRANSFER') {\n setShowTransferModal(true)\n setShowProviderModal(false)\n return\n }\n if (data.provider === 'PAYPHONE') {\n setShowProviderModal(false)\n return\n }\n onSuccess?.(data)\n },\n onError,\n })\n\n const handleClick = () => {\n if (!providers || providers.length === 0) return\n\n if (providers.length === 1) {\n doCheckout(providers[0].provider)\n } else {\n setShowProviderModal(true)\n }\n }\n\n const doCheckout = (provider: PaymentProviderType) => {\n onProviderSelect?.(provider)\n checkout(provider)\n }\n\n const isDisabled = disabled || isPending || status === 'loading_providers' || (!planId && !intentId)\n\n return (\n <>\n <button\n type=\"button\"\n className={className}\n style={{\n padding: '10px 24px',\n fontSize: '14px',\n fontWeight: 600,\n color: '#fff',\n backgroundColor: isDisabled ? '#9ca3af' : '#111827',\n border: 'none',\n borderRadius: '8px',\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n ...style,\n }}\n onClick={handleClick}\n disabled={isDisabled}\n >\n {isPending ? (billing?.processing ?? 'Processing...') : (children ?? billing?.pay ?? 'Pay')}\n </button>\n\n {/* Provider Selection Modal */}\n {showProviderModal && providers && providers.length > 1 && (\n <ProviderModal\n providers={providers}\n isPending={isPending}\n onSelect={doCheckout}\n onClose={() => setShowProviderModal(false)}\n labels={billing}\n />\n )}\n\n {/* Transfer Details Modal */}\n {showTransferModal && checkoutData && checkoutData.provider === 'MANUAL_TRANSFER' && (\n <TransferModal\n data={checkoutData}\n onClose={() => {\n setShowTransferModal(false)\n onSuccess?.(checkoutData)\n }}\n labels={billing}\n />\n )}\n\n {/* Payphone Widget Modal */}\n {status === 'processing' && checkoutData?.provider === 'PAYPHONE' && checkoutData.widgetConfig && (\n <PayphoneModal\n config={checkoutData.widgetConfig}\n onClose={() => {\n onSuccess?.(checkoutData)\n }}\n />\n )}\n </>\n )\n}\n","import { useEffect, useRef, type CSSProperties } from 'react'\nimport { usePayphoneConfirm } from '../hooks/use-payphone-confirm'\nimport { useAzirid } from '../providers/access-provider'\n\nexport interface PayphoneCallbackProps {\n onSuccess?: (data: { status: string; intentId: string }) => void\n onError?: (error: Error) => void\n className?: string\n style?: CSSProperties\n}\n\nexport function PayphoneCallback({ onSuccess, onError, className, style }: PayphoneCallbackProps) {\n const { mutate, isPending, isSuccess, isError, error, data } = usePayphoneConfirm({\n onSuccess,\n onError,\n })\n\n const { isBootstrapping } = useAzirid()\n const called = useRef(false)\n\n useEffect(() => {\n if (called.current || isBootstrapping) return\n called.current = true\n\n const params = new URLSearchParams(window.location.search)\n const id = params.get('id')\n const clientTransactionId = params.get('clientTransactionId')\n\n if (!id || !clientTransactionId) return\n\n mutate({ id: Number(id), clientTransactionId })\n }, [mutate, isBootstrapping])\n\n return (\n <div className={className} style={{ textAlign: 'center', padding: '32px', ...style }}>\n {isPending && (\n <div>\n <p style={textStyle}>Confirming your payment...</p>\n <p style={subtextStyle}>Please do not close this page.</p>\n </div>\n )}\n\n {isSuccess && data && (\n <div>\n {data.status === 'confirmed' || data.status === 'already_confirmed' ? (\n <>\n <p style={{ ...textStyle, color: '#059669' }}>Payment confirmed!</p>\n <p style={subtextStyle}>Your payment has been processed successfully.</p>\n </>\n ) : (\n <>\n <p style={{ ...textStyle, color: '#d97706' }}>Payment was cancelled</p>\n <p style={subtextStyle}>The transaction was not completed.</p>\n </>\n )}\n </div>\n )}\n\n {isError && (\n <div>\n <p style={{ ...textStyle, color: '#dc2626' }}>Payment confirmation failed</p>\n <p style={subtextStyle}>{error?.message ?? 'An error occurred'}</p>\n </div>\n )}\n </div>\n )\n}\n\nconst textStyle: CSSProperties = {\n fontSize: '18px',\n fontWeight: 600,\n color: '#111827',\n margin: '0 0 8px 0',\n}\n\nconst subtextStyle: CSSProperties = {\n fontSize: '14px',\n color: '#6b7280',\n margin: 0,\n}\n","import type { CSSProperties } from 'react'\nimport { useSubscription } from '../hooks/use-subscription'\nimport type { UserSubscription } from '../types'\n\nexport interface SubscriptionBadgeProps {\n className?: string\n style?: CSSProperties\n}\n\nconst statusConfig: Record<\n UserSubscription['status'],\n { bg: string; color: string; label: string }\n> = {\n ACTIVE: { bg: '#d1fae5', color: '#065f46', label: 'Active' },\n TRIALING: { bg: '#dbeafe', color: '#1e40af', label: 'Trial' },\n PAST_DUE: { bg: '#fef3c7', color: '#92400e', label: 'Past Due' },\n CANCELED: { bg: '#fee2e2', color: '#991b1b', label: 'Canceled' },\n UNPAID: { bg: '#fee2e2', color: '#991b1b', label: 'Unpaid' },\n INCOMPLETE: { bg: '#f3f4f6', color: '#6b7280', label: 'Incomplete' },\n}\n\nconst styles = {\n badge: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '6px',\n padding: '6px 12px',\n borderRadius: '9999px',\n fontSize: '13px',\n fontWeight: 500,\n fontFamily:\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n } satisfies CSSProperties,\n dot: (color: string): CSSProperties => ({\n width: '6px',\n height: '6px',\n borderRadius: '50%',\n backgroundColor: color,\n flexShrink: 0,\n }),\n skeleton: {\n display: 'inline-block',\n width: '120px',\n height: '32px',\n borderRadius: '9999px',\n backgroundColor: '#f3f4f6',\n } satisfies CSSProperties,\n}\n\nexport function SubscriptionBadge({ className, style }: SubscriptionBadgeProps) {\n const { data: subscription, isLoading } = useSubscription()\n\n if (isLoading) {\n return <span className={className} style={{ ...styles.skeleton, ...style }} />\n }\n\n if (!subscription) {\n return (\n <span\n className={className}\n style={{\n ...styles.badge,\n backgroundColor: '#f3f4f6',\n color: '#6b7280',\n ...style,\n }}\n >\n No Plan\n </span>\n )\n }\n\n const config = statusConfig[subscription.status]\n\n return (\n <span\n className={className}\n style={{\n ...styles.badge,\n backgroundColor: config.bg,\n color: config.color,\n ...style,\n }}\n >\n <span style={styles.dot(config.color)} aria-hidden=\"true\" />\n {subscription.plan.name} · {config.label}\n </span>\n )\n}\n\nSubscriptionBadge.displayName = 'SubscriptionBadge'\n","import { useQuery } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { BillingInvoice } from '../types'\n\nexport function useInvoices() {\n const client = useAccessClient()\n return useQuery({\n queryKey: ['azirid-access', 'billing', 'invoices'],\n queryFn: () => client.get<BillingInvoice[]>(client.paths.invoices),\n enabled: !!client.getAccessToken(),\n })\n}\n","import type { CSSProperties } from 'react'\nimport { formatAmount } from '@azirid/shared'\nimport { useInvoices } from '../hooks/use-invoices'\nimport type { BillingInvoice } from '../types'\n\nexport interface InvoiceListProps {\n className?: string\n style?: CSSProperties\n}\n\nconst statusColors: Record<BillingInvoice['status'], { bg: string; color: string }> = {\n PENDING: { bg: '#fef3c7', color: '#92400e' },\n PAID: { bg: '#d1fae5', color: '#065f46' },\n FAILED: { bg: '#fee2e2', color: '#991b1b' },\n REFUNDED: { bg: '#f3f4f6', color: '#6b7280' },\n}\n\nfunction formatDate(dateStr: string): string {\n try {\n return new Date(dateStr).toLocaleDateString(undefined, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n })\n } catch {\n return dateStr\n }\n}\n\nconst styles = {\n container: {\n border: '1px solid #e5e7eb',\n borderRadius: '12px',\n backgroundColor: '#ffffff',\n overflow: 'hidden',\n fontFamily:\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n } satisfies CSSProperties,\n header: {\n padding: '16px 24px',\n borderBottom: '1px solid #e5e7eb',\n } satisfies CSSProperties,\n title: {\n margin: 0,\n fontSize: '16px',\n fontWeight: 600,\n color: '#111827',\n } satisfies CSSProperties,\n table: {\n width: '100%',\n borderCollapse: 'collapse' as const,\n fontSize: '14px',\n } satisfies CSSProperties,\n th: {\n padding: '12px 24px',\n textAlign: 'left' as const,\n fontSize: '12px',\n fontWeight: 500,\n color: '#6b7280',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n borderBottom: '1px solid #e5e7eb',\n backgroundColor: '#f9fafb',\n } satisfies CSSProperties,\n td: {\n padding: '12px 24px',\n borderBottom: '1px solid #f3f4f6',\n color: '#374151',\n } satisfies CSSProperties,\n badge: (bg: string, color: string): CSSProperties => ({\n display: 'inline-block',\n padding: '2px 8px',\n borderRadius: '9999px',\n fontSize: '12px',\n fontWeight: 500,\n backgroundColor: bg,\n color,\n }),\n link: {\n color: '#6366f1',\n textDecoration: 'none',\n fontWeight: 500,\n fontSize: '13px',\n } satisfies CSSProperties,\n skeleton: {\n backgroundColor: '#f3f4f6',\n borderRadius: '4px',\n height: '14px',\n } satisfies CSSProperties,\n emptyRow: {\n padding: '24px',\n textAlign: 'center' as const,\n color: '#9ca3af',\n fontSize: '14px',\n } satisfies CSSProperties,\n}\n\nexport function InvoiceList({ className, style }: InvoiceListProps) {\n const { data: invoices, isLoading } = useInvoices()\n\n if (isLoading) {\n return (\n <div className={className} style={{ ...styles.container, ...style }}>\n <div style={styles.header}>\n <div style={{ ...styles.skeleton, width: '100px', height: '18px' }} />\n </div>\n <div style={{ padding: '24px' }}>\n {[1, 2, 3].map((i) => (\n <div\n key={i}\n style={{ ...styles.skeleton, width: '100%', height: '16px', marginBottom: '16px' }}\n />\n ))}\n </div>\n </div>\n )\n }\n\n return (\n <div className={className} style={{ ...styles.container, ...style }}>\n <div style={styles.header}>\n <h3 style={styles.title}>Invoices</h3>\n </div>\n\n <table style={styles.table}>\n <thead>\n <tr>\n <th style={styles.th}>Date</th>\n <th style={styles.th}>Amount</th>\n <th style={styles.th}>Status</th>\n <th style={styles.th}>Invoice</th>\n </tr>\n </thead>\n <tbody>\n {(!invoices || invoices.length === 0) && (\n <tr>\n <td colSpan={4} style={styles.emptyRow}>\n No invoices yet.\n </td>\n </tr>\n )}\n {invoices?.map((invoice) => {\n const sc = statusColors[invoice.status]\n return (\n <tr key={invoice.id}>\n <td style={styles.td}>{formatDate(invoice.createdAt)}</td>\n <td style={styles.td}>{formatAmount(invoice.amount, invoice.currency)}</td>\n <td style={styles.td}>\n <span style={styles.badge(sc.bg, sc.color)}>{invoice.status}</span>\n </td>\n <td style={styles.td}>\n {invoice.invoiceUrl ? (\n <a\n href={invoice.invoiceUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={styles.link}\n >\n View\n </a>\n ) : (\n <span style={{ color: '#d1d5db' }}>—</span>\n )}\n </td>\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n )\n}\n\nInvoiceList.displayName = 'InvoiceList'\n","import { useCallback, useMemo } from 'react'\nimport type { UseMutationResult } from '@tanstack/react-query'\nimport { useAzirid } from '../providers/access-provider'\nimport type { AuthSuccessResponse } from '../types'\n\nexport interface LoginData {\n email: string\n password: string\n}\n\nexport interface UseLoginOptions {\n /** Callback after successful login */\n onSuccess?: (response: AuthSuccessResponse) => void\n /** Callback on login error */\n onError?: (error: Error) => void\n}\n\nexport type UseLoginReturn = UseMutationResult<AuthSuccessResponse, Error, LoginData> & {\n /** Convenience: call mutate() with consumer callbacks */\n login: (data: LoginData) => void\n}\n\n/**\n * Hook for login. Uses the **same mutation** as `<LoginForm>` and\n * `useAzirid().login()`, so the provider state (user, tokens, callbacks)\n * is always in sync.\n *\n * @example\n * ```tsx\n * const { login, isPending, error } = useLogin({\n * onSuccess: (res) => router.push(\"/dashboard\"),\n * onError: (err) => toast.error(err.message),\n * });\n *\n * login({ email: \"user@test.com\", password: \"secret\" });\n * ```\n */\nexport function useLogin(options?: UseLoginOptions): UseLoginReturn {\n const { loginMutation } = useAzirid()\n\n const login = useCallback(\n (data: LoginData) => {\n loginMutation.mutate(data, {\n onSuccess: options?.onSuccess,\n onError: options?.onError,\n })\n },\n [loginMutation, options?.onSuccess, options?.onError],\n )\n\n return useMemo(() => Object.assign({}, loginMutation, { login }), [loginMutation, login])\n}\n","import { useCallback, useMemo } from 'react'\nimport type { UseMutationResult } from '@tanstack/react-query'\nimport { useAzirid } from '../providers/access-provider'\nimport type { AuthSuccessResponse, SignupData } from '../types'\n\nexport interface UseSignupOptions {\n /** Callback after successful signup */\n onSuccess?: (response: AuthSuccessResponse) => void\n /** Callback on signup error */\n onError?: (error: Error) => void\n}\n\nexport type UseSignupReturn = UseMutationResult<AuthSuccessResponse, Error, SignupData> & {\n /** Convenience: call mutate() with consumer callbacks */\n signup: (data: SignupData) => void\n}\n\n/**\n * Hook for signup. Uses the **same mutation** as `<SignupForm>` and\n * `useAzirid().signup()`, so the provider state (user, tokens, callbacks)\n * is always in sync.\n *\n * @example\n * ```tsx\n * const { signup, isPending, error } = useSignup({\n * onSuccess: (res) => router.push(\"/welcome\"),\n * });\n *\n * signup({ email: \"new@user.com\", password: \"SecurePass10\" });\n * ```\n */\nexport function useSignup(options?: UseSignupOptions): UseSignupReturn {\n const { signupMutation } = useAzirid()\n\n const signup = useCallback(\n (data: SignupData) => {\n signupMutation.mutate(data, {\n onSuccess: options?.onSuccess,\n onError: options?.onError,\n })\n },\n [signupMutation, options?.onSuccess, options?.onError],\n )\n\n return useMemo(() => Object.assign({}, signupMutation, { signup }), [signupMutation, signup])\n}\n","import { useCallback, useMemo } from 'react'\nimport type { UseMutationResult } from '@tanstack/react-query'\nimport { useAzirid } from '../providers/access-provider'\n\nexport interface UseLogoutOptions {\n /** Callback after successful logout */\n onSuccess?: () => void\n /** Callback on logout error */\n onError?: (error: Error) => void\n}\n\nexport type UseLogoutReturn = UseMutationResult<unknown, Error, void> & {\n /** Convenience: call mutate() with consumer callbacks */\n logout: () => void\n}\n\n/**\n * Hook for logout. Uses the **same mutation** as `useAzirid().logout()`,\n * so the provider state is always in sync.\n *\n * @example\n * ```tsx\n * const { logout, isPending } = useLogout({\n * onSuccess: () => router.push(\"/login\"),\n * });\n *\n * <button onClick={logout}>Cerrar sesión</button>\n * ```\n */\nexport function useLogout(options?: UseLogoutOptions): UseLogoutReturn {\n const { logoutMutation } = useAzirid()\n\n const logout = useCallback(() => {\n logoutMutation.mutate(undefined, {\n onSuccess: options?.onSuccess,\n onError: options?.onError,\n })\n }, [logoutMutation, options?.onSuccess, options?.onError])\n\n return useMemo(() => Object.assign({}, logoutMutation, { logout }), [logoutMutation, logout])\n}\n","import { useQuery, type UseQueryResult } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { AuthUser } from '../types'\n\nexport interface UseSessionOptions {\n /** Enable/disable auto-fetching (default: true) */\n enabled?: boolean\n /** Refetch interval in ms (default: disabled) */\n refetchInterval?: number\n /** Refetch when window gets focus (default: false) */\n refetchOnWindowFocus?: boolean\n}\n\nexport type UseSessionReturn = UseQueryResult<AuthUser, Error> & {\n /** Shorthand: is the user authenticated? */\n isAuthenticated: boolean\n}\n\n/**\n * Standalone hook to fetch the current session (GET /me).\n * Requires `<AziridProvider>`.\n *\n * Useful for:\n * - Checking if the user is still logged in on mount\n * - Getting fresh user data from the server\n * - Bootstrapping auth state on page load\n *\n * @example\n * ```tsx\n * const session = useSession();\n *\n * if (session.isLoading) return <Spinner />;\n * if (!session.isAuthenticated) return <Redirect to=\"/login\" />;\n *\n * return <p>Hola, {session.data?.firstName}</p>;\n * ```\n */\nexport function useSession(options?: UseSessionOptions): UseSessionReturn {\n const client = useAccessClient()\n\n const query = useQuery({\n queryKey: ['azirid-access', 'session'],\n queryFn: () => client.get<AuthUser>(client.paths.me),\n retry: false,\n enabled: options?.enabled ?? true,\n refetchInterval: options?.refetchInterval,\n refetchOnWindowFocus: options?.refetchOnWindowFocus ?? false,\n })\n\n return {\n ...query,\n isAuthenticated: query.isSuccess && query.data !== null,\n }\n}\n","import { useMutation, type UseMutationResult } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { AuthSuccessResponse } from '../types'\n\nexport interface MagicLinkRequestData {\n email: string\n}\n\nexport interface MagicLinkVerifyData {\n token: string\n}\n\nexport interface UseMagicLinkOptions {\n /** Callback after magic link email sent */\n onRequestSuccess?: () => void\n /** Callback after magic link verified (user logged in) */\n onVerifySuccess?: (response: AuthSuccessResponse) => void\n /** Callback on error */\n onError?: (error: Error) => void\n}\n\nexport interface UseMagicLinkReturn {\n /** Request a magic link email */\n request: UseMutationResult<unknown, Error, MagicLinkRequestData>\n /** Verify the magic link token */\n verify: UseMutationResult<AuthSuccessResponse, Error, MagicLinkVerifyData>\n}\n\n/**\n * Standalone hook for magic link auth flow. Requires `<AziridProvider>`.\n *\n * @example\n * ```tsx\n * const magicLink = useMagicLink({\n * onRequestSuccess: () => toast.success(\"Revisa tu correo\"),\n * onVerifySuccess: (res) => router.push(\"/dashboard\"),\n * });\n *\n * // Step 1: request magic link\n * magicLink.request.mutate({ email: \"user@test.com\" });\n *\n * // Step 2: verify token (from URL params)\n * magicLink.verify.mutate({ token: searchParams.get(\"token\")! });\n * ```\n */\nexport function useMagicLink(options?: UseMagicLinkOptions): UseMagicLinkReturn {\n const client = useAccessClient()\n\n const request = useMutation({\n mutationKey: ['azirid-access', 'magic-link', 'request'],\n mutationFn: (data: MagicLinkRequestData) => client.post(client.paths.magicLinkRequest, data),\n onSuccess: () => options?.onRequestSuccess?.(),\n onError: options?.onError,\n })\n\n const verify = useMutation({\n mutationKey: ['azirid-access', 'magic-link', 'verify'],\n mutationFn: (data: MagicLinkVerifyData) =>\n client.post<AuthSuccessResponse>(client.paths.magicLinkVerify, data),\n onSuccess: options?.onVerifySuccess,\n onError: options?.onError,\n })\n\n return { request, verify }\n}\n","import { useMutation, type UseMutationResult } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { AuthSuccessResponse, SocialLoginData } from '../types'\n\nexport interface UseSocialLoginOptions {\n /** Callback after successful social login */\n onSuccess?: (response: AuthSuccessResponse) => void\n /** Callback on error */\n onError?: (error: Error) => void\n}\n\nexport type UseSocialLoginReturn = UseMutationResult<AuthSuccessResponse, Error, SocialLoginData>\n\n/**\n * Standalone hook for social login (Google, GitHub). Requires `<AziridProvider>`.\n *\n * @example\n * ```tsx\n * const socialLogin = useSocialLogin({\n * onSuccess: (res) => router.push(\"/dashboard\"),\n * });\n *\n * socialLogin.mutate({\n * provider: \"google\",\n * providerAccountId: googleUser.id,\n * email: googleUser.email,\n * });\n * ```\n */\nexport function useSocialLogin(options?: UseSocialLoginOptions): UseSocialLoginReturn {\n const client = useAccessClient()\n\n return useMutation({\n mutationKey: ['azirid-access', 'social-login'],\n mutationFn: async (data: SocialLoginData) => {\n const body: Record<string, unknown> = { ...data }\n\n if (client.appContext?.tenantId) {\n body.tenantId = client.appContext.tenantId\n }\n\n return client.post<AuthSuccessResponse>(client.paths.socialLogin, body)\n },\n onSuccess: options?.onSuccess,\n onError: options?.onError,\n })\n}\n","import { useMutation, type UseMutationResult } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { ChangePasswordData } from '../types'\n\nexport interface UseChangePasswordOptions {\n /** Callback after password changed */\n onSuccess?: (response: { updated: boolean }) => void\n /** Callback on error */\n onError?: (error: Error) => void\n}\n\nexport type UseChangePasswordReturn = UseMutationResult<\n { updated: boolean },\n Error,\n ChangePasswordData\n>\n\n/**\n * Standalone hook for changing password. Requires `<AziridProvider>`.\n *\n * @example\n * ```tsx\n * const changePassword = useChangePassword({\n * onSuccess: () => toast.success(\"Contraseña actualizada\"),\n * });\n *\n * changePassword.mutate({\n * currentPassword: \"OldPass123!\",\n * newPassword: \"NewSecure10!\",\n * });\n * ```\n */\nexport function useChangePassword(options?: UseChangePasswordOptions): UseChangePasswordReturn {\n const client = useAccessClient()\n\n return useMutation({\n mutationKey: ['azirid-access', 'change-password'],\n mutationFn: (data: ChangePasswordData) =>\n client.post<{ updated: boolean }>(client.paths.changePassword, data),\n onSuccess: options?.onSuccess,\n onError: options?.onError,\n })\n}\n","import { useMutation, type UseMutationResult } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { AuthSuccessResponse } from '../types'\n\nexport interface UseRefreshOptions {\n /** Callback after tokens refreshed */\n onSuccess?: (response: AuthSuccessResponse) => void\n /** Callback on error (e.g. session expired) */\n onError?: (error: Error) => void\n}\n\nexport type UseRefreshReturn = UseMutationResult<AuthSuccessResponse, Error, void>\n\n/**\n * Standalone hook for manually refreshing the access token.\n * Requires `<AziridProvider>`. Uses the refresh token cookie.\n *\n * Note: The AccessClient automatically handles 401 responses with token refresh.\n * This hook is for cases where you want to proactively refresh.\n *\n * @example\n * ```tsx\n * const refresh = useRefresh({\n * onSuccess: (res) => console.log(\"Token renovado\"),\n * onError: () => router.push(\"/login\"),\n * });\n *\n * refresh.mutate();\n * ```\n */\nexport function useRefresh(options?: UseRefreshOptions): UseRefreshReturn {\n const client = useAccessClient()\n\n return useMutation({\n mutationKey: ['azirid-access', 'refresh'],\n mutationFn: async () => {\n await client.refreshSession()\n // refreshSession already updated internal tokens; return a\n // minimal response so onSuccess callers still get data.\n return { accessToken: client.getAccessToken() } as AuthSuccessResponse\n },\n onSuccess: (data) => {\n options?.onSuccess?.(data)\n },\n onError: options?.onError,\n })\n}\n","import { useQuery, type UseQueryResult } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { BootstrapResponse } from '../types'\n\nexport interface UseBootstrapOptions {\n /** Enable auto-fetching on mount (default: true) */\n enabled?: boolean\n /** Callback after bootstrap succeeds with an authenticated session */\n onAuthenticated?: (response: Extract<BootstrapResponse, { authenticated: true }>) => void\n /** Callback when no valid session exists */\n onUnauthenticated?: () => void\n}\n\nexport type UseBootstrapReturn = UseQueryResult<BootstrapResponse, Error> & {\n /** Whether the bootstrap resolved to an authenticated session */\n isAuthenticated: boolean\n}\n\n/**\n * Standalone hook for silent session bootstrap using refresh token cookie.\n * Requires `<AziridProvider>`. Posts to the bootstrap endpoint on mount.\n *\n * @example\n * ```tsx\n * const bootstrap = useBootstrap({\n * onAuthenticated: (res) => console.log(\"Sesión restaurada:\", res.user.email),\n * onUnauthenticated: () => router.push(\"/login\"),\n * });\n *\n * if (bootstrap.isLoading) return <Spinner />;\n * if (!bootstrap.isAuthenticated) return <LoginPage />;\n * ```\n */\nexport function useBootstrap(options?: UseBootstrapOptions): UseBootstrapReturn {\n const client = useAccessClient()\n\n const query = useQuery({\n queryKey: ['azirid-access', 'bootstrap'],\n queryFn: async () => {\n const response = await client.post<BootstrapResponse>(client.paths.bootstrap)\n\n if (response.authenticated) {\n client.setAccessToken(response.accessToken)\n options?.onAuthenticated?.(response)\n } else {\n options?.onUnauthenticated?.()\n }\n\n return response\n },\n retry: false,\n enabled: options?.enabled ?? true,\n staleTime: Infinity,\n refetchOnWindowFocus: false,\n })\n\n const isAuthenticated =\n query.isSuccess && query.data !== undefined && query.data.authenticated === true\n\n return {\n ...query,\n isAuthenticated,\n }\n}\n","import {\n useMutation,\n useQuery,\n useQueryClient,\n type UseMutationResult,\n type UseQueryResult,\n} from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type {\n AuthSuccessResponse,\n PasskeyItem,\n PasskeyLoginData,\n PasskeyLoginStartData,\n PasskeyLoginStartResponse,\n PasskeyLoginVerifyData,\n PasskeyRegisterStartData,\n PasskeyRegisterStartResponse,\n PasskeyRegisterVerifyData,\n RegisterPasskeyData,\n} from '../types'\n\nexport interface UsePasskeysOptions {\n /** Enable auto-fetching of passkey list (default: false) */\n listEnabled?: boolean\n /** Callback after passkey registered */\n onRegisterSuccess?: () => void\n /** Callback after passkey revoked */\n onRevokeSuccess?: (data: { revoked: boolean; passkeyId: string }) => void\n /** Callback after passkey login */\n onLoginSuccess?: (response: AuthSuccessResponse) => void\n /** Callback on error */\n onError?: (error: Error) => void\n}\n\nexport interface UsePasskeysReturn {\n /** List registered passkeys (authenticated) */\n list: UseQueryResult<PasskeyItem[], Error>\n /** Start passkey registration challenge (authenticated) */\n registerStart: UseMutationResult<PasskeyRegisterStartResponse, Error, PasskeyRegisterStartData>\n /** Verify passkey registration (authenticated) */\n registerVerify: UseMutationResult<{ message: string }, Error, PasskeyRegisterVerifyData>\n /** Register a passkey directly (authenticated) */\n register: UseMutationResult<{ message: string }, Error, RegisterPasskeyData>\n /** Revoke a passkey (authenticated) */\n revoke: UseMutationResult<{ revoked: boolean; passkeyId: string }, Error, string>\n /** Simple passkey login by credentialId (public) */\n login: UseMutationResult<AuthSuccessResponse, Error, PasskeyLoginData>\n /** Start passkey login challenge (public) */\n loginStart: UseMutationResult<PasskeyLoginStartResponse, Error, PasskeyLoginStartData | void>\n /** Verify passkey login (public) */\n loginVerify: UseMutationResult<AuthSuccessResponse, Error, PasskeyLoginVerifyData>\n}\n\n/**\n * Standalone hook for passkey (WebAuthn) management. Requires `<AziridProvider>`.\n *\n * @example\n * ```tsx\n * const passkeys = usePasskeys({\n * listEnabled: true,\n * onLoginSuccess: (res) => router.push(\"/dashboard\"),\n * onRegisterSuccess: () => toast.success(\"Passkey registrada\"),\n * });\n *\n * // List passkeys\n * const { data: passkeyList } = passkeys.list;\n *\n * // Start registration flow\n * const challenge = await passkeys.registerStart.mutateAsync({ deviceName: \"Mi Mac\" });\n * // ... get credential from navigator.credentials.create() ...\n * await passkeys.registerVerify.mutateAsync({ challengeId: challenge.challengeId, credential });\n *\n * // Login with passkey\n * const loginChallenge = await passkeys.loginStart.mutateAsync();\n * // ... get assertion from navigator.credentials.get() ...\n * await passkeys.loginVerify.mutateAsync({ challengeId: loginChallenge.challengeId, credential: assertion });\n * ```\n */\nexport function usePasskeys(options?: UsePasskeysOptions): UsePasskeysReturn {\n const client = useAccessClient()\n const queryClient = useQueryClient()\n\n const list = useQuery({\n queryKey: ['azirid-access', 'passkeys'],\n queryFn: () => client.get<PasskeyItem[]>(client.paths.passkeys),\n enabled: options?.listEnabled ?? false,\n })\n\n const registerStart = useMutation({\n mutationKey: ['azirid-access', 'passkeys', 'register-start'],\n mutationFn: (data: PasskeyRegisterStartData) =>\n client.post<PasskeyRegisterStartResponse>(client.paths.passkeyRegisterStart, data),\n onError: options?.onError,\n })\n\n const registerVerify = useMutation({\n mutationKey: ['azirid-access', 'passkeys', 'register-verify'],\n mutationFn: (data: PasskeyRegisterVerifyData) =>\n client.post<{ message: string }>(client.paths.passkeyRegisterVerify, data),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['azirid-access', 'passkeys'] })\n options?.onRegisterSuccess?.()\n },\n onError: options?.onError,\n })\n\n const register = useMutation({\n mutationKey: ['azirid-access', 'passkeys', 'register'],\n mutationFn: (data: RegisterPasskeyData) =>\n client.post<{ message: string }>(client.paths.passkeys, data),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['azirid-access', 'passkeys'] })\n options?.onRegisterSuccess?.()\n },\n onError: options?.onError,\n })\n\n const revoke = useMutation({\n mutationKey: ['azirid-access', 'passkeys', 'revoke'],\n mutationFn: (passkeyId: string) =>\n client.post<{ revoked: boolean; passkeyId: string }>(\n `${client.paths.passkeys}/${passkeyId}/revoke`,\n ),\n onSuccess: (data) => {\n queryClient.invalidateQueries({ queryKey: ['azirid-access', 'passkeys'] })\n options?.onRevokeSuccess?.(data)\n },\n onError: options?.onError,\n })\n\n const login = useMutation({\n mutationKey: ['azirid-access', 'passkeys', 'login'],\n mutationFn: async (data: PasskeyLoginData) => {\n const body: Record<string, unknown> = { ...data }\n\n if (client.appContext?.tenantId) {\n body.tenantId = client.appContext.tenantId\n }\n\n return client.post<AuthSuccessResponse>(client.paths.passkeyLogin, body)\n },\n onSuccess: options?.onLoginSuccess,\n onError: options?.onError,\n })\n\n const loginStart = useMutation({\n mutationKey: ['azirid-access', 'passkeys', 'login-start'],\n mutationFn: async (data?: PasskeyLoginStartData | void) => {\n const body: Record<string, unknown> = {}\n\n if (client.appContext?.tenantId) {\n body.tenantId = client.appContext.tenantId\n }\n\n if (data) {\n Object.assign(body, data)\n }\n\n return client.post<PasskeyLoginStartResponse>(client.paths.passkeyLoginStart, body)\n },\n onError: options?.onError,\n })\n\n const loginVerify = useMutation({\n mutationKey: ['azirid-access', 'passkeys', 'login-verify'],\n mutationFn: async (data: PasskeyLoginVerifyData) => {\n const body: Record<string, unknown> = { ...data }\n\n if (client.appContext?.tenantId) {\n body.tenantId = client.appContext.tenantId\n }\n\n return client.post<AuthSuccessResponse>(client.paths.passkeyLoginVerify, body)\n },\n onSuccess: options?.onLoginSuccess,\n onError: options?.onError,\n })\n\n return {\n list,\n registerStart,\n registerVerify,\n register,\n revoke,\n login,\n loginStart,\n loginVerify,\n }\n}\n","import { useCallback, useMemo } from 'react'\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { SubmitTransferProofData, TransferProof } from '../types'\n\nexport interface UseTransferProofOptions {\n onSuccess?: (data: TransferProof) => void\n onError?: (error: Error) => void\n}\n\nexport function useSubmitTransferProof(options?: UseTransferProofOptions) {\n const client = useAccessClient()\n const queryClient = useQueryClient()\n\n const mutation = useMutation({\n mutationFn: (data: SubmitTransferProofData) =>\n client.post<TransferProof>(client.paths.submitTransferProof, data),\n onSuccess: (data) => {\n void queryClient.invalidateQueries({ queryKey: ['transferProofs'] })\n options?.onSuccess?.(data)\n },\n onError: options?.onError,\n })\n\n const submit = useCallback(\n (data: SubmitTransferProofData) => {\n mutation.mutate(data)\n },\n [mutation],\n )\n\n return useMemo(() => ({ ...mutation, submit }), [mutation, submit])\n}\n\nexport function useTransferProofs() {\n const client = useAccessClient()\n\n return useQuery({\n queryKey: ['transferProofs'],\n queryFn: () => client.get<TransferProof[]>(client.paths.transferProofs),\n })\n}\n","import type { ReactElement } from 'react'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { useCheckout } from './use-checkout'\nimport { usePayphoneConfirm } from './use-payphone-confirm'\nimport type { PayphoneConfirmResult } from './use-payphone-confirm'\nimport { PayphoneWidgetRenderer } from '../components/payphone-checkout'\nimport { useAzirid } from '../providers/access-provider'\nimport type { PayphoneWidgetConfig } from '../types'\n\nexport type PayphoneCheckoutStatus =\n | 'idle'\n | 'loading'\n | 'ready'\n | 'confirming'\n | 'confirmed'\n | 'cancelled'\n | 'error'\n\nexport interface UsePayphoneCheckoutOptions {\n intentId: string\n onSuccess?: (data: PayphoneConfirmResult) => void\n onError?: (error: Error) => void\n}\n\nexport interface UsePayphoneCheckoutReturn {\n PayphoneWidget: () => ReactElement | null\n status: PayphoneCheckoutStatus\n intentId: string\n error: Error | null\n}\n\nconst CONTAINER_ID = 'pp-checkout-azirid'\n\nexport function usePayphoneCheckout({\n intentId,\n onSuccess,\n onError,\n}: UsePayphoneCheckoutOptions): UsePayphoneCheckoutReturn {\n const [status, setStatus] = useState<PayphoneCheckoutStatus>('idle')\n const [widgetConfig, setWidgetConfig] = useState<PayphoneWidgetConfig | null>(null)\n const [currentError, setCurrentError] = useState<Error | null>(null)\n const checkoutTriggered = useRef(false)\n const confirmTriggered = useRef(false)\n const { isBootstrapping } = useAzirid()\n\n // Detect callback params from Payphone redirect\n const params =\n typeof window !== 'undefined'\n ? new URLSearchParams(window.location.search)\n : new URLSearchParams()\n const callbackId = params.get('id')\n const callbackClientTxId = params.get('clientTransactionId')\n const isCallback = !!(callbackId && callbackClientTxId)\n\n // ── Checkout (Phase 1) ─────────────────────────────────────\n const { checkout } = useCheckout({\n redirectOnSuccess: false,\n onSuccess: (data) => {\n if (data.provider === 'PAYPHONE' && data.widgetConfig) {\n setWidgetConfig(data.widgetConfig)\n setStatus('ready')\n }\n },\n onError: (err) => {\n setCurrentError(err)\n setStatus('error')\n onError?.(err)\n },\n })\n\n useEffect(() => {\n if (isCallback || checkoutTriggered.current) return\n checkoutTriggered.current = true\n setStatus('loading')\n\n checkout({\n intentId,\n provider: 'PAYPHONE',\n successUrl: window.location.href,\n cancelUrl: window.location.href,\n })\n }, [checkout, intentId, isCallback])\n\n // ── Confirmation (Phase 2) ─────────────────────────────────\n const { mutate: confirm } = usePayphoneConfirm({\n onSuccess: (data) => {\n setStatus(data.status === 'confirmed' || data.status === 'already_confirmed'\n ? 'confirmed'\n : 'cancelled')\n onSuccess?.(data)\n },\n onError: (err) => {\n setCurrentError(err)\n setStatus('error')\n onError?.(err)\n },\n })\n\n useEffect(() => {\n if (!isCallback || confirmTriggered.current || isBootstrapping) return\n confirmTriggered.current = true\n setStatus('confirming')\n confirm({ id: Number(callbackId), clientTransactionId: callbackClientTxId! })\n }, [isCallback, isBootstrapping, callbackId, callbackClientTxId, confirm])\n\n // ── Widget component ───────────────────────────────────────\n const handleSdkError = useCallback(\n (err: Error) => {\n setCurrentError(err)\n setStatus('error')\n onError?.(err)\n },\n [onError],\n )\n\n const PayphoneWidget = useMemo(() => {\n return function PayphoneWidgetInner() {\n if (!widgetConfig || isCallback) return null\n\n return PayphoneWidgetRenderer({\n config: widgetConfig,\n containerId: CONTAINER_ID,\n onError: handleSdkError,\n })\n }\n }, [widgetConfig, isCallback, handleSdkError])\n\n return { PayphoneWidget, status, intentId, error: currentError }\n}\n","import type { ReactElement } from 'react'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { useCheckout } from './use-checkout'\nimport { useSubmitTransferProof } from './use-transfer-proof'\nimport { formatAmount } from '@azirid/shared'\nimport type { CheckoutResponse, TransferProof } from '../types'\n\n// ─── Types ───────────────────────────────────────────────────\n\nexport type TransferPaymentStatus =\n | 'idle'\n | 'loading'\n | 'ready'\n | 'submitting'\n | 'submitted'\n | 'error'\n\nexport interface SubmitProofData {\n fileUrl: string\n fileName?: string\n fileType?: string\n amount: number\n currency?: string\n notes?: string\n}\n\nexport interface UseTransferPaymentOptions {\n intentId: string\n onSuccess?: (data: CheckoutResponse) => void\n onProofSubmitted?: (proof: TransferProof) => void\n onError?: (error: Error) => void\n}\n\nexport interface UseTransferPaymentReturn {\n TransferDetails: () => ReactElement | null\n submitProof: (data: SubmitProofData) => void\n status: TransferPaymentStatus\n checkoutData: CheckoutResponse | null\n isSubmitting: boolean\n error: Error | null\n}\n\n// ─── Hook ───────────────────────────────────────────────────\n\nexport function useTransferPayment({\n intentId,\n onSuccess,\n onProofSubmitted,\n onError,\n}: UseTransferPaymentOptions): UseTransferPaymentReturn {\n const [status, setStatus] = useState<TransferPaymentStatus>('idle')\n const [checkoutData, setCheckoutData] = useState<CheckoutResponse | null>(null)\n const [currentError, setCurrentError] = useState<Error | null>(null)\n const checkoutTriggered = useRef(false)\n\n const responseUrl =\n typeof window !== 'undefined' ? window.location.href.split('?')[0] : ''\n\n // ── Checkout ───────────────────────────────────────────────\n const { checkout } = useCheckout({\n redirectOnSuccess: false,\n onSuccess: (data) => {\n setCheckoutData(data)\n setStatus('ready')\n onSuccess?.(data)\n },\n onError: (err) => {\n setCurrentError(err)\n setStatus('error')\n onError?.(err)\n },\n })\n\n useEffect(() => {\n if (checkoutTriggered.current) return\n checkoutTriggered.current = true\n setStatus('loading')\n\n checkout({\n intentId,\n provider: 'MANUAL_TRANSFER',\n successUrl: responseUrl,\n cancelUrl: responseUrl,\n })\n }, [checkout, intentId, responseUrl])\n\n // ── Submit proof ───────────────────────────────────────────\n const { submit, isPending: isSubmitting } = useSubmitTransferProof({\n onSuccess: (proof) => {\n setStatus('submitted')\n onProofSubmitted?.(proof)\n },\n onError: (err) => {\n setCurrentError(err)\n setStatus('error')\n onError?.(err)\n },\n })\n\n const submitProof = useCallback(\n (data: SubmitProofData) => {\n if (!checkoutData?.intent) return\n setStatus('submitting')\n setCurrentError(null)\n submit({\n planId: checkoutData.intent.id,\n fileUrl: data.fileUrl,\n fileName: data.fileName,\n fileType: data.fileType,\n amount: data.amount,\n currency: data.currency,\n notes: data.notes,\n })\n },\n [submit, checkoutData],\n )\n\n // ── TransferDetails component ──────────────────────────────\n const TransferDetails = useMemo(() => {\n return function TransferDetailsInner(): ReactElement | null {\n if (!checkoutData) return null\n\n const bankDetails = checkoutData.bankDetails as Record<string, string> | null\n const plan = checkoutData.plan\n const intent = checkoutData.intent as\n | { id: string; amount: number; currency: string; description?: string | null }\n | undefined\n\n const displayAmount = plan\n ? formatAmount(plan.amount, plan.currency)\n : intent\n ? formatAmount(intent.amount, intent.currency)\n : ''\n\n return (\n <div>\n {displayAmount && (\n <div\n style={{\n textAlign: 'center',\n padding: '16px',\n backgroundColor: '#f9fafb',\n borderRadius: '8px',\n marginBottom: '20px',\n }}\n >\n <div style={{ fontSize: '32px', fontWeight: 700, color: '#111827' }}>\n {displayAmount}\n </div>\n {plan?.name && (\n <div style={{ fontSize: '14px', color: '#6b7280' }}>{plan.name}</div>\n )}\n {intent?.description && (\n <div style={{ fontSize: '14px', color: '#6b7280' }}>{intent.description}</div>\n )}\n </div>\n )}\n\n {bankDetails && Object.keys(bankDetails).length > 0 && (\n <div style={{ marginBottom: '16px' }}>\n <div\n style={{\n fontSize: '14px',\n fontWeight: 600,\n color: '#111827',\n marginBottom: '8px',\n }}\n >\n Bank Details\n </div>\n {Object.entries(bankDetails)\n .filter(([, v]) => v)\n .map(([key, value]) => (\n <div\n key={key}\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n padding: '6px 0',\n borderBottom: '1px solid #f3f4f6',\n fontSize: '13px',\n }}\n >\n <span style={{ color: '#6b7280' }}>\n {key.replace(/([A-Z])/g, ' $1').replace(/^./, (s) => s.toUpperCase())}\n </span>\n <span style={{ color: '#111827', fontWeight: 500 }}>{value}</span>\n </div>\n ))}\n </div>\n )}\n\n {checkoutData.transferInstructions && (\n <div\n style={{\n padding: '12px',\n backgroundColor: '#eff6ff',\n borderRadius: '6px',\n fontSize: '13px',\n color: '#1e40af',\n lineHeight: 1.5,\n }}\n >\n {checkoutData.transferInstructions}\n </div>\n )}\n </div>\n )\n }\n }, [checkoutData])\n\n return {\n TransferDetails,\n submitProof,\n status,\n checkoutData,\n isSubmitting,\n error: currentError,\n }\n}\n","import { useQueryClient, useQuery } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { TenantWithRole, TenantMemberInfo } from '../types'\n\nexport function useTenants() {\n const client = useAccessClient()\n\n return useQuery({\n queryKey: ['azirid-access', 'tenants'],\n queryFn: () => client.get<TenantWithRole[]>(client.paths.userTenants),\n enabled: !!client.getAccessToken(),\n })\n}\n\nexport function useTenantMembers(tenantId: string) {\n const client = useAccessClient()\n\n return useQuery({\n queryKey: ['azirid-access', 'tenants', tenantId, 'members'],\n queryFn: () =>\n client.get<TenantMemberInfo[]>(`${client.paths.userTenants}/${tenantId}/members`),\n enabled: !!client.getAccessToken() && !!tenantId,\n })\n}\n\nexport function useSwitchTenant() {\n const client = useAccessClient()\n const queryClient = useQueryClient()\n\n const switchTenant = async (tenantId: string) => {\n await client.refreshSession({ tenantId })\n await queryClient.invalidateQueries({ queryKey: ['azirid-access'] })\n }\n\n return { switchTenant }\n}\n","import { useMutation, type UseMutationResult } from '@tanstack/react-query'\nimport { useAccessClient } from '../providers/access-provider'\nimport type { AccessClient } from '../client'\n\n/**\n * Options common to all simple mutation hooks created via `createMutationHook`.\n */\nexport interface SimpleMutationOptions<TData> {\n onSuccess?: (data: TData) => void\n onError?: (error: Error) => void\n}\n\n/**\n * Configuration for `createMutationHook`.\n *\n * @template TData The response type from the API\n * @template TInput The input/variables type for the mutation\n */\nexport interface MutationHookConfig<TData, TInput> {\n /** Static mutation key for deduplication / devtools */\n mutationKey: string[]\n /**\n * Derive the mutation function from the AccessClient and input.\n * Most hooks simply call `client.post<TData>(client.paths.someEndpoint, data)`.\n */\n mutationFn: (client: AccessClient, input: TInput) => Promise<TData>\n}\n\n/**\n * Factory that creates a simple `useMutation`-based hook.\n *\n * Eliminates the boilerplate of:\n * 1. Calling `useAccessClient()`\n * 2. Creating a `useMutation` with `mutationKey`, `mutationFn`, `onSuccess`, `onError`\n *\n * The resulting hook has the same return type as `useMutation` (`UseMutationResult`),\n * preserving full compatibility with TanStack Query.\n *\n * @example\n * ```ts\n * export const useChangePassword = createMutationHook<\n * { updated: boolean },\n * ChangePasswordData\n * >({\n * mutationKey: ['azirid-access', 'change-password'],\n * mutationFn: (client, data) =>\n * client.post<{ updated: boolean }>(client.paths.changePassword, data),\n * })\n * ```\n */\nexport function createMutationHook<TData, TInput = void>(\n config: MutationHookConfig<TData, TInput>,\n): (options?: SimpleMutationOptions<TData>) => UseMutationResult<TData, Error, TInput> {\n return function useGeneratedMutation(\n options?: SimpleMutationOptions<TData>,\n ): UseMutationResult<TData, Error, TInput> {\n const client = useAccessClient()\n\n return useMutation({\n mutationKey: config.mutationKey,\n mutationFn: (input: TInput) => config.mutationFn(client, input),\n onSuccess: options?.onSuccess,\n onError: options?.onError,\n })\n }\n}\n","import { useCallback, useRef, useState, type FormEvent } from 'react'\nimport type { z } from 'zod'\nimport type { FieldError, UseFormReturn } from '../types'\n\n/** Convert Zod issues to our FieldError format */\nfunction zodToFieldErrors(zodError: z.ZodError): FieldError[] {\n return zodError.issues.map((issue) => ({\n field: issue.path.join('.'),\n message: issue.message,\n }))\n}\n\nexport function useFormState<T extends Record<string, unknown>>(\n initialValues: T,\n schema: z.ZodType<unknown, z.ZodTypeDef, unknown>,\n onSubmit: (values: T) => void | Promise<void>,\n): UseFormReturn<T> {\n const [values, setValues] = useState<T>(initialValues)\n const [errors, setErrors] = useState<FieldError[]>([])\n const [isSubmitting, setIsSubmitting] = useState(false)\n const mountedRef = useRef(true)\n\n const handleChange = useCallback(\n (field: keyof T) => (e: React.ChangeEvent<HTMLInputElement>) => {\n const next = { ...values, [field]: e.target.value } as T\n setValues(next)\n setErrors((prev) => prev.filter((err) => err.field !== field))\n },\n [values],\n )\n\n const setFieldValue = useCallback((field: keyof T, value: string) => {\n setValues((prev) => ({ ...prev, [field]: value }) as T)\n setErrors((prev) => prev.filter((err) => err.field !== field))\n }, [])\n\n const handleSubmit = useCallback(\n async (e: FormEvent) => {\n e.preventDefault()\n const result = schema.safeParse(values)\n if (!result.success) {\n setErrors(zodToFieldErrors(result.error))\n return\n }\n setIsSubmitting(true)\n try {\n await onSubmit(values)\n } finally {\n if (mountedRef.current) {\n setIsSubmitting(false)\n }\n }\n },\n [values, schema, onSubmit],\n )\n\n const reset = useCallback(() => {\n setValues(initialValues)\n setErrors([])\n setIsSubmitting(false)\n }, [initialValues])\n\n return { values, errors, isSubmitting, handleChange, handleSubmit, setFieldValue, reset }\n}\n","import { useCallback, useState } from 'react'\n\nexport function usePasswordToggle() {\n const [visible, setVisible] = useState(false)\n const toggle = useCallback(() => setVisible((v) => !v), [])\n return { visible, toggle, type: visible ? ('text' as const) : ('password' as const) }\n}\n","// ─── Components ──────────────────────────────────────────────\nexport { LoginForm } from './components/login-form'\nexport { SignupForm } from './components/signup-form'\nexport { ForgotPasswordForm } from './components/forgot-password-form'\nexport { ResetPasswordForm } from './components/reset-password-form'\nexport { AuthForm } from './components/auth-form'\nexport { ReferralCard } from './components/referral-card'\nexport { ReferralStats } from './components/referral-stats'\nexport { PricingTable } from './components/pricing-table'\nexport { CheckoutButton } from './components/checkout-button'\nexport { PayButton } from './components/pay-button'\nexport { PayphoneCallback } from './components/payphone-callback'\nexport { PayphoneWidgetRenderer } from './components/payphone-checkout'\nexport { SubscriptionBadge } from './components/subscription-badge'\nexport { InvoiceList } from './components/invoice-list'\n\n// ─── Provider & Context Hook ────────────────────────────────\nexport {\n AziridProvider,\n useAzirid,\n useAccessClient,\n useBranding,\n useMessages,\n} from './providers/access-provider'\nexport { resolveMessages, es, en } from './i18n'\n\n// ─── Standalone Auth Hooks ──────────────────────────────────\n// These hooks can be used to build custom UI without the built-in components.\n// They require <AziridProvider> for the client context.\nexport { useLogin } from './hooks/use-login'\nexport { useSignup } from './hooks/use-signup'\nexport { useLogout } from './hooks/use-logout'\nexport { useSession } from './hooks/use-session'\nexport { useMagicLink } from './hooks/use-magic-link'\nexport { useSocialLogin } from './hooks/use-social-login'\nexport { useChangePassword } from './hooks/use-change-password'\nexport { useRefresh } from './hooks/use-refresh'\nexport { useBootstrap } from './hooks/use-bootstrap'\nexport { usePasskeys } from './hooks/use-passkeys'\nexport { useReferral } from './hooks/use-referral'\nexport { useReferralStats } from './hooks/use-referral-stats'\nexport { usePlans } from './hooks/use-plans'\nexport { useSubscription } from './hooks/use-subscription'\nexport { useCheckout } from './hooks/use-checkout'\nexport { useInvoices } from './hooks/use-invoices'\nexport { useSubmitTransferProof, useTransferProofs } from './hooks/use-transfer-proof'\nexport { usePaymentProviders } from './hooks/use-payment-providers'\nexport { usePayphoneConfirm } from './hooks/use-payphone-confirm'\nexport { usePayphoneCheckout } from './hooks/use-payphone-checkout'\nexport { usePayButton } from './hooks/use-pay-button'\nexport { useTransferPayment } from './hooks/use-transfer-payment'\nexport { useTenants, useTenantMembers, useSwitchTenant } from './hooks/use-tenants'\nexport { usePasswordReset } from './hooks/use-password-reset'\n\n// ─── Mutation Hook Factory ───────────────────────────────────\nexport { createMutationHook } from './hooks/create-mutation-hook'\n\n// ─── Form Utility Hooks ─────────────────────────────────────\nexport { useFormState } from './hooks/use-form-state'\nexport { usePasswordToggle } from './hooks/use-password-toggle'\n\n// ─── Zod Schemas ─────────────────────────────────────────────\nexport {\n loginSchema,\n signupSchema,\n changePasswordSchema,\n magicLinkRequestSchema,\n magicLinkVerifySchema,\n socialLoginSchema,\n passkeyRegisterStartSchema,\n createLoginSchema,\n createSignupSchema,\n forgotPasswordSchema,\n createForgotPasswordSchema,\n resetPasswordConfirmSchema,\n createResetPasswordConfirmSchema,\n} from './schemas'\n\n// ─── Client ──────────────────────────────────────────────────\nexport { createAccessClient, isAuthError, PATHS, BASE_PATHS, buildPaths } from './client'\n\n// ─── Utilities ───────────────────────────────────────────────\nexport { cn } from './utils/cn'\nexport { removeStyles } from './utils/inject-styles'\n\n// ─── Version ─────────────────────────────────────────────────\ndeclare const __SDK_VERSION__: string\nexport const SDK_VERSION: string = __SDK_VERSION__\n\n// ─── Types ───────────────────────────────────────────────────\nexport type {\n AuthUser,\n AuthSuccessResponse,\n AuthState,\n SignupData,\n SocialLoginData,\n ChangePasswordData,\n BootstrapResponse,\n PasskeyItem,\n PasskeyRegisterStartData,\n PasskeyRegisterStartResponse,\n PasskeyRegisterVerifyData,\n PasskeyLoginStartData,\n PasskeyLoginStartResponse,\n PasskeyLoginVerifyData,\n PasskeyLoginData,\n RegisterPasskeyData,\n AziridProviderProps,\n AziridContextValue,\n LoginFormProps,\n SignupFormProps,\n ForgotPasswordFormProps,\n ResetPasswordFormProps,\n AuthView,\n AuthFormProps,\n FieldError,\n UseFormReturn,\n AppBranding,\n SupportedLocale,\n AccessMessages,\n ReferralInfo,\n ReferralStatsData,\n ReferralItem,\n BillingPlan,\n UserSubscription,\n CheckoutResponse,\n BillingInvoice,\n SubmitTransferProofData,\n TransferProof,\n PaymentProviderType,\n AvailableProvider,\n PaymentIntent,\n PayphoneWidgetConfig,\n TenantWithRole,\n TenantMemberInfo,\n CreateTenantData,\n} from './types'\n\nexport type {\n LoginInput,\n SignupInput,\n ChangePasswordInput,\n MagicLinkRequestInput,\n MagicLinkVerifyInput,\n SocialLoginInput,\n PasskeyRegisterStartInput,\n ForgotPasswordInput,\n ResetPasswordConfirmInput,\n} from './schemas'\n\nexport type { AccessClient, AccessClientConfig, ApiError, AuthPaths } from './client'\n\n// ─── Standalone Hook Types ──────────────────────────────────\nexport type { LoginData, UseLoginOptions, UseLoginReturn } from './hooks/use-login'\nexport type { UseSignupOptions, UseSignupReturn } from './hooks/use-signup'\nexport type { UseLogoutOptions, UseLogoutReturn } from './hooks/use-logout'\nexport type { UseSessionOptions, UseSessionReturn } from './hooks/use-session'\nexport type {\n MagicLinkRequestData,\n MagicLinkVerifyData,\n UseMagicLinkOptions,\n UseMagicLinkReturn,\n} from './hooks/use-magic-link'\nexport type { UseSocialLoginOptions, UseSocialLoginReturn } from './hooks/use-social-login'\nexport type { UseChangePasswordOptions, UseChangePasswordReturn } from './hooks/use-change-password'\nexport type { UseRefreshOptions, UseRefreshReturn } from './hooks/use-refresh'\nexport type { UseBootstrapOptions, UseBootstrapReturn } from './hooks/use-bootstrap'\nexport type { UsePasskeysOptions, UsePasskeysReturn } from './hooks/use-passkeys'\nexport type { CheckoutParams, UseCheckoutOptions } from './hooks/use-checkout'\nexport type {\n PayphoneConfirmParams,\n PayphoneConfirmResult,\n UsePayphoneConfirmOptions,\n} from './hooks/use-payphone-confirm'\nexport type {\n PasswordResetRequestData,\n PasswordResetConfirmData,\n UsePasswordResetOptions,\n UsePasswordResetReturn,\n} from './hooks/use-password-reset'\nexport type { SimpleMutationOptions, MutationHookConfig } from './hooks/create-mutation-hook'\nexport type { PricingCardProps } from './components/pricing-card'\nexport type { PricingFeatureListProps } from './components/pricing-feature-list'\nexport type { ProviderModalProps, TransferModalProps } from './components/pay-button-modal'\nexport type { ReferralCardProps } from './components/referral-card'\nexport type { ReferralStatsProps } from './components/referral-stats'\nexport type { PricingTableProps } from './components/pricing-table'\nexport type { CheckoutButtonProps } from './components/checkout-button'\nexport type { PayButtonProps } from './components/pay-button'\nexport type { SubscriptionBadgeProps } from './components/subscription-badge'\nexport type { InvoiceListProps } from './components/invoice-list'\nexport type { PayphoneModalProps } from './components/payphone-modal'\nexport type { PayphoneCallbackProps } from './components/payphone-callback'\nexport type {\n UsePayphoneCheckoutOptions,\n UsePayphoneCheckoutReturn,\n PayphoneCheckoutStatus,\n} from './hooks/use-payphone-checkout'\nexport type {\n UsePayButtonOptions,\n UsePayButtonReturn,\n PayButtonStatus,\n} from './hooks/use-pay-button'\nexport type {\n UseTransferPaymentOptions,\n UseTransferPaymentReturn,\n TransferPaymentStatus,\n SubmitProofData,\n} from './hooks/use-transfer-payment'\n\n// ─── Server Types (re-exported for convenience) ─────────────\nexport type { SessionSyncOptions } from './server'\n"]}
|