diff --git a/.claude/settings.local.json b/.claude/settings.local.json
index cd46171f..34eacd48 100644
--- a/.claude/settings.local.json
+++ b/.claude/settings.local.json
@@ -1,10 +1,6 @@
{
"permissions": {
"allow": [
- "Bash(find node_modules/.pnpm -path */start-plugin-core/dist/esm/index.d.ts)",
- "Bash(find node_modules/.pnpm -path */start-plugin-core/dist/esm/*.d.ts)",
- "Bash(NITRO_PRESET=cloudflare-pages pnpm build)",
- "Bash(timeout 12 npx wrangler pages dev .)"
]
}
}
diff --git a/.env.example b/.env.example
index 14b85c21..e1501258 100644
--- a/.env.example
+++ b/.env.example
@@ -2,4 +2,7 @@ VITE_PRIVY_APP_ID=your-privy-app-id
# Set to "true" for Hyperliquid testnet, "false" for mainnet
VITE_HYPERLIQUID_TESTNET=true
-TURNSTILE_SITE_KEY=use-turnstile-key-from-usdh
\ No newline at end of file
+VITE_TURNSTILE_SITE_KEY=use-turnstile-key-from-usdh
+
+# Hypermiles points API
+VITE_HYPERMILES_API_URL=http://localhost:3001
diff --git a/src/components/trade/components/global-modals.tsx b/src/components/trade/components/global-modals.tsx
index 0c74cf13..421a3225 100644
--- a/src/components/trade/components/global-modals.tsx
+++ b/src/components/trade/components/global-modals.tsx
@@ -6,6 +6,7 @@ const FaucetModal = createLazyComponent(() => import("../tradebox/faucet-modal")
const GlobalSettingsDialog = createLazyComponent(() => import("./global-settings-dialog"), "GlobalSettingsDialog");
const SpotSwapModal = createLazyComponent(() => import("./spot-swap-modal"), "SpotSwapModal");
const CommandMenu = createLazyComponent(() => import("./command-menu"), "CommandMenu");
+const PointsModal = createLazyComponent(() => import("../tradebox/points-modal"), "PointsModal");
export function GlobalModals() {
return (
@@ -15,6 +16,7 @@ export function GlobalModals() {
+
);
}
diff --git a/src/components/trade/header/top-nav.tsx b/src/components/trade/header/top-nav.tsx
index 6f581b81..06f00281 100644
--- a/src/components/trade/header/top-nav.tsx
+++ b/src/components/trade/header/top-nav.tsx
@@ -1,6 +1,6 @@
import { t } from "@lingui/core/macro";
import { Trans } from "@lingui/react/macro";
-import { DownloadSimpleIcon, DropIcon, GearIcon, TerminalIcon } from "@phosphor-icons/react";
+import { DownloadSimpleIcon, DropIcon, GearIcon, TerminalIcon, TrophyIcon } from "@phosphor-icons/react";
import { Link } from "@tanstack/react-router";
import { useConnection } from "wagmi";
import { Button } from "@/components/ui/button";
@@ -9,6 +9,7 @@ import { useExchangeScope } from "@/providers/exchange-scope";
import {
useDepositModalActions,
useFaucetModalActions,
+ usePointsModalActions,
useSettingsDialogActions,
} from "@/stores/use-global-modal-store";
@@ -38,6 +39,7 @@ function getScopeAccentClass(scope: string): string {
export function TopNav() {
const { open: openDepositModal } = useDepositModalActions();
const { open: openFaucetModal } = useFaucetModalActions();
+ const { open: openPointsModal } = usePointsModalActions();
const { open: openSettingsDialog } = useSettingsDialogActions();
const { isConnected } = useConnection();
const { scope } = useExchangeScope();
@@ -79,26 +81,37 @@ export function TopNav() {
- {isConnected &&
- (isTestnet ? (
+ {isConnected && (
+ <>
-
- Faucet
+
+ Points
- ) : (
-
openDepositModal("deposit")}
- className="h-6 px-2 text-xs font-medium rounded-xs bg-fill-100 border border-border-300 text-text-950 hover:border-border-500 transition-colors inline-flex items-center gap-1 shadow-xs"
- >
-
- Deposit
-
- ))}
+ {isTestnet ? (
+
+
+ Faucet
+
+ ) : (
+
openDepositModal("deposit")}
+ className="h-6 px-2 text-xs font-medium rounded-xs bg-fill-100 border border-border-300 text-text-950 hover:border-border-500 transition-colors inline-flex items-center gap-1 shadow-xs"
+ >
+
+ Deposit
+
+ )}
+ >
+ )}
diff --git a/src/components/trade/tradebox/points-modal.tsx b/src/components/trade/tradebox/points-modal.tsx
new file mode 100644
index 00000000..9be2c766
--- /dev/null
+++ b/src/components/trade/tradebox/points-modal.tsx
@@ -0,0 +1,344 @@
+import { Trans } from "@lingui/react/macro";
+import {
+ ArrowRightIcon,
+ CheckIcon,
+ CopyIcon,
+ LightningIcon,
+ SpinnerGapIcon,
+ TrophyIcon,
+ UsersIcon,
+ WarningCircleIcon,
+} from "@phosphor-icons/react";
+import { usePrivy } from "@privy-io/react-auth";
+import { useEffect, useId, useState } from "react";
+import { useConnection } from "wagmi";
+import { Button } from "@/components/ui/button";
+import { Dialog, DialogContent, DialogHeader, DialogTitle } from "@/components/ui/dialog";
+import { InfoRow } from "@/components/ui/info-row";
+import { Input } from "@/components/ui/input";
+import { useCopyToClipboard } from "@/hooks/ui/use-copy-to-clipboard";
+import { usePointsModalActions, usePointsModalOpen } from "@/stores/use-global-modal-store";
+
+const API_URL = import.meta.env.VITE_HYPERMILES_API_URL;
+
+type ModalView = "loading" | "signup" | "summary" | "error";
+
+interface UserPoints {
+ walletAddress: string;
+ totalPoints: string;
+ rank: number;
+ referralCode: string;
+ firstOrderAt: string | null;
+ lastOrderAt: string | null;
+}
+
+interface EarnMethodProps {
+ icon: React.ReactNode;
+ title: React.ReactNode;
+ description: React.ReactNode;
+}
+
+function EarnMethod({ icon, title, description }: EarnMethodProps) {
+ return (
+
+
+ {icon}
+
+
+
{title}
+
{description}
+
+
+ );
+}
+
+function CopyableCode({ code }: { code: string }) {
+ const { copied, copy } = useCopyToClipboard();
+
+ return (
+
copy(code)}
+ >
+ {code}
+ {copied ? : }
+
+ );
+}
+
+function HowToEarn() {
+ return (
+
+
+ How to earn
+
+
+ }
+ title={Trade }
+ description={Earn points for every trade you execute on Hyperliquid }
+ />
+ }
+ title={Refer friends }
+ description={Share your referral code and earn bonus points when they trade }
+ />
+
+
+ );
+}
+
+export function PointsModal() {
+ const open = usePointsModalOpen();
+ const { close } = usePointsModalActions();
+ const { address } = useConnection();
+ const { user } = usePrivy();
+
+ const [view, setView] = useState
("loading");
+ const [userPoints, setUserPoints] = useState(null);
+ const [referralCode, setReferralCode] = useState("");
+ const [error, setError] = useState(null);
+ const [submitting, setSubmitting] = useState(false);
+ const referralInputId = useId();
+
+ function fetchPoints() {
+ if (!address) return;
+ setView("loading");
+ setError(null);
+ setReferralCode("");
+
+ fetch(`${API_URL}/user_points?user_address=${address}`)
+ .then((res) => {
+ if (res.ok) return res.json();
+ if (res.status === 404) return null;
+ throw new Error("Failed to fetch points");
+ })
+ .then((data) => {
+ if (data) {
+ setUserPoints(data);
+ setView("summary");
+ } else {
+ setView("signup");
+ }
+ })
+ .catch(() => {
+ setError("Unable to connect to points service");
+ setView("error");
+ });
+ }
+
+ // biome-ignore lint/correctness/useExhaustiveDependencies: fetchPoints is intentionally excluded to avoid re-creating on every render
+ useEffect(() => {
+ if (!open || !address) return;
+ fetchPoints();
+ }, [open, address]);
+
+ function handleClose() {
+ close();
+ setView("loading");
+ setUserPoints(null);
+ setError(null);
+ setReferralCode("");
+ setSubmitting(false);
+ }
+
+ async function handleSignup(withReferral: boolean) {
+ if (!address) return;
+ setSubmitting(true);
+ setError(null);
+
+ const body: Record = { walletAddress: address };
+ if (user?.id) {
+ body.privyUserId = user.id;
+ }
+ if (withReferral && referralCode.trim()) {
+ body.referralCode = referralCode.trim();
+ }
+
+ try {
+ const res = await fetch(`${API_URL}/users`, {
+ method: "POST",
+ headers: { "Content-Type": "application/json" },
+ body: JSON.stringify(body),
+ });
+
+ if (!res.ok) {
+ const data = await res.json().catch(() => null);
+ throw new Error(data?.error ?? "Signup failed");
+ }
+
+ const created = await res.json();
+ setUserPoints({
+ walletAddress: created.walletAddress,
+ totalPoints: created.totalPoints ?? "0",
+ rank: 0,
+ referralCode: created.referralCode,
+ firstOrderAt: null,
+ lastOrderAt: null,
+ });
+ setView("summary");
+ } catch (err) {
+ setError(err instanceof Error ? err.message : "Signup failed");
+ } finally {
+ setSubmitting(false);
+ }
+ }
+
+ if (view === "summary" && userPoints) {
+ return (
+
+
+
+
+ Hypermiles
+
+
+
+
+
+
+
+
+ Total Points
+
+
{userPoints.totalPoints}
+
+ {userPoints.rank > 0 && (
+
+
+ #{userPoints.rank}
+
+ )}
+
+
+
+
+ Your Referral Code}
+ value={ }
+ />
+
+
+
+
+
+
+ );
+ }
+
+ if (view === "error") {
+ return (
+
+
+
+
+ Hypermiles
+
+
+
+
+
+
+
{error}
+
+
+ Close
+
+
+ Retry
+
+
+
+
+
+ );
+ }
+
+ if (view === "signup") {
+ return (
+
+
+
+
+ Join Hypermiles
+
+
+
+
+
+ Earn points every time you trade on Hyperliquid. Refer friends to earn even more.
+
+
+
+
+
+
+ Referral Code (optional)
+
+
setReferralCode(e.target.value)}
+ placeholder="Enter code"
+ disabled={submitting}
+ />
+ {error &&
{error}
}
+
+
+
+
handleSignup(!!referralCode.trim())}
+ disabled={submitting}
+ className="w-full"
+ >
+ {submitting ? (
+
+ ) : (
+ <>
+ Get Started
+
+ >
+ )}
+
+ {referralCode.trim() && (
+
{
+ setReferralCode("");
+ handleSignup(false);
+ }}
+ disabled={submitting}
+ >
+ Skip referral
+
+ )}
+
+
+
+
+ );
+ }
+
+ return (
+
+
+
+
+ Hypermiles
+
+
+
+
+
+ Loading points...
+
+
+
+
+ );
+}
diff --git a/src/locales/ar/messages.po b/src/locales/ar/messages.po
index 2e3093c5..4d3e8deb 100644
--- a/src/locales/ar/messages.po
+++ b/src/locales/ar/messages.po
@@ -304,6 +304,7 @@ msgid "Claiming USDH"
msgstr ""
#: src/components/trade/positions/position-actions-dropdown.tsx
+#: src/components/trade/tradebox/points-modal.tsx
#: src/components/ui/dialog.tsx
#: src/components/ui/sheet.tsx
msgid "Close"
@@ -340,7 +341,6 @@ msgstr ""
msgid "Confirm in wallet"
msgstr ""
-#: src/components/trade/components/wallet-dialog.tsx
#~ msgid "Connect"
#~ msgstr ""
@@ -546,6 +546,14 @@ msgstr ""
msgid "Duration (Minutes)"
msgstr ""
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Earn points every time you trade on Hyperliquid. Refer friends to earn even more."
+msgstr ""
+
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Earn points for every trade you execute on Hyperliquid"
+msgstr ""
+
#: src/components/trade/positions/positions-tab.tsx
msgid "Edit TP/SL"
msgstr ""
@@ -760,6 +768,10 @@ msgstr ""
#~ msgid "Gas:"
#~ msgstr "الغاز:"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Get Started"
+msgstr ""
+
#: src/components/ui/pagination.tsx
#~ msgid "Go to next page"
#~ msgstr "الذهاب للصفحة التالية"
@@ -777,6 +789,16 @@ msgstr "الذهاب إلى منصة التداول"
msgid "Hide small"
msgstr ""
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "How to earn"
+msgstr ""
+
+#: src/components/trade/tradebox/points-modal.tsx
+#: src/components/trade/tradebox/points-modal.tsx
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Hypermiles"
+msgstr ""
+
#: src/components/trade/tradebox/account-panel.tsx
msgid "In Orders"
msgstr ""
@@ -785,7 +807,6 @@ msgstr ""
#~ msgid "In Use"
#~ msgstr "قيد الاستخدام"
-#: src/components/trade/components/wallet-dialog.tsx
#~ msgid "Install a wallet extension to continue"
#~ msgstr ""
@@ -833,6 +854,10 @@ msgstr ""
msgid "Isolated"
msgstr "معزول"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Join Hypermiles"
+msgstr ""
+
#: src/components/trade/footer/footer-bar.tsx
#~ msgid "Latency:"
#~ msgstr "التأخير:"
@@ -919,6 +944,10 @@ msgstr "جارٍ تحميل الأوامر المفتوحة..."
msgid "Loading order history..."
msgstr ""
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Loading points..."
+msgstr ""
+
#: src/components/trade/positions/positions-tab.tsx
msgid "Loading positions..."
msgstr "جاري تحميل المراكز..."
@@ -1073,7 +1102,6 @@ msgstr ""
msgid "Minimum withdrawal is ${MIN_WITHDRAW_USD}"
msgstr ""
-#: src/components/trade/components/wallet-dialog.tsx
#~ msgid "Mock Wallet (Testing)"
#~ msgstr ""
@@ -1198,7 +1226,6 @@ msgstr ""
#~ msgid "No user address"
#~ msgstr ""
-#: src/components/trade/components/wallet-dialog.tsx
#~ msgid "No wallets found"
#~ msgstr "لم يتم العثور على محافظ"
@@ -1206,7 +1233,6 @@ msgstr ""
msgid "Not connected"
msgstr "غير متصل"
-#: src/components/trade/header/top-nav.tsx
#~ msgid "Notifications"
#~ msgstr "الإشعارات"
@@ -1338,6 +1364,10 @@ msgstr ""
msgid "PNL"
msgstr "الربح والخسارة"
+#: src/components/trade/header/top-nav.tsx
+msgid "Points"
+msgstr ""
+
#: src/components/trade/components/wallet-dialog.tsx
#~ msgid "Popular"
#~ msgstr ""
@@ -1422,6 +1452,14 @@ msgstr ""
msgid "Reduce Only"
msgstr "تقليل فقط"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Refer friends"
+msgstr ""
+
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Referral Code (optional)"
+msgstr ""
+
#: src/components/pages/builder-page.tsx
#~ msgid "Register Another"
#~ msgstr ""
@@ -1451,6 +1489,7 @@ msgstr ""
#: src/components/trade/tradebox/deposit-modal.tsx
#: src/components/trade/tradebox/faucet-modal.tsx
#: src/components/trade/tradebox/leverage-control.tsx
+#: src/components/trade/tradebox/points-modal.tsx
msgid "Retry"
msgstr ""
@@ -1600,6 +1639,10 @@ msgstr ""
msgid "Settings"
msgstr "الإعدادات"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Share your referral code and earn bonus points when they trade"
+msgstr ""
+
#: src/components/trade/positions/position-limit-close-modal.tsx
#: src/components/trade/positions/position-tpsl-modal.tsx
#: src/components/trade/positions/positions-tab.tsx
@@ -1682,6 +1725,10 @@ msgstr "الحجم"
msgid "Size exceeds position"
msgstr ""
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Skip referral"
+msgstr ""
+
#: src/components/trade/positions/orders-tab.tsx
#~ msgid "SL"
#~ msgstr ""
@@ -1945,6 +1992,10 @@ msgstr "تبديل وضع الحجم"
msgid "Total"
msgstr "الإجمالي"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Total Points"
+msgstr ""
+
#: src/components/trade/positions/twap-tab.tsx
#~ msgid "Total Size"
#~ msgstr "الحجم الإجمالي"
@@ -1980,9 +2031,9 @@ msgstr ""
msgid "TP/SL"
msgstr "TP/SL"
-#: src/components/trade/header/top-nav.tsx
-#~ msgid "Trade"
-#~ msgstr "تداول"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Trade"
+msgstr "تداول"
#: src/components/trade/positions/history-tab.tsx
#~ msgid "Trade ClockCounterClockwise"
@@ -2203,3 +2254,7 @@ msgstr ""
#: src/components/pages/builder-page.tsx
#~ msgid "You can revoke permissions at any time by registering a new approval with 0% fee rate. Builder codes are processed entirely onchain as part of the fee logic."
#~ msgstr ""
+
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Your Referral Code"
+msgstr ""
diff --git a/src/locales/en/messages.po b/src/locales/en/messages.po
index 7ae91607..edb9e674 100644
--- a/src/locales/en/messages.po
+++ b/src/locales/en/messages.po
@@ -304,6 +304,7 @@ msgid "Claiming USDH"
msgstr "Claiming USDH"
#: src/components/trade/positions/position-actions-dropdown.tsx
+#: src/components/trade/tradebox/points-modal.tsx
#: src/components/ui/dialog.tsx
#: src/components/ui/sheet.tsx
msgid "Close"
@@ -546,6 +547,14 @@ msgstr "Done"
msgid "Duration (Minutes)"
msgstr "Duration (Minutes)"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Earn points every time you trade on Hyperliquid. Refer friends to earn even more."
+msgstr "Earn points every time you trade on Hyperliquid. Refer friends to earn even more."
+
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Earn points for every trade you execute on Hyperliquid"
+msgstr "Earn points for every trade you execute on Hyperliquid"
+
#: src/components/trade/positions/positions-tab.tsx
msgid "Edit TP/SL"
msgstr "Edit TP/SL"
@@ -760,6 +769,10 @@ msgstr "Funding History"
#~ msgid "Gas:"
#~ msgstr "Gas:"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Get Started"
+msgstr "Get Started"
+
#: src/components/ui/pagination.tsx
#~ msgid "Go to next page"
#~ msgstr "Go to next page"
@@ -777,6 +790,16 @@ msgstr "Go to trading terminal"
msgid "Hide small"
msgstr "Hide small"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "How to earn"
+msgstr "How to earn"
+
+#: src/components/trade/tradebox/points-modal.tsx
+#: src/components/trade/tradebox/points-modal.tsx
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Hypermiles"
+msgstr "Hypermiles"
+
#: src/components/trade/tradebox/account-panel.tsx
msgid "In Orders"
msgstr "In Orders"
@@ -833,6 +856,10 @@ msgstr "Invalid amount"
msgid "Isolated"
msgstr "Isolated"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Join Hypermiles"
+msgstr "Join Hypermiles"
+
#: src/components/trade/components/global-settings-dialog.tsx
#~ msgid "Language"
#~ msgstr "Language"
@@ -923,6 +950,10 @@ msgstr "Loading open orders..."
msgid "Loading order history..."
msgstr "Loading order history..."
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Loading points..."
+msgstr "Loading points..."
+
#: src/components/trade/positions/positions-tab.tsx
msgid "Loading positions..."
msgstr "Loading positions..."
@@ -1342,6 +1373,10 @@ msgstr "Place Limit Close"
msgid "PNL"
msgstr "PNL"
+#: src/components/trade/header/top-nav.tsx
+msgid "Points"
+msgstr "Points"
+
#: src/components/trade/components/wallet-dialog.tsx
#~ msgid "Popular"
#~ msgstr "Popular"
@@ -1426,6 +1461,14 @@ msgstr "Reduce"
msgid "Reduce Only"
msgstr "Reduce Only"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Refer friends"
+msgstr "Refer friends"
+
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Referral Code (optional)"
+msgstr "Referral Code (optional)"
+
#: src/components/pages/builder-page.tsx
#~ msgid "Register Another"
#~ msgstr "Register Another"
@@ -1455,6 +1498,7 @@ msgstr "Requirement"
#: src/components/trade/tradebox/deposit-modal.tsx
#: src/components/trade/tradebox/faucet-modal.tsx
#: src/components/trade/tradebox/leverage-control.tsx
+#: src/components/trade/tradebox/points-modal.tsx
msgid "Retry"
msgstr "Retry"
@@ -1604,6 +1648,10 @@ msgstr "Set to {p}%"
msgid "Settings"
msgstr "Settings"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Share your referral code and earn bonus points when they trade"
+msgstr "Share your referral code and earn bonus points when they trade"
+
#: src/components/trade/positions/position-limit-close-modal.tsx
#: src/components/trade/positions/position-tpsl-modal.tsx
#: src/components/trade/positions/positions-tab.tsx
@@ -1686,6 +1734,10 @@ msgstr "Size"
msgid "Size exceeds position"
msgstr "Size exceeds position"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Skip referral"
+msgstr "Skip referral"
+
#: src/components/trade/positions/orders-tab.tsx
#~ msgid "SL"
#~ msgstr "SL"
@@ -1949,6 +2001,10 @@ msgstr "Toggle size mode"
msgid "Total"
msgstr "Total"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Total Points"
+msgstr "Total Points"
+
#: src/components/trade/positions/twap-tab.tsx
#~ msgid "Total Size"
#~ msgstr "Total Size"
@@ -1984,9 +2040,9 @@ msgstr "TP Price"
msgid "TP/SL"
msgstr "TP/SL"
-#: src/components/trade/header/top-nav.tsx
-#~ msgid "Trade"
-#~ msgstr "Trade"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Trade"
+msgstr "Trade"
#: src/components/trade/positions/history-tab.tsx
#~ msgid "Trade ClockCounterClockwise"
@@ -2211,3 +2267,7 @@ msgstr "Yes"
#: src/components/pages/builder-page.tsx
#~ msgid "You can revoke permissions at any time by registering a new approval with 0% fee rate. Builder codes are processed entirely onchain as part of the fee logic."
#~ msgstr "You can revoke permissions at any time by registering a new approval with 0% fee rate. Builder codes are processed entirely onchain as part of the fee logic."
+
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Your Referral Code"
+msgstr "Your Referral Code"
diff --git a/src/locales/es/messages.po b/src/locales/es/messages.po
index a78b5aae..86b5e9ee 100644
--- a/src/locales/es/messages.po
+++ b/src/locales/es/messages.po
@@ -304,6 +304,7 @@ msgid "Claiming USDH"
msgstr ""
#: src/components/trade/positions/position-actions-dropdown.tsx
+#: src/components/trade/tradebox/points-modal.tsx
#: src/components/ui/dialog.tsx
#: src/components/ui/sheet.tsx
msgid "Close"
@@ -340,7 +341,6 @@ msgstr ""
msgid "Confirm in wallet"
msgstr ""
-#: src/components/trade/components/wallet-dialog.tsx
#~ msgid "Connect"
#~ msgstr ""
@@ -546,6 +546,14 @@ msgstr ""
msgid "Duration (Minutes)"
msgstr ""
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Earn points every time you trade on Hyperliquid. Refer friends to earn even more."
+msgstr ""
+
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Earn points for every trade you execute on Hyperliquid"
+msgstr ""
+
#: src/components/trade/positions/positions-tab.tsx
msgid "Edit TP/SL"
msgstr ""
@@ -760,6 +768,10 @@ msgstr ""
#~ msgid "Gas:"
#~ msgstr "Gas:"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Get Started"
+msgstr ""
+
#: src/components/ui/pagination.tsx
#~ msgid "Go to next page"
#~ msgstr "Ir a página siguiente"
@@ -777,6 +789,16 @@ msgstr "Ir al terminal de trading"
msgid "Hide small"
msgstr ""
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "How to earn"
+msgstr ""
+
+#: src/components/trade/tradebox/points-modal.tsx
+#: src/components/trade/tradebox/points-modal.tsx
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Hypermiles"
+msgstr ""
+
#: src/components/trade/tradebox/account-panel.tsx
msgid "In Orders"
msgstr ""
@@ -785,7 +807,6 @@ msgstr ""
#~ msgid "In Use"
#~ msgstr "En uso"
-#: src/components/trade/components/wallet-dialog.tsx
#~ msgid "Install a wallet extension to continue"
#~ msgstr ""
@@ -833,6 +854,10 @@ msgstr ""
msgid "Isolated"
msgstr "Aislado"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Join Hypermiles"
+msgstr ""
+
#: src/components/trade/footer/footer-bar.tsx
#~ msgid "Latency:"
#~ msgstr "Latencia:"
@@ -919,6 +944,10 @@ msgstr "Cargando órdenes abiertas..."
msgid "Loading order history..."
msgstr ""
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Loading points..."
+msgstr ""
+
#: src/components/trade/positions/positions-tab.tsx
msgid "Loading positions..."
msgstr "Cargando posiciones..."
@@ -1073,7 +1102,6 @@ msgstr ""
msgid "Minimum withdrawal is ${MIN_WITHDRAW_USD}"
msgstr ""
-#: src/components/trade/components/wallet-dialog.tsx
#~ msgid "Mock Wallet (Testing)"
#~ msgstr ""
@@ -1198,7 +1226,6 @@ msgstr ""
#~ msgid "No user address"
#~ msgstr ""
-#: src/components/trade/components/wallet-dialog.tsx
#~ msgid "No wallets found"
#~ msgstr "No se encontraron billeteras"
@@ -1206,7 +1233,6 @@ msgstr ""
msgid "Not connected"
msgstr "No conectado"
-#: src/components/trade/header/top-nav.tsx
#~ msgid "Notifications"
#~ msgstr "Notificaciones"
@@ -1338,6 +1364,10 @@ msgstr ""
msgid "PNL"
msgstr "PNL"
+#: src/components/trade/header/top-nav.tsx
+msgid "Points"
+msgstr ""
+
#: src/components/trade/components/wallet-dialog.tsx
#~ msgid "Popular"
#~ msgstr ""
@@ -1422,6 +1452,14 @@ msgstr ""
msgid "Reduce Only"
msgstr "Solo reducir"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Refer friends"
+msgstr ""
+
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Referral Code (optional)"
+msgstr ""
+
#: src/components/pages/builder-page.tsx
#~ msgid "Register Another"
#~ msgstr ""
@@ -1451,6 +1489,7 @@ msgstr ""
#: src/components/trade/tradebox/deposit-modal.tsx
#: src/components/trade/tradebox/faucet-modal.tsx
#: src/components/trade/tradebox/leverage-control.tsx
+#: src/components/trade/tradebox/points-modal.tsx
msgid "Retry"
msgstr ""
@@ -1600,6 +1639,10 @@ msgstr ""
msgid "Settings"
msgstr "Configuración"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Share your referral code and earn bonus points when they trade"
+msgstr ""
+
#: src/components/trade/positions/position-limit-close-modal.tsx
#: src/components/trade/positions/position-tpsl-modal.tsx
#: src/components/trade/positions/positions-tab.tsx
@@ -1682,6 +1725,10 @@ msgstr "Tamaño"
msgid "Size exceeds position"
msgstr ""
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Skip referral"
+msgstr ""
+
#: src/components/trade/positions/orders-tab.tsx
#~ msgid "SL"
#~ msgstr ""
@@ -1945,6 +1992,10 @@ msgstr "Cambiar modo de tamaño"
msgid "Total"
msgstr "Total"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Total Points"
+msgstr ""
+
#: src/components/trade/positions/twap-tab.tsx
#~ msgid "Total Size"
#~ msgstr "Tamaño total"
@@ -1980,9 +2031,9 @@ msgstr ""
msgid "TP/SL"
msgstr "TP/SL"
-#: src/components/trade/header/top-nav.tsx
-#~ msgid "Trade"
-#~ msgstr "Operar"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Trade"
+msgstr "Operar"
#: src/components/trade/positions/history-tab.tsx
#~ msgid "Trade ClockCounterClockwise"
@@ -2203,3 +2254,7 @@ msgstr ""
#: src/components/pages/builder-page.tsx
#~ msgid "You can revoke permissions at any time by registering a new approval with 0% fee rate. Builder codes are processed entirely onchain as part of the fee logic."
#~ msgstr ""
+
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Your Referral Code"
+msgstr ""
diff --git a/src/locales/fr/messages.po b/src/locales/fr/messages.po
index d75b7640..e555c780 100644
--- a/src/locales/fr/messages.po
+++ b/src/locales/fr/messages.po
@@ -304,6 +304,7 @@ msgid "Claiming USDH"
msgstr ""
#: src/components/trade/positions/position-actions-dropdown.tsx
+#: src/components/trade/tradebox/points-modal.tsx
#: src/components/ui/dialog.tsx
#: src/components/ui/sheet.tsx
msgid "Close"
@@ -340,7 +341,6 @@ msgstr ""
msgid "Confirm in wallet"
msgstr ""
-#: src/components/trade/components/wallet-dialog.tsx
#~ msgid "Connect"
#~ msgstr ""
@@ -546,6 +546,14 @@ msgstr ""
msgid "Duration (Minutes)"
msgstr ""
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Earn points every time you trade on Hyperliquid. Refer friends to earn even more."
+msgstr ""
+
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Earn points for every trade you execute on Hyperliquid"
+msgstr ""
+
#: src/components/trade/positions/positions-tab.tsx
msgid "Edit TP/SL"
msgstr ""
@@ -760,6 +768,10 @@ msgstr ""
#~ msgid "Gas:"
#~ msgstr "Gas :"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Get Started"
+msgstr ""
+
#: src/components/ui/pagination.tsx
#~ msgid "Go to next page"
#~ msgstr "Aller à la page suivante"
@@ -777,6 +789,16 @@ msgstr "Aller au terminal de trading"
msgid "Hide small"
msgstr ""
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "How to earn"
+msgstr ""
+
+#: src/components/trade/tradebox/points-modal.tsx
+#: src/components/trade/tradebox/points-modal.tsx
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Hypermiles"
+msgstr ""
+
#: src/components/trade/tradebox/account-panel.tsx
msgid "In Orders"
msgstr ""
@@ -785,7 +807,6 @@ msgstr ""
#~ msgid "In Use"
#~ msgstr "En cours d'utilisation"
-#: src/components/trade/components/wallet-dialog.tsx
#~ msgid "Install a wallet extension to continue"
#~ msgstr ""
@@ -833,6 +854,10 @@ msgstr ""
msgid "Isolated"
msgstr "Isolé"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Join Hypermiles"
+msgstr ""
+
#: src/components/trade/footer/footer-bar.tsx
#~ msgid "Latency:"
#~ msgstr "Latence :"
@@ -919,6 +944,10 @@ msgstr "Chargement des ordres ouverts..."
msgid "Loading order history..."
msgstr ""
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Loading points..."
+msgstr ""
+
#: src/components/trade/positions/positions-tab.tsx
msgid "Loading positions..."
msgstr "Chargement des positions..."
@@ -1073,7 +1102,6 @@ msgstr ""
msgid "Minimum withdrawal is ${MIN_WITHDRAW_USD}"
msgstr ""
-#: src/components/trade/components/wallet-dialog.tsx
#~ msgid "Mock Wallet (Testing)"
#~ msgstr ""
@@ -1198,7 +1226,6 @@ msgstr ""
#~ msgid "No user address"
#~ msgstr ""
-#: src/components/trade/components/wallet-dialog.tsx
#~ msgid "No wallets found"
#~ msgstr "Aucun portefeuille trouvé"
@@ -1206,7 +1233,6 @@ msgstr ""
msgid "Not connected"
msgstr "Non connecté"
-#: src/components/trade/header/top-nav.tsx
#~ msgid "Notifications"
#~ msgstr "Notifications"
@@ -1338,6 +1364,10 @@ msgstr ""
msgid "PNL"
msgstr "PNL"
+#: src/components/trade/header/top-nav.tsx
+msgid "Points"
+msgstr ""
+
#: src/components/trade/components/wallet-dialog.tsx
#~ msgid "Popular"
#~ msgstr ""
@@ -1422,6 +1452,14 @@ msgstr ""
msgid "Reduce Only"
msgstr "Réduction uniquement"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Refer friends"
+msgstr ""
+
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Referral Code (optional)"
+msgstr ""
+
#: src/components/pages/builder-page.tsx
#~ msgid "Register Another"
#~ msgstr ""
@@ -1451,6 +1489,7 @@ msgstr ""
#: src/components/trade/tradebox/deposit-modal.tsx
#: src/components/trade/tradebox/faucet-modal.tsx
#: src/components/trade/tradebox/leverage-control.tsx
+#: src/components/trade/tradebox/points-modal.tsx
msgid "Retry"
msgstr ""
@@ -1600,6 +1639,10 @@ msgstr ""
msgid "Settings"
msgstr "Paramètres"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Share your referral code and earn bonus points when they trade"
+msgstr ""
+
#: src/components/trade/positions/position-limit-close-modal.tsx
#: src/components/trade/positions/position-tpsl-modal.tsx
#: src/components/trade/positions/positions-tab.tsx
@@ -1682,6 +1725,10 @@ msgstr "Taille"
msgid "Size exceeds position"
msgstr ""
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Skip referral"
+msgstr ""
+
#: src/components/trade/positions/orders-tab.tsx
#~ msgid "SL"
#~ msgstr ""
@@ -1945,6 +1992,10 @@ msgstr "Basculer le mode de taille"
msgid "Total"
msgstr "Total"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Total Points"
+msgstr ""
+
#: src/components/trade/positions/twap-tab.tsx
#~ msgid "Total Size"
#~ msgstr "Taille totale"
@@ -1980,9 +2031,9 @@ msgstr ""
msgid "TP/SL"
msgstr "TP/SL"
-#: src/components/trade/header/top-nav.tsx
-#~ msgid "Trade"
-#~ msgstr "Trader"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Trade"
+msgstr "Trader"
#: src/components/trade/positions/history-tab.tsx
#~ msgid "Trade ClockCounterClockwise"
@@ -2203,3 +2254,7 @@ msgstr ""
#: src/components/pages/builder-page.tsx
#~ msgid "You can revoke permissions at any time by registering a new approval with 0% fee rate. Builder codes are processed entirely onchain as part of the fee logic."
#~ msgstr ""
+
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Your Referral Code"
+msgstr ""
diff --git a/src/locales/hi/messages.po b/src/locales/hi/messages.po
index 51ef4f7c..eb0a8bbf 100644
--- a/src/locales/hi/messages.po
+++ b/src/locales/hi/messages.po
@@ -304,6 +304,7 @@ msgid "Claiming USDH"
msgstr ""
#: src/components/trade/positions/position-actions-dropdown.tsx
+#: src/components/trade/tradebox/points-modal.tsx
#: src/components/ui/dialog.tsx
#: src/components/ui/sheet.tsx
msgid "Close"
@@ -340,7 +341,6 @@ msgstr ""
msgid "Confirm in wallet"
msgstr ""
-#: src/components/trade/components/wallet-dialog.tsx
#~ msgid "Connect"
#~ msgstr ""
@@ -546,6 +546,14 @@ msgstr ""
msgid "Duration (Minutes)"
msgstr ""
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Earn points every time you trade on Hyperliquid. Refer friends to earn even more."
+msgstr ""
+
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Earn points for every trade you execute on Hyperliquid"
+msgstr ""
+
#: src/components/trade/positions/positions-tab.tsx
msgid "Edit TP/SL"
msgstr ""
@@ -760,6 +768,10 @@ msgstr ""
#~ msgid "Gas:"
#~ msgstr "गैस:"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Get Started"
+msgstr ""
+
#: src/components/ui/pagination.tsx
#~ msgid "Go to next page"
#~ msgstr "अगले पृष्ठ पर जाएं"
@@ -777,6 +789,16 @@ msgstr "ट्रेडिंग टर्मिनल पर जाएं"
msgid "Hide small"
msgstr ""
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "How to earn"
+msgstr ""
+
+#: src/components/trade/tradebox/points-modal.tsx
+#: src/components/trade/tradebox/points-modal.tsx
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Hypermiles"
+msgstr ""
+
#: src/components/trade/tradebox/account-panel.tsx
msgid "In Orders"
msgstr ""
@@ -785,7 +807,6 @@ msgstr ""
#~ msgid "In Use"
#~ msgstr "उपयोग में"
-#: src/components/trade/components/wallet-dialog.tsx
#~ msgid "Install a wallet extension to continue"
#~ msgstr ""
@@ -833,6 +854,10 @@ msgstr ""
msgid "Isolated"
msgstr "आइसोलेटेड"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Join Hypermiles"
+msgstr ""
+
#: src/components/trade/footer/footer-bar.tsx
#~ msgid "Latency:"
#~ msgstr "लेटेंसी:"
@@ -919,6 +944,10 @@ msgstr "खुले ऑर्डर लोड हो रहे हैं..."
msgid "Loading order history..."
msgstr ""
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Loading points..."
+msgstr ""
+
#: src/components/trade/positions/positions-tab.tsx
msgid "Loading positions..."
msgstr "पोजीशन लोड हो रहे हैं..."
@@ -1073,7 +1102,6 @@ msgstr ""
msgid "Minimum withdrawal is ${MIN_WITHDRAW_USD}"
msgstr ""
-#: src/components/trade/components/wallet-dialog.tsx
#~ msgid "Mock Wallet (Testing)"
#~ msgstr ""
@@ -1198,7 +1226,6 @@ msgstr ""
#~ msgid "No user address"
#~ msgstr ""
-#: src/components/trade/components/wallet-dialog.tsx
#~ msgid "No wallets found"
#~ msgstr "कोई वॉलेट नहीं मिला"
@@ -1206,7 +1233,6 @@ msgstr ""
msgid "Not connected"
msgstr "कनेक्टेड नहीं"
-#: src/components/trade/header/top-nav.tsx
#~ msgid "Notifications"
#~ msgstr "सूचनाएं"
@@ -1338,6 +1364,10 @@ msgstr ""
msgid "PNL"
msgstr "PNL"
+#: src/components/trade/header/top-nav.tsx
+msgid "Points"
+msgstr ""
+
#: src/components/trade/components/wallet-dialog.tsx
#~ msgid "Popular"
#~ msgstr ""
@@ -1422,6 +1452,14 @@ msgstr ""
msgid "Reduce Only"
msgstr "केवल कम करें"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Refer friends"
+msgstr ""
+
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Referral Code (optional)"
+msgstr ""
+
#: src/components/pages/builder-page.tsx
#~ msgid "Register Another"
#~ msgstr ""
@@ -1451,6 +1489,7 @@ msgstr ""
#: src/components/trade/tradebox/deposit-modal.tsx
#: src/components/trade/tradebox/faucet-modal.tsx
#: src/components/trade/tradebox/leverage-control.tsx
+#: src/components/trade/tradebox/points-modal.tsx
msgid "Retry"
msgstr ""
@@ -1600,6 +1639,10 @@ msgstr ""
msgid "Settings"
msgstr "सेटिंग्स"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Share your referral code and earn bonus points when they trade"
+msgstr ""
+
#: src/components/trade/positions/position-limit-close-modal.tsx
#: src/components/trade/positions/position-tpsl-modal.tsx
#: src/components/trade/positions/positions-tab.tsx
@@ -1682,6 +1725,10 @@ msgstr "आकार"
msgid "Size exceeds position"
msgstr ""
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Skip referral"
+msgstr ""
+
#: src/components/trade/positions/orders-tab.tsx
#~ msgid "SL"
#~ msgstr ""
@@ -1945,6 +1992,10 @@ msgstr "साइज मोड टॉगल करें"
msgid "Total"
msgstr "कुल"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Total Points"
+msgstr ""
+
#: src/components/trade/positions/twap-tab.tsx
#~ msgid "Total Size"
#~ msgstr "कुल आकार"
@@ -1980,9 +2031,9 @@ msgstr ""
msgid "TP/SL"
msgstr "TP/SL"
-#: src/components/trade/header/top-nav.tsx
-#~ msgid "Trade"
-#~ msgstr "ट्रेड"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Trade"
+msgstr "ट्रेड"
#: src/components/trade/positions/history-tab.tsx
#~ msgid "Trade ClockCounterClockwise"
@@ -2203,3 +2254,7 @@ msgstr ""
#: src/components/pages/builder-page.tsx
#~ msgid "You can revoke permissions at any time by registering a new approval with 0% fee rate. Builder codes are processed entirely onchain as part of the fee logic."
#~ msgstr ""
+
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Your Referral Code"
+msgstr ""
diff --git a/src/locales/zh/messages.po b/src/locales/zh/messages.po
index 5c1091e6..37c2a0a7 100644
--- a/src/locales/zh/messages.po
+++ b/src/locales/zh/messages.po
@@ -304,6 +304,7 @@ msgid "Claiming USDH"
msgstr ""
#: src/components/trade/positions/position-actions-dropdown.tsx
+#: src/components/trade/tradebox/points-modal.tsx
#: src/components/ui/dialog.tsx
#: src/components/ui/sheet.tsx
msgid "Close"
@@ -340,7 +341,6 @@ msgstr ""
msgid "Confirm in wallet"
msgstr ""
-#: src/components/trade/components/wallet-dialog.tsx
#~ msgid "Connect"
#~ msgstr ""
@@ -546,6 +546,14 @@ msgstr ""
msgid "Duration (Minutes)"
msgstr ""
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Earn points every time you trade on Hyperliquid. Refer friends to earn even more."
+msgstr ""
+
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Earn points for every trade you execute on Hyperliquid"
+msgstr ""
+
#: src/components/trade/positions/positions-tab.tsx
msgid "Edit TP/SL"
msgstr ""
@@ -760,6 +768,10 @@ msgstr ""
#~ msgid "Gas:"
#~ msgstr "Gas:"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Get Started"
+msgstr ""
+
#: src/components/ui/pagination.tsx
#~ msgid "Go to next page"
#~ msgstr "下一页"
@@ -777,6 +789,16 @@ msgstr "前往交易终端"
msgid "Hide small"
msgstr ""
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "How to earn"
+msgstr ""
+
+#: src/components/trade/tradebox/points-modal.tsx
+#: src/components/trade/tradebox/points-modal.tsx
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Hypermiles"
+msgstr ""
+
#: src/components/trade/tradebox/account-panel.tsx
msgid "In Orders"
msgstr ""
@@ -785,7 +807,6 @@ msgstr ""
#~ msgid "In Use"
#~ msgstr "使用中"
-#: src/components/trade/components/wallet-dialog.tsx
#~ msgid "Install a wallet extension to continue"
#~ msgstr ""
@@ -833,6 +854,10 @@ msgstr ""
msgid "Isolated"
msgstr "逐仓"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Join Hypermiles"
+msgstr ""
+
#: src/components/trade/footer/footer-bar.tsx
#~ msgid "Latency:"
#~ msgstr "延迟:"
@@ -919,6 +944,10 @@ msgstr "加载未成交订单中..."
msgid "Loading order history..."
msgstr ""
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Loading points..."
+msgstr ""
+
#: src/components/trade/positions/positions-tab.tsx
msgid "Loading positions..."
msgstr "加载仓位中..."
@@ -1073,7 +1102,6 @@ msgstr ""
msgid "Minimum withdrawal is ${MIN_WITHDRAW_USD}"
msgstr ""
-#: src/components/trade/components/wallet-dialog.tsx
#~ msgid "Mock Wallet (Testing)"
#~ msgstr ""
@@ -1198,7 +1226,6 @@ msgstr ""
#~ msgid "No user address"
#~ msgstr ""
-#: src/components/trade/components/wallet-dialog.tsx
#~ msgid "No wallets found"
#~ msgstr "未找到钱包"
@@ -1206,7 +1233,6 @@ msgstr ""
msgid "Not connected"
msgstr "未连接"
-#: src/components/trade/header/top-nav.tsx
#~ msgid "Notifications"
#~ msgstr "通知"
@@ -1338,6 +1364,10 @@ msgstr ""
msgid "PNL"
msgstr "盈亏"
+#: src/components/trade/header/top-nav.tsx
+msgid "Points"
+msgstr ""
+
#: src/components/trade/components/wallet-dialog.tsx
#~ msgid "Popular"
#~ msgstr ""
@@ -1422,6 +1452,14 @@ msgstr ""
msgid "Reduce Only"
msgstr "只减仓"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Refer friends"
+msgstr ""
+
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Referral Code (optional)"
+msgstr ""
+
#: src/components/pages/builder-page.tsx
#~ msgid "Register Another"
#~ msgstr ""
@@ -1451,6 +1489,7 @@ msgstr ""
#: src/components/trade/tradebox/deposit-modal.tsx
#: src/components/trade/tradebox/faucet-modal.tsx
#: src/components/trade/tradebox/leverage-control.tsx
+#: src/components/trade/tradebox/points-modal.tsx
msgid "Retry"
msgstr ""
@@ -1600,6 +1639,10 @@ msgstr ""
msgid "Settings"
msgstr "设置"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Share your referral code and earn bonus points when they trade"
+msgstr ""
+
#: src/components/trade/positions/position-limit-close-modal.tsx
#: src/components/trade/positions/position-tpsl-modal.tsx
#: src/components/trade/positions/positions-tab.tsx
@@ -1682,6 +1725,10 @@ msgstr "数量"
msgid "Size exceeds position"
msgstr ""
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Skip referral"
+msgstr ""
+
#: src/components/trade/positions/orders-tab.tsx
#~ msgid "SL"
#~ msgstr ""
@@ -1945,6 +1992,10 @@ msgstr "切换数量模式"
msgid "Total"
msgstr "合计"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Total Points"
+msgstr ""
+
#: src/components/trade/positions/twap-tab.tsx
#~ msgid "Total Size"
#~ msgstr "总数量"
@@ -1980,9 +2031,9 @@ msgstr ""
msgid "TP/SL"
msgstr "止盈止损"
-#: src/components/trade/header/top-nav.tsx
-#~ msgid "Trade"
-#~ msgstr "交易"
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Trade"
+msgstr "交易"
#: src/components/trade/positions/history-tab.tsx
#~ msgid "Trade ClockCounterClockwise"
@@ -2203,3 +2254,7 @@ msgstr ""
#: src/components/pages/builder-page.tsx
#~ msgid "You can revoke permissions at any time by registering a new approval with 0% fee rate. Builder codes are processed entirely onchain as part of the fee logic."
#~ msgstr ""
+
+#: src/components/trade/tradebox/points-modal.tsx
+msgid "Your Referral Code"
+msgstr ""
diff --git a/src/stores/use-global-modal-store.ts b/src/stores/use-global-modal-store.ts
index 3738cbf6..cd7f01a1 100644
--- a/src/stores/use-global-modal-store.ts
+++ b/src/stores/use-global-modal-store.ts
@@ -9,6 +9,7 @@ type GlobalModal =
| { type: "swap"; fromToken: string; toToken?: string }
| { type: "commandMenu" }
| { type: "faucet" }
+ | { type: "points" }
| null;
interface DepositActions {
@@ -37,6 +38,11 @@ interface FaucetActions {
close: () => void;
}
+interface PointsActions {
+ open: () => void;
+ close: () => void;
+}
+
interface GlobalModalState {
modal: GlobalModal;
depositActions: DepositActions;
@@ -44,6 +50,7 @@ interface GlobalModalState {
swapActions: SwapActions;
commandMenuActions: CommandMenuActions;
faucetActions: FaucetActions;
+ pointsActions: PointsActions;
}
const useGlobalModalStore = create((set) => {
@@ -72,6 +79,10 @@ const useGlobalModalStore = create((set) => {
open: () => set({ modal: { type: "faucet" } }),
close,
},
+ pointsActions: {
+ open: () => set({ modal: { type: "points" } }),
+ close,
+ },
};
});
@@ -95,3 +106,6 @@ export const useCommandMenuActions = () => useGlobalModalStore((s) => s.commandM
export const useFaucetModalOpen = () => useGlobalModalStore((s) => s.modal?.type === "faucet");
export const useFaucetModalActions = () => useGlobalModalStore((s) => s.faucetActions);
+
+export const usePointsModalOpen = () => useGlobalModalStore((s) => s.modal?.type === "points");
+export const usePointsModalActions = () => useGlobalModalStore((s) => s.pointsActions);