'use strict';

var i18next = require('i18next');
var LanguageDetector = require('i18next-browser-languagedetector');

function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }

var LanguageDetector__default = /*#__PURE__*/_interopDefault(LanguageDetector);

// src/constant.ts
var LocaleEnum = /* @__PURE__ */ ((LocaleEnum2) => {
  LocaleEnum2["en"] = "en";
  LocaleEnum2["ar"] = "ar";
  LocaleEnum2["fa"] = "fa";
  LocaleEnum2["he"] = "he";
  LocaleEnum2["zh"] = "zh";
  LocaleEnum2["ja"] = "ja";
  LocaleEnum2["es"] = "es";
  LocaleEnum2["ko"] = "ko";
  LocaleEnum2["vi"] = "vi";
  LocaleEnum2["de"] = "de";
  LocaleEnum2["fr"] = "fr";
  LocaleEnum2["ru"] = "ru";
  LocaleEnum2["id"] = "id";
  LocaleEnum2["tr"] = "tr";
  LocaleEnum2["it"] = "it";
  LocaleEnum2["pt"] = "pt";
  LocaleEnum2["uk"] = "uk";
  LocaleEnum2["pl"] = "pl";
  LocaleEnum2["nl"] = "nl";
  LocaleEnum2["tc"] = "tc";
  return LocaleEnum2;
})(LocaleEnum || {});
var defaultLng = "en" /* en */;
var defaultNS = "translation";
var i18nLocalStorageKey = "orderly_i18nLng";
var i18nCookieKey = "orderly_i18nLng";

// src/locale/module/affiliate.ts
var affiliate = {
  "affiliate.referral": "Referral",
  "affiliate.trader": "Trader",
  "affiliate.enter": "Enter",
  "affiliate.statistics": "Statistics",
  "affiliate.connectWallet.tooltip": "Please connect your wallet to use this function",
  "affiliate.createAccount.tooltip": "Create your account first to bind a referral code.",
  "affiliate.page.title": "Refer, earn, and grow - referral & affiliate program",
  "affiliate.page.subTitle": "Earn up to 60% in commissions by sharing your referral code. Invite friends, grow your network, and earn more.",
  "affiliate.page.learnMore": "Learn how it works",
  "affiliate.asAffiliate.affilates": "Affiliates",
  "affiliate.asAffiliate.title": "Referrer",
  "affiliate.asAffiliate.description": "Earn 10% commission from friends\u2019 trades. Want higher commission rates? Submit an application to become an affiliate.",
  "affiliate.asAffiliate.button": "Become an affiliate",
  "affiliate.asTrader.title": "Referee (Trader)",
  "affiliate.asTrader.description": "Get rebates by trading with a referral code.",
  "affiliate.asTrader.button": "Enter code",
  "affiliate.referralCode": "Referral code",
  "affiliate.referralCode.dialog.title": "Bind a referral code",
  "affiliate.referralCode.dialog.description": "Bind a referral code to earn trading fee rebates.",
  "affiliate.referralCode.label": "Enter referral code",
  "affiliate.referralCode.bound": "Referral code bound",
  "affiliate.referralCode.notExist": "This referral code does not exist.",
  "affiliate.referralCode.bind.modal.title": "Were you referred by someone?",
  "affiliate.referralCode.bind.modal.description": "If an affiliate shared their referral code with you, enter it below to bind your account and receive affiliate benefits.",
  "affiliate.referralCode.bind.input.placeholder": "Enter referrer's code",
  "affiliate.referralCode.bind.skip": "No, I was not referred by anyone",
  "affiliate.process.title": "How It Works",
  "affiliate.process.step1.title": "Trade $10,000+ or apply",
  "affiliate.process.step1.description": "Unlock a referral code automatically ($0 of $10,000 completed - main account only), or apply for a higher rate via the form.",
  "affiliate.process.step1.volumeEq0.title": "Get auto referral code or apply",
  "affiliate.process.step1.volumeEq0.description": "Your referral code is ready to use after placing your first trade. you can apply for a higher rate via form.",
  "affiliate.process.step1.volumeGt0.title": "Trade ${{requireVolume}}+ or apply",
  "affiliate.process.step1.volumeGt0.description": "Earn a referral code automatically (${{volume}} of ${{requireVolume}} completed), or apply for a higher rate via form.",
  "affiliate.process.step2.title": "Share",
  "affiliate.process.step2.description": "Share your personalized referral code with others to start earning.",
  "affiliate.process.step3.title": "Earn",
  "affiliate.process.step3.description": "Refer others to earn commission, or use a referral code to earn rebates on your trading",
  "affiliate.summary": "Summary",
  "affiliate.summary.refereesTraded": "Referees that traded",
  "affiliate.referralLink": "Referral link",
  "affiliate.referralLink.earn": "Earn",
  "affiliate.referralLink.earn.tooltip": "{{brokerName}}'s net fee after deducting Orderly's fee",
  "affiliate.referralLink.share": "Share",
  "affiliate.referralLink.share.tooltip": "Your referees get <0>{{value}}</0> of their {{brokerName}} net fee",
  "affiliate.referralVol": "Referral vol.",
  "affiliate.referralCodes": "Referral codes",
  "affiliate.referralCodes.remaining": "Remaining referral codes",
  "affiliate.referralCodes.column.defaultSplit": "Default split",
  "affiliate.referralCodes.column.you&Referee": "You / Referee",
  "affiliate.referralCodes.column.traders": "Traders",
  "affiliate.referralCodes.column.referees&Traders": "Referees / Traders",
  "affiliate.referralCodes.copyLink": "Copy link",
  "affiliate.upTo": "Up to 60%",
  "affiliate.commission": "Commission",
  "affiliate.base": "Affiliate",
  "affiliate.directBonus": "Direct bonus",
  "affiliate.commission.30d": "30d commission",
  "affiliate.commission.column.activeUsers": "New traders",
  "affiliate.myReferees": "My referees",
  "affiliate.referees": "Referees",
  "affiliate.referees.column.refereeAddress": "Referee address",
  "affiliate.referees.column.totalCommission": "Total commission",
  "affiliate.referees.column.totalVol": "Total vol.",
  "affiliate.referees.column.invitationTime": "Invitation time",
  "affiliate.trader.yourReferrer": "Your referrer",
  "affiliate.trader.rebate": "Rebate",
  "affiliate.trader.rebates": "Rebates",
  "affiliate.trader.rebate.30d": "30d trading rebates",
  "affiliate.trader.tradingRebates": "Trading rebates",
  "affiliate.trader.myRebates": "My rebates",
  "affiliate.trader.tradingVol": "Trading vol.",
  "affiliate.referralCode.editCodeModal.title": "Settings",
  "affiliate.referralCode.editCodeModal.description": "Edit your referral code",
  "affiliate.referralCode.editCodeModal.label": "Referral code",
  "affiliate.referralCode.editCodeModal.helpText.length": "Must be 4\u201310 characters long",
  "affiliate.referralCode.editCodeModal.helpText.format": "Only uppercase letters (A\u2013Z) and numbers (0\u20139) are allowed",
  "affiliate.referralCode.editCodeModal.success": "Referral code updated successfully",
  "affiliate.referralRate.editRateModal.title": "Settings",
  "affiliate.referralRate.editRateModal.description": "Set the ratio of referral rate shared with your referees",
  "affiliate.referralRate.editRateModal.label": "Your max commission rate:",
  "affiliate.referralRate.editRateModal.label.you": "You receive",
  "affiliate.referralRate.editRateModal.label.referee": "Referee receives",
  "affiliate.referralRate.editRateModal.helpText.max": "The total commission rate must equal to your maximum commission rate limit",
  "affiliate.referralRate.editRateModal.success": "Referral rate updated successfully",
  "affiliate.direct": "Direct",
  "affiliate.directInclBonus": "Incl. {{amount}} bonus",
  "affiliate.indirect": "Indirect",
  "affiliate.referredBy": "Referred by {{name}}",
  "affiliate.referrals": "Referrals",
  "affiliate.referralCode.edit.modal.title": "Configure your referral settings",
  "affiliate.referralCode.create": "Create referral code",
  "affiliate.referralCode.create.modal.title": "Create new referral code",
  "affiliate.referralCode.create.success": "Referral code created!",
  "affiliate.referralCode.create.warning": "You are creating your referral code. Note that referee allocations can be increased later, but once a code has active referrals, its allocation cannot be decreased.",
  "affiliate.rebateRate.edit.warning": "To protect existing users, once there are active referrals bound to this code, default commission split for referees can only be adjusted upward.",
  "affiliate.rebateRate.review.warning": "Please review your settings. Note that once there are active referrals bound to this code, you can only increase the default commission split for referees.",
  "affiliate.refereeRebateRate.edit.warning": "To protect existing users, you can only increase a referee's commission split.",
  "affiliate.refereeRebateRate.review.warning": "Please review your settings. The commission split cannot be decreased later.",
  "affiliate.refereeRebateRate.modal.title": "Edit commission for {{accountId}}",
  "affiliate.noCommissionCard.title": "Extra bonus on direct referrals",
  "affiliate.noCommissionCard.content": "You still earn rewards! You will receive a {{amount}}% direct referral bonus on every trade made by your direct referees.",
  "affiliate.rebateRate.noCommissionAvailable": "Note: No commission available (0%), so configuration is disabled. However, this code is still active and can be shared to establish your referral base.",
  "affiliate.rebateRate.noCommissionRate": "Note: Although the commission rate is currently 0%, you can still share this code to establish your referral base.",
  "affiliate.resetRebateRate.modal.title": "Reset to default commission rate",
  "affiliate.resetRebateRate.modal.description": "This action will remove custom settings for {{accountId}} and apply the default configuration.",
  "affiliate.resetRebateRate.rateAfterReset": "Rate after reset",
  "affiliate.revenueSplitStrategy": "Revenue split strategy",
  "affiliate.youKeep": "You keep",
  "affiliate.refereesGet": "Referees get",
  "affiliate.extraBonusOnDirectReferrals": "<0>+ {{amount}}%</0> extra bonus on direct referrals",
  "affiliate.earnReferralCommissions": "Earn referral commissions",
  "affiliate.earnReferralCommissions.description": "Invite traders and earn passive commissions from trades made throughout your entire referral network",
  "affiliate.newReferralProgram.title": "Introducing the new referral program",
  "affiliate.newReferralProgram.description": "Give your sub-affiliates the power to customize their earnings, while you unlock an endless stream of passive income from every trader in your growing network.",
  "affiliate.newReferralProgram.tradeUnlock": "Trade to unlock",
  "affiliate.newReferralProgram.tradeUnlock.description": "Trade {{volume}} USDC volume to unlock the ability to invite friends and earn commissions.",
  "affiliate.newReferralProgram.wereYouReferred": "Were you referred by someone?",
  "affiliate.newReferralProgram.referredBy": "You were referred by {{code}}.",
  "affiliate.commissionConfiguration": "Commission configuration",
  "affiliate.totalCommissionAvailable": "Total commission available",
  "affiliate.configure": "Configure",
  "affiliate.accountNotEligible": "Account not eligible",
  "affiliate.confirmAndGenerate": "Confirm & Generate",
  "affiliate.confirmChanges": "Confirm changes",
  "affiliate.confirmChanges.success": "Changes saved",
  "affiliate.review": "Review",
  "affiliate.networkSize": "Network size",
  "affiliate.boundAt": "Bound at",
  "affiliate.customized": "Customized",
  "affiliate.multiLevel": "Multilevel",
  "affiliate.multiLevel.tooltip": "Earn commissions from your direct invitees and their sub-affiliate.",
  "affiliate.singleLevelLegacy": "Single-level (legacy)",
  "affiliate.singleLevelLegacy.tooltip": "Earn commissions from direct invitees only (legacy)",
  "affiliate.wrongNetwork.description": "Please switch your wallet to the supported networks to proceed.",
  "affiliate.setUpAccount.description": "Unlock your unique referral link and start earning rewards.  Set up an account and enable trading to get started.",
  "affiliate.connectWallet": "Connect wallet now",
  "affiliate.setUpAccount": "Set up account",
  "affiliate.landing.title": "Build your revenue network, earn lifetime commissions",
  "affiliate.howItWorks.title": "How it works",
  "affiliate.howItWorks.description": "Start your affiliate journey and build your revenue network in 3 simple steps.",
  "affiliate.howItWorks.step1.title": "Connect wallet",
  "affiliate.howItWorks.step1.description": "Set up your account by connecting your Web3 wallet.",
  "affiliate.howItWorks.step2.title": "Configure your strategy",
  "affiliate.howItWorks.step2.description": "Configure the commission split: secure your profit margin while allocating competitive incentives to empower your sub-affiliates.",
  "affiliate.howItWorks.step3.title": "Share & earn",
  "affiliate.howItWorks.step3.description": "Copy your link to invite partners and traders. Earn passive commissions from trades made throughout your entire referral network.",
  "affiliate.faq.title": "FAQ",
  "affiliate.faq.question1": "What about this referral program?",
  "affiliate.faq.answer1": "This is a multilevel referral system that rewards you, the affiliate for growing the network. You earn a continuous share of the DEX revenue generated by every trader in your referral chain - not just those you invite directly.",
  "affiliate.faq.question2": "How are my commissions calculated?\xA0",
  "affiliate.faq.answer2": "Your commissions are the difference between your assigned commission rate and the percentage you choose to pass on to your sub-affiliates. Importantly, your commission rate remains consistent regardless of how deep the referral chain goes.",
  "affiliate.faq.question3": "How much commission can I share with my direct sub-affiliates?",
  "affiliate.faq.answer3": "The decision is entirely yours. You can assign any percentage, from 0% up to your maximum available commission rate, to your direct sub-affiliates to encourage their growth.",
  "affiliate.faq.question4": "Where does the revenue come from?",
  "affiliate.faq.answer4": "Revenue comes from the trading fees generated by traders on the DEX. Whenever a trader in your chain makes a transaction, a portion of the fee is distributed from the top of the chain downwards based on the configured allocation.",
  "affiliate.faq.question5": "How do I get my commissions?",
  "affiliate.faq.answer5": "Commissions are settled daily directly into your main trading account. You can view your overall commission earnings as an affiliate on the referral dashboard."
};

