@kodiak-finance/orderly-vaults 2.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +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":"gIAAA,IAEaA,GAOAC,GATbC,GAAAC,EAAA,kBAEaH,GAAuC,CAClD,KAAM,6BACN,QAAS,qCACT,GAAI,uCACJ,IAAK,gCACP,EAEaC,GAA2C,CACtD,KAAM,8BACN,QAAS,sCACT,GAAI,iCACJ,IAAK,iCACP,ICdA,OAAS,WAAAG,OAAe,QACxB,OAAS,aAAAC,OAAiB,gCAGnB,SAASC,GAAc,CAC5B,IAAMC,EAAMF,GAAU,EAMtB,OAJeD,GAAQ,IACdJ,GAAgBO,CAAmC,EACzD,CAACA,CAAG,CAAC,CAGV,CAZA,IAAAC,GAAAL,EAAA,kBAEAD,OCkCA,SAASO,GAAiBC,EAA6B,CACrD,IAAMC,EAAiBC,GAAsBF,CAAM,EAC7CG,EAAe,IAAI,gBAEzB,cAAO,QAAQF,CAAc,EAAE,QAAQ,CAAC,CAACG,EAAKC,CAAK,IAAM,CACnDA,GAAU,MACZF,EAAa,OAAOC,EAAK,OAAOC,CAAK,CAAC,CAE1C,CAAC,EAEMF,EAAa,SAAS,CAC/B,CAEA,SAASD,GACPF,EAC2C,CAC3C,IAAMM,EAAsD,CAAC,EAE7D,cAAO,QAAQN,CAAM,EAAE,QAAQ,CAAC,CAACI,EAAKC,CAAK,IAAM,CACpBA,GAAU,OAGjC,OAAOA,GAAU,UACjB,OAAOA,GAAU,UACjB,OAAOA,GAAU,UAEjBC,EAASF,CAAG,EAAIC,EACP,OAAOA,GAAU,UAAYA,IAAU,MAE7B,OAAO,QAAQA,CAAgC,EACvD,QAAQ,CAAC,CAACE,EAAQC,CAAQ,IAAM,CAGvCA,GAAa,OACZ,OAAOA,GAAa,UACnB,OAAOA,GAAa,UACpB,OAAOA,GAAa,aAEtBF,EAASC,CAAM,EAAIC,EAEvB,CAAC,EAGP,CAAC,EAEMF,CACT,CAEA,SAASG,GAAkBC,EAAaV,EAA8B,CACpE,GAAI,CAACA,GAAU,OAAO,KAAKA,CAAM,EAAE,SAAW,EAC5C,OAAOU,EAGT,IAAMC,EAAcZ,GAAiBC,CAAM,EAC3C,GAAI,CAACW,EACH,OAAOD,EAGT,IAAME,EAAYF,EAAI,SAAS,GAAG,EAAI,IAAM,IAC5C,MAAO,GAAGA,CAAG,GAAGE,CAAS,GAAGD,CAAW,EACzC,CAhGA,IAuBaE,EAwFPC,GAsPAC,GAcCC,EAnXPC,GAAAxB,EAAA,kBAuBaoB,EAAN,cAA6B,KAAM,CACxC,YACEK,EACgBC,EACAC,EACAC,EAChB,CACA,MAAMH,CAAO,EAJG,UAAAC,EACA,YAAAC,EACA,cAAAC,EAGhB,KAAK,KAAO,gBACd,CACF,EA8EMP,GAAN,KAAoB,CAApB,cACE,KAAQ,oBAA4C,CAAC,EACrD,KAAQ,qBAA8C,CAAC,EACvD,KAAQ,cAAqC,CAC3C,QAAS,IACT,MAAO,EACP,WAAY,IACZ,eAAiBM,GAAWA,GAAU,KAAOA,EAAS,IAGtD,QAAS,CACP,eAAgB,kBAClB,CACF,EAGA,sBAAsBE,EAAuC,CAC3D,KAAK,oBAAoB,KAAKA,CAAW,CAC3C,CAGA,uBAAuBA,EAAwC,CAC7D,KAAK,qBAAqB,KAAKA,CAAW,CAC5C,CAGQ,wBAAwBC,EAAkC,CAChE,IAAMC,EAAa,IAAI,gBACvB,kBAAW,IAAMA,EAAW,MAAM,EAAGD,CAAO,EACrCC,CACT,CAGQ,aACNC,EAA8B,CAAC,EAC/BC,EAA6B,CAAC,EACjB,CACb,MAAO,CACL,GAAGD,EACH,GAAGC,CACL,CACF,CAGQ,MAAMC,EAA2B,CACvC,OAAO,IAAI,QAASC,GAAY,WAAWA,EAASD,CAAE,CAAC,CACzD,CAGA,MAAM,QACJjB,EACAmB,EAA8B,CAAC,EACnB,CASZ,IAAIC,EAPqC,CACvC,GAAG,KAAK,cACR,GAAGD,EACH,QAAS,KAAK,aAAa,KAAK,cAAc,QAASA,EAAO,OAAO,CACvE,EAIA,QAAWP,KAAe,KAAK,oBAC7BQ,EAAkB,MAAMR,EAAYQ,CAAe,EAIrD,IAAIC,EAAUrB,EAEZ,OAAOA,GAAQ,UACf,CAACA,EAAI,WAAW,MAAM,GACtBoB,EAAgB,UAEhBC,EAAU,GAAGD,EAAgB,OAAO,GAAGpB,EAAI,WAAW,GAAG,EAAI,GAAK,GAAG,GAAGA,CAAG,IAIzEoB,EAAgB,SAClBC,EACE,OAAOA,GAAY,SACftB,GAAkBsB,EAASD,EAAgB,MAAM,EACjDC,GAIR,IAAIC,EACAF,EAAgB,SAAWA,EAAgB,QAAU,IACvDE,EAAoB,KAAK,wBAAwBF,EAAgB,OAAO,EACxEA,EAAgB,OAASE,EAAkB,QAK7C,GAAM,CACJ,MAAAC,EAAQ,EACR,WAAAC,EAAa,IACb,eAAAC,EACA,OAAAnC,EACA,QAAAoC,EACA,QAAAb,EACA,KAAAc,EACA,OAAAC,EACA,GAAGC,CACL,EAAIT,EAGEU,EAAiC,CACrC,GAAGD,EACH,OAAAD,CACF,EAGID,IAAS,SACXG,EAAkB,KAChB,OAAOH,GAAS,SAAWA,EAAO,KAAK,UAAUA,CAAI,GAGzD,IAAII,EAGJ,QAASC,EAAU,EAAGA,GAAWT,EAAOS,IACtC,GAAI,CACF,IAAMrB,EAAW,MAAM,MAAMU,EAASS,CAAiB,EAGvD,GAAI,CAACL,EAAgBd,EAAS,MAAM,EAAG,CACrC,IAAIsB,EAAetB,EAAS,WACxBuB,GAEJ,GAAI,CACF,IAAMC,GAAY,MAAMxB,EAAS,KAAK,EACtCsB,EAAeE,GAAU,SAAWA,GAAU,MAAQF,EACtDC,GAAYC,GAAU,IACxB,MAAQ,CAER,CAEA,MAAM,IAAIhC,EACR8B,EACAC,GACAvB,EAAS,OACTA,CACF,CACF,CAGA,IAAIyB,EACJ,GAAI,CACFA,EAAe,MAAMzB,EAAS,KAAK,CACrC,MAAQ,CACN,MAAM,IAAIR,EACR,wBACA,cACAQ,EAAS,OACTA,CACF,CACF,CAGA,IAAI0B,EAAgBD,EACpB,QAAWxB,KAAe,KAAK,qBAC7ByB,EAAgB,MAAMzB,EAAYD,EAAU0B,CAAa,EAI3D,GAAI,OAAOA,GAAkB,UAAYA,IAAkB,MACrD,YAAaA,EAAe,CAC9B,IAAMC,EAAcD,EACpB,GAAIC,EAAY,QACd,OAAOA,EAAY,KAEnB,MAAM,IAAInC,EACRmC,EAAY,SAAW,qBACvBA,EAAY,KACZ3B,EAAS,OACTA,CACF,CAEJ,CAIF,OAAO0B,CACT,OAASE,EAAO,CAId,GAHAR,EAAYQ,aAAiB,MAAQA,EAAQ,IAAI,MAAM,OAAOA,CAAK,CAAC,EAIlEA,aAAiBpC,GAChBoC,GAAiB,OAAS,cAC3BP,IAAYT,EAEZ,MAAMQ,EAIJC,EAAUT,GACZ,MAAM,KAAK,MAAMC,CAAU,CAE/B,QAAE,CAEAF,GAAmB,MAAM,CAC3B,CAGF,MAAMS,CACR,CAGA,MAAM,IACJ/B,EACAmB,EAA8B,CAAC,EACnB,CACZ,OAAO,KAAK,QAAWnB,EAAK,CAAE,GAAGmB,EAAQ,OAAQ,KAAM,CAAC,CAC1D,CAEA,MAAM,KACJnB,EACAmB,EAA8B,CAAC,EACnB,CACZ,OAAO,KAAK,QAAWnB,EAAK,CAAE,GAAGmB,EAAQ,OAAQ,MAAO,CAAC,CAC3D,CAEA,MAAM,IACJnB,EACAmB,EAA8B,CAAC,EACnB,CACZ,OAAO,KAAK,QAAWnB,EAAK,CAAE,GAAGmB,EAAQ,OAAQ,KAAM,CAAC,CAC1D,CAEA,MAAM,OACJnB,EACAmB,EAA8B,CAAC,EACnB,CACZ,OAAO,KAAK,QAAWnB,EAAK,CAAE,GAAGmB,EAAQ,OAAQ,QAAS,CAAC,CAC7D,CAEA,MAAM,MACJnB,EACAmB,EAA8B,CAAC,EACnB,CACZ,OAAO,KAAK,QAAWnB,EAAK,CAAE,GAAGmB,EAAQ,OAAQ,OAAQ,CAAC,CAC5D,CACF,EAGMd,GAAgB,IAAID,GAcnBE,EAAQD,KC3Tf,eAAsBmC,GACpBC,EAC4B,CAC5B,OAAOnC,EAAc,IACnB,uCACA,CACE,QAASmC,CACX,CACF,CACF,CAQA,eAAsBC,GACpBD,EACAnD,EACqC,CACrC,OAAOgB,EAAc,IACnB,8CACA,CACE,OAAAhB,EACA,QAASmD,CACX,CACF,CACF,CAQA,eAAsBE,GACpBF,EACAnD,EAC8B,CAC9B,OAAOgB,EAAc,IACnB,oCACA,CACE,OAAAhB,EACA,QAASmD,CACX,CACF,CACF,CAvGA,IAAAG,GAAA7D,EAAA,kBAMAwB,OCNA,OAAS,UAAAsC,OAAc,UAAvB,IA2EaC,EA6OAC,GAEAC,GAEAC,GAIAC,GAMAC,GAMAC,GAOAC,GAGAC,EAIAC,GAGAC,GAIAC,GAKAC,GAtWbC,EAAA5E,EAAA,kBACA6D,KA0EaE,EAAiBD,GAAoB,CAACe,EAAKC,KAAS,CAE/D,QAAS,GAET,UAAW,CACT,KAAM,CAAC,EACP,QAAS,GACT,MAAO,KACP,YAAa,IACf,EAEA,mBAAoB,CAClB,KAAM,CAAC,EACP,QAAS,GACT,MAAO,KACP,YAAa,KACb,OAAQ,IACV,EAEA,YAAa,CACX,KAAM,CAAC,EACP,QAAS,GACT,MAAO,KACP,YAAa,KACb,OAAQ,IACV,EAEA,iBAAkB,KAGlB,WAAapB,GAAoB,CAC/BmB,EAAI,CAAE,QAAAnB,CAAQ,CAAC,CACjB,EAGA,eAAgB,MAAOA,GAAqB,CAC1C,IAAMqB,EAAQD,EAAI,EACZ7D,EAAMyC,GAAWqB,EAAM,QAE7B,GAAI,CAAC9D,EAAK,CACR4D,EAAKE,IAAW,CACd,UAAW,CACT,GAAGA,EAAM,UACT,MAAO,sBACT,CACF,EAAE,EACF,MACF,CAEAF,EAAKE,IAAW,CACd,QAASrB,GAAWqB,EAAM,QAC1B,UAAW,CACT,GAAGA,EAAM,UACT,QAAS,GACT,MAAO,IACT,CACF,EAAE,EAEF,GAAI,CACF,IAAMnD,EAA8B,MAAM6B,GAAaxC,CAAG,EAC1D4D,EAAKE,IAAW,CACd,UAAW,CACT,GAAGA,EAAM,UACT,KAAMnD,EAAS,KACf,QAAS,GACT,MAAO,KACP,YAAa,KAAK,IAAI,CACxB,CACF,EAAE,CACJ,OAAS4B,EAAO,CACdqB,EAAKE,IAAW,CACd,UAAW,CACT,GAAGA,EAAM,UACT,QAAS,GACT,MACEvB,aAAiB,MACbA,EAAM,QACN,4BACR,CACF,EAAE,CACJ,CACF,EAEA,iBAAkB,SAAY,CAC5B,IAAMuB,EAAQD,EAAI,EAEdC,EAAM,UAAU,aAAeA,EAAM,SACvC,MAAMA,EAAM,eAAe,CAE/B,EAGA,wBAAyB,MACvBxE,EACAmD,IACG,CACH,IAAMqB,EAAQD,EAAI,EACZ7D,EAAMyC,GAAWqB,EAAM,QAE7B,GAAI,CAAC9D,EAAK,CACR4D,EAAKE,IAAW,CACd,mBAAoB,CAClB,GAAGA,EAAM,mBACT,MAAO,sBACT,CACF,EAAE,EACF,MACF,CAEAF,EAAKE,IAAW,CACd,QAASrB,GAAWqB,EAAM,QAC1B,mBAAoB,CAClB,GAAGA,EAAM,mBACT,QAAS,GACT,MAAO,KACP,OAAAxE,CACF,CACF,EAAE,EAEF,GAAI,CACF,IAAMqB,EAAuC,MAAM+B,GACjD1C,EACAV,CACF,EAGAsE,EAAKE,IAAW,CACd,mBAAoB,CAClB,GAAGA,EAAM,mBACT,KAAM,CACJ,GAAGA,EAAM,mBAAmB,KAC5B,CAACxE,EAAO,QAAQ,EAAGqB,EAAS,IAC9B,EACA,QAAS,GACT,MAAO,KACP,YAAa,KAAK,IAAI,CACxB,CACF,EAAE,CACJ,OAAS4B,EAAO,CACdqB,EAAKE,IAAW,CACd,mBAAoB,CAClB,GAAGA,EAAM,mBACT,QAAS,GACT,MACEvB,aAAiB,MACbA,EAAM,QACN,sCACR,CACF,EAAE,CACJ,CACF,EAEA,0BAA2B,SAAY,CACrC,IAAMuB,EAAQD,EAAI,EAGhBC,EAAM,mBAAmB,aACzBA,EAAM,mBAAmB,QACzBA,EAAM,SAEN,MAAMA,EAAM,wBAAwBA,EAAM,mBAAmB,MAAM,CAEvE,EAGA,iBAAkB,MAAOxE,EAA2BmD,IAAqB,CACvE,IAAMqB,EAAQD,EAAI,EACZ7D,EAAMyC,GAAWqB,EAAM,QAE7B,GAAI,CAAC9D,EAAK,CACR4D,EAAKE,IAAW,CACd,YAAa,CACX,GAAGA,EAAM,YACT,MAAO,sBACT,CACF,EAAE,EACF,MACF,CAEAF,EAAKE,IAAW,CACd,QAASrB,GAAWqB,EAAM,QAC1B,YAAa,CACX,GAAGA,EAAM,YACT,QAAS,GACT,MAAO,KACP,OAAAxE,CACF,CACF,EAAE,EAEF,GAAI,CACF,IAAMqB,EAAgC,MAAMgC,GAAe3C,EAAKV,CAAM,EAGtEsE,EAAKE,IAAW,CACd,YAAa,CACX,GAAGA,EAAM,YACT,KAAM,CACJ,GAAGA,EAAM,YAAY,KACrB,CAACxE,EAAO,QAAQ,EAAGqB,EAAS,IAC9B,EACA,QAAS,GACT,MAAO,KACP,YAAa,KAAK,IAAI,CACxB,CACF,EAAE,CACJ,OAAS4B,EAAO,CACdqB,EAAKE,IAAW,CACd,YAAa,CACX,GAAGA,EAAM,YACT,QAAS,GACT,MACEvB,aAAiB,MACbA,EAAM,QACN,+BACR,CACF,EAAE,CACJ,CACF,EAEA,mBAAoB,SAAY,CAC9B,IAAMuB,EAAQD,EAAI,EAGhBC,EAAM,YAAY,aAClBA,EAAM,YAAY,QAClBA,EAAM,SAEN,MAAMA,EAAM,iBAAiBA,EAAM,YAAY,MAAM,CAEzD,EAEA,oBAAsB3C,GAA6B,CACjDyC,EAAI,CAAE,iBAAkBzC,CAAO,CAAC,CAClC,CACF,EAAE,EAGW4B,GAAoB,IAC/BD,EAAgBgB,GAAUA,EAAM,SAAS,EAC9Bd,GAA6B,IACxCF,EAAgBgB,GAAUA,EAAM,kBAAkB,EACvCb,GAAsB,IACjCH,EAAgBgB,GAAUA,EAAM,WAAW,EAGhCZ,GAAsB,IACjCJ,EAAgBgB,IAAW,CACzB,eAAgBA,EAAM,eACtB,iBAAkBA,EAAM,gBAC1B,EAAE,EAESX,GAA+B,IAC1CL,EAAgBgB,IAAW,CACzB,wBAAyBA,EAAM,wBAC/B,0BAA2BA,EAAM,yBACnC,EAAE,EAESV,GAAwB,IACnCN,EAAgBgB,IAAW,CACzB,iBAAkBA,EAAM,iBACxB,mBAAoBA,EAAM,kBAC5B,EAAE,EAGST,GAA6BU,GACxCjB,EAAgBgB,GAAUA,EAAM,mBAAmB,KAAKC,CAAO,CAAC,EAErDT,EAAsBS,GACjCjB,EAAgBgB,GAAUA,EAAM,YAAY,KAAKC,CAAO,CAAC,EAG9CR,GAA2B,IACtCT,EAAgBgB,GAAU,OAAO,KAAKA,EAAM,mBAAmB,IAAI,CAAC,EAEzDN,GAAoB,IAC/BV,EAAgBgB,GAAU,OAAO,KAAKA,EAAM,YAAY,IAAI,CAAC,EAGlDL,GAA6B,IACxCX,EAAgBgB,GACd,OAAO,OAAOA,EAAM,mBAAmB,IAAI,EAAE,KAAK,CACpD,EAEWJ,GAAsB,IACjCZ,EAAgBgB,GAAU,OAAO,OAAOA,EAAM,YAAY,IAAI,EAAE,KAAK,CAAC,ICvWxE,IAAAE,EAAAjF,EAAA,kBAAA4E,MCAA,OAAa,WAAA3E,OAAe,QAC5B,OAAS,kBAAAiF,OAAsB,+BAWrB,cAAAC,EA+BF,QAAAC,OA/BE,oBAZV,IAIaC,GAJbC,GAAAtF,EAAA,kBAIaqF,GAA+CE,GAAU,CACpE,GAAM,CAAE,cAAAC,EAAe,YAAAC,EAAa,WAAAC,CAAW,EAAIH,EAC7C,CAAE,EAAAI,CAAE,EAAIT,GAAe,EAEvBU,EAAoB3F,GAAQ,IAE9BkF,EAAC,OAAI,UAAU,4BACZ,SAAAK,EAAc,IAAI,CAACK,EAAOC,IACzBX,EAAC,OAEC,IAAK,mDAAmDU,EAAM,QAAQ,OACtE,IAAKA,EAAM,SACX,UAAU,0BACV,MAAO,CACL,WAAYC,EAAQ,EAAI,OAAS,IACjC,OAAQN,EAAc,OAASM,CACjC,GAPKD,EAAM,QAQb,CACD,EACH,EAED,CAACL,CAAa,CAAC,EAEZO,EAAqB9F,GAAQ,IAC7B,OAAOwF,GAAgB,SAEvBN,EAAC,OACC,IAAKM,EACL,IAAI,SACJ,UAAU,gDACZ,EAGGA,EACN,CAACA,CAAW,CAAC,EAEhB,OACEL,GAAC,OAAI,UAAU,gDACb,UAAAA,GAAC,OAAI,UAAU,0CACb,UAAAA,GAAC,OAAI,UAAU,gGACZ,UAAAO,EAAE,oBAAoB,EAAE,IAAEC,GAC7B,EACAT,EAAC,OAAI,UAAU,yFACZ,SAAAQ,EAAE,qBAAqB,EAC1B,EACAR,EAAC,OAAI,UAAU,wDACZ,SAAAQ,EAAE,4BAA6B,CAAE,WAAAD,CAAW,CAAC,EAChD,GACF,EACAP,EAAC,OAAI,UAAU,8BAA+B,SAAAY,EAAmB,GACnE,CAEJ,ICxDA,OAAa,WAAA9F,OAAe,QAC5B,OAAS,aAAA+F,OAAiB,gCAC1B,OAAS,kBAAAd,OAAsB,+BAYrB,cAAAC,EA+BF,QAAAC,OA/BE,oBAdV,IAKaa,GALbC,GAAAlG,EAAA,kBAKaiG,GAA8CV,GAAU,CACnE,GAAM,CAAE,cAAAC,EAAe,YAAAC,CAAY,EAAIF,EACjC,CAAE,EAAAI,CAAE,EAAIT,GAAe,EACvBQ,EAAaM,GAAU,YAAY,EAEnCJ,EAAoB3F,GAAQ,IAE9BkF,EAAC,OAAI,UAAU,4BACZ,SAAAK,EAAc,IAAI,CAACK,EAAOC,IACzBX,EAAC,OAEC,IAAK,mDAAmDU,EAAM,QAAQ,OACtE,IAAKA,EAAM,SACX,UAAU,+BACV,MAAO,CACL,WAAYC,EAAQ,EAAI,OAAS,IACjC,OAAQN,EAAc,OAASM,CACjC,GAPKD,EAAM,QAQb,CACD,EACH,EAED,CAACL,CAAa,CAAC,EAEZO,EAAqB9F,GAAQ,IAC7B,OAAOwF,GAAgB,SAEvBN,EAAC,OACC,IAAKM,EACL,IAAI,SACJ,UAAU,gDACZ,EAGGA,EACN,CAACA,CAAW,CAAC,EAEhB,OACEL,GAAC,OAAI,UAAU,eACb,UAAAA,GAAC,OAAI,UAAU,wBACb,UAAAA,GAAC,OAAI,UAAU,+FACZ,UAAAO,EAAE,oBAAoB,EAAE,IAAEC,GAC7B,EACAT,EAAC,OAAI,UAAU,mHACZ,SAAAQ,EAAE,qBAAqB,EAC1B,EACAR,EAAC,OAAI,UAAU,2EACZ,SAAAQ,EAAE,4BAA6B,CAAE,WAAAD,CAAW,CAAC,EAChD,GACF,EACAP,EAAC,OAAI,UAAU,mEACZ,SAAAY,EACH,GACF,CAEJ,IC5DA,OAAS,WAAA9F,OAAe,QACxB,OAAS,UAAAkG,OAAc,QACvB,OAAS,aAAAH,OAAiB,gCAF1B,IAMaI,GANbC,GAAArG,EAAA,kBAGAiF,IAGamB,GAAwB,IAAM,CACzC,GAAM,CAAE,UAAAE,EAAW,iBAAAC,CAAiB,EAAIxC,EAAe,EACjD2B,EAAaM,GAAU,YAAY,EAWzC,MAAO,CACL,cAVoB/F,GAAQ,IAAM,CAClC,IAAMuG,EAA+B,CAAC,EACtC,OAAAF,EAAU,KAAK,QAASG,GAAU,CAChCD,EAAM,KAAK,GAAGC,EAAM,gBAAgB,CACtC,CAAC,EAEMN,GAAQO,GAASA,EAAK,SAAUF,CAAK,CAC9C,EAAG,CAACF,EAAU,IAAI,CAAC,EAIjB,YAAaC,GAAkB,YAC/B,WAAAb,CACF,CACF,ICvBA,OAAS,aAAAiB,OAAiB,6BAStB,cAAAxB,OAAA,oBAVJ,IAMayB,GANbC,GAAA7G,EAAA,kBAEAsF,KACAY,KACAG,KAEaO,GAAyB,IAAM,CAC1C,IAAM7B,EAAQqB,GAAsB,EAC9B,CAAE,SAAAU,CAAS,EAAIH,GAAU,EAC/B,OAAOG,EACL3B,GAACc,GAAA,CAAoB,GAAGlB,EAAO,EAE/BI,GAACE,GAAA,CAAqB,GAAGN,EAAO,CAEpC,ICdA,IAAAgC,GAAA,GAAAC,GAAAD,GAAA,yBAAA1B,GAAA,uBAAAuB,GAAA,0BAAAR,KAAA,IAAAa,GAAAjH,EAAA,kBAAA6G,KACAvB,KACAe,OCDA,OAAS,kBAAAnB,OAAsB,+BAC/B,OAAS,QAAAgC,GAAM,WAAAC,GAAS,MAAAC,EAAe,aAAAT,OAAiB,6BAWpD,OASE,OAAAxB,EATF,QAAAC,OAAA,oBAbJ,IAKaiC,GAmDPC,GAxDNC,GAAAvH,EAAA,kBAKaqH,GACX9B,GACG,CACH,GAAM,CAAE,EAAAI,CAAE,EAAIT,GAAe,EACvB,CAAE,SAAA4B,CAAS,EAAIH,GAAU,EACzB,CAAE,WAAAa,CAAW,EAAIjC,EAEvB,OACEH,GAAC,OACC,UAAWgC,EACT,8BACA,0JACAN,EACI,mCACA,mCACN,EAEA,UAAA3B,EAACmC,GAAA,CACC,MAAO3B,EAAE,yBAAyB,EAClC,MAAO6B,EAAW,IAClB,UAAW,CAAE,SAAU,GAAI,EAC3B,SAAUV,EACZ,EACA3B,EAACgC,GAAA,CACC,UAAU,WACV,UAAWC,EACT,sBACAN,EAAW,eAAiB,cAC9B,EACF,EACA3B,EAACmC,GAAA,CACC,MAAO3B,EAAE,eAAe,EACxB,MAAO6B,EAAW,YAClB,SAAUV,EACZ,EACA3B,EAACgC,GAAA,CACC,UAAU,WACV,UAAWC,EACT,sBACAN,EAAW,eAAiB,cAC9B,EACF,EACA3B,EAACmC,GAAA,CACC,MAAO3B,EAAE,gCAAgC,EACzC,MAAO6B,EAAW,QAClB,SAAUV,EACZ,GACF,CAEJ,EAEMQ,GAKA/B,GAAU,CACd,GAAM,CAAE,MAAAkC,EAAO,MAAA7G,EAAO,UAAA8G,EAAW,SAAAZ,CAAS,EAAIvB,EAE9C,OACEH,GAAC,OACC,UAAWgC,EACT,qDACAN,EAAW,cAAgB,WAC7B,EAEA,UAAA3B,EAAC,OACC,UAAWiC,EACT,4CACAN,EAAW,eAAiB,eAC9B,EAEC,SAAAW,EACH,EACAtC,EAAC+B,GAAK,QAAL,CACC,UAAWE,EACT,oBACAN,EAAW,gBAAkB,aAC/B,EACA,GAAI,EACH,GAAGY,EAEH,SAAA9G,EACH,GACF,CAEJ,IC3FA,OAAS,WAAAX,OAAe,QAAxB,IAGa0H,GAHbC,GAAA5H,EAAA,kBACAiF,IAEa0C,GAA8B,IAAM,CAC/C,GAAM,CAAE,UAAArB,CAAU,EAAIvC,EAAe,EAiBrC,MAAO,CACL,WAhBiB9D,GAAQ,IAAM,CAC/B,IAAM4H,EAAMvB,EAAU,KAAK,OAAO,CAACwB,EAAKrB,IAC/BqB,EAAMrB,EAAM,IAClB,CAAC,EACEsB,EAAUzB,EAAU,KAAK,OAAO,CAACwB,EAAKrB,IACnCqB,EAAMrB,EAAM,UAClB,CAAC,EAEJ,MAAO,CACL,IAAAoB,EACA,QAAAE,EACA,YAAazB,EAAU,KAAK,MAC9B,CACF,EAAG,CAACA,EAAU,IAAI,CAAC,CAInB,CACF,IClBS,cAAAnB,OAAA,oBANT,IAIa6C,GAJbC,GAAAjI,EAAA,kBACAuH,KACAK,KAEaI,GAA+B,IAAM,CAChD,IAAMjD,EAAQ4C,GAA4B,EAC1C,OAAOxC,GAACkC,GAAA,CAA2B,GAAGtC,EAAO,CAC/C,ICPA,IAAAmD,GAAA,GAAAlB,GAAAkB,GAAA,8BAAAF,KAAA,IAAAG,GAAAnI,EAAA,kBAAAiI,OCAA,IAqDYG,GAKAC,EA1DZC,EAAAtI,EAAA,kBAqDYoI,QACVA,EAAA,GAAK,KACLA,EAAA,GAAK,KAFKA,QAAA,IAKAC,OACVA,EAAA,QAAU,UACVA,EAAA,WAAa,aAFHA,OAAA,MC1DZ,IAEaE,GAFbC,GAAAxI,EAAA,kBAEauI,GAAiE,CAC5E,KAAM,CACJ,cAAe,6CACf,uBAAwB,6CACxB,cAAe,6CACf,QACE,qEACF,UAAW,4CACb,EACA,QAAS,CACP,cAAe,6CACf,uBAAwB,6CACxB,cAAe,6CACf,QACE,qEACF,UAAW,4CACb,EACA,GAAI,CACF,cAAe,6CACf,uBAAwB,6CACxB,cAAe,6CACf,QACE,qEACF,UAAW,4CACb,EACA,IAAK,CACH,cAAe,6CACf,uBAAwB,6CACxB,cAAe,6CACf,QACE,qEACF,UAAW,4CACb,CACF,ICnCA,IAEaE,GAFbC,GAAA1I,EAAA,kBAAAsI,IAEaG,GAA0B,CACrCE,EACAC,IAEID,eAAkCC,SAC7B,EAELD,kBAAqCC,SAChC,EAELD,eAAkCC,SAC7B,EAELD,kBAAqCC,SAChC,EAEF,IClBT,OAAS,WAAA3I,OAAe,QACxB,OAAS,mBAAA4I,OAAuB,gCAChC,OAAS,cAAAC,OAAkB,gCAF3B,IAUaC,EAVbC,GAAAhJ,EAAA,kBAUa+I,EAA4BxD,GAAsC,CAC7E,GAAM,CAAE,KAAAoD,EAAM,QAAA3D,CAAQ,EAAIO,EACpB,CAAE,KAAM0D,EAAkB,OAAQC,CAAuB,EAC7DL,GACE,2CAA2CF,CAAI,aAAa3D,CAAO,UACnE,CACE,UAAYpD,GACHA,GAAU,MAAQkH,GAE3B,kBAAmB,EACrB,CACF,EAMF,MAAO,CACL,gBALsB7I,GAAQ,IACvBgJ,IAAmB,CAAC,EAC1B,CAACA,CAAgB,CAAC,EAInB,QAASC,CACX,CACF,IC/BA,OAAS,WAAAjJ,OAAe,QACxB,OAAS,cAAAkJ,GAAY,aAAAjJ,GAAW,YAAAkJ,OAAgB,gCAChD,OAAS,eAAAC,OAAmB,gCAC5B,OAAS,oBAAAC,MAAwB,gCACjC,OAAS,SAAAC,MAAa,6BACtB,OAAS,WAAAC,OAAe,gCALxB,IAgBaC,GAhBbC,GAAA1J,EAAA,kBAMAwI,KACAF,IACAI,KACAM,KAOaS,GAAsBlE,GAA2B,CAC5D,GAAM,CAAE,QAAAoE,EAAS,MAAA5E,CAAM,EAAIoE,GAAW,EAChC/I,EAAMF,GAAU,EAChB,CAAE,MAAA0J,CAAM,EAAIR,GAAS,EACrBS,EAAoB5J,GAAQ,IACzBsI,GACLnI,CACF,EAAE,cACD,CAACA,CAAG,CAAC,EACF,CAAC0J,CAAkB,EAAIT,GAAY,0BAA0B,EAC7D,CAAE,QAASU,CAAwB,EAAIhB,EAAyB,CACpE,KAAMxD,EAAM,KACZ,QAASA,EAAM,OACjB,CAAC,EAEKyE,EAAoB/J,GAAQ,IACzB8E,GAAO,YAAcA,GAAO,cAClC,CAACA,GAAO,UAAWA,GAAO,aAAa,CAAC,EAqG3C,MAAO,CACL,gBApGsB,MAAO,CAC7B,OAAAkF,EACA,QAAAjF,CACF,IAGM,CACJ,GAAID,EAAM,YAAcA,EAAM,cAAe,CAC3CwE,EAAM,MACJ,8DACF,EACA,MACF,CAEA,GAAIhE,EAAM,kBACJ,IAAIiE,GAAQS,CAAM,EAAE,GAAG,EAAE,EAAG,CAC9BV,EAAM,MAAM,kDAAkD,EAC9D,MACF,CAIF,IAAMW,EAAgB,CACpB,YAFkBzB,GAAwBlD,EAAM,SAAiB,EAGjE,OAAQ,IAAIiE,GAAQ,OAAOS,CAAM,CAAC,EAAE,IAAI,IAAM,CAAC,EAAE,SAAS,EAC1D,QAAAjF,EACA,MAAO,OACP,OAAQ,CACN,KAAM,UACN,QAAS,IACT,QAASD,EAAM,eAAe,QAC9B,kBAAA8E,CACF,CACF,EAEM,CAAE,QAAApI,EAAS,WAAA0I,CAAW,EAC1B,MAAMR,EAAQ,mBAAmBO,CAAa,EAEhD,GAAI,CACF,IAAME,EAAM,MAAMN,EAAmB,CACnC,QAAS,CACP,GAAGrI,EACH,QAASsD,EAAM,eAAe,OAChC,EACA,UAAWoF,EACX,YAAapF,EAAM,QACnB,kBAAA8E,CACF,CAAC,EAED,GAAI,CAACO,EAAI,QAAS,CAEZ7E,EAAM,iBACRqE,EAAMN,EAAiB,mBAAoB,CACzC,IAAKc,EAAI,OACX,CAAC,EAEDR,EAAMN,EAAiB,oBAAqB,CAC1C,IAAKc,EAAI,OACX,CAAC,EAEHb,EAAM,MAAMa,EAAI,OAAO,EACvB,MACF,CAEA,MAAML,EAAwB,EAG1BxE,EAAM,iBACRqE,EAAMN,EAAiB,oBAAqB,CAC1C,SAAUW,EACV,QAAAjF,CACF,CAAC,EAED4E,EAAMN,EAAiB,qBAAsB,CAC3C,SAAUW,EACV,QAAAjF,CACF,CAAC,EAGHuE,EAAM,QAAQ,GAAGhE,EAAM,IAAI,aAAa,CAC1C,OAAS/B,EAAgB,CACvB,IAAMN,EACJM,aAAiB,MAAQA,EAAM,QAAU,OAAOA,CAAK,EAGnD+B,EAAM,iBACRqE,EAAMN,EAAiB,mBAAoB,CACzC,IAAKpG,CACP,CAAC,EAED0G,EAAMN,EAAiB,oBAAqB,CAC1C,IAAKpG,CACP,CAAC,EAEHqG,EAAM,MAAMrG,CAAY,CAE1B,CACF,EAIE,kBAAA8G,CACF,CACF,IC1IA,OAAS,WAAA/J,EAAS,YAAAoK,OAAgB,QAClC,OACE,gBAAAC,GACA,iBAAAC,GACA,oBAAAC,OACK,gCACP,OAAS,kBAAAtF,OAAsB,+BAC/B,OAAS,WAAAsE,OAAe,gCAPxB,IAgBaiB,GAhBbC,GAAA1K,EAAA,kBAQA4E,IACA0D,IACAoB,KAMae,GAA6BlF,GAAmC,CAC3E,GAAM,CAAE,QAAAP,CAAQ,EAAIO,EACd,CAACoF,EAAUC,CAAW,EAAIP,GAAiB,EAAE,EAC7C,CAAE,UAAA/D,CAAU,EAAIvC,EAAe,EAC/B,CAAE,gBAAA8G,EAAiB,kBAAAb,CAAkB,EAAIP,GAAmB,CAChE,eACA,QAAAzE,CACF,CAAC,EACK,CAAE,QAAA8F,CAAQ,EAAIP,GAAc,EAC5B,CAAE,EAAA5E,CAAE,EAAIT,GAAe,EAEvB6F,EAAmBzE,EAAU,KAAK,CAAC,GAAG,oBAAsB,EAE5D0E,EAAsBR,GAAiB,MAAM,EAC7CS,EAAmBhL,EAAQ,IACxB6K,GAAS,KAAMI,GAAMA,EAAE,QAAU,MAAM,GAAG,SAAW,EAC3D,CAACJ,CAAO,CAAC,EACNK,EAAclL,EAAQ,IACnB,KAAK,IAAI+K,EAAqBC,CAAgB,EACpD,CAACD,EAAqBC,CAAgB,CAAC,EAEpCG,EAAanL,EAAQ,IACXqG,EAAU,KAAK,KAAM+E,GAAMA,EAAE,WAAarG,CAAO,GACjD,qBACb,CAACsB,EAAU,KAAMtB,CAAO,CAAC,EAEtBsG,EAASrL,EAAQ,IACjB,CAACmL,GAAc,CAACT,EACX,IAEF,IAAInB,GAAQmB,CAAQ,EAAE,IAAIS,CAAU,EAAE,SAAS,EACrD,CAACT,EAAUS,CAAU,CAAC,EAEnBG,EAAgB,SAAY,CAC5B,CAACD,GAAUA,IAAW,MAG1B,MAAMT,EAAgB,CACpB,OAAQF,EACR,QAAA3F,CACF,CAAC,EACD4F,EAAY,EAAE,EAChB,EAEMY,EAAQlB,GAAa,MAAM,EAE3BmB,EAAcxL,EAAQ,KACnB,CACL,GAAGuL,EACH,aAAcA,GAAO,MACrB,OAAQA,GAAO,KACjB,GACC,CAACA,CAAK,CAAC,EAEJE,EAAoB9K,GAAkB,CAC1C,GAAIA,GAAS,IAAI4I,GAAQ5I,CAAK,EAAE,GAAGuK,CAAW,EAAG,CAC/CP,EAAYO,EAAY,SAAS,CAAC,EAClC,MACF,CACAP,EAAYhK,CAAK,CACnB,EAEM+K,EAAkB1L,EAAQ,IAE5B,CAAC0K,GACDA,IAAa,KACbX,GACC,CAAC,CAACW,GAAY,IAAInB,GAAQmB,CAAQ,EAAE,GAAGI,CAAgB,EAEzD,CAACJ,EAAUX,CAAiB,CAAC,EAE1B4B,EAAY3L,EAAQ,IACpB0K,GAAY,IAAInB,GAAQmB,CAAQ,EAAE,GAAGI,CAAgB,EAChD,CACL,YAAapF,EAAE,oCAAqC,CAClD,OAAQoF,CACV,CAAC,EACD,OAAQ,OACV,EAEK,CACL,YAAa,GACb,OAAQ,EACV,EACC,CAACJ,EAAUhF,EAAGqF,EAAqBC,CAAgB,CAAC,EAEvD,MAAO,CACL,SAAAN,EACA,iBAAAe,EACA,YAAAD,EACA,YAAAN,EACA,WAAAC,EACA,OAAAE,EACA,cAAAC,EACA,QAAAvG,EACA,gBAAA2G,EACA,kBAAA3B,EACA,UAAA4B,CACF,CACF,ICnHA,IAGaC,GAHbC,GAAA9L,EAAA,kBAAAsI,IACAU,KAEa6C,GAAyB,CAAC,CAAE,QAAA7G,CAAQ,IAA2B,CAC1E,GAAM,CAAE,gBAAA+G,CAAgB,EAAIhD,EAAyB,CACnD,eACA,QAAA/D,CACF,CAAC,EACD,MAAO,CACL,gBAAA+G,CACF,CACF,ICXA,IAAaC,GAAbC,GAAAjM,EAAA,kBAAagM,GAA2BrK,GAClCA,IAAW,YACN,UAELA,IAAW,YAAcA,IAAW,SAC/B,SAEF,YCNT,OAAS,kBAAAuD,OAAsB,+BAC/B,OAAS,MAAAkC,GAAI,QAAAF,GAAM,aAAAgF,OAAiB,6BAkB9B,cAAA/G,EAIE,QAAAC,OAJF,oBApBN,IAUa+G,GAVbC,GAAApM,EAAA,kBAIAiM,KAMaE,GAA6C5G,GAAU,CAClE,GAAM,CAAE,gBAAAwG,CAAgB,EAAIxG,EACtB,CAAE,EAAAI,CAAE,EAAIT,GAAe,EAE7B,OAAK6G,EAKH3G,GAAC,OAAI,UAAU,2CACb,UAAAD,EAAC,OAAI,UAAU,wDACZ,SAAAQ,EAAE,8BAA8B,EACnC,EACAR,EAAC,OAAI,UAAU,yEACb,SAAAC,GAAC,OAAI,UAAU,4BACb,UAAAD,EAAC,OACC,UAAWiC,GACT,uCACA2E,EAAgB,SAAW,aAAe,iBAC1CA,EAAgB,SAAW,YAAc,gBACzCA,EAAgB,SAAW,UAAY,iBACtCA,EAAgB,SAAW,WAC1BA,EAAgB,SAAW,QAC3B,gBACJ,EACF,EACA5G,EAAC+B,GAAA,CACC,MAAO8E,GAAwBD,EAAgB,MAAM,EACrD,UAAU,8BAET,SAAAA,EAAgB,OAAO,MAAM,EAAG,CAAC,EAAE,YAAY,EAC9CA,EAAgB,OAAO,MAAM,CAAC,EAClC,EACA5G,EAAC+G,GAAA,CAAU,KAAK,OAAO,UAAU,kCAAkC,EACnE/G,EAAC+B,GAAK,QAAL,CAAa,UAAU,0DACrB,SAAA6E,EAAgB,cACnB,GACF,EACF,GACF,EAlCO,IAoCX,ICxCS,cAAA5G,OAAA,oBAXT,IAQakH,GARbC,GAAAtM,EAAA,kBACA8L,KACAM,KAMaC,GAAqD9G,GAAU,CAC1E,GAAM,CAAE,QAAAP,CAAQ,EAAIO,EACdR,EAAQ8G,GAAuB,CAAE,QAAA7G,CAAQ,CAAC,EAChD,OAAOG,GAACgH,GAAA,CAAiB,GAAGpH,EAAO,CACrC,ICXA,OAAS,kBAAAG,OAAsB,+BAC/B,OAAS,OAAAqH,GAAK,QAAArF,GAAM,UAAAsF,OAAc,6BAClC,OACE,gBAAAC,GACA,iBAAAC,GACA,qBAAAC,OACK,sCAqBD,cAAAxH,EAiBA,QAAAC,OAjBA,oBA5BN,IAWawH,GAXbC,GAAA7M,EAAA,kBAQAsM,KAGaM,GAAgDrH,GAAU,CACrE,GAAM,CACJ,SAAAoF,EACA,iBAAAe,EACA,YAAAD,EACA,YAAAN,EACA,OAAAG,EACA,cAAAC,EACA,QAAAvG,EACA,gBAAA2G,EACA,kBAAA3B,EACA,UAAA4B,CACF,EAAIrG,EAEE,CAAE,EAAAI,CAAE,EAAIT,GAAe,EAC7B,OACEE,GAAC,OACC,UAAAD,EAACsH,GAAA,EAAa,EACdtH,EAACoH,GAAA,CAAI,GAAI,EAAG,GAAI,EACd,SAAApH,EAACuH,GAAA,CACC,MAAO/B,EACP,cAAee,EACf,MAAO,CAAE,GAAGD,EAAa,UAAW,CAAE,EACtC,OAAO,iDACP,YAAaG,EAAU,YACvB,OAAQA,EAAU,OACpB,EACF,EACAzG,EAACwH,GAAA,CACC,YAAaxB,GAAa,SAAS,GAAK,IACxC,QAAS,IAAM,CACbO,EAAiBP,GAAa,SAAS,GAAK,GAAG,CACjD,EACF,EACA/F,GAACmH,GAAA,CACC,GAAI,EACJ,GAAI,EACJ,UAAU,wGAEV,UAAApH,EAAC,OAAK,SAAAQ,EAAE,0BAA0B,EAAE,EACpCR,EAAC+B,GAAK,QAAL,CACC,GAAI,EACJ,QAAS,GACT,OACE/B,EAAC,QAAK,UAAU,qCACb,SAAAQ,EAAE,uBAAuB,EAC5B,EAGD,SAAA2F,EACH,GACF,EACAlG,GAACmH,GAAA,CACC,GAAI,EACJ,UAAU,wGAEV,UAAApH,EAAC,OAAK,SAAAQ,EAAE,+BAA+B,EAAE,EACzCR,EAAC+B,GAAK,QAAL,CACC,OACE/B,EAAC,QAAK,UAAU,qCAAqC,eAAG,EAE3D,cAED,GACF,EACC6E,GACC7E,EAAC,OAAI,UAAU,2BACb,SAAAA,EAAC+B,GAAA,CAAK,MAAM,UAAU,UAAU,gCAC7B,SAAAvB,EAAE,sCAAsC,EAC3C,EACF,EAEFR,EAACqH,GAAA,CACC,UAAS,GACT,MAAM,UACN,SAAUb,EACV,UAAU,WACV,QAASJ,EAER,SAAA5F,EAAE,gBAAgB,EACrB,EACAR,EAACkH,GAAA,CAAoB,QAASrH,EAAS,GACzC,CAEJ,ICrFS,cAAAG,OAAA,oBAVT,IAOa2H,GAPbC,GAAA/M,EAAA,kBACA0K,KAIAmC,KAEaC,GAAmDvH,GAAU,CACxE,GAAM,CAAE,QAAAP,CAAQ,EAAIO,EACdR,EAAQ0F,GAA0B,CAAE,QAAAzF,CAAQ,CAAC,EACnD,OAAOG,GAACyH,GAAA,CAAkB,GAAG7H,EAAO,CACtC,ICXA,IAAAiI,GAAAhN,EAAA,kBAAA+M,OCAA,OAAS,WAAA9M,EAAS,YAAAoK,OAAgB,QAClC,OAAS,kBAAAnF,OAAsB,+BAC/B,OAAS,WAAAsE,OAAe,gCAFxB,IAeayD,GAfbC,GAAAlN,EAAA,kBAGAiF,IAKAqD,IACAoB,KAMauD,GACX1H,GACG,CACH,GAAM,CAAE,QAAAP,CAAQ,EAAIO,EACd,CAACoF,EAAUC,CAAW,EAAIP,GAAiB,EAAE,EAC7C,CAAE,gBAAAQ,EAAiB,kBAAAb,CAAkB,EAAIP,GAAmB,CAChE,kBACA,QAAAzE,CACF,CAAC,EACKmI,EAAc5I,EAAmBS,CAAO,EACxC,CAAE,UAAAsB,CAAU,EAAIvC,EAAe,EAC/B,CAAE,EAAA4B,CAAE,EAAIT,GAAe,EAEvBkG,EAAanL,EAAQ,IACXqG,EAAU,KAAK,KAAM+E,GAAMA,EAAE,WAAarG,CAAO,GACjD,sBAAwB,EACrC,CAACsB,EAAU,KAAMtB,CAAO,CAAC,EAEtBmG,EAAcgC,IAAc,CAAC,GAAG,uBAAyB,EAEzDC,EAAkBnN,EAAQ,IAC1B,CAAC0K,GAAY,CAACS,EACT,IAEF,IAAI5B,GAAQmB,CAAQ,EAAE,IAAIS,CAAU,EAAE,SAAS,EACrD,CAACT,EAAUS,CAAU,CAAC,EAEnBiC,EAAiB,SAAY,CACjC,MAAMxC,EAAgB,CACpB,OAAQF,EACR,QAAA3F,CACF,CAAC,CACH,EAEM0G,EAAoB9K,GAAkB,CACtCA,GAAS,IAAI4I,GAAQ5I,CAAK,EAAE,GAAGuK,CAAW,EAC5CP,EAAYO,EAAY,SAAS,CAAC,EAElCP,EAAYhK,CAAK,CAErB,EAEM0M,EAAcrN,EAAQ,IAExB,CAAC0K,GACD,CAACrE,EAAU,KAAK,CAAC,GAAG,sBACpB,CAACA,EAAU,KAAK,CAAC,GAAG,uBAGRqE,IAAaQ,EAAY,SAAS,EAGvC,GAGS,IAAI3B,GAAQmB,CAAQ,EAAE,IACtCrE,EAAU,KAAK,CAAC,GAAG,oBACrB,EACiB,GAAGA,EAAU,KAAK,CAAC,GAAG,qBAAqB,EAC3D,CAACqE,EAAUrE,EAAW6E,CAAW,CAAC,EAE/BoC,EAAmBtN,EAAQ,IAE7B,CAAC0K,GACDA,IAAa,KACbX,GACC,CAAC,CAACW,GAAY2C,EAEhB,CAAC3C,EAAUX,CAAiB,CAAC,EAE1B4B,EAAY3L,EAAQ,IACpB0K,GAAY2C,EACP,CACL,YAAa3H,EAAE,uCAAwC,CACrD,OAAQW,EAAU,KAAK,CAAC,GAAG,qBAC7B,CAAC,EACD,OAAQ,OACV,EAEK,CACL,YAAa,GACb,OAAQ,EACV,EACC,CAACqE,EAAUhF,CAAC,CAAC,EAEhB,MAAO,CACL,SAAAgF,EACA,iBAAAe,EACA,YAAAP,EACA,eAAAkC,EACA,QAAArI,EACA,WAAAoG,EACA,gBAAAgC,EACA,iBAAAG,EACA,kBAAAvD,EACA,UAAA4B,CACF,CACF,IChHA,IAGa4B,GAHbC,GAAAzN,EAAA,kBAAAsI,IACAU,KAEawE,GAA0B,CAAC,CAAE,QAAAxI,CAAQ,IAA2B,CAC3E,GAAM,CAAE,gBAAA+G,CAAgB,EAAIhD,EAAyB,CACnD,kBACA,QAAA/D,CACF,CAAC,EACD,MAAO,CACL,gBAAA+G,CACF,CACF,ICVA,OAAS,kBAAA7G,OAAsB,+BAC/B,OAAS,QAAAgC,GAAM,MAAAE,OAAU,6BAGhB,OA6BL,YAAAsG,GA7BK,OAAAvI,EA8BH,QAAAC,MA9BG,oBALT,IAIMuI,GAIAC,GAIAC,GAmBAC,GA4BOC,GA3DbC,GAAAhO,EAAA,kBAIM2N,GAAa,IACVxI,EAAC,OAAI,UAAU,kDAAkD,EAGpEyI,GAAc,IACXzI,EAAC,OAAI,UAAU,yCAAyC,EAG3D0I,GAAc,CAAC,CACnB,SAAAI,EACA,UAAAC,CACF,IAKI/I,EAAC,OACC,UAAWiC,GACT,oEACA8G,CACF,EAEC,SAAAD,EACH,EAIEH,GAAsB,IAAM,CAChC,GAAM,CAAE,CAAE,EAAI5I,GAAe,EAC7B,OACEE,EAAAsI,GAAA,CACE,UAAAtI,EAAC,OAAI,UAAU,4BACb,UAAAD,EAACwI,GAAA,EAAW,EACZxI,EAAC,OAAI,UAAU,aACb,SAAAA,EAACyI,GAAA,EAAY,EACf,EACAzI,EAACwI,GAAA,EAAW,EACZxI,EAAC,OAAI,UAAU,aACb,SAAAA,EAACyI,GAAA,EAAY,EACf,EACAzI,EAACwI,GAAA,EAAW,GACd,EACAvI,EAAC,OAAI,UAAU,wCACb,UAAAD,EAAC0I,GAAA,CAAa,WAAE,kCAAkC,EAAE,EACpD1I,EAAC0I,GAAA,CAAY,UAAU,kBACpB,WAAE,sCAAsC,EAC3C,EACA1I,EAAC0I,GAAA,CAAY,UAAU,iBACpB,WAAE,qCAAqC,EAC1C,GACF,GACF,CAEJ,EAEaE,GAA4B,IAAM,CAC7C,GAAM,CAAE,CAAE,EAAI7I,GAAe,EAC7B,OACEE,EAAC,OAAI,UAAU,4FACb,UAAAA,EAAC,OAAI,UAAU,wGACb,UAAAD,EAAC,OAAK,WAAE,yCAAyC,EAAE,EACnDA,EAAC+B,GAAA,CAAK,MAAM,UAAW,WAAE,8BAA8B,EAAE,GAC3D,EACA/B,EAAC2I,GAAA,EAAgB,GACnB,CAEJ,ICrEA,OAAS,kBAAA5I,OAAsB,+BAC/B,OAAS,MAAAkC,GAAI,QAAAF,GAAM,aAAAgF,OAAiB,6BAazB,cAAA/G,EASH,QAAAC,OATG,oBAfX,IAWa+I,GAXbC,GAAApO,EAAA,kBAIAiM,KACA+B,KAMaG,GAA+C5I,GAAU,CACpE,GAAM,CAAE,gBAAAwG,CAAgB,EAAIxG,EACtB,CAAE,EAAAI,CAAE,EAAIT,GAAe,EAC7B,OAAK6G,EAKH3G,GAAC,OAAI,UAAU,2CACb,UAAAD,EAAC,OAAI,UAAU,wDACZ,SAAAQ,EAAE,gCAAgC,EACrC,EACAR,EAAC,OAAI,UAAU,yEACb,SAAAC,GAAC,OAAI,UAAU,4BACb,UAAAD,EAAC,OACC,UAAWiC,GACT,uCACA2E,EAAgB,SAAW,aAAe,iBAC1CA,EAAgB,SAAW,YAAc,gBACzCA,EAAgB,SAAW,UAAY,iBACtCA,EAAgB,SAAW,WAC1BA,EAAgB,SAAW,QAC3B,gBACJ,EACF,EACA5G,EAAC+B,GAAA,CACC,MAAO8E,GAAwBD,EAAgB,MAAM,EACrD,UAAU,8BAET,SAAAA,EAAgB,OAAO,MAAM,EAAG,CAAC,EAAE,YAAY,EAC9CA,EAAgB,OAAO,MAAM,CAAC,EAClC,EACA5G,EAAC+G,GAAA,CAAU,KAAK,OAAO,UAAU,kCAAkC,EACnE/G,EAAC+B,GAAK,QAAL,CAAa,UAAU,0DACrB,SAAA6E,EAAgB,eAAiB,IACpC,GACF,EACF,GACF,EAlCO5G,EAAC4I,GAAA,EAAsB,CAoClC,ICxCS,cAAA5I,OAAA,oBAXT,IAQakJ,GARbC,GAAAtO,EAAA,kBACAyN,KACAW,KAMaC,GAAuD9I,GAAU,CAC5E,GAAM,CAAE,QAAAP,CAAQ,EAAIO,EACdR,EAAQyI,GAAwB,CAAE,QAAAxI,CAAQ,CAAC,EACjD,OAAOG,GAACgJ,GAAA,CAAkB,GAAGpJ,EAAO,CACtC,ICZA,IAAAwJ,GAAAvO,EAAA,kBAAAsO,OCCA,OAAS,kBAAApJ,OAAsB,+BAC/B,OACE,OAAAqH,GACA,QAAArF,GACA,UAAAsF,GACA,SAAAgC,GACA,gBAAAC,GACA,eAAAC,GACA,YAAAC,GACA,MAAAvH,GACA,aAAAT,OACK,6BACP,OACE,gBAAA8F,GACA,iBAAAC,GACA,qBAAAC,OACK,sCA8BH,OACE,OAAAxH,EADF,QAAAC,OAAA,oBA/CJ,IAsBawJ,GA0FPC,GAiCAC,GAuCAC,GAyBAC,GAjNNC,GAAAjP,EAAA,kBAkBAuO,KAEAP,KAEaY,GAAkDrJ,GAAU,CACvE,GAAM,CACJ,SAAAoF,EACA,iBAAAe,EACA,YAAAP,EACA,eAAAkC,EACA,QAAArI,EACA,WAAAoG,EACA,gBAAAgC,EACA,iBAAAG,EACA,kBAAAvD,EACA,UAAA4B,CACF,EAAIrG,EACE,CAAE,SAAAuB,CAAS,EAAIH,GAAU,EAEzBuI,EAAwB,IAAM,CAClCV,GAAM,KAAK1H,EAAWkI,GAAuBD,GAAuB,CAClE,SAAApE,EACA,gBAAAyC,EACA,eAAAC,CACF,CAAC,CACH,EAEM,CAAE,EAAA1H,CAAE,EAAIT,GAAe,EAC7B,OACEE,GAAC,OACC,UAAAD,EAACsH,GAAA,EAAa,EACdtH,EAACoH,GAAA,CAAI,GAAI,EAAG,GAAI,EACd,SAAApH,EAACuH,GAAA,CACC,MAAO/B,EACP,cAAee,EACf,MAAO,CAAE,aAAc,SAAU,UAAW,CAAE,EAC9C,OAAO,kDACP,YAAaE,EAAU,YACvB,OAAQA,EAAU,OACpB,EACF,EACAzG,EAACwH,GAAA,CACC,YAAaxB,EACb,QAAS,IAAM,CACbO,EAAiBP,EAAY,SAAS,CAAC,CACzC,EACF,EAEAhG,EAAC0J,GAAA,CACC,MAAOlJ,EAAE,kCAAkC,EAC3C,SAAS,IACT,MAAOyF,GAAc,IACrB,UAAU,oBACZ,EACAjG,EAAC0J,GAAA,CACC,MAAOlJ,EAAE,oCAAoC,EAC7C,MAAOyH,EACP,OACEjI,EAAC,QAAK,UAAU,qCAAqC,gBAAI,EAE3D,UAAU,WACZ,EAEC6E,GACC7E,EAAC,OAAI,UAAU,2BACb,SAAAA,EAAC+B,GAAA,CAAK,MAAM,UAAU,UAAU,gCAC7B,SAAAvB,EAAE,sCAAsC,EAC3C,EACF,EAGFR,EAACqH,GAAA,CACC,UAAS,GACT,MAAM,UACN,SAAUe,EACV,UAAU,WACV,QAAS2B,EAER,SAAAvJ,EAAE,iBAAiB,EACtB,EACAR,EAAC,OAAI,UAAU,WACb,SAAAA,EAACkJ,GAAA,CAAqB,QAASrJ,EAAS,EAC1C,GACF,CAEJ,EASM6J,GAAiB,CAAC,CACtB,MAAAM,EACA,MAAAvO,EACA,OAAAwO,EACA,SAAAC,EACA,UAAAnB,CACF,IAEI9I,GAAC,OACC,UAAWgC,GACT,wGACA8G,CACF,EAEA,UAAA/I,EAAC,OAAK,SAAAgK,EAAM,EACZhK,EAAC+B,GAAK,QAAL,CACC,SAAUmI,EACV,UAAU,yBACV,OAAQD,EAEP,SAAAxO,EACH,GACF,EAWEkO,GAA0BvJ,GAAuC,CACrE,GAAM,CAAE,SAAAoF,EAAU,gBAAAyC,EAAiB,eAAAC,EAAgB,KAAAiC,CAAK,EAAI/J,EACtD,CAAE,EAAAI,CAAE,EAAIT,GAAe,EAC7B,OACEE,GAAC,OAAI,UAAU,wBACb,UAAAD,EAAC0J,GAAA,CACC,MAAOlJ,EAAE,yCAAyC,EAClD,MAAOgF,EACP,OACExF,EAAC,QAAK,UAAU,qCAAqC,kBAAM,EAE/D,EACAA,EAAC0J,GAAA,CACC,MAAOlJ,EAAE,2CAA2C,EACpD,MAAOyH,EACP,OACEjI,EAAC,QAAK,UAAU,qCAAqC,gBAAI,EAE3D,UAAU,WACZ,EACAA,EAAC+B,GAAA,CAAK,MAAM,UAAU,UAAU,yCAC7B,SAAAvB,EAAE,6BAA6B,EAClC,EACAR,EAAC4I,GAAA,EAAsB,EACvB5I,EAACqH,GAAA,CACC,UAAS,GACT,MAAM,UACN,UAAU,WACV,QAAS,SAAY,CACnB,MAAMa,EAAe,EACrBiC,IAAO,CACT,EAEC,SAAA3J,EAAE,2CAA2C,EAChD,GACF,CAEJ,EAEMoJ,GAAwBP,GAAM,OAClC,CAAC,CACC,SAAA7D,EACA,gBAAAyC,EACA,eAAAC,CACF,IAAmC,CACjC,GAAM,CAAE,QAAAkC,EAAS,KAAAD,EAAM,aAAAE,CAAa,EAAIb,GAAS,EAC3C,CAAE,EAAAhJ,CAAE,EAAIT,GAAe,EAC7B,OACEC,EAACsJ,GAAA,CACC,MAAO9I,EAAE,8BAA8B,EACvC,KAAM4J,EACN,aAAcC,EAEd,SAAArK,EAAC2J,GAAA,CACC,SAAUnE,EACV,gBAAiByC,EACjB,eAAgBC,EAChB,KAAMiC,EACR,EACF,CAEJ,CACF,EAEMN,GAAuBR,GAAM,OACjC,CAAC,CACC,SAAA7D,EACA,gBAAAyC,EACA,eAAAC,CACF,IAAmC,CACjC,GAAM,CAAE,QAAAkC,EAAS,KAAAD,EAAM,aAAAE,CAAa,EAAIb,GAAS,EAC3C,CAAE,EAAAhJ,CAAE,EAAIT,GAAe,EAC7B,OACEC,EAACuJ,GAAA,CACC,MAAO/I,EAAE,8BAA8B,EACvC,KAAM4J,EACN,aAAcC,EAEd,SAAArK,EAAC2J,GAAA,CACC,SAAUnE,EACV,gBAAiByC,EACjB,eAAgBC,EAChB,KAAMiC,EACR,EACF,CAEJ,CACF,IC7NS,cAAAnK,OAAA,oBAXT,IAQasK,GARbC,GAAA1P,EAAA,kBACAkN,KACA+B,KAMaQ,GAAqDlK,GAAU,CAC1E,GAAM,CAAE,QAAAP,CAAQ,EAAIO,EACdR,EAAQkI,GAA2B,CAAE,QAAAjI,CAAQ,CAAC,EACpD,OAAOG,GAACyJ,GAAA,CAAmB,GAAG7J,EAAO,CACvC,ICZA,IAAA4K,GAAA3P,EAAA,kBAAA0P,OCAA,OAAa,YAAArF,OAAgB,QAC7B,OAAS,kBAAAnF,OAAsB,+BAC/B,OACE,2BAAA0K,GACA,yBAAAC,GACA,wBAAAC,GACA,uBAAAC,GACA,YAAAC,GACA,QAAAC,OACK,6BAyBH,OAYU,OAAA9K,EAZV,QAAAC,OAAA,oBAlCJ,IAaa8K,GAEAC,GASAC,GAxBbC,GAAArQ,EAAA,kBAUAgN,KACA2C,KAEaO,GACX,sCACWC,GACX,qCAQWC,GACX7K,GACG,CACH,GAAM,CAAC+K,EAAWC,CAAY,EAAIlG,GAChC9E,EAAM,WAAa,SACrB,EACM,CAAE,QAAAP,CAAQ,EAAIO,EACd,CAAE,EAAAI,CAAE,EAAIT,GAAe,EAE7B,OACEE,GAAC6K,GAAA,CACC,MAAOK,EACP,cAAeC,EACf,QAAQ,YACR,KAAK,KACL,WAAY,CACV,SAAU,WACV,YAAa,UACf,EAEA,UAAApL,EAAC6K,GAAA,CACC,MAAOrK,EAAE,gBAAgB,EACzB,KAAMR,EAACyK,GAAA,EAAwB,EAC/B,MAAM,UAEN,SAAAzK,EAAC2H,GAAA,CAAmB,QAAS9H,EAAS,EACxC,EACAG,EAAC6K,GAAA,CACC,MAAOrK,EAAE,iBAAiB,EAC1B,KAAMR,EAAC0K,GAAA,EAAsB,EAC7B,MAAM,WAEN,SAAA1K,EAACsK,GAAA,CAAoB,QAASzK,EAAS,EACzC,GACF,CAEJ,EAEA8K,GACEI,GACAE,GACA,CACE,KAAM,KACN,WAAY,CACV,QAAS,8BACX,CACF,CACF,EAEAL,GACEI,GACAC,EACF,IC5EA,IAAaI,GAGAC,GAEAC,GALbC,GAAA3Q,EAAA,kBAAawQ,GACX,2DAEWC,GAAsB,oBAEtBC,GACX,mKCNF,OAAS,aAAAE,GAAW,WAAA3Q,MAAe,QACnC,OAAS,cAAAkJ,GAAY,iBAAAoB,GAAe,aAAArK,OAAiB,gCACrD,OAAS,kBAAAgF,OAAsB,+BAC/B,OAAS,SAAAsJ,GAAO,aAAA7H,OAAiB,6BAHjC,IAcakK,GAdbC,GAAA9Q,EAAA,kBAIAD,KACAM,KACAuE,IAEAyL,KAIAM,KAEaE,GAAsBpK,GAAqB,CACtD,GAAM,CAAE,EAAAd,CAAE,EAAIT,GAAe,EACvBiI,EAAc5I,EAAmBkC,EAAM,QAAQ,EAC/C,CAAE,iBAAAsK,CAAiB,EAAIhN,EAAe,EACtC3D,EAAMF,GAAU,EAChB,CAAE,SAAA4G,CAAS,EAAIH,GAAU,EAEzB,CAAE,MAAA5B,CAAM,EAAIoE,GAAW,EACvB6H,EAAW7Q,EAAY,EAEvB,CAAE,QAAA2K,CAAQ,EAAIP,GAAc,EAE5BU,EAAmBhL,EAAQ,IACxB6K,GAAS,KAAMI,GAAMA,EAAE,QAAU,MAAM,GAAG,SAAW,EAC3D,CAACJ,CAAO,CAAC,EAEZ8F,GAAU,IAAM,CACV,CAAC7L,EAAM,SAAW,CAACiM,GAAY,CAACvK,EAAM,UAK1CsK,EACE,CAAE,SAAUtK,EAAM,SAAU,eAAgB1B,EAAM,OAAQ,EAC1DiM,CACF,CACF,EAAG,CAACvK,EAAM,SAAU1B,EAAM,QAASiM,CAAQ,CAAC,EAE5C,IAAMC,EAA2BhR,EAAQ,IAChCgL,EACN,CAACA,CAAgB,CAAC,EAEfiG,EAASjR,EAAQ,IAAM,CAC3B,IAAMkR,EAAOhE,IAAc,CAAC,EAC5B,OAAKgE,EAME,CACL,SAAUA,EAAK,OAASA,EAAK,cAC7B,SAAUA,EAAK,aACjB,EARS,CACL,SAAU,KACV,SAAU,IACZ,CAMJ,EAAG,CAAChE,CAAW,CAAC,EAEViE,EAAiBnR,EAAQ,IACtB8E,EAAM,iBAAmB,MAC/B,CAACA,EAAM,cAAc,CAAC,EAEnBsM,EAAiBpR,EAAQ,IACtB8E,EAAM,iBAAmB,MAC/B,CAACA,EAAM,cAAc,CAAC,EAEnBuM,EAAiBrR,EAAQ,IAE3B8E,EAAM,iBAAmB,OACzBA,EAAM,iBAAmB,OACzBA,EAAM,YAAcA,EAAM,cAE3B,CAACA,EAAM,eAAgBA,EAAM,UAAWA,EAAM,aAAa,CAAC,EAEzDwM,EAA0BjB,GAAsC,CACpE9B,GAAM,KACJ1H,EACIqJ,GACAD,GACJ,CACE,UAAAI,EACA,QAAS7J,EAAM,QACjB,CACF,CACF,EAEM+K,EAAmB,IAAM,CAC7B,IAAMvQ,EAAMnB,GAAoBM,CAAuC,EACvE,OAAO,KAAK,GAAGa,CAAG,UAAW,QAAQ,CACvC,EAEA,MAAO,CACL,MAAO0E,EAAE,2BAA2B,EACpC,YAAaA,EAAE,iCAAiC,EAChD,KAAM6K,GACN,UAAW/J,EACX,OAAAyK,EACA,eAAAE,EACA,eAAAC,EACA,uBAAAE,EACA,iBAAkBN,EAClB,iBAAAO,EACA,eAAAF,CACF,CACF,IC1GA,OAAa,WAAArR,OAAe,QAC5B,OAAS,kBAAAiF,OAAsB,+BAC/B,OACE,QAAAgC,GACA,MAAAE,GACA,UAAAoF,GACA,8BAAAiF,GACA,aAAA9K,OACK,6BACP,OAAS,aAAA+K,OAAiB,uCAuBhB,cAAAvM,EAgDF,QAAAC,MAhDE,oBAhCV,IAYauM,GA6IPC,GAoCAC,GA8BAC,GA3NNC,GAAA/R,EAAA,kBAYa2R,GAAkCpM,GAAU,CACvD,GAAM,CACJ,MAAAkC,EACA,UAAAnB,EACA,OAAA4K,EACA,YAAAc,EACA,eAAAZ,EACA,eAAAC,EACA,uBAAAE,EACA,iBAAAtG,EACA,iBAAAuG,CACF,EAAIjM,EAEE,CAAE,EAAAI,CAAE,EAAIT,GAAe,EACvB,CAAE,SAAA4B,CAAS,EAAIH,GAAU,EAEzBf,EAAoB3F,GAAQ,IAE9BkF,EAAC,OAAI,UAAU,4BACZ,SAAAmB,EAAU,iBAAiB,IAAI,CAACT,EAAOC,IACtCX,EAAC,OAEC,IAAK,mDAAmDU,EAAM,QAAQ,OACtE,IAAKA,EAAM,SACX,UAAWuB,GACT,eACAN,EAAW,kBAAoB,YACjC,EACA,MAAO,CACL,WAAYhB,EAAQ,EAAI,OAAS,IACjC,OAAQQ,EAAU,iBAAiB,OAASR,CAC9C,GAVKD,EAAM,QAWb,CACD,EACH,EAED,CAACS,EAAU,gBAAgB,CAAC,EAG/B,OACElB,EAAC,OAAI,UAAU,mIACb,UAAAD,EAAC,OACC,MAAO,CACL,SAAU,WACV,IAAK,EACL,MAAO,EACP,MAAO,OACP,OAAQ,QACR,eAAgB,YAChB,OAAQ,EACR,WACE,gGACJ,EACD,EACDA,EAAC,OACC,IAAI,oCACJ,IAAI,GACJ,MAAO,CACL,SAAU,WACV,IAAK,EACL,MAAO,EACP,MAAO,OACP,OAAQ,QACR,OAAQ,CACV,EACF,EAEAC,EAAC,OAAI,UAAU,sFACb,UAAAA,EAAC,OAAI,UAAU,sCACb,UAAAD,EAAC,OACC,IAAI,2DACJ,IAAI,GACJ,UAAU,aACZ,EACAA,EAAC,OAAI,UAAU,mDACZ,SAAAsC,EACH,EACC7B,EACDT,EAAC,OACC,UAAU,0CACV,QAASqM,EAET,SAAArM,EAACsM,GAAA,CACC,MAAM,QACN,MAAO,GACP,OAAQ,GACR,QAAQ,YACV,EACF,GACF,EAEAtM,EAAC,OAAI,UAAU,4EACZ,SAAA6M,EACH,EAEA5M,EAAC,OAAI,UAAU,sCACb,UAAAD,EAACyM,GAAA,CACC,MAAOjM,EAAE,iBAAiB,EAC1B,MAAOW,EAAU,IACjB,UAAW,CACT,SAAU,IACV,GAAI,EACJ,KAAM,SACR,EACF,EACAnB,EAACyM,GAAA,CACC,MAAOjM,EAAE,iBAAiB,EAC1B,OAAQW,EAAU,SAAS,EAAI,KAAK,QAAQ,CAAC,EAAI,IACjD,UAAW,CACT,MAAO,QACP,KAAM,UACR,EACF,GACF,EAEAlB,EAAC,OAAI,UAAU,uGACb,UAAAD,EAAC0M,GAAA,CACC,MAAOlM,EAAE,wBAAwB,EACjC,MAAOuL,EAAO,SAChB,EACA/L,EAAC0M,GAAA,CACC,MAAOlM,EAAE,wBAAwB,EACjC,MAAOuL,EAAO,SAChB,GACF,EAEA/L,EAAC0M,GAAA,CACC,MAAOlM,EAAE,4BAA4B,EACrC,MAAOsF,EACT,EAEA9F,EAAC2M,GAAA,CACC,eAAgBV,EAChB,eAAgBC,EAChB,uBAAwBE,EAC1B,GACF,GACF,CAEJ,EAEMK,GAIArM,GAAU,CACd,GAAM,CAAE,MAAA4J,EAAO,MAAAvO,EAAO,UAAA8G,CAAU,EAAInC,EAEpC,OACEH,EAAC,OACC,UAAWgC,GACT,yFACA,oEACF,EAEA,UAAAjC,EAAC,OAAI,UAAU,4EACZ,SAAAgK,EACH,EACCzH,EAAU,OAAS,WAClBvC,EAAC+B,GAAK,SAAL,CACC,UAAU,kCACT,GAAGQ,EAEH,SAAA9G,EACH,EAEAuE,EAAC+B,GAAK,QAAL,CACC,UAAU,kCACT,GAAGQ,EAEH,SAAA9G,EACH,GAEJ,CAEJ,EAEMiR,GAIAtM,GAAU,CACd,GAAM,CAAE,MAAA4J,EAAO,MAAAvO,EAAO,UAAA8G,CAAU,EAAInC,EAEpC,OACEH,EAAC,OAAI,UAAU,wFACb,UAAAD,EAAC,OAAI,UAAU,4BAA6B,SAAAgK,EAAM,EAClDhK,EAAC+B,GAAK,QAAL,CACC,UAAU,4BACT,GAAGQ,EACJ,GAAI,EACJ,OACEvC,EAAC,QAAK,UAAU,qCAAqC,gBAAI,EAG1D,SAAAvE,EACH,GACF,CAEJ,EAQMkR,GAAmDvM,GAAU,CACjE,GAAM,CAAE,eAAA6L,EAAgB,eAAAC,EAAgB,uBAAAE,CAAuB,EAAIhM,EAC7D,CAAE,EAAAI,CAAE,EAAIT,GAAe,EAE7B,OACEC,EAACuM,GAAA,CAAU,YAAa,CAAE,KAAM,KAAM,UAAW,EAAK,EACnD,SAAAN,GAAkBC,EACjBjM,EAAC,OAAI,UAAU,sCACb,UAAAD,EAACqH,GAAA,CACC,UAAU,aACV,KAAK,KACL,QAAS,IAAM+E,EAAuB,SAAS,EAE9C,SAAA5L,EAAE,gBAAgB,EACrB,EACAR,EAACqH,GAAA,CACC,UAAU,aACV,KAAK,KACL,MAAM,YACN,QAAS,IAAM+E,EAAuB,UAAU,EAE/C,SAAA5L,EAAE,iBAAiB,EACtB,GACF,EAEAR,EAACqH,GAAA,CAAO,KAAK,KAAK,MAAM,UACrB,SAAA7G,EAAE,wBAAwB,EAC7B,EAEJ,CAEJ,IC7OS,cAAAR,OAAA,oBAbT,IASa8M,GATbC,GAAAlS,EAAA,kBAEA8Q,KACAiB,KAMaE,GAA6C1M,GAAU,CAClE,GAAM,CAAE,MAAAkB,CAAM,EAAIlB,EACZR,EAAQ8L,GAAmBpK,CAAK,EAEtC,OAAOtB,GAACwM,GAAA,CAAW,GAAG5M,EAAO,CAC/B,ICdA,IAAAoN,GAAAnS,EAAA,kBAAAkS,KACApB,KACAiB,KACApB,OCFA,OAAS,kBAAAzL,OAAsB,+BAS3B,OACE,OAAAC,GADF,QAAAC,OAAA,oBAVJ,IAKagN,GALbC,GAAArS,EAAA,kBAGAmS,KAEaC,GAAiD7M,GAAU,CACtE,GAAM,CAAE,OAAA+M,CAAO,EAAI/M,EACb,CAAE,EAAAI,CAAE,EAAIT,GAAe,EAE7B,OACEE,GAAC,OAAI,UAAU,kCACb,UAAAD,GAAC,OAAI,UAAU,qDACZ,SAAAQ,EAAE,kBAAkB,EACvB,EACAR,GAAC,OAAI,UAAU,kEACZ,SAAAmN,EAAO,IAAK7L,GACXtB,GAAC8M,GAAA,CAAqC,MAAOxL,GAAvBA,EAAM,QAAwB,CACrD,EACH,GACF,CAEJ,ICXQ,cAAAtB,OAAA,oBAVR,IAIaoN,GAJbC,GAAAxS,EAAA,kBAEAmS,KAEaI,GAAgDhN,GAAU,CACrE,GAAM,CAAE,OAAA+M,CAAO,EAAI/M,EAEnB,OACEJ,GAAC,OAAI,UAAU,kCACZ,SAAAmN,EAAO,IAAK7L,GACXtB,GAAC8M,GAAA,CAAqC,MAAOxL,GAAvBA,EAAM,QAAwB,CACrD,EACH,CAEJ,ICbA,OAAS,aAAAE,OAAiB,6BAStB,cAAAxB,OAAA,oBAVJ,IAMasN,GANbC,GAAA1S,EAAA,kBAEA4E,IACAyN,KACAG,KAEaC,GAAsB,IAAM,CACvC,GAAM,CAAE,KAAA7P,CAAK,EAAIoB,GAAkB,EAC7B,CAAE,SAAA8C,CAAS,EAAIH,GAAU,EAC/B,OAAOG,EACL3B,GAACoN,GAAA,CAAgB,OAAQ3P,EAAM,EAE/BuC,GAACiN,GAAA,CAAiB,OAAQxP,EAAM,CAEpC,ICdA,IAAA+P,GAAA,GAAA3L,GAAA2L,GAAA,sBAAAP,GAAA,oBAAAK,KAAA,IAAAG,GAAA5S,EAAA,kBAAA0S,KACAL,OCDA,OAAOQ,MAAmB,QAC1B,OAAS,MAAAzL,GAAI,aAAAT,OAAiB,6BCA9BtG,KAEA4E,IAHA,OAAgC,aAAA2L,OAAiB,QAwBxC,cAAAzL,OAAA,oBAnBF,IAAM2N,GACXvN,GACG,CACH,IAAMyL,EAAW7Q,EAAY,EACvB,CAAE,eAAA4S,EAAgB,oBAAAC,CAAoB,EAAIjP,EAAe,EAE/D,OAAA6M,GAAU,IAAM,CACVrL,EAAM,QACRyN,EAAoBzN,EAAM,MAAM,CAEpC,EAAG,CAACA,EAAM,MAAM,CAAC,EAEjBqL,GAAU,IAAM,CACTI,GAGL+B,EAAe/B,CAAQ,CACzB,EAAG,CAACA,CAAQ,CAAC,EAEN7L,GAAC,OAAK,SAAAI,EAAM,SAAS,CAC9B,EDeQ,OAQI,OAAAJ,EARJ,QAAAC,OAAA,oBAnCR,IAAM6N,GAAyBJ,EAAM,KAAK,IACxC,sCAAsC,KAAMK,IACnC,CAAE,QAASA,EAAI,kBAAmB,EAC1C,CACH,EAEMC,GAA+BN,EAAM,KAAK,IAC9C,sCAA4C,KAAMK,IACzC,CAAE,QAASA,EAAI,wBAAyB,EAChD,CACH,EAEME,GAAsBP,EAAM,KAAK,IACrC,sCAAmC,KAAMK,IAChC,CAAE,QAASA,EAAI,eAAgB,EACvC,CACH,EAOaG,GAAmC9N,GAAU,CACxD,GAAM,CAAE,SAAAuB,CAAS,EAAIH,GAAU,EAC/B,OACExB,EAAC2N,GAAA,CAAgB,GAAGvN,EAClB,SAAAJ,EAAC,OACC,UAAWiC,GACT,iCACA,iBACAN,EAAW,oBAAsB,qBACjCvB,GAAO,SACT,EAEA,SAAAH,GAAC,OACC,GAAG,iBACH,UAAWgC,GACT,uDACAN,EAAW,YAAc,YAC3B,EAEA,UAAA3B,EAAC0N,EAAM,SAAN,CAAe,SAAU,KACxB,SAAA1N,EAAC8N,GAAA,EAAuB,EAC1B,EACA9N,EAAC0N,EAAM,SAAN,CAAe,SAAU,KACxB,SAAA1N,EAACgO,GAAA,EAA6B,EAChC,EACAhO,EAAC0N,EAAM,SAAN,CAAe,SAAU,KACxB,SAAA1N,EAACiO,GAAA,EAAoB,EACvB,GACF,EACF,EACF,CAEJ,EE5DA9K,ICEAzE,KACAoB,ICHA2N,KACAT,KACAlL,KACAkB,KCHAkI,KACArD,KACA2C,KCFArD,KDIAiC","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"]}
@@ -0,0 +1 @@
1
+ .oui-absolute{position:absolute}.oui-relative{position:relative}.-oui-right-3{right:-.75rem}.-oui-top-4{top:-1rem}.oui-left-0{left:0}.oui-top-0{top:0}.oui-z-20{z-index:20}.oui-z-50{z-index:50}.oui-mx-auto{margin-left:auto;margin-right:auto}.oui-my-5{margin-top:1.25rem;margin-bottom:1.25rem}.oui-mb-1{margin-bottom:.25rem}.oui-mb-4{margin-bottom:1rem}.oui-mb-5{margin-bottom:1.25rem}.oui-mb-6{margin-bottom:1.5rem}.oui-ml-1{margin-left:.25rem}.oui-ml-auto{margin-left:auto}.oui-mr-1{margin-right:.25rem}.oui-mt-1{margin-top:.25rem}.oui-mt-3{margin-top:.75rem}.oui-mt-5{margin-top:1.25rem}.oui-mt-6{margin-top:1.5rem}.oui-mt-8{margin-top:2rem}.oui-flex{display:flex}.oui-grid{display:grid}.oui-size-1{width:.25rem;height:.25rem}.oui-size-2{width:.5rem;height:.5rem}.oui-size-4{width:1rem;height:1rem}.oui-size-5{width:1.25rem;height:1.25rem}.oui-size-8{width:2rem;height:2rem}.oui-size-\[18px\]{width:18px;height:18px}.oui-h-\[124px\]{height:124px}.oui-h-\[238px\]{height:238px}.oui-h-\[388px\]{height:388px}.oui-h-\[44px\]{height:44px}.oui-h-\[64px\]{height:64px}.oui-h-px{height:1px}.oui-min-h-\[56px\]{min-height:56px}.oui-min-h-screen{min-height:100vh}.oui-w-\[187px\]{width:187px}.oui-w-\[360px\]{width:360px}.oui-w-full{width:100%}.oui-max-w-\[1200px\]{max-width:1200px}.oui-max-w-\[450px\]{max-width:450px}.oui-max-w-\[726px\]{max-width:726px}.oui-max-w-\[calc\(100\%-187px\)\]{max-width:calc(100% - 187px)}.oui-flex-1{flex:1 1 0%}.oui-cursor-pointer{cursor:pointer}.oui-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.oui-flex-col{flex-direction:column}.oui-items-center{align-items:center}.oui-justify-center{justify-content:center}.oui-justify-between{justify-content:space-between}.oui-gap-0\.5{gap:.125rem}.oui-gap-1{gap:.25rem}.oui-gap-12{gap:3rem}.oui-gap-2{gap:.5rem}.oui-gap-3{gap:.75rem}.oui-gap-4{gap:1rem}.oui-gap-6{gap:1.5rem}.oui-overflow-hidden{overflow:hidden}.oui-rounded-2xl{border-radius:var(--oui-rounded-2xl,1rem)}.oui-rounded-full{border-radius:var(--oui-rounded-full,9999px)}.oui-rounded-lg{border-radius:var(--oui-rounded-lg,.5rem)}.oui-rounded-xl{border-radius:var(--oui-rounded-xl,.75rem)}.oui-border{border-width:1px}.oui-border-solid{border-style:solid}.oui-border-line-6{border-color:rgb(var(--oui-color-line,255 255 255)/.06)}.oui-border-white\/\[0\.12\]{border-color:hsla(0,0%,100%,.12)}.oui-bg-base-10{--tw-bg-opacity:1;background-color:rgb(var(--oui-color-base-10)/var(--tw-bg-opacity,1))}.oui-bg-base-9{--tw-bg-opacity:1;background-color:rgb(var(--oui-color-base-9)/var(--tw-bg-opacity,1))}.oui-bg-danger{--tw-bg-opacity:1;background-color:rgb(var(--oui-color-danger)/var(--tw-bg-opacity,1))}.oui-bg-primary{--tw-bg-opacity:1;background-color:rgb(var(--oui-color-primary)/var(--tw-bg-opacity,1))}.oui-bg-success{--tw-bg-opacity:1;background-color:rgb(var(--oui-color-success)/var(--tw-bg-opacity,1))}.oui-bg-white\/\[0\.06\]{background-color:hsla(0,0%,100%,.06)}.oui-bg-white\/\[0\.12\]{background-color:hsla(0,0%,100%,.12)}.oui-bg-white\/\[0\.2\]{background-color:hsla(0,0%,100%,.2)}.oui-bg-white\/\[0\.54\]{background-color:hsla(0,0%,100%,.54)}.oui-bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.oui-from-\[rgba\(var\(--oui-gradient-neutral-end\)\/1\)\]{--tw-gradient-from:rgba(var(--oui-gradient-neutral-end)/1) var(--tw-gradient-from-position);--tw-gradient-to:rgba(var(--oui-gradient-neutral-end),0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.oui-to-\[rgba\(var\(--oui-gradient-neutral-start\)\/1\)\]{--tw-gradient-to:rgba(var(--oui-gradient-neutral-start)/1) var(--tw-gradient-to-position)}.oui-bg-contain{background-size:contain}.oui-bg-center{background-position:50%}.oui-bg-no-repeat{background-repeat:no-repeat}.oui-p-3{padding:.75rem}.oui-p-6{padding:1.5rem}.oui-px-0{padding-left:0;padding-right:0}.oui-px-3{padding-left:.75rem;padding-right:.75rem}.oui-px-6{padding-left:1.5rem;padding-right:1.5rem}.oui-py-12{padding-top:3rem;padding-bottom:3rem}.oui-py-2{padding-top:.5rem;padding-bottom:.5rem}.oui-py-6{padding-top:1.5rem;padding-bottom:1.5rem}.oui-pt-5{padding-top:1.25rem}.oui-text-center{text-align:center}.oui-text-right{text-align:right}.oui-text-2xs{font-size:var(--oui-font-size-2xs,.75rem);line-height:1.125rem}.oui-text-5xl{font-size:var(--oui-font-size-5xl,2.25rem);line-height:2.75rem}.oui-text-\[18px\]{font-size:18px}.oui-text-base{font-size:var(--oui-font-size-base,1rem);line-height:1.5rem}.oui-text-sm{font-size:var(--oui-font-size-sm,.875rem);line-height:1.25rem}.oui-text-xl{font-size:var(--oui-font-size-xl,1.25rem);line-height:1.75rem}.oui-text-xs{font-size:var(--oui-font-size-xs,calc(.875rem - 1px));line-height:1.25rem}.oui-font-bold{font-weight:700}.oui-font-normal{font-weight:400}.oui-font-semibold{font-weight:600}.oui-leading-\[18px\]{line-height:18px}.oui-leading-\[44px\]{line-height:44px}.oui-text-base-contrast{color:rgb(var(--oui-color-base-foreground)/.98)}.oui-text-base-contrast-36{color:rgb(var(--oui-color-base-foreground)/.36)}.oui-text-base-contrast-54{color:rgb(var(--oui-color-base-foreground)/.54)}.oui-text-base-contrast-80{color:rgb(var(--oui-color-base-foreground)/.8)}.oui-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0) scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1)) rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0) scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1)) rotate(var(--tw-exit-rotate,0))}}@media (min-width:1024px){.min-\[1024px\]\:oui-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "@kodiak-finance/orderly-vaults",
3
+ "version": "2.7.4",
4
+ "description": "",
5
+ "main": "dist/index.js",
6
+ "module": "dist/index.mjs",
7
+ "types": "dist/index.d.ts",
8
+ "keywords": [],
9
+ "files": [
10
+ "dist"
11
+ ],
12
+ "publishConfig": {
13
+ "access": "public"
14
+ },
15
+ "dependencies": {
16
+ "date-fns": "^3.6.0",
17
+ "ramda": "^0.29.0",
18
+ "zustand": "^4.5.5",
19
+ "@kodiak-finance/orderly-hooks": "2.7.4",
20
+ "@kodiak-finance/orderly-i18n": "2.7.4",
21
+ "@kodiak-finance/orderly-types": "2.7.4",
22
+ "@kodiak-finance/orderly-ui": "2.7.4",
23
+ "@kodiak-finance/orderly-utils": "2.7.4",
24
+ "@kodiak-finance/orderly-ui-transfer": "2.7.4",
25
+ "@kodiak-finance/orderly-react-app": "2.7.4",
26
+ "@kodiak-finance/orderly-ui-connector": "2.7.4"
27
+ },
28
+ "devDependencies": {
29
+ "@babel/core": "^7.22.9",
30
+ "@babel/preset-env": "^7.22.9",
31
+ "@babel/preset-typescript": "^7.22.5",
32
+ "@types/ramda": "^0.29.3",
33
+ "@types/react": "^18.3.2",
34
+ "@types/react-dom": "^18.3.0",
35
+ "react": "^18.2.0",
36
+ "react-dom": "^18.2.0",
37
+ "tailwindcss": "^3.4.4",
38
+ "tsup": "^7.1.0",
39
+ "typescript": "^5.1.6",
40
+ "tsconfig": "0.10.4"
41
+ },
42
+ "peerDependencies": {
43
+ "react": ">=18",
44
+ "react-dom": ">=18"
45
+ },
46
+ "scripts": {
47
+ "build": "tsup && pnpm run build:css",
48
+ "build:css": "tailwindcss build -i src/tailwind.css -o dist/styles.css --minify"
49
+ }
50
+ }