Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4f2ff3f3ba |
@@ -1,35 +1,35 @@
|
||||
import type { Metadata } from "next";
|
||||
import { Inter, JetBrains_Mono } from "next/font/google";
|
||||
import "./globals.css";
|
||||
import { Providers } from "@/components/Providers";
|
||||
|
||||
const inter = Inter({
|
||||
subsets: ["latin"],
|
||||
weight: ["400", "500", "700", "800"],
|
||||
variable: "--font-inter",
|
||||
});
|
||||
|
||||
const jetbrainsMono = JetBrains_Mono({
|
||||
subsets: ["latin"],
|
||||
weight: ["500", "700", "800"],
|
||||
variable: "--font-jetbrains",
|
||||
});
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "AssetX Dashboard",
|
||||
description: "DeFi Asset Management Platform",
|
||||
};
|
||||
|
||||
export default function RootLayout({
|
||||
children,
|
||||
}: Readonly<{
|
||||
children: React.ReactNode;
|
||||
}>) {
|
||||
return (
|
||||
<html lang="en" suppressHydrationWarning>
|
||||
<body className={`${inter.variable} ${jetbrainsMono.variable} ${inter.className}`}>
|
||||
<Providers>{children}</Providers>
|
||||
</body>
|
||||
</html>
|
||||
);
|
||||
}
|
||||
import type { Metadata } from "next";
|
||||
import { Inter, JetBrains_Mono } from "next/font/google";
|
||||
import "./globals.css";
|
||||
import { Providers } from "@/components/Providers";
|
||||
|
||||
const inter = Inter({
|
||||
subsets: ["latin"],
|
||||
weight: ["400", "500", "700", "800"],
|
||||
variable: "--font-inter",
|
||||
});
|
||||
|
||||
const jetbrainsMono = JetBrains_Mono({
|
||||
subsets: ["latin"],
|
||||
weight: ["500", "700", "800"],
|
||||
variable: "--font-jetbrains",
|
||||
});
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "AssetX Dashboard",
|
||||
description: "DeFi Asset Management Platform",
|
||||
};
|
||||
|
||||
export default function RootLayout({
|
||||
children,
|
||||
}: Readonly<{
|
||||
children: React.ReactNode;
|
||||
}>) {
|
||||
return (
|
||||
<html lang="en" suppressHydrationWarning>
|
||||
<body className={`${inter.variable} ${jetbrainsMono.variable} ${inter.className}`}>
|
||||
<Providers>{children}</Providers>
|
||||
</body>
|
||||
</html>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,101 +1,101 @@
|
||||
"use client";
|
||||
|
||||
import { useState } from "react";
|
||||
import { useApp } from "@/contexts/AppContext";
|
||||
|
||||
export default function APYHistoryCard() {
|
||||
const { t } = useApp();
|
||||
const [activeTab, setActiveTab] = useState<"apy" | "price">("apy");
|
||||
|
||||
// 橙色渐变条形图数据
|
||||
const chartData = [
|
||||
{ height: 85, color: "#ffe9dc" },
|
||||
{ height: 93, color: "#ffc9ad" },
|
||||
{ height: 100, color: "#ffc9ad" },
|
||||
{ height: 105, color: "#ffba96" },
|
||||
{ height: 108, color: "#ffa67e" },
|
||||
{ height: 116, color: "#f48d5f" },
|
||||
{ height: 124, color: "#ff6900" },
|
||||
{ height: 127, color: "#f35b00" },
|
||||
{ height: 139, color: "#d64700" },
|
||||
];
|
||||
|
||||
return (
|
||||
<div className="bg-bg-surface dark:bg-gray-800 rounded-3xl border border-border-gray dark:border-gray-700 p-6 flex flex-col gap-6">
|
||||
{/* Tabs */}
|
||||
<div className="flex gap-6 border-b border-border-gray dark:border-gray-700">
|
||||
<button
|
||||
onClick={() => setActiveTab("apy")}
|
||||
className={`pb-3 px-1 text-body-small font-bold transition-colors ${
|
||||
activeTab === "apy"
|
||||
? "text-text-primary dark:text-white border-b-2 border-text-primary dark:border-white -mb-[1px]"
|
||||
: "text-text-tertiary dark:text-gray-400"
|
||||
}`}
|
||||
>
|
||||
{t("apy.apyHistory")}
|
||||
</button>
|
||||
<button
|
||||
onClick={() => setActiveTab("price")}
|
||||
className={`pb-3 px-1 text-body-small font-bold transition-colors ${
|
||||
activeTab === "price"
|
||||
? "text-text-primary dark:text-white border-b-2 border-text-primary dark:border-white -mb-[1px]"
|
||||
: "text-text-tertiary dark:text-gray-400"
|
||||
}`}
|
||||
>
|
||||
{t("apy.priceHistory")}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{/* Chart Area */}
|
||||
<div className="flex flex-col gap-4">
|
||||
<div className="flex items-center justify-between">
|
||||
<span className="text-caption-tiny font-medium text-text-tertiary dark:text-gray-400">
|
||||
{t("apy.lastDays")}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
{/* Orange Gradient Chart */}
|
||||
<div
|
||||
className="flex items-end gap-4 w-full border-b border-border-gray dark:border-gray-700"
|
||||
style={{
|
||||
height: "140px",
|
||||
background:
|
||||
"linear-gradient(0deg, rgba(255, 247, 237, 0.5) 0%, rgba(255, 247, 237, 0) 100%)",
|
||||
}}
|
||||
>
|
||||
{chartData.map((bar, index) => (
|
||||
<div
|
||||
key={index}
|
||||
className="flex-1"
|
||||
style={{
|
||||
height: `${bar.height}px`,
|
||||
backgroundColor: bar.color,
|
||||
borderRadius: "2px 2px 0px 0px",
|
||||
}}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
|
||||
{/* Stats */}
|
||||
<div className="flex flex-col gap-2">
|
||||
<div className="flex items-center justify-between">
|
||||
<span className="text-caption-tiny font-medium text-text-tertiary dark:text-gray-400">
|
||||
{t("apy.highest")}
|
||||
</span>
|
||||
<span className="text-body-small font-bold text-text-primary dark:text-white">
|
||||
24.8%
|
||||
</span>
|
||||
</div>
|
||||
<div className="flex items-center justify-between">
|
||||
<span className="text-caption-tiny font-medium text-text-tertiary dark:text-gray-400">
|
||||
{t("apy.lowest")}
|
||||
</span>
|
||||
<span className="text-body-small font-bold text-text-primary dark:text-white">
|
||||
18.2%
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
"use client";
|
||||
|
||||
import { useState } from "react";
|
||||
import { useApp } from "@/contexts/AppContext";
|
||||
|
||||
export default function APYHistoryCard() {
|
||||
const { t } = useApp();
|
||||
const [activeTab, setActiveTab] = useState<"apy" | "price">("apy");
|
||||
|
||||
// 橙色渐变条形图数据
|
||||
const chartData = [
|
||||
{ height: 85, color: "#ffe9dc" },
|
||||
{ height: 93, color: "#ffc9ad" },
|
||||
{ height: 100, color: "#ffc9ad" },
|
||||
{ height: 105, color: "#ffba96" },
|
||||
{ height: 108, color: "#ffa67e" },
|
||||
{ height: 116, color: "#f48d5f" },
|
||||
{ height: 124, color: "#ff6900" },
|
||||
{ height: 127, color: "#f35b00" },
|
||||
{ height: 139, color: "#d64700" },
|
||||
];
|
||||
|
||||
return (
|
||||
<div className="bg-bg-surface dark:bg-gray-800 rounded-3xl border border-border-gray dark:border-gray-700 p-6 flex flex-col gap-6">
|
||||
{/* Tabs */}
|
||||
<div className="flex gap-6 border-b border-border-gray dark:border-gray-700">
|
||||
<button
|
||||
onClick={() => setActiveTab("apy")}
|
||||
className={`pb-3 px-1 text-body-small font-bold transition-colors ${
|
||||
activeTab === "apy"
|
||||
? "text-text-primary dark:text-white border-b-2 border-text-primary dark:border-white -mb-[1px]"
|
||||
: "text-text-tertiary dark:text-gray-400"
|
||||
}`}
|
||||
>
|
||||
{t("apy.apyHistory")}
|
||||
</button>
|
||||
<button
|
||||
onClick={() => setActiveTab("price")}
|
||||
className={`pb-3 px-1 text-body-small font-bold transition-colors ${
|
||||
activeTab === "price"
|
||||
? "text-text-primary dark:text-white border-b-2 border-text-primary dark:border-white -mb-[1px]"
|
||||
: "text-text-tertiary dark:text-gray-400"
|
||||
}`}
|
||||
>
|
||||
{t("apy.priceHistory")}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{/* Chart Area */}
|
||||
<div className="flex flex-col gap-4">
|
||||
<div className="flex items-center justify-between">
|
||||
<span className="text-caption-tiny font-medium text-text-tertiary dark:text-gray-400">
|
||||
{t("apy.lastDays")}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
{/* Orange Gradient Chart */}
|
||||
<div
|
||||
className="flex items-end gap-4 w-full border-b border-border-gray dark:border-gray-700"
|
||||
style={{
|
||||
height: "140px",
|
||||
background:
|
||||
"linear-gradient(0deg, rgba(255, 247, 237, 0.5) 0%, rgba(255, 247, 237, 0) 100%)",
|
||||
}}
|
||||
>
|
||||
{chartData.map((bar, index) => (
|
||||
<div
|
||||
key={index}
|
||||
className="flex-1"
|
||||
style={{
|
||||
height: `${bar.height}px`,
|
||||
backgroundColor: bar.color,
|
||||
borderRadius: "2px 2px 0px 0px",
|
||||
}}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
|
||||
{/* Stats */}
|
||||
<div className="flex flex-col gap-2">
|
||||
<div className="flex items-center justify-between">
|
||||
<span className="text-caption-tiny font-medium text-text-tertiary dark:text-gray-400">
|
||||
{t("apy.highest")}
|
||||
</span>
|
||||
<span className="text-body-small font-bold text-text-primary dark:text-white">
|
||||
24.8%
|
||||
</span>
|
||||
</div>
|
||||
<div className="flex items-center justify-between">
|
||||
<span className="text-caption-tiny font-medium text-text-tertiary dark:text-gray-400">
|
||||
{t("apy.lowest")}
|
||||
</span>
|
||||
<span className="text-body-small font-bold text-text-primary dark:text-white">
|
||||
18.2%
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,237 +1,237 @@
|
||||
"use client";
|
||||
|
||||
import Image from "next/image";
|
||||
import { useApp } from "@/contexts/AppContext";
|
||||
|
||||
interface VerificationCardProps {
|
||||
icon: string;
|
||||
title: string;
|
||||
description: string;
|
||||
buttonText: string;
|
||||
}
|
||||
|
||||
function VerificationCard({ icon, title, description, buttonText }: VerificationCardProps) {
|
||||
return (
|
||||
<div className="flex-1 bg-bg-surface dark:bg-gray-700 rounded-2xl border border-border-normal dark:border-gray-600 p-6 flex flex-col justify-between">
|
||||
<div className="flex items-start gap-4">
|
||||
<div className="w-5 h-5 flex-shrink-0">
|
||||
<Image src={icon} alt={title} width={20} height={20} />
|
||||
</div>
|
||||
<div className="flex flex-col gap-1">
|
||||
<h4 className="text-body-default font-bold text-text-primary dark:text-white">
|
||||
{title}
|
||||
</h4>
|
||||
<p className="text-caption-tiny font-regular text-[#9ca1af] dark:text-gray-400">
|
||||
{description}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<button className="flex items-center gap-2 hover:opacity-80 transition-opacity mt-[118px]">
|
||||
<span className="text-[10px] font-bold leading-[150%] tracking-[0.01em] text-[#9ca1af] dark:text-gray-400">
|
||||
{buttonText}
|
||||
</span>
|
||||
<Image src="/component-118.svg" alt="" width={16} height={16} />
|
||||
</button>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default function AssetCustodyVerification() {
|
||||
const { t } = useApp();
|
||||
return (
|
||||
<div className="flex flex-col gap-8 w-full">
|
||||
{/* Header */}
|
||||
<div className="flex flex-col gap-2">
|
||||
<h2 className="text-body-large font-bold text-text-primary dark:text-white">
|
||||
{t("custody.title")}
|
||||
</h2>
|
||||
<p className="text-body-small font-regular text-[#9ca1af] dark:text-gray-400">
|
||||
{t("custody.description")}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{/* Holdings Table Card */}
|
||||
<div className="bg-bg-surface dark:bg-gray-800 rounded-3xl border border-border-gray dark:border-gray-700 p-8 flex flex-col gap-6">
|
||||
{/* Table Header */}
|
||||
<div className="flex flex-col gap-6 pb-6 border-b border-border-gray dark:border-gray-700">
|
||||
<div className="flex flex-col gap-1">
|
||||
<h3 className="text-body-default font-bold text-text-primary dark:text-white">
|
||||
{t("custody.underlyingHoldings")}
|
||||
</h3>
|
||||
<p className="text-caption-tiny font-regular text-[#9ca1af] dark:text-gray-400">
|
||||
{t("custody.verifiedBy")}
|
||||
</p>
|
||||
</div>
|
||||
<div className="flex items-center gap-2">
|
||||
<Image src="/component-115.svg" alt="" width={16} height={16} />
|
||||
<span className="text-caption-tiny font-medium text-[#9ca1af] dark:text-gray-400">
|
||||
{t("custody.lastUpdated")}: 2 {t("custody.minutesAgo")}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Table */}
|
||||
<div className="flex flex-col">
|
||||
{/* Table Header Row */}
|
||||
<div className="grid grid-cols-5 gap-4 pb-4 border-b border-border-gray dark:border-gray-700">
|
||||
<div className="text-caption-tiny font-bold uppercase tracking-wider text-[#9ca1af] dark:text-gray-400">
|
||||
{t("custody.custodian")}
|
||||
</div>
|
||||
<div className="text-caption-tiny font-bold uppercase tracking-wider text-[#9ca1af] dark:text-gray-400">
|
||||
{t("custody.assetType")}
|
||||
</div>
|
||||
<div className="text-caption-tiny font-bold uppercase tracking-wider text-[#9ca1af] dark:text-gray-400">
|
||||
{t("custody.maturity")}
|
||||
</div>
|
||||
<div className="text-caption-tiny font-bold uppercase tracking-wider text-[#9ca1af] dark:text-gray-400">
|
||||
{t("custody.valueUSD")}
|
||||
</div>
|
||||
<div className="text-caption-tiny font-bold uppercase tracking-wider text-[#9ca1af] dark:text-gray-400">
|
||||
{t("custody.status")}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Table Body Row */}
|
||||
<div className="grid grid-cols-5 gap-4 py-6">
|
||||
{/* Custodian */}
|
||||
<div className="flex items-center gap-3">
|
||||
<div
|
||||
className="w-8 h-8 rounded-full flex items-center justify-center flex-shrink-0"
|
||||
style={{
|
||||
background: "linear-gradient(135deg, rgba(255, 137, 4, 1) 0%, rgba(245, 73, 0, 1) 100%)",
|
||||
}}
|
||||
>
|
||||
<span className="text-[13.5px] font-bold leading-[19px] text-white tracking-tight">
|
||||
GY
|
||||
</span>
|
||||
</div>
|
||||
<div className="flex flex-col">
|
||||
<span className="text-body-small font-bold text-text-primary dark:text-white">
|
||||
{t("custody.morganStanley")}
|
||||
</span>
|
||||
<span className="text-caption-tiny font-regular text-[#9ca1af] dark:text-gray-400">
|
||||
{t("custody.primeBroker")}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Asset Type */}
|
||||
<div className="flex items-center">
|
||||
<span className="text-body-small font-medium text-text-primary dark:text-white">
|
||||
{t("custody.usEquityPortfolio")}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
{/* Maturity */}
|
||||
<div className="flex flex-col justify-center">
|
||||
<span className="text-body-small font-medium text-text-primary dark:text-white">
|
||||
05 Feb 2026
|
||||
</span>
|
||||
<span className="text-caption-tiny font-regular text-[#9ca1af] dark:text-gray-400">
|
||||
(77 {t("custody.days")})
|
||||
</span>
|
||||
</div>
|
||||
|
||||
{/* Value */}
|
||||
<div className="flex items-center">
|
||||
<span className="text-body-small font-medium text-text-primary dark:text-white">
|
||||
$12,500,000.00
|
||||
</span>
|
||||
</div>
|
||||
|
||||
{/* Status */}
|
||||
<div className="flex items-center">
|
||||
<div className="rounded-full px-3 py-1.5 flex items-center gap-2 bg-[#f2fcf7] dark:bg-green-900/20">
|
||||
<Image src="/component-116.svg" alt="" width={12} height={12} />
|
||||
<span className="text-[10px] font-bold leading-[150%] text-[#10b981] dark:text-green-400">
|
||||
{t("custody.verified")}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Table Footer Row */}
|
||||
<div className="grid grid-cols-5 gap-4 pt-6 border-t border-border-gray dark:border-gray-700">
|
||||
<div className="col-span-3 flex items-center">
|
||||
<span className="text-body-small font-bold text-text-primary dark:text-white">
|
||||
{t("custody.totalValue")}
|
||||
</span>
|
||||
</div>
|
||||
<div className="col-span-2 flex items-center">
|
||||
<span className="text-body-default font-bold text-text-primary dark:text-white">
|
||||
$12,500,000.00
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Verification Cards Row */}
|
||||
<div className="flex flex-row gap-6 pt-6">
|
||||
<VerificationCard
|
||||
icon="/component-117.svg"
|
||||
title={t("custody.smartContract")}
|
||||
description={t("custody.smartContractDesc")}
|
||||
buttonText={t("custody.viewReports")}
|
||||
/>
|
||||
<VerificationCard
|
||||
icon="/component-119.svg"
|
||||
title={t("custody.compliance")}
|
||||
description={t("custody.complianceDesc")}
|
||||
buttonText={t("custody.viewReports")}
|
||||
/>
|
||||
<VerificationCard
|
||||
icon="/component-121.svg"
|
||||
title={t("custody.proofOfReserves")}
|
||||
description={t("custody.proofDesc")}
|
||||
buttonText={t("custody.viewReports")}
|
||||
/>
|
||||
|
||||
{/* Independent Verifications */}
|
||||
<div className="flex-1 rounded-2xl border bg-[#f9fafb] dark:bg-gray-700 border-[#e5e7eb] dark:border-gray-600 p-6 flex flex-col">
|
||||
<div className="flex flex-col gap-2">
|
||||
<h3 className="text-body-default font-bold text-text-primary dark:text-white">
|
||||
{t("custody.independentVerifications")}
|
||||
</h3>
|
||||
<p className="text-body-small font-regular text-[#9ca1af] dark:text-gray-400">
|
||||
{t("custody.independentDesc")}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="flex flex-col gap-2 mt-6">
|
||||
<div className="rounded-2xl border bg-white dark:bg-gray-800 border-[#e5e7eb] dark:border-gray-600 p-4 flex items-center justify-between">
|
||||
<div className="flex flex-col gap-0.5">
|
||||
<span className="text-body-small font-bold text-text-primary dark:text-white">
|
||||
{t("custody.attestationReport")}
|
||||
</span>
|
||||
<span className="text-caption-tiny font-regular text-[#9ca1af] dark:text-gray-400">
|
||||
November 2025
|
||||
</span>
|
||||
</div>
|
||||
<Image src="/component-123.svg" alt="" width={24} height={24} />
|
||||
</div>
|
||||
|
||||
<div className="rounded-2xl border bg-white dark:bg-gray-800 border-[#e5e7eb] dark:border-gray-600 p-4 flex items-center justify-between">
|
||||
<div className="flex flex-col gap-0.5">
|
||||
<span className="text-body-small font-bold text-text-primary dark:text-white">
|
||||
{t("custody.attestationReport")}
|
||||
</span>
|
||||
<span className="text-caption-tiny font-regular text-[#9ca1af] dark:text-gray-400">
|
||||
October 2025
|
||||
</span>
|
||||
</div>
|
||||
<Image src="/component-124.svg" alt="" width={24} height={24} />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button className="flex items-center gap-2 hover:opacity-80 transition-opacity mt-4">
|
||||
<span className="text-[10px] font-bold leading-[150%] tracking-[0.01em] text-[#9ca1af] dark:text-gray-400">
|
||||
{t("custody.viewAllArchive")}
|
||||
</span>
|
||||
<Image src="/component-125.svg" alt="" width={16} height={16} />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
"use client";
|
||||
|
||||
import Image from "next/image";
|
||||
import { useApp } from "@/contexts/AppContext";
|
||||
|
||||
interface VerificationCardProps {
|
||||
icon: string;
|
||||
title: string;
|
||||
description: string;
|
||||
buttonText: string;
|
||||
}
|
||||
|
||||
function VerificationCard({ icon, title, description, buttonText }: VerificationCardProps) {
|
||||
return (
|
||||
<div className="flex-1 bg-bg-surface dark:bg-gray-700 rounded-2xl border border-border-normal dark:border-gray-600 p-6 flex flex-col justify-between">
|
||||
<div className="flex items-start gap-4">
|
||||
<div className="w-5 h-5 flex-shrink-0">
|
||||
<Image src={icon} alt={title} width={20} height={20} />
|
||||
</div>
|
||||
<div className="flex flex-col gap-1">
|
||||
<h4 className="text-body-default font-bold text-text-primary dark:text-white">
|
||||
{title}
|
||||
</h4>
|
||||
<p className="text-caption-tiny font-regular text-[#9ca1af] dark:text-gray-400">
|
||||
{description}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<button className="flex items-center gap-2 hover:opacity-80 transition-opacity mt-[118px]">
|
||||
<span className="text-[10px] font-bold leading-[150%] tracking-[0.01em] text-[#9ca1af] dark:text-gray-400">
|
||||
{buttonText}
|
||||
</span>
|
||||
<Image src="/component-118.svg" alt="" width={16} height={16} />
|
||||
</button>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default function AssetCustodyVerification() {
|
||||
const { t } = useApp();
|
||||
return (
|
||||
<div className="flex flex-col gap-8 w-full">
|
||||
{/* Header */}
|
||||
<div className="flex flex-col gap-2">
|
||||
<h2 className="text-body-large font-bold text-text-primary dark:text-white">
|
||||
{t("custody.title")}
|
||||
</h2>
|
||||
<p className="text-body-small font-regular text-[#9ca1af] dark:text-gray-400">
|
||||
{t("custody.description")}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{/* Holdings Table Card */}
|
||||
<div className="bg-bg-surface dark:bg-gray-800 rounded-3xl border border-border-gray dark:border-gray-700 p-8 flex flex-col gap-6">
|
||||
{/* Table Header */}
|
||||
<div className="flex flex-col gap-6 pb-6 border-b border-border-gray dark:border-gray-700">
|
||||
<div className="flex flex-col gap-1">
|
||||
<h3 className="text-body-default font-bold text-text-primary dark:text-white">
|
||||
{t("custody.underlyingHoldings")}
|
||||
</h3>
|
||||
<p className="text-caption-tiny font-regular text-[#9ca1af] dark:text-gray-400">
|
||||
{t("custody.verifiedBy")}
|
||||
</p>
|
||||
</div>
|
||||
<div className="flex items-center gap-2">
|
||||
<Image src="/component-115.svg" alt="" width={16} height={16} />
|
||||
<span className="text-caption-tiny font-medium text-[#9ca1af] dark:text-gray-400">
|
||||
{t("custody.lastUpdated")}: 2 {t("custody.minutesAgo")}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Table */}
|
||||
<div className="flex flex-col">
|
||||
{/* Table Header Row */}
|
||||
<div className="grid grid-cols-5 gap-4 pb-4 border-b border-border-gray dark:border-gray-700">
|
||||
<div className="text-caption-tiny font-bold uppercase tracking-wider text-[#9ca1af] dark:text-gray-400">
|
||||
{t("custody.custodian")}
|
||||
</div>
|
||||
<div className="text-caption-tiny font-bold uppercase tracking-wider text-[#9ca1af] dark:text-gray-400">
|
||||
{t("custody.assetType")}
|
||||
</div>
|
||||
<div className="text-caption-tiny font-bold uppercase tracking-wider text-[#9ca1af] dark:text-gray-400">
|
||||
{t("custody.maturity")}
|
||||
</div>
|
||||
<div className="text-caption-tiny font-bold uppercase tracking-wider text-[#9ca1af] dark:text-gray-400">
|
||||
{t("custody.valueUSD")}
|
||||
</div>
|
||||
<div className="text-caption-tiny font-bold uppercase tracking-wider text-[#9ca1af] dark:text-gray-400">
|
||||
{t("custody.status")}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Table Body Row */}
|
||||
<div className="grid grid-cols-5 gap-4 py-6">
|
||||
{/* Custodian */}
|
||||
<div className="flex items-center gap-3">
|
||||
<div
|
||||
className="w-8 h-8 rounded-full flex items-center justify-center flex-shrink-0"
|
||||
style={{
|
||||
background: "linear-gradient(135deg, rgba(255, 137, 4, 1) 0%, rgba(245, 73, 0, 1) 100%)",
|
||||
}}
|
||||
>
|
||||
<span className="text-[13.5px] font-bold leading-[19px] text-white tracking-tight">
|
||||
GY
|
||||
</span>
|
||||
</div>
|
||||
<div className="flex flex-col">
|
||||
<span className="text-body-small font-bold text-text-primary dark:text-white">
|
||||
{t("custody.morganStanley")}
|
||||
</span>
|
||||
<span className="text-caption-tiny font-regular text-[#9ca1af] dark:text-gray-400">
|
||||
{t("custody.primeBroker")}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Asset Type */}
|
||||
<div className="flex items-center">
|
||||
<span className="text-body-small font-medium text-text-primary dark:text-white">
|
||||
{t("custody.usEquityPortfolio")}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
{/* Maturity */}
|
||||
<div className="flex flex-col justify-center">
|
||||
<span className="text-body-small font-medium text-text-primary dark:text-white">
|
||||
05 Feb 2026
|
||||
</span>
|
||||
<span className="text-caption-tiny font-regular text-[#9ca1af] dark:text-gray-400">
|
||||
(77 {t("custody.days")})
|
||||
</span>
|
||||
</div>
|
||||
|
||||
{/* Value */}
|
||||
<div className="flex items-center">
|
||||
<span className="text-body-small font-medium text-text-primary dark:text-white">
|
||||
$12,500,000.00
|
||||
</span>
|
||||
</div>
|
||||
|
||||
{/* Status */}
|
||||
<div className="flex items-center">
|
||||
<div className="rounded-full px-3 py-1.5 flex items-center gap-2 bg-[#f2fcf7] dark:bg-green-900/20">
|
||||
<Image src="/component-116.svg" alt="" width={12} height={12} />
|
||||
<span className="text-[10px] font-bold leading-[150%] text-[#10b981] dark:text-green-400">
|
||||
{t("custody.verified")}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Table Footer Row */}
|
||||
<div className="grid grid-cols-5 gap-4 pt-6 border-t border-border-gray dark:border-gray-700">
|
||||
<div className="col-span-3 flex items-center">
|
||||
<span className="text-body-small font-bold text-text-primary dark:text-white">
|
||||
{t("custody.totalValue")}
|
||||
</span>
|
||||
</div>
|
||||
<div className="col-span-2 flex items-center">
|
||||
<span className="text-body-default font-bold text-text-primary dark:text-white">
|
||||
$12,500,000.00
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Verification Cards Row */}
|
||||
<div className="flex flex-row gap-6 pt-6">
|
||||
<VerificationCard
|
||||
icon="/component-117.svg"
|
||||
title={t("custody.smartContract")}
|
||||
description={t("custody.smartContractDesc")}
|
||||
buttonText={t("custody.viewReports")}
|
||||
/>
|
||||
<VerificationCard
|
||||
icon="/component-119.svg"
|
||||
title={t("custody.compliance")}
|
||||
description={t("custody.complianceDesc")}
|
||||
buttonText={t("custody.viewReports")}
|
||||
/>
|
||||
<VerificationCard
|
||||
icon="/component-121.svg"
|
||||
title={t("custody.proofOfReserves")}
|
||||
description={t("custody.proofDesc")}
|
||||
buttonText={t("custody.viewReports")}
|
||||
/>
|
||||
|
||||
{/* Independent Verifications */}
|
||||
<div className="flex-1 rounded-2xl border bg-[#f9fafb] dark:bg-gray-700 border-[#e5e7eb] dark:border-gray-600 p-6 flex flex-col">
|
||||
<div className="flex flex-col gap-2">
|
||||
<h3 className="text-body-default font-bold text-text-primary dark:text-white">
|
||||
{t("custody.independentVerifications")}
|
||||
</h3>
|
||||
<p className="text-body-small font-regular text-[#9ca1af] dark:text-gray-400">
|
||||
{t("custody.independentDesc")}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="flex flex-col gap-2 mt-6">
|
||||
<div className="rounded-2xl border bg-white dark:bg-gray-800 border-[#e5e7eb] dark:border-gray-600 p-4 flex items-center justify-between">
|
||||
<div className="flex flex-col gap-0.5">
|
||||
<span className="text-body-small font-bold text-text-primary dark:text-white">
|
||||
{t("custody.attestationReport")}
|
||||
</span>
|
||||
<span className="text-caption-tiny font-regular text-[#9ca1af] dark:text-gray-400">
|
||||
November 2025
|
||||
</span>
|
||||
</div>
|
||||
<Image src="/component-123.svg" alt="" width={24} height={24} />
|
||||
</div>
|
||||
|
||||
<div className="rounded-2xl border bg-white dark:bg-gray-800 border-[#e5e7eb] dark:border-gray-600 p-4 flex items-center justify-between">
|
||||
<div className="flex flex-col gap-0.5">
|
||||
<span className="text-body-small font-bold text-text-primary dark:text-white">
|
||||
{t("custody.attestationReport")}
|
||||
</span>
|
||||
<span className="text-caption-tiny font-regular text-[#9ca1af] dark:text-gray-400">
|
||||
October 2025
|
||||
</span>
|
||||
</div>
|
||||
<Image src="/component-124.svg" alt="" width={24} height={24} />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button className="flex items-center gap-2 hover:opacity-80 transition-opacity mt-4">
|
||||
<span className="text-[10px] font-bold leading-[150%] tracking-[0.01em] text-[#9ca1af] dark:text-gray-400">
|
||||
{t("custody.viewAllArchive")}
|
||||
</span>
|
||||
<Image src="/component-125.svg" alt="" width={16} height={16} />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import AssetCustodyVerification from "./AssetCustodyVerification";
|
||||
|
||||
export default function AssetCustodyVerificationTab() {
|
||||
return (
|
||||
<div className="flex flex-col gap-8 w-full">
|
||||
<AssetCustodyVerification />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
import AssetCustodyVerification from "./AssetCustodyVerification";
|
||||
|
||||
export default function AssetCustodyVerificationTab() {
|
||||
return (
|
||||
<div className="flex flex-col gap-8 w-full">
|
||||
<AssetCustodyVerification />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
"use client";
|
||||
|
||||
import { useApp } from "@/contexts/AppContext";
|
||||
|
||||
export default function AssetDescriptionCard() {
|
||||
const { t } = useApp();
|
||||
|
||||
return (
|
||||
<div className="bg-bg-surface dark:bg-gray-800 rounded-3xl border border-border-gray dark:border-gray-700 p-8 flex flex-col gap-4 h-[300px]">
|
||||
<h3 className="text-body-large font-bold text-text-primary dark:text-white">
|
||||
{t("description.title")}
|
||||
</h3>
|
||||
<div className="text-body-default font-regular text-text-primary dark:text-gray-300 leading-relaxed whitespace-pre-line flex-1 overflow-y-auto">
|
||||
{t("description.content")}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
"use client";
|
||||
|
||||
import { useApp } from "@/contexts/AppContext";
|
||||
|
||||
export default function AssetDescriptionCard() {
|
||||
const { t } = useApp();
|
||||
|
||||
return (
|
||||
<div className="bg-bg-surface dark:bg-gray-800 rounded-3xl border border-border-gray dark:border-gray-700 p-8 flex flex-col gap-4 h-[300px]">
|
||||
<h3 className="text-body-large font-bold text-text-primary dark:text-white">
|
||||
{t("description.title")}
|
||||
</h3>
|
||||
<div className="text-body-default font-regular text-text-primary dark:text-gray-300 leading-relaxed whitespace-pre-line flex-1 overflow-y-auto">
|
||||
{t("description.content")}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import AssetDescriptionCard from "./AssetDescriptionCard";
|
||||
|
||||
export default function AssetDescriptionTab() {
|
||||
return (
|
||||
<div className="flex flex-col gap-8 w-full">
|
||||
<AssetDescriptionCard />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
import AssetDescriptionCard from "./AssetDescriptionCard";
|
||||
|
||||
export default function AssetDescriptionTab() {
|
||||
return (
|
||||
<div className="flex flex-col gap-8 w-full">
|
||||
<AssetDescriptionCard />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,116 +1,116 @@
|
||||
"use client";
|
||||
|
||||
import Image from "next/image";
|
||||
import { useApp } from "@/contexts/AppContext";
|
||||
|
||||
interface OverviewItemProps {
|
||||
icon: string;
|
||||
label: string;
|
||||
value: string;
|
||||
}
|
||||
|
||||
function OverviewItem({ icon, label, value }: OverviewItemProps) {
|
||||
return (
|
||||
<div className="flex items-center justify-between w-full">
|
||||
<div className="flex items-center gap-1">
|
||||
<div className="w-5 h-6 flex-shrink-0">
|
||||
<Image src={icon} alt={label} width={20} height={24} />
|
||||
</div>
|
||||
<span className="text-body-small font-medium text-text-tertiary dark:text-gray-400">
|
||||
{label}
|
||||
</span>
|
||||
</div>
|
||||
<span className="text-body-small font-medium text-text-primary dark:text-white">
|
||||
{value}
|
||||
</span>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default function AssetOverviewCard() {
|
||||
const { t } = useApp();
|
||||
|
||||
return (
|
||||
<div className="bg-bg-surface dark:bg-gray-800 rounded-3xl border border-border-gray dark:border-gray-700 p-8 flex flex-col gap-6">
|
||||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<h3 className="text-body-large font-bold text-text-primary dark:text-white">
|
||||
{t("assetOverview.title")}
|
||||
</h3>
|
||||
<div
|
||||
className="rounded-full border flex items-center gap-2 px-3 py-1.5"
|
||||
style={{
|
||||
backgroundColor: "#fffbf5",
|
||||
borderColor: "#ffedd5",
|
||||
}}
|
||||
>
|
||||
<div
|
||||
className="w-1.5 h-1.5 rounded-full flex-shrink-0"
|
||||
style={{ backgroundColor: "#ffb933" }}
|
||||
/>
|
||||
<span
|
||||
className="text-xs font-semibold leading-4"
|
||||
style={{ color: "#ffb933" }}
|
||||
>
|
||||
{t("assetOverview.mediumRisk")}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Overview Items */}
|
||||
<div className="flex gap-12 w-full">
|
||||
<div className="flex-1 flex flex-col gap-5">
|
||||
<OverviewItem
|
||||
icon="/component-11.svg"
|
||||
label={t("assetOverview.underlyingAssets")}
|
||||
value={t("assetOverview.usEquityIndex")}
|
||||
/>
|
||||
<OverviewItem
|
||||
icon="/component-12.svg"
|
||||
label={t("assetOverview.maturityRange")}
|
||||
value="05 Feb 2026"
|
||||
/>
|
||||
<OverviewItem
|
||||
icon="/component-13.svg"
|
||||
label={t("assetOverview.cap")}
|
||||
value="$50,000,000"
|
||||
/>
|
||||
</div>
|
||||
<div className="flex-1 flex flex-col gap-5">
|
||||
<OverviewItem
|
||||
icon="/component-14.svg"
|
||||
label={t("assetOverview.minInvestment")}
|
||||
value="100 USDC"
|
||||
/>
|
||||
<div className="flex flex-col gap-3 w-full">
|
||||
<OverviewItem
|
||||
icon="/component-15.svg"
|
||||
label={t("assetOverview.poolCapacity")}
|
||||
value="75%"
|
||||
/>
|
||||
<div className="w-full h-2 bg-gray-200 dark:bg-gray-600 rounded-full overflow-hidden">
|
||||
<div className="h-full bg-blue-500 rounded-full" style={{ width: "75%" }} />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Divider */}
|
||||
<div className="border-t border-border-gray dark:border-gray-700" />
|
||||
|
||||
{/* Current Price */}
|
||||
<div className="bg-bg-subtle dark:bg-gray-700 rounded-xl p-4 flex items-center justify-between">
|
||||
<div className="flex items-center gap-2">
|
||||
<Image src="/component-16.svg" alt="Price" width={24} height={24} />
|
||||
<span className="text-body-small font-medium text-text-tertiary dark:text-gray-400">
|
||||
{t("assetOverview.currentPrice")}
|
||||
</span>
|
||||
</div>
|
||||
<div className="text-[20px] font-bold leading-[140%]">
|
||||
<span className="text-text-primary dark:text-white">1 GY-US = </span>
|
||||
<span style={{ color: "#10b981" }}>1.04 USDC</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
"use client";
|
||||
|
||||
import Image from "next/image";
|
||||
import { useApp } from "@/contexts/AppContext";
|
||||
|
||||
interface OverviewItemProps {
|
||||
icon: string;
|
||||
label: string;
|
||||
value: string;
|
||||
}
|
||||
|
||||
function OverviewItem({ icon, label, value }: OverviewItemProps) {
|
||||
return (
|
||||
<div className="flex items-center justify-between w-full">
|
||||
<div className="flex items-center gap-1">
|
||||
<div className="w-5 h-6 flex-shrink-0">
|
||||
<Image src={icon} alt={label} width={20} height={24} />
|
||||
</div>
|
||||
<span className="text-body-small font-medium text-text-tertiary dark:text-gray-400">
|
||||
{label}
|
||||
</span>
|
||||
</div>
|
||||
<span className="text-body-small font-medium text-text-primary dark:text-white">
|
||||
{value}
|
||||
</span>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default function AssetOverviewCard() {
|
||||
const { t } = useApp();
|
||||
|
||||
return (
|
||||
<div className="bg-bg-surface dark:bg-gray-800 rounded-3xl border border-border-gray dark:border-gray-700 p-8 flex flex-col gap-6">
|
||||
{/* Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<h3 className="text-body-large font-bold text-text-primary dark:text-white">
|
||||
{t("assetOverview.title")}
|
||||
</h3>
|
||||
<div
|
||||
className="rounded-full border flex items-center gap-2 px-3 py-1.5"
|
||||
style={{
|
||||
backgroundColor: "#fffbf5",
|
||||
borderColor: "#ffedd5",
|
||||
}}
|
||||
>
|
||||
<div
|
||||
className="w-1.5 h-1.5 rounded-full flex-shrink-0"
|
||||
style={{ backgroundColor: "#ffb933" }}
|
||||
/>
|
||||
<span
|
||||
className="text-xs font-semibold leading-4"
|
||||
style={{ color: "#ffb933" }}
|
||||
>
|
||||
{t("assetOverview.mediumRisk")}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Overview Items */}
|
||||
<div className="flex gap-12 w-full">
|
||||
<div className="flex-1 flex flex-col gap-5">
|
||||
<OverviewItem
|
||||
icon="/component-11.svg"
|
||||
label={t("assetOverview.underlyingAssets")}
|
||||
value={t("assetOverview.usEquityIndex")}
|
||||
/>
|
||||
<OverviewItem
|
||||
icon="/component-12.svg"
|
||||
label={t("assetOverview.maturityRange")}
|
||||
value="05 Feb 2026"
|
||||
/>
|
||||
<OverviewItem
|
||||
icon="/component-13.svg"
|
||||
label={t("assetOverview.cap")}
|
||||
value="$50,000,000"
|
||||
/>
|
||||
</div>
|
||||
<div className="flex-1 flex flex-col gap-5">
|
||||
<OverviewItem
|
||||
icon="/component-14.svg"
|
||||
label={t("assetOverview.minInvestment")}
|
||||
value="100 USDC"
|
||||
/>
|
||||
<div className="flex flex-col gap-3 w-full">
|
||||
<OverviewItem
|
||||
icon="/component-15.svg"
|
||||
label={t("assetOverview.poolCapacity")}
|
||||
value="75%"
|
||||
/>
|
||||
<div className="w-full h-2 bg-gray-200 dark:bg-gray-600 rounded-full overflow-hidden">
|
||||
<div className="h-full bg-blue-500 rounded-full" style={{ width: "75%" }} />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Divider */}
|
||||
<div className="border-t border-border-gray dark:border-gray-700" />
|
||||
|
||||
{/* Current Price */}
|
||||
<div className="bg-bg-subtle dark:bg-gray-700 rounded-xl p-4 flex items-center justify-between">
|
||||
<div className="flex items-center gap-2">
|
||||
<Image src="/component-16.svg" alt="Price" width={24} height={24} />
|
||||
<span className="text-body-small font-medium text-text-tertiary dark:text-gray-400">
|
||||
{t("assetOverview.currentPrice")}
|
||||
</span>
|
||||
</div>
|
||||
<div className="text-[20px] font-bold leading-[140%]">
|
||||
<span className="text-text-primary dark:text-white">1 GY-US = </span>
|
||||
<span style={{ color: "#10b981" }}>1.04 USDC</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,39 +1,39 @@
|
||||
import Image from "next/image";
|
||||
|
||||
interface BreadcrumbItem {
|
||||
label: string;
|
||||
href?: string;
|
||||
}
|
||||
|
||||
interface BreadcrumbProps {
|
||||
items: BreadcrumbItem[];
|
||||
}
|
||||
|
||||
export default function Breadcrumb({ items }: BreadcrumbProps) {
|
||||
return (
|
||||
<nav className="flex items-center gap-[3px] h-5">
|
||||
{items.map((item, index) => (
|
||||
<div key={index} className="flex items-center gap-[3px]">
|
||||
<span
|
||||
className={`text-sm font-medium leading-[150%] ${
|
||||
index === items.length - 1
|
||||
? "text-text-primary font-bold"
|
||||
: "text-text-tertiary"
|
||||
}`}
|
||||
>
|
||||
{item.label}
|
||||
</span>
|
||||
{index < items.length - 1 && (
|
||||
<Image
|
||||
src="/icon-chevron-right.svg"
|
||||
alt="›"
|
||||
width={14}
|
||||
height={14}
|
||||
className="flex-shrink-0"
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
))}
|
||||
</nav>
|
||||
);
|
||||
}
|
||||
import Image from "next/image";
|
||||
|
||||
interface BreadcrumbItem {
|
||||
label: string;
|
||||
href?: string;
|
||||
}
|
||||
|
||||
interface BreadcrumbProps {
|
||||
items: BreadcrumbItem[];
|
||||
}
|
||||
|
||||
export default function Breadcrumb({ items }: BreadcrumbProps) {
|
||||
return (
|
||||
<nav className="flex items-center gap-[3px] h-5">
|
||||
{items.map((item, index) => (
|
||||
<div key={index} className="flex items-center gap-[3px]">
|
||||
<span
|
||||
className={`text-sm font-medium leading-[150%] ${
|
||||
index === items.length - 1
|
||||
? "text-text-primary font-bold"
|
||||
: "text-text-tertiary"
|
||||
}`}
|
||||
>
|
||||
{item.label}
|
||||
</span>
|
||||
{index < items.length - 1 && (
|
||||
<Image
|
||||
src="/icon-chevron-right.svg"
|
||||
alt="›"
|
||||
width={14}
|
||||
height={14}
|
||||
className="flex-shrink-0"
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
))}
|
||||
</nav>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,63 +1,63 @@
|
||||
"use client";
|
||||
|
||||
import { useState } from "react";
|
||||
import TabNavigation from "./TabNavigation";
|
||||
import OverviewTab from "./OverviewTab";
|
||||
import { useApp } from "@/contexts/AppContext";
|
||||
|
||||
export default function ContentSection() {
|
||||
const { t } = useApp();
|
||||
|
||||
const tabs = [
|
||||
{ id: "overview", label: t("tabs.overview") },
|
||||
{ id: "asset-description", label: t("tabs.assetDescription") },
|
||||
{ id: "analytics", label: t("tabs.analytics") },
|
||||
{ id: "performance-analysis", label: t("tabs.performanceAnalysis") },
|
||||
{ id: "asset-custody", label: t("tabs.assetCustody") },
|
||||
];
|
||||
|
||||
const [activeTab, setActiveTab] = useState("overview");
|
||||
|
||||
const handleTabChange = (tabId: string) => {
|
||||
// If clicking asset-description, performance-analysis, or asset-custody, scroll to that section
|
||||
if (tabId === "asset-description" || tabId === "performance-analysis" || tabId === "asset-custody") {
|
||||
setTimeout(() => {
|
||||
const element = document.getElementById(tabId);
|
||||
if (element) {
|
||||
element.scrollIntoView({ behavior: "smooth", block: "start" });
|
||||
}
|
||||
}, 100);
|
||||
// Keep active tab as overview
|
||||
setActiveTab("overview");
|
||||
} else {
|
||||
setActiveTab(tabId);
|
||||
}
|
||||
};
|
||||
|
||||
// Show OverviewTab for overview, asset-description, analytics, performance-analysis, and asset-custody
|
||||
const showOverview = ["overview", "asset-description", "analytics", "performance-analysis", "asset-custody"].includes(activeTab);
|
||||
|
||||
return (
|
||||
<div className="flex flex-col gap-6 w-full">
|
||||
{/* Tab Navigation */}
|
||||
<TabNavigation
|
||||
tabs={tabs}
|
||||
defaultActiveId="overview"
|
||||
onTabChange={handleTabChange}
|
||||
/>
|
||||
|
||||
{/* Content Area */}
|
||||
<div className="w-full">
|
||||
{showOverview && <OverviewTab />}
|
||||
{!showOverview && (
|
||||
<div className="bg-bg-surface rounded-2xl border border-border-normal p-6">
|
||||
<p className="text-text-tertiary">
|
||||
{tabs.find((t) => t.id === activeTab)?.label} content will be
|
||||
displayed here...
|
||||
</p>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
"use client";
|
||||
|
||||
import { useState } from "react";
|
||||
import TabNavigation from "./TabNavigation";
|
||||
import OverviewTab from "./OverviewTab";
|
||||
import { useApp } from "@/contexts/AppContext";
|
||||
|
||||
export default function ContentSection() {
|
||||
const { t } = useApp();
|
||||
|
||||
const tabs = [
|
||||
{ id: "overview", label: t("tabs.overview") },
|
||||
{ id: "asset-description", label: t("tabs.assetDescription") },
|
||||
{ id: "analytics", label: t("tabs.analytics") },
|
||||
{ id: "performance-analysis", label: t("tabs.performanceAnalysis") },
|
||||
{ id: "asset-custody", label: t("tabs.assetCustody") },
|
||||
];
|
||||
|
||||
const [activeTab, setActiveTab] = useState("overview");
|
||||
|
||||
const handleTabChange = (tabId: string) => {
|
||||
// If clicking asset-description, performance-analysis, or asset-custody, scroll to that section
|
||||
if (tabId === "asset-description" || tabId === "performance-analysis" || tabId === "asset-custody") {
|
||||
setTimeout(() => {
|
||||
const element = document.getElementById(tabId);
|
||||
if (element) {
|
||||
element.scrollIntoView({ behavior: "smooth", block: "start" });
|
||||
}
|
||||
}, 100);
|
||||
// Keep active tab as overview
|
||||
setActiveTab("overview");
|
||||
} else {
|
||||
setActiveTab(tabId);
|
||||
}
|
||||
};
|
||||
|
||||
// Show OverviewTab for overview, asset-description, analytics, performance-analysis, and asset-custody
|
||||
const showOverview = ["overview", "asset-description", "analytics", "performance-analysis", "asset-custody"].includes(activeTab);
|
||||
|
||||
return (
|
||||
<div className="flex flex-col gap-6 w-full">
|
||||
{/* Tab Navigation */}
|
||||
<TabNavigation
|
||||
tabs={tabs}
|
||||
defaultActiveId="overview"
|
||||
onTabChange={handleTabChange}
|
||||
/>
|
||||
|
||||
{/* Content Area */}
|
||||
<div className="w-full">
|
||||
{showOverview && <OverviewTab />}
|
||||
{!showOverview && (
|
||||
<div className="bg-bg-surface rounded-2xl border border-border-normal p-6">
|
||||
<p className="text-text-tertiary">
|
||||
{tabs.find((t) => t.id === activeTab)?.label} content will be
|
||||
displayed here...
|
||||
</p>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,22 +1,22 @@
|
||||
"use client";
|
||||
|
||||
import { useApp } from "@/contexts/AppContext";
|
||||
|
||||
export default function LanguageSwitch() {
|
||||
const { language, setLanguage } = useApp();
|
||||
|
||||
const toggleLanguage = () => {
|
||||
setLanguage(language === "zh" ? "en" : "zh");
|
||||
};
|
||||
|
||||
return (
|
||||
<button
|
||||
onClick={toggleLanguage}
|
||||
className="bg-bg-surface dark:bg-gray-800 rounded-lg border border-border-normal dark:border-gray-700 px-3 py-2 flex items-center justify-center h-10 hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors"
|
||||
>
|
||||
<span className="text-sm font-medium text-text-primary dark:text-white">
|
||||
{language === "zh" ? "中" : "EN"}
|
||||
</span>
|
||||
</button>
|
||||
);
|
||||
}
|
||||
"use client";
|
||||
|
||||
import { useApp } from "@/contexts/AppContext";
|
||||
|
||||
export default function LanguageSwitch() {
|
||||
const { language, setLanguage } = useApp();
|
||||
|
||||
const toggleLanguage = () => {
|
||||
setLanguage(language === "zh" ? "en" : "zh");
|
||||
};
|
||||
|
||||
return (
|
||||
<button
|
||||
onClick={toggleLanguage}
|
||||
className="bg-bg-surface dark:bg-gray-800 rounded-lg border border-border-normal dark:border-gray-700 px-3 py-2 flex items-center justify-center h-10 hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors"
|
||||
>
|
||||
<span className="text-sm font-medium text-text-primary dark:text-white">
|
||||
{language === "zh" ? "中" : "EN"}
|
||||
</span>
|
||||
</button>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,199 +1,199 @@
|
||||
"use client";
|
||||
|
||||
import { useState } from "react";
|
||||
import Image from "next/image";
|
||||
import { useApp } from "@/contexts/AppContext";
|
||||
|
||||
export default function MintSwapPanel() {
|
||||
const { t } = useApp();
|
||||
const [activeMode, setActiveMode] = useState<"mint" | "swap">("mint");
|
||||
const [activeAction, setActiveAction] = useState<"deposit" | "withdraw">("deposit");
|
||||
|
||||
return (
|
||||
<div className="bg-bg-surface dark:bg-gray-800 rounded-3xl border border-border-gray dark:border-gray-700 flex flex-col">
|
||||
{/* Mint/Swap Tabs */}
|
||||
<div className="flex border-b border-border-gray dark:border-gray-700">
|
||||
<button
|
||||
onClick={() => setActiveMode("mint")}
|
||||
className={`flex-1 h-[53px] flex items-center justify-center text-body-small font-bold rounded-tl-3xl transition-colors ${
|
||||
activeMode === "mint"
|
||||
? "bg-bg-subtle dark:bg-gray-700 border-b-2 border-text-primary dark:border-blue-500 text-[#0f172b] dark:text-white"
|
||||
: "text-text-tertiary dark:text-gray-400"
|
||||
}`}
|
||||
>
|
||||
{t("mintSwap.mint")}
|
||||
</button>
|
||||
<button
|
||||
onClick={() => setActiveMode("swap")}
|
||||
className={`flex-1 h-[53px] flex items-center justify-center text-body-small font-bold transition-colors ${
|
||||
activeMode === "swap"
|
||||
? "bg-bg-subtle dark:bg-gray-700 border-b-2 border-text-primary dark:border-blue-500 text-[#0f172b] dark:text-white"
|
||||
: "text-text-tertiary dark:text-gray-400"
|
||||
}`}
|
||||
>
|
||||
{t("mintSwap.swap")}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{/* Content */}
|
||||
<div className="flex flex-col gap-6 p-6">
|
||||
{/* Deposit/Withdraw Toggle */}
|
||||
<div className="bg-[#f9fafb] dark:bg-gray-700 rounded-xl p-1 flex gap-0">
|
||||
<button
|
||||
onClick={() => setActiveAction("deposit")}
|
||||
className={`flex-1 h-8 px-4 rounded-lg text-body-small transition-all ${
|
||||
activeAction === "deposit"
|
||||
? "bg-bg-surface dark:bg-gray-600 font-bold text-text-primary dark:text-white shadow-sm"
|
||||
: "font-medium text-text-tertiary dark:text-gray-400"
|
||||
}`}
|
||||
>
|
||||
{t("mintSwap.deposit")}
|
||||
</button>
|
||||
<button
|
||||
onClick={() => setActiveAction("withdraw")}
|
||||
className={`flex-1 h-8 px-4 rounded-lg text-body-small transition-all ${
|
||||
activeAction === "withdraw"
|
||||
? "bg-bg-surface dark:bg-gray-600 font-bold text-text-primary dark:text-white shadow-sm"
|
||||
: "font-medium text-text-tertiary dark:text-gray-400"
|
||||
}`}
|
||||
>
|
||||
{t("mintSwap.withdraw")}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{/* Input Area */}
|
||||
<div className="flex flex-col gap-2">
|
||||
<div className="bg-bg-subtle dark:bg-gray-700 rounded-xl border border-border-gray dark:border-gray-600 p-4 flex flex-col gap-3">
|
||||
{/* Label and Balance */}
|
||||
<div className="flex items-center justify-between">
|
||||
<span className="text-caption-tiny font-medium text-[#4b5563] dark:text-gray-400">
|
||||
{t("mintSwap.deposit")}
|
||||
</span>
|
||||
<div className="flex items-center gap-1">
|
||||
<Image src="/icon7.svg" alt="" width={12} height={12} />
|
||||
<span className="text-caption-tiny font-medium text-[#4b5563] dark:text-gray-400">
|
||||
{t("mintSwap.balance")}: $12,500.00
|
||||
</span>
|
||||
<button className="rounded-full px-3 h-[22px] text-[10px] font-medium bg-[#e5e7eb] dark:bg-gray-600 text-[#111827] dark:text-white">
|
||||
{t("mintSwap.max")}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Input Row */}
|
||||
<div className="flex items-center justify-between">
|
||||
<button className="bg-bg-surface dark:bg-gray-600 rounded-full border border-border-normal dark:border-gray-500 px-2 h-[46px] flex items-center gap-2">
|
||||
<Image
|
||||
src="/usd-coin-usdc-logo-10.svg"
|
||||
alt="USDC"
|
||||
width={32}
|
||||
height={32}
|
||||
/>
|
||||
<span className="text-body-default font-bold text-text-primary dark:text-white">USDC</span>
|
||||
</button>
|
||||
<div className="flex flex-col items-end">
|
||||
<span className="text-heading-h3 font-bold text-[#d1d5db] dark:text-gray-500">
|
||||
0.00
|
||||
</span>
|
||||
<span className="text-caption-tiny font-regular text-text-tertiary dark:text-gray-400">--</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Estimated Returns */}
|
||||
<div className="bg-bg-subtle dark:bg-gray-700 rounded-xl border border-border-gray dark:border-gray-600 p-4 flex flex-col gap-2">
|
||||
<div className="flex items-center justify-between h-5">
|
||||
<span className="text-body-small font-bold text-[#4b5563] dark:text-gray-300">
|
||||
{t("mintSwap.estimatedReturns")}
|
||||
</span>
|
||||
</div>
|
||||
<div className="flex items-center justify-between h-5">
|
||||
<span className="text-body-small font-regular text-text-tertiary dark:text-gray-400">
|
||||
{t("mintSwap.estAPY")}
|
||||
</span>
|
||||
<span className="text-body-small font-bold text-[#ff6900] dark:text-orange-400">
|
||||
22%
|
||||
</span>
|
||||
</div>
|
||||
<div className="flex items-center justify-between h-5">
|
||||
<span className="text-body-small font-regular text-text-tertiary dark:text-gray-400">
|
||||
{t("mintSwap.estReturns")}
|
||||
</span>
|
||||
<span className="text-body-small font-bold text-[#10b981] dark:text-green-400">
|
||||
~ $0.50
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Transaction Summary */}
|
||||
<div className="bg-bg-subtle dark:bg-gray-700 rounded-xl border border-border-gray dark:border-gray-600 p-4 flex flex-col gap-2">
|
||||
<div className="flex items-center justify-between h-5">
|
||||
<span className="text-body-small font-bold text-[#4b5563] dark:text-gray-300">
|
||||
{t("mintSwap.transactionSummary")}
|
||||
</span>
|
||||
</div>
|
||||
<div className="flex items-center justify-between h-5">
|
||||
<span className="text-body-small font-regular text-text-tertiary dark:text-gray-400">
|
||||
{t("mintSwap.youGet")}
|
||||
</span>
|
||||
<span className="text-body-small font-bold text-[#10b981] dark:text-green-400">
|
||||
9852.21 GYUS
|
||||
</span>
|
||||
</div>
|
||||
<div className="flex items-center justify-between h-5">
|
||||
<span className="text-body-small font-regular text-text-tertiary dark:text-gray-400">
|
||||
{t("mintSwap.salesPrice")}
|
||||
</span>
|
||||
<span className="text-body-small font-bold text-text-primary dark:text-white">$1.04 USDC</span>
|
||||
</div>
|
||||
<div className="flex items-center justify-between h-5">
|
||||
<span className="text-body-small font-regular text-text-tertiary dark:text-gray-400">
|
||||
{t("mintSwap.fee")}
|
||||
</span>
|
||||
<span className="text-body-small font-bold text-[#dc2626] dark:text-red-400">
|
||||
-$50 (0.5%)
|
||||
</span>
|
||||
</div>
|
||||
<div className="flex items-center justify-between h-5">
|
||||
<span className="text-body-small font-regular text-text-tertiary dark:text-gray-400">
|
||||
{t("mintSwap.gas")}
|
||||
</span>
|
||||
<span className="text-body-small font-bold text-[#dc2626] dark:text-red-400">
|
||||
-$0.09
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Submit Button */}
|
||||
<button
|
||||
className="rounded-xl h-12 flex items-center justify-center gap-2 bg-[#9ca1af] dark:bg-gray-600"
|
||||
disabled
|
||||
>
|
||||
<span className="text-lg font-bold text-white leading-7">
|
||||
{t("mintSwap.approveDeposit")}
|
||||
</span>
|
||||
<Image src="/icon8.svg" alt="" width={20} height={20} />
|
||||
</button>
|
||||
|
||||
{/* Terms */}
|
||||
<div className="flex flex-col gap-0 text-center">
|
||||
<div className="text-caption-tiny font-regular">
|
||||
<span className="text-[#9ca1af] dark:text-gray-400">
|
||||
{t("mintSwap.termsText")}{" "}
|
||||
</span>
|
||||
<span className="text-[#10b981] dark:text-green-400">
|
||||
{t("mintSwap.termsOfService")}
|
||||
</span>
|
||||
<span className="text-[#9ca1af] dark:text-gray-400">
|
||||
{" "}{t("mintSwap.and")}
|
||||
</span>
|
||||
</div>
|
||||
<span className="text-caption-tiny font-regular text-[#10b981] dark:text-green-400">
|
||||
{t("mintSwap.privacyPolicy")}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
"use client";
|
||||
|
||||
import { useState } from "react";
|
||||
import Image from "next/image";
|
||||
import { useApp } from "@/contexts/AppContext";
|
||||
|
||||
export default function MintSwapPanel() {
|
||||
const { t } = useApp();
|
||||
const [activeMode, setActiveMode] = useState<"mint" | "swap">("mint");
|
||||
const [activeAction, setActiveAction] = useState<"deposit" | "withdraw">("deposit");
|
||||
|
||||
return (
|
||||
<div className="bg-bg-surface dark:bg-gray-800 rounded-3xl border border-border-gray dark:border-gray-700 flex flex-col">
|
||||
{/* Mint/Swap Tabs */}
|
||||
<div className="flex border-b border-border-gray dark:border-gray-700">
|
||||
<button
|
||||
onClick={() => setActiveMode("mint")}
|
||||
className={`flex-1 h-[53px] flex items-center justify-center text-body-small font-bold rounded-tl-3xl transition-colors ${
|
||||
activeMode === "mint"
|
||||
? "bg-bg-subtle dark:bg-gray-700 border-b-2 border-text-primary dark:border-blue-500 text-[#0f172b] dark:text-white"
|
||||
: "text-text-tertiary dark:text-gray-400"
|
||||
}`}
|
||||
>
|
||||
{t("mintSwap.mint")}
|
||||
</button>
|
||||
<button
|
||||
onClick={() => setActiveMode("swap")}
|
||||
className={`flex-1 h-[53px] flex items-center justify-center text-body-small font-bold transition-colors ${
|
||||
activeMode === "swap"
|
||||
? "bg-bg-subtle dark:bg-gray-700 border-b-2 border-text-primary dark:border-blue-500 text-[#0f172b] dark:text-white"
|
||||
: "text-text-tertiary dark:text-gray-400"
|
||||
}`}
|
||||
>
|
||||
{t("mintSwap.swap")}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{/* Content */}
|
||||
<div className="flex flex-col gap-6 p-6">
|
||||
{/* Deposit/Withdraw Toggle */}
|
||||
<div className="bg-[#f9fafb] dark:bg-gray-700 rounded-xl p-1 flex gap-0">
|
||||
<button
|
||||
onClick={() => setActiveAction("deposit")}
|
||||
className={`flex-1 h-8 px-4 rounded-lg text-body-small transition-all ${
|
||||
activeAction === "deposit"
|
||||
? "bg-bg-surface dark:bg-gray-600 font-bold text-text-primary dark:text-white shadow-sm"
|
||||
: "font-medium text-text-tertiary dark:text-gray-400"
|
||||
}`}
|
||||
>
|
||||
{t("mintSwap.deposit")}
|
||||
</button>
|
||||
<button
|
||||
onClick={() => setActiveAction("withdraw")}
|
||||
className={`flex-1 h-8 px-4 rounded-lg text-body-small transition-all ${
|
||||
activeAction === "withdraw"
|
||||
? "bg-bg-surface dark:bg-gray-600 font-bold text-text-primary dark:text-white shadow-sm"
|
||||
: "font-medium text-text-tertiary dark:text-gray-400"
|
||||
}`}
|
||||
>
|
||||
{t("mintSwap.withdraw")}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{/* Input Area */}
|
||||
<div className="flex flex-col gap-2">
|
||||
<div className="bg-bg-subtle dark:bg-gray-700 rounded-xl border border-border-gray dark:border-gray-600 p-4 flex flex-col gap-3">
|
||||
{/* Label and Balance */}
|
||||
<div className="flex items-center justify-between">
|
||||
<span className="text-caption-tiny font-medium text-[#4b5563] dark:text-gray-400">
|
||||
{t("mintSwap.deposit")}
|
||||
</span>
|
||||
<div className="flex items-center gap-1">
|
||||
<Image src="/icon7.svg" alt="" width={12} height={12} />
|
||||
<span className="text-caption-tiny font-medium text-[#4b5563] dark:text-gray-400">
|
||||
{t("mintSwap.balance")}: $12,500.00
|
||||
</span>
|
||||
<button className="rounded-full px-3 h-[22px] text-[10px] font-medium bg-[#e5e7eb] dark:bg-gray-600 text-[#111827] dark:text-white">
|
||||
{t("mintSwap.max")}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Input Row */}
|
||||
<div className="flex items-center justify-between">
|
||||
<button className="bg-bg-surface dark:bg-gray-600 rounded-full border border-border-normal dark:border-gray-500 px-2 h-[46px] flex items-center gap-2">
|
||||
<Image
|
||||
src="/usd-coin-usdc-logo-10.svg"
|
||||
alt="USDC"
|
||||
width={32}
|
||||
height={32}
|
||||
/>
|
||||
<span className="text-body-default font-bold text-text-primary dark:text-white">USDC</span>
|
||||
</button>
|
||||
<div className="flex flex-col items-end">
|
||||
<span className="text-heading-h3 font-bold text-[#d1d5db] dark:text-gray-500">
|
||||
0.00
|
||||
</span>
|
||||
<span className="text-caption-tiny font-regular text-text-tertiary dark:text-gray-400">--</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Estimated Returns */}
|
||||
<div className="bg-bg-subtle dark:bg-gray-700 rounded-xl border border-border-gray dark:border-gray-600 p-4 flex flex-col gap-2">
|
||||
<div className="flex items-center justify-between h-5">
|
||||
<span className="text-body-small font-bold text-[#4b5563] dark:text-gray-300">
|
||||
{t("mintSwap.estimatedReturns")}
|
||||
</span>
|
||||
</div>
|
||||
<div className="flex items-center justify-between h-5">
|
||||
<span className="text-body-small font-regular text-text-tertiary dark:text-gray-400">
|
||||
{t("mintSwap.estAPY")}
|
||||
</span>
|
||||
<span className="text-body-small font-bold text-[#ff6900] dark:text-orange-400">
|
||||
22%
|
||||
</span>
|
||||
</div>
|
||||
<div className="flex items-center justify-between h-5">
|
||||
<span className="text-body-small font-regular text-text-tertiary dark:text-gray-400">
|
||||
{t("mintSwap.estReturns")}
|
||||
</span>
|
||||
<span className="text-body-small font-bold text-[#10b981] dark:text-green-400">
|
||||
~ $0.50
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Transaction Summary */}
|
||||
<div className="bg-bg-subtle dark:bg-gray-700 rounded-xl border border-border-gray dark:border-gray-600 p-4 flex flex-col gap-2">
|
||||
<div className="flex items-center justify-between h-5">
|
||||
<span className="text-body-small font-bold text-[#4b5563] dark:text-gray-300">
|
||||
{t("mintSwap.transactionSummary")}
|
||||
</span>
|
||||
</div>
|
||||
<div className="flex items-center justify-between h-5">
|
||||
<span className="text-body-small font-regular text-text-tertiary dark:text-gray-400">
|
||||
{t("mintSwap.youGet")}
|
||||
</span>
|
||||
<span className="text-body-small font-bold text-[#10b981] dark:text-green-400">
|
||||
9852.21 GYUS
|
||||
</span>
|
||||
</div>
|
||||
<div className="flex items-center justify-between h-5">
|
||||
<span className="text-body-small font-regular text-text-tertiary dark:text-gray-400">
|
||||
{t("mintSwap.salesPrice")}
|
||||
</span>
|
||||
<span className="text-body-small font-bold text-text-primary dark:text-white">$1.04 USDC</span>
|
||||
</div>
|
||||
<div className="flex items-center justify-between h-5">
|
||||
<span className="text-body-small font-regular text-text-tertiary dark:text-gray-400">
|
||||
{t("mintSwap.fee")}
|
||||
</span>
|
||||
<span className="text-body-small font-bold text-[#dc2626] dark:text-red-400">
|
||||
-$50 (0.5%)
|
||||
</span>
|
||||
</div>
|
||||
<div className="flex items-center justify-between h-5">
|
||||
<span className="text-body-small font-regular text-text-tertiary dark:text-gray-400">
|
||||
{t("mintSwap.gas")}
|
||||
</span>
|
||||
<span className="text-body-small font-bold text-[#dc2626] dark:text-red-400">
|
||||
-$0.09
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Submit Button */}
|
||||
<button
|
||||
className="rounded-xl h-12 flex items-center justify-center gap-2 bg-[#9ca1af] dark:bg-gray-600"
|
||||
disabled
|
||||
>
|
||||
<span className="text-lg font-bold text-white leading-7">
|
||||
{t("mintSwap.approveDeposit")}
|
||||
</span>
|
||||
<Image src="/icon8.svg" alt="" width={20} height={20} />
|
||||
</button>
|
||||
|
||||
{/* Terms */}
|
||||
<div className="flex flex-col gap-0 text-center">
|
||||
<div className="text-caption-tiny font-regular">
|
||||
<span className="text-[#9ca1af] dark:text-gray-400">
|
||||
{t("mintSwap.termsText")}{" "}
|
||||
</span>
|
||||
<span className="text-[#10b981] dark:text-green-400">
|
||||
{t("mintSwap.termsOfService")}
|
||||
</span>
|
||||
<span className="text-[#9ca1af] dark:text-gray-400">
|
||||
{" "}{t("mintSwap.and")}
|
||||
</span>
|
||||
</div>
|
||||
<span className="text-caption-tiny font-regular text-[#10b981] dark:text-green-400">
|
||||
{t("mintSwap.privacyPolicy")}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,53 +1,53 @@
|
||||
import Image from "next/image";
|
||||
|
||||
interface NavItemProps {
|
||||
icon: string;
|
||||
label: string;
|
||||
isActive: boolean;
|
||||
onClick: () => void;
|
||||
}
|
||||
|
||||
export default function NavItem({ icon, label, isActive, onClick }: NavItemProps) {
|
||||
return (
|
||||
<button
|
||||
onClick={onClick}
|
||||
className={`
|
||||
rounded-xl
|
||||
pl-4
|
||||
flex
|
||||
items-center
|
||||
gap-2
|
||||
h-[42px]
|
||||
w-full
|
||||
overflow-hidden
|
||||
transition-colors
|
||||
${isActive
|
||||
? 'bg-fill-secondary-click'
|
||||
: 'hover:bg-gray-50'
|
||||
}
|
||||
`}
|
||||
>
|
||||
<div className="w-[22px] h-[22px] flex-shrink-0 relative">
|
||||
<Image
|
||||
src={icon}
|
||||
alt={label}
|
||||
width={22}
|
||||
height={22}
|
||||
className="w-full h-full"
|
||||
/>
|
||||
</div>
|
||||
<span
|
||||
className={`
|
||||
text-sm
|
||||
leading-[150%]
|
||||
${isActive
|
||||
? 'text-text-primary font-bold'
|
||||
: 'text-text-tertiary font-medium'
|
||||
}
|
||||
`}
|
||||
>
|
||||
{label}
|
||||
</span>
|
||||
</button>
|
||||
);
|
||||
}
|
||||
import Image from "next/image";
|
||||
|
||||
interface NavItemProps {
|
||||
icon: string;
|
||||
label: string;
|
||||
isActive: boolean;
|
||||
onClick: () => void;
|
||||
}
|
||||
|
||||
export default function NavItem({ icon, label, isActive, onClick }: NavItemProps) {
|
||||
return (
|
||||
<button
|
||||
onClick={onClick}
|
||||
className={`
|
||||
rounded-xl
|
||||
pl-4
|
||||
flex
|
||||
items-center
|
||||
gap-2
|
||||
h-[42px]
|
||||
w-full
|
||||
overflow-hidden
|
||||
transition-colors
|
||||
${isActive
|
||||
? 'bg-fill-secondary-click'
|
||||
: 'hover:bg-gray-50'
|
||||
}
|
||||
`}
|
||||
>
|
||||
<div className="w-[22px] h-[22px] flex-shrink-0 relative">
|
||||
<Image
|
||||
src={icon}
|
||||
alt={label}
|
||||
width={22}
|
||||
height={22}
|
||||
className="w-full h-full"
|
||||
/>
|
||||
</div>
|
||||
<span
|
||||
className={`
|
||||
text-sm
|
||||
leading-[150%]
|
||||
${isActive
|
||||
? 'text-text-primary font-bold'
|
||||
: 'text-text-tertiary font-medium'
|
||||
}
|
||||
`}
|
||||
>
|
||||
{label}
|
||||
</span>
|
||||
</button>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,55 +1,55 @@
|
||||
import ProductHeader from "./ProductHeader";
|
||||
import StatsCards from "./StatsCards";
|
||||
import AssetOverviewCard from "./AssetOverviewCard";
|
||||
import APYHistoryCard from "./APYHistoryCard";
|
||||
import AssetDescriptionCard from "./AssetDescriptionCard";
|
||||
import MintSwapPanel from "./MintSwapPanel";
|
||||
import ProtocolInformation from "./ProtocolInformation";
|
||||
import PerformanceAnalysis from "./PerformanceAnalysis";
|
||||
import Season1Rewards from "./Season1Rewards";
|
||||
import AssetCustodyVerification from "./AssetCustodyVerification";
|
||||
|
||||
export default function OverviewTab() {
|
||||
return (
|
||||
<div className="flex flex-col gap-8 w-full">
|
||||
{/* Product Header */}
|
||||
<ProductHeader />
|
||||
|
||||
{/* Stats Cards */}
|
||||
<StatsCards />
|
||||
|
||||
{/* Main Content Grid */}
|
||||
<div className="grid grid-cols-3 gap-8">
|
||||
{/* Left Column - 2/3 width */}
|
||||
<div className="col-span-2 flex flex-col gap-8">
|
||||
<AssetOverviewCard />
|
||||
<APYHistoryCard />
|
||||
<div id="asset-description">
|
||||
<AssetDescriptionCard />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Right Column - 1/3 width */}
|
||||
<div className="col-span-1">
|
||||
<div className="sticky top-8 flex flex-col gap-8">
|
||||
<MintSwapPanel />
|
||||
<ProtocolInformation />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Season 1 Rewards */}
|
||||
<Season1Rewards />
|
||||
|
||||
{/* Performance Analysis */}
|
||||
<div id="performance-analysis">
|
||||
<PerformanceAnalysis />
|
||||
</div>
|
||||
|
||||
{/* Asset Custody & Verification */}
|
||||
<div id="asset-custody">
|
||||
<AssetCustodyVerification />
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
import ProductHeader from "./ProductHeader";
|
||||
import StatsCards from "./StatsCards";
|
||||
import AssetOverviewCard from "./AssetOverviewCard";
|
||||
import APYHistoryCard from "./APYHistoryCard";
|
||||
import AssetDescriptionCard from "./AssetDescriptionCard";
|
||||
import MintSwapPanel from "./MintSwapPanel";
|
||||
import ProtocolInformation from "./ProtocolInformation";
|
||||
import PerformanceAnalysis from "./PerformanceAnalysis";
|
||||
import Season1Rewards from "./Season1Rewards";
|
||||
import AssetCustodyVerification from "./AssetCustodyVerification";
|
||||
|
||||
export default function OverviewTab() {
|
||||
return (
|
||||
<div className="flex flex-col gap-8 w-full">
|
||||
{/* Product Header */}
|
||||
<ProductHeader />
|
||||
|
||||
{/* Stats Cards */}
|
||||
<StatsCards />
|
||||
|
||||
{/* Main Content Grid */}
|
||||
<div className="grid grid-cols-3 gap-8">
|
||||
{/* Left Column - 2/3 width */}
|
||||
<div className="col-span-2 flex flex-col gap-8">
|
||||
<AssetOverviewCard />
|
||||
<APYHistoryCard />
|
||||
<div id="asset-description">
|
||||
<AssetDescriptionCard />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Right Column - 1/3 width */}
|
||||
<div className="col-span-1">
|
||||
<div className="sticky top-8 flex flex-col gap-8">
|
||||
<MintSwapPanel />
|
||||
<ProtocolInformation />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Season 1 Rewards */}
|
||||
<Season1Rewards />
|
||||
|
||||
{/* Performance Analysis */}
|
||||
<div id="performance-analysis">
|
||||
<PerformanceAnalysis />
|
||||
</div>
|
||||
|
||||
{/* Asset Custody & Verification */}
|
||||
<div id="asset-custody">
|
||||
<AssetCustodyVerification />
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,207 +1,207 @@
|
||||
"use client";
|
||||
|
||||
import { useState } from "react";
|
||||
import Image from "next/image";
|
||||
import { useApp } from "@/contexts/AppContext";
|
||||
|
||||
interface CalendarDayProps {
|
||||
day: number | null;
|
||||
value: string;
|
||||
type: "positive" | "negative" | "neutral" | "current";
|
||||
}
|
||||
|
||||
function CalendarDay({ day, value, type }: CalendarDayProps) {
|
||||
// Empty cell
|
||||
if (day === null) {
|
||||
return <div className="flex-1" />;
|
||||
}
|
||||
|
||||
const typeStyles = {
|
||||
positive: "bg-[#f2fcf7] dark:bg-green-900/20 border-[#cef3e0] dark:border-green-700/30",
|
||||
negative: "bg-[#fff8f7] dark:bg-red-900/20 border-[#ffdbd5] dark:border-red-700/30",
|
||||
neutral: "bg-[#f9fafb] dark:bg-gray-700 border-[#f3f4f6] dark:border-gray-600",
|
||||
current: "bg-[#111827] dark:bg-blue-600 border-[#111827] dark:border-blue-600",
|
||||
};
|
||||
|
||||
const isCurrent = type === "current";
|
||||
const dayTextStyle = isCurrent
|
||||
? "text-[#fcfcfd]"
|
||||
: "text-[#9ca1af] dark:text-gray-400";
|
||||
|
||||
// Value text color should match the type
|
||||
let valueTextStyle = "";
|
||||
if (isCurrent) {
|
||||
valueTextStyle = "text-[#fcfcfd]";
|
||||
} else if (type === "positive") {
|
||||
valueTextStyle = "text-[#10b981] dark:text-green-400";
|
||||
} else if (type === "negative") {
|
||||
valueTextStyle = "text-[#dc2626] dark:text-red-400";
|
||||
} else {
|
||||
valueTextStyle = "text-[#9ca1af] dark:text-gray-400";
|
||||
}
|
||||
|
||||
return (
|
||||
<div
|
||||
className={`rounded border flex flex-col items-center justify-center flex-1 p-3 gap-6 ${typeStyles[type]}`}
|
||||
>
|
||||
<div className="w-full flex items-start">
|
||||
<span className={`text-[10px] font-bold leading-[150%] ${dayTextStyle}`}>
|
||||
{day}
|
||||
</span>
|
||||
</div>
|
||||
<div className="w-full flex items-end justify-end">
|
||||
<span className={`text-body-small font-bold leading-[150%] ${valueTextStyle}`}>
|
||||
{value}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
interface StatCardProps {
|
||||
label: string;
|
||||
value: string;
|
||||
}
|
||||
|
||||
function StatCard({ label, value }: StatCardProps) {
|
||||
return (
|
||||
<div className="flex flex-col items-center gap-1">
|
||||
<span className="text-[10px] font-bold leading-[150%] tracking-[0.01em] text-[#9ca1af] dark:text-gray-400">
|
||||
{label}
|
||||
</span>
|
||||
<span className="text-body-large font-bold text-[#10b981] dark:text-green-400">
|
||||
{value}
|
||||
</span>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default function PerformanceAnalysis() {
|
||||
const { t } = useApp();
|
||||
const [currentMonth] = useState("November 2025");
|
||||
|
||||
// 模拟日历数据 - 5周数据
|
||||
const weekData = [
|
||||
[
|
||||
{ day: 31, value: "0.00%", type: "neutral" as const },
|
||||
{ day: 1, value: "+0.12%", type: "positive" as const },
|
||||
{ day: 2, value: "+0.08%", type: "positive" as const },
|
||||
{ day: 3, value: "-0.03%", type: "negative" as const },
|
||||
{ day: 4, value: "+0.15%", type: "positive" as const },
|
||||
{ day: 5, value: "+0.21%", type: "positive" as const },
|
||||
{ day: 6, value: "0.00%", type: "neutral" as const },
|
||||
],
|
||||
[
|
||||
{ day: 7, value: "+0.12%", type: "positive" as const },
|
||||
{ day: 8, value: "+0.12%", type: "positive" as const },
|
||||
{ day: 9, value: "-0.03%", type: "negative" as const },
|
||||
{ day: 10, value: "+0.08%", type: "positive" as const },
|
||||
{ day: 11, value: "-0.03%", type: "negative" as const },
|
||||
{ day: 12, value: "+0.21%", type: "positive" as const },
|
||||
{ day: 13, value: "0.00%", type: "neutral" as const },
|
||||
],
|
||||
[
|
||||
{ day: 14, value: "-0.03%", type: "negative" as const },
|
||||
{ day: 15, value: "-0.03%", type: "negative" as const },
|
||||
{ day: 16, value: "+0.15%", type: "positive" as const },
|
||||
{ day: 17, value: "+0.21%", type: "positive" as const },
|
||||
{ day: 18, value: "+0.08%", type: "positive" as const },
|
||||
{ day: 19, value: "0.00%", type: "neutral" as const },
|
||||
{ day: 20, value: "+0.12%", type: "positive" as const },
|
||||
],
|
||||
[
|
||||
{ day: 21, value: "+0.08%", type: "positive" as const },
|
||||
{ day: 22, value: "+0.15%", type: "positive" as const },
|
||||
{ day: 23, value: "-0.03%", type: "negative" as const },
|
||||
{ day: 24, value: "+0.12%", type: "current" as const },
|
||||
{ day: 25, value: "0.00%", type: "neutral" as const },
|
||||
{ day: 26, value: "+0.21%", type: "positive" as const },
|
||||
{ day: 27, value: "+0.08%", type: "positive" as const },
|
||||
],
|
||||
[
|
||||
{ day: 28, value: "+0.12%", type: "positive" as const },
|
||||
{ day: 30, value: "-0.03%", type: "negative" as const },
|
||||
{ day: 29, value: "-0.03%", type: "negative" as const },
|
||||
{ day: null, value: "", type: "neutral" as const },
|
||||
{ day: null, value: "", type: "neutral" as const },
|
||||
{ day: null, value: "", type: "neutral" as const },
|
||||
{ day: null, value: "", type: "neutral" as const },
|
||||
],
|
||||
];
|
||||
|
||||
return (
|
||||
<div className="bg-bg-surface dark:bg-gray-800 rounded-3xl border border-border-gray dark:border-gray-700 p-8 flex flex-col gap-8">
|
||||
{/* Top Section - Title and Stats */}
|
||||
<div className="flex items-start justify-between pb-8 border-b border-border-gray dark:border-gray-700">
|
||||
<div className="flex flex-col gap-2">
|
||||
<h2 className="text-body-large font-bold text-text-primary dark:text-white">
|
||||
{t("performance.title")}
|
||||
</h2>
|
||||
<p className="text-body-small font-regular text-[#9ca1af] dark:text-gray-400">
|
||||
{t("performance.description")}
|
||||
</p>
|
||||
</div>
|
||||
<div className="flex items-center gap-8">
|
||||
<StatCard label={t("performance.ytd")} value="+8.7%" />
|
||||
<StatCard label={t("performance.ytd")} value="+8.7%" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Calendar Section */}
|
||||
<div className="flex flex-col gap-6">
|
||||
{/* Calendar Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div className="flex items-center gap-2">
|
||||
<div className="w-6 h-6">
|
||||
<Image src="/component-114.svg" alt="" width={24} height={24} />
|
||||
</div>
|
||||
<h3 className="text-body-small font-bold text-text-primary dark:text-white">
|
||||
{t("performance.dailyNetReturns")}
|
||||
</h3>
|
||||
</div>
|
||||
<div className="flex items-center gap-2">
|
||||
<button className="w-6 h-6 rounded-lg flex items-center justify-center hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors">
|
||||
<Image src="/icon9.svg" alt="Previous" width={16} height={16} />
|
||||
</button>
|
||||
<span className="text-body-small font-bold text-[#0a0a0a] dark:text-white tracking-tight">
|
||||
{currentMonth}
|
||||
</span>
|
||||
<button className="w-6 h-6 rounded-lg flex items-center justify-center hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors">
|
||||
<Image src="/icon10.svg" alt="Next" width={16} height={16} />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Calendar */}
|
||||
<div className="flex flex-col gap-4">
|
||||
{/* Weekday Headers */}
|
||||
<div className="grid grid-cols-7 gap-2">
|
||||
{["sun", "mon", "tue", "wed", "thu", "fri", "sat"].map((day) => (
|
||||
<div key={day} className="flex items-center justify-center">
|
||||
<span className="text-[10px] font-bold leading-[150%] text-[#94a3b8] dark:text-gray-400">
|
||||
{t(`performance.weekdays.${day}`)}
|
||||
</span>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
|
||||
{/* Calendar Grid */}
|
||||
<div className="flex flex-col gap-1">
|
||||
{weekData.map((week, weekIndex) => (
|
||||
<div key={weekIndex} className="grid grid-cols-7 gap-2">
|
||||
{week.map((day, dayIndex) => (
|
||||
<CalendarDay
|
||||
key={`${weekIndex}-${dayIndex}`}
|
||||
day={day.day}
|
||||
value={day.value}
|
||||
type={day.type}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
"use client";
|
||||
|
||||
import { useState } from "react";
|
||||
import Image from "next/image";
|
||||
import { useApp } from "@/contexts/AppContext";
|
||||
|
||||
interface CalendarDayProps {
|
||||
day: number | null;
|
||||
value: string;
|
||||
type: "positive" | "negative" | "neutral" | "current";
|
||||
}
|
||||
|
||||
function CalendarDay({ day, value, type }: CalendarDayProps) {
|
||||
// Empty cell
|
||||
if (day === null) {
|
||||
return <div className="flex-1" />;
|
||||
}
|
||||
|
||||
const typeStyles = {
|
||||
positive: "bg-[#f2fcf7] dark:bg-green-900/20 border-[#cef3e0] dark:border-green-700/30",
|
||||
negative: "bg-[#fff8f7] dark:bg-red-900/20 border-[#ffdbd5] dark:border-red-700/30",
|
||||
neutral: "bg-[#f9fafb] dark:bg-gray-700 border-[#f3f4f6] dark:border-gray-600",
|
||||
current: "bg-[#111827] dark:bg-blue-600 border-[#111827] dark:border-blue-600",
|
||||
};
|
||||
|
||||
const isCurrent = type === "current";
|
||||
const dayTextStyle = isCurrent
|
||||
? "text-[#fcfcfd]"
|
||||
: "text-[#9ca1af] dark:text-gray-400";
|
||||
|
||||
// Value text color should match the type
|
||||
let valueTextStyle = "";
|
||||
if (isCurrent) {
|
||||
valueTextStyle = "text-[#fcfcfd]";
|
||||
} else if (type === "positive") {
|
||||
valueTextStyle = "text-[#10b981] dark:text-green-400";
|
||||
} else if (type === "negative") {
|
||||
valueTextStyle = "text-[#dc2626] dark:text-red-400";
|
||||
} else {
|
||||
valueTextStyle = "text-[#9ca1af] dark:text-gray-400";
|
||||
}
|
||||
|
||||
return (
|
||||
<div
|
||||
className={`rounded border flex flex-col items-center justify-center flex-1 p-3 gap-6 ${typeStyles[type]}`}
|
||||
>
|
||||
<div className="w-full flex items-start">
|
||||
<span className={`text-[10px] font-bold leading-[150%] ${dayTextStyle}`}>
|
||||
{day}
|
||||
</span>
|
||||
</div>
|
||||
<div className="w-full flex items-end justify-end">
|
||||
<span className={`text-body-small font-bold leading-[150%] ${valueTextStyle}`}>
|
||||
{value}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
interface StatCardProps {
|
||||
label: string;
|
||||
value: string;
|
||||
}
|
||||
|
||||
function StatCard({ label, value }: StatCardProps) {
|
||||
return (
|
||||
<div className="flex flex-col items-center gap-1">
|
||||
<span className="text-[10px] font-bold leading-[150%] tracking-[0.01em] text-[#9ca1af] dark:text-gray-400">
|
||||
{label}
|
||||
</span>
|
||||
<span className="text-body-large font-bold text-[#10b981] dark:text-green-400">
|
||||
{value}
|
||||
</span>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default function PerformanceAnalysis() {
|
||||
const { t } = useApp();
|
||||
const [currentMonth] = useState("November 2025");
|
||||
|
||||
// 模拟日历数据 - 5周数据
|
||||
const weekData = [
|
||||
[
|
||||
{ day: 31, value: "0.00%", type: "neutral" as const },
|
||||
{ day: 1, value: "+0.12%", type: "positive" as const },
|
||||
{ day: 2, value: "+0.08%", type: "positive" as const },
|
||||
{ day: 3, value: "-0.03%", type: "negative" as const },
|
||||
{ day: 4, value: "+0.15%", type: "positive" as const },
|
||||
{ day: 5, value: "+0.21%", type: "positive" as const },
|
||||
{ day: 6, value: "0.00%", type: "neutral" as const },
|
||||
],
|
||||
[
|
||||
{ day: 7, value: "+0.12%", type: "positive" as const },
|
||||
{ day: 8, value: "+0.12%", type: "positive" as const },
|
||||
{ day: 9, value: "-0.03%", type: "negative" as const },
|
||||
{ day: 10, value: "+0.08%", type: "positive" as const },
|
||||
{ day: 11, value: "-0.03%", type: "negative" as const },
|
||||
{ day: 12, value: "+0.21%", type: "positive" as const },
|
||||
{ day: 13, value: "0.00%", type: "neutral" as const },
|
||||
],
|
||||
[
|
||||
{ day: 14, value: "-0.03%", type: "negative" as const },
|
||||
{ day: 15, value: "-0.03%", type: "negative" as const },
|
||||
{ day: 16, value: "+0.15%", type: "positive" as const },
|
||||
{ day: 17, value: "+0.21%", type: "positive" as const },
|
||||
{ day: 18, value: "+0.08%", type: "positive" as const },
|
||||
{ day: 19, value: "0.00%", type: "neutral" as const },
|
||||
{ day: 20, value: "+0.12%", type: "positive" as const },
|
||||
],
|
||||
[
|
||||
{ day: 21, value: "+0.08%", type: "positive" as const },
|
||||
{ day: 22, value: "+0.15%", type: "positive" as const },
|
||||
{ day: 23, value: "-0.03%", type: "negative" as const },
|
||||
{ day: 24, value: "+0.12%", type: "current" as const },
|
||||
{ day: 25, value: "0.00%", type: "neutral" as const },
|
||||
{ day: 26, value: "+0.21%", type: "positive" as const },
|
||||
{ day: 27, value: "+0.08%", type: "positive" as const },
|
||||
],
|
||||
[
|
||||
{ day: 28, value: "+0.12%", type: "positive" as const },
|
||||
{ day: 30, value: "-0.03%", type: "negative" as const },
|
||||
{ day: 29, value: "-0.03%", type: "negative" as const },
|
||||
{ day: null, value: "", type: "neutral" as const },
|
||||
{ day: null, value: "", type: "neutral" as const },
|
||||
{ day: null, value: "", type: "neutral" as const },
|
||||
{ day: null, value: "", type: "neutral" as const },
|
||||
],
|
||||
];
|
||||
|
||||
return (
|
||||
<div className="bg-bg-surface dark:bg-gray-800 rounded-3xl border border-border-gray dark:border-gray-700 p-8 flex flex-col gap-8">
|
||||
{/* Top Section - Title and Stats */}
|
||||
<div className="flex items-start justify-between pb-8 border-b border-border-gray dark:border-gray-700">
|
||||
<div className="flex flex-col gap-2">
|
||||
<h2 className="text-body-large font-bold text-text-primary dark:text-white">
|
||||
{t("performance.title")}
|
||||
</h2>
|
||||
<p className="text-body-small font-regular text-[#9ca1af] dark:text-gray-400">
|
||||
{t("performance.description")}
|
||||
</p>
|
||||
</div>
|
||||
<div className="flex items-center gap-8">
|
||||
<StatCard label={t("performance.ytd")} value="+8.7%" />
|
||||
<StatCard label={t("performance.ytd")} value="+8.7%" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Calendar Section */}
|
||||
<div className="flex flex-col gap-6">
|
||||
{/* Calendar Header */}
|
||||
<div className="flex items-center justify-between">
|
||||
<div className="flex items-center gap-2">
|
||||
<div className="w-6 h-6">
|
||||
<Image src="/component-114.svg" alt="" width={24} height={24} />
|
||||
</div>
|
||||
<h3 className="text-body-small font-bold text-text-primary dark:text-white">
|
||||
{t("performance.dailyNetReturns")}
|
||||
</h3>
|
||||
</div>
|
||||
<div className="flex items-center gap-2">
|
||||
<button className="w-6 h-6 rounded-lg flex items-center justify-center hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors">
|
||||
<Image src="/icon9.svg" alt="Previous" width={16} height={16} />
|
||||
</button>
|
||||
<span className="text-body-small font-bold text-[#0a0a0a] dark:text-white tracking-tight">
|
||||
{currentMonth}
|
||||
</span>
|
||||
<button className="w-6 h-6 rounded-lg flex items-center justify-center hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors">
|
||||
<Image src="/icon10.svg" alt="Next" width={16} height={16} />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Calendar */}
|
||||
<div className="flex flex-col gap-4">
|
||||
{/* Weekday Headers */}
|
||||
<div className="grid grid-cols-7 gap-2">
|
||||
{["sun", "mon", "tue", "wed", "thu", "fri", "sat"].map((day) => (
|
||||
<div key={day} className="flex items-center justify-center">
|
||||
<span className="text-[10px] font-bold leading-[150%] text-[#94a3b8] dark:text-gray-400">
|
||||
{t(`performance.weekdays.${day}`)}
|
||||
</span>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
|
||||
{/* Calendar Grid */}
|
||||
<div className="flex flex-col gap-1">
|
||||
{weekData.map((week, weekIndex) => (
|
||||
<div key={weekIndex} className="grid grid-cols-7 gap-2">
|
||||
{week.map((day, dayIndex) => (
|
||||
<CalendarDay
|
||||
key={`${weekIndex}-${dayIndex}`}
|
||||
day={day.day}
|
||||
value={day.value}
|
||||
type={day.type}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import PerformanceAnalysis from "./PerformanceAnalysis";
|
||||
|
||||
export default function PerformanceAnalysisTab() {
|
||||
return (
|
||||
<div className="flex flex-col gap-8 w-full">
|
||||
<PerformanceAnalysis />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
import PerformanceAnalysis from "./PerformanceAnalysis";
|
||||
|
||||
export default function PerformanceAnalysisTab() {
|
||||
return (
|
||||
<div className="flex flex-col gap-8 w-full">
|
||||
<PerformanceAnalysis />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,35 +1,35 @@
|
||||
"use client";
|
||||
|
||||
import Image from "next/image";
|
||||
import { useApp } from "@/contexts/AppContext";
|
||||
|
||||
export default function ProductHeader() {
|
||||
const { t } = useApp();
|
||||
|
||||
return (
|
||||
<div className="flex flex-col gap-6">
|
||||
{/* Product Title Section */}
|
||||
<div className="flex items-start justify-between">
|
||||
<div className="flex gap-6">
|
||||
<div className="flex-shrink-0">
|
||||
<Image src="/lr0.svg" alt="Product Logo" width={80} height={80} />
|
||||
</div>
|
||||
<div className="flex flex-col gap-2">
|
||||
<h1 className="text-heading-h2 font-bold text-text-primary dark:text-white">
|
||||
{t("product.gyUsEquityIndexToken")}
|
||||
</h1>
|
||||
<p className="text-body-default font-regular text-text-tertiary dark:text-gray-400">
|
||||
High-Yield US Equity Quantitative Strategy - Institutional Grade RWA
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex items-center gap-2 px-4 py-2 bg-bg-subtle dark:bg-gray-700 rounded-lg border border-border-gray dark:border-gray-600">
|
||||
<Image src="/group-9270.svg" alt="Contract" width={16} height={16} />
|
||||
<span className="text-caption-tiny font-medium font-jetbrains text-text-tertiary dark:text-gray-400">
|
||||
{t("product.contractAddress")}: 0x1b19...4f2c
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
"use client";
|
||||
|
||||
import Image from "next/image";
|
||||
import { useApp } from "@/contexts/AppContext";
|
||||
|
||||
export default function ProductHeader() {
|
||||
const { t } = useApp();
|
||||
|
||||
return (
|
||||
<div className="flex flex-col gap-6">
|
||||
{/* Product Title Section */}
|
||||
<div className="flex items-start justify-between">
|
||||
<div className="flex gap-6">
|
||||
<div className="flex-shrink-0">
|
||||
<Image src="/lr0.svg" alt="Product Logo" width={80} height={80} />
|
||||
</div>
|
||||
<div className="flex flex-col gap-2">
|
||||
<h1 className="text-heading-h2 font-bold text-text-primary dark:text-white">
|
||||
{t("product.gyUsEquityIndexToken")}
|
||||
</h1>
|
||||
<p className="text-body-default font-regular text-text-tertiary dark:text-gray-400">
|
||||
High-Yield US Equity Quantitative Strategy - Institutional Grade RWA
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex items-center gap-2 px-4 py-2 bg-bg-subtle dark:bg-gray-700 rounded-lg border border-border-gray dark:border-gray-600">
|
||||
<Image src="/group-9270.svg" alt="Contract" width={16} height={16} />
|
||||
<span className="text-caption-tiny font-medium font-jetbrains text-text-tertiary dark:text-gray-400">
|
||||
{t("product.contractAddress")}: 0x1b19...4f2c
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,53 +1,53 @@
|
||||
"use client";
|
||||
|
||||
import Image from "next/image";
|
||||
import { useApp } from "@/contexts/AppContext";
|
||||
|
||||
interface ProtocolLinkProps {
|
||||
icon: string;
|
||||
label: string;
|
||||
arrowIcon: string;
|
||||
}
|
||||
|
||||
function ProtocolLink({ icon, label, arrowIcon }: ProtocolLinkProps) {
|
||||
return (
|
||||
<button className="bg-bg-subtle dark:bg-gray-700 rounded-xl border border-border-gray dark:border-gray-600 px-4 py-3.5 flex items-center justify-between w-full hover:bg-gray-50 dark:hover:bg-gray-600 transition-colors">
|
||||
<div className="flex items-center gap-1">
|
||||
<Image src={icon} alt="" width={20} height={24} />
|
||||
<span className="text-body-small font-medium text-text-tertiary dark:text-gray-300">
|
||||
{label}
|
||||
</span>
|
||||
</div>
|
||||
<Image src={arrowIcon} alt="" width={20} height={24} />
|
||||
</button>
|
||||
);
|
||||
}
|
||||
|
||||
export default function ProtocolInformation() {
|
||||
const { t } = useApp();
|
||||
|
||||
return (
|
||||
<div className="bg-bg-surface dark:bg-gray-800 rounded-3xl border border-border-gray dark:border-gray-700 px-6 py-8 flex flex-col gap-4">
|
||||
<h3 className="text-body-large font-bold text-text-primary dark:text-white">
|
||||
{t("protocol.title")}
|
||||
</h3>
|
||||
<div className="flex flex-col gap-2">
|
||||
<ProtocolLink
|
||||
icon="/component-17.svg"
|
||||
label={t("protocol.whitepaper")}
|
||||
arrowIcon="/component-18.svg"
|
||||
/>
|
||||
<ProtocolLink
|
||||
icon="/component-19.svg"
|
||||
label={t("protocol.documentation")}
|
||||
arrowIcon="/component-110.svg"
|
||||
/>
|
||||
<ProtocolLink
|
||||
icon="/component-111.svg"
|
||||
label={t("protocol.github")}
|
||||
arrowIcon="/component-112.svg"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
"use client";
|
||||
|
||||
import Image from "next/image";
|
||||
import { useApp } from "@/contexts/AppContext";
|
||||
|
||||
interface ProtocolLinkProps {
|
||||
icon: string;
|
||||
label: string;
|
||||
arrowIcon: string;
|
||||
}
|
||||
|
||||
function ProtocolLink({ icon, label, arrowIcon }: ProtocolLinkProps) {
|
||||
return (
|
||||
<button className="bg-bg-subtle dark:bg-gray-700 rounded-xl border border-border-gray dark:border-gray-600 px-4 py-3.5 flex items-center justify-between w-full hover:bg-gray-50 dark:hover:bg-gray-600 transition-colors">
|
||||
<div className="flex items-center gap-1">
|
||||
<Image src={icon} alt="" width={20} height={24} />
|
||||
<span className="text-body-small font-medium text-text-tertiary dark:text-gray-300">
|
||||
{label}
|
||||
</span>
|
||||
</div>
|
||||
<Image src={arrowIcon} alt="" width={20} height={24} />
|
||||
</button>
|
||||
);
|
||||
}
|
||||
|
||||
export default function ProtocolInformation() {
|
||||
const { t } = useApp();
|
||||
|
||||
return (
|
||||
<div className="bg-bg-surface dark:bg-gray-800 rounded-3xl border border-border-gray dark:border-gray-700 px-6 py-8 flex flex-col gap-4">
|
||||
<h3 className="text-body-large font-bold text-text-primary dark:text-white">
|
||||
{t("protocol.title")}
|
||||
</h3>
|
||||
<div className="flex flex-col gap-2">
|
||||
<ProtocolLink
|
||||
icon="/component-17.svg"
|
||||
label={t("protocol.whitepaper")}
|
||||
arrowIcon="/component-18.svg"
|
||||
/>
|
||||
<ProtocolLink
|
||||
icon="/component-19.svg"
|
||||
label={t("protocol.documentation")}
|
||||
arrowIcon="/component-110.svg"
|
||||
/>
|
||||
<ProtocolLink
|
||||
icon="/component-111.svg"
|
||||
label={t("protocol.github")}
|
||||
arrowIcon="/component-112.svg"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
"use client";
|
||||
|
||||
import { HeroUIProvider } from "@heroui/react";
|
||||
import { AppProvider } from "@/contexts/AppContext";
|
||||
import { ReactNode } from "react";
|
||||
|
||||
export function Providers({ children }: { children: ReactNode }) {
|
||||
return (
|
||||
<HeroUIProvider>
|
||||
<AppProvider>{children}</AppProvider>
|
||||
</HeroUIProvider>
|
||||
);
|
||||
}
|
||||
"use client";
|
||||
|
||||
import { HeroUIProvider } from "@heroui/react";
|
||||
import { AppProvider } from "@/contexts/AppContext";
|
||||
import { ReactNode } from "react";
|
||||
|
||||
export function Providers({ children }: { children: ReactNode }) {
|
||||
return (
|
||||
<HeroUIProvider>
|
||||
<AppProvider>{children}</AppProvider>
|
||||
</HeroUIProvider>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,101 +1,101 @@
|
||||
"use client";
|
||||
|
||||
import Image from "next/image";
|
||||
import { useApp } from "@/contexts/AppContext";
|
||||
|
||||
interface RewardStatProps {
|
||||
label: string;
|
||||
value: string;
|
||||
}
|
||||
|
||||
function RewardStat({ label, value }: RewardStatProps) {
|
||||
return (
|
||||
<div className="flex flex-col items-center gap-1.5">
|
||||
<span
|
||||
className="text-[24px] font-bold leading-[130%] dark:text-white"
|
||||
style={{ color: "#111827", letterSpacing: "-0.005em" }}
|
||||
>
|
||||
{value}
|
||||
</span>
|
||||
<span
|
||||
className="text-[10px] font-bold uppercase leading-[150%] text-center dark:text-gray-400"
|
||||
style={{ color: "#9ca1af", letterSpacing: "0.05em" }}
|
||||
>
|
||||
{label}
|
||||
</span>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default function Season1Rewards() {
|
||||
const { t } = useApp();
|
||||
return (
|
||||
<div
|
||||
className="rounded-3xl border flex flex-col relative overflow-hidden"
|
||||
style={{
|
||||
background:
|
||||
"radial-gradient(50% 50% at 100% 0%, rgba(255, 217, 100, 0.05) 0%, rgba(16, 185, 129, 0.05) 100%), #ffffff",
|
||||
borderColor: "rgba(255, 255, 255, 0.6)",
|
||||
paddingTop: "20px",
|
||||
paddingBottom: "20px",
|
||||
paddingLeft: "24px",
|
||||
paddingRight: "24px",
|
||||
}}
|
||||
>
|
||||
{/* Background Decoration */}
|
||||
<div
|
||||
className="absolute"
|
||||
style={{ opacity: 0.5, right: "-15px", bottom: "-20px" }}
|
||||
>
|
||||
<Image
|
||||
src="/component-113.svg"
|
||||
alt=""
|
||||
width={120}
|
||||
height={144}
|
||||
/>
|
||||
</div>
|
||||
|
||||
{/* Content Container */}
|
||||
<div className="flex flex-row items-center relative z-10" style={{ gap: "400px" }}>
|
||||
{/* Left: Header and Description */}
|
||||
<div className="flex flex-col gap-2 flex-shrink-0">
|
||||
{/* Header */}
|
||||
<div className="flex items-center gap-3">
|
||||
<h3
|
||||
className="text-[20px] font-bold leading-[140%] dark:text-white"
|
||||
style={{ color: "#111827" }}
|
||||
>
|
||||
{t("rewards.season1")}
|
||||
</h3>
|
||||
<div
|
||||
className="rounded-full px-2.5 py-1 flex items-center"
|
||||
style={{ backgroundColor: "#111827" }}
|
||||
>
|
||||
<span
|
||||
className="text-[10px] font-bold leading-4"
|
||||
style={{ color: "#fcfcfd" }}
|
||||
>
|
||||
{t("rewards.live")}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Description */}
|
||||
<p
|
||||
className="text-body-small font-medium dark:text-gray-400"
|
||||
style={{ color: "#9ca1af" }}
|
||||
>
|
||||
{t("rewards.earnPoints")}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{/* Right: Stats */}
|
||||
<div className="flex items-center justify-between flex-1">
|
||||
<RewardStat label={t("rewards.yourPoints")} value="-" />
|
||||
<RewardStat label={t("rewards.badgeBoost")} value="-" />
|
||||
<RewardStat label={t("rewards.referrals")} value="-" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
"use client";
|
||||
|
||||
import Image from "next/image";
|
||||
import { useApp } from "@/contexts/AppContext";
|
||||
|
||||
interface RewardStatProps {
|
||||
label: string;
|
||||
value: string;
|
||||
}
|
||||
|
||||
function RewardStat({ label, value }: RewardStatProps) {
|
||||
return (
|
||||
<div className="flex flex-col items-center gap-1.5">
|
||||
<span
|
||||
className="text-[24px] font-bold leading-[130%] dark:text-white"
|
||||
style={{ color: "#111827", letterSpacing: "-0.005em" }}
|
||||
>
|
||||
{value}
|
||||
</span>
|
||||
<span
|
||||
className="text-[10px] font-bold uppercase leading-[150%] text-center dark:text-gray-400"
|
||||
style={{ color: "#9ca1af", letterSpacing: "0.05em" }}
|
||||
>
|
||||
{label}
|
||||
</span>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default function Season1Rewards() {
|
||||
const { t } = useApp();
|
||||
return (
|
||||
<div
|
||||
className="rounded-3xl border flex flex-col relative overflow-hidden"
|
||||
style={{
|
||||
background:
|
||||
"radial-gradient(50% 50% at 100% 0%, rgba(255, 217, 100, 0.05) 0%, rgba(16, 185, 129, 0.05) 100%), #ffffff",
|
||||
borderColor: "rgba(255, 255, 255, 0.6)",
|
||||
paddingTop: "20px",
|
||||
paddingBottom: "20px",
|
||||
paddingLeft: "24px",
|
||||
paddingRight: "24px",
|
||||
}}
|
||||
>
|
||||
{/* Background Decoration */}
|
||||
<div
|
||||
className="absolute"
|
||||
style={{ opacity: 0.5, right: "-15px", bottom: "-20px" }}
|
||||
>
|
||||
<Image
|
||||
src="/component-113.svg"
|
||||
alt=""
|
||||
width={120}
|
||||
height={144}
|
||||
/>
|
||||
</div>
|
||||
|
||||
{/* Content Container */}
|
||||
<div className="flex flex-row items-center relative z-10" style={{ gap: "400px" }}>
|
||||
{/* Left: Header and Description */}
|
||||
<div className="flex flex-col gap-2 flex-shrink-0">
|
||||
{/* Header */}
|
||||
<div className="flex items-center gap-3">
|
||||
<h3
|
||||
className="text-[20px] font-bold leading-[140%] dark:text-white"
|
||||
style={{ color: "#111827" }}
|
||||
>
|
||||
{t("rewards.season1")}
|
||||
</h3>
|
||||
<div
|
||||
className="rounded-full px-2.5 py-1 flex items-center"
|
||||
style={{ backgroundColor: "#111827" }}
|
||||
>
|
||||
<span
|
||||
className="text-[10px] font-bold leading-4"
|
||||
style={{ color: "#fcfcfd" }}
|
||||
>
|
||||
{t("rewards.live")}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Description */}
|
||||
<p
|
||||
className="text-body-small font-medium dark:text-gray-400"
|
||||
style={{ color: "#9ca1af" }}
|
||||
>
|
||||
{t("rewards.earnPoints")}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{/* Right: Stats */}
|
||||
<div className="flex items-center justify-between flex-1">
|
||||
<RewardStat label={t("rewards.yourPoints")} value="-" />
|
||||
<RewardStat label={t("rewards.badgeBoost")} value="-" />
|
||||
<RewardStat label={t("rewards.referrals")} value="-" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,80 +1,80 @@
|
||||
"use client";
|
||||
|
||||
import Image from "next/image";
|
||||
import { useState } from "react";
|
||||
import NavItem from "./NavItem";
|
||||
import { useApp } from "@/contexts/AppContext";
|
||||
|
||||
export default function Sidebar() {
|
||||
const { t } = useApp();
|
||||
const [activeItem, setActiveItem] = useState("Assets");
|
||||
|
||||
const navigationItems = [
|
||||
{ icon: "/icon-assets.svg", label: t("nav.assets"), key: "Assets", path: "/" },
|
||||
{ icon: "/icon-alp.svg", label: t("nav.alp"), key: "ALP", path: "/alp" },
|
||||
{ icon: "/icon-swap.svg", label: t("nav.swap"), key: "Swap", path: "/swap" },
|
||||
{ icon: "/icon-lending.svg", label: t("nav.lending"), key: "Lending", path: "/lending" },
|
||||
{ icon: "/icon-transparency.svg", label: t("nav.transparency"), key: "Transparency", path: "/transparency" },
|
||||
{ icon: "/icon-ecosystem.svg", label: t("nav.ecosystem"), key: "Ecosystem", path: "/ecosystem" },
|
||||
{ icon: "/icon-points.svg", label: t("nav.points"), key: "Points", path: "/points" },
|
||||
];
|
||||
|
||||
return (
|
||||
<aside className="fixed left-0 top-0 bg-bg-surface dark:bg-gray-800 border-r border-border-normal dark:border-gray-700 flex flex-col items-center px-6 py-8 gap-8 h-screen w-[222px] overflow-y-auto">
|
||||
{/* Logo */}
|
||||
<div className="w-full h-10">
|
||||
<Image
|
||||
src="/logo.svg"
|
||||
alt="ASSETX Logo"
|
||||
width={174}
|
||||
height={40}
|
||||
className="w-full h-full"
|
||||
/>
|
||||
</div>
|
||||
|
||||
{/* Navigation */}
|
||||
<nav className="flex flex-col gap-2 w-[174px]">
|
||||
{navigationItems.map((item) => (
|
||||
<NavItem
|
||||
key={item.key}
|
||||
icon={item.icon}
|
||||
label={item.label}
|
||||
isActive={activeItem === item.key}
|
||||
onClick={() => setActiveItem(item.key)}
|
||||
/>
|
||||
))}
|
||||
</nav>
|
||||
|
||||
{/* Spacer */}
|
||||
<div className="flex-1" />
|
||||
|
||||
{/* Global TVL Section */}
|
||||
<div className="w-full border-t border-border-gray dark:border-gray-700 pt-8">
|
||||
<div className="bg-bg-subtle dark:bg-gray-700 rounded-xl p-4 flex flex-col gap-1 h-[85px]">
|
||||
<p className="text-text-tertiary dark:text-gray-400 text-[10px] font-medium leading-[150%] tracking-[0.01em]">
|
||||
{t("nav.globalTVL")}
|
||||
</p>
|
||||
<p className="text-text-primary dark:text-white text-base font-extrabold leading-[150%] font-jetbrains">
|
||||
$465,000,000
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{/* FAQs Link */}
|
||||
<div className="rounded-xl flex items-center h-[42px] mt-8">
|
||||
<div className="flex items-center gap-0">
|
||||
<Image
|
||||
src="/icon-faq.png"
|
||||
alt="FAQ"
|
||||
width={24}
|
||||
height={24}
|
||||
className="object-cover"
|
||||
/>
|
||||
<span className="text-text-primary dark:text-white text-sm font-bold leading-[150%]">
|
||||
{t("nav.faqs")}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
||||
);
|
||||
}
|
||||
"use client";
|
||||
|
||||
import Image from "next/image";
|
||||
import { useState } from "react";
|
||||
import NavItem from "./NavItem";
|
||||
import { useApp } from "@/contexts/AppContext";
|
||||
|
||||
export default function Sidebar() {
|
||||
const { t } = useApp();
|
||||
const [activeItem, setActiveItem] = useState("Assets");
|
||||
|
||||
const navigationItems = [
|
||||
{ icon: "/icon-assets.svg", label: t("nav.assets"), key: "Assets", path: "/" },
|
||||
{ icon: "/icon-alp.svg", label: t("nav.alp"), key: "ALP", path: "/alp" },
|
||||
{ icon: "/icon-swap.svg", label: t("nav.swap"), key: "Swap", path: "/swap" },
|
||||
{ icon: "/icon-lending.svg", label: t("nav.lending"), key: "Lending", path: "/lending" },
|
||||
{ icon: "/icon-transparency.svg", label: t("nav.transparency"), key: "Transparency", path: "/transparency" },
|
||||
{ icon: "/icon-ecosystem.svg", label: t("nav.ecosystem"), key: "Ecosystem", path: "/ecosystem" },
|
||||
{ icon: "/icon-points.svg", label: t("nav.points"), key: "Points", path: "/points" },
|
||||
];
|
||||
|
||||
return (
|
||||
<aside className="fixed left-0 top-0 bg-bg-surface dark:bg-gray-800 border-r border-border-normal dark:border-gray-700 flex flex-col items-center px-6 py-8 gap-8 h-screen w-[222px] overflow-y-auto">
|
||||
{/* Logo */}
|
||||
<div className="w-full h-10">
|
||||
<Image
|
||||
src="/logo.svg"
|
||||
alt="ASSETX Logo"
|
||||
width={174}
|
||||
height={40}
|
||||
className="w-full h-full"
|
||||
/>
|
||||
</div>
|
||||
|
||||
{/* Navigation */}
|
||||
<nav className="flex flex-col gap-2 w-[174px]">
|
||||
{navigationItems.map((item) => (
|
||||
<NavItem
|
||||
key={item.key}
|
||||
icon={item.icon}
|
||||
label={item.label}
|
||||
isActive={activeItem === item.key}
|
||||
onClick={() => setActiveItem(item.key)}
|
||||
/>
|
||||
))}
|
||||
</nav>
|
||||
|
||||
{/* Spacer */}
|
||||
<div className="flex-1" />
|
||||
|
||||
{/* Global TVL Section */}
|
||||
<div className="w-full border-t border-border-gray dark:border-gray-700 pt-8">
|
||||
<div className="bg-bg-subtle dark:bg-gray-700 rounded-xl p-4 flex flex-col gap-1 h-[85px]">
|
||||
<p className="text-text-tertiary dark:text-gray-400 text-[10px] font-medium leading-[150%] tracking-[0.01em]">
|
||||
{t("nav.globalTVL")}
|
||||
</p>
|
||||
<p className="text-text-primary dark:text-white text-base font-extrabold leading-[150%] font-jetbrains">
|
||||
$465,000,000
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{/* FAQs Link */}
|
||||
<div className="rounded-xl flex items-center h-[42px] mt-8">
|
||||
<div className="flex items-center gap-0">
|
||||
<Image
|
||||
src="/icon-faq.png"
|
||||
alt="FAQ"
|
||||
width={24}
|
||||
height={24}
|
||||
className="object-cover"
|
||||
/>
|
||||
<span className="text-text-primary dark:text-white text-sm font-bold leading-[150%]">
|
||||
{t("nav.faqs")}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,61 +1,61 @@
|
||||
"use client";
|
||||
|
||||
import { useApp } from "@/contexts/AppContext";
|
||||
|
||||
interface StatCardProps {
|
||||
label: string;
|
||||
value: string;
|
||||
change?: string;
|
||||
changeColor?: string;
|
||||
valueColor?: string;
|
||||
}
|
||||
|
||||
function StatCard({
|
||||
label,
|
||||
value,
|
||||
change,
|
||||
changeColor = "text-green-500",
|
||||
valueColor
|
||||
}: StatCardProps) {
|
||||
const getValueColor = () => {
|
||||
if (valueColor) return valueColor;
|
||||
if (label.includes("APY") || label.includes("年化")) return "#ff6900";
|
||||
return "#111827";
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="bg-bg-subtle dark:bg-gray-700 rounded-2xl border border-border-gray dark:border-gray-600 p-4 flex flex-col gap-2">
|
||||
<p className="text-caption-tiny font-bold text-text-tertiary dark:text-gray-400 uppercase tracking-wider">
|
||||
{label}
|
||||
</p>
|
||||
<p className="text-heading-h3 font-bold dark:text-white" style={{ color: getValueColor() }}>
|
||||
{value}
|
||||
</p>
|
||||
{change && (
|
||||
<p className={`text-caption-tiny font-medium ${changeColor} dark:text-gray-400`}>
|
||||
{change}
|
||||
</p>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default function StatsCards() {
|
||||
const { t } = useApp();
|
||||
|
||||
return (
|
||||
<div className="grid grid-cols-5 gap-4 w-full">
|
||||
<StatCard label={t("stats.currentAPY")} value="22%" change="+2.5% WoW" changeColor="text-green-500" />
|
||||
<StatCard label={t("stats.totalValueLocked")} value="$240.5M" change="+$2.3M Today" changeColor="text-green-500" />
|
||||
<StatCard label="24h Volume" value="$12.8M" change="↑ 23% vs Avg" changeColor="text-green-500" />
|
||||
<StatCard label={t("stats.yourBalance")} value="0.00" change="$0.00 USD" changeColor="text-text-tertiary" />
|
||||
<StatCard
|
||||
label={t("stats.yourEarnings")}
|
||||
value="$0.00"
|
||||
change="All Time"
|
||||
changeColor="text-text-tertiary"
|
||||
valueColor="#10b981"
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
"use client";
|
||||
|
||||
import { useApp } from "@/contexts/AppContext";
|
||||
|
||||
interface StatCardProps {
|
||||
label: string;
|
||||
value: string;
|
||||
change?: string;
|
||||
changeColor?: string;
|
||||
valueColor?: string;
|
||||
}
|
||||
|
||||
function StatCard({
|
||||
label,
|
||||
value,
|
||||
change,
|
||||
changeColor = "text-green-500",
|
||||
valueColor
|
||||
}: StatCardProps) {
|
||||
const getValueColor = () => {
|
||||
if (valueColor) return valueColor;
|
||||
if (label.includes("APY") || label.includes("年化")) return "#ff6900";
|
||||
return "#111827";
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="bg-bg-subtle dark:bg-gray-700 rounded-2xl border border-border-gray dark:border-gray-600 p-4 flex flex-col gap-2">
|
||||
<p className="text-caption-tiny font-bold text-text-tertiary dark:text-gray-400 uppercase tracking-wider">
|
||||
{label}
|
||||
</p>
|
||||
<p className="text-heading-h3 font-bold dark:text-white" style={{ color: getValueColor() }}>
|
||||
{value}
|
||||
</p>
|
||||
{change && (
|
||||
<p className={`text-caption-tiny font-medium ${changeColor} dark:text-gray-400`}>
|
||||
{change}
|
||||
</p>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default function StatsCards() {
|
||||
const { t } = useApp();
|
||||
|
||||
return (
|
||||
<div className="grid grid-cols-5 gap-4 w-full">
|
||||
<StatCard label={t("stats.currentAPY")} value="22%" change="+2.5% WoW" changeColor="text-green-500" />
|
||||
<StatCard label={t("stats.totalValueLocked")} value="$240.5M" change="+$2.3M Today" changeColor="text-green-500" />
|
||||
<StatCard label="24h Volume" value="$12.8M" change="↑ 23% vs Avg" changeColor="text-green-500" />
|
||||
<StatCard label={t("stats.yourBalance")} value="0.00" change="$0.00 USD" changeColor="text-text-tertiary" />
|
||||
<StatCard
|
||||
label={t("stats.yourEarnings")}
|
||||
value="$0.00"
|
||||
change="All Time"
|
||||
changeColor="text-text-tertiary"
|
||||
valueColor="#10b981"
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,55 +1,55 @@
|
||||
"use client";
|
||||
|
||||
import { useState } from "react";
|
||||
|
||||
interface Tab {
|
||||
id: string;
|
||||
label: string;
|
||||
}
|
||||
|
||||
interface TabNavigationProps {
|
||||
tabs: Tab[];
|
||||
defaultActiveId?: string;
|
||||
onTabChange?: (tabId: string) => void;
|
||||
}
|
||||
|
||||
export default function TabNavigation({
|
||||
tabs,
|
||||
defaultActiveId,
|
||||
onTabChange,
|
||||
}: TabNavigationProps) {
|
||||
const [activeTab, setActiveTab] = useState(defaultActiveId || tabs[0]?.id);
|
||||
|
||||
const handleTabClick = (tabId: string) => {
|
||||
setActiveTab(tabId);
|
||||
onTabChange?.(tabId);
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="flex items-center gap-8">
|
||||
{tabs.map((tab) => {
|
||||
const isActive = activeTab === tab.id;
|
||||
return (
|
||||
<button
|
||||
key={tab.id}
|
||||
onClick={() => handleTabClick(tab.id)}
|
||||
className="flex flex-col gap-2 items-start"
|
||||
>
|
||||
<span
|
||||
className={`text-sm font-bold leading-[150%] ${
|
||||
isActive ? "text-text-primary dark:text-white" : "text-text-tertiary dark:text-gray-400"
|
||||
}`}
|
||||
>
|
||||
{tab.label}
|
||||
</span>
|
||||
<div
|
||||
className={`self-stretch border-t-2 -mt-[2px] ${
|
||||
isActive ? "border-text-primary dark:border-white" : "border-transparent"
|
||||
}`}
|
||||
/>
|
||||
</button>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
"use client";
|
||||
|
||||
import { useState } from "react";
|
||||
|
||||
interface Tab {
|
||||
id: string;
|
||||
label: string;
|
||||
}
|
||||
|
||||
interface TabNavigationProps {
|
||||
tabs: Tab[];
|
||||
defaultActiveId?: string;
|
||||
onTabChange?: (tabId: string) => void;
|
||||
}
|
||||
|
||||
export default function TabNavigation({
|
||||
tabs,
|
||||
defaultActiveId,
|
||||
onTabChange,
|
||||
}: TabNavigationProps) {
|
||||
const [activeTab, setActiveTab] = useState(defaultActiveId || tabs[0]?.id);
|
||||
|
||||
const handleTabClick = (tabId: string) => {
|
||||
setActiveTab(tabId);
|
||||
onTabChange?.(tabId);
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="flex items-center gap-8">
|
||||
{tabs.map((tab) => {
|
||||
const isActive = activeTab === tab.id;
|
||||
return (
|
||||
<button
|
||||
key={tab.id}
|
||||
onClick={() => handleTabClick(tab.id)}
|
||||
className="flex flex-col gap-2 items-start"
|
||||
>
|
||||
<span
|
||||
className={`text-sm font-bold leading-[150%] ${
|
||||
isActive ? "text-text-primary dark:text-white" : "text-text-tertiary dark:text-gray-400"
|
||||
}`}
|
||||
>
|
||||
{tab.label}
|
||||
</span>
|
||||
<div
|
||||
className={`self-stretch border-t-2 -mt-[2px] ${
|
||||
isActive ? "border-text-primary dark:border-white" : "border-transparent"
|
||||
}`}
|
||||
/>
|
||||
</button>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,46 +1,46 @@
|
||||
"use client";
|
||||
|
||||
import { useApp } from "@/contexts/AppContext";
|
||||
|
||||
export default function ThemeSwitch() {
|
||||
const { theme, setTheme } = useApp();
|
||||
|
||||
const toggleTheme = () => {
|
||||
setTheme(theme === "light" ? "dark" : "light");
|
||||
};
|
||||
|
||||
return (
|
||||
<button
|
||||
onClick={toggleTheme}
|
||||
className="bg-bg-surface dark:bg-gray-800 rounded-lg border border-border-normal dark:border-gray-700 px-3 py-2 flex items-center justify-center h-10 hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors"
|
||||
>
|
||||
{theme === "light" ? (
|
||||
<svg width="20" height="20" viewBox="0 0 20 20" fill="none">
|
||||
<path
|
||||
d="M10 15C12.7614 15 15 12.7614 15 10C15 7.23858 12.7614 5 10 5C7.23858 5 5 7.23858 5 10C5 12.7614 7.23858 15 10 15Z"
|
||||
stroke="#111827"
|
||||
strokeWidth="1.5"
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
/>
|
||||
<path
|
||||
d="M10 1V3M10 17V19M19 10H17M3 10H1M16.07 16.07L14.64 14.64M5.36 5.36L3.93 3.93M16.07 3.93L14.64 5.36M5.36 14.64L3.93 16.07"
|
||||
stroke="#111827"
|
||||
strokeWidth="1.5"
|
||||
strokeLinecap="round"
|
||||
/>
|
||||
</svg>
|
||||
) : (
|
||||
<svg width="20" height="20" viewBox="0 0 20 20" fill="none">
|
||||
<path
|
||||
d="M17 10.79C16.8427 12.4922 16.1039 14.0754 14.9116 15.2662C13.7192 16.4571 12.1503 17.1913 10.4501 17.3464C8.74989 17.5016 7.04992 17.0676 5.63182 16.1159C4.21372 15.1642 3.15973 13.7534 2.63564 12.1102C2.11155 10.467 2.14637 8.68739 2.73477 7.06725C3.32317 5.44711 4.43113 4.07931 5.88616 3.18637C7.3412 2.29343 9.05859 1.93047 10.7542 2.15507C12.4498 2.37967 13.9989 3.17747 15.16 4.41"
|
||||
stroke="#111827"
|
||||
strokeWidth="1.5"
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
/>
|
||||
</svg>
|
||||
)}
|
||||
</button>
|
||||
);
|
||||
}
|
||||
"use client";
|
||||
|
||||
import { useApp } from "@/contexts/AppContext";
|
||||
|
||||
export default function ThemeSwitch() {
|
||||
const { theme, setTheme } = useApp();
|
||||
|
||||
const toggleTheme = () => {
|
||||
setTheme(theme === "light" ? "dark" : "light");
|
||||
};
|
||||
|
||||
return (
|
||||
<button
|
||||
onClick={toggleTheme}
|
||||
className="bg-bg-surface dark:bg-gray-800 rounded-lg border border-border-normal dark:border-gray-700 px-3 py-2 flex items-center justify-center h-10 hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors"
|
||||
>
|
||||
{theme === "light" ? (
|
||||
<svg width="20" height="20" viewBox="0 0 20 20" fill="none">
|
||||
<path
|
||||
d="M10 15C12.7614 15 15 12.7614 15 10C15 7.23858 12.7614 5 10 5C7.23858 5 5 7.23858 5 10C5 12.7614 7.23858 15 10 15Z"
|
||||
stroke="#111827"
|
||||
strokeWidth="1.5"
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
/>
|
||||
<path
|
||||
d="M10 1V3M10 17V19M19 10H17M3 10H1M16.07 16.07L14.64 14.64M5.36 5.36L3.93 3.93M16.07 3.93L14.64 5.36M5.36 14.64L3.93 16.07"
|
||||
stroke="#111827"
|
||||
strokeWidth="1.5"
|
||||
strokeLinecap="round"
|
||||
/>
|
||||
</svg>
|
||||
) : (
|
||||
<svg width="20" height="20" viewBox="0 0 20 20" fill="none">
|
||||
<path
|
||||
d="M17 10.79C16.8427 12.4922 16.1039 14.0754 14.9116 15.2662C13.7192 16.4571 12.1503 17.1913 10.4501 17.3464C8.74989 17.5016 7.04992 17.0676 5.63182 16.1159C4.21372 15.1642 3.15973 13.7534 2.63564 12.1102C2.11155 10.467 2.14637 8.68739 2.73477 7.06725C3.32317 5.44711 4.43113 4.07931 5.88616 3.18637C7.3412 2.29343 9.05859 1.93047 10.7542 2.15507C12.4498 2.37967 13.9989 3.17747 15.16 4.41"
|
||||
stroke="#111827"
|
||||
strokeWidth="1.5"
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
/>
|
||||
</svg>
|
||||
)}
|
||||
</button>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,50 +1,50 @@
|
||||
import Image from "next/image";
|
||||
import Breadcrumb from "./Breadcrumb";
|
||||
import LanguageSwitch from "./LanguageSwitch";
|
||||
import ThemeSwitch from "./ThemeSwitch";
|
||||
|
||||
export default function TopBar() {
|
||||
const breadcrumbItems = [
|
||||
{ label: "ASSETX" },
|
||||
{ label: "Product" },
|
||||
{ label: "Detail" },
|
||||
];
|
||||
|
||||
return (
|
||||
<div className="flex items-center justify-between w-full">
|
||||
{/* Left: Breadcrumb */}
|
||||
<div className="flex items-center gap-2">
|
||||
<Breadcrumb items={breadcrumbItems} />
|
||||
</div>
|
||||
|
||||
{/* Right: Actions */}
|
||||
<div className="flex items-center gap-4">
|
||||
{/* Language Switch */}
|
||||
<LanguageSwitch />
|
||||
|
||||
{/* Theme Switch */}
|
||||
<ThemeSwitch />
|
||||
|
||||
{/* Wallet Button */}
|
||||
<button className="bg-bg-surface rounded-lg border border-border-normal px-2 py-2 flex items-center justify-center h-10">
|
||||
<Image src="/icon-wallet.svg" alt="Wallet" width={20} height={20} />
|
||||
<Image
|
||||
src="/icon-notification.svg"
|
||||
alt="Notification"
|
||||
width={14}
|
||||
height={14}
|
||||
className="ml-1"
|
||||
/>
|
||||
</button>
|
||||
|
||||
{/* Address Button */}
|
||||
<button className="bg-text-primary rounded-lg px-4 py-2 flex items-center justify-center gap-2 h-10 hover:bg-gray-800 transition-colors">
|
||||
<Image src="/icon-copy.svg" alt="Copy" width={16} height={16} />
|
||||
<span className="text-white text-sm font-bold font-jetbrains">
|
||||
0x12...4F82
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
import Image from "next/image";
|
||||
import Breadcrumb from "./Breadcrumb";
|
||||
import LanguageSwitch from "./LanguageSwitch";
|
||||
import ThemeSwitch from "./ThemeSwitch";
|
||||
|
||||
export default function TopBar() {
|
||||
const breadcrumbItems = [
|
||||
{ label: "ASSETX" },
|
||||
{ label: "Product" },
|
||||
{ label: "Detail" },
|
||||
];
|
||||
|
||||
return (
|
||||
<div className="flex items-center justify-between w-full">
|
||||
{/* Left: Breadcrumb */}
|
||||
<div className="flex items-center gap-2">
|
||||
<Breadcrumb items={breadcrumbItems} />
|
||||
</div>
|
||||
|
||||
{/* Right: Actions */}
|
||||
<div className="flex items-center gap-4">
|
||||
{/* Language Switch */}
|
||||
<LanguageSwitch />
|
||||
|
||||
{/* Theme Switch */}
|
||||
<ThemeSwitch />
|
||||
|
||||
{/* Wallet Button */}
|
||||
<button className="bg-bg-surface rounded-lg border border-border-normal px-2 py-2 flex items-center justify-center h-10">
|
||||
<Image src="/icon-wallet.svg" alt="Wallet" width={20} height={20} />
|
||||
<Image
|
||||
src="/icon-notification.svg"
|
||||
alt="Notification"
|
||||
width={14}
|
||||
height={14}
|
||||
className="ml-1"
|
||||
/>
|
||||
</button>
|
||||
|
||||
{/* Address Button */}
|
||||
<button className="bg-text-primary rounded-lg px-4 py-2 flex items-center justify-center gap-2 h-10 hover:bg-gray-800 transition-colors">
|
||||
<Image src="/icon-copy.svg" alt="Copy" width={16} height={16} />
|
||||
<span className="text-white text-sm font-bold font-jetbrains">
|
||||
0x12...4F82
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
676
locales/en.json
@@ -1,338 +1,338 @@
|
||||
{
|
||||
"nav": {
|
||||
"fundMarket": "Fund Market",
|
||||
"alp": "ALP",
|
||||
"swap": "Swap",
|
||||
"lending": "Lending",
|
||||
"transparency": "Transparency",
|
||||
"ecosystem": "Ecosystem",
|
||||
"points": "Points",
|
||||
"globalTVL": "Global TVL",
|
||||
"faqs": "FAQs"
|
||||
},
|
||||
"tabs": {
|
||||
"overview": "Overview",
|
||||
"assetDescription": "Asset Description",
|
||||
"analytics": "Analytics",
|
||||
"performanceAnalysis": "Performance Analysis",
|
||||
"assetCustody": "Asset Custody & Verification"
|
||||
},
|
||||
"product": {
|
||||
"gyUsEquityIndexToken": "High-Yield US Equity Quantitative Strategy",
|
||||
"contractAddress": "Contract"
|
||||
},
|
||||
"stats": {
|
||||
"currentAPY": "Current APY",
|
||||
"totalValueLocked": "Total Value Locked",
|
||||
"yourBalance": "Your Balance",
|
||||
"yourEarnings": "Your Earnings",
|
||||
"availableToWithdraw": "Available to Withdraw"
|
||||
},
|
||||
"assetOverview": {
|
||||
"title": "Asset Overview",
|
||||
"mediumRisk": "Medium Risk",
|
||||
"underlyingAssets": "Underlying Assets",
|
||||
"usEquityIndex": "US Equity Index",
|
||||
"maturityRange": "Maturity Range",
|
||||
"cap": "Cap",
|
||||
"minInvestment": "Min. Investment",
|
||||
"poolCapacity": "Pool Capacity",
|
||||
"currentPrice": "Current Price"
|
||||
},
|
||||
"apy": {
|
||||
"apyHistory": "APY History",
|
||||
"priceHistory": "Price History",
|
||||
"lastDays": "Last 30 days",
|
||||
"highest": "Highest",
|
||||
"lowest": "Lowest"
|
||||
},
|
||||
"description": {
|
||||
"title": "Asset Description",
|
||||
"content": "高盈美股量化策略 (High-Yield US Equity Quantitative Strategy) is an institutional-grade Real World Asset (RWA) offering investors exposure to a diversified portfolio of US equities. This strategy utilizes advanced quantitative models to generate high yields through market-neutral arbitrage and other sophisticated trading techniques. Designed for stability and consistent returns, it provides an on-chain gateway to traditional financial markets with enhanced transparency and instant settlement.\n\nThe strategy aims to minimize market risk while maximizing yield generation, making it suitable for investors seeking stable growth within the decentralized finance ecosystem. Underlying assets are held by institutional custodians and verified through robust compliance frameworks."
|
||||
},
|
||||
"mintSwap": {
|
||||
"mint": "Mint",
|
||||
"swap": "Swap",
|
||||
"deposit": "Deposit",
|
||||
"withdraw": "Withdraw",
|
||||
"balance": "Bal",
|
||||
"max": "MAX",
|
||||
"estimatedReturns": "Estimated Returns",
|
||||
"estAPY": "Est. APY",
|
||||
"estReturns": "Est. Returns",
|
||||
"transactionSummary": "Transaction Summary",
|
||||
"youGet": "You Get",
|
||||
"salesPrice": "Sales Price",
|
||||
"fee": "Fee",
|
||||
"gas": "Gas",
|
||||
"approveDeposit": "Approve & Deposit USDC",
|
||||
"termsText": "By depositing, you agree to the",
|
||||
"termsOfService": "Terms of Service",
|
||||
"and": "and",
|
||||
"privacyPolicy": "Privacy Policy"
|
||||
},
|
||||
"protocol": {
|
||||
"title": "Protocol Information",
|
||||
"whitepaper": "Whitepaper",
|
||||
"documentation": "Documentation",
|
||||
"github": "GitHub"
|
||||
},
|
||||
"rewards": {
|
||||
"season1": "Season 1 Rewards",
|
||||
"live": "Live",
|
||||
"earnPoints": "Earn 1 point per USDC per day holding GY-US",
|
||||
"yourPoints": "Your Points",
|
||||
"badgeBoost": "Badge Boost",
|
||||
"referrals": "Referrals"
|
||||
},
|
||||
"performance": {
|
||||
"title": "Performance Analysis",
|
||||
"description": "Historical daily net returns for the High-Yield US Equity Strategy.",
|
||||
"ytd": "2025 YTD",
|
||||
"dailyNetReturns": "Daily Net Returns (%)",
|
||||
"weekdays": {
|
||||
"sun": "SUN",
|
||||
"mon": "MON",
|
||||
"tue": "TUE",
|
||||
"wed": "WED",
|
||||
"thu": "THU",
|
||||
"fri": "FRI",
|
||||
"sat": "SAT"
|
||||
}
|
||||
},
|
||||
"custody": {
|
||||
"title": "Asset Custody & Verification",
|
||||
"description": "Real-time view of underlying asset holdings and institutional custodian verification status.",
|
||||
"underlyingHoldings": "Underlying Asset Holdings",
|
||||
"verifiedBy": "Verified by third-party institutional custodians",
|
||||
"lastUpdated": "Last updated",
|
||||
"minutesAgo": "minutes ago",
|
||||
"custodian": "Custodian",
|
||||
"assetType": "Asset Type",
|
||||
"maturity": "Maturity",
|
||||
"valueUSD": "Value (USD)",
|
||||
"status": "Status",
|
||||
"verified": "Verified",
|
||||
"totalValue": "Total underlying asset value",
|
||||
"smartContract": "Smart Contract",
|
||||
"smartContractDesc": "Audited by OpenZeppelin & Certik for security and reliability.",
|
||||
"compliance": "Compliance",
|
||||
"complianceDesc": "SEC-regulated structure & bankruptcy remote legal framework.",
|
||||
"proofOfReserves": "Proof of Reserves",
|
||||
"proofDesc": "Real-time on-chain verification via Chainlink Oracle.",
|
||||
"viewReports": "View Reports",
|
||||
"independentVerifications": "Independent Verifications",
|
||||
"independentDesc": "Every month, assetX undergoes third-party auditing to ensure complete transparency.",
|
||||
"attestationReport": "Attestation Report",
|
||||
"viewAllArchive": "View All Archive",
|
||||
"morganStanley": "Morgan Stanley",
|
||||
"primeBroker": "Prime Broker",
|
||||
"usEquityPortfolio": "US Equity Portfolio",
|
||||
"days": "days"
|
||||
},
|
||||
"productPage": {
|
||||
"title": "AssetX Fund Market",
|
||||
"assets": "Assets",
|
||||
"totalValueLocked": "Total Value Locked",
|
||||
"cumulativeYield": "Cumulative Yield",
|
||||
"yourTotalBalance": "Your Total Balance",
|
||||
"yourTotalEarning": "Your Total Earning",
|
||||
"yieldAPY": "Yield APY",
|
||||
"poolCap": "Pool CaP",
|
||||
"maturity": "Maturity",
|
||||
"risk": "Risk",
|
||||
"lockUp": "Lock-Up",
|
||||
"circulatingSupply": "Circulating supply",
|
||||
"poolCapacity": "Pool Capacity",
|
||||
"filled": "Filled",
|
||||
"invest": "Invest",
|
||||
"quantStrategy": "Quant Strategy",
|
||||
"realEstate": "Real Estate",
|
||||
"low": "LOW",
|
||||
"medium": "Medium",
|
||||
"high": "High"
|
||||
},
|
||||
"alp": {
|
||||
"title": "AssetX Liquidity Pool",
|
||||
"price": "Price",
|
||||
"poolAPR": "Pool APR",
|
||||
"rewardAPR": "Reward APR",
|
||||
"priceHistory": "Price History",
|
||||
"lastDays": "Last 30 days",
|
||||
"avg": "Avg",
|
||||
"highest": "Highest",
|
||||
"lowest": "Lowest",
|
||||
"current": "Current",
|
||||
"sell": "SELL",
|
||||
"buy": "BUY",
|
||||
"buyUsdc": "Buy USDC",
|
||||
"liquidityAllocation": "Liquidity Allocation",
|
||||
"token": "TOKEN",
|
||||
"poolSize": "Pool Size",
|
||||
"currentTargetWeight": "Current / Target Weight",
|
||||
"currentPrice": "Current Price",
|
||||
"quantStrategy": "Quant Strategy"
|
||||
},
|
||||
"swap": {
|
||||
"title": "AssetX SWAP",
|
||||
"subtitle": "Trade Yield Tokens instantly with AssetX LP Vault"
|
||||
},
|
||||
"lending": {
|
||||
"title": "Lending Market",
|
||||
"subtitle": "Borrow USDC against your Yield Token holdings.",
|
||||
"totalUsdcSupply": "TOTAL USDC SUPPLY",
|
||||
"utilization": "UTILIZATION",
|
||||
"activeLoans": "ACTIVE LOANS",
|
||||
"usdcBorrowed": "USDC Borrowed",
|
||||
"vsLastMonth": "vs last month",
|
||||
"avgApy": "Avg. APY",
|
||||
"stableYield": "Stable yield environment",
|
||||
"yourPortfolio": "Your Portfolio",
|
||||
"earned": "EARNED",
|
||||
"supplyUsdc": "Supply USDC",
|
||||
"borrowMarket": "Borrow Market",
|
||||
"yourBalance": "Your Balance",
|
||||
"yourInterest": "Your Interest",
|
||||
"borrowed": "Borrowed",
|
||||
"ltv": "LTV",
|
||||
"repay": "Repay",
|
||||
"borrow": "Borrow"
|
||||
},
|
||||
"supply": {
|
||||
"supply": "Supply",
|
||||
"withdraw": "Withdraw",
|
||||
"tokenBalance": "Token Balance",
|
||||
"supplied": "Supplied",
|
||||
"deposit": "Deposit",
|
||||
"max": "MAX",
|
||||
"healthFactor": "Health Factor",
|
||||
"utilization": "Utilization",
|
||||
"safe": "Safe",
|
||||
"estimatedReturns": "Estimated Returns",
|
||||
"estApy": "Est. APY",
|
||||
"estReturnsYear": "Est. Returns (/Year)",
|
||||
"usdcLendPool": "USDC Lend Pool",
|
||||
"historicalApy": "HISTORICAL APY"
|
||||
},
|
||||
"repay": {
|
||||
"backToLending": "Back to lending",
|
||||
"supplyToBorrow": "Supply YT/ALP to Borrow USDC",
|
||||
"price": "Price",
|
||||
"available": "Available",
|
||||
"supplyCollateral": "Supply Collateral",
|
||||
"borrowDebt": "Borrow Debt",
|
||||
"deposit": "Deposit",
|
||||
"withdraw": "Withdraw",
|
||||
"borrow": "Borrow",
|
||||
"repay": "Repay",
|
||||
"apr": "APR",
|
||||
"netApr": "NET APR",
|
||||
"liqPriceOffset": "Liq.price/offset",
|
||||
"positionHealth": "Position Health",
|
||||
"totalValueLocked": "Total Value Locked in Pool",
|
||||
"utilization": "Utilization",
|
||||
"rewardMultiplier": "Reward Multiplier"
|
||||
},
|
||||
"transparency": {
|
||||
"title": "Transparency",
|
||||
"subtitle": "Real-time view of all reserve assets and positions",
|
||||
"totalReserves": "Total Reserves",
|
||||
"totalUsdcSupply": "TOTAL USDC SUPPLY",
|
||||
"utilization": "UTILIZATION",
|
||||
"activeLoans": "ACTIVE LOANS",
|
||||
"rwaHoldings": "RWA Holdings",
|
||||
"rwaSubtitle": "Real-world assets held by institutional custodians",
|
||||
"lastUpdated": "Last updated",
|
||||
"minutesAgo": "minutes ago",
|
||||
"custodian": "Custodian",
|
||||
"assetType": "Asset Type",
|
||||
"maturity": "Maturity",
|
||||
"valueUsd": "Value (USD)",
|
||||
"status": "Status",
|
||||
"verified": "Verified",
|
||||
"assetDistribution": "Asset Distribution",
|
||||
"distributionSubtitle": "Portfolio breakdown by risk class",
|
||||
"geographicAllocation": "Geographic Allocation",
|
||||
"geographicSubtitle": "Assets by jurisdictional region",
|
||||
"realEstate": "Real Estate",
|
||||
"usTreasuryBills": "US Treasury Bills",
|
||||
"privateCredit": "Private Credit",
|
||||
"fixedIncome": "Fixed Income",
|
||||
"alternativeAssets": "Alternative Assets",
|
||||
"alternativeCredit": "Alternative Credit",
|
||||
"unitedStates": "United States",
|
||||
"northAmerica": "North America",
|
||||
"hongKong": "Hong Kong",
|
||||
"asiaPacific": "Asia Pacific",
|
||||
"morganStanley": "Morgan Stanley",
|
||||
"primeBroker": "Prime Broker",
|
||||
"usEquityPortfolio": "US Equity Portfolio",
|
||||
"days": "days"
|
||||
},
|
||||
"points": {
|
||||
"title": "Points",
|
||||
"season1": "Season 1",
|
||||
"live": "Live",
|
||||
"xPoints": "7x Points",
|
||||
"pointsDashboard": "Points Dashboard",
|
||||
"unlockUpTo": "Unlock up to",
|
||||
"withEcosystemMultipliers": "with ecosystem multipliers.",
|
||||
"yourTotalPoints": "Your Total Points",
|
||||
"globalRank": "Global Rank",
|
||||
"topOfUsers": "Top 12% of users",
|
||||
"endsIn": "Ends In",
|
||||
"silverMember": "Silver Member",
|
||||
"goldMember": "Gold Member",
|
||||
"platinumMember": "Platinum Member",
|
||||
"currentTier": "Current Tier",
|
||||
"progress": "Progress",
|
||||
"pointsTo": "points to",
|
||||
"referralCode": "REFERRAL CODE",
|
||||
"shareYourCode": "Share your unique code to earn 10% commission on all friend activities.",
|
||||
"copy": "Copy",
|
||||
"share": "Share",
|
||||
"bindInviteCode": "BIND INVITE CODE",
|
||||
"enterInviteCode": "Enter your friend's invite code to unlock bonus points.",
|
||||
"enterCode": "ENTER CODE",
|
||||
"apply": "Apply",
|
||||
"teamTVL": "TEAM TVL",
|
||||
"buildYourTeam": "Build your team to reach milestones and unlock rewards.",
|
||||
"members": "Members",
|
||||
"whales": "Whales",
|
||||
"traders": "Traders",
|
||||
"users": "Users",
|
||||
"depositToAlp": "Deposit USDC to ALP",
|
||||
"nativeStaking": "Native Staking",
|
||||
"upTo3x": "UP TO 3X",
|
||||
"lockPeriod": "30 DAYS",
|
||||
"pointsBoost": "+10% POINTS",
|
||||
"deposit": "Deposit",
|
||||
"pendleYT": "Pendle YT",
|
||||
"yieldTradingOptimization": "Yield Trading optimization",
|
||||
"curveLp": "Curve LP",
|
||||
"liquidityPoolProvision": "Liquidity Pool provision",
|
||||
"morpho": "Morpho",
|
||||
"lendingLoopStrategy": "Lending Loop strategy",
|
||||
"estApy": "EST. APY",
|
||||
"currentApy": "CURRENT APY",
|
||||
"maxLtv": "MAX LTV",
|
||||
"zapIn": "ZAP IN",
|
||||
"addLiquidity": "Add Liquidity",
|
||||
"startLoop": "Start LOOP",
|
||||
"activityHistory": "Activity History",
|
||||
"trackActivities": "Track all your points-earning activities",
|
||||
"lastUpdatedMinutesAgo": "Last updated: 2 minutes ago",
|
||||
"all": "All",
|
||||
"referrals": "Referrals",
|
||||
"deposits": "Deposits",
|
||||
"user": "User",
|
||||
"friends": "Friends",
|
||||
"code": "Code",
|
||||
"points": "Points",
|
||||
"topPerformers": "Top Performers",
|
||||
"leaderboard": "Leaderboard of highest earners this season",
|
||||
"rank": "Rank",
|
||||
"address": "Address",
|
||||
"level": "Level"
|
||||
}
|
||||
}
|
||||
{
|
||||
"nav": {
|
||||
"fundMarket": "Fund Market",
|
||||
"alp": "ALP",
|
||||
"swap": "Swap",
|
||||
"lending": "Lending",
|
||||
"transparency": "Transparency",
|
||||
"ecosystem": "Ecosystem",
|
||||
"points": "Points",
|
||||
"globalTVL": "Global TVL",
|
||||
"faqs": "FAQs"
|
||||
},
|
||||
"tabs": {
|
||||
"overview": "Overview",
|
||||
"assetDescription": "Asset Description",
|
||||
"analytics": "Analytics",
|
||||
"performanceAnalysis": "Performance Analysis",
|
||||
"assetCustody": "Asset Custody & Verification"
|
||||
},
|
||||
"product": {
|
||||
"gyUsEquityIndexToken": "High-Yield US Equity Quantitative Strategy",
|
||||
"contractAddress": "Contract"
|
||||
},
|
||||
"stats": {
|
||||
"currentAPY": "Current APY",
|
||||
"totalValueLocked": "Total Value Locked",
|
||||
"yourBalance": "Your Balance",
|
||||
"yourEarnings": "Your Earnings",
|
||||
"availableToWithdraw": "Available to Withdraw"
|
||||
},
|
||||
"assetOverview": {
|
||||
"title": "Asset Overview",
|
||||
"mediumRisk": "Medium Risk",
|
||||
"underlyingAssets": "Underlying Assets",
|
||||
"usEquityIndex": "US Equity Index",
|
||||
"maturityRange": "Maturity Range",
|
||||
"cap": "Cap",
|
||||
"minInvestment": "Min. Investment",
|
||||
"poolCapacity": "Pool Capacity",
|
||||
"currentPrice": "Current Price"
|
||||
},
|
||||
"apy": {
|
||||
"apyHistory": "APY History",
|
||||
"priceHistory": "Price History",
|
||||
"lastDays": "Last 30 days",
|
||||
"highest": "Highest",
|
||||
"lowest": "Lowest"
|
||||
},
|
||||
"description": {
|
||||
"title": "Asset Description",
|
||||
"content": "高盈美股量化策略 (High-Yield US Equity Quantitative Strategy) is an institutional-grade Real World Asset (RWA) offering investors exposure to a diversified portfolio of US equities. This strategy utilizes advanced quantitative models to generate high yields through market-neutral arbitrage and other sophisticated trading techniques. Designed for stability and consistent returns, it provides an on-chain gateway to traditional financial markets with enhanced transparency and instant settlement.\n\nThe strategy aims to minimize market risk while maximizing yield generation, making it suitable for investors seeking stable growth within the decentralized finance ecosystem. Underlying assets are held by institutional custodians and verified through robust compliance frameworks."
|
||||
},
|
||||
"mintSwap": {
|
||||
"mint": "Mint",
|
||||
"swap": "Swap",
|
||||
"deposit": "Deposit",
|
||||
"withdraw": "Withdraw",
|
||||
"balance": "Bal",
|
||||
"max": "MAX",
|
||||
"estimatedReturns": "Estimated Returns",
|
||||
"estAPY": "Est. APY",
|
||||
"estReturns": "Est. Returns",
|
||||
"transactionSummary": "Transaction Summary",
|
||||
"youGet": "You Get",
|
||||
"salesPrice": "Sales Price",
|
||||
"fee": "Fee",
|
||||
"gas": "Gas",
|
||||
"approveDeposit": "Approve & Deposit USDC",
|
||||
"termsText": "By depositing, you agree to the",
|
||||
"termsOfService": "Terms of Service",
|
||||
"and": "and",
|
||||
"privacyPolicy": "Privacy Policy"
|
||||
},
|
||||
"protocol": {
|
||||
"title": "Protocol Information",
|
||||
"whitepaper": "Whitepaper",
|
||||
"documentation": "Documentation",
|
||||
"github": "GitHub"
|
||||
},
|
||||
"rewards": {
|
||||
"season1": "Season 1 Rewards",
|
||||
"live": "Live",
|
||||
"earnPoints": "Earn 1 point per USDC per day holding GY-US",
|
||||
"yourPoints": "Your Points",
|
||||
"badgeBoost": "Badge Boost",
|
||||
"referrals": "Referrals"
|
||||
},
|
||||
"performance": {
|
||||
"title": "Performance Analysis",
|
||||
"description": "Historical daily net returns for the High-Yield US Equity Strategy.",
|
||||
"ytd": "2025 YTD",
|
||||
"dailyNetReturns": "Daily Net Returns (%)",
|
||||
"weekdays": {
|
||||
"sun": "SUN",
|
||||
"mon": "MON",
|
||||
"tue": "TUE",
|
||||
"wed": "WED",
|
||||
"thu": "THU",
|
||||
"fri": "FRI",
|
||||
"sat": "SAT"
|
||||
}
|
||||
},
|
||||
"custody": {
|
||||
"title": "Asset Custody & Verification",
|
||||
"description": "Real-time view of underlying asset holdings and institutional custodian verification status.",
|
||||
"underlyingHoldings": "Underlying Asset Holdings",
|
||||
"verifiedBy": "Verified by third-party institutional custodians",
|
||||
"lastUpdated": "Last updated",
|
||||
"minutesAgo": "minutes ago",
|
||||
"custodian": "Custodian",
|
||||
"assetType": "Asset Type",
|
||||
"maturity": "Maturity",
|
||||
"valueUSD": "Value (USD)",
|
||||
"status": "Status",
|
||||
"verified": "Verified",
|
||||
"totalValue": "Total underlying asset value",
|
||||
"smartContract": "Smart Contract",
|
||||
"smartContractDesc": "Audited by OpenZeppelin & Certik for security and reliability.",
|
||||
"compliance": "Compliance",
|
||||
"complianceDesc": "SEC-regulated structure & bankruptcy remote legal framework.",
|
||||
"proofOfReserves": "Proof of Reserves",
|
||||
"proofDesc": "Real-time on-chain verification via Chainlink Oracle.",
|
||||
"viewReports": "View Reports",
|
||||
"independentVerifications": "Independent Verifications",
|
||||
"independentDesc": "Every month, assetX undergoes third-party auditing to ensure complete transparency.",
|
||||
"attestationReport": "Attestation Report",
|
||||
"viewAllArchive": "View All Archive",
|
||||
"morganStanley": "Morgan Stanley",
|
||||
"primeBroker": "Prime Broker",
|
||||
"usEquityPortfolio": "US Equity Portfolio",
|
||||
"days": "days"
|
||||
},
|
||||
"productPage": {
|
||||
"title": "AssetX Fund Market",
|
||||
"assets": "Assets",
|
||||
"totalValueLocked": "Total Value Locked",
|
||||
"cumulativeYield": "Cumulative Yield",
|
||||
"yourTotalBalance": "Your Total Balance",
|
||||
"yourTotalEarning": "Your Total Earning",
|
||||
"yieldAPY": "Yield APY",
|
||||
"poolCap": "Pool CaP",
|
||||
"maturity": "Maturity",
|
||||
"risk": "Risk",
|
||||
"lockUp": "Lock-Up",
|
||||
"circulatingSupply": "Circulating supply",
|
||||
"poolCapacity": "Pool Capacity",
|
||||
"filled": "Filled",
|
||||
"invest": "Invest",
|
||||
"quantStrategy": "Quant Strategy",
|
||||
"realEstate": "Real Estate",
|
||||
"low": "LOW",
|
||||
"medium": "Medium",
|
||||
"high": "High"
|
||||
},
|
||||
"alp": {
|
||||
"title": "AssetX Liquidity Pool",
|
||||
"price": "Price",
|
||||
"poolAPR": "Pool APR",
|
||||
"rewardAPR": "Reward APR",
|
||||
"priceHistory": "Price History",
|
||||
"lastDays": "Last 30 days",
|
||||
"avg": "Avg",
|
||||
"highest": "Highest",
|
||||
"lowest": "Lowest",
|
||||
"current": "Current",
|
||||
"sell": "SELL",
|
||||
"buy": "BUY",
|
||||
"buyUsdc": "Buy USDC",
|
||||
"liquidityAllocation": "Liquidity Allocation",
|
||||
"token": "TOKEN",
|
||||
"poolSize": "Pool Size",
|
||||
"currentTargetWeight": "Current / Target Weight",
|
||||
"currentPrice": "Current Price",
|
||||
"quantStrategy": "Quant Strategy"
|
||||
},
|
||||
"swap": {
|
||||
"title": "AssetX SWAP",
|
||||
"subtitle": "Trade Yield Tokens instantly with AssetX LP Vault"
|
||||
},
|
||||
"lending": {
|
||||
"title": "Lending Market",
|
||||
"subtitle": "Borrow USDC against your Yield Token holdings.",
|
||||
"totalUsdcSupply": "TOTAL USDC SUPPLY",
|
||||
"utilization": "UTILIZATION",
|
||||
"activeLoans": "ACTIVE LOANS",
|
||||
"usdcBorrowed": "USDC Borrowed",
|
||||
"vsLastMonth": "vs last month",
|
||||
"avgApy": "Avg. APY",
|
||||
"stableYield": "Stable yield environment",
|
||||
"yourPortfolio": "Your Portfolio",
|
||||
"earned": "EARNED",
|
||||
"supplyUsdc": "Supply USDC",
|
||||
"borrowMarket": "Borrow Market",
|
||||
"yourBalance": "Your Balance",
|
||||
"yourInterest": "Your Interest",
|
||||
"borrowed": "Borrowed",
|
||||
"ltv": "LTV",
|
||||
"repay": "Repay",
|
||||
"borrow": "Borrow"
|
||||
},
|
||||
"supply": {
|
||||
"supply": "Supply",
|
||||
"withdraw": "Withdraw",
|
||||
"tokenBalance": "Token Balance",
|
||||
"supplied": "Supplied",
|
||||
"deposit": "Deposit",
|
||||
"max": "MAX",
|
||||
"healthFactor": "Health Factor",
|
||||
"utilization": "Utilization",
|
||||
"safe": "Safe",
|
||||
"estimatedReturns": "Estimated Returns",
|
||||
"estApy": "Est. APY",
|
||||
"estReturnsYear": "Est. Returns (/Year)",
|
||||
"usdcLendPool": "USDC Lend Pool",
|
||||
"historicalApy": "HISTORICAL APY"
|
||||
},
|
||||
"repay": {
|
||||
"backToLending": "Back to lending",
|
||||
"supplyToBorrow": "Supply YT/ALP to Borrow USDC",
|
||||
"price": "Price",
|
||||
"available": "Available",
|
||||
"supplyCollateral": "Supply Collateral",
|
||||
"borrowDebt": "Borrow Debt",
|
||||
"deposit": "Deposit",
|
||||
"withdraw": "Withdraw",
|
||||
"borrow": "Borrow",
|
||||
"repay": "Repay",
|
||||
"apr": "APR",
|
||||
"netApr": "NET APR",
|
||||
"liqPriceOffset": "Liq.price/offset",
|
||||
"positionHealth": "Position Health",
|
||||
"totalValueLocked": "Total Value Locked in Pool",
|
||||
"utilization": "Utilization",
|
||||
"rewardMultiplier": "Reward Multiplier"
|
||||
},
|
||||
"transparency": {
|
||||
"title": "Transparency",
|
||||
"subtitle": "Real-time view of all reserve assets and positions",
|
||||
"totalReserves": "Total Reserves",
|
||||
"totalUsdcSupply": "TOTAL USDC SUPPLY",
|
||||
"utilization": "UTILIZATION",
|
||||
"activeLoans": "ACTIVE LOANS",
|
||||
"rwaHoldings": "RWA Holdings",
|
||||
"rwaSubtitle": "Real-world assets held by institutional custodians",
|
||||
"lastUpdated": "Last updated",
|
||||
"minutesAgo": "minutes ago",
|
||||
"custodian": "Custodian",
|
||||
"assetType": "Asset Type",
|
||||
"maturity": "Maturity",
|
||||
"valueUsd": "Value (USD)",
|
||||
"status": "Status",
|
||||
"verified": "Verified",
|
||||
"assetDistribution": "Asset Distribution",
|
||||
"distributionSubtitle": "Portfolio breakdown by risk class",
|
||||
"geographicAllocation": "Geographic Allocation",
|
||||
"geographicSubtitle": "Assets by jurisdictional region",
|
||||
"realEstate": "Real Estate",
|
||||
"usTreasuryBills": "US Treasury Bills",
|
||||
"privateCredit": "Private Credit",
|
||||
"fixedIncome": "Fixed Income",
|
||||
"alternativeAssets": "Alternative Assets",
|
||||
"alternativeCredit": "Alternative Credit",
|
||||
"unitedStates": "United States",
|
||||
"northAmerica": "North America",
|
||||
"hongKong": "Hong Kong",
|
||||
"asiaPacific": "Asia Pacific",
|
||||
"morganStanley": "Morgan Stanley",
|
||||
"primeBroker": "Prime Broker",
|
||||
"usEquityPortfolio": "US Equity Portfolio",
|
||||
"days": "days"
|
||||
},
|
||||
"points": {
|
||||
"title": "Points",
|
||||
"season1": "Season 1",
|
||||
"live": "Live",
|
||||
"xPoints": "7x Points",
|
||||
"pointsDashboard": "Points Dashboard",
|
||||
"unlockUpTo": "Unlock up to",
|
||||
"withEcosystemMultipliers": "with ecosystem multipliers.",
|
||||
"yourTotalPoints": "Your Total Points",
|
||||
"globalRank": "Global Rank",
|
||||
"topOfUsers": "Top 12% of users",
|
||||
"endsIn": "Ends In",
|
||||
"silverMember": "Silver Member",
|
||||
"goldMember": "Gold Member",
|
||||
"platinumMember": "Platinum Member",
|
||||
"currentTier": "Current Tier",
|
||||
"progress": "Progress",
|
||||
"pointsTo": "points to",
|
||||
"referralCode": "REFERRAL CODE",
|
||||
"shareYourCode": "Share your unique code to earn 10% commission on all friend activities.",
|
||||
"copy": "Copy",
|
||||
"share": "Share",
|
||||
"bindInviteCode": "BIND INVITE CODE",
|
||||
"enterInviteCode": "Enter your friend's invite code to unlock bonus points.",
|
||||
"enterCode": "ENTER CODE",
|
||||
"apply": "Apply",
|
||||
"teamTVL": "TEAM TVL",
|
||||
"buildYourTeam": "Build your team to reach milestones and unlock rewards.",
|
||||
"members": "Members",
|
||||
"whales": "Whales",
|
||||
"traders": "Traders",
|
||||
"users": "Users",
|
||||
"depositToAlp": "Deposit USDC to ALP",
|
||||
"nativeStaking": "Native Staking",
|
||||
"upTo3x": "UP TO 3X",
|
||||
"lockPeriod": "30 DAYS",
|
||||
"pointsBoost": "+10% POINTS",
|
||||
"deposit": "Deposit",
|
||||
"pendleYT": "Pendle YT",
|
||||
"yieldTradingOptimization": "Yield Trading optimization",
|
||||
"curveLp": "Curve LP",
|
||||
"liquidityPoolProvision": "Liquidity Pool provision",
|
||||
"morpho": "Morpho",
|
||||
"lendingLoopStrategy": "Lending Loop strategy",
|
||||
"estApy": "EST. APY",
|
||||
"currentApy": "CURRENT APY",
|
||||
"maxLtv": "MAX LTV",
|
||||
"zapIn": "ZAP IN",
|
||||
"addLiquidity": "Add Liquidity",
|
||||
"startLoop": "Start LOOP",
|
||||
"activityHistory": "Activity History",
|
||||
"trackActivities": "Track all your points-earning activities",
|
||||
"lastUpdatedMinutesAgo": "Last updated: 2 minutes ago",
|
||||
"all": "All",
|
||||
"referrals": "Referrals",
|
||||
"deposits": "Deposits",
|
||||
"user": "User",
|
||||
"friends": "Friends",
|
||||
"code": "Code",
|
||||
"points": "Points",
|
||||
"topPerformers": "Top Performers",
|
||||
"leaderboard": "Leaderboard of highest earners this season",
|
||||
"rank": "Rank",
|
||||
"address": "Address",
|
||||
"level": "Level"
|
||||
}
|
||||
}
|
||||
|
||||
676
locales/zh.json
@@ -1,338 +1,338 @@
|
||||
{
|
||||
"nav": {
|
||||
"fundMarket": "基金市场",
|
||||
"alp": "ALP",
|
||||
"swap": "交换",
|
||||
"lending": "借贷",
|
||||
"transparency": "透明度",
|
||||
"ecosystem": "生态系统",
|
||||
"points": "积分",
|
||||
"globalTVL": "全球锁仓总值",
|
||||
"faqs": "常见问题"
|
||||
},
|
||||
"tabs": {
|
||||
"overview": "概览",
|
||||
"assetDescription": "资产描述",
|
||||
"analytics": "分析",
|
||||
"performanceAnalysis": "业绩分析",
|
||||
"assetCustody": "资产托管与验证"
|
||||
},
|
||||
"product": {
|
||||
"gyUsEquityIndexToken": "高盈美股量化策略",
|
||||
"contractAddress": "合约地址"
|
||||
},
|
||||
"stats": {
|
||||
"currentAPY": "当前年化收益率",
|
||||
"totalValueLocked": "总锁仓价值",
|
||||
"yourBalance": "您的余额",
|
||||
"yourEarnings": "您的收益",
|
||||
"availableToWithdraw": "可提取金额"
|
||||
},
|
||||
"assetOverview": {
|
||||
"title": "资产概览",
|
||||
"mediumRisk": "中等风险",
|
||||
"underlyingAssets": "基础资产",
|
||||
"usEquityIndex": "美国股票指数",
|
||||
"maturityRange": "到期日范围",
|
||||
"cap": "上限",
|
||||
"minInvestment": "最小投资额",
|
||||
"poolCapacity": "资金池容量",
|
||||
"currentPrice": "当前价格"
|
||||
},
|
||||
"apy": {
|
||||
"apyHistory": "APY 历史",
|
||||
"priceHistory": "价格历史",
|
||||
"lastDays": "最近 30 天",
|
||||
"highest": "最高",
|
||||
"lowest": "最低"
|
||||
},
|
||||
"description": {
|
||||
"title": "资产描述",
|
||||
"content": "高盈美股量化策略(High-Yield US Equity Quantitative Strategy)是一款机构级真实世界资产(RWA)产品,为投资者提供多元化的美国股票投资组合敞口。该策略利用先进的量化模型,通过市场中性套利和其他复杂的交易技术来产生高收益。专为稳定性和持续回报而设计,它提供了一个通往传统金融市场的链上通道,具有更高的透明度和即时结算功能。\n\n该策略旨在最小化市场风险的同时最大化收益生成,适合在去中心化金融生态系统中寻求稳定增长的投资者。基础资产由机构托管人持有,并通过健全的合规框架进行验证。"
|
||||
},
|
||||
"mintSwap": {
|
||||
"mint": "铸造",
|
||||
"swap": "交换",
|
||||
"deposit": "存入",
|
||||
"withdraw": "提取",
|
||||
"balance": "余额",
|
||||
"max": "最大",
|
||||
"estimatedReturns": "预计收益",
|
||||
"estAPY": "预计 APY",
|
||||
"estReturns": "预计回报",
|
||||
"transactionSummary": "交易摘要",
|
||||
"youGet": "您将获得",
|
||||
"salesPrice": "销售价格",
|
||||
"fee": "手续费",
|
||||
"gas": "Gas 费用",
|
||||
"approveDeposit": "批准并存入 USDC",
|
||||
"termsText": "通过存入,您同意",
|
||||
"termsOfService": "服务条款",
|
||||
"and": "和",
|
||||
"privacyPolicy": "隐私政策"
|
||||
},
|
||||
"protocol": {
|
||||
"title": "协议信息",
|
||||
"whitepaper": "白皮书",
|
||||
"documentation": "文档",
|
||||
"github": "GitHub"
|
||||
},
|
||||
"rewards": {
|
||||
"season1": "第一季奖励",
|
||||
"live": "进行中",
|
||||
"earnPoints": "持有 GY-US 每天每 USDC 赚取 1 积分",
|
||||
"yourPoints": "您的积分",
|
||||
"badgeBoost": "徽章加成",
|
||||
"referrals": "推荐"
|
||||
},
|
||||
"performance": {
|
||||
"title": "业绩分析",
|
||||
"description": "高收益美国股票策略的历史每日净回报。",
|
||||
"ytd": "2025 年初至今",
|
||||
"dailyNetReturns": "每日净回报 (%)",
|
||||
"weekdays": {
|
||||
"sun": "周日",
|
||||
"mon": "周一",
|
||||
"tue": "周二",
|
||||
"wed": "周三",
|
||||
"thu": "周四",
|
||||
"fri": "周五",
|
||||
"sat": "周六"
|
||||
}
|
||||
},
|
||||
"custody": {
|
||||
"title": "资产托管与验证",
|
||||
"description": "实时查看基础资产持有情况和机构托管人验证状态。",
|
||||
"underlyingHoldings": "基础资产持有量",
|
||||
"verifiedBy": "由第三方机构托管人验证",
|
||||
"lastUpdated": "最后更新",
|
||||
"minutesAgo": "分钟前",
|
||||
"custodian": "托管人",
|
||||
"assetType": "资产类型",
|
||||
"maturity": "到期日",
|
||||
"valueUSD": "价值 (USD)",
|
||||
"status": "状态",
|
||||
"verified": "已验证",
|
||||
"totalValue": "基础资产总价值",
|
||||
"smartContract": "智能合约",
|
||||
"smartContractDesc": "由 OpenZeppelin 和 Certik 审计,确保安全性和可靠性。",
|
||||
"compliance": "合规性",
|
||||
"complianceDesc": "SEC 监管结构和破产隔离法律框架。",
|
||||
"proofOfReserves": "储备证明",
|
||||
"proofDesc": "通过 Chainlink Oracle 进行实时链上验证。",
|
||||
"viewReports": "查看报告",
|
||||
"independentVerifications": "独立验证",
|
||||
"independentDesc": "每月 assetX 都会接受第三方审计以确保完全透明。",
|
||||
"attestationReport": "证明报告",
|
||||
"viewAllArchive": "查看所有存档",
|
||||
"morganStanley": "摩根士丹利",
|
||||
"primeBroker": "主经纪商",
|
||||
"usEquityPortfolio": "美国股票投资组合",
|
||||
"days": "天"
|
||||
},
|
||||
"productPage": {
|
||||
"title": "AssetX 基金市场",
|
||||
"assets": "资产",
|
||||
"totalValueLocked": "总锁仓量",
|
||||
"cumulativeYield": "累计收益",
|
||||
"yourTotalBalance": "您的总余额",
|
||||
"yourTotalEarning": "您的总收益",
|
||||
"yieldAPY": "收益率 APY",
|
||||
"poolCap": "池容量",
|
||||
"maturity": "到期日",
|
||||
"risk": "风险",
|
||||
"lockUp": "锁仓期",
|
||||
"circulatingSupply": "流通量",
|
||||
"poolCapacity": "池容量",
|
||||
"filled": "已填充",
|
||||
"invest": "投资",
|
||||
"quantStrategy": "量化策略",
|
||||
"realEstate": "房地产",
|
||||
"low": "低",
|
||||
"medium": "中",
|
||||
"high": "高"
|
||||
},
|
||||
"alp": {
|
||||
"title": "AssetX 流动性池",
|
||||
"price": "价格",
|
||||
"poolAPR": "池收益率",
|
||||
"rewardAPR": "奖励收益率",
|
||||
"priceHistory": "价格历史",
|
||||
"lastDays": "最近 30 天",
|
||||
"avg": "平均",
|
||||
"highest": "最高",
|
||||
"lowest": "最低",
|
||||
"current": "当前",
|
||||
"sell": "卖出",
|
||||
"buy": "买入",
|
||||
"buyUsdc": "购买 USDC",
|
||||
"liquidityAllocation": "流动性分配",
|
||||
"token": "代币",
|
||||
"poolSize": "池容量",
|
||||
"currentTargetWeight": "当前 / 目标权重",
|
||||
"currentPrice": "当前价格",
|
||||
"quantStrategy": "量化策略"
|
||||
},
|
||||
"swap": {
|
||||
"title": "AssetX 交换",
|
||||
"subtitle": "使用 AssetX LP 保险库即时交易收益代币"
|
||||
},
|
||||
"lending": {
|
||||
"title": "借贷市场",
|
||||
"subtitle": "使用您的收益代币作为抵押借入 USDC。",
|
||||
"totalUsdcSupply": "USDC 总供应量",
|
||||
"utilization": "利用率",
|
||||
"activeLoans": "活跃贷款",
|
||||
"usdcBorrowed": "已借出 USDC",
|
||||
"vsLastMonth": "较上月",
|
||||
"avgApy": "平均年化收益率",
|
||||
"stableYield": "稳定收益环境",
|
||||
"yourPortfolio": "您的投资组合",
|
||||
"earned": "已赚取",
|
||||
"supplyUsdc": "供应 USDC",
|
||||
"borrowMarket": "借贷市场",
|
||||
"yourBalance": "您的余额",
|
||||
"yourInterest": "您的利息",
|
||||
"borrowed": "已借出",
|
||||
"ltv": "贷款价值比",
|
||||
"repay": "还款",
|
||||
"borrow": "借款"
|
||||
},
|
||||
"supply": {
|
||||
"supply": "供应",
|
||||
"withdraw": "提取",
|
||||
"tokenBalance": "代币余额",
|
||||
"supplied": "已供应",
|
||||
"deposit": "存入",
|
||||
"max": "最大",
|
||||
"healthFactor": "健康因子",
|
||||
"utilization": "利用率",
|
||||
"safe": "安全",
|
||||
"estimatedReturns": "预计收益",
|
||||
"estApy": "预计年化收益率",
|
||||
"estReturnsYear": "预计收益(/年)",
|
||||
"usdcLendPool": "USDC 借贷池",
|
||||
"historicalApy": "历史年化收益率"
|
||||
},
|
||||
"repay": {
|
||||
"backToLending": "返回借贷",
|
||||
"supplyToBorrow": "供应 YT/ALP 以借入 USDC",
|
||||
"price": "价格",
|
||||
"available": "可用",
|
||||
"supplyCollateral": "供应抵押品",
|
||||
"borrowDebt": "借入债务",
|
||||
"deposit": "存入",
|
||||
"withdraw": "提取",
|
||||
"borrow": "借款",
|
||||
"repay": "还款",
|
||||
"apr": "年化收益率",
|
||||
"netApr": "净年化收益率",
|
||||
"liqPriceOffset": "清算价格/偏移",
|
||||
"positionHealth": "仓位健康度",
|
||||
"totalValueLocked": "池内总锁仓价值",
|
||||
"utilization": "利用率",
|
||||
"rewardMultiplier": "奖励倍数"
|
||||
},
|
||||
"transparency": {
|
||||
"title": "透明度",
|
||||
"subtitle": "所有储备资产和仓位的实时视图",
|
||||
"totalReserves": "总储备",
|
||||
"totalUsdcSupply": "USDC 总供应量",
|
||||
"utilization": "利用率",
|
||||
"activeLoans": "活跃贷款",
|
||||
"rwaHoldings": "RWA 持有量",
|
||||
"rwaSubtitle": "由机构托管人持有的真实世界资产",
|
||||
"lastUpdated": "最后更新",
|
||||
"minutesAgo": "分钟前",
|
||||
"custodian": "托管人",
|
||||
"assetType": "资产类型",
|
||||
"maturity": "到期日",
|
||||
"valueUsd": "价值 (USD)",
|
||||
"status": "状态",
|
||||
"verified": "已验证",
|
||||
"assetDistribution": "资产分布",
|
||||
"distributionSubtitle": "按风险等级划分的投资组合",
|
||||
"geographicAllocation": "地理分配",
|
||||
"geographicSubtitle": "按司法管辖区域划分的资产",
|
||||
"realEstate": "房地产",
|
||||
"usTreasuryBills": "美国国债",
|
||||
"privateCredit": "私人信贷",
|
||||
"fixedIncome": "固定收益",
|
||||
"alternativeAssets": "另类资产",
|
||||
"alternativeCredit": "另类信贷",
|
||||
"unitedStates": "美国",
|
||||
"northAmerica": "北美",
|
||||
"hongKong": "香港",
|
||||
"asiaPacific": "亚太地区",
|
||||
"morganStanley": "摩根士丹利",
|
||||
"primeBroker": "主经纪商",
|
||||
"usEquityPortfolio": "美国股票投资组合",
|
||||
"days": "天"
|
||||
},
|
||||
"points": {
|
||||
"title": "积分",
|
||||
"season1": "第一季",
|
||||
"live": "进行中",
|
||||
"xPoints": "7倍积分",
|
||||
"pointsDashboard": "积分仪表板",
|
||||
"unlockUpTo": "解锁高达",
|
||||
"withEcosystemMultipliers": "的生态系统倍数。",
|
||||
"yourTotalPoints": "您的总积分",
|
||||
"globalRank": "全球排名",
|
||||
"topOfUsers": "前 12% 用户",
|
||||
"endsIn": "结束于",
|
||||
"silverMember": "白银会员",
|
||||
"goldMember": "黄金会员",
|
||||
"platinumMember": "铂金会员",
|
||||
"currentTier": "当前等级",
|
||||
"progress": "进度",
|
||||
"pointsTo": "积分到",
|
||||
"referralCode": "推荐码",
|
||||
"shareYourCode": "分享您的专属代码,赚取朋友所有活动的 10% 佣金。",
|
||||
"copy": "复制",
|
||||
"share": "分享",
|
||||
"bindInviteCode": "绑定邀请码",
|
||||
"enterInviteCode": "输入您朋友的邀请码以解锁奖励积分。",
|
||||
"enterCode": "输入代码",
|
||||
"apply": "应用",
|
||||
"teamTVL": "团队 TVL",
|
||||
"buildYourTeam": "建立您的团队以达到里程碑并解锁奖励。",
|
||||
"members": "成员",
|
||||
"whales": "巨鲸",
|
||||
"traders": "交易者",
|
||||
"users": "用户",
|
||||
"depositToAlp": "存入 USDC 到 ALP",
|
||||
"nativeStaking": "原生质押",
|
||||
"upTo3x": "最高 3倍",
|
||||
"lockPeriod": "30 天",
|
||||
"pointsBoost": "+10% 积分",
|
||||
"deposit": "存入",
|
||||
"pendleYT": "Pendle YT",
|
||||
"yieldTradingOptimization": "收益交易优化",
|
||||
"curveLp": "Curve LP",
|
||||
"liquidityPoolProvision": "流动性池供应",
|
||||
"morpho": "Morpho",
|
||||
"lendingLoopStrategy": "借贷循环策略",
|
||||
"estApy": "预计年化收益率",
|
||||
"currentApy": "当前年化收益率",
|
||||
"maxLtv": "最大贷款价值比",
|
||||
"zapIn": "快速投入",
|
||||
"addLiquidity": "添加流动性",
|
||||
"startLoop": "启动循环",
|
||||
"activityHistory": "活动历史",
|
||||
"trackActivities": "跟踪您所有的积分获取活动",
|
||||
"lastUpdatedMinutesAgo": "最后更新:2 分钟前",
|
||||
"all": "全部",
|
||||
"referrals": "推荐",
|
||||
"deposits": "存款",
|
||||
"user": "用户",
|
||||
"friends": "朋友",
|
||||
"code": "代码",
|
||||
"points": "积分",
|
||||
"topPerformers": "最佳表现者",
|
||||
"leaderboard": "本季最高收入者排行榜",
|
||||
"rank": "排名",
|
||||
"address": "地址",
|
||||
"level": "等级"
|
||||
}
|
||||
}
|
||||
{
|
||||
"nav": {
|
||||
"fundMarket": "基金市场",
|
||||
"alp": "ALP",
|
||||
"swap": "交换",
|
||||
"lending": "借贷",
|
||||
"transparency": "透明度",
|
||||
"ecosystem": "生态系统",
|
||||
"points": "积分",
|
||||
"globalTVL": "全球锁仓总值",
|
||||
"faqs": "常见问题"
|
||||
},
|
||||
"tabs": {
|
||||
"overview": "概览",
|
||||
"assetDescription": "资产描述",
|
||||
"analytics": "分析",
|
||||
"performanceAnalysis": "业绩分析",
|
||||
"assetCustody": "资产托管与验证"
|
||||
},
|
||||
"product": {
|
||||
"gyUsEquityIndexToken": "高盈美股量化策略",
|
||||
"contractAddress": "合约地址"
|
||||
},
|
||||
"stats": {
|
||||
"currentAPY": "当前年化收益率",
|
||||
"totalValueLocked": "总锁仓价值",
|
||||
"yourBalance": "您的余额",
|
||||
"yourEarnings": "您的收益",
|
||||
"availableToWithdraw": "可提取金额"
|
||||
},
|
||||
"assetOverview": {
|
||||
"title": "资产概览",
|
||||
"mediumRisk": "中等风险",
|
||||
"underlyingAssets": "基础资产",
|
||||
"usEquityIndex": "美国股票指数",
|
||||
"maturityRange": "到期日范围",
|
||||
"cap": "上限",
|
||||
"minInvestment": "最小投资额",
|
||||
"poolCapacity": "资金池容量",
|
||||
"currentPrice": "当前价格"
|
||||
},
|
||||
"apy": {
|
||||
"apyHistory": "APY 历史",
|
||||
"priceHistory": "价格历史",
|
||||
"lastDays": "最近 30 天",
|
||||
"highest": "最高",
|
||||
"lowest": "最低"
|
||||
},
|
||||
"description": {
|
||||
"title": "资产描述",
|
||||
"content": "高盈美股量化策略(High-Yield US Equity Quantitative Strategy)是一款机构级真实世界资产(RWA)产品,为投资者提供多元化的美国股票投资组合敞口。该策略利用先进的量化模型,通过市场中性套利和其他复杂的交易技术来产生高收益。专为稳定性和持续回报而设计,它提供了一个通往传统金融市场的链上通道,具有更高的透明度和即时结算功能。\n\n该策略旨在最小化市场风险的同时最大化收益生成,适合在去中心化金融生态系统中寻求稳定增长的投资者。基础资产由机构托管人持有,并通过健全的合规框架进行验证。"
|
||||
},
|
||||
"mintSwap": {
|
||||
"mint": "铸造",
|
||||
"swap": "交换",
|
||||
"deposit": "存入",
|
||||
"withdraw": "提取",
|
||||
"balance": "余额",
|
||||
"max": "最大",
|
||||
"estimatedReturns": "预计收益",
|
||||
"estAPY": "预计 APY",
|
||||
"estReturns": "预计回报",
|
||||
"transactionSummary": "交易摘要",
|
||||
"youGet": "您将获得",
|
||||
"salesPrice": "销售价格",
|
||||
"fee": "手续费",
|
||||
"gas": "Gas 费用",
|
||||
"approveDeposit": "批准并存入 USDC",
|
||||
"termsText": "通过存入,您同意",
|
||||
"termsOfService": "服务条款",
|
||||
"and": "和",
|
||||
"privacyPolicy": "隐私政策"
|
||||
},
|
||||
"protocol": {
|
||||
"title": "协议信息",
|
||||
"whitepaper": "白皮书",
|
||||
"documentation": "文档",
|
||||
"github": "GitHub"
|
||||
},
|
||||
"rewards": {
|
||||
"season1": "第一季奖励",
|
||||
"live": "进行中",
|
||||
"earnPoints": "持有 GY-US 每天每 USDC 赚取 1 积分",
|
||||
"yourPoints": "您的积分",
|
||||
"badgeBoost": "徽章加成",
|
||||
"referrals": "推荐"
|
||||
},
|
||||
"performance": {
|
||||
"title": "业绩分析",
|
||||
"description": "高收益美国股票策略的历史每日净回报。",
|
||||
"ytd": "2025 年初至今",
|
||||
"dailyNetReturns": "每日净回报 (%)",
|
||||
"weekdays": {
|
||||
"sun": "周日",
|
||||
"mon": "周一",
|
||||
"tue": "周二",
|
||||
"wed": "周三",
|
||||
"thu": "周四",
|
||||
"fri": "周五",
|
||||
"sat": "周六"
|
||||
}
|
||||
},
|
||||
"custody": {
|
||||
"title": "资产托管与验证",
|
||||
"description": "实时查看基础资产持有情况和机构托管人验证状态。",
|
||||
"underlyingHoldings": "基础资产持有量",
|
||||
"verifiedBy": "由第三方机构托管人验证",
|
||||
"lastUpdated": "最后更新",
|
||||
"minutesAgo": "分钟前",
|
||||
"custodian": "托管人",
|
||||
"assetType": "资产类型",
|
||||
"maturity": "到期日",
|
||||
"valueUSD": "价值 (USD)",
|
||||
"status": "状态",
|
||||
"verified": "已验证",
|
||||
"totalValue": "基础资产总价值",
|
||||
"smartContract": "智能合约",
|
||||
"smartContractDesc": "由 OpenZeppelin 和 Certik 审计,确保安全性和可靠性。",
|
||||
"compliance": "合规性",
|
||||
"complianceDesc": "SEC 监管结构和破产隔离法律框架。",
|
||||
"proofOfReserves": "储备证明",
|
||||
"proofDesc": "通过 Chainlink Oracle 进行实时链上验证。",
|
||||
"viewReports": "查看报告",
|
||||
"independentVerifications": "独立验证",
|
||||
"independentDesc": "每月 assetX 都会接受第三方审计以确保完全透明。",
|
||||
"attestationReport": "证明报告",
|
||||
"viewAllArchive": "查看所有存档",
|
||||
"morganStanley": "摩根士丹利",
|
||||
"primeBroker": "主经纪商",
|
||||
"usEquityPortfolio": "美国股票投资组合",
|
||||
"days": "天"
|
||||
},
|
||||
"productPage": {
|
||||
"title": "AssetX 基金市场",
|
||||
"assets": "资产",
|
||||
"totalValueLocked": "总锁仓量",
|
||||
"cumulativeYield": "累计收益",
|
||||
"yourTotalBalance": "您的总余额",
|
||||
"yourTotalEarning": "您的总收益",
|
||||
"yieldAPY": "收益率 APY",
|
||||
"poolCap": "池容量",
|
||||
"maturity": "到期日",
|
||||
"risk": "风险",
|
||||
"lockUp": "锁仓期",
|
||||
"circulatingSupply": "流通量",
|
||||
"poolCapacity": "池容量",
|
||||
"filled": "已填充",
|
||||
"invest": "投资",
|
||||
"quantStrategy": "量化策略",
|
||||
"realEstate": "房地产",
|
||||
"low": "低",
|
||||
"medium": "中",
|
||||
"high": "高"
|
||||
},
|
||||
"alp": {
|
||||
"title": "AssetX 流动性池",
|
||||
"price": "价格",
|
||||
"poolAPR": "池收益率",
|
||||
"rewardAPR": "奖励收益率",
|
||||
"priceHistory": "价格历史",
|
||||
"lastDays": "最近 30 天",
|
||||
"avg": "平均",
|
||||
"highest": "最高",
|
||||
"lowest": "最低",
|
||||
"current": "当前",
|
||||
"sell": "卖出",
|
||||
"buy": "买入",
|
||||
"buyUsdc": "购买 USDC",
|
||||
"liquidityAllocation": "流动性分配",
|
||||
"token": "代币",
|
||||
"poolSize": "池容量",
|
||||
"currentTargetWeight": "当前 / 目标权重",
|
||||
"currentPrice": "当前价格",
|
||||
"quantStrategy": "量化策略"
|
||||
},
|
||||
"swap": {
|
||||
"title": "AssetX 交换",
|
||||
"subtitle": "使用 AssetX LP 保险库即时交易收益代币"
|
||||
},
|
||||
"lending": {
|
||||
"title": "借贷市场",
|
||||
"subtitle": "使用您的收益代币作为抵押借入 USDC。",
|
||||
"totalUsdcSupply": "USDC 总供应量",
|
||||
"utilization": "利用率",
|
||||
"activeLoans": "活跃贷款",
|
||||
"usdcBorrowed": "已借出 USDC",
|
||||
"vsLastMonth": "较上月",
|
||||
"avgApy": "平均年化收益率",
|
||||
"stableYield": "稳定收益环境",
|
||||
"yourPortfolio": "您的投资组合",
|
||||
"earned": "已赚取",
|
||||
"supplyUsdc": "供应 USDC",
|
||||
"borrowMarket": "借贷市场",
|
||||
"yourBalance": "您的余额",
|
||||
"yourInterest": "您的利息",
|
||||
"borrowed": "已借出",
|
||||
"ltv": "贷款价值比",
|
||||
"repay": "还款",
|
||||
"borrow": "借款"
|
||||
},
|
||||
"supply": {
|
||||
"supply": "供应",
|
||||
"withdraw": "提取",
|
||||
"tokenBalance": "代币余额",
|
||||
"supplied": "已供应",
|
||||
"deposit": "存入",
|
||||
"max": "最大",
|
||||
"healthFactor": "健康因子",
|
||||
"utilization": "利用率",
|
||||
"safe": "安全",
|
||||
"estimatedReturns": "预计收益",
|
||||
"estApy": "预计年化收益率",
|
||||
"estReturnsYear": "预计收益(/年)",
|
||||
"usdcLendPool": "USDC 借贷池",
|
||||
"historicalApy": "历史年化收益率"
|
||||
},
|
||||
"repay": {
|
||||
"backToLending": "返回借贷",
|
||||
"supplyToBorrow": "供应 YT/ALP 以借入 USDC",
|
||||
"price": "价格",
|
||||
"available": "可用",
|
||||
"supplyCollateral": "供应抵押品",
|
||||
"borrowDebt": "借入债务",
|
||||
"deposit": "存入",
|
||||
"withdraw": "提取",
|
||||
"borrow": "借款",
|
||||
"repay": "还款",
|
||||
"apr": "年化收益率",
|
||||
"netApr": "净年化收益率",
|
||||
"liqPriceOffset": "清算价格/偏移",
|
||||
"positionHealth": "仓位健康度",
|
||||
"totalValueLocked": "池内总锁仓价值",
|
||||
"utilization": "利用率",
|
||||
"rewardMultiplier": "奖励倍数"
|
||||
},
|
||||
"transparency": {
|
||||
"title": "透明度",
|
||||
"subtitle": "所有储备资产和仓位的实时视图",
|
||||
"totalReserves": "总储备",
|
||||
"totalUsdcSupply": "USDC 总供应量",
|
||||
"utilization": "利用率",
|
||||
"activeLoans": "活跃贷款",
|
||||
"rwaHoldings": "RWA 持有量",
|
||||
"rwaSubtitle": "由机构托管人持有的真实世界资产",
|
||||
"lastUpdated": "最后更新",
|
||||
"minutesAgo": "分钟前",
|
||||
"custodian": "托管人",
|
||||
"assetType": "资产类型",
|
||||
"maturity": "到期日",
|
||||
"valueUsd": "价值 (USD)",
|
||||
"status": "状态",
|
||||
"verified": "已验证",
|
||||
"assetDistribution": "资产分布",
|
||||
"distributionSubtitle": "按风险等级划分的投资组合",
|
||||
"geographicAllocation": "地理分配",
|
||||
"geographicSubtitle": "按司法管辖区域划分的资产",
|
||||
"realEstate": "房地产",
|
||||
"usTreasuryBills": "美国国债",
|
||||
"privateCredit": "私人信贷",
|
||||
"fixedIncome": "固定收益",
|
||||
"alternativeAssets": "另类资产",
|
||||
"alternativeCredit": "另类信贷",
|
||||
"unitedStates": "美国",
|
||||
"northAmerica": "北美",
|
||||
"hongKong": "香港",
|
||||
"asiaPacific": "亚太地区",
|
||||
"morganStanley": "摩根士丹利",
|
||||
"primeBroker": "主经纪商",
|
||||
"usEquityPortfolio": "美国股票投资组合",
|
||||
"days": "天"
|
||||
},
|
||||
"points": {
|
||||
"title": "积分",
|
||||
"season1": "第一季",
|
||||
"live": "进行中",
|
||||
"xPoints": "7倍积分",
|
||||
"pointsDashboard": "积分仪表板",
|
||||
"unlockUpTo": "解锁高达",
|
||||
"withEcosystemMultipliers": "的生态系统倍数。",
|
||||
"yourTotalPoints": "您的总积分",
|
||||
"globalRank": "全球排名",
|
||||
"topOfUsers": "前 12% 用户",
|
||||
"endsIn": "结束于",
|
||||
"silverMember": "白银会员",
|
||||
"goldMember": "黄金会员",
|
||||
"platinumMember": "铂金会员",
|
||||
"currentTier": "当前等级",
|
||||
"progress": "进度",
|
||||
"pointsTo": "积分到",
|
||||
"referralCode": "推荐码",
|
||||
"shareYourCode": "分享您的专属代码,赚取朋友所有活动的 10% 佣金。",
|
||||
"copy": "复制",
|
||||
"share": "分享",
|
||||
"bindInviteCode": "绑定邀请码",
|
||||
"enterInviteCode": "输入您朋友的邀请码以解锁奖励积分。",
|
||||
"enterCode": "输入代码",
|
||||
"apply": "应用",
|
||||
"teamTVL": "团队 TVL",
|
||||
"buildYourTeam": "建立您的团队以达到里程碑并解锁奖励。",
|
||||
"members": "成员",
|
||||
"whales": "巨鲸",
|
||||
"traders": "交易者",
|
||||
"users": "用户",
|
||||
"depositToAlp": "存入 USDC 到 ALP",
|
||||
"nativeStaking": "原生质押",
|
||||
"upTo3x": "最高 3倍",
|
||||
"lockPeriod": "30 天",
|
||||
"pointsBoost": "+10% 积分",
|
||||
"deposit": "存入",
|
||||
"pendleYT": "Pendle YT",
|
||||
"yieldTradingOptimization": "收益交易优化",
|
||||
"curveLp": "Curve LP",
|
||||
"liquidityPoolProvision": "流动性池供应",
|
||||
"morpho": "Morpho",
|
||||
"lendingLoopStrategy": "借贷循环策略",
|
||||
"estApy": "预计年化收益率",
|
||||
"currentApy": "当前年化收益率",
|
||||
"maxLtv": "最大贷款价值比",
|
||||
"zapIn": "快速投入",
|
||||
"addLiquidity": "添加流动性",
|
||||
"startLoop": "启动循环",
|
||||
"activityHistory": "活动历史",
|
||||
"trackActivities": "跟踪您所有的积分获取活动",
|
||||
"lastUpdatedMinutesAgo": "最后更新:2 分钟前",
|
||||
"all": "全部",
|
||||
"referrals": "推荐",
|
||||
"deposits": "存款",
|
||||
"user": "用户",
|
||||
"friends": "朋友",
|
||||
"code": "代码",
|
||||
"points": "积分",
|
||||
"topPerformers": "最佳表现者",
|
||||
"leaderboard": "本季最高收入者排行榜",
|
||||
"rank": "排名",
|
||||
"address": "地址",
|
||||
"level": "等级"
|
||||
}
|
||||
}
|
||||
|
||||
18964
package-lock.json
generated
64
package.json
@@ -1,32 +1,32 @@
|
||||
{
|
||||
"name": "asset-dashboard-next",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "next dev -H 0.0.0.0",
|
||||
"build": "next build",
|
||||
"start": "next start",
|
||||
"lint": "next lint"
|
||||
},
|
||||
"dependencies": {
|
||||
"@heroui/react": "^2.8.8",
|
||||
"@heroui/theme": "^2.4.26",
|
||||
"echarts": "^6.0.0",
|
||||
"echarts-for-react": "^3.0.6",
|
||||
"framer-motion": "^12.29.2",
|
||||
"next": "^15.1.4",
|
||||
"react": "^19.0.0",
|
||||
"react-dom": "^19.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^20",
|
||||
"@types/react": "^19",
|
||||
"@types/react-dom": "^19",
|
||||
"autoprefixer": "^10.4.20",
|
||||
"eslint": "^8",
|
||||
"eslint-config-next": "^15.1.4",
|
||||
"postcss": "^8.4.49",
|
||||
"tailwindcss": "^3.4.17",
|
||||
"typescript": "^5"
|
||||
}
|
||||
}
|
||||
{
|
||||
"name": "asset-dashboard-next",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "next dev -H 0.0.0.0",
|
||||
"build": "next build",
|
||||
"start": "next start",
|
||||
"lint": "next lint"
|
||||
},
|
||||
"dependencies": {
|
||||
"@heroui/react": "^2.8.8",
|
||||
"@heroui/theme": "^2.4.26",
|
||||
"echarts": "^6.0.0",
|
||||
"echarts-for-react": "^3.0.6",
|
||||
"framer-motion": "^12.29.2",
|
||||
"next": "^15.1.4",
|
||||
"react": "^19.0.0",
|
||||
"react-dom": "^19.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^20",
|
||||
"@types/react": "^19",
|
||||
"@types/react-dom": "^19",
|
||||
"autoprefixer": "^10.4.20",
|
||||
"eslint": "^8",
|
||||
"eslint-config-next": "^15.1.4",
|
||||
"postcss": "^8.4.49",
|
||||
"tailwindcss": "^3.4.17",
|
||||
"typescript": "^5"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M4.5 18.6665L3.33333 17.4998L13 7.83317H7.5V6.1665H15.8333V14.4998H14.1667V8.99984L4.5 18.6665Z" fill="#9CA1AF"/>
|
||||
</svg>
|
||||
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M4.5 18.6665L3.33333 17.4998L13 7.83317H7.5V6.1665H15.8333V14.4998H14.1667V8.99984L4.5 18.6665Z" fill="#9CA1AF"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 229 B After Width: | Height: | Size: 226 B |
@@ -1,3 +1,3 @@
|
||||
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M6.66666 17L1.66666 12L6.66666 7L7.85416 8.1875L4.02082 12.0208L7.83332 15.8333L6.66666 17ZM13.3333 17L12.1458 15.8125L15.9792 11.9792L12.1667 8.16667L13.3333 7L18.3333 12L13.3333 17Z" fill="#9CA1AF"/>
|
||||
</svg>
|
||||
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M6.66666 17L1.66666 12L6.66666 7L7.85416 8.1875L4.02082 12.0208L7.83332 15.8333L6.66666 17ZM13.3333 17L12.1458 15.8125L15.9792 11.9792L12.1667 8.16667L13.3333 7L18.3333 12L13.3333 17Z" fill="#9CA1AF"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 317 B After Width: | Height: | Size: 314 B |
@@ -1,3 +1,3 @@
|
||||
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M4.5 18.6665L3.33333 17.4998L13 7.83317H7.5V6.1665H15.8333V14.4998H14.1667V8.99984L4.5 18.6665Z" fill="#9CA1AF"/>
|
||||
</svg>
|
||||
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M4.5 18.6665L3.33333 17.4998L13 7.83317H7.5V6.1665H15.8333V14.4998H14.1667V8.99984L4.5 18.6665Z" fill="#9CA1AF"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 229 B After Width: | Height: | Size: 226 B |
@@ -1,3 +1,3 @@
|
||||
<svg width="161" height="192" viewBox="0 0 161 192" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M46.6767 29.3332H113.343V81.6665C113.343 84.2221 112.788 86.4998 111.677 88.4998C110.566 90.4998 109.01 92.1109 107.01 93.3332L83.3433 107.333L88.01 122.667H113.343L92.6767 137.333L100.677 162.667L80.01 147L59.3433 162.667L67.3433 137.333L46.6767 122.667H72.01L76.6767 107.333L53.01 93.3332C51.01 92.1109 49.4544 90.4998 48.3433 88.4998C47.2322 86.4998 46.6767 84.2221 46.6767 81.6665V29.3332ZM60.01 42.6665V81.6665L73.3433 89.6665V42.6665H60.01ZM100.01 42.6665H86.6767V89.6665L100.01 81.6665V42.6665Z" fill="#FFEDD5"/>
|
||||
</svg>
|
||||
<svg width="161" height="192" viewBox="0 0 161 192" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M46.6767 29.3332H113.343V81.6665C113.343 84.2221 112.788 86.4998 111.677 88.4998C110.566 90.4998 109.01 92.1109 107.01 93.3332L83.3433 107.333L88.01 122.667H113.343L92.6767 137.333L100.677 162.667L80.01 147L59.3433 162.667L67.3433 137.333L46.6767 122.667H72.01L76.6767 107.333L53.01 93.3332C51.01 92.1109 49.4544 90.4998 48.3433 88.4998C47.2322 86.4998 46.6767 84.2221 46.6767 81.6665V29.3332ZM60.01 42.6665V81.6665L73.3433 89.6665V42.6665H60.01ZM100.01 42.6665H86.6767V89.6665L100.01 81.6665V42.6665Z" fill="#FFEDD5"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 639 B After Width: | Height: | Size: 636 B |
@@ -1,3 +1,3 @@
|
||||
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M4.16667 20.3335C3.70833 20.3335 3.31597 20.1703 2.98958 19.8439C2.66319 19.5175 2.5 19.1252 2.5 18.6668V7.00016C2.5 6.54183 2.66319 6.14947 2.98958 5.82308C3.31597 5.49669 3.70833 5.33349 4.16667 5.33349H5V3.66683H6.66667V5.33349H13.3333V3.66683H15V5.33349H15.8333C16.2917 5.33349 16.684 5.49669 17.0104 5.82308C17.3368 6.14947 17.5 6.54183 17.5 7.00016V18.6668C17.5 19.1252 17.3368 19.5175 17.0104 19.8439C16.684 20.1703 16.2917 20.3335 15.8333 20.3335H4.16667ZM4.16667 18.6668H15.8333V10.3335H4.16667V18.6668ZM4.16667 8.66683H15.8333V7.00016H4.16667V8.66683Z" fill="#94A3B8"/>
|
||||
</svg>
|
||||
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M4.16667 20.3335C3.70833 20.3335 3.31597 20.1703 2.98958 19.8439C2.66319 19.5175 2.5 19.1252 2.5 18.6668V7.00016C2.5 6.54183 2.66319 6.14947 2.98958 5.82308C3.31597 5.49669 3.70833 5.33349 4.16667 5.33349H5V3.66683H6.66667V5.33349H13.3333V3.66683H15V5.33349H15.8333C16.2917 5.33349 16.684 5.49669 17.0104 5.82308C17.3368 6.14947 17.5 6.54183 17.5 7.00016V18.6668C17.5 19.1252 17.3368 19.5175 17.0104 19.8439C16.684 20.1703 16.2917 20.3335 15.8333 20.3335H4.16667ZM4.16667 18.6668H15.8333V10.3335H4.16667V18.6668ZM4.16667 8.66683H15.8333V7.00016H4.16667V8.66683Z" fill="#94A3B8"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 695 B After Width: | Height: | Size: 692 B |
@@ -1,4 +1,4 @@
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M8 4V8L10.6667 9.33333" stroke="#4B5563" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M8 14.6668C11.6819 14.6668 14.6667 11.6821 14.6667 8.00016C14.6667 4.31826 11.6819 1.3335 8 1.3335C4.3181 1.3335 1.33333 4.31826 1.33333 8.00016C1.33333 11.6821 4.3181 14.6668 8 14.6668Z" stroke="#4B5563" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M8 4V8L10.6667 9.33333" stroke="#4B5563" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M8 14.6668C11.6819 14.6668 14.6667 11.6821 14.6667 8.00016C14.6667 4.31826 11.6819 1.3335 8 1.3335C4.3181 1.3335 1.33333 4.31826 1.33333 8.00016C1.33333 11.6821 4.3181 14.6668 8 14.6668Z" stroke="#4B5563" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 515 B After Width: | Height: | Size: 511 B |
@@ -1,3 +1,3 @@
|
||||
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M6.57747 9.62718L10.0017 6.20295L9.32171 5.52296L6.57747 8.26721L5.1932 6.88294L4.51321 7.56293L6.57747 9.62718ZM7.25746 12.25C6.58556 12.25 5.95414 12.1225 5.3632 11.8675C4.77226 11.6125 4.25822 11.2664 3.82108 10.8293C3.38395 10.3922 3.03788 9.87813 2.78288 9.28719C2.52789 8.69625 2.40039 8.06483 2.40039 7.39293C2.40039 6.72104 2.52789 6.08962 2.78288 5.49868C3.03788 4.90773 3.38395 4.39369 3.82108 3.95656C4.25822 3.51942 4.77226 3.17336 5.3632 2.91836C5.95414 2.66336 6.58556 2.53587 7.25746 2.53587C7.92935 2.53587 8.56077 2.66336 9.15171 2.91836C9.74266 3.17336 10.2567 3.51942 10.6938 3.95656C11.131 4.39369 11.477 4.90773 11.732 5.49868C11.987 6.08962 12.1145 6.72104 12.1145 7.39293C12.1145 8.06483 11.987 8.69625 11.732 9.28719C11.477 9.87813 11.131 10.3922 10.6938 10.8293C10.2567 11.2664 9.74266 11.6125 9.15171 11.8675C8.56077 12.1225 7.92935 12.25 7.25746 12.25ZM7.25746 11.2786C8.3422 11.2786 9.261 10.9022 10.0138 10.1493C10.7667 9.39647 11.1431 8.47768 11.1431 7.39293C11.1431 6.30819 10.7667 5.38939 10.0138 4.63655C9.261 3.8837 8.3422 3.50728 7.25746 3.50728C6.17271 3.50728 5.25392 3.8837 4.50107 4.63655C3.74823 5.38939 3.3718 6.30819 3.3718 7.39293C3.3718 8.47768 3.74823 9.39647 4.50107 10.1493C5.25392 10.9022 6.17271 11.2786 7.25746 11.2786Z" fill="#10B981"/>
|
||||
</svg>
|
||||
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M6.57747 9.62718L10.0017 6.20295L9.32171 5.52296L6.57747 8.26721L5.1932 6.88294L4.51321 7.56293L6.57747 9.62718ZM7.25746 12.25C6.58556 12.25 5.95414 12.1225 5.3632 11.8675C4.77226 11.6125 4.25822 11.2664 3.82108 10.8293C3.38395 10.3922 3.03788 9.87813 2.78288 9.28719C2.52789 8.69625 2.40039 8.06483 2.40039 7.39293C2.40039 6.72104 2.52789 6.08962 2.78288 5.49868C3.03788 4.90773 3.38395 4.39369 3.82108 3.95656C4.25822 3.51942 4.77226 3.17336 5.3632 2.91836C5.95414 2.66336 6.58556 2.53587 7.25746 2.53587C7.92935 2.53587 8.56077 2.66336 9.15171 2.91836C9.74266 3.17336 10.2567 3.51942 10.6938 3.95656C11.131 4.39369 11.477 4.90773 11.732 5.49868C11.987 6.08962 12.1145 6.72104 12.1145 7.39293C12.1145 8.06483 11.987 8.69625 11.732 9.28719C11.477 9.87813 11.131 10.3922 10.6938 10.8293C10.2567 11.2664 9.74266 11.6125 9.15171 11.8675C8.56077 12.1225 7.92935 12.25 7.25746 12.25ZM7.25746 11.2786C8.3422 11.2786 9.261 10.9022 10.0138 10.1493C10.7667 9.39647 11.1431 8.47768 11.1431 7.39293C11.1431 6.30819 10.7667 5.38939 10.0138 4.63655C9.261 3.8837 8.3422 3.50728 7.25746 3.50728C6.17271 3.50728 5.25392 3.8837 4.50107 4.63655C3.74823 5.38939 3.3718 6.30819 3.3718 7.39293C3.3718 8.47768 3.74823 9.39647 4.50107 10.1493C5.25392 10.9022 6.17271 11.2786 7.25746 11.2786Z" fill="#10B981"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
@@ -1,3 +1,3 @@
|
||||
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M6.66663 17L1.66663 12L6.66663 7L7.85413 8.1875L4.02079 12.0208L7.83329 15.8333L6.66663 17ZM13.3333 17L12.1458 15.8125L15.9791 11.9792L12.1666 8.16667L13.3333 7L18.3333 12L13.3333 17Z" fill="#9CA1AF"/>
|
||||
</svg>
|
||||
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M6.66663 17L1.66663 12L6.66663 7L7.85413 8.1875L4.02079 12.0208L7.83329 15.8333L6.66663 17ZM13.3333 17L12.1458 15.8125L15.9791 11.9792L12.1666 8.16667L13.3333 7L18.3333 12L13.3333 17Z" fill="#9CA1AF"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 317 B After Width: | Height: | Size: 314 B |
@@ -1,3 +1,3 @@
|
||||
<svg width="13" height="14" viewBox="0 0 13 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M8.0328 7.48001H2.11932V6.50859H8.0328L5.31284 3.78864L6.00498 3.10865L9.89063 6.9943L6.00498 10.88L5.31284 10.2L8.0328 7.48001Z" fill="#9CA1AF"/>
|
||||
</svg>
|
||||
<svg width="13" height="14" viewBox="0 0 13 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M8.0328 7.48001H2.11932V6.50859H8.0328L5.31284 3.78864L6.00498 3.10865L9.89063 6.9943L6.00498 10.88L5.31284 10.2L8.0328 7.48001Z" fill="#9CA1AF"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 262 B After Width: | Height: | Size: 259 B |
@@ -1,3 +1,3 @@
|
||||
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M4.16669 16.1667V10.3333H5.83335V16.1667H4.16669ZM9.16669 16.1667V10.3333H10.8334V16.1667H9.16669ZM1.66669 19.5V17.8333H18.3334V19.5H1.66669ZM14.1667 16.1667V10.3333H15.8334V16.1667H14.1667ZM1.66669 8.66667V7L10 2.83333L18.3334 7V8.66667H1.66669ZM5.37502 7H10H14.625H5.37502ZM5.37502 7H14.625L10 4.70833L5.37502 7Z" fill="#9CA1AF"/>
|
||||
</svg>
|
||||
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M4.16669 16.1667V10.3333H5.83335V16.1667H4.16669ZM9.16669 16.1667V10.3333H10.8334V16.1667H9.16669ZM1.66669 19.5V17.8333H18.3334V19.5H1.66669ZM14.1667 16.1667V10.3333H15.8334V16.1667H14.1667ZM1.66669 8.66667V7L10 2.83333L18.3334 7V8.66667H1.66669ZM5.37502 7H10H14.625H5.37502ZM5.37502 7H14.625L10 4.70833L5.37502 7Z" fill="#9CA1AF"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 448 B After Width: | Height: | Size: 445 B |
@@ -1,3 +1,3 @@
|
||||
<svg width="13" height="14" viewBox="0 0 13 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M8.0328 7.48001H2.11932V6.50859H8.0328L5.31284 3.78864L6.00498 3.10865L9.89063 6.9943L6.00498 10.88L5.31284 10.2L8.0328 7.48001Z" fill="#9CA1AF"/>
|
||||
</svg>
|
||||
<svg width="13" height="14" viewBox="0 0 13 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M8.0328 7.48001H2.11932V6.50859H8.0328L5.31284 3.78864L6.00498 3.10865L9.89063 6.9943L6.00498 10.88L5.31284 10.2L8.0328 7.48001Z" fill="#9CA1AF"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 262 B After Width: | Height: | Size: 259 B |
@@ -1,3 +1,3 @@
|
||||
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M9.16666 16.1665H5.83332C4.68055 16.1665 3.69791 15.7603 2.88541 14.9478C2.07291 14.1353 1.66666 13.1526 1.66666 11.9998C1.66666 10.8471 2.07291 9.86442 2.88541 9.05192C3.69791 8.23942 4.68055 7.83317 5.83332 7.83317H9.16666V9.49984H5.83332C5.13888 9.49984 4.5486 9.74289 4.06249 10.229C3.57638 10.7151 3.33332 11.3054 3.33332 11.9998C3.33332 12.6943 3.57638 13.2846 4.06249 13.7707C4.5486 14.2568 5.13888 14.4998 5.83332 14.4998H9.16666V16.1665ZM6.66666 12.8332V11.1665H13.3333V12.8332H6.66666ZM10.8333 16.1665V14.4998H14.1667C14.8611 14.4998 15.4514 14.2568 15.9375 13.7707C16.4236 13.2846 16.6667 12.6943 16.6667 11.9998C16.6667 11.3054 16.4236 10.7151 15.9375 10.229C15.4514 9.74289 14.8611 9.49984 14.1667 9.49984H10.8333V7.83317H14.1667C15.3194 7.83317 16.3021 8.23942 17.1146 9.05192C17.9271 9.86442 18.3333 10.8471 18.3333 11.9998C18.3333 13.1526 17.9271 14.1353 17.1146 14.9478C16.3021 15.7603 15.3194 16.1665 14.1667 16.1665H10.8333Z" fill="#9CA1AF"/>
|
||||
</svg>
|
||||
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M9.16666 16.1665H5.83332C4.68055 16.1665 3.69791 15.7603 2.88541 14.9478C2.07291 14.1353 1.66666 13.1526 1.66666 11.9998C1.66666 10.8471 2.07291 9.86442 2.88541 9.05192C3.69791 8.23942 4.68055 7.83317 5.83332 7.83317H9.16666V9.49984H5.83332C5.13888 9.49984 4.5486 9.74289 4.06249 10.229C3.57638 10.7151 3.33332 11.3054 3.33332 11.9998C3.33332 12.6943 3.57638 13.2846 4.06249 13.7707C4.5486 14.2568 5.13888 14.4998 5.83332 14.4998H9.16666V16.1665ZM6.66666 12.8332V11.1665H13.3333V12.8332H6.66666ZM10.8333 16.1665V14.4998H14.1667C14.8611 14.4998 15.4514 14.2568 15.9375 13.7707C16.4236 13.2846 16.6667 12.6943 16.6667 11.9998C16.6667 11.3054 16.4236 10.7151 15.9375 10.229C15.4514 9.74289 14.8611 9.49984 14.1667 9.49984H10.8333V7.83317H14.1667C15.3194 7.83317 16.3021 8.23942 17.1146 9.05192C17.9271 9.86442 18.3333 10.8471 18.3333 11.9998C18.3333 13.1526 17.9271 14.1353 17.1146 14.9478C16.3021 15.7603 15.3194 16.1665 14.1667 16.1665H10.8333Z" fill="#9CA1AF"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.0 KiB |
@@ -1,3 +1,3 @@
|
||||
<svg width="13" height="14" viewBox="0 0 13 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M8.03283 7.48001H2.11935V6.50859H8.03283L5.31288 3.78864L6.00501 3.10865L9.89066 6.9943L6.00501 10.88L5.31288 10.2L8.03283 7.48001Z" fill="#9CA1AF"/>
|
||||
</svg>
|
||||
<svg width="13" height="14" viewBox="0 0 13 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M8.03283 7.48001H2.11935V6.50859H8.03283L5.31288 3.78864L6.00501 3.10865L9.89066 6.9943L6.00501 10.88L5.31288 10.2L8.03283 7.48001Z" fill="#9CA1AF"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 265 B After Width: | Height: | Size: 262 B |
@@ -1,3 +1,3 @@
|
||||
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M10 15.3332L5.83333 11.1665L7 9.95817L9.16667 12.1248V5.33317H10.8333V12.1248L13 9.95817L14.1667 11.1665L10 15.3332ZM5 18.6665C4.54167 18.6665 4.14931 18.5033 3.82292 18.1769C3.49653 17.8505 3.33333 17.4582 3.33333 16.9998V14.4998H5V16.9998H15V14.4998H16.6667V16.9998C16.6667 17.4582 16.5035 17.8505 16.1771 18.1769C15.8507 18.5033 15.4583 18.6665 15 18.6665H5Z" fill="#9CA1AF"/>
|
||||
</svg>
|
||||
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M10 15.3332L5.83333 11.1665L7 9.95817L9.16667 12.1248V5.33317H10.8333V12.1248L13 9.95817L14.1667 11.1665L10 15.3332ZM5 18.6665C4.54167 18.6665 4.14931 18.5033 3.82292 18.1769C3.49653 17.8505 3.33333 17.4582 3.33333 16.9998V14.4998H5V16.9998H15V14.4998H16.6667V16.9998C16.6667 17.4582 16.5035 17.8505 16.1771 18.1769C15.8507 18.5033 15.4583 18.6665 15 18.6665H5Z" fill="#9CA1AF"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 495 B After Width: | Height: | Size: 492 B |
@@ -1,3 +1,3 @@
|
||||
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M10 15.3332L5.83333 11.1665L7 9.95817L9.16667 12.1248V5.33317H10.8333V12.1248L13 9.95817L14.1667 11.1665L10 15.3332ZM5 18.6665C4.54167 18.6665 4.14931 18.5033 3.82292 18.1769C3.49653 17.8505 3.33333 17.4582 3.33333 16.9998V14.4998H5V16.9998H15V14.4998H16.6667V16.9998C16.6667 17.4582 16.5035 17.8505 16.1771 18.1769C15.8507 18.5033 15.4583 18.6665 15 18.6665H5Z" fill="#9CA1AF"/>
|
||||
</svg>
|
||||
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M10 15.3332L5.83333 11.1665L7 9.95817L9.16667 12.1248V5.33317H10.8333V12.1248L13 9.95817L14.1667 11.1665L10 15.3332ZM5 18.6665C4.54167 18.6665 4.14931 18.5033 3.82292 18.1769C3.49653 17.8505 3.33333 17.4582 3.33333 16.9998V14.4998H5V16.9998H15V14.4998H16.6667V16.9998C16.6667 17.4582 16.5035 17.8505 16.1771 18.1769C15.8507 18.5033 15.4583 18.6665 15 18.6665H5Z" fill="#9CA1AF"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 495 B After Width: | Height: | Size: 492 B |
@@ -1,3 +1,3 @@
|
||||
<svg width="13" height="14" viewBox="0 0 13 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M8.03283 7.48001H2.11935V6.50859H8.03283L5.31287 3.78864L6.005 3.10865L9.89065 6.9943L6.005 10.88L5.31287 10.2L8.03283 7.48001Z" fill="#9CA1AF"/>
|
||||
</svg>
|
||||
<svg width="13" height="14" viewBox="0 0 13 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M8.03283 7.48001H2.11935V6.50859H8.03283L5.31287 3.78864L6.005 3.10865L9.89065 6.9943L6.005 10.88L5.31287 10.2L8.03283 7.48001Z" fill="#9CA1AF"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 261 B After Width: | Height: | Size: 258 B |
@@ -1,3 +1,3 @@
|
||||
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M10.8334 11.1668H16.625C16.4167 9.63905 15.7813 8.34391 14.7188 7.28141C13.6563 6.21891 12.3611 5.58349 10.8334 5.37516V11.1668ZM9.16669 18.6252V5.37516C7.48613 5.58349 6.09377 6.31613 4.9896 7.57308C3.88544 8.83002 3.33335 10.3057 3.33335 12.0002C3.33335 13.6946 3.88544 15.1703 4.9896 16.4272C6.09377 17.6842 7.48613 18.4168 9.16669 18.6252ZM10.8334 18.6252C12.3611 18.4307 13.6597 17.7988 14.7292 16.7293C15.7986 15.6599 16.4306 14.3613 16.625 12.8335H10.8334V18.6252ZM10 20.3335C8.84724 20.3335 7.76391 20.1147 6.75002 19.6772C5.73613 19.2397 4.85419 18.646 4.10419 17.896C3.35419 17.146 2.76044 16.2641 2.32294 15.2502C1.88544 14.2363 1.66669 13.1529 1.66669 12.0002C1.66669 10.8474 1.88544 9.76405 2.32294 8.75016C2.76044 7.73627 3.35419 6.85433 4.10419 6.10433C4.85419 5.35433 5.73613 4.76058 6.75002 4.32308C7.76391 3.88558 8.84724 3.66683 10 3.66683C11.1528 3.66683 12.2327 3.88558 13.2396 4.32308C14.2465 4.76058 15.1285 5.3578 15.8854 6.11474C16.6424 6.87169 17.2396 7.75363 17.6771 8.76058C18.1146 9.76752 18.3334 10.8474 18.3334 12.0002C18.3334 13.1391 18.1146 14.2154 17.6771 15.2293C17.2396 16.2432 16.6459 17.1286 15.8959 17.8856C15.1459 18.6425 14.2639 19.2397 13.25 19.6772C12.2361 20.1147 11.1528 20.3335 10 20.3335Z" fill="#9CA1AF"/>
|
||||
</svg>
|
||||
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M10.8334 11.1668H16.625C16.4167 9.63905 15.7813 8.34391 14.7188 7.28141C13.6563 6.21891 12.3611 5.58349 10.8334 5.37516V11.1668ZM9.16669 18.6252V5.37516C7.48613 5.58349 6.09377 6.31613 4.9896 7.57308C3.88544 8.83002 3.33335 10.3057 3.33335 12.0002C3.33335 13.6946 3.88544 15.1703 4.9896 16.4272C6.09377 17.6842 7.48613 18.4168 9.16669 18.6252ZM10.8334 18.6252C12.3611 18.4307 13.6597 17.7988 14.7292 16.7293C15.7986 15.6599 16.4306 14.3613 16.625 12.8335H10.8334V18.6252ZM10 20.3335C8.84724 20.3335 7.76391 20.1147 6.75002 19.6772C5.73613 19.2397 4.85419 18.646 4.10419 17.896C3.35419 17.146 2.76044 16.2641 2.32294 15.2502C1.88544 14.2363 1.66669 13.1529 1.66669 12.0002C1.66669 10.8474 1.88544 9.76405 2.32294 8.75016C2.76044 7.73627 3.35419 6.85433 4.10419 6.10433C4.85419 5.35433 5.73613 4.76058 6.75002 4.32308C7.76391 3.88558 8.84724 3.66683 10 3.66683C11.1528 3.66683 12.2327 3.88558 13.2396 4.32308C14.2465 4.76058 15.1285 5.3578 15.8854 6.11474C16.6424 6.87169 17.2396 7.75363 17.6771 8.76058C18.1146 9.76752 18.3334 10.8474 18.3334 12.0002C18.3334 13.1391 18.1146 14.2154 17.6771 15.2293C17.2396 16.2432 16.6459 17.1286 15.8959 17.8856C15.1459 18.6425 14.2639 19.2397 13.25 19.6772C12.2361 20.1147 11.1528 20.3335 10 20.3335Z" fill="#9CA1AF"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
@@ -1,3 +1,3 @@
|
||||
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M9.24996 17.8335H10.7083V16.7918C11.4027 16.6668 12 16.396 12.5 15.9793C13 15.5627 13.25 14.9446 13.25 14.1252C13.25 13.5418 13.0833 13.0071 12.75 12.521C12.4166 12.0349 11.75 11.6113 10.75 11.2502C9.91663 10.9724 9.34024 10.7293 9.02079 10.521C8.70135 10.3127 8.54163 10.0279 8.54163 9.66683C8.54163 9.30572 8.6701 9.021 8.92704 8.81266C9.18399 8.60433 9.55552 8.50016 10.0416 8.50016C10.4861 8.50016 10.8333 8.6078 11.0833 8.82308C11.3333 9.03836 11.5138 9.30572 11.625 9.62516L12.9583 9.0835C12.8055 8.59738 12.5243 8.17377 12.1145 7.81266C11.7048 7.45155 11.25 7.25016 10.75 7.20849V6.16683H9.29163V7.20849C8.59718 7.36127 8.05552 7.66683 7.66663 8.12516C7.27774 8.5835 7.08329 9.09738 7.08329 9.66683C7.08329 10.3196 7.27427 10.8474 7.65621 11.2502C8.03815 11.6529 8.63885 12.0002 9.45829 12.2918C10.3333 12.6113 10.9409 12.896 11.2812 13.146C11.6215 13.396 11.7916 13.7224 11.7916 14.1252C11.7916 14.5835 11.6284 14.9203 11.302 15.1356C10.9757 15.3509 10.5833 15.4585 10.125 15.4585C9.66663 15.4585 9.26038 15.3161 8.90621 15.0314C8.55204 14.7467 8.29163 14.3196 8.12496 13.7502L6.74996 14.2918C6.9444 14.9585 7.24649 15.4967 7.65621 15.9064C8.06593 16.3161 8.59718 16.5974 9.24996 16.7502V17.8335ZM9.99996 20.3335C8.84718 20.3335 7.76385 20.1147 6.74996 19.6772C5.73607 19.2397 4.85413 18.646 4.10413 17.896C3.35413 17.146 2.76038 16.2641 2.32288 15.2502C1.88538 14.2363 1.66663 13.1529 1.66663 12.0002C1.66663 10.8474 1.88538 9.76405 2.32288 8.75016C2.76038 7.73627 3.35413 6.85433 4.10413 6.10433C4.85413 5.35433 5.73607 4.76058 6.74996 4.32308C7.76385 3.88558 8.84718 3.66683 9.99996 3.66683C11.1527 3.66683 12.2361 3.88558 13.25 4.32308C14.2638 4.76058 15.1458 5.35433 15.8958 6.10433C16.6458 6.85433 17.2395 7.73627 17.677 8.75016C18.1145 9.76405 18.3333 10.8474 18.3333 12.0002C18.3333 13.1529 18.1145 14.2363 17.677 15.2502C17.2395 16.2641 16.6458 17.146 15.8958 17.896C15.1458 18.646 14.2638 19.2397 13.25 19.6772C12.2361 20.1147 11.1527 20.3335 9.99996 20.3335ZM9.99996 18.6668C11.8611 18.6668 13.4375 18.021 14.7291 16.7293C16.0208 15.4377 16.6666 13.8613 16.6666 12.0002C16.6666 10.1391 16.0208 8.56266 14.7291 7.27099C13.4375 5.97933 11.8611 5.33349 9.99996 5.33349C8.13885 5.33349 6.56246 5.97933 5.27079 7.27099C3.97913 8.56266 3.33329 10.1391 3.33329 12.0002C3.33329 13.8613 3.97913 15.4377 5.27079 16.7293C6.56246 18.021 8.13885 18.6668 9.99996 18.6668Z" fill="#4B5563"/>
|
||||
</svg>
|
||||
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M9.24996 17.8335H10.7083V16.7918C11.4027 16.6668 12 16.396 12.5 15.9793C13 15.5627 13.25 14.9446 13.25 14.1252C13.25 13.5418 13.0833 13.0071 12.75 12.521C12.4166 12.0349 11.75 11.6113 10.75 11.2502C9.91663 10.9724 9.34024 10.7293 9.02079 10.521C8.70135 10.3127 8.54163 10.0279 8.54163 9.66683C8.54163 9.30572 8.6701 9.021 8.92704 8.81266C9.18399 8.60433 9.55552 8.50016 10.0416 8.50016C10.4861 8.50016 10.8333 8.6078 11.0833 8.82308C11.3333 9.03836 11.5138 9.30572 11.625 9.62516L12.9583 9.0835C12.8055 8.59738 12.5243 8.17377 12.1145 7.81266C11.7048 7.45155 11.25 7.25016 10.75 7.20849V6.16683H9.29163V7.20849C8.59718 7.36127 8.05552 7.66683 7.66663 8.12516C7.27774 8.5835 7.08329 9.09738 7.08329 9.66683C7.08329 10.3196 7.27427 10.8474 7.65621 11.2502C8.03815 11.6529 8.63885 12.0002 9.45829 12.2918C10.3333 12.6113 10.9409 12.896 11.2812 13.146C11.6215 13.396 11.7916 13.7224 11.7916 14.1252C11.7916 14.5835 11.6284 14.9203 11.302 15.1356C10.9757 15.3509 10.5833 15.4585 10.125 15.4585C9.66663 15.4585 9.26038 15.3161 8.90621 15.0314C8.55204 14.7467 8.29163 14.3196 8.12496 13.7502L6.74996 14.2918C6.9444 14.9585 7.24649 15.4967 7.65621 15.9064C8.06593 16.3161 8.59718 16.5974 9.24996 16.7502V17.8335ZM9.99996 20.3335C8.84718 20.3335 7.76385 20.1147 6.74996 19.6772C5.73607 19.2397 4.85413 18.646 4.10413 17.896C3.35413 17.146 2.76038 16.2641 2.32288 15.2502C1.88538 14.2363 1.66663 13.1529 1.66663 12.0002C1.66663 10.8474 1.88538 9.76405 2.32288 8.75016C2.76038 7.73627 3.35413 6.85433 4.10413 6.10433C4.85413 5.35433 5.73607 4.76058 6.74996 4.32308C7.76385 3.88558 8.84718 3.66683 9.99996 3.66683C11.1527 3.66683 12.2361 3.88558 13.25 4.32308C14.2638 4.76058 15.1458 5.35433 15.8958 6.10433C16.6458 6.85433 17.2395 7.73627 17.677 8.75016C18.1145 9.76405 18.3333 10.8474 18.3333 12.0002C18.3333 13.1529 18.1145 14.2363 17.677 15.2502C17.2395 16.2641 16.6458 17.146 15.8958 17.896C15.1458 18.646 14.2638 19.2397 13.25 19.6772C12.2361 20.1147 11.1527 20.3335 9.99996 20.3335ZM9.99996 18.6668C11.8611 18.6668 13.4375 18.021 14.7291 16.7293C16.0208 15.4377 16.6666 13.8613 16.6666 12.0002C16.6666 10.1391 16.0208 8.56266 14.7291 7.27099C13.4375 5.97933 11.8611 5.33349 9.99996 5.33349C8.13885 5.33349 6.56246 5.97933 5.27079 7.27099C3.97913 8.56266 3.33329 10.1391 3.33329 12.0002C3.33329 13.8613 3.97913 15.4377 5.27079 16.7293C6.56246 18.021 8.13885 18.6668 9.99996 18.6668Z" fill="#4B5563"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.4 KiB |
@@ -1,3 +1,3 @@
|
||||
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M6.66668 17.0002H13.3333V15.3335H6.66668V17.0002ZM6.66668 13.6668H13.3333V12.0002H6.66668V13.6668ZM5.00001 20.3335C4.54168 20.3335 4.14932 20.1703 3.82293 19.8439C3.49654 19.5175 3.33334 19.1252 3.33334 18.6668V5.33349C3.33334 4.87516 3.49654 4.4828 3.82293 4.15641C4.14932 3.83002 4.54168 3.66683 5.00001 3.66683H11.6667L16.6667 8.66683V18.6668C16.6667 19.1252 16.5035 19.5175 16.1771 19.8439C15.8507 20.1703 15.4583 20.3335 15 20.3335H5.00001ZM10.8333 9.50016V5.33349H5.00001V18.6668H15V9.50016H10.8333ZM5.00001 5.33349V9.50016V18.6668V5.33349Z" fill="#9CA1AF"/>
|
||||
</svg>
|
||||
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M6.66668 17.0002H13.3333V15.3335H6.66668V17.0002ZM6.66668 13.6668H13.3333V12.0002H6.66668V13.6668ZM5.00001 20.3335C4.54168 20.3335 4.14932 20.1703 3.82293 19.8439C3.49654 19.5175 3.33334 19.1252 3.33334 18.6668V5.33349C3.33334 4.87516 3.49654 4.4828 3.82293 4.15641C4.14932 3.83002 4.54168 3.66683 5.00001 3.66683H11.6667L16.6667 8.66683V18.6668C16.6667 19.1252 16.5035 19.5175 16.1771 19.8439C15.8507 20.1703 15.4583 20.3335 15 20.3335H5.00001ZM10.8333 9.50016V5.33349H5.00001V18.6668H15V9.50016H10.8333ZM5.00001 5.33349V9.50016V18.6668V5.33349Z" fill="#9CA1AF"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 680 B After Width: | Height: | Size: 677 B |
@@ -1,3 +1,3 @@
|
||||
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M4.5 18.6665L3.33333 17.4998L13 7.83317H7.5V6.1665H15.8333V14.4998H14.1667V8.99984L4.5 18.6665Z" fill="#9CA1AF"/>
|
||||
</svg>
|
||||
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M4.5 18.6665L3.33333 17.4998L13 7.83317H7.5V6.1665H15.8333V14.4998H14.1667V8.99984L4.5 18.6665Z" fill="#9CA1AF"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 229 B After Width: | Height: | Size: 226 B |
@@ -1,3 +1,3 @@
|
||||
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M9.12501 14.9585L13.8333 10.2502L12.6458 9.06266L9.12501 12.5835L7.37501 10.8335L6.18751 12.021L9.12501 14.9585ZM10 20.3335C8.06945 19.8474 6.4757 18.7397 5.21876 17.0106C3.96182 15.2814 3.33334 13.3613 3.33334 11.2502V6.16683L10 3.66683L16.6667 6.16683V11.2502C16.6667 13.3613 16.0382 15.2814 14.7813 17.0106C13.5243 18.7397 11.9306 19.8474 10 20.3335ZM10 18.5835C11.4445 18.1252 12.6389 17.2085 13.5833 15.8335C14.5278 14.4585 15 12.9307 15 11.2502V7.31266L10 5.43766L5.00001 7.31266V11.2502C5.00001 12.9307 5.47223 14.4585 6.41668 15.8335C7.36112 17.2085 8.55557 18.1252 10 18.5835Z" fill="#9CA1AF"/>
|
||||
</svg>
|
||||
<svg width="20" height="24" viewBox="0 0 20 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M9.12501 14.9585L13.8333 10.2502L12.6458 9.06266L9.12501 12.5835L7.37501 10.8335L6.18751 12.021L9.12501 14.9585ZM10 20.3335C8.06945 19.8474 6.4757 18.7397 5.21876 17.0106C3.96182 15.2814 3.33334 13.3613 3.33334 11.2502V6.16683L10 3.66683L16.6667 6.16683V11.2502C16.6667 13.3613 16.0382 15.2814 14.7813 17.0106C13.5243 18.7397 11.9306 19.8474 10 20.3335ZM10 18.5835C11.4445 18.1252 12.6389 17.2085 13.5833 15.8335C14.5278 14.4585 15 12.9307 15 11.2502V7.31266L10 5.43766L5.00001 7.31266V11.2502C5.00001 12.9307 5.47223 14.4585 6.41668 15.8335C7.36112 17.2085 8.55557 18.1252 10 18.5835Z" fill="#9CA1AF"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 719 B After Width: | Height: | Size: 716 B |
@@ -1,4 +1,4 @@
|
||||
<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M10.8 3.6001H4.80001C4.13726 3.6001 3.60001 4.13736 3.60001 4.8001V10.8001C3.60001 11.4628 4.13726 12.0001 4.80001 12.0001H10.8C11.4627 12.0001 12 11.4628 12 10.8001V4.8001C12 4.13736 11.4627 3.6001 10.8 3.6001Z" stroke="#1447E6" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1.2 8.4C0.54 8.4 0 7.86 0 7.2V1.2C0 0.54 0.54 0 1.2 0H7.2C7.86 0 8.4 0.54 8.4 1.2" stroke="#1447E6" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M10.8 3.6001H4.80001C4.13726 3.6001 3.60001 4.13736 3.60001 4.8001V10.8001C3.60001 11.4628 4.13726 12.0001 4.80001 12.0001H10.8C11.4627 12.0001 12 11.4628 12 10.8001V4.8001C12 4.13736 11.4627 3.6001 10.8 3.6001Z" stroke="#1447E6" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1.2 8.4C0.54 8.4 0 7.86 0 7.2V1.2C0 0.54 0.54 0 1.2 0H7.2C7.86 0 8.4 0.54 8.4 1.2" stroke="#1447E6" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 600 B After Width: | Height: | Size: 596 B |
@@ -1,6 +1,6 @@
|
||||
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M6.83844 10.2212C6.26094 10.2212 5.79346 10.6886 5.79346 11.2661V15.9595H9.2676V10.2212V10.2212H6.83844Z" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M10.3046 6.05029C9.72713 6.05029 9.25964 6.51781 9.25964 7.09531V15.9503H12.7338V7.09531C12.7338 6.51781 12.2755 6.05029 11.698 6.05029H10.3046Z" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M12.7401 11.7793V15.9502H16.2143V12.8243C16.2051 12.2468 15.7376 11.7793 15.1693 11.7793H12.7401Z" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M13.75 20.1668C18.3334 20.1668 20.1667 18.3335 20.1667 13.7502V8.25016C20.1667 3.66683 18.3334 1.8335 13.75 1.8335H8.25004C3.66671 1.8335 1.83337 3.66683 1.83337 8.25016V13.7502C1.83337 18.3335 3.66671 20.1668 8.25004 20.1668H13.75Z" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M6.83844 10.2212C6.26094 10.2212 5.79346 10.6886 5.79346 11.2661V15.9595H9.2676V10.2212V10.2212H6.83844Z" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M10.3046 6.05029C9.72713 6.05029 9.25964 6.51781 9.25964 7.09531V15.9503H12.7338V7.09531C12.7338 6.51781 12.2755 6.05029 11.698 6.05029H10.3046Z" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M12.7401 11.7793V15.9502H16.2143V12.8243C16.2051 12.2468 15.7376 11.7793 15.1693 11.7793H12.7401Z" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M13.75 20.1668C18.3334 20.1668 20.1667 18.3335 20.1667 13.7502V8.25016C20.1667 3.66683 18.3334 1.8335 13.75 1.8335H8.25004C3.66671 1.8335 1.83337 3.66683 1.83337 8.25016V13.7502C1.83337 18.3335 3.66671 20.1668 8.25004 20.1668H13.75Z" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.0 KiB |
@@ -1,5 +1,5 @@
|
||||
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M3.32754 6.45316C2.50254 7.09482 1.83337 8.46066 1.83337 9.49649V16.289C1.83337 18.4157 3.56587 20.1573 5.69254 20.1573H16.3075C18.4342 20.1573 20.1667 18.4157 20.1667 16.2982V9.62482C20.1667 8.51566 19.4242 7.09482 18.5167 6.46232L12.8517 2.49316C11.5684 1.59482 9.50587 1.64066 8.26837 2.60316L3.32754 6.45316Z" stroke="#111827" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M15.125 10.5415L11.275 14.3915L9.80833 12.1915L6.875 15.1248" stroke="#111827" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M13.2916 10.5415H15.125V12.3748" stroke="#111827" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M3.32754 6.45316C2.50254 7.09482 1.83337 8.46066 1.83337 9.49649V16.289C1.83337 18.4157 3.56587 20.1573 5.69254 20.1573H16.3075C18.4342 20.1573 20.1667 18.4157 20.1667 16.2982V9.62482C20.1667 8.51566 19.4242 7.09482 18.5167 6.46232L12.8517 2.49316C11.5684 1.59482 9.50587 1.64066 8.26837 2.60316L3.32754 6.45316Z" stroke="#111827" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M15.125 10.5415L11.275 14.3915L9.80833 12.1915L6.875 15.1248" stroke="#111827" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M13.2916 10.5415H15.125V12.3748" stroke="#111827" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 802 B After Width: | Height: | Size: 797 B |
@@ -1,4 +1,4 @@
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M12.6667 4.66667V2.66667C12.6667 2.48986 12.5964 2.32029 12.4714 2.19526C12.3464 2.07024 12.1768 2 12 2H3.33333C2.97971 2 2.64057 2.14048 2.39052 2.39052C2.14048 2.64057 2 2.97971 2 3.33333C2 3.68696 2.14048 4.02609 2.39052 4.27614C2.64057 4.52619 2.97971 4.66667 3.33333 4.66667H13.3333C13.5101 4.66667 13.6797 4.7369 13.8047 4.86193C13.9298 4.98695 14 5.15652 14 5.33333V8M14 8H12C11.6464 8 11.3072 8.14048 11.0572 8.39052C10.8071 8.64057 10.6667 8.97971 10.6667 9.33333C10.6667 9.68696 10.8071 10.0261 11.0572 10.2761C11.3072 10.5262 11.6464 10.6667 12 10.6667H14C14.1768 10.6667 14.3464 10.5964 14.4714 10.4714C14.5964 10.3464 14.6667 10.1768 14.6667 10V8.66667C14.6667 8.48986 14.5964 8.32029 14.4714 8.19526C14.3464 8.07024 14.1768 8 14 8Z" stroke="#FCFCFD" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M2 3.3335V12.6668C2 13.0205 2.14048 13.3596 2.39052 13.6096C2.64057 13.8597 2.97971 14.0002 3.33333 14.0002H13.3333C13.5101 14.0002 13.6797 13.9299 13.8047 13.8049C13.9298 13.6799 14 13.5103 14 13.3335V10.6668" stroke="#FCFCFD" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M12.6667 4.66667V2.66667C12.6667 2.48986 12.5964 2.32029 12.4714 2.19526C12.3464 2.07024 12.1768 2 12 2H3.33333C2.97971 2 2.64057 2.14048 2.39052 2.39052C2.14048 2.64057 2 2.97971 2 3.33333C2 3.68696 2.14048 4.02609 2.39052 4.27614C2.64057 4.52619 2.97971 4.66667 3.33333 4.66667H13.3333C13.5101 4.66667 13.6797 4.7369 13.8047 4.86193C13.9298 4.98695 14 5.15652 14 5.33333V8M14 8H12C11.6464 8 11.3072 8.14048 11.0572 8.39052C10.8071 8.64057 10.6667 8.97971 10.6667 9.33333C10.6667 9.68696 10.8071 10.0261 11.0572 10.2761C11.3072 10.5262 11.6464 10.6667 12 10.6667H14C14.1768 10.6667 14.3464 10.5964 14.4714 10.4714C14.5964 10.3464 14.6667 10.1768 14.6667 10V8.66667C14.6667 8.48986 14.5964 8.32029 14.4714 8.19526C14.3464 8.07024 14.1768 8 14 8Z" stroke="#FCFCFD" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M2 3.3335V12.6668C2 13.0205 2.14048 13.3596 2.39052 13.6096C2.64057 13.8597 2.97971 14.0002 3.33333 14.0002H13.3333C13.5101 14.0002 13.6797 13.9299 13.8047 13.8049C13.9298 13.6799 14 13.5103 14 13.3335V10.6668" stroke="#FCFCFD" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
@@ -1,14 +1,14 @@
|
||||
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_4_5948)">
|
||||
<path d="M19.25 14.6665H15.5833C15.077 14.6665 14.6666 15.0769 14.6666 15.5832V19.2498C14.6666 19.7561 15.077 20.1665 15.5833 20.1665H19.25C19.7562 20.1665 20.1666 19.7561 20.1666 19.2498V15.5832C20.1666 15.0769 19.7562 14.6665 19.25 14.6665Z" stroke="#9CA1AF" stroke-width="1.83333" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M6.41671 14.6665H2.75004C2.24378 14.6665 1.83337 15.0769 1.83337 15.5832V19.2498C1.83337 19.7561 2.24378 20.1665 2.75004 20.1665H6.41671C6.92297 20.1665 7.33337 19.7561 7.33337 19.2498V15.5832C7.33337 15.0769 6.92297 14.6665 6.41671 14.6665Z" stroke="#9CA1AF" stroke-width="1.83333" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M12.8333 1.8335H9.16667C8.66041 1.8335 8.25 2.2439 8.25 2.75016V6.41683C8.25 6.92309 8.66041 7.3335 9.16667 7.3335H12.8333C13.3396 7.3335 13.75 6.92309 13.75 6.41683V2.75016C13.75 2.2439 13.3396 1.8335 12.8333 1.8335Z" stroke="#9CA1AF" stroke-width="1.83333" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M4.58337 14.6667V11.9167C4.58337 11.6736 4.67995 11.4404 4.85186 11.2685C5.02377 11.0966 5.25693 11 5.50004 11H16.5C16.7432 11 16.9763 11.0966 17.1482 11.2685C17.3201 11.4404 17.4167 11.6736 17.4167 11.9167V14.6667" stroke="#9CA1AF" stroke-width="1.83333" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M11 11.0002V7.3335" stroke="#9CA1AF" stroke-width="1.83333" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_4_5948">
|
||||
<rect width="22" height="22" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_4_5948)">
|
||||
<path d="M19.25 14.6665H15.5833C15.077 14.6665 14.6666 15.0769 14.6666 15.5832V19.2498C14.6666 19.7561 15.077 20.1665 15.5833 20.1665H19.25C19.7562 20.1665 20.1666 19.7561 20.1666 19.2498V15.5832C20.1666 15.0769 19.7562 14.6665 19.25 14.6665Z" stroke="#9CA1AF" stroke-width="1.83333" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M6.41671 14.6665H2.75004C2.24378 14.6665 1.83337 15.0769 1.83337 15.5832V19.2498C1.83337 19.7561 2.24378 20.1665 2.75004 20.1665H6.41671C6.92297 20.1665 7.33337 19.7561 7.33337 19.2498V15.5832C7.33337 15.0769 6.92297 14.6665 6.41671 14.6665Z" stroke="#9CA1AF" stroke-width="1.83333" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M12.8333 1.8335H9.16667C8.66041 1.8335 8.25 2.2439 8.25 2.75016V6.41683C8.25 6.92309 8.66041 7.3335 9.16667 7.3335H12.8333C13.3396 7.3335 13.75 6.92309 13.75 6.41683V2.75016C13.75 2.2439 13.3396 1.8335 12.8333 1.8335Z" stroke="#9CA1AF" stroke-width="1.83333" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M4.58337 14.6667V11.9167C4.58337 11.6736 4.67995 11.4404 4.85186 11.2685C5.02377 11.0966 5.25693 11 5.50004 11H16.5C16.7432 11 16.9763 11.0966 17.1482 11.2685C17.3201 11.4404 17.4167 11.6736 17.4167 11.9167V14.6667" stroke="#9CA1AF" stroke-width="1.83333" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M11 11.0002V7.3335" stroke="#9CA1AF" stroke-width="1.83333" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_4_5948">
|
||||
<rect width="22" height="22" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
@@ -1,5 +1,5 @@
|
||||
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M14.2083 13.7502C14.0525 13.7502 13.8875 13.741 13.7317 13.7318C13.5025 10.826 11.1742 8.49765 8.26832 8.26849C8.25916 8.11265 8.25 7.94766 8.25 7.79183C8.25 4.501 10.9175 1.8335 14.2083 1.8335C17.4992 1.8335 20.1667 4.501 20.1667 7.79183C20.1667 11.0827 17.4992 13.7502 14.2083 13.7502Z" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M7.79171 20.1667C4.50087 20.1667 1.83337 17.4992 1.83337 14.2083C1.83337 10.9175 4.50087 8.25 7.79171 8.25C7.94754 8.25 8.11253 8.25916 8.26836 8.26832C11.1742 8.49749 13.5026 10.8258 13.7317 13.7317C13.7409 13.8875 13.75 14.0525 13.75 14.2083C13.75 17.4992 11.0825 20.1667 7.79171 20.1667Z" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M7.79167 11.9165L8.59834 13.4015L10.0833 14.2082L8.59834 15.0148L7.79167 16.4998L6.985 15.0148L5.5 14.2082L6.985 13.4015L7.79167 11.9165Z" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M14.2083 13.7502C14.0525 13.7502 13.8875 13.741 13.7317 13.7318C13.5025 10.826 11.1742 8.49765 8.26832 8.26849C8.25916 8.11265 8.25 7.94766 8.25 7.79183C8.25 4.501 10.9175 1.8335 14.2083 1.8335C17.4992 1.8335 20.1667 4.501 20.1667 7.79183C20.1667 11.0827 17.4992 13.7502 14.2083 13.7502Z" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M7.79171 20.1667C4.50087 20.1667 1.83337 17.4992 1.83337 14.2083C1.83337 10.9175 4.50087 8.25 7.79171 8.25C7.94754 8.25 8.11253 8.25916 8.26836 8.26832C11.1742 8.49749 13.5026 10.8258 13.7317 13.7317C13.7409 13.8875 13.75 14.0525 13.75 14.2083C13.75 17.4992 11.0825 20.1667 7.79171 20.1667Z" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M7.79167 11.9165L8.59834 13.4015L10.0833 14.2082L8.59834 15.0148L7.79167 16.4998L6.985 15.0148L5.5 14.2082L6.985 13.4015L7.79167 11.9165Z" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
@@ -1,3 +1,3 @@
|
||||
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M10.5 5.25L7 8.75L3.5 5.25" stroke="#9CA1AF" stroke-width="1.16667" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M10.5 5.25L7 8.75L3.5 5.25" stroke="#9CA1AF" stroke-width="1.16667" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 232 B After Width: | Height: | Size: 229 B |
@@ -1,5 +1,5 @@
|
||||
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M20.1667 11.9168V8.25016C20.1667 3.66683 18.3334 1.8335 13.75 1.8335H8.25004C3.66671 1.8335 1.83337 3.66683 1.83337 8.25016V13.7502C1.83337 18.3335 3.66671 20.1668 8.25004 20.1668H11.9167" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M6.71924 13.2823L8.90091 10.4498C9.21258 10.0465 9.79008 9.97312 10.1934 10.2848L11.8709 11.6048C12.2743 11.9165 12.8517 11.8431 13.1634 11.449L15.2809 8.71729" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M18.1134 15.0243C18.2417 15.281 18.5625 15.5193 18.8467 15.5743L19.195 15.6293C20.24 15.8035 20.4875 16.5735 19.7359 17.3343L19.415 17.6551C19.2042 17.8751 19.085 18.2968 19.1492 18.5901L19.195 18.7826C19.4792 20.0476 18.81 20.5335 17.71 19.8735L17.4717 19.736C17.1875 19.571 16.7292 19.571 16.445 19.736L16.2067 19.8735C15.0975 20.5426 14.4284 20.0476 14.7217 18.7826L14.7675 18.5901C14.8317 18.2968 14.7125 17.8751 14.5017 17.6551L14.1809 17.3343C13.4292 16.5735 13.6767 15.8035 14.7217 15.6293L15.07 15.5743C15.345 15.5285 15.675 15.281 15.8034 15.0243L16.06 14.5018C16.555 13.5026 17.3617 13.5026 17.8567 14.5018L18.1134 15.0243Z" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M20.1667 11.9168V8.25016C20.1667 3.66683 18.3334 1.8335 13.75 1.8335H8.25004C3.66671 1.8335 1.83337 3.66683 1.83337 8.25016V13.7502C1.83337 18.3335 3.66671 20.1668 8.25004 20.1668H11.9167" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M6.71924 13.2823L8.90091 10.4498C9.21258 10.0465 9.79008 9.97312 10.1934 10.2848L11.8709 11.6048C12.2743 11.9165 12.8517 11.8431 13.1634 11.449L15.2809 8.71729" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M18.1134 15.0243C18.2417 15.281 18.5625 15.5193 18.8467 15.5743L19.195 15.6293C20.24 15.8035 20.4875 16.5735 19.7359 17.3343L19.415 17.6551C19.2042 17.8751 19.085 18.2968 19.1492 18.5901L19.195 18.7826C19.4792 20.0476 18.81 20.5335 17.71 19.8735L17.4717 19.736C17.1875 19.571 16.7292 19.571 16.445 19.736L16.2067 19.8735C15.0975 20.5426 14.4284 20.0476 14.7217 18.7826L14.7675 18.5901C14.8317 18.2968 14.7125 17.8751 14.5017 17.6551L14.1809 17.3343C13.4292 16.5735 13.6767 15.8035 14.7217 15.6293L15.07 15.5743C15.345 15.5285 15.675 15.281 15.8034 15.0243L16.06 14.5018C16.555 13.5026 17.3617 13.5026 17.8567 14.5018L18.1134 15.0243Z" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
@@ -1,6 +1,6 @@
|
||||
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M14.6666 2.75L18.3333 6.41667L14.6666 10.0833" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M18.3333 6.4165H3.66663" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M7.33329 19.2498L3.66663 15.5832L7.33329 11.9165" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M3.66663 15.5835H18.3333" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M14.6666 2.75L18.3333 6.41667L14.6666 10.0833" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M18.3333 6.4165H3.66663" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M7.33329 19.2498L3.66663 15.5832L7.33329 11.9165" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M3.66663 15.5835H18.3333" stroke="#9CA1AF" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 637 B After Width: | Height: | Size: 631 B |
@@ -1,4 +1,4 @@
|
||||
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M18.3333 11.9168C18.3333 16.5001 15.125 18.7918 11.3116 20.1209C11.1119 20.1886 10.895 20.1853 10.6975 20.1118C6.87496 18.7918 3.66663 16.5001 3.66663 11.9168V5.50009C3.66663 5.25697 3.7632 5.02381 3.93511 4.85191C4.10702 4.68 4.34018 4.58342 4.58329 4.58342C6.41663 4.58342 8.70829 3.48342 10.3033 2.09009C10.4975 1.92417 10.7445 1.83301 11 1.83301C11.2554 1.83301 11.5024 1.92417 11.6966 2.09009C13.3008 3.49259 15.5833 4.58342 17.4166 4.58342C17.6597 4.58342 17.8929 4.68 18.0648 4.85191C18.2367 5.02381 18.3333 5.25697 18.3333 5.50009V11.9168Z" stroke="#9CA1AF" stroke-width="1.83333" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M8.25 10.9998L10.0833 12.8332L13.75 9.1665" stroke="#9CA1AF" stroke-width="1.83333" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M18.3333 11.9168C18.3333 16.5001 15.125 18.7918 11.3116 20.1209C11.1119 20.1886 10.895 20.1853 10.6975 20.1118C6.87496 18.7918 3.66663 16.5001 3.66663 11.9168V5.50009C3.66663 5.25697 3.7632 5.02381 3.93511 4.85191C4.10702 4.68 4.34018 4.58342 4.58329 4.58342C6.41663 4.58342 8.70829 3.48342 10.3033 2.09009C10.4975 1.92417 10.7445 1.83301 11 1.83301C11.2554 1.83301 11.5024 1.92417 11.6966 2.09009C13.3008 3.49259 15.5833 4.58342 17.4166 4.58342C17.6597 4.58342 17.8929 4.68 18.0648 4.85191C18.2367 5.02381 18.3333 5.25697 18.3333 5.50009V11.9168Z" stroke="#9CA1AF" stroke-width="1.83333" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M8.25 10.9998L10.0833 12.8332L13.75 9.1665" stroke="#9CA1AF" stroke-width="1.83333" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 896 B After Width: | Height: | Size: 892 B |
@@ -1,7 +1,7 @@
|
||||
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M10.272 14.7103V19.3169L15.9655 11.2942L10.272 14.7103ZM15.7585 9.79297L10.272 0.683594V7.30859L15.7585 9.79297Z" fill="#3B3735"/>
|
||||
<path d="M10.272 7.82422V13.4659L15.7067 10.3086L10.272 7.82422Z" fill="#1F1D19"/>
|
||||
<path d="M4.26765 9.79297L9.75406 0.683594V7.30859L4.26765 9.79297Z" fill="#959190"/>
|
||||
<path d="M9.7536 7.82422V13.4659L4.31891 10.3086L9.7536 7.82422Z" fill="#403C3A"/>
|
||||
<path d="M9.75398 14.71V19.3166L4.06055 11.2939L9.75398 14.71Z" fill="#959190"/>
|
||||
</svg>
|
||||
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M10.272 14.7103V19.3169L15.9655 11.2942L10.272 14.7103ZM15.7585 9.79297L10.272 0.683594V7.30859L15.7585 9.79297Z" fill="#3B3735"/>
|
||||
<path d="M10.272 7.82422V13.4659L15.7067 10.3086L10.272 7.82422Z" fill="#1F1D19"/>
|
||||
<path d="M4.26765 9.79297L9.75406 0.683594V7.30859L4.26765 9.79297Z" fill="#959190"/>
|
||||
<path d="M9.7536 7.82422V13.4659L4.31891 10.3086L9.7536 7.82422Z" fill="#403C3A"/>
|
||||
<path d="M9.75398 14.71V19.3166L4.06055 11.2939L9.75398 14.71Z" fill="#959190"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 583 B After Width: | Height: | Size: 576 B |
@@ -1,3 +1,3 @@
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M6 12L10 8L6 4" stroke="#0A0A0A" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M6 12L10 8L6 4" stroke="#0A0A0A" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 220 B After Width: | Height: | Size: 217 B |
@@ -1,9 +1,9 @@
|
||||
<svg width="174" height="40" viewBox="0 0 174 40" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M72.5039 27.4229H69.3193L63.4033 16.8848L57.4717 27.4229H54.2861L63.4053 11.2412L72.5039 27.4229ZM90.6846 14.7344H79.8057C79.2937 14.7345 78.8758 14.9071 78.5107 15.2715C78.1459 15.6358 77.9727 16.0526 77.9727 16.5635C77.9727 17.0728 78.1443 17.4891 78.5068 17.8525C78.87 18.2058 79.289 18.3759 79.8057 18.376H86.1533C87.3949 18.3762 88.4742 18.8246 89.3457 19.7041C90.2326 20.5757 90.6844 21.6559 90.6846 22.8994C90.6846 24.1427 90.2325 25.2259 89.3496 26.1074C88.4756 26.9799 87.3951 27.4228 86.1533 27.4229H75.2734V24.7295H86.1533C86.6651 24.7294 87.0823 24.5566 87.4473 24.1924C87.8124 23.8279 87.9863 23.4106 87.9863 22.8994C87.9862 22.3889 87.8133 21.9813 87.4541 21.6309L87.4473 21.624C87.0823 21.26 86.665 21.088 86.1533 21.0879H79.8057C78.5641 21.0879 77.4796 20.6456 76.5957 19.7773L76.5918 19.7715L76.5869 19.7686C75.7168 18.8861 75.2734 17.803 75.2734 16.5635C75.2735 15.324 75.7178 14.2454 76.5918 13.373C77.4749 12.4917 78.5602 12.0401 79.8057 12.04H90.6846V14.7344ZM109.412 14.7344H98.5332C98.0215 14.7345 97.6042 14.9074 97.2393 15.2715C96.8743 15.6357 96.7003 16.0526 96.7002 16.5635C96.7002 17.0728 96.873 17.4891 97.2354 17.8525C97.5986 18.2055 98.017 18.3758 98.5332 18.376H104.881C106.122 18.3761 107.202 18.8247 108.073 19.7041C108.96 20.5757 109.412 21.6559 109.412 22.8994C109.412 24.1426 108.961 25.226 108.078 26.1074C107.204 26.9799 106.123 27.4228 104.881 27.4229H94.001V24.7295H104.881C105.393 24.7294 105.811 24.5568 106.176 24.1924C106.541 23.8279 106.714 23.4106 106.714 22.8994C106.714 22.3888 106.541 21.9814 106.182 21.6309L106.176 21.624C105.811 21.2598 105.393 21.088 104.881 21.0879H98.5332C97.2919 21.0877 96.2081 20.6454 95.3242 19.7773L95.3154 19.7686C94.4452 18.8861 94.001 17.803 94.001 16.5635C94.001 15.3241 94.4456 14.2454 95.3193 13.373C96.2024 12.4917 97.2879 12.0402 98.5332 12.04H109.412V14.7344ZM128.143 14.7344H120.438C119.139 14.7344 118.028 15.1657 117.071 16.04C116.343 16.7054 115.861 17.4793 115.617 18.376H128.143V21.0879H115.617C115.861 21.9868 116.343 22.7676 117.072 23.4424C118.027 24.3037 119.138 24.7295 120.438 24.7295H128.143V27.4229H120.438C118.316 27.4229 116.484 26.6672 114.986 25.1729C113.489 23.6783 112.732 21.8496 112.732 19.7314C112.733 17.6133 113.489 15.7854 114.986 14.291C116.484 12.7964 118.316 12.04 120.438 12.04H128.143V14.7344ZM146.874 14.7344H140.525V27.4229H137.81V14.7344H131.463V12.04H146.874V14.7344ZM157.896 17.6377L162.839 12.04H166.538L159.737 19.7314L166.538 27.4229H162.839L157.896 21.8271L152.955 27.4229H149.257L156.058 19.7314L149.257 12.04H152.955L157.896 17.6377Z" fill="#111827"/>
|
||||
<path d="M30.7595 21.1203C26.5742 26.4404 27.4882 25.3226 23.8872 29.3075C20.2862 33.2924 18.8695 34.122 15.8447 35.6161C18.6589 38.3532 25.6613 39.5414 28.5777 39.6614C39.9067 39.6614 45.8658 29.0974 47.4293 23.8154L42.6487 28.5872C34.8272 34.5505 35.5173 27.1545 35.8281 21.4701C36.139 15.7856 34.9448 15.8001 30.7595 21.1203Z" fill="#111827"/>
|
||||
<path opacity="0.1" d="M29.2095 26.2439C33.3136 20.8326 32.7563 22.5015 32.807 24.7774C32.8519 26.7963 34.5315 36.6559 41.1007 34.301C38.0469 37.3255 33.907 39.662 28.5793 39.662C26.3122 39.5687 21.8577 38.9891 18.6646 37.45C21.017 35.3088 26.0422 30.4203 29.2095 26.2439Z" fill="#111827"/>
|
||||
<path d="M33.6931 9.41385C39.7064 4.99711 41.3042 12.2451 41.3513 16.4212V23.1454C41.3513 27.4346 47.8398 20.9512 47.8398 18.7215C47.8398 17.7209 45.2516 0 29.084 0C12.9162 0 6.88907 13.0945 8.16545 22.2252C9.44185 31.356 12.9227 29.6112 15.2564 28.1708C18.731 26.9675 26.1765 14.9347 33.6931 9.41385Z" fill="#111827"/>
|
||||
<path d="M29.0861 0C38.6554 4.75569e-06 43.4673 6.20837 45.8012 11.4831C42.1121 7.97614 38.7616 7.54956 36.4579 8.08875C35.6616 8.22689 34.7457 8.64219 33.6951 9.41381C26.1786 14.9347 18.2903 26.9881 15.369 28.3181C12.4477 29.6479 8.98626 31.1565 8.1674 22.2252C7.32568 13.0444 12.9182 0 29.0861 0Z" fill="#111827"/>
|
||||
<path opacity="0.1" d="M26.7258 33.5267C30.0192 29.4302 30.2606 26.9637 31.3365 30.9474C32.2891 34.4746 34.7076 36.2162 37.1681 37.3452C34.7482 38.7572 31.8932 39.6621 28.5782 39.6621C26.8803 39.5922 23.9554 39.2493 21.2524 38.4351C23.0305 37.2144 25.1293 35.5124 26.7258 33.5267Z" fill="#111827"/>
|
||||
<path d="M29.088 0C29.3164 0 29.5422 0.00350863 29.7652 0.0104881C31.9447 0.0786729 33.8683 0.475476 35.565 1.11005C35.7725 1.18767 35.9766 1.26895 36.1773 1.35352C36.2003 1.36323 36.2235 1.37276 36.2464 1.38255C36.3196 1.41379 36.3923 1.44574 36.4646 1.47788C36.5163 1.50086 36.5677 1.52413 36.619 1.54755C36.7651 1.61432 36.9095 1.68267 37.052 1.75301C37.1196 1.7864 37.1867 1.82035 37.2534 1.85452C37.3449 1.90133 37.4356 1.9488 37.5257 1.99705C38.6339 2.5913 39.6275 3.29283 40.5172 4.06639C40.6232 4.15858 40.7278 4.25182 40.831 4.346C40.9697 4.4727 41.1057 4.60121 41.2392 4.73125C41.2839 4.77477 41.3283 4.81848 41.3725 4.86235C41.434 4.92356 41.4949 4.98514 41.5554 5.04702C41.5739 5.06596 41.5924 5.08494 41.6107 5.10395C41.6736 5.16883 41.7359 5.23394 41.7974 5.29948C42.0164 5.53248 42.2277 5.76965 42.4318 6.01023C42.5281 6.12388 42.6225 6.23863 42.7157 6.35372C42.8215 6.48444 42.9255 6.61579 43.0271 6.74814C44.1938 8.2668 45.0918 9.88565 45.7782 11.4271C45.7864 11.4456 45.7946 11.4641 45.8028 11.4826C42.7535 8.5841 39.9355 7.79003 37.749 7.90634C35.2573 7.13785 31.2106 7.96321 25.9463 13.2178C13.9145 25.2275 6.1716 26.8444 10.0602 12.1741C10.4412 10.7369 10.9705 9.45623 11.6294 8.31499C12.6146 6.90895 13.8095 5.60385 15.2247 4.46399C15.3511 4.36217 15.4794 4.26178 15.6094 4.16264C17.1619 2.97822 18.9663 1.98826 21.036 1.27149C21.3319 1.169 21.6333 1.07212 21.9402 0.98101C24.0584 0.352059 26.4368 2.0529e-05 29.088 0Z" fill="#111827"/>
|
||||
</svg>
|
||||
<svg width="174" height="40" viewBox="0 0 174 40" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M72.5039 27.4229H69.3193L63.4033 16.8848L57.4717 27.4229H54.2861L63.4053 11.2412L72.5039 27.4229ZM90.6846 14.7344H79.8057C79.2937 14.7345 78.8758 14.9071 78.5107 15.2715C78.1459 15.6358 77.9727 16.0526 77.9727 16.5635C77.9727 17.0728 78.1443 17.4891 78.5068 17.8525C78.87 18.2058 79.289 18.3759 79.8057 18.376H86.1533C87.3949 18.3762 88.4742 18.8246 89.3457 19.7041C90.2326 20.5757 90.6844 21.6559 90.6846 22.8994C90.6846 24.1427 90.2325 25.2259 89.3496 26.1074C88.4756 26.9799 87.3951 27.4228 86.1533 27.4229H75.2734V24.7295H86.1533C86.6651 24.7294 87.0823 24.5566 87.4473 24.1924C87.8124 23.8279 87.9863 23.4106 87.9863 22.8994C87.9862 22.3889 87.8133 21.9813 87.4541 21.6309L87.4473 21.624C87.0823 21.26 86.665 21.088 86.1533 21.0879H79.8057C78.5641 21.0879 77.4796 20.6456 76.5957 19.7773L76.5918 19.7715L76.5869 19.7686C75.7168 18.8861 75.2734 17.803 75.2734 16.5635C75.2735 15.324 75.7178 14.2454 76.5918 13.373C77.4749 12.4917 78.5602 12.0401 79.8057 12.04H90.6846V14.7344ZM109.412 14.7344H98.5332C98.0215 14.7345 97.6042 14.9074 97.2393 15.2715C96.8743 15.6357 96.7003 16.0526 96.7002 16.5635C96.7002 17.0728 96.873 17.4891 97.2354 17.8525C97.5986 18.2055 98.017 18.3758 98.5332 18.376H104.881C106.122 18.3761 107.202 18.8247 108.073 19.7041C108.96 20.5757 109.412 21.6559 109.412 22.8994C109.412 24.1426 108.961 25.226 108.078 26.1074C107.204 26.9799 106.123 27.4228 104.881 27.4229H94.001V24.7295H104.881C105.393 24.7294 105.811 24.5568 106.176 24.1924C106.541 23.8279 106.714 23.4106 106.714 22.8994C106.714 22.3888 106.541 21.9814 106.182 21.6309L106.176 21.624C105.811 21.2598 105.393 21.088 104.881 21.0879H98.5332C97.2919 21.0877 96.2081 20.6454 95.3242 19.7773L95.3154 19.7686C94.4452 18.8861 94.001 17.803 94.001 16.5635C94.001 15.3241 94.4456 14.2454 95.3193 13.373C96.2024 12.4917 97.2879 12.0402 98.5332 12.04H109.412V14.7344ZM128.143 14.7344H120.438C119.139 14.7344 118.028 15.1657 117.071 16.04C116.343 16.7054 115.861 17.4793 115.617 18.376H128.143V21.0879H115.617C115.861 21.9868 116.343 22.7676 117.072 23.4424C118.027 24.3037 119.138 24.7295 120.438 24.7295H128.143V27.4229H120.438C118.316 27.4229 116.484 26.6672 114.986 25.1729C113.489 23.6783 112.732 21.8496 112.732 19.7314C112.733 17.6133 113.489 15.7854 114.986 14.291C116.484 12.7964 118.316 12.04 120.438 12.04H128.143V14.7344ZM146.874 14.7344H140.525V27.4229H137.81V14.7344H131.463V12.04H146.874V14.7344ZM157.896 17.6377L162.839 12.04H166.538L159.737 19.7314L166.538 27.4229H162.839L157.896 21.8271L152.955 27.4229H149.257L156.058 19.7314L149.257 12.04H152.955L157.896 17.6377Z" fill="#111827"/>
|
||||
<path d="M30.7595 21.1203C26.5742 26.4404 27.4882 25.3226 23.8872 29.3075C20.2862 33.2924 18.8695 34.122 15.8447 35.6161C18.6589 38.3532 25.6613 39.5414 28.5777 39.6614C39.9067 39.6614 45.8658 29.0974 47.4293 23.8154L42.6487 28.5872C34.8272 34.5505 35.5173 27.1545 35.8281 21.4701C36.139 15.7856 34.9448 15.8001 30.7595 21.1203Z" fill="#111827"/>
|
||||
<path opacity="0.1" d="M29.2095 26.2439C33.3136 20.8326 32.7563 22.5015 32.807 24.7774C32.8519 26.7963 34.5315 36.6559 41.1007 34.301C38.0469 37.3255 33.907 39.662 28.5793 39.662C26.3122 39.5687 21.8577 38.9891 18.6646 37.45C21.017 35.3088 26.0422 30.4203 29.2095 26.2439Z" fill="#111827"/>
|
||||
<path d="M33.6931 9.41385C39.7064 4.99711 41.3042 12.2451 41.3513 16.4212V23.1454C41.3513 27.4346 47.8398 20.9512 47.8398 18.7215C47.8398 17.7209 45.2516 0 29.084 0C12.9162 0 6.88907 13.0945 8.16545 22.2252C9.44185 31.356 12.9227 29.6112 15.2564 28.1708C18.731 26.9675 26.1765 14.9347 33.6931 9.41385Z" fill="#111827"/>
|
||||
<path d="M29.0861 0C38.6554 4.75569e-06 43.4673 6.20837 45.8012 11.4831C42.1121 7.97614 38.7616 7.54956 36.4579 8.08875C35.6616 8.22689 34.7457 8.64219 33.6951 9.41381C26.1786 14.9347 18.2903 26.9881 15.369 28.3181C12.4477 29.6479 8.98626 31.1565 8.1674 22.2252C7.32568 13.0444 12.9182 0 29.0861 0Z" fill="#111827"/>
|
||||
<path opacity="0.1" d="M26.7258 33.5267C30.0192 29.4302 30.2606 26.9637 31.3365 30.9474C32.2891 34.4746 34.7076 36.2162 37.1681 37.3452C34.7482 38.7572 31.8932 39.6621 28.5782 39.6621C26.8803 39.5922 23.9554 39.2493 21.2524 38.4351C23.0305 37.2144 25.1293 35.5124 26.7258 33.5267Z" fill="#111827"/>
|
||||
<path d="M29.088 0C29.3164 0 29.5422 0.00350863 29.7652 0.0104881C31.9447 0.0786729 33.8683 0.475476 35.565 1.11005C35.7725 1.18767 35.9766 1.26895 36.1773 1.35352C36.2003 1.36323 36.2235 1.37276 36.2464 1.38255C36.3196 1.41379 36.3923 1.44574 36.4646 1.47788C36.5163 1.50086 36.5677 1.52413 36.619 1.54755C36.7651 1.61432 36.9095 1.68267 37.052 1.75301C37.1196 1.7864 37.1867 1.82035 37.2534 1.85452C37.3449 1.90133 37.4356 1.9488 37.5257 1.99705C38.6339 2.5913 39.6275 3.29283 40.5172 4.06639C40.6232 4.15858 40.7278 4.25182 40.831 4.346C40.9697 4.4727 41.1057 4.60121 41.2392 4.73125C41.2839 4.77477 41.3283 4.81848 41.3725 4.86235C41.434 4.92356 41.4949 4.98514 41.5554 5.04702C41.5739 5.06596 41.5924 5.08494 41.6107 5.10395C41.6736 5.16883 41.7359 5.23394 41.7974 5.29948C42.0164 5.53248 42.2277 5.76965 42.4318 6.01023C42.5281 6.12388 42.6225 6.23863 42.7157 6.35372C42.8215 6.48444 42.9255 6.61579 43.0271 6.74814C44.1938 8.2668 45.0918 9.88565 45.7782 11.4271C45.7864 11.4456 45.7946 11.4641 45.8028 11.4826C42.7535 8.5841 39.9355 7.79003 37.749 7.90634C35.2573 7.13785 31.2106 7.96321 25.9463 13.2178C13.9145 25.2275 6.1716 26.8444 10.0602 12.1741C10.4412 10.7369 10.9705 9.45623 11.6294 8.31499C12.6146 6.90895 13.8095 5.60385 15.2247 4.46399C15.3511 4.36217 15.4794 4.26178 15.6094 4.16264C17.1619 2.97822 18.9663 1.98826 21.036 1.27149C21.3319 1.169 21.6333 1.07212 21.9402 0.98101C24.0584 0.352059 26.4368 2.0529e-05 29.088 0Z" fill="#111827"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 5.6 KiB |
@@ -1,62 +1,62 @@
|
||||
import type { Config } from "tailwindcss";
|
||||
import { heroui } from "@heroui/theme";
|
||||
|
||||
export default {
|
||||
darkMode: "class",
|
||||
content: [
|
||||
"./pages/**/*.{js,ts,jsx,tsx,mdx}",
|
||||
"./components/**/*.{js,ts,jsx,tsx,mdx}",
|
||||
"./app/**/*.{js,ts,jsx,tsx,mdx}",
|
||||
"./node_modules/@heroui/theme/dist/**/*.{js,ts,jsx,tsx}",
|
||||
],
|
||||
theme: {
|
||||
extend: {
|
||||
colors: {
|
||||
background: "var(--background)",
|
||||
foreground: "var(--foreground)",
|
||||
'bg-subtle': '#f9fafb',
|
||||
'bg-surface': '#ffffff',
|
||||
'border-normal': '#e5e7eb',
|
||||
'border-gray': '#f3f4f6',
|
||||
'text-primary': '#111827',
|
||||
'text-tertiary': '#9ca1af',
|
||||
'fill-secondary-click': '#f3f4f6',
|
||||
},
|
||||
fontFamily: {
|
||||
inter: ['var(--font-inter)', 'Inter', 'sans-serif'],
|
||||
jetbrains: ['var(--font-jetbrains)', 'JetBrains Mono', 'monospace'],
|
||||
},
|
||||
fontSize: {
|
||||
'caption-tiny': ['12px', { lineHeight: '150%', letterSpacing: '0.01em' }],
|
||||
'body-small': ['14px', { lineHeight: '150%' }],
|
||||
'body-default': ['16px', { lineHeight: '150%' }],
|
||||
'body-large': ['18px', { lineHeight: '150%' }],
|
||||
'heading-h4': ['20px', { lineHeight: '140%', letterSpacing: '-0.005em' }],
|
||||
'heading-h3': ['24px', { lineHeight: '130%', letterSpacing: '-0.005em' }],
|
||||
'heading-h2': ['32px', { lineHeight: '120%', letterSpacing: '-0.01em' }],
|
||||
},
|
||||
fontWeight: {
|
||||
regular: '400',
|
||||
medium: '500',
|
||||
bold: '700',
|
||||
extrabold: '800',
|
||||
},
|
||||
animation: {
|
||||
'fade-in': 'fadeInCard 0.4s ease-out',
|
||||
},
|
||||
keyframes: {
|
||||
fadeInCard: {
|
||||
'0%': {
|
||||
opacity: '0',
|
||||
transform: 'scale(0.95) translateY(20px)',
|
||||
},
|
||||
'100%': {
|
||||
opacity: '1',
|
||||
transform: 'scale(1) translateY(0)',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
plugins: [heroui()],
|
||||
} satisfies Config;
|
||||
import type { Config } from "tailwindcss";
|
||||
import { heroui } from "@heroui/theme";
|
||||
|
||||
export default {
|
||||
darkMode: "class",
|
||||
content: [
|
||||
"./pages/**/*.{js,ts,jsx,tsx,mdx}",
|
||||
"./components/**/*.{js,ts,jsx,tsx,mdx}",
|
||||
"./app/**/*.{js,ts,jsx,tsx,mdx}",
|
||||
"./node_modules/@heroui/theme/dist/**/*.{js,ts,jsx,tsx}",
|
||||
],
|
||||
theme: {
|
||||
extend: {
|
||||
colors: {
|
||||
background: "var(--background)",
|
||||
foreground: "var(--foreground)",
|
||||
'bg-subtle': '#f9fafb',
|
||||
'bg-surface': '#ffffff',
|
||||
'border-normal': '#e5e7eb',
|
||||
'border-gray': '#f3f4f6',
|
||||
'text-primary': '#111827',
|
||||
'text-tertiary': '#9ca1af',
|
||||
'fill-secondary-click': '#f3f4f6',
|
||||
},
|
||||
fontFamily: {
|
||||
inter: ['var(--font-inter)', 'Inter', 'sans-serif'],
|
||||
jetbrains: ['var(--font-jetbrains)', 'JetBrains Mono', 'monospace'],
|
||||
},
|
||||
fontSize: {
|
||||
'caption-tiny': ['12px', { lineHeight: '150%', letterSpacing: '0.01em' }],
|
||||
'body-small': ['14px', { lineHeight: '150%' }],
|
||||
'body-default': ['16px', { lineHeight: '150%' }],
|
||||
'body-large': ['18px', { lineHeight: '150%' }],
|
||||
'heading-h4': ['20px', { lineHeight: '140%', letterSpacing: '-0.005em' }],
|
||||
'heading-h3': ['24px', { lineHeight: '130%', letterSpacing: '-0.005em' }],
|
||||
'heading-h2': ['32px', { lineHeight: '120%', letterSpacing: '-0.01em' }],
|
||||
},
|
||||
fontWeight: {
|
||||
regular: '400',
|
||||
medium: '500',
|
||||
bold: '700',
|
||||
extrabold: '800',
|
||||
},
|
||||
animation: {
|
||||
'fade-in': 'fadeInCard 0.4s ease-out',
|
||||
},
|
||||
keyframes: {
|
||||
fadeInCard: {
|
||||
'0%': {
|
||||
opacity: '0',
|
||||
transform: 'scale(0.95) translateY(20px)',
|
||||
},
|
||||
'100%': {
|
||||
opacity: '1',
|
||||
transform: 'scale(1) translateY(0)',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
plugins: [heroui()],
|
||||
} satisfies Config;
|
||||
|
||||