// src/locale/module/chart.ts
var chart = {
  "chart.now": "Now"
};

// src/locale/module/common.ts
var common = {
  "common.cancel": "Cancel",
  "common.close": "Close",
  "common.confirm": "Confirm",
  "common.ok": "OK",
  "common.yes": "Yes",
  "common.no": "No",
  "common.all": "All",
  "common.buy": "Buy",
  "common.sell": "Sell",
  "common.long": "Long",
  "common.short": "Short",
  "common.edit": "Edit",
  "common.save": "Save",
  "common.add": "Add",
  "common.delete": "Delete",
  "common.action": "Action",
  "common.code": "Code",
  "common.reset": "Reset",
  "common.tips": "Tips",
  "common.max": "Max",
  "common.download": "Download",
  "common.copy": "Copy",
  "common.copy.failed": "Copy failed",
  "common.copy.copied": "Copied",
  "common.share": "Share",
  "common.export": "Export",
  "common.select.1d": "1D",
  "common.select.3d": "3D",
  "common.select.7d": "7D",
  "common.select.14d": "14D",
  "common.select.30d": "30D",
  "common.select.90d": "90D",
  "common.price": "Price",
  "common.quantity": "Quantity",
  "common.qty": "Qty",
  "common.status": "Status",
  "common.status.all": "All status",
  "common.date": "Date",
  "common.time": "Time",
  "common.volume": "Volume",
  "common.total": "Total",
  "common.symbol": "Symbol",
  "common.token": "Token",
  "common.amount": "Amount",
  "common.side": "Side",
  "common.side.all": "All sides",
  "common.type": "Type",
  "common.notional": "Notional",
  "common.fee": "Fee",
  "common.fees": "Fees",
  "common.orderPrice": "Order price",
  "common.avgPrice": "Avg. price",
  "common.avgOpen": "Avg. open",
  "common.avgClose": "Avg. close",
  "common.trigger": "Trigger",
  "common.lastPrice": "Last price",
  "common.indexPrice": "Index price",
  "common.markPrice": "Mark price",
  "common.limitPrice": "Limit price",
  "common.marketPrice": "Market",
  "common.market": "Market",
  "common.limit": "Limit",
  "common.triggerPrice": "Trigger price",
  "common.unrealizedPnl": "Unrealized PnL",
  "common.realizedPnl": "Realized PnL",
  "common.pnl": "PnL",
  "common.totalValue": "Total value",
  "common.address": "Address",
  "common.address.search.placeholder": "Search address",
  "common.available": "Available",
  "common.overview": "Overview",
  "common.funding": "Funding",
  "common.assets": "Assets",
  "common.allAssets": "All assets",
  "common.countdown": "Countdown",
  "common.current": "Current",
  "common.account": "Account",
  "common.deposit": "Deposit",
  "common.withdraw": "Withdraw",
  "common.deposits": "Deposits",
  "common.withdrawals": "Withdrawals",
  "common.transfer": "Transfer",
  "common.inflow": "Inflow",
  "common.outflow": "Outflow",
  "common.settle": "Settle",
  "common.markets": "Markets",
  "common.portfolio": "Portfolio",
  "common.positions": "Positions",
  "common.position": "Position",
  "common.orders": "Orders",
  "common.tpsl": "TP/SL",
  "common.leverage": "Leverage",
  "common.affiliate": "Affiliate",
  "common.tradingRewards": "Trading rewards",
  "common.trading": "Trade",
  "common.spot": "Spot",
  "common.earn": "Earn",
  "common.stake": "Stake",
  "common.perps": "Perps",
  "common.allAccount": "All accounts",
  "common.mainAccount": "Main account",
  "common.subAccount": "Sub account",
  "common.settings": "Settings",
  "common.accountId": "Account ID",
  "common.web3Wallet": "Web3 wallet",
  "common.wallet": "Wallet",
  "common.myWallet": "My wallet",
  "common.externalWallet": "External wallet",
  "common.invalid": "Invalid",
  "common.network": "Network",
  "common.txId": "TxID",
  "common.result": "Result",
  "common.orderQty": "Order Qty.",
  "common.positionQty": "Position Qty.",
  "common.estTotal": "Est. Total",
  "common.fullTPSL": "Full TP/SL",
  "common.partialTPSL": "Partial TP/SL",
  "common.vaults": "Vaults",
  "common.optional": "Optional",
  "common.learnMore": "Learn more",
  "common.liquidationPrice.tooltip": "Estimated price at which your position will be liquidated. Prices are estimated and depend on multiple factors across all positions.",
  "common.liquidationPrice.tooltip.learnMore": "Learn more about liquidation",
  "common.switch": "Switch",
  "common.notSupported": "Not supported",
  "common.details": "Details",
  "common.somethingWentWrong": "Something went wrong. Please try again later.",
  "common.rwa": "RWA",
  "common.new": "New",
  "common.dayShort": "D",
  "common.hourShort": "H",
  "common.minuteShort": "M",
  "common.secondShort": "S",
  "common.offlineDescription": "Currently disconnected, please refresh the page",
  "common.refresh": "Refresh"
};

// src/locale/module/connector.ts
var connector = {
  "connector.testnet": "Testnet",
  "connector.mainnet": "Mainnet",
  "connector.connect": "Connect",
  "connector.disconnect": "Disconnect",
  "connector.connectWallet": "Connect wallet",
  // "connector.signIn": "Sign in",
  // "connector.signIn.description": "Confirm you are the owner of this wallet",
  "connector.createAccount": "Create account",
  "connector.createAccountWithLedger": "Create account with ledger",
  "connector.enableTradingWithLedger": "Enable trading with ledger",
  "connector.disconnectWallet": "Disconnect wallet",
  "connector.createAccount.description": "Confirm wallet ownership to create an account",
  "connector.enableTrading": "Enable trading",
  "connector.enableTrading.description": "Enable secure access to our API for lightning fast trading",
  "connector.switchNetwork": "Switch Network",
  "connector.wrongNetwork": "Wrong network",
  "connector.wrongNetwork.tooltip": "Please switch to a supported network to continue.",
  "connector.expired": "Your previous access has expired, you will receive a signature request to enable trading. Signing is free and will not send a transaction.",
  "connector.rememberMe": "Remember me",
  "connector.rememberMe.description": "Toggle this option to skip these steps next time you want to trade.",
  "connector.referralCode.placeholder": "Referral code (Optional)",
  "connector.referralCode.invalid": "The referral_code must be 4 to 10 characters long, only accept upper case roman characters and numbers",
  "connector.referralCode.notExist": "This referral code does not exist.",
  "connector.somethingWentWrong": "Something went wrong",
  "connector.userRejected": "User rejected the request.",
  "connector.walletConnected": "Wallet connected",
  "connector.networkSwitched": "Network switched",
  "connector.switchChain.failed": "Switch chain failed",
  "connector.trade.connectWallet.tooltip": "Please connect wallet before starting to trade",
  // "connector.trade.signIn.tooltip": "Please sign in before starting to trade",
  "connector.trade.createAccount.tooltip": "Please create account before starting to trade",
  "connector.trade.enableTrading.tooltip": "Please enable trading before starting to trade",
  "connector.setUp.connectWallet.tooltip": "Please connect wallet before set up",
  // "connector.setUp.signIn.tooltip": "Please sign in before set up",
  "connector.setUp.createAccount.tooltip": "Please create account before set up",
  "connector.setUp.enableTrading.tooltip": "Please enable trading before set up",
  "connector.ledger.signMessageFailed": "Sign Message Failed",
  "connector.ledger.signMessageFailed.description": "Are you using Ledger Wallet?",
  "connector.privy.loginIn": "Login in",
  "connector.privy.logout": "Log out",
  "connector.privy.email": "Email",
  "connector.privy.google": "Google",
  "connector.privy.twitter": "X / Twitter",
  "connector.privy.telegram": "Telegram",
  "connector.privy.myWallet": "My wallet",
  "connector.privy.addEvmWallet": "Add Evm wallet",
  "connector.privy.addSolanaWallet": "Add Solana wallet",
  "connector.privy.addAbstractWallet": "Add Abstract wallet",
  "connector.privy.createEvmWallet": "Create Evm wallet",
  "connector.privy.createSolanaWallet": "Create Solana wallet",
  "connector.privy.termsOfUse": "By connecting your wallet, you acknowledge and agree to the <0>terms of use</0>.",
  "connector.privy.supportedEvmChain": "Supported Evm chain",
  "connector.privy.supportedSolanaChain": "Supported Solana chain",
  "connector.privy.noWallet": "No wallet",
  "connector.privy.noWallet.description": "Please create a wallet to proceed. Only you can access the private key. You can export the private key and import your wallet into another wallet client, such as MetaMask or Phantom, at any time.",
  "connector.privy.switchNetwork.tips": "Switch to {{chainName}} to continue.",
  "connector.privy.addEvmWallet.tips": "Connect an EVM-compatible wallet to continue using the EVM network.",
  "connector.privy.addSolanaWallet.tips": "Connect an Solana-compatible wallet to continue using the Solana network.",
  "connector.privy.addAbstractWallet.tips": "Connect an Abstract-compatible wallet to continue using the Abstract network.",
  "connector.privy.pwa.title": "Prefer an app-like experience? Try the PWA",
  "connector.privy.pwa.sheetTitle": "Add as App",
  "connector.privy.pwa.description": "For a better mobile experience, add this website to your home screen as an app from Safari or Chrome.",
  "connector.privy.pwa.step1": "Click the share icon in the browser menu.",
  "connector.privy.pwa.step2": "Choose Add to Home Screen in the options.",
  "connector.privy.pwa.findOnPage": "Find on Page",
  "connector.privy.pwa.addToHomeScreen": "Add to Home Screen"
};

// src/locale/module/leverage.ts
var leverage = {
  "leverage.maxAccountLeverage": "Max account leverage",
  "leverage.accountLeverage": "Account leverage",
  "leverage.currentLeverage": "Current leverage",
  "leverage.maxLeverage": "Max leverage",
  "leverage.updated": "Leverage updated",
  "leverage.adjustedLeverage": "Adjust leverage",
  "leverage.maxPositionLeverage.tips": "* Maximum position at current leverage: <0>{{amount}}</0> USDC",
  "leverage.maxAvailableLeverage.tips": "* Highest available leverage <0>{{leverage}}</0>. Selecting higher leverage increases your liquidation risk.",
  "leverage.overRequiredMargin.tips": "Margin is not enough. Please try adjusting to another leverage level.",
  "leverage.overMaxPositionLeverage.tips": "Current highest available leverage is <0>{{leverage}}</0>. Please try adjusting to another leverage level.",
  "leverage.confirm": "Leverage confirm",
  "leverage.confirm.content": "If you modify the leverage, it will also affect your ongoing positions on this symbol.",
  "leverage.confirm.disable.confirmation": "Disable confirmation",
  "leverage.actualPositionLeverage.tips": "* Actual position leverage adjusts with notional changes and may fall below your selected leverage."
};

