@volr/react-ui 0.1.97 → 0.1.98

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../node_modules/viem/constants/abis.ts","../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","../../node_modules/viem/index.ts","../src/hooks/usePaymentModalState.ts","../src/components/features/payment/components/PaymentSkeleton.tsx","../src/components/features/payment/components/BalanceDisplay.tsx","../src/components/features/payment/components/ItemDisplay.tsx","../src/components/features/payment/views/PaymentInfoView.tsx","../src/components/features/payment/views/PaymentProcessingView.tsx","../src/components/features/payment/views/PaymentResultView.tsx","../src/components/features/payment/PaymentModal.tsx","../src/providers/VolrUIProvider.tsx","../src/utils/network.ts","../src/hooks/useVolrPay.ts"],"names":["translations","value","createContext","useContext","useState","jsx","useEffect","useRef","useCallback","isMobile","jsxs","React","Fragment","useVolrContext","useVolrLogin","handleLogout","useInternalAuth","createPortal","useVolrPaymentApi"],"mappings":"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","file":"index.js","sourcesContent":["/* [Multicall3](https://github.com/mds1/multicall) */\nexport const multicall3Abi = [\n {\n inputs: [\n {\n components: [\n {\n name: 'target',\n type: 'address',\n },\n {\n name: 'allowFailure',\n type: 'bool',\n },\n {\n name: 'callData',\n type: 'bytes',\n },\n ],\n name: 'calls',\n type: 'tuple[]',\n },\n ],\n name: 'aggregate3',\n outputs: [\n {\n components: [\n {\n name: 'success',\n type: 'bool',\n },\n {\n name: 'returnData',\n type: 'bytes',\n },\n ],\n name: 'returnData',\n type: 'tuple[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'getCurrentBlockTimestamp',\n outputs: [\n {\n internalType: 'uint256',\n name: 'timestamp',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n] as const\n\nexport const batchGatewayAbi = [\n {\n name: 'query',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n {\n type: 'tuple[]',\n name: 'queries',\n components: [\n {\n type: 'address',\n name: 'sender',\n },\n {\n type: 'string[]',\n name: 'urls',\n },\n {\n type: 'bytes',\n name: 'data',\n },\n ],\n },\n ],\n outputs: [\n {\n type: 'bool[]',\n name: 'failures',\n },\n {\n type: 'bytes[]',\n name: 'responses',\n },\n ],\n },\n {\n name: 'HttpError',\n type: 'error',\n inputs: [\n {\n type: 'uint16',\n name: 'status',\n },\n {\n type: 'string',\n name: 'message',\n },\n ],\n },\n] as const\n\nconst universalResolverErrors = [\n {\n inputs: [\n {\n name: 'dns',\n type: 'bytes',\n },\n ],\n name: 'DNSDecodingFailed',\n type: 'error',\n },\n {\n inputs: [\n {\n name: 'ens',\n type: 'string',\n },\n ],\n name: 'DNSEncodingFailed',\n type: 'error',\n },\n {\n inputs: [],\n name: 'EmptyAddress',\n type: 'error',\n },\n {\n inputs: [\n {\n name: 'status',\n type: 'uint16',\n },\n {\n name: 'message',\n type: 'string',\n },\n ],\n name: 'HttpError',\n type: 'error',\n },\n {\n inputs: [],\n name: 'InvalidBatchGatewayResponse',\n type: 'error',\n },\n {\n inputs: [\n {\n name: 'errorData',\n type: 'bytes',\n },\n ],\n name: 'ResolverError',\n type: 'error',\n },\n {\n inputs: [\n {\n name: 'name',\n type: 'bytes',\n },\n {\n name: 'resolver',\n type: 'address',\n },\n ],\n name: 'ResolverNotContract',\n type: 'error',\n },\n {\n inputs: [\n {\n name: 'name',\n type: 'bytes',\n },\n ],\n name: 'ResolverNotFound',\n type: 'error',\n },\n {\n inputs: [\n {\n name: 'primary',\n type: 'string',\n },\n {\n name: 'primaryAddress',\n type: 'bytes',\n },\n ],\n name: 'ReverseAddressMismatch',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'bytes4',\n name: 'selector',\n type: 'bytes4',\n },\n ],\n name: 'UnsupportedResolverProfile',\n type: 'error',\n },\n] as const\n\nexport const universalResolverResolveAbi = [\n ...universalResolverErrors,\n {\n name: 'resolveWithGateways',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'name', type: 'bytes' },\n { name: 'data', type: 'bytes' },\n { name: 'gateways', type: 'string[]' },\n ],\n outputs: [\n { name: '', type: 'bytes' },\n { name: 'address', type: 'address' },\n ],\n },\n] as const\n\nexport const universalResolverReverseAbi = [\n ...universalResolverErrors,\n {\n name: 'reverseWithGateways',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { type: 'bytes', name: 'reverseName' },\n { type: 'uint256', name: 'coinType' },\n { type: 'string[]', name: 'gateways' },\n ],\n outputs: [\n { type: 'string', name: 'resolvedName' },\n { type: 'address', name: 'resolver' },\n { type: 'address', name: 'reverseResolver' },\n ],\n },\n] as const\n\nexport const textResolverAbi = [\n {\n name: 'text',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'name', type: 'bytes32' },\n { name: 'key', type: 'string' },\n ],\n outputs: [{ name: '', type: 'string' }],\n },\n] as const\n\nexport const addressResolverAbi = [\n {\n name: 'addr',\n type: 'function',\n stateMutability: 'view',\n inputs: [{ name: 'name', type: 'bytes32' }],\n outputs: [{ name: '', type: 'address' }],\n },\n {\n name: 'addr',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'name', type: 'bytes32' },\n { name: 'coinType', type: 'uint256' },\n ],\n outputs: [{ name: '', type: 'bytes' }],\n },\n] as const\n\n// ERC-1271\n// isValidSignature(bytes32 hash, bytes signature) → bytes4 magicValue\n/** @internal */\nexport const erc1271Abi = [\n {\n name: 'isValidSignature',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'hash', type: 'bytes32' },\n { name: 'signature', type: 'bytes' },\n ],\n outputs: [{ name: '', type: 'bytes4' }],\n },\n] as const\n\n// ERC-6492 - universal deployless signature validator contract\n// constructor(address _signer, bytes32 _hash, bytes _signature) → bytes4 returnValue\n// returnValue is either 0x1 (valid) or 0x0 (invalid)\nexport const erc6492SignatureValidatorAbi = [\n {\n inputs: [\n {\n name: '_signer',\n type: 'address',\n },\n {\n name: '_hash',\n type: 'bytes32',\n },\n {\n name: '_signature',\n type: 'bytes',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'constructor',\n },\n {\n inputs: [\n {\n name: '_signer',\n type: 'address',\n },\n {\n name: '_hash',\n type: 'bytes32',\n },\n {\n name: '_signature',\n type: 'bytes',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n name: 'isValidSig',\n },\n] as const\n\n/** [ERC-20 Token Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-20) */\nexport const erc20Abi = [\n {\n type: 'event',\n name: 'Approval',\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'event',\n name: 'Transfer',\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'allowance',\n stateMutability: 'view',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'spender',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'approve',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'spender',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'balanceOf',\n stateMutability: 'view',\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'decimals',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint8',\n },\n ],\n },\n {\n type: 'function',\n name: 'name',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'symbol',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'totalSupply',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'transfer',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'transferFrom',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'sender',\n type: 'address',\n },\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n] as const\n\n/**\n * [bytes32-flavored ERC-20](https://docs.makerdao.com/smart-contract-modules/mkr-module#4.-gotchas-potential-source-of-user-error)\n * for tokens (ie. Maker) that use bytes32 instead of string.\n */\nexport const erc20Abi_bytes32 = [\n {\n type: 'event',\n name: 'Approval',\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'event',\n name: 'Transfer',\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'allowance',\n stateMutability: 'view',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'spender',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'approve',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'spender',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'balanceOf',\n stateMutability: 'view',\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'decimals',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint8',\n },\n ],\n },\n {\n type: 'function',\n name: 'name',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'bytes32',\n },\n ],\n },\n {\n type: 'function',\n name: 'symbol',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'bytes32',\n },\n ],\n },\n {\n type: 'function',\n name: 'totalSupply',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'transfer',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'transferFrom',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'sender',\n type: 'address',\n },\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n] as const\n\n/** [ERC-1155 Multi Token Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-1155) */\nexport const erc1155Abi = [\n {\n inputs: [\n {\n internalType: 'address',\n name: 'sender',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'balance',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'needed',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n name: 'ERC1155InsufficientBalance',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'approver',\n type: 'address',\n },\n ],\n name: 'ERC1155InvalidApprover',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'idsLength',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'valuesLength',\n type: 'uint256',\n },\n ],\n name: 'ERC1155InvalidArrayLength',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'operator',\n type: 'address',\n },\n ],\n name: 'ERC1155InvalidOperator',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'receiver',\n type: 'address',\n },\n ],\n name: 'ERC1155InvalidReceiver',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'sender',\n type: 'address',\n },\n ],\n name: 'ERC1155InvalidSender',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'operator',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'ERC1155MissingApprovalForAll',\n type: 'error',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'operator',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'bool',\n name: 'approved',\n type: 'bool',\n },\n ],\n name: 'ApprovalForAll',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'operator',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256[]',\n name: 'ids',\n type: 'uint256[]',\n },\n {\n indexed: false,\n internalType: 'uint256[]',\n name: 'values',\n type: 'uint256[]',\n },\n ],\n name: 'TransferBatch',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'operator',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'id',\n type: 'uint256',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'TransferSingle',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'string',\n name: 'value',\n type: 'string',\n },\n {\n indexed: true,\n internalType: 'uint256',\n name: 'id',\n type: 'uint256',\n },\n ],\n name: 'URI',\n type: 'event',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'id',\n type: 'uint256',\n },\n ],\n name: 'balanceOf',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address[]',\n name: 'accounts',\n type: 'address[]',\n },\n {\n internalType: 'uint256[]',\n name: 'ids',\n type: 'uint256[]',\n },\n ],\n name: 'balanceOfBatch',\n outputs: [\n {\n internalType: 'uint256[]',\n name: '',\n type: 'uint256[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'operator',\n type: 'address',\n },\n ],\n name: 'isApprovedForAll',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'from',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n internalType: 'uint256[]',\n name: 'ids',\n type: 'uint256[]',\n },\n {\n internalType: 'uint256[]',\n name: 'values',\n type: 'uint256[]',\n },\n {\n internalType: 'bytes',\n name: 'data',\n type: 'bytes',\n },\n ],\n name: 'safeBatchTransferFrom',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'from',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'id',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'value',\n type: 'uint256',\n },\n {\n internalType: 'bytes',\n name: 'data',\n type: 'bytes',\n },\n ],\n name: 'safeTransferFrom',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'operator',\n type: 'address',\n },\n {\n internalType: 'bool',\n name: 'approved',\n type: 'bool',\n },\n ],\n name: 'setApprovalForAll',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes4',\n name: 'interfaceId',\n type: 'bytes4',\n },\n ],\n name: 'supportsInterface',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n name: 'uri',\n outputs: [\n {\n internalType: 'string',\n name: '',\n type: 'string',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n] as const\n\n/** [ERC-721 Non-Fungible Token Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-721) */\nexport const erc721Abi = [\n {\n type: 'event',\n name: 'Approval',\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: true,\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'event',\n name: 'ApprovalForAll',\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'operator',\n type: 'address',\n },\n {\n indexed: false,\n name: 'approved',\n type: 'bool',\n },\n ],\n },\n {\n type: 'event',\n name: 'Transfer',\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: true,\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'approve',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'spender',\n type: 'address',\n },\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [],\n },\n {\n type: 'function',\n name: 'balanceOf',\n stateMutability: 'view',\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'getApproved',\n stateMutability: 'view',\n inputs: [\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'address',\n },\n ],\n },\n {\n type: 'function',\n name: 'isApprovedForAll',\n stateMutability: 'view',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'operator',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'name',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'ownerOf',\n stateMutability: 'view',\n inputs: [\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n name: 'owner',\n type: 'address',\n },\n ],\n },\n {\n type: 'function',\n name: 'safeTransferFrom',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'from',\n type: 'address',\n },\n {\n name: 'to',\n type: 'address',\n },\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [],\n },\n {\n type: 'function',\n name: 'safeTransferFrom',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'from',\n type: 'address',\n },\n {\n name: 'to',\n type: 'address',\n },\n {\n name: 'id',\n type: 'uint256',\n },\n {\n name: 'data',\n type: 'bytes',\n },\n ],\n outputs: [],\n },\n {\n type: 'function',\n name: 'setApprovalForAll',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'operator',\n type: 'address',\n },\n {\n name: 'approved',\n type: 'bool',\n },\n ],\n outputs: [],\n },\n {\n type: 'function',\n name: 'symbol',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'tokenByIndex',\n stateMutability: 'view',\n inputs: [\n {\n name: 'index',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'tokenByIndex',\n stateMutability: 'view',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'index',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'tokenURI',\n stateMutability: 'view',\n inputs: [\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'totalSupply',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'transferFrom',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'sender',\n type: 'address',\n },\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [],\n },\n] as const\n\n/** [ERC-4626 Tokenized Vaults Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-4626) */\nexport const erc4626Abi = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'Approval',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'sender',\n type: 'address',\n },\n {\n indexed: true,\n name: 'receiver',\n type: 'address',\n },\n {\n indexed: false,\n name: 'assets',\n type: 'uint256',\n },\n {\n indexed: false,\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'Deposit',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'Transfer',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'sender',\n type: 'address',\n },\n {\n indexed: true,\n name: 'receiver',\n type: 'address',\n },\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: false,\n name: 'assets',\n type: 'uint256',\n },\n {\n indexed: false,\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'Withdraw',\n type: 'event',\n },\n {\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'spender',\n type: 'address',\n },\n ],\n name: 'allowance',\n outputs: [\n {\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'spender',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'approve',\n outputs: [\n {\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'asset',\n outputs: [\n {\n name: 'assetTokenAddress',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n name: 'balanceOf',\n outputs: [\n {\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'convertToAssets',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n name: 'convertToShares',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n ],\n name: 'deposit',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'caller',\n type: 'address',\n },\n ],\n name: 'maxDeposit',\n outputs: [\n {\n name: 'maxAssets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'caller',\n type: 'address',\n },\n ],\n name: 'maxMint',\n outputs: [\n {\n name: 'maxShares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'maxRedeem',\n outputs: [\n {\n name: 'maxShares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'maxWithdraw',\n outputs: [\n {\n name: 'maxAssets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n ],\n name: 'mint',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n name: 'previewDeposit',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'previewMint',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'previewRedeem',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n name: 'previewWithdraw',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n {\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'redeem',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'totalAssets',\n outputs: [\n {\n name: 'totalManagedAssets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'totalSupply',\n outputs: [\n {\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'to',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'transfer',\n outputs: [\n {\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'from',\n type: 'address',\n },\n {\n name: 'to',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'transferFrom',\n outputs: [\n {\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n {\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'withdraw',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n] as const\n","/**\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 selectWallet: 'Select a wallet',\n noWalletsDetected: 'No wallets detected',\n useOtherWallet: 'Use another wallet',\n connectingTo: 'Connecting to {{wallet}}...',\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 generateUrl: 'Generate Sign URL',\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 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 selectWallet: '지갑을 선택하세요',\n noWalletsDetected: '감지된 지갑이 없습니다',\n useOtherWallet: '다른 지갑 이용하기',\n connectingTo: '{{wallet}} 연결 중...',\n mobileGuide: '지갑 앱에서 서명하기:',\n mobileStep1: '아래 서명 URL 복사',\n mobileStep2: '지갑 앱 열기 (MetaMask 등)',\n mobileStep3: '앱 브라우저에 URL 붙여넣고 서명',\n copyUrl: '서명 URL 복사',\n urlCopied: 'URL이 복사되었습니다! 지갑 앱 브라우저에 붙여넣기 하세요.',\n startSession: '지갑 앱에서 서명',\n generateUrl: '서명 URL 생성',\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\";\nimport type { PayOptions, PaymentResult } from \"@volr/react\";\n\nexport type ModalMode = \"account\" | \"deposit\" | \"payment\";\n\nexport interface ModalAsset {\n chainId: number;\n symbol: string;\n}\n\nexport interface PaymentModalOptions {\n payment: PaymentResult;\n options: PayOptions;\n onComplete?: (result: PaymentResult) => void;\n onProcessing?: (payment: PaymentResult & { txHash: string }) => void;\n onError?: (error: { code: string; message: string }) => void;\n onCancel?: () => void;\n}\n\nexport interface OpenModalOptions {\n mode?: ModalMode;\n asset?: ModalAsset;\n payment?: PaymentModalOptions;\n}\n\ninterface VolrModalContextValue {\n isOpen: boolean;\n mode: ModalMode;\n asset: ModalAsset | null;\n paymentOptions: PaymentModalOptions | 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 const [paymentOptions, setPaymentOptions] = useState<PaymentModalOptions | null>(null);\n\n const open = useCallback((options?: OpenModalOptions) => {\n setMode(options?.mode ?? \"account\");\n setAsset(options?.asset ?? null);\n setPaymentOptions(options?.payment ?? null);\n setIsOpen(true);\n }, []);\n\n const close = useCallback(() => {\n setIsOpen(false);\n setAsset(null);\n setPaymentOptions(null);\n }, []);\n\n return (\n <VolrModalContext.Provider value={{ isOpen, mode, asset, paymentOptions, 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-100:oklch(93.6% .032 17.717);--volr-color-red-200:oklch(88.5% .062 18.334);--volr-color-red-500:oklch(63.7% .237 25.331);--volr-color-red-600:oklch(57.7% .245 27.325);--volr-color-red-700:oklch(50.5% .213 27.518);--volr-color-green-100:oklch(96.2% .044 156.743);--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-100:oklch(96.8% .007 247.896);--volr-color-slate-200:oklch(92.9% .013 255.508);--volr-color-slate-300:oklch(86.9% .022 252.894);--volr-color-slate-400:oklch(70.4% .04 256.788);--volr-color-slate-500:oklch(55.4% .046 257.417);--volr-color-slate-600:oklch(44.6% .043 257.281);--volr-color-slate-900:oklch(20.8% .042 265.755);--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\\\\:line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.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-5{height:calc(var(--volr-spacing)*5)}.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-12{height:calc(var(--volr-spacing)*12)}.volr\\\\:h-14{height:calc(var(--volr-spacing)*14)}.volr\\\\:h-16{height:calc(var(--volr-spacing)*16)}.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-4{width:calc(var(--volr-spacing)*4)}.volr\\\\:w-5{width:calc(var(--volr-spacing)*5)}.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-16{width:calc(var(--volr-spacing)*16)}.volr\\\\:w-20{width:calc(var(--volr-spacing)*20)}.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\\\\:flex-shrink-0,.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)))}:where(.volr\\\\:space-y-6>:not(:last-child)){--volr-tw-space-y-reverse:0;margin-block-start:calc(calc(var(--volr-spacing)*6)*var(--volr-tw-space-y-reverse));margin-block-end:calc(calc(var(--volr-spacing)*6)*calc(1 - var(--volr-tw-space-y-reverse)))}:where(.volr\\\\:space-y-8>:not(:last-child)){--volr-tw-space-y-reverse:0;margin-block-start:calc(calc(var(--volr-spacing)*8)*var(--volr-tw-space-y-reverse));margin-block-end:calc(calc(var(--volr-spacing)*8)*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-200{border-color:var(--volr-color-slate-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-green-100{background-color:var(--volr-color-green-100)}.volr\\\\:bg-red-50{background-color:var(--volr-color-red-50)}.volr\\\\:bg-red-100{background-color:var(--volr-color-red-100)}.volr\\\\:bg-slate-50{background-color:var(--volr-color-slate-50)}.volr\\\\:bg-slate-100{background-color:var(--volr-color-slate-100)}.volr\\\\:bg-slate-200{background-color:var(--volr-color-slate-200)}.volr\\\\:bg-slate-300{background-color:var(--volr-color-slate-300)}.volr\\\\:bg-slate-900{background-color:var(--volr-color-slate-900)}.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\\\\:object-cover{object-fit:cover}.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-6{padding:calc(var(--volr-spacing)*6)}.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{padding-block:calc(var(--volr-spacing)*2)}.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\\\\:text-right{text-align:right}.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-500{color:var(--volr-color-red-500)}.volr\\\\:text-red-600{color:var(--volr-color-red-600)}.volr\\\\:text-red-700{color:var(--volr-color-red-700)}.volr\\\\:text-slate-400{color:var(--volr-color-slate-400)}.volr\\\\:text-slate-500{color:var(--volr-color-slate-500)}.volr\\\\:text-slate-600{color:var(--volr-color-slate-600)}.volr\\\\:text-slate-900{color:var(--volr-color-slate-900)}.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-25{opacity:.25}.volr\\\\:opacity-30{opacity:.3}.volr\\\\:opacity-75{opacity:.75}.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}@media (hover:hover){.volr\\\\:hover\\\\:bg-slate-50:hover{background-color:var(--volr-color-slate-50)}}.volr\\\\:disabled\\\\:cursor-not-allowed:disabled{cursor:not-allowed}.volr\\\\:disabled\\\\:opacity-50:disabled{opacity:.5}.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\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\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\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\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 * Shows detected wallets via EIP-6963 for direct signing,\n * with fallback to mobile wallet app signing.\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\";\nimport { QRCodeSVG } from \"qrcode.react\";\n\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 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\ninterface EIP6963ProviderDetail {\n info: { uuid: string; name: string; icon: string; rdns: string };\n provider: any;\n}\n\n// Default wallet icon SVG (simple wallet shape)\nconst DefaultWalletIcon = () => (\n <svg\n className=\"volr:w-8 volr:h-8\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect\n x=\"2\"\n y=\"6\"\n width=\"20\"\n height=\"14\"\n rx=\"2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n />\n <path\n d=\"M17 12.5C17 13.3284 16.3284 14 15.5 14C14.6716 14 14 13.3284 14 12.5C14 11.6716 14.6716 11 15.5 11C16.3284 11 17 11.6716 17 12.5Z\"\n fill=\"currentColor\"\n />\n <path d=\"M6 6V5C6 3.89543 6.89543 3 8 3H16C17.1046 3 18 3.89543 18 5V6\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </svg>\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\n const [isLoading, setIsLoading] = useState(false);\n const [loadingWallet, setLoadingWallet] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [providers, setProviders] = useState<EIP6963ProviderDetail[]>([]);\n const [isDetecting, setIsDetecting] = useState(true);\n const [hasLegacyWallet, setHasLegacyWallet] = useState(false);\n\n // Mobile/other wallet signing state\n const [showOtherWallet, setShowOtherWallet] = useState(false);\n const [sessionUrl, setSessionUrl] = useState<string | null>(null);\n const [isPolling, setIsPolling] = useState(false);\n const pollingRef = useRef<NodeJS.Timeout | null>(null);\n const sessionCreatedRef = useRef(false);\n\n // Cleanup polling\n useEffect(() => {\n return () => {\n if (pollingRef.current) clearInterval(pollingRef.current);\n };\n }, []);\n\n // EIP-6963 wallet detection\n useEffect(() => {\n if (typeof window === \"undefined\") {\n setIsDetecting(false);\n return;\n }\n\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)) return prev;\n return [...prev, detail];\n });\n };\n\n window.addEventListener(\"eip6963:announceProvider\", handleAnnounceProvider);\n window.dispatchEvent(new Event(\"eip6963:requestProvider\"));\n\n // Check for legacy window.ethereum after a short delay\n const checkLegacy = setTimeout(() => {\n if (typeof window !== \"undefined\" && (window as any).ethereum) {\n setHasLegacyWallet(true);\n }\n setIsDetecting(false);\n }, 200);\n\n return () => {\n window.removeEventListener(\"eip6963:announceProvider\", handleAnnounceProvider);\n clearTimeout(checkLegacy);\n };\n }, []);\n\n // Determine if we have any wallets\n const hasAnyWallet = providers.length > 0 || hasLegacyWallet;\n\n // Create session for mobile/other wallet flow\n const createSession = useCallback(async () => {\n if (sessionCreatedRef.current || sessionUrl) return;\n sessionCreatedRef.current = true;\n\n try {\n const session = await createSiweSession();\n const url = getSiweSignUrl(session.id);\n setSessionUrl(url);\n setIsPolling(true);\n\n pollingRef.current = setInterval(async () => {\n try {\n const result = await checkSiweSession(session.id);\n\n if (result.status === \"completed\" && result.user) {\n if (pollingRef.current) {\n clearInterval(pollingRef.current);\n pollingRef.current = null;\n }\n setIsPolling(false);\n\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 if (pollingRef.current) {\n clearInterval(pollingRef.current);\n pollingRef.current = null;\n }\n setIsPolling(false);\n setError(t(\"siwe.sessionExpired\"));\n setSessionUrl(null);\n sessionCreatedRef.current = false;\n }\n } catch {\n // Ignore polling errors\n }\n }, 3000);\n } catch (err) {\n sessionCreatedRef.current = false;\n setError(err instanceof Error ? err.message : \"Failed to create session\");\n onError(err instanceof Error ? err : new Error(\"Failed to create session\"));\n }\n }, [createSiweSession, getSiweSignUrl, checkSiweSession, onSuccess, onError, t, sessionUrl]);\n\n // Auto-create session when showOtherWallet becomes true OR when no wallets detected\n useEffect(() => {\n if (!isDetecting && !hasAnyWallet && !sessionUrl) {\n createSession();\n }\n }, [isDetecting, hasAnyWallet, sessionUrl, createSession]);\n\n useEffect(() => {\n if (showOtherWallet && !sessionUrl) {\n createSession();\n }\n }, [showOtherWallet, sessionUrl, createSession]);\n\n // Handle wallet selection and signing\n const handleWalletClick = useCallback(async (provider: any, walletName: string) => {\n setError(null);\n setIsLoading(true);\n setLoadingWallet(walletName);\n\n try {\n const accounts = await provider.request({ method: \"eth_requestAccounts\" });\n if (accounts.length === 0) throw new Error(\"No accounts found\");\n\n const walletAddress = accounts[0];\n const result = await signWithWallet(walletAddress);\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 = 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 setLoadingWallet(null);\n }\n }, [signWithWallet, onSuccess, onError]);\n\n // Handle legacy wallet (window.ethereum) click\n const handleLegacyWalletClick = useCallback(async () => {\n if (typeof window === \"undefined\" || !(window as any).ethereum) return;\n\n const ethereum = (window as any).ethereum;\n let walletName = \"Wallet\";\n\n // Try to detect wallet name\n if (ethereum.isMetaMask) walletName = \"MetaMask\";\n else if (ethereum.isCoinbaseWallet) walletName = \"Coinbase Wallet\";\n else if (ethereum.isRabby) walletName = \"Rabby\";\n\n await handleWalletClick(ethereum, walletName);\n }, [handleWalletClick]);\n\n const cancelOtherWallet = useCallback(() => {\n if (pollingRef.current) {\n clearInterval(pollingRef.current);\n pollingRef.current = null;\n }\n setIsPolling(false);\n setSessionUrl(null);\n setShowOtherWallet(false);\n sessionCreatedRef.current = false;\n }, []);\n\n // Render wallet list\n const renderWalletList = () => {\n // Build display list: EIP-6963 providers first, then legacy if needed\n const walletsToShow: { id: string; name: string; icon?: string; provider: any; isLegacy?: boolean }[] = [];\n\n providers.forEach((p) => {\n walletsToShow.push({\n id: p.info.uuid,\n name: p.info.name,\n icon: p.info.icon,\n provider: p.provider,\n });\n });\n\n // Add legacy wallet only if EIP-6963 didn't detect MetaMask/etc\n if (hasLegacyWallet && providers.length === 0) {\n const ethereum = (window as any).ethereum;\n let name = \"Wallet\";\n if (ethereum?.isMetaMask) name = \"MetaMask\";\n else if (ethereum?.isCoinbaseWallet) name = \"Coinbase Wallet\";\n else if (ethereum?.isRabby) name = \"Rabby\";\n\n walletsToShow.push({\n id: \"legacy\",\n name,\n provider: ethereum,\n isLegacy: true,\n });\n }\n\n if (walletsToShow.length === 0) return null;\n\n return (\n <div className=\"volr:space-y-2\">\n {walletsToShow.map((wallet) => (\n <button\n key={wallet.id}\n type=\"button\"\n onClick={() =>\n wallet.isLegacy\n ? handleLegacyWalletClick()\n : handleWalletClick(wallet.provider, wallet.name)\n }\n disabled={isLoading}\n className=\"volr:w-full volr:flex volr:items-center volr:gap-3 volr:p-3 volr:border volr:border-slate-200 volr:rounded-xl volr:hover:bg-slate-50 volr:transition-colors volr:disabled:opacity-50 volr:disabled:cursor-not-allowed\"\n >\n {/* Wallet icon */}\n <div className=\"volr:w-10 volr:h-10 volr:rounded-lg volr:bg-slate-100 volr:flex volr:items-center volr:justify-center volr:overflow-hidden volr:flex-shrink-0\">\n {wallet.icon ? (\n <img\n src={wallet.icon}\n alt={wallet.name}\n className=\"volr:w-8 volr:h-8\"\n />\n ) : (\n <div className=\"volr:text-slate-400\">\n <DefaultWalletIcon />\n </div>\n )}\n </div>\n\n {/* Wallet name */}\n <span className=\"volr:flex-1 volr:text-left volr:font-medium volr:text-slate-900\">\n {loadingWallet === wallet.name\n ? t(\"siwe.connectingTo\").replace(\"{{wallet}}\", wallet.name)\n : wallet.name}\n </span>\n\n {/* Loading spinner or arrow */}\n {loadingWallet === wallet.name ? (\n <div className=\"volr:animate-spin volr:w-5 volr:h-5 volr:border-2 volr:border-slate-300 volr:border-t-slate-600 volr:rounded-full\" />\n ) : (\n <svg\n className=\"volr:w-5 volr:h-5 volr:text-slate-400\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n )}\n </button>\n ))}\n </div>\n );\n };\n\n // Render mobile/other wallet section\n const renderOtherWalletSection = () => (\n <div className=\"volr:space-y-4\">\n {/* Guide */}\n <div className=\"volr:text-sm\">\n <p className=\"volr:font-medium volr:mb-2\">{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 {sessionUrl ? (\n <>\n {/* QR Code for desktop */}\n {!isMobile() && (\n <div className=\"volr:flex volr:justify-center volr:p-4 volr:bg-white volr:rounded-lg volr:border volr:border-slate-200\">\n <QRCodeSVG value={sessionUrl} size={160} level=\"M\" marginSize={0} />\n </div>\n )}\n\n {/* URL with copy button */}\n <div className=\"volr:p-3 volr:border volr:border-slate-200 volr:rounded-lg volr:bg-slate-50\">\n <div className=\"volr:flex volr:items-start volr:justify-between volr:gap-2\">\n <div className=\"volr:flex-1 volr:min-w-0\">\n <p className=\"volr:text-xs volr-text-secondary volr:mb-1\">Sign URL:</p>\n <p className=\"volr:text-xs volr:font-mono volr:break-all volr:text-slate-600\">\n {sessionUrl}\n </p>\n </div>\n <CopyButton text={sessionUrl} />\n </div>\n </div>\n\n {isPolling && (\n <div className=\"volr:text-center volr:py-2\">\n <div className=\"volr:animate-spin volr:w-5 volr:h-5 volr:border-2 volr:border-slate-300 volr:border-t-slate-600 volr:rounded-full volr:mx-auto\" />\n <p className=\"volr:text-xs volr-text-secondary volr:mt-2\">\n {t(\"siwe.waitingForSignature\")}\n </p>\n </div>\n )}\n </>\n ) : (\n <div className=\"volr:text-center volr:py-4\">\n <div className=\"volr:animate-spin volr:w-5 volr:h-5 volr:border-2 volr:border-slate-300 volr:border-t-slate-600 volr:rounded-full volr:mx-auto\" />\n <p className=\"volr:text-xs volr-text-secondary volr:mt-2\">{t(\"common.loading\")}</p>\n </div>\n )}\n </div>\n );\n\n const content = (\n <div className=\"volr:max-w-md volr:mx-auto\">\n <Button variant=\"ghost\" size=\"sm\" onClick={onBack} className=\"volr:mb-4 volr:-ml-2\">\n ← {t(\"common.back\")}\n </Button>\n\n <p className=\"volr:text-2xl volr:font-semibold volr:mb-6\">\n {t(\"login.wallet.title\")}\n </p>\n\n {/* Error display */}\n {error && (\n <div className=\"volr:mb-4 volr:p-3 volr:border volr:border-red-200 volr:rounded-lg volr:text-sm volr:text-red-600 volr:bg-red-50\">\n {error}\n </div>\n )}\n\n {/* Loading state while detecting wallets */}\n {isDetecting && (\n <div className=\"volr:text-center volr:py-8\">\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-secondary volr:mt-3\">{t(\"common.loading\")}</p>\n </div>\n )}\n\n {/* Case 1: Wallets detected - show wallet list */}\n {!isDetecting && hasAnyWallet && !showOtherWallet && (\n <>\n <p className=\"volr:text-sm volr-text-secondary volr:mb-4\">\n {t(\"siwe.selectWallet\")}\n </p>\n\n {renderWalletList()}\n\n {/* \"Use another wallet\" link */}\n <button\n type=\"button\"\n onClick={() => setShowOtherWallet(true)}\n className=\"volr:w-full volr:text-sm volr:text-slate-500 volr:underline volr:mt-6\"\n >\n {t(\"siwe.useOtherWallet\")}\n </button>\n </>\n )}\n\n {/* Case 2: User clicked \"use another wallet\" */}\n {!isDetecting && hasAnyWallet && showOtherWallet && (\n <>\n {renderOtherWalletSection()}\n <button\n type=\"button\"\n onClick={cancelOtherWallet}\n className=\"volr:w-full volr:text-sm volr:text-slate-500 volr:underline volr:mt-4\"\n >\n {t(\"common.cancel\")}\n </button>\n </>\n )}\n\n {/* Case 3: No wallets detected - show mobile signing directly */}\n {!isDetecting && !hasAnyWallet && (\n <>\n <p className=\"volr:text-sm volr-text-secondary volr:mb-4\">\n {t(\"siwe.noWalletsDetected\")}\n </p>\n {renderOtherWalletSection()}\n </>\n )}\n </div>\n );\n\n if (!wrapInModal) return content;\n\n return (\n <Modal open={isOpen} onOpenChange={(open) => !open && (onClose?.() || onBack?.())}>\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는 인증 수단일 뿐 - 패스키 등록 필요 여부 확인\n // If user already has a key storage type, login is complete - close modal\n if (data.keyStorageType) {\n onClose();\n return;\n }\n\n // No key storage type means passkey setup is needed (same as email/social login)\n setCurrentScreen(\"passkey-setup\");\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","// biome-ignore lint/performance/noBarrelFile: entrypoint module\nexport {\n type Abi,\n type AbiEvent,\n type AbiFunction,\n type AbiParameter,\n type AbiParameterKind,\n type AbiParameterToPrimitiveType,\n type AbiStateMutability,\n type Address,\n CircularReferenceError,\n InvalidAbiItemError,\n InvalidAbiParameterError,\n InvalidAbiParametersError,\n InvalidAbiTypeParameterError,\n InvalidFunctionModifierError,\n InvalidModifierError,\n InvalidParameterError,\n InvalidParenthesisError,\n InvalidSignatureError,\n InvalidStructSignatureError,\n type Narrow,\n type ParseAbi,\n type ParseAbiItem,\n type ParseAbiParameter,\n type ParseAbiParameters,\n parseAbi,\n parseAbiItem,\n parseAbiParameter,\n parseAbiParameters,\n SolidityProtectedKeywordError,\n type TypedData,\n type TypedDataDomain,\n type TypedDataParameter,\n UnknownSignatureError,\n UnknownTypeError,\n} from 'abitype'\nexport type {\n BlockOverrides,\n Rpc as RpcBlockOverrides,\n} from 'ox/BlockOverrides'\nexport type {\n RpcEstimateUserOperationGasReturnType,\n RpcGetUserOperationByHashReturnType,\n RpcUserOperation,\n RpcUserOperationReceipt,\n RpcUserOperationRequest,\n} from './account-abstraction/types/rpc.js'\nexport type {\n Account,\n AccountSource,\n CustomSource,\n HDAccount,\n HDOptions,\n JsonRpcAccount,\n LocalAccount,\n PrivateKeyAccount,\n} from './accounts/types.js'\nexport type {\n GetEnsAddressErrorType,\n GetEnsAddressParameters,\n GetEnsAddressReturnType,\n} from './actions/ens/getEnsAddress.js'\nexport type {\n GetEnsAvatarErrorType,\n GetEnsAvatarParameters,\n GetEnsAvatarReturnType,\n} from './actions/ens/getEnsAvatar.js'\nexport type {\n GetEnsNameErrorType,\n GetEnsNameParameters,\n GetEnsNameReturnType,\n} from './actions/ens/getEnsName.js'\nexport type {\n GetEnsResolverErrorType,\n GetEnsResolverParameters,\n GetEnsResolverReturnType,\n} from './actions/ens/getEnsResolver.js'\nexport type {\n GetEnsTextErrorType,\n GetEnsTextParameters,\n GetEnsTextReturnType,\n} from './actions/ens/getEnsText.js'\nexport {\n type GetContractErrorType,\n type GetContractParameters,\n type GetContractReturnType,\n getContract,\n} from './actions/getContract.js'\nexport type {\n CallErrorType,\n CallParameters,\n CallReturnType,\n} from './actions/public/call.js'\nexport type {\n CreateAccessListErrorType,\n CreateAccessListParameters,\n CreateAccessListReturnType,\n} from './actions/public/createAccessList.js'\nexport type {\n CreateBlockFilterErrorType,\n CreateBlockFilterReturnType,\n} from './actions/public/createBlockFilter.js'\nexport type {\n CreateContractEventFilterErrorType,\n CreateContractEventFilterParameters,\n CreateContractEventFilterReturnType,\n} from './actions/public/createContractEventFilter.js'\nexport type {\n CreateEventFilterErrorType,\n CreateEventFilterParameters,\n CreateEventFilterReturnType,\n} from './actions/public/createEventFilter.js'\nexport type {\n CreatePendingTransactionFilterErrorType,\n CreatePendingTransactionFilterReturnType,\n} from './actions/public/createPendingTransactionFilter.js'\nexport type {\n EstimateContractGasErrorType,\n EstimateContractGasParameters,\n EstimateContractGasReturnType,\n} from './actions/public/estimateContractGas.js'\nexport type {\n EstimateFeesPerGasErrorType,\n EstimateFeesPerGasParameters,\n EstimateFeesPerGasReturnType,\n} from './actions/public/estimateFeesPerGas.js'\nexport type {\n EstimateGasErrorType,\n EstimateGasParameters,\n EstimateGasReturnType,\n} from './actions/public/estimateGas.js'\nexport type {\n EstimateMaxPriorityFeePerGasErrorType,\n EstimateMaxPriorityFeePerGasParameters,\n EstimateMaxPriorityFeePerGasReturnType,\n} from './actions/public/estimateMaxPriorityFeePerGas.js'\nexport type {\n GetBalanceErrorType,\n GetBalanceParameters,\n GetBalanceReturnType,\n} from './actions/public/getBalance.js'\nexport type {\n GetBlobBaseFeeErrorType,\n GetBlobBaseFeeReturnType,\n} from './actions/public/getBlobBaseFee.js'\nexport type {\n GetBlockErrorType,\n GetBlockParameters,\n GetBlockReturnType,\n} from './actions/public/getBlock.js'\nexport type {\n GetBlockNumberErrorType,\n GetBlockNumberParameters,\n GetBlockNumberReturnType,\n} from './actions/public/getBlockNumber.js'\nexport type {\n GetBlockTransactionCountErrorType,\n GetBlockTransactionCountParameters,\n GetBlockTransactionCountReturnType,\n} from './actions/public/getBlockTransactionCount.js'\nexport type {\n GetChainIdErrorType,\n GetChainIdReturnType,\n} from './actions/public/getChainId.js'\nexport type {\n /** @deprecated Use `GetCodeErrorType` instead */\n GetCodeErrorType as GetBytecodeErrorType,\n GetCodeErrorType,\n /** @deprecated Use `GetCodeParameters` instead */\n GetCodeParameters as GetBytecodeParameters,\n GetCodeParameters,\n /** @deprecated Use `GetCodeReturnType` instead */\n GetCodeReturnType as GetBytecodeReturnType,\n GetCodeReturnType,\n} from './actions/public/getCode.js'\nexport type {\n GetContractEventsErrorType,\n GetContractEventsParameters,\n GetContractEventsReturnType,\n} from './actions/public/getContractEvents.js'\nexport type {\n GetEip712DomainErrorType,\n GetEip712DomainParameters,\n GetEip712DomainReturnType,\n} from './actions/public/getEip712Domain.js'\nexport type {\n GetFeeHistoryErrorType,\n GetFeeHistoryParameters,\n GetFeeHistoryReturnType,\n} from './actions/public/getFeeHistory.js'\nexport type {\n GetFilterChangesErrorType,\n GetFilterChangesParameters,\n GetFilterChangesReturnType,\n} from './actions/public/getFilterChanges.js'\nexport type {\n GetFilterLogsErrorType,\n GetFilterLogsParameters,\n GetFilterLogsReturnType,\n} from './actions/public/getFilterLogs.js'\nexport type {\n GetGasPriceErrorType,\n GetGasPriceReturnType,\n} from './actions/public/getGasPrice.js'\nexport type {\n GetLogsErrorType,\n GetLogsParameters,\n GetLogsReturnType,\n} from './actions/public/getLogs.js'\nexport type {\n GetProofErrorType,\n GetProofParameters,\n GetProofReturnType,\n} from './actions/public/getProof.js'\nexport type {\n GetStorageAtErrorType,\n GetStorageAtParameters,\n GetStorageAtReturnType,\n} from './actions/public/getStorageAt.js'\nexport type {\n GetTransactionErrorType,\n GetTransactionParameters,\n GetTransactionReturnType,\n} from './actions/public/getTransaction.js'\nexport type {\n GetTransactionConfirmationsErrorType,\n GetTransactionConfirmationsParameters,\n GetTransactionConfirmationsReturnType,\n} from './actions/public/getTransactionConfirmations.js'\nexport type {\n GetTransactionCountErrorType,\n GetTransactionCountParameters,\n GetTransactionCountReturnType,\n} from './actions/public/getTransactionCount.js'\nexport type {\n GetTransactionReceiptErrorType,\n GetTransactionReceiptParameters,\n GetTransactionReceiptReturnType,\n} from './actions/public/getTransactionReceipt.js'\nexport type {\n MulticallErrorType,\n MulticallParameters,\n MulticallReturnType,\n} from './actions/public/multicall.js'\nexport type {\n ReadContractErrorType,\n ReadContractParameters,\n ReadContractReturnType,\n} from './actions/public/readContract.js'\nexport type {\n SimulateBlocksErrorType,\n SimulateBlocksParameters,\n SimulateBlocksReturnType,\n} from './actions/public/simulateBlocks.js'\nexport type {\n SimulateCallsErrorType,\n SimulateCallsParameters,\n SimulateCallsReturnType,\n} from './actions/public/simulateCalls.js'\nexport type {\n GetMutabilityAwareValue,\n SimulateContractErrorType,\n SimulateContractParameters,\n SimulateContractReturnType,\n} from './actions/public/simulateContract.js'\nexport type {\n UninstallFilterErrorType,\n UninstallFilterParameters,\n UninstallFilterReturnType,\n} from './actions/public/uninstallFilter.js'\nexport type {\n VerifyHashErrorType as VerifyHashActionErrorType,\n VerifyHashParameters as VerifyHashActionParameters,\n VerifyHashReturnType as VerifyHashActionReturnType,\n} from './actions/public/verifyHash.js'\nexport type {\n VerifyMessageErrorType as VerifyMessageActionErrorType,\n VerifyMessageParameters as VerifyMessageActionParameters,\n VerifyMessageReturnType as VerifyMessageActionReturnType,\n} from './actions/public/verifyMessage.js'\nexport type {\n VerifyTypedDataErrorType as VerifyTypedDataActionErrorType,\n VerifyTypedDataParameters as VerifyTypedDataActionParameters,\n VerifyTypedDataReturnType as VerifyTypedDataActionReturnType,\n} from './actions/public/verifyTypedData.js'\nexport type {\n ReplacementReason,\n ReplacementReturnType,\n WaitForTransactionReceiptErrorType,\n WaitForTransactionReceiptParameters,\n WaitForTransactionReceiptReturnType,\n} from './actions/public/waitForTransactionReceipt.js'\nexport type {\n OnBlockNumberFn,\n OnBlockNumberParameter,\n WatchBlockNumberErrorType,\n WatchBlockNumberParameters,\n WatchBlockNumberReturnType,\n} from './actions/public/watchBlockNumber.js'\nexport type {\n OnBlock,\n OnBlockParameter,\n WatchBlocksErrorType,\n WatchBlocksParameters,\n WatchBlocksReturnType,\n} from './actions/public/watchBlocks.js'\nexport type {\n WatchContractEventErrorType,\n WatchContractEventOnLogsFn,\n WatchContractEventOnLogsParameter,\n WatchContractEventParameters,\n WatchContractEventReturnType,\n} from './actions/public/watchContractEvent.js'\nexport type {\n WatchEventErrorType,\n WatchEventOnLogsFn,\n WatchEventOnLogsParameter,\n WatchEventParameters,\n WatchEventReturnType,\n} from './actions/public/watchEvent.js'\nexport type {\n OnTransactionsFn,\n OnTransactionsParameter,\n WatchPendingTransactionsErrorType,\n WatchPendingTransactionsParameters,\n WatchPendingTransactionsReturnType,\n} from './actions/public/watchPendingTransactions.js'\nexport type {\n DropTransactionErrorType,\n DropTransactionParameters,\n} from './actions/test/dropTransaction.js'\nexport type {\n DumpStateErrorType,\n DumpStateReturnType,\n} from './actions/test/dumpState.js'\nexport type {\n GetAutomineErrorType,\n GetAutomineReturnType,\n} from './actions/test/getAutomine.js'\nexport type {\n GetTxpoolContentErrorType,\n GetTxpoolContentReturnType,\n} from './actions/test/getTxpoolContent.js'\nexport type {\n GetTxpoolStatusErrorType,\n GetTxpoolStatusReturnType,\n} from './actions/test/getTxpoolStatus.js'\nexport type {\n ImpersonateAccountErrorType,\n ImpersonateAccountParameters,\n} from './actions/test/impersonateAccount.js'\nexport type {\n IncreaseTimeErrorType,\n IncreaseTimeParameters,\n} from './actions/test/increaseTime.js'\nexport type {\n InspectTxpoolErrorType,\n InspectTxpoolReturnType,\n} from './actions/test/inspectTxpool.js'\nexport type {\n LoadStateErrorType,\n LoadStateParameters,\n LoadStateReturnType,\n} from './actions/test/loadState.js'\nexport type { MineErrorType, MineParameters } from './actions/test/mine.js'\nexport type { RemoveBlockTimestampIntervalErrorType } from './actions/test/removeBlockTimestampInterval.js'\nexport type { ResetErrorType, ResetParameters } from './actions/test/reset.js'\nexport type {\n RevertErrorType,\n RevertParameters,\n} from './actions/test/revert.js'\nexport type {\n SendUnsignedTransactionErrorType,\n SendUnsignedTransactionParameters,\n SendUnsignedTransactionReturnType,\n} from './actions/test/sendUnsignedTransaction.js'\nexport type { SetAutomineErrorType } from './actions/test/setAutomine.js'\nexport type {\n SetBalanceErrorType,\n SetBalanceParameters,\n} from './actions/test/setBalance.js'\nexport type {\n SetBlockGasLimitErrorType,\n SetBlockGasLimitParameters,\n} from './actions/test/setBlockGasLimit.js'\nexport type {\n SetBlockTimestampIntervalErrorType,\n SetBlockTimestampIntervalParameters,\n} from './actions/test/setBlockTimestampInterval.js'\nexport type {\n SetCodeErrorType,\n SetCodeParameters,\n} from './actions/test/setCode.js'\nexport type {\n SetCoinbaseErrorType,\n SetCoinbaseParameters,\n} from './actions/test/setCoinbase.js'\nexport type {\n SetIntervalMiningErrorType,\n SetIntervalMiningParameters,\n} from './actions/test/setIntervalMining.js'\nexport type { SetLoggingEnabledErrorType } from './actions/test/setLoggingEnabled.js'\nexport type {\n SetMinGasPriceErrorType,\n SetMinGasPriceParameters,\n} from './actions/test/setMinGasPrice.js'\nexport type {\n SetNextBlockBaseFeePerGasErrorType,\n SetNextBlockBaseFeePerGasParameters,\n} from './actions/test/setNextBlockBaseFeePerGas.js'\nexport type {\n SetNextBlockTimestampErrorType,\n SetNextBlockTimestampParameters,\n} from './actions/test/setNextBlockTimestamp.js'\nexport type {\n SetNonceErrorType,\n SetNonceParameters,\n} from './actions/test/setNonce.js'\nexport type { SetRpcUrlErrorType } from './actions/test/setRpcUrl.js'\nexport type {\n SetStorageAtErrorType,\n SetStorageAtParameters,\n} from './actions/test/setStorageAt.js'\nexport type { SnapshotErrorType } from './actions/test/snapshot.js'\nexport type {\n StopImpersonatingAccountErrorType,\n StopImpersonatingAccountParameters,\n} from './actions/test/stopImpersonatingAccount.js'\nexport type {\n AddChainErrorType,\n AddChainParameters,\n} from './actions/wallet/addChain.js'\nexport type {\n DeployContractErrorType,\n DeployContractParameters,\n DeployContractReturnType,\n} from './actions/wallet/deployContract.js'\nexport type {\n GetAddressesErrorType,\n GetAddressesReturnType,\n} from './actions/wallet/getAddresses.js'\nexport type {\n GetCallsStatusErrorType,\n GetCallsStatusParameters,\n GetCallsStatusReturnType,\n} from './actions/wallet/getCallsStatus.js'\nexport type {\n GetCapabilitiesErrorType,\n GetCapabilitiesParameters,\n GetCapabilitiesReturnType,\n} from './actions/wallet/getCapabilities.js'\nexport type {\n GetPermissionsErrorType,\n GetPermissionsReturnType,\n} from './actions/wallet/getPermissions.js'\nexport type {\n PrepareAuthorizationErrorType,\n PrepareAuthorizationParameters,\n PrepareAuthorizationReturnType,\n} from './actions/wallet/prepareAuthorization.js'\nexport type {\n PrepareTransactionRequestErrorType,\n PrepareTransactionRequestParameters,\n PrepareTransactionRequestParameterType,\n PrepareTransactionRequestRequest,\n PrepareTransactionRequestReturnType,\n} from './actions/wallet/prepareTransactionRequest.js'\nexport type {\n RequestAddressesErrorType,\n RequestAddressesReturnType,\n} from './actions/wallet/requestAddresses.js'\nexport type {\n RequestPermissionsErrorType,\n RequestPermissionsParameters,\n RequestPermissionsReturnType,\n} from './actions/wallet/requestPermissions.js'\nexport type {\n SendCallsErrorType,\n SendCallsParameters,\n SendCallsReturnType,\n} from './actions/wallet/sendCalls.js'\nexport type {\n SendCallsSyncErrorType,\n SendCallsSyncParameters,\n SendCallsSyncReturnType,\n} from './actions/wallet/sendCallsSync.js'\nexport type {\n SendRawTransactionErrorType,\n SendRawTransactionParameters,\n SendRawTransactionReturnType,\n} from './actions/wallet/sendRawTransaction.js'\nexport type {\n SendRawTransactionSyncErrorType,\n SendRawTransactionSyncParameters,\n SendRawTransactionSyncReturnType,\n} from './actions/wallet/sendRawTransactionSync.js'\nexport type {\n SendTransactionErrorType,\n SendTransactionParameters,\n SendTransactionRequest,\n SendTransactionReturnType,\n} from './actions/wallet/sendTransaction.js'\nexport type {\n SendTransactionSyncErrorType,\n SendTransactionSyncParameters,\n SendTransactionSyncRequest,\n SendTransactionSyncReturnType,\n} from './actions/wallet/sendTransactionSync.js'\nexport type {\n ShowCallsStatusErrorType,\n ShowCallsStatusParameters,\n ShowCallsStatusReturnType,\n} from './actions/wallet/showCallsStatus.js'\nexport type {\n SignAuthorizationErrorType,\n SignAuthorizationParameters,\n SignAuthorizationReturnType,\n} from './actions/wallet/signAuthorization.js'\nexport type {\n SignMessageErrorType,\n SignMessageParameters,\n SignMessageReturnType,\n} from './actions/wallet/signMessage.js'\nexport type {\n SignTransactionErrorType,\n SignTransactionParameters,\n SignTransactionReturnType,\n} from './actions/wallet/signTransaction.js'\nexport type {\n SignTypedDataErrorType,\n SignTypedDataParameters,\n SignTypedDataReturnType,\n} from './actions/wallet/signTypedData.js'\nexport type {\n SwitchChainErrorType,\n SwitchChainParameters,\n} from './actions/wallet/switchChain.js'\nexport type {\n WaitForCallsStatusErrorType,\n WaitForCallsStatusParameters,\n WaitForCallsStatusReturnType,\n WaitForCallsStatusTimeoutErrorType,\n} from './actions/wallet/waitForCallsStatus.js'\nexport { WaitForCallsStatusTimeoutError } from './actions/wallet/waitForCallsStatus.js'\nexport type {\n WatchAssetErrorType,\n WatchAssetParameters,\n WatchAssetReturnType,\n} from './actions/wallet/watchAsset.js'\nexport type {\n WriteContractErrorType,\n WriteContractParameters,\n WriteContractReturnType,\n} from './actions/wallet/writeContract.js'\nexport type {\n WriteContractSyncErrorType,\n WriteContractSyncParameters,\n WriteContractSyncReturnType,\n} from './actions/wallet/writeContractSync.js'\nexport {\n type Client,\n type ClientConfig,\n type CreateClientErrorType,\n createClient,\n type MulticallBatchOptions,\n rpcSchema,\n} from './clients/createClient.js'\nexport {\n type CreatePublicClientErrorType,\n createPublicClient,\n type PublicClient,\n type PublicClientConfig,\n} from './clients/createPublicClient.js'\nexport {\n type CreateTestClientErrorType,\n createTestClient,\n type TestClient,\n type TestClientConfig,\n} from './clients/createTestClient.js'\nexport {\n type CreateWalletClientErrorType,\n createWalletClient,\n type WalletClient,\n type WalletClientConfig,\n} from './clients/createWalletClient.js'\nexport {\n type PublicActions,\n publicActions,\n} from './clients/decorators/public.js'\nexport {\n type TestActions,\n testActions,\n} from './clients/decorators/test.js'\nexport {\n type WalletActions,\n walletActions,\n} from './clients/decorators/wallet.js'\nexport {\n type CreateTransportErrorType,\n createTransport,\n type Transport,\n type TransportConfig,\n} from './clients/transports/createTransport.js'\nexport {\n type CustomTransport,\n type CustomTransportConfig,\n type CustomTransportErrorType,\n custom,\n} from './clients/transports/custom.js'\nexport {\n type FallbackTransport,\n type FallbackTransportConfig,\n type FallbackTransportErrorType,\n fallback,\n shouldThrow,\n} from './clients/transports/fallback.js'\nexport {\n type HttpTransport,\n type HttpTransportConfig,\n type HttpTransportErrorType,\n http,\n} from './clients/transports/http.js'\nexport {\n type WebSocketTransport,\n type WebSocketTransportConfig,\n type WebSocketTransportErrorType,\n webSocket,\n} from './clients/transports/webSocket.js'\nexport {\n erc20Abi,\n erc20Abi_bytes32,\n erc721Abi,\n erc1155Abi,\n erc4626Abi,\n erc6492SignatureValidatorAbi,\n /** @deprecated use `erc6492SignatureValidatorAbi` instead. */\n erc6492SignatureValidatorAbi as universalSignatureValidatorAbi,\n multicall3Abi,\n} from './constants/abis.js'\nexport { ethAddress, zeroAddress } from './constants/address.js'\nexport { zeroHash } from './constants/bytes.js'\nexport {\n deploylessCallViaBytecodeBytecode,\n deploylessCallViaFactoryBytecode,\n erc6492SignatureValidatorByteCode,\n /** @deprecated use `erc6492SignatureValidatorByteCode` instead. */\n erc6492SignatureValidatorByteCode as universalSignatureValidatorByteCode,\n} from './constants/contracts.js'\nexport {\n maxInt8,\n maxInt16,\n maxInt24,\n maxInt32,\n maxInt40,\n maxInt48,\n maxInt56,\n maxInt64,\n maxInt72,\n maxInt80,\n maxInt88,\n maxInt96,\n maxInt104,\n maxInt112,\n maxInt120,\n maxInt128,\n maxInt136,\n maxInt144,\n maxInt152,\n maxInt160,\n maxInt168,\n maxInt176,\n maxInt184,\n maxInt192,\n maxInt200,\n maxInt208,\n maxInt216,\n maxInt224,\n maxInt232,\n maxInt240,\n maxInt248,\n maxInt256,\n maxUint8,\n maxUint16,\n maxUint24,\n maxUint32,\n maxUint40,\n maxUint48,\n maxUint56,\n maxUint64,\n maxUint72,\n maxUint80,\n maxUint88,\n maxUint96,\n maxUint104,\n maxUint112,\n maxUint120,\n maxUint128,\n maxUint136,\n maxUint144,\n maxUint152,\n maxUint160,\n maxUint168,\n maxUint176,\n maxUint184,\n maxUint192,\n maxUint200,\n maxUint208,\n maxUint216,\n maxUint224,\n maxUint232,\n maxUint240,\n maxUint248,\n maxUint256,\n minInt8,\n minInt16,\n minInt24,\n minInt32,\n minInt40,\n minInt48,\n minInt56,\n minInt64,\n minInt72,\n minInt80,\n minInt88,\n minInt96,\n minInt104,\n minInt112,\n minInt120,\n minInt128,\n minInt136,\n minInt144,\n minInt152,\n minInt160,\n minInt168,\n minInt176,\n minInt184,\n minInt192,\n minInt200,\n minInt208,\n minInt216,\n minInt224,\n minInt232,\n minInt240,\n minInt248,\n minInt256,\n} from './constants/number.js'\nexport { presignMessagePrefix } from './constants/strings.js'\nexport { etherUnits, gweiUnits, weiUnits } from './constants/unit.js'\nexport {\n AbiConstructorNotFoundError,\n type AbiConstructorNotFoundErrorType,\n AbiConstructorParamsNotFoundError,\n type AbiConstructorParamsNotFoundErrorType,\n AbiDecodingDataSizeInvalidError,\n type AbiDecodingDataSizeInvalidErrorType,\n AbiDecodingDataSizeTooSmallError,\n type AbiDecodingDataSizeTooSmallErrorType,\n AbiDecodingZeroDataError,\n type AbiDecodingZeroDataErrorType,\n AbiEncodingArrayLengthMismatchError,\n type AbiEncodingArrayLengthMismatchErrorType,\n AbiEncodingBytesSizeMismatchError,\n type AbiEncodingBytesSizeMismatchErrorType,\n AbiEncodingLengthMismatchError,\n type AbiEncodingLengthMismatchErrorType,\n AbiErrorInputsNotFoundError,\n type AbiErrorInputsNotFoundErrorType,\n AbiErrorNotFoundError,\n type AbiErrorNotFoundErrorType,\n AbiErrorSignatureNotFoundError,\n type AbiErrorSignatureNotFoundErrorType,\n AbiEventNotFoundError,\n type AbiEventNotFoundErrorType,\n AbiEventSignatureEmptyTopicsError,\n type AbiEventSignatureEmptyTopicsErrorType,\n AbiEventSignatureNotFoundError,\n type AbiEventSignatureNotFoundErrorType,\n AbiFunctionNotFoundError,\n type AbiFunctionNotFoundErrorType,\n AbiFunctionOutputsNotFoundError,\n type AbiFunctionOutputsNotFoundErrorType,\n AbiFunctionSignatureNotFoundError,\n type AbiFunctionSignatureNotFoundErrorType,\n BytesSizeMismatchError,\n type BytesSizeMismatchErrorType,\n DecodeLogDataMismatch,\n type DecodeLogDataMismatchErrorType,\n DecodeLogTopicsMismatch,\n type DecodeLogTopicsMismatchErrorType,\n InvalidAbiDecodingTypeError,\n type InvalidAbiDecodingTypeErrorType,\n InvalidAbiEncodingTypeError,\n type InvalidAbiEncodingTypeErrorType,\n InvalidArrayError,\n type InvalidArrayErrorType,\n InvalidDefinitionTypeError,\n type InvalidDefinitionTypeErrorType,\n UnsupportedPackedAbiType,\n type UnsupportedPackedAbiTypeErrorType,\n} from './errors/abi.js'\nexport {\n InvalidAddressError,\n type InvalidAddressErrorType,\n} from './errors/address.js'\nexport { BaseError, type BaseErrorType, setErrorConfig } from './errors/base.js'\nexport {\n BlockNotFoundError,\n type BlockNotFoundErrorType,\n} from './errors/block.js'\nexport {\n BundleFailedError,\n type BundleFailedErrorType,\n} from './errors/calls.js'\nexport {\n ChainDoesNotSupportContract,\n type ChainDoesNotSupportContractErrorType,\n ChainMismatchError,\n type ChainMismatchErrorType,\n ChainNotFoundError,\n type ChainNotFoundErrorType,\n ClientChainNotConfiguredError,\n type ClientChainNotConfiguredErrorType,\n InvalidChainIdError,\n type InvalidChainIdErrorType,\n} from './errors/chain.js'\nexport {\n CallExecutionError,\n type CallExecutionErrorType,\n ContractFunctionExecutionError,\n type ContractFunctionExecutionErrorType,\n ContractFunctionRevertedError,\n type ContractFunctionRevertedErrorType,\n ContractFunctionZeroDataError,\n type ContractFunctionZeroDataErrorType,\n CounterfactualDeploymentFailedError,\n type CounterfactualDeploymentFailedErrorType,\n RawContractError,\n type RawContractErrorType,\n} from './errors/contract.js'\nexport {\n SizeExceedsPaddingSizeError,\n type SizeExceedsPaddingSizeErrorType,\n SliceOffsetOutOfBoundsError,\n type SliceOffsetOutOfBoundsErrorType,\n} from './errors/data.js'\nexport {\n IntegerOutOfRangeError,\n type IntegerOutOfRangeErrorType,\n InvalidBytesBooleanError,\n type InvalidBytesBooleanErrorType,\n InvalidHexBooleanError,\n type InvalidHexBooleanErrorType,\n InvalidHexValueError,\n type InvalidHexValueErrorType,\n SizeOverflowError,\n type SizeOverflowErrorType,\n} from './errors/encoding.js'\nexport {\n type EnsAvatarInvalidMetadataError,\n type EnsAvatarInvalidMetadataErrorType,\n EnsAvatarInvalidNftUriError,\n type EnsAvatarInvalidNftUriErrorType,\n EnsAvatarUnsupportedNamespaceError,\n type EnsAvatarUnsupportedNamespaceErrorType,\n EnsAvatarUriResolutionError,\n type EnsAvatarUriResolutionErrorType,\n EnsInvalidChainIdError,\n type EnsInvalidChainIdErrorType,\n} from './errors/ens.js'\nexport {\n EstimateGasExecutionError,\n type EstimateGasExecutionErrorType,\n} from './errors/estimateGas.js'\nexport {\n BaseFeeScalarError,\n type BaseFeeScalarErrorType,\n Eip1559FeesNotSupportedError,\n type Eip1559FeesNotSupportedErrorType,\n MaxFeePerGasTooLowError,\n type MaxFeePerGasTooLowErrorType,\n} from './errors/fee.js'\nexport {\n FilterTypeNotSupportedError,\n type FilterTypeNotSupportedErrorType,\n} from './errors/log.js'\nexport {\n ExecutionRevertedError,\n type ExecutionRevertedErrorType,\n FeeCapTooHighError,\n type FeeCapTooHighErrorType,\n FeeCapTooLowError,\n type FeeCapTooLowErrorType,\n InsufficientFundsError,\n type InsufficientFundsErrorType,\n IntrinsicGasTooHighError,\n type IntrinsicGasTooHighErrorType,\n IntrinsicGasTooLowError,\n type IntrinsicGasTooLowErrorType,\n NonceMaxValueError,\n type NonceMaxValueErrorType,\n NonceTooHighError,\n type NonceTooHighErrorType,\n NonceTooLowError,\n type NonceTooLowErrorType,\n TipAboveFeeCapError,\n type TipAboveFeeCapErrorType,\n TransactionTypeNotSupportedError,\n type TransactionTypeNotSupportedErrorType,\n UnknownNodeError,\n type UnknownNodeErrorType,\n} from './errors/node.js'\nexport {\n HttpRequestError,\n type HttpRequestErrorType,\n RpcRequestError,\n type RpcRequestErrorType,\n SocketClosedError,\n type SocketClosedErrorType,\n TimeoutError,\n type TimeoutErrorType,\n WebSocketRequestError,\n type WebSocketRequestErrorType,\n} from './errors/request.js'\nexport {\n AtomicityNotSupportedError,\n type AtomicityNotSupportedErrorType,\n AtomicReadyWalletRejectedUpgradeError,\n type AtomicReadyWalletRejectedUpgradeErrorType,\n BundleTooLargeError,\n type BundleTooLargeErrorType,\n ChainDisconnectedError,\n type ChainDisconnectedErrorType,\n DuplicateIdError,\n type DuplicateIdErrorType,\n InternalRpcError,\n type InternalRpcErrorType,\n InvalidInputRpcError,\n type InvalidInputRpcErrorType,\n InvalidParamsRpcError,\n type InvalidParamsRpcErrorType,\n InvalidRequestRpcError,\n type InvalidRequestRpcErrorType,\n JsonRpcVersionUnsupportedError,\n type JsonRpcVersionUnsupportedErrorType,\n LimitExceededRpcError,\n type LimitExceededRpcErrorType,\n MethodNotFoundRpcError,\n type MethodNotFoundRpcErrorType,\n MethodNotSupportedRpcError,\n type MethodNotSupportedRpcErrorType,\n ParseRpcError,\n type ParseRpcErrorType,\n ProviderDisconnectedError,\n type ProviderDisconnectedErrorType,\n ProviderRpcError,\n type ProviderRpcErrorCode,\n type ProviderRpcErrorType,\n ResourceNotFoundRpcError,\n type ResourceNotFoundRpcErrorType,\n ResourceUnavailableRpcError,\n type ResourceUnavailableRpcErrorType,\n RpcError,\n type RpcErrorCode,\n type RpcErrorType,\n SwitchChainError,\n TransactionRejectedRpcError,\n type TransactionRejectedRpcErrorType,\n UnauthorizedProviderError,\n type UnauthorizedProviderErrorType,\n UnknownBundleIdError,\n type UnknownBundleIdErrorType,\n UnknownRpcError,\n type UnknownRpcErrorType,\n UnsupportedChainIdError,\n type UnsupportedChainIdErrorType,\n UnsupportedNonOptionalCapabilityError,\n type UnsupportedNonOptionalCapabilityErrorType,\n UnsupportedProviderMethodError,\n type UnsupportedProviderMethodErrorType,\n UserRejectedRequestError,\n type UserRejectedRequestErrorType,\n} from './errors/rpc.js'\nexport {\n AccountStateConflictError,\n type AccountStateConflictErrorType,\n StateAssignmentConflictError,\n type StateAssignmentConflictErrorType,\n} from './errors/stateOverride.js'\nexport {\n FeeConflictError,\n type FeeConflictErrorType,\n InvalidLegacyVError,\n type InvalidLegacyVErrorType,\n InvalidSerializableTransactionError,\n type InvalidSerializableTransactionErrorType,\n InvalidSerializedTransactionError,\n type InvalidSerializedTransactionErrorType,\n InvalidSerializedTransactionTypeError,\n type InvalidSerializedTransactionTypeErrorType,\n InvalidStorageKeySizeError,\n type InvalidStorageKeySizeErrorType,\n TransactionExecutionError,\n type TransactionExecutionErrorType,\n TransactionNotFoundError,\n type TransactionNotFoundErrorType,\n TransactionReceiptNotFoundError,\n type TransactionReceiptNotFoundErrorType,\n WaitForTransactionReceiptTimeoutError,\n type WaitForTransactionReceiptTimeoutErrorType,\n} from './errors/transaction.js'\nexport {\n UrlRequiredError,\n type UrlRequiredErrorType,\n} from './errors/transport.js'\nexport {\n InvalidDomainError,\n type InvalidDomainErrorType,\n InvalidPrimaryTypeError,\n type InvalidPrimaryTypeErrorType,\n InvalidStructTypeError,\n type InvalidStructTypeErrorType,\n} from './errors/typedData.js'\nexport {\n InvalidDecimalNumberError,\n type InvalidDecimalNumberErrorType,\n} from './errors/unit.js'\nexport type {\n DeriveAccount,\n HDKey,\n ParseAccount,\n} from './types/account.js'\nexport type {\n Authorization,\n AuthorizationList,\n AuthorizationRequest,\n SerializedAuthorization,\n SerializedAuthorizationList,\n SignedAuthorization,\n SignedAuthorizationList,\n} from './types/authorization.js'\nexport type {\n Block,\n BlockIdentifier,\n BlockNumber,\n BlockTag,\n Uncle,\n} from './types/block.js'\nexport type { Call, Calls } from './types/calls.js'\nexport type {\n Capabilities,\n /** @deprecated Use `Capabilities` instead. */\n Capabilities as WalletCapabilities,\n CapabilitiesSchema,\n /** @deprecated Use `ChainIdToCapabilities` instead. */\n ChainIdToCapabilities as WalletCapabilitiesRecord,\n ChainIdToCapabilities,\n ExtractCapabilities,\n} from './types/capabilities.js'\nexport type {\n Chain,\n ChainConfig,\n ChainContract,\n ChainEstimateFeesPerGasFn,\n ChainEstimateFeesPerGasFnParameters,\n ChainFees,\n ChainFeesFnParameters,\n ChainFormatter,\n ChainFormatters,\n ChainMaxPriorityFeePerGasFn,\n ChainSerializers,\n DeriveChain,\n ExtractChainFormatterExclude,\n ExtractChainFormatterParameters,\n ExtractChainFormatterReturnType,\n GetChainParameter,\n} from './types/chain.js'\nexport type {\n AbiEventParametersToPrimitiveTypes,\n AbiEventParameterToPrimitiveType,\n AbiEventTopicToPrimitiveType,\n AbiItem,\n AbiItemArgs,\n AbiItemName,\n ContractConstructorArgs,\n ContractErrorArgs,\n ContractErrorName,\n ContractEventArgs,\n ContractEventArgsFromTopics,\n ContractEventName,\n ContractFunctionArgs,\n ContractFunctionName,\n ContractFunctionParameters,\n ContractFunctionReturnType,\n EventDefinition,\n ExtractAbiFunctionForArgs,\n ExtractAbiItem,\n ExtractAbiItemForArgs,\n ExtractAbiItemNames,\n GetEventArgs,\n GetValue,\n LogTopicType,\n MaybeAbiEventName,\n MaybeExtractEventArgsFromAbi,\n UnionWiden,\n Widen,\n} from './types/contract.js'\nexport type {\n AddEthereumChainParameter,\n BundlerRpcSchema,\n DebugBundlerRpcSchema,\n EIP1193EventMap,\n EIP1193Events,\n EIP1193Parameters,\n EIP1193Provider,\n EIP1193RequestFn,\n EIP1474Methods,\n NetworkSync,\n PaymasterRpcSchema,\n ProviderConnectInfo,\n ProviderMessage,\n ProviderRpcErrorType as EIP1193ProviderRpcErrorType,\n PublicRpcSchema,\n RpcSchema,\n RpcSchemaOverride,\n TestRpcSchema,\n WalletCallReceipt,\n WalletGetAssetsParameters,\n WalletGetAssetsReturnType,\n WalletGetCallsStatusReturnType,\n WalletGrantPermissionsParameters,\n WalletGrantPermissionsReturnType,\n WalletPermission,\n WalletPermissionCaveat,\n WalletRpcSchema,\n WalletSendCallsParameters,\n WalletSendCallsReturnType,\n WatchAssetParams,\n} from './types/eip1193.js'\nexport { ProviderRpcError as EIP1193ProviderRpcError } from './types/eip1193.js'\nexport type { BlobSidecar, BlobSidecars } from './types/eip4844.js'\nexport type { AssetGateway, AssetGatewayUrls } from './types/ens.js'\nexport type {\n FeeHistory,\n FeeValues,\n FeeValuesEIP1559,\n FeeValuesEIP4844,\n FeeValuesLegacy,\n FeeValuesType,\n} from './types/fee.js'\nexport type { Filter, FilterType } from './types/filter.js'\nexport type { GetTransactionRequestKzgParameter, Kzg } from './types/kzg.js'\nexport type { Log } from './types/log.js'\nexport type {\n ByteArray,\n CompactSignature,\n Hash,\n Hex,\n LogTopic,\n SignableMessage,\n Signature,\n} from './types/misc.js'\nexport type {\n MulticallContracts,\n MulticallResponse,\n MulticallResults,\n} from './types/multicall.js'\nexport type { Register, ResolvedRegister } from './types/register.js'\nexport type {\n Index,\n Quantity,\n RpcAccountStateOverride,\n RpcAuthorization,\n RpcAuthorizationList,\n RpcBlock,\n RpcBlockIdentifier,\n RpcBlockNumber,\n RpcFeeHistory,\n RpcFeeValues,\n RpcLog,\n RpcProof,\n RpcStateMapping,\n RpcStateOverride,\n RpcTransaction,\n RpcTransactionReceipt,\n RpcTransactionRequest,\n RpcUncle,\n Status,\n} from './types/rpc.js'\nexport type {\n StateMapping,\n StateOverride,\n} from './types/stateOverride.js'\nexport type {\n AccessList,\n Transaction,\n TransactionBase,\n TransactionEIP1559,\n TransactionEIP2930,\n TransactionEIP4844,\n TransactionEIP7702,\n TransactionLegacy,\n TransactionReceipt,\n TransactionRequest,\n TransactionRequestBase,\n TransactionRequestEIP1559,\n TransactionRequestEIP2930,\n TransactionRequestEIP4844,\n TransactionRequestEIP7702,\n TransactionRequestGeneric,\n TransactionRequestLegacy,\n TransactionSerializable,\n TransactionSerializableBase,\n TransactionSerializableEIP1559,\n TransactionSerializableEIP2930,\n TransactionSerializableEIP4844,\n TransactionSerializableEIP7702,\n TransactionSerializableGeneric,\n TransactionSerializableLegacy,\n TransactionSerialized,\n TransactionSerializedEIP1559,\n TransactionSerializedEIP2930,\n TransactionSerializedEIP4844,\n TransactionSerializedEIP7702,\n TransactionSerializedGeneric,\n TransactionSerializedLegacy,\n TransactionType,\n} from './types/transaction.js'\nexport type { GetPollOptions, GetTransportConfig } from './types/transport.js'\nexport type { TypedDataDefinition } from './types/typedData.js'\nexport type {\n Assign,\n Branded,\n Evaluate,\n ExactPartial,\n ExactRequired,\n IsNarrowable,\n IsNever,\n IsUndefined,\n IsUnion,\n LooseOmit,\n MaybePartial,\n MaybePromise,\n MaybeRequired,\n Mutable,\n NoInfer,\n NoUndefined,\n Omit,\n OneOf,\n Or,\n PartialBy,\n Prettify,\n RequiredBy,\n Some,\n UnionEvaluate,\n UnionLooseOmit,\n UnionOmit,\n UnionPartialBy,\n UnionPick,\n UnionRequiredBy,\n UnionToTuple,\n ValueOf,\n} from './types/utils.js'\nexport type { Withdrawal } from './types/withdrawal.js'\nexport {\n type DecodeAbiParametersErrorType,\n type DecodeAbiParametersReturnType,\n decodeAbiParameters,\n} from './utils/abi/decodeAbiParameters.js'\nexport {\n type DecodeDeployDataErrorType,\n type DecodeDeployDataParameters,\n type DecodeDeployDataReturnType,\n decodeDeployData,\n} from './utils/abi/decodeDeployData.js'\nexport {\n type DecodeErrorResultErrorType,\n type DecodeErrorResultParameters,\n type DecodeErrorResultReturnType,\n decodeErrorResult,\n} from './utils/abi/decodeErrorResult.js'\nexport {\n type DecodeEventLogErrorType,\n type DecodeEventLogParameters,\n type DecodeEventLogReturnType,\n decodeEventLog,\n} from './utils/abi/decodeEventLog.js'\nexport {\n type DecodeFunctionDataErrorType,\n type DecodeFunctionDataParameters,\n type DecodeFunctionDataReturnType,\n decodeFunctionData,\n} from './utils/abi/decodeFunctionData.js'\nexport {\n type DecodeFunctionResultErrorType,\n type DecodeFunctionResultParameters,\n type DecodeFunctionResultReturnType,\n decodeFunctionResult,\n} from './utils/abi/decodeFunctionResult.js'\nexport {\n type EncodeAbiParametersErrorType,\n type EncodeAbiParametersReturnType,\n encodeAbiParameters,\n} from './utils/abi/encodeAbiParameters.js'\nexport {\n type EncodeDeployDataErrorType,\n type EncodeDeployDataParameters,\n type EncodeDeployDataReturnType,\n encodeDeployData,\n} from './utils/abi/encodeDeployData.js'\nexport {\n type EncodeErrorResultErrorType,\n type EncodeErrorResultParameters,\n type EncodeErrorResultReturnType,\n encodeErrorResult,\n} from './utils/abi/encodeErrorResult.js'\nexport {\n type EncodeEventTopicsErrorType,\n type EncodeEventTopicsParameters,\n type EncodeEventTopicsReturnType,\n encodeEventTopics,\n} from './utils/abi/encodeEventTopics.js'\nexport {\n type EncodeFunctionDataErrorType,\n type EncodeFunctionDataParameters,\n type EncodeFunctionDataReturnType,\n encodeFunctionData,\n} from './utils/abi/encodeFunctionData.js'\nexport {\n type EncodeFunctionResultErrorType,\n type EncodeFunctionResultParameters,\n type EncodeFunctionResultReturnType,\n encodeFunctionResult,\n} from './utils/abi/encodeFunctionResult.js'\nexport {\n type EncodePackedErrorType,\n encodePacked,\n} from './utils/abi/encodePacked.js'\nexport {\n type GetAbiItemErrorType,\n type GetAbiItemParameters,\n type GetAbiItemReturnType,\n getAbiItem,\n} from './utils/abi/getAbiItem.js'\nexport {\n type ParseEventLogsErrorType,\n type ParseEventLogsParameters,\n type ParseEventLogsReturnType,\n parseEventLogs,\n} from './utils/abi/parseEventLogs.js'\nexport {\n type PrepareEncodeFunctionDataErrorType,\n type PrepareEncodeFunctionDataParameters,\n type PrepareEncodeFunctionDataReturnType,\n prepareEncodeFunctionData,\n} from './utils/abi/prepareEncodeFunctionData.js'\nexport {\n type ChecksumAddressErrorType,\n checksumAddress,\n type GetAddressErrorType,\n getAddress,\n} from './utils/address/getAddress.js'\nexport {\n type GetContractAddressOptions,\n type GetCreate2AddressErrorType,\n type GetCreate2AddressOptions,\n type GetCreateAddressErrorType,\n type GetCreateAddressOptions,\n getContractAddress,\n getCreate2Address,\n getCreateAddress,\n} from './utils/address/getContractAddress.js'\nexport {\n type IsAddressErrorType,\n type IsAddressOptions,\n isAddress,\n} from './utils/address/isAddress.js'\nexport {\n type IsAddressEqualErrorType,\n type IsAddressEqualReturnType,\n isAddressEqual,\n} from './utils/address/isAddressEqual.js'\nexport {\n type BlobsToCommitmentsErrorType,\n type BlobsToCommitmentsParameters,\n type BlobsToCommitmentsReturnType,\n blobsToCommitments,\n} from './utils/blob/blobsToCommitments.js'\nexport {\n blobsToProofs,\n type blobsToProofsErrorType,\n type blobsToProofsParameters,\n type blobsToProofsReturnType,\n} from './utils/blob/blobsToProofs.js'\nexport {\n type CommitmentsToVersionedHashesErrorType,\n type CommitmentsToVersionedHashesParameters,\n type CommitmentsToVersionedHashesReturnType,\n commitmentsToVersionedHashes,\n} from './utils/blob/commitmentsToVersionedHashes.js'\nexport {\n type CommitmentToVersionedHashErrorType,\n type CommitmentToVersionedHashParameters,\n type CommitmentToVersionedHashReturnType,\n commitmentToVersionedHash,\n} from './utils/blob/commitmentToVersionedHash.js'\nexport {\n type FromBlobsErrorType,\n type FromBlobsParameters,\n type FromBlobsReturnType,\n fromBlobs,\n} from './utils/blob/fromBlobs.js'\nexport {\n type SidecarsToVersionedHashesErrorType,\n type SidecarsToVersionedHashesParameters,\n type SidecarsToVersionedHashesReturnType,\n sidecarsToVersionedHashes,\n} from './utils/blob/sidecarsToVersionedHashes.js'\nexport {\n type ToBlobSidecarsErrorType,\n type ToBlobSidecarsParameters,\n type ToBlobSidecarsReturnType,\n toBlobSidecars,\n} from './utils/blob/toBlobSidecars.js'\nexport {\n type ToBlobsErrorType,\n type ToBlobsParameters,\n type ToBlobsReturnType,\n toBlobs,\n} from './utils/blob/toBlobs.js'\nexport {\n type CcipRequestErrorType,\n type CcipRequestParameters,\n ccipRequest,\n /** @deprecated Use `ccipRequest`. */\n ccipRequest as ccipFetch,\n type OffchainLookupErrorType,\n offchainLookup,\n offchainLookupAbiItem,\n offchainLookupSignature,\n} from './utils/ccip.js'\nexport {\n type AssertCurrentChainErrorType,\n type AssertCurrentChainParameters,\n assertCurrentChain,\n} from './utils/chain/assertCurrentChain.js'\nexport { defineChain } from './utils/chain/defineChain.js'\nexport {\n type ExtractChainErrorType,\n type ExtractChainParameters,\n type ExtractChainReturnType,\n extractChain,\n} from './utils/chain/extractChain.js'\nexport {\n type GetChainContractAddressErrorType,\n getChainContractAddress,\n} from './utils/chain/getChainContractAddress.js'\nexport {\n type ConcatBytesErrorType,\n type ConcatErrorType,\n type ConcatHexErrorType,\n type ConcatReturnType,\n concat,\n concatBytes,\n concatHex,\n} from './utils/data/concat.js'\nexport { type IsBytesErrorType, isBytes } from './utils/data/isBytes.js'\nexport { type IsHexErrorType, isHex } from './utils/data/isHex.js'\nexport {\n type PadBytesErrorType,\n type PadErrorType,\n type PadHexErrorType,\n type PadReturnType,\n pad,\n padBytes,\n padHex,\n} from './utils/data/pad.js'\nexport { type SizeErrorType, size } from './utils/data/size.js'\nexport {\n type SliceBytesErrorType,\n type SliceErrorType,\n type SliceHexErrorType,\n slice,\n sliceBytes,\n sliceHex,\n} from './utils/data/slice.js'\nexport {\n type TrimErrorType,\n type TrimReturnType,\n trim,\n} from './utils/data/trim.js'\nexport {\n type BytesToBigIntErrorType,\n type BytesToBigIntOpts,\n type BytesToBoolErrorType,\n type BytesToBoolOpts,\n type BytesToNumberErrorType,\n type BytesToNumberOpts,\n type BytesToStringErrorType,\n type BytesToStringOpts,\n bytesToBigInt,\n bytesToBool,\n bytesToNumber,\n bytesToString,\n type FromBytesErrorType,\n type FromBytesParameters,\n fromBytes,\n} from './utils/encoding/fromBytes.js'\nexport {\n type FromHexErrorType,\n fromHex,\n type HexToBigIntErrorType,\n type HexToBoolErrorType,\n type HexToNumberErrorType,\n type HexToStringErrorType,\n hexToBigInt,\n hexToBool,\n hexToNumber,\n hexToString,\n} from './utils/encoding/fromHex.js'\nexport {\n type FromRlpErrorType,\n type FromRlpReturnType,\n fromRlp,\n} from './utils/encoding/fromRlp.js'\nexport {\n type BoolToBytesErrorType,\n type BoolToBytesOpts,\n boolToBytes,\n type HexToBytesErrorType,\n type HexToBytesOpts,\n hexToBytes,\n type NumberToBytesErrorType,\n numberToBytes,\n type StringToBytesErrorType,\n type StringToBytesOpts,\n stringToBytes,\n type ToBytesErrorType,\n type ToBytesParameters,\n toBytes,\n} from './utils/encoding/toBytes.js'\nexport {\n type BoolToHexErrorType,\n type BoolToHexOpts,\n type BytesToHexErrorType,\n type BytesToHexOpts,\n boolToHex,\n bytesToHex,\n type NumberToHexErrorType,\n type NumberToHexOpts,\n numberToHex,\n type StringToHexErrorType,\n type StringToHexOpts,\n stringToHex,\n type ToHexErrorType,\n type ToHexParameters,\n toHex,\n} from './utils/encoding/toHex.js'\nexport {\n type BytesToRlpErrorType,\n bytesToRlp,\n type HexToRlpErrorType,\n hexToRlp,\n type ToRlpErrorType,\n type ToRlpReturnType,\n toRlp,\n} from './utils/encoding/toRlp.js'\nexport { type LabelhashErrorType, labelhash } from './utils/ens/labelhash.js'\nexport { type NamehashErrorType, namehash } from './utils/ens/namehash.js'\nexport {\n type ToCoinTypeError,\n toCoinType,\n} from './utils/ens/toCoinType.js'\nexport {\n type GetContractErrorReturnType,\n getContractError,\n} from './utils/errors/getContractError.js'\nexport {\n type DefineBlockErrorType,\n defineBlock,\n type FormatBlockErrorType,\n type FormattedBlock,\n formatBlock,\n} from './utils/formatters/block.js'\nexport { type FormatLogErrorType, formatLog } from './utils/formatters/log.js'\nexport {\n type DefineTransactionErrorType,\n defineTransaction,\n type FormatTransactionErrorType,\n type FormattedTransaction,\n formatTransaction,\n transactionType,\n} from './utils/formatters/transaction.js'\nexport {\n type DefineTransactionReceiptErrorType,\n defineTransactionReceipt,\n type FormatTransactionReceiptErrorType,\n type FormattedTransactionReceipt,\n formatTransactionReceipt,\n} from './utils/formatters/transactionReceipt.js'\nexport {\n type DefineTransactionRequestErrorType,\n defineTransactionRequest,\n type FormatTransactionRequestErrorType,\n type FormattedTransactionRequest,\n formatTransactionRequest,\n rpcTransactionType,\n} from './utils/formatters/transactionRequest.js'\nexport { type IsHashErrorType, isHash } from './utils/hash/isHash.js'\nexport {\n type Keccak256ErrorType,\n type Keccak256Hash,\n keccak256,\n} from './utils/hash/keccak256.js'\nexport {\n type Ripemd160ErrorType,\n type Ripemd160Hash,\n ripemd160,\n} from './utils/hash/ripemd160.js'\nexport {\n type Sha256ErrorType,\n type Sha256Hash,\n sha256,\n} from './utils/hash/sha256.js'\nexport {\n type ToEventHashErrorType,\n toEventHash,\n} from './utils/hash/toEventHash.js'\nexport {\n type ToEventSelectorErrorType,\n /** @deprecated use `ToEventSelectorErrorType`. */\n type ToEventSelectorErrorType as GetEventSelectorErrorType,\n toEventSelector,\n /** @deprecated use `toEventSelector`. */\n toEventSelector as getEventSelector,\n} from './utils/hash/toEventSelector.js'\nexport {\n type ToEventSignatureErrorType,\n /** @deprecated use `ToEventSignatureErrorType`. */\n type ToEventSignatureErrorType as GetEventSignatureErrorType,\n toEventSignature,\n /** @deprecated use `toEventSignature`. */\n toEventSignature as getEventSignature,\n} from './utils/hash/toEventSignature.js'\nexport {\n type ToFunctionHashErrorType,\n toFunctionHash,\n} from './utils/hash/toFunctionHash.js'\nexport {\n type ToFunctionSelectorErrorType,\n /** @deprecated use `ToFunctionSelectorErrorType`. */\n type ToFunctionSelectorErrorType as GetFunctionSelectorErrorType,\n toFunctionSelector,\n /** @deprecated use `toFunctionSelector`. */\n toFunctionSelector as getFunctionSelector,\n} from './utils/hash/toFunctionSelector.js'\nexport {\n type ToFunctionSignatureErrorType,\n /** @deprecated use `ToFunctionSignatureErrorType`. */\n type ToFunctionSignatureErrorType as GetFunctionSignatureErrorType,\n toFunctionSignature,\n /** @deprecated use `toFunctionSignature`. */\n toFunctionSignature as getFunctionSignature,\n} from './utils/hash/toFunctionSignature.js'\nexport {\n type DefineKzgErrorType,\n type DefineKzgParameters,\n type DefineKzgReturnType,\n defineKzg,\n} from './utils/kzg/defineKzg.js'\nexport {\n type SetupKzgErrorType,\n type SetupKzgParameters,\n type SetupKzgReturnType,\n setupKzg,\n} from './utils/kzg/setupKzg.js'\nexport {\n type CreateNonceManagerParameters,\n createNonceManager,\n type NonceManager,\n type NonceManagerSource,\n nonceManager,\n} from './utils/nonceManager.js'\nexport { withCache } from './utils/promise/withCache.js'\nexport {\n type WithRetryErrorType,\n withRetry,\n} from './utils/promise/withRetry.js'\nexport {\n type WithTimeoutErrorType,\n withTimeout,\n} from './utils/promise/withTimeout.js'\nexport {\n type CompactSignatureToSignatureErrorType,\n compactSignatureToSignature,\n} from './utils/signature/compactSignatureToSignature.js'\nexport {\n type HashMessageErrorType,\n hashMessage,\n} from './utils/signature/hashMessage.js'\nexport {\n type HashDomainErrorType,\n type HashStructErrorType,\n type HashTypedDataErrorType,\n type HashTypedDataParameters,\n type HashTypedDataReturnType,\n hashDomain,\n hashStruct,\n hashTypedData,\n} from './utils/signature/hashTypedData.js'\nexport {\n type IsErc6492SignatureErrorType,\n type IsErc6492SignatureParameters,\n type IsErc6492SignatureReturnType,\n isErc6492Signature,\n} from './utils/signature/isErc6492Signature.js'\nexport {\n type IsErc8010SignatureErrorType,\n type IsErc8010SignatureParameters,\n type IsErc8010SignatureReturnType,\n isErc8010Signature,\n} from './utils/signature/isErc8010Signature.js'\nexport {\n /** @deprecated Use `ParseCompactSignatureErrorType`. */\n type ParseCompactSignatureErrorType as HexToCompactSignatureErrorType,\n type ParseCompactSignatureErrorType,\n /** @deprecated Use `parseCompactSignature`. */\n parseCompactSignature as hexToCompactSignature,\n parseCompactSignature,\n} from './utils/signature/parseCompactSignature.js'\nexport {\n type ParseErc6492SignatureErrorType,\n type ParseErc6492SignatureParameters,\n type ParseErc6492SignatureReturnType,\n parseErc6492Signature,\n} from './utils/signature/parseErc6492Signature.js'\nexport {\n type ParseErc8010SignatureErrorType,\n type ParseErc8010SignatureParameters,\n type ParseErc8010SignatureReturnType,\n parseErc8010Signature,\n} from './utils/signature/parseErc8010Signature.js'\nexport {\n /** @deprecated Use `ParseSignatureErrorType`. */\n type ParseSignatureErrorType as HexToSignatureErrorType,\n type ParseSignatureErrorType,\n /** @deprecated Use `parseSignature`. */\n parseSignature as hexToSignature,\n parseSignature,\n} from './utils/signature/parseSignature.js'\nexport {\n type RecoverAddressErrorType,\n type RecoverAddressParameters,\n type RecoverAddressReturnType,\n recoverAddress,\n} from './utils/signature/recoverAddress.js'\nexport {\n type RecoverMessageAddressErrorType,\n type RecoverMessageAddressParameters,\n type RecoverMessageAddressReturnType,\n recoverMessageAddress,\n} from './utils/signature/recoverMessageAddress.js'\nexport {\n type RecoverPublicKeyErrorType,\n type RecoverPublicKeyParameters,\n type RecoverPublicKeyReturnType,\n recoverPublicKey,\n} from './utils/signature/recoverPublicKey.js'\nexport {\n type RecoverTransactionAddressErrorType,\n type RecoverTransactionAddressParameters,\n type RecoverTransactionAddressReturnType,\n recoverTransactionAddress,\n} from './utils/signature/recoverTransactionAddress.js'\nexport {\n type RecoverTypedDataAddressErrorType,\n type RecoverTypedDataAddressParameters,\n type RecoverTypedDataAddressReturnType,\n recoverTypedDataAddress,\n} from './utils/signature/recoverTypedDataAddress.js'\nexport {\n /** @deprecated Use `SignatureToHexErrorType` instead. */\n type SerializeCompactSignatureErrorType as CompactSignatureToHexErrorType,\n type SerializeCompactSignatureErrorType,\n /** @deprecated Use `serializeCompactSignature` instead. */\n serializeCompactSignature as compactSignatureToHex,\n serializeCompactSignature,\n} from './utils/signature/serializeCompactSignature.js'\nexport {\n type SerializeErc6492SignatureErrorType,\n type SerializeErc6492SignatureParameters,\n type SerializeErc6492SignatureReturnType,\n serializeErc6492Signature,\n} from './utils/signature/serializeErc6492Signature.js'\nexport {\n type SerializeErc8010SignatureErrorType,\n type SerializeErc8010SignatureParameters,\n type SerializeErc8010SignatureReturnType,\n serializeErc8010Signature,\n} from './utils/signature/serializeErc8010Signature.js'\nexport {\n /** @deprecated Use `SignatureToHexErrorType` instead. */\n type SerializeSignatureErrorType as SignatureToHexErrorType,\n type SerializeSignatureErrorType,\n type SerializeSignatureParameters,\n type SerializeSignatureReturnType,\n /** @deprecated Use `serializeSignature` instead. */\n serializeSignature as signatureToHex,\n serializeSignature,\n} from './utils/signature/serializeSignature.js'\nexport {\n type SignatureToCompactSignatureErrorType,\n signatureToCompactSignature,\n} from './utils/signature/signatureToCompactSignature.js'\nexport {\n type ToPrefixedMessageErrorType,\n toPrefixedMessage,\n} from './utils/signature/toPrefixedMessage.js'\nexport {\n type VerifyHashErrorType,\n type VerifyHashParameters,\n type VerifyHashReturnType,\n verifyHash,\n} from './utils/signature/verifyHash.js'\nexport {\n type VerifyMessageErrorType,\n type VerifyMessageParameters,\n type VerifyMessageReturnType,\n verifyMessage,\n} from './utils/signature/verifyMessage.js'\nexport {\n type VerifyTypedDataErrorType,\n type VerifyTypedDataParameters,\n type VerifyTypedDataReturnType,\n verifyTypedData,\n} from './utils/signature/verifyTypedData.js'\nexport { type StringifyErrorType, stringify } from './utils/stringify.js'\nexport {\n type AssertRequestErrorType,\n assertRequest,\n} from './utils/transaction/assertRequest.js'\nexport {\n type AssertTransactionEIP1559ErrorType,\n type AssertTransactionEIP2930ErrorType,\n type AssertTransactionLegacyErrorType,\n assertTransactionEIP1559,\n assertTransactionEIP2930,\n assertTransactionLegacy,\n} from './utils/transaction/assertTransaction.js'\nexport {\n type GetSerializedTransactionType,\n type GetSerializedTransactionTypeErrorType,\n getSerializedTransactionType,\n} from './utils/transaction/getSerializedTransactionType.js'\nexport {\n type GetTransactionType,\n type GetTransactionTypeErrorType,\n getTransactionType,\n} from './utils/transaction/getTransactionType.js'\nexport {\n type ParseTransactionErrorType,\n type ParseTransactionReturnType,\n parseTransaction,\n} from './utils/transaction/parseTransaction.js'\nexport {\n type SerializeAccessListErrorType,\n serializeAccessList,\n} from './utils/transaction/serializeAccessList.js'\nexport {\n type SerializedTransactionReturnType,\n type SerializeTransactionErrorType,\n type SerializeTransactionFn,\n serializeTransaction,\n} from './utils/transaction/serializeTransaction.js'\nexport {\n type DomainSeparatorErrorType,\n domainSeparator,\n type GetTypesForEIP712DomainErrorType,\n getTypesForEIP712Domain,\n type SerializeTypedDataErrorType,\n serializeTypedData,\n type ValidateTypedDataErrorType,\n validateTypedData,\n} from './utils/typedData.js'\nexport {\n type FormatEtherErrorType,\n formatEther,\n} from './utils/unit/formatEther.js'\nexport {\n type FormatGweiErrorType,\n formatGwei,\n} from './utils/unit/formatGwei.js'\nexport {\n type FormatUnitsErrorType,\n formatUnits,\n} from './utils/unit/formatUnits.js'\nexport {\n type ParseEtherErrorType,\n parseEther,\n} from './utils/unit/parseEther.js'\nexport { type ParseGweiErrorType, parseGwei } from './utils/unit/parseGwei.js'\nexport {\n type ParseUnitsErrorType,\n parseUnits,\n} from './utils/unit/parseUnits.js'\n","import { useReducer, useCallback, useEffect } from \"react\";\nimport {\n useVolrContext,\n useInternalAuth,\n useVolr,\n useVolrPaymentApi,\n type PaymentResult,\n} from \"@volr/react\";\nimport { useVolrModal, type PaymentModalOptions } from \"./useVolrModal\";\nimport { erc20Abi } from \"viem\";\n\n// ============ Types ============\n\ntype PaymentStep = \"info\" | \"processing\" | \"result\";\ntype ProcessingStep = \"signing\" | \"broadcasting\" | \"confirming\";\n\ninterface PaymentError {\n code: string;\n message: string;\n}\n\ninterface PaymentModalState {\n step: PaymentStep;\n processingStep: ProcessingStep;\n balance: string;\n isBalanceLoading: boolean;\n isConfigLoading: boolean;\n isPaying: boolean;\n currentPayment: PaymentResult | null;\n txHash: string | undefined;\n error: PaymentError | undefined;\n logoUrl: string | undefined;\n receiverAddress: string | null;\n showDeposit: boolean;\n}\n\n// ============ Actions ============\n\ntype PaymentModalAction =\n | { type: \"RESET\" }\n | { type: \"INIT_PAYMENT\"; payment: PaymentResult }\n | { type: \"SET_BALANCE\"; balance: string }\n | { type: \"SET_BALANCE_LOADING\"; loading: boolean }\n | { type: \"SET_CONFIG_LOADING\"; loading: boolean }\n | { type: \"SET_LOGO_URL\"; logoUrl: string | undefined }\n | { type: \"SET_RECEIVER_ADDRESS\"; receiverAddress: string | null }\n | { type: \"START_PAYMENT\" }\n | { type: \"SET_PROCESSING_STEP\"; step: ProcessingStep }\n | { type: \"SET_TX_HASH\"; txHash: string }\n | { type: \"PAYMENT_SUCCESS\"; payment: PaymentResult }\n | { type: \"PAYMENT_ERROR\"; error: PaymentError }\n | { type: \"RETRY\" }\n | { type: \"SHOW_DEPOSIT\" }\n | { type: \"HIDE_DEPOSIT\" };\n\n// ============ Reducer ============\n\nconst initialState: PaymentModalState = {\n step: \"info\",\n processingStep: \"signing\",\n balance: \"0\",\n isBalanceLoading: true,\n isConfigLoading: true,\n isPaying: false,\n currentPayment: null,\n txHash: undefined,\n error: undefined,\n logoUrl: undefined,\n receiverAddress: null,\n showDeposit: false,\n};\n\nfunction paymentModalReducer(\n state: PaymentModalState,\n action: PaymentModalAction\n): PaymentModalState {\n switch (action.type) {\n case \"RESET\":\n return { ...initialState };\n\n case \"INIT_PAYMENT\":\n return {\n ...initialState,\n currentPayment: action.payment,\n isBalanceLoading: true,\n isConfigLoading: true,\n };\n\n case \"SET_BALANCE\":\n return { ...state, balance: action.balance };\n\n case \"SET_BALANCE_LOADING\":\n return { ...state, isBalanceLoading: action.loading };\n\n case \"SET_CONFIG_LOADING\":\n return { ...state, isConfigLoading: action.loading };\n\n case \"SET_LOGO_URL\":\n return { ...state, logoUrl: action.logoUrl };\n\n case \"SET_RECEIVER_ADDRESS\":\n return { ...state, receiverAddress: action.receiverAddress };\n\n case \"START_PAYMENT\":\n return {\n ...state,\n isPaying: true,\n step: \"processing\",\n processingStep: \"signing\",\n error: undefined,\n };\n\n case \"SET_PROCESSING_STEP\":\n return { ...state, processingStep: action.step };\n\n case \"SET_TX_HASH\":\n return { ...state, txHash: action.txHash };\n\n case \"PAYMENT_SUCCESS\":\n return {\n ...state,\n isPaying: false,\n step: \"result\",\n currentPayment: action.payment,\n };\n\n case \"PAYMENT_ERROR\":\n return {\n ...state,\n isPaying: false,\n step: \"result\",\n error: action.error,\n };\n\n case \"RETRY\":\n return {\n ...state,\n step: \"info\",\n error: undefined,\n isBalanceLoading: true,\n };\n\n case \"SHOW_DEPOSIT\":\n return { ...state, showDeposit: true };\n\n case \"HIDE_DEPOSIT\":\n return { ...state, showDeposit: false, isBalanceLoading: true };\n\n default:\n return state;\n }\n}\n\n// ============ Hook ============\n\nexport interface UsePaymentModalStateReturn {\n state: PaymentModalState;\n // Actions\n handlePay: () => Promise<void>;\n handleDeposit: () => void;\n handleDepositClose: (open: boolean) => void;\n handleDone: () => void;\n handleRetry: () => void;\n handleClose: () => void;\n handleReport: () => Promise<void>;\n // Helpers\n canClose: boolean;\n isConfigured: boolean;\n}\n\nexport function usePaymentModalState(\n open: boolean,\n onOpenChange: (open: boolean) => void\n): UsePaymentModalStateReturn {\n const { user } = useVolrContext();\n const { client } = useInternalAuth();\n const { evm } = useVolr();\n const { paymentOptions } = useVolrModal();\n const { updatePaymentToProcessing, pollPaymentStatus } = useVolrPaymentApi();\n\n const [state, dispatch] = useReducer(paymentModalReducer, initialState);\n\n // ============ Data Fetching ============\n\n const fetchBalance = useCallback(\n async (payment: PaymentResult) => {\n if (!user?.evmAddress) {\n dispatch({ type: \"SET_BALANCE_LOADING\", loading: false });\n return;\n }\n\n dispatch({ type: \"SET_BALANCE_LOADING\", loading: true });\n try {\n const evmClient = evm(payment.token.chainId);\n const tokenAddress = payment.token.id.split(\"_\")[1];\n let balanceRaw: bigint;\n\n if (tokenAddress === \"native\") {\n balanceRaw = await evmClient.getBalance(user.evmAddress);\n } else {\n balanceRaw = (await evmClient.readContract({\n address: tokenAddress as `0x${string}`,\n abi: erc20Abi,\n functionName: \"balanceOf\",\n args: [user.evmAddress],\n })) as bigint;\n }\n\n const balanceNum =\n Number(balanceRaw) / Math.pow(10, payment.token.decimals);\n const formattedBalance = balanceNum.toLocaleString(undefined, {\n minimumFractionDigits: 0,\n maximumFractionDigits:\n payment.token.decimals > 6 ? 6 : payment.token.decimals,\n });\n\n dispatch({ type: \"SET_BALANCE\", balance: formattedBalance });\n } catch (err) {\n console.error(\"Failed to fetch balance:\", err);\n dispatch({ type: \"SET_BALANCE\", balance: \"0\" });\n } finally {\n dispatch({ type: \"SET_BALANCE_LOADING\", loading: false });\n }\n },\n [user, evm]\n );\n\n const fetchBranding = useCallback(async () => {\n try {\n const response = await client.get<{ logoUrl?: string }>(\"/auth/branding\");\n dispatch({ type: \"SET_LOGO_URL\", logoUrl: response.logoUrl });\n } catch {\n // Ignore branding errors\n }\n }, [client]);\n\n const fetchPaymentConfig = useCallback(async () => {\n dispatch({ type: \"SET_CONFIG_LOADING\", loading: true });\n try {\n const response = await client.get<{ receiverAddress: string }>(\n \"/payments/config\"\n );\n dispatch({\n type: \"SET_RECEIVER_ADDRESS\",\n receiverAddress: response.receiverAddress,\n });\n } catch (err) {\n console.error(\"Failed to fetch payment config:\", err);\n dispatch({ type: \"SET_RECEIVER_ADDRESS\", receiverAddress: null });\n } finally {\n dispatch({ type: \"SET_CONFIG_LOADING\", loading: false });\n }\n }, [client]);\n\n // ============ Effects ============\n\n useEffect(() => {\n if (open && paymentOptions) {\n dispatch({ type: \"INIT_PAYMENT\", payment: paymentOptions.payment });\n fetchBalance(paymentOptions.payment);\n fetchBranding();\n fetchPaymentConfig();\n } else if (!open) {\n dispatch({ type: \"RESET\" });\n }\n }, [open, paymentOptions, fetchBalance, fetchBranding, fetchPaymentConfig]);\n\n // ============ Handlers ============\n\n const handlePay = useCallback(async () => {\n const { currentPayment, receiverAddress } = state;\n if (!currentPayment || !user?.evmAddress || !paymentOptions || !receiverAddress) {\n return;\n }\n\n dispatch({ type: \"START_PAYMENT\" });\n\n try {\n const evmClient = evm(currentPayment.token.chainId);\n const tokenAddress = currentPayment.token.id.split(\"_\")[1];\n\n dispatch({ type: \"SET_PROCESSING_STEP\", step: \"broadcasting\" });\n\n let result;\n if (tokenAddress === \"native\") {\n result = await evmClient.sendTransaction({\n to: receiverAddress as `0x${string}`,\n data: \"0x\",\n value: BigInt(currentPayment.amount),\n });\n } else {\n result = await evmClient.sendBatch([\n {\n target: tokenAddress as `0x${string}`,\n abi: erc20Abi,\n functionName: \"transfer\",\n args: [\n receiverAddress as `0x${string}`,\n BigInt(currentPayment.amount),\n ],\n },\n ]);\n }\n\n dispatch({ type: \"SET_TX_HASH\", txHash: result.txHash ?? \"\" });\n dispatch({ type: \"SET_PROCESSING_STEP\", step: \"confirming\" });\n\n await updatePaymentToProcessing(currentPayment.id, result.txId);\n\n paymentOptions.onProcessing?.({\n ...currentPayment,\n txHash: result.txHash ?? \"\",\n status: \"PROCESSING\",\n });\n\n const confirmedPayment = await pollPaymentStatus(currentPayment.id);\n\n dispatch({ type: \"PAYMENT_SUCCESS\", payment: confirmedPayment });\n\n if (confirmedPayment.status === \"CONFIRMED\") {\n paymentOptions.onComplete?.(confirmedPayment);\n } else if (confirmedPayment.status === \"FAILED\") {\n const failError = {\n code: \"PAYMENT_FAILED\",\n message: \"Transaction failed on-chain\",\n };\n dispatch({ type: \"PAYMENT_ERROR\", error: failError });\n paymentOptions.onError?.(failError);\n }\n } catch (err: any) {\n console.error(\"Payment failed:\", err);\n const paymentError = {\n code: err.code || \"PAYMENT_FAILED\",\n message: err.message || \"Payment failed. Please try again.\",\n };\n dispatch({ type: \"PAYMENT_ERROR\", error: paymentError });\n paymentOptions?.onError?.(paymentError);\n }\n }, [\n state,\n user,\n paymentOptions,\n evm,\n updatePaymentToProcessing,\n pollPaymentStatus,\n ]);\n\n const handleDeposit = useCallback(() => {\n dispatch({ type: \"SHOW_DEPOSIT\" });\n }, []);\n\n const handleDepositClose = useCallback(\n (depositOpen: boolean) => {\n if (!depositOpen) {\n dispatch({ type: \"HIDE_DEPOSIT\" });\n if (state.currentPayment) {\n fetchBalance(state.currentPayment);\n }\n }\n },\n [state.currentPayment, fetchBalance]\n );\n\n const handleDone = useCallback(() => {\n if (state.currentPayment?.status === \"CONFIRMED\") {\n paymentOptions?.onComplete?.(state.currentPayment);\n }\n onOpenChange(false);\n }, [state.currentPayment, paymentOptions, onOpenChange]);\n\n const handleRetry = useCallback(() => {\n dispatch({ type: \"RETRY\" });\n if (state.currentPayment) {\n fetchBalance(state.currentPayment);\n }\n }, [state.currentPayment, fetchBalance]);\n\n const handleClose = useCallback(() => {\n if (state.step === \"processing\") {\n return;\n }\n if (state.step === \"info\") {\n paymentOptions?.onCancel?.();\n }\n onOpenChange(false);\n }, [state.step, paymentOptions, onOpenChange]);\n\n const handleReport = useCallback(async () => {\n const { currentPayment, error, step, txHash } = state;\n if (!currentPayment || !error) return;\n\n try {\n await client.post(`/payments/${currentPayment.id}/report`, {\n errorCode: error.code,\n errorMessage: error.message,\n platform: \"web\",\n context: {\n step,\n txHash,\n tokenId: currentPayment.token.id,\n chainId: currentPayment.token.chainId,\n amount: currentPayment.amount,\n },\n });\n\n alert(\"Error report submitted. Thank you for your feedback.\");\n } catch (err) {\n console.error(\"Failed to submit error report:\", err);\n alert(\n `Error Code: ${error.code}\\n\\nMessage: ${error.message}\\n\\nPlease contact support with this information.`\n );\n }\n }, [state, client]);\n\n // ============ Computed ============\n\n const canClose = state.step !== \"processing\";\n const isConfigured = state.receiverAddress !== null;\n\n return {\n state,\n handlePay,\n handleDeposit,\n handleDepositClose,\n handleDone,\n handleRetry,\n handleClose,\n handleReport,\n canClose,\n isConfigured,\n };\n}\n\n","import React from \"react\";\n\nexport const PaymentSkeleton: React.FC = () => {\n return (\n <div className=\"volr:space-y-6 volr:animate-pulse\">\n {/* Item placeholder */}\n <div className=\"volr:flex volr:items-center volr:gap-4\">\n <div className=\"volr:w-16 volr:h-16 volr:bg-slate-200 volr:rounded-xl\" />\n <div className=\"volr:flex-1 volr:space-y-2\">\n <div className=\"volr:h-5 volr:bg-slate-200 volr:rounded volr:w-32\" />\n <div className=\"volr:h-4 volr:bg-slate-100 volr:rounded volr:w-48\" />\n </div>\n </div>\n\n {/* Divider */}\n <div className=\"volr:h-px volr:bg-slate-200\" />\n\n {/* Amount placeholder */}\n <div className=\"volr:space-y-2\">\n <div className=\"volr:h-4 volr:bg-slate-100 volr:rounded volr:w-20\" />\n <div className=\"volr:h-8 volr:bg-slate-200 volr:rounded volr:w-40\" />\n <div className=\"volr:h-4 volr:bg-slate-100 volr:rounded volr:w-24\" />\n </div>\n\n {/* Balance placeholder */}\n <div className=\"volr:flex volr:justify-between volr:items-center volr:p-3 volr:bg-slate-50 volr:rounded-lg\">\n <div className=\"volr:h-4 volr:bg-slate-200 volr:rounded volr:w-24\" />\n <div className=\"volr:h-4 volr:bg-slate-200 volr:rounded volr:w-20\" />\n </div>\n\n {/* Button placeholder */}\n <div className=\"volr:h-12 volr:bg-slate-200 volr:rounded-lg\" />\n </div>\n );\n};\n\n\n\n","import React from \"react\";\n\ninterface BalanceDisplayProps {\n balance: string;\n symbol: string;\n required: string;\n isInsufficient: boolean;\n}\n\nexport const BalanceDisplay: React.FC<BalanceDisplayProps> = ({\n balance,\n symbol,\n required,\n isInsufficient,\n}) => {\n return (\n <div\n className={`volr:flex volr:justify-between volr:items-center volr:p-3 volr:rounded-lg ${\n isInsufficient\n ? \"volr:bg-red-50 volr:border volr:border-red-200\"\n : \"volr:bg-slate-50\"\n }`}\n >\n <span className=\"volr:text-sm volr:text-slate-600\">Your Balance</span>\n <div className=\"volr:text-right\">\n <span\n className={`volr:text-sm volr:font-medium ${\n isInsufficient ? \"volr:text-red-600\" : \"volr:text-slate-900\"\n }`}\n >\n {balance} {symbol}\n </span>\n {isInsufficient && (\n <p className=\"volr:text-xs volr:text-red-500 volr:mt-0.5\">\n Need {required} {symbol}\n </p>\n )}\n </div>\n </div>\n );\n};\n\n\n\n","import React from \"react\";\n\ninterface ItemDisplayProps {\n name: string;\n description?: string;\n image?: string;\n logoUrl?: string; // Branding logo from dashboard\n}\n\nexport const ItemDisplay: React.FC<ItemDisplayProps> = ({\n name,\n description,\n image,\n logoUrl,\n}) => {\n const displayImage = image || logoUrl;\n\n return (\n <div className=\"volr:flex volr:items-start volr:gap-4\">\n {displayImage ? (\n <img\n src={displayImage}\n alt={name}\n className=\"volr:w-16 volr:h-16 volr:rounded-xl volr:object-cover volr:bg-slate-100\"\n onError={(e) => {\n (e.target as HTMLImageElement).style.display = \"none\";\n }}\n />\n ) : (\n <div className=\"volr:w-16 volr:h-16 volr:rounded-xl volr:bg-slate-100 volr:flex volr:items-center volr:justify-center\">\n <svg\n className=\"volr:w-8 volr:h-8 volr:text-slate-400\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n d=\"M20 7l-8-4-8 4m16 0l-8 4m8-4v10l-8 4m0-10L4 7m8 4v10M4 7v10l8 4\"\n />\n </svg>\n </div>\n )}\n <div className=\"volr:flex-1 volr:min-w-0\">\n <h3 className=\"volr:text-base volr:font-semibold volr:text-slate-900 volr:truncate\">\n {name}\n </h3>\n {description && (\n <p className=\"volr:text-sm volr:text-slate-500 volr:mt-0.5 volr:line-clamp-2\">\n {description}\n </p>\n )}\n </div>\n </div>\n );\n};\n\n\n\n","import React from \"react\";\nimport { Button } from \"@/components/materials/Button\";\nimport { PoweredBy } from \"@/components/materials/PoweredBy\";\nimport { ItemDisplay, BalanceDisplay } from \"../components\";\nimport type { PaymentResult } from \"@volr/react\";\n\ninterface PaymentInfoViewProps {\n payment: PaymentResult;\n balance: string;\n isBalanceLoading: boolean;\n logoUrl?: string;\n onPay: () => void;\n onDeposit: () => void;\n isPaying: boolean;\n}\n\nexport const PaymentInfoView: React.FC<PaymentInfoViewProps> = ({\n payment,\n balance,\n isBalanceLoading,\n logoUrl,\n onPay,\n onDeposit,\n isPaying,\n}) => {\n const { token, itemName, itemDescription, itemImage } = payment;\n\n // Parse amount from raw units\n const amountInUnits = Number(payment.amount) / Math.pow(10, token.decimals);\n const formattedAmount = amountInUnits.toLocaleString(undefined, {\n minimumFractionDigits: 0,\n maximumFractionDigits: token.decimals > 6 ? 6 : token.decimals,\n });\n\n // Check if balance is sufficient\n const balanceNum = parseFloat(balance.replace(/,/g, \"\") || \"0\");\n const isInsufficient = !isBalanceLoading && balanceNum < amountInUnits;\n\n return (\n <div className=\"volr:space-y-6\">\n {/* Item Info */}\n {itemName && (\n <>\n <ItemDisplay\n name={itemName}\n description={itemDescription ?? undefined}\n image={itemImage ?? undefined}\n logoUrl={logoUrl}\n />\n <div className=\"volr:h-px volr:bg-slate-200\" />\n </>\n )}\n\n {/* Amount */}\n <div className=\"volr:space-y-1\">\n <p className=\"volr:text-sm volr:text-slate-500\">Amount to Pay</p>\n <div className=\"volr:flex volr:items-baseline volr:gap-2\">\n <span className=\"volr:text-2xl volr:font-bold volr:text-slate-900\">\n {formattedAmount}\n </span>\n <span className=\"volr:text-lg volr:font-medium volr:text-slate-600\">\n {token.symbol}\n </span>\n </div>\n {payment.totalUsd && (\n <p className=\"volr:text-sm volr:text-slate-400\">\n ≈ ${parseFloat(payment.totalUsd).toFixed(2)} USD\n </p>\n )}\n </div>\n\n {/* Balance */}\n {isBalanceLoading ? (\n <div className=\"volr:flex volr:justify-between volr:items-center volr:p-3 volr:bg-slate-50 volr:rounded-lg volr:animate-pulse\">\n <span className=\"volr:text-sm volr:text-slate-400\">Loading balance...</span>\n <div className=\"volr:h-4 volr:bg-slate-200 volr:rounded volr:w-20\" />\n </div>\n ) : (\n <BalanceDisplay\n balance={balance}\n symbol={token.symbol}\n required={formattedAmount}\n isInsufficient={isInsufficient}\n />\n )}\n\n {/* Actions */}\n <div className=\"volr:space-y-3\">\n <Button\n onClick={onPay}\n disabled={isPaying || isBalanceLoading || isInsufficient}\n className=\"volr:w-full\"\n >\n {isPaying ? (\n <span className=\"volr:flex volr:items-center volr:justify-center volr:gap-2\">\n <svg className=\"volr:animate-spin volr:h-4 volr:w-4\" viewBox=\"0 0 24 24\">\n <circle\n className=\"volr:opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n fill=\"none\"\n />\n <path\n className=\"volr:opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n Processing...\n </span>\n ) : isInsufficient ? (\n \"Insufficient Balance\"\n ) : (\n `Pay ${formattedAmount} ${token.symbol}`\n )}\n </Button>\n\n {isInsufficient && (\n <Button variant=\"secondary\" onClick={onDeposit} className=\"volr:w-full\">\n Deposit {token.symbol}\n </Button>\n )}\n </div>\n\n {/* Powered By */}\n <PoweredBy />\n </div>\n );\n};\n\n\n\n","import React from \"react\";\n\ninterface PaymentProcessingViewProps {\n step: \"signing\" | \"broadcasting\" | \"confirming\";\n txHash?: string;\n}\n\nexport const PaymentProcessingView: React.FC<PaymentProcessingViewProps> = ({\n step,\n txHash,\n}) => {\n const steps = [\n { id: \"signing\", label: \"Signing transaction\" },\n { id: \"broadcasting\", label: \"Broadcasting\" },\n { id: \"confirming\", label: \"Confirming on-chain\" },\n ];\n\n const currentStepIndex = steps.findIndex((s) => s.id === step);\n\n return (\n <div className=\"volr:p-6 volr:space-y-8\">\n {/* Spinner */}\n <div className=\"volr:flex volr:justify-center volr:py-4\">\n <div className=\"volr:relative volr:w-16 volr:h-16\">\n <svg\n className=\"volr:animate-spin volr:w-16 volr:h-16 volr:text-slate-900\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"volr:opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n fill=\"none\"\n />\n <path\n className=\"volr:opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n </div>\n </div>\n\n {/* Status */}\n <div className=\"volr:text-center\">\n <h3 className=\"volr:text-lg volr:font-semibold volr:text-slate-900\">\n Processing Payment\n </h3>\n <p className=\"volr:text-sm volr:text-slate-500 volr:mt-1\">\n Please wait while we process your transaction\n </p>\n </div>\n\n {/* Progress Steps */}\n <div className=\"volr:space-y-3\">\n {steps.map((s, index) => {\n const isCompleted = index < currentStepIndex;\n const isCurrent = index === currentStepIndex;\n const isPending = index > currentStepIndex;\n\n return (\n <div\n key={s.id}\n className=\"volr:flex volr:items-center volr:gap-3 volr:px-3 volr:py-2\"\n >\n {/* Icon */}\n <div\n className={`volr:w-6 volr:h-6 volr:rounded-full volr:flex volr:items-center volr:justify-center ${\n isCompleted\n ? \"volr:bg-green-100\"\n : isCurrent\n ? \"volr:bg-slate-900\"\n : \"volr:bg-slate-100\"\n }`}\n >\n {isCompleted ? (\n <svg\n className=\"volr:w-4 volr:h-4 volr:text-green-600\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M5 13l4 4L19 7\"\n />\n </svg>\n ) : isCurrent ? (\n <div className=\"volr:w-2 volr:h-2 volr:bg-white volr:rounded-full volr:animate-pulse\" />\n ) : (\n <div className=\"volr:w-2 volr:h-2 volr:bg-slate-300 volr:rounded-full\" />\n )}\n </div>\n\n {/* Label */}\n <span\n className={`volr:text-sm ${\n isCompleted\n ? \"volr:text-green-600 volr:font-medium\"\n : isCurrent\n ? \"volr:text-slate-900 volr:font-medium\"\n : \"volr:text-slate-400\"\n }`}\n >\n {s.label}\n </span>\n </div>\n );\n })}\n </div>\n\n {/* Transaction Hash */}\n {txHash && (\n <div className=\"volr:text-center volr:pt-2\">\n <p className=\"volr:text-xs volr:text-slate-400\">Transaction Hash</p>\n <code className=\"volr:text-xs volr:text-slate-500 volr:font-mono\">\n {txHash.slice(0, 10)}...{txHash.slice(-8)}\n </code>\n </div>\n )}\n </div>\n );\n};\n\n\n\n","import React from \"react\";\nimport { Button } from \"@/components/materials/Button\";\nimport type { PaymentResult } from \"@volr/react\";\n\ninterface PaymentResultViewProps {\n payment: PaymentResult;\n error?: { code: string; message: string };\n onDone: () => void;\n onRetry: () => void;\n onReport: () => void;\n}\n\nexport const PaymentResultView: React.FC<PaymentResultViewProps> = ({\n payment,\n error,\n onDone,\n onRetry,\n onReport,\n}) => {\n const isSuccess = payment.status === \"CONFIRMED\";\n const isFailed = payment.status === \"FAILED\" || !!error;\n\n return (\n <div className=\"volr:space-y-6\">\n {/* Icon */}\n <div className=\"volr:flex volr:justify-center volr:py-4\">\n {isSuccess ? (\n <div className=\"volr:w-16 volr:h-16 volr:rounded-full volr:bg-green-100 volr:flex volr:items-center volr:justify-center\">\n <svg\n className=\"volr:w-8 volr:h-8 volr:text-green-600\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M5 13l4 4L19 7\"\n />\n </svg>\n </div>\n ) : (\n <div className=\"volr:w-16 volr:h-16 volr:rounded-full volr:bg-red-100 volr:flex volr:items-center volr:justify-center\">\n <svg\n className=\"volr:w-8 volr:h-8 volr:text-red-600\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </div>\n )}\n </div>\n\n {/* Message */}\n <div className=\"volr:text-center\">\n <h3 className=\"volr:text-lg volr:font-semibold volr:text-slate-900\">\n {isSuccess ? \"Payment Complete\" : \"Payment Failed\"}\n </h3>\n <p className=\"volr:text-sm volr:text-slate-500 volr:mt-1\">\n {isSuccess\n ? \"Your transaction has been confirmed\"\n : error?.message || \"The transaction could not be completed\"}\n </p>\n {isFailed && error?.code && (\n <p className=\"volr:text-xs volr:text-slate-400 volr:mt-1 volr:font-mono\">\n Error code: {error.code}\n </p>\n )}\n </div>\n\n {/* Transaction Details (Success) */}\n {isSuccess && payment.txHash && (\n <div className=\"volr:bg-slate-50 volr:rounded-lg volr:p-4 volr:space-y-2\">\n <div className=\"volr:flex volr:justify-between volr:text-sm\">\n <span className=\"volr:text-slate-500\">Amount</span>\n <span className=\"volr:font-medium volr:text-slate-900\">\n {(\n Number(payment.amount) / Math.pow(10, payment.token.decimals)\n ).toLocaleString()}{\" \"}\n {payment.token.symbol}\n </span>\n </div>\n {payment.totalUsd && (\n <div className=\"volr:flex volr:justify-between volr:text-sm\">\n <span className=\"volr:text-slate-500\">USD Value</span>\n <span className=\"volr:text-slate-600\">\n ${parseFloat(payment.totalUsd).toFixed(2)}\n </span>\n </div>\n )}\n <div className=\"volr:flex volr:justify-between volr:text-sm\">\n <span className=\"volr:text-slate-500\">Transaction</span>\n <code className=\"volr:text-xs volr:text-slate-600 volr:font-mono\">\n {payment.txHash.slice(0, 8)}...{payment.txHash.slice(-6)}\n </code>\n </div>\n </div>\n )}\n\n {/* Actions */}\n <div className=\"volr:space-y-3\">\n {isSuccess ? (\n <Button onClick={onDone} className=\"volr:w-full\">\n Done\n </Button>\n ) : (\n <>\n <Button onClick={onRetry} className=\"volr:w-full\">\n Try Again\n </Button>\n <div className=\"volr:flex volr:gap-3\">\n <Button variant=\"secondary\" onClick={onReport} className=\"volr:flex-1\">\n Report Issue\n </Button>\n <Button variant=\"secondary\" onClick={onDone} className=\"volr:flex-1\">\n Cancel\n </Button>\n </div>\n </>\n )}\n </div>\n </div>\n );\n};\n","import React from \"react\";\nimport { Modal, ModalHeader } from \"@/components/materials/modal\";\nimport { useVolrModal } from \"@/hooks/useVolrModal\";\nimport { usePaymentModalState } from \"@/hooks/usePaymentModalState\";\nimport { DepositModal } from \"@/components/features/deposit/DepositModal\";\nimport { PaymentInfoView } from \"./views/PaymentInfoView\";\nimport { PaymentProcessingView } from \"./views/PaymentProcessingView\";\nimport { PaymentResultView } from \"./views/PaymentResultView\";\nimport { PaymentSkeleton } from \"./components\";\n\nexport interface PaymentModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}\n\nexport const PaymentModal: React.FC<PaymentModalProps> = ({\n open,\n onOpenChange,\n}) => {\n const { paymentOptions } = useVolrModal();\n const {\n state,\n handlePay,\n handleDeposit,\n handleDepositClose,\n handleDone,\n handleRetry,\n handleClose,\n handleReport,\n canClose,\n isConfigured,\n } = usePaymentModalState(open, onOpenChange);\n\n const {\n step,\n processingStep,\n balance,\n isBalanceLoading,\n isConfigLoading,\n isPaying,\n currentPayment,\n txHash,\n error,\n logoUrl,\n showDeposit,\n } = state;\n\n // Show deposit modal if active\n if (showDeposit && currentPayment) {\n return (\n <DepositModal\n open={true}\n onOpenChange={handleDepositClose}\n asset={{\n chainId: currentPayment.token.chainId,\n symbol: currentPayment.token.symbol,\n }}\n />\n );\n }\n\n // Render skeleton if no payment options or still loading config\n if (!paymentOptions || !currentPayment || isConfigLoading) {\n return (\n <Modal open={open} onOpenChange={onOpenChange}>\n <ModalHeader onClose={() => onOpenChange(false)} />\n <PaymentSkeleton />\n </Modal>\n );\n }\n\n // Show error if no receiver address configured (only after loading completes)\n if (!isConfigured && step === \"info\" && !isConfigLoading) {\n return (\n <Modal open={open} onOpenChange={handleClose}>\n <ModalHeader onClose={handleClose} />\n <div className=\"volr:text-center\">\n <p className=\"volr:text-sm volr:text-red-600\">\n Payment not configured. Please contact the app developer.\n </p>\n </div>\n </Modal>\n );\n }\n\n return (\n <Modal open={open} onOpenChange={handleClose}>\n <ModalHeader\n onClose={canClose ? handleClose : undefined}\n title={step === \"info\" ? \"Confirm Payment\" : undefined}\n />\n\n {step === \"info\" && (\n <PaymentInfoView\n payment={currentPayment}\n balance={balance}\n isBalanceLoading={isBalanceLoading}\n logoUrl={logoUrl}\n onPay={handlePay}\n onDeposit={handleDeposit}\n isPaying={isPaying}\n />\n )}\n\n {step === \"processing\" && (\n <PaymentProcessingView step={processingStep} txHash={txHash} />\n )}\n\n {step === \"result\" && (\n <PaymentResultView\n payment={currentPayment}\n error={error}\n onDone={handleDone}\n onRetry={handleRetry}\n onReport={handleReport}\n />\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 { PaymentModal } from \"@/components/features/payment\";\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 <PaymentModalPortal />\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 * Payment Modal via portal\n */\nfunction PaymentModalPortal() {\n const { isOpen, mode, close } = useVolrModal();\n const [portalRoot, setPortalRoot] = useState<HTMLElement | null>(null);\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 if (!portalRoot) return null;\n\n return createPortal(\n <PaymentModal\n open={isOpen && mode === \"payment\"}\n onOpenChange={(open) => !open && close()}\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","/**\n * useVolrPay hook - Payment with UI integration\n * \n * This hook provides payment functionality with PaymentModal integration.\n * For headless API-only access, use useVolrPaymentApi from @volr/react\n */\n\nimport { useCallback, useRef } from 'react';\nimport { useVolrPaymentApi, type PaymentResult, type PaymentHistoryOptions, type PaymentHistoryResult } from '@volr/react';\nimport { useVolrModal, type PaymentModalOptions } from './useVolrModal';\n\n/**\n * Payment item displayed in modal\n */\nexport interface PaymentItem {\n /** Item name */\n name: string;\n /** Item description (optional) */\n description?: string;\n /** Item image URL (optional, falls back to project branding logo) */\n image?: string;\n}\n\n/**\n * Payment error\n */\nexport interface PaymentError {\n code: string;\n message: string;\n}\n\n/**\n * Payment handlers/callbacks\n */\nexport interface PaymentHandlers {\n /** Called when payment is created */\n onCreated?: (payment: { id: string }) => void;\n /** Called when transaction is broadcasted */\n onProcessing?: (payment: { id: string; txHash: string }) => void;\n /** Called when payment is confirmed on-chain */\n onSuccess?: (result: PaymentResult) => void;\n /** Called when payment fails */\n onError?: (error: PaymentError) => void;\n /** Called when user cancels */\n onCancel?: () => void;\n}\n\n/**\n * Options for pay() function\n */\nexport interface PayOptions {\n /** Amount in token units (before decimals) */\n amount: number;\n /** Item information to display in modal */\n item?: PaymentItem;\n /** Client-side reference ID */\n referenceId?: string;\n /** Custom metadata (max 50 keys) */\n metadata?: Record<string, string>;\n /** Idempotency key to prevent duplicates */\n idempotencyKey?: string;\n /** Expiration time in seconds (default: 900 = 15 min) */\n expiresInSec?: number;\n /** Callback handlers */\n handlers?: PaymentHandlers;\n}\n\n/**\n * Payment handle returned from pay()\n */\nexport interface PaymentHandle {\n /** Payment ID */\n id: string;\n /** Current payment status */\n status: PaymentResult['status'];\n /** Wait for payment to complete */\n wait: () => Promise<PaymentResult>;\n /** Cancel the payment (only works for PENDING) */\n cancel: () => Promise<void>;\n}\n\n/**\n * useVolrPay return type\n */\nexport interface UseVolrPayReturn {\n /**\n * Initiate a payment with PaymentModal\n * @param options Payment options including amount, item, handlers\n * @returns PaymentHandle with id, status, wait(), cancel()\n */\n pay: (options: PayOptions) => Promise<PaymentHandle>;\n \n /**\n * Check payment status by ID\n */\n checkPayment: (paymentId: string) => Promise<PaymentResult>;\n \n /**\n * Get payment history for current user\n */\n getPaymentHistory: (options?: PaymentHistoryOptions) => Promise<PaymentHistoryResult>;\n \n /**\n * Whether a payment is currently in progress\n */\n isPaymentInProgress: boolean;\n}\n\n// Store for payment promise resolvers (outside component to persist across renders)\nconst paymentPromiseResolvers = new Map<string, {\n resolve: (result: PaymentResult) => void;\n reject: (error: Error) => void;\n}>();\n\nexport function useVolrPay(): UseVolrPayReturn {\n const { open: openModal } = useVolrModal();\n const { createPayment, checkPayment, getPaymentHistory, cancelPayment } = useVolrPaymentApi();\n const currentPaymentIdRef = useRef<string | null>(null);\n\n const pay = useCallback(\n async (options: PayOptions): Promise<PaymentHandle> => {\n // Create payment via API\n const payment = await createPayment({\n amount: options.amount,\n item: options.item,\n referenceId: options.referenceId,\n metadata: options.metadata,\n idempotencyKey: options.idempotencyKey,\n expiresInSec: options.expiresInSec,\n });\n\n currentPaymentIdRef.current = payment.id;\n\n // Call onCreated handler\n options.handlers?.onCreated?.({ id: payment.id });\n\n // Create wait promise\n const waitPromise = new Promise<PaymentResult>((resolve, reject) => {\n paymentPromiseResolvers.set(payment.id, { resolve, reject });\n });\n\n // Build modal options\n const modalOptions: PaymentModalOptions = {\n payment,\n options: {\n amount: options.amount,\n item: options.item,\n referenceId: options.referenceId,\n metadata: options.metadata,\n idempotencyKey: options.idempotencyKey,\n expiresInSec: options.expiresInSec,\n },\n onComplete: (result: PaymentResult) => {\n currentPaymentIdRef.current = null;\n \n const resolver = paymentPromiseResolvers.get(payment.id);\n if (resolver) {\n resolver.resolve(result);\n paymentPromiseResolvers.delete(payment.id);\n }\n\n if (result.status === 'CONFIRMED') {\n options.handlers?.onSuccess?.(result);\n }\n },\n onProcessing: (processingPayment: PaymentResult & { txHash: string }) => {\n options.handlers?.onProcessing?.({\n id: processingPayment.id,\n txHash: processingPayment.txHash,\n });\n },\n onError: (error: PaymentError) => {\n currentPaymentIdRef.current = null;\n \n const resolver = paymentPromiseResolvers.get(payment.id);\n if (resolver) {\n resolver.reject(new Error(error.message));\n paymentPromiseResolvers.delete(payment.id);\n }\n\n options.handlers?.onError?.(error);\n },\n onCancel: () => {\n currentPaymentIdRef.current = null;\n \n const resolver = paymentPromiseResolvers.get(payment.id);\n if (resolver) {\n // Resolve with CANCELLED status instead of rejecting\n resolver.resolve({\n ...payment,\n status: 'CANCELLED',\n });\n paymentPromiseResolvers.delete(payment.id);\n }\n\n options.handlers?.onCancel?.();\n },\n };\n\n // Open PaymentModal\n openModal({ mode: 'payment', payment: modalOptions });\n\n // Return PaymentHandle\n return {\n id: payment.id,\n status: payment.status,\n wait: () => waitPromise,\n cancel: async () => {\n await cancelPayment(payment.id);\n currentPaymentIdRef.current = null;\n \n const resolver = paymentPromiseResolvers.get(payment.id);\n if (resolver) {\n resolver.resolve({\n ...payment,\n status: 'CANCELLED',\n });\n paymentPromiseResolvers.delete(payment.id);\n }\n\n options.handlers?.onCancel?.();\n },\n };\n },\n [createPayment, cancelPayment, openModal]\n );\n\n return {\n pay,\n checkPayment,\n getPaymentHistory,\n isPaymentInProgress: currentPaymentIdRef.current !== null,\n };\n}\n\n"]}
1
+ {"version":3,"sources":["../../node_modules/viem/constants/abis.ts","../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","../../node_modules/viem/index.ts","../src/hooks/usePaymentModalState.ts","../src/components/features/payment/components/PaymentSkeleton.tsx","../src/components/features/payment/components/BalanceDisplay.tsx","../src/components/features/payment/components/ItemDisplay.tsx","../src/components/features/payment/views/PaymentInfoView.tsx","../src/components/features/payment/views/PaymentProcessingView.tsx","../src/components/features/payment/views/PaymentResultView.tsx","../src/components/features/payment/PaymentModal.tsx","../src/providers/VolrUIProvider.tsx","../src/utils/network.ts","../src/hooks/useVolrPay.ts"],"names":["translations","value","createContext","useContext","useState","jsx","useEffect","useRef","useCallback","isMobile","jsxs","React","Fragment","useVolrContext","useVolrLogin","handleLogout","useInternalAuth","createPortal","useVolrPaymentApi"],"mappings":";;;;;;;;;;;;;;;AAAA,IA8GM,uBAAA,CAAA,CAiPO;AA/Vb,IAAA,SAAA,GAAA,KAAA,CAAA;;AA8GA,IAAM,uBAAA,GAA0B;AAC9B,MAAA;QACE,MAAA,EAAQ;AACN,UAAA;YACE,IAAA,EAAM,KAAA;YACN,IAAA,EAAM;;;QAGV,IAAA,EAAM,mBAAA;QACN,IAAA,EAAM;;AAER,MAAA;QACE,MAAA,EAAQ;AACN,UAAA;YACE,IAAA,EAAM,KAAA;YACN,IAAA,EAAM;;;QAGV,IAAA,EAAM,mBAAA;QACN,IAAA,EAAM;;AAER,MAAA;AACE,QAAA,MAAA,EAAQ,EAAA;QACR,IAAA,EAAM,cAAA;QACN,IAAA,EAAM;;AAER,MAAA;QACE,MAAA,EAAQ;AACN,UAAA;YACE,IAAA,EAAM,QAAA;YACN,IAAA,EAAM;;AAER,UAAA;YACE,IAAA,EAAM,SAAA;YACN,IAAA,EAAM;;;QAGV,IAAA,EAAM,WAAA;QACN,IAAA,EAAM;;AAER,MAAA;AACE,QAAA,MAAA,EAAQ,EAAA;QACR,IAAA,EAAM,6BAAA;QACN,IAAA,EAAM;;AAER,MAAA;QACE,MAAA,EAAQ;AACN,UAAA;YACE,IAAA,EAAM,WAAA;YACN,IAAA,EAAM;;;QAGV,IAAA,EAAM,eAAA;QACN,IAAA,EAAM;;AAER,MAAA;QACE,MAAA,EAAQ;AACN,UAAA;YACE,IAAA,EAAM,MAAA;YACN,IAAA,EAAM;;AAER,UAAA;YACE,IAAA,EAAM,UAAA;YACN,IAAA,EAAM;;;QAGV,IAAA,EAAM,qBAAA;QACN,IAAA,EAAM;;AAER,MAAA;QACE,MAAA,EAAQ;AACN,UAAA;YACE,IAAA,EAAM,MAAA;YACN,IAAA,EAAM;;;QAGV,IAAA,EAAM,kBAAA;QACN,IAAA,EAAM;;AAER,MAAA;QACE,MAAA,EAAQ;AACN,UAAA;YACE,IAAA,EAAM,SAAA;YACN,IAAA,EAAM;;AAER,UAAA;YACE,IAAA,EAAM,gBAAA;YACN,IAAA,EAAM;;;QAGV,IAAA,EAAM,wBAAA;QACN,IAAA,EAAM;;AAER,MAAA;QACE,MAAA,EAAQ;AACN,UAAA;YACE,YAAA,EAAc,QAAA;YACd,IAAA,EAAM,UAAA;YACN,IAAA,EAAM;;;QAGV,IAAA,EAAM,4BAAA;QACN,IAAA,EAAM;;;AAIH,IAAoC;MACzC,GAAG,uBAAA;AACH,MAAA;QACE,IAAA,EAAM,qBAAA;QACN,IAAA,EAAM,UAAA;QACN,eAAA,EAAiB,MAAA;QACjB,MAAA,EAAQ;UACN,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,OAAA,EAAO;UAC7B,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,OAAA,EAAO;UAC7B,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,UAAA;;QAE5B,OAAA,EAAS;UACP,EAAE,IAAA,EAAM,EAAA,EAAI,IAAA,EAAM,OAAA,EAAO;UACzB,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,SAAA;;;;AAKxB,IAAoC;MACzC,GAAG,uBAAA;AACH,MAAA;QACE,IAAA,EAAM,qBAAA;QACN,IAAA,EAAM,UAAA;QACN,eAAA,EAAiB,MAAA;QACjB,MAAA,EAAQ;UACN,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,aAAA,EAAa;UACpC,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,UAAA,EAAU;UACnC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,UAAA;;QAE5B,OAAA,EAAS;UACP,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,cAAA,EAAc;UACtC,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,UAAA,EAAU;UACnC,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,iBAAA;;;;AAuGxB,IAAM,QAAA,GAAW;AACtB,MAAA;QACE,IAAA,EAAM,OAAA;QACN,IAAA,EAAM,UAAA;QACN,MAAA,EAAQ;AACN,UAAA;YACE,OAAA,EAAS,IAAA;YACT,IAAA,EAAM,OAAA;YACN,IAAA,EAAM;;AAER,UAAA;YACE,OAAA,EAAS,IAAA;YACT,IAAA,EAAM,SAAA;YACN,IAAA,EAAM;;AAER,UAAA;YACE,OAAA,EAAS,KAAA;YACT,IAAA,EAAM,OAAA;YACN,IAAA,EAAM;;;;AAIZ,MAAA;QACE,IAAA,EAAM,OAAA;QACN,IAAA,EAAM,UAAA;QACN,MAAA,EAAQ;AACN,UAAA;YACE,OAAA,EAAS,IAAA;YACT,IAAA,EAAM,MAAA;YACN,IAAA,EAAM;;AAER,UAAA;YACE,OAAA,EAAS,IAAA;YACT,IAAA,EAAM,IAAA;YACN,IAAA,EAAM;;AAER,UAAA;YACE,OAAA,EAAS,KAAA;YACT,IAAA,EAAM,OAAA;YACN,IAAA,EAAM;;;;AAIZ,MAAA;QACE,IAAA,EAAM,UAAA;QACN,IAAA,EAAM,WAAA;QACN,eAAA,EAAiB,MAAA;QACjB,MAAA,EAAQ;AACN,UAAA;YACE,IAAA,EAAM,OAAA;YACN,IAAA,EAAM;;AAER,UAAA;YACE,IAAA,EAAM,SAAA;YACN,IAAA,EAAM;;;QAGV,OAAA,EAAS;AACP,UAAA;YACE,IAAA,EAAM;;;;AAIZ,MAAA;QACE,IAAA,EAAM,UAAA;QACN,IAAA,EAAM,SAAA;QACN,eAAA,EAAiB,YAAA;QACjB,MAAA,EAAQ;AACN,UAAA;YACE,IAAA,EAAM,SAAA;YACN,IAAA,EAAM;;AAER,UAAA;YACE,IAAA,EAAM,QAAA;YACN,IAAA,EAAM;;;QAGV,OAAA,EAAS;AACP,UAAA;YACE,IAAA,EAAM;;;;AAIZ,MAAA;QACE,IAAA,EAAM,UAAA;QACN,IAAA,EAAM,WAAA;QACN,eAAA,EAAiB,MAAA;QACjB,MAAA,EAAQ;AACN,UAAA;YACE,IAAA,EAAM,SAAA;YACN,IAAA,EAAM;;;QAGV,OAAA,EAAS;AACP,UAAA;YACE,IAAA,EAAM;;;;AAIZ,MAAA;QACE,IAAA,EAAM,UAAA;QACN,IAAA,EAAM,UAAA;QACN,eAAA,EAAiB,MAAA;AACjB,QAAA,MAAA,EAAQ,EAAA;QACR,OAAA,EAAS;AACP,UAAA;YACE,IAAA,EAAM;;;;AAIZ,MAAA;QACE,IAAA,EAAM,UAAA;QACN,IAAA,EAAM,MAAA;QACN,eAAA,EAAiB,MAAA;AACjB,QAAA,MAAA,EAAQ,EAAA;QACR,OAAA,EAAS;AACP,UAAA;YACE,IAAA,EAAM;;;;AAIZ,MAAA;QACE,IAAA,EAAM,UAAA;QACN,IAAA,EAAM,QAAA;QACN,eAAA,EAAiB,MAAA;AACjB,QAAA,MAAA,EAAQ,EAAA;QACR,OAAA,EAAS;AACP,UAAA;YACE,IAAA,EAAM;;;;AAIZ,MAAA;QACE,IAAA,EAAM,UAAA;QACN,IAAA,EAAM,aAAA;QACN,eAAA,EAAiB,MAAA;AACjB,QAAA,MAAA,EAAQ,EAAA;QACR,OAAA,EAAS;AACP,UAAA;YACE,IAAA,EAAM;;;;AAIZ,MAAA;QACE,IAAA,EAAM,UAAA;QACN,IAAA,EAAM,UAAA;QACN,eAAA,EAAiB,YAAA;QACjB,MAAA,EAAQ;AACN,UAAA;YACE,IAAA,EAAM,WAAA;YACN,IAAA,EAAM;;AAER,UAAA;YACE,IAAA,EAAM,QAAA;YACN,IAAA,EAAM;;;QAGV,OAAA,EAAS;AACP,UAAA;YACE,IAAA,EAAM;;;;AAIZ,MAAA;QACE,IAAA,EAAM,UAAA;QACN,IAAA,EAAM,cAAA;QACN,eAAA,EAAiB,YAAA;QACjB,MAAA,EAAQ;AACN,UAAA;YACE,IAAA,EAAM,QAAA;YACN,IAAA,EAAM;;AAER,UAAA;YACE,IAAA,EAAM,WAAA;YACN,IAAA,EAAM;;AAER,UAAA;YACE,IAAA,EAAM,QAAA;YACN,IAAA,EAAM;;;QAGV,OAAA,EAAS;AACP,UAAA;YACE,IAAA,EAAM;;;;;;;;;AClhBP,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,YAAA,EAAc,iBAAA;AAAA,IACd,iBAAA,EAAmB,qBAAA;AAAA,IACnB,cAAA,EAAgB,oBAAA;AAAA,IAChB,YAAA,EAAc,6BAAA;AAAA,IACd,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,WAAA,EAAa,mBAAA;AAAA,IACb,mBAAA,EAAqB,0BAAA;AAAA,IACrB,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;;;ACvHO,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,YAAA,EAAc,mDAAA;AAAA,IACd,iBAAA,EAAmB,gEAAA;AAAA,IACnB,cAAA,EAAgB,oDAAA;AAAA,IAChB,YAAA,EAAc,mCAAA;AAAA,IACd,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,WAAA,EAAa,+BAAA;AAAA,IACb,mBAAA,EAAqB,qCAAA;AAAA,IACrB,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;;;ACvGA,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,GAAc,cAAuC,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,GAAU,WAAW,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,MAAMA,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,GAAI,QAAA,CAAiB,cAAc,CAAA;AAC3D,EAAA,MAAMA,aAAAA,GAAe,QAAQ,MAAM,eAAA,CAAgB,MAAM,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEpE,EAAA,MAAM,CAAA,GAAI,QAAQ,MAAM;AACtB,IAAA,OAAO,CAAC,KAAa,MAAA,KAA4C;AAC/D,MAAA,MAAM,IAAA,GAAO,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA;AAC1B,MAAA,IAAIC,MAAAA,GAAaD,aAAAA;AACjB,MAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,QAAA,IAAIC,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,CAACD,aAAY,CAAC,CAAA;AAEjB,EAAA,MAAM,KAAA,GAAQ,OAAA;AAAA,IACZ,OAAO;AAAA,MACL,MAAA;AAAA,MACA,YAAA,EAAAA,aAAAA;AAAA,MACA,CAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,IACA,CAAC,MAAA,EAAQA,aAAAA,EAAc,CAAA,EAAG,SAAS;AAAA,GACrC;AAEA,EAAA,uBAAO,GAAA,CAAC,WAAA,CAAY,QAAA,EAAZ,EAAqB,OAAe,QAAA,EAAS,CAAA;AACvD;AAGO,IAAM,cAAA,GAAiB;AC5E9B,IAAM,gBAAA,GAAmBE,cAA4C,IAAI,CAAA;AAElE,IAAM,eAAe,MAA6B;AACvD,EAAA,MAAM,OAAA,GAAUC,WAAW,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,GAAIC,SAAS,KAAK,CAAA;AAC1C,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,SAAoB,SAAS,CAAA;AACrD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAA4B,IAAI,CAAA;AAC1D,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIA,SAAqC,IAAI,CAAA;AAErF,EAAA,MAAM,IAAA,GAAO,WAAA,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,iBAAA,CAAkB,OAAA,EAAS,WAAW,IAAI,CAAA;AAC1C,IAAA,SAAA,CAAU,IAAI,CAAA;AAAA,EAChB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,KAAA,GAAQ,YAAY,MAAM;AAC9B,IAAA,SAAA,CAAU,KAAK,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,iBAAA,CAAkB,IAAI,CAAA;AAAA,EACxB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,uBACEC,GAAAA,CAAC,gBAAA,CAAiB,QAAA,EAAjB,EAA0B,KAAA,EAAO,EAAE,MAAA,EAAQ,IAAA,EAAM,KAAA,EAAO,cAAA,EAAgB,IAAA,EAAM,KAAA,IAC5E,QAAA,EACH,CAAA;AAEJ,CAAA;AC3DA,IAAM,UAAU,mBAAA,CAAoB;AAAA,EAClC,MAAA,EAAQ;AACV,CAAC,CAAA;AAEM,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACfO,SAAS,cAAc,KAAA,EAAwB;AACpD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAID,SAAS,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,EAAA,SAAA,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,6thCAAA;ACa5B,SAAS,gBAAA,CAAiB,QAAmB,OAAA,EAA2B;AACtE,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,SAA2B,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,EAAAE,UAAU,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,GAAIF,SAA6B,IAAI,CAAA;AACnE,EAAA,MAAM,OAAA,GAAU,OAA8B,IAAI,CAAA;AAClD,EAAA,MAAM,aAAA,GAAgB,iBAAiB,KAAK,CAAA;AAE5C,EAAAE,UAAU,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,UAAU,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,OAAO,YAAA,CAAa,UAAU,SAAS,CAAA;AACzC;AC5IO,SAAS,YAAA,CAAa,UAAmB,YAAA,EAAmD;AACjG,EAAA,MAAM,qBAAA,GAAwBC,OAA2B,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,GAAuBC,YAAY,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,WAAAA;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,EAAAF,UAAU,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,OAAuB,IAAI,CAAA;AAC7C,EAAA,MAAM,WAAW,KAAA,EAAM;AACvB,EAAA,MAAM,YAAY,iBAAA,EAAkB;AACpC,EAAA,MAAM,KAAA,GAAQ,WAAW,KAAA,IAAS,OAAA;AAGlC,EAAA,YAAA,CAAa,MAAM,SAAS,CAAA;AAG5B,EAAAD,UAAU,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,uBACEI,IAAAA,CAAC,YAAA,EAAA,EAAa,KAAA,EAEZ,QAAA,EAAA;AAAA,oBAAAL,GAAAA;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,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,4GAAA;AAAA,UACA,aAAA,IAAiB;AAAA,SACnB;AAAA,QAEA,QAAA,kBAAAA,GAAAA;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,GAAAA;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,GAAAA,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,uBACEK,IAAAA;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,wBAAAL,GAAAA,CAAC,UAAK,EAAA,EAAG,IAAA,EAAK,IAAG,GAAA,EAAI,EAAA,EAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,CAAA;AAAA,wBACpCA,GAAAA,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,GAAAA;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,GAAAA,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,uBACEK,IAAAA;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,wBAAAL,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,8GAAA,EAA+G,CAAA;AAAA,wBACvHA,GAAAA,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,uBACEK,IAAAA;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,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oDAAA,EACZ,QAAA,EAAA;AAAA,UAAA,IAAA,IAAQ,0BACPA,IAAAA;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,gCAAAL,IAAC,QAAA,EAAA,EAAS,CAAA;AAAA,gCACVA,GAAAA,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,GAAAA;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,IAAC,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,uBACEK,KAAC,KAAA,EAAA,EACE,QAAA,EAAA;AAAA,IAAA,UAAA,IAAc,OAAA,oBACbL,GAAAA,CAAC,WAAA,EAAA,EAAY,OAAA,EAAkB,CAAA;AAAA,oBAGjCK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,EAAA,EACb,QAAA,EAAA;AAAA,sBAAAL,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2CAAA,EAA4C,QAAA,EAAA,kBAAA,EAEzD,CAAA;AAAA,MAEC,KAAK,UAAA,mBACJK,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,qEAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,0BAAAL,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6DAAA,EAA8D,QAAA,EAAA,gBAAA,EAE7E,CAAA;AAAA,0BACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EACZ,eAAK,UAAA,EACR;AAAA,SAAA,EACF,CAAA;AAAA,wBAEAK,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAL,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6DAAA,EAA8D,QAAA,EAAA,kBAAA,EAE7E,CAAA;AAAA,0BACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EACZ,eAAK,cAAA,EACR;AAAA,SAAA,EACF;AAAA,OAAA,EACF,CAAA,mBAEAK,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,qEAAA,EACb,QAAA,EAAA;AAAA,wBAAAL,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EAA6C,QAAA,EAAA,mBAAA,EAE5D,CAAA;AAAA,wBACAA,GAAAA,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,GAAAA;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,GAAAA;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,uBACEK,IAAAA;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,wBAAAL,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,szBAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,0eAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,6hBAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,0tBAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,0hBAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,ykBAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,yqBAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,+fAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,wkBAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,4nBAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,6hBAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,4YAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,glBAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,2hBAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,udAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,2eAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,8eAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,+bAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,8YAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,2VAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,8VAAA;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACAA,GAAAA;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,GAAAA;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,GAAAA;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,uBACEK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EACF,QAAA,EAAA;AAAA,IAAA,IAAA,KAAS,QAAA,oBAAYL,GAAAA,CAAC,UAAA,EAAA,EAAW,IAAA,EAAY,CAAA;AAAA,IAC7C,IAAA,KAAS,SAAA,oBAAaA,GAAAA,CAAC,eAAY,IAAA,EAAY,CAAA;AAAA,IAC/C,IAAA,KAAS,aAAA,oBAAiBA,GAAAA,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,SAASM,OAAAA,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,uBACEN,GAAAA;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,uBACEK,IAAAA,CAAAE,QAAAA,EAAA,EAEE,QAAA,EAAA;AAAA,oBAAAP,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EACb,QAAA,kBAAAA,GAAAA,CAAC,aAAA,EAAA,EAAc,IAAA,EAAM,aAAA,EAAe,IAAA,EAAM,EAAA,EAAI,CAAA,EAChD,CAAA;AAAA,oBAGAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+DACV,QAAA,EAAA,gBAAA,EACH,CAAA;AAAA,IAGC,YAAA,oBACCK,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,6HAAA,EACb,QAAA,EAAA;AAAA,sBAAAL,GAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,2BAAA,EAA4B,CAAA;AAAA,sBACjDA,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,YAAA,EAAa;AAAA,KAAA,EACtB,CAAA;AAAA,oBAIFK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCAAA,EACb,QAAA,EAAA;AAAA,sBAAAL,GAAAA,CAAC,UAAO,OAAA,EAAQ,SAAA,EAAU,WAAS,IAAA,EAAC,OAAA,EAAS,UAC1C,QAAA,EAAA,UAAA,EACH,CAAA;AAAA,sBACAA,IAAC,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,uBACEK,IAAAA,CAAAE,QAAAA,EAAA,EAEE,QAAA,EAAA;AAAA,oBAAAP,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8EAAA,EACb,QAAA,kBAAAA,GAAAA,CAAC,aAAA,EAAA,EAAc,IAAA,EAAM,aAAA,EAAe,IAAA,EAAM,EAAA,EAAI,OAAA,EAAS,aAAa,CAAA,EACtE,CAAA;AAAA,oBAGAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,gDACV,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,IAGC,WAAA,oBACCA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBAAA,EACb,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8EAAA,EACb,QAAA,kBAAAA,GAAAA;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,oBACAK,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,8CAAA,EACb,QAAA,EAAA;AAAA,sBAAAL,GAAAA,CAAC,UAAO,OAAA,EAAQ,SAAA,EAAU,WAAS,IAAA,EAAC,OAAA,EAAS,SAC1C,QAAA,EAAA,UAAA,EACH,CAAA;AAAA,sBACAA,IAAC,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,KAAY,cAAA,EAAe;AACjD,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,eAAA,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,MACL,oBAAA,EAAqB;AACzB,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAID,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,SAAwB,IAAI,CAAA;AACpE,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,SAAS,KAAK,CAAA;AAEtD,EAAA,MAAM,gBAAgB,gBAAA,EAAiB;AAGvC,EAAA,MAAM,UAAA,GAAa,MAAM,cAAA,KAAmB,SAAA;AAG5C,EAAAE,UAAU,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,UAAU,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,UAAU,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,UAAU,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,gCACJD,GAAAA;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,GAAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAM,MAAA,EAAQ,YAAA,EAAc,CAAC,IAAA,KAAS,CAAC,IAAA,IAAQ,WAAA,EAAY,EAChE,QAAA,kBAAAA,GAAAA;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,mBACJK,IAAAA,CAAC,KAAA,EAAA,EAEC,QAAA,EAAA;AAAA,oBAAAL,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2CAAA,EACV,6BAAkB,EACrB,CAAA;AAAA,IAEC,CAAC,6BACAA,GAAAA;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,GAAAA;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,GAAAA,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,MACL,gBAAA,EAAiB;AACrB,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAID,SAAwB,IAAI,CAAA;AAGpE,EAAAE,UAAU,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,UAAU,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,mBACJI,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,sDAAA,EACb,QAAA,EAAA;AAAA,oBAAAL,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,wCAAA,EAAyC,QAAA,EAAA,4BAAA,EAEtD,CAAA;AAAA,IAEC,gCACCA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mIACZ,QAAA,EAAA,YAAA,EACH,CAAA;AAAA,oBAGFA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gFACb,QAAA,kBAAAA,GAAAA;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,GAAAA,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,GAAAA;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,kBAAAK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EACb,QAAA,EAAA;AAAA,wBAAAL,GAAAA,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,GAAID,SAAS,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,uBACEC,GAAAA;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,GAAAA,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,GAAAA,CAAC,UAAA,EAAA,EAAS,MAAA,EAAO,kBAAiB,CAAA,EACpC,CAAA,mBAEAK,IAAAA,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,wBAAAL,GAAAA,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,GAAAA,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,uBACEK,IAAAA;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,wBAAAL,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mEAAA,EACb,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,wBACAK,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sCAAA,EACd,QAAA,EAAA;AAAA,0BAAAL,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4DAAA,EACb,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,UACC,8BACCA,GAAAA,CAAC,UAAK,SAAA,EAAU,+DAAA,EACb,uBACH,CAAA,GACE;AAAA,SAAA,EACN;AAAA;AAAA;AAAA,GACF;AAEJ;AC7CO,SAAS,UAAA,GAAa;AAC3B,EAAA,uBACEK,IAAAA,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,oBAAAL,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAE,yHAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAE,uIAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAE,+HAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,oBACAA,GAAAA;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,GAAAA,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,GAAAA;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,GAAAA,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,GAAAA;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,GAAAA,CAAC,UAAA,EAAA,EAAW,CAAA;AAAA,IACpB,OAAA,kBAASA,GAAAA,CAAC,YAAA,EAAA,EAAa,CAAA;AAAA,IACvB,KAAA,kBAAOA,GAAAA,CAAC,SAAA,EAAA,EAAU;AAAA,GACpB;AACA,EAAA,uBACEA,GAAAA;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,uBACEK,IAAAA;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,wBAAAL,GAAAA;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,GAAAA;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,GAAAA,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,GAAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,OAAA;AAAA,MACA,IAAA,kBAAMA,GAAAA,CAAC,UAAA,EAAA,EAAW,CAAA;AAAA,MAClB,KAAA,EAAO,EAAE,oBAAoB;AAAA;AAAA,GAC/B;AAEJ;ACbO,SAAS,SAAA,GAAY;AAC1B,EAAA,uBACEK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sHAAA,EACb,QAAA,EAAA;AAAA,oBAAAL,GAAAA,CAAC,UAAK,QAAA,EAAA,YAAA,EAAU,CAAA;AAAA,oBAChBA,GAAAA;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,GAAAA;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,GAAID,SAAS,EAAE,CAAA;AACrC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAwB,IAAI,CAAA;AACtD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAAS,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,uBACEM,IAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAU,YAAA,EACd,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2CAAA,EACb,QAAA,EAAA;AAAA,sBAAAL,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sEACb,QAAA,kBAAAA,GAAAA,CAAC,aAAU,CAAA,EACb,CAAA;AAAA,sBACAA,GAAAA;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,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0EACZ,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,oBAGFA,GAAAA;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,uBACEK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kDAAA,EACb,QAAA,EAAA;AAAA,oBAAAL,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EAA0C,CAAA;AAAA,oBACzDA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gCAAgC,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,oBACrDA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EAA0C;AAAA,GAAA,EAC3D,CAAA;AAEJ;ACRO,SAAS,aAAA,CAAc,EAAE,MAAA,EAAO,EAAuB;AAC5D,EAAA,uBACEA,GAAAA;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,uBACEK,IAAAA;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,oBACCL,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0CAAA,EACb,0BAAAA,GAAAA,CAAC,aAAA,EAAA,EAAc,MAAA,EAAQ,QAAA,EAAW,CAAA,EACpC,CAAA;AAAA,wBAEFK,IAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,CAAA,oCAAA,EACT,kBAAA,GAAqB,UAAA,GAAa,EACpC,CAAA,CAAA;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAAL,GAAAA,CAAC,eAAY,OAAA,EAAkB,CAAA;AAAA,8BAC/BA,GAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,4CAAA,EACV,QAAA,EAAA,CAAA,CAAE,aAAa,CAAA,EAClB,CAAA;AAAA,cAGC,kCACCA,GAAAA;AAAA,gBAAC,gBAAA;AAAA,gBAAA;AAAA,kBACC,QAAA,EAAU,aAAA;AAAA,kBACV;AAAA;AAAA,eACF;AAAA,cAID,iBAAA,oBAAqBA,GAAAA,CAAC,OAAA,EAAA,EAAQ,CAAA;AAAA,8BAG/BK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCAAA,EACZ,QAAA,EAAA;AAAA,gBAAA,eAAA,IACC,eAAA,CAAgB,GAAA,CAAI,CAAC,QAAA,qBACnBL,GAAAA;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,GAAAA,CAAC,OAAA,EAAA,EAAQ,CAAA;AAAA,gBAEnC,aAAA,oBACCA,GAAAA,CAAC,YAAA,EAAA,EAAa,SAAS,MAAM,cAAA,CAAe,MAAM,CAAA,EAAG;AAAA,eAAA,EAEzD,CAAA;AAAA,8BAGAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EAAc,CAAA;AAAA,8BAG7BA,IAAC,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,GAAID,QAAAA,CAAmB,MAAM,CAAC,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA;AAChE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAwB,IAAI,CAAA;AACtD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAAS,KAAK,CAAA;AAChD,EAAA,MAAM,SAAA,GAAYG,MAAAA,CAAoC,EAAE,CAAA;AAGxD,EAAAD,UAAU,MAAM;AACd,IAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,CAAA,EAAG,KAAA,EAAM;AAAA,EAC9B,CAAA,EAAG,EAAE,CAAA;AAGL,EAAAA,UAAU,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,uBACEI,KAAC,KAAA,EAAA,EAEC,QAAA,EAAA;AAAA,oBAAAL,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,4CAAA,EACV,QAAA,EAAA,CAAA,CAAE,yBAAyB,CAAA,EAC9B,CAAA;AAAA,oBAGAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,4CAAA,EACV,YAAE,+BAAA,EAAiC,EAAE,KAAA,EAAO,CAAA,EAC/C,CAAA;AAAA,oBAGAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oDAAA,EACZ,iBAAO,GAAA,CAAI,CAAC,KAAA,EAAO,KAAA,qBAClBA,GAAAA;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,oBACCK,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,8GAAA,EACb,QAAA,EAAA;AAAA,sBAAAL,GAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,2BAAA,EAA4B,CAAA;AAAA,sBACjDA,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,KAAA,EAAM;AAAA,KAAA,EACf,CAAA;AAAA,oBAIFA,GAAAA;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;AC7JA,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;AAsBA,IAAM,iBAAA,GAAoB,sBACxBK,IAAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,SAAA,EAAU,mBAAA;AAAA,IACV,OAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAK,MAAA;AAAA,IACL,KAAA,EAAM,4BAAA;AAAA,IAEN,QAAA,EAAA;AAAA,sBAAAL,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,CAAA,EAAE,GAAA;AAAA,UACF,CAAA,EAAE,GAAA;AAAA,UACF,KAAA,EAAM,IAAA;AAAA,UACN,MAAA,EAAO,IAAA;AAAA,UACP,EAAA,EAAG,GAAA;AAAA,UACH,MAAA,EAAO,cAAA;AAAA,UACP,WAAA,EAAY;AAAA;AAAA,OACd;AAAA,sBACAA,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,CAAA,EAAE,mIAAA;AAAA,UACF,IAAA,EAAK;AAAA;AAAA,OACP;AAAA,sBACAA,IAAC,MAAA,EAAA,EAAK,CAAA,EAAE,iEAAgE,MAAA,EAAO,cAAA,EAAe,aAAY,KAAA,EAAM;AAAA;AAAA;AAClH,CAAA;AAGK,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,MACE,YAAA,EAAa;AAEjB,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAID,SAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,SAAwB,IAAI,CAAA;AACtE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAwB,IAAI,CAAA;AACtD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,QAAAA,CAAkC,EAAE,CAAA;AACtE,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,SAAS,IAAI,CAAA;AACnD,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAIA,SAAS,KAAK,CAAA;AAG5D,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC5D,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,SAAwB,IAAI,CAAA;AAChE,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAAS,KAAK,CAAA;AAChD,EAAA,MAAM,UAAA,GAAaG,OAA8B,IAAI,CAAA;AACrD,EAAA,MAAM,iBAAA,GAAoBA,OAAO,KAAK,CAAA;AAGtC,EAAAD,UAAU,MAAM;AACd,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,UAAA,CAAW,OAAA,EAAS,aAAA,CAAc,UAAA,CAAW,OAAO,CAAA;AAAA,IAC1D,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAGL,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,MAAA,cAAA,CAAe,KAAK,CAAA;AACpB,MAAA;AAAA,IACF;AAEA,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,IAAA,CAAK,IAAA,KAAS,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,EAAG,OAAO,IAAA;AAC/D,QAAA,OAAO,CAAC,GAAG,IAAA,EAAM,MAAM,CAAA;AAAA,MACzB,CAAC,CAAA;AAAA,IACH,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,WAAA,GAAc,WAAW,MAAM;AACnC,MAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAgB,MAAA,CAAe,QAAA,EAAU;AAC7D,QAAA,kBAAA,CAAmB,IAAI,CAAA;AAAA,MACzB;AACA,MAAA,cAAA,CAAe,KAAK,CAAA;AAAA,IACtB,GAAG,GAAG,CAAA;AAEN,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,CAAO,mBAAA,CAAoB,4BAA4B,sBAAsB,CAAA;AAC7E,MAAA,YAAA,CAAa,WAAW,CAAA;AAAA,IAC1B,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,YAAA,GAAe,SAAA,CAAU,MAAA,GAAS,CAAA,IAAK,eAAA;AAG7C,EAAA,MAAM,aAAA,GAAgBE,YAAY,YAAY;AAC5C,IAAA,IAAI,iBAAA,CAAkB,WAAW,UAAA,EAAY;AAC7C,IAAA,iBAAA,CAAkB,OAAA,GAAU,IAAA;AAE5B,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,MAAM,iBAAA,EAAkB;AACxC,MAAA,MAAM,GAAA,GAAM,cAAA,CAAe,OAAA,CAAQ,EAAE,CAAA;AACrC,MAAA,aAAA,CAAc,GAAG,CAAA;AACjB,MAAA,YAAA,CAAa,IAAI,CAAA;AAEjB,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;AAChD,YAAA,IAAI,WAAW,OAAA,EAAS;AACtB,cAAA,aAAA,CAAc,WAAW,OAAO,CAAA;AAChC,cAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,YACvB;AACA,YAAA,YAAA,CAAa,KAAK,CAAA;AAElB,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;AACtC,YAAA,IAAI,WAAW,OAAA,EAAS;AACtB,cAAA,aAAA,CAAc,WAAW,OAAO,CAAA;AAChC,cAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,YACvB;AACA,YAAA,YAAA,CAAa,KAAK,CAAA;AAClB,YAAA,QAAA,CAAS,CAAA,CAAE,qBAAqB,CAAC,CAAA;AACjC,YAAA,aAAA,CAAc,IAAI,CAAA;AAClB,YAAA,iBAAA,CAAkB,OAAA,GAAU,KAAA;AAAA,UAC9B;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF,GAAG,GAAI,CAAA;AAAA,IACT,SAAS,GAAA,EAAK;AACZ,MAAA,iBAAA,CAAkB,OAAA,GAAU,KAAA;AAC5B,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;AAAA,EACF,CAAA,EAAG,CAAC,iBAAA,EAAmB,cAAA,EAAgB,kBAAkB,SAAA,EAAW,OAAA,EAAS,CAAA,EAAG,UAAU,CAAC,CAAA;AAG3F,EAAAF,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,WAAA,IAAe,CAAC,YAAA,IAAgB,CAAC,UAAA,EAAY;AAChD,MAAA,aAAA,EAAc;AAAA,IAChB;AAAA,EACF,GAAG,CAAC,WAAA,EAAa,YAAA,EAAc,UAAA,EAAY,aAAa,CAAC,CAAA;AAEzD,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,eAAA,IAAmB,CAAC,UAAA,EAAY;AAClC,MAAA,aAAA,EAAc;AAAA,IAChB;AAAA,EACF,CAAA,EAAG,CAAC,eAAA,EAAiB,UAAA,EAAY,aAAa,CAAC,CAAA;AAG/C,EAAA,MAAM,iBAAA,GAAoBE,WAAAA,CAAY,OAAO,QAAA,EAAe,UAAA,KAAuB;AACjF,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,gBAAA,CAAiB,UAAU,CAAA;AAE3B,IAAA,IAAI;AACF,MAAA,MAAM,WAAW,MAAM,QAAA,CAAS,QAAQ,EAAE,MAAA,EAAQ,uBAAuB,CAAA;AACzE,MAAA,IAAI,SAAS,MAAA,KAAW,CAAA,EAAG,MAAM,IAAI,MAAM,mBAAmB,CAAA;AAE9D,MAAA,MAAM,aAAA,GAAgB,SAAS,CAAC,CAAA;AAChC,MAAA,MAAM,MAAA,GAAS,MAAM,cAAA,CAAe,aAAa,CAAA;AAEjD,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,GAAe,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,0BAAA;AAC1D,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;AAClB,MAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,IACvB;AAAA,EACF,CAAA,EAAG,CAAC,cAAA,EAAgB,SAAA,EAAW,OAAO,CAAC,CAAA;AAGvC,EAAA,MAAM,uBAAA,GAA0BA,YAAY,YAAY;AACtD,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,CAAE,OAAe,QAAA,EAAU;AAEhE,IAAA,MAAM,WAAY,MAAA,CAAe,QAAA;AACjC,IAAA,IAAI,UAAA,GAAa,QAAA;AAGjB,IAAA,IAAI,QAAA,CAAS,YAAY,UAAA,GAAa,UAAA;AAAA,SAAA,IAC7B,QAAA,CAAS,kBAAkB,UAAA,GAAa,iBAAA;AAAA,SAAA,IACxC,QAAA,CAAS,SAAS,UAAA,GAAa,OAAA;AAExC,IAAA,MAAM,iBAAA,CAAkB,UAAU,UAAU,CAAA;AAAA,EAC9C,CAAA,EAAG,CAAC,iBAAiB,CAAC,CAAA;AAEtB,EAAA,MAAM,iBAAA,GAAoBA,YAAY,MAAM;AAC1C,IAAA,IAAI,WAAW,OAAA,EAAS;AACtB,MAAA,aAAA,CAAc,WAAW,OAAO,CAAA;AAChC,MAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,IACvB;AACA,IAAA,YAAA,CAAa,KAAK,CAAA;AAClB,IAAA,aAAA,CAAc,IAAI,CAAA;AAClB,IAAA,kBAAA,CAAmB,KAAK,CAAA;AACxB,IAAA,iBAAA,CAAkB,OAAA,GAAU,KAAA;AAAA,EAC9B,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,mBAAmB,MAAM;AAE7B,IAAA,MAAM,gBAAkG,EAAC;AAEzG,IAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,CAAA,KAAM;AACvB,MAAA,aAAA,CAAc,IAAA,CAAK;AAAA,QACjB,EAAA,EAAI,EAAE,IAAA,CAAK,IAAA;AAAA,QACX,IAAA,EAAM,EAAE,IAAA,CAAK,IAAA;AAAA,QACb,IAAA,EAAM,EAAE,IAAA,CAAK,IAAA;AAAA,QACb,UAAU,CAAA,CAAE;AAAA,OACb,CAAA;AAAA,IACH,CAAC,CAAA;AAGD,IAAA,IAAI,eAAA,IAAmB,SAAA,CAAU,MAAA,KAAW,CAAA,EAAG;AAC7C,MAAA,MAAM,WAAY,MAAA,CAAe,QAAA;AACjC,MAAA,IAAI,IAAA,GAAO,QAAA;AACX,MAAA,IAAI,QAAA,EAAU,YAAY,IAAA,GAAO,UAAA;AAAA,WAAA,IACxB,QAAA,EAAU,kBAAkB,IAAA,GAAO,iBAAA;AAAA,WAAA,IACnC,QAAA,EAAU,SAAS,IAAA,GAAO,OAAA;AAEnC,MAAA,aAAA,CAAc,IAAA,CAAK;AAAA,QACjB,EAAA,EAAI,QAAA;AAAA,QACJ,IAAA;AAAA,QACA,QAAA,EAAU,QAAA;AAAA,QACV,QAAA,EAAU;AAAA,OACX,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,aAAA,CAAc,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAEvC,IAAA,uBACEH,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBACZ,QAAA,EAAA,aAAA,CAAc,GAAA,CAAI,CAAC,MAAA,qBAClBK,IAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QAEC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,MACP,MAAA,CAAO,QAAA,GACH,uBAAA,KACA,iBAAA,CAAkB,MAAA,CAAO,QAAA,EAAU,MAAA,CAAO,IAAI,CAAA;AAAA,QAEpD,QAAA,EAAU,SAAA;AAAA,QACV,SAAA,EAAU,uNAAA;AAAA,QAGV,QAAA,EAAA;AAAA,0BAAAL,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+IAAA,EACZ,QAAA,EAAA,MAAA,CAAO,uBACNA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,KAAK,MAAA,CAAO,IAAA;AAAA,cACZ,KAAK,MAAA,CAAO,IAAA;AAAA,cACZ,SAAA,EAAU;AAAA;AAAA,WACZ,mBAEAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBACb,QAAA,kBAAAA,GAAAA,CAAC,iBAAA,EAAA,EAAkB,CAAA,EACrB,CAAA,EAEJ,CAAA;AAAA,0BAGAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iEAAA,EACb,4BAAkB,MAAA,CAAO,IAAA,GACtB,CAAA,CAAE,mBAAmB,EAAE,OAAA,CAAQ,YAAA,EAAc,OAAO,IAAI,CAAA,GACxD,OAAO,IAAA,EACb,CAAA;AAAA,UAGC,aAAA,KAAkB,OAAO,IAAA,mBACxBA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mHAAA,EAAoH,CAAA,mBAEnIA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,uCAAA;AAAA,cACV,IAAA,EAAK,MAAA;AAAA,cACL,OAAA,EAAQ,WAAA;AAAA,cACR,MAAA,EAAO,cAAA;AAAA,cAEP,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,gBAAe,OAAA,EAAQ,WAAA,EAAa,CAAA,EAAG,CAAA,EAAE,cAAA,EAAe;AAAA;AAAA;AACtF;AAAA,OAAA;AAAA,MA3CG,MAAA,CAAO;AAAA,KA8Cf,CAAA,EACH,CAAA;AAAA,EAEJ,CAAA;AAGA,EAAA,MAAM,2BAA2B,sBAC/BK,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gBAAA,EAEb,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAA,EACb,QAAA,EAAA;AAAA,sBAAAL,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,4BAAA,EAA8B,QAAA,EAAA,CAAA,CAAE,kBAAkB,CAAA,EAAE,CAAA;AAAA,sBACjEK,IAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,oFAAA,EACZ,QAAA,EAAA;AAAA,wBAAAL,GAAAA,CAAC,IAAA,EAAA,EAAI,QAAA,EAAA,CAAA,CAAE,kBAAkB,CAAA,EAAE,CAAA;AAAA,wBAC3BA,GAAAA,CAAC,IAAA,EAAA,EAAI,QAAA,EAAA,CAAA,CAAE,kBAAkB,CAAA,EAAE,CAAA;AAAA,wBAC3BA,GAAAA,CAAC,IAAA,EAAA,EAAI,QAAA,EAAA,CAAA,CAAE,kBAAkB,CAAA,EAAE;AAAA,OAAA,EAC7B;AAAA,KAAA,EACF,CAAA;AAAA,IAEC,UAAA,mBACCK,IAAAA,CAAAE,QAAAA,EAAA,EAEG,QAAA,EAAA;AAAA,MAAA,CAAC,UAAS,oBACTP,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0GACb,QAAA,kBAAAA,GAAAA,CAAC,SAAA,EAAA,EAAU,KAAA,EAAO,YAAY,IAAA,EAAM,GAAA,EAAK,OAAM,GAAA,EAAI,UAAA,EAAY,GAAG,CAAA,EACpE,CAAA;AAAA,sBAIFA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+EACb,QAAA,kBAAAK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4DAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EACb,QAAA,EAAA;AAAA,0BAAAL,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,4CAAA,EAA6C,QAAA,EAAA,WAAA,EAAS,CAAA;AAAA,0BACnEA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kEACV,QAAA,EAAA,UAAA,EACH;AAAA,SAAA,EACF,CAAA;AAAA,wBACAA,GAAAA,CAAC,UAAA,EAAA,EAAW,IAAA,EAAM,UAAA,EAAY;AAAA,OAAA,EAChC,CAAA,EACF,CAAA;AAAA,MAEC,SAAA,oBACCK,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,4BAAA,EACb,QAAA,EAAA;AAAA,wBAAAL,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gIAAA,EAAiI,CAAA;AAAA,wBAChJA,GAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,4CAAA,EACV,QAAA,EAAA,CAAA,CAAE,0BAA0B,CAAA,EAC/B;AAAA,OAAA,EACF;AAAA,KAAA,EAEJ,CAAA,mBAEAK,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,4BAAA,EACb,QAAA,EAAA;AAAA,sBAAAL,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gIAAA,EAAiI,CAAA;AAAA,sBAChJA,GAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,4CAAA,EAA8C,QAAA,EAAA,CAAA,CAAE,gBAAgB,CAAA,EAAE;AAAA,KAAA,EACjF;AAAA,GAAA,EAEJ,CAAA;AAGF,EAAA,MAAM,OAAA,mBACJK,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,4BAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,UAAO,OAAA,EAAQ,OAAA,EAAQ,MAAK,IAAA,EAAK,OAAA,EAAS,MAAA,EAAQ,SAAA,EAAU,sBAAA,EAAuB,QAAA,EAAA;AAAA,MAAA,SAAA;AAAA,MAC/E,EAAE,aAAa;AAAA,KAAA,EACpB,CAAA;AAAA,oBAEAL,GAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,4CAAA,EACV,QAAA,EAAA,CAAA,CAAE,oBAAoB,CAAA,EACzB,CAAA;AAAA,IAGC,yBACCA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oHACZ,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,IAID,WAAA,oBACCK,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,4BAAA,EACb,QAAA,EAAA;AAAA,sBAAAL,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gIAAA,EAAiI,CAAA;AAAA,sBAChJA,GAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,4CAAA,EAA8C,QAAA,EAAA,CAAA,CAAE,gBAAgB,CAAA,EAAE;AAAA,KAAA,EACjF,CAAA;AAAA,IAID,CAAC,eAAe,YAAA,IAAgB,CAAC,mCAChCK,IAAAA,CAAAE,UAAA,EACE,QAAA,EAAA;AAAA,sBAAAP,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,4CAAA,EACV,QAAA,EAAA,CAAA,CAAE,mBAAmB,CAAA,EACxB,CAAA;AAAA,MAEC,gBAAA,EAAiB;AAAA,sBAGlBA,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAS,MAAM,kBAAA,CAAmB,IAAI,CAAA;AAAA,UACtC,SAAA,EAAU,uEAAA;AAAA,UAET,YAAE,qBAAqB;AAAA;AAAA;AAC1B,KAAA,EACF,CAAA;AAAA,IAID,CAAC,WAAA,IAAe,YAAA,IAAgB,mCAC/BK,IAAAA,CAAAE,UAAA,EACG,QAAA,EAAA;AAAA,MAAA,wBAAA,EAAyB;AAAA,sBAC1BP,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAS,iBAAA;AAAA,UACT,SAAA,EAAU,uEAAA;AAAA,UAET,YAAE,eAAe;AAAA;AAAA;AACpB,KAAA,EACF,CAAA;AAAA,IAID,CAAC,WAAA,IAAe,CAAC,gCAChBK,IAAAA,CAAAE,UAAA,EACE,QAAA,EAAA;AAAA,sBAAAP,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,4CAAA,EACV,QAAA,EAAA,CAAA,CAAE,wBAAwB,CAAA,EAC7B,CAAA;AAAA,MACC,wBAAA;AAAyB,KAAA,EAC5B;AAAA,GAAA,EAEJ,CAAA;AAGF,EAAA,IAAI,CAAC,aAAa,OAAO,OAAA;AAEzB,EAAA,uBACEA,GAAAA,CAAC,KAAA,EAAA,EAAM,MAAM,MAAA,EAAQ,YAAA,EAAc,CAAC,IAAA,KAAS,CAAC,IAAA,KAAS,OAAA,QAAe,MAAA,IAAS,CAAA,EAC7E,0BAAAK,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,kBAAA,EACb,QAAA,EAAA;AAAA,oBAAAL,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,cAAA,EAAgB,QAAA,EAAA,CAAA,CAAE,oBAAoB,CAAA,EAAE,CAAA;AAAA,IACpD;AAAA,GAAA,EACH,CAAA,EACF,CAAA;AAEJ;AC9cO,SAAS,WAAA,CAAY,EAAE,MAAA,EAAQ,OAAA,EAAS,SAAQ,EAAqB;AAC1E,EAAA,MAAM,EAAE,MAAA,EAAQ,IAAA,EAAK,GAAIQ,cAAAA,EAAe;AACxC,EAAA,MAAM,EAAE,OAAA,EAAS,QAAA,EAAS,GAAI,SAAA,EAAU;AACxC,EAAA,MAAM,EAAE,gBAAA,EAAkB,eAAA,EAAiB,iBAAA,KACzCC,YAAAA,EAAa;AAEf,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GACpCV,SAA4B,eAAe,CAAA;AAC7C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAS,EAAE,CAAA;AAGrC,EAAA,MAAM,UAAA,GAAa,MAAM,cAAA,KAAmB,SAAA;AAG5C,EAAA,MAAMK,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,UAAU,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,IAAA,KAKrB;AAGJ,IAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,MAAA,OAAA,EAAQ;AACR,MAAA;AAAA,IACF;AAGA,IAAA,gBAAA,CAAiB,eAAe,CAAA;AAAA,EAClC,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,uBACED,GAAAA;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,uBACEK,IAAAA,CAAAE,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,0BAAAP,GAAAA;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,GAAAA;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,GAAAA;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,GAAAA;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,uBACEK,IAAAA;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,EACED,SAAAA,GACI,iBAAA,GACA,mBAAA,GACA,qCAAA,GACA,MAAA;AAAA,MAGL,QAAA,EAAA;AAAA,QAAA,mBAAA,EAAoB;AAAA,wBAErBJ,IAAC,OAAA,EAAA,EACE,QAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA,EAUH;AAAA;AAAA;AAAA,GACF;AAEJ;AC9NO,SAAS,YAAA,CAAa,EAAE,MAAA,EAAQ,OAAA,EAAS,SAAQ,EAAsB;AAC5E,EAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAO,GAAIQ,cAAAA,EAAe;AACxC,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,OAAA,EAAQ;AACtB,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIT,SAAS,KAAK,CAAA;AAGtD,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,uBAAOC,GAAAA,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,MAAMU,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,uBACEV,GAAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAM,MAAA,EAAQ,YAAA,EAAc,CAAC,IAAA,KAAS,CAAC,IAAA,IAAQ,OAAA,EAAQ,EAC5D,QAAA,kBAAAA,GAAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,WAAA,EAAa,KAAA;AAAA,QACb,UAAA,EAAY,qBAAA;AAAA,QACZ,OAAA,EAAS,kBAAA;AAAA,QACT,QAAA,EAAUU,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,uBACEL,IAAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAM,MAAA,EAAQ,YAAA,EAAc,CAAC,IAAA,KAAS,CAAC,IAAA,IAAQ,OAAA,EAAQ,EAC5D,QAAA,EAAA;AAAA,oBAAAL,GAAAA,CAAC,eAAY,OAAA,EAAkB,CAAA;AAAA,oBAE/BK,KAAC,KAAA,EAAA,EAEC,QAAA,EAAA;AAAA,sBAAAL,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2CAAA,EACV,QAAA,EAAA,CAAA,CAAE,eAAe,CAAA,EACpB,CAAA;AAAA,sBAGAK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sDAAA,EAEZ,QAAA,EAAA;AAAA,QAAA,IAAA,CAAK,UAAA,oBACJA,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,6DAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EACb,QAAA,EAAA;AAAA,4BAAAL,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,4CAAA,EACV,QAAA,EAAA,CAAA,CAAE,uBAAuB,CAAA,EAC5B,CAAA;AAAA,4BACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,gDACV,QAAA,EAAA,cAAA,EACH;AAAA,WAAA,EACF,CAAA;AAAA,0BACAA,GAAAA;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,oBAC5CK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+CAAA,EACb,QAAA,EAAA;AAAA,0BAAAL,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,4CAAA,EACV,QAAA,EAAA,CAAA,CAAE,eAAe,CAAA,EACpB,CAAA;AAAA,0BACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+BAAA,EACV,eAAK,KAAA,EACR;AAAA,SAAA,EACF;AAAA,OAAA,EAEJ,CAAA;AAAA,sBAGAA,GAAAA;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,uBACEK,KAAC,KAAA,EAAA,EAEC,QAAA,EAAA;AAAA,oBAAAL,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2CAAA,EACV,QAAA,EAAA,CAAA,CAAE,qBAAqB,CAAA,EAC1B,CAAA;AAAA,oBAGAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,8CAA6C,QAAA,EAAA,iBAAA,EAE1D,CAAA;AAAA,oBAGAA,IAAC,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,uBACEK,IAAAA;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,4BAAAL,GAAAA,CAAC,SAAI,SAAA,EAAU,eAAA,EACZ,WAAC,QAAA,IAAY,CAAA,CAAE,KAAA,CAAM,OAAA,mBACpBA,GAAAA;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,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oJAAA,EACZ,QAAA,EAAA,WAAA,CAAY,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,EACzB,CAAA,EAEJ,CAAA;AAAA,4BAGAK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EACb,QAAA,EAAA;AAAA,8BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kDAAA,EACb,QAAA,EAAA;AAAA,gCAAAL,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mCAAA,EACb,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,gCACAK,IAAAA,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,8BACAL,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCACZ,QAAA,EAAA,SAAA,EACH,CAAA;AAAA,cACC,CAAC,4BACAA,GAAAA,CAAC,SAAI,SAAA,EAAU,qEAAA,EACZ,QAAA,EAAA,CAAA,CAAE,KAAA,CAAM,OAAA,EACX;AAAA,aAAA,EAEJ,CAAA;AAAA,4BAGAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BAAA,EACb,QAAA,kBAAAA,GAAAA,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,GAAAA,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,GAAiBM,OAAAA,CAAM,UAAA,CAGlC,CAAC,EAAE,SAAA,GAAY,KAAA,EAAO,SAAA,EAAW,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAC/D,EAAA,uBACED,IAAAA;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,IAAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAY,YAAA,EACjB,QAAA,EAAA;AAAA,oBAAAL,IAAC,WAAA,EAAA,EAAY,OAAA,EAAS,MAAM,YAAA,CAAa,KAAK,CAAA,EAAG,CAAA;AAAA,oBACjDK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EACb,QAAA,EAAA;AAAA,sBAAAL,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2CAAA,EAA4C,QAAA,EAAA,aAAA,EAEzD,CAAA;AAAA,sBACAA,GAAAA,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,uBACEK,IAAAA,CAAAE,QAAAA,EAAA,EAEE,QAAA,EAAA;AAAA,oBAAAP,GAAAA;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,oBAGAK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sFAAA,EAEb,QAAA,EAAA;AAAA,sBAAAL,GAAAA;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,GAAAA;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,GAAAA;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,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,qNAAA;AAAA,QACV,KAAA,EAAO;AAAA,UACL,SAAA,EAAW;AAAA,SACb;AAAA,QAEA,QAAA,kBAAAA,GAAAA;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,GAAAA,CAAC,UAAA,EAAA,EAAS,MAAA,EAAO,gBAAA,EAAiB;AAAA;AAAA;AACpC;AAAA,KACF;AAAA,oBAGAK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2EAAA,EAEb,QAAA,EAAA;AAAA,sBAAAL,GAAAA;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,GAAAA;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,GAAAA;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,GAAAA;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,IAAC,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,GAAID,SAAS,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,uBACEM,IAAAA;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,wBAAAL,GAAAA,CAAC,SAAI,SAAA,EAAU,mDAAA,EACb,0BAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uDAAA,EAAwD,CAAA,EACzE,CAAA;AAAA,wBAGAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBACb,QAAA,kBAAAK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uCAAA,EAEb,QAAA,EAAA;AAAA,0BAAAL,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gLAAA,EACb,QAAA,kBAAAA,GAAAA;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,GAAAA,CAAC,UAAA,EAAA,EAAS,MAAA,EAAO,gBAAA,EAAiB;AAAA;AAAA,WACpC,EACF,CAAA;AAAA,0BAGAK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sEAAA,EACb,QAAA,EAAA;AAAA,8BAAAL,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCAAA,EACV,QAAA,EAAA,CAAA,CAAE,mBAAmB,CAAA,EACxB,CAAA;AAAA,8BACAA,GAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAS,OAAA;AAAA,kBACT,SAAA,EAAU,2KAAA;AAAA,kBACV,YAAA,EAAW,OAAA;AAAA,kBAEX,QAAA,kBAAAK,IAAAA;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,wCAAAL,GAAAA,CAAC,UAAK,EAAA,EAAG,IAAA,EAAK,IAAG,GAAA,EAAI,EAAA,EAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,CAAA;AAAA,wCACpCA,GAAAA,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,GAAAA,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,oBACCK,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,qIAAA,EACb,QAAA,EAAA;AAAA,8BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CAAA,EACb,QAAA,EAAA;AAAA,gCAAAL,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EAAuB,QAAA,EAAA,CAAA,CAAE,gBAAgB,CAAA,EAAE,CAAA;AAAA,gCAC3DK,IAAAA,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,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CAAA,EACb,QAAA,EAAA;AAAA,gCAAAL,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EAAuB,QAAA,EAAA,CAAA,CAAE,yBAAyB,CAAA,EAAE,CAAA;AAAA,gCACpEK,IAAAA,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,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iFAAA,EACb,QAAA,EAAA;AAAA,gCAAAL,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EAAuB,QAAA,EAAA,CAAA,CAAE,oBAAoB,CAAA,EAAE,CAAA;AAAA,gCAC/DK,IAAAA,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,4BAIFL,GAAAA;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,IAAC,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,uBACEK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EAEb,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EAEb,QAAA,EAAA;AAAA,sBAAAL,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4DAAA,EAA6D,CAAA;AAAA,sBAE5EA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sDAAA,EAAuD;AAAA,KAAA,EACxE,CAAA;AAAA,oBAGAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EACb,0BAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oEAAA,EACb,0BAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gEAAA,EAAiE,GAClF,CAAA,EACF,CAAA;AAAA,oBAGAK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sEAAA,EACb,QAAA,EAAA;AAAA,sBAAAL,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0DAAA,EAA2D,CAAA;AAAA,sBAC1EA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kDAAA,EAAmD;AAAA,KAAA,EACpE,CAAA;AAAA,oBAGAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBACb,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oEAAA,EACb,QAAA,kBAAAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDACb,QAAA,kBAAAA,GAAAA,CAAC,SAAI,SAAA,EAAU,kDAAA,EAAmD,CAAA,EACpE,CAAA,EACF,CAAA,EACF,CAAA;AAAA,oBAGAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gEAAA,EACb,0BAAAA,GAAAA,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,GAAIQ,cAAAA,EAAe;AAClC,EAAA,MAAM,EAAE,MAAA,EAAO,GAAIG,eAAAA,EAAgB;AACnC,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIZ,SAAwB,IAAI,CAAA;AAC9D,EAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAAIA,SAAS,KAAK,CAAA;AACpE,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAAkC,IAAI,CAAA;AAGxE,EAAA,MAAM,MAAA,GAAS,CAAA,SAAA,EAAY,KAAA,CAAM,OAAO,CAAA,CAAA;AAExC,EAAA,MAAM,SAAS,kBAAA,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,EAAAE,UAAU,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,GAAiBE,WAAAA;AAAA,IACrB,qBAAqB,EAAE,MAAA,EAAQ,YAAA,EAAc,MAAA,CAAO,cAAc,CAAA;AAAA,IAClE,CAAC,MAAA,EAAQ,MAAA,CAAO,YAAY;AAAA,GAC9B;AAGA,EAAAF,UAAU,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,uBACEI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EAEb,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,sBAAAL,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2CAAA,EACV,QAAA,EAAA,CAAA,CAAE,iBAAiB,CAAA,EACtB,CAAA;AAAA,sBAGAK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uGAAA,EACb,QAAA,EAAA;AAAA,wBAAAL,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EACb,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,wBACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mBAAkB,QAAA,EAAA,QAAA,EAAC,CAAA;AAAA,wBACnCA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oCACb,QAAA,EAAA,gBAAA,EACH;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,oBAGAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2CACb,QAAA,kBAAAK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACb,QAAA,EAAA;AAAA,sBAAAL,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uGAAA,EACb,QAAA,kBAAAA,GAAAA;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,GAAAA,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,2BACjDK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sEAAA,EACb,QAAA,EAAA;AAAA,sBAAAL,GAAAA,CAAC,SAAI,SAAA,EAAU,gFAAA,EAAiF,OAAO,EAAE,eAAA,EAAiB,gBAAe,EAAG,CAAA;AAAA,sBAC5IA,GAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,kCAAA,EACb,QAAA,EAAA,CAAA,CAAE,mBAAmB,CAAA,EACxB;AAAA,KAAA,EACF,CAAA;AAAA,IAGD,OAAO,KAAA,KAAU,OAAA,oBAChBK,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,oDAAA,EAAqD,QAAA,EAAA;AAAA,MAAA,SAAA;AAAA,MAC1D,MAAA,CAAO;AAAA,KAAA,EACjB,CAAA;AAAA,oBAIFA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,sBAAAL,GAAAA,CAAC,KAAA,EAAA,EACC,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iHAAA,EACb,QAAA,kBAAAK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6DAAA,EACb,QAAA,EAAA;AAAA,wBAAAL,IAAC,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,GAAAA;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,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oDAAA,EACZ,QAAA,EAAA,MAAA,CAAO,OAAA,EACV;AAAA,KAAA,EAEJ,CAAA;AAAA,oBAGAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wDACb,QAAA,kBAAAK,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kCAAA,EACb,QAAA,EAAA;AAAA,MAAA,CAAA,CAAE,iBAAiB,CAAA;AAAA,MAAG,GAAA;AAAA,sBACvBL,GAAAA;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,GAAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,mBAAA;AAAA,QACN,YAAA,EAAc;AAAA;AAAA,KAChB;AAAA,IAGC,SAAA,IAAa,6BACZA,GAAAA;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,GAAAA,CAAC,eAAA,EAAA,EAAgB,CAAA;AAGvC,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,uBACEK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACb,QAAA,EAAA;AAAA,sBAAAL,IAAC,eAAA,EAAA,EAAgB,CAAA;AAAA,sBACjBA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yFAAA,EAA0F,OAAO,EAAE,OAAA,EAAS,GAAA,EAAI,EAC7H,0BAAAA,GAAAA,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,uBACEK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACb,QAAA,EAAA;AAAA,sBAAAL,IAAC,eAAA,EAAA,EAAgB,CAAA;AAAA,sBACjBA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yFAAA,EAA0F,OAAO,EAAE,OAAA,EAAS,GAAA,EAAI,EAC7H,0BAAAA,GAAAA,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,uBACEK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACb,QAAA,EAAA;AAAA,sBAAAL,IAAC,eAAA,EAAA,EAAgB,CAAA;AAAA,sBACjBA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yFAAA,EAA0F,OAAO,EAAE,OAAA,EAAS,GAAA,EAAI,EAC7H,0BAAAA,GAAAA,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,GAAAA;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,GAAAA;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,GAAAA;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,GAAIQ,cAAAA,EAAe;AAChC,EAAA,MAAM,EAAE,MAAA,EAAO,GAAIG,eAAAA,EAAgB;AAEnC,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIZ,QAAAA,CAAyB,EAAE,CAAA;AACrE,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAAS,IAAI,CAAA;AAC/C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAwB,IAAI,CAAA;AACtD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,SAAiB,EAAE,CAAA;AAGzD,EAAAE,UAAU,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,UAAU,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,UAAU,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,uBACEI,IAAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAY,YAAA,EACjB,QAAA,EAAA;AAAA,oBAAAL,GAAAA;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,GAAAA;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;;;ACyaA,SAAA,EAAA;;;AC5jBA,IAAM,YAAA,GAAkC;AAAA,EACtC,IAAA,EAAM,MAAA;AAAA,EACN,cAAA,EAAgB,SAAA;AAAA,EAChB,OAAA,EAAS,GAAA;AAAA,EACT,gBAAA,EAAkB,IAAA;AAAA,EAClB,eAAA,EAAiB,IAAA;AAAA,EACjB,QAAA,EAAU,KAAA;AAAA,EACV,cAAA,EAAgB,IAAA;AAAA,EAChB,MAAA,EAAQ,MAAA;AAAA,EACR,KAAA,EAAO,MAAA;AAAA,EACP,OAAA,EAAS,MAAA;AAAA,EACT,eAAA,EAAiB,IAAA;AAAA,EACjB,WAAA,EAAa;AACf,CAAA;AAEA,SAAS,mBAAA,CACP,OACA,MAAA,EACmB;AACnB,EAAA,QAAQ,OAAO,IAAA;AAAM,IACnB,KAAK,OAAA;AACH,MAAA,OAAO,EAAE,GAAG,YAAA,EAAa;AAAA,IAE3B,KAAK,cAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,YAAA;AAAA,QACH,gBAAgB,MAAA,CAAO,OAAA;AAAA,QACvB,gBAAA,EAAkB,IAAA;AAAA,QAClB,eAAA,EAAiB;AAAA,OACnB;AAAA,IAEF,KAAK,aAAA;AACH,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,OAAA,EAAS,OAAO,OAAA,EAAQ;AAAA,IAE7C,KAAK,qBAAA;AACH,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,gBAAA,EAAkB,OAAO,OAAA,EAAQ;AAAA,IAEtD,KAAK,oBAAA;AACH,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,eAAA,EAAiB,OAAO,OAAA,EAAQ;AAAA,IAErD,KAAK,cAAA;AACH,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,OAAA,EAAS,OAAO,OAAA,EAAQ;AAAA,IAE7C,KAAK,sBAAA;AACH,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,eAAA,EAAiB,OAAO,eAAA,EAAgB;AAAA,IAE7D,KAAK,eAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,QAAA,EAAU,IAAA;AAAA,QACV,IAAA,EAAM,YAAA;AAAA,QACN,cAAA,EAAgB,SAAA;AAAA,QAChB,KAAA,EAAO;AAAA,OACT;AAAA,IAEF,KAAK,qBAAA;AACH,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,cAAA,EAAgB,OAAO,IAAA,EAAK;AAAA,IAEjD,KAAK,aAAA;AACH,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQ,OAAO,MAAA,EAAO;AAAA,IAE3C,KAAK,iBAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,QAAA,EAAU,KAAA;AAAA,QACV,IAAA,EAAM,QAAA;AAAA,QACN,gBAAgB,MAAA,CAAO;AAAA,OACzB;AAAA,IAEF,KAAK,eAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,QAAA,EAAU,KAAA;AAAA,QACV,IAAA,EAAM,QAAA;AAAA,QACN,OAAO,MAAA,CAAO;AAAA,OAChB;AAAA,IAEF,KAAK,OAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,IAAA,EAAM,MAAA;AAAA,QACN,KAAA,EAAO,MAAA;AAAA,QACP,gBAAA,EAAkB;AAAA,OACpB;AAAA,IAEF,KAAK,cAAA;AACH,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,WAAA,EAAa,IAAA,EAAK;AAAA,IAEvC,KAAK,cAAA;AACH,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,WAAA,EAAa,KAAA,EAAO,kBAAkB,IAAA,EAAK;AAAA,IAEhE;AACE,MAAA,OAAO,KAAA;AAAA;AAEb;AAmBO,SAAS,oBAAA,CACd,MACA,YAAA,EAC4B;AAC5B,EAAA,MAAM,EAAE,IAAA,EAAK,GAAIQ,cAAAA,EAAe;AAChC,EAAA,MAAM,EAAE,MAAA,EAAO,GAAIG,eAAAA,EAAgB;AACnC,EAAA,MAAM,EAAE,GAAA,EAAI,GAAI,OAAA,EAAQ;AACxB,EAAA,MAAM,EAAE,cAAA,EAAe,GAAI,YAAA,EAAa;AACxC,EAAA,MAAM,EAAE,yBAAA,EAA2B,iBAAA,EAAkB,GAAI,iBAAA,EAAkB;AAE3E,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,UAAA,CAAW,qBAAqB,YAAY,CAAA;AAItE,EAAA,MAAM,YAAA,GAAeR,WAAAA;AAAA,IACnB,OAAO,OAAA,KAA2B;AAChC,MAAA,IAAI,CAAC,MAAM,UAAA,EAAY;AACrB,QAAA,QAAA,CAAS,EAAE,IAAA,EAAM,qBAAA,EAAuB,OAAA,EAAS,OAAO,CAAA;AACxD,QAAA;AAAA,MACF;AAEA,MAAA,QAAA,CAAS,EAAE,IAAA,EAAM,qBAAA,EAAuB,OAAA,EAAS,MAAM,CAAA;AACvD,MAAA,IAAI;AACF,QAAA,MAAM,SAAA,GAAY,GAAA,CAAI,OAAA,CAAQ,KAAA,CAAM,OAAO,CAAA;AAC3C,QAAA,MAAM,eAAe,OAAA,CAAQ,KAAA,CAAM,GAAG,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAClD,QAAA,IAAI,UAAA;AAEJ,QAAA,IAAI,iBAAiB,QAAA,EAAU;AAC7B,UAAA,UAAA,GAAa,MAAM,SAAA,CAAU,UAAA,CAAW,IAAA,CAAK,UAAU,CAAA;AAAA,QACzD,CAAA,MAAO;AACL,UAAA,UAAA,GAAc,MAAM,UAAU,YAAA,CAAa;AAAA,YACzC,OAAA,EAAS,YAAA;AAAA,YACT,GAAA,EAAK,QAAA;AAAA,YACL,YAAA,EAAc,WAAA;AAAA,YACd,IAAA,EAAM,CAAC,IAAA,CAAK,UAAU;AAAA,WACvB,CAAA;AAAA,QACH;AAEA,QAAA,MAAM,UAAA,GACJ,OAAO,UAAU,CAAA,GAAI,KAAK,GAAA,CAAI,EAAA,EAAI,OAAA,CAAQ,KAAA,CAAM,QAAQ,CAAA;AAC1D,QAAA,MAAM,gBAAA,GAAmB,UAAA,CAAW,cAAA,CAAe,KAAA,CAAA,EAAW;AAAA,UAC5D,qBAAA,EAAuB,CAAA;AAAA,UACvB,uBACE,OAAA,CAAQ,KAAA,CAAM,WAAW,CAAA,GAAI,CAAA,GAAI,QAAQ,KAAA,CAAM;AAAA,SAClD,CAAA;AAED,QAAA,QAAA,CAAS,EAAE,IAAA,EAAM,aAAA,EAAe,OAAA,EAAS,kBAAkB,CAAA;AAAA,MAC7D,SAAS,GAAA,EAAK;AACZ,QAAA,OAAA,CAAQ,KAAA,CAAM,4BAA4B,GAAG,CAAA;AAC7C,QAAA,QAAA,CAAS,EAAE,IAAA,EAAM,aAAA,EAAe,OAAA,EAAS,KAAK,CAAA;AAAA,MAChD,CAAA,SAAE;AACA,QAAA,QAAA,CAAS,EAAE,IAAA,EAAM,qBAAA,EAAuB,OAAA,EAAS,OAAO,CAAA;AAAA,MAC1D;AAAA,IACF,CAAA;AAAA,IACA,CAAC,MAAM,GAAG;AAAA,GACZ;AAEA,EAAA,MAAM,aAAA,GAAgBA,YAAY,YAAY;AAC5C,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,GAAA,CAA0B,gBAAgB,CAAA;AACxE,MAAA,QAAA,CAAS,EAAE,IAAA,EAAM,cAAA,EAAgB,OAAA,EAAS,QAAA,CAAS,SAAS,CAAA;AAAA,IAC9D,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,MAAM,kBAAA,GAAqBA,YAAY,YAAY;AACjD,IAAA,QAAA,CAAS,EAAE,IAAA,EAAM,oBAAA,EAAsB,OAAA,EAAS,MAAM,CAAA;AACtD,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,GAAA;AAAA,QAC5B;AAAA,OACF;AACA,MAAA,QAAA,CAAS;AAAA,QACP,IAAA,EAAM,sBAAA;AAAA,QACN,iBAAiB,QAAA,CAAS;AAAA,OAC3B,CAAA;AAAA,IACH,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,KAAA,CAAM,mCAAmC,GAAG,CAAA;AACpD,MAAA,QAAA,CAAS,EAAE,IAAA,EAAM,sBAAA,EAAwB,eAAA,EAAiB,MAAM,CAAA;AAAA,IAClE,CAAA,SAAE;AACA,MAAA,QAAA,CAAS,EAAE,IAAA,EAAM,oBAAA,EAAsB,OAAA,EAAS,OAAO,CAAA;AAAA,IACzD;AAAA,EACF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAKX,EAAAF,UAAU,MAAM;AACd,IAAA,IAAI,QAAQ,cAAA,EAAgB;AAE1B,MAAA,IAAI,KAAA,CAAM,IAAA,KAAS,YAAA,IAAgB,KAAA,CAAM,SAAS,QAAA,EAAU;AAC1D,QAAA;AAAA,MACF;AACA,MAAA,QAAA,CAAS,EAAE,IAAA,EAAM,cAAA,EAAgB,OAAA,EAAS,cAAA,CAAe,SAAS,CAAA;AAClE,MAAA,YAAA,CAAa,eAAe,OAAO,CAAA;AACnC,MAAA,aAAA,EAAc;AACd,MAAA,kBAAA,EAAmB;AAAA,IACrB,CAAA,MAAA,IAAW,CAAC,IAAA,EAAM;AAChB,MAAA,QAAA,CAAS,EAAE,IAAA,EAAM,OAAA,EAAS,CAAA;AAAA,IAC5B;AAAA,EAEF,GAAG,CAAC,IAAA,EAAM,cAAA,EAAgB,OAAA,EAAS,EAAE,CAAC,CAAA;AAItC,EAAA,MAAM,SAAA,GAAYE,YAAY,YAAY;AACxC,IAAA,MAAM,EAAE,cAAA,EAAgB,eAAA,EAAgB,GAAI,KAAA;AAC5C,IAAA,IAAI,CAAC,kBAAkB,CAAC,IAAA,EAAM,cAAc,CAAC,cAAA,IAAkB,CAAC,eAAA,EAAiB;AAC/E,MAAA;AAAA,IACF;AAEA,IAAA,QAAA,CAAS,EAAE,IAAA,EAAM,eAAA,EAAiB,CAAA;AAElC,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,GAAY,GAAA,CAAI,cAAA,CAAe,KAAA,CAAM,OAAO,CAAA;AAClD,MAAA,MAAM,eAAe,cAAA,CAAe,KAAA,CAAM,GAAG,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAEzD,MAAA,QAAA,CAAS,EAAE,IAAA,EAAM,qBAAA,EAAuB,IAAA,EAAM,gBAAgB,CAAA;AAE9D,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI,iBAAiB,QAAA,EAAU;AAC7B,QAAA,MAAA,GAAS,MAAM,UAAU,eAAA,CAAgB;AAAA,UACvC,EAAA,EAAI,eAAA;AAAA,UACJ,IAAA,EAAM,IAAA;AAAA,UACN,KAAA,EAAO,MAAA,CAAO,cAAA,CAAe,MAAM;AAAA,SACpC,CAAA;AAAA,MACH,CAAA,MAAO;AACL,QAAA,MAAA,GAAS,MAAM,UAAU,SAAA,CAAU;AAAA,UACjC;AAAA,YACE,MAAA,EAAQ,YAAA;AAAA,YACR,GAAA,EAAK,QAAA;AAAA,YACL,YAAA,EAAc,UAAA;AAAA,YACd,IAAA,EAAM;AAAA,cACJ,eAAA;AAAA,cACA,MAAA,CAAO,eAAe,MAAM;AAAA;AAC9B;AACF,SACD,CAAA;AAAA,MACH;AAEA,MAAA,QAAA,CAAS,EAAE,IAAA,EAAM,aAAA,EAAe,QAAQ,MAAA,CAAO,MAAA,IAAU,IAAI,CAAA;AAC7D,MAAA,QAAA,CAAS,EAAE,IAAA,EAAM,qBAAA,EAAuB,IAAA,EAAM,cAAc,CAAA;AAE5D,MAAA,MAAM,yBAAA,CAA0B,cAAA,CAAe,EAAA,EAAI,MAAA,CAAO,IAAI,CAAA;AAE9D,MAAA,cAAA,CAAe,YAAA,GAAe;AAAA,QAC5B,GAAG,cAAA;AAAA,QACH,MAAA,EAAQ,OAAO,MAAA,IAAU,EAAA;AAAA,QACzB,MAAA,EAAQ;AAAA,OACT,CAAA;AAED,MAAA,MAAM,gBAAA,GAAmB,MAAM,iBAAA,CAAkB,cAAA,CAAe,EAAE,CAAA;AAElE,MAAA,QAAA,CAAS,EAAE,IAAA,EAAM,iBAAA,EAAmB,OAAA,EAAS,kBAAkB,CAAA;AAE/D,MAAA,IAAI,gBAAA,CAAiB,WAAW,WAAA,EAAa;AAC3C,QAAA,cAAA,CAAe,aAAa,gBAAgB,CAAA;AAAA,MAC9C,CAAA,MAAA,IAAW,gBAAA,CAAiB,MAAA,KAAW,QAAA,EAAU;AAC/C,QAAA,MAAM,SAAA,GAAY;AAAA,UAChB,IAAA,EAAM,gBAAA;AAAA,UACN,OAAA,EAAS;AAAA,SACX;AACA,QAAA,QAAA,CAAS,EAAE,IAAA,EAAM,eAAA,EAAiB,KAAA,EAAO,WAAW,CAAA;AACpD,QAAA,cAAA,CAAe,UAAU,SAAS,CAAA;AAAA,MACpC;AAAA,IACF,SAAS,GAAA,EAAU;AACjB,MAAA,OAAA,CAAQ,KAAA,CAAM,mBAAmB,GAAG,CAAA;AACpC,MAAA,MAAM,YAAA,GAAe;AAAA,QACnB,IAAA,EAAM,IAAI,IAAA,IAAQ,gBAAA;AAAA,QAClB,OAAA,EAAS,IAAI,OAAA,IAAW;AAAA,OAC1B;AACA,MAAA,QAAA,CAAS,EAAE,IAAA,EAAM,eAAA,EAAiB,KAAA,EAAO,cAAc,CAAA;AACvD,MAAA,cAAA,EAAgB,UAAU,YAAY,CAAA;AAAA,IACxC;AAAA,EACF,CAAA,EAAG;AAAA,IACD,KAAA;AAAA,IACA,IAAA;AAAA,IACA,cAAA;AAAA,IACA,GAAA;AAAA,IACA,yBAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,aAAA,GAAgBA,YAAY,MAAM;AACtC,IAAA,QAAA,CAAS,EAAE,IAAA,EAAM,cAAA,EAAgB,CAAA;AAAA,EACnC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,kBAAA,GAAqBA,WAAAA;AAAA,IACzB,CAAC,WAAA,KAAyB;AACxB,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,QAAA,CAAS,EAAE,IAAA,EAAM,cAAA,EAAgB,CAAA;AACjC,QAAA,IAAI,MAAM,cAAA,EAAgB;AACxB,UAAA,YAAA,CAAa,MAAM,cAAc,CAAA;AAAA,QACnC;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,CAAC,KAAA,CAAM,cAAA,EAAgB,YAAY;AAAA,GACrC;AAEA,EAAA,MAAM,UAAA,GAAaA,YAAY,MAAM;AACnC,IAAA,IAAI,KAAA,CAAM,cAAA,EAAgB,MAAA,KAAW,WAAA,EAAa;AAChD,MAAA,cAAA,EAAgB,UAAA,GAAa,MAAM,cAAc,CAAA;AAAA,IACnD;AACA,IAAA,YAAA,CAAa,KAAK,CAAA;AAAA,EACpB,GAAG,CAAC,KAAA,CAAM,cAAA,EAAgB,cAAA,EAAgB,YAAY,CAAC,CAAA;AAEvD,EAAA,MAAM,WAAA,GAAcA,YAAY,MAAM;AACpC,IAAA,QAAA,CAAS,EAAE,IAAA,EAAM,OAAA,EAAS,CAAA;AAC1B,IAAA,IAAI,MAAM,cAAA,EAAgB;AACxB,MAAA,YAAA,CAAa,MAAM,cAAc,CAAA;AAAA,IACnC;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,CAAM,cAAA,EAAgB,YAAY,CAAC,CAAA;AAEvC,EAAA,MAAM,WAAA,GAAcA,YAAY,MAAM;AACpC,IAAA,IAAI,KAAA,CAAM,SAAS,YAAA,EAAc;AAC/B,MAAA;AAAA,IACF;AACA,IAAA,IAAI,KAAA,CAAM,SAAS,MAAA,EAAQ;AACzB,MAAA,cAAA,EAAgB,QAAA,IAAW;AAAA,IAC7B;AACA,IAAA,YAAA,CAAa,KAAK,CAAA;AAAA,EACpB,GAAG,CAAC,KAAA,CAAM,IAAA,EAAM,cAAA,EAAgB,YAAY,CAAC,CAAA;AAE7C,EAAA,MAAM,YAAA,GAAeA,YAAY,YAAY;AAC3C,IAAA,MAAM,EAAE,cAAA,EAAgB,KAAA,EAAO,IAAA,EAAM,QAAO,GAAI,KAAA;AAChD,IAAA,IAAI,CAAC,cAAA,IAAkB,CAAC,KAAA,EAAO;AAE/B,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,CAAO,IAAA,CAAK,CAAA,UAAA,EAAa,cAAA,CAAe,EAAE,CAAA,OAAA,CAAA,EAAW;AAAA,QACzD,WAAW,KAAA,CAAM,IAAA;AAAA,QACjB,cAAc,KAAA,CAAM,OAAA;AAAA,QACpB,QAAA,EAAU,KAAA;AAAA,QACV,OAAA,EAAS;AAAA,UACP,IAAA;AAAA,UACA,MAAA;AAAA,UACA,OAAA,EAAS,eAAe,KAAA,CAAM,EAAA;AAAA,UAC9B,OAAA,EAAS,eAAe,KAAA,CAAM,OAAA;AAAA,UAC9B,QAAQ,cAAA,CAAe;AAAA;AACzB,OACD,CAAA;AAED,MAAA,KAAA,CAAM,sDAAsD,CAAA;AAAA,IAC9D,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,KAAA,CAAM,kCAAkC,GAAG,CAAA;AACnD,MAAA,KAAA;AAAA,QACE,CAAA,YAAA,EAAe,MAAM,IAAI;;AAAA,SAAA,EAAgB,MAAM,OAAO;;AAAA,6CAAA;AAAA,OACxD;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,MAAM,CAAC,CAAA;AAIlB,EAAA,MAAM,QAAA,GAAW,MAAM,IAAA,KAAS,YAAA;AAChC,EAAA,MAAM,YAAA,GAAe,MAAM,eAAA,KAAoB,IAAA;AAE/C,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,SAAA;AAAA,IACA,aAAA;AAAA,IACA,kBAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF;AACF;ACnbO,IAAM,kBAA4B,MAAM;AAC7C,EAAA,uBACEE,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EAEb,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EACb,QAAA,EAAA;AAAA,sBAAAL,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uDAAA,EAAwD,CAAA;AAAA,sBACvEK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BAAA,EACb,QAAA,EAAA;AAAA,wBAAAL,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAA,EAAoD,CAAA;AAAA,wBACnEA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAA,EAAoD;AAAA,OAAA,EACrE;AAAA,KAAA,EACF,CAAA;AAAA,oBAGAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EAA8B,CAAA;AAAA,oBAG7CK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,sBAAAL,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAA,EAAoD,CAAA;AAAA,sBACnEA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAA,EAAoD,CAAA;AAAA,sBACnEA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAA,EAAoD;AAAA,KAAA,EACrE,CAAA;AAAA,oBAGAK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4FAAA,EACb,QAAA,EAAA;AAAA,sBAAAL,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAA,EAAoD,CAAA;AAAA,sBACnEA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAA,EAAoD;AAAA,KAAA,EACrE,CAAA;AAAA,oBAGAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CAAA,EAA8C;AAAA,GAAA,EAC/D,CAAA;AAEJ,CAAA;ACzBO,IAAM,iBAAgD,CAAC;AAAA,EAC5D,OAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,uBACEK,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,CAAA,0EAAA,EACT,cAAA,GACI,gDAAA,GACA,kBACN,CAAA,CAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAL,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kCAAA,EAAmC,QAAA,EAAA,cAAA,EAAY,CAAA;AAAA,wBAC/DK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,IAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,CAAA,8BAAA,EACT,cAAA,GAAiB,mBAAA,GAAsB,qBACzC,CAAA,CAAA;AAAA,cAEC,QAAA,EAAA;AAAA,gBAAA,OAAA;AAAA,gBAAQ,GAAA;AAAA,gBAAE;AAAA;AAAA;AAAA,WACb;AAAA,UACC,cAAA,oBACCA,IAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,4CAAA,EAA6C,QAAA,EAAA;AAAA,YAAA,OAAA;AAAA,YAClD,QAAA;AAAA,YAAS,GAAA;AAAA,YAAE;AAAA,WAAA,EACnB;AAAA,SAAA,EAEJ;AAAA;AAAA;AAAA,GACF;AAEJ,CAAA;AC/BO,IAAM,cAA0C,CAAC;AAAA,EACtD,IAAA;AAAA,EACA,WAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,eAAe,KAAA,IAAS,OAAA;AAE9B,EAAA,uBACEA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uCAAA,EACZ,QAAA,EAAA;AAAA,IAAA,YAAA,mBACCL,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,YAAA;AAAA,QACL,GAAA,EAAK,IAAA;AAAA,QACL,SAAA,EAAU,yEAAA;AAAA,QACV,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,UAAC,CAAA,CAAE,MAAA,CAA4B,KAAA,CAAM,OAAA,GAAU,MAAA;AAAA,QACjD;AAAA;AAAA,wBAGFA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yGACb,QAAA,kBAAAA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,uCAAA;AAAA,QACV,IAAA,EAAK,MAAA;AAAA,QACL,OAAA,EAAQ,WAAA;AAAA,QACR,MAAA,EAAO,cAAA;AAAA,QAEP,QAAA,kBAAAA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAc,OAAA;AAAA,YACd,cAAA,EAAe,OAAA;AAAA,YACf,WAAA,EAAa,GAAA;AAAA,YACb,CAAA,EAAE;AAAA;AAAA;AACJ;AAAA,KACF,EACF,CAAA;AAAA,oBAEFK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EACb,QAAA,EAAA;AAAA,sBAAAL,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,qEAAA,EACX,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,MACC,+BACCA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kEACV,QAAA,EAAA,WAAA,EACH;AAAA,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA;AAEJ,CAAA;ACzCO,IAAM,kBAAkD,CAAC;AAAA,EAC9D,OAAA;AAAA,EACA,OAAA;AAAA,EACA,gBAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAU,eAAA,EAAiB,WAAU,GAAI,OAAA;AAGxD,EAAA,MAAM,aAAA,GAAgB,OAAO,OAAA,CAAQ,MAAM,IAAI,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,KAAA,CAAM,QAAQ,CAAA;AAC1E,EAAA,MAAM,eAAA,GAAkB,aAAA,CAAc,cAAA,CAAe,MAAA,EAAW;AAAA,IAC9D,qBAAA,EAAuB,CAAA;AAAA,IACvB,qBAAA,EAAuB,KAAA,CAAM,QAAA,GAAW,CAAA,GAAI,IAAI,KAAA,CAAM;AAAA,GACvD,CAAA;AAGD,EAAA,MAAM,aAAa,UAAA,CAAW,OAAA,CAAQ,QAAQ,IAAA,EAAM,EAAE,KAAK,GAAG,CAAA;AAC9D,EAAA,MAAM,cAAA,GAAiB,CAAC,gBAAA,IAAoB,UAAA,GAAa,aAAA;AAEzD,EAAA,uBACEK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EAEZ,QAAA,EAAA;AAAA,IAAA,QAAA,oBACCA,IAAAA,CAAAE,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAP,GAAAA;AAAA,QAAC,WAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAM,QAAA;AAAA,UACN,aAAa,eAAA,IAAmB,MAAA;AAAA,UAChC,OAAO,SAAA,IAAa,MAAA;AAAA,UACpB;AAAA;AAAA,OACF;AAAA,sBACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EAA8B;AAAA,KAAA,EAC/C,CAAA;AAAA,oBAIFK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,sBAAAL,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kCAAA,EAAmC,QAAA,EAAA,eAAA,EAAa,CAAA;AAAA,sBAC7DK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0CAAA,EACb,QAAA,EAAA;AAAA,wBAAAL,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kDAAA,EACb,QAAA,EAAA,eAAA,EACH,CAAA;AAAA,wBACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mDAAA,EACb,gBAAM,MAAA,EACT;AAAA,OAAA,EACF,CAAA;AAAA,MACC,QAAQ,QAAA,oBACPK,IAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,kCAAA,EAAmC,QAAA,EAAA;AAAA,QAAA,UAAA;AAAA,QAC1C,UAAA,CAAW,OAAA,CAAQ,QAAQ,CAAA,CAAE,QAAQ,CAAC,CAAA;AAAA,QAAE;AAAA,OAAA,EAC9C;AAAA,KAAA,EAEJ,CAAA;AAAA,IAGC,gBAAA,mBACCA,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,+GAAA,EACb,QAAA,EAAA;AAAA,sBAAAL,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kCAAA,EAAmC,QAAA,EAAA,oBAAA,EAAkB,CAAA;AAAA,sBACrEA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAA,EAAoD;AAAA,KAAA,EACrE,oBAEAA,GAAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,OAAA;AAAA,QACA,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,QAAA,EAAU,eAAA;AAAA,QACV;AAAA;AAAA,KACF;AAAA,oBAIFK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,sBAAAL,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,KAAA;AAAA,UACT,QAAA,EAAU,YAAY,gBAAA,IAAoB,cAAA;AAAA,UAC1C,SAAA,EAAU,aAAA;AAAA,UAET,QAAA,EAAA,QAAA,mBACCK,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,4DAAA,EACd,QAAA,EAAA;AAAA,4BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EAAsC,SAAQ,WAAA,EAC3D,QAAA,EAAA;AAAA,8BAAAL,GAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAU,iBAAA;AAAA,kBACV,EAAA,EAAG,IAAA;AAAA,kBACH,EAAA,EAAG,IAAA;AAAA,kBACH,CAAA,EAAE,IAAA;AAAA,kBACF,MAAA,EAAO,cAAA;AAAA,kBACP,WAAA,EAAY,GAAA;AAAA,kBACZ,IAAA,EAAK;AAAA;AAAA,eACP;AAAA,8BACAA,GAAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAU,iBAAA;AAAA,kBACV,IAAA,EAAK,cAAA;AAAA,kBACL,CAAA,EAAE;AAAA;AAAA;AACJ,aAAA,EACF,CAAA;AAAA,YAAM;AAAA,WAAA,EAER,IACE,cAAA,GACF,sBAAA,GAEA,OAAO,eAAe,CAAA,CAAA,EAAI,MAAM,MAAM,CAAA;AAAA;AAAA,OAE1C;AAAA,MAEC,cAAA,oBACCK,IAAAA,CAAC,MAAA,EAAA,EAAO,SAAQ,WAAA,EAAY,OAAA,EAAS,SAAA,EAAW,SAAA,EAAU,aAAA,EAAc,QAAA,EAAA;AAAA,QAAA,UAAA;AAAA,QAC7D,KAAA,CAAM;AAAA,OAAA,EACjB;AAAA,KAAA,EAEJ,CAAA;AAAA,oBAGAL,IAAC,SAAA,EAAA,EAAU;AAAA,GAAA,EACb,CAAA;AAEJ,CAAA;AC5HO,IAAM,wBAA8D,CAAC;AAAA,EAC1E;AACF,CAAA,KAAM;AAEJ,EAAA,MAAM,mBAAmB,MAAM;AAC7B,IAAA,QAAQ,IAAA;AAAM,MACZ,KAAK,SAAA;AACH,QAAA,OAAO,6BAAA;AAAA,MACT,KAAK,cAAA;AACH,QAAA,OAAO,oBAAA;AAAA,MACT,KAAK,YAAA;AACH,QAAA,OAAO,gBAAA;AAAA,MACT;AACE,QAAA,OAAO,eAAA;AAAA;AACX,EACF,CAAA;AAGA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,QAAQ,IAAA;AAAM,MACZ,KAAK,SAAA;AACH,QAAA,OAAO,EAAA;AAAA,MACT,KAAK,cAAA;AACH,QAAA,OAAO,EAAA;AAAA,MACT,KAAK,YAAA;AACH,QAAA,OAAO,EAAA;AAAA,MACT;AACE,QAAA,OAAO,CAAA;AAAA;AACX,EACF,CAAA;AAEA,EAAA,MAAM,WAAW,WAAA,EAAY;AAE7B,EAAA,uBACEK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EAEb,QAAA,EAAA;AAAA,oBAAAL,GAAAA,CAAC,SAAI,SAAA,EAAU,+BAAA,EACb,0BAAAK,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mCAAA,EAEb,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EAAsB,SAAQ,WAAA,EAC3C,QAAA,EAAA;AAAA,wBAAAL,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAG,IAAA;AAAA,YACH,EAAA,EAAG,IAAA;AAAA,YACH,CAAA,EAAE,IAAA;AAAA,YACF,IAAA,EAAK,MAAA;AAAA,YACL,MAAA,EAAO,cAAA;AAAA,YACP,WAAA,EAAY,GAAA;AAAA,YACZ,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,wBAEAA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAG,IAAA;AAAA,YACH,EAAA,EAAG,IAAA;AAAA,YACH,CAAA,EAAE,IAAA;AAAA,YACF,IAAA,EAAK,MAAA;AAAA,YACL,MAAA,EAAO,cAAA;AAAA,YACP,WAAA,EAAY,GAAA;AAAA,YACZ,aAAA,EAAc,OAAA;AAAA,YACd,SAAA,EAAU,2DAAA;AAAA,YACV,eAAA,EAAiB,GAAG,QAAQ,CAAA,KAAA,CAAA;AAAA,YAC5B,KAAA,EAAO;AAAA,cACL,SAAA,EAAW,gBAAA;AAAA,cACX,eAAA,EAAiB;AAAA;AACnB;AAAA;AACF,OAAA,EACF,CAAA;AAAA,sBAEAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4EAAA,EACb,0BAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0EAAA,EAA2E,CAAA,EAC5F;AAAA,KAAA,EACF,CAAA,EACF,CAAA;AAAA,oBAGAK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCAAA,EACb,QAAA,EAAA;AAAA,sBAAAL,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,mDAAA,EACV,4BAAiB,EACpB,CAAA;AAAA,sBACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oCAAmC,QAAA,EAAA,gCAAA,EAEhD;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ,CAAA;AC9EO,IAAM,oBAAsD,CAAC;AAAA,EAClE,OAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,SAAA,GAAY,QAAQ,MAAA,KAAW,WAAA;AACrC,EAAiB,OAAA,CAAQ,MAAA,KAAW,QAAA,IAAY,CAAC,CAAC;AAElD,EAAA,uBACEK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EAEb,QAAA,EAAA;AAAA,oBAAAL,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EACZ,QAAA,EAAA,SAAA,mBACCA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wGAAA,EACb,QAAA,kBAAAA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,uCAAA;AAAA,QACV,IAAA,EAAK,MAAA;AAAA,QACL,OAAA,EAAQ,WAAA;AAAA,QACR,MAAA,EAAO,cAAA;AAAA,QAEP,QAAA,kBAAAA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAc,OAAA;AAAA,YACd,cAAA,EAAe,OAAA;AAAA,YACf,WAAA,EAAa,CAAA;AAAA,YACb,CAAA,EAAE;AAAA;AAAA;AACJ;AAAA,OAEJ,CAAA,mBAEAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wGACb,QAAA,kBAAAA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,qCAAA;AAAA,QACV,IAAA,EAAK,MAAA;AAAA,QACL,OAAA,EAAQ,WAAA;AAAA,QACR,MAAA,EAAO,cAAA;AAAA,QAEP,QAAA,kBAAAA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAc,OAAA;AAAA,YACd,cAAA,EAAe,OAAA;AAAA,YACf,WAAA,EAAa,CAAA;AAAA,YACb,CAAA,EAAE;AAAA;AAAA;AACJ;AAAA,OAEJ,CAAA,EAEJ,CAAA;AAAA,oBAGAK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCAAA,EACb,QAAA,EAAA;AAAA,sBAAAL,IAAC,IAAA,EAAA,EAAG,SAAA,EAAU,qDAAA,EACX,QAAA,EAAA,SAAA,GAAY,qBAAqB,gBAAA,EACpC,CAAA;AAAA,sBACAA,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oCACV,QAAA,EAAA,SAAA,GACG,8CAAA,GACA,KAAA,EAAO,OAAA,IAAW,yCAAA,EACxB;AAAA,KAAA,EACF,CAAA;AAAA,IAGC,aAAa,OAAA,CAAQ,MAAA,oBACpBK,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,0DAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CAAA,EACb,QAAA,EAAA;AAAA,wBAAAL,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EAAsB,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,wBAC5CK,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sCAAA,EAEZ,QAAA,EAAA;AAAA,UAAA,CAAA,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,IAAI,OAAA,CAAQ,KAAA,CAAM,QAAQ,CAAA,EAC5D,cAAA,EAAe;AAAA,UAAG,GAAA;AAAA,UACnB,QAAQ,KAAA,CAAM;AAAA,SAAA,EACjB;AAAA,OAAA,EACF,CAAA;AAAA,MACC,QAAQ,QAAA,oBACPA,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,6CAAA,EACb,QAAA,EAAA;AAAA,wBAAAL,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EAAsB,QAAA,EAAA,WAAA,EAAS,CAAA;AAAA,wBAC/CK,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EAAsB,QAAA,EAAA;AAAA,UAAA,GAAA;AAAA,UAClC,UAAA,CAAW,OAAA,CAAQ,QAAQ,CAAA,CAAE,QAAQ,CAAC;AAAA,SAAA,EAC1C;AAAA,OAAA,EACF,CAAA;AAAA,sBAEFA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CAAA,EACb,QAAA,EAAA;AAAA,wBAAAL,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EAAsB,QAAA,EAAA,aAAA,EAAW,CAAA;AAAA,wBACjDK,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iDAAA,EACb,QAAA,EAAA;AAAA,UAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AAAA,UAAE,KAAA;AAAA,UAAI,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,EAAE;AAAA,SAAA,EACzD;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,oBAIFL,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gBAAA,EACZ,QAAA,EAAA,SAAA,mBACCA,GAAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAS,MAAA,EAAQ,WAAU,aAAA,EAAc,QAAA,EAAA,MAAA,EAEjD,oBAEAK,IAAAA,CAAAE,UAAA,EACE,QAAA,EAAA;AAAA,sBAAAP,IAAC,MAAA,EAAA,EAAO,OAAA,EAAS,OAAA,EAAS,SAAA,EAAU,eAAc,QAAA,EAAA,WAAA,EAElD,CAAA;AAAA,sBAEAA,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,QAAA;AAAA,UACT,SAAA,EAAU,yGAAA;AAAA,UACX,QAAA,EAAA;AAAA;AAAA;AAED,KAAA,EACF,CAAA,EAEJ,CAAA;AAAA,IAGC,SAAA,oBAAaA,GAAAA,CAAC,SAAA,EAAA,EAAU;AAAA,GAAA,EAC3B,CAAA;AAEJ,CAAA;AClHO,IAAM,eAA4C,CAAC;AAAA,EACxD,IAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,EAAE,cAAA,EAAe,GAAI,YAAA,EAAa;AACxC,EAAA,MAAM;AAAA,IACJ,KAAA;AAAA,IACA,SAAA;AAAA,IACA,aAAA;AAAA,IACA,kBAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF,GAAI,oBAAA,CAAqB,IAAA,EAAM,YAAY,CAAA;AAE3C,EAAA,MAAM;AAAA,IACJ,IAAA;AAAA,IACA,cAAA;AAAA,IACA,OAAA;AAAA,IACA,gBAAA;AAAA,IACA,eAAA;AAAA,IACA,QAAA;AAAA,IACA,cAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACF,GAAI,KAAA;AAGJ,EAAA,IAAI,eAAe,cAAA,EAAgB;AACjC,IAAA,uBACEA,GAAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,IAAA;AAAA,QACN,YAAA,EAAc,kBAAA;AAAA,QACd,KAAA,EAAO;AAAA,UACL,OAAA,EAAS,eAAe,KAAA,CAAM,OAAA;AAAA,UAC9B,MAAA,EAAQ,eAAe,KAAA,CAAM;AAAA;AAC/B;AAAA,KACF;AAAA,EAEJ;AAGA,EAAA,IAAI,CAAC,cAAA,IAAkB,CAAC,cAAA,IAAkB,eAAA,EAAiB;AACzD,IAAA,uBACEK,IAAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAY,YAAA,EACjB,QAAA,EAAA;AAAA,sBAAAL,IAAC,WAAA,EAAA,EAAY,OAAA,EAAS,MAAM,YAAA,CAAa,KAAK,CAAA,EAAG,CAAA;AAAA,sBACjDA,IAAC,eAAA,EAAA,EAAgB;AAAA,KAAA,EACnB,CAAA;AAAA,EAEJ;AAGA,EAAA,IAAI,CAAC,YAAA,IAAgB,IAAA,KAAS,MAAA,IAAU,CAAC,eAAA,EAAiB;AACxD,IAAA,uBACEK,IAAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAY,cAAc,WAAA,EAC/B,QAAA,EAAA;AAAA,sBAAAL,GAAAA,CAAC,WAAA,EAAA,EAAY,OAAA,EAAS,WAAA,EAAa,CAAA;AAAA,sBACnCA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EACb,QAAA,kBAAAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,gCAAA,EAAiC,QAAA,EAAA,2DAAA,EAE9C,CAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEK,IAAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAY,cAAc,WAAA,EAC/B,QAAA,EAAA;AAAA,oBAAAL,GAAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,WAAW,WAAA,GAAc,MAAA;AAAA,QAClC,KAAA,EAAO,IAAA,KAAS,MAAA,GAAS,iBAAA,GAAoB;AAAA;AAAA,KAC/C;AAAA,IAEC,IAAA,KAAS,0BACRA,GAAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,cAAA;AAAA,QACT,OAAA;AAAA,QACA,gBAAA;AAAA,QACA,OAAA;AAAA,QACA,KAAA,EAAO,SAAA;AAAA,QACP,SAAA,EAAW,aAAA;AAAA,QACX;AAAA;AAAA,KACF;AAAA,IAGD,SAAS,YAAA,oBACRA,IAAC,qBAAA,EAAA,EAAsB,IAAA,EAAM,gBAAgB,MAAA,EAAgB,CAAA;AAAA,IAG9D,IAAA,KAAS,4BACRA,GAAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,cAAA;AAAA,QACT,KAAA;AAAA,QACA,MAAA,EAAQ,UAAA;AAAA,QACR,OAAA,EAAS,WAAA;AAAA,QACT,QAAA,EAAU;AAAA;AAAA;AACZ,GAAA,EAEJ,CAAA;AAEJ,CAAA;ACtEA,IAAM,aAAA,GAAgBM,OAAAA,CAAM,aAAA,CAQlB,IAAI,CAAA;AAEP,IAAM,YAAY,MAAM;AAC7B,EAAA,MAAM,OAAA,GAAUR,WAAW,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,WAAW,aAAa,CAAA;AACjC;AAMA,SAAS,cAAA,CAAe;AAAA,EACtB,cAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,MAAM,EAAE,MAAA,EAAO,GAAIU,cAAAA,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,uBACER,GAAAA;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,GAAAA;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,GAAID,SAAS,KAAK,CAAA;AAC1D,EAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAAIA,QAAAA;AAAA,IACpD;AAAA,GACF;AAEA,EAAAE,UAAU,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,uBACED,GAAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAM,IAAA,EAAM,cAAc,MAAM;AAAA,IAAC,CAAA,EACtC,QAAA,kBAAAK,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,4BAAA,EACb,QAAA,EAAA;AAAA,sBAAAL,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,sDAAA,EAAuD,QAAA,EAAA,qBAAA,EAEpE,CAAA;AAAA,sBACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mEACZ,QAAA,EAAA,mBAAA,EACH;AAAA,KAAA,EACF,CAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEA,GAAAA,CAAC,YAAA,EAAA,EAAa,QACZ,QAAA,kBAAAA,GAAAA,CAAC,gBACC,QAAA,kBAAAA,GAAAA;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,kBAAAK,KAAC,iBAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAL,GAAAA;AAAA,UAAC,oBAAA;AAAA,UAAA;AAAA,YACC,gBAAA,EAAkB,MAAM,iBAAA,CAAkB,IAAI;AAAA;AAAA,SAChD;AAAA,wBACAA,GAAAA;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,IAAC,kBAAA,EAAA,EAAmB,CAAA;AAAA,wBACpBA,IAAC,kBAAA,EAAA,EAAmB,CAAA;AAAA,wBACpBA,IAAC,kBAAA,EAAA,EAAmB,CAAA;AAAA,QACnB,cAAA,IAAkB,kCACjBA,GAAAA;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,kBAAAK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EACb,QAAA,EAAA;AAAA,8BAAAL,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,cAAA,EAAe,QAAA,EAAA,YAAA,EAAU,CAAA;AAAA,8BACtCA,GAAAA;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,GAAID,SAA6B,IAAI,CAAA;AACrE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAuB,IAAI,CAAA;AAErD,EAAAE,UAAU,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,OAAOW,YAAAA;AAAA,oBACLP,IAAAA,CAAAE,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAP,GAAAA;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,GAAAA;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,GAAAA,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,GAAIQ,cAAAA,EAAe;AAChC,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIT,SAA6B,IAAI,CAAA;AACrE,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAAS,KAAK,CAAA;AAEhD,EAAAE,UAAU,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,UAAU,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,OAAOW,YAAAA;AAAA,sBACLZ,GAAAA;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,OAAOY,YAAAA;AAAA,oBACLZ,GAAAA;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;AAKA,SAAS,kBAAA,GAAqB;AAC5B,EAAA,MAAM,EAAE,MAAA,EAAQ,IAAA,EAAM,KAAA,KAAU,YAAA,EAAa;AAC7C,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAID,SAA6B,IAAI,CAAA;AAErE,EAAAE,UAAU,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;AAEL,EAAA,IAAI,CAAC,YAAY,OAAO,IAAA;AAExB,EAAA,OAAOW,YAAAA;AAAA,oBACLZ,GAAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,UAAU,IAAA,KAAS,SAAA;AAAA,QACzB,YAAA,EAAc,CAAC,IAAA,KAAS,CAAC,QAAQ,KAAA;AAAM;AAAA,KACzC;AAAA,IACA;AAAA,GACF;AACF;AAMA,SAAS,oBAAA,CAAqB;AAAA,EAC5B;AACF,CAAA,EAEG;AACD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAID,SAAS,KAAK,CAAA;AAG5C,EAAAE,UAAU,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,GAAI,mBAAA,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,uBACED,GAAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAM,IAAA,EAAM,cAAc,MAAM;AAAA,IAAC,CAAA,EACtC,QAAA,kBAAAK,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,uDAAA,EACb,QAAA,EAAA;AAAA,sBAAAL,GAAAA,CAAC,SAAI,SAAA,EAAU,+GAAA,EAAgH,OAAO,EAAE,cAAA,EAAgB,oBAAmB,EAAG,CAAA;AAAA,sBAC9KA,GAAAA,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,GAAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAM,MAAM,YAAA,EAAc,MAAM,UAAA,CAAW,KAAK,CAAA,EACrD,QAAA,kBAAAK,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,uDAAA,EACb,QAAA,EAAA;AAAA,sBAAAL,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,uCAAA,EAAwC,QAAA,EAAA,cAAA,EAAY,CAAA;AAAA,sBACjEA,GAAAA,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,KAAcQ,cAAAA,EAAe;AACrD,EAAA,MAAM,EAAE,MAAA,EAAQ,WAAA,EAAY,GAAI,YAAA,EAAa;AAC7C,EAAA,MAAM,cAAA,GAAiBF,OAAAA,CAAM,MAAA,CAAO,KAAK,CAAA;AAGzC,EAAAL,UAAU,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,UAAU,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;AC/fO,SAAS,gBAAA,GAAmB;AACjC,EAAA,MAAM,EAAE,MAAA,EAAO,GAAIU,eAAAA,EAAgB;AAEnC,EAAA,OAAOR,WAAAA;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;ACEA,IAAM,uBAAA,uBAA8B,GAAA,EAGjC;AAEI,SAAS,UAAA,GAA+B;AAC7C,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAU,GAAI,YAAA,EAAa;AACzC,EAAA,MAAM,EAAE,aAAA,EAAe,YAAA,EAAc,iBAAA,EAAmB,aAAA,KAAkBU,iBAAAA,EAAkB;AAC5F,EAAA,MAAM,mBAAA,GAAsBX,OAAsB,IAAI,CAAA;AAEtD,EAAA,MAAM,GAAA,GAAMC,WAAAA;AAAA,IACV,OAAO,OAAA,KAAgD;AAErD,MAAA,MAAM,OAAA,GAAU,MAAM,aAAA,CAAc;AAAA,QAClC,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,MAAM,OAAA,CAAQ,IAAA;AAAA,QACd,aAAa,OAAA,CAAQ,WAAA;AAAA,QACrB,UAAU,OAAA,CAAQ,QAAA;AAAA,QAClB,gBAAgB,OAAA,CAAQ,cAAA;AAAA,QACxB,cAAc,OAAA,CAAQ;AAAA,OACvB,CAAA;AAED,MAAA,mBAAA,CAAoB,UAAU,OAAA,CAAQ,EAAA;AAGtC,MAAA,OAAA,CAAQ,UAAU,SAAA,GAAY,EAAE,EAAA,EAAI,OAAA,CAAQ,IAAI,CAAA;AAGhD,MAAA,MAAM,WAAA,GAAc,IAAI,OAAA,CAAuB,CAAC,SAAS,MAAA,KAAW;AAClE,QAAA,uBAAA,CAAwB,IAAI,OAAA,CAAQ,EAAA,EAAI,EAAE,OAAA,EAAS,QAAQ,CAAA;AAAA,MAC7D,CAAC,CAAA;AAGD,MAAA,MAAM,YAAA,GAAoC;AAAA,QACxC,OAAA;AAAA,QACA,OAAA,EAAS;AAAA,UACP,QAAQ,OAAA,CAAQ,MAAA;AAAA,UAChB,MAAM,OAAA,CAAQ,IAAA;AAAA,UACd,aAAa,OAAA,CAAQ,WAAA;AAAA,UACrB,UAAU,OAAA,CAAQ,QAAA;AAAA,UAClB,gBAAgB,OAAA,CAAQ,cAAA;AAAA,UACxB,cAAc,OAAA,CAAQ;AAAA,SACxB;AAAA,QACA,UAAA,EAAY,CAAC,MAAA,KAA0B;AACrC,UAAA,mBAAA,CAAoB,OAAA,GAAU,IAAA;AAE9B,UAAA,MAAM,QAAA,GAAW,uBAAA,CAAwB,GAAA,CAAI,OAAA,CAAQ,EAAE,CAAA;AACvD,UAAA,IAAI,QAAA,EAAU;AACZ,YAAA,QAAA,CAAS,QAAQ,MAAM,CAAA;AACvB,YAAA,uBAAA,CAAwB,MAAA,CAAO,QAAQ,EAAE,CAAA;AAAA,UAC3C;AAEA,UAAA,IAAI,MAAA,CAAO,WAAW,WAAA,EAAa;AACjC,YAAA,OAAA,CAAQ,QAAA,EAAU,YAAY,MAAM,CAAA;AAAA,UACtC;AAAA,QACF,CAAA;AAAA,QACA,YAAA,EAAc,CAAC,iBAAA,KAA0D;AACvE,UAAA,OAAA,CAAQ,UAAU,YAAA,GAAe;AAAA,YAC/B,IAAI,iBAAA,CAAkB,EAAA;AAAA,YACtB,QAAQ,iBAAA,CAAkB;AAAA,WAC3B,CAAA;AAAA,QACH,CAAA;AAAA,QACA,OAAA,EAAS,CAAC,KAAA,KAAwB;AAChC,UAAA,mBAAA,CAAoB,OAAA,GAAU,IAAA;AAE9B,UAAA,MAAM,QAAA,GAAW,uBAAA,CAAwB,GAAA,CAAI,OAAA,CAAQ,EAAE,CAAA;AACvD,UAAA,IAAI,QAAA,EAAU;AACZ,YAAA,QAAA,CAAS,MAAA,CAAO,IAAI,KAAA,CAAM,KAAA,CAAM,OAAO,CAAC,CAAA;AACxC,YAAA,uBAAA,CAAwB,MAAA,CAAO,QAAQ,EAAE,CAAA;AAAA,UAC3C;AAEA,UAAA,OAAA,CAAQ,QAAA,EAAU,UAAU,KAAK,CAAA;AAAA,QACnC,CAAA;AAAA,QACA,UAAU,MAAM;AACd,UAAA,mBAAA,CAAoB,OAAA,GAAU,IAAA;AAE9B,UAAA,MAAM,QAAA,GAAW,uBAAA,CAAwB,GAAA,CAAI,OAAA,CAAQ,EAAE,CAAA;AACvD,UAAA,IAAI,QAAA,EAAU;AAEZ,YAAA,QAAA,CAAS,OAAA,CAAQ;AAAA,cACf,GAAG,OAAA;AAAA,cACH,MAAA,EAAQ;AAAA,aACT,CAAA;AACD,YAAA,uBAAA,CAAwB,MAAA,CAAO,QAAQ,EAAE,CAAA;AAAA,UAC3C;AAEA,UAAA,OAAA,CAAQ,UAAU,QAAA,IAAW;AAAA,QAC/B;AAAA,OACF;AAGA,MAAA,SAAA,CAAU,EAAE,IAAA,EAAM,SAAA,EAAW,OAAA,EAAS,cAAc,CAAA;AAGpD,MAAA,OAAO;AAAA,QACL,IAAI,OAAA,CAAQ,EAAA;AAAA,QACZ,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,MAAM,MAAM,WAAA;AAAA,QACZ,QAAQ,YAAY;AAClB,UAAA,MAAM,aAAA,CAAc,QAAQ,EAAE,CAAA;AAC9B,UAAA,mBAAA,CAAoB,OAAA,GAAU,IAAA;AAE9B,UAAA,MAAM,QAAA,GAAW,uBAAA,CAAwB,GAAA,CAAI,OAAA,CAAQ,EAAE,CAAA;AACvD,UAAA,IAAI,QAAA,EAAU;AACZ,YAAA,QAAA,CAAS,OAAA,CAAQ;AAAA,cACf,GAAG,OAAA;AAAA,cACH,MAAA,EAAQ;AAAA,aACT,CAAA;AACD,YAAA,uBAAA,CAAwB,MAAA,CAAO,QAAQ,EAAE,CAAA;AAAA,UAC3C;AAEA,UAAA,OAAA,CAAQ,UAAU,QAAA,IAAW;AAAA,QAC/B;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,CAAC,aAAA,EAAe,aAAA,EAAe,SAAS;AAAA,GAC1C;AAEA,EAAA,OAAO;AAAA,IACL,GAAA;AAAA,IACA,YAAA;AAAA,IACA,iBAAA;AAAA,IACA,mBAAA,EAAqB,oBAAoB,OAAA,KAAY;AAAA,GACvD;AACF","file":"index.js","sourcesContent":["/* [Multicall3](https://github.com/mds1/multicall) */\nexport const multicall3Abi = [\n {\n inputs: [\n {\n components: [\n {\n name: 'target',\n type: 'address',\n },\n {\n name: 'allowFailure',\n type: 'bool',\n },\n {\n name: 'callData',\n type: 'bytes',\n },\n ],\n name: 'calls',\n type: 'tuple[]',\n },\n ],\n name: 'aggregate3',\n outputs: [\n {\n components: [\n {\n name: 'success',\n type: 'bool',\n },\n {\n name: 'returnData',\n type: 'bytes',\n },\n ],\n name: 'returnData',\n type: 'tuple[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'getCurrentBlockTimestamp',\n outputs: [\n {\n internalType: 'uint256',\n name: 'timestamp',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n] as const\n\nexport const batchGatewayAbi = [\n {\n name: 'query',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n {\n type: 'tuple[]',\n name: 'queries',\n components: [\n {\n type: 'address',\n name: 'sender',\n },\n {\n type: 'string[]',\n name: 'urls',\n },\n {\n type: 'bytes',\n name: 'data',\n },\n ],\n },\n ],\n outputs: [\n {\n type: 'bool[]',\n name: 'failures',\n },\n {\n type: 'bytes[]',\n name: 'responses',\n },\n ],\n },\n {\n name: 'HttpError',\n type: 'error',\n inputs: [\n {\n type: 'uint16',\n name: 'status',\n },\n {\n type: 'string',\n name: 'message',\n },\n ],\n },\n] as const\n\nconst universalResolverErrors = [\n {\n inputs: [\n {\n name: 'dns',\n type: 'bytes',\n },\n ],\n name: 'DNSDecodingFailed',\n type: 'error',\n },\n {\n inputs: [\n {\n name: 'ens',\n type: 'string',\n },\n ],\n name: 'DNSEncodingFailed',\n type: 'error',\n },\n {\n inputs: [],\n name: 'EmptyAddress',\n type: 'error',\n },\n {\n inputs: [\n {\n name: 'status',\n type: 'uint16',\n },\n {\n name: 'message',\n type: 'string',\n },\n ],\n name: 'HttpError',\n type: 'error',\n },\n {\n inputs: [],\n name: 'InvalidBatchGatewayResponse',\n type: 'error',\n },\n {\n inputs: [\n {\n name: 'errorData',\n type: 'bytes',\n },\n ],\n name: 'ResolverError',\n type: 'error',\n },\n {\n inputs: [\n {\n name: 'name',\n type: 'bytes',\n },\n {\n name: 'resolver',\n type: 'address',\n },\n ],\n name: 'ResolverNotContract',\n type: 'error',\n },\n {\n inputs: [\n {\n name: 'name',\n type: 'bytes',\n },\n ],\n name: 'ResolverNotFound',\n type: 'error',\n },\n {\n inputs: [\n {\n name: 'primary',\n type: 'string',\n },\n {\n name: 'primaryAddress',\n type: 'bytes',\n },\n ],\n name: 'ReverseAddressMismatch',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'bytes4',\n name: 'selector',\n type: 'bytes4',\n },\n ],\n name: 'UnsupportedResolverProfile',\n type: 'error',\n },\n] as const\n\nexport const universalResolverResolveAbi = [\n ...universalResolverErrors,\n {\n name: 'resolveWithGateways',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'name', type: 'bytes' },\n { name: 'data', type: 'bytes' },\n { name: 'gateways', type: 'string[]' },\n ],\n outputs: [\n { name: '', type: 'bytes' },\n { name: 'address', type: 'address' },\n ],\n },\n] as const\n\nexport const universalResolverReverseAbi = [\n ...universalResolverErrors,\n {\n name: 'reverseWithGateways',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { type: 'bytes', name: 'reverseName' },\n { type: 'uint256', name: 'coinType' },\n { type: 'string[]', name: 'gateways' },\n ],\n outputs: [\n { type: 'string', name: 'resolvedName' },\n { type: 'address', name: 'resolver' },\n { type: 'address', name: 'reverseResolver' },\n ],\n },\n] as const\n\nexport const textResolverAbi = [\n {\n name: 'text',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'name', type: 'bytes32' },\n { name: 'key', type: 'string' },\n ],\n outputs: [{ name: '', type: 'string' }],\n },\n] as const\n\nexport const addressResolverAbi = [\n {\n name: 'addr',\n type: 'function',\n stateMutability: 'view',\n inputs: [{ name: 'name', type: 'bytes32' }],\n outputs: [{ name: '', type: 'address' }],\n },\n {\n name: 'addr',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'name', type: 'bytes32' },\n { name: 'coinType', type: 'uint256' },\n ],\n outputs: [{ name: '', type: 'bytes' }],\n },\n] as const\n\n// ERC-1271\n// isValidSignature(bytes32 hash, bytes signature) → bytes4 magicValue\n/** @internal */\nexport const erc1271Abi = [\n {\n name: 'isValidSignature',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'hash', type: 'bytes32' },\n { name: 'signature', type: 'bytes' },\n ],\n outputs: [{ name: '', type: 'bytes4' }],\n },\n] as const\n\n// ERC-6492 - universal deployless signature validator contract\n// constructor(address _signer, bytes32 _hash, bytes _signature) → bytes4 returnValue\n// returnValue is either 0x1 (valid) or 0x0 (invalid)\nexport const erc6492SignatureValidatorAbi = [\n {\n inputs: [\n {\n name: '_signer',\n type: 'address',\n },\n {\n name: '_hash',\n type: 'bytes32',\n },\n {\n name: '_signature',\n type: 'bytes',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'constructor',\n },\n {\n inputs: [\n {\n name: '_signer',\n type: 'address',\n },\n {\n name: '_hash',\n type: 'bytes32',\n },\n {\n name: '_signature',\n type: 'bytes',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n name: 'isValidSig',\n },\n] as const\n\n/** [ERC-20 Token Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-20) */\nexport const erc20Abi = [\n {\n type: 'event',\n name: 'Approval',\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'event',\n name: 'Transfer',\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'allowance',\n stateMutability: 'view',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'spender',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'approve',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'spender',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'balanceOf',\n stateMutability: 'view',\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'decimals',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint8',\n },\n ],\n },\n {\n type: 'function',\n name: 'name',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'symbol',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'totalSupply',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'transfer',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'transferFrom',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'sender',\n type: 'address',\n },\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n] as const\n\n/**\n * [bytes32-flavored ERC-20](https://docs.makerdao.com/smart-contract-modules/mkr-module#4.-gotchas-potential-source-of-user-error)\n * for tokens (ie. Maker) that use bytes32 instead of string.\n */\nexport const erc20Abi_bytes32 = [\n {\n type: 'event',\n name: 'Approval',\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'event',\n name: 'Transfer',\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'allowance',\n stateMutability: 'view',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'spender',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'approve',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'spender',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'balanceOf',\n stateMutability: 'view',\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'decimals',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint8',\n },\n ],\n },\n {\n type: 'function',\n name: 'name',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'bytes32',\n },\n ],\n },\n {\n type: 'function',\n name: 'symbol',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'bytes32',\n },\n ],\n },\n {\n type: 'function',\n name: 'totalSupply',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'transfer',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'transferFrom',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'sender',\n type: 'address',\n },\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n] as const\n\n/** [ERC-1155 Multi Token Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-1155) */\nexport const erc1155Abi = [\n {\n inputs: [\n {\n internalType: 'address',\n name: 'sender',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'balance',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'needed',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n name: 'ERC1155InsufficientBalance',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'approver',\n type: 'address',\n },\n ],\n name: 'ERC1155InvalidApprover',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'idsLength',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'valuesLength',\n type: 'uint256',\n },\n ],\n name: 'ERC1155InvalidArrayLength',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'operator',\n type: 'address',\n },\n ],\n name: 'ERC1155InvalidOperator',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'receiver',\n type: 'address',\n },\n ],\n name: 'ERC1155InvalidReceiver',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'sender',\n type: 'address',\n },\n ],\n name: 'ERC1155InvalidSender',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'operator',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'ERC1155MissingApprovalForAll',\n type: 'error',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'operator',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'bool',\n name: 'approved',\n type: 'bool',\n },\n ],\n name: 'ApprovalForAll',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'operator',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256[]',\n name: 'ids',\n type: 'uint256[]',\n },\n {\n indexed: false,\n internalType: 'uint256[]',\n name: 'values',\n type: 'uint256[]',\n },\n ],\n name: 'TransferBatch',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'operator',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'id',\n type: 'uint256',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'TransferSingle',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'string',\n name: 'value',\n type: 'string',\n },\n {\n indexed: true,\n internalType: 'uint256',\n name: 'id',\n type: 'uint256',\n },\n ],\n name: 'URI',\n type: 'event',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'id',\n type: 'uint256',\n },\n ],\n name: 'balanceOf',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address[]',\n name: 'accounts',\n type: 'address[]',\n },\n {\n internalType: 'uint256[]',\n name: 'ids',\n type: 'uint256[]',\n },\n ],\n name: 'balanceOfBatch',\n outputs: [\n {\n internalType: 'uint256[]',\n name: '',\n type: 'uint256[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'operator',\n type: 'address',\n },\n ],\n name: 'isApprovedForAll',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'from',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n internalType: 'uint256[]',\n name: 'ids',\n type: 'uint256[]',\n },\n {\n internalType: 'uint256[]',\n name: 'values',\n type: 'uint256[]',\n },\n {\n internalType: 'bytes',\n name: 'data',\n type: 'bytes',\n },\n ],\n name: 'safeBatchTransferFrom',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'from',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'id',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'value',\n type: 'uint256',\n },\n {\n internalType: 'bytes',\n name: 'data',\n type: 'bytes',\n },\n ],\n name: 'safeTransferFrom',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'operator',\n type: 'address',\n },\n {\n internalType: 'bool',\n name: 'approved',\n type: 'bool',\n },\n ],\n name: 'setApprovalForAll',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes4',\n name: 'interfaceId',\n type: 'bytes4',\n },\n ],\n name: 'supportsInterface',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n name: 'uri',\n outputs: [\n {\n internalType: 'string',\n name: '',\n type: 'string',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n] as const\n\n/** [ERC-721 Non-Fungible Token Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-721) */\nexport const erc721Abi = [\n {\n type: 'event',\n name: 'Approval',\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: true,\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'event',\n name: 'ApprovalForAll',\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'operator',\n type: 'address',\n },\n {\n indexed: false,\n name: 'approved',\n type: 'bool',\n },\n ],\n },\n {\n type: 'event',\n name: 'Transfer',\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: true,\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'approve',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'spender',\n type: 'address',\n },\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [],\n },\n {\n type: 'function',\n name: 'balanceOf',\n stateMutability: 'view',\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'getApproved',\n stateMutability: 'view',\n inputs: [\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'address',\n },\n ],\n },\n {\n type: 'function',\n name: 'isApprovedForAll',\n stateMutability: 'view',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'operator',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'name',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'ownerOf',\n stateMutability: 'view',\n inputs: [\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n name: 'owner',\n type: 'address',\n },\n ],\n },\n {\n type: 'function',\n name: 'safeTransferFrom',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'from',\n type: 'address',\n },\n {\n name: 'to',\n type: 'address',\n },\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [],\n },\n {\n type: 'function',\n name: 'safeTransferFrom',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'from',\n type: 'address',\n },\n {\n name: 'to',\n type: 'address',\n },\n {\n name: 'id',\n type: 'uint256',\n },\n {\n name: 'data',\n type: 'bytes',\n },\n ],\n outputs: [],\n },\n {\n type: 'function',\n name: 'setApprovalForAll',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'operator',\n type: 'address',\n },\n {\n name: 'approved',\n type: 'bool',\n },\n ],\n outputs: [],\n },\n {\n type: 'function',\n name: 'symbol',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'tokenByIndex',\n stateMutability: 'view',\n inputs: [\n {\n name: 'index',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'tokenByIndex',\n stateMutability: 'view',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'index',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'tokenURI',\n stateMutability: 'view',\n inputs: [\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'totalSupply',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'transferFrom',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'sender',\n type: 'address',\n },\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [],\n },\n] as const\n\n/** [ERC-4626 Tokenized Vaults Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-4626) */\nexport const erc4626Abi = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'Approval',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'sender',\n type: 'address',\n },\n {\n indexed: true,\n name: 'receiver',\n type: 'address',\n },\n {\n indexed: false,\n name: 'assets',\n type: 'uint256',\n },\n {\n indexed: false,\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'Deposit',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'Transfer',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'sender',\n type: 'address',\n },\n {\n indexed: true,\n name: 'receiver',\n type: 'address',\n },\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: false,\n name: 'assets',\n type: 'uint256',\n },\n {\n indexed: false,\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'Withdraw',\n type: 'event',\n },\n {\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'spender',\n type: 'address',\n },\n ],\n name: 'allowance',\n outputs: [\n {\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'spender',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'approve',\n outputs: [\n {\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'asset',\n outputs: [\n {\n name: 'assetTokenAddress',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n name: 'balanceOf',\n outputs: [\n {\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'convertToAssets',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n name: 'convertToShares',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n ],\n name: 'deposit',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'caller',\n type: 'address',\n },\n ],\n name: 'maxDeposit',\n outputs: [\n {\n name: 'maxAssets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'caller',\n type: 'address',\n },\n ],\n name: 'maxMint',\n outputs: [\n {\n name: 'maxShares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'maxRedeem',\n outputs: [\n {\n name: 'maxShares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'maxWithdraw',\n outputs: [\n {\n name: 'maxAssets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n ],\n name: 'mint',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n name: 'previewDeposit',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'previewMint',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'previewRedeem',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n name: 'previewWithdraw',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n {\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'redeem',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'totalAssets',\n outputs: [\n {\n name: 'totalManagedAssets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'totalSupply',\n outputs: [\n {\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'to',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'transfer',\n outputs: [\n {\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'from',\n type: 'address',\n },\n {\n name: 'to',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'transferFrom',\n outputs: [\n {\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n {\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'withdraw',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n] as const\n","/**\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 selectWallet: 'Select a wallet',\n noWalletsDetected: 'No wallets detected',\n useOtherWallet: 'Use another wallet',\n connectingTo: 'Connecting to {{wallet}}...',\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 generateUrl: 'Generate Sign URL',\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 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 selectWallet: '지갑을 선택하세요',\n noWalletsDetected: '감지된 지갑이 없습니다',\n useOtherWallet: '다른 지갑 이용하기',\n connectingTo: '{{wallet}} 연결 중...',\n mobileGuide: '지갑 앱에서 서명하기:',\n mobileStep1: '아래 서명 URL 복사',\n mobileStep2: '지갑 앱 열기 (MetaMask 등)',\n mobileStep3: '앱 브라우저에 URL 붙여넣고 서명',\n copyUrl: '서명 URL 복사',\n urlCopied: 'URL이 복사되었습니다! 지갑 앱 브라우저에 붙여넣기 하세요.',\n startSession: '지갑 앱에서 서명',\n generateUrl: '서명 URL 생성',\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\";\nimport type { PayOptions, PaymentResult } from \"@volr/react\";\n\nexport type ModalMode = \"account\" | \"deposit\" | \"payment\";\n\nexport interface ModalAsset {\n chainId: number;\n symbol: string;\n}\n\nexport interface PaymentModalOptions {\n payment: PaymentResult;\n options: PayOptions;\n onComplete?: (result: PaymentResult) => void;\n onProcessing?: (payment: PaymentResult & { txHash: string }) => void;\n onError?: (error: { code: string; message: string }) => void;\n onCancel?: () => void;\n}\n\nexport interface OpenModalOptions {\n mode?: ModalMode;\n asset?: ModalAsset;\n payment?: PaymentModalOptions;\n}\n\ninterface VolrModalContextValue {\n isOpen: boolean;\n mode: ModalMode;\n asset: ModalAsset | null;\n paymentOptions: PaymentModalOptions | 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 const [paymentOptions, setPaymentOptions] = useState<PaymentModalOptions | null>(null);\n\n const open = useCallback((options?: OpenModalOptions) => {\n setMode(options?.mode ?? \"account\");\n setAsset(options?.asset ?? null);\n setPaymentOptions(options?.payment ?? null);\n setIsOpen(true);\n }, []);\n\n const close = useCallback(() => {\n setIsOpen(false);\n setAsset(null);\n setPaymentOptions(null);\n }, []);\n\n return (\n <VolrModalContext.Provider value={{ isOpen, mode, asset, paymentOptions, 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-500:oklch(63.7% .237 25.331);--volr-color-red-600:oklch(57.7% .245 27.325);--volr-color-red-700:oklch(50.5% .213 27.518);--volr-color-green-50:oklch(98.2% .018 155.826);--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-100:oklch(96.8% .007 247.896);--volr-color-slate-200:oklch(92.9% .013 255.508);--volr-color-slate-300:oklch(86.9% .022 252.894);--volr-color-slate-400:oklch(70.4% .04 256.788);--volr-color-slate-500:oklch(55.4% .046 257.417);--volr-color-slate-600:oklch(44.6% .043 257.281);--volr-color-slate-900:oklch(20.8% .042 265.755);--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\\\\:line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.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-5{height:calc(var(--volr-spacing)*5)}.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-12{height:calc(var(--volr-spacing)*12)}.volr\\\\:h-14{height:calc(var(--volr-spacing)*14)}.volr\\\\:h-16{height:calc(var(--volr-spacing)*16)}.volr\\\\:h-20{height:calc(var(--volr-spacing)*20)}.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-4{width:calc(var(--volr-spacing)*4)}.volr\\\\:w-5{width:calc(var(--volr-spacing)*5)}.volr\\\\:w-6{width:calc(var(--volr-spacing)*6)}.volr\\\\:w-7{width:calc(var(--volr-spacing)*7)}.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-14{width:calc(var(--volr-spacing)*14)}.volr\\\\:w-16{width:calc(var(--volr-spacing)*16)}.volr\\\\:w-20{width:calc(var(--volr-spacing)*20)}.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\\\\:flex-shrink-0,.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)))}:where(.volr\\\\:space-y-6>:not(:last-child)){--volr-tw-space-y-reverse:0;margin-block-start:calc(calc(var(--volr-spacing)*6)*var(--volr-tw-space-y-reverse));margin-block-end:calc(calc(var(--volr-spacing)*6)*calc(1 - var(--volr-tw-space-y-reverse)))}:where(.volr\\\\:space-y-8>:not(:last-child)){--volr-tw-space-y-reverse:0;margin-block-start:calc(calc(var(--volr-spacing)*8)*var(--volr-tw-space-y-reverse));margin-block-end:calc(calc(var(--volr-spacing)*8)*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-200{border-color:var(--volr-color-slate-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-green-50{background-color:var(--volr-color-green-50)}.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-100{background-color:var(--volr-color-slate-100)}.volr\\\\:bg-slate-200{background-color:var(--volr-color-slate-200)}.volr\\\\:bg-slate-900{background-color:var(--volr-color-slate-900)}.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\\\\:object-cover{object-fit:cover}.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{padding-block:calc(var(--volr-spacing)*2)}.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\\\\:text-right{text-align:right}.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-500{color:var(--volr-color-red-500)}.volr\\\\:text-red-600{color:var(--volr-color-red-600)}.volr\\\\:text-red-700{color:var(--volr-color-red-700)}.volr\\\\:text-slate-100{color:var(--volr-color-slate-100)}.volr\\\\:text-slate-400{color:var(--volr-color-slate-400)}.volr\\\\:text-slate-500{color:var(--volr-color-slate-500)}.volr\\\\:text-slate-600{color:var(--volr-color-slate-600)}.volr\\\\:text-slate-900{color:var(--volr-color-slate-900)}.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-25{opacity:.25}.volr\\\\:opacity-30{opacity:.3}.volr\\\\:opacity-75{opacity:.75}.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}@media (hover:hover){.volr\\\\:hover\\\\:bg-slate-50:hover{background-color:var(--volr-color-slate-50)}}.volr\\\\:disabled\\\\:cursor-not-allowed:disabled{cursor:not-allowed}.volr\\\\:disabled\\\\:opacity-50:disabled{opacity:.5}.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\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\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\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\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 * Shows detected wallets via EIP-6963 for direct signing,\n * with fallback to mobile wallet app signing.\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\";\nimport { QRCodeSVG } from \"qrcode.react\";\n\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 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\ninterface EIP6963ProviderDetail {\n info: { uuid: string; name: string; icon: string; rdns: string };\n provider: any;\n}\n\n// Default wallet icon SVG (simple wallet shape)\nconst DefaultWalletIcon = () => (\n <svg\n className=\"volr:w-8 volr:h-8\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect\n x=\"2\"\n y=\"6\"\n width=\"20\"\n height=\"14\"\n rx=\"2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n />\n <path\n d=\"M17 12.5C17 13.3284 16.3284 14 15.5 14C14.6716 14 14 13.3284 14 12.5C14 11.6716 14.6716 11 15.5 11C16.3284 11 17 11.6716 17 12.5Z\"\n fill=\"currentColor\"\n />\n <path d=\"M6 6V5C6 3.89543 6.89543 3 8 3H16C17.1046 3 18 3.89543 18 5V6\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </svg>\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\n const [isLoading, setIsLoading] = useState(false);\n const [loadingWallet, setLoadingWallet] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [providers, setProviders] = useState<EIP6963ProviderDetail[]>([]);\n const [isDetecting, setIsDetecting] = useState(true);\n const [hasLegacyWallet, setHasLegacyWallet] = useState(false);\n\n // Mobile/other wallet signing state\n const [showOtherWallet, setShowOtherWallet] = useState(false);\n const [sessionUrl, setSessionUrl] = useState<string | null>(null);\n const [isPolling, setIsPolling] = useState(false);\n const pollingRef = useRef<NodeJS.Timeout | null>(null);\n const sessionCreatedRef = useRef(false);\n\n // Cleanup polling\n useEffect(() => {\n return () => {\n if (pollingRef.current) clearInterval(pollingRef.current);\n };\n }, []);\n\n // EIP-6963 wallet detection\n useEffect(() => {\n if (typeof window === \"undefined\") {\n setIsDetecting(false);\n return;\n }\n\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)) return prev;\n return [...prev, detail];\n });\n };\n\n window.addEventListener(\"eip6963:announceProvider\", handleAnnounceProvider);\n window.dispatchEvent(new Event(\"eip6963:requestProvider\"));\n\n // Check for legacy window.ethereum after a short delay\n const checkLegacy = setTimeout(() => {\n if (typeof window !== \"undefined\" && (window as any).ethereum) {\n setHasLegacyWallet(true);\n }\n setIsDetecting(false);\n }, 200);\n\n return () => {\n window.removeEventListener(\"eip6963:announceProvider\", handleAnnounceProvider);\n clearTimeout(checkLegacy);\n };\n }, []);\n\n // Determine if we have any wallets\n const hasAnyWallet = providers.length > 0 || hasLegacyWallet;\n\n // Create session for mobile/other wallet flow\n const createSession = useCallback(async () => {\n if (sessionCreatedRef.current || sessionUrl) return;\n sessionCreatedRef.current = true;\n\n try {\n const session = await createSiweSession();\n const url = getSiweSignUrl(session.id);\n setSessionUrl(url);\n setIsPolling(true);\n\n pollingRef.current = setInterval(async () => {\n try {\n const result = await checkSiweSession(session.id);\n\n if (result.status === \"completed\" && result.user) {\n if (pollingRef.current) {\n clearInterval(pollingRef.current);\n pollingRef.current = null;\n }\n setIsPolling(false);\n\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 if (pollingRef.current) {\n clearInterval(pollingRef.current);\n pollingRef.current = null;\n }\n setIsPolling(false);\n setError(t(\"siwe.sessionExpired\"));\n setSessionUrl(null);\n sessionCreatedRef.current = false;\n }\n } catch {\n // Ignore polling errors\n }\n }, 3000);\n } catch (err) {\n sessionCreatedRef.current = false;\n setError(err instanceof Error ? err.message : \"Failed to create session\");\n onError(err instanceof Error ? err : new Error(\"Failed to create session\"));\n }\n }, [createSiweSession, getSiweSignUrl, checkSiweSession, onSuccess, onError, t, sessionUrl]);\n\n // Auto-create session when showOtherWallet becomes true OR when no wallets detected\n useEffect(() => {\n if (!isDetecting && !hasAnyWallet && !sessionUrl) {\n createSession();\n }\n }, [isDetecting, hasAnyWallet, sessionUrl, createSession]);\n\n useEffect(() => {\n if (showOtherWallet && !sessionUrl) {\n createSession();\n }\n }, [showOtherWallet, sessionUrl, createSession]);\n\n // Handle wallet selection and signing\n const handleWalletClick = useCallback(async (provider: any, walletName: string) => {\n setError(null);\n setIsLoading(true);\n setLoadingWallet(walletName);\n\n try {\n const accounts = await provider.request({ method: \"eth_requestAccounts\" });\n if (accounts.length === 0) throw new Error(\"No accounts found\");\n\n const walletAddress = accounts[0];\n const result = await signWithWallet(walletAddress);\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 = 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 setLoadingWallet(null);\n }\n }, [signWithWallet, onSuccess, onError]);\n\n // Handle legacy wallet (window.ethereum) click\n const handleLegacyWalletClick = useCallback(async () => {\n if (typeof window === \"undefined\" || !(window as any).ethereum) return;\n\n const ethereum = (window as any).ethereum;\n let walletName = \"Wallet\";\n\n // Try to detect wallet name\n if (ethereum.isMetaMask) walletName = \"MetaMask\";\n else if (ethereum.isCoinbaseWallet) walletName = \"Coinbase Wallet\";\n else if (ethereum.isRabby) walletName = \"Rabby\";\n\n await handleWalletClick(ethereum, walletName);\n }, [handleWalletClick]);\n\n const cancelOtherWallet = useCallback(() => {\n if (pollingRef.current) {\n clearInterval(pollingRef.current);\n pollingRef.current = null;\n }\n setIsPolling(false);\n setSessionUrl(null);\n setShowOtherWallet(false);\n sessionCreatedRef.current = false;\n }, []);\n\n // Render wallet list\n const renderWalletList = () => {\n // Build display list: EIP-6963 providers first, then legacy if needed\n const walletsToShow: { id: string; name: string; icon?: string; provider: any; isLegacy?: boolean }[] = [];\n\n providers.forEach((p) => {\n walletsToShow.push({\n id: p.info.uuid,\n name: p.info.name,\n icon: p.info.icon,\n provider: p.provider,\n });\n });\n\n // Add legacy wallet only if EIP-6963 didn't detect MetaMask/etc\n if (hasLegacyWallet && providers.length === 0) {\n const ethereum = (window as any).ethereum;\n let name = \"Wallet\";\n if (ethereum?.isMetaMask) name = \"MetaMask\";\n else if (ethereum?.isCoinbaseWallet) name = \"Coinbase Wallet\";\n else if (ethereum?.isRabby) name = \"Rabby\";\n\n walletsToShow.push({\n id: \"legacy\",\n name,\n provider: ethereum,\n isLegacy: true,\n });\n }\n\n if (walletsToShow.length === 0) return null;\n\n return (\n <div className=\"volr:space-y-2\">\n {walletsToShow.map((wallet) => (\n <button\n key={wallet.id}\n type=\"button\"\n onClick={() =>\n wallet.isLegacy\n ? handleLegacyWalletClick()\n : handleWalletClick(wallet.provider, wallet.name)\n }\n disabled={isLoading}\n className=\"volr:w-full volr:flex volr:items-center volr:gap-3 volr:p-3 volr:border volr:border-slate-200 volr:rounded-xl volr:hover:bg-slate-50 volr:transition-colors volr:disabled:opacity-50 volr:disabled:cursor-not-allowed\"\n >\n {/* Wallet icon */}\n <div className=\"volr:w-10 volr:h-10 volr:rounded-lg volr:bg-slate-100 volr:flex volr:items-center volr:justify-center volr:overflow-hidden volr:flex-shrink-0\">\n {wallet.icon ? (\n <img\n src={wallet.icon}\n alt={wallet.name}\n className=\"volr:w-8 volr:h-8\"\n />\n ) : (\n <div className=\"volr:text-slate-400\">\n <DefaultWalletIcon />\n </div>\n )}\n </div>\n\n {/* Wallet name */}\n <span className=\"volr:flex-1 volr:text-left volr:font-medium volr:text-slate-900\">\n {loadingWallet === wallet.name\n ? t(\"siwe.connectingTo\").replace(\"{{wallet}}\", wallet.name)\n : wallet.name}\n </span>\n\n {/* Loading spinner or arrow */}\n {loadingWallet === wallet.name ? (\n <div className=\"volr:animate-spin volr:w-5 volr:h-5 volr:border-2 volr:border-slate-300 volr:border-t-slate-600 volr:rounded-full\" />\n ) : (\n <svg\n className=\"volr:w-5 volr:h-5 volr:text-slate-400\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n )}\n </button>\n ))}\n </div>\n );\n };\n\n // Render mobile/other wallet section\n const renderOtherWalletSection = () => (\n <div className=\"volr:space-y-4\">\n {/* Guide */}\n <div className=\"volr:text-sm\">\n <p className=\"volr:font-medium volr:mb-2\">{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 {sessionUrl ? (\n <>\n {/* QR Code for desktop */}\n {!isMobile() && (\n <div className=\"volr:flex volr:justify-center volr:p-4 volr:bg-white volr:rounded-lg volr:border volr:border-slate-200\">\n <QRCodeSVG value={sessionUrl} size={160} level=\"M\" marginSize={0} />\n </div>\n )}\n\n {/* URL with copy button */}\n <div className=\"volr:p-3 volr:border volr:border-slate-200 volr:rounded-lg volr:bg-slate-50\">\n <div className=\"volr:flex volr:items-start volr:justify-between volr:gap-2\">\n <div className=\"volr:flex-1 volr:min-w-0\">\n <p className=\"volr:text-xs volr-text-secondary volr:mb-1\">Sign URL:</p>\n <p className=\"volr:text-xs volr:font-mono volr:break-all volr:text-slate-600\">\n {sessionUrl}\n </p>\n </div>\n <CopyButton text={sessionUrl} />\n </div>\n </div>\n\n {isPolling && (\n <div className=\"volr:text-center volr:py-2\">\n <div className=\"volr:animate-spin volr:w-5 volr:h-5 volr:border-2 volr:border-slate-300 volr:border-t-slate-600 volr:rounded-full volr:mx-auto\" />\n <p className=\"volr:text-xs volr-text-secondary volr:mt-2\">\n {t(\"siwe.waitingForSignature\")}\n </p>\n </div>\n )}\n </>\n ) : (\n <div className=\"volr:text-center volr:py-4\">\n <div className=\"volr:animate-spin volr:w-5 volr:h-5 volr:border-2 volr:border-slate-300 volr:border-t-slate-600 volr:rounded-full volr:mx-auto\" />\n <p className=\"volr:text-xs volr-text-secondary volr:mt-2\">{t(\"common.loading\")}</p>\n </div>\n )}\n </div>\n );\n\n const content = (\n <div className=\"volr:max-w-md volr:mx-auto\">\n <Button variant=\"ghost\" size=\"sm\" onClick={onBack} className=\"volr:mb-4 volr:-ml-2\">\n ← {t(\"common.back\")}\n </Button>\n\n <p className=\"volr:text-2xl volr:font-semibold volr:mb-6\">\n {t(\"login.wallet.title\")}\n </p>\n\n {/* Error display */}\n {error && (\n <div className=\"volr:mb-4 volr:p-3 volr:border volr:border-red-200 volr:rounded-lg volr:text-sm volr:text-red-600 volr:bg-red-50\">\n {error}\n </div>\n )}\n\n {/* Loading state while detecting wallets */}\n {isDetecting && (\n <div className=\"volr:text-center volr:py-8\">\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-secondary volr:mt-3\">{t(\"common.loading\")}</p>\n </div>\n )}\n\n {/* Case 1: Wallets detected - show wallet list */}\n {!isDetecting && hasAnyWallet && !showOtherWallet && (\n <>\n <p className=\"volr:text-sm volr-text-secondary volr:mb-4\">\n {t(\"siwe.selectWallet\")}\n </p>\n\n {renderWalletList()}\n\n {/* \"Use another wallet\" link */}\n <button\n type=\"button\"\n onClick={() => setShowOtherWallet(true)}\n className=\"volr:w-full volr:text-sm volr:text-slate-500 volr:underline volr:mt-6\"\n >\n {t(\"siwe.useOtherWallet\")}\n </button>\n </>\n )}\n\n {/* Case 2: User clicked \"use another wallet\" */}\n {!isDetecting && hasAnyWallet && showOtherWallet && (\n <>\n {renderOtherWalletSection()}\n <button\n type=\"button\"\n onClick={cancelOtherWallet}\n className=\"volr:w-full volr:text-sm volr:text-slate-500 volr:underline volr:mt-4\"\n >\n {t(\"common.cancel\")}\n </button>\n </>\n )}\n\n {/* Case 3: No wallets detected - show mobile signing directly */}\n {!isDetecting && !hasAnyWallet && (\n <>\n <p className=\"volr:text-sm volr-text-secondary volr:mb-4\">\n {t(\"siwe.noWalletsDetected\")}\n </p>\n {renderOtherWalletSection()}\n </>\n )}\n </div>\n );\n\n if (!wrapInModal) return content;\n\n return (\n <Modal open={isOpen} onOpenChange={(open) => !open && (onClose?.() || onBack?.())}>\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는 인증 수단일 뿐 - 패스키 등록 필요 여부 확인\n // If user already has a key storage type, login is complete - close modal\n if (data.keyStorageType) {\n onClose();\n return;\n }\n\n // No key storage type means passkey setup is needed (same as email/social login)\n setCurrentScreen(\"passkey-setup\");\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","// biome-ignore lint/performance/noBarrelFile: entrypoint module\nexport {\n type Abi,\n type AbiEvent,\n type AbiFunction,\n type AbiParameter,\n type AbiParameterKind,\n type AbiParameterToPrimitiveType,\n type AbiStateMutability,\n type Address,\n CircularReferenceError,\n InvalidAbiItemError,\n InvalidAbiParameterError,\n InvalidAbiParametersError,\n InvalidAbiTypeParameterError,\n InvalidFunctionModifierError,\n InvalidModifierError,\n InvalidParameterError,\n InvalidParenthesisError,\n InvalidSignatureError,\n InvalidStructSignatureError,\n type Narrow,\n type ParseAbi,\n type ParseAbiItem,\n type ParseAbiParameter,\n type ParseAbiParameters,\n parseAbi,\n parseAbiItem,\n parseAbiParameter,\n parseAbiParameters,\n SolidityProtectedKeywordError,\n type TypedData,\n type TypedDataDomain,\n type TypedDataParameter,\n UnknownSignatureError,\n UnknownTypeError,\n} from 'abitype'\nexport type {\n BlockOverrides,\n Rpc as RpcBlockOverrides,\n} from 'ox/BlockOverrides'\nexport type {\n RpcEstimateUserOperationGasReturnType,\n RpcGetUserOperationByHashReturnType,\n RpcUserOperation,\n RpcUserOperationReceipt,\n RpcUserOperationRequest,\n} from './account-abstraction/types/rpc.js'\nexport type {\n Account,\n AccountSource,\n CustomSource,\n HDAccount,\n HDOptions,\n JsonRpcAccount,\n LocalAccount,\n PrivateKeyAccount,\n} from './accounts/types.js'\nexport type {\n GetEnsAddressErrorType,\n GetEnsAddressParameters,\n GetEnsAddressReturnType,\n} from './actions/ens/getEnsAddress.js'\nexport type {\n GetEnsAvatarErrorType,\n GetEnsAvatarParameters,\n GetEnsAvatarReturnType,\n} from './actions/ens/getEnsAvatar.js'\nexport type {\n GetEnsNameErrorType,\n GetEnsNameParameters,\n GetEnsNameReturnType,\n} from './actions/ens/getEnsName.js'\nexport type {\n GetEnsResolverErrorType,\n GetEnsResolverParameters,\n GetEnsResolverReturnType,\n} from './actions/ens/getEnsResolver.js'\nexport type {\n GetEnsTextErrorType,\n GetEnsTextParameters,\n GetEnsTextReturnType,\n} from './actions/ens/getEnsText.js'\nexport {\n type GetContractErrorType,\n type GetContractParameters,\n type GetContractReturnType,\n getContract,\n} from './actions/getContract.js'\nexport type {\n CallErrorType,\n CallParameters,\n CallReturnType,\n} from './actions/public/call.js'\nexport type {\n CreateAccessListErrorType,\n CreateAccessListParameters,\n CreateAccessListReturnType,\n} from './actions/public/createAccessList.js'\nexport type {\n CreateBlockFilterErrorType,\n CreateBlockFilterReturnType,\n} from './actions/public/createBlockFilter.js'\nexport type {\n CreateContractEventFilterErrorType,\n CreateContractEventFilterParameters,\n CreateContractEventFilterReturnType,\n} from './actions/public/createContractEventFilter.js'\nexport type {\n CreateEventFilterErrorType,\n CreateEventFilterParameters,\n CreateEventFilterReturnType,\n} from './actions/public/createEventFilter.js'\nexport type {\n CreatePendingTransactionFilterErrorType,\n CreatePendingTransactionFilterReturnType,\n} from './actions/public/createPendingTransactionFilter.js'\nexport type {\n EstimateContractGasErrorType,\n EstimateContractGasParameters,\n EstimateContractGasReturnType,\n} from './actions/public/estimateContractGas.js'\nexport type {\n EstimateFeesPerGasErrorType,\n EstimateFeesPerGasParameters,\n EstimateFeesPerGasReturnType,\n} from './actions/public/estimateFeesPerGas.js'\nexport type {\n EstimateGasErrorType,\n EstimateGasParameters,\n EstimateGasReturnType,\n} from './actions/public/estimateGas.js'\nexport type {\n EstimateMaxPriorityFeePerGasErrorType,\n EstimateMaxPriorityFeePerGasParameters,\n EstimateMaxPriorityFeePerGasReturnType,\n} from './actions/public/estimateMaxPriorityFeePerGas.js'\nexport type {\n GetBalanceErrorType,\n GetBalanceParameters,\n GetBalanceReturnType,\n} from './actions/public/getBalance.js'\nexport type {\n GetBlobBaseFeeErrorType,\n GetBlobBaseFeeReturnType,\n} from './actions/public/getBlobBaseFee.js'\nexport type {\n GetBlockErrorType,\n GetBlockParameters,\n GetBlockReturnType,\n} from './actions/public/getBlock.js'\nexport type {\n GetBlockNumberErrorType,\n GetBlockNumberParameters,\n GetBlockNumberReturnType,\n} from './actions/public/getBlockNumber.js'\nexport type {\n GetBlockTransactionCountErrorType,\n GetBlockTransactionCountParameters,\n GetBlockTransactionCountReturnType,\n} from './actions/public/getBlockTransactionCount.js'\nexport type {\n GetChainIdErrorType,\n GetChainIdReturnType,\n} from './actions/public/getChainId.js'\nexport type {\n /** @deprecated Use `GetCodeErrorType` instead */\n GetCodeErrorType as GetBytecodeErrorType,\n GetCodeErrorType,\n /** @deprecated Use `GetCodeParameters` instead */\n GetCodeParameters as GetBytecodeParameters,\n GetCodeParameters,\n /** @deprecated Use `GetCodeReturnType` instead */\n GetCodeReturnType as GetBytecodeReturnType,\n GetCodeReturnType,\n} from './actions/public/getCode.js'\nexport type {\n GetContractEventsErrorType,\n GetContractEventsParameters,\n GetContractEventsReturnType,\n} from './actions/public/getContractEvents.js'\nexport type {\n GetEip712DomainErrorType,\n GetEip712DomainParameters,\n GetEip712DomainReturnType,\n} from './actions/public/getEip712Domain.js'\nexport type {\n GetFeeHistoryErrorType,\n GetFeeHistoryParameters,\n GetFeeHistoryReturnType,\n} from './actions/public/getFeeHistory.js'\nexport type {\n GetFilterChangesErrorType,\n GetFilterChangesParameters,\n GetFilterChangesReturnType,\n} from './actions/public/getFilterChanges.js'\nexport type {\n GetFilterLogsErrorType,\n GetFilterLogsParameters,\n GetFilterLogsReturnType,\n} from './actions/public/getFilterLogs.js'\nexport type {\n GetGasPriceErrorType,\n GetGasPriceReturnType,\n} from './actions/public/getGasPrice.js'\nexport type {\n GetLogsErrorType,\n GetLogsParameters,\n GetLogsReturnType,\n} from './actions/public/getLogs.js'\nexport type {\n GetProofErrorType,\n GetProofParameters,\n GetProofReturnType,\n} from './actions/public/getProof.js'\nexport type {\n GetStorageAtErrorType,\n GetStorageAtParameters,\n GetStorageAtReturnType,\n} from './actions/public/getStorageAt.js'\nexport type {\n GetTransactionErrorType,\n GetTransactionParameters,\n GetTransactionReturnType,\n} from './actions/public/getTransaction.js'\nexport type {\n GetTransactionConfirmationsErrorType,\n GetTransactionConfirmationsParameters,\n GetTransactionConfirmationsReturnType,\n} from './actions/public/getTransactionConfirmations.js'\nexport type {\n GetTransactionCountErrorType,\n GetTransactionCountParameters,\n GetTransactionCountReturnType,\n} from './actions/public/getTransactionCount.js'\nexport type {\n GetTransactionReceiptErrorType,\n GetTransactionReceiptParameters,\n GetTransactionReceiptReturnType,\n} from './actions/public/getTransactionReceipt.js'\nexport type {\n MulticallErrorType,\n MulticallParameters,\n MulticallReturnType,\n} from './actions/public/multicall.js'\nexport type {\n ReadContractErrorType,\n ReadContractParameters,\n ReadContractReturnType,\n} from './actions/public/readContract.js'\nexport type {\n SimulateBlocksErrorType,\n SimulateBlocksParameters,\n SimulateBlocksReturnType,\n} from './actions/public/simulateBlocks.js'\nexport type {\n SimulateCallsErrorType,\n SimulateCallsParameters,\n SimulateCallsReturnType,\n} from './actions/public/simulateCalls.js'\nexport type {\n GetMutabilityAwareValue,\n SimulateContractErrorType,\n SimulateContractParameters,\n SimulateContractReturnType,\n} from './actions/public/simulateContract.js'\nexport type {\n UninstallFilterErrorType,\n UninstallFilterParameters,\n UninstallFilterReturnType,\n} from './actions/public/uninstallFilter.js'\nexport type {\n VerifyHashErrorType as VerifyHashActionErrorType,\n VerifyHashParameters as VerifyHashActionParameters,\n VerifyHashReturnType as VerifyHashActionReturnType,\n} from './actions/public/verifyHash.js'\nexport type {\n VerifyMessageErrorType as VerifyMessageActionErrorType,\n VerifyMessageParameters as VerifyMessageActionParameters,\n VerifyMessageReturnType as VerifyMessageActionReturnType,\n} from './actions/public/verifyMessage.js'\nexport type {\n VerifyTypedDataErrorType as VerifyTypedDataActionErrorType,\n VerifyTypedDataParameters as VerifyTypedDataActionParameters,\n VerifyTypedDataReturnType as VerifyTypedDataActionReturnType,\n} from './actions/public/verifyTypedData.js'\nexport type {\n ReplacementReason,\n ReplacementReturnType,\n WaitForTransactionReceiptErrorType,\n WaitForTransactionReceiptParameters,\n WaitForTransactionReceiptReturnType,\n} from './actions/public/waitForTransactionReceipt.js'\nexport type {\n OnBlockNumberFn,\n OnBlockNumberParameter,\n WatchBlockNumberErrorType,\n WatchBlockNumberParameters,\n WatchBlockNumberReturnType,\n} from './actions/public/watchBlockNumber.js'\nexport type {\n OnBlock,\n OnBlockParameter,\n WatchBlocksErrorType,\n WatchBlocksParameters,\n WatchBlocksReturnType,\n} from './actions/public/watchBlocks.js'\nexport type {\n WatchContractEventErrorType,\n WatchContractEventOnLogsFn,\n WatchContractEventOnLogsParameter,\n WatchContractEventParameters,\n WatchContractEventReturnType,\n} from './actions/public/watchContractEvent.js'\nexport type {\n WatchEventErrorType,\n WatchEventOnLogsFn,\n WatchEventOnLogsParameter,\n WatchEventParameters,\n WatchEventReturnType,\n} from './actions/public/watchEvent.js'\nexport type {\n OnTransactionsFn,\n OnTransactionsParameter,\n WatchPendingTransactionsErrorType,\n WatchPendingTransactionsParameters,\n WatchPendingTransactionsReturnType,\n} from './actions/public/watchPendingTransactions.js'\nexport type {\n DropTransactionErrorType,\n DropTransactionParameters,\n} from './actions/test/dropTransaction.js'\nexport type {\n DumpStateErrorType,\n DumpStateReturnType,\n} from './actions/test/dumpState.js'\nexport type {\n GetAutomineErrorType,\n GetAutomineReturnType,\n} from './actions/test/getAutomine.js'\nexport type {\n GetTxpoolContentErrorType,\n GetTxpoolContentReturnType,\n} from './actions/test/getTxpoolContent.js'\nexport type {\n GetTxpoolStatusErrorType,\n GetTxpoolStatusReturnType,\n} from './actions/test/getTxpoolStatus.js'\nexport type {\n ImpersonateAccountErrorType,\n ImpersonateAccountParameters,\n} from './actions/test/impersonateAccount.js'\nexport type {\n IncreaseTimeErrorType,\n IncreaseTimeParameters,\n} from './actions/test/increaseTime.js'\nexport type {\n InspectTxpoolErrorType,\n InspectTxpoolReturnType,\n} from './actions/test/inspectTxpool.js'\nexport type {\n LoadStateErrorType,\n LoadStateParameters,\n LoadStateReturnType,\n} from './actions/test/loadState.js'\nexport type { MineErrorType, MineParameters } from './actions/test/mine.js'\nexport type { RemoveBlockTimestampIntervalErrorType } from './actions/test/removeBlockTimestampInterval.js'\nexport type { ResetErrorType, ResetParameters } from './actions/test/reset.js'\nexport type {\n RevertErrorType,\n RevertParameters,\n} from './actions/test/revert.js'\nexport type {\n SendUnsignedTransactionErrorType,\n SendUnsignedTransactionParameters,\n SendUnsignedTransactionReturnType,\n} from './actions/test/sendUnsignedTransaction.js'\nexport type { SetAutomineErrorType } from './actions/test/setAutomine.js'\nexport type {\n SetBalanceErrorType,\n SetBalanceParameters,\n} from './actions/test/setBalance.js'\nexport type {\n SetBlockGasLimitErrorType,\n SetBlockGasLimitParameters,\n} from './actions/test/setBlockGasLimit.js'\nexport type {\n SetBlockTimestampIntervalErrorType,\n SetBlockTimestampIntervalParameters,\n} from './actions/test/setBlockTimestampInterval.js'\nexport type {\n SetCodeErrorType,\n SetCodeParameters,\n} from './actions/test/setCode.js'\nexport type {\n SetCoinbaseErrorType,\n SetCoinbaseParameters,\n} from './actions/test/setCoinbase.js'\nexport type {\n SetIntervalMiningErrorType,\n SetIntervalMiningParameters,\n} from './actions/test/setIntervalMining.js'\nexport type { SetLoggingEnabledErrorType } from './actions/test/setLoggingEnabled.js'\nexport type {\n SetMinGasPriceErrorType,\n SetMinGasPriceParameters,\n} from './actions/test/setMinGasPrice.js'\nexport type {\n SetNextBlockBaseFeePerGasErrorType,\n SetNextBlockBaseFeePerGasParameters,\n} from './actions/test/setNextBlockBaseFeePerGas.js'\nexport type {\n SetNextBlockTimestampErrorType,\n SetNextBlockTimestampParameters,\n} from './actions/test/setNextBlockTimestamp.js'\nexport type {\n SetNonceErrorType,\n SetNonceParameters,\n} from './actions/test/setNonce.js'\nexport type { SetRpcUrlErrorType } from './actions/test/setRpcUrl.js'\nexport type {\n SetStorageAtErrorType,\n SetStorageAtParameters,\n} from './actions/test/setStorageAt.js'\nexport type { SnapshotErrorType } from './actions/test/snapshot.js'\nexport type {\n StopImpersonatingAccountErrorType,\n StopImpersonatingAccountParameters,\n} from './actions/test/stopImpersonatingAccount.js'\nexport type {\n AddChainErrorType,\n AddChainParameters,\n} from './actions/wallet/addChain.js'\nexport type {\n DeployContractErrorType,\n DeployContractParameters,\n DeployContractReturnType,\n} from './actions/wallet/deployContract.js'\nexport type {\n GetAddressesErrorType,\n GetAddressesReturnType,\n} from './actions/wallet/getAddresses.js'\nexport type {\n GetCallsStatusErrorType,\n GetCallsStatusParameters,\n GetCallsStatusReturnType,\n} from './actions/wallet/getCallsStatus.js'\nexport type {\n GetCapabilitiesErrorType,\n GetCapabilitiesParameters,\n GetCapabilitiesReturnType,\n} from './actions/wallet/getCapabilities.js'\nexport type {\n GetPermissionsErrorType,\n GetPermissionsReturnType,\n} from './actions/wallet/getPermissions.js'\nexport type {\n PrepareAuthorizationErrorType,\n PrepareAuthorizationParameters,\n PrepareAuthorizationReturnType,\n} from './actions/wallet/prepareAuthorization.js'\nexport type {\n PrepareTransactionRequestErrorType,\n PrepareTransactionRequestParameters,\n PrepareTransactionRequestParameterType,\n PrepareTransactionRequestRequest,\n PrepareTransactionRequestReturnType,\n} from './actions/wallet/prepareTransactionRequest.js'\nexport type {\n RequestAddressesErrorType,\n RequestAddressesReturnType,\n} from './actions/wallet/requestAddresses.js'\nexport type {\n RequestPermissionsErrorType,\n RequestPermissionsParameters,\n RequestPermissionsReturnType,\n} from './actions/wallet/requestPermissions.js'\nexport type {\n SendCallsErrorType,\n SendCallsParameters,\n SendCallsReturnType,\n} from './actions/wallet/sendCalls.js'\nexport type {\n SendCallsSyncErrorType,\n SendCallsSyncParameters,\n SendCallsSyncReturnType,\n} from './actions/wallet/sendCallsSync.js'\nexport type {\n SendRawTransactionErrorType,\n SendRawTransactionParameters,\n SendRawTransactionReturnType,\n} from './actions/wallet/sendRawTransaction.js'\nexport type {\n SendRawTransactionSyncErrorType,\n SendRawTransactionSyncParameters,\n SendRawTransactionSyncReturnType,\n} from './actions/wallet/sendRawTransactionSync.js'\nexport type {\n SendTransactionErrorType,\n SendTransactionParameters,\n SendTransactionRequest,\n SendTransactionReturnType,\n} from './actions/wallet/sendTransaction.js'\nexport type {\n SendTransactionSyncErrorType,\n SendTransactionSyncParameters,\n SendTransactionSyncRequest,\n SendTransactionSyncReturnType,\n} from './actions/wallet/sendTransactionSync.js'\nexport type {\n ShowCallsStatusErrorType,\n ShowCallsStatusParameters,\n ShowCallsStatusReturnType,\n} from './actions/wallet/showCallsStatus.js'\nexport type {\n SignAuthorizationErrorType,\n SignAuthorizationParameters,\n SignAuthorizationReturnType,\n} from './actions/wallet/signAuthorization.js'\nexport type {\n SignMessageErrorType,\n SignMessageParameters,\n SignMessageReturnType,\n} from './actions/wallet/signMessage.js'\nexport type {\n SignTransactionErrorType,\n SignTransactionParameters,\n SignTransactionReturnType,\n} from './actions/wallet/signTransaction.js'\nexport type {\n SignTypedDataErrorType,\n SignTypedDataParameters,\n SignTypedDataReturnType,\n} from './actions/wallet/signTypedData.js'\nexport type {\n SwitchChainErrorType,\n SwitchChainParameters,\n} from './actions/wallet/switchChain.js'\nexport type {\n WaitForCallsStatusErrorType,\n WaitForCallsStatusParameters,\n WaitForCallsStatusReturnType,\n WaitForCallsStatusTimeoutErrorType,\n} from './actions/wallet/waitForCallsStatus.js'\nexport { WaitForCallsStatusTimeoutError } from './actions/wallet/waitForCallsStatus.js'\nexport type {\n WatchAssetErrorType,\n WatchAssetParameters,\n WatchAssetReturnType,\n} from './actions/wallet/watchAsset.js'\nexport type {\n WriteContractErrorType,\n WriteContractParameters,\n WriteContractReturnType,\n} from './actions/wallet/writeContract.js'\nexport type {\n WriteContractSyncErrorType,\n WriteContractSyncParameters,\n WriteContractSyncReturnType,\n} from './actions/wallet/writeContractSync.js'\nexport {\n type Client,\n type ClientConfig,\n type CreateClientErrorType,\n createClient,\n type MulticallBatchOptions,\n rpcSchema,\n} from './clients/createClient.js'\nexport {\n type CreatePublicClientErrorType,\n createPublicClient,\n type PublicClient,\n type PublicClientConfig,\n} from './clients/createPublicClient.js'\nexport {\n type CreateTestClientErrorType,\n createTestClient,\n type TestClient,\n type TestClientConfig,\n} from './clients/createTestClient.js'\nexport {\n type CreateWalletClientErrorType,\n createWalletClient,\n type WalletClient,\n type WalletClientConfig,\n} from './clients/createWalletClient.js'\nexport {\n type PublicActions,\n publicActions,\n} from './clients/decorators/public.js'\nexport {\n type TestActions,\n testActions,\n} from './clients/decorators/test.js'\nexport {\n type WalletActions,\n walletActions,\n} from './clients/decorators/wallet.js'\nexport {\n type CreateTransportErrorType,\n createTransport,\n type Transport,\n type TransportConfig,\n} from './clients/transports/createTransport.js'\nexport {\n type CustomTransport,\n type CustomTransportConfig,\n type CustomTransportErrorType,\n custom,\n} from './clients/transports/custom.js'\nexport {\n type FallbackTransport,\n type FallbackTransportConfig,\n type FallbackTransportErrorType,\n fallback,\n shouldThrow,\n} from './clients/transports/fallback.js'\nexport {\n type HttpTransport,\n type HttpTransportConfig,\n type HttpTransportErrorType,\n http,\n} from './clients/transports/http.js'\nexport {\n type WebSocketTransport,\n type WebSocketTransportConfig,\n type WebSocketTransportErrorType,\n webSocket,\n} from './clients/transports/webSocket.js'\nexport {\n erc20Abi,\n erc20Abi_bytes32,\n erc721Abi,\n erc1155Abi,\n erc4626Abi,\n erc6492SignatureValidatorAbi,\n /** @deprecated use `erc6492SignatureValidatorAbi` instead. */\n erc6492SignatureValidatorAbi as universalSignatureValidatorAbi,\n multicall3Abi,\n} from './constants/abis.js'\nexport { ethAddress, zeroAddress } from './constants/address.js'\nexport { zeroHash } from './constants/bytes.js'\nexport {\n deploylessCallViaBytecodeBytecode,\n deploylessCallViaFactoryBytecode,\n erc6492SignatureValidatorByteCode,\n /** @deprecated use `erc6492SignatureValidatorByteCode` instead. */\n erc6492SignatureValidatorByteCode as universalSignatureValidatorByteCode,\n} from './constants/contracts.js'\nexport {\n maxInt8,\n maxInt16,\n maxInt24,\n maxInt32,\n maxInt40,\n maxInt48,\n maxInt56,\n maxInt64,\n maxInt72,\n maxInt80,\n maxInt88,\n maxInt96,\n maxInt104,\n maxInt112,\n maxInt120,\n maxInt128,\n maxInt136,\n maxInt144,\n maxInt152,\n maxInt160,\n maxInt168,\n maxInt176,\n maxInt184,\n maxInt192,\n maxInt200,\n maxInt208,\n maxInt216,\n maxInt224,\n maxInt232,\n maxInt240,\n maxInt248,\n maxInt256,\n maxUint8,\n maxUint16,\n maxUint24,\n maxUint32,\n maxUint40,\n maxUint48,\n maxUint56,\n maxUint64,\n maxUint72,\n maxUint80,\n maxUint88,\n maxUint96,\n maxUint104,\n maxUint112,\n maxUint120,\n maxUint128,\n maxUint136,\n maxUint144,\n maxUint152,\n maxUint160,\n maxUint168,\n maxUint176,\n maxUint184,\n maxUint192,\n maxUint200,\n maxUint208,\n maxUint216,\n maxUint224,\n maxUint232,\n maxUint240,\n maxUint248,\n maxUint256,\n minInt8,\n minInt16,\n minInt24,\n minInt32,\n minInt40,\n minInt48,\n minInt56,\n minInt64,\n minInt72,\n minInt80,\n minInt88,\n minInt96,\n minInt104,\n minInt112,\n minInt120,\n minInt128,\n minInt136,\n minInt144,\n minInt152,\n minInt160,\n minInt168,\n minInt176,\n minInt184,\n minInt192,\n minInt200,\n minInt208,\n minInt216,\n minInt224,\n minInt232,\n minInt240,\n minInt248,\n minInt256,\n} from './constants/number.js'\nexport { presignMessagePrefix } from './constants/strings.js'\nexport { etherUnits, gweiUnits, weiUnits } from './constants/unit.js'\nexport {\n AbiConstructorNotFoundError,\n type AbiConstructorNotFoundErrorType,\n AbiConstructorParamsNotFoundError,\n type AbiConstructorParamsNotFoundErrorType,\n AbiDecodingDataSizeInvalidError,\n type AbiDecodingDataSizeInvalidErrorType,\n AbiDecodingDataSizeTooSmallError,\n type AbiDecodingDataSizeTooSmallErrorType,\n AbiDecodingZeroDataError,\n type AbiDecodingZeroDataErrorType,\n AbiEncodingArrayLengthMismatchError,\n type AbiEncodingArrayLengthMismatchErrorType,\n AbiEncodingBytesSizeMismatchError,\n type AbiEncodingBytesSizeMismatchErrorType,\n AbiEncodingLengthMismatchError,\n type AbiEncodingLengthMismatchErrorType,\n AbiErrorInputsNotFoundError,\n type AbiErrorInputsNotFoundErrorType,\n AbiErrorNotFoundError,\n type AbiErrorNotFoundErrorType,\n AbiErrorSignatureNotFoundError,\n type AbiErrorSignatureNotFoundErrorType,\n AbiEventNotFoundError,\n type AbiEventNotFoundErrorType,\n AbiEventSignatureEmptyTopicsError,\n type AbiEventSignatureEmptyTopicsErrorType,\n AbiEventSignatureNotFoundError,\n type AbiEventSignatureNotFoundErrorType,\n AbiFunctionNotFoundError,\n type AbiFunctionNotFoundErrorType,\n AbiFunctionOutputsNotFoundError,\n type AbiFunctionOutputsNotFoundErrorType,\n AbiFunctionSignatureNotFoundError,\n type AbiFunctionSignatureNotFoundErrorType,\n BytesSizeMismatchError,\n type BytesSizeMismatchErrorType,\n DecodeLogDataMismatch,\n type DecodeLogDataMismatchErrorType,\n DecodeLogTopicsMismatch,\n type DecodeLogTopicsMismatchErrorType,\n InvalidAbiDecodingTypeError,\n type InvalidAbiDecodingTypeErrorType,\n InvalidAbiEncodingTypeError,\n type InvalidAbiEncodingTypeErrorType,\n InvalidArrayError,\n type InvalidArrayErrorType,\n InvalidDefinitionTypeError,\n type InvalidDefinitionTypeErrorType,\n UnsupportedPackedAbiType,\n type UnsupportedPackedAbiTypeErrorType,\n} from './errors/abi.js'\nexport {\n InvalidAddressError,\n type InvalidAddressErrorType,\n} from './errors/address.js'\nexport { BaseError, type BaseErrorType, setErrorConfig } from './errors/base.js'\nexport {\n BlockNotFoundError,\n type BlockNotFoundErrorType,\n} from './errors/block.js'\nexport {\n BundleFailedError,\n type BundleFailedErrorType,\n} from './errors/calls.js'\nexport {\n ChainDoesNotSupportContract,\n type ChainDoesNotSupportContractErrorType,\n ChainMismatchError,\n type ChainMismatchErrorType,\n ChainNotFoundError,\n type ChainNotFoundErrorType,\n ClientChainNotConfiguredError,\n type ClientChainNotConfiguredErrorType,\n InvalidChainIdError,\n type InvalidChainIdErrorType,\n} from './errors/chain.js'\nexport {\n CallExecutionError,\n type CallExecutionErrorType,\n ContractFunctionExecutionError,\n type ContractFunctionExecutionErrorType,\n ContractFunctionRevertedError,\n type ContractFunctionRevertedErrorType,\n ContractFunctionZeroDataError,\n type ContractFunctionZeroDataErrorType,\n CounterfactualDeploymentFailedError,\n type CounterfactualDeploymentFailedErrorType,\n RawContractError,\n type RawContractErrorType,\n} from './errors/contract.js'\nexport {\n SizeExceedsPaddingSizeError,\n type SizeExceedsPaddingSizeErrorType,\n SliceOffsetOutOfBoundsError,\n type SliceOffsetOutOfBoundsErrorType,\n} from './errors/data.js'\nexport {\n IntegerOutOfRangeError,\n type IntegerOutOfRangeErrorType,\n InvalidBytesBooleanError,\n type InvalidBytesBooleanErrorType,\n InvalidHexBooleanError,\n type InvalidHexBooleanErrorType,\n InvalidHexValueError,\n type InvalidHexValueErrorType,\n SizeOverflowError,\n type SizeOverflowErrorType,\n} from './errors/encoding.js'\nexport {\n type EnsAvatarInvalidMetadataError,\n type EnsAvatarInvalidMetadataErrorType,\n EnsAvatarInvalidNftUriError,\n type EnsAvatarInvalidNftUriErrorType,\n EnsAvatarUnsupportedNamespaceError,\n type EnsAvatarUnsupportedNamespaceErrorType,\n EnsAvatarUriResolutionError,\n type EnsAvatarUriResolutionErrorType,\n EnsInvalidChainIdError,\n type EnsInvalidChainIdErrorType,\n} from './errors/ens.js'\nexport {\n EstimateGasExecutionError,\n type EstimateGasExecutionErrorType,\n} from './errors/estimateGas.js'\nexport {\n BaseFeeScalarError,\n type BaseFeeScalarErrorType,\n Eip1559FeesNotSupportedError,\n type Eip1559FeesNotSupportedErrorType,\n MaxFeePerGasTooLowError,\n type MaxFeePerGasTooLowErrorType,\n} from './errors/fee.js'\nexport {\n FilterTypeNotSupportedError,\n type FilterTypeNotSupportedErrorType,\n} from './errors/log.js'\nexport {\n ExecutionRevertedError,\n type ExecutionRevertedErrorType,\n FeeCapTooHighError,\n type FeeCapTooHighErrorType,\n FeeCapTooLowError,\n type FeeCapTooLowErrorType,\n InsufficientFundsError,\n type InsufficientFundsErrorType,\n IntrinsicGasTooHighError,\n type IntrinsicGasTooHighErrorType,\n IntrinsicGasTooLowError,\n type IntrinsicGasTooLowErrorType,\n NonceMaxValueError,\n type NonceMaxValueErrorType,\n NonceTooHighError,\n type NonceTooHighErrorType,\n NonceTooLowError,\n type NonceTooLowErrorType,\n TipAboveFeeCapError,\n type TipAboveFeeCapErrorType,\n TransactionTypeNotSupportedError,\n type TransactionTypeNotSupportedErrorType,\n UnknownNodeError,\n type UnknownNodeErrorType,\n} from './errors/node.js'\nexport {\n HttpRequestError,\n type HttpRequestErrorType,\n RpcRequestError,\n type RpcRequestErrorType,\n SocketClosedError,\n type SocketClosedErrorType,\n TimeoutError,\n type TimeoutErrorType,\n WebSocketRequestError,\n type WebSocketRequestErrorType,\n} from './errors/request.js'\nexport {\n AtomicityNotSupportedError,\n type AtomicityNotSupportedErrorType,\n AtomicReadyWalletRejectedUpgradeError,\n type AtomicReadyWalletRejectedUpgradeErrorType,\n BundleTooLargeError,\n type BundleTooLargeErrorType,\n ChainDisconnectedError,\n type ChainDisconnectedErrorType,\n DuplicateIdError,\n type DuplicateIdErrorType,\n InternalRpcError,\n type InternalRpcErrorType,\n InvalidInputRpcError,\n type InvalidInputRpcErrorType,\n InvalidParamsRpcError,\n type InvalidParamsRpcErrorType,\n InvalidRequestRpcError,\n type InvalidRequestRpcErrorType,\n JsonRpcVersionUnsupportedError,\n type JsonRpcVersionUnsupportedErrorType,\n LimitExceededRpcError,\n type LimitExceededRpcErrorType,\n MethodNotFoundRpcError,\n type MethodNotFoundRpcErrorType,\n MethodNotSupportedRpcError,\n type MethodNotSupportedRpcErrorType,\n ParseRpcError,\n type ParseRpcErrorType,\n ProviderDisconnectedError,\n type ProviderDisconnectedErrorType,\n ProviderRpcError,\n type ProviderRpcErrorCode,\n type ProviderRpcErrorType,\n ResourceNotFoundRpcError,\n type ResourceNotFoundRpcErrorType,\n ResourceUnavailableRpcError,\n type ResourceUnavailableRpcErrorType,\n RpcError,\n type RpcErrorCode,\n type RpcErrorType,\n SwitchChainError,\n TransactionRejectedRpcError,\n type TransactionRejectedRpcErrorType,\n UnauthorizedProviderError,\n type UnauthorizedProviderErrorType,\n UnknownBundleIdError,\n type UnknownBundleIdErrorType,\n UnknownRpcError,\n type UnknownRpcErrorType,\n UnsupportedChainIdError,\n type UnsupportedChainIdErrorType,\n UnsupportedNonOptionalCapabilityError,\n type UnsupportedNonOptionalCapabilityErrorType,\n UnsupportedProviderMethodError,\n type UnsupportedProviderMethodErrorType,\n UserRejectedRequestError,\n type UserRejectedRequestErrorType,\n} from './errors/rpc.js'\nexport {\n AccountStateConflictError,\n type AccountStateConflictErrorType,\n StateAssignmentConflictError,\n type StateAssignmentConflictErrorType,\n} from './errors/stateOverride.js'\nexport {\n FeeConflictError,\n type FeeConflictErrorType,\n InvalidLegacyVError,\n type InvalidLegacyVErrorType,\n InvalidSerializableTransactionError,\n type InvalidSerializableTransactionErrorType,\n InvalidSerializedTransactionError,\n type InvalidSerializedTransactionErrorType,\n InvalidSerializedTransactionTypeError,\n type InvalidSerializedTransactionTypeErrorType,\n InvalidStorageKeySizeError,\n type InvalidStorageKeySizeErrorType,\n TransactionExecutionError,\n type TransactionExecutionErrorType,\n TransactionNotFoundError,\n type TransactionNotFoundErrorType,\n TransactionReceiptNotFoundError,\n type TransactionReceiptNotFoundErrorType,\n WaitForTransactionReceiptTimeoutError,\n type WaitForTransactionReceiptTimeoutErrorType,\n} from './errors/transaction.js'\nexport {\n UrlRequiredError,\n type UrlRequiredErrorType,\n} from './errors/transport.js'\nexport {\n InvalidDomainError,\n type InvalidDomainErrorType,\n InvalidPrimaryTypeError,\n type InvalidPrimaryTypeErrorType,\n InvalidStructTypeError,\n type InvalidStructTypeErrorType,\n} from './errors/typedData.js'\nexport {\n InvalidDecimalNumberError,\n type InvalidDecimalNumberErrorType,\n} from './errors/unit.js'\nexport type {\n DeriveAccount,\n HDKey,\n ParseAccount,\n} from './types/account.js'\nexport type {\n Authorization,\n AuthorizationList,\n AuthorizationRequest,\n SerializedAuthorization,\n SerializedAuthorizationList,\n SignedAuthorization,\n SignedAuthorizationList,\n} from './types/authorization.js'\nexport type {\n Block,\n BlockIdentifier,\n BlockNumber,\n BlockTag,\n Uncle,\n} from './types/block.js'\nexport type { Call, Calls } from './types/calls.js'\nexport type {\n Capabilities,\n /** @deprecated Use `Capabilities` instead. */\n Capabilities as WalletCapabilities,\n CapabilitiesSchema,\n /** @deprecated Use `ChainIdToCapabilities` instead. */\n ChainIdToCapabilities as WalletCapabilitiesRecord,\n ChainIdToCapabilities,\n ExtractCapabilities,\n} from './types/capabilities.js'\nexport type {\n Chain,\n ChainConfig,\n ChainContract,\n ChainEstimateFeesPerGasFn,\n ChainEstimateFeesPerGasFnParameters,\n ChainFees,\n ChainFeesFnParameters,\n ChainFormatter,\n ChainFormatters,\n ChainMaxPriorityFeePerGasFn,\n ChainSerializers,\n DeriveChain,\n ExtractChainFormatterExclude,\n ExtractChainFormatterParameters,\n ExtractChainFormatterReturnType,\n GetChainParameter,\n} from './types/chain.js'\nexport type {\n AbiEventParametersToPrimitiveTypes,\n AbiEventParameterToPrimitiveType,\n AbiEventTopicToPrimitiveType,\n AbiItem,\n AbiItemArgs,\n AbiItemName,\n ContractConstructorArgs,\n ContractErrorArgs,\n ContractErrorName,\n ContractEventArgs,\n ContractEventArgsFromTopics,\n ContractEventName,\n ContractFunctionArgs,\n ContractFunctionName,\n ContractFunctionParameters,\n ContractFunctionReturnType,\n EventDefinition,\n ExtractAbiFunctionForArgs,\n ExtractAbiItem,\n ExtractAbiItemForArgs,\n ExtractAbiItemNames,\n GetEventArgs,\n GetValue,\n LogTopicType,\n MaybeAbiEventName,\n MaybeExtractEventArgsFromAbi,\n UnionWiden,\n Widen,\n} from './types/contract.js'\nexport type {\n AddEthereumChainParameter,\n BundlerRpcSchema,\n DebugBundlerRpcSchema,\n EIP1193EventMap,\n EIP1193Events,\n EIP1193Parameters,\n EIP1193Provider,\n EIP1193RequestFn,\n EIP1474Methods,\n NetworkSync,\n PaymasterRpcSchema,\n ProviderConnectInfo,\n ProviderMessage,\n ProviderRpcErrorType as EIP1193ProviderRpcErrorType,\n PublicRpcSchema,\n RpcSchema,\n RpcSchemaOverride,\n TestRpcSchema,\n WalletCallReceipt,\n WalletGetAssetsParameters,\n WalletGetAssetsReturnType,\n WalletGetCallsStatusReturnType,\n WalletGrantPermissionsParameters,\n WalletGrantPermissionsReturnType,\n WalletPermission,\n WalletPermissionCaveat,\n WalletRpcSchema,\n WalletSendCallsParameters,\n WalletSendCallsReturnType,\n WatchAssetParams,\n} from './types/eip1193.js'\nexport { ProviderRpcError as EIP1193ProviderRpcError } from './types/eip1193.js'\nexport type { BlobSidecar, BlobSidecars } from './types/eip4844.js'\nexport type { AssetGateway, AssetGatewayUrls } from './types/ens.js'\nexport type {\n FeeHistory,\n FeeValues,\n FeeValuesEIP1559,\n FeeValuesEIP4844,\n FeeValuesLegacy,\n FeeValuesType,\n} from './types/fee.js'\nexport type { Filter, FilterType } from './types/filter.js'\nexport type { GetTransactionRequestKzgParameter, Kzg } from './types/kzg.js'\nexport type { Log } from './types/log.js'\nexport type {\n ByteArray,\n CompactSignature,\n Hash,\n Hex,\n LogTopic,\n SignableMessage,\n Signature,\n} from './types/misc.js'\nexport type {\n MulticallContracts,\n MulticallResponse,\n MulticallResults,\n} from './types/multicall.js'\nexport type { Register, ResolvedRegister } from './types/register.js'\nexport type {\n Index,\n Quantity,\n RpcAccountStateOverride,\n RpcAuthorization,\n RpcAuthorizationList,\n RpcBlock,\n RpcBlockIdentifier,\n RpcBlockNumber,\n RpcFeeHistory,\n RpcFeeValues,\n RpcLog,\n RpcProof,\n RpcStateMapping,\n RpcStateOverride,\n RpcTransaction,\n RpcTransactionReceipt,\n RpcTransactionRequest,\n RpcUncle,\n Status,\n} from './types/rpc.js'\nexport type {\n StateMapping,\n StateOverride,\n} from './types/stateOverride.js'\nexport type {\n AccessList,\n Transaction,\n TransactionBase,\n TransactionEIP1559,\n TransactionEIP2930,\n TransactionEIP4844,\n TransactionEIP7702,\n TransactionLegacy,\n TransactionReceipt,\n TransactionRequest,\n TransactionRequestBase,\n TransactionRequestEIP1559,\n TransactionRequestEIP2930,\n TransactionRequestEIP4844,\n TransactionRequestEIP7702,\n TransactionRequestGeneric,\n TransactionRequestLegacy,\n TransactionSerializable,\n TransactionSerializableBase,\n TransactionSerializableEIP1559,\n TransactionSerializableEIP2930,\n TransactionSerializableEIP4844,\n TransactionSerializableEIP7702,\n TransactionSerializableGeneric,\n TransactionSerializableLegacy,\n TransactionSerialized,\n TransactionSerializedEIP1559,\n TransactionSerializedEIP2930,\n TransactionSerializedEIP4844,\n TransactionSerializedEIP7702,\n TransactionSerializedGeneric,\n TransactionSerializedLegacy,\n TransactionType,\n} from './types/transaction.js'\nexport type { GetPollOptions, GetTransportConfig } from './types/transport.js'\nexport type { TypedDataDefinition } from './types/typedData.js'\nexport type {\n Assign,\n Branded,\n Evaluate,\n ExactPartial,\n ExactRequired,\n IsNarrowable,\n IsNever,\n IsUndefined,\n IsUnion,\n LooseOmit,\n MaybePartial,\n MaybePromise,\n MaybeRequired,\n Mutable,\n NoInfer,\n NoUndefined,\n Omit,\n OneOf,\n Or,\n PartialBy,\n Prettify,\n RequiredBy,\n Some,\n UnionEvaluate,\n UnionLooseOmit,\n UnionOmit,\n UnionPartialBy,\n UnionPick,\n UnionRequiredBy,\n UnionToTuple,\n ValueOf,\n} from './types/utils.js'\nexport type { Withdrawal } from './types/withdrawal.js'\nexport {\n type DecodeAbiParametersErrorType,\n type DecodeAbiParametersReturnType,\n decodeAbiParameters,\n} from './utils/abi/decodeAbiParameters.js'\nexport {\n type DecodeDeployDataErrorType,\n type DecodeDeployDataParameters,\n type DecodeDeployDataReturnType,\n decodeDeployData,\n} from './utils/abi/decodeDeployData.js'\nexport {\n type DecodeErrorResultErrorType,\n type DecodeErrorResultParameters,\n type DecodeErrorResultReturnType,\n decodeErrorResult,\n} from './utils/abi/decodeErrorResult.js'\nexport {\n type DecodeEventLogErrorType,\n type DecodeEventLogParameters,\n type DecodeEventLogReturnType,\n decodeEventLog,\n} from './utils/abi/decodeEventLog.js'\nexport {\n type DecodeFunctionDataErrorType,\n type DecodeFunctionDataParameters,\n type DecodeFunctionDataReturnType,\n decodeFunctionData,\n} from './utils/abi/decodeFunctionData.js'\nexport {\n type DecodeFunctionResultErrorType,\n type DecodeFunctionResultParameters,\n type DecodeFunctionResultReturnType,\n decodeFunctionResult,\n} from './utils/abi/decodeFunctionResult.js'\nexport {\n type EncodeAbiParametersErrorType,\n type EncodeAbiParametersReturnType,\n encodeAbiParameters,\n} from './utils/abi/encodeAbiParameters.js'\nexport {\n type EncodeDeployDataErrorType,\n type EncodeDeployDataParameters,\n type EncodeDeployDataReturnType,\n encodeDeployData,\n} from './utils/abi/encodeDeployData.js'\nexport {\n type EncodeErrorResultErrorType,\n type EncodeErrorResultParameters,\n type EncodeErrorResultReturnType,\n encodeErrorResult,\n} from './utils/abi/encodeErrorResult.js'\nexport {\n type EncodeEventTopicsErrorType,\n type EncodeEventTopicsParameters,\n type EncodeEventTopicsReturnType,\n encodeEventTopics,\n} from './utils/abi/encodeEventTopics.js'\nexport {\n type EncodeFunctionDataErrorType,\n type EncodeFunctionDataParameters,\n type EncodeFunctionDataReturnType,\n encodeFunctionData,\n} from './utils/abi/encodeFunctionData.js'\nexport {\n type EncodeFunctionResultErrorType,\n type EncodeFunctionResultParameters,\n type EncodeFunctionResultReturnType,\n encodeFunctionResult,\n} from './utils/abi/encodeFunctionResult.js'\nexport {\n type EncodePackedErrorType,\n encodePacked,\n} from './utils/abi/encodePacked.js'\nexport {\n type GetAbiItemErrorType,\n type GetAbiItemParameters,\n type GetAbiItemReturnType,\n getAbiItem,\n} from './utils/abi/getAbiItem.js'\nexport {\n type ParseEventLogsErrorType,\n type ParseEventLogsParameters,\n type ParseEventLogsReturnType,\n parseEventLogs,\n} from './utils/abi/parseEventLogs.js'\nexport {\n type PrepareEncodeFunctionDataErrorType,\n type PrepareEncodeFunctionDataParameters,\n type PrepareEncodeFunctionDataReturnType,\n prepareEncodeFunctionData,\n} from './utils/abi/prepareEncodeFunctionData.js'\nexport {\n type ChecksumAddressErrorType,\n checksumAddress,\n type GetAddressErrorType,\n getAddress,\n} from './utils/address/getAddress.js'\nexport {\n type GetContractAddressOptions,\n type GetCreate2AddressErrorType,\n type GetCreate2AddressOptions,\n type GetCreateAddressErrorType,\n type GetCreateAddressOptions,\n getContractAddress,\n getCreate2Address,\n getCreateAddress,\n} from './utils/address/getContractAddress.js'\nexport {\n type IsAddressErrorType,\n type IsAddressOptions,\n isAddress,\n} from './utils/address/isAddress.js'\nexport {\n type IsAddressEqualErrorType,\n type IsAddressEqualReturnType,\n isAddressEqual,\n} from './utils/address/isAddressEqual.js'\nexport {\n type BlobsToCommitmentsErrorType,\n type BlobsToCommitmentsParameters,\n type BlobsToCommitmentsReturnType,\n blobsToCommitments,\n} from './utils/blob/blobsToCommitments.js'\nexport {\n blobsToProofs,\n type blobsToProofsErrorType,\n type blobsToProofsParameters,\n type blobsToProofsReturnType,\n} from './utils/blob/blobsToProofs.js'\nexport {\n type CommitmentsToVersionedHashesErrorType,\n type CommitmentsToVersionedHashesParameters,\n type CommitmentsToVersionedHashesReturnType,\n commitmentsToVersionedHashes,\n} from './utils/blob/commitmentsToVersionedHashes.js'\nexport {\n type CommitmentToVersionedHashErrorType,\n type CommitmentToVersionedHashParameters,\n type CommitmentToVersionedHashReturnType,\n commitmentToVersionedHash,\n} from './utils/blob/commitmentToVersionedHash.js'\nexport {\n type FromBlobsErrorType,\n type FromBlobsParameters,\n type FromBlobsReturnType,\n fromBlobs,\n} from './utils/blob/fromBlobs.js'\nexport {\n type SidecarsToVersionedHashesErrorType,\n type SidecarsToVersionedHashesParameters,\n type SidecarsToVersionedHashesReturnType,\n sidecarsToVersionedHashes,\n} from './utils/blob/sidecarsToVersionedHashes.js'\nexport {\n type ToBlobSidecarsErrorType,\n type ToBlobSidecarsParameters,\n type ToBlobSidecarsReturnType,\n toBlobSidecars,\n} from './utils/blob/toBlobSidecars.js'\nexport {\n type ToBlobsErrorType,\n type ToBlobsParameters,\n type ToBlobsReturnType,\n toBlobs,\n} from './utils/blob/toBlobs.js'\nexport {\n type CcipRequestErrorType,\n type CcipRequestParameters,\n ccipRequest,\n /** @deprecated Use `ccipRequest`. */\n ccipRequest as ccipFetch,\n type OffchainLookupErrorType,\n offchainLookup,\n offchainLookupAbiItem,\n offchainLookupSignature,\n} from './utils/ccip.js'\nexport {\n type AssertCurrentChainErrorType,\n type AssertCurrentChainParameters,\n assertCurrentChain,\n} from './utils/chain/assertCurrentChain.js'\nexport { defineChain } from './utils/chain/defineChain.js'\nexport {\n type ExtractChainErrorType,\n type ExtractChainParameters,\n type ExtractChainReturnType,\n extractChain,\n} from './utils/chain/extractChain.js'\nexport {\n type GetChainContractAddressErrorType,\n getChainContractAddress,\n} from './utils/chain/getChainContractAddress.js'\nexport {\n type ConcatBytesErrorType,\n type ConcatErrorType,\n type ConcatHexErrorType,\n type ConcatReturnType,\n concat,\n concatBytes,\n concatHex,\n} from './utils/data/concat.js'\nexport { type IsBytesErrorType, isBytes } from './utils/data/isBytes.js'\nexport { type IsHexErrorType, isHex } from './utils/data/isHex.js'\nexport {\n type PadBytesErrorType,\n type PadErrorType,\n type PadHexErrorType,\n type PadReturnType,\n pad,\n padBytes,\n padHex,\n} from './utils/data/pad.js'\nexport { type SizeErrorType, size } from './utils/data/size.js'\nexport {\n type SliceBytesErrorType,\n type SliceErrorType,\n type SliceHexErrorType,\n slice,\n sliceBytes,\n sliceHex,\n} from './utils/data/slice.js'\nexport {\n type TrimErrorType,\n type TrimReturnType,\n trim,\n} from './utils/data/trim.js'\nexport {\n type BytesToBigIntErrorType,\n type BytesToBigIntOpts,\n type BytesToBoolErrorType,\n type BytesToBoolOpts,\n type BytesToNumberErrorType,\n type BytesToNumberOpts,\n type BytesToStringErrorType,\n type BytesToStringOpts,\n bytesToBigInt,\n bytesToBool,\n bytesToNumber,\n bytesToString,\n type FromBytesErrorType,\n type FromBytesParameters,\n fromBytes,\n} from './utils/encoding/fromBytes.js'\nexport {\n type FromHexErrorType,\n fromHex,\n type HexToBigIntErrorType,\n type HexToBoolErrorType,\n type HexToNumberErrorType,\n type HexToStringErrorType,\n hexToBigInt,\n hexToBool,\n hexToNumber,\n hexToString,\n} from './utils/encoding/fromHex.js'\nexport {\n type FromRlpErrorType,\n type FromRlpReturnType,\n fromRlp,\n} from './utils/encoding/fromRlp.js'\nexport {\n type BoolToBytesErrorType,\n type BoolToBytesOpts,\n boolToBytes,\n type HexToBytesErrorType,\n type HexToBytesOpts,\n hexToBytes,\n type NumberToBytesErrorType,\n numberToBytes,\n type StringToBytesErrorType,\n type StringToBytesOpts,\n stringToBytes,\n type ToBytesErrorType,\n type ToBytesParameters,\n toBytes,\n} from './utils/encoding/toBytes.js'\nexport {\n type BoolToHexErrorType,\n type BoolToHexOpts,\n type BytesToHexErrorType,\n type BytesToHexOpts,\n boolToHex,\n bytesToHex,\n type NumberToHexErrorType,\n type NumberToHexOpts,\n numberToHex,\n type StringToHexErrorType,\n type StringToHexOpts,\n stringToHex,\n type ToHexErrorType,\n type ToHexParameters,\n toHex,\n} from './utils/encoding/toHex.js'\nexport {\n type BytesToRlpErrorType,\n bytesToRlp,\n type HexToRlpErrorType,\n hexToRlp,\n type ToRlpErrorType,\n type ToRlpReturnType,\n toRlp,\n} from './utils/encoding/toRlp.js'\nexport { type LabelhashErrorType, labelhash } from './utils/ens/labelhash.js'\nexport { type NamehashErrorType, namehash } from './utils/ens/namehash.js'\nexport {\n type ToCoinTypeError,\n toCoinType,\n} from './utils/ens/toCoinType.js'\nexport {\n type GetContractErrorReturnType,\n getContractError,\n} from './utils/errors/getContractError.js'\nexport {\n type DefineBlockErrorType,\n defineBlock,\n type FormatBlockErrorType,\n type FormattedBlock,\n formatBlock,\n} from './utils/formatters/block.js'\nexport { type FormatLogErrorType, formatLog } from './utils/formatters/log.js'\nexport {\n type DefineTransactionErrorType,\n defineTransaction,\n type FormatTransactionErrorType,\n type FormattedTransaction,\n formatTransaction,\n transactionType,\n} from './utils/formatters/transaction.js'\nexport {\n type DefineTransactionReceiptErrorType,\n defineTransactionReceipt,\n type FormatTransactionReceiptErrorType,\n type FormattedTransactionReceipt,\n formatTransactionReceipt,\n} from './utils/formatters/transactionReceipt.js'\nexport {\n type DefineTransactionRequestErrorType,\n defineTransactionRequest,\n type FormatTransactionRequestErrorType,\n type FormattedTransactionRequest,\n formatTransactionRequest,\n rpcTransactionType,\n} from './utils/formatters/transactionRequest.js'\nexport { type IsHashErrorType, isHash } from './utils/hash/isHash.js'\nexport {\n type Keccak256ErrorType,\n type Keccak256Hash,\n keccak256,\n} from './utils/hash/keccak256.js'\nexport {\n type Ripemd160ErrorType,\n type Ripemd160Hash,\n ripemd160,\n} from './utils/hash/ripemd160.js'\nexport {\n type Sha256ErrorType,\n type Sha256Hash,\n sha256,\n} from './utils/hash/sha256.js'\nexport {\n type ToEventHashErrorType,\n toEventHash,\n} from './utils/hash/toEventHash.js'\nexport {\n type ToEventSelectorErrorType,\n /** @deprecated use `ToEventSelectorErrorType`. */\n type ToEventSelectorErrorType as GetEventSelectorErrorType,\n toEventSelector,\n /** @deprecated use `toEventSelector`. */\n toEventSelector as getEventSelector,\n} from './utils/hash/toEventSelector.js'\nexport {\n type ToEventSignatureErrorType,\n /** @deprecated use `ToEventSignatureErrorType`. */\n type ToEventSignatureErrorType as GetEventSignatureErrorType,\n toEventSignature,\n /** @deprecated use `toEventSignature`. */\n toEventSignature as getEventSignature,\n} from './utils/hash/toEventSignature.js'\nexport {\n type ToFunctionHashErrorType,\n toFunctionHash,\n} from './utils/hash/toFunctionHash.js'\nexport {\n type ToFunctionSelectorErrorType,\n /** @deprecated use `ToFunctionSelectorErrorType`. */\n type ToFunctionSelectorErrorType as GetFunctionSelectorErrorType,\n toFunctionSelector,\n /** @deprecated use `toFunctionSelector`. */\n toFunctionSelector as getFunctionSelector,\n} from './utils/hash/toFunctionSelector.js'\nexport {\n type ToFunctionSignatureErrorType,\n /** @deprecated use `ToFunctionSignatureErrorType`. */\n type ToFunctionSignatureErrorType as GetFunctionSignatureErrorType,\n toFunctionSignature,\n /** @deprecated use `toFunctionSignature`. */\n toFunctionSignature as getFunctionSignature,\n} from './utils/hash/toFunctionSignature.js'\nexport {\n type DefineKzgErrorType,\n type DefineKzgParameters,\n type DefineKzgReturnType,\n defineKzg,\n} from './utils/kzg/defineKzg.js'\nexport {\n type SetupKzgErrorType,\n type SetupKzgParameters,\n type SetupKzgReturnType,\n setupKzg,\n} from './utils/kzg/setupKzg.js'\nexport {\n type CreateNonceManagerParameters,\n createNonceManager,\n type NonceManager,\n type NonceManagerSource,\n nonceManager,\n} from './utils/nonceManager.js'\nexport { withCache } from './utils/promise/withCache.js'\nexport {\n type WithRetryErrorType,\n withRetry,\n} from './utils/promise/withRetry.js'\nexport {\n type WithTimeoutErrorType,\n withTimeout,\n} from './utils/promise/withTimeout.js'\nexport {\n type CompactSignatureToSignatureErrorType,\n compactSignatureToSignature,\n} from './utils/signature/compactSignatureToSignature.js'\nexport {\n type HashMessageErrorType,\n hashMessage,\n} from './utils/signature/hashMessage.js'\nexport {\n type HashDomainErrorType,\n type HashStructErrorType,\n type HashTypedDataErrorType,\n type HashTypedDataParameters,\n type HashTypedDataReturnType,\n hashDomain,\n hashStruct,\n hashTypedData,\n} from './utils/signature/hashTypedData.js'\nexport {\n type IsErc6492SignatureErrorType,\n type IsErc6492SignatureParameters,\n type IsErc6492SignatureReturnType,\n isErc6492Signature,\n} from './utils/signature/isErc6492Signature.js'\nexport {\n type IsErc8010SignatureErrorType,\n type IsErc8010SignatureParameters,\n type IsErc8010SignatureReturnType,\n isErc8010Signature,\n} from './utils/signature/isErc8010Signature.js'\nexport {\n /** @deprecated Use `ParseCompactSignatureErrorType`. */\n type ParseCompactSignatureErrorType as HexToCompactSignatureErrorType,\n type ParseCompactSignatureErrorType,\n /** @deprecated Use `parseCompactSignature`. */\n parseCompactSignature as hexToCompactSignature,\n parseCompactSignature,\n} from './utils/signature/parseCompactSignature.js'\nexport {\n type ParseErc6492SignatureErrorType,\n type ParseErc6492SignatureParameters,\n type ParseErc6492SignatureReturnType,\n parseErc6492Signature,\n} from './utils/signature/parseErc6492Signature.js'\nexport {\n type ParseErc8010SignatureErrorType,\n type ParseErc8010SignatureParameters,\n type ParseErc8010SignatureReturnType,\n parseErc8010Signature,\n} from './utils/signature/parseErc8010Signature.js'\nexport {\n /** @deprecated Use `ParseSignatureErrorType`. */\n type ParseSignatureErrorType as HexToSignatureErrorType,\n type ParseSignatureErrorType,\n /** @deprecated Use `parseSignature`. */\n parseSignature as hexToSignature,\n parseSignature,\n} from './utils/signature/parseSignature.js'\nexport {\n type RecoverAddressErrorType,\n type RecoverAddressParameters,\n type RecoverAddressReturnType,\n recoverAddress,\n} from './utils/signature/recoverAddress.js'\nexport {\n type RecoverMessageAddressErrorType,\n type RecoverMessageAddressParameters,\n type RecoverMessageAddressReturnType,\n recoverMessageAddress,\n} from './utils/signature/recoverMessageAddress.js'\nexport {\n type RecoverPublicKeyErrorType,\n type RecoverPublicKeyParameters,\n type RecoverPublicKeyReturnType,\n recoverPublicKey,\n} from './utils/signature/recoverPublicKey.js'\nexport {\n type RecoverTransactionAddressErrorType,\n type RecoverTransactionAddressParameters,\n type RecoverTransactionAddressReturnType,\n recoverTransactionAddress,\n} from './utils/signature/recoverTransactionAddress.js'\nexport {\n type RecoverTypedDataAddressErrorType,\n type RecoverTypedDataAddressParameters,\n type RecoverTypedDataAddressReturnType,\n recoverTypedDataAddress,\n} from './utils/signature/recoverTypedDataAddress.js'\nexport {\n /** @deprecated Use `SignatureToHexErrorType` instead. */\n type SerializeCompactSignatureErrorType as CompactSignatureToHexErrorType,\n type SerializeCompactSignatureErrorType,\n /** @deprecated Use `serializeCompactSignature` instead. */\n serializeCompactSignature as compactSignatureToHex,\n serializeCompactSignature,\n} from './utils/signature/serializeCompactSignature.js'\nexport {\n type SerializeErc6492SignatureErrorType,\n type SerializeErc6492SignatureParameters,\n type SerializeErc6492SignatureReturnType,\n serializeErc6492Signature,\n} from './utils/signature/serializeErc6492Signature.js'\nexport {\n type SerializeErc8010SignatureErrorType,\n type SerializeErc8010SignatureParameters,\n type SerializeErc8010SignatureReturnType,\n serializeErc8010Signature,\n} from './utils/signature/serializeErc8010Signature.js'\nexport {\n /** @deprecated Use `SignatureToHexErrorType` instead. */\n type SerializeSignatureErrorType as SignatureToHexErrorType,\n type SerializeSignatureErrorType,\n type SerializeSignatureParameters,\n type SerializeSignatureReturnType,\n /** @deprecated Use `serializeSignature` instead. */\n serializeSignature as signatureToHex,\n serializeSignature,\n} from './utils/signature/serializeSignature.js'\nexport {\n type SignatureToCompactSignatureErrorType,\n signatureToCompactSignature,\n} from './utils/signature/signatureToCompactSignature.js'\nexport {\n type ToPrefixedMessageErrorType,\n toPrefixedMessage,\n} from './utils/signature/toPrefixedMessage.js'\nexport {\n type VerifyHashErrorType,\n type VerifyHashParameters,\n type VerifyHashReturnType,\n verifyHash,\n} from './utils/signature/verifyHash.js'\nexport {\n type VerifyMessageErrorType,\n type VerifyMessageParameters,\n type VerifyMessageReturnType,\n verifyMessage,\n} from './utils/signature/verifyMessage.js'\nexport {\n type VerifyTypedDataErrorType,\n type VerifyTypedDataParameters,\n type VerifyTypedDataReturnType,\n verifyTypedData,\n} from './utils/signature/verifyTypedData.js'\nexport { type StringifyErrorType, stringify } from './utils/stringify.js'\nexport {\n type AssertRequestErrorType,\n assertRequest,\n} from './utils/transaction/assertRequest.js'\nexport {\n type AssertTransactionEIP1559ErrorType,\n type AssertTransactionEIP2930ErrorType,\n type AssertTransactionLegacyErrorType,\n assertTransactionEIP1559,\n assertTransactionEIP2930,\n assertTransactionLegacy,\n} from './utils/transaction/assertTransaction.js'\nexport {\n type GetSerializedTransactionType,\n type GetSerializedTransactionTypeErrorType,\n getSerializedTransactionType,\n} from './utils/transaction/getSerializedTransactionType.js'\nexport {\n type GetTransactionType,\n type GetTransactionTypeErrorType,\n getTransactionType,\n} from './utils/transaction/getTransactionType.js'\nexport {\n type ParseTransactionErrorType,\n type ParseTransactionReturnType,\n parseTransaction,\n} from './utils/transaction/parseTransaction.js'\nexport {\n type SerializeAccessListErrorType,\n serializeAccessList,\n} from './utils/transaction/serializeAccessList.js'\nexport {\n type SerializedTransactionReturnType,\n type SerializeTransactionErrorType,\n type SerializeTransactionFn,\n serializeTransaction,\n} from './utils/transaction/serializeTransaction.js'\nexport {\n type DomainSeparatorErrorType,\n domainSeparator,\n type GetTypesForEIP712DomainErrorType,\n getTypesForEIP712Domain,\n type SerializeTypedDataErrorType,\n serializeTypedData,\n type ValidateTypedDataErrorType,\n validateTypedData,\n} from './utils/typedData.js'\nexport {\n type FormatEtherErrorType,\n formatEther,\n} from './utils/unit/formatEther.js'\nexport {\n type FormatGweiErrorType,\n formatGwei,\n} from './utils/unit/formatGwei.js'\nexport {\n type FormatUnitsErrorType,\n formatUnits,\n} from './utils/unit/formatUnits.js'\nexport {\n type ParseEtherErrorType,\n parseEther,\n} from './utils/unit/parseEther.js'\nexport { type ParseGweiErrorType, parseGwei } from './utils/unit/parseGwei.js'\nexport {\n type ParseUnitsErrorType,\n parseUnits,\n} from './utils/unit/parseUnits.js'\n","import { useReducer, useCallback, useEffect } from \"react\";\nimport {\n useVolrContext,\n useInternalAuth,\n useVolr,\n useVolrPaymentApi,\n type PaymentResult,\n} from \"@volr/react\";\nimport { useVolrModal, type PaymentModalOptions } from \"./useVolrModal\";\nimport { erc20Abi } from \"viem\";\n\n// ============ Types ============\n\ntype PaymentStep = \"info\" | \"processing\" | \"result\";\ntype ProcessingStep = \"signing\" | \"broadcasting\" | \"confirming\";\n\ninterface PaymentError {\n code: string;\n message: string;\n}\n\ninterface PaymentModalState {\n step: PaymentStep;\n processingStep: ProcessingStep;\n balance: string;\n isBalanceLoading: boolean;\n isConfigLoading: boolean;\n isPaying: boolean;\n currentPayment: PaymentResult | null;\n txHash: string | undefined;\n error: PaymentError | undefined;\n logoUrl: string | undefined;\n receiverAddress: string | null;\n showDeposit: boolean;\n}\n\n// ============ Actions ============\n\ntype PaymentModalAction =\n | { type: \"RESET\" }\n | { type: \"INIT_PAYMENT\"; payment: PaymentResult }\n | { type: \"SET_BALANCE\"; balance: string }\n | { type: \"SET_BALANCE_LOADING\"; loading: boolean }\n | { type: \"SET_CONFIG_LOADING\"; loading: boolean }\n | { type: \"SET_LOGO_URL\"; logoUrl: string | undefined }\n | { type: \"SET_RECEIVER_ADDRESS\"; receiverAddress: string | null }\n | { type: \"START_PAYMENT\" }\n | { type: \"SET_PROCESSING_STEP\"; step: ProcessingStep }\n | { type: \"SET_TX_HASH\"; txHash: string }\n | { type: \"PAYMENT_SUCCESS\"; payment: PaymentResult }\n | { type: \"PAYMENT_ERROR\"; error: PaymentError }\n | { type: \"RETRY\" }\n | { type: \"SHOW_DEPOSIT\" }\n | { type: \"HIDE_DEPOSIT\" };\n\n// ============ Reducer ============\n\nconst initialState: PaymentModalState = {\n step: \"info\",\n processingStep: \"signing\",\n balance: \"0\",\n isBalanceLoading: true,\n isConfigLoading: true,\n isPaying: false,\n currentPayment: null,\n txHash: undefined,\n error: undefined,\n logoUrl: undefined,\n receiverAddress: null,\n showDeposit: false,\n};\n\nfunction paymentModalReducer(\n state: PaymentModalState,\n action: PaymentModalAction\n): PaymentModalState {\n switch (action.type) {\n case \"RESET\":\n return { ...initialState };\n\n case \"INIT_PAYMENT\":\n return {\n ...initialState,\n currentPayment: action.payment,\n isBalanceLoading: true,\n isConfigLoading: true,\n };\n\n case \"SET_BALANCE\":\n return { ...state, balance: action.balance };\n\n case \"SET_BALANCE_LOADING\":\n return { ...state, isBalanceLoading: action.loading };\n\n case \"SET_CONFIG_LOADING\":\n return { ...state, isConfigLoading: action.loading };\n\n case \"SET_LOGO_URL\":\n return { ...state, logoUrl: action.logoUrl };\n\n case \"SET_RECEIVER_ADDRESS\":\n return { ...state, receiverAddress: action.receiverAddress };\n\n case \"START_PAYMENT\":\n return {\n ...state,\n isPaying: true,\n step: \"processing\",\n processingStep: \"signing\",\n error: undefined,\n };\n\n case \"SET_PROCESSING_STEP\":\n return { ...state, processingStep: action.step };\n\n case \"SET_TX_HASH\":\n return { ...state, txHash: action.txHash };\n\n case \"PAYMENT_SUCCESS\":\n return {\n ...state,\n isPaying: false,\n step: \"result\",\n currentPayment: action.payment,\n };\n\n case \"PAYMENT_ERROR\":\n return {\n ...state,\n isPaying: false,\n step: \"result\",\n error: action.error,\n };\n\n case \"RETRY\":\n return {\n ...state,\n step: \"info\",\n error: undefined,\n isBalanceLoading: true,\n };\n\n case \"SHOW_DEPOSIT\":\n return { ...state, showDeposit: true };\n\n case \"HIDE_DEPOSIT\":\n return { ...state, showDeposit: false, isBalanceLoading: true };\n\n default:\n return state;\n }\n}\n\n// ============ Hook ============\n\nexport interface UsePaymentModalStateReturn {\n state: PaymentModalState;\n // Actions\n handlePay: () => Promise<void>;\n handleDeposit: () => void;\n handleDepositClose: (open: boolean) => void;\n handleDone: () => void;\n handleRetry: () => void;\n handleClose: () => void;\n handleReport: () => Promise<void>;\n // Helpers\n canClose: boolean;\n isConfigured: boolean;\n}\n\nexport function usePaymentModalState(\n open: boolean,\n onOpenChange: (open: boolean) => void\n): UsePaymentModalStateReturn {\n const { user } = useVolrContext();\n const { client } = useInternalAuth();\n const { evm } = useVolr();\n const { paymentOptions } = useVolrModal();\n const { updatePaymentToProcessing, pollPaymentStatus } = useVolrPaymentApi();\n\n const [state, dispatch] = useReducer(paymentModalReducer, initialState);\n\n // ============ Data Fetching ============\n\n const fetchBalance = useCallback(\n async (payment: PaymentResult) => {\n if (!user?.evmAddress) {\n dispatch({ type: \"SET_BALANCE_LOADING\", loading: false });\n return;\n }\n\n dispatch({ type: \"SET_BALANCE_LOADING\", loading: true });\n try {\n const evmClient = evm(payment.token.chainId);\n const tokenAddress = payment.token.id.split(\"_\")[1];\n let balanceRaw: bigint;\n\n if (tokenAddress === \"native\") {\n balanceRaw = await evmClient.getBalance(user.evmAddress);\n } else {\n balanceRaw = (await evmClient.readContract({\n address: tokenAddress as `0x${string}`,\n abi: erc20Abi,\n functionName: \"balanceOf\",\n args: [user.evmAddress],\n })) as bigint;\n }\n\n const balanceNum =\n Number(balanceRaw) / Math.pow(10, payment.token.decimals);\n const formattedBalance = balanceNum.toLocaleString(undefined, {\n minimumFractionDigits: 0,\n maximumFractionDigits:\n payment.token.decimals > 6 ? 6 : payment.token.decimals,\n });\n\n dispatch({ type: \"SET_BALANCE\", balance: formattedBalance });\n } catch (err) {\n console.error(\"Failed to fetch balance:\", err);\n dispatch({ type: \"SET_BALANCE\", balance: \"0\" });\n } finally {\n dispatch({ type: \"SET_BALANCE_LOADING\", loading: false });\n }\n },\n [user, evm]\n );\n\n const fetchBranding = useCallback(async () => {\n try {\n const response = await client.get<{ logoUrl?: string }>(\"/auth/branding\");\n dispatch({ type: \"SET_LOGO_URL\", logoUrl: response.logoUrl });\n } catch {\n // Ignore branding errors\n }\n }, [client]);\n\n const fetchPaymentConfig = useCallback(async () => {\n dispatch({ type: \"SET_CONFIG_LOADING\", loading: true });\n try {\n const response = await client.get<{ receiverAddress: string }>(\n \"/payments/config\"\n );\n dispatch({\n type: \"SET_RECEIVER_ADDRESS\",\n receiverAddress: response.receiverAddress,\n });\n } catch (err) {\n console.error(\"Failed to fetch payment config:\", err);\n dispatch({ type: \"SET_RECEIVER_ADDRESS\", receiverAddress: null });\n } finally {\n dispatch({ type: \"SET_CONFIG_LOADING\", loading: false });\n }\n }, [client]);\n\n // ============ Effects ============\n\n // Initialize payment when modal opens - but NOT if already processing\n useEffect(() => {\n if (open && paymentOptions) {\n // Don't reset if already processing or showing result\n if (state.step === \"processing\" || state.step === \"result\") {\n return;\n }\n dispatch({ type: \"INIT_PAYMENT\", payment: paymentOptions.payment });\n fetchBalance(paymentOptions.payment);\n fetchBranding();\n fetchPaymentConfig();\n } else if (!open) {\n dispatch({ type: \"RESET\" });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open, paymentOptions?.payment?.id]);\n\n // ============ Handlers ============\n\n const handlePay = useCallback(async () => {\n const { currentPayment, receiverAddress } = state;\n if (!currentPayment || !user?.evmAddress || !paymentOptions || !receiverAddress) {\n return;\n }\n\n dispatch({ type: \"START_PAYMENT\" });\n\n try {\n const evmClient = evm(currentPayment.token.chainId);\n const tokenAddress = currentPayment.token.id.split(\"_\")[1];\n\n dispatch({ type: \"SET_PROCESSING_STEP\", step: \"broadcasting\" });\n\n let result;\n if (tokenAddress === \"native\") {\n result = await evmClient.sendTransaction({\n to: receiverAddress as `0x${string}`,\n data: \"0x\",\n value: BigInt(currentPayment.amount),\n });\n } else {\n result = await evmClient.sendBatch([\n {\n target: tokenAddress as `0x${string}`,\n abi: erc20Abi,\n functionName: \"transfer\",\n args: [\n receiverAddress as `0x${string}`,\n BigInt(currentPayment.amount),\n ],\n },\n ]);\n }\n\n dispatch({ type: \"SET_TX_HASH\", txHash: result.txHash ?? \"\" });\n dispatch({ type: \"SET_PROCESSING_STEP\", step: \"confirming\" });\n\n await updatePaymentToProcessing(currentPayment.id, result.txId);\n\n paymentOptions.onProcessing?.({\n ...currentPayment,\n txHash: result.txHash ?? \"\",\n status: \"PROCESSING\",\n });\n\n const confirmedPayment = await pollPaymentStatus(currentPayment.id);\n\n dispatch({ type: \"PAYMENT_SUCCESS\", payment: confirmedPayment });\n\n if (confirmedPayment.status === \"CONFIRMED\") {\n paymentOptions.onComplete?.(confirmedPayment);\n } else if (confirmedPayment.status === \"FAILED\") {\n const failError = {\n code: \"PAYMENT_FAILED\",\n message: \"Transaction failed on-chain\",\n };\n dispatch({ type: \"PAYMENT_ERROR\", error: failError });\n paymentOptions.onError?.(failError);\n }\n } catch (err: any) {\n console.error(\"Payment failed:\", err);\n const paymentError = {\n code: err.code || \"PAYMENT_FAILED\",\n message: err.message || \"Payment failed. Please try again.\",\n };\n dispatch({ type: \"PAYMENT_ERROR\", error: paymentError });\n paymentOptions?.onError?.(paymentError);\n }\n }, [\n state,\n user,\n paymentOptions,\n evm,\n updatePaymentToProcessing,\n pollPaymentStatus,\n ]);\n\n const handleDeposit = useCallback(() => {\n dispatch({ type: \"SHOW_DEPOSIT\" });\n }, []);\n\n const handleDepositClose = useCallback(\n (depositOpen: boolean) => {\n if (!depositOpen) {\n dispatch({ type: \"HIDE_DEPOSIT\" });\n if (state.currentPayment) {\n fetchBalance(state.currentPayment);\n }\n }\n },\n [state.currentPayment, fetchBalance]\n );\n\n const handleDone = useCallback(() => {\n if (state.currentPayment?.status === \"CONFIRMED\") {\n paymentOptions?.onComplete?.(state.currentPayment);\n }\n onOpenChange(false);\n }, [state.currentPayment, paymentOptions, onOpenChange]);\n\n const handleRetry = useCallback(() => {\n dispatch({ type: \"RETRY\" });\n if (state.currentPayment) {\n fetchBalance(state.currentPayment);\n }\n }, [state.currentPayment, fetchBalance]);\n\n const handleClose = useCallback(() => {\n if (state.step === \"processing\") {\n return;\n }\n if (state.step === \"info\") {\n paymentOptions?.onCancel?.();\n }\n onOpenChange(false);\n }, [state.step, paymentOptions, onOpenChange]);\n\n const handleReport = useCallback(async () => {\n const { currentPayment, error, step, txHash } = state;\n if (!currentPayment || !error) return;\n\n try {\n await client.post(`/payments/${currentPayment.id}/report`, {\n errorCode: error.code,\n errorMessage: error.message,\n platform: \"web\",\n context: {\n step,\n txHash,\n tokenId: currentPayment.token.id,\n chainId: currentPayment.token.chainId,\n amount: currentPayment.amount,\n },\n });\n\n alert(\"Error report submitted. Thank you for your feedback.\");\n } catch (err) {\n console.error(\"Failed to submit error report:\", err);\n alert(\n `Error Code: ${error.code}\\n\\nMessage: ${error.message}\\n\\nPlease contact support with this information.`\n );\n }\n }, [state, client]);\n\n // ============ Computed ============\n\n const canClose = state.step !== \"processing\";\n const isConfigured = state.receiverAddress !== null;\n\n return {\n state,\n handlePay,\n handleDeposit,\n handleDepositClose,\n handleDone,\n handleRetry,\n handleClose,\n handleReport,\n canClose,\n isConfigured,\n };\n}\n\n","import React from \"react\";\n\nexport const PaymentSkeleton: React.FC = () => {\n return (\n <div className=\"volr:space-y-6 volr:animate-pulse\">\n {/* Item placeholder */}\n <div className=\"volr:flex volr:items-center volr:gap-4\">\n <div className=\"volr:w-16 volr:h-16 volr:bg-slate-200 volr:rounded-xl\" />\n <div className=\"volr:flex-1 volr:space-y-2\">\n <div className=\"volr:h-5 volr:bg-slate-200 volr:rounded volr:w-32\" />\n <div className=\"volr:h-4 volr:bg-slate-100 volr:rounded volr:w-48\" />\n </div>\n </div>\n\n {/* Divider */}\n <div className=\"volr:h-px volr:bg-slate-200\" />\n\n {/* Amount placeholder */}\n <div className=\"volr:space-y-2\">\n <div className=\"volr:h-4 volr:bg-slate-100 volr:rounded volr:w-20\" />\n <div className=\"volr:h-8 volr:bg-slate-200 volr:rounded volr:w-40\" />\n <div className=\"volr:h-4 volr:bg-slate-100 volr:rounded volr:w-24\" />\n </div>\n\n {/* Balance placeholder */}\n <div className=\"volr:flex volr:justify-between volr:items-center volr:p-3 volr:bg-slate-50 volr:rounded-lg\">\n <div className=\"volr:h-4 volr:bg-slate-200 volr:rounded volr:w-24\" />\n <div className=\"volr:h-4 volr:bg-slate-200 volr:rounded volr:w-20\" />\n </div>\n\n {/* Button placeholder */}\n <div className=\"volr:h-12 volr:bg-slate-200 volr:rounded-lg\" />\n </div>\n );\n};\n\n\n\n","import React from \"react\";\n\ninterface BalanceDisplayProps {\n balance: string;\n symbol: string;\n required: string;\n isInsufficient: boolean;\n}\n\nexport const BalanceDisplay: React.FC<BalanceDisplayProps> = ({\n balance,\n symbol,\n required,\n isInsufficient,\n}) => {\n return (\n <div\n className={`volr:flex volr:justify-between volr:items-center volr:p-3 volr:rounded-lg ${\n isInsufficient\n ? \"volr:bg-red-50 volr:border volr:border-red-200\"\n : \"volr:bg-slate-50\"\n }`}\n >\n <span className=\"volr:text-sm volr:text-slate-600\">Your Balance</span>\n <div className=\"volr:text-right\">\n <span\n className={`volr:text-sm volr:font-medium ${\n isInsufficient ? \"volr:text-red-600\" : \"volr:text-slate-900\"\n }`}\n >\n {balance} {symbol}\n </span>\n {isInsufficient && (\n <p className=\"volr:text-xs volr:text-red-500 volr:mt-0.5\">\n Need {required} {symbol}\n </p>\n )}\n </div>\n </div>\n );\n};\n\n\n\n","import React from \"react\";\n\ninterface ItemDisplayProps {\n name: string;\n description?: string;\n image?: string;\n logoUrl?: string; // Branding logo from dashboard\n}\n\nexport const ItemDisplay: React.FC<ItemDisplayProps> = ({\n name,\n description,\n image,\n logoUrl,\n}) => {\n const displayImage = image || logoUrl;\n\n return (\n <div className=\"volr:flex volr:items-start volr:gap-4\">\n {displayImage ? (\n <img\n src={displayImage}\n alt={name}\n className=\"volr:w-16 volr:h-16 volr:rounded-xl volr:object-cover volr:bg-slate-100\"\n onError={(e) => {\n (e.target as HTMLImageElement).style.display = \"none\";\n }}\n />\n ) : (\n <div className=\"volr:w-16 volr:h-16 volr:rounded-xl volr:bg-slate-100 volr:flex volr:items-center volr:justify-center\">\n <svg\n className=\"volr:w-8 volr:h-8 volr:text-slate-400\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n d=\"M20 7l-8-4-8 4m16 0l-8 4m8-4v10l-8 4m0-10L4 7m8 4v10M4 7v10l8 4\"\n />\n </svg>\n </div>\n )}\n <div className=\"volr:flex-1 volr:min-w-0\">\n <h3 className=\"volr:text-base volr:font-semibold volr:text-slate-900 volr:truncate\">\n {name}\n </h3>\n {description && (\n <p className=\"volr:text-sm volr:text-slate-500 volr:mt-0.5 volr:line-clamp-2\">\n {description}\n </p>\n )}\n </div>\n </div>\n );\n};\n\n\n\n","import React from \"react\";\nimport { Button } from \"@/components/materials/Button\";\nimport { PoweredBy } from \"@/components/materials/PoweredBy\";\nimport { ItemDisplay, BalanceDisplay } from \"../components\";\nimport type { PaymentResult } from \"@volr/react\";\n\ninterface PaymentInfoViewProps {\n payment: PaymentResult;\n balance: string;\n isBalanceLoading: boolean;\n logoUrl?: string;\n onPay: () => void;\n onDeposit: () => void;\n isPaying: boolean;\n}\n\nexport const PaymentInfoView: React.FC<PaymentInfoViewProps> = ({\n payment,\n balance,\n isBalanceLoading,\n logoUrl,\n onPay,\n onDeposit,\n isPaying,\n}) => {\n const { token, itemName, itemDescription, itemImage } = payment;\n\n // Parse amount from raw units\n const amountInUnits = Number(payment.amount) / Math.pow(10, token.decimals);\n const formattedAmount = amountInUnits.toLocaleString(undefined, {\n minimumFractionDigits: 0,\n maximumFractionDigits: token.decimals > 6 ? 6 : token.decimals,\n });\n\n // Check if balance is sufficient\n const balanceNum = parseFloat(balance.replace(/,/g, \"\") || \"0\");\n const isInsufficient = !isBalanceLoading && balanceNum < amountInUnits;\n\n return (\n <div className=\"volr:space-y-6\">\n {/* Item Info */}\n {itemName && (\n <>\n <ItemDisplay\n name={itemName}\n description={itemDescription ?? undefined}\n image={itemImage ?? undefined}\n logoUrl={logoUrl}\n />\n <div className=\"volr:h-px volr:bg-slate-200\" />\n </>\n )}\n\n {/* Amount */}\n <div className=\"volr:space-y-1\">\n <p className=\"volr:text-sm volr:text-slate-500\">Amount to Pay</p>\n <div className=\"volr:flex volr:items-baseline volr:gap-2\">\n <span className=\"volr:text-2xl volr:font-bold volr:text-slate-900\">\n {formattedAmount}\n </span>\n <span className=\"volr:text-lg volr:font-medium volr:text-slate-600\">\n {token.symbol}\n </span>\n </div>\n {payment.totalUsd && (\n <p className=\"volr:text-sm volr:text-slate-400\">\n ≈ ${parseFloat(payment.totalUsd).toFixed(2)} USD\n </p>\n )}\n </div>\n\n {/* Balance */}\n {isBalanceLoading ? (\n <div className=\"volr:flex volr:justify-between volr:items-center volr:p-3 volr:bg-slate-50 volr:rounded-lg volr:animate-pulse\">\n <span className=\"volr:text-sm volr:text-slate-400\">Loading balance...</span>\n <div className=\"volr:h-4 volr:bg-slate-200 volr:rounded volr:w-20\" />\n </div>\n ) : (\n <BalanceDisplay\n balance={balance}\n symbol={token.symbol}\n required={formattedAmount}\n isInsufficient={isInsufficient}\n />\n )}\n\n {/* Actions */}\n <div className=\"volr:space-y-3\">\n <Button\n onClick={onPay}\n disabled={isPaying || isBalanceLoading || isInsufficient}\n className=\"volr:w-full\"\n >\n {isPaying ? (\n <span className=\"volr:flex volr:items-center volr:justify-center volr:gap-2\">\n <svg className=\"volr:animate-spin volr:h-4 volr:w-4\" viewBox=\"0 0 24 24\">\n <circle\n className=\"volr:opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n fill=\"none\"\n />\n <path\n className=\"volr:opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n Processing...\n </span>\n ) : isInsufficient ? (\n \"Insufficient Balance\"\n ) : (\n `Pay ${formattedAmount} ${token.symbol}`\n )}\n </Button>\n\n {isInsufficient && (\n <Button variant=\"secondary\" onClick={onDeposit} className=\"volr:w-full\">\n Deposit {token.symbol}\n </Button>\n )}\n </div>\n\n {/* Powered By */}\n <PoweredBy />\n </div>\n );\n};\n\n\n\n","import React from \"react\";\n\ninterface PaymentProcessingViewProps {\n step: \"signing\" | \"broadcasting\" | \"confirming\";\n txHash?: string;\n}\n\nexport const PaymentProcessingView: React.FC<PaymentProcessingViewProps> = ({\n step,\n}) => {\n // Map technical steps to user-friendly messages\n const getStatusMessage = () => {\n switch (step) {\n case \"signing\":\n return \"Waiting for confirmation...\";\n case \"broadcasting\":\n return \"Sending payment...\";\n case \"confirming\":\n return \"Almost done...\";\n default:\n return \"Processing...\";\n }\n };\n\n // Progress percentage for visual feedback\n const getProgress = () => {\n switch (step) {\n case \"signing\":\n return 20;\n case \"broadcasting\":\n return 60;\n case \"confirming\":\n return 90;\n default:\n return 0;\n }\n };\n\n const progress = getProgress();\n\n return (\n <div className=\"volr:space-y-8 volr:py-4\">\n {/* Spinner */}\n <div className=\"volr:flex volr:justify-center\">\n <div className=\"volr:relative volr:w-20 volr:h-20\">\n {/* Background circle */}\n <svg className=\"volr:w-20 volr:h-20\" viewBox=\"0 0 36 36\">\n <circle\n cx=\"18\"\n cy=\"18\"\n r=\"16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n className=\"volr:text-slate-100\"\n />\n {/* Progress arc */}\n <circle\n cx=\"18\"\n cy=\"18\"\n r=\"16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n className=\"volr:text-slate-900 volr:transition-all volr:duration-500\"\n strokeDasharray={`${progress}, 100`}\n style={{\n transform: \"rotate(-90deg)\",\n transformOrigin: \"center\",\n }}\n />\n </svg>\n {/* Center dot animation */}\n <div className=\"volr:absolute volr:inset-0 volr:flex volr:items-center volr:justify-center\">\n <div className=\"volr:w-2 volr:h-2 volr:bg-slate-900 volr:rounded-full volr:animate-pulse\" />\n </div>\n </div>\n </div>\n\n {/* Status Message */}\n <div className=\"volr:text-center volr:space-y-2\">\n <p className=\"volr:text-lg volr:font-medium volr:text-slate-900\">\n {getStatusMessage()}\n </p>\n <p className=\"volr:text-sm volr:text-slate-400\">\n Please don't close this window\n </p>\n </div>\n </div>\n );\n};\n","import React from \"react\";\nimport { Button } from \"@/components/materials/Button\";\nimport { PoweredBy } from \"@/components/materials/PoweredBy\";\nimport type { PaymentResult } from \"@volr/react\";\n\ninterface PaymentResultViewProps {\n payment: PaymentResult;\n error?: { code: string; message: string };\n onDone: () => void;\n onRetry: () => void;\n onReport: () => void;\n}\n\nexport const PaymentResultView: React.FC<PaymentResultViewProps> = ({\n payment,\n error,\n onDone,\n onRetry,\n onReport,\n}) => {\n const isSuccess = payment.status === \"CONFIRMED\";\n const isFailed = payment.status === \"FAILED\" || !!error;\n\n return (\n <div className=\"volr:space-y-6\">\n {/* Icon */}\n <div className=\"volr:flex volr:justify-center volr:pt-2\">\n {isSuccess ? (\n <div className=\"volr:w-14 volr:h-14 volr:rounded-full volr:bg-green-50 volr:flex volr:items-center volr:justify-center\">\n <svg\n className=\"volr:w-7 volr:h-7 volr:text-green-600\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M5 13l4 4L19 7\"\n />\n </svg>\n </div>\n ) : (\n <div className=\"volr:w-14 volr:h-14 volr:rounded-full volr:bg-red-50 volr:flex volr:items-center volr:justify-center\">\n <svg\n className=\"volr:w-7 volr:h-7 volr:text-red-500\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </div>\n )}\n </div>\n\n {/* Message */}\n <div className=\"volr:text-center volr:space-y-1\">\n <h3 className=\"volr:text-lg volr:font-semibold volr:text-slate-900\">\n {isSuccess ? \"Payment Complete\" : \"Payment Failed\"}\n </h3>\n <p className=\"volr:text-sm volr:text-slate-500\">\n {isSuccess\n ? \"Your payment has been processed successfully\"\n : error?.message || \"Something went wrong. Please try again.\"}\n </p>\n </div>\n\n {/* Transaction Details (Success) */}\n {isSuccess && payment.txHash && (\n <div className=\"volr:bg-slate-50 volr:rounded-lg volr:p-4 volr:space-y-2\">\n <div className=\"volr:flex volr:justify-between volr:text-sm\">\n <span className=\"volr:text-slate-500\">Amount</span>\n <span className=\"volr:font-medium volr:text-slate-900\">\n {(\n Number(payment.amount) / Math.pow(10, payment.token.decimals)\n ).toLocaleString()}{\" \"}\n {payment.token.symbol}\n </span>\n </div>\n {payment.totalUsd && (\n <div className=\"volr:flex volr:justify-between volr:text-sm\">\n <span className=\"volr:text-slate-500\">USD Value</span>\n <span className=\"volr:text-slate-600\">\n ${parseFloat(payment.totalUsd).toFixed(2)}\n </span>\n </div>\n )}\n <div className=\"volr:flex volr:justify-between volr:text-sm\">\n <span className=\"volr:text-slate-500\">Transaction</span>\n <code className=\"volr:text-xs volr:text-slate-600 volr:font-mono\">\n {payment.txHash.slice(0, 8)}...{payment.txHash.slice(-6)}\n </code>\n </div>\n </div>\n )}\n\n {/* Actions */}\n <div className=\"volr:space-y-4\">\n {isSuccess ? (\n <Button onClick={onDone} className=\"volr:w-full\">\n Done\n </Button>\n ) : (\n <>\n <Button onClick={onRetry} className=\"volr:w-full\">\n Try Again\n </Button>\n {/* Report as text button */}\n <button\n onClick={onReport}\n className=\"volr:w-full volr:text-sm volr:text-slate-400 hover:volr:text-slate-600 volr:transition-colors volr:py-2\"\n >\n Report an issue\n </button>\n </>\n )}\n </div>\n\n {/* Powered By (success only) */}\n {isSuccess && <PoweredBy />}\n </div>\n );\n};\n","import React from \"react\";\nimport { Modal, ModalHeader } from \"@/components/materials/modal\";\nimport { useVolrModal } from \"@/hooks/useVolrModal\";\nimport { usePaymentModalState } from \"@/hooks/usePaymentModalState\";\nimport { DepositModal } from \"@/components/features/deposit/DepositModal\";\nimport { PaymentInfoView } from \"./views/PaymentInfoView\";\nimport { PaymentProcessingView } from \"./views/PaymentProcessingView\";\nimport { PaymentResultView } from \"./views/PaymentResultView\";\nimport { PaymentSkeleton } from \"./components\";\n\nexport interface PaymentModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}\n\nexport const PaymentModal: React.FC<PaymentModalProps> = ({\n open,\n onOpenChange,\n}) => {\n const { paymentOptions } = useVolrModal();\n const {\n state,\n handlePay,\n handleDeposit,\n handleDepositClose,\n handleDone,\n handleRetry,\n handleClose,\n handleReport,\n canClose,\n isConfigured,\n } = usePaymentModalState(open, onOpenChange);\n\n const {\n step,\n processingStep,\n balance,\n isBalanceLoading,\n isConfigLoading,\n isPaying,\n currentPayment,\n txHash,\n error,\n logoUrl,\n showDeposit,\n } = state;\n\n // Show deposit modal if active\n if (showDeposit && currentPayment) {\n return (\n <DepositModal\n open={true}\n onOpenChange={handleDepositClose}\n asset={{\n chainId: currentPayment.token.chainId,\n symbol: currentPayment.token.symbol,\n }}\n />\n );\n }\n\n // Render skeleton if no payment options or still loading config\n if (!paymentOptions || !currentPayment || isConfigLoading) {\n return (\n <Modal open={open} onOpenChange={onOpenChange}>\n <ModalHeader onClose={() => onOpenChange(false)} />\n <PaymentSkeleton />\n </Modal>\n );\n }\n\n // Show error if no receiver address configured (only after loading completes)\n if (!isConfigured && step === \"info\" && !isConfigLoading) {\n return (\n <Modal open={open} onOpenChange={handleClose}>\n <ModalHeader onClose={handleClose} />\n <div className=\"volr:text-center\">\n <p className=\"volr:text-sm volr:text-red-600\">\n Payment not configured. Please contact the app developer.\n </p>\n </div>\n </Modal>\n );\n }\n\n return (\n <Modal open={open} onOpenChange={handleClose}>\n <ModalHeader\n onClose={canClose ? handleClose : undefined}\n title={step === \"info\" ? \"Confirm Payment\" : undefined}\n />\n\n {step === \"info\" && (\n <PaymentInfoView\n payment={currentPayment}\n balance={balance}\n isBalanceLoading={isBalanceLoading}\n logoUrl={logoUrl}\n onPay={handlePay}\n onDeposit={handleDeposit}\n isPaying={isPaying}\n />\n )}\n\n {step === \"processing\" && (\n <PaymentProcessingView step={processingStep} txHash={txHash} />\n )}\n\n {step === \"result\" && (\n <PaymentResultView\n payment={currentPayment}\n error={error}\n onDone={handleDone}\n onRetry={handleRetry}\n onReport={handleReport}\n />\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 { PaymentModal } from \"@/components/features/payment\";\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 <PaymentModalPortal />\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 * Payment Modal via portal\n */\nfunction PaymentModalPortal() {\n const { isOpen, mode, close } = useVolrModal();\n const [portalRoot, setPortalRoot] = useState<HTMLElement | null>(null);\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 if (!portalRoot) return null;\n\n return createPortal(\n <PaymentModal\n open={isOpen && mode === \"payment\"}\n onOpenChange={(open) => !open && close()}\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","/**\n * useVolrPay hook - Payment with UI integration\n * \n * This hook provides payment functionality with PaymentModal integration.\n * For headless API-only access, use useVolrPaymentApi from @volr/react\n */\n\nimport { useCallback, useRef } from 'react';\nimport { useVolrPaymentApi, type PaymentResult, type PaymentHistoryOptions, type PaymentHistoryResult } from '@volr/react';\nimport { useVolrModal, type PaymentModalOptions } from './useVolrModal';\n\n/**\n * Payment item displayed in modal\n */\nexport interface PaymentItem {\n /** Item name */\n name: string;\n /** Item description (optional) */\n description?: string;\n /** Item image URL (optional, falls back to project branding logo) */\n image?: string;\n}\n\n/**\n * Payment error\n */\nexport interface PaymentError {\n code: string;\n message: string;\n}\n\n/**\n * Payment handlers/callbacks\n */\nexport interface PaymentHandlers {\n /** Called when payment is created */\n onCreated?: (payment: { id: string }) => void;\n /** Called when transaction is broadcasted */\n onProcessing?: (payment: { id: string; txHash: string }) => void;\n /** Called when payment is confirmed on-chain */\n onSuccess?: (result: PaymentResult) => void;\n /** Called when payment fails */\n onError?: (error: PaymentError) => void;\n /** Called when user cancels */\n onCancel?: () => void;\n}\n\n/**\n * Options for pay() function\n */\nexport interface PayOptions {\n /** Amount in token units (before decimals) */\n amount: number;\n /** Item information to display in modal */\n item?: PaymentItem;\n /** Client-side reference ID */\n referenceId?: string;\n /** Custom metadata (max 50 keys) */\n metadata?: Record<string, string>;\n /** Idempotency key to prevent duplicates */\n idempotencyKey?: string;\n /** Expiration time in seconds (default: 900 = 15 min) */\n expiresInSec?: number;\n /** Callback handlers */\n handlers?: PaymentHandlers;\n}\n\n/**\n * Payment handle returned from pay()\n */\nexport interface PaymentHandle {\n /** Payment ID */\n id: string;\n /** Current payment status */\n status: PaymentResult['status'];\n /** Wait for payment to complete */\n wait: () => Promise<PaymentResult>;\n /** Cancel the payment (only works for PENDING) */\n cancel: () => Promise<void>;\n}\n\n/**\n * useVolrPay return type\n */\nexport interface UseVolrPayReturn {\n /**\n * Initiate a payment with PaymentModal\n * @param options Payment options including amount, item, handlers\n * @returns PaymentHandle with id, status, wait(), cancel()\n */\n pay: (options: PayOptions) => Promise<PaymentHandle>;\n \n /**\n * Check payment status by ID\n */\n checkPayment: (paymentId: string) => Promise<PaymentResult>;\n \n /**\n * Get payment history for current user\n */\n getPaymentHistory: (options?: PaymentHistoryOptions) => Promise<PaymentHistoryResult>;\n \n /**\n * Whether a payment is currently in progress\n */\n isPaymentInProgress: boolean;\n}\n\n// Store for payment promise resolvers (outside component to persist across renders)\nconst paymentPromiseResolvers = new Map<string, {\n resolve: (result: PaymentResult) => void;\n reject: (error: Error) => void;\n}>();\n\nexport function useVolrPay(): UseVolrPayReturn {\n const { open: openModal } = useVolrModal();\n const { createPayment, checkPayment, getPaymentHistory, cancelPayment } = useVolrPaymentApi();\n const currentPaymentIdRef = useRef<string | null>(null);\n\n const pay = useCallback(\n async (options: PayOptions): Promise<PaymentHandle> => {\n // Create payment via API\n const payment = await createPayment({\n amount: options.amount,\n item: options.item,\n referenceId: options.referenceId,\n metadata: options.metadata,\n idempotencyKey: options.idempotencyKey,\n expiresInSec: options.expiresInSec,\n });\n\n currentPaymentIdRef.current = payment.id;\n\n // Call onCreated handler\n options.handlers?.onCreated?.({ id: payment.id });\n\n // Create wait promise\n const waitPromise = new Promise<PaymentResult>((resolve, reject) => {\n paymentPromiseResolvers.set(payment.id, { resolve, reject });\n });\n\n // Build modal options\n const modalOptions: PaymentModalOptions = {\n payment,\n options: {\n amount: options.amount,\n item: options.item,\n referenceId: options.referenceId,\n metadata: options.metadata,\n idempotencyKey: options.idempotencyKey,\n expiresInSec: options.expiresInSec,\n },\n onComplete: (result: PaymentResult) => {\n currentPaymentIdRef.current = null;\n \n const resolver = paymentPromiseResolvers.get(payment.id);\n if (resolver) {\n resolver.resolve(result);\n paymentPromiseResolvers.delete(payment.id);\n }\n\n if (result.status === 'CONFIRMED') {\n options.handlers?.onSuccess?.(result);\n }\n },\n onProcessing: (processingPayment: PaymentResult & { txHash: string }) => {\n options.handlers?.onProcessing?.({\n id: processingPayment.id,\n txHash: processingPayment.txHash,\n });\n },\n onError: (error: PaymentError) => {\n currentPaymentIdRef.current = null;\n \n const resolver = paymentPromiseResolvers.get(payment.id);\n if (resolver) {\n resolver.reject(new Error(error.message));\n paymentPromiseResolvers.delete(payment.id);\n }\n\n options.handlers?.onError?.(error);\n },\n onCancel: () => {\n currentPaymentIdRef.current = null;\n \n const resolver = paymentPromiseResolvers.get(payment.id);\n if (resolver) {\n // Resolve with CANCELLED status instead of rejecting\n resolver.resolve({\n ...payment,\n status: 'CANCELLED',\n });\n paymentPromiseResolvers.delete(payment.id);\n }\n\n options.handlers?.onCancel?.();\n },\n };\n\n // Open PaymentModal\n openModal({ mode: 'payment', payment: modalOptions });\n\n // Return PaymentHandle\n return {\n id: payment.id,\n status: payment.status,\n wait: () => waitPromise,\n cancel: async () => {\n await cancelPayment(payment.id);\n currentPaymentIdRef.current = null;\n \n const resolver = paymentPromiseResolvers.get(payment.id);\n if (resolver) {\n resolver.resolve({\n ...payment,\n status: 'CANCELLED',\n });\n paymentPromiseResolvers.delete(payment.id);\n }\n\n options.handlers?.onCancel?.();\n },\n };\n },\n [createPayment, cancelPayment, openModal]\n );\n\n return {\n pay,\n checkPayment,\n getPaymentHistory,\n isPaymentInProgress: currentPaymentIdRef.current !== null,\n };\n}\n\n"]}