@kodiak-finance/orderly-vaults 2.8.18 → 2.8.19-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api/env.ts","../src/hooks/useSVAPIUrl.ts","../src/api/request.ts","../src/api/api.ts","../src/store/vaultsStore.ts","../src/store/index.ts","../src/components/vaults-header/vaults-header.desktop.tsx","../src/components/vaults-header/vaults-header.mobile.tsx","../src/components/vaults-header/vaults-header.script.ts","../src/components/vaults-header/vaults-header.widget.tsx","../src/components/vaults-header/index.ts","../src/components/vaults-introduction/vaults-introduction.desktop.tsx","../src/components/vaults-introduction/vaults-introduction.script.ts","../src/components/vaults-introduction/vaults-introduction.widget.tsx","../src/components/vaults-introduction/index.ts","../src/types/vault.ts","../src/contract/index.ts","../src/utils/operationPayload.ts","../src/components/vault-operation/depositAndWithdraw/latest.script.ts","../src/components/vault-operation/depositAndWithdraw/operation.script.ts","../src/components/vault-operation/deposit/vault-deposit-form.script.ts","../src/components/vault-operation/latest-deposit/latest-deposit.script.ts","../src/utils/getOperationStatusColor.ts","../src/components/vault-operation/latest-deposit/latest-deposit.ui.tsx","../src/components/vault-operation/latest-deposit/latest-deposit.widget.tsx","../src/components/vault-operation/deposit/vault-deposit-form.ui.tsx","../src/components/vault-operation/deposit/vault-deposit-form.widget.tsx","../src/components/vault-operation/deposit/index.ts","../src/components/vault-operation/withdraw/vault-withdraw-form.script.ts","../src/components/vault-operation/latest-withdraw/latest-withdraw-script.ts","../src/components/vault-operation/withdraw/withdraw-process.ui.tsx","../src/components/vault-operation/latest-withdraw/latest-withdraw-ui.tsx","../src/components/vault-operation/latest-withdraw/latest-withdraw-widget.tsx","../src/components/vault-operation/latest-withdraw/index.ts","../src/components/vault-operation/withdraw/vault-withdraw-form.ui.tsx","../src/components/vault-operation/withdraw/vault-withdraw-form.widget.tsx","../src/components/vault-operation/withdraw/index.ts","../src/components/vault-operation/depositAndWithdraw/index.tsx","../src/components/vault-card/constants.ts","../src/components/vault-card/vaultCard.script.ts","../src/components/vault-card/vaultCard.ui.tsx","../src/components/vault-card/vaultCard.widget.tsx","../src/components/vault-card/index.ts","../src/components/all-vaults/all-vaults.desktop.tsx","../src/components/all-vaults/all-vaults.mobile.tsx","../src/components/all-vaults/all-vaults.widget.tsx","../src/components/all-vaults/index.ts","../src/pages/index.tsx","../src/components/provider/vaults-provider.tsx","../src/types/index.ts","../src/index.ts","../src/components/index.ts","../src/components/vault-operation/index.ts","../src/components/vault-operation/latest-deposit/index.ts"],"names":["VAULTS_API_URLS","VAULTS_WEBSITE_URLS","init_env","__esmMin","useMemo","useGetEnv","useSVApiUrl","env","init_useSVAPIUrl","buildQueryString","params","filteredParams","filterUndefinedParams","searchParams","key","value","filtered","objKey","objValue","appendQueryParams","url","queryString","separator","VaultsApiError","RequestClient","defaultClient","request_default","init_request","message","code","status","response","interceptor","timeout","controller","defaultHeaders","customHeaders","ms","resolve","config","processedConfig","fullUrl","timeoutController","retry","retryDelay","validateStatus","baseURL","data","method","fetchOptions","finalFetchOptions","lastError","attempt","errorMessage","errorCode","errorData","responseData","processedData","apiResponse","error","getVaultInfo","baseUrl","getVaultLpPerformance","getVaultLpInfo","init_api","create","useVaultsStore","useVaultInfoState","useVaultLpPerformanceState","useVaultLpInfoState","useVaultInfoActions","useVaultLpPerformanceActions","useVaultLpInfoActions","useVaultLpPerformanceById","useVaultLpInfoById","useVaultLpPerformanceIds","useVaultLpInfoIds","useVaultLpPerformanceArray","useVaultLpInfoArray","init_vaultsStore","set","get","state","vaultId","init_store","useTranslation","jsx","jsxs","VaultsHeaderDesktop","init_vaults_header_desktop","props","supportVaults","headerImage","brokerName","t","supportVaultsList","chain","index","headerImageElement","useConfig","VaultsHeaderMobile","init_vaults_header_mobile","uniqBy","useVaultsHeaderScript","init_vaults_header_script","vaultInfo","vaultsPageConfig","array","vault","item","useScreen","VaultsHeaderWidget","init_vaults_header_widget","isMobile","vaults_header_exports","__export","init_vaults_header","Text","Divider","cn","VaultsIntroductionDesktop","VaultsIntroductionItem","init_vaults_introduction_desktop","vaultsInfo","title","textProps","useVaultsIntroductionScript","init_vaults_introduction_script","tvl","acc","lpCount","VaultsIntroductionWidget","init_vaults_introduction_widget","vaults_introduction_exports","init_vaults_introduction","RoleType","OperationType","init_vault","VAULTS_CONTRACT_ADDRESSES","init_contract","getToAccountPayloadType","init_operationPayload","type","role","usePrivateQuery","EMPTY_LIST","useLatestOperationScript","init_latest_script","operationHistory","mutateOperationHistory","useAccount","useTrack","useMutation","TrackerEventName","toast","Decimal","useOperationScript","init_operation_script","account","track","verifyingContract","postVaultOperation","refetchOperationHistory","disabledOperation","amount","requestParams","signatured","res","useState","useTokenInfo","useCollateral","useMaxWithdrawal","useVaultDepositFormScript","init_vault_deposit_form_script","quantity","setQuantity","handleOperation","holding","minDepositAmount","maxWithdrawalAmount","availableBalance","h","maxQuantity","sharePrice","v","shares","handleDeposit","token","sourceToken","onQuantityChange","disabledDeposit","inputHint","useLatestDepositScript","init_latest_deposit_script","latestOperation","getOperationStatusColor","init_getOperationStatusColor","TokenIcon","LatestDepositUI","init_latest_deposit_ui","LatestDepositWidget","init_latest_deposit_widget","Box","Button","BrokerWallet","QuantityInput","AvailableQuantity","VaultDepositForm","init_vault_deposit_form_ui","VaultDepositWidget","init_vault_deposit_form_widget","init_deposit","useVaultWithdrawFormScript","init_vault_withdraw_form_script","vaultLpInfo","receivingAmount","handleWithdraw","isMinAmount","disabledWithdraw","useLatestWithdrawScript","init_latest_withdraw_script","Fragment","ProcessDot","ProcessLine","ProcessText","WithdrawProcess","WithdrawProcessWidget","init_withdraw_process_ui","children","className","LatestWithdrawUI","init_latest_withdraw_ui","LatestWithdrawWidget","init_latest_withdraw_widget","init_latest_withdraw","modal","SimpleDialog","SimpleSheet","useModal","VaultWithdrawForm","WithdrawKVItem","WithdrawInitialContent","WithdrawInitialDialog","WithdrawInitialSheet","init_vault_withdraw_form_ui","handleInitialWithdraw","label","suffix","currency","hide","visible","onOpenChange","VaultWithdrawWidget","init_vault_withdraw_form_widget","init_withdraw","ArrowDownSquareFillIcon","ArrowUpSquareFillIcon","registerSimpleDialog","registerSimpleSheet","TabPanel","Tabs","VaultDepositAndWithdrawWithDialogId","VaultDepositAndWithdrawWithSheetId","VaultDepositAndWithdraw","init_depositAndWithdraw","activeTab","setActiveTab","ORDERLY_ICON","ORDERLY_VAULT_TITLE","ORDERLY_VAULT_DESCRIPTION","init_constants","useEffect","useVaultCardScript","init_vaultCard_script","fetchVaultLpInfo","svApiUrl","memoizedAvailableBalance","lpInfo","info","isEVMConnected","isSOLConnected","isWrongNetwork","openDepositAndWithdraw","openVaultWebsite","ArrowRightUpSquareFillIcon","AuthGuard","VaultCard","VaultInfoItem","LpInfoItem","VaultCardOperation","init_vaultCard_ui","description","VaultCardWidget","init_vaultCard_widget","init_vault_card","AllVaultsDesktop","init_all_vaults_desktop","vaults","AllVaultsMobile","init_all_vaults_mobile","AllVaultsWidget","init_all_vaults_widget","all_vaults_exports","init_all_vaults","React","VaultsProvider","fetchVaultInfo","setVaultsPageConfig","LazyVaultsHeaderWidget","mod","LazyVaultsIntroductionWidget","LazyAllVaultsWidget","VaultsPage"],"mappings":"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","sourcesContent":["type Env = \"prod\" | \"staging\" | \"qa\" | \"dev\";\n\nexport const VAULTS_API_URLS: Record<Env, string> = {\n prod: \"https://api-sv.orderly.org\",\n staging: \"https://testnet-api-sv.orderly.org\",\n qa: \"https://qa-api-sv-aliyun.orderly.org\",\n dev: \"https://dev-api-sv.orderly.org\",\n};\n\nexport const VAULTS_WEBSITE_URLS: Record<Env, string> = {\n prod: \"https://app.orderly.network\",\n staging: \"https://staging-app.orderly.network\",\n qa: \"https://qa-app.orderly.network\",\n dev: \"https://dev-app.orderly.network\",\n};\n","import { useMemo } from \"react\";\nimport { useGetEnv } from \"@kodiak-finance/orderly-hooks\";\nimport { VAULTS_API_URLS } from \"../api/env\";\n\nexport function useSVApiUrl() {\n const env = useGetEnv();\n\n const apiUrl = useMemo(() => {\n return VAULTS_API_URLS[env as keyof typeof VAULTS_API_URLS];\n }, [env]);\n\n return apiUrl;\n}\n","// API response interface for consistent response structure\nexport interface ApiResponse<T = unknown> {\n success: boolean;\n data: T;\n message?: string;\n code?: string | number;\n}\n\n// Query parameters type - flexible to accept any parameter object\nexport type QueryParams = Record<string, any>;\n\n// Request interceptor function type\nexport type RequestInterceptor = (\n config: SimpleRequestConfig,\n) => SimpleRequestConfig | Promise<SimpleRequestConfig>;\n\n// Response interceptor function type\nexport type ResponseInterceptor<T = unknown> = (\n response: Response,\n data: unknown,\n) => T | Promise<T>;\n\n// Error class for API errors\nexport class VaultsApiError extends Error {\n constructor(\n message: string,\n public readonly code?: string | number,\n public readonly status?: number,\n public readonly response?: Response,\n ) {\n super(message);\n this.name = \"VaultsApiError\";\n }\n}\n\n// Utility functions for query parameter handling\nfunction buildQueryString(params: QueryParams): string {\n const filteredParams = filterUndefinedParams(params);\n const searchParams = new URLSearchParams();\n\n Object.entries(filteredParams).forEach(([key, value]) => {\n if (value !== null && value !== undefined) {\n searchParams.append(key, String(value));\n }\n });\n\n return searchParams.toString();\n}\n\nfunction filterUndefinedParams(\n params: QueryParams,\n): Record<string, string | number | boolean> {\n const filtered: Record<string, string | number | boolean> = {};\n\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n // Handle different value types\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n filtered[key] = value;\n } else if (typeof value === \"object\" && value !== null) {\n // For objects, flatten their properties into the query string\n const objEntries = Object.entries(value as Record<string, unknown>);\n objEntries.forEach(([objKey, objValue]) => {\n if (\n objValue !== undefined &&\n objValue !== null &&\n (typeof objValue === \"string\" ||\n typeof objValue === \"number\" ||\n typeof objValue === \"boolean\")\n ) {\n filtered[objKey] = objValue;\n }\n });\n }\n }\n });\n\n return filtered;\n}\n\nfunction appendQueryParams(url: string, params?: QueryParams): string {\n if (!params || Object.keys(params).length === 0) {\n return url;\n }\n\n const queryString = buildQueryString(params);\n if (!queryString) {\n return url;\n }\n\n const separator = url.includes(\"?\") ? \"&\" : \"?\";\n return `${url}${separator}${queryString}`;\n}\n\n// Simplified config interface for all requests\nexport interface SimpleRequestConfig extends Omit<RequestInit, \"method\"> {\n baseURL?: string;\n params?: QueryParams;\n timeout?: number;\n retry?: number;\n retryDelay?: number;\n validateStatus?: (status: number) => boolean;\n data?: unknown;\n method?: string; // Allow method to be set internally\n}\n\n// Request client class for better organization and configurability\nclass RequestClient {\n private requestInterceptors: RequestInterceptor[] = [];\n private responseInterceptors: ResponseInterceptor[] = [];\n private defaultConfig: SimpleRequestConfig = {\n timeout: 10000,\n retry: 3,\n retryDelay: 1000,\n validateStatus: (status) => status >= 200 && status < 300,\n // mode: 'cors',\n // credentials: 'include',\n headers: {\n \"Content-Type\": \"application/json\",\n },\n };\n\n // Add request interceptor\n addRequestInterceptor(interceptor: RequestInterceptor): void {\n this.requestInterceptors.push(interceptor);\n }\n\n // Add response interceptor\n addResponseInterceptor(interceptor: ResponseInterceptor): void {\n this.responseInterceptors.push(interceptor);\n }\n\n // Create timeout controller\n private createTimeoutController(timeout: number): AbortController {\n const controller = new AbortController();\n setTimeout(() => controller.abort(), timeout);\n return controller;\n }\n\n // Merge headers\n private mergeHeaders(\n defaultHeaders: HeadersInit = {},\n customHeaders: HeadersInit = {},\n ): HeadersInit {\n return {\n ...defaultHeaders,\n ...customHeaders,\n };\n }\n\n // Sleep utility for retry delay\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n // Main request method\n async request<T>(\n url: RequestInfo | URL,\n config: SimpleRequestConfig = {},\n ): Promise<T> {\n // Merge configurations\n const finalConfig: SimpleRequestConfig = {\n ...this.defaultConfig,\n ...config,\n headers: this.mergeHeaders(this.defaultConfig.headers, config.headers),\n };\n\n // Apply request interceptors\n let processedConfig = finalConfig;\n for (const interceptor of this.requestInterceptors) {\n processedConfig = await interceptor(processedConfig);\n }\n\n // Construct full URL if baseURL is provided\n let fullUrl = url;\n if (\n typeof url === \"string\" &&\n !url.startsWith(\"http\") &&\n processedConfig.baseURL\n ) {\n fullUrl = `${processedConfig.baseURL}${url.startsWith(\"/\") ? \"\" : \"/\"}${url}`;\n }\n\n // Handle query parameters for GET requests or when params are provided\n if (processedConfig.params) {\n fullUrl =\n typeof fullUrl === \"string\"\n ? appendQueryParams(fullUrl, processedConfig.params)\n : fullUrl;\n }\n\n // Setup timeout if specified\n let timeoutController: AbortController | undefined;\n if (processedConfig.timeout && processedConfig.timeout > 0) {\n timeoutController = this.createTimeoutController(processedConfig.timeout);\n processedConfig.signal = timeoutController.signal;\n }\n\n // Extract custom config options and pass only standard RequestInit options to fetch\n\n const {\n retry = 0,\n retryDelay = 1000,\n validateStatus,\n params,\n baseURL,\n timeout,\n data,\n method,\n ...fetchOptions\n } = processedConfig;\n\n // Prepare final fetch options\n const finalFetchOptions: RequestInit = {\n ...fetchOptions,\n method,\n };\n\n // Handle data for POST/PUT/PATCH requests\n if (data !== undefined) {\n finalFetchOptions.body =\n typeof data === \"string\" ? data : JSON.stringify(data);\n }\n\n let lastError: Error;\n\n // Retry logic\n for (let attempt = 0; attempt <= retry; attempt++) {\n try {\n const response = await fetch(fullUrl, finalFetchOptions);\n\n // Check if status is valid\n if (!validateStatus!(response.status)) {\n let errorMessage = response.statusText;\n let errorCode: string | number | undefined;\n\n try {\n const errorData = await response.json();\n errorMessage = errorData.message || errorData.code || errorMessage;\n errorCode = errorData.code;\n } catch {\n // If can't parse JSON, use status text\n }\n\n throw new VaultsApiError(\n errorMessage,\n errorCode,\n response.status,\n response,\n );\n }\n\n // Parse JSON response\n let responseData: unknown;\n try {\n responseData = await response.json();\n } catch {\n throw new VaultsApiError(\n \"Invalid JSON response\",\n \"PARSE_ERROR\",\n response.status,\n response,\n );\n }\n\n // Apply response interceptors\n let processedData = responseData;\n for (const interceptor of this.responseInterceptors) {\n processedData = await interceptor(response, processedData);\n }\n\n // Handle API response format\n if (typeof processedData === \"object\" && processedData !== null) {\n if (\"success\" in processedData) {\n const apiResponse = processedData as ApiResponse<T>;\n if (apiResponse.success) {\n return apiResponse.data;\n } else {\n throw new VaultsApiError(\n apiResponse.message || \"API request failed\",\n apiResponse.code,\n response.status,\n response,\n );\n }\n }\n }\n\n // Return processed data directly if no success field\n return processedData as T;\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n\n // Don't retry on certain errors\n if (\n error instanceof VaultsApiError ||\n (error as Error)?.name === \"AbortError\" ||\n attempt === retry\n ) {\n throw lastError;\n }\n\n // Wait before retry\n if (attempt < retry) {\n await this.sleep(retryDelay);\n }\n } finally {\n // Clean up timeout controller\n timeoutController?.abort();\n }\n }\n\n throw lastError!;\n }\n\n // Simplified HTTP methods - all accept a single config object\n async get<T>(\n url: RequestInfo | URL,\n config: SimpleRequestConfig = {},\n ): Promise<T> {\n return this.request<T>(url, { ...config, method: \"GET\" });\n }\n\n async post<T>(\n url: RequestInfo | URL,\n config: SimpleRequestConfig = {},\n ): Promise<T> {\n return this.request<T>(url, { ...config, method: \"POST\" });\n }\n\n async put<T>(\n url: RequestInfo | URL,\n config: SimpleRequestConfig = {},\n ): Promise<T> {\n return this.request<T>(url, { ...config, method: \"PUT\" });\n }\n\n async delete<T>(\n url: RequestInfo | URL,\n config: SimpleRequestConfig = {},\n ): Promise<T> {\n return this.request<T>(url, { ...config, method: \"DELETE\" });\n }\n\n async patch<T>(\n url: RequestInfo | URL,\n config: SimpleRequestConfig = {},\n ): Promise<T> {\n return this.request<T>(url, { ...config, method: \"PATCH\" });\n }\n}\n\n// Create default instance\nconst defaultClient = new RequestClient();\n\n// Export the default request function\nexport async function request<T>(\n url: RequestInfo | URL,\n config?: SimpleRequestConfig,\n): Promise<T> {\n return defaultClient.request<T>(url, config);\n}\n\n// Export the client class for advanced usage\nexport { RequestClient };\n\n// Export default client instance\nexport default defaultClient;\n","import type {\n VaultInfo,\n VaultLpPerformance,\n VaultLpInfo,\n VaultTimeRange,\n} from \"../types/vault\";\nimport requestClient from \"./request\";\n\n// API response wrapper interfaces\ninterface VaultInfoResponse {\n rows: VaultInfo[];\n}\n\ninterface VaultLpPerformanceResponse {\n rows: VaultLpPerformance[];\n}\n\ninterface VaultLpInfoResponse {\n rows: VaultLpInfo[];\n}\n\n// API parameters interfaces\ninterface VaultPerformanceParams {\n vault_id: string;\n time_range?: VaultTimeRange;\n}\n\ninterface VaultLpInfoParams {\n vault_id: string;\n wallet_address: string;\n}\n\ninterface VaultOperationMessage {\n payloadType: string;\n nonce: string;\n receiver: string;\n amount: string;\n vaultId: string;\n token: string;\n dexBrokerId: string;\n chainId?: string;\n chainType?: string;\n}\n\ntype VaultOperationRequest = {\n message: VaultOperationMessage;\n signature: string;\n userAddress: string;\n verifyingContract: string;\n};\n\n/**\n * Get vault information\n * @param baseUrl - The base URL for the API endpoints\n * @returns Promise<VaultInfoResponse> - Array of vault information\n */\nexport async function getVaultInfo(\n baseUrl: string,\n): Promise<VaultInfoResponse> {\n return requestClient.get<VaultInfoResponse>(\n \"/v1/public/strategy_vault/vault/info\",\n {\n baseURL: baseUrl,\n },\n );\n}\n\n/**\n * Get vault LP performance data\n * @param baseUrl - The base URL for the API endpoints\n * @param params - Parameters including vault_id and time_range\n * @returns Promise<VaultLpPerformanceResponse> - Array of vault LP performance data\n */\nexport async function getVaultLpPerformance(\n baseUrl: string,\n params: VaultPerformanceParams,\n): Promise<VaultLpPerformanceResponse> {\n return requestClient.get<VaultLpPerformanceResponse>(\n \"/v1/public/strategy_vault/vault/performance\",\n {\n params,\n baseURL: baseUrl,\n },\n );\n}\n\n/**\n * Get vault LP information\n * @param baseUrl - The base URL for the API endpoints\n * @param params - Parameters including vault_id and wallet_address\n * @returns Promise<VaultLpInfoResponse> - Array of vault LP information\n */\nexport async function getVaultLpInfo(\n baseUrl: string,\n params: VaultLpInfoParams,\n): Promise<VaultLpInfoResponse> {\n return requestClient.get<VaultLpInfoResponse>(\n \"/v1/public/strategy_vault/lp/info\",\n {\n params,\n baseURL: baseUrl,\n },\n );\n}\n\n// export async function getVaultNonce(\n// baseUrl: string,\n// ) {\n// return requestClient.get(\n// '/v1/public/sv_nonce',\n// {\n// baseURL: baseUrl,\n// }\n// );\n// }\n\n// export async function postVaultOperation(\n// baseUrl: string,\n// data: VaultOperationRequest\n// ) {\n// return requestClient.post(\n// '/v1/public/sv_operation',\n// {\n// baseURL: baseUrl,\n// data,\n// }\n// );\n// }\n\n// Export types for external usage\nexport type {\n VaultInfoResponse,\n VaultLpPerformanceResponse,\n VaultLpInfoResponse,\n VaultPerformanceParams,\n VaultLpInfoParams,\n VaultOperationRequest,\n VaultOperationMessage,\n};\n","import { create } from \"zustand\";\nimport {\n getVaultInfo,\n getVaultLpPerformance,\n getVaultLpInfo,\n} from \"../api/api\";\nimport type {\n VaultInfoResponse,\n VaultLpPerformanceResponse,\n VaultLpInfoResponse,\n VaultPerformanceParams,\n VaultLpInfoParams,\n} from \"../api/api\";\nimport type {\n VaultInfo,\n VaultLpPerformance,\n VaultLpInfo,\n VaultsPageConfig,\n} from \"../types/vault\";\n\n// Store state interface\ninterface VaultsState {\n // Base URL for API requests\n baseUrl: string;\n\n // Vault info state\n vaultInfo: {\n data: VaultInfo[];\n loading: boolean;\n error: string | null;\n lastUpdated: number | null;\n };\n\n // Vault LP performance state\n vaultLpPerformance: {\n data: Record<string, VaultLpPerformance[]>;\n loading: boolean;\n error: string | null;\n lastUpdated: number | null;\n params: VaultPerformanceParams | null;\n };\n\n // Vault LP info state\n vaultLpInfo: {\n data: Record<string, VaultLpInfo[]>;\n loading: boolean;\n error: string | null;\n lastUpdated: number | null;\n params: VaultLpInfoParams | null;\n };\n\n // Vaults page config state\n vaultsPageConfig: VaultsPageConfig | null;\n\n // Actions\n setBaseUrl: (baseUrl: string) => void;\n fetchVaultInfo: (baseUrl?: string) => Promise<void>;\n refreshVaultInfo: () => Promise<void>;\n\n fetchVaultLpPerformance: (\n params: VaultPerformanceParams,\n baseUrl?: string,\n ) => Promise<void>;\n refreshVaultLpPerformance: () => Promise<void>;\n\n fetchVaultLpInfo: (\n params: VaultLpInfoParams,\n baseUrl?: string,\n ) => Promise<void>;\n refreshVaultLpInfo: () => Promise<void>;\n\n setVaultsPageConfig: (config: VaultsPageConfig) => void;\n}\n\n// Create the store\nexport const useVaultsStore = create<VaultsState>((set, get) => ({\n // Initial state\n baseUrl: \"\",\n\n vaultInfo: {\n data: [],\n loading: false,\n error: null,\n lastUpdated: null,\n },\n\n vaultLpPerformance: {\n data: {},\n loading: false,\n error: null,\n lastUpdated: null,\n params: null,\n },\n\n vaultLpInfo: {\n data: {},\n loading: false,\n error: null,\n lastUpdated: null,\n params: null,\n },\n\n vaultsPageConfig: null,\n\n // Set base URL\n setBaseUrl: (baseUrl: string) => {\n set({ baseUrl });\n },\n\n // Vault info actions\n fetchVaultInfo: async (baseUrl?: string) => {\n const state = get();\n const url = baseUrl || state.baseUrl;\n\n if (!url) {\n set((state) => ({\n vaultInfo: {\n ...state.vaultInfo,\n error: \"Base URL is required\",\n },\n }));\n return;\n }\n\n set((state) => ({\n baseUrl: baseUrl || state.baseUrl,\n vaultInfo: {\n ...state.vaultInfo,\n loading: true,\n error: null,\n },\n }));\n\n try {\n const response: VaultInfoResponse = await getVaultInfo(url);\n set((state) => ({\n vaultInfo: {\n ...state.vaultInfo,\n data: response.rows,\n loading: false,\n error: null,\n lastUpdated: Date.now(),\n },\n }));\n } catch (error) {\n set((state) => ({\n vaultInfo: {\n ...state.vaultInfo,\n loading: false,\n error:\n error instanceof Error\n ? error.message\n : \"Failed to fetch vault info\",\n },\n }));\n }\n },\n\n refreshVaultInfo: async () => {\n const state = get();\n // Only refresh if we have previously fetched data and have baseUrl\n if (state.vaultInfo.lastUpdated && state.baseUrl) {\n await state.fetchVaultInfo();\n }\n },\n\n // Vault LP performance actions\n fetchVaultLpPerformance: async (\n params: VaultPerformanceParams,\n baseUrl?: string,\n ) => {\n const state = get();\n const url = baseUrl || state.baseUrl;\n\n if (!url) {\n set((state) => ({\n vaultLpPerformance: {\n ...state.vaultLpPerformance,\n error: \"Base URL is required\",\n },\n }));\n return;\n }\n\n set((state) => ({\n baseUrl: baseUrl || state.baseUrl,\n vaultLpPerformance: {\n ...state.vaultLpPerformance,\n loading: true,\n error: null,\n params,\n },\n }));\n\n try {\n const response: VaultLpPerformanceResponse = await getVaultLpPerformance(\n url,\n params,\n );\n\n // Store the rows array with vault_id as key\n set((state) => ({\n vaultLpPerformance: {\n ...state.vaultLpPerformance,\n data: {\n ...state.vaultLpPerformance.data,\n [params.vault_id]: response.rows,\n },\n loading: false,\n error: null,\n lastUpdated: Date.now(),\n },\n }));\n } catch (error) {\n set((state) => ({\n vaultLpPerformance: {\n ...state.vaultLpPerformance,\n loading: false,\n error:\n error instanceof Error\n ? error.message\n : \"Failed to fetch vault LP performance\",\n },\n }));\n }\n },\n\n refreshVaultLpPerformance: async () => {\n const state = get();\n // Only refresh if we have previously fetched data, have params, and have baseUrl\n if (\n state.vaultLpPerformance.lastUpdated &&\n state.vaultLpPerformance.params &&\n state.baseUrl\n ) {\n await state.fetchVaultLpPerformance(state.vaultLpPerformance.params);\n }\n },\n\n // Vault LP info actions\n fetchVaultLpInfo: async (params: VaultLpInfoParams, baseUrl?: string) => {\n const state = get();\n const url = baseUrl || state.baseUrl;\n\n if (!url) {\n set((state) => ({\n vaultLpInfo: {\n ...state.vaultLpInfo,\n error: \"Base URL is required\",\n },\n }));\n return;\n }\n\n set((state) => ({\n baseUrl: baseUrl || state.baseUrl,\n vaultLpInfo: {\n ...state.vaultLpInfo,\n loading: true,\n error: null,\n params,\n },\n }));\n\n try {\n const response: VaultLpInfoResponse = await getVaultLpInfo(url, params);\n\n // Store the rows array with vault_id as key\n set((state) => ({\n vaultLpInfo: {\n ...state.vaultLpInfo,\n data: {\n ...state.vaultLpInfo.data,\n [params.vault_id]: response.rows,\n },\n loading: false,\n error: null,\n lastUpdated: Date.now(),\n },\n }));\n } catch (error) {\n set((state) => ({\n vaultLpInfo: {\n ...state.vaultLpInfo,\n loading: false,\n error:\n error instanceof Error\n ? error.message\n : \"Failed to fetch vault LP info\",\n },\n }));\n }\n },\n\n refreshVaultLpInfo: async () => {\n const state = get();\n // Only refresh if we have previously fetched data, have params, and have baseUrl\n if (\n state.vaultLpInfo.lastUpdated &&\n state.vaultLpInfo.params &&\n state.baseUrl\n ) {\n await state.fetchVaultLpInfo(state.vaultLpInfo.params);\n }\n },\n\n setVaultsPageConfig: (config: VaultsPageConfig) => {\n set({ vaultsPageConfig: config });\n },\n}));\n\n// Selector hooks for easier access to specific parts of the state\nexport const useVaultInfoState = () =>\n useVaultsStore((state) => state.vaultInfo);\nexport const useVaultLpPerformanceState = () =>\n useVaultsStore((state) => state.vaultLpPerformance);\nexport const useVaultLpInfoState = () =>\n useVaultsStore((state) => state.vaultLpInfo);\n\n// Action hooks for easier access to actions\nexport const useVaultInfoActions = () =>\n useVaultsStore((state) => ({\n fetchVaultInfo: state.fetchVaultInfo,\n refreshVaultInfo: state.refreshVaultInfo,\n }));\n\nexport const useVaultLpPerformanceActions = () =>\n useVaultsStore((state) => ({\n fetchVaultLpPerformance: state.fetchVaultLpPerformance,\n refreshVaultLpPerformance: state.refreshVaultLpPerformance,\n }));\n\nexport const useVaultLpInfoActions = () =>\n useVaultsStore((state) => ({\n fetchVaultLpInfo: state.fetchVaultLpInfo,\n refreshVaultLpInfo: state.refreshVaultLpInfo,\n }));\n\n// Selector hooks for accessing data by vault_id\nexport const useVaultLpPerformanceById = (vaultId: string) =>\n useVaultsStore((state) => state.vaultLpPerformance.data[vaultId]);\n\nexport const useVaultLpInfoById = (vaultId: string) =>\n useVaultsStore((state) => state.vaultLpInfo.data[vaultId]);\n\n// Selector hooks for getting all vault_ids that have data\nexport const useVaultLpPerformanceIds = () =>\n useVaultsStore((state) => Object.keys(state.vaultLpPerformance.data));\n\nexport const useVaultLpInfoIds = () =>\n useVaultsStore((state) => Object.keys(state.vaultLpInfo.data));\n\n// Selector hooks for getting all data as flat arrays (for backward compatibility)\nexport const useVaultLpPerformanceArray = () =>\n useVaultsStore((state) =>\n Object.values(state.vaultLpPerformance.data).flat(),\n );\n\nexport const useVaultLpInfoArray = () =>\n useVaultsStore((state) => Object.values(state.vaultLpInfo.data).flat());\n","export * from \"./vaultsStore\";\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { VaultsHeaderScript } from \"./vaults-header.script\";\n\nexport const VaultsHeaderDesktop: FC<VaultsHeaderScript> = (props) => {\n const { supportVaults, headerImage, brokerName } = props;\n const { t } = useTranslation();\n\n const supportVaultsList = useMemo(() => {\n return (\n <div className=\"oui-flex oui-items-center\">\n {supportVaults.map((chain, index) => (\n <img\n key={chain.chain_id}\n src={`https://oss.orderly.network/static/network_logo/${chain.chain_id}.png`}\n alt={chain.chain_id}\n className=\"oui-relative oui-size-5\"\n style={{\n marginLeft: index > 0 ? \"-4px\" : \"0\",\n zIndex: supportVaults.length - index,\n }}\n />\n ))}\n </div>\n );\n }, [supportVaults]);\n\n const headerImageElement = useMemo(() => {\n if (typeof headerImage === \"string\") {\n return (\n <img\n src={headerImage}\n alt=\"header\"\n className=\"oui-bg-contain oui-bg-center oui-bg-no-repeat\"\n />\n );\n }\n return headerImage;\n }, [headerImage]);\n\n return (\n <div className=\"oui-flex oui-items-center oui-justify-between\">\n <div className=\"oui-flex oui-max-w-[726px] oui-flex-col\">\n <div className=\"oui-flex oui-items-center oui-gap-1 oui-text-[18px] oui-font-normal oui-text-base-contrast-54\">\n {t(\"vaults.availableOn\")} {supportVaultsList}\n </div>\n <div className=\"oui-mb-6 oui-mt-8 oui-text-5xl oui-font-bold oui-leading-[44px] oui-text-base-contrast\">\n {t(\"vaults.header.title\")}\n </div>\n <div className=\"oui-text-xl oui-font-normal oui-text-base-contrast-54\">\n {t(\"vaults.header.description\", { brokerName })}\n </div>\n </div>\n <div className=\"oui-h-[238px] oui-w-[360px]\">{headerImageElement}</div>\n </div>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { useConfig } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { VaultsHeaderScript } from \"./vaults-header.script\";\n\nexport const VaultsHeaderMobile: FC<VaultsHeaderScript> = (props) => {\n const { supportVaults, headerImage } = props;\n const { t } = useTranslation();\n const brokerName = useConfig(\"brokerName\");\n\n const supportVaultsList = useMemo(() => {\n return (\n <div className=\"oui-flex oui-items-center\">\n {supportVaults.map((chain, index) => (\n <img\n key={chain.chain_id}\n src={`https://oss.orderly.network/static/network_logo/${chain.chain_id}.png`}\n alt={chain.chain_id}\n className=\"oui-relative oui-size-[18px]\"\n style={{\n marginLeft: index > 0 ? \"-4px\" : \"0\",\n zIndex: supportVaults.length - index,\n }}\n />\n ))}\n </div>\n );\n }, [supportVaults]);\n\n const headerImageElement = useMemo(() => {\n if (typeof headerImage === \"string\") {\n return (\n <img\n src={headerImage}\n alt=\"header\"\n className=\"oui-bg-contain oui-bg-center oui-bg-no-repeat\"\n />\n );\n }\n return headerImage;\n }, [headerImage]);\n\n return (\n <div className=\"oui-relative\">\n <div className=\"oui-flex oui-flex-col\">\n <div className=\"oui-flex oui-items-center oui-gap-1 oui-text-2xs oui-font-semibold oui-text-base-contrast-54\">\n {t(\"vaults.availableOn\")} {supportVaultsList}\n </div>\n <div className=\"oui-mb-4 oui-mt-6 oui-min-h-[56px] oui-max-w-[calc(100%-187px)] oui-text-xl oui-font-bold oui-text-base-contrast\">\n {t(\"vaults.header.title\")}\n </div>\n <div className=\"oui-max-w-[450px] oui-text-2xs oui-font-normal oui-text-base-contrast-54\">\n {t(\"vaults.header.description\", { brokerName })}\n </div>\n </div>\n <div className=\"oui-absolute -oui-right-3 -oui-top-4 oui-h-[124px] oui-w-[187px]\">\n {headerImageElement}\n </div>\n </div>\n );\n};\n","import { useMemo } from \"react\";\nimport { uniqBy } from \"ramda\";\nimport { useConfig } from \"@kodiak-finance/orderly-hooks\";\nimport { useVaultsStore } from \"../../store\";\nimport { VaultSupportedChain } from \"../../types/vault\";\n\nexport const useVaultsHeaderScript = () => {\n const { vaultInfo, vaultsPageConfig } = useVaultsStore();\n const brokerName = useConfig(\"brokerName\");\n\n const supportVaults = useMemo(() => {\n const array: VaultSupportedChain[] = [];\n vaultInfo.data.forEach((vault) => {\n array.push(...vault.supported_chains);\n });\n\n return uniqBy((item) => item.chain_id, array);\n }, [vaultInfo.data]);\n\n return {\n supportVaults,\n headerImage: vaultsPageConfig?.headerImage,\n brokerName,\n };\n};\n\nexport type VaultsHeaderScript = ReturnType<typeof useVaultsHeaderScript>;\n","import { FC } from \"react\";\nimport { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { VaultsHeaderDesktop } from \"./vaults-header.desktop\";\nimport { VaultsHeaderMobile } from \"./vaults-header.mobile\";\nimport { useVaultsHeaderScript } from \"./vaults-header.script\";\n\nexport const VaultsHeaderWidget: FC = () => {\n const state = useVaultsHeaderScript();\n const { isMobile } = useScreen();\n return isMobile ? (\n <VaultsHeaderMobile {...state} />\n ) : (\n <VaultsHeaderDesktop {...state} />\n );\n};\n","export * from \"./vaults-header.widget\";\nexport * from \"./vaults-header.desktop\";\nexport * from \"./vaults-header.script\";\n","import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Text, Divider, cn, TextProps, useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { VaultsIntroductionScript } from \"./vaults-introduction.script\";\n\nexport const VaultsIntroductionDesktop: FC<VaultsIntroductionScript> = (\n props,\n) => {\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n const { vaultsInfo } = props;\n\n return (\n <div\n className={cn(\n \"oui-flex oui-items-center \",\n \"oui-via-21.6% oui-via-83.23% oui-bg-gradient-to-r oui-from-[rgba(var(--oui-gradient-neutral-end)/1)] oui-to-[rgba(var(--oui-gradient-neutral-start)/1)]\",\n isMobile\n ? \"oui-gap-3 oui-rounded-xl oui-p-3\"\n : \"oui-gap-6 oui-rounded-2xl oui-p-6\",\n )}\n >\n <VaultsIntroductionItem\n title={t(\"vaults.introduction.tvl\")}\n value={vaultsInfo.tvl}\n textProps={{ currency: \"$\" } as any}\n isMobile={isMobile}\n />\n <Divider\n direction=\"vertical\"\n className={cn(\n \"oui-bg-white/[0.12]\",\n isMobile ? \"oui-h-[44px]\" : \"oui-h-[64px]\",\n )}\n />\n <VaultsIntroductionItem\n title={t(\"common.vaults\")}\n value={vaultsInfo.vaultsCount}\n isMobile={isMobile}\n />\n <Divider\n direction=\"vertical\"\n className={cn(\n \"oui-bg-white/[0.12]\",\n isMobile ? \"oui-h-[44px]\" : \"oui-h-[64px]\",\n )}\n />\n <VaultsIntroductionItem\n title={t(\"vaults.introduction.depositors\")}\n value={vaultsInfo.lpCount}\n isMobile={isMobile}\n />\n </div>\n );\n};\n\nconst VaultsIntroductionItem: FC<{\n title: string;\n value: number;\n textProps?: TextProps;\n isMobile?: boolean;\n}> = (props) => {\n const { title, value, textProps, isMobile } = props;\n\n return (\n <div\n className={cn(\n \"oui-flex oui-flex-1 oui-flex-col oui-items-center \",\n isMobile ? \"oui-gap-0.5\" : \"oui-gap-3\",\n )}\n >\n <div\n className={cn(\n \"oui-font-normal oui-text-base-contrast-54\",\n isMobile ? \"oui-text-2xs\" : \"oui-text-base\",\n )}\n >\n {title}\n </div>\n <Text.numeral\n className={cn(\n \"oui-font-semibold\",\n isMobile ? \"oui-text-base\" : \"oui-text-xl\",\n )}\n dp={0}\n {...textProps}\n >\n {value}\n </Text.numeral>\n </div>\n );\n};\n","import { useMemo } from \"react\";\nimport { useVaultsStore } from \"../../store\";\n\nexport const useVaultsIntroductionScript = () => {\n const { vaultInfo } = useVaultsStore();\n\n const vaultsInfo = useMemo(() => {\n const tvl = vaultInfo.data.reduce((acc, vault) => {\n return acc + vault.tvl;\n }, 0);\n const lpCount = vaultInfo.data.reduce((acc, vault) => {\n return acc + vault.lp_counts;\n }, 0);\n\n return {\n tvl,\n lpCount,\n vaultsCount: vaultInfo.data.length,\n };\n }, [vaultInfo.data]);\n\n return {\n vaultsInfo,\n };\n};\n\nexport type VaultsIntroductionScript = ReturnType<\n typeof useVaultsIntroductionScript\n>;\n","import { FC } from \"react\";\nimport { VaultsIntroductionDesktop } from \"./vaults-introduction.desktop\";\nimport { useVaultsIntroductionScript } from \"./vaults-introduction.script\";\n\nexport const VaultsIntroductionWidget: FC = () => {\n const state = useVaultsIntroductionScript();\n return <VaultsIntroductionDesktop {...state} />;\n};\n","export * from \"./vaults-introduction.widget\";\n","export interface VaultSupportedChain {\n chain_id: string;\n chain_name: string;\n}\n\nexport type VaultTimeRange = \"24h\" | \"7d\" | \"30d\" | \"all_time\";\n\nexport interface VaultInfo {\n vault_id: string;\n vault_address: string;\n vault_type: string;\n performance_fee_rate: number;\n supported_chains: VaultSupportedChain[];\n tvl: number;\n apr30_d: number;\n vault_lifetime_net_pnl: number;\n lp_counts: number;\n min_deposit_amount: number;\n min_withdrawal_amount: number;\n total_main_shares: number;\n est_main_share_price: number;\n gate_threshold_pct: number;\n gate_triggered: boolean;\n lock_duration: number;\n broker_id: string;\n \"30d_apr\": number;\n \"30d_apy\": number;\n}\n\nexport interface VaultLpPerformance {\n time_range: VaultTimeRange;\n tvl_max_drawdown: number;\n incremental_net_pnl: number;\n pnl_max_drawdown: number;\n}\n\nexport interface VaultLpInfo {\n vault_id: string;\n lp_nav: number;\n lp_tvl: number;\n total_main_shares: number;\n available_main_shares: number;\n potential_pnl: number;\n}\n\nexport interface VaultOperation {\n type: OperationType;\n vault_id: string;\n amount_change: number;\n created_time: string;\n status: string;\n}\n\nexport enum RoleType {\n LP = \"lp\",\n SP = \"sp\",\n}\n\nexport enum OperationType {\n DEPOSIT = \"deposit\",\n WITHDRAWAL = \"withdrawal\",\n}\n\nexport type VaultsPageConfig = {\n headerImage?: React.ReactNode;\n};\n","type Env = \"prod\" | \"staging\" | \"qa\" | \"dev\";\n\nexport const VAULTS_CONTRACT_ADDRESSES: Record<Env, Record<string, string>> = {\n prod: {\n vaultProtocol: \"0x70Fe7d65Ac7c1a1732f64d2E6fC0E33622D0C991\",\n vaultCrossChainManager: \"0x58c9747ccAAE56182C7d9c814F5eaca395D8c93B\",\n vaultPvLedger: \"0xB7E792f0da9104A27288421583748215AefFFd78\",\n vaultId:\n \"0xa3426a1cef4052c056fced18099be899d93f1427d13b9a1df1806b91fad3d0c2\",\n spAddress: \"0x8bAA309D93FFFB54A64444FD98E10d92D4d9Eb22\",\n },\n staging: {\n vaultProtocol: \"0x6B6059259B4096ea6420Eb5e08a22214d2303aE9\",\n vaultCrossChainManager: \"0x510dD61a988797114A9a51b0d228E894037BD9cb\",\n vaultPvLedger: \"0x20AFe57C75D1C548A9Da265fBFC5416c43783589\",\n vaultId:\n \"0x95514fb145354f07bb889f711e856481b5ed52fce52200148aa834b3b29544c8\",\n spAddress: \"0xbddfd22ef902a4898147a1ca5b985d03c62a8c41\",\n },\n qa: {\n vaultProtocol: \"0xF5b12d5F1db6DAB8C7c0561152b5e4bb8fD5eb38\",\n vaultCrossChainManager: \"0xB8a3245407571804b4db5219cBe8D9F2EA1828DE\",\n vaultPvLedger: \"0x15c9B5705CaCB4eb140dfd7a8c651E18027e5146\",\n vaultId:\n \"0x4812cbb88f4025372a3e2acd10d02b5f680d7d1fe78091f6cfde80122c861099\",\n spAddress: \"0xbddfd22ef902a4898147a1ca5b985d03c62a8c41\",\n },\n dev: {\n vaultProtocol: \"0xA292E1126703F804FBD5671F034c7226538C54C7\",\n vaultCrossChainManager: \"0x7568ACC147Af12b02713143C3177D7e89C28A9A6\",\n vaultPvLedger: \"0x2a5909498d85650744dD5CF964F2136962e5AE6E\",\n vaultId:\n \"0x4812cbb88f4025372a3e2acd10d02b5f680d7d1fe78091f6cfde80122c861099\",\n spAddress: \"0xbddfd22ef902a4898147a1ca5b985d03c62a8c41\",\n },\n};\n","import { OperationType, RoleType } from \"../types/vault\";\n\nexport const getToAccountPayloadType = (\n type: OperationType,\n role: RoleType,\n) => {\n if (type === OperationType.DEPOSIT && role === RoleType.LP) {\n return 0;\n }\n if (type === OperationType.WITHDRAWAL && role === RoleType.LP) {\n return 1;\n }\n if (type === OperationType.DEPOSIT && role === RoleType.SP) {\n return 2;\n }\n if (type === OperationType.WITHDRAWAL && role === RoleType.SP) {\n return 3;\n }\n return 1;\n};\n","import { useMemo } from \"react\";\nimport { usePrivateQuery } from \"@kodiak-finance/orderly-hooks\";\nimport { EMPTY_LIST } from \"@kodiak-finance/orderly-types\";\nimport { OperationType, VaultOperation } from \"../../../types/vault\";\n\ntype LatestOperationScriptProps = {\n type: OperationType;\n vaultId: string;\n};\n\nexport const useLatestOperationScript = (props: LatestOperationScriptProps) => {\n const { type, vaultId } = props;\n const { data: operationHistory, mutate: mutateOperationHistory } =\n usePrivateQuery<VaultOperation[]>(\n `/v1/account_sv_transaction_history?type=${type}&vault_id=${vaultId}&size=1`,\n {\n formatter: (response: { rows: VaultOperation[] }) => {\n return response?.rows || EMPTY_LIST;\n },\n revalidateOnFocus: false,\n },\n );\n\n const latestOperation = useMemo(() => {\n return operationHistory?.[0];\n }, [operationHistory]);\n\n return {\n latestOperation,\n refetch: mutateOperationHistory,\n };\n};\n\nexport type LatestOperationScript = ReturnType<typeof useLatestOperationScript>;\n","import { useMemo } from \"react\";\nimport { useAccount, useGetEnv, useTrack } from \"@kodiak-finance/orderly-hooks\";\nimport { useMutation } from \"@kodiak-finance/orderly-hooks\";\nimport { TrackerEventName } from \"@kodiak-finance/orderly-types\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { VAULTS_CONTRACT_ADDRESSES } from \"../../../contract\";\nimport { OperationType, RoleType } from \"../../../types/vault\";\nimport { getToAccountPayloadType } from \"../../../utils/operationPayload\";\nimport { useLatestOperationScript } from \"./latest.script\";\n\ntype OperationScript = {\n type: OperationType;\n vaultId: string;\n};\n\nexport const useOperationScript = (props: OperationScript) => {\n const { account, state } = useAccount();\n const env = useGetEnv();\n const { track } = useTrack();\n const verifyingContract = useMemo(() => {\n return VAULTS_CONTRACT_ADDRESSES[\n env as keyof typeof VAULTS_CONTRACT_ADDRESSES\n ].vaultPvLedger;\n }, [env]);\n const [postVaultOperation] = useMutation(\"/v1/sv_operation_request\");\n const { refetch: refetchOperationHistory } = useLatestOperationScript({\n type: props.type,\n vaultId: props.vaultId,\n });\n\n const disabledOperation = useMemo(() => {\n return state?.accountId !== state?.mainAccountId;\n }, [state?.accountId, state?.mainAccountId]);\n\n const handleOperation = async ({\n amount,\n vaultId,\n }: {\n amount: string;\n vaultId: string;\n }) => {\n if (state.accountId !== state.mainAccountId) {\n toast.error(\n \"Please switch to the main account to perform this operation.\",\n );\n return;\n }\n\n if (props.type === OperationType.DEPOSIT) {\n if (new Decimal(amount).lt(10)) {\n toast.error(\"Deposit amount is less than the minimum 10 USDC.\");\n return;\n }\n }\n\n const payloadType = getToAccountPayloadType(props.type, RoleType.LP);\n const requestParams = {\n payloadType,\n amount: new Decimal(Number(amount)).mul(10 ** 6).toString(),\n vaultId,\n token: \"USDC\",\n domain: {\n name: \"Orderly\",\n version: \"1\",\n chainId: state.connectWallet?.chainId as number,\n verifyingContract,\n },\n };\n\n const { message, signatured } =\n await account.generateDexRequest(requestParams);\n\n try {\n const res = await postVaultOperation({\n message: {\n ...message,\n chainId: state.connectWallet?.chainId as number,\n },\n signature: signatured,\n userAddress: state.address,\n verifyingContract,\n });\n\n if (!res.success) {\n // Track failure event\n if (props.type === OperationType.DEPOSIT) {\n track(TrackerEventName.vaultDepositFailed, {\n msg: res.message,\n });\n } else {\n track(TrackerEventName.vaultWithdrawFailed, {\n msg: res.message,\n });\n }\n toast.error(res.message);\n return;\n }\n\n await refetchOperationHistory();\n\n // Track success event\n if (props.type === OperationType.DEPOSIT) {\n track(TrackerEventName.vaultDepositSuccess, {\n quantity: amount,\n vaultId,\n });\n } else {\n track(TrackerEventName.vaultWithdrawSuccess, {\n quantity: amount,\n vaultId,\n });\n }\n\n toast.success(`${props.type} successful`);\n } catch (error: unknown) {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n\n // Track error event\n if (props.type === OperationType.DEPOSIT) {\n track(TrackerEventName.vaultDepositFailed, {\n msg: errorMessage,\n });\n } else {\n track(TrackerEventName.vaultWithdrawFailed, {\n msg: errorMessage,\n });\n }\n toast.error(errorMessage);\n console.error(error);\n }\n };\n\n return {\n handleOperation,\n disabledOperation,\n };\n};\n","import { useMemo, useState } from \"react\";\nimport {\n useTokenInfo,\n useCollateral,\n useMaxWithdrawal,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { useVaultsStore } from \"../../../store/vaultsStore\";\nimport { OperationType } from \"../../../types/vault\";\nimport { useOperationScript } from \"../depositAndWithdraw/operation.script\";\n\nexport type VaultDepositWidgetProps = {\n vaultId: string;\n};\n\nexport const useVaultDepositFormScript = (props: VaultDepositWidgetProps) => {\n const { vaultId } = props;\n const [quantity, setQuantity] = useState<string>(\"\");\n const { vaultInfo } = useVaultsStore();\n const { handleOperation, disabledOperation } = useOperationScript({\n type: OperationType.DEPOSIT,\n vaultId,\n });\n const { holding } = useCollateral();\n const { t } = useTranslation();\n\n const minDepositAmount = vaultInfo.data[0]?.min_deposit_amount || 0;\n\n const maxWithdrawalAmount = useMaxWithdrawal(\"USDC\");\n const availableBalance = useMemo(() => {\n return holding?.find((h) => h.token === \"USDC\")?.holding || 0;\n }, [holding]);\n const maxQuantity = useMemo(() => {\n return Math.min(maxWithdrawalAmount, availableBalance);\n }, [maxWithdrawalAmount, availableBalance]);\n\n const sharePrice = useMemo(() => {\n const vault = vaultInfo.data.find((v) => v.vault_id === vaultId);\n return vault?.est_main_share_price;\n }, [vaultInfo.data, vaultId]);\n\n const shares = useMemo(() => {\n if (!sharePrice || !quantity) {\n return \"-\";\n }\n return new Decimal(quantity).div(sharePrice).toString();\n }, [quantity, sharePrice]);\n\n const handleDeposit = async () => {\n if (!shares || shares === \"-\") {\n return;\n }\n await handleOperation({\n amount: quantity,\n vaultId,\n });\n setQuantity(\"\");\n };\n\n const token = useTokenInfo(\"USDC\");\n\n const sourceToken = useMemo(() => {\n return {\n ...token,\n display_name: token?.token,\n symbol: token?.token,\n };\n }, [token]);\n\n const onQuantityChange = (value: string) => {\n if (value && new Decimal(value).gt(maxQuantity)) {\n setQuantity(maxQuantity.toString());\n return;\n }\n setQuantity(value);\n };\n\n const disabledDeposit = useMemo(() => {\n return (\n !quantity ||\n quantity === \"0\" ||\n disabledOperation ||\n (!!quantity && new Decimal(quantity).lt(minDepositAmount))\n );\n }, [quantity, disabledOperation]);\n\n const inputHint = useMemo(() => {\n if (quantity && new Decimal(quantity).lt(minDepositAmount)) {\n return {\n hintMessage: t(\"vaults.operation.error.minDeposit\", {\n amount: minDepositAmount,\n }),\n status: \"error\",\n };\n }\n return {\n hintMessage: \"\",\n status: \"\",\n };\n }, [quantity, t, maxWithdrawalAmount, availableBalance]);\n\n return {\n quantity,\n onQuantityChange,\n sourceToken,\n maxQuantity,\n sharePrice,\n shares,\n handleDeposit,\n vaultId,\n disabledDeposit,\n disabledOperation,\n inputHint,\n };\n};\n\nexport type VaultDepositFormScript = ReturnType<\n typeof useVaultDepositFormScript\n>;\n","import { OperationType } from \"../../../types/vault\";\nimport { useLatestOperationScript } from \"../depositAndWithdraw/latest.script\";\n\nexport const useLatestDepositScript = ({ vaultId }: { vaultId: string }) => {\n const { latestOperation } = useLatestOperationScript({\n type: OperationType.DEPOSIT,\n vaultId,\n });\n return {\n latestOperation,\n };\n};\n\nexport type LatestDepositScript = ReturnType<typeof useLatestDepositScript>;\n","export const getOperationStatusColor = (status: string) => {\n if (status === \"completed\") {\n return \"success\";\n }\n if (status === \"rejected\" || status === \"failed\") {\n return \"danger\";\n }\n return \"primary\";\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { cn, Text, TokenIcon } from \"@kodiak-finance/orderly-ui\";\nimport { VaultOperation } from \"../../../types/vault\";\nimport { getOperationStatusColor } from \"../../../utils/getOperationStatusColor\";\n\nexport type LatestDepositUIProps = {\n latestOperation: VaultOperation | undefined;\n};\n\nexport const LatestDepositUI: FC<LatestDepositUIProps> = (props) => {\n const { latestOperation } = props;\n const { t } = useTranslation();\n\n if (!latestOperation) {\n return null;\n }\n\n return (\n <div className=\"oui-mt-3 oui-flex oui-flex-col oui-gap-2\">\n <div className=\"oui-text-xs oui-font-normal oui-text-base-contrast-54\">\n {t(\"vaults.deposit.latestDeposit\")}\n </div>\n <div className=\"oui-h-[44px] oui-rounded-lg oui-border oui-border-white/[0.12] oui-p-3\">\n <div className=\"oui-flex oui-items-center\">\n <div\n className={cn(\n \"oui-mr-1 oui-size-1 oui-rounded-full\",\n latestOperation.status === \"completed\" && \"oui-bg-success\",\n latestOperation.status === \"rejected\" && \"oui-bg-danger\",\n latestOperation.status === \"failed\" && \"oui-bg-danger\",\n (latestOperation.status === \"pending\" ||\n latestOperation.status === \"new\") &&\n \"oui-bg-primary\",\n )}\n />\n <Text\n color={getOperationStatusColor(latestOperation.status)}\n className=\"oui-text-xs oui-font-normal\"\n >\n {latestOperation.status.slice(0, 1).toUpperCase() +\n latestOperation.status.slice(1)}\n </Text>\n <TokenIcon name=\"USDC\" className=\"oui-ml-auto oui-mr-1 oui-size-4\" />\n <Text.numeral className=\"oui-text-sm oui-font-semibold oui-text-base-contrast-80\">\n {latestOperation.amount_change}\n </Text.numeral>\n </div>\n </div>\n </div>\n );\n};\n","import { FC } from \"react\";\nimport { useLatestDepositScript } from \"./latest-deposit.script\";\nimport { LatestDepositUI } from \"./latest-deposit.ui\";\n\nexport type LatestDepositWidgetProps = {\n vaultId: string;\n};\n\nexport const LatestDepositWidget: FC<LatestDepositWidgetProps> = (props) => {\n const { vaultId } = props;\n const state = useLatestDepositScript({ vaultId });\n return <LatestDepositUI {...state} />;\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Box, Text, Button } from \"@kodiak-finance/orderly-ui\";\nimport {\n BrokerWallet,\n QuantityInput,\n AvailableQuantity,\n} from \"@kodiak-finance/orderly-ui-transfer\";\nimport { LatestDepositWidget } from \"../latest-deposit/latest-deposit.widget\";\nimport { VaultDepositFormScript } from \"./vault-deposit-form.script\";\n\nexport const VaultDepositForm: FC<VaultDepositFormScript> = (props) => {\n const {\n quantity,\n onQuantityChange,\n sourceToken,\n maxQuantity,\n shares,\n handleDeposit,\n vaultId,\n disabledDeposit,\n disabledOperation,\n inputHint,\n } = props;\n\n const { t } = useTranslation();\n return (\n <div>\n <BrokerWallet />\n <Box mt={3} mb={1}>\n <QuantityInput\n value={quantity}\n onValueChange={onQuantityChange}\n token={{ ...sourceToken, precision: 6 } as any}\n testId=\"oui-testid-vault-deposit-dialog-quantity-input\"\n hintMessage={inputHint.hintMessage}\n status={inputHint.status as any}\n />\n </Box>\n <AvailableQuantity\n maxQuantity={maxQuantity?.toString() || \"0\"}\n onClick={() => {\n onQuantityChange(maxQuantity?.toString() || \"0\");\n }}\n />\n <Box\n mt={5}\n mb={1}\n className=\"oui-flex oui-items-center oui-justify-between oui-text-sm oui-font-semibold oui-text-base-contrast-54\"\n >\n <div>{t(\"vaults.deposit.estShares\")}</div>\n <Text.numeral\n dp={6}\n padding={false}\n suffix={\n <span className=\"oui-ml-1 oui-text-base-contrast-54\">\n {t(\"vaults.deposit.shares\")}\n </span>\n }\n >\n {shares}\n </Text.numeral>\n </Box>\n <Box\n mb={5}\n className=\"oui-flex oui-items-center oui-justify-between oui-text-sm oui-font-semibold oui-text-base-contrast-54\"\n >\n <div>{t(\"vaults.deposit.lockupDuration\")}</div>\n <Text.numeral\n suffix={\n <span className=\"oui-ml-1 oui-text-base-contrast-54\">hrs</span>\n }\n >\n 48\n </Text.numeral>\n </Box>\n {disabledOperation && (\n <div className=\"oui-mt-3 oui-text-center\">\n <Text color=\"warning\" className=\"oui-text-sm oui-font-semibold\">\n {t(\"vaults.operation.error.switchAccount\")}\n </Text>\n </div>\n )}\n <Button\n fullWidth\n color=\"primary\"\n disabled={disabledDeposit}\n className=\"oui-mt-3\"\n onClick={handleDeposit}\n >\n {t(\"common.deposit\")}\n </Button>\n <LatestDepositWidget vaultId={vaultId} />\n </div>\n );\n};\n","import { FC } from \"react\";\nimport {\n useVaultDepositFormScript,\n VaultDepositWidgetProps,\n} from \"./vault-deposit-form.script\";\nimport { VaultDepositForm } from \"./vault-deposit-form.ui\";\n\nexport const VaultDepositWidget: FC<VaultDepositWidgetProps> = (props) => {\n const { vaultId } = props;\n const state = useVaultDepositFormScript({ vaultId });\n return <VaultDepositForm {...state} />;\n};\n","export * from \"./vault-deposit-form.widget\";\n","import { useMemo, useState } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport {\n useVaultInfoState,\n useVaultLpInfoById,\n useVaultsStore,\n} from \"../../../store\";\nimport { OperationType } from \"../../../types/vault\";\nimport { useOperationScript } from \"../depositAndWithdraw/operation.script\";\n\nexport type VaultWithdrawFormScriptProps = {\n vaultId: string;\n};\n\nexport const useVaultWithdrawFormScript = (\n props: VaultWithdrawFormScriptProps,\n) => {\n const { vaultId } = props;\n const [quantity, setQuantity] = useState<string>(\"\");\n const { handleOperation, disabledOperation } = useOperationScript({\n type: OperationType.WITHDRAWAL,\n vaultId,\n });\n const vaultLpInfo = useVaultLpInfoById(vaultId);\n const { vaultInfo } = useVaultsStore();\n const { t } = useTranslation();\n\n const sharePrice = useMemo(() => {\n const vault = vaultInfo.data.find((v) => v.vault_id === vaultId);\n return vault?.est_main_share_price || 0;\n }, [vaultInfo.data, vaultId]);\n\n const maxQuantity = vaultLpInfo?.[0]?.available_main_shares || 0;\n\n const receivingAmount = useMemo(() => {\n if (!quantity || !sharePrice) {\n return \"-\";\n }\n return new Decimal(quantity).mul(sharePrice).toString();\n }, [quantity, sharePrice]);\n\n const handleWithdraw = async () => {\n await handleOperation({\n amount: quantity,\n vaultId,\n });\n };\n\n const onQuantityChange = (value: string) => {\n if (value && new Decimal(value).gt(maxQuantity)) {\n setQuantity(maxQuantity.toString());\n } else {\n setQuantity(value);\n }\n };\n\n const isMinAmount = useMemo(() => {\n if (\n !quantity ||\n !vaultInfo.data[0]?.est_main_share_price ||\n !vaultInfo.data[0]?.min_withdrawal_amount\n )\n return false;\n const isAll = quantity === maxQuantity.toString();\n\n if (isAll) {\n return false;\n }\n\n const receiving = new Decimal(quantity).mul(\n vaultInfo.data[0]?.est_main_share_price,\n );\n return receiving.lt(vaultInfo.data[0]?.min_withdrawal_amount);\n }, [quantity, vaultInfo, maxQuantity]);\n\n const disabledWithdraw = useMemo(() => {\n return (\n !quantity ||\n quantity === \"0\" ||\n disabledOperation ||\n (!!quantity && isMinAmount)\n );\n }, [quantity, disabledOperation]);\n\n const inputHint = useMemo(() => {\n if (quantity && isMinAmount) {\n return {\n hintMessage: t(\"vaults.operation.error.minWithdrawal\", {\n amount: vaultInfo.data[0]?.min_withdrawal_amount,\n }),\n status: \"error\",\n };\n }\n return {\n hintMessage: \"\",\n status: \"\",\n };\n }, [quantity, t]);\n\n return {\n quantity,\n onQuantityChange,\n maxQuantity,\n handleWithdraw,\n vaultId,\n sharePrice,\n receivingAmount,\n disabledWithdraw,\n disabledOperation,\n inputHint,\n };\n};\n\nexport type VaultWithdrawFormScript = ReturnType<\n typeof useVaultWithdrawFormScript\n>;\n","import { OperationType } from \"../../../types/vault\";\nimport { useLatestOperationScript } from \"../depositAndWithdraw/latest.script\";\n\nexport const useLatestWithdrawScript = ({ vaultId }: { vaultId: string }) => {\n const { latestOperation } = useLatestOperationScript({\n type: OperationType.WITHDRAWAL,\n vaultId,\n });\n return {\n latestOperation,\n };\n};\n\nexport type LatestWithdrawScript = ReturnType<typeof useLatestWithdrawScript>;\n","import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Text, cn } from \"@kodiak-finance/orderly-ui\";\n\nconst ProcessDot = () => {\n return <div className=\"oui-size-2 oui-rounded-full oui-bg-white/[0.54]\" />;\n};\n\nconst ProcessLine = () => {\n return <div className=\"oui-h-px oui-flex-1 oui-bg-white/[0.2]\" />;\n};\n\nconst ProcessText = ({\n children,\n className,\n}: {\n children: React.ReactNode;\n className?: string;\n}) => {\n return (\n <div\n className={cn(\n \"oui-flex-1 oui-text-2xs oui-font-normal oui-text-base-contrast-80\",\n className,\n )}\n >\n {children}\n </div>\n );\n};\n\nconst WithdrawProcess: FC = () => {\n const { t } = useTranslation();\n return (\n <>\n <div className=\"oui-flex oui-items-center\">\n <ProcessDot />\n <div className=\"oui-flex-1\">\n <ProcessLine />\n </div>\n <ProcessDot />\n <div className=\"oui-flex-1\">\n <ProcessLine />\n </div>\n <ProcessDot />\n </div>\n <div className=\"oui-mt-1 oui-flex oui-justify-between\">\n <ProcessText>{t(\"vaults.withdraw.process.initiate\")}</ProcessText>\n <ProcessText className=\"oui-text-center\">\n {t(\"vaults.withdraw.process.vaultProcess\")}\n </ProcessText>\n <ProcessText className=\"oui-text-right\">\n {t(\"vaults.withdraw.process.transferred\")}\n </ProcessText>\n </div>\n </>\n );\n};\n\nexport const WithdrawProcessWidget: FC = () => {\n const { t } = useTranslation();\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-2 oui-rounded-xl oui-border oui-border-white/[0.12] oui-p-3\">\n <div className=\"oui-flex oui-items-center oui-justify-between oui-text-sm oui-font-semibold oui-text-base-contrast-54\">\n <div>{t(\"vaults.withdraw.process.withdrawProcess\")}</div>\n <Text color=\"primary\">{t(\"vaults.withdraw.process.upTo\")}</Text>\n </div>\n <WithdrawProcess />\n </div>\n );\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { cn, Text, TokenIcon } from \"@kodiak-finance/orderly-ui\";\nimport { VaultOperation } from \"../../../types/vault\";\nimport { getOperationStatusColor } from \"../../../utils/getOperationStatusColor\";\nimport { WithdrawProcessWidget } from \"../withdraw/withdraw-process.ui\";\n\nexport type LatestWithdrawUIProps = {\n latestOperation: VaultOperation | undefined;\n};\n\nexport const LatestWithdrawUI: FC<LatestWithdrawUIProps> = (props) => {\n const { latestOperation } = props;\n const { t } = useTranslation();\n if (!latestOperation) {\n return <WithdrawProcessWidget />;\n }\n\n return (\n <div className=\"oui-mt-3 oui-flex oui-flex-col oui-gap-2\">\n <div className=\"oui-text-xs oui-font-normal oui-text-base-contrast-54\">\n {t(\"vaults.withdraw.latestWithdraw\")}\n </div>\n <div className=\"oui-h-[44px] oui-rounded-lg oui-border oui-border-white/[0.12] oui-p-3\">\n <div className=\"oui-flex oui-items-center\">\n <div\n className={cn(\n \"oui-mr-1 oui-size-1 oui-rounded-full\",\n latestOperation.status === \"completed\" && \"oui-bg-success\",\n latestOperation.status === \"rejected\" && \"oui-bg-danger\",\n latestOperation.status === \"failed\" && \"oui-bg-danger\",\n (latestOperation.status === \"pending\" ||\n latestOperation.status === \"new\") &&\n \"oui-bg-primary\",\n )}\n />\n <Text\n color={getOperationStatusColor(latestOperation.status)}\n className=\"oui-text-xs oui-font-normal\"\n >\n {latestOperation.status.slice(0, 1).toUpperCase() +\n latestOperation.status.slice(1)}\n </Text>\n <TokenIcon name=\"USDC\" className=\"oui-ml-auto oui-mr-1 oui-size-4\" />\n <Text.numeral className=\"oui-text-sm oui-font-semibold oui-text-base-contrast-80\">\n {latestOperation.amount_change || \"-\"}\n </Text.numeral>\n </div>\n </div>\n </div>\n );\n};\n","import { FC } from \"react\";\nimport { useLatestWithdrawScript } from \"./latest-withdraw-script\";\nimport { LatestWithdrawUI } from \"./latest-withdraw-ui\";\n\nexport type LatestWithdrawWidgetProps = {\n vaultId: string;\n};\n\nexport const LatestWithdrawWidget: FC<LatestWithdrawWidgetProps> = (props) => {\n const { vaultId } = props;\n const state = useLatestWithdrawScript({ vaultId });\n return <LatestWithdrawUI {...state} />;\n};\n","export * from \"./latest-withdraw-widget\";\n","import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Box,\n Text,\n Button,\n modal,\n SimpleDialog,\n SimpleSheet,\n useModal,\n cn,\n useScreen,\n} from \"@kodiak-finance/orderly-ui\";\nimport {\n BrokerWallet,\n QuantityInput,\n AvailableQuantity,\n} from \"@kodiak-finance/orderly-ui-transfer\";\nimport { LatestWithdrawWidget } from \"../latest-withdraw\";\nimport { VaultWithdrawFormScript } from \"./vault-withdraw-form.script\";\nimport { WithdrawProcessWidget } from \"./withdraw-process.ui\";\n\nexport const VaultWithdrawForm: FC<VaultWithdrawFormScript> = (props) => {\n const {\n quantity,\n onQuantityChange,\n maxQuantity,\n handleWithdraw,\n vaultId,\n sharePrice,\n receivingAmount,\n disabledWithdraw,\n disabledOperation,\n inputHint,\n } = props;\n const { isMobile } = useScreen();\n\n const handleInitialWithdraw = () => {\n modal.show(isMobile ? WithdrawInitialSheet : WithdrawInitialDialog, {\n quantity,\n receivingAmount,\n handleWithdraw,\n });\n };\n\n const { t } = useTranslation();\n return (\n <div>\n <BrokerWallet />\n <Box mt={3} mb={1}>\n <QuantityInput\n value={quantity}\n onValueChange={onQuantityChange}\n token={{ display_name: \"Shares\", precision: 6 } as any}\n testId=\"oui-testid-vault-withdraw-dialog-quantity-input\"\n hintMessage={inputHint.hintMessage}\n status={inputHint.status as any}\n />\n </Box>\n <AvailableQuantity\n maxQuantity={maxQuantity}\n onClick={() => {\n onQuantityChange(maxQuantity.toString());\n }}\n />\n\n <WithdrawKVItem\n label={t(\"vaults.withdraw.estPricePerShare\")}\n currency=\"$\"\n value={sharePrice || \"-\"}\n className=\"oui-mb-1 oui-mt-5\"\n />\n <WithdrawKVItem\n label={t(\"vaults.withdraw.estReceivingAmount\")}\n value={receivingAmount}\n suffix={\n <span className=\"oui-ml-1 oui-text-base-contrast-36\">USDC</span>\n }\n className=\"oui-mb-5\"\n />\n\n {disabledOperation && (\n <div className=\"oui-mt-3 oui-text-center\">\n <Text color=\"warning\" className=\"oui-text-sm oui-font-semibold\">\n {t(\"vaults.operation.error.switchAccount\")}\n </Text>\n </div>\n )}\n\n <Button\n fullWidth\n color=\"primary\"\n disabled={disabledWithdraw}\n className=\"oui-mt-3\"\n onClick={handleInitialWithdraw}\n >\n {t(\"common.withdraw\")}\n </Button>\n <div className=\"oui-mt-3\">\n <LatestWithdrawWidget vaultId={vaultId} />\n </div>\n </div>\n );\n};\n\ntype WithdrawKVItemProps = {\n label: string;\n value: string | number;\n suffix?: React.ReactNode;\n currency?: string;\n className?: string;\n};\nconst WithdrawKVItem = ({\n label,\n value,\n suffix,\n currency,\n className,\n}: WithdrawKVItemProps) => {\n return (\n <div\n className={cn(\n \"oui-flex oui-items-center oui-justify-between oui-text-sm oui-font-semibold oui-text-base-contrast-54\",\n className,\n )}\n >\n <div>{label}</div>\n <Text.numeral\n currency={currency}\n className=\"oui-text-base-contrast\"\n suffix={suffix}\n >\n {value}\n </Text.numeral>\n </div>\n );\n};\n\ntype WithdrawInitialContentProps = {\n quantity: string;\n receivingAmount: string;\n handleWithdraw: () => void;\n hide?: () => void;\n};\n\nconst WithdrawInitialContent = (props: WithdrawInitialContentProps) => {\n const { quantity, receivingAmount, handleWithdraw, hide } = props;\n const { t } = useTranslation();\n return (\n <div className=\"oui-flex oui-flex-col\">\n <WithdrawKVItem\n label={t(\"vaults.withdraw.dialog.withdrawalAmount\")}\n value={quantity}\n suffix={\n <span className=\"oui-ml-1 oui-text-base-contrast-36\">Shares</span>\n }\n />\n <WithdrawKVItem\n label={t(\"vaults.withdraw.dialog.estimatedReceiving\")}\n value={receivingAmount}\n suffix={\n <span className=\"oui-ml-1 oui-text-base-contrast-36\">USDC</span>\n }\n className=\"oui-mt-1\"\n />\n <Text color=\"warning\" className=\"oui-my-5 oui-text-sm oui-font-semibold\">\n {t(\"vaults.withdraw.dialog.note\")}\n </Text>\n <WithdrawProcessWidget />\n <Button\n fullWidth\n color=\"primary\"\n className=\"oui-mt-5\"\n onClick={async () => {\n await handleWithdraw();\n hide?.();\n }}\n >\n {t(\"vaults.withdraw.dialog.initiateWithdrawal\")}\n </Button>\n </div>\n );\n};\n\nconst WithdrawInitialDialog = modal.create(\n ({\n quantity,\n receivingAmount,\n handleWithdraw,\n }: WithdrawInitialContentProps) => {\n const { visible, hide, onOpenChange } = useModal();\n const { t } = useTranslation();\n return (\n <SimpleDialog\n title={t(\"vaults.withdraw.dialog.title\")}\n open={visible}\n onOpenChange={onOpenChange}\n >\n <WithdrawInitialContent\n quantity={quantity}\n receivingAmount={receivingAmount}\n handleWithdraw={handleWithdraw}\n hide={hide}\n />\n </SimpleDialog>\n );\n },\n);\n\nconst WithdrawInitialSheet = modal.create(\n ({\n quantity,\n receivingAmount,\n handleWithdraw,\n }: WithdrawInitialContentProps) => {\n const { visible, hide, onOpenChange } = useModal();\n const { t } = useTranslation();\n return (\n <SimpleSheet\n title={t(\"vaults.withdraw.dialog.title\")}\n open={visible}\n onOpenChange={onOpenChange}\n >\n <WithdrawInitialContent\n quantity={quantity}\n receivingAmount={receivingAmount}\n handleWithdraw={handleWithdraw}\n hide={hide}\n />\n </SimpleSheet>\n );\n },\n);\n","import { FC } from \"react\";\nimport { useVaultWithdrawFormScript } from \"./vault-withdraw-form.script\";\nimport { VaultWithdrawForm } from \"./vault-withdraw-form.ui\";\n\nexport type VaultWithdrawWidgetProps = {\n vaultId: string;\n};\n\nexport const VaultWithdrawWidget: FC<VaultWithdrawWidgetProps> = (props) => {\n const { vaultId } = props;\n const state = useVaultWithdrawFormScript({ vaultId });\n return <VaultWithdrawForm {...state} />;\n};\n","export * from \"./vault-withdraw-form.widget\";\n","import { FC, useState } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n ArrowDownSquareFillIcon,\n ArrowUpSquareFillIcon,\n registerSimpleDialog,\n registerSimpleSheet,\n TabPanel,\n Tabs,\n} from \"@kodiak-finance/orderly-ui\";\nimport { VaultDepositWidget } from \"../deposit\";\nimport { VaultWithdrawWidget } from \"../withdraw\";\n\nexport const VaultDepositAndWithdrawWithDialogId =\n \"VaultDepositAndWithdrawWithDialogId\";\nexport const VaultDepositAndWithdrawWithSheetId =\n \"VaultDepositAndWithdrawWithSheetId\";\n\nexport type VaultDepositAndWithdrawProps = {\n activeTab?: \"deposit\" | \"withdraw\";\n close?: () => void;\n vaultId: string;\n};\n\nexport const VaultDepositAndWithdraw: FC<VaultDepositAndWithdrawProps> = (\n props,\n) => {\n const [activeTab, setActiveTab] = useState<string>(\n props.activeTab || \"deposit\",\n );\n const { vaultId } = props;\n const { t } = useTranslation();\n\n return (\n <Tabs\n value={activeTab}\n onValueChange={setActiveTab}\n variant=\"contained\"\n size=\"lg\"\n classNames={{\n tabsList: \"oui-px-0\",\n tabsContent: \"oui-pt-5\",\n }}\n >\n <TabPanel\n title={t(\"common.deposit\")}\n icon={<ArrowDownSquareFillIcon />}\n value=\"deposit\"\n >\n <VaultDepositWidget vaultId={vaultId} />\n </TabPanel>\n <TabPanel\n title={t(\"common.withdraw\")}\n icon={<ArrowUpSquareFillIcon />}\n value=\"withdraw\"\n >\n <VaultWithdrawWidget vaultId={vaultId} />\n </TabPanel>\n </Tabs>\n );\n};\n\nregisterSimpleDialog(\n VaultDepositAndWithdrawWithDialogId,\n VaultDepositAndWithdraw,\n {\n size: \"md\",\n classNames: {\n content: \"oui-border oui-border-line-6\",\n },\n },\n);\n\nregisterSimpleSheet(\n VaultDepositAndWithdrawWithSheetId,\n VaultDepositAndWithdraw,\n);\n","export const ORDERLY_ICON =\n \"https://oss.orderly.network/static/symbol_logo/ORDER.png\";\n\nexport const ORDERLY_VAULT_TITLE = \"Orderly OmniVault\";\n\nexport const ORDERLY_VAULT_DESCRIPTION =\n \"Earn passive yields effortlessly, no trading expertise required. OmniVault deploys market-making strategies, taking on liquidations, and accrue platform fees.\";\n","import { useEffect, useMemo } from \"react\";\nimport { useAccount, useCollateral, useGetEnv } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { modal, useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { VAULTS_WEBSITE_URLS } from \"../../api/env\";\nimport { useSVApiUrl } from \"../../hooks/useSVAPIUrl\";\nimport { useVaultLpInfoById, useVaultsStore } from \"../../store/vaultsStore\";\nimport { VaultInfo } from \"../../types/vault\";\nimport {\n VaultDepositAndWithdrawWithDialogId,\n VaultDepositAndWithdrawWithSheetId,\n} from \"../vault-operation/depositAndWithdraw\";\nimport { ORDERLY_ICON } from \"./constants\";\n\nexport const useVaultCardScript = (vault: VaultInfo) => {\n const { t } = useTranslation();\n const vaultLpInfo = useVaultLpInfoById(vault.vault_id);\n const { fetchVaultLpInfo } = useVaultsStore();\n const env = useGetEnv();\n const { isMobile } = useScreen();\n\n const { state } = useAccount();\n const svApiUrl = useSVApiUrl();\n\n const { holding } = useCollateral();\n\n const availableBalance = useMemo(() => {\n return holding?.find((h) => h.token === \"USDC\")?.holding || 0;\n }, [holding]);\n\n useEffect(() => {\n if (!state.address || !svApiUrl || !vault.vault_id) {\n return;\n }\n\n // fetchVaultLpPerformance({ vault_id: vault.vault_id }, svApiUrl);\n fetchVaultLpInfo(\n { vault_id: vault.vault_id, wallet_address: state.address },\n svApiUrl,\n );\n }, [vault.vault_id, state.address, svApiUrl]);\n\n const memoizedAvailableBalance = useMemo(() => {\n return availableBalance;\n }, [availableBalance]);\n\n const lpInfo = useMemo(() => {\n const info = vaultLpInfo?.[0];\n if (!info) {\n return {\n deposits: \"--\",\n earnings: \"--\",\n };\n }\n return {\n deposits: info.lp_tvl - info.potential_pnl,\n earnings: info.potential_pnl,\n };\n }, [vaultLpInfo]);\n\n const isEVMConnected = useMemo(() => {\n return state.chainNamespace === \"EVM\";\n }, [state.chainNamespace]);\n\n const isSOLConnected = useMemo(() => {\n return state.chainNamespace === \"SOL\";\n }, [state.chainNamespace]);\n\n const isWrongNetwork = useMemo(() => {\n return (\n state.chainNamespace !== \"EVM\" &&\n state.chainNamespace !== \"SOL\" &&\n state.accountId !== state.mainAccountId\n );\n }, [state.chainNamespace, state.accountId, state.mainAccountId]);\n\n const openDepositAndWithdraw = (activeTab: \"deposit\" | \"withdraw\") => {\n modal.show(\n isMobile\n ? VaultDepositAndWithdrawWithSheetId\n : VaultDepositAndWithdrawWithDialogId,\n {\n activeTab,\n vaultId: vault.vault_id,\n },\n );\n };\n\n const openVaultWebsite = () => {\n const url = VAULTS_WEBSITE_URLS[env as keyof typeof VAULTS_WEBSITE_URLS];\n window.open(`${url}/vaults`, \"_blank\");\n };\n\n return {\n title: t(\"vaults.card.orderly.title\"),\n description: t(\"vaults.card.orderly.description\"),\n icon: ORDERLY_ICON,\n vaultInfo: vault,\n lpInfo,\n isEVMConnected,\n isSOLConnected,\n openDepositAndWithdraw,\n availableBalance: memoizedAvailableBalance,\n openVaultWebsite,\n isWrongNetwork,\n };\n};\n\nexport type VaultCardScript = ReturnType<typeof useVaultCardScript>;\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Text,\n cn,\n Button,\n ArrowRightUpSquareFillIcon,\n useScreen,\n} from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuard } from \"@kodiak-finance/orderly-ui-connector\";\nimport { VaultCardScript } from \"./vaultCard.script\";\n\nexport const VaultCard: FC<VaultCardScript> = (props) => {\n const {\n title,\n vaultInfo,\n lpInfo,\n description,\n isEVMConnected,\n isSOLConnected,\n openDepositAndWithdraw,\n availableBalance,\n openVaultWebsite,\n } = props;\n\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n\n const supportVaultsList = useMemo(() => {\n return (\n <div className=\"oui-flex oui-items-center\">\n {vaultInfo.supported_chains.map((chain, index) => (\n <img\n key={chain.chain_id}\n src={`https://oss.orderly.network/static/network_logo/${chain.chain_id}.png`}\n alt={chain.chain_id}\n className={cn(\n \"oui-relative\",\n isMobile ? \"oui-size-[18px]\" : \"oui-size-5\",\n )}\n style={{\n marginLeft: index > 0 ? \"-4px\" : \"0\",\n zIndex: vaultInfo.supported_chains.length - index,\n }}\n />\n ))}\n </div>\n );\n }, [vaultInfo.supported_chains]);\n console.log(\"supportVaultsList\", supportVaultsList);\n\n return (\n <div className=\"oui-relative oui-h-[388px] oui-overflow-hidden oui-rounded-2xl oui-border oui-border-solid oui-border-white/[0.12] oui-bg-base-9\">\n <div\n style={{\n position: \"absolute\",\n top: 0,\n right: 0,\n width: \"100%\",\n height: \"180px\",\n backdropFilter: \"blur(2px)\",\n zIndex: 1,\n background:\n \"linear-gradient(180deg, rgba(44, 5, 69, 0.80) 0%, rgba(19, 21, 25, 0.80) 63.46%, #131519 100%)\",\n }}\n ></div>\n <img\n src=\"/vaults/orderly_vault_card_bg.png\"\n alt=\"\"\n style={{\n position: \"absolute\",\n top: 0,\n right: 0,\n width: \"100%\",\n height: \"180px\",\n zIndex: 0,\n }}\n />\n\n <div className=\"oui-absolute oui-left-0 oui-top-0 oui-z-20 oui-flex oui-flex-col oui-gap-3 oui-p-6\">\n <div className=\"oui-flex oui-items-center oui-gap-2\">\n <img\n src=\"https://oss.orderly.network/static/symbol_logo/ORDER.png\"\n alt=\"\"\n className=\"oui-size-8\"\n />\n <div className=\"oui-text-[18px] oui-font-semibold oui-text-white\">\n {title}\n </div>\n {supportVaultsList}\n <div\n className=\"oui-z-50 oui-ml-auto oui-cursor-pointer\"\n onClick={openVaultWebsite}\n >\n <ArrowRightUpSquareFillIcon\n color=\"white\"\n width={18}\n height={18}\n viewBox=\"0 0 18 18\"\n />\n </div>\n </div>\n\n <div className=\"oui-text-2xs oui-font-normal oui-leading-[18px] oui-text-base-contrast-54\">\n {description}\n </div>\n\n <div className=\"oui-flex oui-items-center oui-gap-2\">\n <VaultInfoItem\n label={t(\"vaults.card.tvl\")}\n value={vaultInfo.tvl}\n textProps={{\n currency: \"$\",\n dp: 0,\n type: \"numeral\",\n }}\n />\n <VaultInfoItem\n label={t(\"vaults.card.apy\")}\n value={(vaultInfo[\"30d_apy\"] * 100).toFixed(2) + \"%\"}\n textProps={{\n color: \"brand\",\n type: \"gradient\",\n }}\n />\n </div>\n\n <div className=\"oui-mt-3 oui-flex oui-flex-col oui-items-center oui-gap-2 oui-rounded-lg oui-bg-white/[0.06] oui-p-3\">\n <LpInfoItem\n label={t(\"vaults.card.myDeposits\")}\n value={lpInfo.deposits}\n />\n <LpInfoItem\n label={t(\"vaults.card.myEarnings\")}\n value={lpInfo.earnings}\n />\n </div>\n\n <LpInfoItem\n label={t(\"vaults.card.accountBalance\")}\n value={availableBalance}\n />\n\n <VaultCardOperation\n isEVMConnected={isEVMConnected}\n isSOLConnected={isSOLConnected}\n openDepositAndWithdraw={openDepositAndWithdraw}\n />\n </div>\n </div>\n );\n};\n\nconst VaultInfoItem: FC<{\n label: string;\n value: string | number;\n textProps?: any;\n}> = (props) => {\n const { label, value, textProps } = props;\n\n return (\n <div\n className={cn(\n \"oui-flex oui-flex-1 oui-flex-col oui-items-center oui-justify-center oui-px-3 oui-py-2\",\n \"oui-rounded-lg oui-border oui-border-solid oui-border-white/[0.12]\",\n )}\n >\n <div className=\"oui-text-2xs oui-font-normal oui-leading-[18px] oui-text-base-contrast-54\">\n {label}\n </div>\n {textProps.type === \"gradient\" ? (\n <Text.gradient\n className=\"oui-text-base oui-font-semibold\"\n {...textProps}\n >\n {value}\n </Text.gradient>\n ) : (\n <Text.numeral\n className=\"oui-text-base oui-font-semibold\"\n {...textProps}\n >\n {value}\n </Text.numeral>\n )}\n </div>\n );\n};\n\nconst LpInfoItem: FC<{\n label: string;\n value: string | number;\n textProps?: any;\n}> = (props) => {\n const { label, value, textProps } = props;\n\n return (\n <div className=\"oui-flex oui-w-full oui-items-center oui-justify-between oui-text-2xs oui-font-normal\">\n <div className=\"oui-text-base-contrast-54\">{label}</div>\n <Text.numeral\n className=\"oui-text-base-contrast-80\"\n {...textProps}\n dp={2}\n suffix={\n <span className=\"oui-ml-1 oui-text-base-contrast-36\">USDC</span>\n }\n >\n {value}\n </Text.numeral>\n </div>\n );\n};\n\ntype VaultCardOperationProps = {\n isEVMConnected: boolean;\n isSOLConnected: boolean;\n openDepositAndWithdraw: (activeTab: \"deposit\" | \"withdraw\") => void;\n};\n\nconst VaultCardOperation: FC<VaultCardOperationProps> = (props) => {\n const { isEVMConnected, isSOLConnected, openDepositAndWithdraw } = props;\n const { t } = useTranslation();\n\n return (\n <AuthGuard buttonProps={{ size: \"md\", fullWidth: true }}>\n {isEVMConnected || isSOLConnected ? (\n <div className=\"oui-flex oui-items-center oui-gap-2\">\n <Button\n className=\"oui-flex-1\"\n size=\"md\"\n onClick={() => openDepositAndWithdraw(\"deposit\")}\n >\n {t(\"common.deposit\")}\n </Button>\n <Button\n className=\"oui-flex-1\"\n size=\"md\"\n color=\"secondary\"\n onClick={() => openDepositAndWithdraw(\"withdraw\")}\n >\n {t(\"common.withdraw\")}\n </Button>\n </div>\n ) : (\n <Button size=\"md\" color=\"warning\">\n {t(\"connector.wrongNetwork\")}\n </Button>\n )}\n </AuthGuard>\n );\n};\n","import { FC } from \"react\";\nimport { VaultInfo } from \"../../types/vault\";\nimport { useVaultCardScript } from \"./vaultCard.script\";\nimport { VaultCard } from \"./vaultCard.ui\";\n\nexport type VaultCardWidgetProps = {\n vault: VaultInfo;\n};\n\nexport const VaultCardWidget: FC<VaultCardWidgetProps> = (props) => {\n const { vault } = props;\n const state = useVaultCardScript(vault);\n\n return <VaultCard {...state} />;\n};\n","export * from \"./vaultCard.widget\";\nexport * from \"./vaultCard.script\";\nexport * from \"./vaultCard.ui\";\nexport * from \"./constants\";\n","import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { VaultInfo } from \"../../types/vault\";\nimport { VaultCardWidget } from \"../vault-card\";\n\nexport const AllVaultsDesktop: FC<{ vaults: VaultInfo[] }> = (props) => {\n const { vaults } = props;\n const { t } = useTranslation();\n\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-6\">\n <div className=\"oui-text-xl oui-font-normal oui-text-base-contrast\">\n {t(\"vaults.allVaults\")}\n </div>\n <div className=\"oui-grid oui-grid-cols-3 oui-gap-4 min-[1024px]:oui-grid-cols-3\">\n {vaults.map((vault) => (\n <VaultCardWidget key={vault.vault_id} vault={vault} />\n ))}\n </div>\n </div>\n );\n};\n","import { FC } from \"react\";\nimport { VaultInfo } from \"../../types/vault\";\nimport { VaultCardWidget } from \"../vault-card\";\n\nexport const AllVaultsMobile: FC<{ vaults: VaultInfo[] }> = (props) => {\n const { vaults } = props;\n\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-3\">\n {vaults.map((vault) => (\n <VaultCardWidget key={vault.vault_id} vault={vault} />\n ))}\n </div>\n );\n};\n","import { FC } from \"react\";\nimport { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { useVaultInfoState } from \"../../store/vaultsStore\";\nimport { AllVaultsDesktop } from \"./all-vaults.desktop\";\nimport { AllVaultsMobile } from \"./all-vaults.mobile\";\n\nexport const AllVaultsWidget: FC = () => {\n const { data } = useVaultInfoState();\n const { isMobile } = useScreen();\n return isMobile ? (\n <AllVaultsMobile vaults={data} />\n ) : (\n <AllVaultsDesktop vaults={data} />\n );\n};\n","export * from \"./all-vaults.widget\";\nexport * from \"./all-vaults.desktop\";\n","import React, { FC } from \"react\";\nimport { cn, useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { VaultsProvider } from \"../components/provider/vaults-provider\";\nimport type { VaultsPageConfig } from \"../types/vault\";\n\nconst LazyVaultsHeaderWidget = React.lazy(() =>\n import(\"../components/vaults-header\").then((mod) => {\n return { default: mod.VaultsHeaderWidget };\n }),\n);\n\nconst LazyVaultsIntroductionWidget = React.lazy(() =>\n import(\"../components/vaults-introduction\").then((mod) => {\n return { default: mod.VaultsIntroductionWidget };\n }),\n);\n\nconst LazyAllVaultsWidget = React.lazy(() =>\n import(\"../components/all-vaults\").then((mod) => {\n return { default: mod.AllVaultsWidget };\n }),\n);\n\nexport type VaultsPageProps = {\n className?: string;\n config?: VaultsPageConfig;\n};\n\nexport const VaultsPage: FC<VaultsPageProps> = (props) => {\n const { isMobile } = useScreen();\n return (\n <VaultsProvider {...props}>\n <div\n className={cn(\n \"oui-relative oui-min-h-screen \",\n \"oui-bg-base-10\",\n isMobile ? \"oui-px-3 oui-py-6\" : \"oui-px-6 oui-py-12\",\n props?.className,\n )}\n >\n <div\n id=\"vaults-content\"\n className={cn(\n \"oui-mx-auto oui-flex oui-max-w-[1200px] oui-flex-col\",\n isMobile ? \"oui-gap-6\" : \"oui-gap-12\",\n )}\n >\n <React.Suspense fallback={null}>\n <LazyVaultsHeaderWidget />\n </React.Suspense>\n <React.Suspense fallback={null}>\n <LazyVaultsIntroductionWidget />\n </React.Suspense>\n <React.Suspense fallback={null}>\n <LazyAllVaultsWidget />\n </React.Suspense>\n </div>\n </div>\n </VaultsProvider>\n );\n};\n","import { FC, PropsWithChildren, useEffect } from \"react\";\nimport { useSVApiUrl } from \"../../hooks/useSVAPIUrl\";\nimport { VaultsPageProps } from \"../../pages\";\nimport { useVaultsStore } from \"../../store\";\n\nexport const VaultsProvider: FC<PropsWithChildren<VaultsPageProps>> = (\n props,\n) => {\n const svApiUrl = useSVApiUrl();\n const { fetchVaultInfo, setVaultsPageConfig } = useVaultsStore();\n\n useEffect(() => {\n if (props.config) {\n setVaultsPageConfig(props.config);\n }\n }, [props.config]);\n\n useEffect(() => {\n if (!svApiUrl) {\n return;\n }\n fetchVaultInfo(svApiUrl);\n }, [svApiUrl]);\n\n return <div>{props.children}</div>;\n};\n","export * from \"./vault\";\n","export * from \"./pages\";\nexport * from \"./types\";\nexport * from \"./api/api\";\nexport * from \"./store\";\nexport * from \"./components\";\n","export * from \"./all-vaults\";\nexport * from \"./vault-card\";\nexport * from \"./vaults-header\";\nexport * from \"./vaults-introduction\";\nexport * from \"./vault-operation\";\n","export * from \"./depositAndWithdraw\";\nexport * from \"./deposit\";\nexport * from \"./withdraw\";\nexport * from \"./latest-deposit\";\nexport * from \"./latest-withdraw\";\n","export * from \"./latest-deposit.widget\";\n"]}
1
+ {"version":3,"sources":["../src/api/env.ts","../src/hooks/useSVAPIUrl.ts","../src/api/request.ts","../src/api/api.ts","../src/store/vaultsStore.ts","../src/store/index.ts","../src/components/vaults-header/vaults-header.desktop.tsx","../src/components/vaults-header/vaults-header.mobile.tsx","../src/components/vaults-header/vaults-header.script.ts","../src/components/vaults-header/vaults-header.widget.tsx","../src/components/vaults-header/index.ts","../src/components/vaults-introduction/vaults-introduction.desktop.tsx","../src/components/vaults-introduction/vaults-introduction.script.ts","../src/components/vaults-introduction/vaults-introduction.widget.tsx","../src/components/vaults-introduction/index.ts","../src/types/vault.ts","../src/contract/index.ts","../src/utils/operationPayload.ts","../src/components/vault-operation/depositAndWithdraw/latest.script.ts","../src/components/vault-operation/depositAndWithdraw/operation.script.ts","../src/components/vault-operation/deposit/vault-deposit-form.script.ts","../src/components/vault-operation/latest-deposit/latest-deposit.script.ts","../src/utils/getOperationStatusColor.ts","../src/components/vault-operation/latest-deposit/latest-deposit.ui.tsx","../src/components/vault-operation/latest-deposit/latest-deposit.widget.tsx","../src/components/vault-operation/deposit/vault-deposit-form.ui.tsx","../src/components/vault-operation/deposit/vault-deposit-form.widget.tsx","../src/components/vault-operation/deposit/index.ts","../src/components/vault-operation/withdraw/vault-withdraw-form.script.ts","../src/components/vault-operation/latest-withdraw/latest-withdraw-script.ts","../src/components/vault-operation/withdraw/withdraw-process.ui.tsx","../src/components/vault-operation/latest-withdraw/latest-withdraw-ui.tsx","../src/components/vault-operation/latest-withdraw/latest-withdraw-widget.tsx","../src/components/vault-operation/latest-withdraw/index.ts","../src/components/vault-operation/withdraw/vault-withdraw-form.ui.tsx","../src/components/vault-operation/withdraw/vault-withdraw-form.widget.tsx","../src/components/vault-operation/withdraw/index.ts","../src/components/vault-operation/depositAndWithdraw/index.tsx","../src/components/vault-card/constants.ts","../src/components/vault-card/vaultCard.script.ts","../src/utils/parseMarkdownLinks.tsx","../src/components/vault-card/vaultCard.ui.tsx","../src/components/vault-card/vaultCard.widget.tsx","../src/components/vault-card/index.ts","../src/components/all-vaults/vaults-list.tsx","../src/components/all-vaults/view-mode-toggle.tsx","../src/components/all-vaults/all-vaults.desktop.tsx","../src/components/all-vaults/all-vaults.mobile.tsx","../src/components/all-vaults/all-vaults.widget.tsx","../src/components/all-vaults/index.ts","../src/pages/index.tsx","../src/components/provider/vaults-provider.tsx","../src/types/index.ts","../src/index.ts","../src/components/index.ts","../src/components/vault-operation/index.ts","../src/components/vault-operation/latest-deposit/index.ts"],"names":["state","useMemo","jsx","useConfig","useTranslation","jsxs","useScreen","RoleType","OperationType","useGetEnv","Decimal","cn","Text","useState","TokenIcon","Box","Button","BrokerWallet","QuantityInput","AvailableQuantity","useEffect","useAccount","useCollateral","modal","ArrowRightUpSquareFillIcon","Tooltip","InfoCircleIcon","AuthGuard","Fragment"],"mappings":"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","sourcesContent":["type Env = \"prod\" | \"staging\" | \"qa\" | \"dev\";\n\nexport const VAULTS_API_URLS: Record<Env, string> = {\n prod: \"https://api-sv.orderly.org\",\n staging: \"https://testnet-api-sv.orderly.org\",\n qa: \"https://qa-api-sv-aliyun.orderly.org\",\n dev: \"https://dev-api-sv.orderly.org\",\n};\n\nexport const VAULTS_WEBSITE_URLS: Record<Env, string> = {\n prod: \"https://app.orderly.network\",\n staging: \"https://staging-app.orderly.network\",\n qa: \"https://qa-app.orderly.network\",\n dev: \"https://dev-app.orderly.network\",\n};\n","import { useMemo } from \"react\";\nimport { useGetEnv } from \"@kodiak-finance/orderly-hooks\";\nimport { VAULTS_API_URLS } from \"../api/env\";\n\nexport function useSVApiUrl() {\n const env = useGetEnv();\n\n const apiUrl = useMemo(() => {\n return VAULTS_API_URLS[env as keyof typeof VAULTS_API_URLS];\n }, [env]);\n\n return apiUrl;\n}\n","// API response interface for consistent response structure\nexport interface ApiResponse<T = unknown> {\n success: boolean;\n data: T;\n message?: string;\n code?: string | number;\n}\n\n// Query parameters type - flexible to accept any parameter object\nexport type QueryParams = Record<string, any>;\n\n// Request interceptor function type\nexport type RequestInterceptor = (\n config: SimpleRequestConfig,\n) => SimpleRequestConfig | Promise<SimpleRequestConfig>;\n\n// Response interceptor function type\nexport type ResponseInterceptor<T = unknown> = (\n response: Response,\n data: unknown,\n) => T | Promise<T>;\n\n// Error class for API errors\nexport class VaultsApiError extends Error {\n constructor(\n message: string,\n public readonly code?: string | number,\n public readonly status?: number,\n public readonly response?: Response,\n ) {\n super(message);\n this.name = \"VaultsApiError\";\n }\n}\n\n// Utility functions for query parameter handling\nfunction buildQueryString(params: QueryParams): string {\n const filteredParams = filterUndefinedParams(params);\n const searchParams = new URLSearchParams();\n\n Object.entries(filteredParams).forEach(([key, value]) => {\n if (value !== null && value !== undefined) {\n searchParams.append(key, String(value));\n }\n });\n\n return searchParams.toString();\n}\n\nfunction filterUndefinedParams(\n params: QueryParams,\n): Record<string, string | number | boolean> {\n const filtered: Record<string, string | number | boolean> = {};\n\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n // Handle different value types\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n filtered[key] = value;\n } else if (typeof value === \"object\" && value !== null) {\n // For objects, flatten their properties into the query string\n const objEntries = Object.entries(value as Record<string, unknown>);\n objEntries.forEach(([objKey, objValue]) => {\n if (\n objValue !== undefined &&\n objValue !== null &&\n (typeof objValue === \"string\" ||\n typeof objValue === \"number\" ||\n typeof objValue === \"boolean\")\n ) {\n filtered[objKey] = objValue;\n }\n });\n }\n }\n });\n\n return filtered;\n}\n\nfunction appendQueryParams(url: string, params?: QueryParams): string {\n if (!params || Object.keys(params).length === 0) {\n return url;\n }\n\n const queryString = buildQueryString(params);\n if (!queryString) {\n return url;\n }\n\n const separator = url.includes(\"?\") ? \"&\" : \"?\";\n return `${url}${separator}${queryString}`;\n}\n\n// Simplified config interface for all requests\nexport interface SimpleRequestConfig extends Omit<RequestInit, \"method\"> {\n baseURL?: string;\n params?: QueryParams;\n timeout?: number;\n retry?: number;\n retryDelay?: number;\n validateStatus?: (status: number) => boolean;\n data?: unknown;\n method?: string; // Allow method to be set internally\n}\n\n// Request client class for better organization and configurability\nclass RequestClient {\n private requestInterceptors: RequestInterceptor[] = [];\n private responseInterceptors: ResponseInterceptor[] = [];\n private defaultConfig: SimpleRequestConfig = {\n timeout: 10000,\n retry: 3,\n retryDelay: 1000,\n validateStatus: (status) => status >= 200 && status < 300,\n // mode: 'cors',\n // credentials: 'include',\n headers: {\n \"Content-Type\": \"application/json\",\n },\n };\n\n // Add request interceptor\n addRequestInterceptor(interceptor: RequestInterceptor): void {\n this.requestInterceptors.push(interceptor);\n }\n\n // Add response interceptor\n addResponseInterceptor(interceptor: ResponseInterceptor): void {\n this.responseInterceptors.push(interceptor);\n }\n\n // Create timeout controller\n private createTimeoutController(timeout: number): AbortController {\n const controller = new AbortController();\n setTimeout(() => controller.abort(), timeout);\n return controller;\n }\n\n // Merge headers\n private mergeHeaders(\n defaultHeaders: HeadersInit = {},\n customHeaders: HeadersInit = {},\n ): HeadersInit {\n return {\n ...defaultHeaders,\n ...customHeaders,\n };\n }\n\n // Sleep utility for retry delay\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n // Main request method\n async request<T>(\n url: RequestInfo | URL,\n config: SimpleRequestConfig = {},\n ): Promise<T> {\n // Merge configurations\n const finalConfig: SimpleRequestConfig = {\n ...this.defaultConfig,\n ...config,\n headers: this.mergeHeaders(this.defaultConfig.headers, config.headers),\n };\n\n // Apply request interceptors\n let processedConfig = finalConfig;\n for (const interceptor of this.requestInterceptors) {\n processedConfig = await interceptor(processedConfig);\n }\n\n // Construct full URL if baseURL is provided\n let fullUrl = url;\n if (\n typeof url === \"string\" &&\n !url.startsWith(\"http\") &&\n processedConfig.baseURL\n ) {\n fullUrl = `${processedConfig.baseURL}${url.startsWith(\"/\") ? \"\" : \"/\"}${url}`;\n }\n\n // Handle query parameters for GET requests or when params are provided\n if (processedConfig.params) {\n fullUrl =\n typeof fullUrl === \"string\"\n ? appendQueryParams(fullUrl, processedConfig.params)\n : fullUrl;\n }\n\n // Setup timeout if specified\n let timeoutController: AbortController | undefined;\n if (processedConfig.timeout && processedConfig.timeout > 0) {\n timeoutController = this.createTimeoutController(processedConfig.timeout);\n processedConfig.signal = timeoutController.signal;\n }\n\n // Extract custom config options and pass only standard RequestInit options to fetch\n\n const {\n retry = 0,\n retryDelay = 1000,\n validateStatus,\n params,\n baseURL,\n timeout,\n data,\n method,\n ...fetchOptions\n } = processedConfig;\n\n // Prepare final fetch options\n const finalFetchOptions: RequestInit = {\n ...fetchOptions,\n method,\n };\n\n // Handle data for POST/PUT/PATCH requests\n if (data !== undefined) {\n finalFetchOptions.body =\n typeof data === \"string\" ? data : JSON.stringify(data);\n }\n\n let lastError: Error;\n\n // Retry logic\n for (let attempt = 0; attempt <= retry; attempt++) {\n try {\n const response = await fetch(fullUrl, finalFetchOptions);\n\n // Check if status is valid\n if (!validateStatus!(response.status)) {\n let errorMessage = response.statusText;\n let errorCode: string | number | undefined;\n\n try {\n const errorData = await response.json();\n errorMessage = errorData.message || errorData.code || errorMessage;\n errorCode = errorData.code;\n } catch {\n // If can't parse JSON, use status text\n }\n\n throw new VaultsApiError(\n errorMessage,\n errorCode,\n response.status,\n response,\n );\n }\n\n // Parse JSON response\n let responseData: unknown;\n try {\n responseData = await response.json();\n } catch {\n throw new VaultsApiError(\n \"Invalid JSON response\",\n \"PARSE_ERROR\",\n response.status,\n response,\n );\n }\n\n // Apply response interceptors\n let processedData = responseData;\n for (const interceptor of this.responseInterceptors) {\n processedData = await interceptor(response, processedData);\n }\n\n // Handle API response format\n if (typeof processedData === \"object\" && processedData !== null) {\n if (\"success\" in processedData) {\n const apiResponse = processedData as ApiResponse<T>;\n if (apiResponse.success) {\n return apiResponse.data;\n } else {\n throw new VaultsApiError(\n apiResponse.message || \"API request failed\",\n apiResponse.code,\n response.status,\n response,\n );\n }\n }\n }\n\n // Return processed data directly if no success field\n return processedData as T;\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n\n // Don't retry on certain errors\n if (\n error instanceof VaultsApiError ||\n (error as Error)?.name === \"AbortError\" ||\n attempt === retry\n ) {\n throw lastError;\n }\n\n // Wait before retry\n if (attempt < retry) {\n await this.sleep(retryDelay);\n }\n } finally {\n // Clean up timeout controller\n timeoutController?.abort();\n }\n }\n\n throw lastError!;\n }\n\n // Simplified HTTP methods - all accept a single config object\n async get<T>(\n url: RequestInfo | URL,\n config: SimpleRequestConfig = {},\n ): Promise<T> {\n return this.request<T>(url, { ...config, method: \"GET\" });\n }\n\n async post<T>(\n url: RequestInfo | URL,\n config: SimpleRequestConfig = {},\n ): Promise<T> {\n return this.request<T>(url, { ...config, method: \"POST\" });\n }\n\n async put<T>(\n url: RequestInfo | URL,\n config: SimpleRequestConfig = {},\n ): Promise<T> {\n return this.request<T>(url, { ...config, method: \"PUT\" });\n }\n\n async delete<T>(\n url: RequestInfo | URL,\n config: SimpleRequestConfig = {},\n ): Promise<T> {\n return this.request<T>(url, { ...config, method: \"DELETE\" });\n }\n\n async patch<T>(\n url: RequestInfo | URL,\n config: SimpleRequestConfig = {},\n ): Promise<T> {\n return this.request<T>(url, { ...config, method: \"PATCH\" });\n }\n}\n\n// Create default instance\nconst defaultClient = new RequestClient();\n\n// Export the default request function\nexport async function request<T>(\n url: RequestInfo | URL,\n config?: SimpleRequestConfig,\n): Promise<T> {\n return defaultClient.request<T>(url, config);\n}\n\n// Export the client class for advanced usage\nexport { RequestClient };\n\n// Export default client instance\nexport default defaultClient;\n","import type {\n VaultInfo,\n VaultLpPerformance,\n VaultLpInfo,\n VaultTimeRange,\n VaultOverallInfo,\n} from \"../types/vault\";\nimport requestClient from \"./request\";\n\n// API response wrapper interfaces\ninterface VaultInfoResponse {\n rows: VaultInfo[];\n}\n\ninterface VaultLpPerformanceResponse {\n rows: VaultLpPerformance[];\n}\n\ninterface VaultLpInfoResponse {\n rows: VaultLpInfo[];\n}\n\ninterface VaultOverallInfoResponse {\n strategy_vaults_tvl: number;\n strategy_vaults_lifetime_net_pnl: number;\n strategy_vaults_count: number;\n strategy_vaults_lp_count: number;\n}\n\n// API parameters interfaces\ninterface VaultInfoParams {\n vault_id?: string;\n status?: string;\n broker_ids?: string;\n}\n\ninterface VaultPerformanceParams {\n vault_id: string;\n time_range?: VaultTimeRange;\n}\n\ninterface VaultLpInfoParams {\n vault_id: string;\n wallet_address: string;\n}\n\ninterface VaultOverallInfoParams {\n broker_ids?: string;\n}\n\ninterface VaultOperationMessage {\n payloadType: string;\n nonce: string;\n receiver: string;\n amount: string;\n vaultId: string;\n token: string;\n dexBrokerId: string;\n chainId?: string;\n chainType?: string;\n}\n\ntype VaultOperationRequest = {\n message: VaultOperationMessage;\n signature: string;\n userAddress: string;\n verifyingContract: string;\n};\n\n/**\n * Get vault information\n * @param baseUrl - The base URL for the API endpoints\n * @param params - Optional parameters including vault_id, status, and broker_ids filters\n * @returns Promise<VaultInfoResponse> - Array of vault information\n */\nexport async function getVaultInfo(\n baseUrl: string,\n params?: VaultInfoParams,\n): Promise<VaultInfoResponse> {\n return requestClient.get<VaultInfoResponse>(\n \"/v1/public/strategy_vault/vault/info\",\n {\n params,\n baseURL: baseUrl,\n },\n );\n}\n\n/**\n * Get vault LP performance data\n * @param baseUrl - The base URL for the API endpoints\n * @param params - Parameters including vault_id and time_range\n * @returns Promise<VaultLpPerformanceResponse> - Array of vault LP performance data\n */\nexport async function getVaultLpPerformance(\n baseUrl: string,\n params: VaultPerformanceParams,\n): Promise<VaultLpPerformanceResponse> {\n return requestClient.get<VaultLpPerformanceResponse>(\n \"/v1/public/strategy_vault/vault/performance\",\n {\n params,\n baseURL: baseUrl,\n },\n );\n}\n\n/**\n * Get vault LP information\n * @param baseUrl - The base URL for the API endpoints\n * @param params - Parameters including vault_id and wallet_address\n * @returns Promise<VaultLpInfoResponse> - Array of vault LP information\n */\nexport async function getVaultLpInfo(\n baseUrl: string,\n params: VaultLpInfoParams,\n): Promise<VaultLpInfoResponse> {\n return requestClient.get<VaultLpInfoResponse>(\n \"/v1/public/strategy_vault/lp/info\",\n {\n params,\n baseURL: baseUrl,\n },\n );\n}\n\n/**\n * Get overall statistics of all strategy vaults\n * @param baseUrl - The base URL for the API endpoints\n * @param params - Parameters including optional broker_ids filter\n * @returns Promise<VaultOverallInfoResponse> - Overall statistics of all vaults\n */\nexport async function getVaultOverallInfo(\n baseUrl: string,\n params?: VaultOverallInfoParams,\n): Promise<VaultOverallInfoResponse> {\n return requestClient.get<VaultOverallInfoResponse>(\n \"/v1/public/strategy_vault/vault/overall_info\",\n {\n params,\n baseURL: baseUrl,\n },\n );\n}\n\n// export async function getVaultNonce(\n// baseUrl: string,\n// ) {\n// return requestClient.get(\n// '/v1/public/sv_nonce',\n// {\n// baseURL: baseUrl,\n// }\n// );\n// }\n\n// export async function postVaultOperation(\n// baseUrl: string,\n// data: VaultOperationRequest\n// ) {\n// return requestClient.post(\n// '/v1/public/sv_operation',\n// {\n// baseURL: baseUrl,\n// data,\n// }\n// );\n// }\n\n// Export types for external usage\nexport type {\n VaultInfoResponse,\n VaultInfoParams,\n VaultLpPerformanceResponse,\n VaultLpInfoResponse,\n VaultOverallInfoResponse,\n VaultPerformanceParams,\n VaultLpInfoParams,\n VaultOverallInfoParams,\n VaultOperationRequest,\n VaultOperationMessage,\n};\n","import { create } from \"zustand\";\nimport {\n getVaultInfo,\n getVaultLpPerformance,\n getVaultLpInfo,\n getVaultOverallInfo,\n} from \"../api/api\";\nimport type {\n VaultInfoResponse,\n VaultInfoParams,\n VaultLpPerformanceResponse,\n VaultLpInfoResponse,\n VaultOverallInfoResponse,\n VaultPerformanceParams,\n VaultLpInfoParams,\n VaultOverallInfoParams,\n} from \"../api/api\";\nimport type {\n VaultInfo,\n VaultLpPerformance,\n VaultLpInfo,\n VaultOverallInfo,\n VaultsPageConfig,\n} from \"../types/vault\";\n\n// Store state interface\ninterface VaultsState {\n // Base URL for API requests\n baseUrl: string;\n\n // Vault info state\n vaultInfo: {\n data: VaultInfo[];\n loading: boolean;\n error: string | null;\n lastUpdated: number | null;\n params: VaultInfoParams | null;\n };\n\n // Vault LP performance state\n vaultLpPerformance: {\n data: Record<string, VaultLpPerformance[]>;\n loading: boolean;\n error: string | null;\n lastUpdated: number | null;\n params: VaultPerformanceParams | null;\n };\n\n // Vault LP info state\n vaultLpInfo: {\n data: Record<string, VaultLpInfo[]>;\n loading: boolean;\n error: string | null;\n lastUpdated: number | null;\n params: VaultLpInfoParams | null;\n };\n\n // Vault overall info state\n vaultOverallInfo: {\n data: VaultOverallInfo | null;\n loading: boolean;\n error: string | null;\n lastUpdated: number | null;\n params: VaultOverallInfoParams | null;\n };\n\n // Vaults page config state\n vaultsPageConfig: VaultsPageConfig | null;\n\n // Actions\n setBaseUrl: (baseUrl: string) => void;\n fetchVaultInfo: (params?: VaultInfoParams, baseUrl?: string) => Promise<void>;\n refreshVaultInfo: () => Promise<void>;\n\n fetchVaultLpPerformance: (\n params: VaultPerformanceParams,\n baseUrl?: string,\n ) => Promise<void>;\n refreshVaultLpPerformance: () => Promise<void>;\n\n fetchVaultLpInfo: (\n params: VaultLpInfoParams,\n baseUrl?: string,\n ) => Promise<void>;\n refreshVaultLpInfo: () => Promise<void>;\n\n fetchVaultOverallInfo: (\n params?: VaultOverallInfoParams,\n baseUrl?: string,\n ) => Promise<void>;\n refreshVaultOverallInfo: () => Promise<void>;\n\n setVaultsPageConfig: (config: VaultsPageConfig) => void;\n}\n\n// Create the store\nexport const useVaultsStore = create<VaultsState>((set, get) => ({\n // Initial state\n baseUrl: \"\",\n\n vaultInfo: {\n data: [],\n loading: false,\n error: null,\n lastUpdated: null,\n params: null,\n },\n\n vaultLpPerformance: {\n data: {},\n loading: false,\n error: null,\n lastUpdated: null,\n params: null,\n },\n\n vaultLpInfo: {\n data: {},\n loading: false,\n error: null,\n lastUpdated: null,\n params: null,\n },\n\n vaultOverallInfo: {\n data: null,\n loading: false,\n error: null,\n lastUpdated: null,\n params: null,\n },\n\n vaultsPageConfig: null,\n\n // Set base URL\n setBaseUrl: (baseUrl: string) => {\n set({ baseUrl });\n },\n\n // Vault info actions\n fetchVaultInfo: async (params?: VaultInfoParams, baseUrl?: string) => {\n const state = get();\n const url = baseUrl || state.baseUrl;\n\n if (!url) {\n set((state) => ({\n vaultInfo: {\n ...state.vaultInfo,\n error: \"Base URL is required\",\n },\n }));\n return;\n }\n\n set((state) => ({\n baseUrl: baseUrl || state.baseUrl,\n vaultInfo: {\n ...state.vaultInfo,\n loading: true,\n error: null,\n params: params || null,\n },\n }));\n\n try {\n const response: VaultInfoResponse = await getVaultInfo(url, params);\n set((state) => ({\n vaultInfo: {\n ...state.vaultInfo,\n data: response.rows,\n loading: false,\n error: null,\n lastUpdated: Date.now(),\n },\n }));\n } catch (error) {\n set((state) => ({\n vaultInfo: {\n ...state.vaultInfo,\n loading: false,\n error:\n error instanceof Error\n ? error.message\n : \"Failed to fetch vault info\",\n },\n }));\n }\n },\n\n refreshVaultInfo: async () => {\n const state = get();\n // Only refresh if we have previously fetched data and have baseUrl\n if (state.vaultInfo.lastUpdated && state.baseUrl) {\n await state.fetchVaultInfo(state.vaultInfo.params || undefined);\n }\n },\n\n // Vault LP performance actions\n fetchVaultLpPerformance: async (\n params: VaultPerformanceParams,\n baseUrl?: string,\n ) => {\n const state = get();\n const url = baseUrl || state.baseUrl;\n\n if (!url) {\n set((state) => ({\n vaultLpPerformance: {\n ...state.vaultLpPerformance,\n error: \"Base URL is required\",\n },\n }));\n return;\n }\n\n set((state) => ({\n baseUrl: baseUrl || state.baseUrl,\n vaultLpPerformance: {\n ...state.vaultLpPerformance,\n loading: true,\n error: null,\n params,\n },\n }));\n\n try {\n const response: VaultLpPerformanceResponse = await getVaultLpPerformance(\n url,\n params,\n );\n\n // Store the rows array with vault_id as key\n set((state) => ({\n vaultLpPerformance: {\n ...state.vaultLpPerformance,\n data: {\n ...state.vaultLpPerformance.data,\n [params.vault_id]: response.rows,\n },\n loading: false,\n error: null,\n lastUpdated: Date.now(),\n },\n }));\n } catch (error) {\n set((state) => ({\n vaultLpPerformance: {\n ...state.vaultLpPerformance,\n loading: false,\n error:\n error instanceof Error\n ? error.message\n : \"Failed to fetch vault LP performance\",\n },\n }));\n }\n },\n\n refreshVaultLpPerformance: async () => {\n const state = get();\n // Only refresh if we have previously fetched data, have params, and have baseUrl\n if (\n state.vaultLpPerformance.lastUpdated &&\n state.vaultLpPerformance.params &&\n state.baseUrl\n ) {\n await state.fetchVaultLpPerformance(state.vaultLpPerformance.params);\n }\n },\n\n // Vault LP info actions\n fetchVaultLpInfo: async (params: VaultLpInfoParams, baseUrl?: string) => {\n const state = get();\n const url = baseUrl || state.baseUrl;\n\n if (!url) {\n set((state) => ({\n vaultLpInfo: {\n ...state.vaultLpInfo,\n error: \"Base URL is required\",\n },\n }));\n return;\n }\n\n set((state) => ({\n baseUrl: baseUrl || state.baseUrl,\n vaultLpInfo: {\n ...state.vaultLpInfo,\n loading: true,\n error: null,\n params,\n },\n }));\n\n try {\n const response: VaultLpInfoResponse = await getVaultLpInfo(url, params);\n\n // Store the rows array with vault_id as key\n set((state) => ({\n vaultLpInfo: {\n ...state.vaultLpInfo,\n data: {\n ...state.vaultLpInfo.data,\n [params.vault_id]: response.rows,\n },\n loading: false,\n error: null,\n lastUpdated: Date.now(),\n },\n }));\n } catch (error) {\n set((state) => ({\n vaultLpInfo: {\n ...state.vaultLpInfo,\n loading: false,\n error:\n error instanceof Error\n ? error.message\n : \"Failed to fetch vault LP info\",\n },\n }));\n }\n },\n\n refreshVaultLpInfo: async () => {\n const state = get();\n // Only refresh if we have previously fetched data, have params, and have baseUrl\n if (\n state.vaultLpInfo.lastUpdated &&\n state.vaultLpInfo.params &&\n state.baseUrl\n ) {\n await state.fetchVaultLpInfo(state.vaultLpInfo.params);\n }\n },\n\n // Vault overall info actions\n fetchVaultOverallInfo: async (\n params?: VaultOverallInfoParams,\n baseUrl?: string,\n ) => {\n const state = get();\n const url = baseUrl || state.baseUrl;\n\n if (!url) {\n set((state) => ({\n vaultOverallInfo: {\n ...state.vaultOverallInfo,\n error: \"Base URL is required\",\n },\n }));\n return;\n }\n\n set((state) => ({\n baseUrl: baseUrl || state.baseUrl,\n vaultOverallInfo: {\n ...state.vaultOverallInfo,\n loading: true,\n error: null,\n params: params || null,\n },\n }));\n\n try {\n const response: VaultOverallInfoResponse = await getVaultOverallInfo(\n url,\n params,\n );\n\n set((state) => ({\n vaultOverallInfo: {\n ...state.vaultOverallInfo,\n data: response,\n loading: false,\n error: null,\n lastUpdated: Date.now(),\n },\n }));\n } catch (error) {\n set((state) => ({\n vaultOverallInfo: {\n ...state.vaultOverallInfo,\n loading: false,\n error:\n error instanceof Error\n ? error.message\n : \"Failed to fetch vault overall info\",\n },\n }));\n }\n },\n\n refreshVaultOverallInfo: async () => {\n const state = get();\n // Only refresh if we have previously fetched data and have baseUrl\n if (state.vaultOverallInfo.lastUpdated && state.baseUrl) {\n await state.fetchVaultOverallInfo(\n state.vaultOverallInfo.params || undefined,\n );\n }\n },\n\n setVaultsPageConfig: (config: VaultsPageConfig) => {\n set({ vaultsPageConfig: config });\n },\n}));\n\n// Selector hooks for easier access to specific parts of the state\nexport const useVaultInfoState = () =>\n useVaultsStore((state) => state.vaultInfo);\nexport const useVaultLpPerformanceState = () =>\n useVaultsStore((state) => state.vaultLpPerformance);\nexport const useVaultLpInfoState = () =>\n useVaultsStore((state) => state.vaultLpInfo);\nexport const useVaultOverallInfoState = () =>\n useVaultsStore((state) => state.vaultOverallInfo);\n\n// Action hooks for easier access to actions\nexport const useVaultInfoActions = () =>\n useVaultsStore((state) => ({\n fetchVaultInfo: state.fetchVaultInfo,\n refreshVaultInfo: state.refreshVaultInfo,\n }));\n\nexport const useVaultLpPerformanceActions = () =>\n useVaultsStore((state) => ({\n fetchVaultLpPerformance: state.fetchVaultLpPerformance,\n refreshVaultLpPerformance: state.refreshVaultLpPerformance,\n }));\n\nexport const useVaultLpInfoActions = () =>\n useVaultsStore((state) => ({\n fetchVaultLpInfo: state.fetchVaultLpInfo,\n refreshVaultLpInfo: state.refreshVaultLpInfo,\n }));\n\nexport const useVaultOverallInfoActions = () =>\n useVaultsStore((state) => ({\n fetchVaultOverallInfo: state.fetchVaultOverallInfo,\n refreshVaultOverallInfo: state.refreshVaultOverallInfo,\n }));\n\n// Selector hooks for accessing data by vault_id\nexport const useVaultLpPerformanceById = (vaultId: string) =>\n useVaultsStore((state) => state.vaultLpPerformance.data[vaultId]);\n\nexport const useVaultLpInfoById = (vaultId: string) =>\n useVaultsStore((state) => state.vaultLpInfo.data[vaultId]);\n\n// Selector hooks for getting all vault_ids that have data\nexport const useVaultLpPerformanceIds = () =>\n useVaultsStore((state) => Object.keys(state.vaultLpPerformance.data));\n\nexport const useVaultLpInfoIds = () =>\n useVaultsStore((state) => Object.keys(state.vaultLpInfo.data));\n\n// Selector hooks for getting all data as flat arrays (for backward compatibility)\nexport const useVaultLpPerformanceArray = () =>\n useVaultsStore((state) =>\n Object.values(state.vaultLpPerformance.data).flat(),\n );\n\nexport const useVaultLpInfoArray = () =>\n useVaultsStore((state) => Object.values(state.vaultLpInfo.data).flat());\n","export * from \"./vaultsStore\";\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { VaultsHeaderScript } from \"./vaults-header.script\";\n\nexport const VaultsHeaderDesktop: FC<VaultsHeaderScript> = (props) => {\n const { supportVaults, headerImage, brokerName } = props;\n const { t } = useTranslation();\n\n const supportVaultsList = useMemo(() => {\n return (\n <div className=\"oui-flex oui-items-center\">\n {supportVaults.map((chain, index) => (\n <img\n key={chain.chain_id}\n src={`https://oss.orderly.network/static/network_logo/${chain.chain_id}.png`}\n alt={chain.chain_id}\n className=\"oui-relative oui-size-5\"\n style={{\n marginLeft: index > 0 ? \"-4px\" : \"0\",\n zIndex: supportVaults.length - index,\n }}\n />\n ))}\n </div>\n );\n }, [supportVaults]);\n\n const headerImageElement = useMemo(() => {\n if (typeof headerImage === \"string\") {\n return (\n <img\n src={headerImage}\n alt=\"header\"\n className=\"oui-bg-contain oui-bg-center oui-bg-no-repeat\"\n />\n );\n }\n return headerImage;\n }, [headerImage]);\n\n return (\n <div className=\"oui-flex oui-items-center oui-justify-between\">\n <div className=\"oui-flex oui-max-w-[726px] oui-flex-col\">\n <div className=\"oui-flex oui-items-center oui-gap-1 oui-text-[18px] oui-font-normal oui-text-base-contrast-54\">\n {t(\"vaults.availableOn\")} {supportVaultsList}\n </div>\n <div className=\"oui-mb-6 oui-mt-8 oui-text-5xl oui-font-bold oui-leading-[44px] oui-text-base-contrast\">\n {t(\"vaults.header.title\")}\n </div>\n <div className=\"oui-text-xl oui-font-normal oui-text-base-contrast-54\">\n {t(\"vaults.header.description\", { brokerName })}\n </div>\n </div>\n <div className=\"oui-h-[238px] oui-w-[360px]\">{headerImageElement}</div>\n </div>\n );\n};\n","import { FC, useMemo } from \"react\";\nimport { useConfig } from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { VaultsHeaderScript } from \"./vaults-header.script\";\n\nexport const VaultsHeaderMobile: FC<VaultsHeaderScript> = (props) => {\n const { supportVaults, headerImage } = props;\n const { t } = useTranslation();\n const brokerName = useConfig(\"brokerName\");\n\n const supportVaultsList = useMemo(() => {\n return (\n <div className=\"oui-flex oui-items-center\">\n {supportVaults.map((chain, index) => (\n <img\n key={chain.chain_id}\n src={`https://oss.orderly.network/static/network_logo/${chain.chain_id}.png`}\n alt={chain.chain_id}\n className=\"oui-relative oui-size-[18px]\"\n style={{\n marginLeft: index > 0 ? \"-4px\" : \"0\",\n zIndex: supportVaults.length - index,\n }}\n />\n ))}\n </div>\n );\n }, [supportVaults]);\n\n const headerImageElement = useMemo(() => {\n if (typeof headerImage === \"string\") {\n return (\n <img\n src={headerImage}\n alt=\"header\"\n className=\"oui-bg-contain oui-bg-center oui-bg-no-repeat\"\n />\n );\n }\n return headerImage;\n }, [headerImage]);\n\n return (\n <div className=\"oui-relative\">\n <div className=\"oui-flex oui-flex-col\">\n <div className=\"oui-flex oui-items-center oui-gap-1 oui-text-2xs oui-font-semibold oui-text-base-contrast-54\">\n {t(\"vaults.availableOn\")} {supportVaultsList}\n </div>\n <div className=\"oui-mb-4 oui-mt-6 oui-min-h-[56px] oui-max-w-[calc(100%-187px)] oui-text-xl oui-font-bold oui-text-base-contrast\">\n {t(\"vaults.header.title\")}\n </div>\n <div className=\"oui-max-w-[450px] oui-text-2xs oui-font-normal oui-text-base-contrast-54\">\n {t(\"vaults.header.description\", { brokerName })}\n </div>\n </div>\n <div className=\"oui-absolute -oui-right-3 -oui-top-4 oui-h-[124px] oui-w-[187px]\">\n {headerImageElement}\n </div>\n </div>\n );\n};\n","import { useMemo } from \"react\";\nimport { uniqBy } from \"ramda\";\nimport { useConfig } from \"@kodiak-finance/orderly-hooks\";\nimport { useVaultsStore } from \"../../store\";\nimport { VaultSupportedChain } from \"../../types/vault\";\n\nexport const useVaultsHeaderScript = () => {\n const { vaultInfo, vaultsPageConfig } = useVaultsStore();\n const brokerName = useConfig(\"brokerName\");\n\n const supportVaults = useMemo(() => {\n const array: VaultSupportedChain[] = [];\n vaultInfo.data.forEach((vault) => {\n array.push(...vault.supported_chains);\n });\n\n return uniqBy((item) => item.chain_id, array);\n }, [vaultInfo.data]);\n\n return {\n supportVaults,\n headerImage: vaultsPageConfig?.headerImage,\n brokerName,\n };\n};\n\nexport type VaultsHeaderScript = ReturnType<typeof useVaultsHeaderScript>;\n","import { FC } from \"react\";\nimport { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { VaultsHeaderDesktop } from \"./vaults-header.desktop\";\nimport { VaultsHeaderMobile } from \"./vaults-header.mobile\";\nimport { useVaultsHeaderScript } from \"./vaults-header.script\";\n\nexport const VaultsHeaderWidget: FC = () => {\n const state = useVaultsHeaderScript();\n const { isMobile } = useScreen();\n return isMobile ? (\n <VaultsHeaderMobile {...state} />\n ) : (\n <VaultsHeaderDesktop {...state} />\n );\n};\n","export * from \"./vaults-header.widget\";\nexport * from \"./vaults-header.desktop\";\nexport * from \"./vaults-header.script\";\n","import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Text,\n Divider,\n cn,\n TextProps,\n useScreen,\n} from \"@kodiak-finance/orderly-ui\";\nimport { VaultsIntroductionScript } from \"./vaults-introduction.script\";\n\nexport const VaultsIntroductionDesktop: FC<VaultsIntroductionScript> = (\n props,\n) => {\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n const { vaultsInfo } = props;\n\n return (\n <div\n className={cn(\n \"oui-flex oui-items-center \",\n \"oui-bg-gradient-to-b oui-from-[#26292E] oui-to-[#1B1D22]\",\n isMobile\n ? \"oui-gap-3 oui-rounded-xl oui-p-3\"\n : \"oui-gap-6 oui-rounded-2xl oui-p-6\",\n )}\n >\n <VaultsIntroductionItem\n title={t(\"vaults.introduction.tvl\")}\n value={vaultsInfo.tvl}\n textProps={{ currency: \"$\" } as any}\n isMobile={isMobile}\n />\n <Divider\n direction=\"vertical\"\n className={cn(\n \"oui-bg-white/[0.12]\",\n isMobile ? \"oui-h-[44px]\" : \"oui-h-[64px]\",\n )}\n />\n <VaultsIntroductionItem\n title={t(\"common.vaults\")}\n value={vaultsInfo.vaultsCount}\n isMobile={isMobile}\n />\n <Divider\n direction=\"vertical\"\n className={cn(\n \"oui-bg-white/[0.12]\",\n isMobile ? \"oui-h-[44px]\" : \"oui-h-[64px]\",\n )}\n />\n <VaultsIntroductionItem\n title={t(\"vaults.introduction.depositors\")}\n value={vaultsInfo.lpCount}\n isMobile={isMobile}\n />\n </div>\n );\n};\n\nconst VaultsIntroductionItem: FC<{\n title: string;\n value: number;\n textProps?: TextProps;\n isMobile?: boolean;\n}> = (props) => {\n const { title, value, textProps, isMobile } = props;\n\n return (\n <div\n className={cn(\n \"oui-flex oui-flex-1 oui-flex-col oui-items-center \",\n isMobile ? \"oui-gap-0.5\" : \"oui-gap-3\",\n )}\n >\n <div\n className={cn(\n \"oui-font-normal oui-text-base-contrast-54\",\n isMobile ? \"oui-text-2xs\" : \"oui-text-base\",\n )}\n >\n {title}\n </div>\n <Text.numeral\n className={cn(\n \"oui-font-semibold\",\n isMobile ? \"oui-text-base\" : \"oui-text-xl\",\n )}\n dp={0}\n {...textProps}\n >\n {value}\n </Text.numeral>\n </div>\n );\n};\n","import { useMemo } from \"react\";\nimport { useVaultOverallInfoState } from \"../../store\";\n\nexport const useVaultsIntroductionScript = () => {\n const { data: overallInfo, loading, error } = useVaultOverallInfoState();\n\n const vaultsInfo = useMemo(() => {\n if (!overallInfo) {\n return {\n tvl: 0,\n lpCount: 0,\n vaultsCount: 0,\n };\n }\n\n return {\n tvl: overallInfo.strategy_vaults_tvl,\n lpCount: overallInfo.strategy_vaults_lp_count,\n vaultsCount: overallInfo.strategy_vaults_count,\n };\n }, [overallInfo]);\n\n return {\n vaultsInfo,\n loading,\n error,\n };\n};\n\nexport type VaultsIntroductionScript = ReturnType<\n typeof useVaultsIntroductionScript\n>;\n","import { FC } from \"react\";\nimport { VaultsIntroductionDesktop } from \"./vaults-introduction.desktop\";\nimport { useVaultsIntroductionScript } from \"./vaults-introduction.script\";\n\nexport const VaultsIntroductionWidget: FC = () => {\n const state = useVaultsIntroductionScript();\n return <VaultsIntroductionDesktop {...state} />;\n};\n","export * from \"./vaults-introduction.widget\";\n","export interface VaultSupportedChain {\n chain_id: string;\n chain_name: string;\n}\n\nexport type VaultTimeRange = \"24h\" | \"7d\" | \"30d\" | \"all_time\";\n\nexport type VaultStatus = \"pre_launch\" | \"live\" | \"closing\" | \"closed\";\n\nexport interface VaultInfo {\n vault_id: string;\n vault_address: string;\n vault_type: \"protocol\" | \"community\" | \"user\";\n vault_name: string;\n description: string;\n sp_address: string;\n sp_name: string | null;\n asset: string;\n vault_age: number | null;\n status: VaultStatus;\n vault_start_time: number;\n performance_fee_rate: number;\n supported_chains: VaultSupportedChain[];\n tvl: number;\n valid_hpr: number;\n \"30d_apy\": number;\n recovery_30d_apy: number;\n lifetime_apy: number;\n vault_lifetime_net_pnl: number;\n lp_counts: number;\n total_main_shares: number;\n est_main_share_price: number;\n lock_duration: number;\n min_deposit_amount: number;\n min_withdrawal_amount: number;\n gate_threshold_pct: number;\n gate_triggered: boolean;\n broker_id: string;\n}\n\nexport interface VaultLpPerformance {\n time_range: VaultTimeRange;\n tvl_max_drawdown: number;\n incremental_net_pnl: number;\n pnl_max_drawdown: number;\n}\n\nexport interface VaultLpInfo {\n vault_id: string;\n lp_nav: number;\n lp_tvl: number;\n total_main_shares: number;\n available_main_shares: number;\n potential_pnl: number;\n}\n\nexport interface VaultOverallInfo {\n strategy_vaults_tvl: number;\n strategy_vaults_lifetime_net_pnl: number;\n strategy_vaults_count: number;\n strategy_vaults_lp_count: number;\n}\n\nexport interface VaultOperation {\n type: OperationType;\n vault_id: string;\n amount_change: number;\n created_time: string;\n status: string;\n}\n\nexport enum RoleType {\n LP = \"lp\",\n SP = \"sp\",\n}\n\nexport enum OperationType {\n DEPOSIT = \"deposit\",\n WITHDRAWAL = \"withdrawal\",\n}\n\nexport type VaultsPageConfig = {\n headerImage?: React.ReactNode;\n /**\n * Custom broker_ids filter for overall vault info API.\n * If not provided, defaults to \"orderly,{current_broker_id}\"\n * @example \"orderly,woofi_pro,aden\"\n */\n overallInfoBrokerIds?: string;\n};\n","type Env = \"prod\" | \"staging\" | \"qa\" | \"dev\";\n\nexport const VAULTS_CONTRACT_ADDRESSES: Record<Env, Record<string, string>> = {\n prod: {\n vaultProtocol: \"0x70Fe7d65Ac7c1a1732f64d2E6fC0E33622D0C991\",\n vaultCrossChainManager: \"0x58c9747ccAAE56182C7d9c814F5eaca395D8c93B\",\n vaultPvLedger: \"0xB7E792f0da9104A27288421583748215AefFFd78\",\n vaultId:\n \"0xa3426a1cef4052c056fced18099be899d93f1427d13b9a1df1806b91fad3d0c2\",\n spAddress: \"0x8bAA309D93FFFB54A64444FD98E10d92D4d9Eb22\",\n },\n staging: {\n vaultProtocol: \"0x6B6059259B4096ea6420Eb5e08a22214d2303aE9\",\n vaultCrossChainManager: \"0x510dD61a988797114A9a51b0d228E894037BD9cb\",\n vaultPvLedger: \"0x20AFe57C75D1C548A9Da265fBFC5416c43783589\",\n vaultId:\n \"0x95514fb145354f07bb889f711e856481b5ed52fce52200148aa834b3b29544c8\",\n spAddress: \"0xbddfd22ef902a4898147a1ca5b985d03c62a8c41\",\n },\n qa: {\n vaultProtocol: \"0xF5b12d5F1db6DAB8C7c0561152b5e4bb8fD5eb38\",\n vaultCrossChainManager: \"0xB8a3245407571804b4db5219cBe8D9F2EA1828DE\",\n vaultPvLedger: \"0x15c9B5705CaCB4eb140dfd7a8c651E18027e5146\",\n vaultId:\n \"0x4812cbb88f4025372a3e2acd10d02b5f680d7d1fe78091f6cfde80122c861099\",\n spAddress: \"0xbddfd22ef902a4898147a1ca5b985d03c62a8c41\",\n },\n dev: {\n vaultProtocol: \"0xA292E1126703F804FBD5671F034c7226538C54C7\",\n vaultCrossChainManager: \"0x7568ACC147Af12b02713143C3177D7e89C28A9A6\",\n vaultPvLedger: \"0x2a5909498d85650744dD5CF964F2136962e5AE6E\",\n vaultId:\n \"0x4812cbb88f4025372a3e2acd10d02b5f680d7d1fe78091f6cfde80122c861099\",\n spAddress: \"0xbddfd22ef902a4898147a1ca5b985d03c62a8c41\",\n },\n};\n","import { OperationType, RoleType } from \"../types/vault\";\n\nexport const getToAccountPayloadType = (\n type: OperationType,\n role: RoleType,\n) => {\n if (type === OperationType.DEPOSIT && role === RoleType.LP) {\n return 0;\n }\n if (type === OperationType.WITHDRAWAL && role === RoleType.LP) {\n return 1;\n }\n if (type === OperationType.DEPOSIT && role === RoleType.SP) {\n return 2;\n }\n if (type === OperationType.WITHDRAWAL && role === RoleType.SP) {\n return 3;\n }\n return 1;\n};\n","import { useMemo } from \"react\";\nimport { usePrivateQuery } from \"@kodiak-finance/orderly-hooks\";\nimport { EMPTY_LIST } from \"@kodiak-finance/orderly-types\";\nimport { OperationType, VaultOperation } from \"../../../types/vault\";\n\ntype LatestOperationScriptProps = {\n type: OperationType;\n vaultId: string;\n};\n\nexport const useLatestOperationScript = (props: LatestOperationScriptProps) => {\n const { type, vaultId } = props;\n const { data: operationHistory, mutate: mutateOperationHistory } =\n usePrivateQuery<VaultOperation[]>(\n `/v1/account_sv_transaction_history?type=${type}&vault_id=${vaultId}&size=1`,\n {\n formatter: (response: { rows: VaultOperation[] }) => {\n return response?.rows || EMPTY_LIST;\n },\n revalidateOnFocus: false,\n },\n );\n\n const latestOperation = useMemo(() => {\n return operationHistory?.[0];\n }, [operationHistory]);\n\n return {\n latestOperation,\n refetch: mutateOperationHistory,\n };\n};\n\nexport type LatestOperationScript = ReturnType<typeof useLatestOperationScript>;\n","import { useMemo } from \"react\";\nimport { useAccount, useGetEnv, useTrack } from \"@kodiak-finance/orderly-hooks\";\nimport { useMutation } from \"@kodiak-finance/orderly-hooks\";\nimport { TrackerEventName } from \"@kodiak-finance/orderly-types\";\nimport { toast } from \"@kodiak-finance/orderly-ui\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { VAULTS_CONTRACT_ADDRESSES } from \"../../../contract\";\nimport { OperationType, RoleType } from \"../../../types/vault\";\nimport { getToAccountPayloadType } from \"../../../utils/operationPayload\";\nimport { useLatestOperationScript } from \"./latest.script\";\n\ntype OperationScript = {\n type: OperationType;\n vaultId: string;\n};\n\nexport const useOperationScript = (props: OperationScript) => {\n const { account, state } = useAccount();\n const env = useGetEnv();\n const { track } = useTrack();\n const verifyingContract = useMemo(() => {\n return VAULTS_CONTRACT_ADDRESSES[\n env as keyof typeof VAULTS_CONTRACT_ADDRESSES\n ].vaultPvLedger;\n }, [env]);\n const [postVaultOperation] = useMutation(\"/v1/sv_operation_request\");\n const { refetch: refetchOperationHistory } = useLatestOperationScript({\n type: props.type,\n vaultId: props.vaultId,\n });\n\n const disabledOperation = useMemo(() => {\n return state?.accountId !== state?.mainAccountId;\n }, [state?.accountId, state?.mainAccountId]);\n\n const handleOperation = async ({\n amount,\n vaultId,\n }: {\n amount: string;\n vaultId: string;\n }) => {\n if (state.accountId !== state.mainAccountId) {\n toast.error(\n \"Please switch to the main account to perform this operation.\",\n );\n return;\n }\n\n if (props.type === OperationType.DEPOSIT) {\n if (new Decimal(amount).lt(10)) {\n toast.error(\"Deposit amount is less than the minimum 10 USDC.\");\n return;\n }\n }\n\n const payloadType = getToAccountPayloadType(props.type, RoleType.LP);\n const requestParams = {\n payloadType,\n amount: new Decimal(Number(amount)).mul(10 ** 6).toString(),\n vaultId,\n token: \"USDC\",\n domain: {\n name: \"Orderly\",\n version: \"1\",\n chainId: state.connectWallet?.chainId as number,\n verifyingContract,\n },\n };\n\n const { message, signatured } =\n await account.generateDexRequest(requestParams);\n\n try {\n const res = await postVaultOperation({\n message: {\n ...message,\n chainId: state.connectWallet?.chainId as number,\n },\n signature: signatured,\n userAddress: state.address,\n verifyingContract,\n });\n\n if (!res.success) {\n // Track failure event\n if (props.type === OperationType.DEPOSIT) {\n track(TrackerEventName.vaultDepositFailed, {\n msg: res.message,\n });\n } else {\n track(TrackerEventName.vaultWithdrawFailed, {\n msg: res.message,\n });\n }\n toast.error(res.message);\n return;\n }\n\n await refetchOperationHistory();\n\n // Track success event\n if (props.type === OperationType.DEPOSIT) {\n track(TrackerEventName.vaultDepositSuccess, {\n quantity: amount,\n vaultId,\n });\n } else {\n track(TrackerEventName.vaultWithdrawSuccess, {\n quantity: amount,\n vaultId,\n });\n }\n\n toast.success(`${props.type} successful`);\n } catch (error: unknown) {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n\n // Track error event\n if (props.type === OperationType.DEPOSIT) {\n track(TrackerEventName.vaultDepositFailed, {\n msg: errorMessage,\n });\n } else {\n track(TrackerEventName.vaultWithdrawFailed, {\n msg: errorMessage,\n });\n }\n toast.error(errorMessage);\n console.error(error);\n }\n };\n\n return {\n handleOperation,\n disabledOperation,\n };\n};\n","import { useMemo, useState } from \"react\";\nimport {\n useTokenInfo,\n useCollateral,\n useMaxWithdrawal,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { useVaultsStore } from \"../../../store/vaultsStore\";\nimport { OperationType } from \"../../../types/vault\";\nimport { useOperationScript } from \"../depositAndWithdraw/operation.script\";\n\nexport type VaultDepositWidgetProps = {\n vaultId: string;\n};\n\nexport const useVaultDepositFormScript = (props: VaultDepositWidgetProps) => {\n const { vaultId } = props;\n const [quantity, setQuantity] = useState<string>(\"\");\n const { vaultInfo } = useVaultsStore();\n const { handleOperation, disabledOperation } = useOperationScript({\n type: OperationType.DEPOSIT,\n vaultId,\n });\n const { holding } = useCollateral();\n const { t } = useTranslation();\n\n const minDepositAmount = vaultInfo.data[0]?.min_deposit_amount || 0;\n\n const maxWithdrawalAmount = useMaxWithdrawal(\"USDC\");\n const availableBalance = useMemo(() => {\n return holding?.find((h) => h.token === \"USDC\")?.holding || 0;\n }, [holding]);\n const maxQuantity = useMemo(() => {\n return Math.min(maxWithdrawalAmount, availableBalance);\n }, [maxWithdrawalAmount, availableBalance]);\n\n const sharePrice = useMemo(() => {\n const vault = vaultInfo.data.find((v) => v.vault_id === vaultId);\n return vault?.est_main_share_price;\n }, [vaultInfo.data, vaultId]);\n\n const shares = useMemo(() => {\n if (!sharePrice || !quantity) {\n return \"-\";\n }\n return new Decimal(quantity).div(sharePrice).toString();\n }, [quantity, sharePrice]);\n\n const handleDeposit = async () => {\n if (!shares || shares === \"-\") {\n return;\n }\n await handleOperation({\n amount: quantity,\n vaultId,\n });\n setQuantity(\"\");\n };\n\n const token = useTokenInfo(\"USDC\");\n\n const sourceToken = useMemo(() => {\n return {\n ...token,\n display_name: token?.token,\n symbol: token?.token,\n };\n }, [token]);\n\n const onQuantityChange = (value: string) => {\n if (value && new Decimal(value).gt(maxQuantity)) {\n setQuantity(maxQuantity.toString());\n return;\n }\n setQuantity(value);\n };\n\n const disabledDeposit = useMemo(() => {\n return (\n !quantity ||\n quantity === \"0\" ||\n disabledOperation ||\n (!!quantity && new Decimal(quantity).lt(minDepositAmount))\n );\n }, [quantity, disabledOperation]);\n\n const inputHint = useMemo(() => {\n if (quantity && new Decimal(quantity).lt(minDepositAmount)) {\n return {\n hintMessage: t(\"vaults.operation.error.minDeposit\", {\n amount: minDepositAmount,\n }),\n status: \"error\",\n };\n }\n return {\n hintMessage: \"\",\n status: \"\",\n };\n }, [quantity, t, maxWithdrawalAmount, availableBalance]);\n\n return {\n quantity,\n onQuantityChange,\n sourceToken,\n maxQuantity,\n sharePrice,\n shares,\n handleDeposit,\n vaultId,\n disabledDeposit,\n disabledOperation,\n inputHint,\n };\n};\n\nexport type VaultDepositFormScript = ReturnType<\n typeof useVaultDepositFormScript\n>;\n","import { OperationType } from \"../../../types/vault\";\nimport { useLatestOperationScript } from \"../depositAndWithdraw/latest.script\";\n\nexport const useLatestDepositScript = ({ vaultId }: { vaultId: string }) => {\n const { latestOperation } = useLatestOperationScript({\n type: OperationType.DEPOSIT,\n vaultId,\n });\n return {\n latestOperation,\n };\n};\n\nexport type LatestDepositScript = ReturnType<typeof useLatestDepositScript>;\n","export const getOperationStatusColor = (status: string) => {\n if (status === \"completed\") {\n return \"success\";\n }\n if (status === \"rejected\" || status === \"failed\") {\n return \"danger\";\n }\n return \"primary\";\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { cn, Text, TokenIcon } from \"@kodiak-finance/orderly-ui\";\nimport { VaultOperation } from \"../../../types/vault\";\nimport { getOperationStatusColor } from \"../../../utils/getOperationStatusColor\";\n\nexport type LatestDepositUIProps = {\n latestOperation: VaultOperation | undefined;\n};\n\nexport const LatestDepositUI: FC<LatestDepositUIProps> = (props) => {\n const { latestOperation } = props;\n const { t } = useTranslation();\n\n if (!latestOperation) {\n return null;\n }\n\n return (\n <div className=\"oui-mt-3 oui-flex oui-flex-col oui-gap-2\">\n <div className=\"oui-text-xs oui-font-normal oui-text-base-contrast-54\">\n {t(\"vaults.deposit.latestDeposit\")}\n </div>\n <div className=\"oui-h-[44px] oui-rounded-lg oui-border oui-border-white/[0.12] oui-p-3\">\n <div className=\"oui-flex oui-items-center\">\n <div\n className={cn(\n \"oui-mr-1 oui-size-1 oui-rounded-full\",\n latestOperation.status === \"completed\" && \"oui-bg-success\",\n latestOperation.status === \"rejected\" && \"oui-bg-danger\",\n latestOperation.status === \"failed\" && \"oui-bg-danger\",\n (latestOperation.status === \"pending\" ||\n latestOperation.status === \"new\") &&\n \"oui-bg-primary\",\n )}\n />\n <Text\n color={getOperationStatusColor(latestOperation.status)}\n className=\"oui-text-xs oui-font-normal\"\n >\n {latestOperation.status.slice(0, 1).toUpperCase() +\n latestOperation.status.slice(1)}\n </Text>\n <TokenIcon name=\"USDC\" className=\"oui-ml-auto oui-mr-1 oui-size-4\" />\n <Text.numeral className=\"oui-text-sm oui-font-semibold oui-text-base-contrast-80\">\n {latestOperation.amount_change}\n </Text.numeral>\n </div>\n </div>\n </div>\n );\n};\n","import { FC } from \"react\";\nimport { useLatestDepositScript } from \"./latest-deposit.script\";\nimport { LatestDepositUI } from \"./latest-deposit.ui\";\n\nexport type LatestDepositWidgetProps = {\n vaultId: string;\n};\n\nexport const LatestDepositWidget: FC<LatestDepositWidgetProps> = (props) => {\n const { vaultId } = props;\n const state = useLatestDepositScript({ vaultId });\n return <LatestDepositUI {...state} />;\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Box, Text, Button } from \"@kodiak-finance/orderly-ui\";\nimport {\n BrokerWallet,\n QuantityInput,\n AvailableQuantity,\n} from \"@kodiak-finance/orderly-ui-transfer\";\nimport { LatestDepositWidget } from \"../latest-deposit/latest-deposit.widget\";\nimport { VaultDepositFormScript } from \"./vault-deposit-form.script\";\n\nexport const VaultDepositForm: FC<VaultDepositFormScript> = (props) => {\n const {\n quantity,\n onQuantityChange,\n sourceToken,\n maxQuantity,\n shares,\n handleDeposit,\n vaultId,\n disabledDeposit,\n disabledOperation,\n inputHint,\n } = props;\n\n const { t } = useTranslation();\n return (\n <div>\n <BrokerWallet />\n <Box mt={3} mb={1}>\n <QuantityInput\n value={quantity}\n onValueChange={onQuantityChange}\n token={{ ...sourceToken, precision: 6 } as any}\n testId=\"oui-testid-vault-deposit-dialog-quantity-input\"\n hintMessage={inputHint.hintMessage}\n status={inputHint.status as any}\n />\n </Box>\n <AvailableQuantity\n maxQuantity={maxQuantity?.toString() || \"0\"}\n onClick={() => {\n onQuantityChange(maxQuantity?.toString() || \"0\");\n }}\n />\n <Box\n mt={5}\n mb={1}\n className=\"oui-flex oui-items-center oui-justify-between oui-text-sm oui-font-semibold oui-text-base-contrast-54\"\n >\n <div>{t(\"vaults.deposit.estShares\")}</div>\n <Text.numeral\n dp={6}\n padding={false}\n suffix={\n <span className=\"oui-ml-1 oui-text-base-contrast-54\">\n {t(\"vaults.deposit.shares\")}\n </span>\n }\n >\n {shares}\n </Text.numeral>\n </Box>\n <Box\n mb={5}\n className=\"oui-flex oui-items-center oui-justify-between oui-text-sm oui-font-semibold oui-text-base-contrast-54\"\n >\n <div>{t(\"vaults.deposit.lockupDuration\")}</div>\n <Text.numeral\n suffix={\n <span className=\"oui-ml-1 oui-text-base-contrast-54\">hrs</span>\n }\n >\n 48\n </Text.numeral>\n </Box>\n {disabledOperation && (\n <div className=\"oui-mt-3 oui-text-center\">\n <Text color=\"warning\" className=\"oui-text-sm oui-font-semibold\">\n {t(\"vaults.operation.error.switchAccount\")}\n </Text>\n </div>\n )}\n <Button\n fullWidth\n color=\"primary\"\n disabled={disabledDeposit}\n className=\"oui-mt-3\"\n onClick={handleDeposit}\n >\n {t(\"common.deposit\")}\n </Button>\n <LatestDepositWidget vaultId={vaultId} />\n </div>\n );\n};\n","import { FC } from \"react\";\nimport {\n useVaultDepositFormScript,\n VaultDepositWidgetProps,\n} from \"./vault-deposit-form.script\";\nimport { VaultDepositForm } from \"./vault-deposit-form.ui\";\n\nexport const VaultDepositWidget: FC<VaultDepositWidgetProps> = (props) => {\n const { vaultId } = props;\n const state = useVaultDepositFormScript({ vaultId });\n return <VaultDepositForm {...state} />;\n};\n","export * from \"./vault-deposit-form.widget\";\n","import { useMemo, useState } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport {\n useVaultInfoState,\n useVaultLpInfoById,\n useVaultsStore,\n} from \"../../../store\";\nimport { OperationType } from \"../../../types/vault\";\nimport { useOperationScript } from \"../depositAndWithdraw/operation.script\";\n\nexport type VaultWithdrawFormScriptProps = {\n vaultId: string;\n};\n\nexport const useVaultWithdrawFormScript = (\n props: VaultWithdrawFormScriptProps,\n) => {\n const { vaultId } = props;\n const [quantity, setQuantity] = useState<string>(\"\");\n const { handleOperation, disabledOperation } = useOperationScript({\n type: OperationType.WITHDRAWAL,\n vaultId,\n });\n const vaultLpInfo = useVaultLpInfoById(vaultId);\n const { vaultInfo } = useVaultsStore();\n const { t } = useTranslation();\n\n const sharePrice = useMemo(() => {\n const vault = vaultInfo.data.find((v) => v.vault_id === vaultId);\n return vault?.est_main_share_price || 0;\n }, [vaultInfo.data, vaultId]);\n\n const maxQuantity = vaultLpInfo?.[0]?.available_main_shares || 0;\n\n const receivingAmount = useMemo(() => {\n if (!quantity || !sharePrice) {\n return \"-\";\n }\n return new Decimal(quantity).mul(sharePrice).toString();\n }, [quantity, sharePrice]);\n\n const handleWithdraw = async () => {\n await handleOperation({\n amount: quantity,\n vaultId,\n });\n };\n\n const onQuantityChange = (value: string) => {\n if (value && new Decimal(value).gt(maxQuantity)) {\n setQuantity(maxQuantity.toString());\n } else {\n setQuantity(value);\n }\n };\n\n const isMinAmount = useMemo(() => {\n if (\n !quantity ||\n !vaultInfo.data[0]?.est_main_share_price ||\n !vaultInfo.data[0]?.min_withdrawal_amount\n )\n return false;\n const isAll = quantity === maxQuantity.toString();\n\n if (isAll) {\n return false;\n }\n\n const receiving = new Decimal(quantity).mul(\n vaultInfo.data[0]?.est_main_share_price,\n );\n return receiving.lt(vaultInfo.data[0]?.min_withdrawal_amount);\n }, [quantity, vaultInfo, maxQuantity]);\n\n const disabledWithdraw = useMemo(() => {\n return (\n !quantity ||\n quantity === \"0\" ||\n disabledOperation ||\n (!!quantity && isMinAmount)\n );\n }, [quantity, disabledOperation]);\n\n const inputHint = useMemo(() => {\n if (quantity && isMinAmount) {\n return {\n hintMessage: t(\"vaults.operation.error.minWithdrawal\", {\n amount: vaultInfo.data[0]?.min_withdrawal_amount,\n }),\n status: \"error\",\n };\n }\n return {\n hintMessage: \"\",\n status: \"\",\n };\n }, [quantity, t]);\n\n return {\n quantity,\n onQuantityChange,\n maxQuantity,\n handleWithdraw,\n vaultId,\n sharePrice,\n receivingAmount,\n disabledWithdraw,\n disabledOperation,\n inputHint,\n };\n};\n\nexport type VaultWithdrawFormScript = ReturnType<\n typeof useVaultWithdrawFormScript\n>;\n","import { OperationType } from \"../../../types/vault\";\nimport { useLatestOperationScript } from \"../depositAndWithdraw/latest.script\";\n\nexport const useLatestWithdrawScript = ({ vaultId }: { vaultId: string }) => {\n const { latestOperation } = useLatestOperationScript({\n type: OperationType.WITHDRAWAL,\n vaultId,\n });\n return {\n latestOperation,\n };\n};\n\nexport type LatestWithdrawScript = ReturnType<typeof useLatestWithdrawScript>;\n","import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { Text, cn } from \"@kodiak-finance/orderly-ui\";\n\nconst ProcessDot = () => {\n return <div className=\"oui-size-2 oui-rounded-full oui-bg-white/[0.54]\" />;\n};\n\nconst ProcessLine = () => {\n return <div className=\"oui-h-px oui-flex-1 oui-bg-white/[0.2]\" />;\n};\n\nconst ProcessText = ({\n children,\n className,\n}: {\n children: React.ReactNode;\n className?: string;\n}) => {\n return (\n <div\n className={cn(\n \"oui-flex-1 oui-text-2xs oui-font-normal oui-text-base-contrast-80\",\n className,\n )}\n >\n {children}\n </div>\n );\n};\n\nconst WithdrawProcess: FC = () => {\n const { t } = useTranslation();\n return (\n <>\n <div className=\"oui-flex oui-items-center\">\n <ProcessDot />\n <div className=\"oui-flex-1\">\n <ProcessLine />\n </div>\n <ProcessDot />\n <div className=\"oui-flex-1\">\n <ProcessLine />\n </div>\n <ProcessDot />\n </div>\n <div className=\"oui-mt-1 oui-flex oui-justify-between\">\n <ProcessText>{t(\"vaults.withdraw.process.initiate\")}</ProcessText>\n <ProcessText className=\"oui-text-center\">\n {t(\"vaults.withdraw.process.vaultProcess\")}\n </ProcessText>\n <ProcessText className=\"oui-text-right\">\n {t(\"vaults.withdraw.process.transferred\")}\n </ProcessText>\n </div>\n </>\n );\n};\n\nexport const WithdrawProcessWidget: FC = () => {\n const { t } = useTranslation();\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-2 oui-rounded-xl oui-border oui-border-white/[0.12] oui-p-3\">\n <div className=\"oui-flex oui-items-center oui-justify-between oui-text-sm oui-font-semibold oui-text-base-contrast-54\">\n <div>{t(\"vaults.withdraw.process.withdrawProcess\")}</div>\n <Text color=\"primary\">{t(\"vaults.withdraw.process.upTo\")}</Text>\n </div>\n <WithdrawProcess />\n </div>\n );\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { cn, Text, TokenIcon } from \"@kodiak-finance/orderly-ui\";\nimport { VaultOperation } from \"../../../types/vault\";\nimport { getOperationStatusColor } from \"../../../utils/getOperationStatusColor\";\nimport { WithdrawProcessWidget } from \"../withdraw/withdraw-process.ui\";\n\nexport type LatestWithdrawUIProps = {\n latestOperation: VaultOperation | undefined;\n};\n\nexport const LatestWithdrawUI: FC<LatestWithdrawUIProps> = (props) => {\n const { latestOperation } = props;\n const { t } = useTranslation();\n if (!latestOperation) {\n return <WithdrawProcessWidget />;\n }\n\n return (\n <div className=\"oui-mt-3 oui-flex oui-flex-col oui-gap-2\">\n <div className=\"oui-text-xs oui-font-normal oui-text-base-contrast-54\">\n {t(\"vaults.withdraw.latestWithdraw\")}\n </div>\n <div className=\"oui-h-[44px] oui-rounded-lg oui-border oui-border-white/[0.12] oui-p-3\">\n <div className=\"oui-flex oui-items-center\">\n <div\n className={cn(\n \"oui-mr-1 oui-size-1 oui-rounded-full\",\n latestOperation.status === \"completed\" && \"oui-bg-success\",\n latestOperation.status === \"rejected\" && \"oui-bg-danger\",\n latestOperation.status === \"failed\" && \"oui-bg-danger\",\n (latestOperation.status === \"pending\" ||\n latestOperation.status === \"new\") &&\n \"oui-bg-primary\",\n )}\n />\n <Text\n color={getOperationStatusColor(latestOperation.status)}\n className=\"oui-text-xs oui-font-normal\"\n >\n {latestOperation.status.slice(0, 1).toUpperCase() +\n latestOperation.status.slice(1)}\n </Text>\n <TokenIcon name=\"USDC\" className=\"oui-ml-auto oui-mr-1 oui-size-4\" />\n <Text.numeral className=\"oui-text-sm oui-font-semibold oui-text-base-contrast-80\">\n {latestOperation.amount_change || \"-\"}\n </Text.numeral>\n </div>\n </div>\n </div>\n );\n};\n","import { FC } from \"react\";\nimport { useLatestWithdrawScript } from \"./latest-withdraw-script\";\nimport { LatestWithdrawUI } from \"./latest-withdraw-ui\";\n\nexport type LatestWithdrawWidgetProps = {\n vaultId: string;\n};\n\nexport const LatestWithdrawWidget: FC<LatestWithdrawWidgetProps> = (props) => {\n const { vaultId } = props;\n const state = useLatestWithdrawScript({ vaultId });\n return <LatestWithdrawUI {...state} />;\n};\n","export * from \"./latest-withdraw-widget\";\n","import { FC } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Box,\n Text,\n Button,\n modal,\n SimpleDialog,\n SimpleSheet,\n useModal,\n cn,\n useScreen,\n} from \"@kodiak-finance/orderly-ui\";\nimport {\n BrokerWallet,\n QuantityInput,\n AvailableQuantity,\n} from \"@kodiak-finance/orderly-ui-transfer\";\nimport { LatestWithdrawWidget } from \"../latest-withdraw\";\nimport { VaultWithdrawFormScript } from \"./vault-withdraw-form.script\";\nimport { WithdrawProcessWidget } from \"./withdraw-process.ui\";\n\nexport const VaultWithdrawForm: FC<VaultWithdrawFormScript> = (props) => {\n const {\n quantity,\n onQuantityChange,\n maxQuantity,\n handleWithdraw,\n vaultId,\n sharePrice,\n receivingAmount,\n disabledWithdraw,\n disabledOperation,\n inputHint,\n } = props;\n const { isMobile } = useScreen();\n\n const handleInitialWithdraw = () => {\n modal.show(isMobile ? WithdrawInitialSheet : WithdrawInitialDialog, {\n quantity,\n receivingAmount,\n handleWithdraw,\n });\n };\n\n const { t } = useTranslation();\n return (\n <div>\n <BrokerWallet />\n <Box mt={3} mb={1}>\n <QuantityInput\n value={quantity}\n onValueChange={onQuantityChange}\n token={{ display_name: \"Shares\", precision: 6 } as any}\n testId=\"oui-testid-vault-withdraw-dialog-quantity-input\"\n hintMessage={inputHint.hintMessage}\n status={inputHint.status as any}\n />\n </Box>\n <AvailableQuantity\n maxQuantity={maxQuantity}\n onClick={() => {\n onQuantityChange(maxQuantity.toString());\n }}\n />\n\n <WithdrawKVItem\n label={t(\"vaults.withdraw.estPricePerShare\")}\n currency=\"$\"\n value={sharePrice || \"-\"}\n className=\"oui-mb-1 oui-mt-5\"\n />\n <WithdrawKVItem\n label={t(\"vaults.withdraw.estReceivingAmount\")}\n value={receivingAmount}\n suffix={\n <span className=\"oui-ml-1 oui-text-base-contrast-36\">USDC</span>\n }\n className=\"oui-mb-5\"\n />\n\n {disabledOperation && (\n <div className=\"oui-mt-3 oui-text-center\">\n <Text color=\"warning\" className=\"oui-text-sm oui-font-semibold\">\n {t(\"vaults.operation.error.switchAccount\")}\n </Text>\n </div>\n )}\n\n <Button\n fullWidth\n color=\"primary\"\n disabled={disabledWithdraw}\n className=\"oui-mt-3\"\n onClick={handleInitialWithdraw}\n >\n {t(\"common.withdraw\")}\n </Button>\n <div className=\"oui-mt-3\">\n <LatestWithdrawWidget vaultId={vaultId} />\n </div>\n </div>\n );\n};\n\ntype WithdrawKVItemProps = {\n label: string;\n value: string | number;\n suffix?: React.ReactNode;\n currency?: string;\n className?: string;\n};\nconst WithdrawKVItem = ({\n label,\n value,\n suffix,\n currency,\n className,\n}: WithdrawKVItemProps) => {\n return (\n <div\n className={cn(\n \"oui-flex oui-items-center oui-justify-between oui-text-sm oui-font-semibold oui-text-base-contrast-54\",\n className,\n )}\n >\n <div>{label}</div>\n <Text.numeral\n currency={currency}\n className=\"oui-text-base-contrast\"\n suffix={suffix}\n >\n {value}\n </Text.numeral>\n </div>\n );\n};\n\ntype WithdrawInitialContentProps = {\n quantity: string;\n receivingAmount: string;\n handleWithdraw: () => void;\n hide?: () => void;\n};\n\nconst WithdrawInitialContent = (props: WithdrawInitialContentProps) => {\n const { quantity, receivingAmount, handleWithdraw, hide } = props;\n const { t } = useTranslation();\n return (\n <div className=\"oui-flex oui-flex-col\">\n <WithdrawKVItem\n label={t(\"vaults.withdraw.dialog.withdrawalAmount\")}\n value={quantity}\n suffix={\n <span className=\"oui-ml-1 oui-text-base-contrast-36\">Shares</span>\n }\n />\n <WithdrawKVItem\n label={t(\"vaults.withdraw.dialog.estimatedReceiving\")}\n value={receivingAmount}\n suffix={\n <span className=\"oui-ml-1 oui-text-base-contrast-36\">USDC</span>\n }\n className=\"oui-mt-1\"\n />\n <Text color=\"warning\" className=\"oui-my-5 oui-text-sm oui-font-semibold\">\n {t(\"vaults.withdraw.dialog.note\")}\n </Text>\n <WithdrawProcessWidget />\n <Button\n fullWidth\n color=\"primary\"\n className=\"oui-mt-5\"\n onClick={async () => {\n await handleWithdraw();\n hide?.();\n }}\n >\n {t(\"vaults.withdraw.dialog.initiateWithdrawal\")}\n </Button>\n </div>\n );\n};\n\nconst WithdrawInitialDialog = modal.create(\n ({\n quantity,\n receivingAmount,\n handleWithdraw,\n }: WithdrawInitialContentProps) => {\n const { visible, hide, onOpenChange } = useModal();\n const { t } = useTranslation();\n return (\n <SimpleDialog\n title={t(\"vaults.withdraw.dialog.title\")}\n open={visible}\n onOpenChange={onOpenChange}\n >\n <WithdrawInitialContent\n quantity={quantity}\n receivingAmount={receivingAmount}\n handleWithdraw={handleWithdraw}\n hide={hide}\n />\n </SimpleDialog>\n );\n },\n);\n\nconst WithdrawInitialSheet = modal.create(\n ({\n quantity,\n receivingAmount,\n handleWithdraw,\n }: WithdrawInitialContentProps) => {\n const { visible, hide, onOpenChange } = useModal();\n const { t } = useTranslation();\n return (\n <SimpleSheet\n title={t(\"vaults.withdraw.dialog.title\")}\n open={visible}\n onOpenChange={onOpenChange}\n >\n <WithdrawInitialContent\n quantity={quantity}\n receivingAmount={receivingAmount}\n handleWithdraw={handleWithdraw}\n hide={hide}\n />\n </SimpleSheet>\n );\n },\n);\n","import { FC } from \"react\";\nimport { useVaultWithdrawFormScript } from \"./vault-withdraw-form.script\";\nimport { VaultWithdrawForm } from \"./vault-withdraw-form.ui\";\n\nexport type VaultWithdrawWidgetProps = {\n vaultId: string;\n};\n\nexport const VaultWithdrawWidget: FC<VaultWithdrawWidgetProps> = (props) => {\n const { vaultId } = props;\n const state = useVaultWithdrawFormScript({ vaultId });\n return <VaultWithdrawForm {...state} />;\n};\n","export * from \"./vault-withdraw-form.widget\";\n","import { FC, useState } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n ArrowDownSquareFillIcon,\n ArrowUpSquareFillIcon,\n registerSimpleDialog,\n registerSimpleSheet,\n TabPanel,\n Tabs,\n} from \"@kodiak-finance/orderly-ui\";\nimport { VaultDepositWidget } from \"../deposit\";\nimport { VaultWithdrawWidget } from \"../withdraw\";\n\nexport const VaultDepositAndWithdrawWithDialogId =\n \"VaultDepositAndWithdrawWithDialogId\";\nexport const VaultDepositAndWithdrawWithSheetId =\n \"VaultDepositAndWithdrawWithSheetId\";\n\nexport type VaultDepositAndWithdrawProps = {\n activeTab?: \"deposit\" | \"withdraw\";\n close?: () => void;\n vaultId: string;\n};\n\nexport const VaultDepositAndWithdraw: FC<VaultDepositAndWithdrawProps> = (\n props,\n) => {\n const [activeTab, setActiveTab] = useState<string>(\n props.activeTab || \"deposit\",\n );\n const { vaultId } = props;\n const { t } = useTranslation();\n\n return (\n <Tabs\n value={activeTab}\n onValueChange={setActiveTab}\n variant=\"contained\"\n size=\"lg\"\n classNames={{\n tabsList: \"oui-px-0\",\n tabsContent: \"oui-pt-5\",\n }}\n >\n <TabPanel\n title={t(\"common.deposit\")}\n icon={<ArrowDownSquareFillIcon />}\n value=\"deposit\"\n >\n <VaultDepositWidget vaultId={vaultId} />\n </TabPanel>\n <TabPanel\n title={t(\"common.withdraw\")}\n icon={<ArrowUpSquareFillIcon />}\n value=\"withdraw\"\n >\n <VaultWithdrawWidget vaultId={vaultId} />\n </TabPanel>\n </Tabs>\n );\n};\n\nregisterSimpleDialog(\n VaultDepositAndWithdrawWithDialogId,\n VaultDepositAndWithdraw,\n {\n size: \"md\",\n classNames: {\n content: \"oui-border oui-border-line-6\",\n },\n },\n);\n\nregisterSimpleSheet(\n VaultDepositAndWithdrawWithSheetId,\n VaultDepositAndWithdraw,\n);\n","export const ORDERLY_ICON =\n \"https://oss.orderly.network/static/symbol_logo/ORDER.png\";\n\nexport const ORDERLY_VAULT_TITLE = \"Orderly OmniVault\";\n\nexport const ORDERLY_VAULT_DESCRIPTION =\n \"Earn passive yields effortlessly, no trading expertise required. OmniVault deploys market-making strategies, taking on liquidations, and accrue platform fees.\";\n\nexport const getBrokerIconUrl = (brokerId: string) => {\n switch (brokerId) {\n case \"kodiak\":\n return \"https://oss.orderly.network/static/symbol_logo/kodiak.png\";\n case \"orderly\":\n return \"https://oss.orderly.network/static/symbol_logo/ORDER.png\";\n case \"woofi_pro\":\n return \"https://oss.orderly.network/static/broker_logo/woofi_pro.png\";\n case \"aden\":\n return \"/vaults/broker/aden.png\";\n case \"vooi\":\n return \"https://oss.orderly.network/static/broker_logo/vooi.png\";\n default:\n return `https://oss.orderly.network/static/broker_logo/${brokerId}.png`;\n }\n};\n","import { useEffect, useMemo } from \"react\";\nimport {\n useAccount,\n useCollateral,\n useGetEnv,\n} from \"@kodiak-finance/orderly-hooks\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { modal, useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { VAULTS_WEBSITE_URLS } from \"../../api/env\";\nimport { useSVApiUrl } from \"../../hooks/useSVAPIUrl\";\nimport { useVaultLpInfoById, useVaultsStore } from \"../../store/vaultsStore\";\nimport { VaultInfo } from \"../../types/vault\";\nimport {\n VaultDepositAndWithdrawWithDialogId,\n VaultDepositAndWithdrawWithSheetId,\n} from \"../vault-operation/depositAndWithdraw\";\nimport { ORDERLY_ICON } from \"./constants\";\nimport { getBrokerIconUrl } from \"./constants\";\n\nexport const useVaultCardScript = (vault: VaultInfo) => {\n const { t } = useTranslation();\n const vaultLpInfo = useVaultLpInfoById(vault.vault_id);\n const { fetchVaultLpInfo } = useVaultsStore();\n const env = useGetEnv();\n const { isMobile } = useScreen();\n\n const { state } = useAccount();\n const svApiUrl = useSVApiUrl();\n\n const { holding } = useCollateral();\n\n const availableBalance = useMemo(() => {\n return holding?.find((h) => h.token === \"USDC\")?.holding || 0;\n }, [holding]);\n\n useEffect(() => {\n if (!state.address || !svApiUrl || !vault.vault_id) {\n return;\n }\n\n // fetchVaultLpPerformance({ vault_id: vault.vault_id }, svApiUrl);\n fetchVaultLpInfo(\n { vault_id: vault.vault_id, wallet_address: state.address },\n svApiUrl,\n );\n }, [vault.vault_id, state.address, svApiUrl]);\n\n const memoizedAvailableBalance = useMemo(() => {\n return availableBalance;\n }, [availableBalance]);\n\n const lpInfo = useMemo(() => {\n const info = vaultLpInfo?.[0];\n if (!info) {\n return {\n deposits: \"--\",\n earnings: \"--\",\n };\n }\n return {\n deposits: info.lp_tvl - info.potential_pnl,\n earnings: info.potential_pnl,\n };\n }, [vaultLpInfo]);\n\n const isEVMConnected = useMemo(() => {\n return state.chainNamespace === \"EVM\";\n }, [state.chainNamespace]);\n\n const isSOLConnected = useMemo(() => {\n return state.chainNamespace === \"SOL\";\n }, [state.chainNamespace]);\n\n const isWrongNetwork = useMemo(() => {\n return (\n state.chainNamespace !== \"EVM\" &&\n state.chainNamespace !== \"SOL\" &&\n state.accountId !== state.mainAccountId\n );\n }, [state.chainNamespace, state.accountId, state.mainAccountId]);\n\n const isButtonsDisabled = useMemo(() => {\n return vault.status !== \"live\";\n }, [vault.status]);\n\n const openDepositAndWithdraw = (activeTab: \"deposit\" | \"withdraw\") => {\n modal.show(\n isMobile\n ? VaultDepositAndWithdrawWithSheetId\n : VaultDepositAndWithdrawWithDialogId,\n {\n activeTab,\n vaultId: vault.vault_id,\n },\n );\n };\n\n const openVaultWebsite = () => {\n const baseUrl = VAULTS_WEBSITE_URLS[env] || VAULTS_WEBSITE_URLS.prod;\n window.open(`${baseUrl}/vaults/${vault.vault_address}`, \"_blank\");\n };\n\n return {\n title: vault.vault_name,\n description: vault.description,\n icon: getBrokerIconUrl(vault.broker_id),\n vaultInfo: vault,\n lpInfo,\n isEVMConnected,\n isSOLConnected,\n openDepositAndWithdraw,\n availableBalance: memoizedAvailableBalance,\n openVaultWebsite,\n isWrongNetwork,\n isButtonsDisabled,\n };\n};\n\nexport type VaultCardScript = ReturnType<typeof useVaultCardScript>;\n","import { ReactNode } from \"react\";\n\n/**\n * Parse markdown links [text](url) and convert to React elements\n * @param text - The text containing markdown links\n * @returns Array of React nodes with links converted to <a> elements\n */\nexport const parseMarkdownLinks = (text: string): ReactNode[] => {\n // Add defensive check: return empty string if text is undefined/null\n if (!text) {\n return [\"\"];\n }\n\n const markdownLinkRegex = /\\[([^\\]]+)\\]\\(([^)]+)\\)/g;\n const parts: ReactNode[] = [];\n let lastIndex = 0;\n let match;\n\n while ((match = markdownLinkRegex.exec(text)) !== null) {\n const [fullMatch, linkText, url] = match;\n const matchIndex = match.index;\n\n // Add text before the link\n if (matchIndex > lastIndex) {\n parts.push(text.substring(lastIndex, matchIndex));\n }\n\n // Add the link element with underline\n parts.push(\n <a\n key={matchIndex}\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"oui-underline hover:oui-text-base-contrast-80\"\n >\n {linkText}\n </a>,\n );\n\n lastIndex = matchIndex + fullMatch.length;\n }\n\n // Add remaining text after the last link\n if (lastIndex < text.length) {\n parts.push(text.substring(lastIndex));\n }\n\n return parts.length > 0 ? parts : [text];\n};\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n Text,\n cn,\n Button,\n ArrowRightUpSquareFillIcon,\n useScreen,\n Tooltip,\n InfoCircleIcon,\n} from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuard } from \"@kodiak-finance/orderly-ui-connector\";\nimport { Decimal } from \"@kodiak-finance/orderly-utils\";\nimport { VaultStatus } from \"../../types/vault\";\nimport { parseMarkdownLinks } from \"../../utils/parseMarkdownLinks\";\nimport { VaultCardScript } from \"./vaultCard.script\";\n\nexport const formatAllTimeReturn = (\n status: VaultStatus,\n vaultAge: number | null,\n lifetimeApy: number,\n): string => {\n if (status === \"pre_launch\" || (vaultAge !== null && vaultAge < 7)) {\n return \"--\";\n }\n if (lifetimeApy > 100) {\n return \">10000%\";\n }\n return (\n new Decimal(lifetimeApy)\n .mul(100)\n .toDecimalPlaces(2, Decimal.ROUND_UP)\n .toFixed(2) + \"%\"\n );\n};\n\nexport const VaultCard: FC<VaultCardScript> = (props) => {\n const {\n title,\n vaultInfo,\n lpInfo,\n description,\n isEVMConnected,\n isSOLConnected,\n openDepositAndWithdraw,\n availableBalance,\n openVaultWebsite,\n icon,\n isButtonsDisabled,\n } = props;\n\n const { t } = useTranslation();\n const { isMobile } = useScreen();\n\n const formattedAllTimeReturn = useMemo(\n () =>\n formatAllTimeReturn(\n vaultInfo.status,\n vaultInfo.vault_age,\n vaultInfo.lifetime_apy,\n ),\n [vaultInfo.status, vaultInfo.vault_age, vaultInfo.lifetime_apy],\n );\n\n // Get status tag config\n const getStatusTag = () => {\n const { status } = vaultInfo;\n\n if (status === \"live\") {\n return {\n text: t(\"vaults.card.status.active\"),\n color: \"#00C076\",\n bgColor: \"rgba(0, 192, 118, 0.15)\",\n };\n } else if (status === \"pre_launch\") {\n return {\n text: t(\"vaults.card.launchingSoon\"),\n color: \"#E88800\",\n bgColor: \"rgba(232, 136, 0, 0.15)\",\n };\n } else if (status === \"closing\") {\n return {\n text: t(\"vaults.card.status.closing\"),\n color: \"#FF6B6B\",\n bgColor: \"rgba(255, 107, 107, 0.15)\",\n };\n } else if (status === \"closed\") {\n return {\n text: t(\"vaults.card.status.closed\"),\n color: \"#999999\",\n bgColor: \"rgba(153, 153, 153, 0.15)\",\n };\n }\n return null;\n };\n\n const statusTag = getStatusTag();\n\n const supportVaultsList = useMemo(() => {\n const chains = Array.isArray(vaultInfo?.supported_chains)\n ? vaultInfo.supported_chains\n : [];\n return (\n <div className=\"oui-flex oui-items-center\">\n {chains.map((chain, index) => (\n <img\n key={chain.chain_id}\n src={`https://oss.orderly.network/static/network_logo/${chain.chain_id}.png`}\n alt={chain.chain_id}\n className={cn(\n \"oui-relative\",\n isMobile ? \"oui-size-[18px]\" : \"oui-size-5\",\n )}\n style={{\n marginLeft: index > 0 ? \"-4px\" : \"0\",\n zIndex: chains.length - index,\n }}\n />\n ))}\n </div>\n );\n }, [vaultInfo.supported_chains, isMobile]);\n\n return (\n <div className=\"oui-relative oui-h-[435px] oui-overflow-hidden oui-rounded-2xl oui-bg-base-9\">\n {/* Background image\n <img\n src=\"/vaults/vaults-card-bg.png\"\n alt=\"\"\n style={{\n position: \"absolute\",\n top: 0,\n right: 0,\n width: \"100%\",\n height: \"180px\",\n objectFit: \"cover\",\n objectPosition: \"top\",\n zIndex: 0,\n }}\n onError={(e) => {\n e.currentTarget.style.display = \"none\";\n }}\n />\n */}\n\n <div\n className={cn(\n \"oui-absolute oui-left-0 oui-top-0 oui-z-20 oui-size-full oui-p-6\",\n \"oui-overflow-y-auto oui-custom-scrollbar\",\n )}\n >\n <div className=\"oui-flex oui-flex-col oui-gap-2\">\n {/* Title + Status tag group, 4px spacing */}\n <div className=\"oui-flex oui-flex-col oui-gap-1\">\n {/* Vault name */}\n <div className=\"oui-text-[18px] oui-font-semibold oui-text-white oui-break-words\">\n {title}\n </div>\n {/* Status tag */}\n {statusTag && (\n <div\n className=\"oui-flex oui-w-fit oui-items-center oui-gap-[10px] oui-px-2\"\n style={{\n height: \"18px\",\n borderRadius: \"4px\",\n background: statusTag.bgColor,\n color: statusTag.color,\n fontSize: \"12px\",\n fontWeight: 600,\n lineHeight: \"18px\",\n letterSpacing: \"0.36px\",\n }}\n >\n {statusTag.text}\n </div>\n )}\n </div>\n\n {/* Description + View more block (gap-1 = 4px) */}\n <div className=\"oui-flex oui-flex-col oui-gap-1\">\n <div className=\"oui-h-[54px]\">\n <div className=\"oui-text-2xs oui-font-normal oui-leading-[18px] oui-text-base-contrast-54 oui-line-clamp-3\">\n {parseMarkdownLinks(description)}\n </div>\n </div>\n {/* View more link */}\n <button\n onClick={openVaultWebsite}\n className=\"oui-flex oui-w-fit oui-items-center oui-gap-1 oui-text-xs oui-font-medium\"\n style={{ color: \"#608CFF\" }}\n >\n <span>{t(\"vaults.card.viewMore\")}</span>\n <ArrowRightUpSquareFillIcon\n style={{ color: \"#608CFF\" }}\n width={16}\n height={16}\n viewBox=\"0 0 18 18\"\n />\n </button>\n </div>\n\n {/* KPI + LP block (gap-6 = 24px) */}\n <div className=\"oui-flex oui-flex-col oui-gap-6\">\n <div className=\"oui-flex oui-items-center oui-gap-2\">\n <VaultInfoItem\n label={t(\"vaults.card.tvl\")}\n value={vaultInfo.tvl}\n textProps={{\n currency: \"$\",\n dp: 0,\n type: \"numeral\",\n }}\n />\n <VaultInfoItem\n label={t(\"vaults.card.allTimeReturn\")}\n value={formattedAllTimeReturn}\n textProps={{\n color: \"brand\",\n type: \"gradient\",\n }}\n showTooltip={\n vaultInfo.status === \"pre_launch\" ||\n (vaultInfo.vault_age !== null && vaultInfo.vault_age < 7)\n }\n tooltipContent={t(\"vaults.card.allTimeReturnTooltip\")}\n />\n </div>\n\n <div className=\"oui-flex oui-flex-col oui-items-center oui-gap-2 oui-rounded-lg oui-bg-white/[0.06] oui-p-3\">\n <LpInfoItem\n label={t(\"vaults.card.myDeposits\")}\n value={lpInfo.deposits}\n />\n <LpInfoItem\n label={t(\"vaults.card.myEarnings\")}\n value={lpInfo.earnings}\n />\n </div>\n </div>\n\n {/* Account balance + Buttons block (gap-4 = 16px, mt-2 for total 16px from My Deposits) */}\n <div className=\"oui-flex oui-flex-col oui-gap-4 oui-mt-2\">\n <LpInfoItem\n label={t(\"vaults.card.accountBalance\")}\n value={availableBalance}\n />\n\n <VaultCardOperation\n isEVMConnected={isEVMConnected}\n isSOLConnected={isSOLConnected}\n openDepositAndWithdraw={openDepositAndWithdraw}\n isButtonsDisabled={isButtonsDisabled}\n />\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nconst VaultInfoItem: FC<{\n label: string;\n value: string | number;\n textProps?: any;\n showTooltip?: boolean;\n tooltipContent?: string;\n}> = (props) => {\n const { label, value, textProps, showTooltip, tooltipContent } = props;\n\n return (\n <div\n className={cn(\n \"oui-flex oui-flex-1 oui-flex-col oui-items-center oui-justify-center oui-px-3 oui-py-2\",\n \"oui-rounded-lg oui-border oui-border-solid oui-border-white/[0.12]\",\n )}\n >\n <div className=\"oui-flex oui-items-center oui-gap-1 oui-text-2xs oui-font-normal oui-leading-[18px] oui-text-base-contrast-54\">\n {label}\n {showTooltip && tooltipContent && (\n <Tooltip content={tooltipContent} delayDuration={100}>\n <div>\n <InfoCircleIcon\n size={12}\n opacity={0.54}\n className=\"oui-text-base-contrast\"\n />\n </div>\n </Tooltip>\n )}\n </div>\n {textProps.type === \"gradient\" ? (\n <Text.gradient\n className=\"oui-text-base oui-font-semibold\"\n {...textProps}\n >\n {value}\n </Text.gradient>\n ) : (\n <Text.numeral\n className=\"oui-text-base oui-font-semibold\"\n {...textProps}\n >\n {value}\n </Text.numeral>\n )}\n </div>\n );\n};\n\nconst LpInfoItem: FC<{\n label: string;\n value: string | number;\n textProps?: any;\n}> = (props) => {\n const { label, value, textProps } = props;\n\n return (\n <div className=\"oui-flex oui-w-full oui-items-center oui-justify-between oui-text-2xs oui-font-normal\">\n <div className=\"oui-text-base-contrast-54\">{label}</div>\n <Text.numeral\n className=\"oui-text-base-contrast-80\"\n {...textProps}\n dp={2}\n suffix={\n <span className=\"oui-ml-1 oui-text-base-contrast-36\">USDC</span>\n }\n >\n {value}\n </Text.numeral>\n </div>\n );\n};\n\ntype VaultCardOperationProps = {\n isEVMConnected: boolean;\n isSOLConnected: boolean;\n openDepositAndWithdraw: (activeTab: \"deposit\" | \"withdraw\") => void;\n isButtonsDisabled: boolean;\n};\n\nconst VaultCardOperation: FC<VaultCardOperationProps> = (props) => {\n const {\n isEVMConnected,\n isSOLConnected,\n openDepositAndWithdraw,\n isButtonsDisabled,\n } = props;\n const { t } = useTranslation();\n\n return (\n <AuthGuard buttonProps={{ size: \"md\", fullWidth: true }}>\n {isEVMConnected || isSOLConnected ? (\n <div className=\"oui-flex oui-items-center oui-gap-2\">\n <Button\n className=\"oui-flex-1\"\n size=\"md\"\n disabled={isButtonsDisabled}\n onClick={() => openDepositAndWithdraw(\"deposit\")}\n >\n {t(\"common.deposit\")}\n </Button>\n <Button\n className=\"oui-flex-1\"\n size=\"md\"\n color=\"secondary\"\n disabled={isButtonsDisabled}\n onClick={() => openDepositAndWithdraw(\"withdraw\")}\n >\n {t(\"common.withdraw\")}\n </Button>\n </div>\n ) : (\n <Button size=\"md\" color=\"warning\">\n {t(\"connector.wrongNetwork\")}\n </Button>\n )}\n </AuthGuard>\n );\n};\n","import { FC } from \"react\";\nimport { VaultInfo } from \"../../types/vault\";\nimport { useVaultCardScript } from \"./vaultCard.script\";\nimport { VaultCard } from \"./vaultCard.ui\";\n\nexport type VaultCardWidgetProps = {\n vault: VaultInfo;\n};\n\nexport const VaultCardWidget: FC<VaultCardWidgetProps> = (props) => {\n const { vault } = props;\n const state = useVaultCardScript(vault);\n\n return <VaultCard {...state} />;\n};\n","export * from \"./vaultCard.widget\";\nexport * from \"./vaultCard.script\";\nexport * from \"./vaultCard.ui\";\nexport * from \"./constants\";\n","import { FC, useMemo, useState } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport {\n cn,\n Text,\n Button,\n ArrowRightUpSquareFillIcon,\n useScreen,\n Tooltip,\n InfoCircleIcon,\n} from \"@kodiak-finance/orderly-ui\";\nimport { AuthGuard } from \"@kodiak-finance/orderly-ui-connector\";\nimport { VaultInfo } from \"../../types/vault\";\nimport { useVaultCardScript } from \"../vault-card/vaultCard.script\";\nimport { formatAllTimeReturn } from \"../vault-card/vaultCard.ui\";\n\ntype SortField = \"tvl\" | \"apy\" | \"deposits\" | \"pnl\" | \"balance\";\ntype SortDirection = \"asc\" | \"desc\";\n\ninterface VaultsListProps {\n vaults: VaultInfo[];\n}\n\nexport const VaultsList: FC<VaultsListProps> = ({ vaults }) => {\n const { t } = useTranslation();\n const [sortField, setSortField] = useState<SortField>(\"apy\");\n const [sortDirection, setSortDirection] = useState<SortDirection>(\"desc\");\n\n const shouldShowApyTooltip = useMemo(() => {\n return vaults.some(\n (vault) =>\n vault.status === \"pre_launch\" ||\n (vault.vault_age !== null && vault.vault_age < 7),\n );\n }, [vaults]);\n\n const handleSort = (field: SortField) => {\n if (sortField === field) {\n setSortDirection(sortDirection === \"asc\" ? \"desc\" : \"asc\");\n } else {\n setSortField(field);\n setSortDirection(\"desc\");\n }\n };\n\n const sortedVaults = useMemo(() => {\n return [...vaults].sort((a, b) => {\n let aValue = 0;\n let bValue = 0;\n\n switch (sortField) {\n case \"tvl\":\n aValue = a.tvl;\n bValue = b.tvl;\n break;\n case \"apy\":\n aValue = a.lifetime_apy;\n bValue = b.lifetime_apy;\n break;\n // For deposits, pnl, balance - these need LP info which we'll handle in VaultListRow\n default:\n return 0;\n }\n\n return sortDirection === \"asc\" ? aValue - bValue : bValue - aValue;\n });\n }, [vaults, sortField, sortDirection]);\n\n const SortIcon: FC<{ field: SortField }> = ({ field }) => {\n const isActive = sortField === field;\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\n \"oui-ml-1 oui-transition-colors\",\n isActive ? \"oui-text-base-contrast\" : \"oui-text-base-contrast-36\",\n )}\n >\n <path\n d=\"M6 2L8 4H4L6 2Z\"\n fill=\"currentColor\"\n opacity={isActive && sortDirection === \"asc\" ? 1 : 0.3}\n />\n <path\n d=\"M6 10L4 8H8L6 10Z\"\n fill=\"currentColor\"\n opacity={isActive && sortDirection === \"desc\" ? 1 : 0.3}\n />\n </svg>\n );\n };\n\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-3\">\n {/* Table Header */}\n <div className=\"oui-grid oui-grid-cols-[2fr_1fr_1fr_1fr_1fr_1fr_1.5fr] oui-gap-4 oui-px-4 oui-py-3\">\n <div className=\"oui-text-2xs oui-font-normal oui-text-base-contrast-54\">\n {t(\"vaults.list.poolName\")}\n </div>\n <button\n onClick={() => handleSort(\"tvl\")}\n className=\"oui-flex oui-items-center oui-text-2xs oui-font-normal oui-text-base-contrast-54 hover:oui-text-base-contrast\"\n >\n TVL\n <SortIcon field=\"tvl\" />\n </button>\n <div className=\"oui-flex oui-items-center oui-gap-1\">\n <button\n onClick={() => handleSort(\"apy\")}\n className=\"oui-flex oui-items-center oui-text-2xs oui-font-normal oui-text-base-contrast-54 hover:oui-text-base-contrast\"\n >\n {t(\"vaults.card.allTimeReturn\")}\n <SortIcon field=\"apy\" />\n </button>\n {shouldShowApyTooltip && (\n <Tooltip\n content={t(\"vaults.card.allTimeReturnTooltip\")}\n delayDuration={100}\n >\n <div>\n <InfoCircleIcon\n size={12}\n opacity={0.54}\n className=\"oui-text-base-contrast\"\n />\n </div>\n </Tooltip>\n )}\n </div>\n <button\n onClick={() => handleSort(\"deposits\")}\n className=\"oui-flex oui-items-center oui-text-2xs oui-font-normal oui-text-base-contrast-54 hover:oui-text-base-contrast\"\n >\n {t(\"vaults.list.myDeposits\")}\n <SortIcon field=\"deposits\" />\n </button>\n <button\n onClick={() => handleSort(\"pnl\")}\n className=\"oui-flex oui-items-center oui-text-2xs oui-font-normal oui-text-base-contrast-54 hover:oui-text-base-contrast\"\n >\n {t(\"vaults.list.allTimePnl\")}\n <SortIcon field=\"pnl\" />\n </button>\n <div className=\"oui-text-2xs oui-font-normal oui-text-base-contrast-54\">\n {t(\"vaults.card.accountBalance\")}\n </div>\n <div className=\"oui-text-2xs oui-font-normal oui-text-base-contrast-54\">\n {t(\"vaults.list.operate\")}\n </div>\n </div>\n\n {/* Table Rows */}\n <div className=\"oui-flex oui-flex-col oui-gap-2\">\n {sortedVaults.map((vault) => (\n <VaultListRow key={vault.vault_id} vault={vault} />\n ))}\n </div>\n </div>\n );\n};\n\nconst VaultListRow: FC<{ vault: VaultInfo }> = ({ vault }) => {\n const { t } = useTranslation();\n const script = useVaultCardScript(vault);\n\n const {\n title,\n vaultInfo,\n lpInfo,\n isEVMConnected,\n isSOLConnected,\n openDepositAndWithdraw,\n availableBalance,\n openVaultWebsite,\n icon,\n isButtonsDisabled,\n } = script;\n\n const isPreLaunch = vaultInfo.status === \"pre_launch\";\n const { isMobile } = useScreen();\n\n // Get status tag config (same as card mode)\n const getStatusTag = () => {\n const { status } = vaultInfo;\n\n if (status === \"live\") {\n return {\n text: t(\"vaults.card.status.active\"),\n color: \"#00C076\",\n bgColor: \"rgba(0, 192, 118, 0.15)\",\n };\n } else if (status === \"pre_launch\") {\n return {\n text: t(\"vaults.card.launchingSoon\"),\n color: \"#E88800\",\n bgColor: \"rgba(232, 136, 0, 0.15)\",\n };\n } else if (status === \"closing\") {\n return {\n text: t(\"vaults.card.status.closing\"),\n color: \"#FF6B6B\",\n bgColor: \"rgba(255, 107, 107, 0.15)\",\n };\n } else if (status === \"closed\") {\n return {\n text: t(\"vaults.card.status.closed\"),\n color: \"#999999\",\n bgColor: \"rgba(153, 153, 153, 0.15)\",\n };\n }\n return null;\n };\n\n const statusTag = getStatusTag();\n\n const formattedAllTimeReturn = useMemo(\n () =>\n formatAllTimeReturn(\n vaultInfo.status,\n vaultInfo.vault_age,\n vaultInfo.lifetime_apy,\n ),\n [vaultInfo.status, vaultInfo.vault_age, vaultInfo.lifetime_apy],\n );\n\n const supportVaultsList = useMemo(() => {\n const chains = Array.isArray(vaultInfo?.supported_chains)\n ? vaultInfo.supported_chains\n : [];\n\n const ICON_SIZE = isMobile ? 18 : 20;\n\n return (\n <div className=\"oui-flex oui-items-center\">\n {chains.map((chain, index) => (\n <img\n key={chain.chain_id}\n src={`https://oss.orderly.network/static/network_logo/${chain.chain_id}.png`}\n alt={chain.chain_id}\n className={cn(\n \"oui-relative\",\n isMobile ? \"oui-size-[18px]\" : \"oui-size-5\",\n )}\n style={{\n marginLeft: index > 0 ? \"-4px\" : \"0\",\n zIndex: chains.length - index,\n width: ICON_SIZE,\n height: ICON_SIZE,\n }}\n />\n ))}\n </div>\n );\n }, [vaultInfo.supported_chains, isMobile]);\n\n return (\n <div className=\"oui-relative oui-grid oui-grid-cols-[2fr_1fr_1fr_1fr_1fr_1fr_1.5fr] oui-gap-4 oui-rounded-2xl oui-bg-base-9 oui-px-4 oui-py-4 oui-items-center oui-overflow-hidden\">\n {/* Background image\n <img\n src=\"/vaults/vaults-list-bg.png\"\n alt=\"\"\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"40%\",\n height: \"100%\",\n objectFit: \"cover\",\n objectPosition: \"left\",\n zIndex: 0,\n }}\n onError={(e) => {\n e.currentTarget.style.display = \"none\";\n }}\n />\n */}\n {/* Pool Name */}\n <div className=\"oui-relative oui-z-10 oui-flex oui-items-center oui-gap-2\">\n {/* <img\n src={icon}\n alt={vaultInfo.broker_id}\n className=\"oui-size-10 oui-rounded-full\"\n onError={(e) => {\n e.currentTarget.style.display = \"none\";\n }}\n /> */}\n <div className=\"oui-flex oui-flex-col oui-gap-1\">\n <div className=\"oui-text-sm oui-font-semibold oui-text-base-contrast\">\n {title}\n </div>\n <div className=\"oui-flex oui-flex-wrap oui-items-center oui-gap-2\">\n {/* <div className=\"oui-flex oui-items-center oui-gap-2 oui-flex-shrink-0\">\n {supportVaultsList}\n </div> */}\n {statusTag && (\n <div\n className=\"oui-flex oui-items-center oui-gap-[10px] oui-px-2 oui-whitespace-nowrap oui-flex-shrink-0\"\n style={{\n height: \"18px\",\n borderRadius: \"4px\",\n background: statusTag.bgColor,\n color: statusTag.color,\n fontSize: \"12px\",\n fontWeight: 600,\n lineHeight: \"18px\",\n letterSpacing: \"0.36px\",\n }}\n >\n {statusTag.text}\n </div>\n )}\n <button\n onClick={openVaultWebsite}\n className=\"oui-flex oui-items-center oui-gap-1 oui-text-xs oui-font-medium\"\n style={{ color: \"#608CFF\" }}\n >\n <span>{t(\"vaults.card.viewMore\")}</span>\n <ArrowRightUpSquareFillIcon\n style={{ color: \"#608CFF\" }}\n width={16}\n height={16}\n viewBox=\"0 0 18 18\"\n />\n </button>\n </div>\n </div>\n </div>\n\n {/* TVL */}\n <div className=\"oui-relative oui-z-10\">\n <Text.numeral\n className=\"oui-text-sm oui-font-normal oui-text-base-contrast\"\n currency=\"$\"\n dp={0}\n >\n {vaultInfo.tvl}\n </Text.numeral>\n </div>\n\n {/* All-time return */}\n <div className=\"oui-relative oui-z-10\">\n <Text.gradient className=\"oui-text-sm oui-font-semibold\" color=\"brand\">\n {formattedAllTimeReturn}\n </Text.gradient>\n </div>\n\n {/* My Deposits */}\n <div className=\"oui-relative oui-z-10\">\n <Text.numeral\n className=\"oui-text-sm oui-font-normal oui-text-base-contrast\"\n dp={2}\n >\n {lpInfo.deposits}\n </Text.numeral>\n </div>\n\n {/* All-time PnL */}\n <div className=\"oui-relative oui-z-10\">\n <Text.numeral\n className=\"oui-text-sm oui-font-normal oui-text-base-contrast\"\n dp={2}\n >\n {lpInfo.earnings}\n </Text.numeral>\n </div>\n\n {/* Account Balance */}\n <div className=\"oui-relative oui-z-10\">\n <Text.numeral\n className=\"oui-text-sm oui-font-normal oui-text-base-contrast\"\n dp={2}\n >\n {availableBalance}\n </Text.numeral>\n </div>\n\n {/* Operate */}\n <div className=\"oui-relative oui-z-10 oui-flex oui-items-center oui-gap-2\">\n <AuthGuard buttonProps={{ size: \"sm\" }}>\n {isEVMConnected || isSOLConnected ? (\n <>\n <Button\n size=\"sm\"\n className=\"oui-flex-1\"\n disabled={isButtonsDisabled}\n onClick={() => openDepositAndWithdraw(\"deposit\")}\n >\n {t(\"common.deposit\")}\n </Button>\n <Button\n size=\"sm\"\n color=\"secondary\"\n className=\"oui-flex-1\"\n disabled={isButtonsDisabled}\n onClick={() => openDepositAndWithdraw(\"withdraw\")}\n >\n {t(\"common.withdraw\")}\n </Button>\n </>\n ) : (\n <Button size=\"sm\" color=\"warning\" fullWidth>\n {t(\"connector.wrongNetwork\")}\n </Button>\n )}\n </AuthGuard>\n </div>\n </div>\n );\n};\n","import { FC } from \"react\";\nimport { cn } from \"@kodiak-finance/orderly-ui\";\n\nexport type ViewMode = \"grid\" | \"list\";\n\ninterface ViewModeToggleProps {\n mode: ViewMode;\n onChange: (mode: ViewMode) => void;\n}\n\nexport const ViewModeToggle: FC<ViewModeToggleProps> = ({ mode, onChange }) => {\n const toggleMode = () => {\n onChange(mode === \"grid\" ? \"list\" : \"grid\");\n };\n\n return (\n <button\n onClick={toggleMode}\n className=\"oui-flex oui-h-8 oui-w-8 oui-items-center oui-justify-center oui-rounded oui-transition-colors hover:oui-bg-base-6\"\n aria-label={\n mode === \"grid\" ? \"Switch to list view\" : \"Switch to grid view\"\n }\n >\n {mode === \"grid\" ? (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M2 4h14v2H2V4zm0 4h14v2H2V8zm0 4h14v2H2v-2z\"\n fill=\"currentColor\"\n opacity=\"0.54\"\n />\n </svg>\n ) : (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M2 2h6v6H2V2zm0 8h6v6H2v-6zm8-8h6v6h-6V2zm0 8h6v6h-6v-6z\"\n fill=\"currentColor\"\n opacity=\"0.54\"\n />\n </svg>\n )}\n </button>\n );\n};\n","import { FC, useState } from \"react\";\nimport { useTranslation } from \"@kodiak-finance/orderly-i18n\";\nimport { VaultInfo } from \"../../types/vault\";\nimport { VaultCardWidget } from \"../vault-card\";\nimport { VaultsList } from \"./vaults-list\";\nimport { ViewModeToggle, ViewMode } from \"./view-mode-toggle\";\n\nexport const AllVaultsDesktop: FC<{ vaults: VaultInfo[] }> = (props) => {\n const { vaults } = props;\n const { t } = useTranslation();\n const [viewMode, setViewMode] = useState<ViewMode>(\"grid\");\n\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-6\">\n <div className=\"oui-flex oui-items-center oui-justify-between\">\n <div className=\"oui-text-xl oui-font-normal oui-text-base-contrast\">\n {t(\"vaults.allVaults\")}\n </div>\n <ViewModeToggle mode={viewMode} onChange={setViewMode} />\n </div>\n {viewMode === \"grid\" ? (\n <div className=\"oui-grid oui-grid-cols-3 oui-gap-4 min-[1024px]:oui-grid-cols-3\">\n {vaults.map((vault) => (\n <VaultCardWidget key={vault.vault_id} vault={vault} />\n ))}\n </div>\n ) : (\n <VaultsList vaults={vaults} />\n )}\n </div>\n );\n};\n","import { FC } from \"react\";\nimport { VaultInfo } from \"../../types/vault\";\nimport { VaultCardWidget } from \"../vault-card\";\n\nexport const AllVaultsMobile: FC<{ vaults: VaultInfo[] }> = (props) => {\n const { vaults } = props;\n\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-3\">\n {vaults.map((vault) => (\n <VaultCardWidget key={vault.vault_id} vault={vault} />\n ))}\n </div>\n );\n};\n","import { FC } from \"react\";\nimport { useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { useVaultInfoState } from \"../../store/vaultsStore\";\nimport { AllVaultsDesktop } from \"./all-vaults.desktop\";\nimport { AllVaultsMobile } from \"./all-vaults.mobile\";\n\nexport const AllVaultsWidget: FC = () => {\n const { data } = useVaultInfoState();\n const { isMobile } = useScreen();\n return isMobile ? (\n <AllVaultsMobile vaults={data} />\n ) : (\n <AllVaultsDesktop vaults={data} />\n );\n};\n","export * from \"./all-vaults.widget\";\nexport * from \"./all-vaults.desktop\";\nexport * from \"./view-mode-toggle\";\nexport * from \"./vaults-list\";\n","import React, { FC } from \"react\";\nimport { cn, useScreen } from \"@kodiak-finance/orderly-ui\";\nimport { VaultsProvider } from \"../components/provider/vaults-provider\";\nimport type { VaultsPageConfig } from \"../types/vault\";\n\nconst LazyVaultsHeaderWidget = React.lazy(() =>\n import(\"../components/vaults-header\").then((mod) => {\n return { default: mod.VaultsHeaderWidget };\n }),\n);\n\nconst LazyVaultsIntroductionWidget = React.lazy(() =>\n import(\"../components/vaults-introduction\").then((mod) => {\n return { default: mod.VaultsIntroductionWidget };\n }),\n);\n\nconst LazyAllVaultsWidget = React.lazy(() =>\n import(\"../components/all-vaults\").then((mod) => {\n return { default: mod.AllVaultsWidget };\n }),\n);\n\nexport type VaultsPageProps = {\n className?: string;\n config?: VaultsPageConfig;\n};\n\nexport const VaultsPage: FC<VaultsPageProps> = (props) => {\n const { isMobile } = useScreen();\n return (\n <VaultsProvider {...props}>\n <div\n className={cn(\n \"oui-relative oui-min-h-screen \",\n \"oui-bg-base-10\",\n isMobile ? \"oui-px-3 oui-py-6\" : \"oui-px-6 oui-py-12\",\n props?.className,\n )}\n >\n <div\n id=\"vaults-content\"\n className={cn(\n \"oui-mx-auto oui-flex oui-max-w-[1200px] oui-flex-col\",\n isMobile ? \"oui-gap-6\" : \"oui-gap-12\",\n )}\n >\n <React.Suspense fallback={null}>\n <LazyVaultsHeaderWidget />\n </React.Suspense>\n <React.Suspense fallback={null}>\n <LazyVaultsIntroductionWidget />\n </React.Suspense>\n <React.Suspense fallback={null}>\n <LazyAllVaultsWidget />\n </React.Suspense>\n </div>\n </div>\n </VaultsProvider>\n );\n};\n","import { FC, PropsWithChildren, useEffect } from \"react\";\nimport { useConfig } from \"@kodiak-finance/orderly-hooks\";\nimport { useSVApiUrl } from \"../../hooks/useSVAPIUrl\";\nimport { VaultsPageProps } from \"../../pages\";\nimport { useVaultsStore } from \"../../store\";\n\nexport const VaultsProvider: FC<PropsWithChildren<VaultsPageProps>> = (\n props,\n) => {\n const svApiUrl = useSVApiUrl();\n const brokerId = useConfig(\"brokerId\");\n const {\n fetchVaultInfo,\n fetchVaultOverallInfo,\n setVaultsPageConfig,\n vaultsPageConfig,\n } = useVaultsStore();\n\n useEffect(() => {\n if (props.config) {\n setVaultsPageConfig(props.config);\n }\n }, [props.config]);\n\n useEffect(() => {\n if (!svApiUrl) {\n return;\n }\n fetchVaultInfo(undefined, svApiUrl);\n }, [svApiUrl]);\n\n // Fetch overall vault info\n useEffect(() => {\n if (!svApiUrl || !brokerId) {\n return;\n }\n\n // Determine broker_ids parameter\n const brokerIds = vaultsPageConfig?.overallInfoBrokerIds\n ? vaultsPageConfig.overallInfoBrokerIds\n : `orderly,${brokerId}`;\n\n fetchVaultOverallInfo(\n brokerIds ? { broker_ids: brokerIds } : undefined,\n svApiUrl,\n );\n }, [\n svApiUrl,\n brokerId,\n vaultsPageConfig?.overallInfoBrokerIds,\n fetchVaultOverallInfo,\n ]);\n\n return <div>{props.children}</div>;\n};\n","export * from \"./vault\";\n","export * from \"./pages\";\nexport * from \"./types\";\nexport * from \"./api/api\";\nexport * from \"./store\";\nexport * from \"./components\";\n","export * from \"./all-vaults\";\nexport * from \"./vault-card\";\nexport * from \"./vaults-header\";\nexport * from \"./vaults-introduction\";\nexport * from \"./vault-operation\";\n","export * from \"./depositAndWithdraw\";\nexport * from \"./deposit\";\nexport * from \"./withdraw\";\nexport * from \"./latest-deposit\";\nexport * from \"./latest-withdraw\";\n","export * from \"./latest-deposit.widget\";\n"]}