// src/locale/module/markets.ts
var markets = {
  "markets.favorites": "Favorites",
  "markets.recent": "Recent",
  "markets.newListings": "New listings",
  "markets.community": "Community",
  "markets.allMarkets": "All markets",
  "markets.openInterest": "Open interest",
  "markets.openInterest.tooltip": "Total size of positions per side.",
  "markets.topGainers": "Top gainers",
  "markets.topLosers": "Top losers",
  "markets.search.placeholder": "Search market",
  "markets.dataList.favorites.empty": "Click on the <0/> icon next to a market to add it to your list.",
  "markets.dataList.column.8hFunding": "8h funding",
  "markets.dataList.column.moveTop": "Move to top",
  "markets.favorites.dropdown.title": "Select lists for",
  "markets.favorites.dropdown.addPlaceholder": "Add a new watchlist",
  "markets.favorites.tabs.maxList": "Maximum 10 groups in the favorite list",
  "markets.favorites.tabs.maxName": "List name cannot exceed 15 characters",
  "markets.favorites.tabs.delete.dialog.title": "Delete list",
  "markets.favorites.tabs.delete.dialog.description": "Are you sure you want to delete {{name}}?",
  "markets.favorites.addFavorites": "Add favorites",
  "markets.column.market": "Market",
  "markets.column.24hChange": "24h%",
  "markets.column.24hVolume": "24h volume",
  // TODO: use markets.column.market and common.volume
  "markets.column.market&Volume": "Market / Volume",
  // TODO: confirm "change" first letter capital
  "markets.column.price&Change": "Price / Change",
  "markets.column.last": "Last",
  "markets.column.24hPercentage": "24h%",
  "markets.column.24hVol": "24h Vol",
  "markets.column.OI": "OI",
  "markets.column.last&24hPercentage": "Last/24h%",
  "markets.column.mark": "Mark",
  "markets.column.index": "Index",
  "markets.column.mark&Index": "Mark / Index",
  "markets.funding.comparison": "Comparison",
  "markets.funding.column.estFunding": "Est. funding",
  "markets.funding.column.lastFunding": "Last funding",
  "markets.funding.column.1dAvg": "1D avg.",
  "markets.funding.column.3dAvg": "3D avg.",
  "markets.funding.column.7dAvg": "7D avg.",
  "markets.funding.column.14dAvg": "14D avg.",
  "markets.funding.column.30dAvg": "30D avg.",
  "markets.funding.column.90dAvg": "90D avg.",
  "markets.funding.column.positiveRate": "Positive rate",
  "markets.symbolInfoBar.lastPrice.tooltip": "The price of the most recent executed trade on this symbol.",
  "markets.symbolInfoBar.Mark": "Mark",
  "markets.symbolInfoBar.Mark.tooltip": "Price for the computation of unrealized PnL and liquidation.",
  "markets.symbolInfoBar.Index": "Index",
  "markets.symbolInfoBar.Index.tooltip": "Average of the last prices across other exchanges.",
  "markets.symbolInfoBar.24hVolume": "24h volume",
  "markets.symbolInfoBar.24hVolume.tooltip": "24 hour total trading volume on the Orderly Network.",
  "markets.symbolInfoBar.predFundingRate": "Est. funding rate",
  "markets.symbolInfoBar.predFundingRate.tooltip": "Funding rates are payments between traders who are long and short. When positive, long positions pay short positions funding. When negative, short positions pay long positions.",
  "markets.symbolInfoBar.riskNotice.content": "{{symbolWithBroker}} is a permissionless listing supported on Isolated Margin only, deployed and operated independently by {{brokerName}}. Please be aware of elevated risks, including low liquidity, high volatility, and increased liquidation risk."
};

// src/locale/module/navigation.ts
var navigation = {
  "tradingPoints.points": "Points"
};

// src/locale/module/notification.ts
var notification = {
  // Announcement related keys
  "notification.campaign": "Campaign announcement",
  "notification.delisting": "Token delisting",
  "notification.general": "General update",
  "notification.joinNow": "Join now",
  "notification.listing": "New token listing",
  "notification.vote": "Community vote",
  "notification.maintenance": "System maintenance",
  "notification.maintenanceDuration.hours": "{{hours}} HRs at {{startTimeFormatted}} - {{endTimeFormatted}} (UTC)",
  "notification.maintenanceDuration.minutes": "{{minutes}} MINs at {{startTimeFormatted}} - {{endTimeFormatted}} (UTC)",
  "notification.recentlyUpdated": "Recently updated",
  "notification.title": "Announcement",
  "notification.centerTitle": "Announcement center",
  // Notification related keys
  "notification.closeAll": "Close all ({{total}})",
  "notification.delistingTitle": "Token Delisting Notice",
  "notification.generalTitle": "General Update",
  "notification.maintenanceTitle": "System Maintenance",
  "notification.empty": "No announcements"
};

// src/locale/module/orderEntry.ts
var orderEntry = {
  "orderEntry.buyLong": "Buy / Long",
  "orderEntry.sellShort": "Sell / Short",
  "orderEntry.reduceOnly": "Reduce only",
  "orderEntry.orderType.limit": "Limit",
  "orderEntry.orderType.market": "Market",
  // TODO：use orderEntry.orderType.limit
  "orderEntry.orderType.limitOrder": "Limit",
  // TODO：use orderEntry.orderType.market
  "orderEntry.orderType.marketOrder": "Market",
  "orderEntry.orderType.stopLimit": "Stop limit",
  "orderEntry.orderType.stopMarket": "Stop market",
  "orderEntry.orderType.postOnly": "Post only",
  "orderEntry.orderType.postOnly.tooltip": "Ensures your order is maker-only; cancels if it would execute immediately.",
  "orderEntry.orderType.ioc": "IOC",
  "orderEntry.orderType.ioc.tooltip": "Executes immediately; any unfilled amount is canceled.",
  "orderEntry.orderType.fok": "FOK",
  "orderEntry.orderType.fok.tooltip": "Executes immediately in full, or is canceled entirely.",
  "orderEntry.orderType.symbolPostOnly.tooltip": "This symbol is in POST_ONLY mode. Only limit orders are accepted until the order book is ready.",
  "orderEntry.orderType.scaledOrder": "Scaled",
  "orderEntry.orderType.trailingStop": "Trailing stop",
  "orderEntry.orderSize": "Order size",
  "orderEntry.initialMargin": "Initial margin",
  "orderEntry.startPrice": "Start price",
  "orderEntry.endPrice": "End price",
  "orderEntry.skew": "Skew",
  "orderEntry.totalOrders": "Total orders",
  "orderEntry.totalQuantity": "Total quantity",
  "orderEntry.trailingRate": "Trailing rate",
  "orderEntry.trailingValue": "Trailing value",
  "orderEntry.trailing": "Trailing",
  "orderEntry.quantityDistribution": "Qty distribution",
  "orderEntry.quantityDistribution.description": "Controls how order size is distributed across price levels. ",
  "orderEntry.quantityDistribution.formula": "Size Skew = (Size at end price) \xF7 (Size at start price)",
  "orderEntry.distributionType.flat": "Flat",
  "orderEntry.distributionType.ascending": "Ascending",
  "orderEntry.distributionType.ascending.abbr": "Asc.",
  "orderEntry.distributionType.descending": "Descending",
  "orderEntry.distributionType.descending.abbr": "Desc.",
  "orderEntry.distributionType.custom": "Custom",
  "orderEntry.distributionType.flat.description": "Uniform order allocation across the range.",
  "orderEntry.distributionType.ascending.description": "Larger order sizes toward the end of the price range",
  "orderEntry.distributionType.descending.description": "Larger order sizes near the start of the price range",
  "orderEntry.bbo": "BBO",
  "orderEntry.bbo.counterparty1": "Counterparty 1",
  "orderEntry.bbo.counterparty5": "Counterparty 5",
  "orderEntry.bbo.queue1": "Queue 1",
  "orderEntry.bbo.queue5": "Queue 5",
  "orderEntry.bbo.disabled.tips": "BBO is not supported when TP/SL, Post-Only, IOC, or FOK is selected.",
  "orderEntry.estLiqPrice": "Est. liq. price",
  "orderEntry.disableOrderConfirm": "Disable order confirmation",
  "orderEntry.orderConfirm": "Order confirm",
  "orderEntry.confirmScaledOrder": "Confirm scaled order",
  "orderEntry.hidden": "Hidden",
  "orderEntry.hidden.tooltip": "Hidden orders provide trading privacy by concealing your order size from other market participants while still executing normally.",
  "orderEntry.keepVisible": "Keep visible",
  "orderEntry.maxBuy": "Max buy",
  "orderEntry.maxSell": "Max sell",
  "orderEntry.tpMarkPrice": "TP price (Mark)",
  "orderEntry.slMarkPrice": "SL price (Mark)",
  "orderEntry.tpsl.trigger.description": "TP/SL triggers at the specified mark price and executes as a market order.",
  "orderEntry.estRoi": "Est.ROI",
  "orderEntry.estPnL": "Est.PnL",
  "orderEntry.tpsl.tips": "TP/SL triggers at the specified mark price and executes as a market order. By default, it applies to the entire position. Adjust settings in open positions for partial TP/SL.",
  // form errors
  "orderEntry.orderQuantity.error.required": "Quantity is required",
  "orderEntry.orderQuantity.error.min": "Quantity must be greater than {{value}}",
  "orderEntry.orderQuantity.error.max": "Quantity must be less than {{value}}",
  "orderEntry.orderPrice.error.required": "Price is required",
  "orderEntry.orderPrice.error.min": "Price must be greater than {{value}}",
  "orderEntry.orderPrice.error.max": "Price must be less than {{value}}",
  "orderEntry.triggerPrice.error.required": "Trigger price is required",
  "orderEntry.triggerPrice.error.min": "Trigger price must be greater than {{value}}",
  "orderEntry.triggerPrice.error.max": "Trigger price must be less than {{value}}",
  "orderEntry.tpTriggerPrice.error.min": "TP Price must be greater than {{value}}",
  "orderEntry.tpTriggerPrice.error.max": "TP Price must be less than {{value}}",
  "orderEntry.slTriggerPrice.error.min": "SL Price must be greater than {{value}}",
  "orderEntry.slTriggerPrice.error.max": "SL Price must be less than {{value}}",
  "orderEntry.total.error.min": "The order value should be greater or equal to {{value}} USDC",
  "orderEntry.initialMarginTotal.error.min": "The initial margin should be greater or equal to {{value}} USDC",
  // Margin mode (Cross / Isolated)
  "marginMode.switchMarginMode": "Switch Margin Mode",
  "marginMode.cross": "Cross",
  "marginMode.isolated": "Isolated",
  "marginMode.crossMargin": "Cross Margin",
  "marginMode.isolatedMargin": "Isolated Margin",
  "marginMode.crossMarginDescription": "Margin and PnL are shared across positions. You may lose all positions if liquidation occurs.",
  "marginMode.isolatedMarginDescription": "Margin and PnL are independent for each position. You'll only lose the current position if liquidation occurs. Only USDC is accepted as collateral. <0>Learn more</0>",
  "marginMode.current": "Current",
  "marginMode.marginModeSettings": "Margin mode settings",
  "marginMode.updatedSuccessfully": "Updated successfully",
  "marginMode.noEditableSymbolsSelected": "No editable symbols selected",
  "marginMode.failedToUpdateMarginMode": "Failed to update margin mode",
  "marginMode.perpetualFutures": "Perpetual futures",
  "marginMode.searchPlaceholder": "Search",
  "marginMode.selectAll": "Select all",
  "marginMode.setAs": "Set as",
  "marginMode.disabledSymbolTooltip": "This symbol is independently operated by a third party. Isolated Margin is enforced to prevent risk from affecting your other positions.",
  "orderEntry.startPrice.error.required": "Start price is required",
  "orderEntry.startPrice.error.min": "Start price must be greater than {{value}}",
  "orderEntry.startPrice.error.max": "Start price must be less than {{value}}",
  "orderEntry.endPrice.error.required": "End price is required",
  "orderEntry.endPrice.error.min": "End price must be greater than {{value}}",
  "orderEntry.endPrice.error.max": "End price must be less than {{value}}",
  "orderEntry.totalOrders.error.required": "Total orders is required",
  "orderEntry.totalOrders.error.range": "Total orders must be in the range of 2 to 20.",
  "orderEntry.skew.error.required": "Skew is required",
  "orderEntry.skew.error.min": "Skew must be greater than {{value}}",
  "orderEntry.skew.error.max": "Skew must be less than {{value}}",
  "orderEntry.callbackValue.error.min": "Trailing value must be greater than {{value}}",
  "orderEntry.callbackValue.error.range": "Trailing value needs to be greater than {{min}} and less than {{max}}",
  "orderEntry.callbackRate.error.range": "Trailing rate needs to be greater than or equal to {{min}} and less than or equal to {{max}}",
  "orderEntry.callbackValue.error.required": "Trailing value is required",
  "orderEntry.callbackRate.error.required": "Trailing rate is required",
  "orderEntry.slippage": "Slippage",
  "orderEntry.slippage.est": "Est",
  "orderEntry.slippage.tips": "Your transaction will revert if the price changs unfavorably by more than this percentage.",
  "orderEntry.slippage.error.exceed": "The current input value cannot exceed 3%",
  "orderEntry.slippage.error.max": "Estimated slippage exceeds your maximum allowed slippage.",
  "orderEntry.confirmScaledOrder.orderPrice.warning": "This order will be filled immediately based on the current market price.",
  "orderEntry.scaledOrder.fullySuccessful": "Scaled order placed: {{total}} orders submitted successfully.",
  "orderEntry.scaledOrder.partiallySuccessful": "Scaled order partially submitted: {{successCount}} of {{total}} orders placed.",
  "orderEntry.scaledOrder.allFailed": "Scaled order failed. No orders were placed.",
  "orderEntry.reduceOnly.reminder": "Reduce-only reminder",
  "orderEntry.reduceOnly.reminder.content": "Your account is in reduce-only and cannot open new positions. Would you like to turn off reduce-only mode and proceed with the\xA0order?",
  "orderEntry.placeOrderNow": "Place order now",
  "orderEntry.maxQty.reminder.content": "Order qty reduced to max available: {{maxQty}}",
  "orderEntry.permissionlessNotice.title": "Community-Listed Market Notice",
  "orderEntry.permissionlessNotice.content1": "This market was listed by a third-party deployer through the permissionless listing system.",
  "orderEntry.permissionlessNotice.content2": "It is not created, reviewed, or endorsed by Orderly. Such markets may involve low liquidity, high volatility, incomplete information, or increased liquidation risk.",
  "orderEntry.permissionlessNotice.content3": "Please review the deployer's documentation and trade at your own risk.",
  "orderEntry.permissionlessNotice.checkbox": "I understand this is a community-listed market and accept the risks."
};

