大改变
This commit is contained in:
155
components/common/ConfirmModal.tsx
Normal file
155
components/common/ConfirmModal.tsx
Normal file
@@ -0,0 +1,155 @@
|
||||
"use client";
|
||||
|
||||
import { useState } from "react";
|
||||
import Image from "next/image";
|
||||
import { Modal, ModalContent, Button } from "@heroui/react";
|
||||
import { buttonStyles } from "@/lib/buttonStyles";
|
||||
|
||||
interface ConfirmModalProps {
|
||||
isOpen: boolean;
|
||||
onClose: () => void;
|
||||
}
|
||||
|
||||
export default function ConfirmModal({ isOpen, onClose }: ConfirmModalProps) {
|
||||
const [activeTab, setActiveTab] = useState<"buy" | "sell">("buy");
|
||||
|
||||
return (
|
||||
<Modal
|
||||
isOpen={isOpen}
|
||||
onClose={onClose}
|
||||
size="lg"
|
||||
classNames={{
|
||||
base: "bg-transparent shadow-none",
|
||||
wrapper: "items-center justify-center",
|
||||
}}
|
||||
>
|
||||
<ModalContent className="bg-bg-surface dark:bg-gray-800 rounded-3xl p-6 max-w-[494px]">
|
||||
<div className="flex flex-col gap-6">
|
||||
{/* Header - Buy/Sell Tabs */}
|
||||
<div className="flex items-center gap-8">
|
||||
<button
|
||||
onClick={() => setActiveTab("buy")}
|
||||
className={`text-heading-h4 leading-[140%] ${
|
||||
activeTab === "buy"
|
||||
? "font-bold text-text-primary dark:text-white"
|
||||
: "font-medium text-text-tertiary dark:text-gray-400"
|
||||
}`}
|
||||
>
|
||||
Buy
|
||||
</button>
|
||||
<button
|
||||
onClick={() => setActiveTab("sell")}
|
||||
className={`text-heading-h4 leading-[140%] ${
|
||||
activeTab === "sell"
|
||||
? "font-bold text-text-primary dark:text-white"
|
||||
: "font-medium text-text-tertiary dark:text-gray-400"
|
||||
}`}
|
||||
>
|
||||
Sell
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{/* PAY Section */}
|
||||
<div className="flex flex-col gap-2">
|
||||
{/* PAY Label and MAX Button */}
|
||||
<div className="flex items-center justify-between">
|
||||
<span className="text-body-small font-bold text-text-secondary dark:text-gray-400">
|
||||
PAY
|
||||
</span>
|
||||
<Button size="sm" className="rounded-lg h-7 px-3 text-caption-tiny font-medium bg-content2 text-foreground hover:bg-content3">
|
||||
MAX
|
||||
</Button>
|
||||
</div>
|
||||
|
||||
{/* Payment Input Box */}
|
||||
<div className="bg-bg-subtle dark:bg-gray-700 rounded-2xl p-6">
|
||||
<div className="flex items-center justify-between">
|
||||
{/* Left - Amount */}
|
||||
<div className="flex flex-col gap-3">
|
||||
<div className="text-[32px] font-bold leading-[130%] tracking-[-0.01em] text-text-primary dark:text-white">
|
||||
1,000
|
||||
</div>
|
||||
<div className="text-body-small font-medium text-text-tertiary dark:text-gray-400">
|
||||
$10,000.00 USD
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Right - Token Selector and Balance */}
|
||||
<div className="flex flex-col gap-3 items-end">
|
||||
<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>
|
||||
<Image src="/icon0.svg" alt="" width={20} height={20} />
|
||||
</button>
|
||||
<div className="flex items-center gap-1">
|
||||
<Image src="/icon1.svg" alt="" width={12} height={12} />
|
||||
<span className="text-caption-tiny font-medium text-text-secondary dark:text-gray-400">
|
||||
45,230.00 USDC
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Transaction Summary */}
|
||||
<div className="bg-bg-subtle dark:bg-gray-700 rounded-2xl p-4 flex flex-col gap-2">
|
||||
<div className="text-body-small font-medium text-text-secondary dark:text-gray-400">
|
||||
Transaction Summary
|
||||
</div>
|
||||
|
||||
{/* You Get */}
|
||||
<div className="flex items-center justify-between">
|
||||
<span className="text-body-small font-regular text-text-tertiary dark:text-gray-400">
|
||||
You Get
|
||||
</span>
|
||||
<span className="text-body-small font-bold text-[#ff6900] dark:text-orange-400">
|
||||
9652.2 GYUS
|
||||
</span>
|
||||
</div>
|
||||
|
||||
{/* Market Price */}
|
||||
<div className="flex items-center justify-between">
|
||||
<span className="text-body-small font-regular text-text-tertiary dark:text-gray-400">
|
||||
Market Price
|
||||
</span>
|
||||
<span className="text-body-small font-bold text-text-primary dark:text-white">
|
||||
$1.03 USDC
|
||||
</span>
|
||||
</div>
|
||||
|
||||
{/* Price vs Mint */}
|
||||
<div className="flex items-center justify-between">
|
||||
<span className="text-body-small font-regular text-text-tertiary dark:text-gray-400">
|
||||
Price vs Mint
|
||||
</span>
|
||||
<div className="flex items-center gap-1">
|
||||
<Image src="/icon2.svg" alt="" width={20} height={20} />
|
||||
<span className="text-body-small font-bold text-[#10b981] dark:text-green-400">
|
||||
+2.53%
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Confirm Button */}
|
||||
<Button
|
||||
color="default"
|
||||
variant="solid"
|
||||
className={buttonStyles({ intent: "theme" })}
|
||||
onPress={onClose}
|
||||
>
|
||||
Buy from SWAP
|
||||
</Button>
|
||||
</div>
|
||||
</ModalContent>
|
||||
</Modal>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user