Spaces:
Running
Running
| import React from 'react'; | |
| interface UpgradeModalProps { | |
| isOpen: boolean; | |
| onClose: () => void; | |
| onUpgrade: () => void; | |
| resetDate?: number; | |
| mode?: 'limit' | 'feature'; // 'limit' for credits, 'feature' for custom model creation | |
| } | |
| const UpgradeModal: React.FC<UpgradeModalProps> = ({ isOpen, onClose, onUpgrade, resetDate, mode = 'limit' }) => { | |
| if (!isOpen) return null; | |
| const isFeatureMode = mode === 'feature'; | |
| // Calculate formatted date for reset if available | |
| const resetDateStr = resetDate | |
| ? new Date(resetDate * 1000).toLocaleString('fa-IR', { weekday: 'long', hour: '2-digit', minute: '2-digit' }) | |
| : 'فردا'; | |
| // --- RENDER FEATURE GATE (DARK DESIGN) --- | |
| if (isFeatureMode) { | |
| return ( | |
| <div className="fixed inset-0 z-[100] flex items-center justify-center p-2 sm:p-4"> | |
| <div | |
| className="absolute inset-0 bg-black/80 backdrop-blur-xl transition-opacity animate-[fadeIn_0.5s_ease-out]" | |
| onClick={onClose} | |
| ></div> | |
| <div className="relative bg-[#0f172a] rounded-[2rem] sm:rounded-[2.5rem] w-full max-w-[380px] max-h-[92vh] flex flex-col p-5 sm:p-8 shadow-[0_0_50px_rgba(139,92,246,0.3)] animate-[scaleIn_0.5s_cubic-bezier(0.34,1.56,0.64,1)] overflow-hidden border border-white/10"> | |
| <div className="absolute -top-24 -right-24 w-64 h-64 bg-purple-600/20 rounded-full blur-[80px] animate-pulse pointer-events-none"></div> | |
| <div className="absolute -bottom-24 -left-24 w-64 h-64 bg-blue-600/20 rounded-full blur-[80px] animate-pulse pointer-events-none"></div> | |
| <div className="relative z-10 overflow-y-auto custom-scrollbar pr-1 flex flex-col items-center"> | |
| <div className="relative mb-5 sm:mb-6 text-center"> | |
| <div className="relative inline-block"> | |
| <div className="absolute inset-0 bg-gradient-to-tr from-amber-400 to-purple-600 blur-2xl opacity-40 rounded-full animate-pulse"></div> | |
| <div className="w-16 h-16 sm:w-20 sm:h-20 bg-gradient-to-tr from-[#1e293b] to-[#334155] rounded-[1.5rem] sm:rounded-[2rem] flex items-center justify-center shadow-2xl relative z-10 border border-white/20 transform hover:rotate-6 transition-transform"> | |
| <i className="fas fa-wand-sparkles text-2xl sm:text-3xl text-transparent bg-clip-text bg-gradient-to-br from-amber-300 via-yellow-400 to-amber-600"></i> | |
| </div> | |
| </div> | |
| </div> | |
| <div className="text-center w-full"> | |
| <h3 className="text-lg sm:text-xl font-black text-white mb-3 sm:mb-4 leading-tight text-center"> | |
| استودیوی اختصاصی خودت رو بساز | |
| </h3> | |
| <div className="bg-white/5 backdrop-blur-md rounded-2xl sm:rounded-3xl p-4 sm:p-5 mb-5 sm:mb-6 border border-white/10 text-right"> | |
| <div className="space-y-3 sm:space-y-4"> | |
| <p className="text-gray-300 text-[12px] sm:text-[13px] leading-[1.8] font-medium"> | |
| برای ساخت مدل تغییر صدا با هوش مصنوعی آلفا باید اشتراک برنامه رو داشته باشید. | |
| <span className="text-amber-400 font-black mx-1">مدلهای اختصاصی شما</span> | |
| مثل بقیه مدلها در این صفحه برای همیشه ذخیره میشن. | |
| </p> | |
| <div className="flex flex-col gap-1.5 pt-1"> | |
| <div className="flex items-center gap-2 text-[10px] sm:text-[11px] text-gray-400 bg-white/5 p-2 rounded-xl"> | |
| <i className="fas fa-check-circle text-green-500"></i> | |
| <span>شبیهسازی دقیق هر صدایی (حتی خودت)</span> | |
| </div> | |
| <div className="flex items-center gap-2 text-[10px] sm:text-[11px] text-gray-400 bg-white/5 p-2 rounded-xl"> | |
| <i className="fas fa-check-circle text-green-500"></i> | |
| <span>بالاترین کیفیت + جدیدترین تکنولوژی</span> | |
| </div> | |
| <div className="flex items-center gap-2 text-[10px] sm:text-[11px] text-gray-400 bg-white/5 p-2 rounded-xl"> | |
| <i className="fas fa-check-circle text-green-500"></i> | |
| <span>ذخیره دائمی در لیست گویندگان اصلی</span> | |
| </div> | |
| <div className="flex items-center gap-2 text-[10px] sm:text-[11px] text-gray-400 bg-white/5 p-2 rounded-xl"> | |
| <i className="fas fa-check-circle text-green-500"></i> | |
| <span>تولید نامحدود تا آخرین روز اشتراک</span> | |
| </div> | |
| <div className="flex items-center gap-2 text-[10px] sm:text-[11px] text-gray-400 bg-white/5 p-2 rounded-xl"> | |
| <i className="fas fa-check-circle text-green-500"></i> | |
| <span>فعال شدن تمام بخش های برنامه</span> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <div className="space-y-3 w-full"> | |
| <button | |
| onClick={onUpgrade} | |
| className="w-full py-3.5 sm:py-4 rounded-xl sm:rounded-2xl font-black text-sm sm:text-base text-gray-900 bg-gradient-to-r from-amber-300 via-yellow-400 to-amber-600 hover:from-amber-400 hover:to-amber-700 shadow-[0_0_20px_rgba(245,158,11,0.2)] transition-all transform hover:-translate-y-1 active:scale-95 flex items-center justify-center gap-2 group" | |
| > | |
| <span>تهیه اشتراک برنامه</span> | |
| <i className="fas fa-bolt-lightning text-lg group-hover:animate-bounce"></i> | |
| </button> | |
| <button | |
| onClick={onClose} | |
| className="w-full py-2 rounded-lg font-bold text-[11px] sm:text-xs text-gray-500 hover:text-white transition-colors" | |
| > | |
| فعلاً نه، برمیگردم | |
| </button> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| ); | |
| } | |
| // --- RENDER CREDIT LIMIT (WHITE DESIGN) --- | |
| return ( | |
| <div className="fixed inset-0 z-[100] flex items-center justify-center p-4"> | |
| <div | |
| className="absolute inset-0 bg-black/60 backdrop-blur-md transition-opacity animate-[fadeIn_0.5s_ease-out]" | |
| onClick={onClose} | |
| ></div> | |
| <div className="relative bg-white rounded-[2rem] w-full max-w-[380px] p-8 shadow-2xl animate-[scaleIn_0.4s_cubic-bezier(0.34,1.56,0.64,1)] overflow-hidden text-center border-4 border-amber-100"> | |
| {/* Animated Icon Background */} | |
| <div className="absolute top-0 left-0 w-full h-32 bg-gradient-to-b from-amber-50 to-transparent -z-10"></div> | |
| {/* Floating Crown Icon */} | |
| <div className="relative mb-6 inline-block"> | |
| <div className="absolute inset-0 bg-amber-400 blur-xl opacity-20 rounded-full animate-pulse"></div> | |
| <div className="w-24 h-24 bg-gradient-to-tr from-amber-300 to-yellow-500 rounded-full flex items-center justify-center shadow-lg shadow-amber-500/30 animate-[bounce_3s_infinite]"> | |
| <i className="fas fa-crown text-4xl text-white drop-shadow-md"></i> | |
| </div> | |
| <div className="absolute -top-2 -right-2 w-8 h-8 bg-white rounded-full flex items-center justify-center shadow-md animate-[spin_10s_linear_infinite]"> | |
| <i className="fas fa-star text-amber-500 text-xs"></i> | |
| </div> | |
| </div> | |
| <h3 className="text-2xl font-black text-gray-800 mb-2">اعتبار شما تمام شد!</h3> | |
| <div className="bg-amber-50 rounded-xl p-3 border border-amber-100 mb-6"> | |
| <p className="text-gray-600 text-[11px] leading-relaxed"> | |
| شما از ۱ اعتبار رایگان خود برای این مدل در امروز استفاده کردید. از مدل دیگری استفاده کنید و یا با تهیه اشتراک نامحدود تولید کنید. | |
| <br/> | |
| <span className="text-[10px] text-amber-700 font-bold mt-2 block"> | |
| زمان شارژ مجدد: {resetDateStr} | |
| </span> | |
| </p> | |
| </div> | |
| <div className="space-y-3"> | |
| <button | |
| onClick={onUpgrade} | |
| className="w-full py-4 rounded-xl font-bold text-base text-gray-900 bg-gradient-to-r from-amber-300 via-yellow-400 to-amber-500 hover:from-amber-400 hover:to-amber-600 shadow-xl shadow-amber-500/20 transition-all transform hover:-translate-y-1 active:scale-95 flex items-center justify-center gap-2 group" | |
| > | |
| <span>ارتقا به نسخه نامحدود</span> | |
| <i className="fas fa-rocket group-hover:animate-ping"></i> | |
| </button> | |
| <button | |
| onClick={onClose} | |
| className="w-full py-3 rounded-xl font-bold text-sm text-gray-500 hover:bg-gray-50 transition-colors" | |
| > | |
| متوجه شدم، فعلا نه | |
| </button> | |
| </div> | |
| <div className="mt-4 flex items-center justify-center gap-2 opacity-60"> | |
| <i className="fas fa-infinity text-amber-500"></i> | |
| <span className="text-[10px] text-gray-400">دسترسی نامحدود با ارتقای حساب</span> | |
| </div> | |
| </div> | |
| </div> | |
| ); | |
| }; | |
| export default UpgradeModal; | |