// src/locale/module/orders.ts
var orders = {
  "orders.orderHistory": "Order history",
  "orders.status.pending": "Pending",
  "orders.status.filled": "Filled",
  "orders.status.partialFilled": "Partial filled",
  "orders.status.canceled": "Canceled",
  "orders.status.rejected": "Rejected",
  "orders.status.incomplete": "Incomplete",
  "orders.status.completed": "Completed",
  "orders.status.opened.toast.title": "Order opened",
  "orders.status.filled.toast.title": "Order filled",
  "orders.status.canceled.toast.title": "Order canceled",
  "orders.status.rejected.toast.title": "Order rejected",
  "orders.status.replaced.toast.title": "Order edited",
  "orders.status.scaledSubOrderOpened.toast.title": "Scale order: sub-order opened",
  "orders.trailingStop.activated": "Trailing order activated",
  "orders.column.fill&Quantity": "Filled / Quantity",
  "orders.column.orderTime": "Order time",
  "orders.column.hidden": "Hidden",
  "orders.editOrder": "Edit order",
  "order.edit.confirm.quantity": "You agree changing the quantity of {{base}}-PERP order to <0>{{value}}</0>.",
  "order.edit.confirm.price": "You agree changing the price of {{base}}-PERP order to <0>{{value}}</0>.",
  "order.edit.confirm.triggerPrice": "You agree changing the trigger price of {{base}}-PERP order to <0>{{value}}</0>.",
  "order.edit.confirm.callbackValue": "You agree changing the callback value of {{base}}-PERP order to <0>{{value}}</0>.",
  "order.edit.confirm.callbackRate": "You agree changing the callback rate of {{base}}-PERP order to <0>{{value}}</0>.",
  "orders.cancelOrder": "Cancel order",
  "orders.cancelOrder.description": "Are you sure you want to cancel your pending order.",
  "orders.cancelAll": "Cancel all",
  "orders.pending.cancelAll": "Cancel all pending orders",
  "orders.pending.cancelAll.description": "Are you sure you want to cancel all of your pending orders?",
  "orders.tpsl.cancelAll": "Cancel all TP/SL orders",
  "orders.tpsl.cancelAll.description": "Are you sure you want to cancel all of your TP/SL orders?",
  "orders.cancelAll.ofSymbol": "Cancel all of {{symbol}}",
  "orders.pending.cancelAll.forSymbol": "Cancel all pending orders for {{symbol}}",
  "orders.pending.cancelAll.forSymbol.description": "Are you sure you want to cancel all pending orders for {{symbol}}?",
  "orders.tpsl.cancelAll.forSymbol": "Cancel all TP/SL orders for {{symbol}}",
  "orders.tpsl.cancelAll.forSymbol.description": "Are you sure you want to cancel all TP/SL orders for {{symbol}}?",
  "orders.price.greaterThan": "Price can not be greater than {{max}} USDC.",
  "orders.price.lessThan": "Price can not be less than {{min}} USDC.",
  "orders.quantity.lessThan": "Quantity should be less than {{quantity}}",
  "orders.quantity.lessThanPosition": "Quantity should be less than position quantity : {{quantity}}",
  "orders.history.renew": "Renew",
  "orders.download.tooltip": "The downloaded data will reflect only the applied filters (e.g., status, time, side, and pagination) and may not include all records."
};

// src/locale/module/portfolio.ts
var portfolio = {
  "portfolio.feeTier": "Fee tier",
  "portfolio.apiKeys": "API Keys",
  "portfolio.setting": "Settings",
  "portfolio.overview.availableWithdraw": "Available to withdraw",
  "portfolio.overview.handle.title": "Portfolio value",
  "portfolio.overview.performance": "Performance",
  "portfolio.overview.performance.roi": "{{period}} ROI",
  "portfolio.overview.performance.roi.tooltip": "ROI = PnL / (Start account value + Total deposits + Total transfer-in)",
  "portfolio.overview.performance.pnl": "{{period}} PnL",
  "portfolio.overview.performance.pnl.tooltip": "PnL = Current account value \u2212 Start account value \u2212 Total deposits + Total withdrawals \u2212 Total transfer-in + Total transfer-out",
  "portfolio.overview.performance.volume": "{{period}} Volume (USDC)",
  "portfolio.overview.performance.volume.tooltip": "Trading volume over the selected period.",
  "portfolio.overview.performance.dailyPnl": "Daily PnL",
  "portfolio.overview.performance.cumulativePnl": "Cumulative PnL",
  "portfolio.overview.performance.dailyVolume": "Daily Volume",
  "portfolio.overview.performance.cumulativeVolume": "Cumulative Volume",
  "portfolio.overview.todaysPnl": "Today's PnL",
  "portfolio.overview.todaysVol": "Today's Vol",
  "portfolio.overview.distribution": "Distribution",
  "portfolio.overview.transferHistory": "Transfer history",
  "portfolio.overview.vaults": "Vaults",
  "portfolio.overview.vaultName": "Vault name",
  "portfolio.overview.column.txId": "TxID",
  "portfolio.overview.column.token": "Token",
  "portfolio.overview.column.qty": "Qty.",
  "portfolio.overview.column.indexPrice": "Index price",
  "portfolio.overview.column.assetValue": "Asset value",
  "portfolio.overview.column.collateralRatio": "Collateral ratio",
  "portfolio.overview.column.collateralRatio.explain": "Collateral ratio shows how much of an asset\u2019s value can be used as margin",
  "portfolio.overview.column.assetContribution": "Asset contribution",
  "portfolio.overview.column.form": "Form",
  "portfolio.overview.column.to": "To",
  "portfolio.overview.column.convert.convertedAsset": "Converted asset",
  "portfolio.overview.column.convert.usdcAmount": "USDC amount",
  "portfolio.overview.column.convert.convertId": "Convert ID",
  "portfolio.overview.column.convert.details": "Details",
  "portfolio.overview.tab.convert.history": "Convert history",
  "portfolio.overview.convert.dialog.title.details": "Convert details",
  "portfolio.overview.distribution.type.referralCommission": "Referral commission",
  "portfolio.overview.distribution.type.refereeRebate": "Referee rebate",
  "portfolio.overview.distribution.type.brokerFee": "Broker fee",
  "portfolio.feeTier.updatedDailyBy": "Updated daily by",
  "portfolio.feeTier.header.yourTier": "Your tier",
  "portfolio.feeTier.header.30dVolume": "30D trading volume",
  "portfolio.feeTier.header.takerFeeRate": "Taker fee rate",
  "portfolio.feeTier.header.makerFeeRate": "Maker fee rate",
  "portfolio.feeTier.header.myStake": "My stake",
  "portfolio.feeTier.column.tier": "Tier",
  "portfolio.feeTier.column.30dVolume": "30 day volume",
  "portfolio.feeTier.column.30dVolume.above": "Above {{volume}}",
  "portfolio.feeTier.column.stakingLevel": "Staking Level",
  "portfolio.feeTier.column.or": "or",
  "portfolio.feeTier.column.maker": "Maker / RWA Maker",
  "portfolio.feeTier.column.taker": "Taker / RWA Taker",
  "portfolio.apiKey.accountId.copied": "Account id copied",
  "portfolio.apiKey.uid": "UID",
  "portfolio.apiKey.secretKey": "Secret key",
  "portfolio.apiKey.secretKey.copied": "Secret key copied",
  "portfolio.apiKey.ip": "IP",
  "portfolio.apiKey.permissions": "Permissions",
  "portfolio.apiKey.permissions.read": "Read",
  "portfolio.apiKey.permissions.trading": "Trading",
  "portfolio.apiKey.description": "Create API keys to suit your trading needs. For your security, don't share your API keys with anyone.",
  "portfolio.apiKey.readApiGuide": "Read API guide",
  "portfolio.apiKey.column.apiKey": "API key",
  "portfolio.apiKey.column.apiKey.copy": "API key copied",
  "portfolio.apiKey.column.permissionType": "Permission type",
  "portfolio.apiKey.column.restrictedIP": "Restricted IP",
  "portfolio.apiKey.column.restrictedIP.copy": "Restricted IP copied",
  "portfolio.apiKey.column.expirationDate": "Expiration date",
  "portfolio.apiKey.create.dialog.title": "Create API key",
  "portfolio.apiKey.create.connectWallet.tooltip": "Please connect wallet before create API key",
  // "portfolio.apiKey.create.signIn.tooltip":
  //   "Please sign in before create API key",
  "portfolio.apiKey.create.createAccount.tooltip": "Please create account before create API key",
  "portfolio.apiKey.create.enableTrading.tooltip": "Please enable trading before create API key",
  "portfolio.apiKey.create.wrongNetwork.tooltip": "Please switch to a supported network to create API key",
  "portfolio.apiKey.create.ipRestriction": "IP restriction (optional)",
  "portfolio.apiKey.create.ipRestriction.placeholder": "Add IP addresses, separated by commas.",
  "portfolio.apiKey.created.warning": "Please copy the API secret. Once you close this pop-up, the API secret will be encrypted.",
  "portfolio.apiKey.created.button.copyApiInfo": "Copy API info",
  "portfolio.apiKey.apiInfo.copied": "API info copied",
  "portfolio.apiKey.created": "API key created",
  "portfolio.apiKey.deleted": "API key deleted",
  "portfolio.apiKey.updated": "API key updated",
  "portfolio.apiKey.edit.dialog.title": "Edit API key",
  "portfolio.apiKey.delete.dialog.title": "Delete API key",
  "portfolio.apiKey.delete.dialog.description": "Delete your API key <0>{{apiKey}}</0>?",
  "portfolio.setting.systemUpgrade": "System upgrade",
  "portfolio.setting.cancelOpenOrders": "Cancel open orders during system upgrade",
  "portfolio.setting.cancelOpenOrders.description": "During the upgrade period, all open orders will be cancelled to manage your risk in case of high market volatility.",
  "portfolio.setting.soundAlerts": "Sound notification",
  "portfolio.setting.soundAlerts.description": "Play a notification sound when an order is filled or canceled.",
  "portfolio.setting.theme": "Theme"
};

