@armoyu/ui 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app/Providers.d.ts +6 -0
- package/dist/app/Providers.d.ts.map +1 -0
- package/dist/app/Providers.js +37 -0
- package/dist/app/Providers.js.map +1 -0
- package/dist/app/api/proxy/[...path]/route.d.ts +22 -0
- package/dist/app/api/proxy/[...path]/route.d.ts.map +1 -0
- package/dist/app/api/proxy/[...path]/route.js +97 -0
- package/dist/app/api/proxy/[...path]/route.js.map +1 -0
- package/dist/app/layout.d.ts.map +1 -1
- package/dist/app/layout.js +16 -23
- package/dist/app/layout.js.map +1 -1
- package/dist/components/RollingNumber.d.ts +6 -6
- package/dist/components/RollingNumber.js +23 -23
- package/dist/components/RollingNumber.js.map +1 -1
- package/dist/components/StatsGrid.d.ts +5 -5
- package/dist/components/modules/auth/Dashboard.d.ts +1 -1
- package/dist/components/modules/auth/PostCard.d.ts +25 -24
- package/dist/components/modules/auth/PostCard.d.ts.map +1 -1
- package/dist/components/modules/auth/PostCard.js +115 -112
- package/dist/components/modules/auth/PostCard.js.map +1 -1
- package/dist/components/modules/auth/PostInteractionsModal.d.ts +11 -11
- package/dist/components/modules/auth/RepostModal.d.ts +21 -21
- package/dist/components/modules/auth/SidebarLeft.d.ts +1 -1
- package/dist/components/modules/auth/SidebarLeft.d.ts.map +1 -1
- package/dist/components/modules/auth/SidebarLeft.js +8 -40
- package/dist/components/modules/auth/SidebarLeft.js.map +1 -1
- package/dist/components/modules/auth/Stories.d.ts +1 -1
- package/dist/components/modules/auth/StoryViewer.d.ts +9 -9
- package/dist/components/modules/auth/widgets/EconomyWidget.d.ts +2 -0
- package/dist/components/modules/auth/widgets/EconomyWidget.d.ts.map +1 -0
- package/dist/components/modules/auth/widgets/EconomyWidget.js +38 -0
- package/dist/components/modules/auth/widgets/EconomyWidget.js.map +1 -0
- package/dist/components/modules/auth/widgets/LeagueWidget.d.ts +2 -0
- package/dist/components/modules/auth/widgets/LeagueWidget.d.ts.map +1 -0
- package/dist/components/modules/auth/widgets/LeagueWidget.js +36 -0
- package/dist/components/modules/auth/widgets/LeagueWidget.js.map +1 -0
- package/dist/components/modules/auth/widgets/MinecraftWidget.d.ts +2 -0
- package/dist/components/modules/auth/widgets/MinecraftWidget.d.ts.map +1 -0
- package/dist/components/modules/auth/widgets/MinecraftWidget.js +36 -0
- package/dist/components/modules/auth/widgets/MinecraftWidget.js.map +1 -0
- package/dist/components/modules/auth/widgets/RankingWidget.d.ts +5 -0
- package/dist/components/modules/auth/widgets/RankingWidget.d.ts.map +1 -0
- package/dist/components/modules/auth/widgets/RankingWidget.js +79 -0
- package/dist/components/modules/auth/widgets/RankingWidget.js.map +1 -0
- package/dist/components/modules/chat/ChatContainer.d.ts +1 -1
- package/dist/components/modules/chat/ChatInput.d.ts +4 -4
- package/dist/components/modules/chat/ChatList.d.ts +6 -6
- package/dist/components/modules/chat/ChatNotes.d.ts +1 -1
- package/dist/components/modules/community/GroupHeader.d.ts +10 -10
- package/dist/components/modules/community/GroupMenu.d.ts +9 -9
- package/dist/components/modules/community/SchoolCard.d.ts +6 -6
- package/dist/components/modules/community/SurveyCard.d.ts +6 -6
- package/dist/components/modules/forum/ForumBoard.d.ts +16 -16
- package/dist/components/modules/forum/ForumBoard.js +6 -6
- package/dist/components/modules/forum/ForumBoard.js.map +1 -1
- package/dist/components/modules/forum/TopicItem.d.ts +15 -15
- package/dist/components/modules/forum/TopicItem.js +6 -6
- package/dist/components/modules/forum/TopicItem.js.map +1 -1
- package/dist/components/modules/guest/Introduction.d.ts +1 -1
- package/dist/components/modules/magaza/BackToStore.d.ts +1 -1
- package/dist/components/modules/magaza/StoreHeader.d.ts +5 -5
- package/dist/components/modules/news/NewsCard.d.ts +11 -11
- package/dist/components/modules/news/NewsComments.d.ts +1 -1
- package/dist/components/modules/profile/ProfileContent.d.ts +4 -4
- package/dist/components/modules/profile/ProfileContent.d.ts.map +1 -1
- package/dist/components/modules/profile/ProfileContent.js +98 -70
- package/dist/components/modules/profile/ProfileContent.js.map +1 -1
- package/dist/components/modules/profile/ProfileHeader.d.ts +7 -7
- package/dist/components/modules/profile/ProfileHeader.js +19 -19
- package/dist/components/modules/profile/ProfileHeader.js.map +1 -1
- package/dist/components/modules/profile/ProfileStats.d.ts +6 -1
- package/dist/components/modules/profile/ProfileStats.d.ts.map +1 -1
- package/dist/components/modules/profile/ProfileStats.js +11 -6
- package/dist/components/modules/profile/ProfileStats.js.map +1 -1
- package/dist/components/modules/profile/TeamSelectorModal.d.ts +10 -10
- package/dist/components/modules/profile/tabs/AboutTab.d.ts +10 -0
- package/dist/components/modules/profile/tabs/AboutTab.d.ts.map +1 -0
- package/dist/components/modules/profile/tabs/AboutTab.js +9 -0
- package/dist/components/modules/profile/tabs/AboutTab.js.map +1 -0
- package/dist/components/modules/profile/tabs/CareerTab.d.ts +7 -0
- package/dist/components/modules/profile/tabs/CareerTab.d.ts.map +1 -0
- package/dist/components/modules/profile/tabs/CareerTab.js +46 -0
- package/dist/components/modules/profile/tabs/CareerTab.js.map +1 -0
- package/dist/components/modules/profile/tabs/FriendsTab.d.ts +7 -0
- package/dist/components/modules/profile/tabs/FriendsTab.d.ts.map +1 -0
- package/dist/components/modules/profile/tabs/FriendsTab.js +8 -0
- package/dist/components/modules/profile/tabs/FriendsTab.js.map +1 -0
- package/dist/components/modules/profile/tabs/GamesTab.d.ts +7 -0
- package/dist/components/modules/profile/tabs/GamesTab.d.ts.map +1 -0
- package/dist/components/modules/profile/tabs/GamesTab.js +37 -0
- package/dist/components/modules/profile/tabs/GamesTab.js.map +1 -0
- package/dist/components/modules/profile/tabs/PostsTab.d.ts +7 -0
- package/dist/components/modules/profile/tabs/PostsTab.d.ts.map +1 -0
- package/dist/components/modules/profile/tabs/PostsTab.js +81 -0
- package/dist/components/modules/profile/tabs/PostsTab.js.map +1 -0
- package/dist/components/modules/profile/widgets/ProfileBadgesWidget.d.ts +2 -0
- package/dist/components/modules/profile/widgets/ProfileBadgesWidget.d.ts.map +1 -0
- package/dist/components/modules/profile/widgets/ProfileBadgesWidget.js +6 -0
- package/dist/components/modules/profile/widgets/ProfileBadgesWidget.js.map +1 -0
- package/dist/components/modules/profile/widgets/ProfileCloudWidget.d.ts +6 -0
- package/dist/components/modules/profile/widgets/ProfileCloudWidget.d.ts.map +1 -0
- package/dist/components/modules/profile/widgets/ProfileCloudWidget.js +6 -0
- package/dist/components/modules/profile/widgets/ProfileCloudWidget.js.map +1 -0
- package/dist/components/modules/profile/widgets/ProfileFriendsWidget.d.ts +8 -0
- package/dist/components/modules/profile/widgets/ProfileFriendsWidget.d.ts.map +1 -0
- package/dist/components/modules/profile/widgets/ProfileFriendsWidget.js +12 -0
- package/dist/components/modules/profile/widgets/ProfileFriendsWidget.js.map +1 -0
- package/dist/components/modules/stations/StationCard.d.ts +2 -2
- package/dist/components/modules/stations/StationQRModal.d.ts +9 -9
- package/dist/components/shared/DevTools.d.ts +2 -0
- package/dist/components/shared/DevTools.d.ts.map +1 -0
- package/dist/components/shared/DevTools.js +39 -0
- package/dist/components/shared/DevTools.js.map +1 -0
- package/dist/components/shared/FloatingChatButton.d.ts +4 -4
- package/dist/components/shared/Header.d.ts +1 -1
- package/dist/components/shared/Header.d.ts.map +1 -1
- package/dist/components/shared/Header.js +108 -97
- package/dist/components/shared/Header.js.map +1 -1
- package/dist/components/shared/LoginModal.d.ts +4 -4
- package/dist/components/shared/LoginModal.d.ts.map +1 -1
- package/dist/components/shared/LoginModal.js +65 -69
- package/dist/components/shared/LoginModal.js.map +1 -1
- package/dist/components/shared/MainLayoutWrapper.d.ts +3 -3
- package/dist/components/showcase/ProfileTab.d.ts.map +1 -1
- package/dist/components/showcase/ProfileTab.js +43 -3
- package/dist/components/showcase/ProfileTab.js.map +1 -1
- package/dist/components/showcase/SocialTab.d.ts.map +1 -1
- package/dist/components/showcase/SocialTab.js +86 -2
- package/dist/components/showcase/SocialTab.js.map +1 -1
- package/dist/context/ArmoyuContext.d.ts +42 -0
- package/dist/context/ArmoyuContext.d.ts.map +1 -0
- package/dist/context/ArmoyuContext.js +76 -0
- package/dist/context/ArmoyuContext.js.map +1 -0
- package/dist/context/AuthContext.d.ts +18 -18
- package/dist/context/AuthContext.d.ts.map +1 -1
- package/dist/context/AuthContext.js +97 -74
- package/dist/context/AuthContext.js.map +1 -1
- package/dist/context/CartContext.d.ts +16 -16
- package/dist/context/SocketContext.d.ts +12 -12
- package/dist/context/SocketContext.d.ts.map +1 -1
- package/dist/context/SocketContext.js +31 -30
- package/dist/context/SocketContext.js.map +1 -1
- package/dist/index.d.ts +67 -65
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +83 -80
- package/dist/index.js.map +1 -1
- package/dist/lib/ArmoyuUI.d.ts +18 -0
- package/dist/lib/ArmoyuUI.d.ts.map +1 -0
- package/dist/lib/ArmoyuUI.js +25 -0
- package/dist/lib/ArmoyuUI.js.map +1 -0
- package/dist/lib/constants/educationData.d.ts +7 -7
- package/dist/lib/constants/seedData.d.ts +164 -164
- package/dist/lib/constants/seedData.d.ts.map +1 -1
- package/dist/lib/constants/seedData.js +694 -694
- package/dist/lib/constants/seedData.js.map +1 -1
- package/dist/lib/constants/stationData.d.ts +13 -13
- package/dist/lib/constants/stationData.js +166 -166
- package/dist/lib/constants/stationData.js.map +1 -1
- package/dist/lib/constants/surveyData.d.ts +2 -2
- package/dist/lib/constants/teamData.d.ts +12 -12
- package/package.json +14 -12
- package/next.config.ts +0 -13
- package/postcss.config.js +0 -6
- package/src/app/layout.tsx +0 -67
- package/src/app/page.tsx +0 -101
- package/src/components/Button.tsx +0 -41
- package/src/components/GenderStatsBar.tsx +0 -66
- package/src/components/RollingNumber.tsx +0 -50
- package/src/components/Slider.tsx +0 -114
- package/src/components/StatsGrid.tsx +0 -35
- package/src/components/ViewModeToggle.tsx +0 -39
- package/src/components/modules/auth/Dashboard.tsx +0 -649
- package/src/components/modules/auth/MediaLightbox.tsx +0 -112
- package/src/components/modules/auth/PostCard.tsx +0 -556
- package/src/components/modules/auth/PostInteractionsModal.tsx +0 -138
- package/src/components/modules/auth/RepostModal.tsx +0 -167
- package/src/components/modules/auth/SidebarLeft.tsx +0 -237
- package/src/components/modules/auth/Stories.tsx +0 -69
- package/src/components/modules/auth/StoryViewer.tsx +0 -146
- package/src/components/modules/chat/ChatContainer.tsx +0 -332
- package/src/components/modules/chat/ChatInput.tsx +0 -57
- package/src/components/modules/chat/ChatList.tsx +0 -179
- package/src/components/modules/chat/ChatMessage.tsx +0 -43
- package/src/components/modules/chat/ChatNotes.tsx +0 -58
- package/src/components/modules/community/GroupHeader.tsx +0 -111
- package/src/components/modules/community/GroupMenu.tsx +0 -82
- package/src/components/modules/community/SchoolCard.tsx +0 -104
- package/src/components/modules/community/SurveyCard.tsx +0 -149
- package/src/components/modules/forum/ForumBoard.tsx +0 -78
- package/src/components/modules/forum/ForumPost.tsx +0 -71
- package/src/components/modules/forum/NewTopicModal.tsx +0 -112
- package/src/components/modules/forum/TopicItem.tsx +0 -72
- package/src/components/modules/galleries/GalleryCard.tsx +0 -66
- package/src/components/modules/giveaways/GiveawayCard.tsx +0 -76
- package/src/components/modules/groups/ApplicationModal.tsx +0 -133
- package/src/components/modules/groups/GroupCard.tsx +0 -96
- package/src/components/modules/guest/Introduction.tsx +0 -60
- package/src/components/modules/magaza/BackToStore.tsx +0 -53
- package/src/components/modules/magaza/StoreHeader.tsx +0 -74
- package/src/components/modules/news/NewsCard.tsx +0 -66
- package/src/components/modules/news/NewsComments.tsx +0 -141
- package/src/components/modules/profile/CloudStorageModal.tsx +0 -200
- package/src/components/modules/profile/EditProfileModal.tsx +0 -191
- package/src/components/modules/profile/ProfileContent.tsx +0 -491
- package/src/components/modules/profile/ProfileHeader.tsx +0 -128
- package/src/components/modules/profile/ProfileStats.tsx +0 -72
- package/src/components/modules/profile/TeamSelectorModal.tsx +0 -129
- package/src/components/modules/stations/StationCard.tsx +0 -95
- package/src/components/modules/stations/StationQRModal.tsx +0 -102
- package/src/components/shared/FloatingChatButton.tsx +0 -57
- package/src/components/shared/Footer.tsx +0 -77
- package/src/components/shared/Header.tsx +0 -799
- package/src/components/shared/LoginModal.tsx +0 -208
- package/src/components/shared/MainLayoutWrapper.tsx +0 -15
- package/src/components/shared/PageWidth.tsx +0 -22
- package/src/components/showcase/CommunityTab.tsx +0 -22
- package/src/components/showcase/CorporateTab.tsx +0 -38
- package/src/components/showcase/GeneralTab.tsx +0 -41
- package/src/components/showcase/MessagesTab.tsx +0 -26
- package/src/components/showcase/ProfileTab.tsx +0 -20
- package/src/components/showcase/ShopTab.tsx +0 -24
- package/src/components/showcase/SocialTab.tsx +0 -28
- package/src/context/AuthContext.tsx +0 -104
- package/src/context/CartContext.tsx +0 -93
- package/src/context/ChatContext.tsx +0 -32
- package/src/context/LayoutContext.tsx +0 -29
- package/src/context/SocketContext.tsx +0 -50
- package/src/context/ThemeContext.tsx +0 -52
- package/src/index.ts +0 -96
- package/src/lib/constants/educationData.ts +0 -124
- package/src/lib/constants/punishmentData.ts +0 -201
- package/src/lib/constants/seedData.ts +0 -758
- package/src/lib/constants/stationData.ts +0 -170
- package/src/lib/constants/surveyData.ts +0 -53
- package/src/lib/constants/teamData.ts +0 -69
- package/src/lib/utils/numberFormat.ts +0 -16
- package/src/lib/utils/odpUtils.ts +0 -51
- package/src/types/index.ts +0 -1
- package/src/types/stats.ts +0 -17
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import React, { useEffect } from 'react';
|
|
4
|
-
|
|
5
|
-
interface ApplicationModalProps {
|
|
6
|
-
isOpen: boolean;
|
|
7
|
-
onClose: () => void;
|
|
8
|
-
selectedRole?: string;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
const ACTIVE_ROLES = [
|
|
12
|
-
"Genel Başvuru",
|
|
13
|
-
"Yazılım Geliştirici",
|
|
14
|
-
"Grafik Tasarımcı",
|
|
15
|
-
"Sosyal Medya Sorumlusu",
|
|
16
|
-
"Oyun Yetkilisi",
|
|
17
|
-
"Yayıncı",
|
|
18
|
-
"E-Spor Oyuncusu",
|
|
19
|
-
"Moderatör"
|
|
20
|
-
];
|
|
21
|
-
|
|
22
|
-
export function ApplicationModal({ isOpen, onClose, selectedRole }: ApplicationModalProps) {
|
|
23
|
-
// ESC tuşu ile kapatma
|
|
24
|
-
useEffect(() => {
|
|
25
|
-
const handleEsc = (e: KeyboardEvent) => {
|
|
26
|
-
if (e.key === 'Escape') onClose();
|
|
27
|
-
};
|
|
28
|
-
window.addEventListener('keydown', handleEsc);
|
|
29
|
-
return () => window.removeEventListener('keydown', handleEsc);
|
|
30
|
-
}, [onClose]);
|
|
31
|
-
|
|
32
|
-
if (!isOpen) return null;
|
|
33
|
-
|
|
34
|
-
return (
|
|
35
|
-
<div className="fixed inset-0 z-[100] flex items-center justify-center p-4">
|
|
36
|
-
{/* Backdrop */}
|
|
37
|
-
<div
|
|
38
|
-
className="absolute inset-0 bg-[#0a0a0f]/90 backdrop-blur-xl animate-in fade-in duration-500"
|
|
39
|
-
onClick={onClose}
|
|
40
|
-
/>
|
|
41
|
-
|
|
42
|
-
{/* Modal Content */}
|
|
43
|
-
<div className="relative w-full max-w-xl glass-panel bg-armoyu-card-bg border border-armoyu-card-border rounded-[40px] shadow-[0_32px_120px_rgba(0,0,0,0.6)] overflow-hidden animate-in zoom-in-95 fade-in duration-500">
|
|
44
|
-
|
|
45
|
-
{/* Glow Effects */}
|
|
46
|
-
<div className="absolute top-0 right-0 w-64 h-64 bg-blue-600/10 blur-[100px] rounded-full -mr-32 -mt-32 pointer-events-none" />
|
|
47
|
-
<div className="absolute bottom-0 left-0 w-48 h-48 bg-blue-400/5 blur-[80px] rounded-full -ml-24 -mb-24 pointer-events-none" />
|
|
48
|
-
|
|
49
|
-
{/* Header */}
|
|
50
|
-
<div className="p-10 pb-8 border-b border-armoyu-card-border flex items-start justify-between relative z-10">
|
|
51
|
-
<div>
|
|
52
|
-
<h2 className="text-3xl font-black text-armoyu-text uppercase tracking-tighter italic leading-none">EKİP BAŞVURUSU</h2>
|
|
53
|
-
<div className="flex items-center gap-2 mt-3">
|
|
54
|
-
<span className="w-2 h-2 rounded-full bg-blue-500 animate-pulse shadow-[0_0_8px_rgba(59,130,246,0.8)]" />
|
|
55
|
-
<p className="text-[10px] font-black text-blue-500 uppercase tracking-[0.2em]">
|
|
56
|
-
ARMOYU AKADEMİSİNE HOŞ GELDİNİZ
|
|
57
|
-
</p>
|
|
58
|
-
</div>
|
|
59
|
-
</div>
|
|
60
|
-
<button
|
|
61
|
-
onClick={onClose}
|
|
62
|
-
className="w-12 h-12 rounded-2xl bg-black/5 dark:bg-white/5 border border-armoyu-card-border flex items-center justify-center hover:bg-red-500 hover:text-white hover:border-red-500 transition-all group active:scale-90"
|
|
63
|
-
>
|
|
64
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="3" className="group-hover:rotate-90 transition-transform"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg>
|
|
65
|
-
</button>
|
|
66
|
-
</div>
|
|
67
|
-
|
|
68
|
-
{/* Form Body */}
|
|
69
|
-
<form className="p-10 pt-8 space-y-8 relative z-10" onSubmit={(e) => { e.preventDefault(); alert('Başvurunuz başarıyla alındı!'); onClose(); }}>
|
|
70
|
-
<div className="space-y-6">
|
|
71
|
-
|
|
72
|
-
{/* Pozisyon Seçimi */}
|
|
73
|
-
<div className="space-y-2.5">
|
|
74
|
-
<label className="text-[10px] font-black uppercase tracking-widest text-armoyu-text-muted ml-1 flex items-center gap-2">
|
|
75
|
-
<span className="w-1.5 h-1.5 rounded-full bg-blue-500/50" />
|
|
76
|
-
Pozisyon (Aktif İlanlar)
|
|
77
|
-
</label>
|
|
78
|
-
<div className="relative group">
|
|
79
|
-
<select
|
|
80
|
-
defaultValue={selectedRole || "Genel Başvuru"}
|
|
81
|
-
className="w-full bg-black/10 dark:bg-black/20 border border-armoyu-card-border rounded-2xl px-6 py-4 text-armoyu-text focus:outline-none focus:border-blue-500/50 focus:ring-1 focus:ring-blue-500/50 transition-all font-black text-sm appearance-none cursor-pointer group-hover:border-armoyu-text-muted/30 uppercase tracking-tight"
|
|
82
|
-
>
|
|
83
|
-
{ACTIVE_ROLES.map(role => (
|
|
84
|
-
<option key={role} value={role} className="bg-[#12121a] text-white py-4">{role}</option>
|
|
85
|
-
))}
|
|
86
|
-
</select>
|
|
87
|
-
<div className="absolute right-6 top-1/2 -translate-y-1/2 pointer-events-none text-armoyu-text-muted transition-transform group-hover:translate-y-[-40%]">
|
|
88
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="3" strokeLinecap="round" strokeLinejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>
|
|
89
|
-
</div>
|
|
90
|
-
</div>
|
|
91
|
-
</div>
|
|
92
|
-
|
|
93
|
-
{/* Kişisel Bilgiler Grid */}
|
|
94
|
-
<div className="grid grid-cols-1 md:grid-cols-2 gap-6">
|
|
95
|
-
<div className="space-y-2.5">
|
|
96
|
-
<label className="text-[10px] font-black uppercase tracking-widest text-armoyu-text-muted ml-1">AD SOYAD</label>
|
|
97
|
-
<input required type="text" className="w-full bg-black/10 dark:bg-black/20 border border-armoyu-card-border rounded-2xl px-6 py-4 text-armoyu-text placeholder:text-armoyu-text-muted/40 focus:outline-none focus:border-blue-500/50 focus:ring-1 focus:ring-blue-500/50 transition-all font-bold text-sm uppercase tracking-tight" placeholder="Örn: Berkay Tikenoğlu" />
|
|
98
|
-
</div>
|
|
99
|
-
<div className="space-y-2.5">
|
|
100
|
-
<label className="text-[10px] font-black uppercase tracking-widest text-armoyu-text-muted ml-1">YAŞ</label>
|
|
101
|
-
<input required type="number" min="13" max="99" className="w-full bg-black/10 dark:bg-black/20 border border-armoyu-card-border rounded-2xl px-6 py-4 text-armoyu-text focus:outline-none focus:border-blue-500/50 focus:ring-1 focus:ring-blue-500/50 transition-all font-bold text-sm" placeholder="Örn: 24" />
|
|
102
|
-
</div>
|
|
103
|
-
</div>
|
|
104
|
-
|
|
105
|
-
<div className="space-y-2.5">
|
|
106
|
-
<label className="text-[10px] font-black uppercase tracking-widest text-armoyu-text-muted ml-1">E-POSTA ADRESİ</label>
|
|
107
|
-
<input required type="email" className="w-full bg-black/10 dark:bg-black/20 border border-armoyu-card-border rounded-2xl px-6 py-4 text-armoyu-text placeholder:text-armoyu-text-muted/40 focus:outline-none focus:border-blue-500/50 focus:ring-1 focus:ring-blue-500/50 transition-all font-bold text-sm" placeholder="ornek@armoyu.com" />
|
|
108
|
-
</div>
|
|
109
|
-
|
|
110
|
-
<div className="space-y-2.5">
|
|
111
|
-
<label className="text-[10px] font-black uppercase tracking-widest text-armoyu-text-muted ml-1">TECRÜBELER & KENDİNDEN BAHSET</label>
|
|
112
|
-
<textarea required rows={4} className="w-full bg-black/10 dark:bg-black/20 border border-armoyu-card-border rounded-2xl px-6 py-4 text-armoyu-text placeholder:text-armoyu-text-muted/40 focus:outline-none focus:border-blue-500/50 focus:ring-1 focus:ring-blue-500/50 transition-all font-medium text-sm no-scrollbar resize-none leading-relaxed" placeholder="Neden sizi aramıza almalıyız? İlgili tecrübeleriniz nelerdir?.." />
|
|
113
|
-
</div>
|
|
114
|
-
</div>
|
|
115
|
-
|
|
116
|
-
<div className="pt-4">
|
|
117
|
-
<button className="w-full py-5 bg-blue-600 hover:bg-blue-500 text-white font-black text-xs uppercase tracking-[0.2em] rounded-2xl shadow-2xl shadow-blue-600/20 transition-all active:scale-95 relative overflow-hidden group/btn">
|
|
118
|
-
<div className="absolute inset-0 bg-gradient-to-r from-transparent via-white/10 to-transparent -translate-x-full group-hover/btn:translate-x-full transition-transform duration-1000" />
|
|
119
|
-
BAŞVURUYU TAMAMLA
|
|
120
|
-
</button>
|
|
121
|
-
</div>
|
|
122
|
-
|
|
123
|
-
<div className="flex items-center gap-3 p-4 bg-blue-500/5 border border-blue-500/10 rounded-2xl">
|
|
124
|
-
<div className="w-1.5 h-full bg-blue-500 rounded-full" />
|
|
125
|
-
<p className="text-[9px] text-armoyu-text-muted uppercase tracking-widest leading-relaxed font-bold">
|
|
126
|
-
Başvurunuz incelendikten sonra e-posta ve SMS yoluyla tarafınıza bilgilendirme yapılacaktır. Lütfen bilgilerin doğruluğundan emin olun. ✨
|
|
127
|
-
</p>
|
|
128
|
-
</div>
|
|
129
|
-
</form>
|
|
130
|
-
</div>
|
|
131
|
-
</div>
|
|
132
|
-
);
|
|
133
|
-
}
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import React from 'react';
|
|
4
|
-
import Link from 'next/link';
|
|
5
|
-
|
|
6
|
-
export interface GroupCardProps {
|
|
7
|
-
name: string;
|
|
8
|
-
shortName: string;
|
|
9
|
-
description: string;
|
|
10
|
-
recruitment: string;
|
|
11
|
-
date: string;
|
|
12
|
-
category: string;
|
|
13
|
-
tag: string;
|
|
14
|
-
banner: string;
|
|
15
|
-
logo: string;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export function GroupCard({
|
|
19
|
-
name,
|
|
20
|
-
shortName,
|
|
21
|
-
description,
|
|
22
|
-
recruitment,
|
|
23
|
-
date,
|
|
24
|
-
category,
|
|
25
|
-
tag,
|
|
26
|
-
banner,
|
|
27
|
-
logo
|
|
28
|
-
}: GroupCardProps) {
|
|
29
|
-
return (
|
|
30
|
-
<div className="group relative glass-panel rounded-3xl overflow-hidden border border-armoyu-card-border bg-armoyu-card-bg shadow-sm hover:shadow-xl hover:scale-[1.01] transition-all duration-300">
|
|
31
|
-
|
|
32
|
-
{/* Banner */}
|
|
33
|
-
<div className="h-32 w-full relative overflow-hidden">
|
|
34
|
-
<img
|
|
35
|
-
src={banner}
|
|
36
|
-
alt={name}
|
|
37
|
-
className="w-full h-full object-cover group-hover:scale-110 transition-transform duration-700"
|
|
38
|
-
/>
|
|
39
|
-
<div className="absolute inset-0 bg-gradient-to-t from-black/60 to-transparent" />
|
|
40
|
-
|
|
41
|
-
{/* Kategori Badge */}
|
|
42
|
-
<div className="absolute top-4 right-4 bg-white/10 backdrop-blur-md border border-white/20 px-3 py-1 rounded-full text-[10px] font-black text-white uppercase tracking-wider">
|
|
43
|
-
{category}
|
|
44
|
-
</div>
|
|
45
|
-
</div>
|
|
46
|
-
|
|
47
|
-
{/* Profil/Logo & Bilgi */}
|
|
48
|
-
<div className="px-5 pb-6 relative">
|
|
49
|
-
<div className="relative -mt-10 mb-4 inline-block">
|
|
50
|
-
<img
|
|
51
|
-
src={logo}
|
|
52
|
-
alt="Logo"
|
|
53
|
-
className="w-20 h-20 rounded-2xl border-4 border-armoyu-bg bg-white dark:bg-zinc-900 object-cover shadow-lg"
|
|
54
|
-
/>
|
|
55
|
-
<div className="absolute -bottom-1 -right-1 w-6 h-6 bg-blue-500 rounded-full border-2 border-armoyu-bg flex items-center justify-center text-white">
|
|
56
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="3"><polyline points="20 6 9 17 4 12"></polyline></svg>
|
|
57
|
-
</div>
|
|
58
|
-
</div>
|
|
59
|
-
|
|
60
|
-
<div className="flex items-center justify-between mb-2">
|
|
61
|
-
<div>
|
|
62
|
-
<h3 className="text-xl font-black text-armoyu-text group-hover:text-blue-500 transition-colors uppercase tracking-tight">{name}</h3>
|
|
63
|
-
<span className="text-xs font-bold text-blue-500 bg-blue-500/10 px-2 py-0.5 rounded-md">@{shortName}</span>
|
|
64
|
-
</div>
|
|
65
|
-
<div className="text-right">
|
|
66
|
-
<span className="block text-emerald-500 text-xs font-black uppercase tracking-widest">{recruitment}</span>
|
|
67
|
-
</div>
|
|
68
|
-
</div>
|
|
69
|
-
|
|
70
|
-
<p className="text-sm text-armoyu-text-muted font-medium line-clamp-2 min-h-[40px] mb-5">
|
|
71
|
-
{description}
|
|
72
|
-
</p>
|
|
73
|
-
|
|
74
|
-
{/* Detay Satırı */}
|
|
75
|
-
<div className="grid grid-cols-2 gap-3 mb-5">
|
|
76
|
-
<div className="flex items-center gap-2 p-2 rounded-xl bg-black/5 dark:bg-white/5 border border-black/5 dark:border-white/5">
|
|
77
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" className="text-armoyu-text-muted opacity-60"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>
|
|
78
|
-
<span className="text-[11px] font-bold text-armoyu-text-muted">{date}</span>
|
|
79
|
-
</div>
|
|
80
|
-
<div className="flex items-center gap-2 p-2 rounded-xl bg-black/5 dark:bg-white/5 border border-black/5 dark:border-white/5">
|
|
81
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" className="text-armoyu-text-muted opacity-60"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"></path><polyline points="3.27 6.96 12 12.01 20.73 6.96"></polyline><line x1="12" y1="22.08" x2="12" y2="12"></line></svg>
|
|
82
|
-
<span className="text-[11px] font-bold text-armoyu-text-muted">{tag}</span>
|
|
83
|
-
</div>
|
|
84
|
-
</div>
|
|
85
|
-
|
|
86
|
-
<Link
|
|
87
|
-
href={`/gruplar/${name.toLowerCase().replace(/\s+/g, '-')}`}
|
|
88
|
-
className="w-full py-3.5 block text-center rounded-2xl bg-gradient-to-r from-blue-600 to-indigo-600 hover:from-blue-500 hover:to-indigo-500 text-white font-black text-xs uppercase tracking-widest shadow-lg shadow-blue-500/20 transform active:scale-95 transition-all"
|
|
89
|
-
>
|
|
90
|
-
Gruba Katıl / Görüntüle
|
|
91
|
-
</Link>
|
|
92
|
-
</div>
|
|
93
|
-
|
|
94
|
-
</div>
|
|
95
|
-
);
|
|
96
|
-
}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { Button } from '../../Button';
|
|
2
|
-
import { Slider } from '../../Slider';
|
|
3
|
-
import { GenderStatsBar } from '../../GenderStatsBar';
|
|
4
|
-
import { StatsGrid } from '../../StatsGrid';
|
|
5
|
-
import { MOCK_NEWS, mockGlobalStats } from "../../../lib/constants/seedData";
|
|
6
|
-
|
|
7
|
-
export function Introduction() {
|
|
8
|
-
return (
|
|
9
|
-
<div className="flex flex-col items-center min-h-[80vh] text-center space-y-16 animate-in fade-in duration-1000 pb-16 pt-4">
|
|
10
|
-
|
|
11
|
-
{/* Hero Slider */}
|
|
12
|
-
<div className="w-full h-[500px] lg:h-[600px]">
|
|
13
|
-
<Slider durationTime={6000} />
|
|
14
|
-
</div>
|
|
15
|
-
|
|
16
|
-
<div className="flex flex-col sm:flex-row gap-4">
|
|
17
|
-
<Button variant="primary" className="h-14 px-10 text-lg rounded-full shadow-lg shadow-blue-500/30">
|
|
18
|
-
Hemen Aramıza Katıl
|
|
19
|
-
</Button>
|
|
20
|
-
<Button variant="secondary" className="h-14 px-10 text-lg rounded-full shadow-lg border-white/20">
|
|
21
|
-
Sosyal Akışı Keşfet
|
|
22
|
-
</Button>
|
|
23
|
-
</div>
|
|
24
|
-
|
|
25
|
-
<div className="grid grid-cols-1 md:grid-cols-3 gap-6 w-full max-w-5xl text-left relative z-10">
|
|
26
|
-
{[
|
|
27
|
-
{ title: 'Topluluk', desc: 'Binlerce oyuncuyla tanışın ve ekipler kurun.' },
|
|
28
|
-
{ title: 'Forum', desc: 'Oyunlar hakkında tartışın, rehberler oluşturun.' },
|
|
29
|
-
{ title: 'Minecraft', desc: 'mc.armoyu.com adresinden sunucumuza katılın.' }
|
|
30
|
-
].map((feature, i) => (
|
|
31
|
-
<div key={i} className="glass-panel p-6 rounded-3xl hover:-translate-y-2 transition-transform duration-300 border border-white/5 shadow-xl">
|
|
32
|
-
<h3 className="text-xl font-bold mb-2 text-white">{feature.title}</h3>
|
|
33
|
-
<p className="text-gray-400 leading-relaxed">{feature.desc}</p>
|
|
34
|
-
</div>
|
|
35
|
-
))}
|
|
36
|
-
</div>
|
|
37
|
-
|
|
38
|
-
{/* Topluluk Dağılımı ve İstatistikleri */}
|
|
39
|
-
<div className="w-full max-w-5xl mt-12 glass-panel p-8 md:p-12 rounded-3xl border border-white/5 relative z-10 shadow-2xl flex flex-col gap-10">
|
|
40
|
-
|
|
41
|
-
{/* Gender Stats */}
|
|
42
|
-
<div>
|
|
43
|
-
<h3 className="text-2xl md:text-3xl font-bold text-white mb-2 text-center">Topluluk Demografisi</h3>
|
|
44
|
-
<p className="text-gray-400 text-center mb-10 max-w-2xl mx-auto">
|
|
45
|
-
Zengin ve çeşitli oyuncu ekosistemimizde her geçen gün birlikte daha büyük projelere ve eğlencelere imza atıyoruz.
|
|
46
|
-
</p>
|
|
47
|
-
<GenderStatsBar maleCount={mockGlobalStats.malePlayers} femaleCount={mockGlobalStats.femalePlayers} />
|
|
48
|
-
</div>
|
|
49
|
-
|
|
50
|
-
{/* Global Stats Grid */}
|
|
51
|
-
<div className="border-t border-white/10 pt-10">
|
|
52
|
-
<h3 className="text-xl md:text-2xl font-bold text-white mb-6 text-left">Genel İstatistikler</h3>
|
|
53
|
-
<StatsGrid stats={mockGlobalStats} />
|
|
54
|
-
</div>
|
|
55
|
-
|
|
56
|
-
</div>
|
|
57
|
-
|
|
58
|
-
</div>
|
|
59
|
-
);
|
|
60
|
-
}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import React, { useState } from 'react';
|
|
4
|
-
import Link from 'next/link';
|
|
5
|
-
import { useCart } from '../../../context/CartContext';
|
|
6
|
-
|
|
7
|
-
export function BackToStore() {
|
|
8
|
-
const [searchQuery, setSearchQuery] = useState('');
|
|
9
|
-
const { totalItems } = useCart();
|
|
10
|
-
|
|
11
|
-
return (
|
|
12
|
-
<div className="mb-10 flex flex-col sm:flex-row sm:items-center justify-between gap-6 animate-in fade-in slide-in-from-top-4 duration-500 bg-black/5 dark:bg-white/5 p-4 rounded-[32px] border border-black/10 dark:border-white/10 backdrop-blur-md">
|
|
13
|
-
|
|
14
|
-
{/* Back Button */}
|
|
15
|
-
<Link
|
|
16
|
-
href="/magaza"
|
|
17
|
-
className="inline-flex items-center gap-3 px-6 py-3 bg-blue-600 text-white rounded-2xl font-black text-[10px] uppercase tracking-widest group transition-all shadow-xl shadow-blue-500/20 active:scale-95 shrink-0"
|
|
18
|
-
>
|
|
19
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="3" strokeLinecap="round" strokeLinejoin="round" className="group-hover:-translate-x-1.5 transition-transform duration-300">
|
|
20
|
-
<polyline points="15 18 9 12 15 6"></polyline>
|
|
21
|
-
</svg>
|
|
22
|
-
<span>MAĞAZA ANA SAYFA</span>
|
|
23
|
-
</Link>
|
|
24
|
-
|
|
25
|
-
<div className="flex items-center gap-4 flex-1 justify-end">
|
|
26
|
-
{/* Compact Search */}
|
|
27
|
-
<div className="relative group max-w-[300px] flex-1">
|
|
28
|
-
<div className="absolute inset-y-0 left-4 flex items-center pointer-events-none text-armoyu-text-muted group-focus-within:text-blue-500 transition-colors">
|
|
29
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line></svg>
|
|
30
|
-
</div>
|
|
31
|
-
<input
|
|
32
|
-
type="text"
|
|
33
|
-
placeholder="Ürün ara..."
|
|
34
|
-
value={searchQuery}
|
|
35
|
-
onChange={(e) => setSearchQuery(e.target.value)}
|
|
36
|
-
className="w-full bg-black/10 dark:bg-black/40 border border-transparent focus:border-blue-500/50 rounded-xl pl-11 pr-4 py-3 text-xs font-bold text-armoyu-text placeholder:text-armoyu-text-muted focus:outline-none transition-all"
|
|
37
|
-
/>
|
|
38
|
-
</div>
|
|
39
|
-
|
|
40
|
-
{/* Cart Link with Badge */}
|
|
41
|
-
<Link href="/magaza/sepet" className="relative p-3 bg-white/10 hover:bg-white/20 text-armoyu-text rounded-xl transition-all active:scale-95 border border-white/5">
|
|
42
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round"><circle cx="9" cy="21" r="1"></circle><circle cx="20" cy="21" r="1"></circle><path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6"></path></svg>
|
|
43
|
-
{totalItems > 0 && (
|
|
44
|
-
<span className="absolute -top-1 -right-1 flex h-5 w-5 items-center justify-center rounded-full bg-red-500 text-[10px] font-black text-white ring-2 ring-[#121216]">
|
|
45
|
-
{totalItems}
|
|
46
|
-
</span>
|
|
47
|
-
)}
|
|
48
|
-
</Link>
|
|
49
|
-
</div>
|
|
50
|
-
|
|
51
|
-
</div>
|
|
52
|
-
);
|
|
53
|
-
}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import React, { useState } from 'react';
|
|
4
|
-
import Link from 'next/link';
|
|
5
|
-
import { useCart } from '../../../context/CartContext';
|
|
6
|
-
import { useAuth } from '../../../context/AuthContext';
|
|
7
|
-
|
|
8
|
-
export interface StoreHeaderProps {
|
|
9
|
-
searchQuery: string;
|
|
10
|
-
setSearchQuery: (query: string) => void;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export function StoreHeader({ searchQuery, setSearchQuery }: StoreHeaderProps) {
|
|
14
|
-
const { totalItems } = useCart();
|
|
15
|
-
|
|
16
|
-
return (
|
|
17
|
-
<div className="mb-12 space-y-8 animate-in fade-in slide-in-from-top-4 duration-500">
|
|
18
|
-
<div className="flex flex-col md:flex-row md:items-end justify-between gap-6">
|
|
19
|
-
<div className="flex-1">
|
|
20
|
-
<p className="text-armoyu-text-muted text-lg max-w-2xl font-medium leading-relaxed opacity-80 mb-2">
|
|
21
|
-
Oyun deneyimini bir üst seviyeye taşı. Özel üyelikler ve lisanslı ürünler burada.
|
|
22
|
-
</p>
|
|
23
|
-
</div>
|
|
24
|
-
|
|
25
|
-
{/* Modular Header Controls */}
|
|
26
|
-
<div className="flex items-center gap-4 shrink-0">
|
|
27
|
-
{/* Search Bar */}
|
|
28
|
-
<div className="relative group flex-1 md:w-80">
|
|
29
|
-
<div className="absolute inset-y-0 left-4 flex items-center pointer-events-none text-armoyu-text-muted group-focus-within:text-blue-500 transition-colors">
|
|
30
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line></svg>
|
|
31
|
-
</div>
|
|
32
|
-
<input
|
|
33
|
-
type="text"
|
|
34
|
-
placeholder="Ürün ara..."
|
|
35
|
-
value={searchQuery}
|
|
36
|
-
onChange={(e) => setSearchQuery(e.target.value)}
|
|
37
|
-
className="w-full bg-white/5 dark:bg-black/20 border border-black/10 dark:border-white/10 rounded-2xl pl-12 pr-4 py-4 text-sm font-bold text-armoyu-text placeholder:text-armoyu-text-muted focus:outline-none focus:border-blue-500 focus:ring-4 focus:ring-blue-500/10 transition-all shadow-inner"
|
|
38
|
-
/>
|
|
39
|
-
</div>
|
|
40
|
-
|
|
41
|
-
{/* My Orders Link */}
|
|
42
|
-
<Link href="/magaza/siparislerim" className="p-4 bg-black/5 dark:bg-white/5 border border-black/10 dark:border-white/10 text-armoyu-text hover:text-blue-500 rounded-2xl transition-all group flex items-center gap-2">
|
|
43
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round"><path d="M6 2L3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4Z"></path><path d="M3 6h18"></path><path d="M16 10a4 4 0 0 1-8 0"></path></svg>
|
|
44
|
-
<span className="text-[10px] font-black uppercase tracking-widest hidden sm:block">Siparişlerim</span>
|
|
45
|
-
</Link>
|
|
46
|
-
|
|
47
|
-
{/* Cart Icon with Badge */}
|
|
48
|
-
<Link href="/magaza/sepet" className="relative p-4 bg-blue-600 hover:bg-blue-500 text-white rounded-2xl transition-all shadow-xl shadow-blue-500/20 active:scale-95 group overflow-hidden">
|
|
49
|
-
<div className="absolute inset-0 bg-gradient-to-tr from-white/20 to-transparent opacity-0 group-hover:opacity-100 transition-opacity" />
|
|
50
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round"><circle cx="9" cy="21" r="1"></circle><circle cx="20" cy="21" r="1"></circle><path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6"></path></svg>
|
|
51
|
-
|
|
52
|
-
{totalItems > 0 && (
|
|
53
|
-
<span className="absolute top-2 right-2 flex h-5 w-5 items-center justify-center rounded-full bg-red-500 text-[10px] font-black text-white ring-2 ring-blue-600 animate-in zoom-in duration-300">
|
|
54
|
-
{totalItems}
|
|
55
|
-
</span>
|
|
56
|
-
)}
|
|
57
|
-
</Link>
|
|
58
|
-
</div>
|
|
59
|
-
</div>
|
|
60
|
-
|
|
61
|
-
{/* Quick Stats / Info under header */}
|
|
62
|
-
<div className="flex flex-wrap gap-4 pt-4">
|
|
63
|
-
<div className="px-4 py-2 bg-black/5 dark:bg-white/5 border border-black/5 dark:border-white/5 rounded-xl flex items-center gap-2">
|
|
64
|
-
<div className="w-2 h-2 rounded-full bg-emerald-500 shadow-[0_0_8px_rgba(16,185,129,0.5)] animate-pulse" />
|
|
65
|
-
<span className="text-[10px] font-black text-armoyu-text-muted uppercase tracking-widest">Sistem Aktif</span>
|
|
66
|
-
</div>
|
|
67
|
-
<div className="px-4 py-2 bg-black/5 dark:bg-white/5 border border-black/5 dark:border-white/5 rounded-xl flex items-center gap-2">
|
|
68
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="3" className="text-blue-500"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"></path><circle cx="12" cy="7" r="4"></circle></svg>
|
|
69
|
-
<span className="text-[10px] font-black text-armoyu-text-muted uppercase tracking-widest">12.4K Aktif Müşteri</span>
|
|
70
|
-
</div>
|
|
71
|
-
</div>
|
|
72
|
-
</div>
|
|
73
|
-
);
|
|
74
|
-
}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import React from 'react';
|
|
4
|
-
import Link from 'next/link';
|
|
5
|
-
import { User } from '@armoyu/core';
|
|
6
|
-
|
|
7
|
-
export interface NewsCardProps {
|
|
8
|
-
slug: string;
|
|
9
|
-
title: string;
|
|
10
|
-
excerpt: string;
|
|
11
|
-
date: string;
|
|
12
|
-
category: string;
|
|
13
|
-
image: string;
|
|
14
|
-
author: User | null;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export function NewsCard({ slug, title, excerpt, date, category, image, author }: NewsCardProps) {
|
|
18
|
-
return (
|
|
19
|
-
<Link href={`/haberler/${slug}`} className="group block">
|
|
20
|
-
<div className="glass-panel rounded-3xl overflow-hidden border border-armoyu-card-border bg-armoyu-card-bg shadow-sm hover:shadow-2xl transition-all duration-500 h-full flex flex-col">
|
|
21
|
-
|
|
22
|
-
{/* Resim */}
|
|
23
|
-
<div className="aspect-video overflow-hidden relative">
|
|
24
|
-
<img
|
|
25
|
-
src={image}
|
|
26
|
-
alt={title}
|
|
27
|
-
className="w-full h-full object-cover group-hover:scale-105 transition-transform duration-700"
|
|
28
|
-
/>
|
|
29
|
-
<div className="absolute top-4 left-4">
|
|
30
|
-
<span className="bg-blue-600 text-white text-[10px] font-black uppercase tracking-widest px-3 py-1.5 rounded-xl shadow-lg shadow-blue-600/20">
|
|
31
|
-
{category}
|
|
32
|
-
</span>
|
|
33
|
-
</div>
|
|
34
|
-
</div>
|
|
35
|
-
|
|
36
|
-
{/* İçerik */}
|
|
37
|
-
<div className="p-6 flex-1 flex flex-col">
|
|
38
|
-
<div className="flex items-center gap-3 mb-3 text-[10px] font-bold text-armoyu-text-muted opacity-60">
|
|
39
|
-
<span className="flex items-center gap-1">
|
|
40
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>
|
|
41
|
-
{date}
|
|
42
|
-
</span>
|
|
43
|
-
<span>•</span>
|
|
44
|
-
<span className="flex items-center gap-1 uppercase tracking-widest text-blue-500 font-black">
|
|
45
|
-
{author?.displayName || 'Armoyu Ekibi'}
|
|
46
|
-
</span>
|
|
47
|
-
</div>
|
|
48
|
-
|
|
49
|
-
<h3 className="text-xl font-black text-armoyu-text group-hover:text-blue-500 transition-colors mb-4 line-clamp-2 leading-tight">
|
|
50
|
-
{title}
|
|
51
|
-
</h3>
|
|
52
|
-
|
|
53
|
-
<p className="text-sm text-armoyu-text-muted font-medium line-clamp-3 mb-6 flex-1 italic">
|
|
54
|
-
"{excerpt}"
|
|
55
|
-
</p>
|
|
56
|
-
|
|
57
|
-
<div className="flex items-center gap-2 text-blue-500 font-black text-xs uppercase tracking-widest group-hover:translate-x-1 transition-transform">
|
|
58
|
-
Devamını Oku
|
|
59
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="3"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg>
|
|
60
|
-
</div>
|
|
61
|
-
</div>
|
|
62
|
-
</div>
|
|
63
|
-
</Link>
|
|
64
|
-
);
|
|
65
|
-
}
|
|
66
|
-
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import React, { useState } from 'react';
|
|
4
|
-
import { userList } from '../../../lib/constants/seedData';
|
|
5
|
-
import { useAuth } from '../../../context/AuthContext';
|
|
6
|
-
import { User } from '@armoyu/core';
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
interface Comment {
|
|
10
|
-
id: string;
|
|
11
|
-
user: User;
|
|
12
|
-
text: string;
|
|
13
|
-
date: string;
|
|
14
|
-
likes: number;
|
|
15
|
-
isLiked?: boolean;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export function NewsComments() {
|
|
19
|
-
const [comments, setComments] = useState<Comment[]>([
|
|
20
|
-
{
|
|
21
|
-
id: '1',
|
|
22
|
-
user: userList.find((u: any) => u.username === 'mythx') || userList[1],
|
|
23
|
-
text: 'V3 gerçekten devrimsel olmuş! Arayüzün hızı inanılmaz. Elinize sağlık ekibi.',
|
|
24
|
-
date: '1 saat önce',
|
|
25
|
-
likes: 12,
|
|
26
|
-
isLiked: false
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
id: '2',
|
|
30
|
-
user: userList.find((u: any) => u.username === 'alperen_admin') || userList[2],
|
|
31
|
-
text: 'Yeni grup sistemini sabırsızlıkla bekliyoruz. Topluluk için harika bir adım.',
|
|
32
|
-
date: '45 dakika önce',
|
|
33
|
-
likes: 8,
|
|
34
|
-
isLiked: true
|
|
35
|
-
}
|
|
36
|
-
]);
|
|
37
|
-
|
|
38
|
-
const [newComment, setNewComment] = useState('');
|
|
39
|
-
|
|
40
|
-
const handleAddComment = () => {
|
|
41
|
-
if (!newComment.trim()) return;
|
|
42
|
-
|
|
43
|
-
const comment: Comment = {
|
|
44
|
-
id: Date.now().toString(),
|
|
45
|
-
user: userList[0], // Berkay (Siz)
|
|
46
|
-
text: newComment,
|
|
47
|
-
date: 'Şimdi',
|
|
48
|
-
likes: 0,
|
|
49
|
-
isLiked: false
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
setComments([comment, ...comments]);
|
|
53
|
-
setNewComment('');
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
const toggleLike = (id: string) => {
|
|
57
|
-
setComments(prev => prev.map(c => {
|
|
58
|
-
if (c.id === id) {
|
|
59
|
-
return {
|
|
60
|
-
...c,
|
|
61
|
-
likes: c.isLiked ? c.likes - 1 : c.likes + 1,
|
|
62
|
-
isLiked: !c.isLiked
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
return c;
|
|
66
|
-
}));
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
return (
|
|
70
|
-
<div className="mt-20 pt-16 border-t border-armoyu-card-border animate-in fade-in slide-in-from-bottom-4 duration-500">
|
|
71
|
-
<h3 className="text-2xl font-black text-armoyu-text uppercase tracking-tighter mb-10 flex items-center gap-3">
|
|
72
|
-
Yorumlar
|
|
73
|
-
<span className="text-sm font-bold bg-blue-600/10 text-blue-500 px-3 py-1 rounded-full">{comments.length}</span>
|
|
74
|
-
</h3>
|
|
75
|
-
|
|
76
|
-
{/* Comment Input */}
|
|
77
|
-
<div className="glass-panel p-6 rounded-[32px] border border-armoyu-card-border bg-armoyu-card-bg shadow-sm mb-12">
|
|
78
|
-
<div className="flex gap-4">
|
|
79
|
-
<img
|
|
80
|
-
src={userList[0].avatar}
|
|
81
|
-
className="w-10 h-10 rounded-full border border-black/10 dark:border-white/10 shrink-0"
|
|
82
|
-
alt="Avatar"
|
|
83
|
-
/>
|
|
84
|
-
<div className="flex-1 space-y-4">
|
|
85
|
-
<textarea
|
|
86
|
-
value={newComment}
|
|
87
|
-
onChange={(e) => setNewComment(e.target.value)}
|
|
88
|
-
placeholder="Düşüncelerini paylaş..."
|
|
89
|
-
className="w-full bg-black/5 dark:bg-white/5 border border-black/10 dark:border-white/10 rounded-2xl px-5 py-4 text-sm text-armoyu-text focus:outline-none focus:border-blue-500 transition-all min-h-[100px] resize-none font-medium"
|
|
90
|
-
/>
|
|
91
|
-
<div className="flex justify-end">
|
|
92
|
-
<button
|
|
93
|
-
onClick={handleAddComment}
|
|
94
|
-
disabled={!newComment.trim()}
|
|
95
|
-
className="px-8 py-3 bg-blue-600 hover:bg-blue-500 disabled:opacity-50 text-white font-black text-xs uppercase tracking-widest rounded-xl shadow-lg shadow-blue-500/20 active:scale-95 transition-all"
|
|
96
|
-
>
|
|
97
|
-
Yorum Yap
|
|
98
|
-
</button>
|
|
99
|
-
</div>
|
|
100
|
-
</div>
|
|
101
|
-
</div>
|
|
102
|
-
</div>
|
|
103
|
-
|
|
104
|
-
{/* Comment List */}
|
|
105
|
-
<div className="space-y-8">
|
|
106
|
-
{comments.map((comment) => (
|
|
107
|
-
<div key={comment.id} className="flex gap-5 group animate-in fade-in slide-in-from-left-4 duration-300">
|
|
108
|
-
<img
|
|
109
|
-
src={comment.user.avatar}
|
|
110
|
-
className="w-12 h-12 rounded-2xl object-cover border border-armoyu-card-border shrink-0 shadow-sm"
|
|
111
|
-
alt="Avatar"
|
|
112
|
-
/>
|
|
113
|
-
<div className="flex-1">
|
|
114
|
-
<div className="flex items-center gap-3 mb-2">
|
|
115
|
-
<h4 className="text-sm font-black text-armoyu-text uppercase tracking-tight">{comment.user.displayName}</h4>
|
|
116
|
-
<span className="text-[10px] font-bold text-armoyu-text-muted opacity-60">• {comment.date}</span>
|
|
117
|
-
</div>
|
|
118
|
-
<p className="text-sm font-medium text-armoyu-text-muted leading-relaxed mb-4">
|
|
119
|
-
{comment.text}
|
|
120
|
-
</p>
|
|
121
|
-
<div className="flex items-center gap-6">
|
|
122
|
-
<button
|
|
123
|
-
onClick={() => toggleLike(comment.id)}
|
|
124
|
-
className={`flex items-center gap-1.5 text-[10px] font-black uppercase tracking-widest transition-colors ${comment.isLiked ? 'text-rose-500' : 'text-armoyu-text-muted hover:text-rose-500'}`}
|
|
125
|
-
>
|
|
126
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill={comment.isLiked ? "currentColor" : "none"} stroke="currentColor" strokeWidth="3"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path></svg>
|
|
127
|
-
Beğen ({comment.likes})
|
|
128
|
-
</button>
|
|
129
|
-
<button className="flex items-center gap-1.5 text-[10px] font-black uppercase tracking-widest text-armoyu-text-muted hover:text-blue-500 transition-colors">
|
|
130
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="3"><path d="M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z"></path></svg>
|
|
131
|
-
Yanıtla
|
|
132
|
-
</button>
|
|
133
|
-
</div>
|
|
134
|
-
</div>
|
|
135
|
-
</div>
|
|
136
|
-
))}
|
|
137
|
-
</div>
|
|
138
|
-
</div>
|
|
139
|
-
);
|
|
140
|
-
}
|
|
141
|
-
|