@volr/react-ui 0.1.84 → 0.1.86

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/i18n/locales/en.ts","../src/i18n/locales/ko.ts","../src/i18n/index.ts","../src/i18n/context.tsx","../src/hooks/useVolrModal.tsx","../src/lib/utils.ts","../src/hooks/useMediaQuery.ts","../src/generated/volr-sdk-css.ts","../src/components/core/ShadowContainer.tsx","../src/hooks/useFocusTrap.ts","../src/components/materials/modal/Modal.tsx","../src/components/materials/icons/ErrorIcon.tsx","../src/components/materials/icons/CloseIcon.tsx","../src/components/materials/icons/BackIcon.tsx","../src/components/materials/icons/EmailIcon.tsx","../src/components/materials/modal/ModalHeader.tsx","../src/components/features/passkey/utils/biometric.ts","../src/components/features/passkey/components/WalletConnectedView.tsx","../src/components/features/passkey/icons/FaceIdIcon.tsx","../src/components/features/passkey/icons/TouchIdIcon.tsx","../src/components/features/passkey/icons/FingerprintIcon.tsx","../src/components/features/passkey/components/BiometricIcon.tsx","../src/components/materials/Button.tsx","../src/components/features/passkey/components/PasskeyEnrollForm.tsx","../src/components/features/passkey/components/PasskeyEnrollLoading.tsx","../src/components/features/passkey/PasskeyEnrollView.tsx","../src/components/features/MpcConnectView.tsx","../src/components/materials/CopyButton.tsx","../src/components/features/signin/components/OptionButton.tsx","../src/components/features/signin/components/icons/GoogleIcon.tsx","../src/components/features/signin/components/icons/TwitterXIcon.tsx","../src/components/features/signin/components/icons/AppleIcon.tsx","../src/components/features/signin/components/SocialOption.tsx","../src/components/features/signin/components/icons/WalletIcon.tsx","../src/components/features/signin/components/WalletOption.tsx","../src/components/materials/PoweredBy.tsx","../src/components/features/signin/components/EmailInlineInput.tsx","../src/components/features/signin/components/Divider.tsx","../src/components/features/signin/components/BrandingPanel.tsx","../src/components/features/signin/SigninSelectScreen.tsx","../src/components/features/signin/CodeInputScreen.tsx","../src/components/features/signin/SiweLoginScreen.tsx","../src/components/features/signin/SigninModal.tsx","../src/components/features/account/AccountModal.tsx","../src/components/features/deposit/views/AssetSelectView.tsx","../src/components/materials/TextLinkButton.tsx","../src/components/features/deposit/views/OtherTokenModal.tsx","../src/components/features/deposit/components/DepositQRStatusOverlay.tsx","../src/components/features/deposit/components/DepositCompletedToast.tsx","../src/components/features/deposit/components/DepositSkeleton.tsx","../src/components/features/deposit/views/DepositQRView.tsx","../src/components/features/deposit/DepositModal.tsx","../src/providers/VolrUIProvider.tsx","../src/utils/network.ts"],"names":["createContext","useContext","translations","useState","useMemo","value","jsx","useCallback","extendTailwindMerge","clsx","useEffect","useRef","createPortal","isMobile","useId","jsxs","React","Fragment","useVolrContext","useInternalAuth","usePasskeyEnrollment","useMpcConnection","useVolrLogin","handleLogout","useDepositListener","createGetNetworkInfo","VolrProvider","useVolrAuthCallback"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * English translations\n */\n\nexport const en = {\n common: {\n back: 'Back',\n loading: 'Loading...',\n cancel: 'Cancel',\n },\n login: {\n title: 'Sign in',\n description: 'Choose your preferred sign-in method',\n or: 'or',\n poweredBy: 'Powered by Volr',\n terms: 'By continuing, you agree to our Terms of Service and Privacy Policy',\n email: {\n title: 'Sign in with email',\n description: 'Enter your email to receive a verification code',\n label: 'Email Login',\n emailLabel: 'Email address',\n placeholder: 'Enter Email',\n sendCode: 'Send verification code',\n codeLabel: '6-digit verification code',\n verifyTitle: 'Enter verification code',\n verifyDescription: 'We sent a code to {{email}}',\n resend: 'Resend code',\n submit: 'Verify',\n },\n social: {\n google: 'Sign in with Google',\n twitter: 'Sign in with Twitter',\n apple: 'Sign in with Apple',\n },\n wallet: {\n title: 'Sign in with wallet',\n signDescription: 'Sign the message to verify your wallet',\n connected: 'Connected',\n connect: 'Connect wallet',\n sign: 'Sign message',\n label: 'Wallet Login',\n },\n },\n siwe: {\n noWalletFound: 'No Ethereum wallet found. Please install MetaMask or another wallet.',\n mobileGuide: 'To connect your wallet:',\n mobileStep1: 'Copy the sign URL below',\n mobileStep2: 'Open your wallet app (MetaMask, etc.)',\n mobileStep3: 'Paste URL in the app browser and sign',\n copyUrl: 'Copy Sign URL',\n urlCopied: 'URL copied! Paste it in your wallet app browser.',\n startMobileSession: 'Connect Wallet',\n waitingForSignature: 'Waiting for signature...',\n sessionExpired: 'Session expired. Please try again.',\n },\n passkey: {\n // Dynamic titles based on biometric type\n titleTouchId: 'Set up Touch ID login',\n titleFaceId: 'Set up Face ID login',\n titleFingerprint: 'Set up fingerprint login',\n // Short description\n description: 'Sign in instantly, every time.',\n // Legacy keys for backward compatibility\n touchId: 'Use Touch ID to create your passkey',\n faceId: 'Use Face ID to create your passkey',\n fingerprint: 'Use your fingerprint to create your passkey',\n biometric: 'Use biometric authentication to create your passkey',\n creating: 'Creating secure login...',\n encrypting: 'Encrypting your wallet...',\n uploading: 'Uploading encrypted data...',\n registering: 'Registering wallet...',\n start: 'Enable',\n logout: 'Logout',\n errors: {\n cancelled: 'Setup was cancelled. Please try again.',\n alreadyExists: 'Biometric login is already set up.',\n notSupported: 'Your device doesn\\'t support biometric login.',\n generic: 'Setup failed. Please try again.',\n },\n },\n success: {\n title: 'Success!',\n message: \"You're all set. Redirecting...\",\n },\n account: {\n title: 'My Account',\n walletAddress: 'Wallet Address',\n email: 'Email',\n logout: 'Log out',\n },\n deposit: {\n selectTitle: 'Select asset to deposit',\n qrTitle: 'Deposit',\n scanInstruction: 'Scan QR code to deposit',\n yourAddress: 'Your deposit address',\n copy: 'Copy address',\n copied: 'Copied!',\n listening: 'Waiting for deposit...',\n detected: 'Deposit confirmed!',\n completed: 'Deposit Complete',\n completedAmount: '{{amount}} {{symbol}} deposited',\n amount: 'Amount',\n previousBalance: 'Previous balance',\n newBalance: 'New balance',\n seeMore: 'View details',\n seeLess: 'Hide details',\n noAssets: 'No deposit assets configured.',\n otherToken: 'Deposit with another token',\n noToken: \"Don't have this token?\",\n getOtherToken: 'Deposit with another token',\n },\n errors: {\n webauthnNotSupported: 'WebAuthn API is not supported',\n passkeyCreationFailed: 'Failed to create passkey',\n passkeyCreationError: 'An error occurred while creating passkey',\n emailLoginFailed: 'Email login failed',\n socialLoginFailed: 'Social login failed',\n walletConnectionFailed: 'Wallet connection failed',\n passkeySetupFailed: 'Passkey setup failed',\n },\n} as const;\n\n","/**\n * Korean translations\n */\n\nexport const ko = {\n common: {\n back: '뒤로',\n loading: '로딩 중...',\n cancel: '취소',\n },\n login: {\n title: '로그인',\n description: '로그인 방식을 선택하세요',\n or: '또는',\n poweredBy: 'Powered by Volr',\n terms: '계속 진행하면 서비스 약관 및 개인정보 보호정책에 동의하는 것입니다',\n email: {\n title: '이메일로 로그인',\n description: '인증 코드를 받을 이메일 주소를 입력하세요',\n label: '이메일 로그인',\n emailLabel: '이메일 주소',\n placeholder: '이메일 입력',\n sendCode: '인증코드 전송',\n codeLabel: '6자리 인증코드',\n verifyTitle: '인증코드 입력',\n verifyDescription: '{{email}}로 코드를 전송했습니다',\n resend: '코드 재전송',\n submit: '확인',\n },\n social: {\n google: '구글로 로그인',\n twitter: '트위터로 로그인',\n apple: '애플로 로그인',\n },\n wallet: {\n title: '지갑으로 로그인',\n signDescription: '메시지에 서명하여 지갑을 인증하세요',\n connected: '연결됨',\n connect: '지갑 연결',\n sign: '메시지 서명',\n label: '지갑 로그인',\n },\n },\n siwe: {\n noWalletFound: '이더리움 지갑을 찾을 수 없습니다. MetaMask 또는 다른 지갑을 설치해주세요.',\n mobileGuide: '지갑 연결 방법:',\n mobileStep1: '아래 서명 URL 복사',\n mobileStep2: '지갑 앱 열기 (MetaMask 등)',\n mobileStep3: '앱 브라우저에 URL 붙여넣고 서명',\n copyUrl: '서명 URL 복사',\n urlCopied: 'URL이 복사되었습니다! 지갑 앱 브라우저에 붙여넣기 하세요.',\n startMobileSession: '지갑 연결',\n waitingForSignature: '서명 대기 중...',\n sessionExpired: '세션이 만료되었습니다. 다시 시도해주세요.',\n },\n passkey: {\n // Dynamic titles based on biometric type\n titleTouchId: 'Touch ID 로그인 설정',\n titleFaceId: 'Face ID 로그인 설정',\n titleFingerprint: '지문 로그인 설정',\n // Short description\n description: '한 번 등록하면, 다음부터 바로 로그인',\n // Legacy keys for backward compatibility\n touchId: 'Touch ID를 사용하여 패스키를 생성하세요',\n faceId: 'Face ID를 사용하여 패스키를 생성하세요',\n fingerprint: '지문을 사용하여 패스키를 생성하세요',\n biometric: '생체 인증을 사용하여 패스키를 생성하세요',\n creating: '로그인 설정 중...',\n encrypting: '지갑 암호화 중...',\n uploading: '데이터 업로드 중...',\n registering: '지갑 등록 중...',\n start: '설정하기',\n logout: '로그아웃',\n errors: {\n cancelled: '설정이 취소되었습니다. 다시 시도해주세요.',\n alreadyExists: '이미 생체 로그인이 설정되어 있습니다.',\n notSupported: '이 기기는 생체 로그인을 지원하지 않습니다.',\n generic: '설정에 실패했습니다. 다시 시도해주세요.',\n },\n },\n success: {\n title: '완료!',\n message: '모든 설정이 완료되었습니다. 리다이렉트 중...',\n },\n account: {\n title: '내 계정',\n walletAddress: '지갑 주소',\n email: '이메일',\n logout: '로그아웃',\n },\n deposit: {\n selectTitle: '충전할 자산을 선택하세요',\n qrTitle: '입금하기',\n scanInstruction: 'QR 코드를 스캔하여 입금하세요',\n yourAddress: '입금 주소',\n copy: '주소 복사',\n copied: '복사되었습니다!',\n listening: '입금을 기다리는 중...',\n detected: '입금이 확인되었습니다!',\n completed: '입금 완료',\n completedAmount: '{{amount}} {{symbol}} 입금 확인되었습니다.',\n amount: '입금 금액',\n previousBalance: '이전 잔액',\n newBalance: '새 잔액',\n seeMore: '자세히 보기',\n seeLess: '간단히 보기',\n noAssets: '설정된 충전 자산이 없습니다.',\n otherToken: '다른 토큰으로 충전하기',\n noToken: '이 토큰이 없으신가요?',\n getOtherToken: '다른 토큰으로 입금하기',\n },\n errors: {\n webauthnNotSupported: 'WebAuthn API가 지원되지 않습니다.',\n passkeyCreationFailed: '패스키 생성에 실패했습니다.',\n passkeyCreationError: '패스키 생성 중 문제가 발생했습니다.',\n emailLoginFailed: '이메일 로그인에 실패했습니다.',\n socialLoginFailed: '소셜 로그인에 실패했습니다.',\n walletConnectionFailed: '지갑 연결에 실패했습니다.',\n passkeySetupFailed: '패스키 설정에 실패했습니다.',\n },\n} as const;\n\n","/**\n * i18n types and utilities\n */\n\nimport { en } from './locales/en';\nimport { ko } from './locales/ko';\n\nexport type Locale = 'en' | 'ko';\n\n// Helper type to convert literal types to string\ntype DeepStringify<T> = T extends string\n ? string\n : T extends object\n ? { readonly [K in keyof T]: DeepStringify<T[K]> }\n : T;\n\n// Infer type structure from en locale (source of truth)\nexport type Translations = DeepStringify<typeof en>;\n\n// Type-safe translations object - ko must have same structure as en\nconst translations: Record<Locale, Translations> = {\n en,\n ko,\n};\n\n/**\n * Get translations for a specific locale\n */\nexport function getTranslations(locale: Locale = 'en'): Translations {\n return translations[locale] || translations.en;\n}\n\n/**\n * Type-safe translation key path\n */\nexport type TranslationKey = keyof Translations | `${keyof Translations}.${string}`;\n\n/**\n * Get nested translation value by key path\n */\nexport function t(\n locale: Locale,\n key: string,\n defaultValue?: string\n): string {\n const translations = getTranslations(locale);\n const keys = key.split('.');\n \n let value: any = translations;\n for (const k of keys) {\n if (value && typeof value === 'object' && k in value) {\n value = value[k as keyof typeof value];\n } else {\n return defaultValue || key;\n }\n }\n \n return typeof value === 'string' ? value : defaultValue || key;\n}\n\n","/**\n * i18n React Context\n */\n\nimport React, { createContext, useContext, useMemo, useState } from 'react';\nimport type { Locale, Translations } from './index';\nimport { getTranslations } from './index';\n\nexport interface I18nContextValue {\n locale: Locale;\n translations: Translations;\n t: (key: string, params?: Record<string, string>) => string;\n setLocale: (locale: Locale) => void;\n}\n\nexport const I18nContext = createContext<I18nContextValue | null>(null);\n\n/**\n * Hook to access i18n context\n */\n/**\n * Replace {{key}} placeholders with values from params\n */\nfunction interpolate(text: string, params?: Record<string, string>): string {\n if (!params) return text;\n return text.replace(/\\{\\{(\\w+)\\}\\}/g, (_, key) => params[key] ?? `{{${key}}}`);\n}\n\nexport function useI18n(): I18nContextValue {\n const context = useContext(I18nContext);\n if (!context) {\n // Fallback to English if context is not available\n return {\n locale: 'en',\n translations: getTranslations('en'),\n t: (key: string, params?: Record<string, string>) => {\n const translations = getTranslations('en');\n const keys = key.split('.');\n let value: any = translations;\n for (const k of keys) {\n if (value && typeof value === 'object' && k in value) {\n value = value[k as keyof typeof value];\n } else {\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.warn(`[i18n] Missing key: ${key} (locale: en)`);\n }\n return key;\n }\n }\n return typeof value === 'string' ? interpolate(value, params) : key;\n },\n setLocale: () => {},\n };\n }\n return context;\n}\n\n/**\n * I18n Provider component\n */\nexport interface I18nProviderProps {\n children: React.ReactNode;\n}\n\nfunction detectLocale(): Locale {\n if (typeof window === 'undefined' || !window.navigator?.language) {\n return 'en';\n }\n const lang = window.navigator.language.toLowerCase();\n return lang.startsWith('ko') ? 'ko' : 'en';\n}\n\nexport function I18nProvider({ children }: I18nProviderProps) {\n const [locale, setLocale] = useState<Locale>(detectLocale());\n const translations = useMemo(() => getTranslations(locale), [locale]);\n \n const t = useMemo(() => {\n return (key: string, params?: Record<string, string>): string => {\n const keys = key.split('.');\n let value: any = translations;\n for (const k of keys) {\n if (value && typeof value === 'object' && k in value) {\n value = value[k as keyof typeof value];\n } else {\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.warn(`[i18n] Missing key: ${key} (locale: ${locale})`);\n }\n return key;\n }\n }\n return typeof value === 'string' ? interpolate(value, params) : key;\n };\n }, [translations]);\n\n const value = useMemo<I18nContextValue>(\n () => ({\n locale,\n translations,\n t,\n setLocale,\n }),\n [locale, translations, t, setLocale]\n );\n\n return <I18nContext.Provider value={value}>{children}</I18nContext.Provider>;\n}\n\n// For familiarity with common i18n hooks\nexport const useTranslation = useI18n;\n\n","import React, { createContext, useContext, useState, useCallback } from \"react\";\n\nexport type ModalMode = \"account\" | \"deposit\";\n\nexport interface ModalAsset {\n chainId: number;\n symbol: string;\n}\n\nexport interface OpenModalOptions {\n mode?: ModalMode;\n asset?: ModalAsset;\n}\n\ninterface VolrModalContextValue {\n isOpen: boolean;\n mode: ModalMode;\n asset: ModalAsset | null;\n open: (options?: OpenModalOptions) => void;\n close: () => void;\n}\n\nconst VolrModalContext = createContext<VolrModalContextValue | null>(null);\n\nexport const useVolrModal = (): VolrModalContextValue => {\n const context = useContext(VolrModalContext);\n if (!context) {\n throw new Error(\"useVolrModal must be used within VolrUIProvider\");\n }\n return context;\n};\n\nexport const VolrModalProvider: React.FC<{ children: React.ReactNode }> = ({\n children,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [mode, setMode] = useState<ModalMode>(\"account\");\n const [asset, setAsset] = useState<ModalAsset | null>(null);\n\n const open = useCallback((options?: OpenModalOptions) => {\n setMode(options?.mode ?? \"account\");\n setAsset(options?.asset ?? null);\n setIsOpen(true);\n }, []);\n\n const close = useCallback(() => {\n setIsOpen(false);\n setAsset(null);\n }, []);\n\n return (\n <VolrModalContext.Provider value={{ isOpen, mode, asset, open, close }}>\n {children}\n </VolrModalContext.Provider>\n );\n};\n","import { clsx, type ClassValue } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\n/**\n * Volr SDK용 tailwind-merge 설정\n * \n * 문제: 기본 tailwind-merge는 'volr:' prefix를 인식하지 못해\n * class 충돌 해결이 제대로 되지 않음\n * \n * 해결: prefix를 설정하여 'volr:' prefix가 붙은 클래스들을 올바르게 처리\n */\nconst twMerge = extendTailwindMerge({\n prefix: \"volr:\",\n});\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n\n\n\n","import { useEffect, useState } from 'react';\n\nexport function useMediaQuery(query: string): boolean {\n const [matches, setMatches] = useState(() => {\n if (typeof window === 'undefined') return false;\n return window.matchMedia(query).matches;\n });\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n const mql = window.matchMedia(query);\n const handler = (event: MediaQueryListEvent) => setMatches(event.matches);\n mql.addEventListener('change', handler);\n setMatches(mql.matches);\n return () => mql.removeEventListener('change', handler);\n }, [query]);\n\n return matches;\n}\n\n","// This file is auto-generated. Do not edit manually.\nexport const VOLR_SDK_CSS = \"/*! tailwindcss v4.1.17 | 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)))){*,:before,:after,::backdrop{--volr-tw-translate-x:0;--volr-tw-translate-y:0;--volr-tw-translate-z:0;--volr-tw-space-y-reverse:0;--volr-tw-border-style:solid;--volr-tw-gradient-position:initial;--volr-tw-gradient-from:#0000;--volr-tw-gradient-via:#0000;--volr-tw-gradient-to:#0000;--volr-tw-gradient-stops:initial;--volr-tw-gradient-via-stops:initial;--volr-tw-gradient-from-position:0%;--volr-tw-gradient-via-position:50%;--volr-tw-gradient-to-position:100%;--volr-tw-leading:initial;--volr-tw-font-weight:initial;--volr-tw-shadow:0 0 #0000;--volr-tw-shadow-color:initial;--volr-tw-shadow-alpha:100%;--volr-tw-inset-shadow:0 0 #0000;--volr-tw-inset-shadow-color:initial;--volr-tw-inset-shadow-alpha:100%;--volr-tw-ring-color:initial;--volr-tw-ring-shadow:0 0 #0000;--volr-tw-inset-ring-color:initial;--volr-tw-inset-ring-shadow:0 0 #0000;--volr-tw-ring-inset:initial;--volr-tw-ring-offset-width:0px;--volr-tw-ring-offset-color:#fff;--volr-tw-ring-offset-shadow:0 0 #0000;--volr-tw-blur:initial;--volr-tw-brightness:initial;--volr-tw-contrast:initial;--volr-tw-grayscale:initial;--volr-tw-hue-rotate:initial;--volr-tw-invert:initial;--volr-tw-opacity:initial;--volr-tw-saturate:initial;--volr-tw-sepia:initial;--volr-tw-drop-shadow:initial;--volr-tw-drop-shadow-color:initial;--volr-tw-drop-shadow-alpha:100%;--volr-tw-drop-shadow-size:initial;--volr-tw-duration:initial;--volr-tw-ease:initial}}}@layer theme{:root,:host{--volr-font-sans:ui-sans-serif,system-ui,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",\\\"Segoe UI Symbol\\\",\\\"Noto Color Emoji\\\";--volr-font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\\\"Liberation Mono\\\",\\\"Courier New\\\",monospace;--volr-color-red-50:oklch(97.1% .013 17.38);--volr-color-red-200:oklch(88.5% .062 18.334);--volr-color-red-700:oklch(50.5% .213 27.518);--volr-color-green-600:oklch(62.7% .194 149.214);--volr-color-emerald-300:oklch(84.5% .143 164.978);--volr-color-emerald-400:oklch(76.5% .177 163.223);--volr-color-emerald-500:oklch(69.6% .17 162.48);--volr-color-emerald-600:oklch(59.6% .145 163.225);--volr-color-teal-400:oklch(77.7% .152 181.912);--volr-color-teal-500:oklch(70.4% .14 182.503);--volr-color-cyan-400:oklch(78.9% .154 211.53);--volr-color-slate-50:oklch(98.4% .003 247.858);--volr-color-slate-300:oklch(86.9% .022 252.894);--volr-color-slate-500:oklch(55.4% .046 257.417);--volr-color-slate-600:oklch(44.6% .043 257.281);--volr-color-gray-500:oklch(55.1% .027 264.364);--volr-color-black:#000;--volr-color-white:#fff;--volr-spacing:.25rem;--volr-container-md:28rem;--volr-container-4xl:56rem;--volr-text-xs:.75rem;--volr-text-xs--line-height:calc(1/.75);--volr-text-sm:.875rem;--volr-text-sm--line-height:calc(1.25/.875);--volr-text-base:1rem;--volr-text-base--line-height:calc(1.5/1);--volr-text-lg:1.125rem;--volr-text-lg--line-height:calc(1.75/1.125);--volr-text-xl:1.25rem;--volr-text-xl--line-height:calc(1.75/1.25);--volr-text-2xl:1.5rem;--volr-text-2xl--line-height:calc(2/1.5);--volr-text-8xl:6rem;--volr-text-8xl--line-height:1;--volr-font-weight-medium:500;--volr-font-weight-semibold:600;--volr-font-weight-bold:700;--volr-leading-relaxed:1.625;--volr-radius-md:.375rem;--volr-radius-lg:.5rem;--volr-radius-xl:.75rem;--volr-radius-2xl:1rem;--volr-radius-3xl:1.5rem;--volr-ease-out:cubic-bezier(0,0,.2,1);--volr-animate-spin:spin 1s linear infinite;--volr-animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--volr-blur-2xl:40px;--volr-default-transition-duration:.15s;--volr-default-transition-timing-function:cubic-bezier(.4,0,.2,1);--volr-default-font-family:var(--volr-font-sans);--volr-default-mono-font-family:var(--volr-font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--volr-default-font-family,ui-sans-serif,system-ui,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",\\\"Segoe UI Symbol\\\",\\\"Noto Color Emoji\\\");font-feature-settings:var(--volr-default-font-feature-settings,normal);font-variation-settings:var(--volr-default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--volr-default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\\\"Liberation Mono\\\",\\\"Courier New\\\",monospace);font-feature-settings:var(--volr-default-mono-font-feature-settings,normal);font-variation-settings:var(--volr-default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:host{--volr-primary-color:var(--volr-accent-color,#303030);--volr-font-family:var(--volr-custom-font,inherit);--volr-bg:#fff;--volr-bg-secondary:#f8fafc;--volr-bg-tertiary:#f1f5f9;--volr-text:#0f172a;--volr-text-secondary:#475569;--volr-text-muted:#94a3b8;--volr-border:#e2e8f0;--volr-border-strong:#cbd5e1;--volr-hover-bg:#f8fafc;--volr-error-bg:#fef2f2;--volr-error-border:#fecaca;--volr-error-text:#991b1b}:host([data-theme=dark]){--volr-bg:#1c1c1e;--volr-bg-secondary:#2c2c2e;--volr-bg-tertiary:#3a3a3c;--volr-text:#f5f5f7;--volr-text-secondary:#c7c7cc;--volr-text-muted:#8e8e93;--volr-border:#3a3a3c;--volr-border-strong:#48484a;--volr-hover-bg:#2c2c2e;--volr-error-bg:#3c1f1f;--volr-error-border:#7f1d1d;--volr-error-text:#fca5a5}*,:before,:after{box-sizing:border-box}*{font-family:var(--volr-font-family);color:var(--volr-text)}button,input,select,textarea{color:var(--volr-text);background-color:#0000}button{cursor:pointer;background-color:#0000}input::placeholder{color:var(--volr-text-muted)}h1,h2,h3{color:var(--volr-text);margin:0;font-weight:700}h1{font-size:1.875rem;line-height:2.25rem}h2{font-size:1.5rem;line-height:2rem}h3{font-size:1.25rem;line-height:1.75rem}p{margin:0}}@layer components{.volr-dialog-overlay{inset:calc(var(--volr-spacing)*0);z-index:40;background-color:var(--volr-color-black);position:fixed}@supports (color:color-mix(in lab, red, red)){.volr-dialog-overlay{background-color:color-mix(in oklab,var(--volr-color-black)45%,transparent)}}.volr-dialog-content{z-index:50;border-radius:var(--volr-radius-2xl);border-style:var(--volr-tw-border-style);padding:calc(var(--volr-spacing)*7);--volr-tw-shadow:0 20px 25px -5px var(--volr-tw-shadow-color,#0000001a),0 8px 10px -6px var(--volr-tw-shadow-color,#0000001a);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow);background-color:var(--volr-bg);border-width:1px;border-color:var(--volr-border-strong);width:calc(100% - 2rem);max-width:28rem;max-height:85vh;position:fixed;top:50%;left:50%;overflow-y:auto;transform:translate(-50%,-50%)}@media (max-width:640px){.volr-dialog-content{top:auto;right:calc(var(--volr-spacing)*0);bottom:calc(var(--volr-spacing)*0);left:calc(var(--volr-spacing)*0);border-radius:1.25rem 1.25rem 0 0;width:100%;max-width:100%;margin:0 auto;transform:translateY(0)}}.volr-dialog-close{top:calc(var(--volr-spacing)*4);right:calc(var(--volr-spacing)*4);height:calc(var(--volr-spacing)*8);width:calc(var(--volr-spacing)*8);color:var(--volr-text-muted);cursor:pointer;background-color:#0000;border:none;border-radius:3.40282e38px;justify-content:center;align-items:center;display:inline-flex;position:absolute}.volr-dialog-close:hover{background-color:var(--volr-hover-bg);color:var(--volr-text-secondary)}.volr-dialog-close:focus-visible{box-shadow:0 0 0 2px var(--volr-border-strong);outline:none}.volr-dialog-close-icon{height:calc(var(--volr-spacing)*4);width:calc(var(--volr-spacing)*4)}.volr-email-input{border:1px solid var(--volr-border-strong);background-color:var(--volr-bg);width:100%;color:var(--volr-text);border-radius:.5rem;outline:none;padding:.75rem .75rem .75rem 2.75rem;font-size:1rem;line-height:1.5}.volr-email-input::placeholder{color:var(--volr-text-muted)}.volr-email-input:focus{border-color:var(--volr-border-strong);box-shadow:0 0 0 2px var(--volr-border-strong)}.volr-option-button{border:1px solid var(--volr-border);background-color:var(--volr-bg);width:100%;color:var(--volr-text);cursor:pointer;border-radius:.5rem;align-items:center;gap:.75rem;padding:.75rem;transition:background-color .15s ease-out,border-color .15s ease-out,box-shadow .15s ease-out;display:flex}.volr-option-button:hover{background-color:var(--volr-hover-bg);border-color:var(--volr-border)}.volr-option-button:focus-visible{box-shadow:0 0 0 2px var(--volr-border-strong);outline:none}}@layer utilities{.volr\\\\:pointer-events-auto{pointer-events:auto}.volr\\\\:pointer-events-none{pointer-events:none}.volr\\\\:sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.volr\\\\:absolute{position:absolute}.volr\\\\:fixed{position:fixed}.volr\\\\:relative{position:relative}.volr\\\\:inset-0{inset:calc(var(--volr-spacing)*0)}.volr\\\\:-top-3{top:calc(var(--volr-spacing)*-3)}.volr\\\\:top-1\\\\/2{top:50%}.volr\\\\:-right-3{right:calc(var(--volr-spacing)*-3)}.volr\\\\:-right-4{right:calc(var(--volr-spacing)*-4)}.volr\\\\:right-2{right:calc(var(--volr-spacing)*2)}.volr\\\\:bottom-0{bottom:calc(var(--volr-spacing)*0)}.volr\\\\:-left-4{left:calc(var(--volr-spacing)*-4)}.volr\\\\:left-3{left:calc(var(--volr-spacing)*3)}.volr\\\\:-z-10{z-index:calc(10*-1)}.volr\\\\:z-10{z-index:10}.volr\\\\:z-20{z-index:20}.volr\\\\:z-40{z-index:40}.volr\\\\:z-50{z-index:50}.volr\\\\:mx-auto{margin-inline:auto}.volr\\\\:my-6{margin-block:calc(var(--volr-spacing)*6)}.volr\\\\:mt-0\\\\.5{margin-top:calc(var(--volr-spacing)*.5)}.volr\\\\:mt-1{margin-top:calc(var(--volr-spacing)*1)}.volr\\\\:mt-2{margin-top:calc(var(--volr-spacing)*2)}.volr\\\\:mt-3{margin-top:calc(var(--volr-spacing)*3)}.volr\\\\:mt-4{margin-top:calc(var(--volr-spacing)*4)}.volr\\\\:mt-6{margin-top:calc(var(--volr-spacing)*6)}.volr\\\\:mt-8{margin-top:calc(var(--volr-spacing)*8)}.volr\\\\:mb-1{margin-bottom:calc(var(--volr-spacing)*1)}.volr\\\\:mb-2{margin-bottom:calc(var(--volr-spacing)*2)}.volr\\\\:mb-3{margin-bottom:calc(var(--volr-spacing)*3)}.volr\\\\:mb-4{margin-bottom:calc(var(--volr-spacing)*4)}.volr\\\\:mb-5{margin-bottom:calc(var(--volr-spacing)*5)}.volr\\\\:mb-6{margin-bottom:calc(var(--volr-spacing)*6)}.volr\\\\:mb-8{margin-bottom:calc(var(--volr-spacing)*8)}.volr\\\\:-ml-2{margin-left:calc(var(--volr-spacing)*-2)}.volr\\\\:flex{display:flex}.volr\\\\:grid{display:grid}.volr\\\\:inline-block{display:inline-block}.volr\\\\:inline-flex{display:inline-flex}.volr\\\\:h-1{height:calc(var(--volr-spacing)*1)}.volr\\\\:h-1\\\\.5{height:calc(var(--volr-spacing)*1.5)}.volr\\\\:h-2{height:calc(var(--volr-spacing)*2)}.volr\\\\:h-3{height:calc(var(--volr-spacing)*3)}.volr\\\\:h-4{height:calc(var(--volr-spacing)*4)}.volr\\\\:h-6{height:calc(var(--volr-spacing)*6)}.volr\\\\:h-7{height:calc(var(--volr-spacing)*7)}.volr\\\\:h-8{height:calc(var(--volr-spacing)*8)}.volr\\\\:h-10{height:calc(var(--volr-spacing)*10)}.volr\\\\:h-14{height:calc(var(--volr-spacing)*14)}.volr\\\\:h-24{height:calc(var(--volr-spacing)*24)}.volr\\\\:h-40{height:calc(var(--volr-spacing)*40)}.volr\\\\:h-44{height:calc(var(--volr-spacing)*44)}.volr\\\\:h-48{height:calc(var(--volr-spacing)*48)}.volr\\\\:h-\\\\[0\\\\.8em\\\\]{height:.8em}.volr\\\\:h-\\\\[200px\\\\]{height:200px}.volr\\\\:h-full{height:100%}.volr\\\\:h-px{height:1px}.volr\\\\:max-h-36{max-height:calc(var(--volr-spacing)*36)}.volr\\\\:max-h-96{max-height:calc(var(--volr-spacing)*96)}.volr\\\\:max-h-\\\\[85vh\\\\]{max-height:85vh}.volr\\\\:max-h-\\\\[90vh\\\\]{max-height:90vh}.volr\\\\:min-h-\\\\[120px\\\\]{min-height:120px}.volr\\\\:min-h-\\\\[500px\\\\]{min-height:500px}.volr\\\\:w-1\\\\.5{width:calc(var(--volr-spacing)*1.5)}.volr\\\\:w-2{width:calc(var(--volr-spacing)*2)}.volr\\\\:w-6{width:calc(var(--volr-spacing)*6)}.volr\\\\:w-8{width:calc(var(--volr-spacing)*8)}.volr\\\\:w-10{width:calc(var(--volr-spacing)*10)}.volr\\\\:w-12{width:calc(var(--volr-spacing)*12)}.volr\\\\:w-24{width:calc(var(--volr-spacing)*24)}.volr\\\\:w-32{width:calc(var(--volr-spacing)*32)}.volr\\\\:w-36{width:calc(var(--volr-spacing)*36)}.volr\\\\:w-40{width:calc(var(--volr-spacing)*40)}.volr\\\\:w-44{width:calc(var(--volr-spacing)*44)}.volr\\\\:w-48{width:calc(var(--volr-spacing)*48)}.volr\\\\:w-\\\\[200px\\\\]{width:200px}.volr\\\\:w-auto{width:auto}.volr\\\\:w-full{width:100%}.volr\\\\:max-w-4xl{max-width:var(--volr-container-4xl)}.volr\\\\:max-w-full{max-width:100%}.volr\\\\:max-w-md{max-width:var(--volr-container-md)}.volr\\\\:max-w-none{max-width:none}.volr\\\\:min-w-0{min-width:calc(var(--volr-spacing)*0)}.volr\\\\:flex-1{flex:1}.volr\\\\:shrink-0{flex-shrink:0}.volr\\\\:-translate-y-1\\\\/2{--volr-tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--volr-tw-translate-x)var(--volr-tw-translate-y)}.volr\\\\:animate-\\\\[volrFadeIn_0\\\\.2s_ease-out\\\\]{animation:.2s ease-out volrFadeIn}.volr\\\\:animate-pulse{animation:var(--volr-animate-pulse)}.volr\\\\:animate-spin{animation:var(--volr-animate-spin)}.volr\\\\:list-inside{list-style-position:inside}.volr\\\\:list-decimal{list-style-type:decimal}.volr\\\\:grid-cols-\\\\[minmax\\\\(0\\\\,1\\\\.1fr\\\\)_minmax\\\\(0\\\\,1fr\\\\)\\\\]{grid-template-columns:minmax(0,1.1fr) minmax(0,1fr)}.volr\\\\:flex-col{flex-direction:column}.volr\\\\:items-baseline{align-items:baseline}.volr\\\\:items-center{align-items:center}.volr\\\\:items-end{align-items:flex-end}.volr\\\\:items-start{align-items:flex-start}.volr\\\\:justify-between{justify-content:space-between}.volr\\\\:justify-center{justify-content:center}.volr\\\\:gap-1{gap:calc(var(--volr-spacing)*1)}.volr\\\\:gap-2{gap:calc(var(--volr-spacing)*2)}.volr\\\\:gap-3{gap:calc(var(--volr-spacing)*3)}.volr\\\\:gap-4{gap:calc(var(--volr-spacing)*4)}:where(.volr\\\\:space-y-1>:not(:last-child)){--volr-tw-space-y-reverse:0;margin-block-start:calc(calc(var(--volr-spacing)*1)*var(--volr-tw-space-y-reverse));margin-block-end:calc(calc(var(--volr-spacing)*1)*calc(1 - var(--volr-tw-space-y-reverse)))}:where(.volr\\\\:space-y-2>:not(:last-child)){--volr-tw-space-y-reverse:0;margin-block-start:calc(calc(var(--volr-spacing)*2)*var(--volr-tw-space-y-reverse));margin-block-end:calc(calc(var(--volr-spacing)*2)*calc(1 - var(--volr-tw-space-y-reverse)))}:where(.volr\\\\:space-y-3>:not(:last-child)){--volr-tw-space-y-reverse:0;margin-block-start:calc(calc(var(--volr-spacing)*3)*var(--volr-tw-space-y-reverse));margin-block-end:calc(calc(var(--volr-spacing)*3)*calc(1 - var(--volr-tw-space-y-reverse)))}:where(.volr\\\\:space-y-4>:not(:last-child)){--volr-tw-space-y-reverse:0;margin-block-start:calc(calc(var(--volr-spacing)*4)*var(--volr-tw-space-y-reverse));margin-block-end:calc(calc(var(--volr-spacing)*4)*calc(1 - var(--volr-tw-space-y-reverse)))}.volr\\\\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.volr\\\\:overflow-hidden{overflow:hidden}.volr\\\\:overflow-visible{overflow:visible}.volr\\\\:overflow-y-auto{overflow-y:auto}.volr\\\\:rounded{border-radius:.25rem}.volr\\\\:rounded-2xl{border-radius:var(--volr-radius-2xl)}.volr\\\\:rounded-full{border-radius:3.40282e38px}.volr\\\\:rounded-lg{border-radius:var(--volr-radius-lg)}.volr\\\\:rounded-md{border-radius:var(--volr-radius-md)}.volr\\\\:rounded-xl{border-radius:var(--volr-radius-xl)}.volr\\\\:rounded-t-2xl{border-top-left-radius:var(--volr-radius-2xl);border-top-right-radius:var(--volr-radius-2xl)}.volr\\\\:rounded-t-3xl{border-top-left-radius:var(--volr-radius-3xl);border-top-right-radius:var(--volr-radius-3xl)}.volr\\\\:border{border-style:var(--volr-tw-border-style);border-width:1px}.volr\\\\:border-2{border-style:var(--volr-tw-border-style);border-width:2px}.volr\\\\:border-4{border-style:var(--volr-tw-border-style);border-width:4px}.volr\\\\:border-t{border-top-style:var(--volr-tw-border-style);border-top-width:1px}.volr\\\\:border-t-2{border-top-style:var(--volr-tw-border-style);border-top-width:2px}.volr\\\\:border-red-200{border-color:var(--volr-color-red-200)}.volr\\\\:border-slate-300{border-color:var(--volr-color-slate-300)}.volr\\\\:border-white{border-color:var(--volr-color-white)}.volr\\\\:border-t-slate-600{border-top-color:var(--volr-color-slate-600)}.volr\\\\:bg-black\\\\/45{background-color:var(--volr-color-black)}@supports (color:color-mix(in lab, red, red)){.volr\\\\:bg-black\\\\/45{background-color:color-mix(in oklab,var(--volr-color-black)45%,transparent)}}.volr\\\\:bg-cyan-400{background-color:var(--volr-color-cyan-400)}.volr\\\\:bg-emerald-300{background-color:var(--volr-color-emerald-300)}.volr\\\\:bg-emerald-400{background-color:var(--volr-color-emerald-400)}.volr\\\\:bg-red-50{background-color:var(--volr-color-red-50)}.volr\\\\:bg-slate-50{background-color:var(--volr-color-slate-50)}.volr\\\\:bg-teal-400{background-color:var(--volr-color-teal-400)}.volr\\\\:bg-white{background-color:var(--volr-color-white)}.volr\\\\:bg-gradient-to-br{--volr-tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--volr-tw-gradient-stops))}.volr\\\\:from-emerald-400{--volr-tw-gradient-from:var(--volr-color-emerald-400);--volr-tw-gradient-stops:var(--volr-tw-gradient-via-stops,var(--volr-tw-gradient-position),var(--volr-tw-gradient-from)var(--volr-tw-gradient-from-position),var(--volr-tw-gradient-to)var(--volr-tw-gradient-to-position))}.volr\\\\:from-emerald-500{--volr-tw-gradient-from:var(--volr-color-emerald-500);--volr-tw-gradient-stops:var(--volr-tw-gradient-via-stops,var(--volr-tw-gradient-position),var(--volr-tw-gradient-from)var(--volr-tw-gradient-from-position),var(--volr-tw-gradient-to)var(--volr-tw-gradient-to-position))}.volr\\\\:to-teal-500{--volr-tw-gradient-to:var(--volr-color-teal-500);--volr-tw-gradient-stops:var(--volr-tw-gradient-via-stops,var(--volr-tw-gradient-position),var(--volr-tw-gradient-from)var(--volr-tw-gradient-from-position),var(--volr-tw-gradient-to)var(--volr-tw-gradient-to-position))}.volr\\\\:p-1{padding:calc(var(--volr-spacing)*1)}.volr\\\\:p-2{padding:calc(var(--volr-spacing)*2)}.volr\\\\:p-3{padding:calc(var(--volr-spacing)*3)}.volr\\\\:p-4{padding:calc(var(--volr-spacing)*4)}.volr\\\\:p-5{padding:calc(var(--volr-spacing)*5)}.volr\\\\:p-8{padding:calc(var(--volr-spacing)*8)}.volr\\\\:px-2{padding-inline:calc(var(--volr-spacing)*2)}.volr\\\\:px-3{padding-inline:calc(var(--volr-spacing)*3)}.volr\\\\:px-4{padding-inline:calc(var(--volr-spacing)*4)}.volr\\\\:py-0\\\\.5{padding-block:calc(var(--volr-spacing)*.5)}.volr\\\\:py-1\\\\.5{padding-block:calc(var(--volr-spacing)*1.5)}.volr\\\\:py-2\\\\.5{padding-block:calc(var(--volr-spacing)*2.5)}.volr\\\\:py-3{padding-block:calc(var(--volr-spacing)*3)}.volr\\\\:py-4{padding-block:calc(var(--volr-spacing)*4)}.volr\\\\:py-6{padding-block:calc(var(--volr-spacing)*6)}.volr\\\\:py-8{padding-block:calc(var(--volr-spacing)*8)}.volr\\\\:py-12{padding-block:calc(var(--volr-spacing)*12)}.volr\\\\:pt-2{padding-top:calc(var(--volr-spacing)*2)}.volr\\\\:pt-3{padding-top:calc(var(--volr-spacing)*3)}.volr\\\\:pt-4{padding-top:calc(var(--volr-spacing)*4)}.volr\\\\:pr-3{padding-right:calc(var(--volr-spacing)*3)}.volr\\\\:pb-2{padding-bottom:calc(var(--volr-spacing)*2)}.volr\\\\:pb-4{padding-bottom:calc(var(--volr-spacing)*4)}.volr\\\\:pl-11{padding-left:calc(var(--volr-spacing)*11)}.volr\\\\:text-center{text-align:center}.volr\\\\:text-left{text-align:left}.volr\\\\:align-baseline{vertical-align:baseline}.volr\\\\:font-mono{font-family:var(--volr-font-mono)}.volr\\\\:text-2xl{font-size:var(--volr-text-2xl);line-height:var(--volr-tw-leading,var(--volr-text-2xl--line-height))}.volr\\\\:text-8xl{font-size:var(--volr-text-8xl);line-height:var(--volr-tw-leading,var(--volr-text-8xl--line-height))}.volr\\\\:text-base{font-size:var(--volr-text-base);line-height:var(--volr-tw-leading,var(--volr-text-base--line-height))}.volr\\\\:text-lg{font-size:var(--volr-text-lg);line-height:var(--volr-tw-leading,var(--volr-text-lg--line-height))}.volr\\\\:text-sm{font-size:var(--volr-text-sm);line-height:var(--volr-tw-leading,var(--volr-text-sm--line-height))}.volr\\\\:text-xl{font-size:var(--volr-text-xl);line-height:var(--volr-tw-leading,var(--volr-text-xl--line-height))}.volr\\\\:text-xs{font-size:var(--volr-text-xs);line-height:var(--volr-tw-leading,var(--volr-text-xs--line-height))}.volr\\\\:leading-relaxed{--volr-tw-leading:var(--volr-leading-relaxed);line-height:var(--volr-leading-relaxed)}.volr\\\\:font-bold{--volr-tw-font-weight:var(--volr-font-weight-bold);font-weight:var(--volr-font-weight-bold)}.volr\\\\:font-medium{--volr-tw-font-weight:var(--volr-font-weight-medium);font-weight:var(--volr-font-weight-medium)}.volr\\\\:font-semibold{--volr-tw-font-weight:var(--volr-font-weight-semibold);font-weight:var(--volr-font-weight-semibold)}.volr\\\\:break-all{word-break:break-all}.volr\\\\:text-emerald-600{color:var(--volr-color-emerald-600)}.volr\\\\:text-gray-500{color:var(--volr-color-gray-500)}.volr\\\\:text-green-600{color:var(--volr-color-green-600)}.volr\\\\:text-red-700{color:var(--volr-color-red-700)}.volr\\\\:text-slate-500{color:var(--volr-color-slate-500)}.volr\\\\:text-slate-600{color:var(--volr-color-slate-600)}.volr\\\\:text-white{color:var(--volr-color-white)}.volr\\\\:capitalize{text-transform:capitalize}.volr\\\\:underline{text-decoration-line:underline}.volr\\\\:opacity-0{opacity:0}.volr\\\\:opacity-30{opacity:.3}.volr\\\\:shadow-2xl{--volr-tw-shadow:0 25px 50px -12px var(--volr-tw-shadow-color,#00000040);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow)}.volr\\\\:shadow-\\\\[0_-8px_30px_rgba\\\\(0\\\\,0\\\\,0\\\\,0\\\\.2\\\\)\\\\]{--volr-tw-shadow:0 -8px 30px var(--volr-tw-shadow-color,#0003);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow)}.volr\\\\:shadow-lg{--volr-tw-shadow:0 10px 15px -3px var(--volr-tw-shadow-color,#0000001a),0 4px 6px -4px var(--volr-tw-shadow-color,#0000001a);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow)}.volr\\\\:shadow-md{--volr-tw-shadow:0 4px 6px -1px var(--volr-tw-shadow-color,#0000001a),0 2px 4px -2px var(--volr-tw-shadow-color,#0000001a);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow)}.volr\\\\:shadow-sm{--volr-tw-shadow:0 1px 3px 0 var(--volr-tw-shadow-color,#0000001a),0 1px 2px -1px var(--volr-tw-shadow-color,#0000001a);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow)}.volr\\\\:shadow-xl{--volr-tw-shadow:0 20px 25px -5px var(--volr-tw-shadow-color,#0000001a),0 8px 10px -6px var(--volr-tw-shadow-color,#0000001a);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow)}.volr\\\\:shadow-emerald-500\\\\/50{--volr-tw-shadow-color:var(--volr-color-emerald-500)}@supports (color:color-mix(in lab, red, red)){.volr\\\\:shadow-emerald-500\\\\/50{--volr-tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--volr-color-emerald-500)50%,transparent)var(--volr-tw-shadow-alpha),transparent)}}.volr\\\\:blur-2xl{--volr-tw-blur:blur(var(--volr-blur-2xl));filter:var(--volr-tw-blur,)var(--volr-tw-brightness,)var(--volr-tw-contrast,)var(--volr-tw-grayscale,)var(--volr-tw-hue-rotate,)var(--volr-tw-invert,)var(--volr-tw-saturate,)var(--volr-tw-sepia,)var(--volr-tw-drop-shadow,)}.volr\\\\:transition-all{transition-property:all;transition-timing-function:var(--volr-tw-ease,var(--volr-default-transition-timing-function));transition-duration:var(--volr-tw-duration,var(--volr-default-transition-duration))}.volr\\\\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--volr-tw-gradient-from,--volr-tw-gradient-via,--volr-tw-gradient-to;transition-timing-function:var(--volr-tw-ease,var(--volr-default-transition-timing-function));transition-duration:var(--volr-tw-duration,var(--volr-default-transition-duration))}.volr\\\\:duration-300{--volr-tw-duration:.3s;transition-duration:.3s}.volr\\\\:duration-500{--volr-tw-duration:.5s;transition-duration:.5s}.volr\\\\:ease-out{--volr-tw-ease:var(--volr-ease-out);transition-timing-function:var(--volr-ease-out)}.volr\\\\:outline-none{--volr-tw-outline-style:none;outline-style:none}.volr\\\\:disabled\\\\:cursor-not-allowed:disabled{cursor:not-allowed}.volr-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.volr-text-secondary{color:var(--volr-text-secondary)}.volr-text-muted{color:var(--volr-text-muted)}.volr-bg-secondary{background-color:var(--volr-bg-secondary)}.volr-bg-tertiary{background-color:var(--volr-bg-tertiary)}.volr-border{border-color:var(--volr-border)}.volr-border-strong{border-color:var(--volr-border-strong)}.volr-divider-line{background-color:var(--volr-border)}.volr-error{background-color:var(--volr-error-bg);border-color:var(--volr-error-border);color:var(--volr-error-text)}.volr-hover:hover{background-color:var(--volr-hover-bg)}.volr-surface{background-color:var(--volr-bg)}}@property --volr-tw-translate-x{syntax:\\\"*\\\";inherits:false;initial-value:0}@property --volr-tw-translate-y{syntax:\\\"*\\\";inherits:false;initial-value:0}@property --volr-tw-translate-z{syntax:\\\"*\\\";inherits:false;initial-value:0}@property --volr-tw-space-y-reverse{syntax:\\\"*\\\";inherits:false;initial-value:0}@property --volr-tw-border-style{syntax:\\\"*\\\";inherits:false;initial-value:solid}@property --volr-tw-gradient-position{syntax:\\\"*\\\";inherits:false}@property --volr-tw-gradient-from{syntax:\\\"<color>\\\";inherits:false;initial-value:#0000}@property --volr-tw-gradient-via{syntax:\\\"<color>\\\";inherits:false;initial-value:#0000}@property --volr-tw-gradient-to{syntax:\\\"<color>\\\";inherits:false;initial-value:#0000}@property --volr-tw-gradient-stops{syntax:\\\"*\\\";inherits:false}@property --volr-tw-gradient-via-stops{syntax:\\\"*\\\";inherits:false}@property --volr-tw-gradient-from-position{syntax:\\\"<length-percentage>\\\";inherits:false;initial-value:0%}@property --volr-tw-gradient-via-position{syntax:\\\"<length-percentage>\\\";inherits:false;initial-value:50%}@property --volr-tw-gradient-to-position{syntax:\\\"<length-percentage>\\\";inherits:false;initial-value:100%}@property --volr-tw-leading{syntax:\\\"*\\\";inherits:false}@property --volr-tw-font-weight{syntax:\\\"*\\\";inherits:false}@property --volr-tw-shadow{syntax:\\\"*\\\";inherits:false;initial-value:0 0 #0000}@property --volr-tw-shadow-color{syntax:\\\"*\\\";inherits:false}@property --volr-tw-shadow-alpha{syntax:\\\"<percentage>\\\";inherits:false;initial-value:100%}@property --volr-tw-inset-shadow{syntax:\\\"*\\\";inherits:false;initial-value:0 0 #0000}@property --volr-tw-inset-shadow-color{syntax:\\\"*\\\";inherits:false}@property --volr-tw-inset-shadow-alpha{syntax:\\\"<percentage>\\\";inherits:false;initial-value:100%}@property --volr-tw-ring-color{syntax:\\\"*\\\";inherits:false}@property --volr-tw-ring-shadow{syntax:\\\"*\\\";inherits:false;initial-value:0 0 #0000}@property --volr-tw-inset-ring-color{syntax:\\\"*\\\";inherits:false}@property --volr-tw-inset-ring-shadow{syntax:\\\"*\\\";inherits:false;initial-value:0 0 #0000}@property --volr-tw-ring-inset{syntax:\\\"*\\\";inherits:false}@property --volr-tw-ring-offset-width{syntax:\\\"<length>\\\";inherits:false;initial-value:0}@property --volr-tw-ring-offset-color{syntax:\\\"*\\\";inherits:false;initial-value:#fff}@property --volr-tw-ring-offset-shadow{syntax:\\\"*\\\";inherits:false;initial-value:0 0 #0000}@property --volr-tw-blur{syntax:\\\"*\\\";inherits:false}@property --volr-tw-brightness{syntax:\\\"*\\\";inherits:false}@property --volr-tw-contrast{syntax:\\\"*\\\";inherits:false}@property --volr-tw-grayscale{syntax:\\\"*\\\";inherits:false}@property --volr-tw-hue-rotate{syntax:\\\"*\\\";inherits:false}@property --volr-tw-invert{syntax:\\\"*\\\";inherits:false}@property --volr-tw-opacity{syntax:\\\"*\\\";inherits:false}@property --volr-tw-saturate{syntax:\\\"*\\\";inherits:false}@property --volr-tw-sepia{syntax:\\\"*\\\";inherits:false}@property --volr-tw-drop-shadow{syntax:\\\"*\\\";inherits:false}@property --volr-tw-drop-shadow-color{syntax:\\\"*\\\";inherits:false}@property --volr-tw-drop-shadow-alpha{syntax:\\\"<percentage>\\\";inherits:false;initial-value:100%}@property --volr-tw-drop-shadow-size{syntax:\\\"*\\\";inherits:false}@property --volr-tw-duration{syntax:\\\"*\\\";inherits:false}@property --volr-tw-ease{syntax:\\\"*\\\";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}\";\n","import React, { useRef, useEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { VOLR_SDK_CSS } from '@/generated/volr-sdk-css';\nimport type { VolrTheme } from '@/providers/VolrUIProvider';\n\ninterface ShadowContainerProps {\n children: React.ReactNode;\n /** Theme mode for the SDK UI */\n theme?: VolrTheme;\n}\n\n/**\n * Custom hook to resolve 'system' theme to actual 'light' or 'dark'\n */\nfunction useResolvedTheme(theme: VolrTheme = 'light'): 'light' | 'dark' {\n const [resolvedTheme, setResolvedTheme] = useState<'light' | 'dark'>(() => {\n if (theme !== 'system') return theme;\n if (typeof window === 'undefined') return 'light';\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n });\n\n useEffect(() => {\n if (theme !== 'system') {\n setResolvedTheme(theme);\n return;\n }\n\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const handleChange = (e: MediaQueryListEvent) => {\n setResolvedTheme(e.matches ? 'dark' : 'light');\n };\n\n // Set initial value\n setResolvedTheme(mediaQuery.matches ? 'dark' : 'light');\n\n // Listen for changes\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n }, [theme]);\n\n return resolvedTheme;\n}\n\n/**\n * Shadow DOM 컨테이너 컴포넌트\n *\n * Shadow DOM을 사용하여 SDK의 UI를 호스트 앱의 CSS로부터 완전히 격리합니다.\n * - 호스트 앱의 Tailwind Preflight, CSS Reset 등이 SDK에 영향을 주지 않음\n * - SDK의 CSS가 호스트 앱에 영향을 주지 않음\n * - CSS 변수(--volr-*)는 Shadow 경계를 넘어 상속되므로 테마 커스터마이징 가능\n */\nexport function ShadowContainer({ children, theme = 'light' }: ShadowContainerProps) {\n const hostRef = useRef<HTMLDivElement | null>(null);\n const shadowRootRef = useRef<ShadowRoot | null>(null);\n const [mountNode, setMountNode] = useState<HTMLElement | null>(null);\n const resolvedTheme = useResolvedTheme(theme);\n\n useEffect(() => {\n if (!hostRef.current) return;\n\n // Shadow Root가 이미 있으면 재사용\n if (!shadowRootRef.current) {\n shadowRootRef.current = hostRef.current.attachShadow({ mode: 'open' });\n\n // SDK CSS를 Shadow Root에 주입\n const styleEl = document.createElement('style');\n styleEl.textContent = VOLR_SDK_CSS;\n shadowRootRef.current.appendChild(styleEl);\n\n // React 컴포넌트를 렌더링할 컨테이너 생성\n const container = document.createElement('div');\n container.setAttribute('data-volr-root', 'true');\n shadowRootRef.current.appendChild(container);\n\n setMountNode(container);\n }\n\n return () => {\n // cleanup은 React가 처리\n };\n }, []);\n\n // Apply theme to shadow host\n useEffect(() => {\n if (hostRef.current) {\n hostRef.current.setAttribute('data-theme', resolvedTheme);\n }\n }, [resolvedTheme]);\n\n return (\n <>\n <div ref={hostRef} id=\"volr-shadow-host\" />\n {mountNode && createPortal(children, mountNode)}\n </>\n );\n}\n\n/**\n * Shadow DOM을 document.body에 마운트하는 Portal 버전\n * 모달처럼 body 레벨에서 렌더링해야 하는 컴포넌트용\n */\nexport function ShadowPortal({ children, theme = 'light' }: ShadowContainerProps) {\n const [mountNode, setMountNode] = useState<HTMLElement | null>(null);\n const hostRef = useRef<HTMLDivElement | null>(null);\n const resolvedTheme = useResolvedTheme(theme);\n\n useEffect(() => {\n // Shadow Host를 body에 생성\n const host = document.createElement('div');\n host.id = 'volr-shadow-portal';\n host.style.position = 'fixed';\n host.style.top = '0';\n host.style.left = '0';\n host.style.width = '0';\n host.style.height = '0';\n host.style.zIndex = '9999';\n document.body.appendChild(host);\n hostRef.current = host;\n\n // Shadow Root 생성\n const shadowRoot = host.attachShadow({ mode: 'open' });\n\n // SDK CSS 주입\n const styleEl = document.createElement('style');\n styleEl.textContent = VOLR_SDK_CSS;\n shadowRoot.appendChild(styleEl);\n\n // 렌더링 컨테이너\n const container = document.createElement('div');\n container.setAttribute('data-volr-root', 'true');\n shadowRoot.appendChild(container);\n\n setMountNode(container);\n\n return () => {\n document.body.removeChild(host);\n hostRef.current = null;\n };\n }, []);\n\n // Apply theme to shadow host\n useEffect(() => {\n if (hostRef.current) {\n hostRef.current.setAttribute('data-theme', resolvedTheme);\n }\n }, [resolvedTheme]);\n\n if (!mountNode) return null;\n\n return createPortal(children, mountNode);\n}\n\n","import { useEffect, useRef, useCallback } from 'react';\n\n/**\n * Shadow DOM 내부에서 포커스 트래핑을 처리하는 훅\n *\n * 모달이 열려 있는 동안:\n * - Tab/Shift+Tab으로 포커스가 모달 밖으로 나가지 않도록 함\n * - 모달이 열릴 때 첫 번째 포커스 가능 요소로 포커스 이동\n * - 모달이 닫힐 때 이전 포커스 위치로 복원\n */\nexport function useFocusTrap(isActive: boolean, containerRef: React.RefObject<HTMLElement | null>) {\n const previousActiveElement = useRef<HTMLElement | null>(null);\n\n // 포커스 가능한 요소들의 셀렉터\n const focusableSelector = [\n 'button:not([disabled])',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'a[href]',\n '[tabindex]:not([tabindex=\"-1\"])',\n ].join(', ');\n\n // 컨테이너 내의 모든 포커스 가능 요소 가져오기\n const getFocusableElements = useCallback((): HTMLElement[] => {\n if (!containerRef.current) return [];\n return Array.from(\n containerRef.current.querySelectorAll<HTMLElement>(focusableSelector)\n ).filter((el) => {\n // 숨겨진 요소 제외\n return el.offsetParent !== null;\n });\n }, [containerRef, focusableSelector]);\n\n // Tab 키 핸들러\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (event.key !== 'Tab') return;\n\n const focusableElements = getFocusableElements();\n if (focusableElements.length === 0) return;\n\n const firstElement = focusableElements[0];\n const lastElement = focusableElements[focusableElements.length - 1];\n\n // Shift+Tab: 첫 번째 요소에서 마지막으로 이동\n if (event.shiftKey) {\n if (document.activeElement === firstElement) {\n event.preventDefault();\n lastElement.focus();\n }\n }\n // Tab: 마지막 요소에서 첫 번째로 이동\n else {\n if (document.activeElement === lastElement) {\n event.preventDefault();\n firstElement.focus();\n }\n }\n },\n [getFocusableElements]\n );\n\n useEffect(() => {\n if (!isActive) return;\n\n // 현재 포커스된 요소 저장\n previousActiveElement.current = document.activeElement as HTMLElement;\n\n // 첫 번째 포커스 가능 요소로 포커스 이동\n const focusableElements = getFocusableElements();\n if (focusableElements.length > 0) {\n // 약간의 딜레이를 주어 DOM이 완전히 렌더링된 후 포커스\n requestAnimationFrame(() => {\n focusableElements[0].focus();\n });\n }\n\n // Tab 키 이벤트 리스너 추가\n document.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n\n // 이전 포커스 위치로 복원\n if (previousActiveElement.current && previousActiveElement.current.focus) {\n previousActiveElement.current.focus();\n }\n };\n }, [isActive, getFocusableElements, handleKeyDown]);\n}\n\n/**\n * Shadow Root 내부에서 포커스 트래핑을 처리하는 훅\n * ShadowPortal과 함께 사용\n */\nexport function useShadowFocusTrap(\n isActive: boolean,\n shadowRootRef: React.RefObject<ShadowRoot | null>\n) {\n const previousActiveElement = useRef<HTMLElement | null>(null);\n\n const focusableSelector = [\n 'button:not([disabled])',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'a[href]',\n '[tabindex]:not([tabindex=\"-1\"])',\n ].join(', ');\n\n const getFocusableElements = useCallback((): HTMLElement[] => {\n if (!shadowRootRef.current) return [];\n return Array.from(\n shadowRootRef.current.querySelectorAll<HTMLElement>(focusableSelector)\n ).filter((el) => el.offsetParent !== null);\n }, [shadowRootRef, focusableSelector]);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (event.key !== 'Tab') return;\n\n const focusableElements = getFocusableElements();\n if (focusableElements.length === 0) return;\n\n const firstElement = focusableElements[0];\n const lastElement = focusableElements[focusableElements.length - 1];\n\n // Shadow DOM 내부의 activeElement 확인\n const activeElement = shadowRootRef.current?.activeElement;\n\n if (event.shiftKey) {\n if (activeElement === firstElement) {\n event.preventDefault();\n lastElement.focus();\n }\n } else {\n if (activeElement === lastElement) {\n event.preventDefault();\n firstElement.focus();\n }\n }\n },\n [getFocusableElements, shadowRootRef]\n );\n\n useEffect(() => {\n if (!isActive) return;\n\n previousActiveElement.current = document.activeElement as HTMLElement;\n\n const focusableElements = getFocusableElements();\n if (focusableElements.length > 0) {\n requestAnimationFrame(() => {\n focusableElements[0].focus();\n });\n }\n\n document.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n\n if (previousActiveElement.current?.focus) {\n previousActiveElement.current.focus();\n }\n };\n }, [isActive, getFocusableElements, handleKeyDown]);\n}\n\n","import React, { useRef, useEffect, useId } from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { useMediaQuery } from \"@/hooks/useMediaQuery\";\nimport { ShadowPortal } from \"@/components/core/ShadowContainer\";\nimport { useFocusTrap } from \"@/hooks/useFocusTrap\";\nimport { useVolrUIOptional } from \"@/providers/VolrUIProvider\";\n\ninterface ModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n className?: string;\n children: React.ReactNode;\n onPointerDownOutside?: (e: React.PointerEvent) => void;\n onEscapeKeyDown?: (e: KeyboardEvent) => void;\n variant?: \"centered\" | \"bottom-sheet\";\n contentClassName?: string;\n /** 접근성을 위한 모달 제목 (aria-label) */\n ariaLabel?: string;\n}\n\nexport const Modal = ({\n open,\n onOpenChange,\n children,\n className,\n onPointerDownOutside,\n onEscapeKeyDown,\n variant: explicitVariant,\n contentClassName,\n ariaLabel = \"Dialog\",\n}: ModalProps) => {\n const isMobile = useMediaQuery(\"(max-width: 500px)\");\n const variant = explicitVariant ?? (isMobile ? \"bottom-sheet\" : \"centered\");\n const dialogRef = useRef<HTMLDivElement>(null);\n const dialogId = useId();\n const uiContext = useVolrUIOptional();\n const theme = uiContext?.theme ?? \"light\";\n\n // 포커스 트래핑\n useFocusTrap(open, dialogRef);\n\n // ESC 키로 닫기\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\" && open) {\n if (onEscapeKeyDown) {\n onEscapeKeyDown(e);\n } else {\n onOpenChange(false);\n }\n }\n };\n\n if (open) {\n document.addEventListener(\"keydown\", handleEscape);\n }\n\n return () => document.removeEventListener(\"keydown\", handleEscape);\n }, [open, onOpenChange, onEscapeKeyDown]);\n\n if (!open) return null;\n\n const isBottomSheet = variant === \"bottom-sheet\";\n \n // Check if contentClassName contains custom max-width\n const hasCustomMaxWidth = contentClassName?.includes(\"max-w-\");\n\n return (\n <ShadowPortal theme={theme}>\n {/* Backdrop */}\n <div\n className=\"volr:fixed volr:inset-0 volr:z-40 volr:bg-black/45\"\n aria-hidden=\"true\"\n onClick={(e) => {\n if (onPointerDownOutside) {\n onPointerDownOutside(e as unknown as React.PointerEvent);\n } else {\n onOpenChange(false);\n }\n }}\n />\n\n {/* Modal Content */}\n <div\n className={cn(\n \"volr:fixed volr:inset-0 volr:z-50 volr:flex volr:items-center volr:justify-center volr:pointer-events-none\",\n isBottomSheet && \"volr:items-end\"\n )}\n >\n <div\n ref={dialogRef}\n id={dialogId}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={ariaLabel}\n tabIndex={-1}\n className={cn(\n \"volr:border volr:shadow-xl volr:overflow-y-auto volr:relative volr:w-full volr:pointer-events-auto volr-surface volr-border-strong\",\n isBottomSheet\n ? \"volr:max-w-full volr:max-h-[85vh] volr:rounded-t-3xl volr:px-4 volr:py-6 volr:shadow-2xl\"\n : cn(\n \"volr:rounded-2xl volr:p-5 volr:w-full volr:max-h-[90vh]\",\n !hasCustomMaxWidth && \"volr:max-w-md\"\n ),\n className,\n contentClassName\n )}\n onClick={(e) => e.stopPropagation()}\n >\n {children}\n </div>\n </div>\n </ShadowPortal>\n );\n};\n\n","interface IconProps {\n className?: string;\n size?: number;\n}\n\nexport function ErrorIcon({ className, size = 16 }: IconProps) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\" />\n </svg>\n );\n}\n\n","interface IconProps {\n className?: string;\n size?: number;\n}\n\nexport function CloseIcon({ className, size = 20 }: IconProps) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n );\n}\n\n","interface IconProps {\n className?: string;\n size?: number;\n}\n\nexport function BackIcon({ className, size = 20 }: IconProps) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n className={className}\n >\n <path d=\"M19 12H5M12 19l-7-7 7-7\" />\n </svg>\n );\n}\n\n","interface IconProps {\n className?: string;\n size?: number;\n}\n\nexport function EmailIcon({ className, size = 20 }: IconProps) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M3 8L10.89 13.26C11.2187 13.4793 11.6049 13.5963 12 13.5963C12.3951 13.5963 12.7813 13.4793 13.11 13.26L21 8\" />\n <rect x=\"3\" y=\"6\" width=\"18\" height=\"12\" rx=\"2.2\" />\n </svg>\n );\n}\n\n","import { cn } from \"@/lib/utils\";\nimport { useI18n } from \"@/i18n/context\";\nimport { BackIcon, CloseIcon } from \"@/components/materials/icons\";\n\nexport interface ModalHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n back?: boolean;\n onBack?: () => void;\n onClose?: () => void;\n}\n\nexport const ModalHeader: React.FC<ModalHeaderProps> = ({\n className,\n back = false,\n onBack,\n onClose,\n children,\n ...props\n}) => {\n const { t } = useI18n();\n\n return (\n <div\n className={cn(\n \"volr:flex volr:items-center volr:justify-between volr:mb-3\",\n className\n )}\n {...props}\n >\n <div className=\"volr:flex volr:items-center volr:gap-4 volr:flex-1\">\n {back && onBack && (\n <button\n onClick={onBack}\n className=\"volr:p-2 volr:-ml-2 volr:rounded-lg volr:transition-colors volr:flex volr:items-center volr:gap-1 volr-text-secondary volr-hover\"\n type=\"button\"\n >\n <BackIcon />\n <span className=\"volr:text-sm volr:font-medium\">{t(\"common.back\")}</span>\n </button>\n )}\n {children}\n </div>\n {onClose && (\n <button\n type=\"button\"\n onClick={onClose}\n className=\"volr:p-1 volr:rounded-lg volr:transition-colors volr-text-muted volr-hover\"\n aria-label=\"Close\"\n >\n <CloseIcon />\n </button>\n )}\n </div>\n );\n};\n\n","/**\n * Biometric detection and error handling utilities\n */\n\nexport type BiometricType = 'faceId' | 'touchId' | 'fingerprint';\n\n/**\n * Detect biometric type based on device\n */\nexport function getBiometricType(): BiometricType {\n const ua = navigator.userAgent;\n \n // iPhone/iPad는 Face ID\n if (/iPhone|iPad|iPod/.test(ua)) {\n return 'faceId';\n }\n \n // Mac (MacBook, iMac 등)은 Touch ID\n if (/Macintosh|MacIntel/.test(ua)) {\n return 'touchId';\n }\n \n // Android, Windows, Linux 등은 지문\n return 'fingerprint';\n}\n\n/**\n * Convert technical WebAuthn errors to user-friendly messages\n */\nexport function getUserFriendlyError(error: Error, t: (key: string) => string): string {\n const msg = error.message.toLowerCase();\n \n if (msg.includes('timed out') || msg.includes('not allowed') || msg.includes('cancelled')) {\n return t('passkey.errors.cancelled');\n }\n if (msg.includes('already registered') || msg.includes('already exists')) {\n return t('passkey.errors.alreadyExists');\n }\n if (msg.includes('not supported')) {\n return t('passkey.errors.notSupported');\n }\n \n return t('passkey.errors.generic');\n}\n\n","/**\n * Wallet Connected View Component\n * 이미 패스키가 설정된 경우 표시되는 화면\n */\n\nimport type { VolrUser } from '@volr/react';\nimport { ModalHeader } from \"@/components/materials/modal\";\n\ninterface WalletConnectedViewProps {\n user: VolrUser;\n onClose?: () => void;\n /** Whether to show the header with close button */\n showHeader?: boolean;\n}\n\nexport function WalletConnectedView({ user, onClose, showHeader = true }: WalletConnectedViewProps) {\n return (\n <div>\n {showHeader && onClose && (\n <ModalHeader onClose={onClose} />\n )}\n \n <div className=\"\">\n <p className=\"volr:text-xl volr:font-semibold volr:mb-5\">\n Wallet Connected\n </p>\n\n {user.evmAddress ? (\n <div className=\"volr:rounded-lg volr:p-5 volr:mb-6 volr:text-left volr-bg-secondary\">\n <div className=\"volr:mb-3\">\n <div className=\"volr:text-xs volr:mb-1 volr:font-medium volr-text-secondary\">\n Wallet Address\n </div>\n <div className=\"volr:text-sm volr:font-mono volr:break-all\">\n {user.evmAddress}\n </div>\n </div>\n\n <div>\n <div className=\"volr:text-xs volr:mb-1 volr:font-medium volr-text-secondary\">\n Key Storage Type\n </div>\n <div className=\"volr:text-sm volr:capitalize\">\n {user.keyStorageType}\n </div>\n </div>\n </div>\n ) : (\n <div className=\"volr:rounded-lg volr:p-5 volr:mb-6 volr:text-left volr-bg-secondary\">\n <div className=\"volr:text-sm volr:mb-2 volr-text-secondary\">\n Passkey is set up\n </div>\n <div className=\"volr:text-xs volr-text-muted\">\n Wallet address will be available after provider is restored.\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n","interface FaceIdIconProps {\n size: number;\n}\n\nexport function FaceIdIcon({ size }: FaceIdIconProps) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7.5,3 C7.77614237,3 8,3.22385763 8,3.5 C8,3.77614237 7.77614237,4 7.5,4 L5.5,4 C4.67157288,4 4,4.67157288 4,5.5 L4,7.53112887 C4,7.80727125 3.77614237,8.03112887 3.5,8.03112887 C3.22385763,8.03112887 3,7.80727125 3,7.53112887 L3,5.5 C3,4.11928813 4.11928813,3 5.5,3 L7.5,3 Z M16.5,4 C16.2238576,4 16,3.77614237 16,3.5 C16,3.22385763 16.2238576,3 16.5,3 L18.5,3 C19.8807119,3 21,4.11928813 21,5.5 L21,7.5 C21,7.77614237 20.7761424,8 20.5,8 C20.2238576,8 20,7.77614237 20,7.5 L20,5.5 C20,4.67157288 19.3284271,4 18.5,4 L16.5,4 Z M20,16.5 C20,16.2238576 20.2238576,16 20.5,16 C20.7761424,16 21,16.2238576 21,16.5 L21,18.5 C21,19.8807119 19.8807119,21 18.5,21 L16.5,21 C16.2238576,21 16,20.7761424 16,20.5 C16,20.2238576 16.2238576,20 16.5,20 L18.5,20 C19.3284271,20 20,19.3284271 20,18.5 L20,16.5 Z M3,16.5 C3,16.2238576 3.22385763,16 3.5,16 C3.77614237,16 4,16.2238576 4,16.5 L4,18.5 C4,19.3284271 4.67157288,20 5.5,20 L7.5,20 C7.77614237,20 8,20.2238576 8,20.5 C8,20.7761424 7.77614237,21 7.5,21 L5.5,21 C4.11928813,21 3,19.8807119 3,18.5 L3,16.5 Z M8,8.5 C8,8.22385763 8.22385763,8 8.5,8 C8.77614237,8 9,8.22385763 9,8.5 L9,9.5 C9,9.77614237 8.77614237,10 8.5,10 C8.22385763,10 8,9.77614237 8,9.5 L8,8.5 Z M16,8.5 C16,8.22385763 16.2238576,8 16.5,8 C16.7761424,8 17,8.22385763 17,8.5 L17,9.5 C17,9.77614237 16.7761424,10 16.5,10 C16.2238576,10 16,9.77614237 16,9.5 L16,8.5 Z M12,8.5 C12,8.22385763 12.2238576,8 12.5,8 C12.7761424,8 13,8.22385763 13,8.5 L13,12.5 C13,13.3284271 12.3284271,14 11.5,14 C11.2238576,14 11,13.7761424 11,13.5 C11,13.2238576 11.2238576,13 11.5,13 C11.7761424,13 12,12.7761424 12,12.5 L12,8.5 Z M8.1,15.8 C7.93431458,15.5790861 7.9790861,15.2656854 8.2,15.1 C8.4209139,14.9343146 8.73431458,14.9790861 8.9,15.2 C9.81096778,16.4146237 10.8353763,17 12,17 C13.1646237,17 14.1890322,16.4146237 15.1,15.2 C15.2656854,14.9790861 15.5790861,14.9343146 15.8,15.1 C16.0209139,15.2656854 16.0656854,15.5790861 15.9,15.8 C14.8109678,17.252043 13.502043,18 12,18 C10.497957,18 9.18903222,17.252043 8.1,15.8 Z\"\n fill=\"#3b82f6\"\n />\n </svg>\n );\n}\n","interface TouchIdIconProps {\n size: number;\n}\n\nexport function TouchIdIcon({ size }: TouchIdIconProps) {\n const fill = \"#f87171\"; // red-400, softer than #ef4444\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M18.4558 14.6734C18.4921 15.5205 18.3742 16.4404 18.2653 17.3604C18.2562 17.4514 18.238 17.5425 18.2108 17.6245C18.1564 17.8613 18.0384 18.0708 17.7571 18.0252C17.4759 17.9706 17.4123 17.7429 17.4577 17.497C17.5484 16.8958 17.5938 16.2947 17.6483 15.6936C17.8025 13.9539 17.6483 12.2325 17.2218 10.5474C16.5322 7.84233 13.801 6.12999 11.0879 6.62183C8.28416 7.13189 6.33331 9.63663 6.58737 12.4419C6.65996 13.2435 6.88681 14.0268 6.83237 14.8374C6.82329 15.0013 6.82329 15.1744 6.787 15.3383C6.74163 15.5569 6.63274 15.7573 6.3696 15.73C6.08832 15.7027 5.98851 15.4841 6.01573 15.2382C6.05202 14.8465 6.07925 14.4548 6.0248 14.0632C5.8887 13.0158 5.68908 11.9683 5.8887 10.9027C6.4422 7.96073 9.00099 5.77477 11.9681 5.75656C14.8898 5.73834 17.5121 7.89698 18.0838 10.8025C18.3288 12.0503 18.483 13.3163 18.4558 14.6734Z\"\n fill={fill}\n />\n <path\n d=\"M21.0963 11.112C21.1053 11.4399 21.1235 11.7132 20.7877 11.7496C20.4702 11.786 20.3885 11.531 20.3431 11.276C20.1344 9.84601 19.7443 8.47978 18.8913 7.29572C16.7772 4.35379 13.9099 3.19705 10.3802 3.78908C7.16809 4.32646 4.55485 6.95872 3.8471 10.183C3.78359 10.4745 3.79266 10.9208 3.3299 10.8206C2.83992 10.7204 3.03047 10.3014 3.10306 9.99174C3.99228 6.10255 7.24975 3.26992 11.1242 2.88737C15.7337 2.43197 20.1617 5.63804 20.9874 10.5018C21.0327 10.7386 21.069 10.9663 21.0963 11.112Z\"\n fill={fill}\n />\n <path\n d=\"M12.1405 2.22257C7.19532 2.04952 2.73105 5.82029 2.23199 11.2123C2.14126 12.2051 2.27736 13.1797 2.43161 14.1543C2.58587 15.0924 2.30458 15.9212 1.72386 16.659C1.56054 16.8685 1.35184 17.078 1.07963 16.8503C0.798344 16.6226 0.961671 16.3858 1.13407 16.1763C1.68757 15.5023 1.76016 14.7281 1.61498 13.8992C0.607796 7.85141 4.50042 2.44117 10.5617 1.50303C11.4418 1.3664 12.3401 1.32997 13.2293 1.4757C13.4834 1.52124 13.7375 1.585 13.7193 1.90378C13.6921 2.259 13.4199 2.24989 13.1477 2.24079C12.812 2.21346 12.4762 2.22257 12.1405 2.22257Z\"\n fill={fill}\n />\n <path\n d=\"M14.1094 14.6278C14.064 17.9432 13.075 20.9398 11.0969 23.6085C10.9335 23.8271 10.7521 24.1003 10.4345 23.8726C10.1351 23.654 10.2802 23.399 10.4526 23.1622C11.9498 21.1402 12.8844 18.8813 13.2111 16.3766C13.4107 14.8373 13.3472 13.3254 13.0477 11.8134C12.9207 11.1667 12.3581 10.8297 11.723 10.9664C11.1876 11.0848 10.8519 11.6221 10.9698 12.2324C11.2511 13.7261 11.2874 15.2108 11.0152 16.7045C10.9608 17.0051 10.9608 17.4423 10.5162 17.3785C10.0625 17.3147 10.1986 16.914 10.253 16.6043C10.4889 15.229 10.498 13.8627 10.2258 12.4965C9.98988 11.3034 10.6069 10.3834 11.7502 10.1739C12.7392 9.99178 13.6466 10.7022 13.8553 11.8316C13.9188 12.1777 13.9823 12.5147 14.0095 12.8609C14.0549 13.4438 14.1457 14.0358 14.1094 14.6278Z\"\n fill={fill}\n />\n <path\n d=\"M22.8111 14.6825C22.8564 15.484 22.7748 16.3402 22.684 17.1963C22.6568 17.4787 22.6477 17.8885 22.2122 17.8248C21.7948 17.761 21.8765 17.3876 21.9128 17.087C22.2122 14.5732 22.1033 12.0775 21.4863 9.63656C20.6424 6.25743 18.5192 3.98039 15.2799 2.73257C15.2073 2.70525 15.1347 2.68703 15.0621 2.65971C14.8443 2.56863 14.6719 2.432 14.7536 2.17698C14.8443 1.90373 15.0712 1.87641 15.3162 1.94927C15.9423 2.14054 16.5411 2.39557 17.1037 2.72347C20.2704 4.55421 22.0307 7.33219 22.5388 10.939C22.7112 12.1595 22.8473 13.38 22.8111 14.6825Z\"\n fill={fill}\n />\n <path\n d=\"M11.8227 7.21389C12.0042 7.21389 12.0677 7.20478 12.1221 7.21389C12.3853 7.24121 12.6847 7.28675 12.6938 7.61465C12.7029 7.97897 12.3944 8.02451 12.104 8.02451C10.5796 7.99719 9.41817 8.63476 8.61061 9.91901C8.07526 10.7752 7.90286 11.7133 8.09341 12.7152C8.70135 16.0033 7.81212 18.8359 5.4711 21.204C5.38944 21.286 5.2987 21.3771 5.19889 21.4499C4.99927 21.6139 4.7815 21.6685 4.60002 21.4499C4.42762 21.2496 4.51836 21.0492 4.68169 20.8852C5.17167 20.4116 5.6435 19.9198 6.0246 19.3551C7.28585 17.4697 7.81212 15.4021 7.35844 13.1706C6.7505 10.1103 8.80116 7.3414 11.8227 7.21389Z\"\n fill={fill}\n />\n <path\n d=\"M17.0128 14.3092C17.0037 17.7065 16.2415 20.6303 14.7171 23.3627C14.6899 23.4173 14.6627 23.472 14.6264 23.5175C14.4812 23.7543 14.2907 23.9001 14.0275 23.7361C13.7825 23.5904 13.8279 23.3536 13.9549 23.135C14.2635 22.5976 14.5357 22.042 14.7897 21.4682C15.7969 19.2003 16.2597 16.823 16.2415 14.3456C16.2324 13.2435 16.1145 12.1323 15.8604 11.0576C15.6517 10.1377 15.1618 9.39078 14.4086 8.81697C14.2544 8.69856 14.082 8.58926 13.9368 8.47086C13.7825 8.34334 13.6918 8.18851 13.8098 7.99723C13.9277 7.79686 14.1092 7.75131 14.3179 7.8515C14.826 8.10653 15.2434 8.46175 15.6154 8.89894C16.3504 9.76422 16.668 10.7934 16.8132 11.8955C16.9221 12.7881 17.04 13.6716 17.0128 14.3092Z\"\n fill={fill}\n />\n <path\n d=\"M12.0223 0.0183811C13.7554 -0.100025 15.3796 0.309842 16.9493 1.01117C16.9947 1.02939 17.031 1.0476 17.0763 1.06582C17.3395 1.17512 17.5572 1.32996 17.4302 1.64874C17.2941 1.97664 17.0219 1.88555 16.7769 1.76715C15.924 1.36639 15.0348 1.0476 14.1092 0.910981C9.6994 0.218761 6.03362 1.56677 3.16632 5.02787C2.97577 5.26468 2.80337 5.67455 2.42227 5.39219C2.01396 5.09163 2.37691 4.79106 2.56745 4.54514C4.62719 1.96753 7.30394 0.464681 10.5705 0.0274892C11.0423 -0.0362679 11.5323 0.0183811 12.0223 0.0183811Z\"\n fill={fill}\n />\n <path\n d=\"M19.9166 14.3454C19.9257 16.9595 19.5264 19.2456 18.7461 21.468C18.6916 21.6137 18.6372 21.7504 18.5827 21.8961C18.492 22.1329 18.3378 22.306 18.0655 22.2058C17.8024 22.1056 17.7752 21.887 17.8659 21.6411C17.9839 21.2949 18.1018 20.9579 18.2107 20.6027C18.8822 18.5078 19.2179 16.3492 19.1362 14.145C19.0637 12.287 18.9638 10.4107 18.0565 8.70747C17.9204 8.45244 17.757 8.21563 17.6119 7.9606C17.4939 7.75112 17.4757 7.54163 17.6844 7.3959C17.9113 7.23195 18.0837 7.35946 18.2289 7.54163C18.9003 8.43423 19.2996 9.44523 19.5173 10.52C19.7805 11.8771 19.9438 13.2251 19.9166 14.3454Z\"\n fill={fill}\n />\n <path\n d=\"M4.61846 14.4365C4.57309 14.136 4.50958 13.6714 4.44606 13.2069C4.06496 10.4471 4.90882 8.12457 6.94133 6.23007C7.01392 6.15721 7.10466 6.09345 7.18632 6.02969C7.35872 5.9204 7.53112 5.92039 7.6763 6.07523C7.83056 6.23007 7.80334 6.41224 7.6763 6.56707C7.55835 6.7037 7.42224 6.83121 7.29521 6.95873C5.48954 8.74392 4.80901 10.8843 5.26269 13.3891C5.64379 15.4931 5.07215 17.3238 3.66572 18.8995C3.48425 19.0999 3.26648 19.273 3.04871 19.4369C2.88538 19.5553 2.70391 19.5644 2.55873 19.4005C2.40447 19.2183 2.44077 19.0361 2.59502 18.8722C2.73113 18.7265 2.87631 18.599 3.01241 18.4532C4.05589 17.3785 4.57309 16.0942 4.61846 14.4365Z\"\n fill={fill}\n />\n <path\n d=\"M12.6577 14.6552C12.5942 17.8886 11.5688 20.7668 9.50003 23.2715C9.45466 23.3262 9.40929 23.3899 9.35485 23.4446C9.18245 23.6358 8.97376 23.7269 8.76506 23.5448C8.56544 23.3808 8.61081 23.1622 8.75599 22.971C9.00098 22.6431 9.26412 22.3334 9.50003 21.9964C11.0335 19.856 11.7957 17.4514 11.8955 14.8192C11.9227 13.9994 11.8138 13.1888 11.6868 12.3782C11.6687 12.2871 11.6505 12.196 11.6414 12.1049C11.6233 11.8681 11.6868 11.6677 11.9499 11.6313C12.2131 11.5858 12.3401 11.7497 12.3855 11.9865C12.567 12.87 12.6668 13.7626 12.6577 14.6552Z\"\n fill={fill}\n />\n <path\n d=\"M23.9998 11.5857C23.9998 11.7679 23.9998 11.95 23.9998 12.1322C23.9998 12.369 23.9363 12.5694 23.655 12.5785C23.3737 12.5876 23.2648 12.3872 23.2467 12.1322C23.2285 11.6768 23.2195 11.2214 23.165 10.7751C22.7839 7.55078 21.2868 4.95495 18.7371 2.96937C18.5102 2.78721 18.1382 2.61415 18.3923 2.25894C18.6373 1.92193 18.9367 2.17696 19.1726 2.35913C22.2214 4.6726 23.773 7.77848 23.9998 11.5857Z\"\n fill={fill}\n />\n <path\n d=\"M15.5522 14.0449C15.5522 14.1815 15.5522 14.3181 15.5522 14.4547C15.5431 14.7007 15.4615 14.9284 15.1711 14.9284C14.8807 14.9284 14.8082 14.7098 14.7991 14.4547C14.7537 13.5348 14.6811 12.6149 14.5178 11.7041C14.1821 9.86423 12.3583 8.92609 10.7794 9.79137C10.2532 10.0828 9.85391 10.52 9.64521 11.1029C9.61799 11.1758 9.59077 11.2487 9.57262 11.3215C9.49096 11.5766 9.39115 11.8498 9.05542 11.7496C8.69247 11.6403 8.76506 11.3306 8.84673 11.0665C9.20967 9.95532 9.9265 9.17201 11.0516 8.84412C12.9662 8.27941 14.8082 9.40883 15.2437 11.3944C15.4342 12.2597 15.5068 13.1523 15.5522 14.0449Z\"\n fill={fill}\n />\n <path\n d=\"M9.73564 14.6279C9.69934 17.497 8.67401 19.9653 6.70502 22.0511C6.6415 22.1149 6.57799 22.1786 6.51447 22.2424C6.32392 22.4245 6.09708 22.5338 5.87931 22.3152C5.64339 22.0875 5.7795 21.8689 5.97005 21.6868C6.62335 21.0492 7.17685 20.3388 7.63961 19.5464C8.65587 17.7794 9.11863 15.8849 8.93715 13.8355C8.92808 13.6807 8.919 13.535 8.919 13.3801C8.90993 13.1342 8.97345 12.8974 9.25473 12.8792C9.54509 12.8519 9.63583 13.0705 9.67212 13.3164C9.69934 13.4985 9.73564 13.6716 9.74471 13.8538C9.74471 14.1088 9.73564 14.3638 9.73564 14.6279Z\"\n fill={fill}\n />\n <path\n d=\"M0.00881775 12.0866C-0.0274771 10.1648 0.389914 8.4616 1.15211 6.83124C1.20655 6.70372 1.27007 6.58532 1.35173 6.47602C1.46061 6.33029 1.61487 6.25742 1.78727 6.3485C1.97782 6.43959 2.05041 6.60353 1.97782 6.80391C1.88708 7.05894 1.76912 7.30486 1.66024 7.55989C0.743789 9.72763 0.516946 11.9682 0.997854 14.2817C1.06137 14.5823 1.28821 15.0013 0.798232 15.1197C0.308251 15.2381 0.308251 14.7644 0.244735 14.4639C0.0814075 13.6441 -0.0365509 12.8153 0.00881775 12.0866Z\"\n fill={fill}\n />\n <path\n d=\"M11.9136 4.29004C13.6648 4.3538 15.171 4.80921 16.5049 5.78378C16.5502 5.82021 16.6047 5.85665 16.65 5.89308C16.8497 6.07524 17.1309 6.25741 16.886 6.56708C16.65 6.87676 16.4051 6.66727 16.1782 6.50333C14.0731 4.95494 11.7956 4.69991 9.36385 5.61073C9.3094 5.62894 9.25496 5.65627 9.19145 5.67448C8.97368 5.75646 8.75591 5.75646 8.64702 5.51965C8.51999 5.25551 8.67424 5.08245 8.90109 4.97316C9.58162 4.65437 10.2894 4.47221 11.0243 4.37202C11.3601 4.33559 11.6867 4.31737 11.9136 4.29004Z\"\n fill={fill}\n />\n <path\n d=\"M15.4521 16.5042C15.2797 17.9068 14.9531 19.2457 14.454 20.5391C14.0457 21.5865 13.5467 22.5884 12.9206 23.5266C12.8571 23.6268 12.7935 23.7361 12.7119 23.8271C12.5486 24.0184 12.3399 24.0548 12.1493 23.9273C11.9406 23.7907 11.9769 23.5903 12.0858 23.3991C12.2763 23.0712 12.4941 22.7615 12.6847 22.4336C13.71 20.6484 14.3724 18.7448 14.6355 16.6954C14.6446 16.5861 14.6718 16.486 14.699 16.3858C14.7535 16.1672 14.8896 16.0306 15.1255 16.0579C15.3705 16.0943 15.4521 16.2856 15.4521 16.5042Z\"\n fill={fill}\n />\n <path\n d=\"M21.3501 14.7098C21.3773 16.4676 21.1414 18.1891 20.7331 19.8923C20.7149 19.947 20.7059 20.0107 20.6877 20.0654C20.6061 20.3295 20.5425 20.6574 20.1705 20.5572C19.8166 20.4661 19.8529 20.1655 19.9255 19.8832C20.1161 19.1454 20.2703 18.4077 20.3611 17.6517C20.5425 16.2673 20.6786 14.8828 20.5425 13.4802C20.5153 13.1978 20.5516 12.9246 20.8783 12.879C21.2503 12.8335 21.3229 13.134 21.332 13.4255C21.3592 13.8536 21.3501 14.2817 21.3501 14.7098Z\"\n fill={fill}\n />\n <path\n d=\"M3.94694 14.5094C3.8925 16.0031 3.3753 17.1872 2.34089 18.1435C2.16849 18.2984 1.97794 18.3894 1.77832 18.2073C1.56963 18.016 1.59685 17.7792 1.7874 17.6061C3.15753 16.3583 3.34808 14.8099 2.96698 13.0976C2.91254 12.8517 2.92161 12.5875 2.92161 12.3325C2.93069 12.1321 3.04864 11.9773 3.25734 11.9773C3.46604 11.9682 3.61122 12.0957 3.63844 12.2961C3.7564 13.0612 3.85621 13.8263 3.94694 14.5094Z\"\n fill={fill}\n />\n <path\n d=\"M10.3619 18.9908C10.2711 19.2002 10.1532 19.4735 10.0262 19.7467C9.48173 20.9035 8.78305 21.96 7.89382 22.8799C7.70328 23.0712 7.49458 23.2534 7.24052 23.0075C7.0046 22.7798 7.14978 22.5612 7.32218 22.379C8.30214 21.3316 9.05526 20.1384 9.60876 18.8086C9.6995 18.59 9.8356 18.3987 10.1169 18.4807C10.3256 18.5445 10.3891 18.7084 10.3619 18.9908Z\"\n fill={fill}\n />\n <path\n d=\"M6.33312 17.2874C6.3059 17.3785 6.26054 17.506 6.21517 17.6244C5.75241 18.7174 5.05373 19.6282 4.17358 20.4115C3.96488 20.6028 3.71989 20.7121 3.50212 20.448C3.29343 20.202 3.46583 19.9835 3.65638 19.8286C4.50023 19.1091 5.11725 18.2256 5.54371 17.2055C5.64352 16.9778 5.77055 16.8047 6.05184 16.8594C6.23331 16.914 6.32405 17.0506 6.33312 17.2874Z\"\n fill={fill}\n />\n <path\n d=\"M17.8026 19.5554C17.7753 19.6647 17.7572 19.7831 17.7209 19.9015C17.4215 20.9216 17.0676 21.9144 16.5957 22.8708C16.4778 23.1167 16.3145 23.3444 16.006 23.1987C15.7156 23.062 15.7882 22.7979 15.8971 22.5702C16.3508 21.5774 16.7409 20.5573 17.0313 19.5099C17.0948 19.2639 17.2218 19.0909 17.5122 19.1455C17.7209 19.1911 17.8026 19.3459 17.8026 19.5554Z\"\n fill={fill}\n />\n </svg>\n );\n}\n","/**\n * Android/범용 지문 아이콘\n * 연한 빨강 (#f87171) - TouchIdIcon과 통일\n */\n\ninterface FingerprintIconProps {\n size: number;\n}\n\nexport function FingerprintIcon({ size }: FingerprintIconProps) {\n const fill = \"#f87171\"; // red-400, consistent with TouchIdIcon\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M17.81 4.47c-.08 0-.16-.02-.23-.06C15.66 3.42 14 3 12.01 3c-1.98 0-3.86.47-5.57 1.41-.24.13-.54.04-.68-.2-.13-.24-.04-.55.2-.68C7.82 2.52 9.86 2 12.01 2c2.13 0 3.99.47 6.03 1.52.25.13.34.43.21.67-.09.18-.26.28-.44.28zM3.5 9.72c-.1 0-.2-.03-.29-.09-.23-.16-.28-.47-.12-.7.99-1.4 2.25-2.5 3.75-3.27C9.98 4.04 14 4.03 17.15 5.65c1.5.77 2.76 1.86 3.75 3.25.16.22.11.54-.12.7-.23.16-.54.11-.7-.12-.9-1.26-2.04-2.25-3.39-2.94-2.87-1.47-6.54-1.47-9.4.01-1.36.7-2.5 1.7-3.4 2.96-.08.14-.23.21-.39.21zm6.25 12.07c-.13 0-.26-.05-.35-.15-.87-.87-1.34-1.43-2.01-2.64-.69-1.23-1.05-2.73-1.05-4.34 0-2.97 2.54-5.39 5.66-5.39s5.66 2.42 5.66 5.39c0 .28-.22.5-.5.5s-.5-.22-.5-.5c0-2.42-2.09-4.39-4.66-4.39-2.57 0-4.66 1.97-4.66 4.39 0 1.44.32 2.77.93 3.85.64 1.15 1.08 1.64 1.85 2.42.19.2.19.51 0 .71-.11.1-.24.15-.37.15zm7.17-1.85c-1.19 0-2.24-.3-3.1-.89-1.49-1.01-2.38-2.65-2.38-4.39 0-.28.22-.5.5-.5s.5.22.5.5c0 1.41.72 2.74 1.94 3.56.71.48 1.54.71 2.54.71.24 0 .64-.03 1.04-.1.27-.05.53.13.58.41.05.27-.13.53-.41.58-.57.11-1.07.12-1.21.12zM14.91 22c-.04 0-.09-.01-.13-.02-1.59-.44-2.63-1.03-3.72-2.1-1.4-1.39-2.17-3.24-2.17-5.22 0-1.62 1.38-2.94 3.08-2.94 1.7 0 3.08 1.32 3.08 2.94 0 1.07.93 1.94 2.08 1.94s2.08-.87 2.08-1.94c0-3.77-3.25-6.83-7.25-6.83-2.84 0-5.44 1.58-6.61 4.03-.39.81-.59 1.76-.59 2.8 0 .78.07 2.01.67 3.61.1.26-.03.55-.29.64-.26.1-.55-.04-.64-.29-.49-1.31-.73-2.61-.73-3.96 0-1.2.23-2.29.68-3.24 1.33-2.79 4.28-4.6 7.51-4.6 4.55 0 8.25 3.51 8.25 7.83 0 1.62-1.38 2.94-3.08 2.94s-3.08-1.32-3.08-2.94c0-1.07-.93-1.94-2.08-1.94s-2.08.87-2.08 1.94c0 1.71.66 3.31 1.87 4.51.95.94 1.86 1.46 3.27 1.85.27.07.42.35.35.61-.05.23-.26.38-.47.38z\"\n fill={fill}\n />\n </svg>\n );\n}\n","/**\n * Biometric Icon Selector Component\n * 디바이스 타입에 따라 적절한 아이콘을 표시\n */\n\nimport { FaceIdIcon } from '../icons/FaceIdIcon';\nimport { TouchIdIcon } from '../icons/TouchIdIcon';\nimport { FingerprintIcon } from '../icons/FingerprintIcon';\nimport type { BiometricType } from '../utils/biometric';\n\ninterface BiometricIconProps {\n type: BiometricType;\n size?: number;\n animate?: boolean;\n}\n\nexport function BiometricIcon({ type, size = 80, animate = false }: BiometricIconProps) {\n const className = animate ? 'volr:animate-pulse' : '';\n \n return (\n <div className={className}>\n {type === 'faceId' && <FaceIdIcon size={size} />}\n {type === 'touchId' && <TouchIdIcon size={size} />}\n {type === 'fingerprint' && <FingerprintIcon size={size} />}\n </div>\n );\n}\n\n","\nimport { cn } from \"@/lib/utils\";\nimport { useVolrUI } from \"@/providers/VolrUIProvider\";\nimport React from \"react\";\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: \"primary\" | \"secondary\" | \"ghost\" | \"outline\";\n size?: \"sm\" | \"md\" | \"lg\";\n fullWidth?: boolean;\n children: React.ReactNode;\n}\n\nconst sizeMap = {\n sm: { px: \"0.75rem\", py: \"0.5rem\", fontSize: \"0.875rem\" },\n md: { px: \"1rem\", py: \"0.75rem\", fontSize: \"1rem\" },\n lg: { px: \"1.5rem\", py: \"1rem\", fontSize: \"1.125rem\" },\n};\n\n// Colors are defined as CSS variable references for theme support\nconst variantMap = {\n primary: { backgroundColor: undefined, color: \"#fff\", border: \"none\" },\n secondary: { backgroundColor: \"var(--volr-bg-tertiary)\", color: \"var(--volr-text)\", border: \"none\" },\n ghost: { backgroundColor: \"transparent\", color: \"var(--volr-text-secondary)\", border: \"none\" },\n outline: { backgroundColor: \"transparent\", color: \"var(--volr-text-secondary)\", border: \"1px solid var(--volr-border)\" },\n};\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ variant = \"primary\", size = \"md\", fullWidth, className, style, disabled, children, ...props }, ref) => {\n const { accentColor } = useVolrUI();\n\n const sizeStyle = sizeMap[size];\n const variantStyle = variantMap[variant];\n const isPrimary = variant === \"primary\";\n\n return (\n <button\n ref={ref}\n disabled={disabled}\n className={cn(\n \"volr:inline-flex volr:items-center volr:justify-center volr:gap-2\",\n \"volr:font-semibold volr:transition-all\",\n fullWidth && \"volr:w-full\",\n className\n )}\n style={{\n paddingLeft: sizeStyle.px,\n paddingRight: sizeStyle.px,\n paddingTop: sizeStyle.py,\n paddingBottom: sizeStyle.py,\n fontSize: sizeStyle.fontSize,\n borderRadius: \"0.75rem\",\n border: variantStyle.border,\n backgroundColor: isPrimary ? accentColor : variantStyle.backgroundColor,\n color: variantStyle.color,\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n opacity: disabled ? 0.5 : 1,\n ...style,\n }}\n {...props}\n >\n {children}\n </button>\n );\n }\n);\n\nButton.displayName = \"Button\";\n\n\n","/**\n * Passkey Enrollment Form Component\n * 패스키 등록 초기 화면\n */\n\nimport { BiometricIcon } from './BiometricIcon';\nimport { Button } from '@/components/materials/Button';\nimport { ErrorIcon } from '@/components/materials/icons';\nimport type { BiometricType } from '../utils/biometric';\n\ninterface PasskeyEnrollFormProps {\n biometricType: BiometricType;\n biometricMessage: string;\n errorMessage: string | null;\n onEnroll: () => void;\n onLogout: () => void;\n buttonText: string;\n logoutText: string;\n}\n\nexport function PasskeyEnrollForm({\n biometricType,\n biometricMessage,\n errorMessage,\n onEnroll,\n onLogout,\n buttonText,\n logoutText,\n}: PasskeyEnrollFormProps) {\n return (\n <>\n {/* 아이콘 - 조금 작게 */}\n <div className=\"volr:my-6 volr:flex volr:justify-center\">\n <BiometricIcon type={biometricType} size={48} />\n </div>\n\n {/* 간결한 설명 */}\n <p className=\"volr:text-sm volr:mb-6 volr:text-center volr-text-secondary\">\n {biometricMessage}\n </p>\n\n {/* 에러 메시지 */}\n {errorMessage && (\n <div className=\"volr:mb-4 volr:p-3 volr:rounded-lg volr:border volr:text-sm volr:flex volr:items-start volr:gap-2 volr:text-left volr-error\">\n <ErrorIcon className=\"volr:shrink-0 volr:mt-0.5\" />\n <span>{errorMessage}</span>\n </div>\n )}\n\n {/* 버튼들 */}\n <div className=\"volr:flex volr:flex-col volr:gap-3\">\n <Button variant=\"primary\" fullWidth onClick={onEnroll}>\n {buttonText}\n </Button>\n <Button variant=\"ghost\" fullWidth onClick={onLogout}>\n {logoutText}\n </Button>\n </div>\n </>\n );\n}\n\n","/**\n * Passkey Enrollment Loading Component\n * 패스키 등록 진행 중 화면 with progress indicator\n */\n\nimport { BiometricIcon } from './BiometricIcon';\nimport { Button } from '@/components/materials/Button';\nimport type { BiometricType } from '../utils/biometric';\n\ninterface PasskeyEnrollLoadingProps {\n biometricType: BiometricType;\n stepMessage: string;\n isEnrolling: boolean;\n accentColor: string;\n onRetry: () => void;\n onLogout: () => void;\n buttonText: string;\n logoutText: string;\n progress?: number; // 0-100\n}\n\nexport function PasskeyEnrollLoading({\n biometricType,\n stepMessage,\n isEnrolling,\n accentColor,\n onRetry,\n onLogout,\n buttonText,\n logoutText,\n progress = 0,\n}: PasskeyEnrollLoadingProps) {\n return (\n <>\n {/* 로딩 아이콘 */}\n <div className=\"volr:mb-8 volr:flex volr:justify-center volr:items-center volr:min-h-[120px]\">\n <BiometricIcon type={biometricType} size={60} animate={isEnrolling} />\n </div>\n\n {/* 진행 메시지 */}\n <p className=\"volr:text-base volr:mb-4 volr-text-secondary\">\n {stepMessage}\n </p>\n\n {/* Progress Bar */}\n {isEnrolling && (\n <div className=\"volr:w-full volr:mb-6\">\n <div className=\"volr:w-full volr:h-2 volr:rounded-full volr:overflow-hidden volr-bg-tertiary\">\n <div\n className=\"volr:h-full volr:rounded-full volr:transition-all volr:duration-500 volr:ease-out\"\n style={{\n backgroundColor: accentColor,\n width: `${progress}%`,\n }}\n />\n </div>\n </div>\n )}\n\n {/* 재시도 버튼 */}\n {!isEnrolling && (\n <div className=\"volr:flex volr:flex-col volr:gap-3 volr:mt-6\">\n <Button variant=\"primary\" fullWidth onClick={onRetry}>\n {buttonText}\n </Button>\n <Button variant=\"ghost\" fullWidth onClick={onLogout}>\n {logoutText}\n </Button>\n </div>\n )}\n </>\n );\n}\n\n","/**\n * Passkey Enrollment View Component\n * Modern passkey setup with device-specific biometric icons\n */\n\nimport { useState, useEffect } from \"react\";\nimport { useVolrContext, useInternalAuth } from \"@volr/react\";\nimport { usePasskeyEnrollment } from \"@volr/react\";\nimport type { AuthRefreshResponseDto } from \"@volr/react\";\nimport { useI18n } from \"@/i18n/context\";\nimport { useVolrUI } from \"@/providers/VolrUIProvider\";\nimport { Modal } from \"@/components/materials/modal\";\nimport { getBiometricType, getUserFriendlyError } from \"./utils/biometric\";\nimport { WalletConnectedView } from \"./components/WalletConnectedView\";\nimport { PasskeyEnrollForm } from \"./components/PasskeyEnrollForm\";\nimport { PasskeyEnrollLoading } from \"./components/PasskeyEnrollLoading\";\n\nexport interface PasskeyEnrollViewProps {\n onComplete: () => void;\n onError?: (error: Error) => void;\n onLogout?: () => void;\n onClose?: () => void;\n /** Whether the modal is open */\n isOpen?: boolean;\n /** Whether to wrap content in Modal component */\n wrapInModal?: boolean;\n}\n\nexport function PasskeyEnrollView({\n onComplete,\n onError,\n onLogout,\n onClose,\n isOpen = true,\n wrapInModal = true,\n}: PasskeyEnrollViewProps) {\n const { user, logout, setUser } = useVolrContext();\n const { client } = useInternalAuth();\n const { t } = useI18n();\n const { accentColor } = useVolrUI();\n const {\n enroll,\n step,\n isEnrolling,\n error: enrollmentError,\n } = usePasskeyEnrollment();\n const [hasStarted, setHasStarted] = useState(false);\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n const [isRefreshing, setIsRefreshing] = useState(false);\n\n const biometricType = getBiometricType();\n\n // Check if user already has a passkey\n const hasPasskey = user?.keyStorageType === \"passkey\";\n\n // Debug logging for passkey detection\n useEffect(() => {\n console.log(\"[PasskeyEnrollView] User state:\", {\n user,\n keyStorageType: user?.keyStorageType,\n evmAddress: user?.evmAddress,\n hasPasskey,\n });\n }, [user, hasPasskey]);\n\n // Refresh user data if passkey exists but address is missing\n useEffect(() => {\n if (hasPasskey && !user?.evmAddress && !isRefreshing) {\n const refreshUserData = async () => {\n try {\n setIsRefreshing(true);\n const response = await client.post<AuthRefreshResponseDto>(\n \"/auth/refresh\",\n {}\n );\n\n if (response.user) {\n console.log(\n \"[PasskeyEnrollView] Updated user data:\",\n response.user\n );\n setUser({\n ...user,\n ...response.user,\n });\n }\n } catch (error) {\n console.error(\n \"[PasskeyEnrollView] Failed to refresh user data:\",\n error\n );\n } finally {\n setIsRefreshing(false);\n }\n };\n\n refreshUserData();\n }\n }, [hasPasskey, user?.evmAddress, isRefreshing, client, setUser, user]);\n\n // Validate user\n useEffect(() => {\n if (!user?.id) {\n const error = new Error(\"User ID is required for passkey enrollment\");\n setErrorMessage(getUserFriendlyError(error, t));\n if (onError) {\n onError(error);\n }\n }\n }, [user, onError, t]);\n\n // Handle enrollment errors with user-friendly messages\n useEffect(() => {\n if (enrollmentError) {\n const friendlyMessage = getUserFriendlyError(enrollmentError, t);\n setErrorMessage(friendlyMessage);\n if (onError) {\n onError(enrollmentError);\n }\n }\n }, [enrollmentError, onError, t]);\n\n const handleEnroll = async () => {\n if (!user?.id) {\n const error = new Error(\n \"User ID is required for passkey enrollment\"\n );\n setErrorMessage(getUserFriendlyError(error, t));\n if (onError) {\n onError(error);\n }\n return;\n }\n\n try {\n setErrorMessage(null);\n await enroll();\n // 성공 시 상태 초기화 후 onComplete 호출\n setHasStarted(false);\n onComplete();\n } catch (error) {\n // Error is already handled by hook and useEffect\n setHasStarted(false);\n }\n };\n\n const handleLogout = async () => {\n try {\n await logout();\n if (onLogout) {\n onLogout();\n }\n } catch (error) {\n if (onError) {\n onError(error instanceof Error ? error : new Error(\"Logout failed\"));\n }\n }\n };\n\n const getStepMessage = (): string => {\n switch (step) {\n case \"creating\":\n return t(\"passkey.creating\");\n case \"encrypting\":\n return t(\"passkey.encrypting\");\n case \"uploading\":\n return t(\"passkey.uploading\");\n case \"registering\":\n return t(\"passkey.registering\");\n default:\n return \"\";\n }\n };\n\n const getProgress = (): number => {\n switch (step) {\n case \"creating\":\n return 25;\n case \"encrypting\":\n return 50;\n case \"uploading\":\n return 75;\n case \"registering\":\n return 90;\n default:\n return 0;\n }\n };\n\n const getBiometricTitle = (): string => {\n if (biometricType === \"faceId\") {\n return t(\"passkey.titleFaceId\");\n }\n if (biometricType === \"touchId\") {\n return t(\"passkey.titleTouchId\");\n }\n return t(\"passkey.titleFingerprint\");\n };\n\n const getBiometricDescription = (): string => {\n return t(\"passkey.description\");\n };\n\n // If user already has a passkey, show wallet info instead\n if (hasPasskey) {\n const handleClose = () => {\n if (onClose) {\n onClose();\n } else if (onComplete) {\n onComplete();\n }\n };\n\n const walletContent = (\n <WalletConnectedView \n user={user} \n onClose={handleClose}\n showHeader={!wrapInModal} // Show header only when not wrapped in modal (modal has its own close)\n />\n );\n\n if (!wrapInModal) {\n return walletContent;\n }\n\n return (\n <Modal open={isOpen} onOpenChange={(open) => !open && handleClose()}>\n <WalletConnectedView \n user={user} \n onClose={handleClose}\n showHeader={false} // Modal provides its own close mechanism\n />\n </Modal>\n );\n }\n\n const content = (\n <div>\n {/* 동적 제목 - 디바이스별 */}\n <p className=\"volr:text-xl volr:font-semibold volr:mb-5\">\n {getBiometricTitle()}\n </p>\n\n {!hasStarted ? (\n <PasskeyEnrollForm\n biometricType={biometricType}\n biometricMessage={getBiometricDescription()}\n errorMessage={errorMessage}\n onEnroll={() => {\n setHasStarted(true);\n handleEnroll();\n }}\n onLogout={handleLogout}\n buttonText={t(\"passkey.start\")}\n logoutText={t(\"passkey.logout\")}\n />\n ) : (\n <PasskeyEnrollLoading\n biometricType={biometricType}\n stepMessage={getStepMessage()}\n isEnrolling={isEnrolling}\n accentColor={accentColor}\n progress={getProgress()}\n onRetry={handleEnroll}\n onLogout={handleLogout}\n buttonText={t(\"passkey.start\")}\n logoutText={t(\"passkey.logout\")}\n />\n )}\n </div>\n );\n\n if (!wrapInModal) {\n return content;\n }\n\n return (\n <Modal open={isOpen} onOpenChange={(open) => !open && onLogout?.()}>\n {content}\n </Modal>\n );\n}\n","/**\n * MPC Connect View Component\n * MPC 연결 플로우: useMpcConnection hook 사용\n */\n\nimport { useEffect, useState } from \"react\";\nimport { useMpcConnection } from \"@volr/react\";\nimport { Modal } from \"@/components/materials/modal\";\n\nexport interface MpcConnectViewProps {\n onComplete: () => void;\n onError?: (error: Error) => void;\n /** Whether the modal is open */\n isOpen?: boolean;\n /** Whether to wrap content in Modal component */\n wrapInModal?: boolean;\n}\n\nexport function MpcConnectView({\n onComplete,\n onError,\n isOpen = true,\n wrapInModal = true,\n}: MpcConnectViewProps) {\n const {\n connect,\n step,\n isConnecting,\n error: connectionError,\n } = useMpcConnection();\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n\n // Handle connection errors\n useEffect(() => {\n if (connectionError) {\n setErrorMessage(connectionError.message);\n if (onError) {\n onError(connectionError);\n }\n }\n }, [connectionError, onError]);\n\n useEffect(() => {\n // Auto-start connection on mount\n handleConnect();\n }, []);\n\n const handleConnect = async () => {\n try {\n setErrorMessage(null);\n await connect();\n // Success callback\n setTimeout(() => {\n onComplete();\n }, 1000);\n } catch (error) {\n // Error is already handled by hook and useEffect\n }\n };\n\n const getStepMessage = (): string => {\n switch (step) {\n case \"connecting\":\n return \"Establishing secure connection...\";\n case \"registering\":\n return \"Registering wallet provider...\";\n default:\n return \"\";\n }\n };\n\n const content = (\n <div className=\"volr:p-8 volr:max-w-md volr:mx-auto volr:text-center\">\n <p className=\"volr:text-2xl volr:font-bold volr:mb-6\">\n Connecting to MPC Provider\n </p>\n\n {errorMessage && (\n <div className=\"volr:mb-4 volr:p-3 volr:bg-red-50 volr:border volr:border-red-200 volr:rounded-lg volr:text-red-700 volr:text-sm volr:text-left\">\n {errorMessage}\n </div>\n )}\n\n <div className=\"volr:mb-8 volr:flex volr:justify-center volr:items-center volr:min-h-[120px]\">\n <div\n className={`volr:text-8xl ${\n isConnecting ? \"volr:animate-pulse\" : \"\"\n }`}\n >\n 🔒\n </div>\n </div>\n\n <p className=\"volr:text-base volr:text-gray-500 volr:mb-6 volr:leading-relaxed\">\n {getStepMessage()}\n </p>\n </div>\n );\n\n if (!wrapInModal) {\n return content;\n }\n\n return (\n <Modal\n open={isOpen}\n onOpenChange={(open) => {\n if (!open && !isConnecting && onError) {\n onError(new Error(\"Connection cancelled\"));\n }\n }}\n onPointerDownOutside={(e) => {\n if (isConnecting) e.preventDefault();\n }}\n onEscapeKeyDown={(e) => {\n if (isConnecting) e.preventDefault();\n }}\n >\n <div className=\"max-w-md mx-auto\">\n <p className=\"volr:sr-only\">MPC Connection</p>\n {content}\n </div>\n </Modal>\n );\n}\n","import React, { useState } from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface CopyButtonProps {\n text: string;\n className?: string;\n onCopy?: () => void;\n}\n\nexport const CopyButton: React.FC<CopyButtonProps> = ({ text, className, onCopy }) => {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n onCopy?.();\n } catch (error) {\n console.error(\"Copy failed:\", error);\n }\n };\n\n return (\n <button\n onClick={handleCopy}\n className={cn(\n \"volr:p-2 volr:rounded-lg volr:transition-all volr-text-muted volr-hover\",\n className\n )}\n aria-label=\"Copy\"\n >\n {copied ? (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n ) : (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n )}\n </button>\n );\n};\n\n\n","import React from \"react\";\nimport { cn } from '@/lib/utils';\n\nexport interface OptionButtonProps {\n icon: React.ReactNode;\n title: string;\n description?: string;\n onClick: () => void;\n className?: string;\n 'aria-label'?: string;\n}\n\nexport function OptionButton({\n icon,\n title,\n description,\n onClick,\n className,\n ...rest\n}: OptionButtonProps) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className={cn(\n 'volr-option-button',\n className,\n )}\n {...rest}\n >\n <span className=\"volr:flex volr:h-8 volr:w-8 volr:items-center volr:justify-center\">\n {icon}\n </span>\n <span className=\"volr:flex volr:min-w-0 volr:flex-col\">\n <span className=\"volr:truncate volr:text-left volr:text-sm volr:font-medium\">\n {title}\n </span>\n {description ? (\n <span className=\"volr:truncate volr:text-left volr:text-xs volr-text-secondary\">\n {description}\n </span>\n ) : null}\n </span>\n </button>\n );\n}\n","export function GoogleIcon() {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z\"\n fill=\"#4285F4\"\n />\n <path\n d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\"\n fill=\"#34A853\"\n />\n <path\n d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z\"\n fill=\"#FBBC05\"\n />\n <path\n d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\"\n fill=\"#EA4335\"\n />\n </svg>\n );\n}\n\n\n","export function TwitterXIcon() {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z\"\n fill=\"#000000\"\n />\n </svg>\n );\n}\n\n\n","export function AppleIcon() {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M18.71 19.5c-.83 1.24-1.71 2.45-3.05 2.47-1.34.03-1.77-.79-3.29-.79-1.53 0-2 .77-3.27.82-1.31.05-2.3-1.32-3.14-2.53C4.25 17 2.94 12.45 4.7 9.39c.87-1.52 2.43-2.48 4.12-2.51 1.28-.02 2.5.87 3.29.87.78 0 2.26-1.07 3.81-.91.65.03 2.47.26 3.64 1.98-.09.06-2.17 1.28-2.15 3.81.03 3.02 2.65 4.03 2.68 4.04-.03.07-.42 1.44-1.38 2.83M13 3.5c.73-.83 1.94-1.46 2.94-1.5.13 1.17-.34 2.35-1.04 3.19-.69.85-1.83 1.51-2.95 1.42-.15-1.15.41-2.35 1.05-3.11z\"\n fill=\"#000000\"\n />\n </svg>\n );\n}\n\n\n","import { OptionButton } from './OptionButton';\nimport { useI18n } from '@/i18n/context';\nimport { GoogleIcon } from './icons/GoogleIcon';\nimport { TwitterXIcon } from './icons/TwitterXIcon';\nimport { AppleIcon } from './icons/AppleIcon';\n\ntype Provider = 'google' | 'twitter' | 'apple';\n\nexport function SocialOption({\n provider,\n onClick,\n}: {\n provider: Provider;\n onClick: () => void;\n}) {\n const { t } = useI18n();\n const icons: Record<Provider, JSX.Element> = {\n google: <GoogleIcon />,\n twitter: <TwitterXIcon />,\n apple: <AppleIcon />,\n };\n return (\n <OptionButton\n onClick={onClick}\n icon={icons[provider]}\n title={t(`login.social.${provider}`)}\n />\n );\n}\n\n\n","import React from \"react\";\n\nexport function WalletIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n {...props}\n >\n <path\n d=\"M4 7.5C4 6.11929 5.11929 5 6.5 5H16.5C17.3284 5 18 5.67157 18 6.5C18 7.32843 17.3284 8 16.5 8H6.5C5.11929 8 4 6.88071 4 5.5V7.5Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n <rect\n x=\"3.2\"\n y=\"7.6\"\n width=\"17.6\"\n height=\"11.2\"\n rx=\"2.4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n />\n <circle cx=\"16.6\" cy=\"13.2\" r=\"1.2\" fill=\"currentColor\" />\n </svg>\n );\n}\n\n\n\n","import { OptionButton } from './OptionButton';\nimport { WalletIcon } from './icons/WalletIcon';\nimport { useI18n } from '@/i18n/context';\n\nexport function WalletOption({ onClick }: { onClick: () => void }) {\n const { t } = useI18n();\n return (\n <OptionButton\n onClick={onClick}\n icon={<WalletIcon />}\n title={t('login.wallet.label')}\n />\n );\n}\n\n\n","export function PoweredBy() {\n return (\n <div className=\"volr:mt-8 volr:text-xs volr:text-center volr:flex volr:items-baseline volr:justify-center volr:gap-1 volr-text-muted\">\n <span>Powered by</span>\n <svg\n viewBox=\"0 0 943 289\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"volr:inline-block volr:h-[0.8em] volr:w-auto volr:align-baseline volr-text-secondary\"\n style={{ fill: 'currentColor' }}\n aria-label=\"Volr\"\n >\n <path\n d=\"M138.4 284L-0.00019535 0H87.1998L184.4 208L281.2 0H363.6L225.2 284H138.4ZM471.931 288.8C453.531 288.8 435.931 286.533 419.131 282C402.331 277.2 387.264 270.267 373.931 261.2C360.864 252.133 350.464 240.933 342.731 227.6C335.264 214.267 331.531 198.8 331.531 181.2C331.531 157.733 337.664 138 349.931 122C362.464 106 379.398 94 400.731 86C422.064 77.7333 445.798 73.6 471.931 73.6C498.064 73.6 521.664 77.7333 542.731 86C564.064 94 580.864 106 593.131 122C605.664 138 611.931 157.733 611.931 181.2C611.931 198.8 608.064 214.267 600.331 227.6C592.864 240.933 582.464 252.133 569.131 261.2C556.064 270.267 541.131 277.2 524.331 282C507.531 286.533 490.064 288.8 471.931 288.8ZM471.931 236C490.598 236 505.531 231.2 516.731 221.6C528.198 211.733 533.931 198.933 533.931 183.2V179.2C533.931 163.2 528.198 150.4 516.731 140.8C505.531 131.2 490.598 126.4 471.931 126.4C453.264 126.4 438.198 131.2 426.731 140.8C415.264 150.4 409.531 163.2 409.531 179.2V183.2C409.531 198.933 415.264 211.733 426.731 221.6C438.198 231.2 453.264 236 471.931 236ZM643.865 284V0H721.465V284H643.865ZM763.006 284V78.4H839.406V106.8C848.739 95.3333 860.473 86.9333 874.606 81.6C888.739 76.2667 903.406 73.6 918.606 73.6C921.539 73.6 925.006 73.7333 929.006 74C933.006 74.2667 937.406 74.8 942.206 75.6V135.2C935.006 134.4 926.873 133.733 917.806 133.2C909.006 132.667 900.073 132.8 891.006 133.6C881.939 134.4 873.539 136.4 865.806 139.6C858.339 142.533 852.206 147.333 847.406 154C842.873 160.667 840.606 169.733 840.606 181.2V284H763.006Z\"\n fill=\"currentColor\"\n />\n </svg>\n </div>\n );\n}\n\n\n","import { useState } from 'react';\nimport type { EmailInlineInputProps } from '@/types/signin';\nimport { useI18n } from '@/i18n/context';\nimport { Button } from '../../../materials/Button';\nimport { EmailIcon } from '@/components/materials/icons';\n\nexport function EmailInlineInput({ onSubmit, accentColor }: EmailInlineInputProps) {\n const { t } = useI18n();\n const [email, setEmail] = useState('');\n const [error, setError] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n setError(null);\n setIsLoading(true);\n\n try {\n await onSubmit(email);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to send code');\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <form onSubmit={handleSubmit}>\n <div className=\"volr:relative volr:flex volr:items-center\">\n <div className=\"volr:absolute volr:left-3 volr:pointer-events-none volr-text-muted\">\n <EmailIcon />\n </div>\n <input\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n required\n placeholder={t('login.email.placeholder')}\n className=\"volr-email-input\"\n />\n </div>\n\n {error && (\n <div className=\"volr:mt-2 volr:rounded-lg volr:border volr:text-sm volr:p-3 volr-error\">\n {error}\n </div>\n )}\n\n <Button\n type=\"submit\"\n disabled={isLoading || !email}\n fullWidth\n className=\"volr:mt-3\"\n style={{ backgroundColor: accentColor }}\n >\n {isLoading ? t('common.loading') : t('login.email.sendCode')}\n </Button>\n </form>\n );\n}\n","import type { DividerProps } from '@/types/signin';\n\nexport function Divider({ text = '또는' }: DividerProps) {\n return (\n <div className=\"volr:flex volr:items-center volr:gap-3 volr:my-6\">\n <div className=\"volr:flex-1 volr:h-px volr-divider-line\" />\n <span className=\"volr:text-sm volr-text-muted\">{text}</span>\n <div className=\"volr:flex-1 volr:h-px volr-divider-line\" />\n </div>\n );\n}\n\n","import type { BrandingPanelProps } from \"@/types/signin\";\n\nexport function BrandingPanel({ config }: BrandingPanelProps) {\n return (\n <div\n className=\"volr:w-full volr:h-full volr:rounded-xl volr:overflow-hidden\"\n style={{ backgroundColor: config.backgroundColor }}\n >\n {config.component}\n </div>\n );\n}\n","import { useMediaQuery } from \"@/hooks/useMediaQuery\";\nimport { useVolrUI } from \"@/providers/VolrUIProvider\";\nimport { useI18n } from \"@/i18n/context\";\nimport type { SigninSelectScreenProps, SocialProvider } from \"@/types/signin\";\nimport { SocialOption } from \"./components/SocialOption\";\nimport { WalletOption } from \"./components/WalletOption\";\nimport { PoweredBy } from \"../../materials/PoweredBy\";\nimport { EmailInlineInput } from \"./components/EmailInlineInput\";\nimport { Divider } from \"./components/Divider\";\nimport { BrandingPanel } from \"./components/BrandingPanel\";\nimport { ModalHeader } from \"@/components/materials/modal\";\n\nexport function SigninSelectScreen({\n onSelectMethod,\n onEmailSubmit,\n branding,\n onClose,\n}: SigninSelectScreenProps) {\n const { t } = useI18n();\n const {\n accentColor,\n enabledLoginMethods = [\"email\", \"social\", \"siwe\"],\n socialProviders = [\"google\", \"twitter\", \"apple\"],\n } = useVolrUI();\n const isWide = useMediaQuery(\"(min-width: 864px)\");\n const showBrandingColumn = Boolean(branding) && isWide;\n\n const isEmailEnabled = enabledLoginMethods.includes(\"email\");\n const isSocialEnabled = enabledLoginMethods.includes(\"social\");\n const isSiweEnabled = enabledLoginMethods.includes(\"siwe\");\n\n // Divider logic\n const hasEmailAndOthers =\n isEmailEnabled && (isSocialEnabled || isSiweEnabled);\n const hasOnlySocialAndWallet =\n !isEmailEnabled && isSocialEnabled && isSiweEnabled;\n\n return (\n <div\n className={\n showBrandingColumn\n ? \"volr:max-w-4xl volr:w-full volr:mx-auto volr:grid volr:grid-cols-[minmax(0,1.1fr)_minmax(0,1fr)] volr:gap-4\"\n : \"volr:max-w-md volr:w-full volr:mx-auto\"\n }\n style={showBrandingColumn ? { minHeight: '666px' } : undefined}\n >\n {showBrandingColumn && (\n <div className=\"volr:flex volr:h-full volr:min-h-[500px]\">\n <BrandingPanel config={branding!} />\n </div>\n )}\n <div\n className={`volr:flex volr:flex-col volr:h-full ${\n showBrandingColumn ? \"volr:p-4\" : \"\"\n }`}\n >\n <ModalHeader onClose={onClose} />\n <p className=\"volr:text-2xl volr:font-semibold volr:mb-5\">\n {t(\"login.title\")}\n </p>\n\n {/* Email Section */}\n {isEmailEnabled && (\n <EmailInlineInput\n onSubmit={onEmailSubmit}\n accentColor={accentColor}\n />\n )}\n\n {/* Divider */}\n {hasEmailAndOthers && <Divider />}\n\n {/* Social + Wallet Section */}\n <div className=\"volr:flex volr:flex-col volr:gap-3\">\n {isSocialEnabled &&\n socialProviders.map((provider) => (\n <SocialOption\n key={provider}\n provider={provider as SocialProvider}\n onClick={() => onSelectMethod(provider as SocialProvider)}\n />\n ))}\n\n {hasOnlySocialAndWallet && <Divider />}\n\n {isSiweEnabled && (\n <WalletOption onClick={() => onSelectMethod(\"siwe\")} />\n )}\n </div>\n\n {/* Spacer to push footer to bottom */}\n <div className=\"volr:flex-1\" />\n\n {/* Footer - pinned to bottom */}\n <PoweredBy />\n </div>\n </div>\n );\n}\n","/**\n * Code Input Screen Component\n * Modern 6-digit code input with individual boxes\n */\n\nimport { useState, useRef, useEffect } from 'react';\nimport { useI18n } from '@/i18n/context';\nimport { useVolrUI } from '@/providers/VolrUIProvider';\nimport { Button } from '@/components/materials/Button';\nimport { ErrorIcon } from '@/components/materials/icons';\n\nexport interface CodeInputScreenProps {\n email: string;\n onSubmit: (code: string) => Promise<void>;\n onBack?: () => void; // Optional: handled by ModalHeader now\n onResend: () => Promise<void>;\n}\n\nexport function CodeInputScreen({ email, onSubmit, onResend }: CodeInputScreenProps) {\n const { t } = useI18n();\n const { accentColor } = useVolrUI();\n const [digits, setDigits] = useState<string[]>(Array(6).fill(''));\n const [error, setError] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const inputRefs = useRef<(HTMLInputElement | null)[]>([]);\n\n // Auto-focus first input on mount\n useEffect(() => {\n inputRefs.current[0]?.focus();\n }, []);\n\n // Auto-submit when all 6 digits are filled\n useEffect(() => {\n const code = digits.join('');\n if (code.length === 6 && !isLoading) {\n handleSubmit(code);\n }\n }, [digits]);\n\n const handleSubmit = async (code: string) => {\n if (code.length !== 6) return;\n\n setError(null);\n setIsLoading(true);\n\n try {\n await onSubmit(code);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Invalid code');\n // Clear inputs on error\n setDigits(Array(6).fill(''));\n inputRefs.current[0]?.focus();\n } finally {\n setIsLoading(false);\n }\n };\n\n const handleChange = (index: number, value: string) => {\n // Only allow digits\n if (!/^\\d*$/.test(value)) return;\n\n const newDigits = [...digits];\n newDigits[index] = value.slice(-1); // Only last character\n setDigits(newDigits);\n\n // Auto-focus next input\n if (value && index < 5) {\n inputRefs.current[index + 1]?.focus();\n }\n };\n\n const handleKeyDown = (index: number, e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Backspace') {\n if (!digits[index] && index > 0) {\n // Move to previous input if current is empty\n inputRefs.current[index - 1]?.focus();\n } else {\n // Clear current input\n const newDigits = [...digits];\n newDigits[index] = '';\n setDigits(newDigits);\n }\n } else if (e.key === 'ArrowLeft' && index > 0) {\n inputRefs.current[index - 1]?.focus();\n } else if (e.key === 'ArrowRight' && index < 5) {\n inputRefs.current[index + 1]?.focus();\n }\n };\n\n const handlePaste = (e: React.ClipboardEvent) => {\n e.preventDefault();\n const pastedData = e.clipboardData.getData('text').replace(/\\D/g, '').slice(0, 6);\n const newDigits = pastedData.split('').concat(Array(6).fill('')).slice(0, 6);\n setDigits(newDigits);\n\n // Focus last filled input\n const lastIndex = Math.min(pastedData.length, 5);\n inputRefs.current[lastIndex]?.focus();\n };\n\n const handleResend = async () => {\n setError(null);\n try {\n await onResend();\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to resend code');\n }\n };\n\n return (\n <div>\n {/* Title */}\n <p className=\"volr:text-2xl volr:font-semibold volr:mb-3\">\n {t('login.email.verifyTitle')}\n </p>\n\n {/* Description */}\n <p className=\"volr:text-sm volr:mb-8 volr-text-secondary\">\n {t('login.email.verifyDescription', { email })}\n </p>\n\n {/* 6-Digit Input Boxes */}\n <div className=\"volr:flex volr:gap-3 volr:mb-6 volr:justify-center\">\n {digits.map((digit, index) => (\n <input\n key={index}\n ref={(el) => (inputRefs.current[index] = el)}\n type=\"text\"\n inputMode=\"numeric\"\n maxLength={1}\n value={digit}\n onChange={(e) => handleChange(index, e.target.value)}\n onKeyDown={(e) => handleKeyDown(index, e)}\n onPaste={index === 0 ? handlePaste : undefined}\n disabled={isLoading}\n className=\"volr:w-12 volr:h-14 volr:text-center volr:text-2xl volr:font-semibold volr:outline-none volr:transition-all volr:rounded-lg volr:disabled:cursor-not-allowed\"\n style={{\n border: `2px solid ${digit ? accentColor : 'var(--volr-border-strong)'}`,\n backgroundColor: isLoading ? 'var(--volr-bg-secondary)' : 'var(--volr-bg)',\n }}\n onFocus={(e) => {\n e.target.style.borderColor = accentColor;\n e.target.style.boxShadow = `0 0 0 3px ${accentColor}20`;\n }}\n onBlur={(e) => {\n if (!digit) {\n e.target.style.borderColor = 'var(--volr-border-strong)';\n }\n e.target.style.boxShadow = 'none';\n }}\n />\n ))}\n </div>\n\n {/* Error Message */}\n {error && (\n <div className=\"volr:mb-6 volr:p-3 volr:rounded-lg volr:border volr:text-sm volr:flex volr:items-start volr:gap-2 volr-error\">\n <ErrorIcon className=\"volr:shrink-0 volr:mt-0.5\" />\n <span>{error}</span>\n </div>\n )}\n\n {/* Resend Button */}\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"md\"\n fullWidth\n onClick={handleResend}\n disabled={isLoading}\n >\n {t('login.email.resend')}\n </Button>\n </div>\n );\n}\n","/**\n * SIWE (Sign-In with Ethereum) Login Screen Component\n * Supports both desktop (direct wallet connection) and mobile (sign.volr.io bridge)\n */\n\nimport { useState, useEffect, useCallback, useRef } from \"react\";\nimport { useI18n } from \"@/i18n/context\";\nimport {\n useVolrLogin,\n type KeyStorageType,\n type SignerType,\n} from \"@volr/react\";\nimport { Modal } from \"@/components/materials/modal\";\nimport { CopyButton } from \"@/components/materials/CopyButton\";\nimport { Button } from \"@/components/materials/Button\";\n\nexport interface SiweLoginScreenProps {\n isOpen?: boolean;\n wrapInModal?: boolean;\n onSuccess: (data: {\n userId: string;\n isNewUser: boolean;\n keyStorageType: KeyStorageType | null;\n signerType?: SignerType | null;\n }) => void;\n onBack: () => void;\n onError: (error: Error) => void;\n onClose?: () => void;\n}\n\n// EIP-6963 provider interface\ninterface EIP6963ProviderInfo {\n uuid: string;\n name: string;\n icon: string;\n rdns: string;\n}\n\ninterface EIP6963ProviderDetail {\n info: EIP6963ProviderInfo;\n provider: any;\n}\n\n// Detect if running on mobile\nconst isMobile = (): boolean => {\n if (typeof window === \"undefined\") return false;\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent\n );\n};\n\nexport function SiweLoginScreen({\n isOpen = true,\n wrapInModal = true,\n onSuccess,\n onBack,\n onError,\n onClose,\n}: SiweLoginScreenProps) {\n const { t } = useI18n();\n const {\n signWithWallet,\n createSiweSession,\n checkSiweSession,\n getSiweSignUrl,\n } = useVolrLogin();\n const [isLoading, setIsLoading] = useState(false);\n const [step, setStep] = useState<\"connect\" | \"sign\" | \"mobile-waiting\">(\"connect\");\n const [account, setAccount] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [hasWallet, setHasWallet] = useState<boolean | null>(null);\n const [providers, setProviders] = useState<EIP6963ProviderDetail[]>([]);\n const [isMobileDevice] = useState(isMobile());\n \n // Mobile session state\n const [mobileSessionUrl, setMobileSessionUrl] = useState<string | null>(null);\n const pollingRef = useRef<NodeJS.Timeout | null>(null);\n\n /**\n * Check if ethereum provider is available\n */\n const hasEthereumProvider = (): boolean => {\n return typeof window !== \"undefined\" && !!(window as any).ethereum;\n };\n\n // Cleanup polling on unmount\n useEffect(() => {\n return () => {\n if (pollingRef.current) {\n clearInterval(pollingRef.current);\n }\n };\n }, []);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n // EIP-6963: Listen for wallet provider announcements\n const handleAnnounceProvider = (event: any) => {\n const detail = event.detail as EIP6963ProviderDetail;\n setProviders((prev) => {\n if (prev.some((p) => p.info.uuid === detail.info.uuid)) {\n return prev;\n }\n return [...prev, detail];\n });\n setHasWallet(true);\n };\n\n window.addEventListener(\"eip6963:announceProvider\", handleAnnounceProvider);\n window.dispatchEvent(new Event(\"eip6963:requestProvider\"));\n\n // Check window.ethereum immediately\n const checkWallet = async () => {\n const walletAvailable =\n typeof window !== \"undefined\" && !!(window as any).ethereum;\n setHasWallet(walletAvailable);\n\n if (walletAvailable) {\n try {\n const accounts = await (window as any).ethereum.request({\n method: \"eth_accounts\",\n });\n if (accounts.length > 0) {\n setAccount(accounts[0]);\n setStep(\"sign\");\n }\n } catch {\n // Ignore errors\n }\n }\n };\n\n checkWallet();\n\n return () => {\n window.removeEventListener(\n \"eip6963:announceProvider\",\n handleAnnounceProvider\n );\n };\n }, []);\n\n // Get the best available provider\n const getProvider = (): any => {\n if (typeof window !== \"undefined\" && (window as any).ethereum) {\n return (window as any).ethereum;\n }\n if (providers.length > 0) {\n return providers[0].provider;\n }\n return null;\n };\n\n /**\n * Start mobile SIWE session with polling\n */\n const startMobileSession = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n const session = await createSiweSession();\n const url = getSiweSignUrl(session.id);\n \n setMobileSessionUrl(url);\n setStep(\"mobile-waiting\");\n\n // Start polling for session completion\n pollingRef.current = setInterval(async () => {\n try {\n const result = await checkSiweSession(session.id);\n \n if (result.status === \"completed\" && result.user) {\n // Clear polling\n if (pollingRef.current) {\n clearInterval(pollingRef.current);\n pollingRef.current = null;\n }\n \n // Success!\n onSuccess({\n userId: result.user.id,\n isNewUser: result.isNewUser || false,\n keyStorageType: (result.user.keyStorageType as KeyStorageType | undefined) ?? null,\n signerType: (result.user.signerType as SignerType | undefined) ?? null,\n });\n } else if (result.status === \"expired\") {\n // Session expired\n if (pollingRef.current) {\n clearInterval(pollingRef.current);\n pollingRef.current = null;\n }\n setError(t(\"siwe.sessionExpired\"));\n setStep(\"connect\");\n setMobileSessionUrl(null);\n }\n } catch {\n // Ignore polling errors, will retry\n }\n }, 3000); // Poll every 3 seconds\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to create session\");\n onError(err instanceof Error ? err : new Error(\"Failed to create session\"));\n } finally {\n setIsLoading(false);\n }\n }, [createSiweSession, getSiweSignUrl, checkSiweSession, onSuccess, onError, t]);\n\n /**\n * Desktop: Connect wallet directly\n */\n const handleConnectWallet = useCallback(async () => {\n setError(null);\n setIsLoading(true);\n\n try {\n const provider = getProvider();\n\n if (!provider) {\n throw new Error(t(\"siwe.noWalletFound\"));\n }\n\n setHasWallet(true);\n\n const accounts = await provider.request({\n method: \"eth_requestAccounts\",\n });\n\n if (accounts.length === 0) {\n throw new Error(\"No accounts found\");\n }\n\n setAccount(accounts[0]);\n setStep(\"sign\");\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : \"Failed to connect wallet\";\n setError(errorMessage);\n onError(err instanceof Error ? err : new Error(errorMessage));\n } finally {\n setIsLoading(false);\n }\n }, [t, onError]);\n\n /**\n * Desktop: Sign SIWE message using @volr/react hook\n */\n const handleSign = useCallback(async () => {\n if (!account) return;\n\n setError(null);\n setIsLoading(true);\n\n try {\n const result = await signWithWallet(account);\n\n onSuccess({\n userId: result.userId,\n isNewUser: result.isNewUser,\n keyStorageType: result.keyStorageType,\n signerType: result.signerType || null,\n });\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : \"Failed to sign message\";\n setError(errorMessage);\n onError(err instanceof Error ? err : new Error(errorMessage));\n } finally {\n setIsLoading(false);\n }\n }, [account, signWithWallet, onSuccess, onError]);\n\n /**\n * Copy URL to clipboard\n */\n const copyUrlToClipboard = useCallback(() => {\n if (mobileSessionUrl) {\n navigator.clipboard.writeText(mobileSessionUrl);\n alert(t(\"siwe.urlCopied\"));\n }\n }, [mobileSessionUrl, t]);\n\n const content = (\n <div className=\"volr:max-w-md volr:mx-auto\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onBack}\n className=\"volr:mb-4 volr:-ml-2\"\n >\n ← {t(\"common.back\")}\n </Button>\n\n <p className=\"volr:text-2xl volr:font-semibold volr:mb-5\">\n {t(\"login.wallet.title\")}\n </p>\n\n {/* Connected account display */}\n {account && step !== \"mobile-waiting\" && (\n <div className=\"volr:p-3 volr:rounded-lg volr:mb-6 volr:flex volr:items-center volr:justify-between volr-bg-secondary\">\n <div>\n <div className=\"volr:text-xs volr:mb-1 volr-text-secondary\">\n {t(\"login.wallet.connected\")}\n </div>\n <div className=\"volr:text-sm volr:font-medium volr:font-mono\">\n {account.slice(0, 6)}...{account.slice(-4)}\n </div>\n </div>\n <CopyButton text={account} />\n </div>\n )}\n\n {/* Error display */}\n {error && (\n <div className=\"volr:mb-4 volr:p-3 volr:border volr:rounded-lg volr:text-sm volr-error\">\n {error}\n </div>\n )}\n\n {/* Desktop: No wallet found message */}\n {hasWallet === false && !error && !isMobileDevice && step === \"connect\" && (\n <div className=\"volr:mb-4 volr:p-3 volr:border volr:rounded-lg volr:text-sm volr-text-secondary\">\n <p>{t(\"siwe.noWalletFound\")}</p>\n </div>\n )}\n\n {/* Mobile: Waiting for session completion */}\n {step === \"mobile-waiting\" && mobileSessionUrl && (\n <div className=\"volr:space-y-4\">\n <div className=\"volr:p-4 volr:border volr:rounded-lg volr:text-sm volr-bg-secondary\">\n <p className=\"volr:font-medium volr:mb-3\">{t(\"siwe.mobileGuide\")}</p>\n <ol className=\"volr:list-decimal volr:list-inside volr:space-y-1 volr:text-xs volr-text-secondary\">\n <li>{t(\"siwe.mobileStep1\")}</li>\n <li>{t(\"siwe.mobileStep2\")}</li>\n <li>{t(\"siwe.mobileStep3\")}</li>\n </ol>\n </div>\n \n {/* URL display */}\n <div className=\"volr:p-3 volr:border volr:rounded-lg volr:bg-slate-50\">\n <p className=\"volr:text-xs volr:text-muted-foreground volr:mb-1\">Sign URL:</p>\n <p className=\"volr:text-xs volr:font-mono volr:break-all volr:text-slate-600\">\n {mobileSessionUrl}\n </p>\n </div>\n\n <Button\n variant=\"primary\"\n fullWidth\n onClick={copyUrlToClipboard}\n >\n {t(\"siwe.copyUrl\")}\n </Button>\n\n <div className=\"volr:text-center volr:py-4\">\n <div className=\"volr:animate-spin volr:w-6 volr:h-6 volr:border-2 volr:border-slate-300 volr:border-t-slate-600 volr:rounded-full volr:mx-auto\" />\n <p className=\"volr:text-sm volr:text-muted-foreground volr:mt-3\">\n {t(\"siwe.waitingForSignature\")}\n </p>\n </div>\n\n <button\n onClick={() => {\n if (pollingRef.current) {\n clearInterval(pollingRef.current);\n pollingRef.current = null;\n }\n setStep(\"connect\");\n setMobileSessionUrl(null);\n }}\n className=\"volr:w-full volr:text-sm volr:text-slate-500 volr:underline\"\n >\n {t(\"common.cancel\")}\n </button>\n </div>\n )}\n\n {/* Mobile: Start session button (no wallet detected) */}\n {isMobileDevice && !hasEthereumProvider() && step === \"connect\" && (\n <Button\n variant=\"primary\"\n fullWidth\n onClick={startMobileSession}\n disabled={isLoading}\n >\n {isLoading ? t(\"common.loading\") : t(\"siwe.startMobileSession\")}\n </Button>\n )}\n\n {/* Desktop: Connect wallet button */}\n {!isMobileDevice && step === \"connect\" && (\n <Button\n variant=\"primary\"\n fullWidth\n onClick={handleConnectWallet}\n disabled={isLoading || hasWallet === null}\n >\n {isLoading || hasWallet === null\n ? t(\"common.loading\")\n : t(\"login.wallet.connect\")}\n </Button>\n )}\n\n {/* Mobile with wallet (in-app browser): Connect button */}\n {isMobileDevice && hasEthereumProvider() && step === \"connect\" && (\n <Button\n variant=\"primary\"\n fullWidth\n onClick={handleConnectWallet}\n disabled={isLoading}\n >\n {isLoading ? t(\"common.loading\") : t(\"login.wallet.connect\")}\n </Button>\n )}\n\n {/* Sign button */}\n {step === \"sign\" && (\n <Button\n variant=\"primary\"\n fullWidth\n onClick={handleSign}\n disabled={isLoading}\n >\n {isLoading ? t(\"common.loading\") : t(\"login.wallet.sign\")}\n </Button>\n )}\n </div>\n );\n\n if (!wrapInModal) {\n return content;\n }\n\n return (\n <Modal\n open={isOpen}\n onOpenChange={(open) => !open && (onClose?.() || onBack?.())}\n >\n <div className=\"max-w-md mx-auto\">\n <p className=\"volr:sr-only\">{t(\"login.wallet.title\")}</p>\n {content}\n </div>\n </Modal>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { useVolrContext, useVolrLogin, type SignerType } from \"@volr/react\";\nimport { useVolrUI } from \"@/providers/VolrUIProvider\";\nimport { Modal, ModalHeader } from \"@/components/materials/modal\";\nimport { SigninSelectScreen } from \"./SigninSelectScreen\";\nimport { CodeInputScreen } from \"./CodeInputScreen\";\nimport { SiweLoginScreen } from \"./SiweLoginScreen\";\nimport { PasskeyEnrollView } from \"../passkey/PasskeyEnrollView\";\nimport type { SigninMethod, SigninModalScreen } from \"@/types/signin\";\nimport { useMediaQuery } from \"@/hooks/useMediaQuery\";\n\nexport interface SigninModalProps {\n isOpen: boolean;\n onClose: () => void;\n onError?: (error: Error) => void;\n}\n\nexport function SigninModal({ isOpen, onClose, onError }: SigninModalProps) {\n const { logout, user } = useVolrContext();\n const { appName, branding } = useVolrUI();\n const { requestEmailCode, verifyEmailCode, handleSocialLogin } =\n useVolrLogin();\n\n const [currentScreen, setCurrentScreen] =\n useState<SigninModalScreen>(\"method-select\");\n const [email, setEmail] = useState(\"\");\n\n // Check if user already has passkey (for showing close button)\n const hasPasskey = user?.keyStorageType === \"passkey\";\n\n // Responsive layout: determine if current viewport is mobile\n const isMobile = useMediaQuery(\"(max-width: 500px)\");\n // Wide layout applies only when viewport is wide enough (>= 864px) AND branding is present\n const isWideViewport = useMediaQuery(\"(min-width: 864px)\");\n\n const shouldUseWideLayout =\n !isMobile &&\n isWideViewport &&\n Boolean(branding) &&\n currentScreen === \"method-select\";\n\n // Reset state when modal closes\n useEffect(() => {\n if (!isOpen) {\n // Reset to initial state when modal is closed\n setCurrentScreen(\"method-select\");\n setEmail(\"\");\n }\n }, [isOpen]);\n\n if (!isOpen) {\n return null;\n }\n\n const handleSelectMethod = (method: SigninMethod) => {\n if (method === \"siwe\") {\n setCurrentScreen(\"siwe-login\");\n } else if (\n method === \"google\" ||\n method === \"twitter\" ||\n method === \"apple\"\n ) {\n // Social login - uses handleSocialLogin from useVolrLogin hook\n handleSocialLogin(method);\n }\n // Note: 'email' is handled separately via onEmailSubmit\n };\n\n const handleEmailSubmit = async (emailValue: string) => {\n setEmail(emailValue);\n await requestEmailCode(emailValue);\n setCurrentScreen(\"code-input\");\n };\n\n const handleCodeSubmit = async (code: string) => {\n const result = await verifyEmailCode(email, code);\n\n // If user already has a key storage type, login is complete - close modal\n if (result.keyStorageType) {\n onClose();\n return;\n }\n\n // No key storage type means passkey setup is needed (regardless of isNewUser)\n setCurrentScreen(\"passkey-setup\");\n };\n\n const handleSiweSuccess = (_data: {\n userId: string;\n isNewUser: boolean;\n keyStorageType: \"passkey\" | \"mpc\" | null;\n signerType?: SignerType | null;\n }) => {\n // SIWE login complete - close modal\n // AccountModal will handle passkey enrollment if keyStorageType is not set\n onClose();\n };\n\n const handlePasskeyComplete = () => {\n // Passkey setup complete - close modal\n onClose();\n };\n\n const handlePasskeyError = (error: Error) => {\n if (onError) {\n onError(error);\n }\n // Stay on passkey setup screen to allow retry\n };\n\n const handleLogout = async () => {\n try {\n await logout();\n // Reset state and close modal\n setCurrentScreen(\"method-select\");\n setEmail(\"\");\n onClose();\n } catch (error) {\n if (onError) {\n onError(error instanceof Error ? error : new Error(\"Logout failed\"));\n }\n }\n };\n\n const handleBackdropClick = (_e: any) => {\n // Close modal when clicking outside, except during passkey setup (unless user already has passkey)\n if (currentScreen !== \"passkey-setup\" || hasPasskey) {\n // Reset state and close\n setCurrentScreen(\"method-select\");\n setEmail(\"\");\n onClose();\n }\n };\n\n const handleModalClose = () => {\n onClose();\n };\n\n // Render only the current screen\n const renderCurrentScreen = () => {\n switch (currentScreen) {\n case \"method-select\":\n return (\n <SigninSelectScreen\n key=\"method-select\"\n onClose={onClose}\n onSelectMethod={handleSelectMethod}\n onEmailSubmit={handleEmailSubmit}\n appName={appName}\n branding={shouldUseWideLayout ? branding : undefined}\n />\n );\n case \"code-input\":\n return (\n <>\n <ModalHeader\n back\n onBack={() => setCurrentScreen(\"method-select\")}\n onClose={onClose}\n />\n <CodeInputScreen\n key=\"code-input\"\n email={email}\n onSubmit={handleCodeSubmit}\n onBack={() => setCurrentScreen(\"method-select\")}\n onResend={() => requestEmailCode(email)}\n />\n </>\n );\n case \"siwe-login\":\n return (\n <SiweLoginScreen\n key=\"siwe-login\"\n wrapInModal={false}\n onSuccess={handleSiweSuccess}\n onBack={() => setCurrentScreen(\"method-select\")}\n onError={handlePasskeyError}\n />\n );\n case \"passkey-setup\":\n return (\n <PasskeyEnrollView\n key=\"passkey-setup\"\n wrapInModal={false}\n onComplete={handlePasskeyComplete}\n onError={handlePasskeyError}\n onLogout={handleLogout}\n onClose={onClose}\n />\n );\n default:\n return null;\n }\n };\n\n return (\n <Modal\n open={isOpen}\n onOpenChange={(open) => !open && handleModalClose()}\n onPointerDownOutside={(e) => {\n handleBackdropClick(e);\n }}\n onEscapeKeyDown={(e) => {\n if (currentScreen === \"passkey-setup\" && !hasPasskey) {\n e.preventDefault();\n }\n }}\n contentClassName={\n isMobile\n ? \"volr:max-w-none\"\n : shouldUseWideLayout\n ? \"volr:max-w-4xl volr:w-full volr:p-3\"\n : undefined\n }\n >\n {renderCurrentScreen()}\n\n <style>\n {`\n @keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n }\n `}\n </style>\n </Modal>\n );\n}\n","import { useState } from \"react\";\nimport { useVolrContext } from \"@volr/react\";\nimport { useI18n } from \"@/i18n/context\";\nimport { Modal, ModalHeader } from \"@/components/materials/modal\";\nimport { CopyButton } from \"@/components/materials/CopyButton\";\nimport { Button } from \"@/components/materials/Button\";\nimport { SigninModal } from \"../signin\";\nimport { PasskeyEnrollView } from \"../passkey/PasskeyEnrollView\";\n\nexport interface AccountModalProps {\n isOpen: boolean;\n onClose: () => void;\n onError?: (error: Error) => void;\n}\n\nexport function AccountModal({ isOpen, onClose, onError }: AccountModalProps) {\n const { user, logout } = useVolrContext();\n const { t } = useI18n();\n const [isLoggingOut, setIsLoggingOut] = useState(false);\n\n // If not logged in, show SigninModal\n if (!user) {\n return <SigninModal isOpen={isOpen} onClose={onClose} onError={onError} />;\n }\n\n // User is logged in but hasn't set up key storage yet - show passkey enrollment\n if (!user.keyStorageType) {\n const handlePasskeyComplete = () => {\n // Passkey setup complete - close modal\n onClose();\n };\n\n const handlePasskeyError = (error: Error) => {\n if (onError) {\n onError(error);\n }\n };\n\n const handleLogout = async () => {\n try {\n await logout();\n onClose();\n } catch (error) {\n if (onError) {\n onError(error instanceof Error ? error : new Error(\"Logout failed\"));\n }\n }\n };\n\n return (\n <Modal open={isOpen} onOpenChange={(open) => !open && onClose()}>\n <PasskeyEnrollView\n wrapInModal={false}\n onComplete={handlePasskeyComplete}\n onError={handlePasskeyError}\n onLogout={handleLogout}\n onClose={onClose}\n />\n </Modal>\n );\n }\n\n const handleLogout = async () => {\n setIsLoggingOut(true);\n try {\n await logout();\n onClose();\n } catch (error) {\n if (onError) {\n onError(error instanceof Error ? error : new Error(\"Logout failed\"));\n }\n } finally {\n setIsLoggingOut(false);\n }\n };\n\n const displayAddress = user.evmAddress\n ? `${user.evmAddress.slice(0, 6)}...${user.evmAddress.slice(-4)}`\n : null;\n\n return (\n <Modal open={isOpen} onOpenChange={(open) => !open && onClose()}>\n <ModalHeader onClose={onClose} />\n\n <div>\n {/* Title */}\n <p className=\"volr:text-xl volr:font-semibold volr:mb-4\">\n {t(\"account.title\")}\n </p>\n\n {/* Account Info Card */}\n <div className=\"volr:rounded-xl volr:p-4 volr:mb-4 volr-bg-secondary\">\n {/* Wallet Address */}\n {user.evmAddress && (\n <div className=\"volr:flex volr:items-center volr:justify-between volr:gap-3\">\n <div className=\"volr:flex-1 volr:min-w-0\">\n <p className=\"volr:text-xs volr:mb-1 volr-text-secondary\">\n {t(\"account.walletAddress\")}\n </p>\n <p className=\"volr:font-mono volr:text-sm volr:font-medium\">\n {displayAddress}\n </p>\n </div>\n <CopyButton\n text={user.evmAddress}\n className=\"volr:shrink-0\"\n />\n </div>\n )}\n\n {/* Email (if exists) */}\n {user.email && !user.email.includes(\"@wallet.\") && (\n <div className=\"volr:mt-4 volr:pt-4 volr:border-t volr-border\">\n <p className=\"volr:text-xs volr:mb-1 volr-text-secondary\">\n {t(\"account.email\")}\n </p>\n <p className=\"volr:text-sm volr:font-medium\">\n {user.email}\n </p>\n </div>\n )}\n </div>\n\n {/* Logout Button */}\n <Button\n variant=\"outline\"\n fullWidth\n onClick={handleLogout}\n disabled={isLoggingOut}\n >\n {isLoggingOut ? t(\"common.loading\") : t(\"account.logout\")}\n </Button>\n </div>\n </Modal>\n );\n}\n\n","import { useI18n } from \"@/i18n/context\";\nimport { cn } from \"@/lib/utils\";\n\ntype AssetConfig =\n | {\n chainId: number;\n token: \"native\";\n }\n | {\n chainId: number;\n token: {\n address: `0x${string}`;\n symbol: string;\n decimals: number;\n iconUrl?: string;\n };\n };\n\nexport function AssetSelectView({\n assets,\n onSelect,\n}: {\n assets: AssetConfig[];\n onSelect: (index: number) => void;\n}) {\n const { t } = useI18n();\n \n return (\n <div>\n {/* Title */}\n <p className=\"volr:text-xl volr:font-semibold volr:mb-1\">\n {t(\"deposit.selectTitle\")}\n </p>\n \n {/* Subtitle */}\n <p className=\"volr:text-sm volr:mb-4 volr-text-secondary\">\n Supported token\n </p>\n\n {/* Asset list */}\n <div className=\"volr:space-y-3\">\n {assets.map((a, idx) => {\n const isNative = a.token === \"native\";\n const tokenSymbol = isNative ? \"ETH\" : a.token.symbol;\n const tokenName = isNative ? \"Ethereum\" : a.token.symbol;\n \n return (\n <button\n key={`${a.chainId}-${idx}`}\n className={cn(\n \"volr:w-full volr:p-4 volr:rounded-xl volr:border-2\",\n \"volr:text-left volr:transition-all\",\n \"volr:flex volr:items-center volr:gap-4\",\n \"volr-border volr-hover\"\n )}\n onClick={() => onSelect(idx)}\n >\n {/* Token icon */}\n <div className=\"volr:shrink-0\">\n {!isNative && a.token.iconUrl ? (\n <img\n alt={a.token.symbol}\n src={a.token.iconUrl}\n className=\"volr:w-10 volr:h-10 volr:rounded-full volr:border volr-border\"\n />\n ) : (\n <div className=\"volr:w-10 volr:h-10 volr:rounded-full volr:flex volr:items-center volr:justify-center volr:text-white volr:font-bold volr:text-sm volr-bg-tertiary\">\n {tokenSymbol.slice(0, 2)}\n </div>\n )}\n </div>\n\n {/* Token info */}\n <div className=\"volr:flex-1 volr:min-w-0\">\n <div className=\"volr:flex volr:items-center volr:gap-2 volr:mb-1\">\n <span className=\"volr:text-base volr:font-semibold\">\n {tokenSymbol}\n </span>\n <span className=\"volr:text-xs volr:px-2 volr:py-0.5 volr:rounded-full volr:font-medium volr-bg-secondary volr-text-secondary\">\n Chain {a.chainId}\n </span>\n </div>\n <div className=\"volr:text-sm volr-text-secondary\">\n {tokenName}\n </div>\n {!isNative && (\n <div className=\"volr:text-xs volr:font-mono volr:truncate volr:mt-1 volr-text-muted\">\n {a.token.address}\n </div>\n )}\n </div>\n\n {/* Arrow icon */}\n <div className=\"volr:shrink-0 volr-text-muted\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </div>\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\n\n","import React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface TextLinkButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n showArrow?: boolean;\n children: React.ReactNode;\n}\n\nexport const TextLinkButton = React.forwardRef<\n HTMLButtonElement,\n TextLinkButtonProps\n>(({ showArrow = false, className, children, ...props }, ref) => {\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\n \"volr:underline volr:transition-colors volr-text-secondary\",\n className\n )}\n {...props}\n >\n {children}\n {showArrow && \" →\"}\n </button>\n );\n});\n\nTextLinkButton.displayName = \"TextLinkButton\";\n\n\n","import { Modal, ModalHeader } from \"@/components/materials/modal\";\n\nexport interface OtherTokenModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}\n\nexport const OtherTokenModal: React.FC<OtherTokenModalProps> = ({\n open,\n onOpenChange,\n}) => {\n return (\n <Modal open={open} onOpenChange={onOpenChange}>\n <ModalHeader onClose={() => onOpenChange(false)} />\n <div className=\"volr:text-center\">\n <p className=\"volr:text-lg volr:font-semibold volr:mb-2\">\n Coming Soon\n </p>\n <p className=\"volr:text-sm volr-text-secondary\">\n Swap and bridge recommendations will be available here soon.\n </p>\n </div>\n </Modal>\n );\n};\n","\n\ninterface DepositQRStatusOverlayProps {\n status: \"idle\" | \"listening\" | \"detected\" | \"error\";\n}\n\nexport const DepositQRStatusOverlay: React.FC<DepositQRStatusOverlayProps> = ({\n status,\n}) => {\n if (status !== \"detected\") return null;\n\n return (\n <>\n {/* Glow effect around the entire QR card */}\n <div \n className=\"volr:absolute volr:inset-0 volr:rounded-2xl volr:pointer-events-none\"\n style={{\n boxShadow: \"0 0 0 4px rgba(16, 185, 129, 0.3), 0 0 30px rgba(16, 185, 129, 0.4)\",\n animation: \"volrPulseGlow 1.5s ease-out infinite\",\n }}\n />\n\n {/* Animated gradient orbs behind QR - more visible */}\n <div className=\"volr:absolute volr:inset-0 volr:overflow-visible volr:pointer-events-none volr:-z-10\">\n {/* Orb 1 - emerald (larger and brighter) */}\n <div\n className=\"volr:absolute volr:w-48 volr:h-48 volr:rounded-full volr:opacity-0\"\n style={{\n background:\n \"radial-gradient(circle, rgba(16,185,129,0.7) 0%, rgba(16,185,129,0) 60%)\",\n filter: \"blur(50px)\",\n top: \"5%\",\n left: \"0%\",\n animation: \"volrGlowPulse 1.8s ease-out forwards\",\n }}\n />\n {/* Orb 2 - cyan */}\n <div\n className=\"volr:absolute volr:w-44 volr:h-44 volr:rounded-full volr:opacity-0\"\n style={{\n background:\n \"radial-gradient(circle, rgba(6,182,212,0.65) 0%, rgba(6,182,212,0) 60%)\",\n filter: \"blur(45px)\",\n bottom: \"10%\",\n right: \"-5%\",\n animation: \"volrGlowPulse 2s ease-out 0.1s forwards\",\n }}\n />\n {/* Orb 3 - teal */}\n <div\n className=\"volr:absolute volr:w-40 volr:h-40 volr:rounded-full volr:opacity-0\"\n style={{\n background:\n \"radial-gradient(circle, rgba(20,184,166,0.6) 0%, rgba(20,184,166,0) 60%)\",\n filter: \"blur(40px)\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n animation: \"volrGlowPulse 2.2s ease-out 0.2s forwards\",\n }}\n />\n </div>\n\n {/* Large check badge - more prominent */}\n <div \n className=\"volr:absolute volr:-top-3 volr:-right-3 volr:rounded-full volr:p-3 volr:bg-gradient-to-br volr:from-emerald-400 volr:to-teal-500 volr:shadow-2xl volr:shadow-emerald-500/50 volr:border-4 volr:border-white volr:z-20\"\n style={{\n animation: \"volrBounceIn 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55) forwards\",\n }}\n >\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"white\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n </div>\n\n {/* Confetti-like particles */}\n <div className=\"volr:absolute volr:inset-0 volr:pointer-events-none volr:overflow-visible\">\n {/* Particle 1 */}\n <div\n className=\"volr:absolute volr:w-2 volr:h-2 volr:bg-emerald-400 volr:rounded-full volr:opacity-0\"\n style={{\n top: \"20%\",\n left: \"20%\",\n animation: \"volrParticle1 1s ease-out forwards\",\n }}\n />\n {/* Particle 2 */}\n <div\n className=\"volr:absolute volr:w-1.5 volr:h-1.5 volr:bg-cyan-400 volr:rounded-full volr:opacity-0\"\n style={{\n top: \"30%\",\n right: \"25%\",\n animation: \"volrParticle2 1.2s ease-out 0.1s forwards\",\n }}\n />\n {/* Particle 3 */}\n <div\n className=\"volr:absolute volr:w-2 volr:h-2 volr:bg-teal-400 volr:rounded-full volr:opacity-0\"\n style={{\n bottom: \"25%\",\n left: \"30%\",\n animation: \"volrParticle3 1.1s ease-out 0.2s forwards\",\n }}\n />\n {/* Particle 4 */}\n <div\n className=\"volr:absolute volr:w-1.5 volr:h-1.5 volr:bg-emerald-300 volr:rounded-full volr:opacity-0\"\n style={{\n bottom: \"30%\",\n right: \"20%\",\n animation: \"volrParticle4 1.3s ease-out 0.15s forwards\",\n }}\n />\n </div>\n\n {/* Add keyframes to global styles */}\n <style>{`\n @keyframes volrGlowPulse {\n 0% {\n transform: scale(0.5);\n opacity: 0;\n }\n 40% {\n opacity: 1;\n }\n 100% {\n transform: scale(1.6);\n opacity: 0;\n }\n }\n @keyframes volrBounceIn {\n 0% {\n transform: scale(0);\n opacity: 0;\n }\n 50% {\n transform: scale(1.2);\n }\n 70% {\n transform: scale(0.9);\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n }\n @keyframes volrPulseGlow {\n 0%, 100% {\n opacity: 0.6;\n }\n 50% {\n opacity: 1;\n }\n }\n @keyframes volrParticle1 {\n 0% {\n transform: translate(0, 0) scale(0);\n opacity: 0;\n }\n 20% {\n opacity: 1;\n }\n 100% {\n transform: translate(-20px, -30px) scale(1);\n opacity: 0;\n }\n }\n @keyframes volrParticle2 {\n 0% {\n transform: translate(0, 0) scale(0);\n opacity: 0;\n }\n 20% {\n opacity: 1;\n }\n 100% {\n transform: translate(25px, -35px) scale(1);\n opacity: 0;\n }\n }\n @keyframes volrParticle3 {\n 0% {\n transform: translate(0, 0) scale(0);\n opacity: 0;\n }\n 20% {\n opacity: 1;\n }\n 100% {\n transform: translate(-30px, 25px) scale(1);\n opacity: 0;\n }\n }\n @keyframes volrParticle4 {\n 0% {\n transform: translate(0, 0) scale(0);\n opacity: 0;\n }\n 20% {\n opacity: 1;\n }\n 100% {\n transform: translate(30px, 30px) scale(1);\n opacity: 0;\n }\n }\n `}</style>\n </>\n );\n};\n\n","import React, { useState } from \"react\";\nimport { useI18n } from \"@/i18n/context\";\nimport { cn } from \"@/lib/utils\";\n\ninterface DepositCompletedToastProps {\n onClose: () => void;\n previousBalance: bigint;\n newBalance: bigint;\n delta: bigint;\n decimals: number;\n symbol: string;\n}\n\nexport const DepositCompletedToast: React.FC<DepositCompletedToastProps> = ({\n onClose,\n previousBalance,\n newBalance,\n delta,\n decimals,\n symbol,\n}) => {\n const { t } = useI18n();\n const [expanded, setExpanded] = useState(false);\n\n const formatAmount = (amount: bigint) => {\n const divisor = BigInt(10 ** decimals);\n const whole = amount / divisor;\n const fraction = amount % divisor;\n const fractionStr = fraction.toString().padStart(decimals, \"0\").slice(0, 4);\n // Remove trailing zeros from fraction\n const trimmedFraction = fractionStr.replace(/0+$/, \"\");\n return trimmedFraction ? `${whole}.${trimmedFraction}` : `${whole}`;\n };\n\n const formattedDelta = formatAmount(delta);\n\n return (\n <div\n className={cn(\n // Position: fixed to modal edges with negative margin to escape parent padding\n \"volr:absolute volr:bottom-0 volr:z-50\",\n \"volr:-left-4 volr:-right-4\",\n // Appearance: background with clear separation\n \"volr:rounded-t-2xl volr-surface\",\n // Border: top border for clear visual separation\n \"volr:border-t-2 volr-border-strong\",\n // Shadow: strong upward shadow for depth\n \"volr:shadow-[0_-8px_30px_rgba(0,0,0,0.2)]\",\n // Animation\n \"volr:transition-all volr:duration-300 volr:ease-out\",\n expanded ? \"volr:max-h-96\" : \"volr:max-h-36\"\n )}\n style={{\n animation: \"volrSlideUp 0.3s ease-out\",\n }}\n >\n {/* Top handle indicator */}\n <div className=\"volr:flex volr:justify-center volr:pt-3 volr:pb-2\">\n <div className=\"volr:w-10 volr:h-1 volr:rounded-full volr-bg-tertiary\" />\n </div>\n\n {/* Main toast content */}\n <div className=\"volr:px-4 volr:pb-4\">\n <div className=\"volr:flex volr:items-start volr:gap-3\">\n {/* Icon */}\n <div className=\"volr:shrink-0 volr:w-10 volr:h-10 volr:rounded-full volr:bg-gradient-to-br volr:from-emerald-500 volr:to-teal-500 volr:flex volr:items-center volr:justify-center volr:shadow-md\">\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"white\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n </div>\n\n {/* Content */}\n <div className=\"volr:flex-1 volr:min-w-0\">\n <div className=\"volr:flex volr:items-start volr:justify-between volr:gap-2 volr:mb-1\">\n <p className=\"volr:text-sm volr:font-semibold\">\n {t(\"deposit.completed\")}\n </p>\n <button\n onClick={onClose}\n className=\"volr:shrink-0 volr:w-6 volr:h-6 volr:flex volr:items-center volr:justify-center volr:rounded-full volr:transition-colors volr-bg-secondary volr-text-secondary volr-hover\"\n aria-label=\"Close\"\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </div>\n <p className=\"volr:text-sm volr:font-medium volr:mb-3\">\n {t(\"deposit.completedAmount\", { amount: formattedDelta, symbol })}\n </p>\n\n {/* Expanded details */}\n {expanded && (\n <div className=\"volr:space-y-2 volr:mb-3 volr:p-3 volr:rounded-lg volr:border volr:animate-[volrFadeIn_0.2s_ease-out] volr-bg-secondary volr-border\">\n <div className=\"volr:flex volr:justify-between volr:text-xs\">\n <span className=\"volr-text-secondary\">{t(\"deposit.amount\")}</span>\n <span className=\"volr:font-mono volr:text-emerald-600 volr:font-semibold\">\n +{formattedDelta} {symbol}\n </span>\n </div>\n <div className=\"volr:flex volr:justify-between volr:text-xs\">\n <span className=\"volr-text-secondary\">{t(\"deposit.previousBalance\")}</span>\n <span className=\"volr:font-mono volr-text-secondary\">\n {formatAmount(previousBalance)} {symbol}\n </span>\n </div>\n <div className=\"volr:flex volr:justify-between volr:text-xs volr:pt-2 volr:border-t volr-border\">\n <span className=\"volr-text-secondary\">{t(\"deposit.newBalance\")}</span>\n <span className=\"volr:font-mono volr:font-semibold\">\n {formatAmount(newBalance)} {symbol}\n </span>\n </div>\n </div>\n )}\n\n {/* See more / See less button */}\n <button\n onClick={() => setExpanded(!expanded)}\n className=\"volr:w-full volr:py-2.5 volr:text-xs volr:font-medium volr:rounded-lg volr:transition-colors volr:border volr-bg-secondary volr-text-secondary volr-border volr-hover\"\n >\n {expanded ? t(\"deposit.seeLess\") : t(\"deposit.seeMore\")}\n </button>\n </div>\n </div>\n </div>\n\n {/* Keyframes */}\n <style>{`\n @keyframes volrSlideUp {\n from {\n transform: translateY(100%);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n }\n @keyframes volrFadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n `}</style>\n </div>\n );\n};\n","import React from \"react\";\n\n/**\n * Skeleton component for Deposit Modal loading state.\n * Matches the layout of DepositQRView for seamless transition.\n */\nexport const DepositSkeleton: React.FC = () => {\n return (\n <div className=\"volr:animate-pulse\">\n {/* Header skeleton */}\n <div className=\"volr:mb-4\">\n {/* Title */}\n <div className=\"volr:h-7 volr:w-24 volr:rounded volr:mb-2 volr-bg-tertiary\" />\n {/* Token badge */}\n <div className=\"volr:h-8 volr:w-36 volr:rounded-lg volr-bg-secondary\" />\n </div>\n\n {/* QR Code skeleton */}\n <div className=\"volr:flex volr:justify-center volr:mb-3\">\n <div className=\"volr:rounded-xl volr:p-3 volr:border volr-bg-secondary volr-border\">\n <div className=\"volr:w-[200px] volr:h-[200px] volr:rounded-lg volr-bg-tertiary\" />\n </div>\n </div>\n\n {/* Status indicator skeleton */}\n <div className=\"volr:flex volr:items-center volr:justify-center volr:gap-2 volr:mb-3\">\n <div className=\"volr:w-1.5 volr:h-1.5 volr:rounded-full volr-bg-tertiary\" />\n <div className=\"volr:h-3 volr:w-32 volr:rounded volr-bg-tertiary\" />\n </div>\n\n {/* Address section skeleton */}\n <div className=\"volr:space-y-3\">\n <div className=\"volr:border volr:rounded-lg volr:p-3 volr-bg-secondary volr-border\">\n <div className=\"volr:flex volr:items-center volr:justify-center\">\n <div className=\"volr:h-4 volr:w-48 volr:rounded volr-bg-tertiary\" />\n </div>\n </div>\n </div>\n\n {/* Other token prompt skeleton */}\n <div className=\"volr:text-center volr:pt-3 volr:border-t volr:mt-3 volr-border\">\n <div className=\"volr:h-3 volr:w-44 volr:rounded volr:mx-auto volr-bg-secondary\" />\n </div>\n </div>\n );\n};\n\n","import { useCallback, useEffect, useState } from \"react\";\nimport { useI18n } from \"@/i18n/context\";\nimport {\n useDepositListener,\n useVolrContext,\n useInternalAuth,\n createGetNetworkInfo,\n type Erc20Token,\n} from \"@volr/react\";\nimport { CopyButton } from \"@/components/materials/CopyButton\";\nimport { TextLinkButton } from \"@/components/materials/TextLinkButton\";\nimport { OtherTokenModal } from \"./OtherTokenModal\";\nimport { DepositQRStatusOverlay, DepositCompletedToast } from \"../components\";\n\ninterface DepositQRViewProps {\n chainId: number;\n asset: \"native\" | Erc20Token;\n address: `0x${string}`;\n onBack?: () => void;\n}\n\ninterface DepositToastData {\n previousBalance: bigint;\n newBalance: bigint;\n delta: bigint;\n}\n\nexport function DepositQRView(props: DepositQRViewProps) {\n const { t } = useI18n();\n const { config } = useVolrContext();\n const { client } = useInternalAuth();\n const [chainName, setChainName] = useState<string | null>(null);\n const [showOtherTokenModal, setShowOtherTokenModal] = useState(false);\n const [showToast, setShowToast] = useState(false);\n const [toastData, setToastData] = useState<DepositToastData | null>(null);\n\n // Simple EIP-681 address string (no amount)\n const eip681 = `ethereum:${props.address}`;\n\n const status = useDepositListener({\n chainId: props.chainId,\n asset:\n props.asset === \"native\"\n ? { kind: \"native\" }\n : {\n kind: \"erc20\",\n token: {\n address: props.asset.address,\n decimals: props.asset.decimals,\n },\n },\n address: props.address,\n });\n\n // Show toast when deposit is detected - capture data so toast persists\n useEffect(() => {\n if (status.state === \"detected\") {\n setToastData({\n previousBalance: status.previousBalance,\n newBalance: status.newBalance,\n delta: status.delta,\n });\n setShowToast(true);\n }\n }, [status]);\n\n // Get network info resolver\n const getNetworkInfo = useCallback(\n createGetNetworkInfo({ client, rpcOverrides: config.rpcOverrides }),\n [client, config.rpcOverrides]\n );\n\n // Load chain name\n useEffect(() => {\n let cancelled = false;\n\n const loadChainName = async () => {\n try {\n const info = await getNetworkInfo(props.chainId, false);\n if (!cancelled) {\n setChainName(info.name);\n }\n } catch (error) {\n if (!cancelled) {\n // Fallback to chain ID if error\n setChainName(`Chain ${props.chainId}`);\n }\n }\n };\n\n loadChainName();\n\n return () => {\n cancelled = true;\n };\n }, [getNetworkInfo, props.chainId]);\n\n const tokenSymbol = props.asset === \"native\" ? \"ETH\" : props.asset.symbol;\n const displayChainName = chainName || `Chain ${props.chainId}`;\n const decimals = props.asset === \"native\" ? 18 : props.asset.decimals;\n\n return (\n <div className=\"volr:relative\">\n {/* Header */}\n <div className=\"volr:mb-4\">\n <p className=\"volr:text-xl volr:font-semibold volr:mb-2\">\n {t(\"deposit.qrTitle\")}\n </p>\n\n {/* Token info badge */}\n <div className=\"volr:inline-flex volr:items-center volr:gap-2 volr:px-3 volr:py-1.5 volr:rounded-lg volr-bg-secondary\">\n <span className=\"volr:text-sm volr:font-medium\">\n {tokenSymbol}\n </span>\n <span className=\"volr-text-muted\">•</span>\n <span className=\"volr:text-sm volr-text-secondary\">\n {displayChainName}\n </span>\n </div>\n </div>\n\n {/* QR Code - modern style */}\n <div className=\"volr:flex volr:justify-center volr:mb-3\">\n <div className=\"volr:relative\">\n <div className=\"volr:relative volr:rounded-xl volr:p-4 volr:shadow-sm volr:border volr:z-10 volr:bg-white volr-border\">\n <img\n alt=\"Deposit QR\"\n width={200}\n height={200}\n src={`https://api.qrserver.com/v1/create-qr-code/?size=200x200&data=${encodeURIComponent(\n eip681\n )}`}\n className=\"volr:rounded-md volr:relative volr:z-10\"\n />\n </div>\n\n <DepositQRStatusOverlay status={status.state} />\n </div>\n </div>\n\n {/* Status indicator - show same UI for idle and listening */}\n {(status.state === \"listening\" || status.state === \"idle\") && (\n <div className=\"volr:flex volr:items-center volr:justify-center volr:gap-2 volr:mb-3\">\n <div className=\"volr:w-1.5 volr:h-1.5 volr:rounded-full volr:animate-pulse volr-text-secondary\" style={{ backgroundColor: 'currentColor' }} />\n <span className=\"volr:text-xs volr-text-secondary\">\n {t(\"deposit.listening\")}\n </span>\n </div>\n )}\n\n {status.state === \"error\" && (\n <div className=\"volr:text-xs volr:text-center volr:mb-3 volr-error\">\n Error: {status.message}\n </div>\n )}\n\n {/* Address section */}\n <div className=\"volr:space-y-3\">\n <div>\n <div className=\"volr:relative volr:border volr:rounded-lg volr:p-3 volr:transition-all volr-bg-secondary volr-border volr-hover\">\n <div className=\"volr:flex volr:items-center volr:justify-between volr:gap-3\">\n <p className=\"volr:font-mono volr:text-xs volr:font-medium volr:flex-1 volr:text-center\">\n {`${props.address.slice(0, 10)}...${props.address.slice(-8)}`}\n </p>\n <CopyButton\n text={props.address}\n className=\"volr:shrink-0 volr:absolute volr:right-2\"\n />\n </div>\n </div>\n </div>\n\n {/* Error message - separate and subtle */}\n {status.state === \"error\" && (\n <div className=\"volr:text-xs volr:text-center volr:mb-4 volr-error\">\n {status.message}\n </div>\n )}\n </div>\n\n {/* Other token prompt */}\n <div className=\"volr:text-center volr:pt-3 volr:border-t volr-border\">\n <span className=\"volr:text-xs volr-text-secondary\">\n {t(\"deposit.noToken\")}{\" \"}\n <TextLinkButton\n onClick={() => setShowOtherTokenModal(true)}\n showArrow\n >\n {t(\"deposit.getOtherToken\")}\n </TextLinkButton>\n </span>\n </div>\n\n {/* Other Token Modal */}\n <OtherTokenModal\n open={showOtherTokenModal}\n onOpenChange={setShowOtherTokenModal}\n />\n\n {/* Deposit Completed Toast - persists until user closes it */}\n {showToast && toastData && (\n <DepositCompletedToast\n onClose={() => {\n setShowToast(false);\n setToastData(null);\n }}\n previousBalance={toastData.previousBalance}\n newBalance={toastData.newBalance}\n delta={toastData.delta}\n decimals={decimals}\n symbol={tokenSymbol}\n />\n )}\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport { Modal, ModalHeader } from \"@/components/materials/modal\";\nimport {\n useVolrContext,\n useInternalAuth,\n type DepositAsset,\n} from \"@volr/react\";\nimport { AssetSelectView } from \"./views/AssetSelectView\";\nimport { DepositQRView } from \"./views/DepositQRView\";\nimport { DepositSkeleton } from \"./components\";\nimport type { ModalAsset } from \"@/hooks/useVolrModal\";\n\nexport interface DepositModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n asset?: ModalAsset | null;\n}\n\ninterface DepositModalBodyProps {\n isLoading: boolean;\n error: string | null;\n depositAssets: DepositAsset[];\n evmAddress: `0x${string}` | undefined;\n selectedIdx: number;\n onSelectIdx: (idx: number) => void;\n}\n\nfunction DepositModalBody({\n isLoading,\n error,\n depositAssets,\n evmAddress,\n selectedIdx,\n onSelectIdx,\n}: DepositModalBodyProps) {\n // Show skeleton during loading\n if (isLoading) return <DepositSkeleton />;\n\n // Show error with skeleton background\n if (error) {\n return (\n <div className=\"volr:relative\">\n <DepositSkeleton />\n <div className=\"volr:absolute volr:inset-0 volr:flex volr:items-center volr:justify-center volr-surface\" style={{ opacity: 0.9 }}>\n <p className=\"volr:text-sm volr:text-center volr:px-4 volr-error\">\n {error}\n </p>\n </div>\n </div>\n );\n }\n\n // Show \"no assets\" error with skeleton background\n if (depositAssets.length === 0) {\n return (\n <div className=\"volr:relative\">\n <DepositSkeleton />\n <div className=\"volr:absolute volr:inset-0 volr:flex volr:items-center volr:justify-center volr-surface\" style={{ opacity: 0.9 }}>\n <p className=\"volr:text-sm volr:text-center volr:px-4 volr-text-secondary\">\n No payment token configured. Please contact the app developer.\n </p>\n </div>\n </div>\n );\n }\n\n // Show \"wallet not ready\" error with skeleton background\n if (!evmAddress) {\n return (\n <div className=\"volr:relative\">\n <DepositSkeleton />\n <div className=\"volr:absolute volr:inset-0 volr:flex volr:items-center volr:justify-center volr-surface\" style={{ opacity: 0.9 }}>\n <p className=\"volr:text-sm volr:text-center volr:px-4 volr-text-secondary\">\n Wallet address is not ready. Please finish wallet setup first.\n </p>\n </div>\n </div>\n );\n }\n\n // Single asset: show QR directly\n if (depositAssets.length === 1) {\n return (\n <DepositQRView\n chainId={depositAssets[0].chainId}\n asset={depositAssets[0].token}\n address={evmAddress}\n onBack={undefined}\n />\n );\n }\n\n // Multiple assets: show selector or selected QR\n if (selectedIdx === -1) {\n return (\n <AssetSelectView\n assets={depositAssets}\n onSelect={(idx) => onSelectIdx(idx)}\n />\n );\n }\n\n const selected = depositAssets[selectedIdx];\n return (\n <DepositQRView\n chainId={selected.chainId}\n asset={selected.token}\n address={evmAddress}\n onBack={() => onSelectIdx(-1)}\n />\n );\n}\n\nexport const DepositModal: React.FC<DepositModalProps> = ({\n open,\n onOpenChange,\n asset,\n}) => {\n const { user } = useVolrContext();\n const { client } = useInternalAuth();\n\n const [depositAssets, setDepositAssets] = useState<DepositAsset[]>([]);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [selectedIdx, setSelectedIdx] = useState<number>(-1);\n\n // Fetch deposit assets from branding API\n useEffect(() => {\n if (!open) return;\n\n setIsLoading(true);\n setError(null);\n\n client\n .get<{ depositAssets: DepositAsset[] }>(\"/auth/branding\")\n .then((response) => {\n setDepositAssets(response.depositAssets ?? []);\n })\n .catch((err) => {\n console.error(\"Failed to fetch deposit assets:\", err);\n setError(\"Failed to load deposit options\");\n })\n .finally(() => {\n setIsLoading(false);\n });\n }, [open, client]);\n\n // Find matching asset index if asset prop is provided\n const findAssetIndex = (\n targetAsset: ModalAsset | null | undefined\n ): number => {\n if (!targetAsset) return -1;\n return depositAssets.findIndex(\n (a) =>\n a.chainId === targetAsset.chainId &&\n (a.token === \"native\"\n ? targetAsset.symbol.toUpperCase() === \"ETH\"\n : a.token.symbol.toUpperCase() === targetAsset.symbol.toUpperCase())\n );\n };\n\n const getInitialIndex = (): number => {\n if (asset) {\n const idx = findAssetIndex(asset);\n if (idx >= 0) return idx;\n }\n if (depositAssets.length === 1) return 0;\n return -1;\n };\n\n // Update selected index when assets are loaded or asset prop changes\n useEffect(() => {\n if (open && !isLoading && depositAssets.length > 0) {\n setSelectedIdx(getInitialIndex());\n }\n }, [open, isLoading, depositAssets.length, asset]);\n\n // Reset selection when modal closes\n useEffect(() => {\n if (!open) {\n setSelectedIdx(-1);\n }\n }, [open]);\n\n const hasAssets = depositAssets.length > 0;\n const showQR = hasAssets && user?.evmAddress && selectedIdx >= 0;\n\n return (\n <Modal open={open} onOpenChange={onOpenChange}>\n <ModalHeader\n back={showQR && depositAssets.length > 1}\n onBack={showQR ? () => setSelectedIdx(-1) : undefined}\n onClose={() => onOpenChange(false)}\n />\n <DepositModalBody\n isLoading={isLoading}\n error={error}\n depositAssets={depositAssets}\n evmAddress={user?.evmAddress}\n selectedIdx={selectedIdx}\n onSelectIdx={setSelectedIdx}\n />\n </Modal>\n );\n};\n","import React, { useState, useEffect, useContext } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n VolrProvider,\n type VolrConfig,\n useVolrContext,\n useVolrAuthCallback,\n type KeyStorageType,\n} from \"@volr/react\";\nimport { I18nProvider } from \"@/i18n/context\";\nimport { VolrModalProvider, useVolrModal } from \"@/hooks/useVolrModal\";\nimport { Modal } from \"@/components/materials/modal\";\nimport { PasskeyEnrollView } from \"@/components/features/passkey/PasskeyEnrollView\";\nimport { MpcConnectView } from \"@/components/features/MpcConnectView\";\nimport { AccountModal } from \"@/components/features/account\";\nimport { DepositModal } from \"@/components/features/deposit\";\nimport type { BrandingConfig } from \"@/types/signin\";\n\n/**\n * Theme options for Volr SDK\n * - 'light': Always use light mode\n * - 'dark': Always use dark mode\n * - 'system': Follow user's system preference (prefers-color-scheme)\n */\nexport type VolrTheme = \"light\" | \"dark\" | \"system\";\n\n/**\n * UI 전용 설정을 포함한 Volr UI 구성 객체\n * - VolrConfig(코어 설정)를 확장하고\n * - UI/온보딩 관련 옵션을 모두 하나의 config 아래로 모읍니다.\n */\nexport interface VolrUIConfig extends VolrConfig {\n appName: string;\n accentColor?: string;\n /** Theme mode: 'light' | 'dark' | 'system'. Default: 'light' */\n theme?: VolrTheme;\n enabledLoginMethods?: (\"email\" | \"social\" | \"siwe\")[];\n // socialProviders?: (\"google\" | \"twitter\" | \"apple\")[];\n socialProviders?: (\"google\" | \"twitter\")[];\n branding?: BrandingConfig;\n keyStorageType?: KeyStorageType;\n}\n\nexport interface VolrUIProviderProps {\n config: VolrUIConfig;\n children: React.ReactNode;\n}\n\nconst VolrUIContext = React.createContext<{\n accentColor: string;\n appName: string;\n theme: VolrTheme;\n enabledLoginMethods?: (\"email\" | \"social\" | \"siwe\")[];\n socialProviders?: (\"google\" | \"twitter\" | \"apple\")[];\n branding?: BrandingConfig;\n keyStorageType?: KeyStorageType;\n} | null>(null);\n\nexport const useVolrUI = () => {\n const context = useContext(VolrUIContext);\n if (!context) {\n throw new Error(\"useVolrUI must be used within VolrUIProvider\");\n }\n return context;\n};\n\n/**\n * Optional version of useVolrUI that returns null instead of throwing\n * Useful for components that may be used outside VolrUIProvider\n */\nexport const useVolrUIOptional = () => {\n return useContext(VolrUIContext);\n};\n\n/**\n * Onboarding flow component\n * Handles provider enrollment based on config\n */\nfunction OnboardingFlow({\n keyStorageType,\n onComplete,\n}: {\n keyStorageType: KeyStorageType;\n onComplete: () => void;\n}) {\n const { logout } = useVolrContext();\n\n const handleEnrollComplete = () => {\n onComplete();\n };\n\n const handleEnrollError = (_err: Error) => {\n // On error, stay on screen to allow retry\n };\n\n const handleLogout = async () => {\n try {\n await logout();\n onComplete();\n } catch (error) {\n // Error handling is done by PasskeyEnrollView\n }\n };\n\n if (keyStorageType === \"passkey\") {\n return (\n <PasskeyEnrollView\n onComplete={handleEnrollComplete}\n onError={handleEnrollError}\n onLogout={handleLogout}\n />\n );\n }\n\n if (keyStorageType === \"mpc\") {\n return (\n <MpcConnectView\n onComplete={handleEnrollComplete}\n onError={handleEnrollError}\n />\n );\n }\n\n return null;\n}\n\nexport const VolrUIProvider: React.FC<VolrUIProviderProps> = ({\n config,\n children,\n}) => {\n const {\n appName,\n accentColor = \"#303030\",\n theme = \"light\",\n enabledLoginMethods = [\"email\", \"social\", \"siwe\"],\n socialProviders = [\"google\", \"twitter\"],\n branding,\n keyStorageType = \"passkey\",\n } = config;\n\n const providerPolicy = config.providerPolicy ?? {\n enforceOnFirstLogin: true,\n };\n\n const [showOnboarding, setShowOnboarding] = useState(false);\n const [keyStorageTypeError, setKeyStorageTypeError] = useState<string | null>(\n null\n );\n\n useEffect(() => {\n if (providerPolicy.enforceOnFirstLogin !== false && !keyStorageType) {\n const errorMessage =\n \"keyStorageType must be specified in VolrUIProvider props. Please set keyStorageType prop in VolrUIProvider.\";\n console.error(errorMessage);\n setKeyStorageTypeError(errorMessage);\n } else {\n setKeyStorageTypeError(null);\n }\n }, [keyStorageType, providerPolicy.enforceOnFirstLogin]);\n\n if (keyStorageTypeError) {\n return (\n <Modal open={true} onOpenChange={() => {}}>\n <div className=\"volr:max-w-md volr:mx-auto\">\n <p className=\"volr:text-lg volr:font-semibold volr:mb-5 volr-error\">\n Configuration Error\n </p>\n <div className=\"volr:text-sm volr:mb-6 volr:leading-relaxed volr-text-secondary\">\n {keyStorageTypeError}\n </div>\n </div>\n </Modal>\n );\n }\n\n return (\n <VolrProvider config={config}>\n <I18nProvider>\n <VolrUIContext.Provider\n value={{\n accentColor,\n appName,\n theme,\n enabledLoginMethods,\n socialProviders,\n branding,\n keyStorageType,\n }}\n >\n <VolrModalProvider>\n <OAuthCallbackHandler\n onShowOnboarding={() => setShowOnboarding(true)}\n />\n <OnboardingChecker\n keyStorageType={keyStorageType}\n enforceSelection={providerPolicy.enforceOnFirstLogin ?? true}\n onShowOnboarding={() => setShowOnboarding(true)}\n onHideOnboarding={() => setShowOnboarding(false)}\n />\n <AccountModalPortal />\n <DepositModalPortal />\n {showOnboarding && keyStorageType && (\n <Modal\n open={true}\n onOpenChange={() => setShowOnboarding(false)}\n onPointerDownOutside={(e: React.PointerEvent) =>\n e.preventDefault()\n }\n >\n <div className=\"max-w-md mx-auto\">\n <p className=\"volr:sr-only\">Onboarding</p>\n <OnboardingFlow\n keyStorageType={keyStorageType}\n onComplete={() => setShowOnboarding(false)}\n />\n </div>\n </Modal>\n )}\n {children}\n </VolrModalProvider>\n </VolrUIContext.Provider>\n </I18nProvider>\n </VolrProvider>\n );\n};\n\n/**\n * Account Modal via portal (handles both login and account info)\n */\nfunction AccountModalPortal() {\n const { isOpen, mode, close } = useVolrModal();\n const [portalRoot, setPortalRoot] = useState<HTMLElement | null>(null);\n const [error, setError] = useState<Error | null>(null);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n let root = document.getElementById(\"volr-modal-root\");\n if (!root) {\n root = document.createElement(\"div\");\n root.id = \"volr-modal-root\";\n document.body.appendChild(root);\n }\n setPortalRoot(root);\n\n return () => {\n if (root && root.childNodes.length === 0) {\n root.remove();\n }\n };\n }, []);\n\n const handleClose = () => {\n setError(null);\n close();\n };\n\n const handleError = (err: Error) => {\n console.error(\"[AccountModal] Error:\", err);\n setError(err);\n };\n\n if (!portalRoot) return null;\n\n return createPortal(\n <>\n <AccountModal\n isOpen={isOpen && mode === \"account\"}\n onClose={handleClose}\n onError={handleError}\n />\n {error && (\n <div\n style={{\n position: \"fixed\",\n bottom: \"20px\",\n right: \"20px\",\n backgroundColor: \"#fef2f2\",\n border: \"1px solid #fecaca\",\n borderRadius: \"8px\",\n padding: \"12px 16px\",\n maxWidth: \"400px\",\n boxShadow: \"0 10px 15px -3px rgba(0, 0, 0, 0.1)\",\n zIndex: 10001,\n }}\n >\n <div style={{ fontSize: \"14px\", color: \"#991b1b\" }}>\n {error.message}\n </div>\n </div>\n )}\n </>,\n portalRoot\n );\n}\n\n/**\n * Deposit Modal via portal\n * If user is not logged in, shows login first then redirects to deposit\n */\nfunction DepositModalPortal() {\n const { isOpen, mode, asset, close } = useVolrModal();\n const { user } = useVolrContext();\n const [portalRoot, setPortalRoot] = useState<HTMLElement | null>(null);\n const [showLogin, setShowLogin] = useState(false);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n let root = document.getElementById(\"volr-modal-root\");\n if (!root) {\n root = document.createElement(\"div\");\n root.id = \"volr-modal-root\";\n document.body.appendChild(root);\n }\n setPortalRoot(root);\n return () => {\n if (root && root.childNodes.length === 0) {\n root.remove();\n }\n };\n }, []);\n\n // When deposit mode is opened without login, show login first\n useEffect(() => {\n if (isOpen && mode === \"deposit\" && !user) {\n setShowLogin(true);\n } else {\n setShowLogin(false);\n }\n }, [isOpen, mode, user]);\n\n // After login success, user state will update and showLogin will become false\n // This will automatically show the deposit modal\n\n if (!portalRoot) return null;\n\n // Show login modal if user needs to log in first\n if (showLogin) {\n return createPortal(\n <AccountModal\n isOpen={isOpen && mode === \"deposit\"}\n onClose={close}\n />,\n portalRoot\n );\n }\n\n return createPortal(\n <DepositModal\n open={isOpen && mode === \"deposit\"}\n onOpenChange={(open) => !open && close()}\n asset={asset}\n />,\n portalRoot\n );\n}\n\n/**\n * OAuth Callback Handler\n * Automatically processes OAuth callback when URL contains 'code' parameter\n */\nfunction OAuthCallbackHandler({\n onShowOnboarding,\n}: {\n onShowOnboarding: () => void;\n}) {\n const [hasCode, setHasCode] = useState(false);\n\n // Check if URL has OAuth callback code\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n const params = new URLSearchParams(window.location.search);\n const code = params.get(\"code\");\n // Only process if code looks like Volr auth code\n if (code?.startsWith(\"volr_auth_\")) {\n setHasCode(true);\n }\n }, []);\n\n // Use callback hook only when we have a code\n const { isLoading, error } = useVolrAuthCallback({\n onSuccess: (resultUser) => {\n console.log(\"[OAuthCallbackHandler] Login successful:\", resultUser.email);\n // If user doesn't have keyStorageType, show onboarding\n if (!resultUser.keyStorageType) {\n onShowOnboarding();\n }\n },\n onError: (err) => {\n console.error(\"[OAuthCallbackHandler] Login failed:\", err);\n },\n });\n\n // Don't render anything if no code in URL\n if (!hasCode) return null;\n\n // Show loading state while processing\n if (isLoading) {\n return (\n <Modal open={true} onOpenChange={() => {}}>\n <div className=\"volr:max-w-md volr:mx-auto volr:text-center volr:py-8\">\n <div className=\"volr:animate-spin volr:w-8 volr:h-8 volr:border-2 volr-border-strong volr:rounded-full volr:mx-auto volr:mb-4\" style={{ borderTopColor: 'var(--volr-text)' }} />\n <p className=\"volr-text-secondary\">Completing login...</p>\n </div>\n </Modal>\n );\n }\n\n // Show error if any\n if (error) {\n return (\n <Modal open={true} onOpenChange={() => setHasCode(false)}>\n <div className=\"volr:max-w-md volr:mx-auto volr:text-center volr:py-8\">\n <p className=\"volr:font-medium volr:mb-2 volr-error\">Login Failed</p>\n <p className=\"volr:text-sm volr-text-secondary\">{error}</p>\n </div>\n </Modal>\n );\n }\n\n return null;\n}\n\n/**\n * Component that checks if onboarding is needed\n * Note: Only shows onboarding on initial app load, NOT after modal interactions.\n * AccountModal handles passkey enrollment after login, so OnboardingChecker\n * should not interfere when modals are used.\n */\nfunction OnboardingChecker({\n keyStorageType,\n enforceSelection,\n onShowOnboarding,\n onHideOnboarding,\n}: {\n keyStorageType: KeyStorageType;\n enforceSelection: boolean;\n onShowOnboarding: () => void;\n onHideOnboarding: () => void;\n}) {\n const { user, provider, isLoading } = useVolrContext();\n const { isOpen: isModalOpen } = useVolrModal();\n const modalWasOpened = React.useRef(false);\n\n // Track if modal was ever opened\n useEffect(() => {\n if (isModalOpen) {\n modalWasOpened.current = true;\n }\n }, [isModalOpen]);\n\n useEffect(() => {\n if (isLoading) {\n return;\n }\n\n // Don't show onboarding while any modal is open\n if (isModalOpen) {\n onHideOnboarding();\n return;\n }\n\n // Don't show onboarding if modal was opened and then closed\n // AccountModal already handles passkey enrollment after login\n if (modalWasOpened.current) {\n onHideOnboarding();\n return;\n }\n\n // User already has keyStorageType - no onboarding needed\n if (user?.keyStorageType) {\n onHideOnboarding();\n return;\n }\n\n // Provider is already set - no onboarding needed\n if (provider) {\n onHideOnboarding();\n return;\n }\n\n // Only show onboarding on initial load when user exists without keyStorageType\n if (user && enforceSelection) {\n if (!keyStorageType) {\n console.error(\n \"keyStorageType must be specified in VolrUIProvider props.\"\n );\n return;\n }\n onShowOnboarding();\n }\n }, [\n user,\n provider,\n isLoading,\n isModalOpen,\n enforceSelection,\n keyStorageType,\n onShowOnboarding,\n onHideOnboarding,\n ]);\n\n return null;\n}\n","/**\n * Network switching utilities for external wallets\n */\n\nimport { useCallback } from \"react\";\nimport { useInternalAuth } from \"@volr/react\";\n\n/**\n * Network wallet configuration from backend API\n * (when includeWalletConfig=true)\n */\nexport interface NetworkWalletConfig {\n chainId: number;\n name: string;\n nativeCurrency?: {\n name: string;\n symbol: string;\n decimals: number;\n };\n rpcUrl?: string;\n blockExplorerUrl?: string | null;\n}\n\n/**\n * Hook to switch to a different network\n * Handles both switching and adding network if not present\n * Fetches network configuration from backend DB\n */\nexport function useSwitchNetwork() {\n const { client } = useInternalAuth();\n\n return useCallback(\n async (chainId: number): Promise<void> => {\n if (typeof window === \"undefined\" || !(window as any).ethereum) {\n throw new Error(\"No wallet found\");\n }\n\n const ethereum = (window as any).ethereum;\n const chainIdHex = `0x${chainId.toString(16)}`;\n\n try {\n // Try to switch to the network\n await ethereum.request({\n method: \"wallet_switchEthereumChain\",\n params: [{ chainId: chainIdHex }],\n });\n } catch (switchError: any) {\n // This error code indicates that the chain has not been added to the wallet\n if (switchError.code === 4902) {\n try {\n // Fetch network configuration from backend DB\n const response = await client.get<NetworkWalletConfig>(\n `/networks/${chainId}?includeWalletConfig=true&includeRpcUrl=true`\n );\n\n if (!response.rpcUrl) {\n throw new Error(`RPC URL not available for chainId ${chainId}`);\n }\n\n if (!response.nativeCurrency) {\n throw new Error(`Native currency configuration not available for chainId ${chainId}`);\n }\n\n // Add the network\n await ethereum.request({\n method: \"wallet_addEthereumChain\",\n params: [\n {\n chainId: chainIdHex,\n chainName: response.name,\n nativeCurrency: response.nativeCurrency,\n rpcUrls: [response.rpcUrl],\n blockExplorerUrls: response.blockExplorerUrl\n ? [response.blockExplorerUrl]\n : undefined,\n },\n ],\n });\n } catch (addError) {\n throw new Error(\n `Failed to add network: ${addError instanceof Error ? addError.message : \"Unknown error\"}`\n );\n }\n } else {\n throw new Error(\n `Failed to switch network: ${switchError.message || \"Unknown error\"}`\n );\n }\n }\n },\n [client]\n );\n}\n\n/**\n * Get current chain ID from wallet\n */\nexport async function getCurrentChainId(): Promise<number> {\n if (typeof window === \"undefined\" || !(window as any).ethereum) {\n throw new Error(\"No wallet found\");\n }\n\n const chainIdHex = await (window as any).ethereum.request({\n method: \"eth_chainId\",\n });\n \n return parseInt(chainIdHex, 16);\n}\n\n\n"]}
1
+ {"version":3,"sources":["../src/i18n/locales/en.ts","../src/i18n/locales/ko.ts","../src/i18n/index.ts","../src/i18n/context.tsx","../src/hooks/useVolrModal.tsx","../src/lib/utils.ts","../src/hooks/useMediaQuery.ts","../src/generated/volr-sdk-css.ts","../src/components/core/ShadowContainer.tsx","../src/hooks/useFocusTrap.ts","../src/components/materials/modal/Modal.tsx","../src/components/materials/icons/ErrorIcon.tsx","../src/components/materials/icons/CloseIcon.tsx","../src/components/materials/icons/BackIcon.tsx","../src/components/materials/icons/EmailIcon.tsx","../src/components/materials/modal/ModalHeader.tsx","../src/components/features/passkey/utils/biometric.ts","../src/components/features/passkey/components/WalletConnectedView.tsx","../src/components/features/passkey/icons/FaceIdIcon.tsx","../src/components/features/passkey/icons/TouchIdIcon.tsx","../src/components/features/passkey/icons/FingerprintIcon.tsx","../src/components/features/passkey/components/BiometricIcon.tsx","../src/components/materials/Button.tsx","../src/components/features/passkey/components/PasskeyEnrollForm.tsx","../src/components/features/passkey/components/PasskeyEnrollLoading.tsx","../src/components/features/passkey/PasskeyEnrollView.tsx","../src/components/features/MpcConnectView.tsx","../src/components/materials/CopyButton.tsx","../src/components/features/signin/components/OptionButton.tsx","../src/components/features/signin/components/icons/GoogleIcon.tsx","../src/components/features/signin/components/icons/TwitterXIcon.tsx","../src/components/features/signin/components/icons/AppleIcon.tsx","../src/components/features/signin/components/SocialOption.tsx","../src/components/features/signin/components/icons/WalletIcon.tsx","../src/components/features/signin/components/WalletOption.tsx","../src/components/materials/PoweredBy.tsx","../src/components/features/signin/components/EmailInlineInput.tsx","../src/components/features/signin/components/Divider.tsx","../src/components/features/signin/components/BrandingPanel.tsx","../src/components/features/signin/SigninSelectScreen.tsx","../src/components/features/signin/CodeInputScreen.tsx","../src/components/features/signin/SiweLoginScreen.tsx","../src/components/features/signin/SigninModal.tsx","../src/components/features/account/AccountModal.tsx","../src/components/features/deposit/views/AssetSelectView.tsx","../src/components/materials/TextLinkButton.tsx","../src/components/features/deposit/views/OtherTokenModal.tsx","../src/components/features/deposit/components/DepositQRStatusOverlay.tsx","../src/components/features/deposit/components/DepositCompletedToast.tsx","../src/components/features/deposit/components/DepositSkeleton.tsx","../src/components/features/deposit/views/DepositQRView.tsx","../src/components/features/deposit/DepositModal.tsx","../src/providers/VolrUIProvider.tsx","../src/utils/network.ts"],"names":["createContext","useContext","translations","useState","useMemo","value","jsx","useCallback","extendTailwindMerge","clsx","useEffect","useRef","createPortal","isMobile","useId","jsxs","React","Fragment","useVolrContext","useInternalAuth","usePasskeyEnrollment","useMpcConnection","useVolrLogin","handleLogout","useDepositListener","createGetNetworkInfo","VolrProvider","useVolrAuthCallback"],"mappings":";;;;;;;;;;;;;;;;AAIO,IAAM,EAAA,GAAK;AAAA,EAChB,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,MAAA;AAAA,IACN,OAAA,EAAS,YAAA;AAAA,IACT,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,KAAA,EAAO;AAAA,IACL,KAAA,EAAO,SAAA;AAAA,IACP,WAAA,EAAa,sCAAA;AAAA,IACb,EAAA,EAAI,IAAA;AAAA,IACJ,KAAA,EAAO,qEAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,KAAA,EAAO,oBAAA;AAAA,MACP,WAAA,EAAa,iDAAA;AAAA,MACb,KAAA,EAAO,aAAA;AAAA,MACP,UAAA,EAAY,eAAA;AAAA,MACZ,WAAA,EAAa,aAAA;AAAA,MACb,QAAA,EAAU,wBAAA;AAAA,MACV,SAAA,EAAW,2BAAA;AAAA,MACX,WAAA,EAAa,yBAAA;AAAA,MACb,iBAAA,EAAmB,6BAAA;AAAA,MACnB,MAAA,EAAQ,aAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACV;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,MAAA,EAAQ,qBAAA;AAAA,MACR,OAAA,EAAS,sBAAA;AAAA,MACT,KAAA,EAAO;AAAA,KACT;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,KAAA,EAAO,qBAAA;AAAA,MACP,eAAA,EAAiB,wCAAA;AAAA,MACjB,SAAA,EAAW,WAAA;AAAA,MACX,OAAA,EAAS,gBAAA;AAAA,MACT,IAAA,EAAM,cAAA;AAAA,MACN,KAAA,EAAO;AAAA;AACT,GACF;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,WAAA,EAAa,+BAAA;AAAA,IACb,WAAA,EAAa,yBAAA;AAAA,IACb,WAAA,EAAa,uCAAA;AAAA,IACb,WAAA,EAAa,2CAAA;AAAA,IACb,OAAA,EAAS,eAAA;AAAA,IACT,SAAA,EAAW,kDAAA;AAAA,IACX,YAAA,EAAc,sBAAA;AAAA,IACd,mBAAA,EAAqB,0BAAA;AAAA,IACrB,cAAA,EAAgB,oCAAA;AAAA,IAChB,WAAA,EAAa,4BAAA;AAAA,IACb,cAAA,EAAgB;AAAA,GAClB;AAAA,EACA,OAAA,EAAS;AAAA;AAAA,IAEP,YAAA,EAAc,uBAAA;AAAA,IACd,WAAA,EAAa,sBAAA;AAAA,IACb,gBAAA,EAAkB,0BAAA;AAAA;AAAA,IAElB,WAAA,EAAa,gCAAA;AAAA;AAAA,IAEb,OAAA,EAAS,qCAAA;AAAA,IACT,MAAA,EAAQ,oCAAA;AAAA,IACR,WAAA,EAAa,6CAAA;AAAA,IACb,SAAA,EAAW,qDAAA;AAAA,IACX,QAAA,EAAU,0BAAA;AAAA,IACV,UAAA,EAAY,2BAAA;AAAA,IACZ,SAAA,EAAW,6BAAA;AAAA,IACX,WAAA,EAAa,uBAAA;AAAA,IACb,KAAA,EAAO,QAAA;AAAA,IACP,MAAA,EAAQ,QAAA;AAAA,IACR,MAAA,EAAQ;AAAA,MACN,SAAA,EAAW,wCAAA;AAAA,MACX,aAAA,EAAe,oCAAA;AAAA,MACf,YAAA,EAAc,8CAAA;AAAA,MACd,OAAA,EAAS;AAAA;AACX,GACF;AAAA,EACA,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,UAAA;AAAA,IACP,OAAA,EAAS;AAAA,GACX;AAAA,EACA,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,YAAA;AAAA,IACP,aAAA,EAAe,gBAAA;AAAA,IACf,KAAA,EAAO,OAAA;AAAA,IACP,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,OAAA,EAAS;AAAA,IACP,WAAA,EAAa,yBAAA;AAAA,IACb,OAAA,EAAS,SAAA;AAAA,IACT,eAAA,EAAiB,yBAAA;AAAA,IACjB,WAAA,EAAa,sBAAA;AAAA,IACb,IAAA,EAAM,cAAA;AAAA,IACN,MAAA,EAAQ,SAAA;AAAA,IACR,SAAA,EAAW,wBAAA;AAAA,IACX,QAAA,EAAU,oBAAA;AAAA,IACV,SAAA,EAAW,kBAAA;AAAA,IACX,eAAA,EAAiB,iCAAA;AAAA,IACjB,MAAA,EAAQ,QAAA;AAAA,IACR,eAAA,EAAiB,kBAAA;AAAA,IACjB,UAAA,EAAY,aAAA;AAAA,IACZ,OAAA,EAAS,cAAA;AAAA,IACT,OAAA,EAAS,cAAA;AAAA,IACT,QAAA,EAAU,+BAAA;AAAA,IACV,UAAA,EAAY,4BAAA;AAAA,IACZ,OAAA,EAAS,wBAAA;AAAA,IACT,aAAA,EAAe;AAAA,GACjB;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,oBAAA,EAAsB,+BAAA;AAAA,IACtB,qBAAA,EAAuB,0BAAA;AAAA,IACvB,oBAAA,EAAsB,0CAAA;AAAA,IACtB,gBAAA,EAAkB,oBAAA;AAAA,IAClB,iBAAA,EAAmB,qBAAA;AAAA,IACnB,sBAAA,EAAwB,0BAAA;AAAA,IACxB,kBAAA,EAAoB;AAAA;AAExB,CAAA;;;ACpHO,IAAM,EAAA,GAAK;AAAA,EAChB,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,cAAA;AAAA,IACN,OAAA,EAAS,wBAAA;AAAA,IACT,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,KAAA,EAAO;AAAA,IACL,KAAA,EAAO,oBAAA;AAAA,IACP,WAAA,EAAa,sEAAA;AAAA,IACb,EAAA,EAAI,cAAA;AAAA,IACJ,KAAA,EAAO,wLAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,KAAA,EAAO,6CAAA;AAAA,MACP,WAAA,EAAa,mHAAA;AAAA,MACb,KAAA,EAAO,uCAAA;AAAA,MACP,UAAA,EAAY,iCAAA;AAAA,MACZ,WAAA,EAAa,iCAAA;AAAA,MACb,QAAA,EAAU,uCAAA;AAAA,MACV,SAAA,EAAW,wCAAA;AAAA,MACX,WAAA,EAAa,uCAAA;AAAA,MACb,iBAAA,EAAmB,yEAAA;AAAA,MACnB,MAAA,EAAQ,iCAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACV;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,MAAA,EAAQ,uCAAA;AAAA,MACR,OAAA,EAAS,6CAAA;AAAA,MACT,KAAA,EAAO;AAAA,KACT;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,KAAA,EAAO,6CAAA;AAAA,MACP,eAAA,EAAiB,qGAAA;AAAA,MACjB,SAAA,EAAW,oBAAA;AAAA,MACX,OAAA,EAAS,2BAAA;AAAA,MACT,IAAA,EAAM,iCAAA;AAAA,MACN,KAAA,EAAO;AAAA;AACT,GACF;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,WAAA,EAAa,2DAAA;AAAA,IACb,WAAA,EAAa,4CAAA;AAAA,IACb,WAAA,EAAa,oDAAA;AAAA,IACb,WAAA,EAAa,iFAAA;AAAA,IACb,OAAA,EAAS,+BAAA;AAAA,IACT,SAAA,EAAW,uJAAA;AAAA,IACX,YAAA,EAAc,8CAAA;AAAA,IACd,mBAAA,EAAqB,qCAAA;AAAA,IACrB,cAAA,EAAgB,mHAAA;AAAA,IAChB,WAAA,EAAa,2DAAA;AAAA,IACb,cAAA,EAAgB;AAAA,GAClB;AAAA,EACA,OAAA,EAAS;AAAA;AAAA,IAEP,YAAA,EAAc,0CAAA;AAAA,IACd,WAAA,EAAa,yCAAA;AAAA,IACb,gBAAA,EAAkB,8CAAA;AAAA;AAAA,IAElB,WAAA,EAAa,kGAAA;AAAA;AAAA,IAEb,OAAA,EAAS,iGAAA;AAAA,IACT,MAAA,EAAQ,gGAAA;AAAA,IACR,WAAA,EAAa,qGAAA;AAAA,IACb,SAAA,EAAW,kHAAA;AAAA,IACX,QAAA,EAAU,2CAAA;AAAA,IACV,UAAA,EAAY,2CAAA;AAAA,IACZ,SAAA,EAAW,iDAAA;AAAA,IACX,WAAA,EAAa,qCAAA;AAAA,IACb,KAAA,EAAO,0BAAA;AAAA,IACP,MAAA,EAAQ,0BAAA;AAAA,IACR,MAAA,EAAQ;AAAA,MACN,SAAA,EAAW,mHAAA;AAAA,MACX,aAAA,EAAe,uGAAA;AAAA,MACf,YAAA,EAAc,oHAAA;AAAA,MACd,OAAA,EAAS;AAAA;AACX,GACF;AAAA,EACA,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,eAAA;AAAA,IACP,OAAA,EAAS;AAAA,GACX;AAAA,EACA,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,qBAAA;AAAA,IACP,aAAA,EAAe,2BAAA;AAAA,IACf,KAAA,EAAO,oBAAA;AAAA,IACP,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,OAAA,EAAS;AAAA,IACP,WAAA,EAAa,sEAAA;AAAA,IACb,OAAA,EAAS,0BAAA;AAAA,IACT,eAAA,EAAiB,+EAAA;AAAA,IACjB,WAAA,EAAa,2BAAA;AAAA,IACb,IAAA,EAAM,2BAAA;AAAA,IACN,MAAA,EAAQ,6CAAA;AAAA,IACR,SAAA,EAAW,uDAAA;AAAA,IACX,QAAA,EAAU,gEAAA;AAAA,IACV,SAAA,EAAW,2BAAA;AAAA,IACX,eAAA,EAAiB,gFAAA;AAAA,IACjB,MAAA,EAAQ,2BAAA;AAAA,IACR,eAAA,EAAiB,2BAAA;AAAA,IACjB,UAAA,EAAY,qBAAA;AAAA,IACZ,OAAA,EAAS,iCAAA;AAAA,IACT,OAAA,EAAS,iCAAA;AAAA,IACT,QAAA,EAAU,8EAAA;AAAA,IACV,UAAA,EAAY,gEAAA;AAAA,IACZ,OAAA,EAAS,2DAAA;AAAA,IACT,aAAA,EAAe;AAAA,GACjB;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,oBAAA,EAAsB,uEAAA;AAAA,IACtB,qBAAA,EAAuB,6EAAA;AAAA,IACvB,oBAAA,EAAsB,iGAAA;AAAA,IACtB,gBAAA,EAAkB,mFAAA;AAAA,IAClB,iBAAA,EAAmB,6EAAA;AAAA,IACnB,sBAAA,EAAwB,uEAAA;AAAA,IACxB,kBAAA,EAAoB;AAAA;AAExB,CAAA;;;ACpGA,IAAM,YAAA,GAA6C;AAAA,EACjD,EAAA;AAAA,EACA;AACF,CAAA;AAKO,SAAS,eAAA,CAAgB,SAAiB,IAAA,EAAoB;AACnE,EAAA,OAAO,YAAA,CAAa,MAAM,CAAA,IAAK,YAAA,CAAa,EAAA;AAC9C;ACfO,IAAM,WAAA,GAAcA,sBAAuC,IAAI;AAQtE,SAAS,WAAA,CAAY,MAAc,MAAA,EAAyC;AAC1E,EAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AACpB,EAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,gBAAA,EAAkB,CAAC,CAAA,EAAG,GAAA,KAAQ,MAAA,CAAO,GAAG,CAAA,IAAK,CAAA,EAAA,EAAK,GAAG,CAAA,EAAA,CAAI,CAAA;AAC/E;AAEO,SAAS,OAAA,GAA4B;AAC1C,EAAA,MAAM,OAAA,GAAUC,mBAAW,WAAW,CAAA;AACtC,EAAA,IAAI,CAAC,OAAA,EAAS;AAEZ,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,IAAA;AAAA,MACR,YAAA,EAAc,gBAAgB,IAAI,CAAA;AAAA,MAClC,CAAA,EAAG,CAAC,GAAA,EAAa,MAAA,KAAoC;AACnD,QAAA,MAAMC,aAAAA,GAAe,gBAAgB,IAAI,CAAA;AACzC,QAAA,MAAM,IAAA,GAAO,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA;AAC1B,QAAA,IAAI,KAAA,GAAaA,aAAAA;AACjB,QAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,UAAA,IAAI,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,IAAY,KAAK,KAAA,EAAO;AACpD,YAAA,KAAA,GAAQ,MAAM,CAAuB,CAAA;AAAA,UACvC,CAAA,MAAO;AACL,YAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AAEzC,cAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,oBAAA,EAAuB,GAAG,CAAA,aAAA,CAAe,CAAA;AAAA,YACxD;AACA,YAAA,OAAO,GAAA;AAAA,UACT;AAAA,QACF;AACA,QAAA,OAAO,OAAO,KAAA,KAAU,QAAA,GAAW,WAAA,CAAY,KAAA,EAAO,MAAM,CAAA,GAAI,GAAA;AAAA,MAClE,CAAA;AAAA,MACA,WAAW,MAAM;AAAA,MAAC;AAAA,KACpB;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;AASA,SAAS,YAAA,GAAuB;AAC9B,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,CAAC,MAAA,CAAO,WAAW,QAAA,EAAU;AAChE,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,SAAA,CAAU,QAAA,CAAS,WAAA,EAAY;AACnD,EAAA,OAAO,IAAA,CAAK,UAAA,CAAW,IAAI,CAAA,GAAI,IAAA,GAAO,IAAA;AACxC;AAEO,SAAS,YAAA,CAAa,EAAE,QAAA,EAAS,EAAsB;AAC5D,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIC,gBAAA,CAAiB,cAAc,CAAA;AAC3D,EAAA,MAAMD,aAAAA,GAAeE,gBAAQ,MAAM,eAAA,CAAgB,MAAM,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEpE,EAAA,MAAM,CAAA,GAAIA,gBAAQ,MAAM;AACtB,IAAA,OAAO,CAAC,KAAa,MAAA,KAA4C;AAC/D,MAAA,MAAM,IAAA,GAAO,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA;AAC1B,MAAA,IAAIC,MAAAA,GAAaH,aAAAA;AACjB,MAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,QAAA,IAAIG,MAAAA,IAAS,OAAOA,MAAAA,KAAU,QAAA,IAAY,KAAKA,MAAAA,EAAO;AACpD,UAAAA,MAAAA,GAAQA,OAAM,CAAuB,CAAA;AAAA,QACvC,CAAA,MAAO;AACL,UAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AAEzC,YAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,oBAAA,EAAuB,GAAG,CAAA,UAAA,EAAa,MAAM,CAAA,CAAA,CAAG,CAAA;AAAA,UAC/D;AACA,UAAA,OAAO,GAAA;AAAA,QACT;AAAA,MACF;AACA,MAAA,OAAO,OAAOA,MAAAA,KAAU,QAAA,GAAW,WAAA,CAAYA,MAAAA,EAAO,MAAM,CAAA,GAAI,GAAA;AAAA,IAClE,CAAA;AAAA,EACF,CAAA,EAAG,CAACH,aAAY,CAAC,CAAA;AAEjB,EAAA,MAAM,KAAA,GAAQE,eAAA;AAAA,IACZ,OAAO;AAAA,MACL,MAAA;AAAA,MACA,YAAA,EAAAF,aAAAA;AAAA,MACA,CAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,IACA,CAAC,MAAA,EAAQA,aAAAA,EAAc,CAAA,EAAG,SAAS;AAAA,GACrC;AAEA,EAAA,uBAAOI,cAAA,CAAC,WAAA,CAAY,QAAA,EAAZ,EAAqB,OAAe,QAAA,EAAS,CAAA;AACvD;AAGO,IAAM,cAAA,GAAiB;ACxF9B,IAAM,gBAAA,GAAmBN,sBAA4C,IAAI,CAAA;AAElE,IAAM,eAAe,MAA6B;AACvD,EAAA,MAAM,OAAA,GAAUC,mBAAW,gBAAgB,CAAA;AAC3C,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,iDAAiD,CAAA;AAAA,EACnE;AACA,EAAA,OAAO,OAAA;AACT;AAEO,IAAM,oBAA6D,CAAC;AAAA,EACzE;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIE,iBAAS,KAAK,CAAA;AAC1C,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,iBAAoB,SAAS,CAAA;AACrD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,iBAA4B,IAAI,CAAA;AAE1D,EAAA,MAAM,IAAA,GAAOI,mBAAA,CAAY,CAAC,OAAA,KAA+B;AACvD,IAAA,OAAA,CAAQ,OAAA,EAAS,QAAQ,SAAS,CAAA;AAClC,IAAA,QAAA,CAAS,OAAA,EAAS,SAAS,IAAI,CAAA;AAC/B,IAAA,SAAA,CAAU,IAAI,CAAA;AAAA,EAChB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,KAAA,GAAQA,oBAAY,MAAM;AAC9B,IAAA,SAAA,CAAU,KAAK,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AAAA,EACf,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,uBACED,cAAAA,CAAC,gBAAA,CAAiB,QAAA,EAAjB,EAA0B,KAAA,EAAO,EAAE,MAAA,EAAQ,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,IAC5D,QAAA,EACH,CAAA;AAEJ,CAAA;AC5CA,IAAM,UAAUE,iCAAA,CAAoB;AAAA,EAClC,MAAA,EAAQ;AACV,CAAC,CAAA;AAEM,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAO,OAAA,CAAQC,SAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACfO,SAAS,cAAc,KAAA,EAAwB;AACpD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIN,iBAAS,MAAM;AAC3C,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,KAAA;AAC1C,IAAA,OAAO,MAAA,CAAO,UAAA,CAAW,KAAK,CAAA,CAAE,OAAA;AAAA,EAClC,CAAC,CAAA;AAED,EAAAO,iBAAA,CAAU,MAAM;AACd,IAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACnC,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,UAAA,CAAW,KAAK,CAAA;AACnC,IAAA,MAAM,OAAA,GAAU,CAAC,KAAA,KAA+B,UAAA,CAAW,MAAM,OAAO,CAAA;AACxE,IAAA,GAAA,CAAI,gBAAA,CAAiB,UAAU,OAAO,CAAA;AACtC,IAAA,UAAA,CAAW,IAAI,OAAO,CAAA;AACtB,IAAA,OAAO,MAAM,GAAA,CAAI,mBAAA,CAAoB,QAAA,EAAU,OAAO,CAAA;AAAA,EACxD,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,OAAO,OAAA;AACT;;;ACjBO,IAAM,YAAA,GAAe,yj9BAAA;ACa5B,SAAS,gBAAA,CAAiB,QAAmB,OAAA,EAA2B;AACtE,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIP,iBAA2B,MAAM;AACzE,IAAA,IAAI,KAAA,KAAU,UAAU,OAAO,KAAA;AAC/B,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,OAAA;AAC1C,IAAA,OAAO,MAAA,CAAO,UAAA,CAAW,8BAA8B,CAAA,CAAE,UAAU,MAAA,GAAS,OAAA;AAAA,EAC9E,CAAC,CAAA;AAED,EAAAO,kBAAU,MAAM;AACd,IAAA,IAAI,UAAU,QAAA,EAAU;AACtB,MAAA,gBAAA,CAAiB,KAAK,CAAA;AACtB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,UAAA,CAAW,8BAA8B,CAAA;AACnE,IAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAA2B;AAC/C,MAAA,gBAAA,CAAiB,CAAA,CAAE,OAAA,GAAU,MAAA,GAAS,OAAO,CAAA;AAAA,IAC/C,CAAA;AAGA,IAAA,gBAAA,CAAiB,UAAA,CAAW,OAAA,GAAU,MAAA,GAAS,OAAO,CAAA;AAGtD,IAAA,UAAA,CAAW,gBAAA,CAAiB,UAAU,YAAY,CAAA;AAClD,IAAA,OAAO,MAAM,UAAA,CAAW,mBAAA,CAAoB,QAAA,EAAU,YAAY,CAAA;AAAA,EACpE,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,OAAO,aAAA;AACT;AA4DO,SAAS,YAAA,CAAa,EAAE,QAAA,EAAU,KAAA,GAAQ,SAAQ,EAAyB;AAChF,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIP,iBAA6B,IAAI,CAAA;AACnE,EAAA,MAAM,OAAA,GAAUQ,eAA8B,IAAI,CAAA;AAClD,EAAA,MAAM,aAAA,GAAgB,iBAAiB,KAAK,CAAA;AAE5C,EAAAD,kBAAU,MAAM;AAEd,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AACzC,IAAA,IAAA,CAAK,EAAA,GAAK,oBAAA;AACV,IAAA,IAAA,CAAK,MAAM,QAAA,GAAW,OAAA;AACtB,IAAA,IAAA,CAAK,MAAM,GAAA,GAAM,GAAA;AACjB,IAAA,IAAA,CAAK,MAAM,IAAA,GAAO,GAAA;AAClB,IAAA,IAAA,CAAK,MAAM,KAAA,GAAQ,GAAA;AACnB,IAAA,IAAA,CAAK,MAAM,MAAA,GAAS,GAAA;AACpB,IAAA,IAAA,CAAK,MAAM,MAAA,GAAS,MAAA;AACpB,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,IAAI,CAAA;AAC9B,IAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAGlB,IAAA,MAAM,aAAa,IAAA,CAAK,YAAA,CAAa,EAAE,IAAA,EAAM,QAAQ,CAAA;AAGrD,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA;AAC9C,IAAA,OAAA,CAAQ,WAAA,GAAc,YAAA;AACtB,IAAA,UAAA,CAAW,YAAY,OAAO,CAAA;AAG9B,IAAA,MAAM,SAAA,GAAY,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AAC9C,IAAA,SAAA,CAAU,YAAA,CAAa,kBAAkB,MAAM,CAAA;AAC/C,IAAA,UAAA,CAAW,YAAY,SAAS,CAAA;AAEhC,IAAA,YAAA,CAAa,SAAS,CAAA;AAEtB,IAAA,OAAO,MAAM;AACX,MAAA,QAAA,CAAS,IAAA,CAAK,YAAY,IAAI,CAAA;AAC9B,MAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAAA,IACpB,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAGL,EAAAA,kBAAU,MAAM;AACd,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,OAAA,CAAQ,OAAA,CAAQ,YAAA,CAAa,YAAA,EAAc,aAAa,CAAA;AAAA,IAC1D;AAAA,EACF,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,EAAA,IAAI,CAAC,WAAW,OAAO,IAAA;AAEvB,EAAA,OAAOE,qBAAA,CAAa,UAAU,SAAS,CAAA;AACzC;AC5IO,SAAS,YAAA,CAAa,UAAmB,YAAA,EAAmD;AACjG,EAAA,MAAM,qBAAA,GAAwBD,eAA2B,IAAI,CAAA;AAG7D,EAAA,MAAM,iBAAA,GAAoB;AAAA,IACxB,wBAAA;AAAA,IACA,uBAAA;AAAA,IACA,wBAAA;AAAA,IACA,0BAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,IAAI,CAAA;AAGX,EAAA,MAAM,oBAAA,GAAuBJ,oBAAY,MAAqB;AAC5D,IAAA,IAAI,CAAC,YAAA,CAAa,OAAA,EAAS,OAAO,EAAC;AACnC,IAAA,OAAO,KAAA,CAAM,IAAA;AAAA,MACX,YAAA,CAAa,OAAA,CAAQ,gBAAA,CAA8B,iBAAiB;AAAA,KACtE,CAAE,MAAA,CAAO,CAAC,EAAA,KAAO;AAEf,MAAA,OAAO,GAAG,YAAA,KAAiB,IAAA;AAAA,IAC7B,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,YAAA,EAAc,iBAAiB,CAAC,CAAA;AAGpC,EAAA,MAAM,aAAA,GAAgBA,mBAAAA;AAAA,IACpB,CAAC,KAAA,KAAyB;AACxB,MAAA,IAAI,KAAA,CAAM,QAAQ,KAAA,EAAO;AAEzB,MAAA,MAAM,oBAAoB,oBAAA,EAAqB;AAC/C,MAAA,IAAI,iBAAA,CAAkB,WAAW,CAAA,EAAG;AAEpC,MAAA,MAAM,YAAA,GAAe,kBAAkB,CAAC,CAAA;AACxC,MAAA,MAAM,WAAA,GAAc,iBAAA,CAAkB,iBAAA,CAAkB,MAAA,GAAS,CAAC,CAAA;AAGlE,MAAA,IAAI,MAAM,QAAA,EAAU;AAClB,QAAA,IAAI,QAAA,CAAS,kBAAkB,YAAA,EAAc;AAC3C,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,WAAA,CAAY,KAAA,EAAM;AAAA,QACpB;AAAA,MACF,CAAA,MAEK;AACH,QAAA,IAAI,QAAA,CAAS,kBAAkB,WAAA,EAAa;AAC1C,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,YAAA,CAAa,KAAA,EAAM;AAAA,QACrB;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,CAAC,oBAAoB;AAAA,GACvB;AAEA,EAAAG,kBAAU,MAAM;AACd,IAAA,IAAI,CAAC,QAAA,EAAU;AAGf,IAAA,qBAAA,CAAsB,UAAU,QAAA,CAAS,aAAA;AAGzC,IAAA,MAAM,oBAAoB,oBAAA,EAAqB;AAC/C,IAAA,IAAI,iBAAA,CAAkB,SAAS,CAAA,EAAG;AAEhC,MAAA,qBAAA,CAAsB,MAAM;AAC1B,QAAA,iBAAA,CAAkB,CAAC,EAAE,KAAA,EAAM;AAAA,MAC7B,CAAC,CAAA;AAAA,IACH;AAGA,IAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,aAAa,CAAA;AAElD,IAAA,OAAO,MAAM;AACX,MAAA,QAAA,CAAS,mBAAA,CAAoB,WAAW,aAAa,CAAA;AAGrD,MAAA,IAAI,qBAAA,CAAsB,OAAA,IAAW,qBAAA,CAAsB,OAAA,CAAQ,KAAA,EAAO;AACxE,QAAA,qBAAA,CAAsB,QAAQ,KAAA,EAAM;AAAA,MACtC;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,oBAAA,EAAsB,aAAa,CAAC,CAAA;AACpD;ACtEO,IAAM,QAAQ,CAAC;AAAA,EACpB,IAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,oBAAA;AAAA,EACA,eAAA;AAAA,EACA,OAAA,EAAS,eAAA;AAAA,EACT,gBAAA;AAAA,EACA,SAAA,GAAY;AACd,CAAA,KAAkB;AAChB,EAAA,MAAMG,SAAAA,GAAW,cAAc,oBAAoB,CAAA;AACnD,EAAA,MAAM,OAAA,GAAU,eAAA,KAAoBA,SAAAA,GAAW,cAAA,GAAiB,UAAA,CAAA;AAChE,EAAA,MAAM,SAAA,GAAYF,eAAuB,IAAI,CAAA;AAC7C,EAAA,MAAM,WAAWG,aAAA,EAAM;AACvB,EAAA,MAAM,YAAY,iBAAA,EAAkB;AACpC,EAAA,MAAM,KAAA,GAAQ,WAAW,KAAA,IAAS,OAAA;AAGlC,EAAA,YAAA,CAAa,MAAM,SAAS,CAAA;AAG5B,EAAAJ,kBAAU,MAAM;AACd,IAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAAqB;AACzC,MAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,QAAA,IAAY,IAAA,EAAM;AAC9B,QAAA,IAAI,eAAA,EAAiB;AACnB,UAAA,eAAA,CAAgB,CAAC,CAAA;AAAA,QACnB,CAAA,MAAO;AACL,UAAA,YAAA,CAAa,KAAK,CAAA;AAAA,QACpB;AAAA,MACF;AAAA,IACF,CAAA;AAEA,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,YAAY,CAAA;AAAA,IACnD;AAEA,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,SAAA,EAAW,YAAY,CAAA;AAAA,EACnE,CAAA,EAAG,CAAC,IAAA,EAAM,YAAA,EAAc,eAAe,CAAC,CAAA;AAExC,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAElB,EAAA,MAAM,gBAAgB,OAAA,KAAY,cAAA;AAGlC,EAAA,MAAM,iBAAA,GAAoB,gBAAA,EAAkB,QAAA,CAAS,QAAQ,CAAA;AAE7D,EAAA,uBACEK,eAAAA,CAAC,YAAA,EAAA,EAAa,KAAA,EAEZ,QAAA,EAAA;AAAA,oBAAAT,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,oDAAA;AAAA,QACV,aAAA,EAAY,MAAA;AAAA,QACZ,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,UAAA,IAAI,oBAAA,EAAsB;AACxB,YAAA,oBAAA,CAAqB,CAAkC,CAAA;AAAA,UACzD,CAAA,MAAO;AACL,YAAA,YAAA,CAAa,KAAK,CAAA;AAAA,UACpB;AAAA,QACF;AAAA;AAAA,KACF;AAAA,oBAGAA,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,4GAAA;AAAA,UACA,aAAA,IAAiB;AAAA,SACnB;AAAA,QAEA,QAAA,kBAAAA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,SAAA;AAAA,YACL,EAAA,EAAI,QAAA;AAAA,YACJ,IAAA,EAAK,QAAA;AAAA,YACL,YAAA,EAAW,MAAA;AAAA,YACX,YAAA,EAAY,SAAA;AAAA,YACZ,QAAA,EAAU,EAAA;AAAA,YACV,SAAA,EAAW,EAAA;AAAA,cACT,oIAAA;AAAA,cACA,gBACI,0FAAA,GACA,EAAA;AAAA,gBACE,yDAAA;AAAA,gBACA,CAAC,iBAAA,IAAqB;AAAA,eACxB;AAAA,cACJ,SAAA;AAAA,cACA;AAAA,aACF;AAAA,YACA,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB;AAAA,YAEjC;AAAA;AAAA;AACH;AAAA;AACF,GAAA,EACF,CAAA;AAEJ,CAAA;AC7GO,SAAS,SAAA,CAAU,EAAE,SAAA,EAAW,IAAA,GAAO,IAAG,EAAc;AAC7D,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,IAAA;AAAA,MACP,MAAA,EAAQ,IAAA;AAAA,MACR,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,cAAA;AAAA,MACL,SAAA;AAAA,MAEA,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,kGAAA,EAAmG;AAAA;AAAA,GAC7G;AAEJ;ACZO,SAAS,SAAA,CAAU,EAAE,SAAA,EAAW,IAAA,GAAO,IAAG,EAAc;AAC7D,EAAA,uBACES,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,IAAA;AAAA,MACP,MAAA,EAAQ,IAAA;AAAA,MACR,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,MAAA,EAAO,cAAA;AAAA,MACP,WAAA,EAAY,GAAA;AAAA,MACZ,aAAA,EAAc,OAAA;AAAA,MACd,cAAA,EAAe,OAAA;AAAA,MACf,SAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAT,cAAAA,CAAC,UAAK,EAAA,EAAG,IAAA,EAAK,IAAG,GAAA,EAAI,EAAA,EAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,CAAA;AAAA,wBACpCA,cAAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAG,GAAA,EAAI,IAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK;AAAA;AAAA;AAAA,GACtC;AAEJ;ACjBO,SAAS,QAAA,CAAS,EAAE,SAAA,EAAW,IAAA,GAAO,IAAG,EAAc;AAC5D,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,IAAA;AAAA,MACP,MAAA,EAAQ,IAAA;AAAA,MACR,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,MAAA,EAAO,cAAA;AAAA,MACP,WAAA,EAAY,GAAA;AAAA,MACZ,SAAA;AAAA,MAEA,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,yBAAA,EAA0B;AAAA;AAAA,GACpC;AAEJ;ACdO,SAAS,SAAA,CAAU,EAAE,SAAA,EAAW,IAAA,GAAO,IAAG,EAAc;AAC7D,EAAA,uBACES,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,IAAA;AAAA,MACP,MAAA,EAAQ,IAAA;AAAA,MACR,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,MAAA,EAAO,cAAA;AAAA,MACP,WAAA,EAAY,KAAA;AAAA,MACZ,aAAA,EAAc,OAAA;AAAA,MACd,cAAA,EAAe,OAAA;AAAA,MACf,SAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAT,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,8GAAA,EAA+G,CAAA;AAAA,wBACvHA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,GAAA,EAAI,CAAA,EAAE,GAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,EAAA,EAAG,KAAA,EAAM;AAAA;AAAA;AAAA,GACpD;AAEJ;ACZO,IAAM,cAA0C,CAAC;AAAA,EACtD,SAAA;AAAA,EACA,IAAA,GAAO,KAAA;AAAA,EACP,MAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,OAAA,EAAQ;AAEtB,EAAA,uBACES,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,4DAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oDAAA,EACZ,QAAA,EAAA;AAAA,UAAA,IAAA,IAAQ,0BACPA,eAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAS,MAAA;AAAA,cACT,SAAA,EAAU,kIAAA;AAAA,cACV,IAAA,EAAK,QAAA;AAAA,cAEL,QAAA,EAAA;AAAA,gCAAAT,eAAC,QAAA,EAAA,EAAS,CAAA;AAAA,gCACVA,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,+BAAA,EAAiC,QAAA,EAAA,CAAA,CAAE,aAAa,CAAA,EAAE;AAAA;AAAA;AAAA,WACpE;AAAA,UAED;AAAA,SAAA,EACH,CAAA;AAAA,QACC,2BACCA,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,OAAA;AAAA,YACT,SAAA,EAAU,4EAAA;AAAA,YACV,YAAA,EAAW,OAAA;AAAA,YAEX,QAAA,kBAAAA,eAAC,SAAA,EAAA,EAAU;AAAA;AAAA;AACb;AAAA;AAAA,GAEJ;AAEJ,CAAA;;;AC5CO,SAAS,gBAAA,GAAkC;AAChD,EAAA,MAAM,KAAK,SAAA,CAAU,SAAA;AAGrB,EAAA,IAAI,kBAAA,CAAmB,IAAA,CAAK,EAAE,CAAA,EAAG;AAC/B,IAAA,OAAO,QAAA;AAAA,EACT;AAGA,EAAA,IAAI,oBAAA,CAAqB,IAAA,CAAK,EAAE,CAAA,EAAG;AACjC,IAAA,OAAO,SAAA;AAAA,EACT;AAGA,EAAA,OAAO,aAAA;AACT;AAKO,SAAS,oBAAA,CAAqB,OAAc,CAAA,EAAoC;AACrF,EAAA,MAAM,GAAA,GAAM,KAAA,CAAM,OAAA,CAAQ,WAAA,EAAY;AAEtC,EAAA,IAAI,GAAA,CAAI,QAAA,CAAS,WAAW,CAAA,IAAK,GAAA,CAAI,QAAA,CAAS,aAAa,CAAA,IAAK,GAAA,CAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzF,IAAA,OAAO,EAAE,0BAA0B,CAAA;AAAA,EACrC;AACA,EAAA,IAAI,IAAI,QAAA,CAAS,oBAAoB,KAAK,GAAA,CAAI,QAAA,CAAS,gBAAgB,CAAA,EAAG;AACxE,IAAA,OAAO,EAAE,8BAA8B,CAAA;AAAA,EACzC;AACA,EAAA,IAAI,GAAA,CAAI,QAAA,CAAS,eAAe,CAAA,EAAG;AACjC,IAAA,OAAO,EAAE,6BAA6B,CAAA;AAAA,EACxC;AAEA,EAAA,OAAO,EAAE,wBAAwB,CAAA;AACnC;AC5BO,SAAS,oBAAoB,EAAE,IAAA,EAAM,OAAA,EAAS,UAAA,GAAa,MAAK,EAA6B;AAClG,EAAA,uBACES,gBAAC,KAAA,EAAA,EACE,QAAA,EAAA;AAAA,IAAA,UAAA,IAAc,OAAA,oBACbT,cAAAA,CAAC,WAAA,EAAA,EAAY,OAAA,EAAkB,CAAA;AAAA,oBAGjCS,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,EAAA,EACb,QAAA,EAAA;AAAA,sBAAAT,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2CAAA,EAA4C,QAAA,EAAA,kBAAA,EAEzD,CAAA;AAAA,MAEC,KAAK,UAAA,mBACJS,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,qEAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,0BAAAT,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6DAAA,EAA8D,QAAA,EAAA,gBAAA,EAE7E,CAAA;AAAA,0BACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EACZ,eAAK,UAAA,EACR;AAAA,SAAA,EACF,CAAA;AAAA,wBAEAS,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAT,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6DAAA,EAA8D,QAAA,EAAA,kBAAA,EAE7E,CAAA;AAAA,0BACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EACZ,eAAK,cAAA,EACR;AAAA,SAAA,EACF;AAAA,OAAA,EACF,CAAA,mBAEAS,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,qEAAA,EACb,QAAA,EAAA;AAAA,wBAAAT,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EAA6C,QAAA,EAAA,mBAAA,EAE5D,CAAA;AAAA,wBACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gCAA+B,QAAA,EAAA,8DAAA,EAE9C;AAAA,OAAA,EACF;AAAA,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA;AAEJ;ACxDO,SAAS,UAAA,CAAW,EAAE,IAAA,EAAK,EAAoB;AACpD,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,IAAA;AAAA,MACP,MAAA,EAAQ,IAAA;AAAA,MACR,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,KAAA,EAAM,4BAAA;AAAA,MAEN,QAAA,kBAAAA,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,CAAA,EAAE,y+DAAA;AAAA,UACF,IAAA,EAAK;AAAA;AAAA;AACP;AAAA,GACF;AAEJ;ACfO,SAAS,WAAA,CAAY,EAAE,IAAA,EAAK,EAAqB;AACtD,EAAA,MAAM,IAAA,GAAO,SAAA;AACb,EAAA,uBACES,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,IAAA;AAAA,MACP,MAAA,EAAQ,IAAA;AAAA,MACR,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,KAAA,EAAM,4BAAA;AAAA,MAEN,QAAA,EAAA;AAAA,wBAAAT,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,szBAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,0eAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,6hBAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,0tBAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,0hBAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,ykBAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,yqBAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,+fAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,wkBAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,4nBAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,6hBAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,4YAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,glBAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,2hBAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,udAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,2eAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,8eAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,+bAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,8YAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,2VAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,8VAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,iWAAA;AAAA,YACF;AAAA;AAAA;AACF;AAAA;AAAA,GACF;AAEJ;AC/FO,SAAS,eAAA,CAAgB,EAAE,IAAA,EAAK,EAAyB;AAC9D,EAAA,MAAM,IAAA,GAAO,SAAA;AACb,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,IAAA;AAAA,MACP,MAAA,EAAQ,IAAA;AAAA,MACR,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,KAAA,EAAM,4BAAA;AAAA,MAEN,QAAA,kBAAAA,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,CAAA,EAAE,2mDAAA;AAAA,UACF;AAAA;AAAA;AACF;AAAA,GACF;AAEJ;ACTO,SAAS,cAAc,EAAE,IAAA,EAAM,OAAO,EAAA,EAAI,OAAA,GAAU,OAAM,EAAuB;AACtF,EAAA,MAAM,SAAA,GAAY,UAAU,oBAAA,GAAuB,EAAA;AAEnD,EAAA,uBACES,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EACF,QAAA,EAAA;AAAA,IAAA,IAAA,KAAS,QAAA,oBAAYT,cAAAA,CAAC,UAAA,EAAA,EAAW,IAAA,EAAY,CAAA;AAAA,IAC7C,IAAA,KAAS,SAAA,oBAAaA,cAAAA,CAAC,eAAY,IAAA,EAAY,CAAA;AAAA,IAC/C,IAAA,KAAS,aAAA,oBAAiBA,cAAAA,CAAC,mBAAgB,IAAA,EAAY;AAAA,GAAA,EAC1D,CAAA;AAEJ;ACdA,IAAM,OAAA,GAAU;AAAA,EACd,IAAI,EAAE,EAAA,EAAI,WAAW,EAAA,EAAI,QAAA,EAAU,UAAU,UAAA,EAAW;AAAA,EACxD,IAAI,EAAE,EAAA,EAAI,QAAQ,EAAA,EAAI,SAAA,EAAW,UAAU,MAAA,EAAO;AAAA,EAClD,IAAI,EAAE,EAAA,EAAI,UAAU,EAAA,EAAI,MAAA,EAAQ,UAAU,UAAA;AAC5C,CAAA;AAGA,IAAM,UAAA,GAAa;AAAA,EACjB,SAAS,EAAE,eAAA,EAAiB,QAAW,KAAA,EAAO,MAAA,EAAQ,QAAQ,MAAA,EAAO;AAAA,EACrE,WAAW,EAAE,eAAA,EAAiB,2BAA2B,KAAA,EAAO,kBAAA,EAAoB,QAAQ,MAAA,EAAO;AAAA,EACnG,OAAO,EAAE,eAAA,EAAiB,eAAe,KAAA,EAAO,4BAAA,EAA8B,QAAQ,MAAA,EAAO;AAAA,EAC7F,SAAS,EAAE,eAAA,EAAiB,eAAe,KAAA,EAAO,4BAAA,EAA8B,QAAQ,8BAAA;AAC1F,CAAA;AAEO,IAAM,SAASU,wBAAAA,CAAM,UAAA;AAAA,EAC1B,CAAC,EAAE,OAAA,GAAU,SAAA,EAAW,OAAO,IAAA,EAAM,SAAA,EAAW,SAAA,EAAW,KAAA,EAAO,QAAA,EAAU,QAAA,EAAU,GAAG,KAAA,IAAS,GAAA,KAAQ;AACxG,IAAA,MAAM,EAAE,WAAA,EAAY,GAAI,SAAA,EAAU;AAElC,IAAA,MAAM,SAAA,GAAY,QAAQ,IAAI,CAAA;AAC9B,IAAA,MAAM,YAAA,GAAe,WAAW,OAAO,CAAA;AACvC,IAAA,MAAM,YAAY,OAAA,KAAY,SAAA;AAE9B,IAAA,uBACEV,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,QAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,mEAAA;AAAA,UACA,wCAAA;AAAA,UACA,SAAA,IAAa,aAAA;AAAA,UACb;AAAA,SACF;AAAA,QACA,KAAA,EAAO;AAAA,UACL,aAAa,SAAA,CAAU,EAAA;AAAA,UACvB,cAAc,SAAA,CAAU,EAAA;AAAA,UACxB,YAAY,SAAA,CAAU,EAAA;AAAA,UACtB,eAAe,SAAA,CAAU,EAAA;AAAA,UACzB,UAAU,SAAA,CAAU,QAAA;AAAA,UACpB,YAAA,EAAc,SAAA;AAAA,UACd,QAAQ,YAAA,CAAa,MAAA;AAAA,UACrB,eAAA,EAAiB,SAAA,GAAY,WAAA,GAAc,YAAA,CAAa,eAAA;AAAA,UACxD,OAAO,YAAA,CAAa,KAAA;AAAA,UACpB,MAAA,EAAQ,WAAW,aAAA,GAAgB,SAAA;AAAA,UACnC,OAAA,EAAS,WAAW,GAAA,GAAM,CAAA;AAAA,UAC1B,GAAG;AAAA,SACL;AAAA,QACC,GAAG,KAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,EAEJ;AACF,CAAA;AAEA,MAAA,CAAO,WAAA,GAAc,QAAA;AC9Cd,SAAS,iBAAA,CAAkB;AAAA,EAChC,aAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAA2B;AACzB,EAAA,uBACES,eAAAA,CAAAE,mBAAAA,EAAA,EAEE,QAAA,EAAA;AAAA,oBAAAX,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EACb,QAAA,kBAAAA,cAAAA,CAAC,aAAA,EAAA,EAAc,IAAA,EAAM,aAAA,EAAe,IAAA,EAAM,EAAA,EAAI,CAAA,EAChD,CAAA;AAAA,oBAGAA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+DACV,QAAA,EAAA,gBAAA,EACH,CAAA;AAAA,IAGC,YAAA,oBACCS,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,6HAAA,EACb,QAAA,EAAA;AAAA,sBAAAT,cAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,2BAAA,EAA4B,CAAA;AAAA,sBACjDA,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,YAAA,EAAa;AAAA,KAAA,EACtB,CAAA;AAAA,oBAIFS,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCAAA,EACb,QAAA,EAAA;AAAA,sBAAAT,cAAAA,CAAC,UAAO,OAAA,EAAQ,SAAA,EAAU,WAAS,IAAA,EAAC,OAAA,EAAS,UAC1C,QAAA,EAAA,UAAA,EACH,CAAA;AAAA,sBACAA,eAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,SAAQ,SAAA,EAAS,IAAA,EAAC,OAAA,EAAS,QAAA,EACxC,QAAA,EAAA,UAAA,EACH;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;ACvCO,SAAS,oBAAA,CAAqB;AAAA,EACnC,aAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA,GAAW;AACb,CAAA,EAA8B;AAC5B,EAAA,uBACES,eAAAA,CAAAE,mBAAAA,EAAA,EAEE,QAAA,EAAA;AAAA,oBAAAX,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8EAAA,EACb,QAAA,kBAAAA,cAAAA,CAAC,aAAA,EAAA,EAAc,IAAA,EAAM,aAAA,EAAe,IAAA,EAAM,EAAA,EAAI,OAAA,EAAS,aAAa,CAAA,EACtE,CAAA;AAAA,oBAGAA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,gDACV,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,IAGC,WAAA,oBACCA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBAAA,EACb,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8EAAA,EACb,QAAA,kBAAAA,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,mFAAA;AAAA,QACV,KAAA,EAAO;AAAA,UACL,eAAA,EAAiB,WAAA;AAAA,UACjB,KAAA,EAAO,GAAG,QAAQ,CAAA,CAAA;AAAA;AACpB;AAAA,OAEJ,CAAA,EACF,CAAA;AAAA,IAID,CAAC,WAAA,oBACAS,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,8CAAA,EACb,QAAA,EAAA;AAAA,sBAAAT,cAAAA,CAAC,UAAO,OAAA,EAAQ,SAAA,EAAU,WAAS,IAAA,EAAC,OAAA,EAAS,SAC1C,QAAA,EAAA,UAAA,EACH,CAAA;AAAA,sBACAA,eAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,SAAQ,SAAA,EAAS,IAAA,EAAC,OAAA,EAAS,QAAA,EACxC,QAAA,EAAA,UAAA,EACH;AAAA,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;AC5CO,SAAS,iBAAA,CAAkB;AAAA,EAChC,UAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA,GAAS,IAAA;AAAA,EACT,WAAA,GAAc;AAChB,CAAA,EAA2B;AACzB,EAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,KAAYY,oBAAA,EAAe;AACjD,EAAA,MAAM,EAAE,MAAA,EAAO,GAAIC,qBAAA,EAAgB;AACnC,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,OAAA,EAAQ;AACtB,EAAA,MAAM,EAAE,WAAA,EAAY,GAAI,SAAA,EAAU;AAClC,EAAA,MAAM;AAAA,IACJ,MAAA;AAAA,IACA,IAAA;AAAA,IACA,WAAA;AAAA,IACA,KAAA,EAAO;AAAA,MACLC,0BAAA,EAAqB;AACzB,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIjB,iBAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,iBAAwB,IAAI,CAAA;AACpE,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,iBAAS,KAAK,CAAA;AAEtD,EAAA,MAAM,gBAAgB,gBAAA,EAAiB;AAGvC,EAAA,MAAM,UAAA,GAAa,MAAM,cAAA,KAAmB,SAAA;AAG5C,EAAAO,kBAAU,MAAM;AACd,IAAA,OAAA,CAAQ,IAAI,iCAAA,EAAmC;AAAA,MAC7C,IAAA;AAAA,MACA,gBAAgB,IAAA,EAAM,cAAA;AAAA,MACtB,YAAY,IAAA,EAAM,UAAA;AAAA,MAClB;AAAA,KACD,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,IAAA,EAAM,UAAU,CAAC,CAAA;AAGrB,EAAAA,kBAAU,MAAM;AACd,IAAA,IAAI,UAAA,IAAc,CAAC,IAAA,EAAM,UAAA,IAAc,CAAC,YAAA,EAAc;AACpD,MAAA,MAAM,kBAAkB,YAAY;AAClC,QAAA,IAAI;AACF,UAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,UAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,IAAA;AAAA,YAC5B,eAAA;AAAA,YACA;AAAC,WACH;AAEA,UAAA,IAAI,SAAS,IAAA,EAAM;AACjB,YAAA,OAAA,CAAQ,GAAA;AAAA,cACN,wCAAA;AAAA,cACA,QAAA,CAAS;AAAA,aACX;AACA,YAAA,OAAA,CAAQ;AAAA,cACN,GAAG,IAAA;AAAA,cACH,GAAG,QAAA,CAAS;AAAA,aACb,CAAA;AAAA,UACH;AAAA,QACF,SAAS,KAAA,EAAO;AACd,UAAA,OAAA,CAAQ,KAAA;AAAA,YACN,kDAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA,SAAE;AACA,UAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,QACvB;AAAA,MACF,CAAA;AAEA,MAAA,eAAA,EAAgB;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,UAAA,EAAY,IAAA,EAAM,YAAY,YAAA,EAAc,MAAA,EAAQ,OAAA,EAAS,IAAI,CAAC,CAAA;AAGtE,EAAAA,kBAAU,MAAM;AACd,IAAA,IAAI,CAAC,MAAM,EAAA,EAAI;AACb,MAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,4CAA4C,CAAA;AACpE,MAAA,eAAA,CAAgB,oBAAA,CAAqB,KAAA,EAAO,CAAC,CAAC,CAAA;AAC9C,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,MACf;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,IAAA,EAAM,OAAA,EAAS,CAAC,CAAC,CAAA;AAGrB,EAAAA,kBAAU,MAAM;AACd,IAAA,IAAI,eAAA,EAAiB;AACnB,MAAA,MAAM,eAAA,GAAkB,oBAAA,CAAqB,eAAA,EAAiB,CAAC,CAAA;AAC/D,MAAA,eAAA,CAAgB,eAAe,CAAA;AAC/B,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,OAAA,CAAQ,eAAe,CAAA;AAAA,MACzB;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,eAAA,EAAiB,OAAA,EAAS,CAAC,CAAC,CAAA;AAEhC,EAAA,MAAM,eAAe,YAAY;AAC/B,IAAA,IAAI,CAAC,MAAM,EAAA,EAAI;AACb,MAAA,MAAM,QAAQ,IAAI,KAAA;AAAA,QAChB;AAAA,OACF;AACA,MAAA,eAAA,CAAgB,oBAAA,CAAqB,KAAA,EAAO,CAAC,CAAC,CAAA;AAC9C,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,MACf;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI;AACF,MAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,MAAA,MAAM,MAAA,EAAO;AAEb,MAAA,aAAA,CAAc,KAAK,CAAA;AACnB,MAAA,UAAA,EAAW;AAAA,IACb,SAAS,KAAA,EAAO;AAEd,MAAA,aAAA,CAAc,KAAK,CAAA;AAAA,IACrB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,eAAe,YAAY;AAC/B,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,EAAO;AACb,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,QAAA,EAAS;AAAA,MACX;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,OAAA,CAAQ,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,eAAe,CAAC,CAAA;AAAA,MACrE;AAAA,IACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,iBAAiB,MAAc;AACnC,IAAA,QAAQ,IAAA;AAAM,MACZ,KAAK,UAAA;AACH,QAAA,OAAO,EAAE,kBAAkB,CAAA;AAAA,MAC7B,KAAK,YAAA;AACH,QAAA,OAAO,EAAE,oBAAoB,CAAA;AAAA,MAC/B,KAAK,WAAA;AACH,QAAA,OAAO,EAAE,mBAAmB,CAAA;AAAA,MAC9B,KAAK,aAAA;AACH,QAAA,OAAO,EAAE,qBAAqB,CAAA;AAAA,MAChC;AACE,QAAA,OAAO,EAAA;AAAA;AACX,EACF,CAAA;AAEA,EAAA,MAAM,cAAc,MAAc;AAChC,IAAA,QAAQ,IAAA;AAAM,MACZ,KAAK,UAAA;AACH,QAAA,OAAO,EAAA;AAAA,MACT,KAAK,YAAA;AACH,QAAA,OAAO,EAAA;AAAA,MACT,KAAK,WAAA;AACH,QAAA,OAAO,EAAA;AAAA,MACT,KAAK,aAAA;AACH,QAAA,OAAO,EAAA;AAAA,MACT;AACE,QAAA,OAAO,CAAA;AAAA;AACX,EACF,CAAA;AAEA,EAAA,MAAM,oBAAoB,MAAc;AACtC,IAAA,IAAI,kBAAkB,QAAA,EAAU;AAC9B,MAAA,OAAO,EAAE,qBAAqB,CAAA;AAAA,IAChC;AACA,IAAA,IAAI,kBAAkB,SAAA,EAAW;AAC/B,MAAA,OAAO,EAAE,sBAAsB,CAAA;AAAA,IACjC;AACA,IAAA,OAAO,EAAE,0BAA0B,CAAA;AAAA,EACrC,CAAA;AAEA,EAAA,MAAM,0BAA0B,MAAc;AAC5C,IAAA,OAAO,EAAE,qBAAqB,CAAA;AAAA,EAChC,CAAA;AAGA,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,MAAM,cAAc,MAAM;AACxB,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,OAAA,EAAQ;AAAA,MACV,WAAW,UAAA,EAAY;AACrB,QAAA,UAAA,EAAW;AAAA,MACb;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,gCACJJ,cAAAA;AAAA,MAAC,mBAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,OAAA,EAAS,WAAA;AAAA,QACT,YAAY,CAAC;AAAA;AAAA,KACf;AAGF,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,OAAO,aAAA;AAAA,IACT;AAEA,IAAA,uBACEA,cAAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAM,MAAA,EAAQ,YAAA,EAAc,CAAC,IAAA,KAAS,CAAC,IAAA,IAAQ,WAAA,EAAY,EAChE,QAAA,kBAAAA,cAAAA;AAAA,MAAC,mBAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,OAAA,EAAS,WAAA;AAAA,QACT,UAAA,EAAY;AAAA;AAAA,KACd,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,MAAM,OAAA,mBACJS,eAAAA,CAAC,KAAA,EAAA,EAEC,QAAA,EAAA;AAAA,oBAAAT,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2CAAA,EACV,6BAAkB,EACrB,CAAA;AAAA,IAEC,CAAC,6BACAA,cAAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,aAAA;AAAA,QACA,kBAAkB,uBAAA,EAAwB;AAAA,QAC1C,YAAA;AAAA,QACA,UAAU,MAAM;AACd,UAAA,aAAA,CAAc,IAAI,CAAA;AAClB,UAAA,YAAA,EAAa;AAAA,QACf,CAAA;AAAA,QACA,QAAA,EAAU,YAAA;AAAA,QACV,UAAA,EAAY,EAAE,eAAe,CAAA;AAAA,QAC7B,UAAA,EAAY,EAAE,gBAAgB;AAAA;AAAA,wBAGhCA,cAAAA;AAAA,MAAC,oBAAA;AAAA,MAAA;AAAA,QACC,aAAA;AAAA,QACA,aAAa,cAAA,EAAe;AAAA,QAC5B,WAAA;AAAA,QACA,WAAA;AAAA,QACA,UAAU,WAAA,EAAY;AAAA,QACtB,OAAA,EAAS,YAAA;AAAA,QACT,QAAA,EAAU,YAAA;AAAA,QACV,UAAA,EAAY,EAAE,eAAe,CAAA;AAAA,QAC7B,UAAA,EAAY,EAAE,gBAAgB;AAAA;AAAA;AAChC,GAAA,EAEJ,CAAA;AAGF,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,OAAO,OAAA;AAAA,EACT;AAEA,EAAA,uBACEA,cAAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAM,MAAA,EAAQ,YAAA,EAAc,CAAC,IAAA,KAAS,CAAC,IAAA,IAAQ,QAAA,IAAW,EAC9D,QAAA,EAAA,OAAA,EACH,CAAA;AAEJ;ACvQO,SAAS,cAAA,CAAe;AAAA,EAC7B,UAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA,GAAS,IAAA;AAAA,EACT,WAAA,GAAc;AAChB,CAAA,EAAwB;AACtB,EAAA,MAAM;AAAA,IACJ,OAAA;AAAA,IACA,IAAA;AAAA,IACA,YAAA;AAAA,IACA,KAAA,EAAO;AAAA,MACLe,sBAAA,EAAiB;AACrB,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIlB,iBAAwB,IAAI,CAAA;AAGpE,EAAAO,kBAAU,MAAM;AACd,IAAA,IAAI,eAAA,EAAiB;AACnB,MAAA,eAAA,CAAgB,gBAAgB,OAAO,CAAA;AACvC,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,OAAA,CAAQ,eAAe,CAAA;AAAA,MACzB;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,eAAA,EAAiB,OAAO,CAAC,CAAA;AAE7B,EAAAA,kBAAU,MAAM;AAEd,IAAA,aAAA,EAAc;AAAA,EAChB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,gBAAgB,YAAY;AAChC,IAAA,IAAI;AACF,MAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,MAAA,MAAM,OAAA,EAAQ;AAEd,MAAA,UAAA,CAAW,MAAM;AACf,QAAA,UAAA,EAAW;AAAA,MACb,GAAG,GAAI,CAAA;AAAA,IACT,SAAS,KAAA,EAAO;AAAA,IAEhB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,iBAAiB,MAAc;AACnC,IAAA,QAAQ,IAAA;AAAM,MACZ,KAAK,YAAA;AACH,QAAA,OAAO,mCAAA;AAAA,MACT,KAAK,aAAA;AACH,QAAA,OAAO,gCAAA;AAAA,MACT;AACE,QAAA,OAAO,EAAA;AAAA;AACX,EACF,CAAA;AAEA,EAAA,MAAM,OAAA,mBACJK,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,sDAAA,EACb,QAAA,EAAA;AAAA,oBAAAT,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,wCAAA,EAAyC,QAAA,EAAA,4BAAA,EAEtD,CAAA;AAAA,IAEC,gCACCA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mIACZ,QAAA,EAAA,YAAA,EACH,CAAA;AAAA,oBAGFA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gFACb,QAAA,kBAAAA,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,CAAA,cAAA,EACT,YAAA,GAAe,oBAAA,GAAuB,EACxC,CAAA,CAAA;AAAA,QACD,QAAA,EAAA;AAAA;AAAA,KAED,EACF,CAAA;AAAA,oBAEAA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kEAAA,EACV,0BAAe,EAClB;AAAA,GAAA,EACF,CAAA;AAGF,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,OAAO,OAAA;AAAA,EACT;AAEA,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAM,MAAA;AAAA,MACN,YAAA,EAAc,CAAC,IAAA,KAAS;AACtB,QAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,YAAA,IAAgB,OAAA,EAAS;AACrC,UAAA,OAAA,CAAQ,IAAI,KAAA,CAAM,sBAAsB,CAAC,CAAA;AAAA,QAC3C;AAAA,MACF,CAAA;AAAA,MACA,oBAAA,EAAsB,CAAC,CAAA,KAAM;AAC3B,QAAA,IAAI,YAAA,IAAgB,cAAA,EAAe;AAAA,MACrC,CAAA;AAAA,MACA,eAAA,EAAiB,CAAC,CAAA,KAAM;AACtB,QAAA,IAAI,YAAA,IAAgB,cAAA,EAAe;AAAA,MACrC,CAAA;AAAA,MAEA,QAAA,kBAAAS,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EACb,QAAA,EAAA;AAAA,wBAAAT,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,cAAA,EAAe,QAAA,EAAA,gBAAA,EAAc,CAAA;AAAA,QACzC;AAAA,OAAA,EACH;AAAA;AAAA,GACF;AAEJ;ACnHO,IAAM,aAAwC,CAAC,EAAE,IAAA,EAAM,SAAA,EAAW,QAAO,KAAM;AACpF,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIH,iBAAS,KAAK,CAAA;AAE1C,EAAA,MAAM,aAAa,YAAY;AAC7B,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,IAAI,CAAA;AACxC,MAAA,SAAA,CAAU,IAAI,CAAA;AACd,MAAA,UAAA,CAAW,MAAM,SAAA,CAAU,KAAK,CAAA,EAAG,GAAI,CAAA;AACvC,MAAA,MAAA,IAAS;AAAA,IACX,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,gBAAgB,KAAK,CAAA;AAAA,IACrC;AAAA,EACF,CAAA;AAEA,EAAA,uBACEG,cAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,UAAA;AAAA,MACT,SAAA,EAAW,EAAA;AAAA,QACT,yEAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,YAAA,EAAW,MAAA;AAAA,MAEV,mCACCA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,OAC5F,QAAA,kBAAAA,cAAAA,CAAC,UAAA,EAAA,EAAS,MAAA,EAAO,kBAAiB,CAAA,EACpC,CAAA,mBAEAS,eAAAA,CAAC,SAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,SAAQ,WAAA,EAAY,IAAA,EAAK,QAAO,MAAA,EAAO,cAAA,EAAe,aAAY,GAAA,EAC5F,QAAA,EAAA;AAAA,wBAAAT,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,GAAA,EAAI,CAAA,EAAE,GAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,EAAA,EAAG,GAAA,EAAI,IAAG,GAAA,EAAI,CAAA;AAAA,wBACvDA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,yDAAA,EAA0D;AAAA,OAAA,EACpE;AAAA;AAAA,GAEJ;AAEJ,CAAA;AChCO,SAAS,YAAA,CAAa;AAAA,EAC3B,IAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAsB;AACpB,EAAA,uBACES,eAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,OAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,oBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,IAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAT,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mEAAA,EACb,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,wBACAS,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sCAAA,EACd,QAAA,EAAA;AAAA,0BAAAT,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4DAAA,EACb,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,UACC,8BACCA,cAAAA,CAAC,UAAK,SAAA,EAAU,+DAAA,EACb,uBACH,CAAA,GACE;AAAA,SAAA,EACN;AAAA;AAAA;AAAA,GACF;AAEJ;AC7CO,SAAS,UAAA,GAAa;AAC3B,EAAA,uBACES,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,KAAA,EAAM,4BAAA,EAChE,QAAA,EAAA;AAAA,oBAAAT,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAE,yHAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAE,uIAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAE,+HAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAE,qIAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA;AACP,GAAA,EACF,CAAA;AAEJ;ACrBO,SAAS,YAAA,GAAe;AAC7B,EAAA,uBACEA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,KAAA,EAAM,8BAChE,QAAA,kBAAAA,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,CAAA,EAAE,6JAAA;AAAA,MACF,IAAA,EAAK;AAAA;AAAA,GACP,EACF,CAAA;AAEJ;ACTO,SAAS,SAAA,GAAY;AAC1B,EAAA,uBACEA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,KAAA,EAAM,8BAChE,QAAA,kBAAAA,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,CAAA,EAAE,2bAAA;AAAA,MACF,IAAA,EAAK;AAAA;AAAA,GACP,EACF,CAAA;AAEJ;ACDO,SAAS,YAAA,CAAa;AAAA,EAC3B,QAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,OAAA,EAAQ;AACtB,EAAA,MAAM,KAAA,GAAuC;AAAA,IAC3C,MAAA,kBAAQA,cAAAA,CAAC,UAAA,EAAA,EAAW,CAAA;AAAA,IACpB,OAAA,kBAASA,cAAAA,CAAC,YAAA,EAAA,EAAa,CAAA;AAAA,IACvB,KAAA,kBAAOA,cAAAA,CAAC,SAAA,EAAA,EAAU;AAAA,GACpB;AACA,EAAA,uBACEA,cAAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,OAAA;AAAA,MACA,IAAA,EAAM,MAAM,QAAQ,CAAA;AAAA,MACpB,KAAA,EAAO,CAAA,CAAE,CAAA,aAAA,EAAgB,QAAQ,CAAA,CAAE;AAAA;AAAA,GACrC;AAEJ;AC1BO,SAAS,WAAW,KAAA,EAAsC;AAC/D,EAAA,uBACES,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,IAAA;AAAA,MACN,MAAA,EAAO,IAAA;AAAA,MACP,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,KAAA,EAAM,4BAAA;AAAA,MACN,aAAA,EAAY,MAAA;AAAA,MACX,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAT,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,kIAAA;AAAA,YACF,MAAA,EAAO,cAAA;AAAA,YACP,WAAA,EAAY,KAAA;AAAA,YACZ,aAAA,EAAc;AAAA;AAAA,SAChB;AAAA,wBACAA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,KAAA;AAAA,YACF,CAAA,EAAE,KAAA;AAAA,YACF,KAAA,EAAM,MAAA;AAAA,YACN,MAAA,EAAO,MAAA;AAAA,YACP,EAAA,EAAG,KAAA;AAAA,YACH,MAAA,EAAO,cAAA;AAAA,YACP,WAAA,EAAY;AAAA;AAAA,SACd;AAAA,wBACAA,cAAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,MAAA,EAAO,IAAG,MAAA,EAAO,CAAA,EAAE,KAAA,EAAM,IAAA,EAAK,cAAA,EAAe;AAAA;AAAA;AAAA,GAC1D;AAEJ;AC3BO,SAAS,YAAA,CAAa,EAAE,OAAA,EAAQ,EAA4B;AACjE,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,OAAA,EAAQ;AACtB,EAAA,uBACEA,cAAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,OAAA;AAAA,MACA,IAAA,kBAAMA,cAAAA,CAAC,UAAA,EAAA,EAAW,CAAA;AAAA,MAClB,KAAA,EAAO,EAAE,oBAAoB;AAAA;AAAA,GAC/B;AAEJ;ACbO,SAAS,SAAA,GAAY;AAC1B,EAAA,uBACES,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sHAAA,EACb,QAAA,EAAA;AAAA,oBAAAT,cAAAA,CAAC,UAAK,QAAA,EAAA,YAAA,EAAU,CAAA;AAAA,oBAChBA,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,aAAA;AAAA,QACR,IAAA,EAAK,MAAA;AAAA,QACL,KAAA,EAAM,4BAAA;AAAA,QACN,SAAA,EAAU,sFAAA;AAAA,QACV,KAAA,EAAO,EAAE,IAAA,EAAM,cAAA,EAAe;AAAA,QAC9B,YAAA,EAAW,MAAA;AAAA,QAEX,QAAA,kBAAAA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,w+CAAA;AAAA,YACF,IAAA,EAAK;AAAA;AAAA;AACP;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;ACbO,SAAS,gBAAA,CAAiB,EAAE,QAAA,EAAU,WAAA,EAAY,EAA0B;AACjF,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,OAAA,EAAQ;AACtB,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIH,iBAAS,EAAE,CAAA;AACrC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,iBAAwB,IAAI,CAAA;AACtD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,iBAAS,KAAK,CAAA;AAEhD,EAAA,MAAM,YAAA,GAAe,OAAO,CAAA,KAAuB;AACjD,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,YAAA,CAAa,IAAI,CAAA;AAEjB,IAAA,IAAI;AACF,MAAA,MAAM,SAAS,KAAK,CAAA;AAAA,IACtB,SAAS,GAAA,EAAK;AACZ,MAAA,QAAA,CAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,qBAAqB,CAAA;AAAA,IACrE,CAAA,SAAE;AACA,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB;AAAA,EACF,CAAA;AAEA,EAAA,uBACEY,eAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAU,YAAA,EACd,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2CAAA,EACb,QAAA,EAAA;AAAA,sBAAAT,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sEACb,QAAA,kBAAAA,cAAAA,CAAC,aAAU,CAAA,EACb,CAAA;AAAA,sBACAA,cAAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,OAAA;AAAA,UACL,KAAA,EAAO,KAAA;AAAA,UACP,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,UACxC,QAAA,EAAQ,IAAA;AAAA,UACR,WAAA,EAAa,EAAE,yBAAyB,CAAA;AAAA,UACxC,SAAA,EAAU;AAAA;AAAA;AACZ,KAAA,EACF,CAAA;AAAA,IAEC,yBACCA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0EACZ,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,oBAGFA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,QAAA,EAAU,aAAa,CAAC,KAAA;AAAA,QACxB,SAAA,EAAS,IAAA;AAAA,QACT,SAAA,EAAU,WAAA;AAAA,QACV,KAAA,EAAO,EAAE,eAAA,EAAiB,WAAA,EAAY;AAAA,QAErC,QAAA,EAAA,SAAA,GAAY,CAAA,CAAE,gBAAgB,CAAA,GAAI,EAAE,sBAAsB;AAAA;AAAA;AAC7D,GAAA,EACF,CAAA;AAEJ;ACzDO,SAAS,OAAA,CAAQ,EAAE,IAAA,GAAO,cAAA,EAAK,EAAiB;AACrD,EAAA,uBACES,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kDAAA,EACb,QAAA,EAAA;AAAA,oBAAAT,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EAA0C,CAAA;AAAA,oBACzDA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gCAAgC,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,oBACrDA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EAA0C;AAAA,GAAA,EAC3D,CAAA;AAEJ;ACRO,SAAS,aAAA,CAAc,EAAE,MAAA,EAAO,EAAuB;AAC5D,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,8DAAA;AAAA,MACV,KAAA,EAAO,EAAE,eAAA,EAAiB,MAAA,CAAO,eAAA,EAAgB;AAAA,MAEhD,QAAA,EAAA,MAAA,CAAO;AAAA;AAAA,GACV;AAEJ;ACCO,SAAS,kBAAA,CAAmB;AAAA,EACjC,cAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAA4B;AAC1B,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,OAAA,EAAQ;AACtB,EAAA,MAAM;AAAA,IACJ,WAAA;AAAA,IACA,mBAAA,GAAsB,CAAC,OAAA,EAAS,QAAA,EAAU,MAAM,CAAA;AAAA,IAChD,eAAA,GAAkB,CAAC,QAAA,EAAU,SAAA,EAAW,OAAO;AAAA,MAC7C,SAAA,EAAU;AACd,EAAA,MAAM,MAAA,GAAS,cAAc,oBAAoB,CAAA;AACjD,EAAA,MAAM,kBAAA,GAAqB,OAAA,CAAQ,QAAQ,CAAA,IAAK,MAAA;AAEhD,EAAA,MAAM,cAAA,GAAiB,mBAAA,CAAoB,QAAA,CAAS,OAAO,CAAA;AAC3D,EAAA,MAAM,eAAA,GAAkB,mBAAA,CAAoB,QAAA,CAAS,QAAQ,CAAA;AAC7D,EAAA,MAAM,aAAA,GAAgB,mBAAA,CAAoB,QAAA,CAAS,MAAM,CAAA;AAGzD,EAAA,MAAM,iBAAA,GACJ,mBAAmB,eAAA,IAAmB,aAAA,CAAA;AACxC,EAAA,MAAM,sBAAA,GACJ,CAAC,cAAA,IAAkB,eAAA,IAAmB,aAAA;AAExC,EAAA,uBACES,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EACE,qBACI,6GAAA,GACA,wCAAA;AAAA,MAEN,KAAA,EAAO,kBAAA,GAAqB,EAAE,SAAA,EAAW,SAAQ,GAAI,MAAA;AAAA,MAEpD,QAAA,EAAA;AAAA,QAAA,kBAAA,oBACCT,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0CAAA,EACb,0BAAAA,cAAAA,CAAC,aAAA,EAAA,EAAc,MAAA,EAAQ,QAAA,EAAW,CAAA,EACpC,CAAA;AAAA,wBAEFS,eAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,CAAA,oCAAA,EACT,kBAAA,GAAqB,UAAA,GAAa,EACpC,CAAA,CAAA;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAAT,cAAAA,CAAC,eAAY,OAAA,EAAkB,CAAA;AAAA,8BAC/BA,cAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,4CAAA,EACV,QAAA,EAAA,CAAA,CAAE,aAAa,CAAA,EAClB,CAAA;AAAA,cAGC,kCACCA,cAAAA;AAAA,gBAAC,gBAAA;AAAA,gBAAA;AAAA,kBACC,QAAA,EAAU,aAAA;AAAA,kBACV;AAAA;AAAA,eACF;AAAA,cAID,iBAAA,oBAAqBA,cAAAA,CAAC,OAAA,EAAA,EAAQ,CAAA;AAAA,8BAG/BS,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCAAA,EACZ,QAAA,EAAA;AAAA,gBAAA,eAAA,IACC,eAAA,CAAgB,GAAA,CAAI,CAAC,QAAA,qBACnBT,cAAAA;AAAA,kBAAC,YAAA;AAAA,kBAAA;AAAA,oBAEC,QAAA;AAAA,oBACA,OAAA,EAAS,MAAM,cAAA,CAAe,QAA0B;AAAA,mBAAA;AAAA,kBAFnD;AAAA,iBAIR,CAAA;AAAA,gBAEF,sBAAA,oBAA0BA,cAAAA,CAAC,OAAA,EAAA,EAAQ,CAAA;AAAA,gBAEnC,aAAA,oBACCA,cAAAA,CAAC,YAAA,EAAA,EAAa,SAAS,MAAM,cAAA,CAAe,MAAM,CAAA,EAAG;AAAA,eAAA,EAEzD,CAAA;AAAA,8BAGAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EAAc,CAAA;AAAA,8BAG7BA,eAAC,SAAA,EAAA,EAAU;AAAA;AAAA;AAAA;AACb;AAAA;AAAA,GACF;AAEJ;AChFO,SAAS,eAAA,CAAgB,EAAE,KAAA,EAAO,QAAA,EAAU,UAAS,EAAyB;AACnF,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,OAAA,EAAQ;AACtB,EAAA,MAAM,EAAE,WAAA,EAAY,GAAI,SAAA,EAAU;AAClC,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIH,gBAAAA,CAAmB,MAAM,CAAC,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA;AAChE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,iBAAwB,IAAI,CAAA;AACtD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,iBAAS,KAAK,CAAA;AAChD,EAAA,MAAM,SAAA,GAAYQ,cAAAA,CAAoC,EAAE,CAAA;AAGxD,EAAAD,kBAAU,MAAM;AACd,IAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,CAAA,EAAG,KAAA,EAAM;AAAA,EAC9B,CAAA,EAAG,EAAE,CAAA;AAGL,EAAAA,kBAAU,MAAM;AACd,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,EAAE,CAAA;AAC3B,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,IAAK,CAAC,SAAA,EAAW;AACnC,MAAA,YAAA,CAAa,IAAI,CAAA;AAAA,IACnB;AAAA,EACF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,MAAM,YAAA,GAAe,OAAO,IAAA,KAAiB;AAC3C,IAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AAEvB,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,YAAA,CAAa,IAAI,CAAA;AAEjB,IAAA,IAAI;AACF,MAAA,MAAM,SAAS,IAAI,CAAA;AAAA,IACrB,SAAS,GAAA,EAAK;AACZ,MAAA,QAAA,CAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,cAAc,CAAA;AAE5D,MAAA,SAAA,CAAU,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA;AAC3B,MAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,CAAA,EAAG,KAAA,EAAM;AAAA,IAC9B,CAAA,SAAE;AACA,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,KAAA,EAAe,KAAA,KAAkB;AAErD,IAAA,IAAI,CAAC,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAA,EAAG;AAE1B,IAAA,MAAM,SAAA,GAAY,CAAC,GAAG,MAAM,CAAA;AAC5B,IAAA,SAAA,CAAU,KAAK,CAAA,GAAI,KAAA,CAAM,KAAA,CAAM,EAAE,CAAA;AACjC,IAAA,SAAA,CAAU,SAAS,CAAA;AAGnB,IAAA,IAAI,KAAA,IAAS,QAAQ,CAAA,EAAG;AACtB,MAAA,SAAA,CAAU,OAAA,CAAQ,KAAA,GAAQ,CAAC,CAAA,EAAG,KAAA,EAAM;AAAA,IACtC;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,EAAe,CAAA,KAA6C;AACjF,IAAA,IAAI,CAAA,CAAE,QAAQ,WAAA,EAAa;AACzB,MAAA,IAAI,CAAC,MAAA,CAAO,KAAK,CAAA,IAAK,QAAQ,CAAA,EAAG;AAE/B,QAAA,SAAA,CAAU,OAAA,CAAQ,KAAA,GAAQ,CAAC,CAAA,EAAG,KAAA,EAAM;AAAA,MACtC,CAAA,MAAO;AAEL,QAAA,MAAM,SAAA,GAAY,CAAC,GAAG,MAAM,CAAA;AAC5B,QAAA,SAAA,CAAU,KAAK,CAAA,GAAI,EAAA;AACnB,QAAA,SAAA,CAAU,SAAS,CAAA;AAAA,MACrB;AAAA,IACF,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,WAAA,IAAe,QAAQ,CAAA,EAAG;AAC7C,MAAA,SAAA,CAAU,OAAA,CAAQ,KAAA,GAAQ,CAAC,CAAA,EAAG,KAAA,EAAM;AAAA,IACtC,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,YAAA,IAAgB,QAAQ,CAAA,EAAG;AAC9C,MAAA,SAAA,CAAU,OAAA,CAAQ,KAAA,GAAQ,CAAC,CAAA,EAAG,KAAA,EAAM;AAAA,IACtC;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,CAAA,KAA4B;AAC/C,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,MAAM,UAAA,GAAa,CAAA,CAAE,aAAA,CAAc,OAAA,CAAQ,MAAM,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AAChF,IAAA,MAAM,SAAA,GAAY,UAAA,CAAW,KAAA,CAAM,EAAE,EAAE,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,CAAE,KAAK,EAAE,CAAC,CAAA,CAAE,KAAA,CAAM,GAAG,CAAC,CAAA;AAC3E,IAAA,SAAA,CAAU,SAAS,CAAA;AAGnB,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,GAAA,CAAI,UAAA,CAAW,QAAQ,CAAC,CAAA;AAC/C,IAAA,SAAA,CAAU,OAAA,CAAQ,SAAS,CAAA,EAAG,KAAA,EAAM;AAAA,EACtC,CAAA;AAEA,EAAA,MAAM,eAAe,YAAY;AAC/B,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,EAAS;AAAA,IACjB,SAAS,GAAA,EAAK;AACZ,MAAA,QAAA,CAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,uBAAuB,CAAA;AAAA,IACvE;AAAA,EACF,CAAA;AAEA,EAAA,uBACEK,gBAAC,KAAA,EAAA,EAEC,QAAA,EAAA;AAAA,oBAAAT,eAAC,GAAA,EAAA,EAAE,SAAA,EAAU,4CAAA,EACV,QAAA,EAAA,CAAA,CAAE,yBAAyB,CAAA,EAC9B,CAAA;AAAA,oBAGAA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,4CAAA,EACV,YAAE,+BAAA,EAAiC,EAAE,KAAA,EAAO,CAAA,EAC/C,CAAA;AAAA,oBAGAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oDAAA,EACZ,iBAAO,GAAA,CAAI,CAAC,KAAA,EAAO,KAAA,qBAClBA,cAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QAEC,KAAK,CAAC,EAAA,KAAQ,SAAA,CAAU,OAAA,CAAQ,KAAK,CAAA,GAAI,EAAA;AAAA,QACzC,IAAA,EAAK,MAAA;AAAA,QACL,SAAA,EAAU,SAAA;AAAA,QACV,SAAA,EAAW,CAAA;AAAA,QACX,KAAA,EAAO,KAAA;AAAA,QACP,UAAU,CAAC,CAAA,KAAM,aAAa,KAAA,EAAO,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,QACnD,SAAA,EAAW,CAAC,CAAA,KAAM,aAAA,CAAc,OAAO,CAAC,CAAA;AAAA,QACxC,OAAA,EAAS,KAAA,KAAU,CAAA,GAAI,WAAA,GAAc,MAAA;AAAA,QACrC,QAAA,EAAU,SAAA;AAAA,QACV,SAAA,EAAU,8JAAA;AAAA,QACV,KAAA,EAAO;AAAA,UACL,MAAA,EAAQ,CAAA,UAAA,EAAa,KAAA,GAAQ,WAAA,GAAc,2BAA2B,CAAA,CAAA;AAAA,UACtE,eAAA,EAAiB,YAAY,0BAAA,GAA6B;AAAA,SAC5D;AAAA,QACA,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,UAAA,CAAA,CAAE,MAAA,CAAO,MAAM,WAAA,GAAc,WAAA;AAC7B,UAAA,CAAA,CAAE,MAAA,CAAO,KAAA,CAAM,SAAA,GAAY,CAAA,UAAA,EAAa,WAAW,CAAA,EAAA,CAAA;AAAA,QACrD,CAAA;AAAA,QACA,MAAA,EAAQ,CAAC,CAAA,KAAM;AACb,UAAA,IAAI,CAAC,KAAA,EAAO;AACV,YAAA,CAAA,CAAE,MAAA,CAAO,MAAM,WAAA,GAAc,2BAAA;AAAA,UAC/B;AACA,UAAA,CAAA,CAAE,MAAA,CAAO,MAAM,SAAA,GAAY,MAAA;AAAA,QAC7B;AAAA,OAAA;AAAA,MAxBK;AAAA,KA0BR,CAAA,EACH,CAAA;AAAA,IAGC,KAAA,oBACCS,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,8GAAA,EACb,QAAA,EAAA;AAAA,sBAAAT,cAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,2BAAA,EAA4B,CAAA;AAAA,sBACjDA,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,KAAA,EAAM;AAAA,KAAA,EACf,CAAA;AAAA,oBAIFA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAK,IAAA;AAAA,QACL,SAAA,EAAS,IAAA;AAAA,QACT,OAAA,EAAS,YAAA;AAAA,QACT,QAAA,EAAU,SAAA;AAAA,QAET,YAAE,oBAAoB;AAAA;AAAA;AACzB,GAAA,EACF,CAAA;AAEJ;ACnIA,IAAM,WAAW,MAAe;AAC9B,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,KAAA;AAC1C,EAAA,OAAO,gEAAA,CAAiE,IAAA;AAAA,IACtE,SAAA,CAAU;AAAA,GACZ;AACF,CAAA;AAEO,SAAS,eAAA,CAAgB;AAAA,EAC9B,MAAA,GAAS,IAAA;AAAA,EACT,WAAA,GAAc,IAAA;AAAA,EACd,SAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAAyB;AACvB,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,OAAA,EAAQ;AACtB,EAAA,MAAM;AAAA,IACJ,cAAA;AAAA,IACA,iBAAA;AAAA,IACA,gBAAA;AAAA,IACA;AAAA,MACEgB,kBAAA,EAAa;AACjB,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAInB,iBAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,iBAAgD,SAAS,CAAA;AACjF,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,iBAAwB,IAAI,CAAA;AAC1D,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,iBAAwB,IAAI,CAAA;AACtD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,iBAAyB,IAAI,CAAA;AAC/D,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,gBAAAA,CAAkC,EAAE,CAAA;AACtE,EAAA,MAAM,CAAC,cAAc,CAAA,GAAIA,gBAAAA,CAAS,UAAU,CAAA;AAG5C,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIA,iBAAwB,IAAI,CAAA;AAC5E,EAAA,MAAM,UAAA,GAAaQ,eAA8B,IAAI,CAAA;AAKrD,EAAA,MAAM,sBAAsB,MAAe;AACzC,IAAA,OAAO,OAAO,MAAA,KAAW,WAAA,IAAe,CAAC,CAAE,MAAA,CAAe,QAAA;AAAA,EAC5D,CAAA;AAGA,EAAAD,kBAAU,MAAM;AACd,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,aAAA,CAAc,WAAW,OAAO,CAAA;AAAA,MAClC;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAAA,kBAAU,MAAM;AACd,IAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AAGnC,IAAA,MAAM,sBAAA,GAAyB,CAAC,KAAA,KAAe;AAC7C,MAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,MAAA,YAAA,CAAa,CAAC,IAAA,KAAS;AACrB,QAAA,IAAI,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,KAAK,IAAA,KAAS,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,EAAG;AACtD,UAAA,OAAO,IAAA;AAAA,QACT;AACA,QAAA,OAAO,CAAC,GAAG,IAAA,EAAM,MAAM,CAAA;AAAA,MACzB,CAAC,CAAA;AACD,MAAA,YAAA,CAAa,IAAI,CAAA;AAAA,IACnB,CAAA;AAEA,IAAA,MAAA,CAAO,gBAAA,CAAiB,4BAA4B,sBAAsB,CAAA;AAC1E,IAAA,MAAA,CAAO,aAAA,CAAc,IAAI,KAAA,CAAM,yBAAyB,CAAC,CAAA;AAGzD,IAAA,MAAM,cAAc,YAAY;AAC9B,MAAA,MAAM,kBACJ,OAAO,MAAA,KAAW,WAAA,IAAe,CAAC,CAAE,MAAA,CAAe,QAAA;AACrD,MAAA,YAAA,CAAa,eAAe,CAAA;AAE5B,MAAA,IAAI,eAAA,EAAiB;AACnB,QAAA,IAAI;AACF,UAAA,MAAM,QAAA,GAAW,MAAO,MAAA,CAAe,QAAA,CAAS,OAAA,CAAQ;AAAA,YACtD,MAAA,EAAQ;AAAA,WACT,CAAA;AACD,UAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,YAAA,UAAA,CAAW,QAAA,CAAS,CAAC,CAAC,CAAA;AACtB,YAAA,OAAA,CAAQ,MAAM,CAAA;AAAA,UAChB;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF,CAAA;AAEA,IAAA,WAAA,EAAY;AAEZ,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,CAAO,mBAAA;AAAA,QACL,0BAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,cAAc,MAAW;AAC7B,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAgB,MAAA,CAAe,QAAA,EAAU;AAC7D,MAAA,OAAQ,MAAA,CAAe,QAAA;AAAA,IACzB;AACA,IAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,MAAA,OAAO,SAAA,CAAU,CAAC,CAAA,CAAE,QAAA;AAAA,IACtB;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAKA,EAAA,MAAM,kBAAA,GAAqBH,oBAAY,YAAY;AACjD,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,QAAA,CAAS,IAAI,CAAA;AAEb,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,MAAM,iBAAA,EAAkB;AACxC,MAAA,MAAM,GAAA,GAAM,cAAA,CAAe,OAAA,CAAQ,EAAE,CAAA;AAErC,MAAA,mBAAA,CAAoB,GAAG,CAAA;AACvB,MAAA,OAAA,CAAQ,gBAAgB,CAAA;AAGxB,MAAA,UAAA,CAAW,OAAA,GAAU,YAAY,YAAY;AAC3C,QAAA,IAAI;AACF,UAAA,MAAM,MAAA,GAAS,MAAM,gBAAA,CAAiB,OAAA,CAAQ,EAAE,CAAA;AAEhD,UAAA,IAAI,MAAA,CAAO,MAAA,KAAW,WAAA,IAAe,MAAA,CAAO,IAAA,EAAM;AAEhD,YAAA,IAAI,WAAW,OAAA,EAAS;AACtB,cAAA,aAAA,CAAc,WAAW,OAAO,CAAA;AAChC,cAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,YACvB;AAGA,YAAA,SAAA,CAAU;AAAA,cACR,MAAA,EAAQ,OAAO,IAAA,CAAK,EAAA;AAAA,cACpB,SAAA,EAAW,OAAO,SAAA,IAAa,KAAA;AAAA,cAC/B,cAAA,EAAiB,MAAA,CAAO,IAAA,CAAK,cAAA,IAAiD,IAAA;AAAA,cAC9E,UAAA,EAAa,MAAA,CAAO,IAAA,CAAK,UAAA,IAAyC;AAAA,aACnE,CAAA;AAAA,UACH,CAAA,MAAA,IAAW,MAAA,CAAO,MAAA,KAAW,SAAA,EAAW;AAEtC,YAAA,IAAI,WAAW,OAAA,EAAS;AACtB,cAAA,aAAA,CAAc,WAAW,OAAO,CAAA;AAChC,cAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,YACvB;AACA,YAAA,QAAA,CAAS,CAAA,CAAE,qBAAqB,CAAC,CAAA;AACjC,YAAA,OAAA,CAAQ,SAAS,CAAA;AACjB,YAAA,mBAAA,CAAoB,IAAI,CAAA;AAAA,UAC1B;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF,GAAG,GAAI,CAAA;AAAA,IACT,SAAS,GAAA,EAAK;AACZ,MAAA,QAAA,CAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,0BAA0B,CAAA;AACxE,MAAA,OAAA,CAAQ,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,0BAA0B,CAAC,CAAA;AAAA,IAC5E,CAAA,SAAE;AACA,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB;AAAA,EACF,CAAA,EAAG,CAAC,iBAAA,EAAmB,cAAA,EAAgB,kBAAkB,SAAA,EAAW,OAAA,EAAS,CAAC,CAAC,CAAA;AAK/E,EAAA,MAAM,mBAAA,GAAsBA,oBAAY,YAAY;AAClD,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,YAAA,CAAa,IAAI,CAAA;AAEjB,IAAA,IAAI;AACF,MAAA,MAAM,WAAW,WAAA,EAAY;AAE7B,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,CAAE,oBAAoB,CAAC,CAAA;AAAA,MACzC;AAEA,MAAA,YAAA,CAAa,IAAI,CAAA;AAEjB,MAAA,MAAM,QAAA,GAAW,MAAM,QAAA,CAAS,OAAA,CAAQ;AAAA,QACtC,MAAA,EAAQ;AAAA,OACT,CAAA;AAED,MAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,QAAA,MAAM,IAAI,MAAM,mBAAmB,CAAA;AAAA,MACrC;AAEA,MAAA,UAAA,CAAW,QAAA,CAAS,CAAC,CAAC,CAAA;AACtB,MAAA,OAAA,CAAQ,MAAM,CAAA;AAAA,IAChB,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,YAAA,GACJ,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,0BAAA;AACvC,MAAA,QAAA,CAAS,YAAY,CAAA;AACrB,MAAA,OAAA,CAAQ,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,YAAY,CAAC,CAAA;AAAA,IAC9D,CAAA,SAAE;AACA,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB;AAAA,EACF,CAAA,EAAG,CAAC,CAAA,EAAG,OAAO,CAAC,CAAA;AAKf,EAAA,MAAM,UAAA,GAAaA,oBAAY,YAAY;AACzC,IAAA,IAAI,CAAC,OAAA,EAAS;AAEd,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,YAAA,CAAa,IAAI,CAAA;AAEjB,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,cAAA,CAAe,OAAO,CAAA;AAE3C,MAAA,SAAA,CAAU;AAAA,QACR,QAAQ,MAAA,CAAO,MAAA;AAAA,QACf,WAAW,MAAA,CAAO,SAAA;AAAA,QAClB,gBAAgB,MAAA,CAAO,cAAA;AAAA,QACvB,UAAA,EAAY,OAAO,UAAA,IAAc;AAAA,OAClC,CAAA;AAAA,IACH,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,YAAA,GACJ,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,wBAAA;AACvC,MAAA,QAAA,CAAS,YAAY,CAAA;AACrB,MAAA,OAAA,CAAQ,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,YAAY,CAAC,CAAA;AAAA,IAC9D,CAAA,SAAE;AACA,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB;AAAA,EACF,GAAG,CAAC,OAAA,EAAS,cAAA,EAAgB,SAAA,EAAW,OAAO,CAAC,CAAA;AAKhD,EAAA,MAAM,kBAAA,GAAqBA,oBAAY,MAAM;AAC3C,IAAA,IAAI,gBAAA,EAAkB;AACpB,MAAA,SAAA,CAAU,SAAA,CAAU,UAAU,gBAAgB,CAAA;AAC9C,MAAA,KAAA,CAAM,CAAA,CAAE,gBAAgB,CAAC,CAAA;AAAA,IAC3B;AAAA,EACF,CAAA,EAAG,CAAC,gBAAA,EAAkB,CAAC,CAAC,CAAA;AAExB,EAAA,MAAM,OAAA,mBACJQ,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,4BAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,eAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAK,IAAA;AAAA,QACL,OAAA,EAAS,MAAA;AAAA,QACT,SAAA,EAAU,sBAAA;AAAA,QACX,QAAA,EAAA;AAAA,UAAA,SAAA;AAAA,UACI,EAAE,aAAa;AAAA;AAAA;AAAA,KACpB;AAAA,oBAEAT,cAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,4CAAA,EACV,QAAA,EAAA,CAAA,CAAE,oBAAoB,CAAA,EACzB,CAAA;AAAA,IAGC,WAAW,IAAA,KAAS,gBAAA,oBACnBS,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,uGAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAT,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EACZ,QAAA,EAAA,CAAA,CAAE,wBAAwB,CAAA,EAC7B,CAAA;AAAA,wBACAS,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8CAAA,EACZ,QAAA,EAAA;AAAA,UAAA,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAC,CAAA;AAAA,UAAE,KAAA;AAAA,UAAI,OAAA,CAAQ,MAAM,EAAE;AAAA,SAAA,EAC3C;AAAA,OAAA,EACF,CAAA;AAAA,sBACAT,cAAAA,CAAC,UAAA,EAAA,EAAW,IAAA,EAAM,OAAA,EAAS;AAAA,KAAA,EAC7B,CAAA;AAAA,IAID,yBACCA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0EACZ,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,IAID,SAAS,gBAAA,IAAoB,gBAAA,oBAC5BS,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gBAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qEAAA,EACb,QAAA,EAAA;AAAA,wBAAAT,eAAC,GAAA,EAAA,EAAE,SAAA,EAAU,4BAAA,EAA8B,QAAA,EAAA,CAAA,CAAE,kBAAkB,CAAA,EAAE,CAAA;AAAA,wBACjES,eAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,oFAAA,EACZ,QAAA,EAAA;AAAA,0BAAAT,cAAAA,CAAC,IAAA,EAAA,EAAI,QAAA,EAAA,CAAA,CAAE,kBAAkB,CAAA,EAAE,CAAA;AAAA,0BAC3BA,cAAAA,CAAC,IAAA,EAAA,EAAI,QAAA,EAAA,CAAA,CAAE,kBAAkB,CAAA,EAAE,CAAA;AAAA,0BAC3BA,cAAAA,CAAC,IAAA,EAAA,EAAI,QAAA,EAAA,CAAA,CAAE,kBAAkB,CAAA,EAAE;AAAA,SAAA,EAC7B;AAAA,OAAA,EACF,CAAA;AAAA,sBAGAS,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uDAAA,EACb,QAAA,EAAA;AAAA,wBAAAT,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,mDAAA,EAAoD,QAAA,EAAA,WAAA,EAAS,CAAA;AAAA,wBAC1EA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kEACV,QAAA,EAAA,gBAAA,EACH;AAAA,OAAA,EACF,CAAA;AAAA,sBAEAA,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,SAAA;AAAA,UACR,SAAA,EAAS,IAAA;AAAA,UACT,OAAA,EAAS,kBAAA;AAAA,UAER,YAAE,cAAc;AAAA;AAAA,OACnB;AAAA,sBAEAS,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BAAA,EACb,QAAA,EAAA;AAAA,wBAAAT,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gIAAA,EAAiI,CAAA;AAAA,wBAChJA,cAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,mDAAA,EACV,QAAA,EAAA,CAAA,CAAE,0BAA0B,CAAA,EAC/B;AAAA,OAAA,EACF,CAAA;AAAA,sBAEAA,cAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,SAAS,MAAM;AACb,YAAA,IAAI,WAAW,OAAA,EAAS;AACtB,cAAA,aAAA,CAAc,WAAW,OAAO,CAAA;AAChC,cAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,YACvB;AACA,YAAA,OAAA,CAAQ,SAAS,CAAA;AACjB,YAAA,mBAAA,CAAoB,IAAI,CAAA;AAAA,UAC1B,CAAA;AAAA,UACA,SAAA,EAAU,6DAAA;AAAA,UAET,YAAE,eAAe;AAAA;AAAA;AACpB,KAAA,EACF,CAAA;AAAA,IAID,SAAS,SAAA,oBACRS,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gBAAA,EAEZ,QAAA,EAAA;AAAA,MAAA,mBAAA,EAAoB,oBACnBA,eAAAA,CAAAE,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAAX,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,SAAA;AAAA,YACR,SAAA,EAAS,IAAA;AAAA,YACT,OAAA,EAAS,mBAAA;AAAA,YACT,QAAA,EAAU,SAAA;AAAA,YAET,QAAA,EAAA,SAAA,GAAY,CAAA,CAAE,gBAAgB,CAAA,GAAI,EAAE,qBAAqB;AAAA;AAAA,SAC5D;AAAA,wBAGAS,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kDAAA,EACb,QAAA,EAAA;AAAA,0BAAAT,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EAA0C,CAAA;AAAA,0BACzDA,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,kCAAA,EAAoC,QAAA,EAAA,CAAA,CAAE,UAAU,CAAA,EAAE,CAAA;AAAA,0BAClEA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EAA0C;AAAA,SAAA,EAC3D;AAAA,OAAA,EACF,CAAA;AAAA,sBAIFA,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,mBAAA,EAAoB,GAAI,WAAA,GAAc,SAAA;AAAA,UAC/C,SAAA,EAAS,IAAA;AAAA,UACT,OAAA,EAAS,kBAAA;AAAA,UACT,QAAA,EAAU,SAAA;AAAA,UAET,QAAA,EAAA,SAAA,GAAY,CAAA,CAAE,gBAAgB,CAAA,GAAI,EAAE,mBAAmB;AAAA;AAAA;AAC1D,KAAA,EACF,CAAA;AAAA,IAID,IAAA,KAAS,0BACRA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,SAAA;AAAA,QACR,SAAA,EAAS,IAAA;AAAA,QACT,OAAA,EAAS,UAAA;AAAA,QACT,QAAA,EAAU,SAAA;AAAA,QAET,QAAA,EAAA,SAAA,GAAY,CAAA,CAAE,gBAAgB,CAAA,GAAI,EAAE,mBAAmB;AAAA;AAAA;AAC1D,GAAA,EAEJ,CAAA;AAGF,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,OAAO,OAAA;AAAA,EACT;AAEA,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAM,MAAA;AAAA,MACN,cAAc,CAAC,IAAA,KAAS,CAAC,IAAA,KAAS,OAAA,QAAe,MAAA,IAAS,CAAA;AAAA,MAE1D,QAAA,kBAAAS,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EACb,QAAA,EAAA;AAAA,wBAAAT,eAAC,GAAA,EAAA,EAAE,SAAA,EAAU,cAAA,EAAgB,QAAA,EAAA,CAAA,CAAE,oBAAoB,CAAA,EAAE,CAAA;AAAA,QACpD;AAAA,OAAA,EACH;AAAA;AAAA,GACF;AAEJ;ACnaO,SAAS,WAAA,CAAY,EAAE,MAAA,EAAQ,OAAA,EAAS,SAAQ,EAAqB;AAC1E,EAAA,MAAM,EAAE,MAAA,EAAQ,IAAA,EAAK,GAAIY,oBAAAA,EAAe;AACxC,EAAA,MAAM,EAAE,OAAA,EAAS,QAAA,EAAS,GAAI,SAAA,EAAU;AACxC,EAAA,MAAM,EAAE,gBAAA,EAAkB,eAAA,EAAiB,iBAAA,KACzCI,kBAAAA,EAAa;AAEf,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GACpCnB,iBAA4B,eAAe,CAAA;AAC7C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,iBAAS,EAAE,CAAA;AAGrC,EAAA,MAAM,UAAA,GAAa,MAAM,cAAA,KAAmB,SAAA;AAG5C,EAAA,MAAMU,SAAAA,GAAW,cAAc,oBAAoB,CAAA;AAEnD,EAAA,MAAM,cAAA,GAAiB,cAAc,oBAAoB,CAAA;AAEzD,EAAA,MAAM,sBACJ,CAACA,SAAAA,IACD,kBACA,OAAA,CAAQ,QAAQ,KAChB,aAAA,KAAkB,eAAA;AAGpB,EAAAH,kBAAU,MAAM;AACd,IAAA,IAAI,CAAC,MAAA,EAAQ;AAEX,MAAA,gBAAA,CAAiB,eAAe,CAAA;AAChC,MAAA,QAAA,CAAS,EAAE,CAAA;AAAA,IACb;AAAA,EACF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,kBAAA,GAAqB,CAAC,MAAA,KAAyB;AACnD,IAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,MAAA,gBAAA,CAAiB,YAAY,CAAA;AAAA,IAC/B,WACE,MAAA,KAAW,QAAA,IACX,MAAA,KAAW,SAAA,IACX,WAAW,OAAA,EACX;AAEA,MAAA,iBAAA,CAAkB,MAAM,CAAA;AAAA,IAC1B;AAAA,EAEF,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,OAAO,UAAA,KAAuB;AACtD,IAAA,QAAA,CAAS,UAAU,CAAA;AACnB,IAAA,MAAM,iBAAiB,UAAU,CAAA;AACjC,IAAA,gBAAA,CAAiB,YAAY,CAAA;AAAA,EAC/B,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,OAAO,IAAA,KAAiB;AAC/C,IAAA,MAAM,MAAA,GAAS,MAAM,eAAA,CAAgB,KAAA,EAAO,IAAI,CAAA;AAGhD,IAAA,IAAI,OAAO,cAAA,EAAgB;AACzB,MAAA,OAAA,EAAQ;AACR,MAAA;AAAA,IACF;AAGA,IAAA,gBAAA,CAAiB,eAAe,CAAA;AAAA,EAClC,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,CAAC,KAAA,KAKrB;AAGJ,IAAA,OAAA,EAAQ;AAAA,EACV,CAAA;AAEA,EAAA,MAAM,wBAAwB,MAAM;AAElC,IAAA,OAAA,EAAQ;AAAA,EACV,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqB,CAAC,KAAA,KAAiB;AAC3C,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf;AAAA,EAEF,CAAA;AAEA,EAAA,MAAM,eAAe,YAAY;AAC/B,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,EAAO;AAEb,MAAA,gBAAA,CAAiB,eAAe,CAAA;AAChC,MAAA,QAAA,CAAS,EAAE,CAAA;AACX,MAAA,OAAA,EAAQ;AAAA,IACV,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,OAAA,CAAQ,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,eAAe,CAAC,CAAA;AAAA,MACrE;AAAA,IACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,mBAAA,GAAsB,CAAC,EAAA,KAAY;AAEvC,IAAA,IAAI,aAAA,KAAkB,mBAAmB,UAAA,EAAY;AAEnD,MAAA,gBAAA,CAAiB,eAAe,CAAA;AAChC,MAAA,QAAA,CAAS,EAAE,CAAA;AACX,MAAA,OAAA,EAAQ;AAAA,IACV;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,mBAAmB,MAAM;AAC7B,IAAA,OAAA,EAAQ;AAAA,EACV,CAAA;AAGA,EAAA,MAAM,sBAAsB,MAAM;AAChC,IAAA,QAAQ,aAAA;AAAe,MACrB,KAAK,eAAA;AACH,QAAA,uBACEJ,cAAAA;AAAA,UAAC,kBAAA;AAAA,UAAA;AAAA,YAEC,OAAA;AAAA,YACA,cAAA,EAAgB,kBAAA;AAAA,YAChB,aAAA,EAAe,iBAAA;AAAA,YACf,OAAA;AAAA,YACA,QAAA,EAAU,sBAAsB,QAAA,GAAW;AAAA,WAAA;AAAA,UALvC;AAAA,SAMN;AAAA,MAEJ,KAAK,YAAA;AACH,QAAA,uBACES,eAAAA,CAAAE,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,0BAAAX,cAAAA;AAAA,YAAC,WAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAI,IAAA;AAAA,cACJ,MAAA,EAAQ,MAAM,gBAAA,CAAiB,eAAe,CAAA;AAAA,cAC9C;AAAA;AAAA,WACF;AAAA,0BACAA,cAAAA;AAAA,YAAC,eAAA;AAAA,YAAA;AAAA,cAEC,KAAA;AAAA,cACA,QAAA,EAAU,gBAAA;AAAA,cACV,MAAA,EAAQ,MAAM,gBAAA,CAAiB,eAAe,CAAA;AAAA,cAC9C,QAAA,EAAU,MAAM,gBAAA,CAAiB,KAAK;AAAA,aAAA;AAAA,YAJlC;AAAA;AAKN,SAAA,EACF,CAAA;AAAA,MAEJ,KAAK,YAAA;AACH,QAAA,uBACEA,cAAAA;AAAA,UAAC,eAAA;AAAA,UAAA;AAAA,YAEC,WAAA,EAAa,KAAA;AAAA,YACb,SAAA,EAAW,iBAAA;AAAA,YACX,MAAA,EAAQ,MAAM,gBAAA,CAAiB,eAAe,CAAA;AAAA,YAC9C,OAAA,EAAS;AAAA,WAAA;AAAA,UAJL;AAAA,SAKN;AAAA,MAEJ,KAAK,eAAA;AACH,QAAA,uBACEA,cAAAA;AAAA,UAAC,iBAAA;AAAA,UAAA;AAAA,YAEC,WAAA,EAAa,KAAA;AAAA,YACb,UAAA,EAAY,qBAAA;AAAA,YACZ,OAAA,EAAS,kBAAA;AAAA,YACT,QAAA,EAAU,YAAA;AAAA,YACV;AAAA,WAAA;AAAA,UALI;AAAA,SAMN;AAAA,MAEJ;AACE,QAAA,OAAO,IAAA;AAAA;AACX,EACF,CAAA;AAEA,EAAA,uBACES,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAM,MAAA;AAAA,MACN,YAAA,EAAc,CAAC,IAAA,KAAS,CAAC,QAAQ,gBAAA,EAAiB;AAAA,MAClD,oBAAA,EAAsB,CAAC,CAAA,KAAM;AAC3B,QAAA,mBAAA,CAAqB,CAAA;AAAA,MACvB,CAAA;AAAA,MACA,eAAA,EAAiB,CAAC,CAAA,KAAM;AACtB,QAAA,IAAI,aAAA,KAAkB,eAAA,IAAmB,CAAC,UAAA,EAAY;AACpD,UAAA,CAAA,CAAE,cAAA,EAAe;AAAA,QACnB;AAAA,MACF,CAAA;AAAA,MACA,gBAAA,EACEF,SAAAA,GACI,iBAAA,GACA,mBAAA,GACA,qCAAA,GACA,MAAA;AAAA,MAGL,QAAA,EAAA;AAAA,QAAA,mBAAA,EAAoB;AAAA,wBAErBP,eAAC,OAAA,EAAA,EACE,QAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA,EAUH;AAAA;AAAA;AAAA,GACF;AAEJ;ACxNO,SAAS,YAAA,CAAa,EAAE,MAAA,EAAQ,OAAA,EAAS,SAAQ,EAAsB;AAC5E,EAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAO,GAAIY,oBAAAA,EAAe;AACxC,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,OAAA,EAAQ;AACtB,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIf,iBAAS,KAAK,CAAA;AAGtD,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,uBAAOG,cAAAA,CAAC,WAAA,EAAA,EAAY,MAAA,EAAgB,SAAkB,OAAA,EAAkB,CAAA;AAAA,EAC1E;AAGA,EAAA,IAAI,CAAC,KAAK,cAAA,EAAgB;AACxB,IAAA,MAAM,wBAAwB,MAAM;AAElC,MAAA,OAAA,EAAQ;AAAA,IACV,CAAA;AAEA,IAAA,MAAM,kBAAA,GAAqB,CAAC,KAAA,KAAiB;AAC3C,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,MACf;AAAA,IACF,CAAA;AAEA,IAAA,MAAMiB,gBAAe,YAAY;AAC/B,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,EAAO;AACb,QAAA,OAAA,EAAQ;AAAA,MACV,SAAS,KAAA,EAAO;AACd,QAAA,IAAI,OAAA,EAAS;AACX,UAAA,OAAA,CAAQ,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,eAAe,CAAC,CAAA;AAAA,QACrE;AAAA,MACF;AAAA,IACF,CAAA;AAEA,IAAA,uBACEjB,cAAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAM,MAAA,EAAQ,YAAA,EAAc,CAAC,IAAA,KAAS,CAAC,IAAA,IAAQ,OAAA,EAAQ,EAC5D,QAAA,kBAAAA,cAAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,WAAA,EAAa,KAAA;AAAA,QACb,UAAA,EAAY,qBAAA;AAAA,QACZ,OAAA,EAAS,kBAAA;AAAA,QACT,QAAA,EAAUiB,aAAAA;AAAA,QACV;AAAA;AAAA,KACF,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,MAAM,eAAe,YAAY;AAC/B,IAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,EAAO;AACb,MAAA,OAAA,EAAQ;AAAA,IACV,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,OAAA,CAAQ,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,eAAe,CAAC,CAAA;AAAA,MACrE;AAAA,IACF,CAAA,SAAE;AACA,MAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,IACvB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,iBAAiB,IAAA,CAAK,UAAA,GACxB,CAAA,EAAG,IAAA,CAAK,WAAW,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,MAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,EAAE,CAAC,CAAA,CAAA,GAC7D,IAAA;AAEJ,EAAA,uBACER,eAAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAM,MAAA,EAAQ,YAAA,EAAc,CAAC,IAAA,KAAS,CAAC,IAAA,IAAQ,OAAA,EAAQ,EAC5D,QAAA,EAAA;AAAA,oBAAAT,cAAAA,CAAC,eAAY,OAAA,EAAkB,CAAA;AAAA,oBAE/BS,gBAAC,KAAA,EAAA,EAEC,QAAA,EAAA;AAAA,sBAAAT,eAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2CAAA,EACV,QAAA,EAAA,CAAA,CAAE,eAAe,CAAA,EACpB,CAAA;AAAA,sBAGAS,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sDAAA,EAEZ,QAAA,EAAA;AAAA,QAAA,IAAA,CAAK,UAAA,oBACJA,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,6DAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EACb,QAAA,EAAA;AAAA,4BAAAT,eAAC,GAAA,EAAA,EAAE,SAAA,EAAU,4CAAA,EACV,QAAA,EAAA,CAAA,CAAE,uBAAuB,CAAA,EAC5B,CAAA;AAAA,4BACAA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,gDACV,QAAA,EAAA,cAAA,EACH;AAAA,WAAA,EACF,CAAA;AAAA,0BACAA,cAAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,MAAM,IAAA,CAAK,UAAA;AAAA,cACX,SAAA,EAAU;AAAA;AAAA;AACZ,SAAA,EACF,CAAA;AAAA,QAID,IAAA,CAAK,KAAA,IAAS,CAAC,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,UAAU,CAAA,oBAC5CS,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+CAAA,EACb,QAAA,EAAA;AAAA,0BAAAT,eAAC,GAAA,EAAA,EAAE,SAAA,EAAU,4CAAA,EACV,QAAA,EAAA,CAAA,CAAE,eAAe,CAAA,EACpB,CAAA;AAAA,0BACAA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+BAAA,EACV,eAAK,KAAA,EACR;AAAA,SAAA,EACF;AAAA,OAAA,EAEJ,CAAA;AAAA,sBAGAA,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,SAAA;AAAA,UACR,SAAA,EAAS,IAAA;AAAA,UACT,OAAA,EAAS,YAAA;AAAA,UACT,QAAA,EAAU,YAAA;AAAA,UAET,QAAA,EAAA,YAAA,GAAe,CAAA,CAAE,gBAAgB,CAAA,GAAI,EAAE,gBAAgB;AAAA;AAAA;AAC1D,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;ACrHO,SAAS,eAAA,CAAgB;AAAA,EAC9B,MAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,OAAA,EAAQ;AAEtB,EAAA,uBACES,gBAAC,KAAA,EAAA,EAEC,QAAA,EAAA;AAAA,oBAAAT,eAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2CAAA,EACV,QAAA,EAAA,CAAA,CAAE,qBAAqB,CAAA,EAC1B,CAAA;AAAA,oBAGAA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,8CAA6C,QAAA,EAAA,iBAAA,EAE1D,CAAA;AAAA,oBAGAA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBACZ,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,EAAG,GAAA,KAAQ;AACtB,MAAA,MAAM,QAAA,GAAW,EAAE,KAAA,KAAU,QAAA;AAC7B,MAAA,MAAM,WAAA,GAAc,QAAA,GAAW,KAAA,GAAQ,CAAA,CAAE,KAAA,CAAM,MAAA;AAC/C,MAAA,MAAM,SAAA,GAAY,QAAA,GAAW,UAAA,GAAa,CAAA,CAAE,KAAA,CAAM,MAAA;AAElD,MAAA,uBACES,eAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UAEC,SAAA,EAAW,EAAA;AAAA,YACT,oDAAA;AAAA,YACA,oCAAA;AAAA,YACA,wCAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,OAAA,EAAS,MAAM,QAAA,CAAS,GAAG,CAAA;AAAA,UAG3B,QAAA,EAAA;AAAA,4BAAAT,cAAAA,CAAC,SAAI,SAAA,EAAU,eAAA,EACZ,WAAC,QAAA,IAAY,CAAA,CAAE,KAAA,CAAM,OAAA,mBACpBA,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,GAAA,EAAK,EAAE,KAAA,CAAM,MAAA;AAAA,gBACb,GAAA,EAAK,EAAE,KAAA,CAAM,OAAA;AAAA,gBACb,SAAA,EAAU;AAAA;AAAA,aACZ,mBAEAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oJAAA,EACZ,QAAA,EAAA,WAAA,CAAY,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,EACzB,CAAA,EAEJ,CAAA;AAAA,4BAGAS,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EACb,QAAA,EAAA;AAAA,8BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kDAAA,EACb,QAAA,EAAA;AAAA,gCAAAT,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mCAAA,EACb,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,gCACAS,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,6GAAA,EAA8G,QAAA,EAAA;AAAA,kBAAA,QAAA;AAAA,kBACrH,CAAA,CAAE;AAAA,iBAAA,EACX;AAAA,eAAA,EACF,CAAA;AAAA,8BACAT,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCACZ,QAAA,EAAA,SAAA,EACH,CAAA;AAAA,cACC,CAAC,4BACAA,cAAAA,CAAC,SAAI,SAAA,EAAU,qEAAA,EACZ,QAAA,EAAA,CAAA,CAAE,KAAA,CAAM,OAAA,EACX;AAAA,aAAA,EAEJ,CAAA;AAAA,4BAGAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BAAA,EACb,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,aAAY,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EAC5F,QAAA,kBAAAA,cAAAA,CAAC,UAAA,EAAA,EAAS,MAAA,EAAO,gBAAA,EAAiB,CAAA,EACpC,CAAA,EACF;AAAA;AAAA,SAAA;AAAA,QAjDK,CAAA,EAAG,CAAA,CAAE,OAAO,CAAA,CAAA,EAAI,GAAG,CAAA;AAAA,OAkD1B;AAAA,IAEJ,CAAC,CAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ;AC/FO,IAAM,cAAA,GAAiBU,wBAAAA,CAAM,UAAA,CAGlC,CAAC,EAAE,SAAA,GAAY,KAAA,EAAO,SAAA,EAAW,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAC/D,EAAA,uBACED,eAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,IAAA,EAAK,QAAA;AAAA,MACL,SAAA,EAAW,EAAA;AAAA,QACT,2DAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,QACA,SAAA,IAAa;AAAA;AAAA;AAAA,GAChB;AAEJ,CAAC,CAAA;AAED,cAAA,CAAe,WAAA,GAAc,gBAAA;ACtBtB,IAAM,kBAAkD,CAAC;AAAA,EAC9D,IAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,uBACEA,eAAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAY,YAAA,EACjB,QAAA,EAAA;AAAA,oBAAAT,eAAC,WAAA,EAAA,EAAY,OAAA,EAAS,MAAM,YAAA,CAAa,KAAK,CAAA,EAAG,CAAA;AAAA,oBACjDS,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EACb,QAAA,EAAA;AAAA,sBAAAT,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2CAAA,EAA4C,QAAA,EAAA,aAAA,EAEzD,CAAA;AAAA,sBACAA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oCAAmC,QAAA,EAAA,8DAAA,EAEhD;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ,CAAA;AClBO,IAAM,yBAAgE,CAAC;AAAA,EAC5E;AACF,CAAA,KAAM;AACJ,EAAA,IAAI,MAAA,KAAW,YAAY,OAAO,IAAA;AAElC,EAAA,uBACES,eAAAA,CAAAE,mBAAAA,EAAA,EAEE,QAAA,EAAA;AAAA,oBAAAX,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,sEAAA;AAAA,QACV,KAAA,EAAO;AAAA,UACL,SAAA,EAAW,qEAAA;AAAA,UACX,SAAA,EAAW;AAAA;AACb;AAAA,KACF;AAAA,oBAGAS,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sFAAA,EAEb,QAAA,EAAA;AAAA,sBAAAT,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,oEAAA;AAAA,UACV,KAAA,EAAO;AAAA,YACL,UAAA,EACE,0EAAA;AAAA,YACF,MAAA,EAAQ,YAAA;AAAA,YACR,GAAA,EAAK,IAAA;AAAA,YACL,IAAA,EAAM,IAAA;AAAA,YACN,SAAA,EAAW;AAAA;AACb;AAAA,OACF;AAAA,sBAEAA,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,oEAAA;AAAA,UACV,KAAA,EAAO;AAAA,YACL,UAAA,EACE,yEAAA;AAAA,YACF,MAAA,EAAQ,YAAA;AAAA,YACR,MAAA,EAAQ,KAAA;AAAA,YACR,KAAA,EAAO,KAAA;AAAA,YACP,SAAA,EAAW;AAAA;AACb;AAAA,OACF;AAAA,sBAEAA,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,oEAAA;AAAA,UACV,KAAA,EAAO;AAAA,YACL,UAAA,EACE,0EAAA;AAAA,YACF,MAAA,EAAQ,YAAA;AAAA,YACR,GAAA,EAAK,KAAA;AAAA,YACL,IAAA,EAAM,KAAA;AAAA,YACN,SAAA,EAAW,kBAAA;AAAA,YACX,SAAA,EAAW;AAAA;AACb;AAAA;AACF,KAAA,EACF,CAAA;AAAA,oBAGAA,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,qNAAA;AAAA,QACV,KAAA,EAAO;AAAA,UACL,SAAA,EAAW;AAAA,SACb;AAAA,QAEA,QAAA,kBAAAA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,IAAA;AAAA,YACN,MAAA,EAAO,IAAA;AAAA,YACP,OAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAK,MAAA;AAAA,YACL,MAAA,EAAO,OAAA;AAAA,YACP,WAAA,EAAY,GAAA;AAAA,YACZ,aAAA,EAAc,OAAA;AAAA,YACd,cAAA,EAAe,OAAA;AAAA,YAEf,QAAA,kBAAAA,cAAAA,CAAC,UAAA,EAAA,EAAS,MAAA,EAAO,gBAAA,EAAiB;AAAA;AAAA;AACpC;AAAA,KACF;AAAA,oBAGAS,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2EAAA,EAEb,QAAA,EAAA;AAAA,sBAAAT,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,sFAAA;AAAA,UACV,KAAA,EAAO;AAAA,YACL,GAAA,EAAK,KAAA;AAAA,YACL,IAAA,EAAM,KAAA;AAAA,YACN,SAAA,EAAW;AAAA;AACb;AAAA,OACF;AAAA,sBAEAA,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,uFAAA;AAAA,UACV,KAAA,EAAO;AAAA,YACL,GAAA,EAAK,KAAA;AAAA,YACL,KAAA,EAAO,KAAA;AAAA,YACP,SAAA,EAAW;AAAA;AACb;AAAA,OACF;AAAA,sBAEAA,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,mFAAA;AAAA,UACV,KAAA,EAAO;AAAA,YACL,MAAA,EAAQ,KAAA;AAAA,YACR,IAAA,EAAM,KAAA;AAAA,YACN,SAAA,EAAW;AAAA;AACb;AAAA,OACF;AAAA,sBAEAA,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,0FAAA;AAAA,UACV,KAAA,EAAO;AAAA,YACL,MAAA,EAAQ,KAAA;AAAA,YACR,KAAA,EAAO,KAAA;AAAA,YACP,SAAA,EAAW;AAAA;AACb;AAAA;AACF,KAAA,EACF,CAAA;AAAA,oBAGAA,eAAC,OAAA,EAAA,EAAO,QAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA,EA0FN;AAAA,GAAA,EACJ,CAAA;AAEJ,CAAA;AC7MO,IAAM,wBAA8D,CAAC;AAAA,EAC1E,OAAA;AAAA,EACA,eAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,OAAA,EAAQ;AACtB,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIH,iBAAS,KAAK,CAAA;AAE9C,EAAA,MAAM,YAAA,GAAe,CAAC,MAAA,KAAmB;AACvC,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,EAAA,IAAM,QAAQ,CAAA;AACrC,IAAA,MAAM,QAAQ,MAAA,GAAS,OAAA;AACvB,IAAA,MAAM,WAAW,MAAA,GAAS,OAAA;AAC1B,IAAA,MAAM,WAAA,GAAc,QAAA,CAAS,QAAA,EAAS,CAAE,QAAA,CAAS,UAAU,GAAG,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AAE1E,IAAA,MAAM,eAAA,GAAkB,WAAA,CAAY,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AACrD,IAAA,OAAO,kBAAkB,CAAA,EAAG,KAAK,IAAI,eAAe,CAAA,CAAA,GAAK,GAAG,KAAK,CAAA,CAAA;AAAA,EACnE,CAAA;AAEA,EAAA,MAAM,cAAA,GAAiB,aAAa,KAAK,CAAA;AAEzC,EAAA,uBACEY,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA;AAAA,QAET,uCAAA;AAAA,QACA,4BAAA;AAAA;AAAA,QAEA,iCAAA;AAAA;AAAA,QAEA,oCAAA;AAAA;AAAA,QAEA,2CAAA;AAAA;AAAA,QAEA,qDAAA;AAAA,QACA,WAAW,eAAA,GAAkB;AAAA,OAC/B;AAAA,MACA,KAAA,EAAO;AAAA,QACL,SAAA,EAAW;AAAA,OACb;AAAA,MAGA,QAAA,EAAA;AAAA,wBAAAT,cAAAA,CAAC,SAAI,SAAA,EAAU,mDAAA,EACb,0BAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uDAAA,EAAwD,CAAA,EACzE,CAAA;AAAA,wBAGAA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBACb,QAAA,kBAAAS,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uCAAA,EAEb,QAAA,EAAA;AAAA,0BAAAT,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gLAAA,EACb,QAAA,kBAAAA,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAM,IAAA;AAAA,cACN,MAAA,EAAO,IAAA;AAAA,cACP,OAAA,EAAQ,WAAA;AAAA,cACR,IAAA,EAAK,MAAA;AAAA,cACL,MAAA,EAAO,OAAA;AAAA,cACP,WAAA,EAAY,KAAA;AAAA,cACZ,aAAA,EAAc,OAAA;AAAA,cACd,cAAA,EAAe,OAAA;AAAA,cAEf,QAAA,kBAAAA,cAAAA,CAAC,UAAA,EAAA,EAAS,MAAA,EAAO,gBAAA,EAAiB;AAAA;AAAA,WACpC,EACF,CAAA;AAAA,0BAGAS,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sEAAA,EACb,QAAA,EAAA;AAAA,8BAAAT,eAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCAAA,EACV,QAAA,EAAA,CAAA,CAAE,mBAAmB,CAAA,EACxB,CAAA;AAAA,8BACAA,cAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAS,OAAA;AAAA,kBACT,SAAA,EAAU,2KAAA;AAAA,kBACV,YAAA,EAAW,OAAA;AAAA,kBAEX,QAAA,kBAAAS,eAAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACC,KAAA,EAAM,IAAA;AAAA,sBACN,MAAA,EAAO,IAAA;AAAA,sBACP,OAAA,EAAQ,WAAA;AAAA,sBACR,IAAA,EAAK,MAAA;AAAA,sBACL,MAAA,EAAO,cAAA;AAAA,sBACP,WAAA,EAAY,KAAA;AAAA,sBAEZ,QAAA,EAAA;AAAA,wCAAAT,cAAAA,CAAC,UAAK,EAAA,EAAG,IAAA,EAAK,IAAG,GAAA,EAAI,EAAA,EAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,CAAA;AAAA,wCACpCA,cAAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAG,GAAA,EAAI,IAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK;AAAA;AAAA;AAAA;AACtC;AAAA;AACF,aAAA,EACF,CAAA;AAAA,4BACAA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,yCAAA,EACV,QAAA,EAAA,CAAA,CAAE,yBAAA,EAA2B,EAAE,MAAA,EAAQ,cAAA,EAAgB,MAAA,EAAQ,CAAA,EAClE,CAAA;AAAA,YAGC,QAAA,oBACCS,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,qIAAA,EACb,QAAA,EAAA;AAAA,8BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CAAA,EACb,QAAA,EAAA;AAAA,gCAAAT,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EAAuB,QAAA,EAAA,CAAA,CAAE,gBAAgB,CAAA,EAAE,CAAA;AAAA,gCAC3DS,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yDAAA,EAA0D,QAAA,EAAA;AAAA,kBAAA,GAAA;AAAA,kBACtE,cAAA;AAAA,kBAAe,GAAA;AAAA,kBAAE;AAAA,iBAAA,EACrB;AAAA,eAAA,EACF,CAAA;AAAA,8BACAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CAAA,EACb,QAAA,EAAA;AAAA,gCAAAT,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EAAuB,QAAA,EAAA,CAAA,CAAE,yBAAyB,CAAA,EAAE,CAAA;AAAA,gCACpES,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oCAAA,EACb,QAAA,EAAA;AAAA,kBAAA,YAAA,CAAa,eAAe,CAAA;AAAA,kBAAE,GAAA;AAAA,kBAAE;AAAA,iBAAA,EACnC;AAAA,eAAA,EACF,CAAA;AAAA,8BACAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iFAAA,EACb,QAAA,EAAA;AAAA,gCAAAT,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EAAuB,QAAA,EAAA,CAAA,CAAE,oBAAoB,CAAA,EAAE,CAAA;AAAA,gCAC/DS,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mCAAA,EACb,QAAA,EAAA;AAAA,kBAAA,YAAA,CAAa,UAAU,CAAA;AAAA,kBAAE,GAAA;AAAA,kBAAE;AAAA,iBAAA,EAC9B;AAAA,eAAA,EACF;AAAA,aAAA,EACF,CAAA;AAAA,4BAIFT,cAAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAS,MAAM,WAAA,CAAY,CAAC,QAAQ,CAAA;AAAA,gBACpC,SAAA,EAAU,uKAAA;AAAA,gBAET,QAAA,EAAA,QAAA,GAAW,CAAA,CAAE,iBAAiB,CAAA,GAAI,EAAE,iBAAiB;AAAA;AAAA;AACxD,WAAA,EACF;AAAA,SAAA,EACF,CAAA,EACF,CAAA;AAAA,wBAGAA,eAAC,OAAA,EAAA,EAAO,QAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA,EAmBN;AAAA;AAAA;AAAA,GACJ;AAEJ,CAAA;AChKO,IAAM,kBAA4B,MAAM;AAC7C,EAAA,uBACES,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EAEb,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EAEb,QAAA,EAAA;AAAA,sBAAAT,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4DAAA,EAA6D,CAAA;AAAA,sBAE5EA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sDAAA,EAAuD;AAAA,KAAA,EACxE,CAAA;AAAA,oBAGAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EACb,0BAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oEAAA,EACb,0BAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gEAAA,EAAiE,GAClF,CAAA,EACF,CAAA;AAAA,oBAGAS,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sEAAA,EACb,QAAA,EAAA;AAAA,sBAAAT,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0DAAA,EAA2D,CAAA;AAAA,sBAC1EA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kDAAA,EAAmD;AAAA,KAAA,EACpE,CAAA;AAAA,oBAGAA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBACb,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oEAAA,EACb,QAAA,kBAAAA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDACb,QAAA,kBAAAA,cAAAA,CAAC,SAAI,SAAA,EAAU,kDAAA,EAAmD,CAAA,EACpE,CAAA,EACF,CAAA,EACF,CAAA;AAAA,oBAGAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gEAAA,EACb,0BAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gEAAA,EAAiE,CAAA,EAClF;AAAA,GAAA,EACF,CAAA;AAEJ,CAAA;AClBO,SAAS,cAAc,KAAA,EAA2B;AACvD,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,OAAA,EAAQ;AACtB,EAAA,MAAM,EAAE,MAAA,EAAO,GAAIY,oBAAAA,EAAe;AAClC,EAAA,MAAM,EAAE,MAAA,EAAO,GAAIC,qBAAAA,EAAgB;AACnC,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIhB,iBAAwB,IAAI,CAAA;AAC9D,EAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAAIA,iBAAS,KAAK,CAAA;AACpE,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,iBAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,iBAAkC,IAAI,CAAA;AAGxE,EAAA,MAAM,MAAA,GAAS,CAAA,SAAA,EAAY,KAAA,CAAM,OAAO,CAAA,CAAA;AAExC,EAAA,MAAM,SAASqB,wBAAA,CAAmB;AAAA,IAChC,SAAS,KAAA,CAAM,OAAA;AAAA,IACf,OACE,KAAA,CAAM,KAAA,KAAU,WACZ,EAAE,IAAA,EAAM,UAAS,GACjB;AAAA,MACE,IAAA,EAAM,OAAA;AAAA,MACN,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,MAAM,KAAA,CAAM,OAAA;AAAA,QACrB,QAAA,EAAU,MAAM,KAAA,CAAM;AAAA;AACxB,KACF;AAAA,IACN,SAAS,KAAA,CAAM;AAAA,GAChB,CAAA;AAGD,EAAAd,kBAAU,MAAM;AACd,IAAA,IAAI,MAAA,CAAO,UAAU,UAAA,EAAY;AAC/B,MAAA,YAAA,CAAa;AAAA,QACX,iBAAiB,MAAA,CAAO,eAAA;AAAA,QACxB,YAAY,MAAA,CAAO,UAAA;AAAA,QACnB,OAAO,MAAA,CAAO;AAAA,OACf,CAAA;AACD,MAAA,YAAA,CAAa,IAAI,CAAA;AAAA,IACnB;AAAA,EACF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAGX,EAAA,MAAM,cAAA,GAAiBH,mBAAAA;AAAA,IACrBkB,2BAAqB,EAAE,MAAA,EAAQ,YAAA,EAAc,MAAA,CAAO,cAAc,CAAA;AAAA,IAClE,CAAC,MAAA,EAAQ,MAAA,CAAO,YAAY;AAAA,GAC9B;AAGA,EAAAf,kBAAU,MAAM;AACd,IAAA,IAAI,SAAA,GAAY,KAAA;AAEhB,IAAA,MAAM,gBAAgB,YAAY;AAChC,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,GAAO,MAAM,cAAA,CAAe,KAAA,CAAM,SAAS,KAAK,CAAA;AACtD,QAAA,IAAI,CAAC,SAAA,EAAW;AACd,UAAA,YAAA,CAAa,KAAK,IAAI,CAAA;AAAA,QACxB;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,IAAI,CAAC,SAAA,EAAW;AAEd,UAAA,YAAA,CAAa,CAAA,MAAA,EAAS,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,QACvC;AAAA,MACF;AAAA,IACF,CAAA;AAEA,IAAA,aAAA,EAAc;AAEd,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,GAAY,IAAA;AAAA,IACd,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,cAAA,EAAgB,KAAA,CAAM,OAAO,CAAC,CAAA;AAElC,EAAA,MAAM,cAAc,KAAA,CAAM,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,MAAM,KAAA,CAAM,MAAA;AACnE,EAAA,MAAM,gBAAA,GAAmB,SAAA,IAAa,CAAA,MAAA,EAAS,KAAA,CAAM,OAAO,CAAA,CAAA;AAC5D,EAAA,MAAM,WAAW,KAAA,CAAM,KAAA,KAAU,QAAA,GAAW,EAAA,GAAK,MAAM,KAAA,CAAM,QAAA;AAE7D,EAAA,uBACEK,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EAEb,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,sBAAAT,eAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2CAAA,EACV,QAAA,EAAA,CAAA,CAAE,iBAAiB,CAAA,EACtB,CAAA;AAAA,sBAGAS,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uGAAA,EACb,QAAA,EAAA;AAAA,wBAAAT,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EACb,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,wBACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mBAAkB,QAAA,EAAA,QAAA,EAAC,CAAA;AAAA,wBACnCA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oCACb,QAAA,EAAA,gBAAA,EACH;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,oBAGAA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2CACb,QAAA,kBAAAS,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACb,QAAA,EAAA;AAAA,sBAAAT,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uGAAA,EACb,QAAA,kBAAAA,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAI,YAAA;AAAA,UACJ,KAAA,EAAO,GAAA;AAAA,UACP,MAAA,EAAQ,GAAA;AAAA,UACR,KAAK,CAAA,8DAAA,EAAiE,kBAAA;AAAA,YACpE;AAAA,WACD,CAAA,CAAA;AAAA,UACD,SAAA,EAAU;AAAA;AAAA,OACZ,EACF,CAAA;AAAA,sBAEAA,cAAAA,CAAC,sBAAA,EAAA,EAAuB,MAAA,EAAQ,OAAO,KAAA,EAAO;AAAA,KAAA,EAChD,CAAA,EACF,CAAA;AAAA,IAAA,CAGE,MAAA,CAAO,KAAA,KAAU,WAAA,IAAe,MAAA,CAAO,KAAA,KAAU,2BACjDS,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sEAAA,EACb,QAAA,EAAA;AAAA,sBAAAT,cAAAA,CAAC,SAAI,SAAA,EAAU,gFAAA,EAAiF,OAAO,EAAE,eAAA,EAAiB,gBAAe,EAAG,CAAA;AAAA,sBAC5IA,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,kCAAA,EACb,QAAA,EAAA,CAAA,CAAE,mBAAmB,CAAA,EACxB;AAAA,KAAA,EACF,CAAA;AAAA,IAGD,OAAO,KAAA,KAAU,OAAA,oBAChBS,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,oDAAA,EAAqD,QAAA,EAAA;AAAA,MAAA,SAAA;AAAA,MAC1D,MAAA,CAAO;AAAA,KAAA,EACjB,CAAA;AAAA,oBAIFA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,sBAAAT,cAAAA,CAAC,KAAA,EAAA,EACC,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iHAAA,EACb,QAAA,kBAAAS,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6DAAA,EACb,QAAA,EAAA;AAAA,wBAAAT,eAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2EAAA,EACV,QAAA,EAAA,CAAA,EAAG,MAAM,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,GAAA,EAAM,KAAA,CAAM,QAAQ,KAAA,CAAM,EAAE,CAAC,CAAA,CAAA,EAC7D,CAAA;AAAA,wBACAA,cAAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,MAAM,KAAA,CAAM,OAAA;AAAA,YACZ,SAAA,EAAU;AAAA;AAAA;AACZ,OAAA,EACF,GACF,CAAA,EACF,CAAA;AAAA,MAGC,MAAA,CAAO,UAAU,OAAA,oBAChBA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oDAAA,EACZ,QAAA,EAAA,MAAA,CAAO,OAAA,EACV;AAAA,KAAA,EAEJ,CAAA;AAAA,oBAGAA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wDACb,QAAA,kBAAAS,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kCAAA,EACb,QAAA,EAAA;AAAA,MAAA,CAAA,CAAE,iBAAiB,CAAA;AAAA,MAAG,GAAA;AAAA,sBACvBT,cAAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,MAAM,sBAAA,CAAuB,IAAI,CAAA;AAAA,UAC1C,SAAA,EAAS,IAAA;AAAA,UAER,YAAE,uBAAuB;AAAA;AAAA;AAC5B,KAAA,EACF,CAAA,EACF,CAAA;AAAA,oBAGAA,cAAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,mBAAA;AAAA,QACN,YAAA,EAAc;AAAA;AAAA,KAChB;AAAA,IAGC,SAAA,IAAa,6BACZA,cAAAA;AAAA,MAAC,qBAAA;AAAA,MAAA;AAAA,QACC,SAAS,MAAM;AACb,UAAA,YAAA,CAAa,KAAK,CAAA;AAClB,UAAA,YAAA,CAAa,IAAI,CAAA;AAAA,QACnB,CAAA;AAAA,QACA,iBAAiB,SAAA,CAAU,eAAA;AAAA,QAC3B,YAAY,SAAA,CAAU,UAAA;AAAA,QACtB,OAAO,SAAA,CAAU,KAAA;AAAA,QACjB,QAAA;AAAA,QACA,MAAA,EAAQ;AAAA;AAAA;AACV,GAAA,EAEJ,CAAA;AAEJ;AC5LA,SAAS,gBAAA,CAAiB;AAAA,EACxB,SAAA;AAAA,EACA,KAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,EAA0B;AAExB,EAAA,IAAI,SAAA,EAAW,uBAAOA,cAAAA,CAAC,eAAA,EAAA,EAAgB,CAAA;AAGvC,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,uBACES,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACb,QAAA,EAAA;AAAA,sBAAAT,eAAC,eAAA,EAAA,EAAgB,CAAA;AAAA,sBACjBA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yFAAA,EAA0F,OAAO,EAAE,OAAA,EAAS,GAAA,EAAI,EAC7H,0BAAAA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oDAAA,EACV,iBACH,CAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AAGA,EAAA,IAAI,aAAA,CAAc,WAAW,CAAA,EAAG;AAC9B,IAAA,uBACES,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACb,QAAA,EAAA;AAAA,sBAAAT,eAAC,eAAA,EAAA,EAAgB,CAAA;AAAA,sBACjBA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yFAAA,EAA0F,OAAO,EAAE,OAAA,EAAS,GAAA,EAAI,EAC7H,0BAAAA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6DAAA,EAA8D,4EAE3E,CAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AAGA,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,uBACES,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACb,QAAA,EAAA;AAAA,sBAAAT,eAAC,eAAA,EAAA,EAAgB,CAAA;AAAA,sBACjBA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yFAAA,EAA0F,OAAO,EAAE,OAAA,EAAS,GAAA,EAAI,EAC7H,0BAAAA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6DAAA,EAA8D,4EAE3E,CAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AAGA,EAAA,IAAI,aAAA,CAAc,WAAW,CAAA,EAAG;AAC9B,IAAA,uBACEA,cAAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,aAAA,CAAc,CAAC,CAAA,CAAE,OAAA;AAAA,QAC1B,KAAA,EAAO,aAAA,CAAc,CAAC,CAAA,CAAE,KAAA;AAAA,QACxB,OAAA,EAAS,UAAA;AAAA,QACT,MAAA,EAAQ;AAAA;AAAA,KACV;AAAA,EAEJ;AAGA,EAAA,IAAI,gBAAgB,EAAA,EAAI;AACtB,IAAA,uBACEA,cAAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,MAAA,EAAQ,aAAA;AAAA,QACR,QAAA,EAAU,CAAC,GAAA,KAAQ,WAAA,CAAY,GAAG;AAAA;AAAA,KACpC;AAAA,EAEJ;AAEA,EAAA,MAAM,QAAA,GAAW,cAAc,WAAW,CAAA;AAC1C,EAAA,uBACEA,cAAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACC,SAAS,QAAA,CAAS,OAAA;AAAA,MAClB,OAAO,QAAA,CAAS,KAAA;AAAA,MAChB,OAAA,EAAS,UAAA;AAAA,MACT,MAAA,EAAQ,MAAM,WAAA,CAAY,EAAE;AAAA;AAAA,GAC9B;AAEJ;AAEO,IAAM,eAA4C,CAAC;AAAA,EACxD,IAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,EAAE,IAAA,EAAK,GAAIY,oBAAAA,EAAe;AAChC,EAAA,MAAM,EAAE,MAAA,EAAO,GAAIC,qBAAAA,EAAgB;AAEnC,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIhB,gBAAAA,CAAyB,EAAE,CAAA;AACrE,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,iBAAS,IAAI,CAAA;AAC/C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,iBAAwB,IAAI,CAAA;AACtD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,iBAAiB,EAAE,CAAA;AAGzD,EAAAO,kBAAU,MAAM;AACd,IAAA,IAAI,CAAC,IAAA,EAAM;AAEX,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,QAAA,CAAS,IAAI,CAAA;AAEb,IAAA,MAAA,CACG,GAAA,CAAuC,gBAAgB,CAAA,CACvD,IAAA,CAAK,CAAC,QAAA,KAAa;AAClB,MAAA,gBAAA,CAAiB,QAAA,CAAS,aAAA,IAAiB,EAAE,CAAA;AAAA,IAC/C,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,GAAA,KAAQ;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,mCAAmC,GAAG,CAAA;AACpD,MAAA,QAAA,CAAS,gCAAgC,CAAA;AAAA,IAC3C,CAAC,CAAA,CACA,OAAA,CAAQ,MAAM;AACb,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB,CAAC,CAAA;AAAA,EACL,CAAA,EAAG,CAAC,IAAA,EAAM,MAAM,CAAC,CAAA;AAGjB,EAAA,MAAM,cAAA,GAAiB,CACrB,WAAA,KACW;AACX,IAAA,IAAI,CAAC,aAAa,OAAO,EAAA;AACzB,IAAA,OAAO,aAAA,CAAc,SAAA;AAAA,MACnB,CAAC,MACC,CAAA,CAAE,OAAA,KAAY,YAAY,OAAA,KACzB,CAAA,CAAE,UAAU,QAAA,GACT,WAAA,CAAY,OAAO,WAAA,EAAY,KAAM,QACrC,CAAA,CAAE,KAAA,CAAM,OAAO,WAAA,EAAY,KAAM,WAAA,CAAY,MAAA,CAAO,WAAA,EAAY;AAAA,KACxE;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,kBAAkB,MAAc;AACpC,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,MAAM,GAAA,GAAM,eAAe,KAAK,CAAA;AAChC,MAAA,IAAI,GAAA,IAAO,GAAG,OAAO,GAAA;AAAA,IACvB;AACA,IAAA,IAAI,aAAA,CAAc,MAAA,KAAW,CAAA,EAAG,OAAO,CAAA;AACvC,IAAA,OAAO,EAAA;AAAA,EACT,CAAA;AAGA,EAAAA,kBAAU,MAAM;AACd,IAAA,IAAI,IAAA,IAAQ,CAAC,SAAA,IAAa,aAAA,CAAc,SAAS,CAAA,EAAG;AAClD,MAAA,cAAA,CAAe,iBAAiB,CAAA;AAAA,IAClC;AAAA,EACF,GAAG,CAAC,IAAA,EAAM,WAAW,aAAA,CAAc,MAAA,EAAQ,KAAK,CAAC,CAAA;AAGjD,EAAAA,kBAAU,MAAM;AACd,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,cAAA,CAAe,EAAE,CAAA;AAAA,IACnB;AAAA,EACF,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,MAAM,SAAA,GAAY,cAAc,MAAA,GAAS,CAAA;AACzC,EAAA,MAAM,MAAA,GAAS,SAAA,IAAa,IAAA,EAAM,UAAA,IAAc,WAAA,IAAe,CAAA;AAE/D,EAAA,uBACEK,eAAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAY,YAAA,EACjB,QAAA,EAAA;AAAA,oBAAAT,cAAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,MAAA,IAAU,aAAA,CAAc,MAAA,GAAS,CAAA;AAAA,QACvC,MAAA,EAAQ,MAAA,GAAS,MAAM,cAAA,CAAe,EAAE,CAAA,GAAI,MAAA;AAAA,QAC5C,OAAA,EAAS,MAAM,YAAA,CAAa,KAAK;AAAA;AAAA,KACnC;AAAA,oBACAA,cAAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QACC,SAAA;AAAA,QACA,KAAA;AAAA,QACA,aAAA;AAAA,QACA,YAAY,IAAA,EAAM,UAAA;AAAA,QAClB,WAAA;AAAA,QACA,WAAA,EAAa;AAAA;AAAA;AACf,GAAA,EACF,CAAA;AAEJ,CAAA;AC5JA,IAAM,aAAA,GAAgBU,wBAAAA,CAAM,aAAA,CAQlB,IAAI,CAAA;AAEP,IAAM,YAAY,MAAM;AAC7B,EAAA,MAAM,OAAA,GAAUf,mBAAW,aAAa,CAAA;AACxC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,8CAA8C,CAAA;AAAA,EAChE;AACA,EAAA,OAAO,OAAA;AACT;AAMO,IAAM,oBAAoB,MAAM;AACrC,EAAA,OAAOA,mBAAW,aAAa,CAAA;AACjC;AAMA,SAAS,cAAA,CAAe;AAAA,EACtB,cAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,MAAM,EAAE,MAAA,EAAO,GAAIiB,oBAAAA,EAAe;AAElC,EAAA,MAAM,uBAAuB,MAAM;AACjC,IAAA,UAAA,EAAW;AAAA,EACb,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,CAAC,IAAA,KAAgB;AAAA,EAE3C,CAAA;AAEA,EAAA,MAAM,eAAe,YAAY;AAC/B,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,EAAO;AACb,MAAA,UAAA,EAAW;AAAA,IACb,SAAS,KAAA,EAAO;AAAA,IAEhB;AAAA,EACF,CAAA;AAEA,EAAA,IAAI,mBAAmB,SAAA,EAAW;AAChC,IAAA,uBACEZ,cAAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,UAAA,EAAY,oBAAA;AAAA,QACZ,OAAA,EAAS,iBAAA;AAAA,QACT,QAAA,EAAU;AAAA;AAAA,KACZ;AAAA,EAEJ;AAEA,EAAA,IAAI,mBAAmB,KAAA,EAAO;AAC5B,IAAA,uBACEA,cAAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,UAAA,EAAY,oBAAA;AAAA,QACZ,OAAA,EAAS;AAAA;AAAA,KACX;AAAA,EAEJ;AAEA,EAAA,OAAO,IAAA;AACT;AAEO,IAAM,iBAAgD,CAAC;AAAA,EAC5D,MAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM;AAAA,IACJ,OAAA;AAAA,IACA,WAAA,GAAc,SAAA;AAAA,IACd,KAAA,GAAQ,OAAA;AAAA,IACR,mBAAA,GAAsB,CAAC,OAAA,EAAS,QAAA,EAAU,MAAM,CAAA;AAAA,IAChD,eAAA,GAAkB,CAAC,QAAA,EAAU,SAAS,CAAA;AAAA,IACtC,QAAA;AAAA,IACA,cAAA,GAAiB;AAAA,GACnB,GAAI,MAAA;AAEJ,EAAA,MAAM,cAAA,GAAiB,OAAO,cAAA,IAAkB;AAAA,IAC9C,mBAAA,EAAqB;AAAA,GACvB;AAEA,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIH,iBAAS,KAAK,CAAA;AAC1D,EAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAAIA,gBAAAA;AAAA,IACpD;AAAA,GACF;AAEA,EAAAO,kBAAU,MAAM;AACd,IAAA,IAAI,cAAA,CAAe,mBAAA,KAAwB,KAAA,IAAS,CAAC,cAAA,EAAgB;AACnE,MAAA,MAAM,YAAA,GACJ,6GAAA;AACF,MAAA,OAAA,CAAQ,MAAM,YAAY,CAAA;AAC1B,MAAA,sBAAA,CAAuB,YAAY,CAAA;AAAA,IACrC,CAAA,MAAO;AACL,MAAA,sBAAA,CAAuB,IAAI,CAAA;AAAA,IAC7B;AAAA,EACF,CAAA,EAAG,CAAC,cAAA,EAAgB,cAAA,CAAe,mBAAmB,CAAC,CAAA;AAEvD,EAAA,IAAI,mBAAA,EAAqB;AACvB,IAAA,uBACEJ,cAAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAM,IAAA,EAAM,cAAc,MAAM;AAAA,IAAC,CAAA,EACtC,QAAA,kBAAAS,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,4BAAA,EACb,QAAA,EAAA;AAAA,sBAAAT,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,sDAAA,EAAuD,QAAA,EAAA,qBAAA,EAEpE,CAAA;AAAA,sBACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mEACZ,QAAA,EAAA,mBAAA,EACH;AAAA,KAAA,EACF,CAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEA,cAAAA,CAACoB,kBAAA,EAAA,EAAa,QACZ,QAAA,kBAAApB,cAAAA,CAAC,gBACC,QAAA,kBAAAA,cAAAA;AAAA,IAAC,aAAA,CAAc,QAAA;AAAA,IAAd;AAAA,MACC,KAAA,EAAO;AAAA,QACL,WAAA;AAAA,QACA,OAAA;AAAA,QACA,KAAA;AAAA,QACA,mBAAA;AAAA,QACA,eAAA;AAAA,QACA,QAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEA,QAAA,kBAAAS,gBAAC,iBAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAT,cAAAA;AAAA,UAAC,oBAAA;AAAA,UAAA;AAAA,YACC,gBAAA,EAAkB,MAAM,iBAAA,CAAkB,IAAI;AAAA;AAAA,SAChD;AAAA,wBACAA,cAAAA;AAAA,UAAC,iBAAA;AAAA,UAAA;AAAA,YACC,cAAA;AAAA,YACA,gBAAA,EAAkB,eAAe,mBAAA,IAAuB,IAAA;AAAA,YACxD,gBAAA,EAAkB,MAAM,iBAAA,CAAkB,IAAI,CAAA;AAAA,YAC9C,gBAAA,EAAkB,MAAM,iBAAA,CAAkB,KAAK;AAAA;AAAA,SACjD;AAAA,wBACAA,eAAC,kBAAA,EAAA,EAAmB,CAAA;AAAA,wBACpBA,eAAC,kBAAA,EAAA,EAAmB,CAAA;AAAA,QACnB,cAAA,IAAkB,kCACjBA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAM,IAAA;AAAA,YACN,YAAA,EAAc,MAAM,iBAAA,CAAkB,KAAK,CAAA;AAAA,YAC3C,oBAAA,EAAsB,CAAC,CAAA,KACrB,CAAA,CAAE,cAAA,EAAe;AAAA,YAGnB,QAAA,kBAAAS,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EACb,QAAA,EAAA;AAAA,8BAAAT,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,cAAA,EAAe,QAAA,EAAA,YAAA,EAAU,CAAA;AAAA,8BACtCA,cAAAA;AAAA,gBAAC,cAAA;AAAA,gBAAA;AAAA,kBACC,cAAA;AAAA,kBACA,UAAA,EAAY,MAAM,iBAAA,CAAkB,KAAK;AAAA;AAAA;AAC3C,aAAA,EACF;AAAA;AAAA,SACF;AAAA,QAED;AAAA,OAAA,EACH;AAAA;AAAA,KAEJ,CAAA,EACF,CAAA;AAEJ;AAKA,SAAS,kBAAA,GAAqB;AAC5B,EAAA,MAAM,EAAE,MAAA,EAAQ,IAAA,EAAM,KAAA,KAAU,YAAA,EAAa;AAC7C,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIH,iBAA6B,IAAI,CAAA;AACrE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,iBAAuB,IAAI,CAAA;AAErD,EAAAO,kBAAU,MAAM;AACd,IAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AAEnC,IAAA,IAAI,IAAA,GAAO,QAAA,CAAS,cAAA,CAAe,iBAAiB,CAAA;AACpD,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,IAAA,GAAO,QAAA,CAAS,cAAc,KAAK,CAAA;AACnC,MAAA,IAAA,CAAK,EAAA,GAAK,iBAAA;AACV,MAAA,QAAA,CAAS,IAAA,CAAK,YAAY,IAAI,CAAA;AAAA,IAChC;AACA,IAAA,aAAA,CAAc,IAAI,CAAA;AAElB,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,IAAA,IAAQ,IAAA,CAAK,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG;AACxC,QAAA,IAAA,CAAK,MAAA,EAAO;AAAA,MACd;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,KAAA,EAAM;AAAA,EACR,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,GAAA,KAAe;AAClC,IAAA,OAAA,CAAQ,KAAA,CAAM,yBAAyB,GAAG,CAAA;AAC1C,IAAA,QAAA,CAAS,GAAG,CAAA;AAAA,EACd,CAAA;AAEA,EAAA,IAAI,CAAC,YAAY,OAAO,IAAA;AAExB,EAAA,OAAOE,qBAAAA;AAAA,oBACLG,eAAAA,CAAAE,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAX,cAAAA;AAAA,QAAC,YAAA;AAAA,QAAA;AAAA,UACC,MAAA,EAAQ,UAAU,IAAA,KAAS,SAAA;AAAA,UAC3B,OAAA,EAAS,WAAA;AAAA,UACT,OAAA,EAAS;AAAA;AAAA,OACX;AAAA,MACC,yBACCA,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO;AAAA,YACL,QAAA,EAAU,OAAA;AAAA,YACV,MAAA,EAAQ,MAAA;AAAA,YACR,KAAA,EAAO,MAAA;AAAA,YACP,eAAA,EAAiB,SAAA;AAAA,YACjB,MAAA,EAAQ,mBAAA;AAAA,YACR,YAAA,EAAc,KAAA;AAAA,YACd,OAAA,EAAS,WAAA;AAAA,YACT,QAAA,EAAU,OAAA;AAAA,YACV,SAAA,EAAW,qCAAA;AAAA,YACX,MAAA,EAAQ;AAAA,WACV;AAAA,UAEA,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAU,EAC9C,QAAA,EAAA,KAAA,CAAM,OAAA,EACT;AAAA;AAAA;AACF,KAAA,EAEJ,CAAA;AAAA,IACA;AAAA,GACF;AACF;AAMA,SAAS,kBAAA,GAAqB;AAC5B,EAAA,MAAM,EAAE,MAAA,EAAQ,IAAA,EAAM,KAAA,EAAO,KAAA,KAAU,YAAA,EAAa;AACpD,EAAA,MAAM,EAAE,IAAA,EAAK,GAAIY,oBAAAA,EAAe;AAChC,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIf,iBAA6B,IAAI,CAAA;AACrE,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,iBAAS,KAAK,CAAA;AAEhD,EAAAO,kBAAU,MAAM;AACd,IAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACnC,IAAA,IAAI,IAAA,GAAO,QAAA,CAAS,cAAA,CAAe,iBAAiB,CAAA;AACpD,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,IAAA,GAAO,QAAA,CAAS,cAAc,KAAK,CAAA;AACnC,MAAA,IAAA,CAAK,EAAA,GAAK,iBAAA;AACV,MAAA,QAAA,CAAS,IAAA,CAAK,YAAY,IAAI,CAAA;AAAA,IAChC;AACA,IAAA,aAAA,CAAc,IAAI,CAAA;AAClB,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,IAAA,IAAQ,IAAA,CAAK,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG;AACxC,QAAA,IAAA,CAAK,MAAA,EAAO;AAAA,MACd;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAGL,EAAAA,kBAAU,MAAM;AACd,IAAA,IAAI,MAAA,IAAU,IAAA,KAAS,SAAA,IAAa,CAAC,IAAA,EAAM;AACzC,MAAA,YAAA,CAAa,IAAI,CAAA;AAAA,IACnB,CAAA,MAAO;AACL,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,IAAA,EAAM,IAAI,CAAC,CAAA;AAKvB,EAAA,IAAI,CAAC,YAAY,OAAO,IAAA;AAGxB,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,OAAOE,qBAAAA;AAAA,sBACLN,cAAAA;AAAA,QAAC,YAAA;AAAA,QAAA;AAAA,UACC,MAAA,EAAQ,UAAU,IAAA,KAAS,SAAA;AAAA,UAC3B,OAAA,EAAS;AAAA;AAAA,OACX;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAOM,qBAAAA;AAAA,oBACLN,cAAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,UAAU,IAAA,KAAS,SAAA;AAAA,QACzB,YAAA,EAAc,CAAC,IAAA,KAAS,CAAC,QAAQ,KAAA,EAAM;AAAA,QACvC;AAAA;AAAA,KACF;AAAA,IACA;AAAA,GACF;AACF;AAMA,SAAS,oBAAA,CAAqB;AAAA,EAC5B;AACF,CAAA,EAEG;AACD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIH,iBAAS,KAAK,CAAA;AAG5C,EAAAO,kBAAU,MAAM;AACd,IAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACnC,IAAA,MAAM,MAAA,GAAS,IAAI,eAAA,CAAgB,MAAA,CAAO,SAAS,MAAM,CAAA;AACzD,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,GAAA,CAAI,MAAM,CAAA;AAE9B,IAAA,IAAI,IAAA,EAAM,UAAA,CAAW,YAAY,CAAA,EAAG;AAClC,MAAA,UAAA,CAAW,IAAI,CAAA;AAAA,IACjB;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,EAAE,SAAA,EAAW,KAAA,EAAM,GAAIiB,yBAAA,CAAoB;AAAA,IAC/C,SAAA,EAAW,CAAC,UAAA,KAAe;AACzB,MAAA,OAAA,CAAQ,GAAA,CAAI,0CAAA,EAA4C,UAAA,CAAW,KAAK,CAAA;AAExE,MAAA,IAAI,CAAC,WAAW,cAAA,EAAgB;AAC9B,QAAA,gBAAA,EAAiB;AAAA,MACnB;AAAA,IACF,CAAA;AAAA,IACA,OAAA,EAAS,CAAC,GAAA,KAAQ;AAChB,MAAA,OAAA,CAAQ,KAAA,CAAM,wCAAwC,GAAG,CAAA;AAAA,IAC3D;AAAA,GACD,CAAA;AAGD,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AAGrB,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,uBACErB,cAAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAM,IAAA,EAAM,cAAc,MAAM;AAAA,IAAC,CAAA,EACtC,QAAA,kBAAAS,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,uDAAA,EACb,QAAA,EAAA;AAAA,sBAAAT,cAAAA,CAAC,SAAI,SAAA,EAAU,+GAAA,EAAgH,OAAO,EAAE,cAAA,EAAgB,oBAAmB,EAAG,CAAA;AAAA,sBAC9KA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,uBAAsB,QAAA,EAAA,qBAAA,EAAmB;AAAA,KAAA,EACxD,CAAA,EACF,CAAA;AAAA,EAEJ;AAGA,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,uBACEA,cAAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAM,MAAM,YAAA,EAAc,MAAM,UAAA,CAAW,KAAK,CAAA,EACrD,QAAA,kBAAAS,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,uDAAA,EACb,QAAA,EAAA;AAAA,sBAAAT,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,uCAAA,EAAwC,QAAA,EAAA,cAAA,EAAY,CAAA;AAAA,sBACjEA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oCAAoC,QAAA,EAAA,KAAA,EAAM;AAAA,KAAA,EACzD,CAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,OAAO,IAAA;AACT;AAQA,SAAS,iBAAA,CAAkB;AAAA,EACzB,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,MAAM,EAAE,IAAA,EAAM,QAAA,EAAU,SAAA,KAAcY,oBAAAA,EAAe;AACrD,EAAA,MAAM,EAAE,MAAA,EAAQ,WAAA,EAAY,GAAI,YAAA,EAAa;AAC7C,EAAA,MAAM,cAAA,GAAiBF,wBAAAA,CAAM,MAAA,CAAO,KAAK,CAAA;AAGzC,EAAAN,kBAAU,MAAM;AACd,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,cAAA,CAAe,OAAA,GAAU,IAAA;AAAA,IAC3B;AAAA,EACF,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAAA,kBAAU,MAAM;AACd,IAAA,IAAI,SAAA,EAAW;AACb,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,gBAAA,EAAiB;AACjB,MAAA;AAAA,IACF;AAIA,IAAA,IAAI,eAAe,OAAA,EAAS;AAC1B,MAAA,gBAAA,EAAiB;AACjB,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,MAAM,cAAA,EAAgB;AACxB,MAAA,gBAAA,EAAiB;AACjB,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,gBAAA,EAAiB;AACjB,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,QAAQ,gBAAA,EAAkB;AAC5B,MAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,QAAA,OAAA,CAAQ,KAAA;AAAA,UACN;AAAA,SACF;AACA,QAAA;AAAA,MACF;AACA,MAAA,gBAAA,EAAiB;AAAA,IACnB;AAAA,EACF,CAAA,EAAG;AAAA,IACD,IAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAA;AAAA,IACA,gBAAA;AAAA,IACA,cAAA;AAAA,IACA,gBAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,OAAO,IAAA;AACT;AC3dO,SAAS,gBAAA,GAAmB;AACjC,EAAA,MAAM,EAAE,MAAA,EAAO,GAAIS,qBAAAA,EAAgB;AAEnC,EAAA,OAAOZ,mBAAAA;AAAA,IACL,OAAO,OAAA,KAAmC;AACxC,MAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,CAAE,OAAe,QAAA,EAAU;AAC9D,QAAA,MAAM,IAAI,MAAM,iBAAiB,CAAA;AAAA,MACnC;AAEA,MAAA,MAAM,WAAY,MAAA,CAAe,QAAA;AACjC,MAAA,MAAM,UAAA,GAAa,CAAA,EAAA,EAAK,OAAA,CAAQ,QAAA,CAAS,EAAE,CAAC,CAAA,CAAA;AAE5C,MAAA,IAAI;AAEF,QAAA,MAAM,SAAS,OAAA,CAAQ;AAAA,UACrB,MAAA,EAAQ,4BAAA;AAAA,UACR,MAAA,EAAQ,CAAC,EAAE,OAAA,EAAS,YAAY;AAAA,SACjC,CAAA;AAAA,MACH,SAAS,WAAA,EAAkB;AAEzB,QAAA,IAAI,WAAA,CAAY,SAAS,IAAA,EAAM;AAC7B,UAAA,IAAI;AAEF,YAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,GAAA;AAAA,cAC5B,aAAa,OAAO,CAAA,4CAAA;AAAA,aACtB;AAEA,YAAA,IAAI,CAAC,SAAS,MAAA,EAAQ;AACpB,cAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kCAAA,EAAqC,OAAO,CAAA,CAAE,CAAA;AAAA,YAChE;AAEA,YAAA,IAAI,CAAC,SAAS,cAAA,EAAgB;AAC5B,cAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wDAAA,EAA2D,OAAO,CAAA,CAAE,CAAA;AAAA,YACtF;AAGA,YAAA,MAAM,SAAS,OAAA,CAAQ;AAAA,cACrB,MAAA,EAAQ,yBAAA;AAAA,cACR,MAAA,EAAQ;AAAA,gBACN;AAAA,kBACE,OAAA,EAAS,UAAA;AAAA,kBACT,WAAW,QAAA,CAAS,IAAA;AAAA,kBACpB,gBAAgB,QAAA,CAAS,cAAA;AAAA,kBACzB,OAAA,EAAS,CAAC,QAAA,CAAS,MAAM,CAAA;AAAA,kBACzB,mBAAmB,QAAA,CAAS,gBAAA,GACxB,CAAC,QAAA,CAAS,gBAAgB,CAAA,GAC1B,KAAA;AAAA;AACN;AACF,aACD,CAAA;AAAA,UACH,SAAS,QAAA,EAAU;AACjB,YAAA,MAAM,IAAI,KAAA;AAAA,cACR,CAAA,uBAAA,EAA0B,QAAA,YAAoB,KAAA,GAAQ,QAAA,CAAS,UAAU,eAAe,CAAA;AAAA,aAC1F;AAAA,UACF;AAAA,QACF,CAAA,MAAO;AACL,UAAA,MAAM,IAAI,KAAA;AAAA,YACR,CAAA,0BAAA,EAA6B,WAAA,CAAY,OAAA,IAAW,eAAe,CAAA;AAAA,WACrE;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AACF;AAKA,eAAsB,iBAAA,GAAqC;AACzD,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,CAAE,OAAe,QAAA,EAAU;AAC9D,IAAA,MAAM,IAAI,MAAM,iBAAiB,CAAA;AAAA,EACnC;AAEA,EAAA,MAAM,UAAA,GAAa,MAAO,MAAA,CAAe,QAAA,CAAS,OAAA,CAAQ;AAAA,IACxD,MAAA,EAAQ;AAAA,GACT,CAAA;AAED,EAAA,OAAO,QAAA,CAAS,YAAY,EAAE,CAAA;AAChC","file":"index.cjs","sourcesContent":["/**\n * English translations\n */\n\nexport const en = {\n common: {\n back: 'Back',\n loading: 'Loading...',\n cancel: 'Cancel',\n },\n login: {\n title: 'Sign in',\n description: 'Choose your preferred sign-in method',\n or: 'or',\n terms: 'By continuing, you agree to our Terms of Service and Privacy Policy',\n email: {\n title: 'Sign in with email',\n description: 'Enter your email to receive a verification code',\n label: 'Email Login',\n emailLabel: 'Email address',\n placeholder: 'Enter Email',\n sendCode: 'Send verification code',\n codeLabel: '6-digit verification code',\n verifyTitle: 'Enter verification code',\n verifyDescription: 'We sent a code to {{email}}',\n resend: 'Resend code',\n submit: 'Verify',\n },\n social: {\n google: 'Sign in with Google',\n twitter: 'Sign in with Twitter',\n apple: 'Sign in with Apple',\n },\n wallet: {\n title: 'Sign in with wallet',\n signDescription: 'Sign the message to verify your wallet',\n connected: 'Connected',\n connect: 'Connect wallet',\n sign: 'Sign message',\n label: 'Wallet Login',\n },\n },\n siwe: {\n mobileGuide: 'To sign with your wallet app:',\n mobileStep1: 'Copy the sign URL below',\n mobileStep2: 'Open your wallet app (MetaMask, etc.)',\n mobileStep3: 'Paste the URL in the app browser and sign',\n copyUrl: 'Copy Sign URL',\n urlCopied: 'URL copied! Paste it in your wallet app browser.',\n startSession: 'Sign with Wallet App',\n waitingForSignature: 'Waiting for signature...',\n sessionExpired: 'Session expired. Please try again.',\n orSignInApp: 'Or sign in your wallet app',\n connectBrowser: 'Connect Browser Wallet',\n },\n passkey: {\n // Dynamic titles based on biometric type\n titleTouchId: 'Set up Touch ID login',\n titleFaceId: 'Set up Face ID login',\n titleFingerprint: 'Set up fingerprint login',\n // Short description\n description: 'Sign in instantly, every time.',\n // Legacy keys for backward compatibility\n touchId: 'Use Touch ID to create your passkey',\n faceId: 'Use Face ID to create your passkey',\n fingerprint: 'Use your fingerprint to create your passkey',\n biometric: 'Use biometric authentication to create your passkey',\n creating: 'Creating secure login...',\n encrypting: 'Encrypting your wallet...',\n uploading: 'Uploading encrypted data...',\n registering: 'Registering wallet...',\n start: 'Enable',\n logout: 'Logout',\n errors: {\n cancelled: 'Setup was cancelled. Please try again.',\n alreadyExists: 'Biometric login is already set up.',\n notSupported: 'Your device doesn\\'t support biometric login.',\n generic: 'Setup failed. Please try again.',\n },\n },\n success: {\n title: 'Success!',\n message: \"You're all set. Redirecting...\",\n },\n account: {\n title: 'My Account',\n walletAddress: 'Wallet Address',\n email: 'Email',\n logout: 'Log out',\n },\n deposit: {\n selectTitle: 'Select asset to deposit',\n qrTitle: 'Deposit',\n scanInstruction: 'Scan QR code to deposit',\n yourAddress: 'Your deposit address',\n copy: 'Copy address',\n copied: 'Copied!',\n listening: 'Waiting for deposit...',\n detected: 'Deposit confirmed!',\n completed: 'Deposit Complete',\n completedAmount: '{{amount}} {{symbol}} deposited',\n amount: 'Amount',\n previousBalance: 'Previous balance',\n newBalance: 'New balance',\n seeMore: 'View details',\n seeLess: 'Hide details',\n noAssets: 'No deposit assets configured.',\n otherToken: 'Deposit with another token',\n noToken: \"Don't have this token?\",\n getOtherToken: 'Deposit with another token',\n },\n errors: {\n webauthnNotSupported: 'WebAuthn API is not supported',\n passkeyCreationFailed: 'Failed to create passkey',\n passkeyCreationError: 'An error occurred while creating passkey',\n emailLoginFailed: 'Email login failed',\n socialLoginFailed: 'Social login failed',\n walletConnectionFailed: 'Wallet connection failed',\n passkeySetupFailed: 'Passkey setup failed',\n },\n} as const;\n\n","/**\n * Korean translations\n */\n\nexport const ko = {\n common: {\n back: '뒤로',\n loading: '로딩 중...',\n cancel: '취소',\n },\n login: {\n title: '로그인',\n description: '로그인 방식을 선택하세요',\n or: '또는',\n terms: '계속 진행하면 서비스 약관 및 개인정보 보호정책에 동의하는 것입니다',\n email: {\n title: '이메일로 로그인',\n description: '인증 코드를 받을 이메일 주소를 입력하세요',\n label: '이메일 로그인',\n emailLabel: '이메일 주소',\n placeholder: '이메일 입력',\n sendCode: '인증코드 전송',\n codeLabel: '6자리 인증코드',\n verifyTitle: '인증코드 입력',\n verifyDescription: '{{email}}로 코드를 전송했습니다',\n resend: '코드 재전송',\n submit: '확인',\n },\n social: {\n google: '구글로 로그인',\n twitter: '트위터로 로그인',\n apple: '애플로 로그인',\n },\n wallet: {\n title: '지갑으로 로그인',\n signDescription: '메시지에 서명하여 지갑을 인증하세요',\n connected: '연결됨',\n connect: '지갑 연결',\n sign: '메시지 서명',\n label: '지갑 로그인',\n },\n },\n siwe: {\n mobileGuide: '지갑 앱에서 서명하기:',\n mobileStep1: '아래 서명 URL 복사',\n mobileStep2: '지갑 앱 열기 (MetaMask 등)',\n mobileStep3: '앱 브라우저에 URL 붙여넣고 서명',\n copyUrl: '서명 URL 복사',\n urlCopied: 'URL이 복사되었습니다! 지갑 앱 브라우저에 붙여넣기 하세요.',\n startSession: '지갑 앱에서 서명',\n waitingForSignature: '서명 대기 중...',\n sessionExpired: '세션이 만료되었습니다. 다시 시도해주세요.',\n orSignInApp: '또는 지갑 앱에서 서명',\n connectBrowser: '브라우저 지갑 연결',\n },\n passkey: {\n // Dynamic titles based on biometric type\n titleTouchId: 'Touch ID 로그인 설정',\n titleFaceId: 'Face ID 로그인 설정',\n titleFingerprint: '지문 로그인 설정',\n // Short description\n description: '한 번 등록하면, 다음부터 바로 로그인',\n // Legacy keys for backward compatibility\n touchId: 'Touch ID를 사용하여 패스키를 생성하세요',\n faceId: 'Face ID를 사용하여 패스키를 생성하세요',\n fingerprint: '지문을 사용하여 패스키를 생성하세요',\n biometric: '생체 인증을 사용하여 패스키를 생성하세요',\n creating: '로그인 설정 중...',\n encrypting: '지갑 암호화 중...',\n uploading: '데이터 업로드 중...',\n registering: '지갑 등록 중...',\n start: '설정하기',\n logout: '로그아웃',\n errors: {\n cancelled: '설정이 취소되었습니다. 다시 시도해주세요.',\n alreadyExists: '이미 생체 로그인이 설정되어 있습니다.',\n notSupported: '이 기기는 생체 로그인을 지원하지 않습니다.',\n generic: '설정에 실패했습니다. 다시 시도해주세요.',\n },\n },\n success: {\n title: '완료!',\n message: '모든 설정이 완료되었습니다. 리다이렉트 중...',\n },\n account: {\n title: '내 계정',\n walletAddress: '지갑 주소',\n email: '이메일',\n logout: '로그아웃',\n },\n deposit: {\n selectTitle: '충전할 자산을 선택하세요',\n qrTitle: '입금하기',\n scanInstruction: 'QR 코드를 스캔하여 입금하세요',\n yourAddress: '입금 주소',\n copy: '주소 복사',\n copied: '복사되었습니다!',\n listening: '입금을 기다리는 중...',\n detected: '입금이 확인되었습니다!',\n completed: '입금 완료',\n completedAmount: '{{amount}} {{symbol}} 입금 확인되었습니다.',\n amount: '입금 금액',\n previousBalance: '이전 잔액',\n newBalance: '새 잔액',\n seeMore: '자세히 보기',\n seeLess: '간단히 보기',\n noAssets: '설정된 충전 자산이 없습니다.',\n otherToken: '다른 토큰으로 충전하기',\n noToken: '이 토큰이 없으신가요?',\n getOtherToken: '다른 토큰으로 입금하기',\n },\n errors: {\n webauthnNotSupported: 'WebAuthn API가 지원되지 않습니다.',\n passkeyCreationFailed: '패스키 생성에 실패했습니다.',\n passkeyCreationError: '패스키 생성 중 문제가 발생했습니다.',\n emailLoginFailed: '이메일 로그인에 실패했습니다.',\n socialLoginFailed: '소셜 로그인에 실패했습니다.',\n walletConnectionFailed: '지갑 연결에 실패했습니다.',\n passkeySetupFailed: '패스키 설정에 실패했습니다.',\n },\n} as const;\n\n","/**\n * i18n types and utilities\n */\n\nimport { en } from './locales/en';\nimport { ko } from './locales/ko';\n\nexport type Locale = 'en' | 'ko';\n\n// Helper type to convert literal types to string\ntype DeepStringify<T> = T extends string\n ? string\n : T extends object\n ? { readonly [K in keyof T]: DeepStringify<T[K]> }\n : T;\n\n// Infer type structure from en locale (source of truth)\nexport type Translations = DeepStringify<typeof en>;\n\n// Type-safe translations object - ko must have same structure as en\nconst translations: Record<Locale, Translations> = {\n en,\n ko,\n};\n\n/**\n * Get translations for a specific locale\n */\nexport function getTranslations(locale: Locale = 'en'): Translations {\n return translations[locale] || translations.en;\n}\n\n/**\n * Type-safe translation key path\n */\nexport type TranslationKey = keyof Translations | `${keyof Translations}.${string}`;\n\n/**\n * Get nested translation value by key path\n */\nexport function t(\n locale: Locale,\n key: string,\n defaultValue?: string\n): string {\n const translations = getTranslations(locale);\n const keys = key.split('.');\n \n let value: any = translations;\n for (const k of keys) {\n if (value && typeof value === 'object' && k in value) {\n value = value[k as keyof typeof value];\n } else {\n return defaultValue || key;\n }\n }\n \n return typeof value === 'string' ? value : defaultValue || key;\n}\n\n","/**\n * i18n React Context\n */\n\nimport React, { createContext, useContext, useMemo, useState } from 'react';\nimport type { Locale, Translations } from './index';\nimport { getTranslations } from './index';\n\nexport interface I18nContextValue {\n locale: Locale;\n translations: Translations;\n t: (key: string, params?: Record<string, string>) => string;\n setLocale: (locale: Locale) => void;\n}\n\nexport const I18nContext = createContext<I18nContextValue | null>(null);\n\n/**\n * Hook to access i18n context\n */\n/**\n * Replace {{key}} placeholders with values from params\n */\nfunction interpolate(text: string, params?: Record<string, string>): string {\n if (!params) return text;\n return text.replace(/\\{\\{(\\w+)\\}\\}/g, (_, key) => params[key] ?? `{{${key}}}`);\n}\n\nexport function useI18n(): I18nContextValue {\n const context = useContext(I18nContext);\n if (!context) {\n // Fallback to English if context is not available\n return {\n locale: 'en',\n translations: getTranslations('en'),\n t: (key: string, params?: Record<string, string>) => {\n const translations = getTranslations('en');\n const keys = key.split('.');\n let value: any = translations;\n for (const k of keys) {\n if (value && typeof value === 'object' && k in value) {\n value = value[k as keyof typeof value];\n } else {\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.warn(`[i18n] Missing key: ${key} (locale: en)`);\n }\n return key;\n }\n }\n return typeof value === 'string' ? interpolate(value, params) : key;\n },\n setLocale: () => {},\n };\n }\n return context;\n}\n\n/**\n * I18n Provider component\n */\nexport interface I18nProviderProps {\n children: React.ReactNode;\n}\n\nfunction detectLocale(): Locale {\n if (typeof window === 'undefined' || !window.navigator?.language) {\n return 'en';\n }\n const lang = window.navigator.language.toLowerCase();\n return lang.startsWith('ko') ? 'ko' : 'en';\n}\n\nexport function I18nProvider({ children }: I18nProviderProps) {\n const [locale, setLocale] = useState<Locale>(detectLocale());\n const translations = useMemo(() => getTranslations(locale), [locale]);\n \n const t = useMemo(() => {\n return (key: string, params?: Record<string, string>): string => {\n const keys = key.split('.');\n let value: any = translations;\n for (const k of keys) {\n if (value && typeof value === 'object' && k in value) {\n value = value[k as keyof typeof value];\n } else {\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.warn(`[i18n] Missing key: ${key} (locale: ${locale})`);\n }\n return key;\n }\n }\n return typeof value === 'string' ? interpolate(value, params) : key;\n };\n }, [translations]);\n\n const value = useMemo<I18nContextValue>(\n () => ({\n locale,\n translations,\n t,\n setLocale,\n }),\n [locale, translations, t, setLocale]\n );\n\n return <I18nContext.Provider value={value}>{children}</I18nContext.Provider>;\n}\n\n// For familiarity with common i18n hooks\nexport const useTranslation = useI18n;\n\n","import React, { createContext, useContext, useState, useCallback } from \"react\";\n\nexport type ModalMode = \"account\" | \"deposit\";\n\nexport interface ModalAsset {\n chainId: number;\n symbol: string;\n}\n\nexport interface OpenModalOptions {\n mode?: ModalMode;\n asset?: ModalAsset;\n}\n\ninterface VolrModalContextValue {\n isOpen: boolean;\n mode: ModalMode;\n asset: ModalAsset | null;\n open: (options?: OpenModalOptions) => void;\n close: () => void;\n}\n\nconst VolrModalContext = createContext<VolrModalContextValue | null>(null);\n\nexport const useVolrModal = (): VolrModalContextValue => {\n const context = useContext(VolrModalContext);\n if (!context) {\n throw new Error(\"useVolrModal must be used within VolrUIProvider\");\n }\n return context;\n};\n\nexport const VolrModalProvider: React.FC<{ children: React.ReactNode }> = ({\n children,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [mode, setMode] = useState<ModalMode>(\"account\");\n const [asset, setAsset] = useState<ModalAsset | null>(null);\n\n const open = useCallback((options?: OpenModalOptions) => {\n setMode(options?.mode ?? \"account\");\n setAsset(options?.asset ?? null);\n setIsOpen(true);\n }, []);\n\n const close = useCallback(() => {\n setIsOpen(false);\n setAsset(null);\n }, []);\n\n return (\n <VolrModalContext.Provider value={{ isOpen, mode, asset, open, close }}>\n {children}\n </VolrModalContext.Provider>\n );\n};\n","import { clsx, type ClassValue } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\n/**\n * Volr SDK용 tailwind-merge 설정\n * \n * 문제: 기본 tailwind-merge는 'volr:' prefix를 인식하지 못해\n * class 충돌 해결이 제대로 되지 않음\n * \n * 해결: prefix를 설정하여 'volr:' prefix가 붙은 클래스들을 올바르게 처리\n */\nconst twMerge = extendTailwindMerge({\n prefix: \"volr:\",\n});\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n\n\n\n","import { useEffect, useState } from 'react';\n\nexport function useMediaQuery(query: string): boolean {\n const [matches, setMatches] = useState(() => {\n if (typeof window === 'undefined') return false;\n return window.matchMedia(query).matches;\n });\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n const mql = window.matchMedia(query);\n const handler = (event: MediaQueryListEvent) => setMatches(event.matches);\n mql.addEventListener('change', handler);\n setMatches(mql.matches);\n return () => mql.removeEventListener('change', handler);\n }, [query]);\n\n return matches;\n}\n\n","// This file is auto-generated. Do not edit manually.\nexport const VOLR_SDK_CSS = \"/*! tailwindcss v4.1.17 | 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)))){*,:before,:after,::backdrop{--volr-tw-translate-x:0;--volr-tw-translate-y:0;--volr-tw-translate-z:0;--volr-tw-space-y-reverse:0;--volr-tw-border-style:solid;--volr-tw-gradient-position:initial;--volr-tw-gradient-from:#0000;--volr-tw-gradient-via:#0000;--volr-tw-gradient-to:#0000;--volr-tw-gradient-stops:initial;--volr-tw-gradient-via-stops:initial;--volr-tw-gradient-from-position:0%;--volr-tw-gradient-via-position:50%;--volr-tw-gradient-to-position:100%;--volr-tw-leading:initial;--volr-tw-font-weight:initial;--volr-tw-shadow:0 0 #0000;--volr-tw-shadow-color:initial;--volr-tw-shadow-alpha:100%;--volr-tw-inset-shadow:0 0 #0000;--volr-tw-inset-shadow-color:initial;--volr-tw-inset-shadow-alpha:100%;--volr-tw-ring-color:initial;--volr-tw-ring-shadow:0 0 #0000;--volr-tw-inset-ring-color:initial;--volr-tw-inset-ring-shadow:0 0 #0000;--volr-tw-ring-inset:initial;--volr-tw-ring-offset-width:0px;--volr-tw-ring-offset-color:#fff;--volr-tw-ring-offset-shadow:0 0 #0000;--volr-tw-blur:initial;--volr-tw-brightness:initial;--volr-tw-contrast:initial;--volr-tw-grayscale:initial;--volr-tw-hue-rotate:initial;--volr-tw-invert:initial;--volr-tw-opacity:initial;--volr-tw-saturate:initial;--volr-tw-sepia:initial;--volr-tw-drop-shadow:initial;--volr-tw-drop-shadow-color:initial;--volr-tw-drop-shadow-alpha:100%;--volr-tw-drop-shadow-size:initial;--volr-tw-duration:initial;--volr-tw-ease:initial}}}@layer theme{:root,:host{--volr-font-sans:ui-sans-serif,system-ui,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",\\\"Segoe UI Symbol\\\",\\\"Noto Color Emoji\\\";--volr-font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\\\"Liberation Mono\\\",\\\"Courier New\\\",monospace;--volr-color-red-50:oklch(97.1% .013 17.38);--volr-color-red-200:oklch(88.5% .062 18.334);--volr-color-red-700:oklch(50.5% .213 27.518);--volr-color-green-600:oklch(62.7% .194 149.214);--volr-color-emerald-300:oklch(84.5% .143 164.978);--volr-color-emerald-400:oklch(76.5% .177 163.223);--volr-color-emerald-500:oklch(69.6% .17 162.48);--volr-color-emerald-600:oklch(59.6% .145 163.225);--volr-color-teal-400:oklch(77.7% .152 181.912);--volr-color-teal-500:oklch(70.4% .14 182.503);--volr-color-cyan-400:oklch(78.9% .154 211.53);--volr-color-slate-50:oklch(98.4% .003 247.858);--volr-color-slate-200:oklch(92.9% .013 255.508);--volr-color-slate-300:oklch(86.9% .022 252.894);--volr-color-slate-500:oklch(55.4% .046 257.417);--volr-color-slate-600:oklch(44.6% .043 257.281);--volr-color-gray-500:oklch(55.1% .027 264.364);--volr-color-black:#000;--volr-color-white:#fff;--volr-spacing:.25rem;--volr-container-md:28rem;--volr-container-4xl:56rem;--volr-text-xs:.75rem;--volr-text-xs--line-height:calc(1/.75);--volr-text-sm:.875rem;--volr-text-sm--line-height:calc(1.25/.875);--volr-text-base:1rem;--volr-text-base--line-height:calc(1.5/1);--volr-text-lg:1.125rem;--volr-text-lg--line-height:calc(1.75/1.125);--volr-text-xl:1.25rem;--volr-text-xl--line-height:calc(1.75/1.25);--volr-text-2xl:1.5rem;--volr-text-2xl--line-height:calc(2/1.5);--volr-text-8xl:6rem;--volr-text-8xl--line-height:1;--volr-font-weight-medium:500;--volr-font-weight-semibold:600;--volr-font-weight-bold:700;--volr-leading-relaxed:1.625;--volr-radius-md:.375rem;--volr-radius-lg:.5rem;--volr-radius-xl:.75rem;--volr-radius-2xl:1rem;--volr-radius-3xl:1.5rem;--volr-ease-out:cubic-bezier(0,0,.2,1);--volr-animate-spin:spin 1s linear infinite;--volr-animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--volr-blur-2xl:40px;--volr-default-transition-duration:.15s;--volr-default-transition-timing-function:cubic-bezier(.4,0,.2,1);--volr-default-font-family:var(--volr-font-sans);--volr-default-mono-font-family:var(--volr-font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--volr-default-font-family,ui-sans-serif,system-ui,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",\\\"Segoe UI Symbol\\\",\\\"Noto Color Emoji\\\");font-feature-settings:var(--volr-default-font-feature-settings,normal);font-variation-settings:var(--volr-default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--volr-default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\\\"Liberation Mono\\\",\\\"Courier New\\\",monospace);font-feature-settings:var(--volr-default-mono-font-feature-settings,normal);font-variation-settings:var(--volr-default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:host{--volr-primary-color:var(--volr-accent-color,#303030);--volr-font-family:var(--volr-custom-font,inherit);--volr-bg:#fff;--volr-bg-secondary:#f8fafc;--volr-bg-tertiary:#f1f5f9;--volr-text:#0f172a;--volr-text-secondary:#475569;--volr-text-muted:#94a3b8;--volr-border:#e2e8f0;--volr-border-strong:#cbd5e1;--volr-hover-bg:#f8fafc;--volr-error-bg:#fef2f2;--volr-error-border:#fecaca;--volr-error-text:#991b1b}:host([data-theme=dark]){--volr-bg:#1c1c1e;--volr-bg-secondary:#2c2c2e;--volr-bg-tertiary:#3a3a3c;--volr-text:#f5f5f7;--volr-text-secondary:#c7c7cc;--volr-text-muted:#8e8e93;--volr-border:#3a3a3c;--volr-border-strong:#48484a;--volr-hover-bg:#2c2c2e;--volr-error-bg:#3c1f1f;--volr-error-border:#7f1d1d;--volr-error-text:#fca5a5}*,:before,:after{box-sizing:border-box}*{font-family:var(--volr-font-family);color:var(--volr-text)}button,input,select,textarea{color:var(--volr-text);background-color:#0000}button{cursor:pointer;background-color:#0000}input::placeholder{color:var(--volr-text-muted)}h1,h2,h3{color:var(--volr-text);margin:0;font-weight:700}h1{font-size:1.875rem;line-height:2.25rem}h2{font-size:1.5rem;line-height:2rem}h3{font-size:1.25rem;line-height:1.75rem}p{margin:0}}@layer components{.volr-dialog-overlay{inset:calc(var(--volr-spacing)*0);z-index:40;background-color:var(--volr-color-black);position:fixed}@supports (color:color-mix(in lab, red, red)){.volr-dialog-overlay{background-color:color-mix(in oklab,var(--volr-color-black)45%,transparent)}}.volr-dialog-content{z-index:50;border-radius:var(--volr-radius-2xl);border-style:var(--volr-tw-border-style);padding:calc(var(--volr-spacing)*7);--volr-tw-shadow:0 20px 25px -5px var(--volr-tw-shadow-color,#0000001a),0 8px 10px -6px var(--volr-tw-shadow-color,#0000001a);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow);background-color:var(--volr-bg);border-width:1px;border-color:var(--volr-border-strong);width:calc(100% - 2rem);max-width:28rem;max-height:85vh;position:fixed;top:50%;left:50%;overflow-y:auto;transform:translate(-50%,-50%)}@media (max-width:640px){.volr-dialog-content{top:auto;right:calc(var(--volr-spacing)*0);bottom:calc(var(--volr-spacing)*0);left:calc(var(--volr-spacing)*0);border-radius:1.25rem 1.25rem 0 0;width:100%;max-width:100%;margin:0 auto;transform:translateY(0)}}.volr-dialog-close{top:calc(var(--volr-spacing)*4);right:calc(var(--volr-spacing)*4);height:calc(var(--volr-spacing)*8);width:calc(var(--volr-spacing)*8);color:var(--volr-text-muted);cursor:pointer;background-color:#0000;border:none;border-radius:3.40282e38px;justify-content:center;align-items:center;display:inline-flex;position:absolute}.volr-dialog-close:hover{background-color:var(--volr-hover-bg);color:var(--volr-text-secondary)}.volr-dialog-close:focus-visible{box-shadow:0 0 0 2px var(--volr-border-strong);outline:none}.volr-dialog-close-icon{height:calc(var(--volr-spacing)*4);width:calc(var(--volr-spacing)*4)}.volr-email-input{border:1px solid var(--volr-border-strong);background-color:var(--volr-bg);width:100%;color:var(--volr-text);border-radius:.5rem;outline:none;padding:.75rem .75rem .75rem 2.75rem;font-size:1rem;line-height:1.5}.volr-email-input::placeholder{color:var(--volr-text-muted)}.volr-email-input:focus{border-color:var(--volr-border-strong);box-shadow:0 0 0 2px var(--volr-border-strong)}.volr-option-button{border:1px solid var(--volr-border);background-color:var(--volr-bg);width:100%;color:var(--volr-text);cursor:pointer;border-radius:.5rem;align-items:center;gap:.75rem;padding:.75rem;transition:background-color .15s ease-out,border-color .15s ease-out,box-shadow .15s ease-out;display:flex}.volr-option-button:hover{background-color:var(--volr-hover-bg);border-color:var(--volr-border)}.volr-option-button:focus-visible{box-shadow:0 0 0 2px var(--volr-border-strong);outline:none}}@layer utilities{.volr\\\\:pointer-events-auto{pointer-events:auto}.volr\\\\:pointer-events-none{pointer-events:none}.volr\\\\:sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.volr\\\\:absolute{position:absolute}.volr\\\\:fixed{position:fixed}.volr\\\\:relative{position:relative}.volr\\\\:inset-0{inset:calc(var(--volr-spacing)*0)}.volr\\\\:-top-3{top:calc(var(--volr-spacing)*-3)}.volr\\\\:top-1\\\\/2{top:50%}.volr\\\\:-right-3{right:calc(var(--volr-spacing)*-3)}.volr\\\\:-right-4{right:calc(var(--volr-spacing)*-4)}.volr\\\\:right-2{right:calc(var(--volr-spacing)*2)}.volr\\\\:bottom-0{bottom:calc(var(--volr-spacing)*0)}.volr\\\\:-left-4{left:calc(var(--volr-spacing)*-4)}.volr\\\\:left-3{left:calc(var(--volr-spacing)*3)}.volr\\\\:-z-10{z-index:calc(10*-1)}.volr\\\\:z-10{z-index:10}.volr\\\\:z-20{z-index:20}.volr\\\\:z-40{z-index:40}.volr\\\\:z-50{z-index:50}.volr\\\\:mx-auto{margin-inline:auto}.volr\\\\:my-2{margin-block:calc(var(--volr-spacing)*2)}.volr\\\\:my-6{margin-block:calc(var(--volr-spacing)*6)}.volr\\\\:mt-0\\\\.5{margin-top:calc(var(--volr-spacing)*.5)}.volr\\\\:mt-1{margin-top:calc(var(--volr-spacing)*1)}.volr\\\\:mt-2{margin-top:calc(var(--volr-spacing)*2)}.volr\\\\:mt-3{margin-top:calc(var(--volr-spacing)*3)}.volr\\\\:mt-4{margin-top:calc(var(--volr-spacing)*4)}.volr\\\\:mt-6{margin-top:calc(var(--volr-spacing)*6)}.volr\\\\:mt-8{margin-top:calc(var(--volr-spacing)*8)}.volr\\\\:mb-1{margin-bottom:calc(var(--volr-spacing)*1)}.volr\\\\:mb-2{margin-bottom:calc(var(--volr-spacing)*2)}.volr\\\\:mb-3{margin-bottom:calc(var(--volr-spacing)*3)}.volr\\\\:mb-4{margin-bottom:calc(var(--volr-spacing)*4)}.volr\\\\:mb-5{margin-bottom:calc(var(--volr-spacing)*5)}.volr\\\\:mb-6{margin-bottom:calc(var(--volr-spacing)*6)}.volr\\\\:mb-8{margin-bottom:calc(var(--volr-spacing)*8)}.volr\\\\:-ml-2{margin-left:calc(var(--volr-spacing)*-2)}.volr\\\\:flex{display:flex}.volr\\\\:grid{display:grid}.volr\\\\:inline-block{display:inline-block}.volr\\\\:inline-flex{display:inline-flex}.volr\\\\:h-1{height:calc(var(--volr-spacing)*1)}.volr\\\\:h-1\\\\.5{height:calc(var(--volr-spacing)*1.5)}.volr\\\\:h-2{height:calc(var(--volr-spacing)*2)}.volr\\\\:h-3{height:calc(var(--volr-spacing)*3)}.volr\\\\:h-4{height:calc(var(--volr-spacing)*4)}.volr\\\\:h-6{height:calc(var(--volr-spacing)*6)}.volr\\\\:h-7{height:calc(var(--volr-spacing)*7)}.volr\\\\:h-8{height:calc(var(--volr-spacing)*8)}.volr\\\\:h-10{height:calc(var(--volr-spacing)*10)}.volr\\\\:h-14{height:calc(var(--volr-spacing)*14)}.volr\\\\:h-24{height:calc(var(--volr-spacing)*24)}.volr\\\\:h-40{height:calc(var(--volr-spacing)*40)}.volr\\\\:h-44{height:calc(var(--volr-spacing)*44)}.volr\\\\:h-48{height:calc(var(--volr-spacing)*48)}.volr\\\\:h-\\\\[0\\\\.8em\\\\]{height:.8em}.volr\\\\:h-\\\\[200px\\\\]{height:200px}.volr\\\\:h-full{height:100%}.volr\\\\:h-px{height:1px}.volr\\\\:max-h-36{max-height:calc(var(--volr-spacing)*36)}.volr\\\\:max-h-96{max-height:calc(var(--volr-spacing)*96)}.volr\\\\:max-h-\\\\[85vh\\\\]{max-height:85vh}.volr\\\\:max-h-\\\\[90vh\\\\]{max-height:90vh}.volr\\\\:min-h-\\\\[120px\\\\]{min-height:120px}.volr\\\\:min-h-\\\\[500px\\\\]{min-height:500px}.volr\\\\:w-1\\\\.5{width:calc(var(--volr-spacing)*1.5)}.volr\\\\:w-2{width:calc(var(--volr-spacing)*2)}.volr\\\\:w-6{width:calc(var(--volr-spacing)*6)}.volr\\\\:w-8{width:calc(var(--volr-spacing)*8)}.volr\\\\:w-10{width:calc(var(--volr-spacing)*10)}.volr\\\\:w-12{width:calc(var(--volr-spacing)*12)}.volr\\\\:w-24{width:calc(var(--volr-spacing)*24)}.volr\\\\:w-32{width:calc(var(--volr-spacing)*32)}.volr\\\\:w-36{width:calc(var(--volr-spacing)*36)}.volr\\\\:w-40{width:calc(var(--volr-spacing)*40)}.volr\\\\:w-44{width:calc(var(--volr-spacing)*44)}.volr\\\\:w-48{width:calc(var(--volr-spacing)*48)}.volr\\\\:w-\\\\[200px\\\\]{width:200px}.volr\\\\:w-auto{width:auto}.volr\\\\:w-full{width:100%}.volr\\\\:max-w-4xl{max-width:var(--volr-container-4xl)}.volr\\\\:max-w-full{max-width:100%}.volr\\\\:max-w-md{max-width:var(--volr-container-md)}.volr\\\\:max-w-none{max-width:none}.volr\\\\:min-w-0{min-width:calc(var(--volr-spacing)*0)}.volr\\\\:flex-1{flex:1}.volr\\\\:shrink-0{flex-shrink:0}.volr\\\\:-translate-y-1\\\\/2{--volr-tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--volr-tw-translate-x)var(--volr-tw-translate-y)}.volr\\\\:animate-\\\\[volrFadeIn_0\\\\.2s_ease-out\\\\]{animation:.2s ease-out volrFadeIn}.volr\\\\:animate-pulse{animation:var(--volr-animate-pulse)}.volr\\\\:animate-spin{animation:var(--volr-animate-spin)}.volr\\\\:list-inside{list-style-position:inside}.volr\\\\:list-decimal{list-style-type:decimal}.volr\\\\:grid-cols-\\\\[minmax\\\\(0\\\\,1\\\\.1fr\\\\)_minmax\\\\(0\\\\,1fr\\\\)\\\\]{grid-template-columns:minmax(0,1.1fr) minmax(0,1fr)}.volr\\\\:flex-col{flex-direction:column}.volr\\\\:items-baseline{align-items:baseline}.volr\\\\:items-center{align-items:center}.volr\\\\:items-end{align-items:flex-end}.volr\\\\:items-start{align-items:flex-start}.volr\\\\:justify-between{justify-content:space-between}.volr\\\\:justify-center{justify-content:center}.volr\\\\:gap-1{gap:calc(var(--volr-spacing)*1)}.volr\\\\:gap-2{gap:calc(var(--volr-spacing)*2)}.volr\\\\:gap-3{gap:calc(var(--volr-spacing)*3)}.volr\\\\:gap-4{gap:calc(var(--volr-spacing)*4)}:where(.volr\\\\:space-y-1>:not(:last-child)){--volr-tw-space-y-reverse:0;margin-block-start:calc(calc(var(--volr-spacing)*1)*var(--volr-tw-space-y-reverse));margin-block-end:calc(calc(var(--volr-spacing)*1)*calc(1 - var(--volr-tw-space-y-reverse)))}:where(.volr\\\\:space-y-2>:not(:last-child)){--volr-tw-space-y-reverse:0;margin-block-start:calc(calc(var(--volr-spacing)*2)*var(--volr-tw-space-y-reverse));margin-block-end:calc(calc(var(--volr-spacing)*2)*calc(1 - var(--volr-tw-space-y-reverse)))}:where(.volr\\\\:space-y-3>:not(:last-child)){--volr-tw-space-y-reverse:0;margin-block-start:calc(calc(var(--volr-spacing)*3)*var(--volr-tw-space-y-reverse));margin-block-end:calc(calc(var(--volr-spacing)*3)*calc(1 - var(--volr-tw-space-y-reverse)))}:where(.volr\\\\:space-y-4>:not(:last-child)){--volr-tw-space-y-reverse:0;margin-block-start:calc(calc(var(--volr-spacing)*4)*var(--volr-tw-space-y-reverse));margin-block-end:calc(calc(var(--volr-spacing)*4)*calc(1 - var(--volr-tw-space-y-reverse)))}.volr\\\\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.volr\\\\:overflow-hidden{overflow:hidden}.volr\\\\:overflow-visible{overflow:visible}.volr\\\\:overflow-y-auto{overflow-y:auto}.volr\\\\:rounded{border-radius:.25rem}.volr\\\\:rounded-2xl{border-radius:var(--volr-radius-2xl)}.volr\\\\:rounded-full{border-radius:3.40282e38px}.volr\\\\:rounded-lg{border-radius:var(--volr-radius-lg)}.volr\\\\:rounded-md{border-radius:var(--volr-radius-md)}.volr\\\\:rounded-xl{border-radius:var(--volr-radius-xl)}.volr\\\\:rounded-t-2xl{border-top-left-radius:var(--volr-radius-2xl);border-top-right-radius:var(--volr-radius-2xl)}.volr\\\\:rounded-t-3xl{border-top-left-radius:var(--volr-radius-3xl);border-top-right-radius:var(--volr-radius-3xl)}.volr\\\\:border{border-style:var(--volr-tw-border-style);border-width:1px}.volr\\\\:border-2{border-style:var(--volr-tw-border-style);border-width:2px}.volr\\\\:border-4{border-style:var(--volr-tw-border-style);border-width:4px}.volr\\\\:border-t{border-top-style:var(--volr-tw-border-style);border-top-width:1px}.volr\\\\:border-t-2{border-top-style:var(--volr-tw-border-style);border-top-width:2px}.volr\\\\:border-red-200{border-color:var(--volr-color-red-200)}.volr\\\\:border-slate-300{border-color:var(--volr-color-slate-300)}.volr\\\\:border-white{border-color:var(--volr-color-white)}.volr\\\\:border-t-slate-600{border-top-color:var(--volr-color-slate-600)}.volr\\\\:bg-black\\\\/45{background-color:var(--volr-color-black)}@supports (color:color-mix(in lab, red, red)){.volr\\\\:bg-black\\\\/45{background-color:color-mix(in oklab,var(--volr-color-black)45%,transparent)}}.volr\\\\:bg-cyan-400{background-color:var(--volr-color-cyan-400)}.volr\\\\:bg-emerald-300{background-color:var(--volr-color-emerald-300)}.volr\\\\:bg-emerald-400{background-color:var(--volr-color-emerald-400)}.volr\\\\:bg-red-50{background-color:var(--volr-color-red-50)}.volr\\\\:bg-slate-50{background-color:var(--volr-color-slate-50)}.volr\\\\:bg-slate-200{background-color:var(--volr-color-slate-200)}.volr\\\\:bg-teal-400{background-color:var(--volr-color-teal-400)}.volr\\\\:bg-white{background-color:var(--volr-color-white)}.volr\\\\:bg-linear-to-br{--volr-tw-gradient-position:to bottom right}@supports (background-image:linear-gradient(in lab, red, red)){.volr\\\\:bg-linear-to-br{--volr-tw-gradient-position:to bottom right in oklab}}.volr\\\\:bg-linear-to-br{background-image:linear-gradient(var(--volr-tw-gradient-stops))}.volr\\\\:from-emerald-400{--volr-tw-gradient-from:var(--volr-color-emerald-400);--volr-tw-gradient-stops:var(--volr-tw-gradient-via-stops,var(--volr-tw-gradient-position),var(--volr-tw-gradient-from)var(--volr-tw-gradient-from-position),var(--volr-tw-gradient-to)var(--volr-tw-gradient-to-position))}.volr\\\\:from-emerald-500{--volr-tw-gradient-from:var(--volr-color-emerald-500);--volr-tw-gradient-stops:var(--volr-tw-gradient-via-stops,var(--volr-tw-gradient-position),var(--volr-tw-gradient-from)var(--volr-tw-gradient-from-position),var(--volr-tw-gradient-to)var(--volr-tw-gradient-to-position))}.volr\\\\:to-teal-500{--volr-tw-gradient-to:var(--volr-color-teal-500);--volr-tw-gradient-stops:var(--volr-tw-gradient-via-stops,var(--volr-tw-gradient-position),var(--volr-tw-gradient-from)var(--volr-tw-gradient-from-position),var(--volr-tw-gradient-to)var(--volr-tw-gradient-to-position))}.volr\\\\:p-1{padding:calc(var(--volr-spacing)*1)}.volr\\\\:p-2{padding:calc(var(--volr-spacing)*2)}.volr\\\\:p-3{padding:calc(var(--volr-spacing)*3)}.volr\\\\:p-4{padding:calc(var(--volr-spacing)*4)}.volr\\\\:p-5{padding:calc(var(--volr-spacing)*5)}.volr\\\\:p-8{padding:calc(var(--volr-spacing)*8)}.volr\\\\:px-2{padding-inline:calc(var(--volr-spacing)*2)}.volr\\\\:px-3{padding-inline:calc(var(--volr-spacing)*3)}.volr\\\\:px-4{padding-inline:calc(var(--volr-spacing)*4)}.volr\\\\:py-0\\\\.5{padding-block:calc(var(--volr-spacing)*.5)}.volr\\\\:py-1\\\\.5{padding-block:calc(var(--volr-spacing)*1.5)}.volr\\\\:py-2\\\\.5{padding-block:calc(var(--volr-spacing)*2.5)}.volr\\\\:py-3{padding-block:calc(var(--volr-spacing)*3)}.volr\\\\:py-4{padding-block:calc(var(--volr-spacing)*4)}.volr\\\\:py-6{padding-block:calc(var(--volr-spacing)*6)}.volr\\\\:py-8{padding-block:calc(var(--volr-spacing)*8)}.volr\\\\:py-12{padding-block:calc(var(--volr-spacing)*12)}.volr\\\\:pt-2{padding-top:calc(var(--volr-spacing)*2)}.volr\\\\:pt-3{padding-top:calc(var(--volr-spacing)*3)}.volr\\\\:pt-4{padding-top:calc(var(--volr-spacing)*4)}.volr\\\\:pr-3{padding-right:calc(var(--volr-spacing)*3)}.volr\\\\:pb-2{padding-bottom:calc(var(--volr-spacing)*2)}.volr\\\\:pb-4{padding-bottom:calc(var(--volr-spacing)*4)}.volr\\\\:pl-11{padding-left:calc(var(--volr-spacing)*11)}.volr\\\\:text-center{text-align:center}.volr\\\\:text-left{text-align:left}.volr\\\\:align-baseline{vertical-align:baseline}.volr\\\\:font-mono{font-family:var(--volr-font-mono)}.volr\\\\:text-2xl{font-size:var(--volr-text-2xl);line-height:var(--volr-tw-leading,var(--volr-text-2xl--line-height))}.volr\\\\:text-8xl{font-size:var(--volr-text-8xl);line-height:var(--volr-tw-leading,var(--volr-text-8xl--line-height))}.volr\\\\:text-base{font-size:var(--volr-text-base);line-height:var(--volr-tw-leading,var(--volr-text-base--line-height))}.volr\\\\:text-lg{font-size:var(--volr-text-lg);line-height:var(--volr-tw-leading,var(--volr-text-lg--line-height))}.volr\\\\:text-sm{font-size:var(--volr-text-sm);line-height:var(--volr-tw-leading,var(--volr-text-sm--line-height))}.volr\\\\:text-xl{font-size:var(--volr-text-xl);line-height:var(--volr-tw-leading,var(--volr-text-xl--line-height))}.volr\\\\:text-xs{font-size:var(--volr-text-xs);line-height:var(--volr-tw-leading,var(--volr-text-xs--line-height))}.volr\\\\:leading-relaxed{--volr-tw-leading:var(--volr-leading-relaxed);line-height:var(--volr-leading-relaxed)}.volr\\\\:font-bold{--volr-tw-font-weight:var(--volr-font-weight-bold);font-weight:var(--volr-font-weight-bold)}.volr\\\\:font-medium{--volr-tw-font-weight:var(--volr-font-weight-medium);font-weight:var(--volr-font-weight-medium)}.volr\\\\:font-semibold{--volr-tw-font-weight:var(--volr-font-weight-semibold);font-weight:var(--volr-font-weight-semibold)}.volr\\\\:break-all{word-break:break-all}.volr\\\\:text-emerald-600{color:var(--volr-color-emerald-600)}.volr\\\\:text-gray-500{color:var(--volr-color-gray-500)}.volr\\\\:text-green-600{color:var(--volr-color-green-600)}.volr\\\\:text-red-700{color:var(--volr-color-red-700)}.volr\\\\:text-slate-500{color:var(--volr-color-slate-500)}.volr\\\\:text-slate-600{color:var(--volr-color-slate-600)}.volr\\\\:text-white{color:var(--volr-color-white)}.volr\\\\:capitalize{text-transform:capitalize}.volr\\\\:underline{text-decoration-line:underline}.volr\\\\:opacity-0{opacity:0}.volr\\\\:opacity-30{opacity:.3}.volr\\\\:shadow-2xl{--volr-tw-shadow:0 25px 50px -12px var(--volr-tw-shadow-color,#00000040);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow)}.volr\\\\:shadow-\\\\[0_-8px_30px_rgba\\\\(0\\\\,0\\\\,0\\\\,0\\\\.2\\\\)\\\\]{--volr-tw-shadow:0 -8px 30px var(--volr-tw-shadow-color,#0003);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow)}.volr\\\\:shadow-lg{--volr-tw-shadow:0 10px 15px -3px var(--volr-tw-shadow-color,#0000001a),0 4px 6px -4px var(--volr-tw-shadow-color,#0000001a);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow)}.volr\\\\:shadow-md{--volr-tw-shadow:0 4px 6px -1px var(--volr-tw-shadow-color,#0000001a),0 2px 4px -2px var(--volr-tw-shadow-color,#0000001a);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow)}.volr\\\\:shadow-sm{--volr-tw-shadow:0 1px 3px 0 var(--volr-tw-shadow-color,#0000001a),0 1px 2px -1px var(--volr-tw-shadow-color,#0000001a);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow)}.volr\\\\:shadow-xl{--volr-tw-shadow:0 20px 25px -5px var(--volr-tw-shadow-color,#0000001a),0 8px 10px -6px var(--volr-tw-shadow-color,#0000001a);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow)}.volr\\\\:shadow-emerald-500\\\\/50{--volr-tw-shadow-color:var(--volr-color-emerald-500)}@supports (color:color-mix(in lab, red, red)){.volr\\\\:shadow-emerald-500\\\\/50{--volr-tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--volr-color-emerald-500)50%,transparent)var(--volr-tw-shadow-alpha),transparent)}}.volr\\\\:blur-2xl{--volr-tw-blur:blur(var(--volr-blur-2xl));filter:var(--volr-tw-blur,)var(--volr-tw-brightness,)var(--volr-tw-contrast,)var(--volr-tw-grayscale,)var(--volr-tw-hue-rotate,)var(--volr-tw-invert,)var(--volr-tw-saturate,)var(--volr-tw-sepia,)var(--volr-tw-drop-shadow,)}.volr\\\\:transition-all{transition-property:all;transition-timing-function:var(--volr-tw-ease,var(--volr-default-transition-timing-function));transition-duration:var(--volr-tw-duration,var(--volr-default-transition-duration))}.volr\\\\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--volr-tw-gradient-from,--volr-tw-gradient-via,--volr-tw-gradient-to;transition-timing-function:var(--volr-tw-ease,var(--volr-default-transition-timing-function));transition-duration:var(--volr-tw-duration,var(--volr-default-transition-duration))}.volr\\\\:duration-300{--volr-tw-duration:.3s;transition-duration:.3s}.volr\\\\:duration-500{--volr-tw-duration:.5s;transition-duration:.5s}.volr\\\\:ease-out{--volr-tw-ease:var(--volr-ease-out);transition-timing-function:var(--volr-ease-out)}.volr\\\\:outline-none{--volr-tw-outline-style:none;outline-style:none}.volr\\\\:disabled\\\\:cursor-not-allowed:disabled{cursor:not-allowed}.volr-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.volr-text-secondary{color:var(--volr-text-secondary)}.volr-text-muted{color:var(--volr-text-muted)}.volr-bg-secondary{background-color:var(--volr-bg-secondary)}.volr-bg-tertiary{background-color:var(--volr-bg-tertiary)}.volr-border{border-color:var(--volr-border)}.volr-border-strong{border-color:var(--volr-border-strong)}.volr-divider-line{background-color:var(--volr-border)}.volr-error{background-color:var(--volr-error-bg);border-color:var(--volr-error-border);color:var(--volr-error-text)}.volr-hover:hover{background-color:var(--volr-hover-bg)}.volr-surface{background-color:var(--volr-bg)}}@property --volr-tw-translate-x{syntax:\\\"*\\\";inherits:false;initial-value:0}@property --volr-tw-translate-y{syntax:\\\"*\\\";inherits:false;initial-value:0}@property --volr-tw-translate-z{syntax:\\\"*\\\";inherits:false;initial-value:0}@property --volr-tw-space-y-reverse{syntax:\\\"*\\\";inherits:false;initial-value:0}@property --volr-tw-border-style{syntax:\\\"*\\\";inherits:false;initial-value:solid}@property --volr-tw-gradient-position{syntax:\\\"*\\\";inherits:false}@property --volr-tw-gradient-from{syntax:\\\"<color>\\\";inherits:false;initial-value:#0000}@property --volr-tw-gradient-via{syntax:\\\"<color>\\\";inherits:false;initial-value:#0000}@property --volr-tw-gradient-to{syntax:\\\"<color>\\\";inherits:false;initial-value:#0000}@property --volr-tw-gradient-stops{syntax:\\\"*\\\";inherits:false}@property --volr-tw-gradient-via-stops{syntax:\\\"*\\\";inherits:false}@property --volr-tw-gradient-from-position{syntax:\\\"<length-percentage>\\\";inherits:false;initial-value:0%}@property --volr-tw-gradient-via-position{syntax:\\\"<length-percentage>\\\";inherits:false;initial-value:50%}@property --volr-tw-gradient-to-position{syntax:\\\"<length-percentage>\\\";inherits:false;initial-value:100%}@property --volr-tw-leading{syntax:\\\"*\\\";inherits:false}@property --volr-tw-font-weight{syntax:\\\"*\\\";inherits:false}@property --volr-tw-shadow{syntax:\\\"*\\\";inherits:false;initial-value:0 0 #0000}@property --volr-tw-shadow-color{syntax:\\\"*\\\";inherits:false}@property --volr-tw-shadow-alpha{syntax:\\\"<percentage>\\\";inherits:false;initial-value:100%}@property --volr-tw-inset-shadow{syntax:\\\"*\\\";inherits:false;initial-value:0 0 #0000}@property --volr-tw-inset-shadow-color{syntax:\\\"*\\\";inherits:false}@property --volr-tw-inset-shadow-alpha{syntax:\\\"<percentage>\\\";inherits:false;initial-value:100%}@property --volr-tw-ring-color{syntax:\\\"*\\\";inherits:false}@property --volr-tw-ring-shadow{syntax:\\\"*\\\";inherits:false;initial-value:0 0 #0000}@property --volr-tw-inset-ring-color{syntax:\\\"*\\\";inherits:false}@property --volr-tw-inset-ring-shadow{syntax:\\\"*\\\";inherits:false;initial-value:0 0 #0000}@property --volr-tw-ring-inset{syntax:\\\"*\\\";inherits:false}@property --volr-tw-ring-offset-width{syntax:\\\"<length>\\\";inherits:false;initial-value:0}@property --volr-tw-ring-offset-color{syntax:\\\"*\\\";inherits:false;initial-value:#fff}@property --volr-tw-ring-offset-shadow{syntax:\\\"*\\\";inherits:false;initial-value:0 0 #0000}@property --volr-tw-blur{syntax:\\\"*\\\";inherits:false}@property --volr-tw-brightness{syntax:\\\"*\\\";inherits:false}@property --volr-tw-contrast{syntax:\\\"*\\\";inherits:false}@property --volr-tw-grayscale{syntax:\\\"*\\\";inherits:false}@property --volr-tw-hue-rotate{syntax:\\\"*\\\";inherits:false}@property --volr-tw-invert{syntax:\\\"*\\\";inherits:false}@property --volr-tw-opacity{syntax:\\\"*\\\";inherits:false}@property --volr-tw-saturate{syntax:\\\"*\\\";inherits:false}@property --volr-tw-sepia{syntax:\\\"*\\\";inherits:false}@property --volr-tw-drop-shadow{syntax:\\\"*\\\";inherits:false}@property --volr-tw-drop-shadow-color{syntax:\\\"*\\\";inherits:false}@property --volr-tw-drop-shadow-alpha{syntax:\\\"<percentage>\\\";inherits:false;initial-value:100%}@property --volr-tw-drop-shadow-size{syntax:\\\"*\\\";inherits:false}@property --volr-tw-duration{syntax:\\\"*\\\";inherits:false}@property --volr-tw-ease{syntax:\\\"*\\\";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}\";\n","import React, { useRef, useEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { VOLR_SDK_CSS } from '@/generated/volr-sdk-css';\nimport type { VolrTheme } from '@/providers/VolrUIProvider';\n\ninterface ShadowContainerProps {\n children: React.ReactNode;\n /** Theme mode for the SDK UI */\n theme?: VolrTheme;\n}\n\n/**\n * Custom hook to resolve 'system' theme to actual 'light' or 'dark'\n */\nfunction useResolvedTheme(theme: VolrTheme = 'light'): 'light' | 'dark' {\n const [resolvedTheme, setResolvedTheme] = useState<'light' | 'dark'>(() => {\n if (theme !== 'system') return theme;\n if (typeof window === 'undefined') return 'light';\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n });\n\n useEffect(() => {\n if (theme !== 'system') {\n setResolvedTheme(theme);\n return;\n }\n\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const handleChange = (e: MediaQueryListEvent) => {\n setResolvedTheme(e.matches ? 'dark' : 'light');\n };\n\n // Set initial value\n setResolvedTheme(mediaQuery.matches ? 'dark' : 'light');\n\n // Listen for changes\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n }, [theme]);\n\n return resolvedTheme;\n}\n\n/**\n * Shadow DOM 컨테이너 컴포넌트\n *\n * Shadow DOM을 사용하여 SDK의 UI를 호스트 앱의 CSS로부터 완전히 격리합니다.\n * - 호스트 앱의 Tailwind Preflight, CSS Reset 등이 SDK에 영향을 주지 않음\n * - SDK의 CSS가 호스트 앱에 영향을 주지 않음\n * - CSS 변수(--volr-*)는 Shadow 경계를 넘어 상속되므로 테마 커스터마이징 가능\n */\nexport function ShadowContainer({ children, theme = 'light' }: ShadowContainerProps) {\n const hostRef = useRef<HTMLDivElement | null>(null);\n const shadowRootRef = useRef<ShadowRoot | null>(null);\n const [mountNode, setMountNode] = useState<HTMLElement | null>(null);\n const resolvedTheme = useResolvedTheme(theme);\n\n useEffect(() => {\n if (!hostRef.current) return;\n\n // Shadow Root가 이미 있으면 재사용\n if (!shadowRootRef.current) {\n shadowRootRef.current = hostRef.current.attachShadow({ mode: 'open' });\n\n // SDK CSS를 Shadow Root에 주입\n const styleEl = document.createElement('style');\n styleEl.textContent = VOLR_SDK_CSS;\n shadowRootRef.current.appendChild(styleEl);\n\n // React 컴포넌트를 렌더링할 컨테이너 생성\n const container = document.createElement('div');\n container.setAttribute('data-volr-root', 'true');\n shadowRootRef.current.appendChild(container);\n\n setMountNode(container);\n }\n\n return () => {\n // cleanup은 React가 처리\n };\n }, []);\n\n // Apply theme to shadow host\n useEffect(() => {\n if (hostRef.current) {\n hostRef.current.setAttribute('data-theme', resolvedTheme);\n }\n }, [resolvedTheme]);\n\n return (\n <>\n <div ref={hostRef} id=\"volr-shadow-host\" />\n {mountNode && createPortal(children, mountNode)}\n </>\n );\n}\n\n/**\n * Shadow DOM을 document.body에 마운트하는 Portal 버전\n * 모달처럼 body 레벨에서 렌더링해야 하는 컴포넌트용\n */\nexport function ShadowPortal({ children, theme = 'light' }: ShadowContainerProps) {\n const [mountNode, setMountNode] = useState<HTMLElement | null>(null);\n const hostRef = useRef<HTMLDivElement | null>(null);\n const resolvedTheme = useResolvedTheme(theme);\n\n useEffect(() => {\n // Shadow Host를 body에 생성\n const host = document.createElement('div');\n host.id = 'volr-shadow-portal';\n host.style.position = 'fixed';\n host.style.top = '0';\n host.style.left = '0';\n host.style.width = '0';\n host.style.height = '0';\n host.style.zIndex = '9999';\n document.body.appendChild(host);\n hostRef.current = host;\n\n // Shadow Root 생성\n const shadowRoot = host.attachShadow({ mode: 'open' });\n\n // SDK CSS 주입\n const styleEl = document.createElement('style');\n styleEl.textContent = VOLR_SDK_CSS;\n shadowRoot.appendChild(styleEl);\n\n // 렌더링 컨테이너\n const container = document.createElement('div');\n container.setAttribute('data-volr-root', 'true');\n shadowRoot.appendChild(container);\n\n setMountNode(container);\n\n return () => {\n document.body.removeChild(host);\n hostRef.current = null;\n };\n }, []);\n\n // Apply theme to shadow host\n useEffect(() => {\n if (hostRef.current) {\n hostRef.current.setAttribute('data-theme', resolvedTheme);\n }\n }, [resolvedTheme]);\n\n if (!mountNode) return null;\n\n return createPortal(children, mountNode);\n}\n\n","import { useEffect, useRef, useCallback } from 'react';\n\n/**\n * Shadow DOM 내부에서 포커스 트래핑을 처리하는 훅\n *\n * 모달이 열려 있는 동안:\n * - Tab/Shift+Tab으로 포커스가 모달 밖으로 나가지 않도록 함\n * - 모달이 열릴 때 첫 번째 포커스 가능 요소로 포커스 이동\n * - 모달이 닫힐 때 이전 포커스 위치로 복원\n */\nexport function useFocusTrap(isActive: boolean, containerRef: React.RefObject<HTMLElement | null>) {\n const previousActiveElement = useRef<HTMLElement | null>(null);\n\n // 포커스 가능한 요소들의 셀렉터\n const focusableSelector = [\n 'button:not([disabled])',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'a[href]',\n '[tabindex]:not([tabindex=\"-1\"])',\n ].join(', ');\n\n // 컨테이너 내의 모든 포커스 가능 요소 가져오기\n const getFocusableElements = useCallback((): HTMLElement[] => {\n if (!containerRef.current) return [];\n return Array.from(\n containerRef.current.querySelectorAll<HTMLElement>(focusableSelector)\n ).filter((el) => {\n // 숨겨진 요소 제외\n return el.offsetParent !== null;\n });\n }, [containerRef, focusableSelector]);\n\n // Tab 키 핸들러\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (event.key !== 'Tab') return;\n\n const focusableElements = getFocusableElements();\n if (focusableElements.length === 0) return;\n\n const firstElement = focusableElements[0];\n const lastElement = focusableElements[focusableElements.length - 1];\n\n // Shift+Tab: 첫 번째 요소에서 마지막으로 이동\n if (event.shiftKey) {\n if (document.activeElement === firstElement) {\n event.preventDefault();\n lastElement.focus();\n }\n }\n // Tab: 마지막 요소에서 첫 번째로 이동\n else {\n if (document.activeElement === lastElement) {\n event.preventDefault();\n firstElement.focus();\n }\n }\n },\n [getFocusableElements]\n );\n\n useEffect(() => {\n if (!isActive) return;\n\n // 현재 포커스된 요소 저장\n previousActiveElement.current = document.activeElement as HTMLElement;\n\n // 첫 번째 포커스 가능 요소로 포커스 이동\n const focusableElements = getFocusableElements();\n if (focusableElements.length > 0) {\n // 약간의 딜레이를 주어 DOM이 완전히 렌더링된 후 포커스\n requestAnimationFrame(() => {\n focusableElements[0].focus();\n });\n }\n\n // Tab 키 이벤트 리스너 추가\n document.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n\n // 이전 포커스 위치로 복원\n if (previousActiveElement.current && previousActiveElement.current.focus) {\n previousActiveElement.current.focus();\n }\n };\n }, [isActive, getFocusableElements, handleKeyDown]);\n}\n\n/**\n * Shadow Root 내부에서 포커스 트래핑을 처리하는 훅\n * ShadowPortal과 함께 사용\n */\nexport function useShadowFocusTrap(\n isActive: boolean,\n shadowRootRef: React.RefObject<ShadowRoot | null>\n) {\n const previousActiveElement = useRef<HTMLElement | null>(null);\n\n const focusableSelector = [\n 'button:not([disabled])',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'a[href]',\n '[tabindex]:not([tabindex=\"-1\"])',\n ].join(', ');\n\n const getFocusableElements = useCallback((): HTMLElement[] => {\n if (!shadowRootRef.current) return [];\n return Array.from(\n shadowRootRef.current.querySelectorAll<HTMLElement>(focusableSelector)\n ).filter((el) => el.offsetParent !== null);\n }, [shadowRootRef, focusableSelector]);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (event.key !== 'Tab') return;\n\n const focusableElements = getFocusableElements();\n if (focusableElements.length === 0) return;\n\n const firstElement = focusableElements[0];\n const lastElement = focusableElements[focusableElements.length - 1];\n\n // Shadow DOM 내부의 activeElement 확인\n const activeElement = shadowRootRef.current?.activeElement;\n\n if (event.shiftKey) {\n if (activeElement === firstElement) {\n event.preventDefault();\n lastElement.focus();\n }\n } else {\n if (activeElement === lastElement) {\n event.preventDefault();\n firstElement.focus();\n }\n }\n },\n [getFocusableElements, shadowRootRef]\n );\n\n useEffect(() => {\n if (!isActive) return;\n\n previousActiveElement.current = document.activeElement as HTMLElement;\n\n const focusableElements = getFocusableElements();\n if (focusableElements.length > 0) {\n requestAnimationFrame(() => {\n focusableElements[0].focus();\n });\n }\n\n document.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n\n if (previousActiveElement.current?.focus) {\n previousActiveElement.current.focus();\n }\n };\n }, [isActive, getFocusableElements, handleKeyDown]);\n}\n\n","import React, { useRef, useEffect, useId } from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { useMediaQuery } from \"@/hooks/useMediaQuery\";\nimport { ShadowPortal } from \"@/components/core/ShadowContainer\";\nimport { useFocusTrap } from \"@/hooks/useFocusTrap\";\nimport { useVolrUIOptional } from \"@/providers/VolrUIProvider\";\n\ninterface ModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n className?: string;\n children: React.ReactNode;\n onPointerDownOutside?: (e: React.PointerEvent) => void;\n onEscapeKeyDown?: (e: KeyboardEvent) => void;\n variant?: \"centered\" | \"bottom-sheet\";\n contentClassName?: string;\n /** 접근성을 위한 모달 제목 (aria-label) */\n ariaLabel?: string;\n}\n\nexport const Modal = ({\n open,\n onOpenChange,\n children,\n className,\n onPointerDownOutside,\n onEscapeKeyDown,\n variant: explicitVariant,\n contentClassName,\n ariaLabel = \"Dialog\",\n}: ModalProps) => {\n const isMobile = useMediaQuery(\"(max-width: 500px)\");\n const variant = explicitVariant ?? (isMobile ? \"bottom-sheet\" : \"centered\");\n const dialogRef = useRef<HTMLDivElement>(null);\n const dialogId = useId();\n const uiContext = useVolrUIOptional();\n const theme = uiContext?.theme ?? \"light\";\n\n // 포커스 트래핑\n useFocusTrap(open, dialogRef);\n\n // ESC 키로 닫기\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\" && open) {\n if (onEscapeKeyDown) {\n onEscapeKeyDown(e);\n } else {\n onOpenChange(false);\n }\n }\n };\n\n if (open) {\n document.addEventListener(\"keydown\", handleEscape);\n }\n\n return () => document.removeEventListener(\"keydown\", handleEscape);\n }, [open, onOpenChange, onEscapeKeyDown]);\n\n if (!open) return null;\n\n const isBottomSheet = variant === \"bottom-sheet\";\n \n // Check if contentClassName contains custom max-width\n const hasCustomMaxWidth = contentClassName?.includes(\"max-w-\");\n\n return (\n <ShadowPortal theme={theme}>\n {/* Backdrop */}\n <div\n className=\"volr:fixed volr:inset-0 volr:z-40 volr:bg-black/45\"\n aria-hidden=\"true\"\n onClick={(e) => {\n if (onPointerDownOutside) {\n onPointerDownOutside(e as unknown as React.PointerEvent);\n } else {\n onOpenChange(false);\n }\n }}\n />\n\n {/* Modal Content */}\n <div\n className={cn(\n \"volr:fixed volr:inset-0 volr:z-50 volr:flex volr:items-center volr:justify-center volr:pointer-events-none\",\n isBottomSheet && \"volr:items-end\"\n )}\n >\n <div\n ref={dialogRef}\n id={dialogId}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={ariaLabel}\n tabIndex={-1}\n className={cn(\n \"volr:border volr:shadow-xl volr:overflow-y-auto volr:relative volr:w-full volr:pointer-events-auto volr-surface volr-border-strong\",\n isBottomSheet\n ? \"volr:max-w-full volr:max-h-[85vh] volr:rounded-t-3xl volr:px-4 volr:py-6 volr:shadow-2xl\"\n : cn(\n \"volr:rounded-2xl volr:p-5 volr:w-full volr:max-h-[90vh]\",\n !hasCustomMaxWidth && \"volr:max-w-md\"\n ),\n className,\n contentClassName\n )}\n onClick={(e) => e.stopPropagation()}\n >\n {children}\n </div>\n </div>\n </ShadowPortal>\n );\n};\n\n","interface IconProps {\n className?: string;\n size?: number;\n}\n\nexport function ErrorIcon({ className, size = 16 }: IconProps) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\" />\n </svg>\n );\n}\n\n","interface IconProps {\n className?: string;\n size?: number;\n}\n\nexport function CloseIcon({ className, size = 20 }: IconProps) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n );\n}\n\n","interface IconProps {\n className?: string;\n size?: number;\n}\n\nexport function BackIcon({ className, size = 20 }: IconProps) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n className={className}\n >\n <path d=\"M19 12H5M12 19l-7-7 7-7\" />\n </svg>\n );\n}\n\n","interface IconProps {\n className?: string;\n size?: number;\n}\n\nexport function EmailIcon({ className, size = 20 }: IconProps) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M3 8L10.89 13.26C11.2187 13.4793 11.6049 13.5963 12 13.5963C12.3951 13.5963 12.7813 13.4793 13.11 13.26L21 8\" />\n <rect x=\"3\" y=\"6\" width=\"18\" height=\"12\" rx=\"2.2\" />\n </svg>\n );\n}\n\n","import { cn } from \"@/lib/utils\";\nimport { useI18n } from \"@/i18n/context\";\nimport { BackIcon, CloseIcon } from \"@/components/materials/icons\";\n\nexport interface ModalHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n back?: boolean;\n onBack?: () => void;\n onClose?: () => void;\n}\n\nexport const ModalHeader: React.FC<ModalHeaderProps> = ({\n className,\n back = false,\n onBack,\n onClose,\n children,\n ...props\n}) => {\n const { t } = useI18n();\n\n return (\n <div\n className={cn(\n \"volr:flex volr:items-center volr:justify-between volr:mb-3\",\n className\n )}\n {...props}\n >\n <div className=\"volr:flex volr:items-center volr:gap-4 volr:flex-1\">\n {back && onBack && (\n <button\n onClick={onBack}\n className=\"volr:p-2 volr:-ml-2 volr:rounded-lg volr:transition-colors volr:flex volr:items-center volr:gap-1 volr-text-secondary volr-hover\"\n type=\"button\"\n >\n <BackIcon />\n <span className=\"volr:text-sm volr:font-medium\">{t(\"common.back\")}</span>\n </button>\n )}\n {children}\n </div>\n {onClose && (\n <button\n type=\"button\"\n onClick={onClose}\n className=\"volr:p-1 volr:rounded-lg volr:transition-colors volr-text-muted volr-hover\"\n aria-label=\"Close\"\n >\n <CloseIcon />\n </button>\n )}\n </div>\n );\n};\n\n","/**\n * Biometric detection and error handling utilities\n */\n\nexport type BiometricType = 'faceId' | 'touchId' | 'fingerprint';\n\n/**\n * Detect biometric type based on device\n */\nexport function getBiometricType(): BiometricType {\n const ua = navigator.userAgent;\n \n // iPhone/iPad는 Face ID\n if (/iPhone|iPad|iPod/.test(ua)) {\n return 'faceId';\n }\n \n // Mac (MacBook, iMac 등)은 Touch ID\n if (/Macintosh|MacIntel/.test(ua)) {\n return 'touchId';\n }\n \n // Android, Windows, Linux 등은 지문\n return 'fingerprint';\n}\n\n/**\n * Convert technical WebAuthn errors to user-friendly messages\n */\nexport function getUserFriendlyError(error: Error, t: (key: string) => string): string {\n const msg = error.message.toLowerCase();\n \n if (msg.includes('timed out') || msg.includes('not allowed') || msg.includes('cancelled')) {\n return t('passkey.errors.cancelled');\n }\n if (msg.includes('already registered') || msg.includes('already exists')) {\n return t('passkey.errors.alreadyExists');\n }\n if (msg.includes('not supported')) {\n return t('passkey.errors.notSupported');\n }\n \n return t('passkey.errors.generic');\n}\n\n","/**\n * Wallet Connected View Component\n * 이미 패스키가 설정된 경우 표시되는 화면\n */\n\nimport type { VolrUser } from '@volr/react';\nimport { ModalHeader } from \"@/components/materials/modal\";\n\ninterface WalletConnectedViewProps {\n user: VolrUser;\n onClose?: () => void;\n /** Whether to show the header with close button */\n showHeader?: boolean;\n}\n\nexport function WalletConnectedView({ user, onClose, showHeader = true }: WalletConnectedViewProps) {\n return (\n <div>\n {showHeader && onClose && (\n <ModalHeader onClose={onClose} />\n )}\n \n <div className=\"\">\n <p className=\"volr:text-xl volr:font-semibold volr:mb-5\">\n Wallet Connected\n </p>\n\n {user.evmAddress ? (\n <div className=\"volr:rounded-lg volr:p-5 volr:mb-6 volr:text-left volr-bg-secondary\">\n <div className=\"volr:mb-3\">\n <div className=\"volr:text-xs volr:mb-1 volr:font-medium volr-text-secondary\">\n Wallet Address\n </div>\n <div className=\"volr:text-sm volr:font-mono volr:break-all\">\n {user.evmAddress}\n </div>\n </div>\n\n <div>\n <div className=\"volr:text-xs volr:mb-1 volr:font-medium volr-text-secondary\">\n Key Storage Type\n </div>\n <div className=\"volr:text-sm volr:capitalize\">\n {user.keyStorageType}\n </div>\n </div>\n </div>\n ) : (\n <div className=\"volr:rounded-lg volr:p-5 volr:mb-6 volr:text-left volr-bg-secondary\">\n <div className=\"volr:text-sm volr:mb-2 volr-text-secondary\">\n Passkey is set up\n </div>\n <div className=\"volr:text-xs volr-text-muted\">\n Wallet address will be available after provider is restored.\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n","interface FaceIdIconProps {\n size: number;\n}\n\nexport function FaceIdIcon({ size }: FaceIdIconProps) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7.5,3 C7.77614237,3 8,3.22385763 8,3.5 C8,3.77614237 7.77614237,4 7.5,4 L5.5,4 C4.67157288,4 4,4.67157288 4,5.5 L4,7.53112887 C4,7.80727125 3.77614237,8.03112887 3.5,8.03112887 C3.22385763,8.03112887 3,7.80727125 3,7.53112887 L3,5.5 C3,4.11928813 4.11928813,3 5.5,3 L7.5,3 Z M16.5,4 C16.2238576,4 16,3.77614237 16,3.5 C16,3.22385763 16.2238576,3 16.5,3 L18.5,3 C19.8807119,3 21,4.11928813 21,5.5 L21,7.5 C21,7.77614237 20.7761424,8 20.5,8 C20.2238576,8 20,7.77614237 20,7.5 L20,5.5 C20,4.67157288 19.3284271,4 18.5,4 L16.5,4 Z M20,16.5 C20,16.2238576 20.2238576,16 20.5,16 C20.7761424,16 21,16.2238576 21,16.5 L21,18.5 C21,19.8807119 19.8807119,21 18.5,21 L16.5,21 C16.2238576,21 16,20.7761424 16,20.5 C16,20.2238576 16.2238576,20 16.5,20 L18.5,20 C19.3284271,20 20,19.3284271 20,18.5 L20,16.5 Z M3,16.5 C3,16.2238576 3.22385763,16 3.5,16 C3.77614237,16 4,16.2238576 4,16.5 L4,18.5 C4,19.3284271 4.67157288,20 5.5,20 L7.5,20 C7.77614237,20 8,20.2238576 8,20.5 C8,20.7761424 7.77614237,21 7.5,21 L5.5,21 C4.11928813,21 3,19.8807119 3,18.5 L3,16.5 Z M8,8.5 C8,8.22385763 8.22385763,8 8.5,8 C8.77614237,8 9,8.22385763 9,8.5 L9,9.5 C9,9.77614237 8.77614237,10 8.5,10 C8.22385763,10 8,9.77614237 8,9.5 L8,8.5 Z M16,8.5 C16,8.22385763 16.2238576,8 16.5,8 C16.7761424,8 17,8.22385763 17,8.5 L17,9.5 C17,9.77614237 16.7761424,10 16.5,10 C16.2238576,10 16,9.77614237 16,9.5 L16,8.5 Z M12,8.5 C12,8.22385763 12.2238576,8 12.5,8 C12.7761424,8 13,8.22385763 13,8.5 L13,12.5 C13,13.3284271 12.3284271,14 11.5,14 C11.2238576,14 11,13.7761424 11,13.5 C11,13.2238576 11.2238576,13 11.5,13 C11.7761424,13 12,12.7761424 12,12.5 L12,8.5 Z M8.1,15.8 C7.93431458,15.5790861 7.9790861,15.2656854 8.2,15.1 C8.4209139,14.9343146 8.73431458,14.9790861 8.9,15.2 C9.81096778,16.4146237 10.8353763,17 12,17 C13.1646237,17 14.1890322,16.4146237 15.1,15.2 C15.2656854,14.9790861 15.5790861,14.9343146 15.8,15.1 C16.0209139,15.2656854 16.0656854,15.5790861 15.9,15.8 C14.8109678,17.252043 13.502043,18 12,18 C10.497957,18 9.18903222,17.252043 8.1,15.8 Z\"\n fill=\"#3b82f6\"\n />\n </svg>\n );\n}\n","interface TouchIdIconProps {\n size: number;\n}\n\nexport function TouchIdIcon({ size }: TouchIdIconProps) {\n const fill = \"#f87171\"; // red-400, softer than #ef4444\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M18.4558 14.6734C18.4921 15.5205 18.3742 16.4404 18.2653 17.3604C18.2562 17.4514 18.238 17.5425 18.2108 17.6245C18.1564 17.8613 18.0384 18.0708 17.7571 18.0252C17.4759 17.9706 17.4123 17.7429 17.4577 17.497C17.5484 16.8958 17.5938 16.2947 17.6483 15.6936C17.8025 13.9539 17.6483 12.2325 17.2218 10.5474C16.5322 7.84233 13.801 6.12999 11.0879 6.62183C8.28416 7.13189 6.33331 9.63663 6.58737 12.4419C6.65996 13.2435 6.88681 14.0268 6.83237 14.8374C6.82329 15.0013 6.82329 15.1744 6.787 15.3383C6.74163 15.5569 6.63274 15.7573 6.3696 15.73C6.08832 15.7027 5.98851 15.4841 6.01573 15.2382C6.05202 14.8465 6.07925 14.4548 6.0248 14.0632C5.8887 13.0158 5.68908 11.9683 5.8887 10.9027C6.4422 7.96073 9.00099 5.77477 11.9681 5.75656C14.8898 5.73834 17.5121 7.89698 18.0838 10.8025C18.3288 12.0503 18.483 13.3163 18.4558 14.6734Z\"\n fill={fill}\n />\n <path\n d=\"M21.0963 11.112C21.1053 11.4399 21.1235 11.7132 20.7877 11.7496C20.4702 11.786 20.3885 11.531 20.3431 11.276C20.1344 9.84601 19.7443 8.47978 18.8913 7.29572C16.7772 4.35379 13.9099 3.19705 10.3802 3.78908C7.16809 4.32646 4.55485 6.95872 3.8471 10.183C3.78359 10.4745 3.79266 10.9208 3.3299 10.8206C2.83992 10.7204 3.03047 10.3014 3.10306 9.99174C3.99228 6.10255 7.24975 3.26992 11.1242 2.88737C15.7337 2.43197 20.1617 5.63804 20.9874 10.5018C21.0327 10.7386 21.069 10.9663 21.0963 11.112Z\"\n fill={fill}\n />\n <path\n d=\"M12.1405 2.22257C7.19532 2.04952 2.73105 5.82029 2.23199 11.2123C2.14126 12.2051 2.27736 13.1797 2.43161 14.1543C2.58587 15.0924 2.30458 15.9212 1.72386 16.659C1.56054 16.8685 1.35184 17.078 1.07963 16.8503C0.798344 16.6226 0.961671 16.3858 1.13407 16.1763C1.68757 15.5023 1.76016 14.7281 1.61498 13.8992C0.607796 7.85141 4.50042 2.44117 10.5617 1.50303C11.4418 1.3664 12.3401 1.32997 13.2293 1.4757C13.4834 1.52124 13.7375 1.585 13.7193 1.90378C13.6921 2.259 13.4199 2.24989 13.1477 2.24079C12.812 2.21346 12.4762 2.22257 12.1405 2.22257Z\"\n fill={fill}\n />\n <path\n d=\"M14.1094 14.6278C14.064 17.9432 13.075 20.9398 11.0969 23.6085C10.9335 23.8271 10.7521 24.1003 10.4345 23.8726C10.1351 23.654 10.2802 23.399 10.4526 23.1622C11.9498 21.1402 12.8844 18.8813 13.2111 16.3766C13.4107 14.8373 13.3472 13.3254 13.0477 11.8134C12.9207 11.1667 12.3581 10.8297 11.723 10.9664C11.1876 11.0848 10.8519 11.6221 10.9698 12.2324C11.2511 13.7261 11.2874 15.2108 11.0152 16.7045C10.9608 17.0051 10.9608 17.4423 10.5162 17.3785C10.0625 17.3147 10.1986 16.914 10.253 16.6043C10.4889 15.229 10.498 13.8627 10.2258 12.4965C9.98988 11.3034 10.6069 10.3834 11.7502 10.1739C12.7392 9.99178 13.6466 10.7022 13.8553 11.8316C13.9188 12.1777 13.9823 12.5147 14.0095 12.8609C14.0549 13.4438 14.1457 14.0358 14.1094 14.6278Z\"\n fill={fill}\n />\n <path\n d=\"M22.8111 14.6825C22.8564 15.484 22.7748 16.3402 22.684 17.1963C22.6568 17.4787 22.6477 17.8885 22.2122 17.8248C21.7948 17.761 21.8765 17.3876 21.9128 17.087C22.2122 14.5732 22.1033 12.0775 21.4863 9.63656C20.6424 6.25743 18.5192 3.98039 15.2799 2.73257C15.2073 2.70525 15.1347 2.68703 15.0621 2.65971C14.8443 2.56863 14.6719 2.432 14.7536 2.17698C14.8443 1.90373 15.0712 1.87641 15.3162 1.94927C15.9423 2.14054 16.5411 2.39557 17.1037 2.72347C20.2704 4.55421 22.0307 7.33219 22.5388 10.939C22.7112 12.1595 22.8473 13.38 22.8111 14.6825Z\"\n fill={fill}\n />\n <path\n d=\"M11.8227 7.21389C12.0042 7.21389 12.0677 7.20478 12.1221 7.21389C12.3853 7.24121 12.6847 7.28675 12.6938 7.61465C12.7029 7.97897 12.3944 8.02451 12.104 8.02451C10.5796 7.99719 9.41817 8.63476 8.61061 9.91901C8.07526 10.7752 7.90286 11.7133 8.09341 12.7152C8.70135 16.0033 7.81212 18.8359 5.4711 21.204C5.38944 21.286 5.2987 21.3771 5.19889 21.4499C4.99927 21.6139 4.7815 21.6685 4.60002 21.4499C4.42762 21.2496 4.51836 21.0492 4.68169 20.8852C5.17167 20.4116 5.6435 19.9198 6.0246 19.3551C7.28585 17.4697 7.81212 15.4021 7.35844 13.1706C6.7505 10.1103 8.80116 7.3414 11.8227 7.21389Z\"\n fill={fill}\n />\n <path\n d=\"M17.0128 14.3092C17.0037 17.7065 16.2415 20.6303 14.7171 23.3627C14.6899 23.4173 14.6627 23.472 14.6264 23.5175C14.4812 23.7543 14.2907 23.9001 14.0275 23.7361C13.7825 23.5904 13.8279 23.3536 13.9549 23.135C14.2635 22.5976 14.5357 22.042 14.7897 21.4682C15.7969 19.2003 16.2597 16.823 16.2415 14.3456C16.2324 13.2435 16.1145 12.1323 15.8604 11.0576C15.6517 10.1377 15.1618 9.39078 14.4086 8.81697C14.2544 8.69856 14.082 8.58926 13.9368 8.47086C13.7825 8.34334 13.6918 8.18851 13.8098 7.99723C13.9277 7.79686 14.1092 7.75131 14.3179 7.8515C14.826 8.10653 15.2434 8.46175 15.6154 8.89894C16.3504 9.76422 16.668 10.7934 16.8132 11.8955C16.9221 12.7881 17.04 13.6716 17.0128 14.3092Z\"\n fill={fill}\n />\n <path\n d=\"M12.0223 0.0183811C13.7554 -0.100025 15.3796 0.309842 16.9493 1.01117C16.9947 1.02939 17.031 1.0476 17.0763 1.06582C17.3395 1.17512 17.5572 1.32996 17.4302 1.64874C17.2941 1.97664 17.0219 1.88555 16.7769 1.76715C15.924 1.36639 15.0348 1.0476 14.1092 0.910981C9.6994 0.218761 6.03362 1.56677 3.16632 5.02787C2.97577 5.26468 2.80337 5.67455 2.42227 5.39219C2.01396 5.09163 2.37691 4.79106 2.56745 4.54514C4.62719 1.96753 7.30394 0.464681 10.5705 0.0274892C11.0423 -0.0362679 11.5323 0.0183811 12.0223 0.0183811Z\"\n fill={fill}\n />\n <path\n d=\"M19.9166 14.3454C19.9257 16.9595 19.5264 19.2456 18.7461 21.468C18.6916 21.6137 18.6372 21.7504 18.5827 21.8961C18.492 22.1329 18.3378 22.306 18.0655 22.2058C17.8024 22.1056 17.7752 21.887 17.8659 21.6411C17.9839 21.2949 18.1018 20.9579 18.2107 20.6027C18.8822 18.5078 19.2179 16.3492 19.1362 14.145C19.0637 12.287 18.9638 10.4107 18.0565 8.70747C17.9204 8.45244 17.757 8.21563 17.6119 7.9606C17.4939 7.75112 17.4757 7.54163 17.6844 7.3959C17.9113 7.23195 18.0837 7.35946 18.2289 7.54163C18.9003 8.43423 19.2996 9.44523 19.5173 10.52C19.7805 11.8771 19.9438 13.2251 19.9166 14.3454Z\"\n fill={fill}\n />\n <path\n d=\"M4.61846 14.4365C4.57309 14.136 4.50958 13.6714 4.44606 13.2069C4.06496 10.4471 4.90882 8.12457 6.94133 6.23007C7.01392 6.15721 7.10466 6.09345 7.18632 6.02969C7.35872 5.9204 7.53112 5.92039 7.6763 6.07523C7.83056 6.23007 7.80334 6.41224 7.6763 6.56707C7.55835 6.7037 7.42224 6.83121 7.29521 6.95873C5.48954 8.74392 4.80901 10.8843 5.26269 13.3891C5.64379 15.4931 5.07215 17.3238 3.66572 18.8995C3.48425 19.0999 3.26648 19.273 3.04871 19.4369C2.88538 19.5553 2.70391 19.5644 2.55873 19.4005C2.40447 19.2183 2.44077 19.0361 2.59502 18.8722C2.73113 18.7265 2.87631 18.599 3.01241 18.4532C4.05589 17.3785 4.57309 16.0942 4.61846 14.4365Z\"\n fill={fill}\n />\n <path\n d=\"M12.6577 14.6552C12.5942 17.8886 11.5688 20.7668 9.50003 23.2715C9.45466 23.3262 9.40929 23.3899 9.35485 23.4446C9.18245 23.6358 8.97376 23.7269 8.76506 23.5448C8.56544 23.3808 8.61081 23.1622 8.75599 22.971C9.00098 22.6431 9.26412 22.3334 9.50003 21.9964C11.0335 19.856 11.7957 17.4514 11.8955 14.8192C11.9227 13.9994 11.8138 13.1888 11.6868 12.3782C11.6687 12.2871 11.6505 12.196 11.6414 12.1049C11.6233 11.8681 11.6868 11.6677 11.9499 11.6313C12.2131 11.5858 12.3401 11.7497 12.3855 11.9865C12.567 12.87 12.6668 13.7626 12.6577 14.6552Z\"\n fill={fill}\n />\n <path\n d=\"M23.9998 11.5857C23.9998 11.7679 23.9998 11.95 23.9998 12.1322C23.9998 12.369 23.9363 12.5694 23.655 12.5785C23.3737 12.5876 23.2648 12.3872 23.2467 12.1322C23.2285 11.6768 23.2195 11.2214 23.165 10.7751C22.7839 7.55078 21.2868 4.95495 18.7371 2.96937C18.5102 2.78721 18.1382 2.61415 18.3923 2.25894C18.6373 1.92193 18.9367 2.17696 19.1726 2.35913C22.2214 4.6726 23.773 7.77848 23.9998 11.5857Z\"\n fill={fill}\n />\n <path\n d=\"M15.5522 14.0449C15.5522 14.1815 15.5522 14.3181 15.5522 14.4547C15.5431 14.7007 15.4615 14.9284 15.1711 14.9284C14.8807 14.9284 14.8082 14.7098 14.7991 14.4547C14.7537 13.5348 14.6811 12.6149 14.5178 11.7041C14.1821 9.86423 12.3583 8.92609 10.7794 9.79137C10.2532 10.0828 9.85391 10.52 9.64521 11.1029C9.61799 11.1758 9.59077 11.2487 9.57262 11.3215C9.49096 11.5766 9.39115 11.8498 9.05542 11.7496C8.69247 11.6403 8.76506 11.3306 8.84673 11.0665C9.20967 9.95532 9.9265 9.17201 11.0516 8.84412C12.9662 8.27941 14.8082 9.40883 15.2437 11.3944C15.4342 12.2597 15.5068 13.1523 15.5522 14.0449Z\"\n fill={fill}\n />\n <path\n d=\"M9.73564 14.6279C9.69934 17.497 8.67401 19.9653 6.70502 22.0511C6.6415 22.1149 6.57799 22.1786 6.51447 22.2424C6.32392 22.4245 6.09708 22.5338 5.87931 22.3152C5.64339 22.0875 5.7795 21.8689 5.97005 21.6868C6.62335 21.0492 7.17685 20.3388 7.63961 19.5464C8.65587 17.7794 9.11863 15.8849 8.93715 13.8355C8.92808 13.6807 8.919 13.535 8.919 13.3801C8.90993 13.1342 8.97345 12.8974 9.25473 12.8792C9.54509 12.8519 9.63583 13.0705 9.67212 13.3164C9.69934 13.4985 9.73564 13.6716 9.74471 13.8538C9.74471 14.1088 9.73564 14.3638 9.73564 14.6279Z\"\n fill={fill}\n />\n <path\n d=\"M0.00881775 12.0866C-0.0274771 10.1648 0.389914 8.4616 1.15211 6.83124C1.20655 6.70372 1.27007 6.58532 1.35173 6.47602C1.46061 6.33029 1.61487 6.25742 1.78727 6.3485C1.97782 6.43959 2.05041 6.60353 1.97782 6.80391C1.88708 7.05894 1.76912 7.30486 1.66024 7.55989C0.743789 9.72763 0.516946 11.9682 0.997854 14.2817C1.06137 14.5823 1.28821 15.0013 0.798232 15.1197C0.308251 15.2381 0.308251 14.7644 0.244735 14.4639C0.0814075 13.6441 -0.0365509 12.8153 0.00881775 12.0866Z\"\n fill={fill}\n />\n <path\n d=\"M11.9136 4.29004C13.6648 4.3538 15.171 4.80921 16.5049 5.78378C16.5502 5.82021 16.6047 5.85665 16.65 5.89308C16.8497 6.07524 17.1309 6.25741 16.886 6.56708C16.65 6.87676 16.4051 6.66727 16.1782 6.50333C14.0731 4.95494 11.7956 4.69991 9.36385 5.61073C9.3094 5.62894 9.25496 5.65627 9.19145 5.67448C8.97368 5.75646 8.75591 5.75646 8.64702 5.51965C8.51999 5.25551 8.67424 5.08245 8.90109 4.97316C9.58162 4.65437 10.2894 4.47221 11.0243 4.37202C11.3601 4.33559 11.6867 4.31737 11.9136 4.29004Z\"\n fill={fill}\n />\n <path\n d=\"M15.4521 16.5042C15.2797 17.9068 14.9531 19.2457 14.454 20.5391C14.0457 21.5865 13.5467 22.5884 12.9206 23.5266C12.8571 23.6268 12.7935 23.7361 12.7119 23.8271C12.5486 24.0184 12.3399 24.0548 12.1493 23.9273C11.9406 23.7907 11.9769 23.5903 12.0858 23.3991C12.2763 23.0712 12.4941 22.7615 12.6847 22.4336C13.71 20.6484 14.3724 18.7448 14.6355 16.6954C14.6446 16.5861 14.6718 16.486 14.699 16.3858C14.7535 16.1672 14.8896 16.0306 15.1255 16.0579C15.3705 16.0943 15.4521 16.2856 15.4521 16.5042Z\"\n fill={fill}\n />\n <path\n d=\"M21.3501 14.7098C21.3773 16.4676 21.1414 18.1891 20.7331 19.8923C20.7149 19.947 20.7059 20.0107 20.6877 20.0654C20.6061 20.3295 20.5425 20.6574 20.1705 20.5572C19.8166 20.4661 19.8529 20.1655 19.9255 19.8832C20.1161 19.1454 20.2703 18.4077 20.3611 17.6517C20.5425 16.2673 20.6786 14.8828 20.5425 13.4802C20.5153 13.1978 20.5516 12.9246 20.8783 12.879C21.2503 12.8335 21.3229 13.134 21.332 13.4255C21.3592 13.8536 21.3501 14.2817 21.3501 14.7098Z\"\n fill={fill}\n />\n <path\n d=\"M3.94694 14.5094C3.8925 16.0031 3.3753 17.1872 2.34089 18.1435C2.16849 18.2984 1.97794 18.3894 1.77832 18.2073C1.56963 18.016 1.59685 17.7792 1.7874 17.6061C3.15753 16.3583 3.34808 14.8099 2.96698 13.0976C2.91254 12.8517 2.92161 12.5875 2.92161 12.3325C2.93069 12.1321 3.04864 11.9773 3.25734 11.9773C3.46604 11.9682 3.61122 12.0957 3.63844 12.2961C3.7564 13.0612 3.85621 13.8263 3.94694 14.5094Z\"\n fill={fill}\n />\n <path\n d=\"M10.3619 18.9908C10.2711 19.2002 10.1532 19.4735 10.0262 19.7467C9.48173 20.9035 8.78305 21.96 7.89382 22.8799C7.70328 23.0712 7.49458 23.2534 7.24052 23.0075C7.0046 22.7798 7.14978 22.5612 7.32218 22.379C8.30214 21.3316 9.05526 20.1384 9.60876 18.8086C9.6995 18.59 9.8356 18.3987 10.1169 18.4807C10.3256 18.5445 10.3891 18.7084 10.3619 18.9908Z\"\n fill={fill}\n />\n <path\n d=\"M6.33312 17.2874C6.3059 17.3785 6.26054 17.506 6.21517 17.6244C5.75241 18.7174 5.05373 19.6282 4.17358 20.4115C3.96488 20.6028 3.71989 20.7121 3.50212 20.448C3.29343 20.202 3.46583 19.9835 3.65638 19.8286C4.50023 19.1091 5.11725 18.2256 5.54371 17.2055C5.64352 16.9778 5.77055 16.8047 6.05184 16.8594C6.23331 16.914 6.32405 17.0506 6.33312 17.2874Z\"\n fill={fill}\n />\n <path\n d=\"M17.8026 19.5554C17.7753 19.6647 17.7572 19.7831 17.7209 19.9015C17.4215 20.9216 17.0676 21.9144 16.5957 22.8708C16.4778 23.1167 16.3145 23.3444 16.006 23.1987C15.7156 23.062 15.7882 22.7979 15.8971 22.5702C16.3508 21.5774 16.7409 20.5573 17.0313 19.5099C17.0948 19.2639 17.2218 19.0909 17.5122 19.1455C17.7209 19.1911 17.8026 19.3459 17.8026 19.5554Z\"\n fill={fill}\n />\n </svg>\n );\n}\n","/**\n * Android/범용 지문 아이콘\n * 연한 빨강 (#f87171) - TouchIdIcon과 통일\n */\n\ninterface FingerprintIconProps {\n size: number;\n}\n\nexport function FingerprintIcon({ size }: FingerprintIconProps) {\n const fill = \"#f87171\"; // red-400, consistent with TouchIdIcon\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M17.81 4.47c-.08 0-.16-.02-.23-.06C15.66 3.42 14 3 12.01 3c-1.98 0-3.86.47-5.57 1.41-.24.13-.54.04-.68-.2-.13-.24-.04-.55.2-.68C7.82 2.52 9.86 2 12.01 2c2.13 0 3.99.47 6.03 1.52.25.13.34.43.21.67-.09.18-.26.28-.44.28zM3.5 9.72c-.1 0-.2-.03-.29-.09-.23-.16-.28-.47-.12-.7.99-1.4 2.25-2.5 3.75-3.27C9.98 4.04 14 4.03 17.15 5.65c1.5.77 2.76 1.86 3.75 3.25.16.22.11.54-.12.7-.23.16-.54.11-.7-.12-.9-1.26-2.04-2.25-3.39-2.94-2.87-1.47-6.54-1.47-9.4.01-1.36.7-2.5 1.7-3.4 2.96-.08.14-.23.21-.39.21zm6.25 12.07c-.13 0-.26-.05-.35-.15-.87-.87-1.34-1.43-2.01-2.64-.69-1.23-1.05-2.73-1.05-4.34 0-2.97 2.54-5.39 5.66-5.39s5.66 2.42 5.66 5.39c0 .28-.22.5-.5.5s-.5-.22-.5-.5c0-2.42-2.09-4.39-4.66-4.39-2.57 0-4.66 1.97-4.66 4.39 0 1.44.32 2.77.93 3.85.64 1.15 1.08 1.64 1.85 2.42.19.2.19.51 0 .71-.11.1-.24.15-.37.15zm7.17-1.85c-1.19 0-2.24-.3-3.1-.89-1.49-1.01-2.38-2.65-2.38-4.39 0-.28.22-.5.5-.5s.5.22.5.5c0 1.41.72 2.74 1.94 3.56.71.48 1.54.71 2.54.71.24 0 .64-.03 1.04-.1.27-.05.53.13.58.41.05.27-.13.53-.41.58-.57.11-1.07.12-1.21.12zM14.91 22c-.04 0-.09-.01-.13-.02-1.59-.44-2.63-1.03-3.72-2.1-1.4-1.39-2.17-3.24-2.17-5.22 0-1.62 1.38-2.94 3.08-2.94 1.7 0 3.08 1.32 3.08 2.94 0 1.07.93 1.94 2.08 1.94s2.08-.87 2.08-1.94c0-3.77-3.25-6.83-7.25-6.83-2.84 0-5.44 1.58-6.61 4.03-.39.81-.59 1.76-.59 2.8 0 .78.07 2.01.67 3.61.1.26-.03.55-.29.64-.26.1-.55-.04-.64-.29-.49-1.31-.73-2.61-.73-3.96 0-1.2.23-2.29.68-3.24 1.33-2.79 4.28-4.6 7.51-4.6 4.55 0 8.25 3.51 8.25 7.83 0 1.62-1.38 2.94-3.08 2.94s-3.08-1.32-3.08-2.94c0-1.07-.93-1.94-2.08-1.94s-2.08.87-2.08 1.94c0 1.71.66 3.31 1.87 4.51.95.94 1.86 1.46 3.27 1.85.27.07.42.35.35.61-.05.23-.26.38-.47.38z\"\n fill={fill}\n />\n </svg>\n );\n}\n","/**\n * Biometric Icon Selector Component\n * 디바이스 타입에 따라 적절한 아이콘을 표시\n */\n\nimport { FaceIdIcon } from '../icons/FaceIdIcon';\nimport { TouchIdIcon } from '../icons/TouchIdIcon';\nimport { FingerprintIcon } from '../icons/FingerprintIcon';\nimport type { BiometricType } from '../utils/biometric';\n\ninterface BiometricIconProps {\n type: BiometricType;\n size?: number;\n animate?: boolean;\n}\n\nexport function BiometricIcon({ type, size = 80, animate = false }: BiometricIconProps) {\n const className = animate ? 'volr:animate-pulse' : '';\n \n return (\n <div className={className}>\n {type === 'faceId' && <FaceIdIcon size={size} />}\n {type === 'touchId' && <TouchIdIcon size={size} />}\n {type === 'fingerprint' && <FingerprintIcon size={size} />}\n </div>\n );\n}\n\n","\nimport { cn } from \"@/lib/utils\";\nimport { useVolrUI } from \"@/providers/VolrUIProvider\";\nimport React from \"react\";\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: \"primary\" | \"secondary\" | \"ghost\" | \"outline\";\n size?: \"sm\" | \"md\" | \"lg\";\n fullWidth?: boolean;\n children: React.ReactNode;\n}\n\nconst sizeMap = {\n sm: { px: \"0.75rem\", py: \"0.5rem\", fontSize: \"0.875rem\" },\n md: { px: \"1rem\", py: \"0.75rem\", fontSize: \"1rem\" },\n lg: { px: \"1.5rem\", py: \"1rem\", fontSize: \"1.125rem\" },\n};\n\n// Colors are defined as CSS variable references for theme support\nconst variantMap = {\n primary: { backgroundColor: undefined, color: \"#fff\", border: \"none\" },\n secondary: { backgroundColor: \"var(--volr-bg-tertiary)\", color: \"var(--volr-text)\", border: \"none\" },\n ghost: { backgroundColor: \"transparent\", color: \"var(--volr-text-secondary)\", border: \"none\" },\n outline: { backgroundColor: \"transparent\", color: \"var(--volr-text-secondary)\", border: \"1px solid var(--volr-border)\" },\n};\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ variant = \"primary\", size = \"md\", fullWidth, className, style, disabled, children, ...props }, ref) => {\n const { accentColor } = useVolrUI();\n\n const sizeStyle = sizeMap[size];\n const variantStyle = variantMap[variant];\n const isPrimary = variant === \"primary\";\n\n return (\n <button\n ref={ref}\n disabled={disabled}\n className={cn(\n \"volr:inline-flex volr:items-center volr:justify-center volr:gap-2\",\n \"volr:font-semibold volr:transition-all\",\n fullWidth && \"volr:w-full\",\n className\n )}\n style={{\n paddingLeft: sizeStyle.px,\n paddingRight: sizeStyle.px,\n paddingTop: sizeStyle.py,\n paddingBottom: sizeStyle.py,\n fontSize: sizeStyle.fontSize,\n borderRadius: \"0.75rem\",\n border: variantStyle.border,\n backgroundColor: isPrimary ? accentColor : variantStyle.backgroundColor,\n color: variantStyle.color,\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n opacity: disabled ? 0.5 : 1,\n ...style,\n }}\n {...props}\n >\n {children}\n </button>\n );\n }\n);\n\nButton.displayName = \"Button\";\n\n\n","/**\n * Passkey Enrollment Form Component\n * 패스키 등록 초기 화면\n */\n\nimport { BiometricIcon } from './BiometricIcon';\nimport { Button } from '@/components/materials/Button';\nimport { ErrorIcon } from '@/components/materials/icons';\nimport type { BiometricType } from '../utils/biometric';\n\ninterface PasskeyEnrollFormProps {\n biometricType: BiometricType;\n biometricMessage: string;\n errorMessage: string | null;\n onEnroll: () => void;\n onLogout: () => void;\n buttonText: string;\n logoutText: string;\n}\n\nexport function PasskeyEnrollForm({\n biometricType,\n biometricMessage,\n errorMessage,\n onEnroll,\n onLogout,\n buttonText,\n logoutText,\n}: PasskeyEnrollFormProps) {\n return (\n <>\n {/* 아이콘 - 조금 작게 */}\n <div className=\"volr:my-6 volr:flex volr:justify-center\">\n <BiometricIcon type={biometricType} size={48} />\n </div>\n\n {/* 간결한 설명 */}\n <p className=\"volr:text-sm volr:mb-6 volr:text-center volr-text-secondary\">\n {biometricMessage}\n </p>\n\n {/* 에러 메시지 */}\n {errorMessage && (\n <div className=\"volr:mb-4 volr:p-3 volr:rounded-lg volr:border volr:text-sm volr:flex volr:items-start volr:gap-2 volr:text-left volr-error\">\n <ErrorIcon className=\"volr:shrink-0 volr:mt-0.5\" />\n <span>{errorMessage}</span>\n </div>\n )}\n\n {/* 버튼들 */}\n <div className=\"volr:flex volr:flex-col volr:gap-3\">\n <Button variant=\"primary\" fullWidth onClick={onEnroll}>\n {buttonText}\n </Button>\n <Button variant=\"ghost\" fullWidth onClick={onLogout}>\n {logoutText}\n </Button>\n </div>\n </>\n );\n}\n\n","/**\n * Passkey Enrollment Loading Component\n * 패스키 등록 진행 중 화면 with progress indicator\n */\n\nimport { BiometricIcon } from './BiometricIcon';\nimport { Button } from '@/components/materials/Button';\nimport type { BiometricType } from '../utils/biometric';\n\ninterface PasskeyEnrollLoadingProps {\n biometricType: BiometricType;\n stepMessage: string;\n isEnrolling: boolean;\n accentColor: string;\n onRetry: () => void;\n onLogout: () => void;\n buttonText: string;\n logoutText: string;\n progress?: number; // 0-100\n}\n\nexport function PasskeyEnrollLoading({\n biometricType,\n stepMessage,\n isEnrolling,\n accentColor,\n onRetry,\n onLogout,\n buttonText,\n logoutText,\n progress = 0,\n}: PasskeyEnrollLoadingProps) {\n return (\n <>\n {/* 로딩 아이콘 */}\n <div className=\"volr:mb-8 volr:flex volr:justify-center volr:items-center volr:min-h-[120px]\">\n <BiometricIcon type={biometricType} size={60} animate={isEnrolling} />\n </div>\n\n {/* 진행 메시지 */}\n <p className=\"volr:text-base volr:mb-4 volr-text-secondary\">\n {stepMessage}\n </p>\n\n {/* Progress Bar */}\n {isEnrolling && (\n <div className=\"volr:w-full volr:mb-6\">\n <div className=\"volr:w-full volr:h-2 volr:rounded-full volr:overflow-hidden volr-bg-tertiary\">\n <div\n className=\"volr:h-full volr:rounded-full volr:transition-all volr:duration-500 volr:ease-out\"\n style={{\n backgroundColor: accentColor,\n width: `${progress}%`,\n }}\n />\n </div>\n </div>\n )}\n\n {/* 재시도 버튼 */}\n {!isEnrolling && (\n <div className=\"volr:flex volr:flex-col volr:gap-3 volr:mt-6\">\n <Button variant=\"primary\" fullWidth onClick={onRetry}>\n {buttonText}\n </Button>\n <Button variant=\"ghost\" fullWidth onClick={onLogout}>\n {logoutText}\n </Button>\n </div>\n )}\n </>\n );\n}\n\n","/**\n * Passkey Enrollment View Component\n * Modern passkey setup with device-specific biometric icons\n */\n\nimport { useState, useEffect } from \"react\";\nimport { useVolrContext, useInternalAuth } from \"@volr/react\";\nimport { usePasskeyEnrollment } from \"@volr/react\";\nimport type { AuthRefreshResponseDto } from \"@volr/react\";\nimport { useI18n } from \"@/i18n/context\";\nimport { useVolrUI } from \"@/providers/VolrUIProvider\";\nimport { Modal } from \"@/components/materials/modal\";\nimport { getBiometricType, getUserFriendlyError } from \"./utils/biometric\";\nimport { WalletConnectedView } from \"./components/WalletConnectedView\";\nimport { PasskeyEnrollForm } from \"./components/PasskeyEnrollForm\";\nimport { PasskeyEnrollLoading } from \"./components/PasskeyEnrollLoading\";\n\nexport interface PasskeyEnrollViewProps {\n onComplete: () => void;\n onError?: (error: Error) => void;\n onLogout?: () => void;\n onClose?: () => void;\n /** Whether the modal is open */\n isOpen?: boolean;\n /** Whether to wrap content in Modal component */\n wrapInModal?: boolean;\n}\n\nexport function PasskeyEnrollView({\n onComplete,\n onError,\n onLogout,\n onClose,\n isOpen = true,\n wrapInModal = true,\n}: PasskeyEnrollViewProps) {\n const { user, logout, setUser } = useVolrContext();\n const { client } = useInternalAuth();\n const { t } = useI18n();\n const { accentColor } = useVolrUI();\n const {\n enroll,\n step,\n isEnrolling,\n error: enrollmentError,\n } = usePasskeyEnrollment();\n const [hasStarted, setHasStarted] = useState(false);\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n const [isRefreshing, setIsRefreshing] = useState(false);\n\n const biometricType = getBiometricType();\n\n // Check if user already has a passkey\n const hasPasskey = user?.keyStorageType === \"passkey\";\n\n // Debug logging for passkey detection\n useEffect(() => {\n console.log(\"[PasskeyEnrollView] User state:\", {\n user,\n keyStorageType: user?.keyStorageType,\n evmAddress: user?.evmAddress,\n hasPasskey,\n });\n }, [user, hasPasskey]);\n\n // Refresh user data if passkey exists but address is missing\n useEffect(() => {\n if (hasPasskey && !user?.evmAddress && !isRefreshing) {\n const refreshUserData = async () => {\n try {\n setIsRefreshing(true);\n const response = await client.post<AuthRefreshResponseDto>(\n \"/auth/refresh\",\n {}\n );\n\n if (response.user) {\n console.log(\n \"[PasskeyEnrollView] Updated user data:\",\n response.user\n );\n setUser({\n ...user,\n ...response.user,\n });\n }\n } catch (error) {\n console.error(\n \"[PasskeyEnrollView] Failed to refresh user data:\",\n error\n );\n } finally {\n setIsRefreshing(false);\n }\n };\n\n refreshUserData();\n }\n }, [hasPasskey, user?.evmAddress, isRefreshing, client, setUser, user]);\n\n // Validate user\n useEffect(() => {\n if (!user?.id) {\n const error = new Error(\"User ID is required for passkey enrollment\");\n setErrorMessage(getUserFriendlyError(error, t));\n if (onError) {\n onError(error);\n }\n }\n }, [user, onError, t]);\n\n // Handle enrollment errors with user-friendly messages\n useEffect(() => {\n if (enrollmentError) {\n const friendlyMessage = getUserFriendlyError(enrollmentError, t);\n setErrorMessage(friendlyMessage);\n if (onError) {\n onError(enrollmentError);\n }\n }\n }, [enrollmentError, onError, t]);\n\n const handleEnroll = async () => {\n if (!user?.id) {\n const error = new Error(\n \"User ID is required for passkey enrollment\"\n );\n setErrorMessage(getUserFriendlyError(error, t));\n if (onError) {\n onError(error);\n }\n return;\n }\n\n try {\n setErrorMessage(null);\n await enroll();\n // 성공 시 상태 초기화 후 onComplete 호출\n setHasStarted(false);\n onComplete();\n } catch (error) {\n // Error is already handled by hook and useEffect\n setHasStarted(false);\n }\n };\n\n const handleLogout = async () => {\n try {\n await logout();\n if (onLogout) {\n onLogout();\n }\n } catch (error) {\n if (onError) {\n onError(error instanceof Error ? error : new Error(\"Logout failed\"));\n }\n }\n };\n\n const getStepMessage = (): string => {\n switch (step) {\n case \"creating\":\n return t(\"passkey.creating\");\n case \"encrypting\":\n return t(\"passkey.encrypting\");\n case \"uploading\":\n return t(\"passkey.uploading\");\n case \"registering\":\n return t(\"passkey.registering\");\n default:\n return \"\";\n }\n };\n\n const getProgress = (): number => {\n switch (step) {\n case \"creating\":\n return 25;\n case \"encrypting\":\n return 50;\n case \"uploading\":\n return 75;\n case \"registering\":\n return 90;\n default:\n return 0;\n }\n };\n\n const getBiometricTitle = (): string => {\n if (biometricType === \"faceId\") {\n return t(\"passkey.titleFaceId\");\n }\n if (biometricType === \"touchId\") {\n return t(\"passkey.titleTouchId\");\n }\n return t(\"passkey.titleFingerprint\");\n };\n\n const getBiometricDescription = (): string => {\n return t(\"passkey.description\");\n };\n\n // If user already has a passkey, show wallet info instead\n if (hasPasskey) {\n const handleClose = () => {\n if (onClose) {\n onClose();\n } else if (onComplete) {\n onComplete();\n }\n };\n\n const walletContent = (\n <WalletConnectedView \n user={user} \n onClose={handleClose}\n showHeader={!wrapInModal} // Show header only when not wrapped in modal (modal has its own close)\n />\n );\n\n if (!wrapInModal) {\n return walletContent;\n }\n\n return (\n <Modal open={isOpen} onOpenChange={(open) => !open && handleClose()}>\n <WalletConnectedView \n user={user} \n onClose={handleClose}\n showHeader={false} // Modal provides its own close mechanism\n />\n </Modal>\n );\n }\n\n const content = (\n <div>\n {/* 동적 제목 - 디바이스별 */}\n <p className=\"volr:text-xl volr:font-semibold volr:mb-5\">\n {getBiometricTitle()}\n </p>\n\n {!hasStarted ? (\n <PasskeyEnrollForm\n biometricType={biometricType}\n biometricMessage={getBiometricDescription()}\n errorMessage={errorMessage}\n onEnroll={() => {\n setHasStarted(true);\n handleEnroll();\n }}\n onLogout={handleLogout}\n buttonText={t(\"passkey.start\")}\n logoutText={t(\"passkey.logout\")}\n />\n ) : (\n <PasskeyEnrollLoading\n biometricType={biometricType}\n stepMessage={getStepMessage()}\n isEnrolling={isEnrolling}\n accentColor={accentColor}\n progress={getProgress()}\n onRetry={handleEnroll}\n onLogout={handleLogout}\n buttonText={t(\"passkey.start\")}\n logoutText={t(\"passkey.logout\")}\n />\n )}\n </div>\n );\n\n if (!wrapInModal) {\n return content;\n }\n\n return (\n <Modal open={isOpen} onOpenChange={(open) => !open && onLogout?.()}>\n {content}\n </Modal>\n );\n}\n","/**\n * MPC Connect View Component\n * MPC 연결 플로우: useMpcConnection hook 사용\n */\n\nimport { useEffect, useState } from \"react\";\nimport { useMpcConnection } from \"@volr/react\";\nimport { Modal } from \"@/components/materials/modal\";\n\nexport interface MpcConnectViewProps {\n onComplete: () => void;\n onError?: (error: Error) => void;\n /** Whether the modal is open */\n isOpen?: boolean;\n /** Whether to wrap content in Modal component */\n wrapInModal?: boolean;\n}\n\nexport function MpcConnectView({\n onComplete,\n onError,\n isOpen = true,\n wrapInModal = true,\n}: MpcConnectViewProps) {\n const {\n connect,\n step,\n isConnecting,\n error: connectionError,\n } = useMpcConnection();\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n\n // Handle connection errors\n useEffect(() => {\n if (connectionError) {\n setErrorMessage(connectionError.message);\n if (onError) {\n onError(connectionError);\n }\n }\n }, [connectionError, onError]);\n\n useEffect(() => {\n // Auto-start connection on mount\n handleConnect();\n }, []);\n\n const handleConnect = async () => {\n try {\n setErrorMessage(null);\n await connect();\n // Success callback\n setTimeout(() => {\n onComplete();\n }, 1000);\n } catch (error) {\n // Error is already handled by hook and useEffect\n }\n };\n\n const getStepMessage = (): string => {\n switch (step) {\n case \"connecting\":\n return \"Establishing secure connection...\";\n case \"registering\":\n return \"Registering wallet provider...\";\n default:\n return \"\";\n }\n };\n\n const content = (\n <div className=\"volr:p-8 volr:max-w-md volr:mx-auto volr:text-center\">\n <p className=\"volr:text-2xl volr:font-bold volr:mb-6\">\n Connecting to MPC Provider\n </p>\n\n {errorMessage && (\n <div className=\"volr:mb-4 volr:p-3 volr:bg-red-50 volr:border volr:border-red-200 volr:rounded-lg volr:text-red-700 volr:text-sm volr:text-left\">\n {errorMessage}\n </div>\n )}\n\n <div className=\"volr:mb-8 volr:flex volr:justify-center volr:items-center volr:min-h-[120px]\">\n <div\n className={`volr:text-8xl ${\n isConnecting ? \"volr:animate-pulse\" : \"\"\n }`}\n >\n 🔒\n </div>\n </div>\n\n <p className=\"volr:text-base volr:text-gray-500 volr:mb-6 volr:leading-relaxed\">\n {getStepMessage()}\n </p>\n </div>\n );\n\n if (!wrapInModal) {\n return content;\n }\n\n return (\n <Modal\n open={isOpen}\n onOpenChange={(open) => {\n if (!open && !isConnecting && onError) {\n onError(new Error(\"Connection cancelled\"));\n }\n }}\n onPointerDownOutside={(e) => {\n if (isConnecting) e.preventDefault();\n }}\n onEscapeKeyDown={(e) => {\n if (isConnecting) e.preventDefault();\n }}\n >\n <div className=\"max-w-md mx-auto\">\n <p className=\"volr:sr-only\">MPC Connection</p>\n {content}\n </div>\n </Modal>\n );\n}\n","import React, { useState } from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface CopyButtonProps {\n text: string;\n className?: string;\n onCopy?: () => void;\n}\n\nexport const CopyButton: React.FC<CopyButtonProps> = ({ text, className, onCopy }) => {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n onCopy?.();\n } catch (error) {\n console.error(\"Copy failed:\", error);\n }\n };\n\n return (\n <button\n onClick={handleCopy}\n className={cn(\n \"volr:p-2 volr:rounded-lg volr:transition-all volr-text-muted volr-hover\",\n className\n )}\n aria-label=\"Copy\"\n >\n {copied ? (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n ) : (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n )}\n </button>\n );\n};\n\n\n","import React from \"react\";\nimport { cn } from '@/lib/utils';\n\nexport interface OptionButtonProps {\n icon: React.ReactNode;\n title: string;\n description?: string;\n onClick: () => void;\n className?: string;\n 'aria-label'?: string;\n}\n\nexport function OptionButton({\n icon,\n title,\n description,\n onClick,\n className,\n ...rest\n}: OptionButtonProps) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className={cn(\n 'volr-option-button',\n className,\n )}\n {...rest}\n >\n <span className=\"volr:flex volr:h-8 volr:w-8 volr:items-center volr:justify-center\">\n {icon}\n </span>\n <span className=\"volr:flex volr:min-w-0 volr:flex-col\">\n <span className=\"volr:truncate volr:text-left volr:text-sm volr:font-medium\">\n {title}\n </span>\n {description ? (\n <span className=\"volr:truncate volr:text-left volr:text-xs volr-text-secondary\">\n {description}\n </span>\n ) : null}\n </span>\n </button>\n );\n}\n","export function GoogleIcon() {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z\"\n fill=\"#4285F4\"\n />\n <path\n d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\"\n fill=\"#34A853\"\n />\n <path\n d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z\"\n fill=\"#FBBC05\"\n />\n <path\n d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\"\n fill=\"#EA4335\"\n />\n </svg>\n );\n}\n\n\n","export function TwitterXIcon() {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z\"\n fill=\"#000000\"\n />\n </svg>\n );\n}\n\n\n","export function AppleIcon() {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M18.71 19.5c-.83 1.24-1.71 2.45-3.05 2.47-1.34.03-1.77-.79-3.29-.79-1.53 0-2 .77-3.27.82-1.31.05-2.3-1.32-3.14-2.53C4.25 17 2.94 12.45 4.7 9.39c.87-1.52 2.43-2.48 4.12-2.51 1.28-.02 2.5.87 3.29.87.78 0 2.26-1.07 3.81-.91.65.03 2.47.26 3.64 1.98-.09.06-2.17 1.28-2.15 3.81.03 3.02 2.65 4.03 2.68 4.04-.03.07-.42 1.44-1.38 2.83M13 3.5c.73-.83 1.94-1.46 2.94-1.5.13 1.17-.34 2.35-1.04 3.19-.69.85-1.83 1.51-2.95 1.42-.15-1.15.41-2.35 1.05-3.11z\"\n fill=\"#000000\"\n />\n </svg>\n );\n}\n\n\n","import { OptionButton } from './OptionButton';\nimport { useI18n } from '@/i18n/context';\nimport { GoogleIcon } from './icons/GoogleIcon';\nimport { TwitterXIcon } from './icons/TwitterXIcon';\nimport { AppleIcon } from './icons/AppleIcon';\n\ntype Provider = 'google' | 'twitter' | 'apple';\n\nexport function SocialOption({\n provider,\n onClick,\n}: {\n provider: Provider;\n onClick: () => void;\n}) {\n const { t } = useI18n();\n const icons: Record<Provider, JSX.Element> = {\n google: <GoogleIcon />,\n twitter: <TwitterXIcon />,\n apple: <AppleIcon />,\n };\n return (\n <OptionButton\n onClick={onClick}\n icon={icons[provider]}\n title={t(`login.social.${provider}`)}\n />\n );\n}\n\n\n","import React from \"react\";\n\nexport function WalletIcon(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n {...props}\n >\n <path\n d=\"M4 7.5C4 6.11929 5.11929 5 6.5 5H16.5C17.3284 5 18 5.67157 18 6.5C18 7.32843 17.3284 8 16.5 8H6.5C5.11929 8 4 6.88071 4 5.5V7.5Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n <rect\n x=\"3.2\"\n y=\"7.6\"\n width=\"17.6\"\n height=\"11.2\"\n rx=\"2.4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n />\n <circle cx=\"16.6\" cy=\"13.2\" r=\"1.2\" fill=\"currentColor\" />\n </svg>\n );\n}\n\n\n\n","import { OptionButton } from './OptionButton';\nimport { WalletIcon } from './icons/WalletIcon';\nimport { useI18n } from '@/i18n/context';\n\nexport function WalletOption({ onClick }: { onClick: () => void }) {\n const { t } = useI18n();\n return (\n <OptionButton\n onClick={onClick}\n icon={<WalletIcon />}\n title={t('login.wallet.label')}\n />\n );\n}\n\n\n","export function PoweredBy() {\n return (\n <div className=\"volr:mt-8 volr:text-xs volr:text-center volr:flex volr:items-baseline volr:justify-center volr:gap-1 volr-text-muted\">\n <span>Powered by</span>\n <svg\n viewBox=\"0 0 943 289\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"volr:inline-block volr:h-[0.8em] volr:w-auto volr:align-baseline volr-text-secondary\"\n style={{ fill: 'currentColor' }}\n aria-label=\"Volr\"\n >\n <path\n d=\"M138.4 284L-0.00019535 0H87.1998L184.4 208L281.2 0H363.6L225.2 284H138.4ZM471.931 288.8C453.531 288.8 435.931 286.533 419.131 282C402.331 277.2 387.264 270.267 373.931 261.2C360.864 252.133 350.464 240.933 342.731 227.6C335.264 214.267 331.531 198.8 331.531 181.2C331.531 157.733 337.664 138 349.931 122C362.464 106 379.398 94 400.731 86C422.064 77.7333 445.798 73.6 471.931 73.6C498.064 73.6 521.664 77.7333 542.731 86C564.064 94 580.864 106 593.131 122C605.664 138 611.931 157.733 611.931 181.2C611.931 198.8 608.064 214.267 600.331 227.6C592.864 240.933 582.464 252.133 569.131 261.2C556.064 270.267 541.131 277.2 524.331 282C507.531 286.533 490.064 288.8 471.931 288.8ZM471.931 236C490.598 236 505.531 231.2 516.731 221.6C528.198 211.733 533.931 198.933 533.931 183.2V179.2C533.931 163.2 528.198 150.4 516.731 140.8C505.531 131.2 490.598 126.4 471.931 126.4C453.264 126.4 438.198 131.2 426.731 140.8C415.264 150.4 409.531 163.2 409.531 179.2V183.2C409.531 198.933 415.264 211.733 426.731 221.6C438.198 231.2 453.264 236 471.931 236ZM643.865 284V0H721.465V284H643.865ZM763.006 284V78.4H839.406V106.8C848.739 95.3333 860.473 86.9333 874.606 81.6C888.739 76.2667 903.406 73.6 918.606 73.6C921.539 73.6 925.006 73.7333 929.006 74C933.006 74.2667 937.406 74.8 942.206 75.6V135.2C935.006 134.4 926.873 133.733 917.806 133.2C909.006 132.667 900.073 132.8 891.006 133.6C881.939 134.4 873.539 136.4 865.806 139.6C858.339 142.533 852.206 147.333 847.406 154C842.873 160.667 840.606 169.733 840.606 181.2V284H763.006Z\"\n fill=\"currentColor\"\n />\n </svg>\n </div>\n );\n}\n\n\n","import { useState } from 'react';\nimport type { EmailInlineInputProps } from '@/types/signin';\nimport { useI18n } from '@/i18n/context';\nimport { Button } from '../../../materials/Button';\nimport { EmailIcon } from '@/components/materials/icons';\n\nexport function EmailInlineInput({ onSubmit, accentColor }: EmailInlineInputProps) {\n const { t } = useI18n();\n const [email, setEmail] = useState('');\n const [error, setError] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n setError(null);\n setIsLoading(true);\n\n try {\n await onSubmit(email);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to send code');\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <form onSubmit={handleSubmit}>\n <div className=\"volr:relative volr:flex volr:items-center\">\n <div className=\"volr:absolute volr:left-3 volr:pointer-events-none volr-text-muted\">\n <EmailIcon />\n </div>\n <input\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n required\n placeholder={t('login.email.placeholder')}\n className=\"volr-email-input\"\n />\n </div>\n\n {error && (\n <div className=\"volr:mt-2 volr:rounded-lg volr:border volr:text-sm volr:p-3 volr-error\">\n {error}\n </div>\n )}\n\n <Button\n type=\"submit\"\n disabled={isLoading || !email}\n fullWidth\n className=\"volr:mt-3\"\n style={{ backgroundColor: accentColor }}\n >\n {isLoading ? t('common.loading') : t('login.email.sendCode')}\n </Button>\n </form>\n );\n}\n","import type { DividerProps } from '@/types/signin';\n\nexport function Divider({ text = '또는' }: DividerProps) {\n return (\n <div className=\"volr:flex volr:items-center volr:gap-3 volr:my-6\">\n <div className=\"volr:flex-1 volr:h-px volr-divider-line\" />\n <span className=\"volr:text-sm volr-text-muted\">{text}</span>\n <div className=\"volr:flex-1 volr:h-px volr-divider-line\" />\n </div>\n );\n}\n\n","import type { BrandingPanelProps } from \"@/types/signin\";\n\nexport function BrandingPanel({ config }: BrandingPanelProps) {\n return (\n <div\n className=\"volr:w-full volr:h-full volr:rounded-xl volr:overflow-hidden\"\n style={{ backgroundColor: config.backgroundColor }}\n >\n {config.component}\n </div>\n );\n}\n","import { useMediaQuery } from \"@/hooks/useMediaQuery\";\nimport { useVolrUI } from \"@/providers/VolrUIProvider\";\nimport { useI18n } from \"@/i18n/context\";\nimport type { SigninSelectScreenProps, SocialProvider } from \"@/types/signin\";\nimport { SocialOption } from \"./components/SocialOption\";\nimport { WalletOption } from \"./components/WalletOption\";\nimport { PoweredBy } from \"../../materials/PoweredBy\";\nimport { EmailInlineInput } from \"./components/EmailInlineInput\";\nimport { Divider } from \"./components/Divider\";\nimport { BrandingPanel } from \"./components/BrandingPanel\";\nimport { ModalHeader } from \"@/components/materials/modal\";\n\nexport function SigninSelectScreen({\n onSelectMethod,\n onEmailSubmit,\n branding,\n onClose,\n}: SigninSelectScreenProps) {\n const { t } = useI18n();\n const {\n accentColor,\n enabledLoginMethods = [\"email\", \"social\", \"siwe\"],\n socialProviders = [\"google\", \"twitter\", \"apple\"],\n } = useVolrUI();\n const isWide = useMediaQuery(\"(min-width: 864px)\");\n const showBrandingColumn = Boolean(branding) && isWide;\n\n const isEmailEnabled = enabledLoginMethods.includes(\"email\");\n const isSocialEnabled = enabledLoginMethods.includes(\"social\");\n const isSiweEnabled = enabledLoginMethods.includes(\"siwe\");\n\n // Divider logic\n const hasEmailAndOthers =\n isEmailEnabled && (isSocialEnabled || isSiweEnabled);\n const hasOnlySocialAndWallet =\n !isEmailEnabled && isSocialEnabled && isSiweEnabled;\n\n return (\n <div\n className={\n showBrandingColumn\n ? \"volr:max-w-4xl volr:w-full volr:mx-auto volr:grid volr:grid-cols-[minmax(0,1.1fr)_minmax(0,1fr)] volr:gap-4\"\n : \"volr:max-w-md volr:w-full volr:mx-auto\"\n }\n style={showBrandingColumn ? { minHeight: '666px' } : undefined}\n >\n {showBrandingColumn && (\n <div className=\"volr:flex volr:h-full volr:min-h-[500px]\">\n <BrandingPanel config={branding!} />\n </div>\n )}\n <div\n className={`volr:flex volr:flex-col volr:h-full ${\n showBrandingColumn ? \"volr:p-4\" : \"\"\n }`}\n >\n <ModalHeader onClose={onClose} />\n <p className=\"volr:text-2xl volr:font-semibold volr:mb-5\">\n {t(\"login.title\")}\n </p>\n\n {/* Email Section */}\n {isEmailEnabled && (\n <EmailInlineInput\n onSubmit={onEmailSubmit}\n accentColor={accentColor}\n />\n )}\n\n {/* Divider */}\n {hasEmailAndOthers && <Divider />}\n\n {/* Social + Wallet Section */}\n <div className=\"volr:flex volr:flex-col volr:gap-3\">\n {isSocialEnabled &&\n socialProviders.map((provider) => (\n <SocialOption\n key={provider}\n provider={provider as SocialProvider}\n onClick={() => onSelectMethod(provider as SocialProvider)}\n />\n ))}\n\n {hasOnlySocialAndWallet && <Divider />}\n\n {isSiweEnabled && (\n <WalletOption onClick={() => onSelectMethod(\"siwe\")} />\n )}\n </div>\n\n {/* Spacer to push footer to bottom */}\n <div className=\"volr:flex-1\" />\n\n {/* Footer - pinned to bottom */}\n <PoweredBy />\n </div>\n </div>\n );\n}\n","/**\n * Code Input Screen Component\n * Modern 6-digit code input with individual boxes\n */\n\nimport { useState, useRef, useEffect } from 'react';\nimport { useI18n } from '@/i18n/context';\nimport { useVolrUI } from '@/providers/VolrUIProvider';\nimport { Button } from '@/components/materials/Button';\nimport { ErrorIcon } from '@/components/materials/icons';\n\nexport interface CodeInputScreenProps {\n email: string;\n onSubmit: (code: string) => Promise<void>;\n onBack?: () => void; // Optional: handled by ModalHeader now\n onResend: () => Promise<void>;\n}\n\nexport function CodeInputScreen({ email, onSubmit, onResend }: CodeInputScreenProps) {\n const { t } = useI18n();\n const { accentColor } = useVolrUI();\n const [digits, setDigits] = useState<string[]>(Array(6).fill(''));\n const [error, setError] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const inputRefs = useRef<(HTMLInputElement | null)[]>([]);\n\n // Auto-focus first input on mount\n useEffect(() => {\n inputRefs.current[0]?.focus();\n }, []);\n\n // Auto-submit when all 6 digits are filled\n useEffect(() => {\n const code = digits.join('');\n if (code.length === 6 && !isLoading) {\n handleSubmit(code);\n }\n }, [digits]);\n\n const handleSubmit = async (code: string) => {\n if (code.length !== 6) return;\n\n setError(null);\n setIsLoading(true);\n\n try {\n await onSubmit(code);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Invalid code');\n // Clear inputs on error\n setDigits(Array(6).fill(''));\n inputRefs.current[0]?.focus();\n } finally {\n setIsLoading(false);\n }\n };\n\n const handleChange = (index: number, value: string) => {\n // Only allow digits\n if (!/^\\d*$/.test(value)) return;\n\n const newDigits = [...digits];\n newDigits[index] = value.slice(-1); // Only last character\n setDigits(newDigits);\n\n // Auto-focus next input\n if (value && index < 5) {\n inputRefs.current[index + 1]?.focus();\n }\n };\n\n const handleKeyDown = (index: number, e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Backspace') {\n if (!digits[index] && index > 0) {\n // Move to previous input if current is empty\n inputRefs.current[index - 1]?.focus();\n } else {\n // Clear current input\n const newDigits = [...digits];\n newDigits[index] = '';\n setDigits(newDigits);\n }\n } else if (e.key === 'ArrowLeft' && index > 0) {\n inputRefs.current[index - 1]?.focus();\n } else if (e.key === 'ArrowRight' && index < 5) {\n inputRefs.current[index + 1]?.focus();\n }\n };\n\n const handlePaste = (e: React.ClipboardEvent) => {\n e.preventDefault();\n const pastedData = e.clipboardData.getData('text').replace(/\\D/g, '').slice(0, 6);\n const newDigits = pastedData.split('').concat(Array(6).fill('')).slice(0, 6);\n setDigits(newDigits);\n\n // Focus last filled input\n const lastIndex = Math.min(pastedData.length, 5);\n inputRefs.current[lastIndex]?.focus();\n };\n\n const handleResend = async () => {\n setError(null);\n try {\n await onResend();\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to resend code');\n }\n };\n\n return (\n <div>\n {/* Title */}\n <p className=\"volr:text-2xl volr:font-semibold volr:mb-3\">\n {t('login.email.verifyTitle')}\n </p>\n\n {/* Description */}\n <p className=\"volr:text-sm volr:mb-8 volr-text-secondary\">\n {t('login.email.verifyDescription', { email })}\n </p>\n\n {/* 6-Digit Input Boxes */}\n <div className=\"volr:flex volr:gap-3 volr:mb-6 volr:justify-center\">\n {digits.map((digit, index) => (\n <input\n key={index}\n ref={(el) => (inputRefs.current[index] = el)}\n type=\"text\"\n inputMode=\"numeric\"\n maxLength={1}\n value={digit}\n onChange={(e) => handleChange(index, e.target.value)}\n onKeyDown={(e) => handleKeyDown(index, e)}\n onPaste={index === 0 ? handlePaste : undefined}\n disabled={isLoading}\n className=\"volr:w-12 volr:h-14 volr:text-center volr:text-2xl volr:font-semibold volr:outline-none volr:transition-all volr:rounded-lg volr:disabled:cursor-not-allowed\"\n style={{\n border: `2px solid ${digit ? accentColor : 'var(--volr-border-strong)'}`,\n backgroundColor: isLoading ? 'var(--volr-bg-secondary)' : 'var(--volr-bg)',\n }}\n onFocus={(e) => {\n e.target.style.borderColor = accentColor;\n e.target.style.boxShadow = `0 0 0 3px ${accentColor}20`;\n }}\n onBlur={(e) => {\n if (!digit) {\n e.target.style.borderColor = 'var(--volr-border-strong)';\n }\n e.target.style.boxShadow = 'none';\n }}\n />\n ))}\n </div>\n\n {/* Error Message */}\n {error && (\n <div className=\"volr:mb-6 volr:p-3 volr:rounded-lg volr:border volr:text-sm volr:flex volr:items-start volr:gap-2 volr-error\">\n <ErrorIcon className=\"volr:shrink-0 volr:mt-0.5\" />\n <span>{error}</span>\n </div>\n )}\n\n {/* Resend Button */}\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"md\"\n fullWidth\n onClick={handleResend}\n disabled={isLoading}\n >\n {t('login.email.resend')}\n </Button>\n </div>\n );\n}\n","/**\n * SIWE (Sign-In with Ethereum) Login Screen Component\n * Supports both desktop (direct wallet connection) and mobile (sign.volr.io bridge)\n */\n\nimport { useState, useEffect, useCallback, useRef } from \"react\";\nimport { useI18n } from \"@/i18n/context\";\nimport {\n useVolrLogin,\n type KeyStorageType,\n type SignerType,\n} from \"@volr/react\";\nimport { Modal } from \"@/components/materials/modal\";\nimport { CopyButton } from \"@/components/materials/CopyButton\";\nimport { Button } from \"@/components/materials/Button\";\n\nexport interface SiweLoginScreenProps {\n isOpen?: boolean;\n wrapInModal?: boolean;\n onSuccess: (data: {\n userId: string;\n isNewUser: boolean;\n keyStorageType: KeyStorageType | null;\n signerType?: SignerType | null;\n }) => void;\n onBack: () => void;\n onError: (error: Error) => void;\n onClose?: () => void;\n}\n\n// EIP-6963 provider interface\ninterface EIP6963ProviderInfo {\n uuid: string;\n name: string;\n icon: string;\n rdns: string;\n}\n\ninterface EIP6963ProviderDetail {\n info: EIP6963ProviderInfo;\n provider: any;\n}\n\n// Detect if running on mobile\nconst isMobile = (): boolean => {\n if (typeof window === \"undefined\") return false;\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent\n );\n};\n\nexport function SiweLoginScreen({\n isOpen = true,\n wrapInModal = true,\n onSuccess,\n onBack,\n onError,\n onClose,\n}: SiweLoginScreenProps) {\n const { t } = useI18n();\n const {\n signWithWallet,\n createSiweSession,\n checkSiweSession,\n getSiweSignUrl,\n } = useVolrLogin();\n const [isLoading, setIsLoading] = useState(false);\n const [step, setStep] = useState<\"connect\" | \"sign\" | \"mobile-waiting\">(\"connect\");\n const [account, setAccount] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [hasWallet, setHasWallet] = useState<boolean | null>(null);\n const [providers, setProviders] = useState<EIP6963ProviderDetail[]>([]);\n const [isMobileDevice] = useState(isMobile());\n \n // Mobile session state\n const [mobileSessionUrl, setMobileSessionUrl] = useState<string | null>(null);\n const pollingRef = useRef<NodeJS.Timeout | null>(null);\n\n /**\n * Check if ethereum provider is available\n */\n const hasEthereumProvider = (): boolean => {\n return typeof window !== \"undefined\" && !!(window as any).ethereum;\n };\n\n // Cleanup polling on unmount\n useEffect(() => {\n return () => {\n if (pollingRef.current) {\n clearInterval(pollingRef.current);\n }\n };\n }, []);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n // EIP-6963: Listen for wallet provider announcements\n const handleAnnounceProvider = (event: any) => {\n const detail = event.detail as EIP6963ProviderDetail;\n setProviders((prev) => {\n if (prev.some((p) => p.info.uuid === detail.info.uuid)) {\n return prev;\n }\n return [...prev, detail];\n });\n setHasWallet(true);\n };\n\n window.addEventListener(\"eip6963:announceProvider\", handleAnnounceProvider);\n window.dispatchEvent(new Event(\"eip6963:requestProvider\"));\n\n // Check window.ethereum immediately\n const checkWallet = async () => {\n const walletAvailable =\n typeof window !== \"undefined\" && !!(window as any).ethereum;\n setHasWallet(walletAvailable);\n\n if (walletAvailable) {\n try {\n const accounts = await (window as any).ethereum.request({\n method: \"eth_accounts\",\n });\n if (accounts.length > 0) {\n setAccount(accounts[0]);\n setStep(\"sign\");\n }\n } catch {\n // Ignore errors\n }\n }\n };\n\n checkWallet();\n\n return () => {\n window.removeEventListener(\n \"eip6963:announceProvider\",\n handleAnnounceProvider\n );\n };\n }, []);\n\n // Get the best available provider\n const getProvider = (): any => {\n if (typeof window !== \"undefined\" && (window as any).ethereum) {\n return (window as any).ethereum;\n }\n if (providers.length > 0) {\n return providers[0].provider;\n }\n return null;\n };\n\n /**\n * Start mobile SIWE session with polling\n */\n const startMobileSession = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n const session = await createSiweSession();\n const url = getSiweSignUrl(session.id);\n \n setMobileSessionUrl(url);\n setStep(\"mobile-waiting\");\n\n // Start polling for session completion\n pollingRef.current = setInterval(async () => {\n try {\n const result = await checkSiweSession(session.id);\n \n if (result.status === \"completed\" && result.user) {\n // Clear polling\n if (pollingRef.current) {\n clearInterval(pollingRef.current);\n pollingRef.current = null;\n }\n \n // Success!\n onSuccess({\n userId: result.user.id,\n isNewUser: result.isNewUser || false,\n keyStorageType: (result.user.keyStorageType as KeyStorageType | undefined) ?? null,\n signerType: (result.user.signerType as SignerType | undefined) ?? null,\n });\n } else if (result.status === \"expired\") {\n // Session expired\n if (pollingRef.current) {\n clearInterval(pollingRef.current);\n pollingRef.current = null;\n }\n setError(t(\"siwe.sessionExpired\"));\n setStep(\"connect\");\n setMobileSessionUrl(null);\n }\n } catch {\n // Ignore polling errors, will retry\n }\n }, 3000); // Poll every 3 seconds\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to create session\");\n onError(err instanceof Error ? err : new Error(\"Failed to create session\"));\n } finally {\n setIsLoading(false);\n }\n }, [createSiweSession, getSiweSignUrl, checkSiweSession, onSuccess, onError, t]);\n\n /**\n * Desktop: Connect wallet directly\n */\n const handleConnectWallet = useCallback(async () => {\n setError(null);\n setIsLoading(true);\n\n try {\n const provider = getProvider();\n\n if (!provider) {\n throw new Error(t(\"siwe.noWalletFound\"));\n }\n\n setHasWallet(true);\n\n const accounts = await provider.request({\n method: \"eth_requestAccounts\",\n });\n\n if (accounts.length === 0) {\n throw new Error(\"No accounts found\");\n }\n\n setAccount(accounts[0]);\n setStep(\"sign\");\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : \"Failed to connect wallet\";\n setError(errorMessage);\n onError(err instanceof Error ? err : new Error(errorMessage));\n } finally {\n setIsLoading(false);\n }\n }, [t, onError]);\n\n /**\n * Desktop: Sign SIWE message using @volr/react hook\n */\n const handleSign = useCallback(async () => {\n if (!account) return;\n\n setError(null);\n setIsLoading(true);\n\n try {\n const result = await signWithWallet(account);\n\n onSuccess({\n userId: result.userId,\n isNewUser: result.isNewUser,\n keyStorageType: result.keyStorageType,\n signerType: result.signerType || null,\n });\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : \"Failed to sign message\";\n setError(errorMessage);\n onError(err instanceof Error ? err : new Error(errorMessage));\n } finally {\n setIsLoading(false);\n }\n }, [account, signWithWallet, onSuccess, onError]);\n\n /**\n * Copy URL to clipboard\n */\n const copyUrlToClipboard = useCallback(() => {\n if (mobileSessionUrl) {\n navigator.clipboard.writeText(mobileSessionUrl);\n alert(t(\"siwe.urlCopied\"));\n }\n }, [mobileSessionUrl, t]);\n\n const content = (\n <div className=\"volr:max-w-md volr:mx-auto\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onBack}\n className=\"volr:mb-4 volr:-ml-2\"\n >\n ← {t(\"common.back\")}\n </Button>\n\n <p className=\"volr:text-2xl volr:font-semibold volr:mb-5\">\n {t(\"login.wallet.title\")}\n </p>\n\n {/* Connected account display */}\n {account && step !== \"mobile-waiting\" && (\n <div className=\"volr:p-3 volr:rounded-lg volr:mb-6 volr:flex volr:items-center volr:justify-between volr-bg-secondary\">\n <div>\n <div className=\"volr:text-xs volr:mb-1 volr-text-secondary\">\n {t(\"login.wallet.connected\")}\n </div>\n <div className=\"volr:text-sm volr:font-medium volr:font-mono\">\n {account.slice(0, 6)}...{account.slice(-4)}\n </div>\n </div>\n <CopyButton text={account} />\n </div>\n )}\n\n {/* Error display */}\n {error && (\n <div className=\"volr:mb-4 volr:p-3 volr:border volr:rounded-lg volr:text-sm volr-error\">\n {error}\n </div>\n )}\n\n {/* Waiting for session completion (sign.volr.io) */}\n {step === \"mobile-waiting\" && mobileSessionUrl && (\n <div className=\"volr:space-y-4\">\n <div className=\"volr:p-4 volr:border volr:rounded-lg volr:text-sm volr-bg-secondary\">\n <p className=\"volr:font-medium volr:mb-3\">{t(\"siwe.mobileGuide\")}</p>\n <ol className=\"volr:list-decimal volr:list-inside volr:space-y-1 volr:text-xs volr-text-secondary\">\n <li>{t(\"siwe.mobileStep1\")}</li>\n <li>{t(\"siwe.mobileStep2\")}</li>\n <li>{t(\"siwe.mobileStep3\")}</li>\n </ol>\n </div>\n \n {/* URL display */}\n <div className=\"volr:p-3 volr:border volr:rounded-lg volr:bg-slate-50\">\n <p className=\"volr:text-xs volr:text-muted-foreground volr:mb-1\">Sign URL:</p>\n <p className=\"volr:text-xs volr:font-mono volr:break-all volr:text-slate-600\">\n {mobileSessionUrl}\n </p>\n </div>\n\n <Button\n variant=\"primary\"\n fullWidth\n onClick={copyUrlToClipboard}\n >\n {t(\"siwe.copyUrl\")}\n </Button>\n\n <div className=\"volr:text-center volr:py-4\">\n <div className=\"volr:animate-spin volr:w-6 volr:h-6 volr:border-2 volr:border-slate-300 volr:border-t-slate-600 volr:rounded-full volr:mx-auto\" />\n <p className=\"volr:text-sm volr:text-muted-foreground volr:mt-3\">\n {t(\"siwe.waitingForSignature\")}\n </p>\n </div>\n\n <button\n onClick={() => {\n if (pollingRef.current) {\n clearInterval(pollingRef.current);\n pollingRef.current = null;\n }\n setStep(\"connect\");\n setMobileSessionUrl(null);\n }}\n className=\"volr:w-full volr:text-sm volr:text-slate-500 volr:underline\"\n >\n {t(\"common.cancel\")}\n </button>\n </div>\n )}\n\n {/* Connect step: Show options based on wallet availability */}\n {step === \"connect\" && (\n <div className=\"volr:space-y-3\">\n {/* If wallet detected in browser, show connect button */}\n {hasEthereumProvider() && (\n <>\n <Button\n variant=\"primary\"\n fullWidth\n onClick={handleConnectWallet}\n disabled={isLoading}\n >\n {isLoading ? t(\"common.loading\") : t(\"siwe.connectBrowser\")}\n </Button>\n \n {/* Divider */}\n <div className=\"volr:flex volr:items-center volr:gap-3 volr:my-2\">\n <div className=\"volr:flex-1 volr:h-px volr:bg-slate-200\" />\n <span className=\"volr:text-xs volr-text-secondary\">{t(\"login.or\")}</span>\n <div className=\"volr:flex-1 volr:h-px volr:bg-slate-200\" />\n </div>\n </>\n )}\n \n {/* Always show sign.volr.io option */}\n <Button\n variant={hasEthereumProvider() ? \"secondary\" : \"primary\"}\n fullWidth\n onClick={startMobileSession}\n disabled={isLoading}\n >\n {isLoading ? t(\"common.loading\") : t(\"siwe.startSession\")}\n </Button>\n </div>\n )}\n\n {/* Sign button (after wallet connected) */}\n {step === \"sign\" && (\n <Button\n variant=\"primary\"\n fullWidth\n onClick={handleSign}\n disabled={isLoading}\n >\n {isLoading ? t(\"common.loading\") : t(\"login.wallet.sign\")}\n </Button>\n )}\n </div>\n );\n\n if (!wrapInModal) {\n return content;\n }\n\n return (\n <Modal\n open={isOpen}\n onOpenChange={(open) => !open && (onClose?.() || onBack?.())}\n >\n <div className=\"max-w-md mx-auto\">\n <p className=\"volr:sr-only\">{t(\"login.wallet.title\")}</p>\n {content}\n </div>\n </Modal>\n );\n}\n","import { useState, useEffect } from \"react\";\nimport { useVolrContext, useVolrLogin, type SignerType } from \"@volr/react\";\nimport { useVolrUI } from \"@/providers/VolrUIProvider\";\nimport { Modal, ModalHeader } from \"@/components/materials/modal\";\nimport { SigninSelectScreen } from \"./SigninSelectScreen\";\nimport { CodeInputScreen } from \"./CodeInputScreen\";\nimport { SiweLoginScreen } from \"./SiweLoginScreen\";\nimport { PasskeyEnrollView } from \"../passkey/PasskeyEnrollView\";\nimport type { SigninMethod, SigninModalScreen } from \"@/types/signin\";\nimport { useMediaQuery } from \"@/hooks/useMediaQuery\";\n\nexport interface SigninModalProps {\n isOpen: boolean;\n onClose: () => void;\n onError?: (error: Error) => void;\n}\n\nexport function SigninModal({ isOpen, onClose, onError }: SigninModalProps) {\n const { logout, user } = useVolrContext();\n const { appName, branding } = useVolrUI();\n const { requestEmailCode, verifyEmailCode, handleSocialLogin } =\n useVolrLogin();\n\n const [currentScreen, setCurrentScreen] =\n useState<SigninModalScreen>(\"method-select\");\n const [email, setEmail] = useState(\"\");\n\n // Check if user already has passkey (for showing close button)\n const hasPasskey = user?.keyStorageType === \"passkey\";\n\n // Responsive layout: determine if current viewport is mobile\n const isMobile = useMediaQuery(\"(max-width: 500px)\");\n // Wide layout applies only when viewport is wide enough (>= 864px) AND branding is present\n const isWideViewport = useMediaQuery(\"(min-width: 864px)\");\n\n const shouldUseWideLayout =\n !isMobile &&\n isWideViewport &&\n Boolean(branding) &&\n currentScreen === \"method-select\";\n\n // Reset state when modal closes\n useEffect(() => {\n if (!isOpen) {\n // Reset to initial state when modal is closed\n setCurrentScreen(\"method-select\");\n setEmail(\"\");\n }\n }, [isOpen]);\n\n if (!isOpen) {\n return null;\n }\n\n const handleSelectMethod = (method: SigninMethod) => {\n if (method === \"siwe\") {\n setCurrentScreen(\"siwe-login\");\n } else if (\n method === \"google\" ||\n method === \"twitter\" ||\n method === \"apple\"\n ) {\n // Social login - uses handleSocialLogin from useVolrLogin hook\n handleSocialLogin(method);\n }\n // Note: 'email' is handled separately via onEmailSubmit\n };\n\n const handleEmailSubmit = async (emailValue: string) => {\n setEmail(emailValue);\n await requestEmailCode(emailValue);\n setCurrentScreen(\"code-input\");\n };\n\n const handleCodeSubmit = async (code: string) => {\n const result = await verifyEmailCode(email, code);\n\n // If user already has a key storage type, login is complete - close modal\n if (result.keyStorageType) {\n onClose();\n return;\n }\n\n // No key storage type means passkey setup is needed (regardless of isNewUser)\n setCurrentScreen(\"passkey-setup\");\n };\n\n const handleSiweSuccess = (_data: {\n userId: string;\n isNewUser: boolean;\n keyStorageType: \"passkey\" | \"mpc\" | null;\n signerType?: SignerType | null;\n }) => {\n // SIWE login complete - close modal\n // AccountModal will handle passkey enrollment if keyStorageType is not set\n onClose();\n };\n\n const handlePasskeyComplete = () => {\n // Passkey setup complete - close modal\n onClose();\n };\n\n const handlePasskeyError = (error: Error) => {\n if (onError) {\n onError(error);\n }\n // Stay on passkey setup screen to allow retry\n };\n\n const handleLogout = async () => {\n try {\n await logout();\n // Reset state and close modal\n setCurrentScreen(\"method-select\");\n setEmail(\"\");\n onClose();\n } catch (error) {\n if (onError) {\n onError(error instanceof Error ? error : new Error(\"Logout failed\"));\n }\n }\n };\n\n const handleBackdropClick = (_e: any) => {\n // Close modal when clicking outside, except during passkey setup (unless user already has passkey)\n if (currentScreen !== \"passkey-setup\" || hasPasskey) {\n // Reset state and close\n setCurrentScreen(\"method-select\");\n setEmail(\"\");\n onClose();\n }\n };\n\n const handleModalClose = () => {\n onClose();\n };\n\n // Render only the current screen\n const renderCurrentScreen = () => {\n switch (currentScreen) {\n case \"method-select\":\n return (\n <SigninSelectScreen\n key=\"method-select\"\n onClose={onClose}\n onSelectMethod={handleSelectMethod}\n onEmailSubmit={handleEmailSubmit}\n appName={appName}\n branding={shouldUseWideLayout ? branding : undefined}\n />\n );\n case \"code-input\":\n return (\n <>\n <ModalHeader\n back\n onBack={() => setCurrentScreen(\"method-select\")}\n onClose={onClose}\n />\n <CodeInputScreen\n key=\"code-input\"\n email={email}\n onSubmit={handleCodeSubmit}\n onBack={() => setCurrentScreen(\"method-select\")}\n onResend={() => requestEmailCode(email)}\n />\n </>\n );\n case \"siwe-login\":\n return (\n <SiweLoginScreen\n key=\"siwe-login\"\n wrapInModal={false}\n onSuccess={handleSiweSuccess}\n onBack={() => setCurrentScreen(\"method-select\")}\n onError={handlePasskeyError}\n />\n );\n case \"passkey-setup\":\n return (\n <PasskeyEnrollView\n key=\"passkey-setup\"\n wrapInModal={false}\n onComplete={handlePasskeyComplete}\n onError={handlePasskeyError}\n onLogout={handleLogout}\n onClose={onClose}\n />\n );\n default:\n return null;\n }\n };\n\n return (\n <Modal\n open={isOpen}\n onOpenChange={(open) => !open && handleModalClose()}\n onPointerDownOutside={(e) => {\n handleBackdropClick(e);\n }}\n onEscapeKeyDown={(e) => {\n if (currentScreen === \"passkey-setup\" && !hasPasskey) {\n e.preventDefault();\n }\n }}\n contentClassName={\n isMobile\n ? \"volr:max-w-none\"\n : shouldUseWideLayout\n ? \"volr:max-w-4xl volr:w-full volr:p-3\"\n : undefined\n }\n >\n {renderCurrentScreen()}\n\n <style>\n {`\n @keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n }\n `}\n </style>\n </Modal>\n );\n}\n","import { useState } from \"react\";\nimport { useVolrContext } from \"@volr/react\";\nimport { useI18n } from \"@/i18n/context\";\nimport { Modal, ModalHeader } from \"@/components/materials/modal\";\nimport { CopyButton } from \"@/components/materials/CopyButton\";\nimport { Button } from \"@/components/materials/Button\";\nimport { SigninModal } from \"../signin\";\nimport { PasskeyEnrollView } from \"../passkey/PasskeyEnrollView\";\n\nexport interface AccountModalProps {\n isOpen: boolean;\n onClose: () => void;\n onError?: (error: Error) => void;\n}\n\nexport function AccountModal({ isOpen, onClose, onError }: AccountModalProps) {\n const { user, logout } = useVolrContext();\n const { t } = useI18n();\n const [isLoggingOut, setIsLoggingOut] = useState(false);\n\n // If not logged in, show SigninModal\n if (!user) {\n return <SigninModal isOpen={isOpen} onClose={onClose} onError={onError} />;\n }\n\n // User is logged in but hasn't set up key storage yet - show passkey enrollment\n if (!user.keyStorageType) {\n const handlePasskeyComplete = () => {\n // Passkey setup complete - close modal\n onClose();\n };\n\n const handlePasskeyError = (error: Error) => {\n if (onError) {\n onError(error);\n }\n };\n\n const handleLogout = async () => {\n try {\n await logout();\n onClose();\n } catch (error) {\n if (onError) {\n onError(error instanceof Error ? error : new Error(\"Logout failed\"));\n }\n }\n };\n\n return (\n <Modal open={isOpen} onOpenChange={(open) => !open && onClose()}>\n <PasskeyEnrollView\n wrapInModal={false}\n onComplete={handlePasskeyComplete}\n onError={handlePasskeyError}\n onLogout={handleLogout}\n onClose={onClose}\n />\n </Modal>\n );\n }\n\n const handleLogout = async () => {\n setIsLoggingOut(true);\n try {\n await logout();\n onClose();\n } catch (error) {\n if (onError) {\n onError(error instanceof Error ? error : new Error(\"Logout failed\"));\n }\n } finally {\n setIsLoggingOut(false);\n }\n };\n\n const displayAddress = user.evmAddress\n ? `${user.evmAddress.slice(0, 6)}...${user.evmAddress.slice(-4)}`\n : null;\n\n return (\n <Modal open={isOpen} onOpenChange={(open) => !open && onClose()}>\n <ModalHeader onClose={onClose} />\n\n <div>\n {/* Title */}\n <p className=\"volr:text-xl volr:font-semibold volr:mb-4\">\n {t(\"account.title\")}\n </p>\n\n {/* Account Info Card */}\n <div className=\"volr:rounded-xl volr:p-4 volr:mb-4 volr-bg-secondary\">\n {/* Wallet Address */}\n {user.evmAddress && (\n <div className=\"volr:flex volr:items-center volr:justify-between volr:gap-3\">\n <div className=\"volr:flex-1 volr:min-w-0\">\n <p className=\"volr:text-xs volr:mb-1 volr-text-secondary\">\n {t(\"account.walletAddress\")}\n </p>\n <p className=\"volr:font-mono volr:text-sm volr:font-medium\">\n {displayAddress}\n </p>\n </div>\n <CopyButton\n text={user.evmAddress}\n className=\"volr:shrink-0\"\n />\n </div>\n )}\n\n {/* Email (if exists) */}\n {user.email && !user.email.includes(\"@wallet.\") && (\n <div className=\"volr:mt-4 volr:pt-4 volr:border-t volr-border\">\n <p className=\"volr:text-xs volr:mb-1 volr-text-secondary\">\n {t(\"account.email\")}\n </p>\n <p className=\"volr:text-sm volr:font-medium\">\n {user.email}\n </p>\n </div>\n )}\n </div>\n\n {/* Logout Button */}\n <Button\n variant=\"outline\"\n fullWidth\n onClick={handleLogout}\n disabled={isLoggingOut}\n >\n {isLoggingOut ? t(\"common.loading\") : t(\"account.logout\")}\n </Button>\n </div>\n </Modal>\n );\n}\n\n","import { useI18n } from \"@/i18n/context\";\nimport { cn } from \"@/lib/utils\";\n\ntype AssetConfig =\n | {\n chainId: number;\n token: \"native\";\n }\n | {\n chainId: number;\n token: {\n address: `0x${string}`;\n symbol: string;\n decimals: number;\n iconUrl?: string;\n };\n };\n\nexport function AssetSelectView({\n assets,\n onSelect,\n}: {\n assets: AssetConfig[];\n onSelect: (index: number) => void;\n}) {\n const { t } = useI18n();\n \n return (\n <div>\n {/* Title */}\n <p className=\"volr:text-xl volr:font-semibold volr:mb-1\">\n {t(\"deposit.selectTitle\")}\n </p>\n \n {/* Subtitle */}\n <p className=\"volr:text-sm volr:mb-4 volr-text-secondary\">\n Supported token\n </p>\n\n {/* Asset list */}\n <div className=\"volr:space-y-3\">\n {assets.map((a, idx) => {\n const isNative = a.token === \"native\";\n const tokenSymbol = isNative ? \"ETH\" : a.token.symbol;\n const tokenName = isNative ? \"Ethereum\" : a.token.symbol;\n \n return (\n <button\n key={`${a.chainId}-${idx}`}\n className={cn(\n \"volr:w-full volr:p-4 volr:rounded-xl volr:border-2\",\n \"volr:text-left volr:transition-all\",\n \"volr:flex volr:items-center volr:gap-4\",\n \"volr-border volr-hover\"\n )}\n onClick={() => onSelect(idx)}\n >\n {/* Token icon */}\n <div className=\"volr:shrink-0\">\n {!isNative && a.token.iconUrl ? (\n <img\n alt={a.token.symbol}\n src={a.token.iconUrl}\n className=\"volr:w-10 volr:h-10 volr:rounded-full volr:border volr-border\"\n />\n ) : (\n <div className=\"volr:w-10 volr:h-10 volr:rounded-full volr:flex volr:items-center volr:justify-center volr:text-white volr:font-bold volr:text-sm volr-bg-tertiary\">\n {tokenSymbol.slice(0, 2)}\n </div>\n )}\n </div>\n\n {/* Token info */}\n <div className=\"volr:flex-1 volr:min-w-0\">\n <div className=\"volr:flex volr:items-center volr:gap-2 volr:mb-1\">\n <span className=\"volr:text-base volr:font-semibold\">\n {tokenSymbol}\n </span>\n <span className=\"volr:text-xs volr:px-2 volr:py-0.5 volr:rounded-full volr:font-medium volr-bg-secondary volr-text-secondary\">\n Chain {a.chainId}\n </span>\n </div>\n <div className=\"volr:text-sm volr-text-secondary\">\n {tokenName}\n </div>\n {!isNative && (\n <div className=\"volr:text-xs volr:font-mono volr:truncate volr:mt-1 volr-text-muted\">\n {a.token.address}\n </div>\n )}\n </div>\n\n {/* Arrow icon */}\n <div className=\"volr:shrink-0 volr-text-muted\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </div>\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\n\n","import React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface TextLinkButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n showArrow?: boolean;\n children: React.ReactNode;\n}\n\nexport const TextLinkButton = React.forwardRef<\n HTMLButtonElement,\n TextLinkButtonProps\n>(({ showArrow = false, className, children, ...props }, ref) => {\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\n \"volr:underline volr:transition-colors volr-text-secondary\",\n className\n )}\n {...props}\n >\n {children}\n {showArrow && \" →\"}\n </button>\n );\n});\n\nTextLinkButton.displayName = \"TextLinkButton\";\n\n\n","import { Modal, ModalHeader } from \"@/components/materials/modal\";\n\nexport interface OtherTokenModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}\n\nexport const OtherTokenModal: React.FC<OtherTokenModalProps> = ({\n open,\n onOpenChange,\n}) => {\n return (\n <Modal open={open} onOpenChange={onOpenChange}>\n <ModalHeader onClose={() => onOpenChange(false)} />\n <div className=\"volr:text-center\">\n <p className=\"volr:text-lg volr:font-semibold volr:mb-2\">\n Coming Soon\n </p>\n <p className=\"volr:text-sm volr-text-secondary\">\n Swap and bridge recommendations will be available here soon.\n </p>\n </div>\n </Modal>\n );\n};\n","\n\ninterface DepositQRStatusOverlayProps {\n status: \"idle\" | \"listening\" | \"detected\" | \"error\";\n}\n\nexport const DepositQRStatusOverlay: React.FC<DepositQRStatusOverlayProps> = ({\n status,\n}) => {\n if (status !== \"detected\") return null;\n\n return (\n <>\n {/* Glow effect around the entire QR card */}\n <div \n className=\"volr:absolute volr:inset-0 volr:rounded-2xl volr:pointer-events-none\"\n style={{\n boxShadow: \"0 0 0 4px rgba(16, 185, 129, 0.3), 0 0 30px rgba(16, 185, 129, 0.4)\",\n animation: \"volrPulseGlow 1.5s ease-out infinite\",\n }}\n />\n\n {/* Animated gradient orbs behind QR - more visible */}\n <div className=\"volr:absolute volr:inset-0 volr:overflow-visible volr:pointer-events-none volr:-z-10\">\n {/* Orb 1 - emerald (larger and brighter) */}\n <div\n className=\"volr:absolute volr:w-48 volr:h-48 volr:rounded-full volr:opacity-0\"\n style={{\n background:\n \"radial-gradient(circle, rgba(16,185,129,0.7) 0%, rgba(16,185,129,0) 60%)\",\n filter: \"blur(50px)\",\n top: \"5%\",\n left: \"0%\",\n animation: \"volrGlowPulse 1.8s ease-out forwards\",\n }}\n />\n {/* Orb 2 - cyan */}\n <div\n className=\"volr:absolute volr:w-44 volr:h-44 volr:rounded-full volr:opacity-0\"\n style={{\n background:\n \"radial-gradient(circle, rgba(6,182,212,0.65) 0%, rgba(6,182,212,0) 60%)\",\n filter: \"blur(45px)\",\n bottom: \"10%\",\n right: \"-5%\",\n animation: \"volrGlowPulse 2s ease-out 0.1s forwards\",\n }}\n />\n {/* Orb 3 - teal */}\n <div\n className=\"volr:absolute volr:w-40 volr:h-40 volr:rounded-full volr:opacity-0\"\n style={{\n background:\n \"radial-gradient(circle, rgba(20,184,166,0.6) 0%, rgba(20,184,166,0) 60%)\",\n filter: \"blur(40px)\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n animation: \"volrGlowPulse 2.2s ease-out 0.2s forwards\",\n }}\n />\n </div>\n\n {/* Large check badge - more prominent */}\n <div \n className=\"volr:absolute volr:-top-3 volr:-right-3 volr:rounded-full volr:p-3 volr:bg-linear-to-br volr:from-emerald-400 volr:to-teal-500 volr:shadow-2xl volr:shadow-emerald-500/50 volr:border-4 volr:border-white volr:z-20\"\n style={{\n animation: \"volrBounceIn 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55) forwards\",\n }}\n >\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"white\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n </div>\n\n {/* Confetti-like particles */}\n <div className=\"volr:absolute volr:inset-0 volr:pointer-events-none volr:overflow-visible\">\n {/* Particle 1 */}\n <div\n className=\"volr:absolute volr:w-2 volr:h-2 volr:bg-emerald-400 volr:rounded-full volr:opacity-0\"\n style={{\n top: \"20%\",\n left: \"20%\",\n animation: \"volrParticle1 1s ease-out forwards\",\n }}\n />\n {/* Particle 2 */}\n <div\n className=\"volr:absolute volr:w-1.5 volr:h-1.5 volr:bg-cyan-400 volr:rounded-full volr:opacity-0\"\n style={{\n top: \"30%\",\n right: \"25%\",\n animation: \"volrParticle2 1.2s ease-out 0.1s forwards\",\n }}\n />\n {/* Particle 3 */}\n <div\n className=\"volr:absolute volr:w-2 volr:h-2 volr:bg-teal-400 volr:rounded-full volr:opacity-0\"\n style={{\n bottom: \"25%\",\n left: \"30%\",\n animation: \"volrParticle3 1.1s ease-out 0.2s forwards\",\n }}\n />\n {/* Particle 4 */}\n <div\n className=\"volr:absolute volr:w-1.5 volr:h-1.5 volr:bg-emerald-300 volr:rounded-full volr:opacity-0\"\n style={{\n bottom: \"30%\",\n right: \"20%\",\n animation: \"volrParticle4 1.3s ease-out 0.15s forwards\",\n }}\n />\n </div>\n\n {/* Add keyframes to global styles */}\n <style>{`\n @keyframes volrGlowPulse {\n 0% {\n transform: scale(0.5);\n opacity: 0;\n }\n 40% {\n opacity: 1;\n }\n 100% {\n transform: scale(1.6);\n opacity: 0;\n }\n }\n @keyframes volrBounceIn {\n 0% {\n transform: scale(0);\n opacity: 0;\n }\n 50% {\n transform: scale(1.2);\n }\n 70% {\n transform: scale(0.9);\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n }\n @keyframes volrPulseGlow {\n 0%, 100% {\n opacity: 0.6;\n }\n 50% {\n opacity: 1;\n }\n }\n @keyframes volrParticle1 {\n 0% {\n transform: translate(0, 0) scale(0);\n opacity: 0;\n }\n 20% {\n opacity: 1;\n }\n 100% {\n transform: translate(-20px, -30px) scale(1);\n opacity: 0;\n }\n }\n @keyframes volrParticle2 {\n 0% {\n transform: translate(0, 0) scale(0);\n opacity: 0;\n }\n 20% {\n opacity: 1;\n }\n 100% {\n transform: translate(25px, -35px) scale(1);\n opacity: 0;\n }\n }\n @keyframes volrParticle3 {\n 0% {\n transform: translate(0, 0) scale(0);\n opacity: 0;\n }\n 20% {\n opacity: 1;\n }\n 100% {\n transform: translate(-30px, 25px) scale(1);\n opacity: 0;\n }\n }\n @keyframes volrParticle4 {\n 0% {\n transform: translate(0, 0) scale(0);\n opacity: 0;\n }\n 20% {\n opacity: 1;\n }\n 100% {\n transform: translate(30px, 30px) scale(1);\n opacity: 0;\n }\n }\n `}</style>\n </>\n );\n};\n\n","import React, { useState } from \"react\";\nimport { useI18n } from \"@/i18n/context\";\nimport { cn } from \"@/lib/utils\";\n\ninterface DepositCompletedToastProps {\n onClose: () => void;\n previousBalance: bigint;\n newBalance: bigint;\n delta: bigint;\n decimals: number;\n symbol: string;\n}\n\nexport const DepositCompletedToast: React.FC<DepositCompletedToastProps> = ({\n onClose,\n previousBalance,\n newBalance,\n delta,\n decimals,\n symbol,\n}) => {\n const { t } = useI18n();\n const [expanded, setExpanded] = useState(false);\n\n const formatAmount = (amount: bigint) => {\n const divisor = BigInt(10 ** decimals);\n const whole = amount / divisor;\n const fraction = amount % divisor;\n const fractionStr = fraction.toString().padStart(decimals, \"0\").slice(0, 4);\n // Remove trailing zeros from fraction\n const trimmedFraction = fractionStr.replace(/0+$/, \"\");\n return trimmedFraction ? `${whole}.${trimmedFraction}` : `${whole}`;\n };\n\n const formattedDelta = formatAmount(delta);\n\n return (\n <div\n className={cn(\n // Position: fixed to modal edges with negative margin to escape parent padding\n \"volr:absolute volr:bottom-0 volr:z-50\",\n \"volr:-left-4 volr:-right-4\",\n // Appearance: background with clear separation\n \"volr:rounded-t-2xl volr-surface\",\n // Border: top border for clear visual separation\n \"volr:border-t-2 volr-border-strong\",\n // Shadow: strong upward shadow for depth\n \"volr:shadow-[0_-8px_30px_rgba(0,0,0,0.2)]\",\n // Animation\n \"volr:transition-all volr:duration-300 volr:ease-out\",\n expanded ? \"volr:max-h-96\" : \"volr:max-h-36\"\n )}\n style={{\n animation: \"volrSlideUp 0.3s ease-out\",\n }}\n >\n {/* Top handle indicator */}\n <div className=\"volr:flex volr:justify-center volr:pt-3 volr:pb-2\">\n <div className=\"volr:w-10 volr:h-1 volr:rounded-full volr-bg-tertiary\" />\n </div>\n\n {/* Main toast content */}\n <div className=\"volr:px-4 volr:pb-4\">\n <div className=\"volr:flex volr:items-start volr:gap-3\">\n {/* Icon */}\n <div className=\"volr:shrink-0 volr:w-10 volr:h-10 volr:rounded-full volr:bg-linear-to-br volr:from-emerald-500 volr:to-teal-500 volr:flex volr:items-center volr:justify-center volr:shadow-md\">\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"white\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n </div>\n\n {/* Content */}\n <div className=\"volr:flex-1 volr:min-w-0\">\n <div className=\"volr:flex volr:items-start volr:justify-between volr:gap-2 volr:mb-1\">\n <p className=\"volr:text-sm volr:font-semibold\">\n {t(\"deposit.completed\")}\n </p>\n <button\n onClick={onClose}\n className=\"volr:shrink-0 volr:w-6 volr:h-6 volr:flex volr:items-center volr:justify-center volr:rounded-full volr:transition-colors volr-bg-secondary volr-text-secondary volr-hover\"\n aria-label=\"Close\"\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </div>\n <p className=\"volr:text-sm volr:font-medium volr:mb-3\">\n {t(\"deposit.completedAmount\", { amount: formattedDelta, symbol })}\n </p>\n\n {/* Expanded details */}\n {expanded && (\n <div className=\"volr:space-y-2 volr:mb-3 volr:p-3 volr:rounded-lg volr:border volr:animate-[volrFadeIn_0.2s_ease-out] volr-bg-secondary volr-border\">\n <div className=\"volr:flex volr:justify-between volr:text-xs\">\n <span className=\"volr-text-secondary\">{t(\"deposit.amount\")}</span>\n <span className=\"volr:font-mono volr:text-emerald-600 volr:font-semibold\">\n +{formattedDelta} {symbol}\n </span>\n </div>\n <div className=\"volr:flex volr:justify-between volr:text-xs\">\n <span className=\"volr-text-secondary\">{t(\"deposit.previousBalance\")}</span>\n <span className=\"volr:font-mono volr-text-secondary\">\n {formatAmount(previousBalance)} {symbol}\n </span>\n </div>\n <div className=\"volr:flex volr:justify-between volr:text-xs volr:pt-2 volr:border-t volr-border\">\n <span className=\"volr-text-secondary\">{t(\"deposit.newBalance\")}</span>\n <span className=\"volr:font-mono volr:font-semibold\">\n {formatAmount(newBalance)} {symbol}\n </span>\n </div>\n </div>\n )}\n\n {/* See more / See less button */}\n <button\n onClick={() => setExpanded(!expanded)}\n className=\"volr:w-full volr:py-2.5 volr:text-xs volr:font-medium volr:rounded-lg volr:transition-colors volr:border volr-bg-secondary volr-text-secondary volr-border volr-hover\"\n >\n {expanded ? t(\"deposit.seeLess\") : t(\"deposit.seeMore\")}\n </button>\n </div>\n </div>\n </div>\n\n {/* Keyframes */}\n <style>{`\n @keyframes volrSlideUp {\n from {\n transform: translateY(100%);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n }\n @keyframes volrFadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n `}</style>\n </div>\n );\n};\n","import React from \"react\";\n\n/**\n * Skeleton component for Deposit Modal loading state.\n * Matches the layout of DepositQRView for seamless transition.\n */\nexport const DepositSkeleton: React.FC = () => {\n return (\n <div className=\"volr:animate-pulse\">\n {/* Header skeleton */}\n <div className=\"volr:mb-4\">\n {/* Title */}\n <div className=\"volr:h-7 volr:w-24 volr:rounded volr:mb-2 volr-bg-tertiary\" />\n {/* Token badge */}\n <div className=\"volr:h-8 volr:w-36 volr:rounded-lg volr-bg-secondary\" />\n </div>\n\n {/* QR Code skeleton */}\n <div className=\"volr:flex volr:justify-center volr:mb-3\">\n <div className=\"volr:rounded-xl volr:p-3 volr:border volr-bg-secondary volr-border\">\n <div className=\"volr:w-[200px] volr:h-[200px] volr:rounded-lg volr-bg-tertiary\" />\n </div>\n </div>\n\n {/* Status indicator skeleton */}\n <div className=\"volr:flex volr:items-center volr:justify-center volr:gap-2 volr:mb-3\">\n <div className=\"volr:w-1.5 volr:h-1.5 volr:rounded-full volr-bg-tertiary\" />\n <div className=\"volr:h-3 volr:w-32 volr:rounded volr-bg-tertiary\" />\n </div>\n\n {/* Address section skeleton */}\n <div className=\"volr:space-y-3\">\n <div className=\"volr:border volr:rounded-lg volr:p-3 volr-bg-secondary volr-border\">\n <div className=\"volr:flex volr:items-center volr:justify-center\">\n <div className=\"volr:h-4 volr:w-48 volr:rounded volr-bg-tertiary\" />\n </div>\n </div>\n </div>\n\n {/* Other token prompt skeleton */}\n <div className=\"volr:text-center volr:pt-3 volr:border-t volr:mt-3 volr-border\">\n <div className=\"volr:h-3 volr:w-44 volr:rounded volr:mx-auto volr-bg-secondary\" />\n </div>\n </div>\n );\n};\n\n","import { useCallback, useEffect, useState } from \"react\";\nimport { useI18n } from \"@/i18n/context\";\nimport {\n useDepositListener,\n useVolrContext,\n useInternalAuth,\n createGetNetworkInfo,\n type Erc20Token,\n} from \"@volr/react\";\nimport { CopyButton } from \"@/components/materials/CopyButton\";\nimport { TextLinkButton } from \"@/components/materials/TextLinkButton\";\nimport { OtherTokenModal } from \"./OtherTokenModal\";\nimport { DepositQRStatusOverlay, DepositCompletedToast } from \"../components\";\n\ninterface DepositQRViewProps {\n chainId: number;\n asset: \"native\" | Erc20Token;\n address: `0x${string}`;\n onBack?: () => void;\n}\n\ninterface DepositToastData {\n previousBalance: bigint;\n newBalance: bigint;\n delta: bigint;\n}\n\nexport function DepositQRView(props: DepositQRViewProps) {\n const { t } = useI18n();\n const { config } = useVolrContext();\n const { client } = useInternalAuth();\n const [chainName, setChainName] = useState<string | null>(null);\n const [showOtherTokenModal, setShowOtherTokenModal] = useState(false);\n const [showToast, setShowToast] = useState(false);\n const [toastData, setToastData] = useState<DepositToastData | null>(null);\n\n // Simple EIP-681 address string (no amount)\n const eip681 = `ethereum:${props.address}`;\n\n const status = useDepositListener({\n chainId: props.chainId,\n asset:\n props.asset === \"native\"\n ? { kind: \"native\" }\n : {\n kind: \"erc20\",\n token: {\n address: props.asset.address,\n decimals: props.asset.decimals,\n },\n },\n address: props.address,\n });\n\n // Show toast when deposit is detected - capture data so toast persists\n useEffect(() => {\n if (status.state === \"detected\") {\n setToastData({\n previousBalance: status.previousBalance,\n newBalance: status.newBalance,\n delta: status.delta,\n });\n setShowToast(true);\n }\n }, [status]);\n\n // Get network info resolver\n const getNetworkInfo = useCallback(\n createGetNetworkInfo({ client, rpcOverrides: config.rpcOverrides }),\n [client, config.rpcOverrides]\n );\n\n // Load chain name\n useEffect(() => {\n let cancelled = false;\n\n const loadChainName = async () => {\n try {\n const info = await getNetworkInfo(props.chainId, false);\n if (!cancelled) {\n setChainName(info.name);\n }\n } catch (error) {\n if (!cancelled) {\n // Fallback to chain ID if error\n setChainName(`Chain ${props.chainId}`);\n }\n }\n };\n\n loadChainName();\n\n return () => {\n cancelled = true;\n };\n }, [getNetworkInfo, props.chainId]);\n\n const tokenSymbol = props.asset === \"native\" ? \"ETH\" : props.asset.symbol;\n const displayChainName = chainName || `Chain ${props.chainId}`;\n const decimals = props.asset === \"native\" ? 18 : props.asset.decimals;\n\n return (\n <div className=\"volr:relative\">\n {/* Header */}\n <div className=\"volr:mb-4\">\n <p className=\"volr:text-xl volr:font-semibold volr:mb-2\">\n {t(\"deposit.qrTitle\")}\n </p>\n\n {/* Token info badge */}\n <div className=\"volr:inline-flex volr:items-center volr:gap-2 volr:px-3 volr:py-1.5 volr:rounded-lg volr-bg-secondary\">\n <span className=\"volr:text-sm volr:font-medium\">\n {tokenSymbol}\n </span>\n <span className=\"volr-text-muted\">•</span>\n <span className=\"volr:text-sm volr-text-secondary\">\n {displayChainName}\n </span>\n </div>\n </div>\n\n {/* QR Code - modern style */}\n <div className=\"volr:flex volr:justify-center volr:mb-3\">\n <div className=\"volr:relative\">\n <div className=\"volr:relative volr:rounded-xl volr:p-4 volr:shadow-sm volr:border volr:z-10 volr:bg-white volr-border\">\n <img\n alt=\"Deposit QR\"\n width={200}\n height={200}\n src={`https://api.qrserver.com/v1/create-qr-code/?size=200x200&data=${encodeURIComponent(\n eip681\n )}`}\n className=\"volr:rounded-md volr:relative volr:z-10\"\n />\n </div>\n\n <DepositQRStatusOverlay status={status.state} />\n </div>\n </div>\n\n {/* Status indicator - show same UI for idle and listening */}\n {(status.state === \"listening\" || status.state === \"idle\") && (\n <div className=\"volr:flex volr:items-center volr:justify-center volr:gap-2 volr:mb-3\">\n <div className=\"volr:w-1.5 volr:h-1.5 volr:rounded-full volr:animate-pulse volr-text-secondary\" style={{ backgroundColor: 'currentColor' }} />\n <span className=\"volr:text-xs volr-text-secondary\">\n {t(\"deposit.listening\")}\n </span>\n </div>\n )}\n\n {status.state === \"error\" && (\n <div className=\"volr:text-xs volr:text-center volr:mb-3 volr-error\">\n Error: {status.message}\n </div>\n )}\n\n {/* Address section */}\n <div className=\"volr:space-y-3\">\n <div>\n <div className=\"volr:relative volr:border volr:rounded-lg volr:p-3 volr:transition-all volr-bg-secondary volr-border volr-hover\">\n <div className=\"volr:flex volr:items-center volr:justify-between volr:gap-3\">\n <p className=\"volr:font-mono volr:text-xs volr:font-medium volr:flex-1 volr:text-center\">\n {`${props.address.slice(0, 10)}...${props.address.slice(-8)}`}\n </p>\n <CopyButton\n text={props.address}\n className=\"volr:shrink-0 volr:absolute volr:right-2\"\n />\n </div>\n </div>\n </div>\n\n {/* Error message - separate and subtle */}\n {status.state === \"error\" && (\n <div className=\"volr:text-xs volr:text-center volr:mb-4 volr-error\">\n {status.message}\n </div>\n )}\n </div>\n\n {/* Other token prompt */}\n <div className=\"volr:text-center volr:pt-3 volr:border-t volr-border\">\n <span className=\"volr:text-xs volr-text-secondary\">\n {t(\"deposit.noToken\")}{\" \"}\n <TextLinkButton\n onClick={() => setShowOtherTokenModal(true)}\n showArrow\n >\n {t(\"deposit.getOtherToken\")}\n </TextLinkButton>\n </span>\n </div>\n\n {/* Other Token Modal */}\n <OtherTokenModal\n open={showOtherTokenModal}\n onOpenChange={setShowOtherTokenModal}\n />\n\n {/* Deposit Completed Toast - persists until user closes it */}\n {showToast && toastData && (\n <DepositCompletedToast\n onClose={() => {\n setShowToast(false);\n setToastData(null);\n }}\n previousBalance={toastData.previousBalance}\n newBalance={toastData.newBalance}\n delta={toastData.delta}\n decimals={decimals}\n symbol={tokenSymbol}\n />\n )}\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport { Modal, ModalHeader } from \"@/components/materials/modal\";\nimport {\n useVolrContext,\n useInternalAuth,\n type DepositAsset,\n} from \"@volr/react\";\nimport { AssetSelectView } from \"./views/AssetSelectView\";\nimport { DepositQRView } from \"./views/DepositQRView\";\nimport { DepositSkeleton } from \"./components\";\nimport type { ModalAsset } from \"@/hooks/useVolrModal\";\n\nexport interface DepositModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n asset?: ModalAsset | null;\n}\n\ninterface DepositModalBodyProps {\n isLoading: boolean;\n error: string | null;\n depositAssets: DepositAsset[];\n evmAddress: `0x${string}` | undefined;\n selectedIdx: number;\n onSelectIdx: (idx: number) => void;\n}\n\nfunction DepositModalBody({\n isLoading,\n error,\n depositAssets,\n evmAddress,\n selectedIdx,\n onSelectIdx,\n}: DepositModalBodyProps) {\n // Show skeleton during loading\n if (isLoading) return <DepositSkeleton />;\n\n // Show error with skeleton background\n if (error) {\n return (\n <div className=\"volr:relative\">\n <DepositSkeleton />\n <div className=\"volr:absolute volr:inset-0 volr:flex volr:items-center volr:justify-center volr-surface\" style={{ opacity: 0.9 }}>\n <p className=\"volr:text-sm volr:text-center volr:px-4 volr-error\">\n {error}\n </p>\n </div>\n </div>\n );\n }\n\n // Show \"no assets\" error with skeleton background\n if (depositAssets.length === 0) {\n return (\n <div className=\"volr:relative\">\n <DepositSkeleton />\n <div className=\"volr:absolute volr:inset-0 volr:flex volr:items-center volr:justify-center volr-surface\" style={{ opacity: 0.9 }}>\n <p className=\"volr:text-sm volr:text-center volr:px-4 volr-text-secondary\">\n No payment token configured. Please contact the app developer.\n </p>\n </div>\n </div>\n );\n }\n\n // Show \"wallet not ready\" error with skeleton background\n if (!evmAddress) {\n return (\n <div className=\"volr:relative\">\n <DepositSkeleton />\n <div className=\"volr:absolute volr:inset-0 volr:flex volr:items-center volr:justify-center volr-surface\" style={{ opacity: 0.9 }}>\n <p className=\"volr:text-sm volr:text-center volr:px-4 volr-text-secondary\">\n Wallet address is not ready. Please finish wallet setup first.\n </p>\n </div>\n </div>\n );\n }\n\n // Single asset: show QR directly\n if (depositAssets.length === 1) {\n return (\n <DepositQRView\n chainId={depositAssets[0].chainId}\n asset={depositAssets[0].token}\n address={evmAddress}\n onBack={undefined}\n />\n );\n }\n\n // Multiple assets: show selector or selected QR\n if (selectedIdx === -1) {\n return (\n <AssetSelectView\n assets={depositAssets}\n onSelect={(idx) => onSelectIdx(idx)}\n />\n );\n }\n\n const selected = depositAssets[selectedIdx];\n return (\n <DepositQRView\n chainId={selected.chainId}\n asset={selected.token}\n address={evmAddress}\n onBack={() => onSelectIdx(-1)}\n />\n );\n}\n\nexport const DepositModal: React.FC<DepositModalProps> = ({\n open,\n onOpenChange,\n asset,\n}) => {\n const { user } = useVolrContext();\n const { client } = useInternalAuth();\n\n const [depositAssets, setDepositAssets] = useState<DepositAsset[]>([]);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [selectedIdx, setSelectedIdx] = useState<number>(-1);\n\n // Fetch deposit assets from branding API\n useEffect(() => {\n if (!open) return;\n\n setIsLoading(true);\n setError(null);\n\n client\n .get<{ depositAssets: DepositAsset[] }>(\"/auth/branding\")\n .then((response) => {\n setDepositAssets(response.depositAssets ?? []);\n })\n .catch((err) => {\n console.error(\"Failed to fetch deposit assets:\", err);\n setError(\"Failed to load deposit options\");\n })\n .finally(() => {\n setIsLoading(false);\n });\n }, [open, client]);\n\n // Find matching asset index if asset prop is provided\n const findAssetIndex = (\n targetAsset: ModalAsset | null | undefined\n ): number => {\n if (!targetAsset) return -1;\n return depositAssets.findIndex(\n (a) =>\n a.chainId === targetAsset.chainId &&\n (a.token === \"native\"\n ? targetAsset.symbol.toUpperCase() === \"ETH\"\n : a.token.symbol.toUpperCase() === targetAsset.symbol.toUpperCase())\n );\n };\n\n const getInitialIndex = (): number => {\n if (asset) {\n const idx = findAssetIndex(asset);\n if (idx >= 0) return idx;\n }\n if (depositAssets.length === 1) return 0;\n return -1;\n };\n\n // Update selected index when assets are loaded or asset prop changes\n useEffect(() => {\n if (open && !isLoading && depositAssets.length > 0) {\n setSelectedIdx(getInitialIndex());\n }\n }, [open, isLoading, depositAssets.length, asset]);\n\n // Reset selection when modal closes\n useEffect(() => {\n if (!open) {\n setSelectedIdx(-1);\n }\n }, [open]);\n\n const hasAssets = depositAssets.length > 0;\n const showQR = hasAssets && user?.evmAddress && selectedIdx >= 0;\n\n return (\n <Modal open={open} onOpenChange={onOpenChange}>\n <ModalHeader\n back={showQR && depositAssets.length > 1}\n onBack={showQR ? () => setSelectedIdx(-1) : undefined}\n onClose={() => onOpenChange(false)}\n />\n <DepositModalBody\n isLoading={isLoading}\n error={error}\n depositAssets={depositAssets}\n evmAddress={user?.evmAddress}\n selectedIdx={selectedIdx}\n onSelectIdx={setSelectedIdx}\n />\n </Modal>\n );\n};\n","import React, { useState, useEffect, useContext } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n VolrProvider,\n type VolrConfig,\n useVolrContext,\n useVolrAuthCallback,\n type KeyStorageType,\n} from \"@volr/react\";\nimport { I18nProvider } from \"@/i18n/context\";\nimport { VolrModalProvider, useVolrModal } from \"@/hooks/useVolrModal\";\nimport { Modal } from \"@/components/materials/modal\";\nimport { PasskeyEnrollView } from \"@/components/features/passkey/PasskeyEnrollView\";\nimport { MpcConnectView } from \"@/components/features/MpcConnectView\";\nimport { AccountModal } from \"@/components/features/account\";\nimport { DepositModal } from \"@/components/features/deposit\";\nimport type { BrandingConfig } from \"@/types/signin\";\n\n/**\n * Theme options for Volr SDK\n * - 'light': Always use light mode\n * - 'dark': Always use dark mode\n * - 'system': Follow user's system preference (prefers-color-scheme)\n */\nexport type VolrTheme = \"light\" | \"dark\" | \"system\";\n\n/**\n * UI 전용 설정을 포함한 Volr UI 구성 객체\n * - VolrConfig(코어 설정)를 확장하고\n * - UI/온보딩 관련 옵션을 모두 하나의 config 아래로 모읍니다.\n */\nexport interface VolrUIConfig extends VolrConfig {\n appName: string;\n accentColor?: string;\n /** Theme mode: 'light' | 'dark' | 'system'. Default: 'light' */\n theme?: VolrTheme;\n enabledLoginMethods?: (\"email\" | \"social\" | \"siwe\")[];\n // socialProviders?: (\"google\" | \"twitter\" | \"apple\")[];\n socialProviders?: (\"google\" | \"twitter\")[];\n branding?: BrandingConfig;\n keyStorageType?: KeyStorageType;\n}\n\nexport interface VolrUIProviderProps {\n config: VolrUIConfig;\n children: React.ReactNode;\n}\n\nconst VolrUIContext = React.createContext<{\n accentColor: string;\n appName: string;\n theme: VolrTheme;\n enabledLoginMethods?: (\"email\" | \"social\" | \"siwe\")[];\n socialProviders?: (\"google\" | \"twitter\" | \"apple\")[];\n branding?: BrandingConfig;\n keyStorageType?: KeyStorageType;\n} | null>(null);\n\nexport const useVolrUI = () => {\n const context = useContext(VolrUIContext);\n if (!context) {\n throw new Error(\"useVolrUI must be used within VolrUIProvider\");\n }\n return context;\n};\n\n/**\n * Optional version of useVolrUI that returns null instead of throwing\n * Useful for components that may be used outside VolrUIProvider\n */\nexport const useVolrUIOptional = () => {\n return useContext(VolrUIContext);\n};\n\n/**\n * Onboarding flow component\n * Handles provider enrollment based on config\n */\nfunction OnboardingFlow({\n keyStorageType,\n onComplete,\n}: {\n keyStorageType: KeyStorageType;\n onComplete: () => void;\n}) {\n const { logout } = useVolrContext();\n\n const handleEnrollComplete = () => {\n onComplete();\n };\n\n const handleEnrollError = (_err: Error) => {\n // On error, stay on screen to allow retry\n };\n\n const handleLogout = async () => {\n try {\n await logout();\n onComplete();\n } catch (error) {\n // Error handling is done by PasskeyEnrollView\n }\n };\n\n if (keyStorageType === \"passkey\") {\n return (\n <PasskeyEnrollView\n onComplete={handleEnrollComplete}\n onError={handleEnrollError}\n onLogout={handleLogout}\n />\n );\n }\n\n if (keyStorageType === \"mpc\") {\n return (\n <MpcConnectView\n onComplete={handleEnrollComplete}\n onError={handleEnrollError}\n />\n );\n }\n\n return null;\n}\n\nexport const VolrUIProvider: React.FC<VolrUIProviderProps> = ({\n config,\n children,\n}) => {\n const {\n appName,\n accentColor = \"#303030\",\n theme = \"light\",\n enabledLoginMethods = [\"email\", \"social\", \"siwe\"],\n socialProviders = [\"google\", \"twitter\"],\n branding,\n keyStorageType = \"passkey\",\n } = config;\n\n const providerPolicy = config.providerPolicy ?? {\n enforceOnFirstLogin: true,\n };\n\n const [showOnboarding, setShowOnboarding] = useState(false);\n const [keyStorageTypeError, setKeyStorageTypeError] = useState<string | null>(\n null\n );\n\n useEffect(() => {\n if (providerPolicy.enforceOnFirstLogin !== false && !keyStorageType) {\n const errorMessage =\n \"keyStorageType must be specified in VolrUIProvider props. Please set keyStorageType prop in VolrUIProvider.\";\n console.error(errorMessage);\n setKeyStorageTypeError(errorMessage);\n } else {\n setKeyStorageTypeError(null);\n }\n }, [keyStorageType, providerPolicy.enforceOnFirstLogin]);\n\n if (keyStorageTypeError) {\n return (\n <Modal open={true} onOpenChange={() => {}}>\n <div className=\"volr:max-w-md volr:mx-auto\">\n <p className=\"volr:text-lg volr:font-semibold volr:mb-5 volr-error\">\n Configuration Error\n </p>\n <div className=\"volr:text-sm volr:mb-6 volr:leading-relaxed volr-text-secondary\">\n {keyStorageTypeError}\n </div>\n </div>\n </Modal>\n );\n }\n\n return (\n <VolrProvider config={config}>\n <I18nProvider>\n <VolrUIContext.Provider\n value={{\n accentColor,\n appName,\n theme,\n enabledLoginMethods,\n socialProviders,\n branding,\n keyStorageType,\n }}\n >\n <VolrModalProvider>\n <OAuthCallbackHandler\n onShowOnboarding={() => setShowOnboarding(true)}\n />\n <OnboardingChecker\n keyStorageType={keyStorageType}\n enforceSelection={providerPolicy.enforceOnFirstLogin ?? true}\n onShowOnboarding={() => setShowOnboarding(true)}\n onHideOnboarding={() => setShowOnboarding(false)}\n />\n <AccountModalPortal />\n <DepositModalPortal />\n {showOnboarding && keyStorageType && (\n <Modal\n open={true}\n onOpenChange={() => setShowOnboarding(false)}\n onPointerDownOutside={(e: React.PointerEvent) =>\n e.preventDefault()\n }\n >\n <div className=\"max-w-md mx-auto\">\n <p className=\"volr:sr-only\">Onboarding</p>\n <OnboardingFlow\n keyStorageType={keyStorageType}\n onComplete={() => setShowOnboarding(false)}\n />\n </div>\n </Modal>\n )}\n {children}\n </VolrModalProvider>\n </VolrUIContext.Provider>\n </I18nProvider>\n </VolrProvider>\n );\n};\n\n/**\n * Account Modal via portal (handles both login and account info)\n */\nfunction AccountModalPortal() {\n const { isOpen, mode, close } = useVolrModal();\n const [portalRoot, setPortalRoot] = useState<HTMLElement | null>(null);\n const [error, setError] = useState<Error | null>(null);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n let root = document.getElementById(\"volr-modal-root\");\n if (!root) {\n root = document.createElement(\"div\");\n root.id = \"volr-modal-root\";\n document.body.appendChild(root);\n }\n setPortalRoot(root);\n\n return () => {\n if (root && root.childNodes.length === 0) {\n root.remove();\n }\n };\n }, []);\n\n const handleClose = () => {\n setError(null);\n close();\n };\n\n const handleError = (err: Error) => {\n console.error(\"[AccountModal] Error:\", err);\n setError(err);\n };\n\n if (!portalRoot) return null;\n\n return createPortal(\n <>\n <AccountModal\n isOpen={isOpen && mode === \"account\"}\n onClose={handleClose}\n onError={handleError}\n />\n {error && (\n <div\n style={{\n position: \"fixed\",\n bottom: \"20px\",\n right: \"20px\",\n backgroundColor: \"#fef2f2\",\n border: \"1px solid #fecaca\",\n borderRadius: \"8px\",\n padding: \"12px 16px\",\n maxWidth: \"400px\",\n boxShadow: \"0 10px 15px -3px rgba(0, 0, 0, 0.1)\",\n zIndex: 10001,\n }}\n >\n <div style={{ fontSize: \"14px\", color: \"#991b1b\" }}>\n {error.message}\n </div>\n </div>\n )}\n </>,\n portalRoot\n );\n}\n\n/**\n * Deposit Modal via portal\n * If user is not logged in, shows login first then redirects to deposit\n */\nfunction DepositModalPortal() {\n const { isOpen, mode, asset, close } = useVolrModal();\n const { user } = useVolrContext();\n const [portalRoot, setPortalRoot] = useState<HTMLElement | null>(null);\n const [showLogin, setShowLogin] = useState(false);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n let root = document.getElementById(\"volr-modal-root\");\n if (!root) {\n root = document.createElement(\"div\");\n root.id = \"volr-modal-root\";\n document.body.appendChild(root);\n }\n setPortalRoot(root);\n return () => {\n if (root && root.childNodes.length === 0) {\n root.remove();\n }\n };\n }, []);\n\n // When deposit mode is opened without login, show login first\n useEffect(() => {\n if (isOpen && mode === \"deposit\" && !user) {\n setShowLogin(true);\n } else {\n setShowLogin(false);\n }\n }, [isOpen, mode, user]);\n\n // After login success, user state will update and showLogin will become false\n // This will automatically show the deposit modal\n\n if (!portalRoot) return null;\n\n // Show login modal if user needs to log in first\n if (showLogin) {\n return createPortal(\n <AccountModal\n isOpen={isOpen && mode === \"deposit\"}\n onClose={close}\n />,\n portalRoot\n );\n }\n\n return createPortal(\n <DepositModal\n open={isOpen && mode === \"deposit\"}\n onOpenChange={(open) => !open && close()}\n asset={asset}\n />,\n portalRoot\n );\n}\n\n/**\n * OAuth Callback Handler\n * Automatically processes OAuth callback when URL contains 'code' parameter\n */\nfunction OAuthCallbackHandler({\n onShowOnboarding,\n}: {\n onShowOnboarding: () => void;\n}) {\n const [hasCode, setHasCode] = useState(false);\n\n // Check if URL has OAuth callback code\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n const params = new URLSearchParams(window.location.search);\n const code = params.get(\"code\");\n // Only process if code looks like Volr auth code\n if (code?.startsWith(\"volr_auth_\")) {\n setHasCode(true);\n }\n }, []);\n\n // Use callback hook only when we have a code\n const { isLoading, error } = useVolrAuthCallback({\n onSuccess: (resultUser) => {\n console.log(\"[OAuthCallbackHandler] Login successful:\", resultUser.email);\n // If user doesn't have keyStorageType, show onboarding\n if (!resultUser.keyStorageType) {\n onShowOnboarding();\n }\n },\n onError: (err) => {\n console.error(\"[OAuthCallbackHandler] Login failed:\", err);\n },\n });\n\n // Don't render anything if no code in URL\n if (!hasCode) return null;\n\n // Show loading state while processing\n if (isLoading) {\n return (\n <Modal open={true} onOpenChange={() => {}}>\n <div className=\"volr:max-w-md volr:mx-auto volr:text-center volr:py-8\">\n <div className=\"volr:animate-spin volr:w-8 volr:h-8 volr:border-2 volr-border-strong volr:rounded-full volr:mx-auto volr:mb-4\" style={{ borderTopColor: 'var(--volr-text)' }} />\n <p className=\"volr-text-secondary\">Completing login...</p>\n </div>\n </Modal>\n );\n }\n\n // Show error if any\n if (error) {\n return (\n <Modal open={true} onOpenChange={() => setHasCode(false)}>\n <div className=\"volr:max-w-md volr:mx-auto volr:text-center volr:py-8\">\n <p className=\"volr:font-medium volr:mb-2 volr-error\">Login Failed</p>\n <p className=\"volr:text-sm volr-text-secondary\">{error}</p>\n </div>\n </Modal>\n );\n }\n\n return null;\n}\n\n/**\n * Component that checks if onboarding is needed\n * Note: Only shows onboarding on initial app load, NOT after modal interactions.\n * AccountModal handles passkey enrollment after login, so OnboardingChecker\n * should not interfere when modals are used.\n */\nfunction OnboardingChecker({\n keyStorageType,\n enforceSelection,\n onShowOnboarding,\n onHideOnboarding,\n}: {\n keyStorageType: KeyStorageType;\n enforceSelection: boolean;\n onShowOnboarding: () => void;\n onHideOnboarding: () => void;\n}) {\n const { user, provider, isLoading } = useVolrContext();\n const { isOpen: isModalOpen } = useVolrModal();\n const modalWasOpened = React.useRef(false);\n\n // Track if modal was ever opened\n useEffect(() => {\n if (isModalOpen) {\n modalWasOpened.current = true;\n }\n }, [isModalOpen]);\n\n useEffect(() => {\n if (isLoading) {\n return;\n }\n\n // Don't show onboarding while any modal is open\n if (isModalOpen) {\n onHideOnboarding();\n return;\n }\n\n // Don't show onboarding if modal was opened and then closed\n // AccountModal already handles passkey enrollment after login\n if (modalWasOpened.current) {\n onHideOnboarding();\n return;\n }\n\n // User already has keyStorageType - no onboarding needed\n if (user?.keyStorageType) {\n onHideOnboarding();\n return;\n }\n\n // Provider is already set - no onboarding needed\n if (provider) {\n onHideOnboarding();\n return;\n }\n\n // Only show onboarding on initial load when user exists without keyStorageType\n if (user && enforceSelection) {\n if (!keyStorageType) {\n console.error(\n \"keyStorageType must be specified in VolrUIProvider props.\"\n );\n return;\n }\n onShowOnboarding();\n }\n }, [\n user,\n provider,\n isLoading,\n isModalOpen,\n enforceSelection,\n keyStorageType,\n onShowOnboarding,\n onHideOnboarding,\n ]);\n\n return null;\n}\n","/**\n * Network switching utilities for external wallets\n */\n\nimport { useCallback } from \"react\";\nimport { useInternalAuth } from \"@volr/react\";\n\n/**\n * Network wallet configuration from backend API\n * (when includeWalletConfig=true)\n */\nexport interface NetworkWalletConfig {\n chainId: number;\n name: string;\n nativeCurrency?: {\n name: string;\n symbol: string;\n decimals: number;\n };\n rpcUrl?: string;\n blockExplorerUrl?: string | null;\n}\n\n/**\n * Hook to switch to a different network\n * Handles both switching and adding network if not present\n * Fetches network configuration from backend DB\n */\nexport function useSwitchNetwork() {\n const { client } = useInternalAuth();\n\n return useCallback(\n async (chainId: number): Promise<void> => {\n if (typeof window === \"undefined\" || !(window as any).ethereum) {\n throw new Error(\"No wallet found\");\n }\n\n const ethereum = (window as any).ethereum;\n const chainIdHex = `0x${chainId.toString(16)}`;\n\n try {\n // Try to switch to the network\n await ethereum.request({\n method: \"wallet_switchEthereumChain\",\n params: [{ chainId: chainIdHex }],\n });\n } catch (switchError: any) {\n // This error code indicates that the chain has not been added to the wallet\n if (switchError.code === 4902) {\n try {\n // Fetch network configuration from backend DB\n const response = await client.get<NetworkWalletConfig>(\n `/networks/${chainId}?includeWalletConfig=true&includeRpcUrl=true`\n );\n\n if (!response.rpcUrl) {\n throw new Error(`RPC URL not available for chainId ${chainId}`);\n }\n\n if (!response.nativeCurrency) {\n throw new Error(`Native currency configuration not available for chainId ${chainId}`);\n }\n\n // Add the network\n await ethereum.request({\n method: \"wallet_addEthereumChain\",\n params: [\n {\n chainId: chainIdHex,\n chainName: response.name,\n nativeCurrency: response.nativeCurrency,\n rpcUrls: [response.rpcUrl],\n blockExplorerUrls: response.blockExplorerUrl\n ? [response.blockExplorerUrl]\n : undefined,\n },\n ],\n });\n } catch (addError) {\n throw new Error(\n `Failed to add network: ${addError instanceof Error ? addError.message : \"Unknown error\"}`\n );\n }\n } else {\n throw new Error(\n `Failed to switch network: ${switchError.message || \"Unknown error\"}`\n );\n }\n }\n },\n [client]\n );\n}\n\n/**\n * Get current chain ID from wallet\n */\nexport async function getCurrentChainId(): Promise<number> {\n if (typeof window === \"undefined\" || !(window as any).ethereum) {\n throw new Error(\"No wallet found\");\n }\n\n const chainIdHex = await (window as any).ethereum.request({\n method: \"eth_chainId\",\n });\n \n return parseInt(chainIdHex, 16);\n}\n\n\n"]}