// src/locale/module/positions.ts
var positions = {
  "positions.closePosition": "Close Position",
  "positions.fundingFee.title": "Funding Fee",
  "positions.fundingFee.tooltip": "Total funding fees from closed positions only, including partially closed portions.",
  "positions.fundingRate.tooltip": "Funding fee amount for each funding interval during the time the position was open. Records may include funding fees from both closed positions and currently open positions.",
  "positions.liquidation": "Liquidation",
  "positions.positionHistory": "Position history",
  "positions.closeAll": "Close all",
  "positions.closeAll.ofSymbol": "Close all of {{symbol}}",
  "positions.closeAll.description": "Are you sure you want to close all of your positions? They will be closed using market orders.",
  "positions.closeAll.success": "All positions closed successfully",
  "positions.closeAll.optionAll": "Close all positions",
  "positions.closeAll.optionProfit": "Close profitable positions",
  "positions.closeAll.optionLoss": "Close loss-making positions",
  "positions.closeAll.noPositions.profit": "No profitable positions to close.",
  "positions.closeAll.noPositions.loss": "No loss-making positions to close.",
  "positions.closeAll.popover.desc": "Select which positions you want to close. They will  be closed at the market price of the corresponding market.",
  "positions.column.liqPrice": "Liq. price",
  "positions.column.unrealPnl.tooltip": "Current unrealized profit or loss on your open positions across all widgets calculated using Mark Price.",
  "positions.column.unrealPnl.priceBasis": "Unrealized PnL Price Basis",
  "positions.column.margin": "Margin",
  "positions.column.margin.tooltip": "Isolated margin locked in the position",
  "positions.column.margin.formula": "Margin = Position size * Open price * IMR",
  "positions.column.close": "Close",
  "positions.limitClose": "Limit close",
  "positions.limitClose.description": "You agree closing {{quantity}} {{base}} position at limit price.",
  "positions.marketClose": "Market close",
  "positions.marketClose.description": "You agree closing {{quantity}} {{base}} position at market price.",
  "positions.limitClose.errors.exceed.title": "Close size limit exceeded",
  "positions.limitClose.errors.exceed.description": "Cannot close {{quantity}} {{symbol}} position. Max allowed per close is {{maxQuantity}} {{symbol}}.",
  "positions.history.status.closed": "Closed",
  "positions.history.status.partialClosed": "Partially closed",
  "positions.history.type.adl": "Adl",
  "positions.history.type.liquidated": "Liquidated",
  "positions.history.liquidated.liquidationId": "Liquidation id",
  "positions.history.liquidated.liquidatorFee": "Liquidator fee",
  "positions.history.liquidated.insFundFee": "Ins. Fund fee",
  "positions.history.column.closed": "Closed",
  "positions.history.column.maxClosed": "Max closed",
  "positions.history.column.closed&maxClosed": "Closed / Max closed",
  "positions.history.column.netPnl": "Net PnL",
  "positions.history.column.timeOpened": "Time opened",
  "positions.history.column.timeClosed": "Time closed",
  "positions.history.column.updatedTime": "Updated time",
  "positions.history.netPnl.tradingFee": "Trading fee",
  "positions.Liquidation.column.liquidationId": "Liquidation id",
  "positions.Liquidation.column.insFundTransfer": "Ins. fund transfer",
  "positions.Liquidation.column.liquidationFee": "Liquidation fee",
  "positions.Liquidation.column.liquidationFeeRate": "Liquidation fee rate",
  "positions.Liquidation.column.markPrice": "Liq. mark price",
  "positions.Liquidation.tooltip.liquidation": "An account is subject to liquidation if its Account Margin Ratio falls below its Maintenance Margin Ratio.",
  "positions.Liquidation.tooltip.viewMore": "View more",
  "positions.Liquidation.col.tooltip.feeRate": "The percentage charged for this liquidation, covering both the liquidator\u2019s fee and the insurance fund contribution. This rate varies by symbol.",
  "positions.Liquidation.col.tooltip.fee": "The total fee charged for this liquidation, including both the liquidator\u2019s fee and the insurance fund contribution.",
  "positions.Liquidation.expand.label.mr": "Margin ratio",
  "positions.Liquidation.expand.label.mmr": "Maint. margin ratio",
  "positions.Liquidation.expand.label.collateral": "Collateral value",
  "positions.Liquidation.expand.label.notional": "Position notional",
  "positions.Liquidation.expand.tooltip.mr": "The ratio of collateral to position size at the time of liquidation.",
  "positions.Liquidation.expand.tooltip.mmr": "The minimum margin required to keep the position open.",
  "positions.Liquidation.expand.tooltip.collateral": "Total collateral value in the account when liquidation occurred.",
  "positions.Liquidation.expand.tooltip.notional": "The total notional value of positions in the account at liquidation.",
  "positions.reverse.title": "Reverse Position",
  "positions.reverse.description": "Close your current position and open the opposite at market price. If your account balance isn't enough, the reverse order will fail. Orders exceeding the maximum quantity will be automatically split into multiple smaller orders.",
  "positions.reverse.error.belowMin": "The reverse order quantity is below the minimum allowed. Please close your position and place a new order manually.",
  "positions.reverse.marketCloseLong": "Market Close Long",
  "positions.reverse.marketCloseShort": "Market Close Short",
  "positions.reverse.marketOpenLong": "Market Open Long",
  "positions.reverse.marketOpenShort": "Market Open Short",
  "positions.reverse.reverseToLong": "Reverse to Long",
  "positions.reverse.reverseToShort": "Reverse to Short",
  // Adjust Margin
  "positions.adjustMargin.title": "Adjust Margin",
  "positions.adjustMargin.add": "Add Margin",
  "positions.adjustMargin.reduce": "Reduce Margin",
  "positions.adjustMargin.quantity": "Quantity",
  "positions.adjustMargin.max": "Max",
  "positions.adjustMargin.currentMargin": "Current margin:",
  "positions.adjustMargin.liqPriceAfter": "Liquidation price after adjustment:",
  "positions.adjustMargin.leverageAfter": "Effective leverage after adjustment:",
  "positions.adjustMargin.success": "Margin adjusted successfully",
  "positions.adjustMargin.failed": "Failed to adjust margin",
  "positions.adjustMargin.marginCannotMoreThanMax": "Margin cannot be more than max"
};

// src/locale/module/scaffold.ts
var scaffold = {
  "scaffold.announcement.campaign": "Latest Campaign is coming",
  "scaffold.footer.joinCommunity": "Join our community",
  "scaffold.footer.operational": "Operational",
  "scaffold.footer.poweredBy": "Powered by"
};

// src/locale/module/share.ts
var share = {
  "share.pnl.sharePnl": "Share PnL",
  "share.pnl.share.long": "LONG",
  "share.pnl.share.short": "SHORT",
  "share.pnl.displayFormat": "PnL display format",
  "share.pnl.displayFormat.roi&Pnl": "ROI & PnL",
  "share.pnl.displayFormat.roi": "ROI",
  "share.pnl.displayFormat.pnl": "PnL",
  "share.pnl.optionalInfo": "Optional information to share",
  "share.pnl.optionalInfo.openPrice": "Open price",
  "share.pnl.optionalInfo.closePrice": "Close price",
  "share.pnl.optionalInfo.openTime": "Opened at",
  "share.pnl.optionalInfo.closeTime": "Closed at",
  "share.pnl.optionalInfo.message": "Your message",
  "share.pnl.optionalInfo.message.placeholder": "Max 25 characters",
  "share.pnl.optionalInfo.message.maxLength": "Maximum support of 25 characters",
  "share.pnl.image.copied": "Image copied",
  "share.pnl.copy.failed.description": "Browser version outdated, please update in order to copy image to clipboard."
};

// src/locale/module/tpsl.ts
var tpsl = {
  "tpsl.tp": "TP",
  "tpsl.sl": "SL",
  "tpsl.mode": "Mode",
  "tpsl.fullPosition": "Full position",
  "tpsl.partialPosition": "Partial position",
  "tpsl.tpPrice": "TP Price",
  "tpsl.slPrice": "SL Price",
  "tpsl.tpPnl": "TP PnL",
  "tpsl.slPnl": "SL PnL",
  "tpsl.tpTrigger": "TP trigger",
  "tpsl.slTrigger": "SL trigger",
  "tpsl.pnl": "PnL",
  "tpsl.offsetHolder": "Offset",
  "tpsl.offset": "Offset (From entry)",
  "tpsl.offsetPercent": "Offset% (From entry)",
  "tpsl.add": "Add",
  "tpsl.cancelAll": "Cancel all",
  "tpsl.dragToSet": "Drag to set TP/SL",
  "tpsl.tpOrderPrice": "TP order price",
  "tpsl.slOrderPrice": "SL order price",
  "tpsl.tpTriggerPrice": "TP trigger price",
  "tpsl.slTriggerPrice": "SL trigger price",
  "tpsl.positionTpsl": "Position TP/SL",
  "tpsl.entirePosition": "Entire position",
  "tpsl.estPnl": "Est. PNL",
  "tpsl.takeProfit": "Take profit",
  "tpsl.stopLoss": "Stop loss",
  "tpsl.cancelOrder.description": "Are you sure you want to cancel this TP/SL order?",
  "tpsl.confirmOrder": "Confirm Order",
  "tpsl.advanced": "Advanced",
  "tpsl.advancedSetting": "Advanced setting",
  "tpsl.TPOrderConfirm": "TP order confirm",
  "tpsl.SLOrderConfirm": "SL order confirm",
  "tpsl.positionType.full": "TP/SL: Full position",
  "tpsl.positionType.partial": "TP/SL: Partial position",
  "tpsl.positionType.full.tips": "TPSL (full) applies to the full position. Newly activated TPSL (full) orders will overwrite previous orders. Full position will be market closed when the price is triggered.",
  "tpsl.positionType.partial.tips": "TP/SL triggers at the specified mark price and executes as a market order. By default, it applies to the entire position. Adjust settings in open positions for partial TP/SL.",
  "tpsl.positionType.full.tips.market": "Full-position TP/SL orders are market only",
  "tpsl.advanced.ROI": "When the mark price reaches <0/>, it will trigger a <1/> order, and estimated PnL will be <2/> and ROI is <3/>.",
  "tpsl.advanced.submit": "Submit",
  "tpsl.totalEstTpPnl": "Total est. TP PnL",
  "tpsl.totalEstSlPnl": "Total est. SL PnL",
  "tpsl.riskRewardRatio": "Risk reward ratio",
  "tpsl.validate.tpOrderPrice.error.required": "TP order price is required",
  "tpsl.validate.tpOrderPrice.error.min": "TP order price must be greater than {{value}}",
  "tpsl.validate.tpOrderPrice.error.max": "TP order price must be less than {{value}}",
  "tpsl.validate.slOrderPrice.error.required": "SL order price is required",
  "tpsl.validate.slOrderPrice.error.min": "SL order price must be greater than {{value}}",
  "tpsl.validate.slOrderPrice.error.max": "SL order price must be less than {{value}}",
  "tpsl.validate.tpTriggerPrice.error.priceErrorMin": "Your TP trigger price should be set lower than your order price.",
  "tpsl.validate.tpTriggerPrice.error.priceErrorMax": "Your TP trigger price should be set higher than your order price.",
  "tpsl.validate.slTriggerPrice.error.priceErrorMin": "Your SL trigger price should be set lower than your order price.",
  "tpsl.validate.slTriggerPrice.error.priceErrorMax": "Your SL trigger price should be set higher than your order price.",
  "tpsl.validate.tpTriggerPrice.error.required": "TP trigger price is required",
  "tpsl.validate.slTriggerPrice.error.required": "SL trigger price is required",
  "tpsl.validate.slTriggerPrice.warning.closeToLiqPrice": "Stop losses set near the liq. price may not trigger. Note: the liq. price can change with position notional.",
  "tpsl.validate.slTriggerPrice.error.crossLiqPrice": "Stop loss crosses the liq. price. Please adjust your SL.",
  "tpsl.tpslDetail.qty": "Qty.",
  "tpsl.tpslDetail.estPnl": "Est. PnL",
  "tpsl.tpslDetail.estPnl.tooltip": "The actual value may differ based on the actual trading price. This value is only for reference.",
  "tpsl.agreement": "You agree to edit your {{symbol}} order.",
  "tpsl.offsetMark": "Offset (From mark)",
  "tpsl.offsetPercentMark": "Offset% (From mark)"
};

// src/locale/module/trading.ts
var trading = {
  "trading.layout": "Layout",
  "trading.layout.advanced": "Advanced",
  "trading.layout.advanced.right": "Right",
  "trading.layout.advanced.left": "Left",
  "trading.layout.markets": "Markets",
  "trading.layout.markets.left": "Left",
  "trading.layout.markets.top": "Top",
  "trading.layout.markets.bottom": "Bottom",
  "trading.layout.markets.hide": "Hide",
  "trading.orders.closeAll": "Close All",
  "trading.hideOtherSymbols": "Hide other symbols",
  "trading.history": "History",
  "trading.portfolioSettings": "Preference",
  "trading.portfolioSettings.decimalPrecision": "Decimal Precision for PnL & Notional",
  "trading.portfolioSettings.unrealPnlPriceBasis": "Unrealized PnL Price Basis",
  "trading.portfolioSettings.reversePosition": "Reverse button",
  "trading.portfolioSettings.reversePosition.tooltip": "Close your current position and open the opposite at market price. If your account balance isn't enough, the reverse order will fail. Orders exceeding the maximum quantity will be automatically split into multiple smaller orders.",
  "trading.orderBook": "Order book",
  "trading.lastTrades": "Last trades",
  "trading.orderBook.column.value": "Value",
  "trading.orderBook.settings": "Settings",
  "trading.orderBook.showBuySellRatio": "Show buy/sell ratio",
  "trading.tabs.chart": "Chart",
  "trading.tabs.trades": "Trades",
  "trading.tabs.data": "Data",
  "trading.column.24High": "24h high",
  "trading.column.24Low": "24h low",
  "trading.orderBook.sum": "Sum",
  "trading.orderBook.markPrice.tooltip": "Obtained from a third-party oracle, the mark price is calculated as the median of three prices: the last price, the fair price based on the funding rate basis, and the fair price based on the order books.",
  "trading.orderBook.spreadRatio.tooltip": "Spread Ratio of the ask1 and bid1.",
  "trading.orderBook.middlePrice.tooltip": "A stabilized reference price calculated as the median of the best bid, best ask, and 24-hour closing price.",
  "trading.faucet.getTestUSDC": "Get test USDC",
  "trading.faucet.getTestUSDC.success": "{{quantity}} USDC will be added to your balance. Please note this may take up to 3 minutes. Please check back later.",
  "trading.asset.startTrading": "Start trading",
  "trading.asset.startTrading.description": "You can deposit assets from various networks",
  "trading.asset.myAssets": "My Assets",
  "trading.asset.freeCollateral": "Free collateral",
  "trading.asset.freeCollateral.tooltip": "Free collateral for placing new orders.",
  "trading.asset.freeCollateral.formula": "Free collateral = Total balance + Total unsettlement PnL - Total position initial margin",
  "trading.asset.marginRatio": "Margin ratio",
  "trading.asset.marginRatio.tooltip": "The margin ratio represents the proportion of collateral relative to the total position value.",
  "trading.asset.marginRatio.formula": "Account margin ratio = (Total collateral value / Total position notional) * 100%",
  "trading.asset.unsettledPnl": "Unsettled PnL",
  "trading.asset.free&TotalCollateral": "Free / Total Collateral",
  "trading.asset.availableBalance": "Available Balance",
  "trading.asset.maintenanceMarginRatio": "Maintenance margin ratio",
  "trading.asset.maintenanceMarginRatio.tooltip": "The minimum margin ratio required to protect your positions from being liquidated. If the Margin ratio falls below the Maintenance margin ratio, the account will be liquidated.",
  "trading.asset.maintenanceMarginRatio.formula": "Account maintenance margin ratio = Sum(Position notional * Symbol maintenance Margin Ratio)  / Total position notional * 100%",
  "trading.asset.maintenanceMargin": "Maintenance margin",
  "trading.asset.maintenanceMargin.tooltip": "Maintenance margin is the minimum amount of margin required to keep all your open positions alive. If your account equity falls below the maintenance margin, the account will be liquidated.",
  "trading.asset.maintenanceMargin.formula": "Maintenance margin = Sum(Position notional * Symbol maintenance margin ratio)",
  "trading.asset.currentLeverage": "Current leverage",
  "trading.asset.currentLeverage.tooltip": "Current Account Leverage shows how much leverage you are currently using based on your open positions.",
  "trading.asset.currentLeverage.formula": "Current leverage = (Total position notional / Total collateral value)",
  "trading.riskRate": "Risk rate",
  "trading.riskRate.tooltip": "The Risk rate is used to assess the risk level of an account. When the Risk rate reaches 100%, the account will be liquidated",
  "trading.riskRate.formula": "Risk rate = Maintenance margin ratio / Margin ratio * 100%",
  "trading.asset&Margin": "Asset & Margin",
  "trading.fundingRate.predFundingRate": "Est. funding rate",
  "trading.fundingRate.estFundingRateWithTimeframe": "Est. funding rate ({{timeframe}})",
  "trading.fundingRate.predFundingRate.interval": "Interval",
  "trading.fundingRate.predFundingRate.cap": "Funding cap",
  "trading.fundingRate.predFundingRate.floor": "floor",
  "trading.fundingRate.lastFundingRate": "Last funding rate",
  "trading.fundingRate.estimatedFundingRate": "Estimated funding rate",
  "trading.fundingRate.estimatedFundingFee": "Estimated funding fee",
  "trading.fundingRate.annualized": "Annualized",
  "trading.rwa.marketHours": "Market on",
  "trading.rwa.outsideMarketHours": "Market off",
  "trading.rwa.tooltip.description.open": "Trading aligns with the underlying market - higher liquidity, normal price movements.",
  "trading.rwa.tooltip.description.close": "Trading is available, but liquidity may be lower and price movement slower.",
  "trading.rwa.tooltip.closeIn": "Regular trading hours will close in <0>{{timeFormat}}</0>",
  "trading.rwa.tooltip.openIn": "Regular trading hours will open in <0>{{timeFormat}}</0>",
  "trading.rwa.tooltip.checkDetailRules": "Check detail rules",
  "trading.rwa.countdown.title": "US markets are closing soon, volatility may be lower.",
  "trading.symbolDelisting": "{{symbol}} has entered forced deleveraging mode (insufficient liquidity depth / insufficient IF balance). Your position on this symbol only allows closing operations.",
  "trading.rwa.outsideMarketHours.notify": "This market is currently outside regular trading hours. You can still place a trade, but please be aware of reduced liquidity and potential risks.",
  "trading.rwa.mWeb.outsideMarketHours.desc": "Regular trading hours are about to close - 24/7 trading continues; price may slow and liquidity may be lower.",
  "trading.rwa.mWeb.insideMarketHours.desc": "Regular trading hours are about to open - get ready."
};

// src/locale/module/tradingLeaderboard.ts
var tradingLeaderboard = {
  // TODO: remove this key
  "tradingLeaderboard.leaderboard": "Leaderboard",
  "tradingLeaderboard.campaigns": "Campaigns",
  "tradingLeaderboard.ongoing": "Ongoing",
  "tradingLeaderboard.past": "Past",
  "tradingLeaderboard.future": "Future",
  "tradingLeaderboard.learnMore": "Learn more",
  "tradingLeaderboard.tradeNow": "Trade now",
  "tradingLeaderboard.joinNow": "Join now",
  "tradingLeaderboard.tradingVolume": "Trading volume",
  "tradingLeaderboard.rank": "Rank",
  "tradingLeaderboard.estimatedRewards": "Estimated rewards",
  "tradingLeaderboard.lastUpdate": "Last update",
  "tradingLeaderboard.estimatedTicketsEarned": "Estimated tickets earned",
  "tradingLeaderboard.ticketPrizePool": "Ticket prize pool",
  "tradingLeaderboard.viewRules": "View rules",
  "tradingLeaderboard.prizePool": "Prize pool",
  "tradingLeaderboard.participants": "Participants",
  "tradingLeaderboard.battleStartsIn": "Battle starts in",
  "tradingLeaderboard.battleEndsIn": "Battle ends in",
  "tradingLeaderboard.battleStarts": "Battle starts",
  "tradingLeaderboard.battleEnds": "Battle ends",
  "tradingLeaderboard.rewardDistribution": "Reward distribution",
  "tradingLeaderboard.batteleHasEnded": "Battle has ended",
  "tradingLeaderboard.tradeForMoreTickets": "Trade <0/> more to get next tickets",
  "tradingLeaderboard.earnTickets": "Earn {{ticket}} ticket every {{amount}} trading volume.",
  "tradingLeaderboard.arena": "Arena",
  "tradingLeaderboard.generalLeaderboard": "General leaderboard",
  "tradingLeaderboard.maxTicketsAchieved": "Max tickets achieved",
  "tradingLeaderboard.termsAndConditions": "Terms and Conditions",
  "tradingLeaderboard.rules": "Rules",
  "tradingLeaderboard.pnl.tooltip": "Real-time PnL including both realized and unrealized gains. Existing positions and collateral price changes may affect PnL even with zero volume. Updated every 60 mins.",
  "tradingLeaderboard.realizedPnl.tooltip": "Displays realized PnL from closed positions in the selected period.",
  "tradingLeaderboard.tradingVolume.tooltip": "Total trading volume generated during the campaign period. Updated every 30 seconds."
};

// src/locale/module/tradingRewards.ts
var tradingRewards = {
  "tradingRewards.rewards": "Rewards",
  "tradingRewards.subtitle": "Trade with {{brokerName}} to earn esORDER.",
  "tradingRewards.subtitle.mm": "Trade to earn $ORDER",
  "tradingRewards.learnMore": "Learn more here",
  "tradingRewards.myEstRewards": "My est. rewards",
  "tradingRewards.epoch": "Epoch",
  "tradingRewards.epochRewards": "Epoch rewards",
  "tradingRewards.otherOrderlyDex": "Other Orderly DEX",
  "tradingRewards.claim": "Claim",
  "tradingRewards.availableClaim": "Available to claim",
  "tradingRewards.stake": "Stake",
  "tradingRewards.booster": "Booster",
  "tradingRewards.stakeBooster": "Stake booster",
  "tradingRewards.avgStakedAmount": "Avg. staked amount",
  "tradingRewards.rewardHistory": "Reward history",
  "tradingRewards.rewardsEarned": "Rewards earned",
  "tradingRewards.rewardHistory.column.start&EndDate": "Start / End date",
  "tradingRewards.rewardHistory.column.startDate": "Start",
  "tradingRewards.rewardHistory.column.endDate": "End date",
  "tradingRewards.epochPauseCountdown.title": "Trading rewards will resume in",
  "tradingRewards.eopchStatus.pause": "Trading rewards are on pause as we build a better program. Past rewards remain claimable.",
  "tradingRewards.eopchStatus.ended": "Trading rewards has ended. You may continue to claim your past rewards.",
  "tradingRewards.eopchStatus.linkDescription": "Stay tuned for more updates."
};

// src/locale/module/tradingView.ts
var tradingView = {
  "tradingView.timeInterval.1m": "1m",
  "tradingView.timeInterval.3m": "3m",
  "tradingView.timeInterval.5m": "5m",
  "tradingView.timeInterval.15m": "15m",
  "tradingView.timeInterval.30m": "30m",
  "tradingView.timeInterval.1h": "1h",
  "tradingView.timeInterval.2h": "2h",
  "tradingView.timeInterval.4h": "4h",
  "tradingView.timeInterval.6h": "6h",
  "tradingView.timeInterval.12h": "12h",
  "tradingView.timeInterval.1d": "1D",
  "tradingView.timeInterval.3d": "3D",
  "tradingView.timeInterval.1w": "1W",
  "tradingView.timeInterval.1M": "1M",
  "tradingView.timeInterval.more": "More",
  "tradingView.lineType.bars": "Bars",
  "tradingView.lineType.candles": "Candles",
  "tradingView.lineType.hollowCandles": "Hollow candles",
  "tradingView.lineType.line": "Line",
  "tradingView.lineType.area": "Area",
  "tradingView.lineType.baseline": "Baseline",
  "tradingView.displayControl.buySell": "Buy/Sell",
  "tradingView.displayControl.limitOrders": "Limit orders",
  "tradingView.displayControl.stopOrders": "Stop orders",
  "tradingView.displayControl.liquidationPrice": "Liquidation Price",
  "tradingView.noScriptSrc": "Due to TradingView's policy, you will need to apply for your own license.",
  "tradingView.noScriptSrc.1": "1. Please apply for your TradingView Advanced Chart license <0>here</0>",
  "tradingView.noScriptSrc.2": "2. Follow the instructions on <0>orderly.network</0> to set up."
};

// src/locale/module/transfer.ts
var transfer = {
  "transfer.network": "Network",
  "transfer.lowestFee": "lowest fee",
  "transfer.web3Wallet.your": "Your Web3 Wallet",
  "transfer.web3Wallet.my": "My Web3 wallet",
  "transfer.brokerAccount": "Your {{brokerName}} account",
  "transfer.quantity.invalid": "Please input a valid number",
  "transfer.insufficientBalance": "Insufficient balance",
  "transfer.insufficientAllowance": "Insufficient allowance",
  "transfer.rejectTransaction": "Rejected transaction",
  "transfer.deposit.approve": "Approve",
  "transfer.deposit.approve.success": "Approve success",
  "transfer.deposit.approve.failed": "Approve failed",
  "transfer.deposit.requested": "Deposit requested",
  "transfer.deposit.completed": "Deposit completed",
  "transfer.deposit.failed": "Deposit failed",
  "transfer.exclusiveDeposit.warning": "Only send {{token}} on {{network}} to this address. Sending other tokens, using other chains, or amounts below the minimum deposit will result in permanent loss of funds.",
  "transfer.exclusiveDeposit.selectFirst": "Select your network and token first",
  "transfer.exclusiveDeposit.selectNetwork": "Select network",
  "transfer.exclusiveDeposit.selectToken": "Select token",
  "transfer.exclusiveDeposit.minDeposit": "Min. deposit",
  "transfer.exclusiveDeposit.estimatedTime": "Estimated time",
  "transfer.exclusiveDeposit.estimatedTime.default": "~ 5 min",
  "transfer.exclusiveDeposit.depositPending": "Deposit pending: {{amount}} {{symbol}}",
  "transfer.deposit.feeUnavailable": "Fee data is currently unavailable. Please try again later.",
  "transfer.deposit.notEnoughGas": "Not enough gas. Add some {{token}} to your wallet to continue.",
  "transfer.deposit.exceedCap": "Amount exceeds user deposit cap",
  "transfer.deposit.closeToMaxLimit": "Deposit amount too close to maximum limit. To ensure your transaction succeeds, please reduce the amount",
  "transfer.deposit.tab.connectedWallet": "From connected wallet",
  "transfer.deposit.tab.exchangeOrOtherWallet": "From exchange / other wallet",
  "transfer.deposit.estGasFee": "Est. gas fee",
  "transfer.deposit.estGasFee.tooltip": "Estimated gas fee includes: transaction execution cost on this chain, and destination chain operation fee for Orderly deposit. Please prepare extra to ensure sufficient coverage.",
  "transfer.deposit.destinationGasFee": "Destination gas fee",
  "transfer.deposit.destinationGasFee.description": "Additional gas tokens are required to cover operations on the destination chain. The amount shown is an estimate - please prepare extra to ensure sufficient coverage.",
  "transfer.withdraw.unsupported.chain": "Withdrawals are not supported on this chain. Please switch to any of the bridgeless networks.",
  "transfer.withdraw.unsupported.networkName": "Withdrawals are not supported on {{networkName}}. Please switch to any of the bridgeless networks.",
  "transfer.withdraw.unsupported.token": "{{token}} withdrawals are unavailable on this network",
  "transfer.withdraw.crossChain.confirmWithdraw": "Confirm to withdraw",
  "transfer.withdraw.crossChain.recipientAddress": "Recipient address",
  "transfer.withdraw.crossChain.recipientNetwork": "Recipient network",
  "transfer.withdraw.crossChain.withdrawAmount": "Withdraw amount",
  "transfer.withdraw.crossChain.process": "Your cross-chain withdrawal is being processed...",
  "transfer.withdraw.crossChain.warning": "Withdrawals that require cross-chain rebalancing can't be cancelled or followed up with more withdrawals until they've been processed.",
  "transfer.withdraw.crossChain.vaultWarning": "Withdrawal exceeds the balance of the {{networkName}} vault ( {{chainVaultBalance}} USDC ). Cross-chain rebalancing fee will be charged for withdrawal to {{networkName}}.",
  "transfer.withdraw.vaultWarning": "The balance of {{tokenName}} on the {{chainName}} is {{balance}}, which is insufficient to meet your withdrawal request. Please try again later or switch to another chain for withdrawal.",
  "transfer.withdraw.minAmount.error": "You can't withdraw less than {{minAmount}} {{currency}}. Please adjust your amount.",
  "transfer.withdraw.LTV.error": "This withdrawal may push your LTV over {{threshold}}%, immediately triggering an auto-convert.",
  "transfer.withdraw.requested": "Withdraw requested",
  "transfer.withdraw.completed": "Withdraw completed",
  "transfer.withdraw.failed": "Withdraw failed",
  // "transfer.withdraw.unsettled.tooltip":
  //   "Unsettled balance can not be withdrawn. In order to withdraw, please settle your balance first.",
  // "transfer.withdraw.settlePnl.description":
  //   "Are you sure you want to settle your PnL? Settlement will take up to 1 minute before you can withdraw your available balance.",
  "transfer.withdraw.otherAccount": "Other {{brokerName}} account",
  "transfer.withdraw.accountId.tips": "Please enter an Account ID instead of a wallet address.",
  "transfer.withdraw.accountId.invalid": "No account found",
  "transfer.withdraw.available.tooltip": "Available to withdraw equals your free collateral. If you have unsettled PnL, please settle first in the withdraw modal to increase available amount. Current maximum withdrawal per request is {{amount}} USDC. To withdraw more, please submit multiple requests.",
  "transfer.withdraw.accountIdOrAddress.placeholder": "Account ID or address",
  "transfer.withdraw.accountIdOrAddress.hint": "Enter an account ID or address to find the account",
  "transfer.withdraw.addExternalWallet": "Add external wallet",
  "transfer.withdraw.addExternalWallet.addressDescription": "Fill in and confirm the address to receive the funds on the destination chain.",
  "transfer.withdraw.addExternalWallet.addressWarning": "Please do not enter any address other than the {{networkLabel}} address.",
  "transfer.withdraw.addExternalWallet.label": "Enter external wallet",
  "transfer.withdraw.addExternalWallet.networkMismatch": "This address doesn't match the selected network. Please enter a valid {{networkLabel}} address.",
  "transfer.internalTransfer.from": "From",
  "transfer.internalTransfer.to": "To",
  "transfer.internalTransfer.currentAssetValue": "Current asset value",
  "transfer.internalTransfer.success": "Success! Funds will be available in 15 seconds.",
  "transfer.internalTransfer.unsettled.tooltip": "Unsettled balance can not be transferred. In order to transfer, please settle your balance first.",
  "transfer.internalTransfer.settlePnl.description": "Are you sure you want to settle your PnL? <br/> Settlement will take up to 1 minute before you can transfer your available balance.",
  "transfer.internalTransfer.error.default": "Unable to complete transfer. Please try again later.",
  "transfer.internalTransfer.error.transferInProgress": "An internal transfer is currently in progress.",
  "transfer.internalTransfer.error.withdrawalInProgress": "There is a withdrawal in progress.",
  "transfer.internalTransfer.error.transferToSelf": "Transfers to your own account are not allowed",
  "transfer.internalTransfer.error.accountIdNotExist": "Receiver account ID does not exist.",
  "transfer.internalTransfer.error.transferToSubAccount": "Transfers to sub-accounts under different main accounts are not permitted.",
  // "transfer.internalTransfer.error.scopeInsufficient":
  //   "The scope is insufficient",
  // swap deposit
  "transfer.swapDeposit.crossSwap.notice": "Cross-chain transaction fees will be charged. To avoid these, use our supported <0>Bridgeless networks</0>",
  "transfer.swapDeposit.swap.notice": "Please note that swap fees will be charged.",
  "transfer.swapDeposit.bridging": "Bridging",
  "transfer.swapDeposit.bridge": "Bridge",
  "transfer.swapDeposit.bridge.description": "Bridge to Arbirtum via Stargate",
  "transfer.swapDeposit.depositing": "Depositing",
  "transfer.swapDeposit.deposit": "Deposit",
  "transfer.swapDeposit.deposit.description": "Deposit to {{brokerName}}",
  "transfer.swapDeposit.viewStatus": "View status",
  "transfer.swapDeposit.depositFailed": "Deposit failed, please try again later.",
  "transfer.slippage": "Slippage",
  "transfer.slippage.slippageTolerance": "Slippage tolerance",
  "transfer.slippage.slippageTolerance.description": "Your transaction will revert if the price changes unfavorably by more than this percentage.",
  "transfer.slippage.error.high": "High slippage may result in significant loss",
  "transfer.swapDeposit.swapFee": "Swap fee",
  "transfer.swapDeposit.swapFee.description": "WOOFi charges a 0.025% on each swap.",
  "transfer.swapDeposit.bridgeFee": "Bridge fee",
  "transfer.swapDeposit.bridgeFee.description": "Stargate charges a fee to bridge your assets.",
  "transfer.swapDeposit.minimumReceived": "Minimum received",
  "transfer.swapDeposit.confirmSwap": "Confirm to swap",
  "transfer.swapDeposit.averageSwapTime": "Average swap time <0>~ {{time}} mins</0>",
  "transfer.swapDeposit.swapDialog.title": "Review swap details",
  "transfer.swapDeposit.viewFAQs": "Need help? <0>View FAQs</0>",
  "transfer.swapDeposit.notEnoughLiquidity": "Not enough liquidity. Please try again later or use another chain to deposit.",
  "transfer.convert.completed": "Convert completed",
  "transfer.convert.failed": "Convert failed",
  "transfer.depositCap": "Deposit cap",
  "transfer.depositCap.tooltip": "Max deposit amount for ",
  "transfer.deposit.convertRate": "Convert rate",
  "transfer.convert.convertAssets": "Convert assets to USDC",
  "transfer.deposit.collateralContribution": "Collateral contribution",
  "transfer.withdraw.InsufficientVaultBalance": "Insufficient vault balance",
  "transfer.LTV": "LTV",
  "transfer.LTV.description": `LTV (Loan-to-Value) is the ratio between your negative USDC and the current value of your collateral. If your LTV exceeds {{threshold}}, your collateral will be automatically converted to USDC.`,
  "transfer.LTV.tooltip": `If your LTV exceeds {{threshold}}% or your USDC balance plus Unsettled PnL falls below {{usdcThreshold}}, your collateral will be automatically converted with a haircut. To avoid this, you can manually convert assets to USDC.`,
  "transfer.LTV.currentLTV": "Current LTV",
  "transfer.LTV.isolatedModeUsdcOnly": "Only USDC can be used as margin in Isolated Mode.",
  "transfer.LTV.availableCrossMarginHint": "Available balance = USDC balance + Unsettled PnL. All collateral assets contribute to your available margin.",
  "transfer.LTV.isolatedMarginOrderHint": "In Isolated Margin mode, only USDC is accepted as margin. Convert your assets to USDC to place orders.",
  "transfer.convert": "Convert",
  // "transfer.convert.note": "Please note that convert fees will be charged.",
  "transfer.deposit.globalMaxQty.error": "Your deposit couldn't be processed because the global deposit cap for {{token}} on {{chain}} has been reached. This is typically resolved after rebalancing, which takes around 1 hour. Please try again later, or use a smaller amount or a different chain. <0>Learn more</0>",
  "transfer.deposit.gasFee.error": "Please ensure you have enough {{token}} for gas fees.",
  "transfer.deposit.status.pending.one": "You have a pending transaction",
  "transfer.deposit.status.pending.multiple": "You have pending transactions",
  "transfer.deposit.status.completed.one": "You have a successful transaction",
  "transfer.deposit.status.completed.multiple": "You have successful transactions",
  // Yield-bearing collateral reminder
  "transfer.deposit.yieldReminder.earnAPY": "<0>Earn {{apy}}% APY</0> while you trade.",
  "transfer.deposit.yieldReminder.earnRewards": "Earn rewards while you trade.",
  "transfer.deposit.yieldReminder.distribution": "The yield will be distributed to your account weekly.",
  "transfer.deposit.yieldReminder.disclaimer": "APY is estimated; actual returns may vary."
};

// src/locale/module/ui.ts
var ui = {
  "ui.empty.description": "No results found.",
  "ui.messageCenter.tooltip": "Check recent announcements",
  "ui.pagination.morePages": "More pages",
  "ui.pagination.rowsPerPage": "Rows per page",
  "ui.picker.selectDate": "Select Date",
  "ui.dialog.srOnly.title": "Dialog",
  "ui.sheet.srOnly.title": "Sheet"
};

// src/locale/module/vaults.ts
var vaults = {
  "vaults.availableOn": "Available on",
  "vaults.header.title": "Earn passive yield with vault strategies",
  "vaults.header.description": "Put your idle or extra assets to work effortlessly. Deposit into curated vault strategies directly from {{brokerName}} - using USDC from any supported blockchain or your {{brokerName}} account, with no gas fees.",
  "vaults.introduction.tvl": "Vault TVL",
  "vaults.introduction.depositors": "Depositors",
  "vaults.allVaults": "All vaults",
  "vaults.list.poolName": "Pool Name",
  "vaults.list.myDeposits": "My deposits",
  "vaults.list.allTimePnl": "All-time pnl",
  "vaults.list.operate": "Operate",
  "vaults.card.orderly.title": "Orderly OmniVault",
  "vaults.card.orderly.description": "Earn passive yields effortlessly, no trading expertise required. OmniVault deploys market-making strategies, taking on liquidations, and accrue platform fees.",
  "vaults.card.tvl": "TVL",
  "vaults.card.apy": "30D APY",
  "vaults.card.allTimeReturn": "All-time return",
  "vaults.card.allTimeReturnTooltip": "Annualized returns using all historical data since vault inception. Available after the vault is 7 days old.",
  "vaults.card.myDeposits": "My deposits",
  "vaults.card.myEarnings": "My earnings",
  "vaults.card.accountBalance": "Account balance",
  "vaults.card.more": "More",
  "vaults.card.less": "Less",
  "vaults.card.launchingSoon": "launching Soon",
  "vaults.card.viewMore": "View more",
  "vaults.card.status.active": "Active",
  "vaults.card.status.closing": "Closing",
  "vaults.card.status.closed": "Closed",
  "vaults.deposit.estShares": "Est. shares",
  "vaults.deposit.shares": "Shares",
  "vaults.deposit.lockupDuration": "Lock up duration",
  "vaults.deposit.latestDeposit": "Latest deposit",
  "vaults.withdraw.estPricePerShare": "Est. price per share",
  "vaults.withdraw.estReceivingAmount": "Est. receiving amount",
  "vaults.withdraw.latestWithdraw": "Latest withdrawal request",
  "vaults.withdraw.dialog.title": "Confirm withdrawal details",
  "vaults.withdraw.dialog.withdrawalAmount": "Withdrawal amount",
  "vaults.withdraw.dialog.estimatedReceiving": "Estimated receiving",
  "vaults.withdraw.dialog.note": "Please note that the estimated USDC is based on the current price per share, and the final amount you receive will be determined at the end of the vault period.",
  "vaults.withdraw.dialog.initiateWithdrawal": "Initiate withdrawal",
  "vaults.withdraw.process.withdrawProcess": "Withdraw process",
  "vaults.withdraw.process.vaultProcess": "Vault process",
  "vaults.withdraw.process.transferred": "Transferred",
  "vaults.withdraw.process.initiate": "Initiate",
  "vaults.withdraw.process.upTo": "Up to 6 hours",
  "vaults.operation.error.switchAccount": "Please switch to your main account to continue.",
  "vaults.operation.error.minDeposit": "Deposit amount is less than the minimum {{amount}} USDC.",
  "vaults.operation.error.minWithdrawal": "Withdraw amount is less than the minimum {{amount}} USDC."
};

// src/locale/module/widget.ts
var widget = {
  "assetHistory.status.pending": "Pending",
  "assetHistory.status.confirm": "Confirm",
  "assetHistory.status.processing": "Processing",
  "assetHistory.status.completed": "Completed",
  "assetHistory.status.failed": "Failed",
  "assetHistory.status.pendingRebalance": "Pending rebalance",
  /** linkDevice */
  "linkDevice.createQRCode.loading.description": "Approve QR code with wallet...",
  "linkDevice.createQRCode.linkMobileDevice": "Link Mobile Device",
  "linkDevice.createQRCode.linkMobileDevice.description": "Open {{hostname}} on your mobile device and scan the QR code to link this wallet. For security, the QR code will expire in 60 seconds. <br/> The QR code allows mobile trading but does not enable withdrawals. Ensure you are not sharing your screen or any screenshots of the QR code.",
  "linkDevice.createQRCode.success.description": "Scan the QR code or paste the URL into another browser/<br/>device to continue.",
  "linkDevice.createQRCode.success.copyUrl": "Copy URL",
  "linkDevice.scanQRCode": "Scan QR Code",
  "linkDevice.scanQRCode.description": "Click the <0/> icon in the top right corner on desktop to generate a QR code to scan.",
  "linkDevice.scanQRCode.tooltip": "Link to Desktop via QR Code",
  "linkDevice.scanQRCode.connected.description": "You are connected via another device. This mode is for trading only. To switch networks, deposit or withdraw assets, please disconnect and reconnect your wallet on this device.",
  "linkDevice.tooltip": "Link mobile device",
  /** settle */
  "settle.settlePnl": "Settle PnL",
  "settle.settlePnl.warning": "Please settle your balance",
  "settle.settlePnl.description": "Are you sure you want to settle your PnL? <br/> Settlement will take up to 1 minute before you can withdraw your available balance.",
  "settle.unsettled": "Unsettled",
  "settle.unsettled.tooltip": "Unsettled balance can not be withdrawn. In order to withdraw, please settle your balance first.",
  "settle.settlement.requested": "Settlement requested",
  "settle.settlement.completed": "Settlement completed",
  "settle.settlement.failed": "Settlement failed",
  "settle.settlement.error": "Settlement is only allowed once every 10 minutes. Please try again later.",
  "languageSwitcher.language": "Language",
  "languageSwitcher.tooltip": "Switch language",
  "languageSwitcher.tips": "AI-generated translations may not be fully accurate.",
  "announcement.type.listing": "Listing",
  "announcement.type.maintenance": "Maintenance",
  "announcement.type.delisting": "Delisting",
  "maintenance.dialog.title": "System upgrade in progress",
  "maintenance.dialog.description": "Sorry, {{brokerName}} is temporarily unavailable due to a scheduled upgrade. The service is expected to be back by {{endDate}}.",
  "maintenance.tips.description": "{{brokerName}} will be temporarily unavailable for a scheduled upgrade from {{startDate}} to {{endDate}}.",
  "restrictedInfo.description.default": " You are accessing {{brokerName}} from an IP address ({{ip}}) associated with a restricted country.",
  "restrictedInfo.accessRestricted": "Access Restricted",
  "restrictedInfo.accessRestricted.description": "Due to laws and regulations, we currently do not operate in the United States. By continuing to use our platform, you represent and warrant at all times that you are not a resident of the United States throughout the period of such use.",
  "restrictedInfo.accessRestricted.agree": "I understand and agree",
  "subAccount.modal.title": "Switch account",
  "subAccount.modal.switch.success.description": "Account switched",
  "subAccount.modal.mainAccount.title": "Main account",
  "subAccount.modal.subAccounts.title": "Sub-accounts",
  "subAccount.modal.current": "Current",
  "subAccount.modal.noAccount.description": "Create a sub-account now to explore different trading strategies.",
  "subAccount.modal.create.max.description": "You have reached the maximum limit of 10 sub-accounts.",
  "subAccount.modal.create.title": "Create sub-account",
  "subAccount.modal.create.description": "You have {{subAccountCount}} sub-accounts. {{remainingCount}} more can be created.",
  "subAccount.modal.create.nickname.role": "1-20 characters. Only letters, numbers, and @ , _ - (space) allowed.",
  "subAccount.modal.create.success.description": "Sub-account created successfully.",
  "subAccount.modal.create.failed.description": "Failed to create sub-account.",
  "subAccount.modal.edit.title": "Edit nickname",
  "subAccount.modal.nickName.label": "Sub-account nickname",
  "subAccount.modal.edit.success.description": "Nickname updated successfully.",
  "subAccount.modal.edit.failed.description": "Failed to update nickname.",
  "funding.fundingFee": "Funding fee",
  "funding.fundingRate": "Funding rate",
  "funding.annualRate": "Annual rate",
  "funding.paymentType": "Payment type",
  "funding.paymentType.paid": "Paid",
  "funding.paymentType.received": "Received",
  "leftNav.feedback": "Share your feedback",
  "errorBoundary.title": "Page Crashed",
  "errorBoundary.description": "The page is currently unavailable. Please refresh and try again.",
  "errorBoundary.refresh": "Refresh",
  "dmm.maker": "Maker",
  "dmm.taker": "Taker"
};

// src/locale/en.ts
var en = {
  ...common,
  ...markets,
  ...portfolio,
  ...trading,
  ...chart,
  ...positions,
  ...orders,
  ...tpsl,
  ...share,
  ...orderEntry,
  ...leverage,
  ...scaffold,
  ...tradingRewards,
  ...tradingView,
  ...connector,
  ...transfer,
  ...affiliate,
  ...ui,
  ...tradingLeaderboard,
  ...widget,
  ...vaults,
  ...notification,
  ...navigation
};

// src/resourceBundles/externalResources.ts
var externalResourcePreloaders = /* @__PURE__ */ new Set();
async function preloadExternalResources(lang) {
  await Promise.all(
    Array.from(externalResourcePreloaders).map(async (preloader) => {
      try {
        await preloader(lang);
      } catch (error) {
      }
    })
  );
}

// src/i18n.ts
var resources = {
  [defaultLng]: { [defaultNS]: en }
};
var languageDetector = new LanguageDetector__default.default(null, {
  lookupLocalStorage: i18nLocalStorageKey,
  lookupCookie: i18nCookieKey,
  caches: ["localStorage", "cookie"]
});
function createI18nInstance(options) {
  return i18next.createInstance({
    // lng: defaultLng,
    fallbackLng: defaultLng,
    // debug: true,
    interpolation: {
      escapeValue: false
    },
    ...options
  }).use(languageDetector);
}
var i18n = createI18nInstance({
  resources
});
var parseChangeLanguageTarget = (lang) => {
  if (!lang) {
    return void 0;
  }
  const localeCodes = Object.values(LocaleEnum);
  if (localeCodes.includes(lang)) {
    return lang;
  }
  const match = lang.match(/^([a-z]{2})/i);
  if (match && localeCodes.includes(match[1])) {
    return match[1];
  }
  return lang;
};
var originalChangeLanguage = i18n.changeLanguage.bind(i18n);
i18n.changeLanguage = (async (lang, callback) => {
  const localeCode = parseChangeLanguageTarget(lang);
  if (localeCode) {
    await preloadExternalResources(localeCode);
  }
  return originalChangeLanguage(lang, callback);
});
i18n.init();
var i18n_default = i18n;

// src/utils.ts
var isRTLDirectionLanguage = (lang) => /^(?:ar|fa|he)(?:-|$)/i.test(lang ?? "");
var syncDocumentDirection = (lang) => {
  if (typeof document === "undefined") {
    return;
  }
  document.documentElement.setAttribute(
    "dir",
    isRTLDirectionLanguage(lang) ? "rtl" : "ltr"
  );
};
function parseI18nLang(lang, localeCodes, defaultLang) {
  localeCodes = localeCodes || Object.values(LocaleEnum);
  defaultLang = defaultLang || "en" /* en */;
  const regex = /^([a-z]{2})/i;
  const match = lang?.match(regex);
  if (!match) {
    return defaultLang;
  }
  const matchLang = match[1];
  if (localeCodes.includes(lang)) {
    return lang;
  }
  if (localeCodes.includes(matchLang)) {
    return matchLang;
  }
  return defaultLang;
}
function removeLangPrefix(pathname, localeCodes) {
  const localePath = getLocalePathFromPathname(pathname, localeCodes);
  return localePath ? pathname.replace(new RegExp(`^/${localePath}(?=/)`), "") : pathname;
}
function getLocalePathFromPathname(pathname, localeCodes) {
  const locale = pathname.split("/")[1];
  localeCodes = localeCodes || Object.values(LocaleEnum);
  return localeCodes.includes(locale) ? locale : null;
}
function generatePath(params) {
  const { path, locale, search } = params;
  const searchUrl = search || (typeof window !== "undefined" ? window.location.search : "");
  let localePath = getLocalePathFromPathname(path);
  if (localePath) {
    return `${path}${searchUrl}`;
  }
  localePath = locale || parseI18nLang(i18n_default.language);
  return `/${localePath}${path}${searchUrl}`;
}

exports.generatePath = generatePath;
exports.getLocalePathFromPathname = getLocalePathFromPathname;
exports.isRTLDirectionLanguage = isRTLDirectionLanguage;
exports.parseI18nLang = parseI18nLang;
exports.removeLangPrefix = removeLangPrefix;
exports.syncDocumentDirection = syncDocumentDirection;
//# sourceMappingURL=utils.js.map
//# sourceMappingURL=utils.js.map