@armoyu/ui 1.0.1 → 1.0.2

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.
Files changed (140) hide show
  1. package/dist/app/api/proxy/[...path]/route.d.ts +22 -0
  2. package/dist/app/api/proxy/[...path]/route.d.ts.map +1 -0
  3. package/dist/app/api/proxy/[...path]/route.js +89 -0
  4. package/dist/app/api/proxy/[...path]/route.js.map +1 -0
  5. package/dist/app/layout.d.ts.map +1 -1
  6. package/dist/app/layout.js +2 -5
  7. package/dist/app/layout.js.map +1 -1
  8. package/dist/components/RollingNumber.d.ts +6 -6
  9. package/dist/components/RollingNumber.js +23 -23
  10. package/dist/components/RollingNumber.js.map +1 -1
  11. package/dist/components/StatsGrid.d.ts +5 -5
  12. package/dist/components/modules/auth/Dashboard.d.ts +1 -1
  13. package/dist/components/modules/auth/PostCard.d.ts +24 -24
  14. package/dist/components/modules/auth/PostInteractionsModal.d.ts +11 -11
  15. package/dist/components/modules/auth/RepostModal.d.ts +21 -21
  16. package/dist/components/modules/auth/SidebarLeft.d.ts +1 -1
  17. package/dist/components/modules/auth/Stories.d.ts +1 -1
  18. package/dist/components/modules/auth/StoryViewer.d.ts +9 -9
  19. package/dist/components/modules/chat/ChatContainer.d.ts +1 -1
  20. package/dist/components/modules/chat/ChatInput.d.ts +4 -4
  21. package/dist/components/modules/chat/ChatList.d.ts +6 -6
  22. package/dist/components/modules/chat/ChatNotes.d.ts +1 -1
  23. package/dist/components/modules/community/GroupHeader.d.ts +10 -10
  24. package/dist/components/modules/community/GroupMenu.d.ts +9 -9
  25. package/dist/components/modules/community/SchoolCard.d.ts +6 -6
  26. package/dist/components/modules/community/SurveyCard.d.ts +6 -6
  27. package/dist/components/modules/guest/Introduction.d.ts +1 -1
  28. package/dist/components/modules/magaza/BackToStore.d.ts +1 -1
  29. package/dist/components/modules/magaza/StoreHeader.d.ts +5 -5
  30. package/dist/components/modules/news/NewsCard.d.ts +11 -11
  31. package/dist/components/modules/news/NewsComments.d.ts +1 -1
  32. package/dist/components/modules/profile/ProfileContent.d.ts +4 -4
  33. package/dist/components/modules/profile/ProfileHeader.d.ts +7 -7
  34. package/dist/components/modules/profile/ProfileStats.d.ts +1 -1
  35. package/dist/components/modules/profile/ProfileStats.js +14 -14
  36. package/dist/components/modules/profile/ProfileStats.js.map +1 -1
  37. package/dist/components/modules/profile/TeamSelectorModal.d.ts +10 -10
  38. package/dist/components/modules/stations/StationCard.d.ts +2 -2
  39. package/dist/components/modules/stations/StationQRModal.d.ts +9 -9
  40. package/dist/components/shared/FloatingChatButton.d.ts +4 -4
  41. package/dist/components/shared/Header.d.ts +1 -1
  42. package/dist/components/shared/LoginModal.d.ts +4 -4
  43. package/dist/components/shared/LoginModal.d.ts.map +1 -1
  44. package/dist/components/shared/LoginModal.js +65 -69
  45. package/dist/components/shared/LoginModal.js.map +1 -1
  46. package/dist/components/shared/MainLayoutWrapper.d.ts +3 -3
  47. package/dist/components/showcase/SocialTab.d.ts.map +1 -1
  48. package/dist/components/showcase/SocialTab.js +47 -2
  49. package/dist/components/showcase/SocialTab.js.map +1 -1
  50. package/dist/context/AuthContext.d.ts +18 -18
  51. package/dist/context/AuthContext.d.ts.map +1 -1
  52. package/dist/context/AuthContext.js +93 -74
  53. package/dist/context/AuthContext.js.map +1 -1
  54. package/dist/context/CartContext.d.ts +16 -16
  55. package/dist/context/SocketContext.d.ts +12 -12
  56. package/dist/index.d.ts +65 -65
  57. package/dist/lib/constants/educationData.d.ts +7 -7
  58. package/dist/lib/constants/seedData.d.ts +164 -164
  59. package/dist/lib/constants/stationData.d.ts +13 -13
  60. package/dist/lib/constants/surveyData.d.ts +2 -2
  61. package/dist/lib/constants/teamData.d.ts +12 -12
  62. package/package.json +13 -11
  63. package/next.config.ts +0 -13
  64. package/postcss.config.js +0 -6
  65. package/src/app/layout.tsx +0 -67
  66. package/src/app/page.tsx +0 -101
  67. package/src/components/Button.tsx +0 -41
  68. package/src/components/GenderStatsBar.tsx +0 -66
  69. package/src/components/RollingNumber.tsx +0 -50
  70. package/src/components/Slider.tsx +0 -114
  71. package/src/components/StatsGrid.tsx +0 -35
  72. package/src/components/ViewModeToggle.tsx +0 -39
  73. package/src/components/modules/auth/Dashboard.tsx +0 -649
  74. package/src/components/modules/auth/MediaLightbox.tsx +0 -112
  75. package/src/components/modules/auth/PostCard.tsx +0 -556
  76. package/src/components/modules/auth/PostInteractionsModal.tsx +0 -138
  77. package/src/components/modules/auth/RepostModal.tsx +0 -167
  78. package/src/components/modules/auth/SidebarLeft.tsx +0 -237
  79. package/src/components/modules/auth/Stories.tsx +0 -69
  80. package/src/components/modules/auth/StoryViewer.tsx +0 -146
  81. package/src/components/modules/chat/ChatContainer.tsx +0 -332
  82. package/src/components/modules/chat/ChatInput.tsx +0 -57
  83. package/src/components/modules/chat/ChatList.tsx +0 -179
  84. package/src/components/modules/chat/ChatMessage.tsx +0 -43
  85. package/src/components/modules/chat/ChatNotes.tsx +0 -58
  86. package/src/components/modules/community/GroupHeader.tsx +0 -111
  87. package/src/components/modules/community/GroupMenu.tsx +0 -82
  88. package/src/components/modules/community/SchoolCard.tsx +0 -104
  89. package/src/components/modules/community/SurveyCard.tsx +0 -149
  90. package/src/components/modules/forum/ForumBoard.tsx +0 -78
  91. package/src/components/modules/forum/ForumPost.tsx +0 -71
  92. package/src/components/modules/forum/NewTopicModal.tsx +0 -112
  93. package/src/components/modules/forum/TopicItem.tsx +0 -72
  94. package/src/components/modules/galleries/GalleryCard.tsx +0 -66
  95. package/src/components/modules/giveaways/GiveawayCard.tsx +0 -76
  96. package/src/components/modules/groups/ApplicationModal.tsx +0 -133
  97. package/src/components/modules/groups/GroupCard.tsx +0 -96
  98. package/src/components/modules/guest/Introduction.tsx +0 -60
  99. package/src/components/modules/magaza/BackToStore.tsx +0 -53
  100. package/src/components/modules/magaza/StoreHeader.tsx +0 -74
  101. package/src/components/modules/news/NewsCard.tsx +0 -66
  102. package/src/components/modules/news/NewsComments.tsx +0 -141
  103. package/src/components/modules/profile/CloudStorageModal.tsx +0 -200
  104. package/src/components/modules/profile/EditProfileModal.tsx +0 -191
  105. package/src/components/modules/profile/ProfileContent.tsx +0 -491
  106. package/src/components/modules/profile/ProfileHeader.tsx +0 -128
  107. package/src/components/modules/profile/ProfileStats.tsx +0 -72
  108. package/src/components/modules/profile/TeamSelectorModal.tsx +0 -129
  109. package/src/components/modules/stations/StationCard.tsx +0 -95
  110. package/src/components/modules/stations/StationQRModal.tsx +0 -102
  111. package/src/components/shared/FloatingChatButton.tsx +0 -57
  112. package/src/components/shared/Footer.tsx +0 -77
  113. package/src/components/shared/Header.tsx +0 -799
  114. package/src/components/shared/LoginModal.tsx +0 -208
  115. package/src/components/shared/MainLayoutWrapper.tsx +0 -15
  116. package/src/components/shared/PageWidth.tsx +0 -22
  117. package/src/components/showcase/CommunityTab.tsx +0 -22
  118. package/src/components/showcase/CorporateTab.tsx +0 -38
  119. package/src/components/showcase/GeneralTab.tsx +0 -41
  120. package/src/components/showcase/MessagesTab.tsx +0 -26
  121. package/src/components/showcase/ProfileTab.tsx +0 -20
  122. package/src/components/showcase/ShopTab.tsx +0 -24
  123. package/src/components/showcase/SocialTab.tsx +0 -28
  124. package/src/context/AuthContext.tsx +0 -104
  125. package/src/context/CartContext.tsx +0 -93
  126. package/src/context/ChatContext.tsx +0 -32
  127. package/src/context/LayoutContext.tsx +0 -29
  128. package/src/context/SocketContext.tsx +0 -50
  129. package/src/context/ThemeContext.tsx +0 -52
  130. package/src/index.ts +0 -96
  131. package/src/lib/constants/educationData.ts +0 -124
  132. package/src/lib/constants/punishmentData.ts +0 -201
  133. package/src/lib/constants/seedData.ts +0 -758
  134. package/src/lib/constants/stationData.ts +0 -170
  135. package/src/lib/constants/surveyData.ts +0 -53
  136. package/src/lib/constants/teamData.ts +0 -69
  137. package/src/lib/utils/numberFormat.ts +0 -16
  138. package/src/lib/utils/odpUtils.ts +0 -51
  139. package/src/types/index.ts +0 -1
  140. package/src/types/stats.ts +0 -17
@@ -1,200 +0,0 @@
1
- 'use client';
2
- import React, { useEffect, useState } from 'react';
3
- import { createPortal } from 'react-dom';
4
-
5
- interface CloudStorageModalProps {
6
- isOpen: boolean;
7
- onClose: () => void;
8
- onSelectMedia?: (url: string, type: 'image'|'video') => void;
9
- }
10
-
11
- export function CloudStorageModal({ isOpen, onClose, onSelectMedia }: CloudStorageModalProps) {
12
- const [mounted, setMounted] = useState(false);
13
- const [activeCategory, setActiveCategory] = useState<'all' | 'image' | 'video'>('all'); // Simplified for mock display
14
- const [dragActive, setDragActive] = useState(false);
15
-
16
- useEffect(() => setMounted(true), []);
17
-
18
- if (!isOpen || !mounted) return null;
19
-
20
- // Mock Cloud Files
21
- const mockFiles = [
22
- { id: '1', type: 'image' as const, url: 'https://images.unsplash.com/photo-1542751371-adc38448a05e?q=80&w=2670&auto=format&fit=crop', name: 'Valorant_Clip_1.jpg', size: '2.4 MB', date: '12 Eki' },
23
- { id: '2', type: 'video' as const, url: 'https://test-videos.co.uk/vids/bigbuckbunny/mp4/h264/720/Big_Buck_Bunny_720_10s_1MB.mp4', name: 'CS2_Aces.mp4', size: '14.1 MB', date: '05 Eki' },
24
- { id: '3', type: 'image' as const, url: 'https://images.unsplash.com/photo-1587831990711-23ca6441447b?q=80&w=2698&auto=format&fit=crop', name: 'Setup_Photo.png', size: '4.8 MB', date: '28 Eyl' },
25
- { id: '4', type: 'image' as const, url: 'https://images.unsplash.com/photo-1614680376593-902f74cf0d41?q=80&w=2574&auto=format&fit=crop', name: 'Minecraft_Bas...jpg', size: '1.2 MB', date: '15 Eyl' },
26
- { id: '5', type: 'image' as const, url: 'https://images.unsplash.com/photo-1498050108023-c5249f4df085?q=80&w=2672&auto=format&fit=crop', name: 'Coding_Session.jpg', size: '3.5 MB', date: '02 Eyl' }
27
- ];
28
-
29
- const filteredFiles = activeCategory === 'all' ? mockFiles : mockFiles.filter(f => f.type === activeCategory);
30
-
31
- // Mock Storage Math
32
- const storageData = { total: 5000, used: 2400, photos: 1200, videos: 800, audios: 200, documents: 200 };
33
- const pPhotos = (storageData.photos / storageData.total) * 100;
34
- const pVideos = (storageData.videos / storageData.total) * 100;
35
- const pAudios = (storageData.audios / storageData.total) * 100;
36
- const pDocs = (storageData.documents / storageData.total) * 100;
37
-
38
- const modalContent = (
39
- <div className="fixed inset-0 z-[9999] p-4 md:p-8 xl:p-12 flex items-center justify-center animate-in fade-in duration-200">
40
-
41
- {/* Background Dim */}
42
- <div className="absolute inset-0 bg-black/80 backdrop-blur-sm" onClick={onClose} />
43
-
44
- {/* Cloud Window Wrapper */}
45
- <div className="relative w-full max-w-6xl h-full max-h-[85vh] bg-white dark:bg-[#0a0a0e] border border-gray-200 dark:border-white/10 rounded-[2rem] shadow-2xl flex flex-col md:flex-row overflow-hidden animate-in zoom-in-95 duration-300">
46
-
47
- {/* Left Column (Sidebar) */}
48
- <div className="w-full md:w-64 border-r border-gray-200 dark:border-white/10 bg-gray-50 dark:bg-[#121216] flex flex-col shrink-0">
49
- <div className="p-6 md:p-8 pb-4">
50
- <h2 className="text-2xl font-black text-armoyu-text tracking-tight flex items-center gap-3">
51
- <svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="currentColor" className="text-blue-500"><path d="M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z"></path></svg>
52
- Cloud
53
- </h2>
54
- </div>
55
-
56
- <nav className="flex-1 px-4 space-y-1.5 overflow-y-auto hide-scrollbar">
57
- <button
58
- onClick={() => setActiveCategory('all')}
59
- className={`w-full flex items-center gap-3 px-4 py-3.5 rounded-xl font-bold text-sm transition-all ${activeCategory === 'all' ? 'bg-blue-500 text-white shadow-md shadow-blue-500/20' : 'text-armoyu-text-muted hover:text-armoyu-text hover:bg-black/5 dark:hover:bg-white/5'}`}
60
- >
61
- <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"><rect x="3" y="3" width="7" height="7"></rect><rect x="14" y="3" width="7" height="7"></rect><rect x="14" y="14" width="7" height="7"></rect><rect x="3" y="14" width="7" height="7"></rect></svg>
62
- Tümü
63
- </button>
64
- <button
65
- onClick={() => setActiveCategory('image')}
66
- className={`w-full flex items-center gap-3 px-4 py-3.5 rounded-xl font-bold text-sm transition-all ${activeCategory === 'image' ? 'bg-blue-500 text-white shadow-md shadow-blue-500/20' : 'text-armoyu-text-muted hover:text-armoyu-text hover:bg-black/5 dark:hover:bg-white/5'}`}
67
- >
68
- <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"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><circle cx="8.5" cy="8.5" r="1.5"></circle><polyline points="21 15 16 10 5 21"></polyline></svg>
69
- Fotoğraflar
70
- </button>
71
- <button
72
- onClick={() => setActiveCategory('video')}
73
- className={`w-full flex items-center gap-3 px-4 py-3.5 rounded-xl font-bold text-sm transition-all ${activeCategory === 'video' ? 'bg-blue-500 text-white shadow-md shadow-blue-500/20' : 'text-armoyu-text-muted hover:text-armoyu-text hover:bg-black/5 dark:hover:bg-white/5'}`}
74
- >
75
- <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"><polygon points="23 7 16 12 23 17 23 7"></polygon><rect x="1" y="5" width="15" height="14" rx="2" ry="2"></rect></svg>
76
- Videolar
77
- </button>
78
- <button
79
- onClick={() => {}}
80
- className={`w-full flex items-center gap-3 px-4 py-3.5 rounded-xl font-bold text-sm transition-all text-armoyu-text-muted hover:text-armoyu-text hover:bg-black/5 dark:hover:bg-white/5`}
81
- >
82
- <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"><path d="M9 18V5l12-2v13"></path><circle cx="6" cy="18" r="3"></circle><circle cx="18" cy="16" r="3"></circle></svg>
83
- Sesler
84
- </button>
85
- </nav>
86
-
87
- {/* Storage Capacity Bar Mini Widget */}
88
- <div className="p-6 border-t border-gray-200 dark:border-white/10 hidden md:block group">
89
- <div className="mb-2 flex justify-between items-end">
90
- <span className="text-xs font-bold text-armoyu-text-muted group-hover:text-armoyu-text transition-colors">Depolama</span>
91
- <span className="text-xs font-black text-armoyu-text">{(storageData.used / 1000).toFixed(1)}GB <span className="text-[10px] text-armoyu-text-muted font-bold">/ {(storageData.total / 1000).toFixed(1)}GB</span></span>
92
- </div>
93
- <div className="w-full h-2.5 bg-black/5 dark:bg-white/10 rounded-full overflow-hidden flex gap-0.5 shadow-inner">
94
- <div style={{width: `${pPhotos}%`}} className="bg-blue-500 h-full" title="Fotoğraflar" />
95
- <div style={{width: `${pVideos}%`}} className="bg-purple-500 h-full" title="Videolar" />
96
- <div style={{width: `${pAudios}%`}} className="bg-emerald-500 h-full" title="Sesler" />
97
- <div style={{width: `${pDocs}%`}} className="bg-orange-500 h-full" title="Belgeler" />
98
- </div>
99
- </div>
100
- </div>
101
-
102
- {/* Right Column (Main Viewspace) */}
103
- <div className="flex-1 flex flex-col min-w-0 bg-white dark:bg-[#0a0a0e]">
104
-
105
- {/* Top Bar Navigation */}
106
- <div className="flex justify-between items-center p-4 md:px-8 border-b border-gray-200 dark:border-white/10 shrink-0">
107
- <h3 className="font-extrabold text-armoyu-text text-lg tracking-tight">
108
- {activeCategory === 'all' ? 'Tüm Dosyalar' :
109
- activeCategory === 'image' ? 'Fotoğraflar' :
110
- activeCategory === 'video' ? 'Videolar' : 'Dosyalarım'}
111
- </h3>
112
- <button onClick={onClose} className="p-2 rounded-full hover:bg-black/5 dark:hover:bg-white/5 text-armoyu-text-muted transition-colors">
113
- <svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg>
114
- </button>
115
- </div>
116
-
117
- {/* Scrollable Container */}
118
- <div className="flex-1 overflow-y-auto px-4 md:px-8 py-6 hide-scrollbar">
119
- <div className="space-y-8 max-w-5xl mx-auto">
120
-
121
- {/* Row 1: Upload Modül (Kategori Seçimli) */}
122
- <div
123
- className={`border-2 border-dashed rounded-[2rem] p-6 lg:p-8 flex flex-col md:flex-row items-center justify-between gap-6 transition-all group ${dragActive ? 'border-blue-500 bg-blue-500/10' : 'border-black/10 dark:border-white/10 hover:border-blue-500/50 bg-black/5 dark:bg-white/5'}`}
124
- onDragEnter={() => setDragActive(true)}
125
- onDragLeave={() => setDragActive(false)}
126
- onDragOver={(e) => e.preventDefault()}
127
- onDrop={(e) => { e.preventDefault(); setDragActive(false); /* file handle logic */ }}
128
- >
129
- <div className="flex items-center gap-5">
130
- <div className="w-16 h-16 rounded-[1.25rem] bg-white dark:bg-[#1a1a24] shadow-[0_4px_20px_rgba(0,0,0,0.05)] dark:shadow-[0_4px_20px_rgba(255,255,255,0.03)] flex flex-shrink-0 items-center justify-center group-hover:scale-105 transition-transform">
131
- <svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" className="text-blue-500"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="17 8 12 3 7 8"></polyline><line x1="12" y1="3" x2="12" y2="15"></line></svg>
132
- </div>
133
- <div>
134
- <h3 className="font-black text-armoyu-text text-lg mb-1">Yeni İçerik Yükle</h3>
135
- <p className="text-xs font-bold text-armoyu-text-muted">Görsel veya Dosyaları Sürükleyin (Maks 100MB)</p>
136
- </div>
137
- </div>
138
-
139
- <div className="flex flex-col sm:flex-row gap-3 w-full md:w-auto shrink-0">
140
- <select className="bg-white dark:bg-[#1a1a24] border border-gray-200 dark:border-white/10 rounded-xl px-4 py-3 text-sm font-bold text-armoyu-text outline-none cursor-pointer focus:border-blue-500 transition-colors shadow-sm">
141
- <option value="image">Fotoğraflar İçin</option>
142
- <option value="video">Videolar İçin</option>
143
- <option value="audio">Sesler İçin</option>
144
- </select>
145
- <button className="px-6 py-3 bg-gradient-to-r from-blue-600 to-blue-500 hover:from-blue-700 hover:to-blue-600 text-white text-sm font-bold rounded-xl shadow-[0_0_15px_rgba(37,99,235,0.3)] hover:shadow-[0_0_20px_rgba(37,99,235,0.5)] transition-all">
146
- Seç ve Yükle
147
- </button>
148
- </div>
149
- </div>
150
-
151
- {/* Row 2: Gallery Mappings */}
152
- <div>
153
- <h4 className="text-sm font-bold text-armoyu-text-muted mb-4 uppercase tracking-wider">{filteredFiles.length} İçerik Görüntüleniyor</h4>
154
- <div className="grid grid-cols-2 lg:grid-cols-4 gap-4">
155
- {filteredFiles.map(file => (
156
- <div
157
- key={file.id}
158
- className="group relative aspect-square rounded-2xl overflow-hidden bg-black/5 dark:bg-white/5 border border-transparent hover:border-blue-500/50 cursor-pointer shadow-sm hover:shadow-lg transition-all"
159
- onClick={() => onSelectMedia && onSelectMedia(file.url, file.type)}
160
- >
161
- {file.type === 'image' ? (
162
- <img src={file.url} alt={file.name} className="w-full h-full object-cover transition-transform duration-700 group-hover:scale-110" />
163
- ) : (
164
- <div className="w-full h-full relative">
165
- <video src={file.url} className="w-full h-full object-cover" />
166
- <div className="absolute inset-0 flex items-center justify-center bg-black/20">
167
- <div className="w-10 h-10 rounded-full bg-black/50 backdrop-blur-md flex items-center justify-center text-white border border-white/20">
168
- <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="currentColor"><polygon points="5 3 19 12 5 21 5 3"></polygon></svg>
169
- </div>
170
- </div>
171
- </div>
172
- )}
173
-
174
- <div className="absolute inset-0 bg-gradient-to-t from-black/90 via-black/20 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300 flex flex-col justify-end p-4">
175
- <p className="text-white font-bold text-sm truncate mb-0.5">{file.name}</p>
176
- <p className="text-white/70 font-bold text-[10px]">{file.size} • {file.date}</p>
177
-
178
- <button
179
- className="mt-3 w-full py-2 bg-blue-500 hover:bg-blue-600 text-white text-xs font-bold rounded-xl transition-colors shadow-md flex items-center justify-center gap-1.5"
180
- onClick={(e) => { e.stopPropagation(); onSelectMedia && onSelectMedia(file.url, file.type); }}
181
- >
182
- <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
183
- Paylaşıma Ekle
184
- </button>
185
- </div>
186
- </div>
187
- ))}
188
- </div>
189
- </div>
190
-
191
- </div>
192
- </div>
193
- </div>
194
-
195
- </div>
196
- </div>
197
- );
198
-
199
- return createPortal(modalContent, document.body);
200
- }
@@ -1,191 +0,0 @@
1
- 'use client';
2
- import React, { useState, useEffect } from 'react';
3
- import { createPortal } from 'react-dom';
4
-
5
- interface EditProfileModalProps {
6
- isOpen: boolean;
7
- onClose: () => void;
8
- user: any; // Genişletilebilir nesne prop
9
- }
10
-
11
- export function EditProfileModal({ isOpen, onClose, user }: EditProfileModalProps) {
12
- const [formData, setFormData] = useState({
13
- profession: '',
14
- email: 'kullanici@armoyu.com',
15
- phone: '',
16
- birthDate: '',
17
- country: 'Türkiye',
18
- city: 'İstanbul',
19
- });
20
-
21
- const handleChange = (e: React.ChangeEvent<HTMLInputElement | HTMLSelectElement>) => {
22
- setFormData(prev => ({ ...prev, [e.target.name]: e.target.value }));
23
- };
24
-
25
- const handleSave = () => {
26
- // API logic buraya eklenecek
27
- onClose();
28
- };
29
-
30
- const [mounted, setMounted] = useState(false);
31
- useEffect(() => setMounted(true), []);
32
-
33
- if (!isOpen || !mounted) return null;
34
-
35
- const modalContent = (
36
- <div className="fixed inset-0 z-[9999] flex items-center justify-center animate-in fade-in duration-200">
37
- <div className="absolute inset-0 bg-black/60 backdrop-blur-sm" onClick={onClose} />
38
-
39
- <div className="relative w-full max-w-2xl bg-white dark:bg-[#0a0a0e] border border-gray-200 dark:border-white/10 rounded-[2rem] shadow-2xl p-6 md:p-8 animate-in zoom-in-95 duration-300 mx-4 max-h-[90vh] overflow-y-auto hide-scrollbar flex flex-col">
40
-
41
- {/* Sticky Header */}
42
- <div className="flex justify-between items-center mb-6 shrink-0 sticky top-0 bg-white dark:bg-[#0a0a0e] z-10 pt-2 pb-4 border-b border-gray-200 dark:border-white/5">
43
- <h2 className="text-xl md:text-2xl font-black text-armoyu-text tracking-tight">Profili Düzenle</h2>
44
- <button onClick={onClose} className="p-2 rounded-full hover:bg-black/5 dark:hover:bg-white/5 text-armoyu-text-muted transition-colors border border-transparent hover:border-armoyu-card-border">
45
- <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"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg>
46
- </button>
47
- </div>
48
-
49
- <div className="space-y-8 pb-8 flex-1">
50
- {/* Primary Info Veri Girişi */}
51
- <div className="space-y-5">
52
- <h3 className="text-lg font-bold text-armoyu-text border-b border-gray-200 dark:border-white/5 pb-2">Temel Bilgiler</h3>
53
-
54
- <div className="grid grid-cols-1 md:grid-cols-2 gap-5">
55
- <div className="space-y-2">
56
- <label className="text-xs font-bold text-armoyu-text-muted uppercase tracking-wider">E-Posta Adresi</label>
57
- <input type="email" name="email" value={formData.email} onChange={handleChange} className="w-full bg-black/5 dark:bg-white/5 border border-black/5 dark:border-white/10 rounded-xl px-4 py-3 text-sm text-armoyu-text font-bold outline-none focus:border-blue-500 shadow-inner transition-colors" />
58
- </div>
59
- <div className="space-y-2">
60
- <label className="text-xs font-bold text-armoyu-text-muted uppercase tracking-wider">Cep Numarası</label>
61
- <input type="tel" name="phone" value={formData.phone} onChange={handleChange} placeholder="+90 555 555 55 55" className="w-full bg-black/5 dark:bg-white/5 border border-black/5 dark:border-white/10 rounded-xl px-4 py-3 text-sm text-armoyu-text font-bold outline-none focus:border-blue-500 shadow-inner transition-colors" />
62
- </div>
63
- <div className="space-y-2">
64
- <label className="text-xs font-bold text-armoyu-text-muted uppercase tracking-wider">Meslek / Unvan</label>
65
- <select name="profession" value={formData.profession} onChange={handleChange} className="w-full bg-black/5 dark:bg-white/5 border border-black/5 dark:border-white/10 rounded-xl px-4 py-3 text-sm text-armoyu-text font-bold outline-none focus:border-blue-500 shadow-inner transition-colors appearance-none">
66
- <option value="">Seçiniz...</option>
67
- <option value="Öğrenci">Öğrenci</option>
68
- <option value="Öğretmen / Eğitmen">Öğretmen / Eğitmen</option>
69
- <option value="Yazılım Geliştirici">Yazılım Geliştirici</option>
70
- <option value="Mühendis">Mühendis</option>
71
- <option value="Tasarımcı / Grafiker">Tasarımcı / Grafiker</option>
72
- <option value="Mimar">Mimar</option>
73
- <option value="İçerik Üreticisi (YouTuber/Yayıncı)">İçerik Üreticisi (YouTuber/Yayıncı)</option>
74
- <option value="e-Spor Oyuncusu">e-Spor Oyuncusu</option>
75
- <option value="Doktor / Sağlık Çalışanı">Doktor / Sağlık Çalışanı</option>
76
- <option value="Avukat / Hukukçu">Avukat / Hukukçu</option>
77
- <option value="Muhasebeci / Finans">Muhasebeci / Finans</option>
78
- <option value="Satış / Pazarlama">Satış / Pazarlama</option>
79
- <option value="Serbest Çalışan (Freelancer)">Serbest Çalışan (Freelancer)</option>
80
- <option value="Girişimci / İş İnsanı">Girişimci / İş İnsanı</option>
81
- <option value="Diğer">Diğer</option>
82
- </select>
83
- </div>
84
- <div className="space-y-2">
85
- <label className="text-xs font-bold text-armoyu-text-muted uppercase tracking-wider">Doğum Tarihi</label>
86
- <input type="date" name="birthDate" value={formData.birthDate} onChange={handleChange} className="w-full bg-black/5 dark:bg-white/5 border border-black/5 dark:border-white/10 rounded-xl px-4 py-3 text-sm text-armoyu-text font-bold outline-none focus:border-blue-500 shadow-inner transition-colors" />
87
- </div>
88
- <div className="space-y-2">
89
- <label className="text-xs font-bold text-armoyu-text-muted uppercase tracking-wider">Ülke</label>
90
- <select name="country" value={formData.country} onChange={handleChange} className="w-full bg-black/5 dark:bg-white/5 border border-black/5 dark:border-white/10 rounded-xl px-4 py-3 text-sm text-armoyu-text font-bold outline-none focus:border-blue-500 shadow-inner transition-colors appearance-none">
91
- <option value="Türkiye">Türkiye</option>
92
- <option value="Azerbaycan">Azerbaycan</option>
93
- <option value="Almanya">Almanya</option>
94
- <option value="Diğer">Diğer</option>
95
- </select>
96
- </div>
97
- <div className="space-y-2">
98
- <label className="text-xs font-bold text-armoyu-text-muted uppercase tracking-wider">İl / Şehir</label>
99
- <input type="text" name="city" value={formData.city} onChange={handleChange} placeholder="Örn: İstanbul" className="w-full bg-black/5 dark:bg-white/5 border border-black/5 dark:border-white/10 rounded-xl px-4 py-3 text-sm text-armoyu-text font-bold outline-none focus:border-blue-500 shadow-inner transition-colors" />
100
- </div>
101
- </div>
102
- </div>
103
-
104
- {/* Bağlı Hesaplar (Sosyal Medya ve Oyun) */}
105
- <div className="space-y-5">
106
- <h3 className="text-lg font-bold text-armoyu-text border-b border-gray-200 dark:border-white/5 pb-2">Bağlı Hesaplar</h3>
107
- <p className="text-xs font-bold text-armoyu-text-muted mb-4 leading-relaxed">Diğer platformlardaki hesaplarınızı bağlayarak profilinizde sergileyebilir ve arkadaşlarınızın sizi kolayca bulmasını sağlayabilirsiniz.</p>
108
-
109
- <div className="grid grid-cols-1 sm:grid-cols-2 gap-4">
110
-
111
- {/* Discord (Bağlanmış Durum Simülasyonu) */}
112
- <button className="flex items-center gap-3 w-full p-3.5 rounded-2xl bg-[#5865F2]/5 hover:bg-[#5865F2]/10 dark:bg-[#5865F2]/20 dark:hover:bg-[#5865F2]/30 border border-[#5865F2]/30 transition-all group shadow-sm hover:shadow-md">
113
- <div className="w-12 h-12 rounded-xl bg-[#5865F2] flex items-center justify-center text-white shrink-0 shadow-[0_0_15px_rgba(88,101,242,0.4)]">
114
- <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M20.317 4.3698a19.7913 19.7913 0 00-4.8851-1.5152.0741.0741 0 00-.0785.0371c-.211.3753-.4447.8648-.6083 1.2498-1.8447-.2762-3.68-.2762-5.4868 0-.1636-.3933-.4058-.8745-.6177-1.2498a.077.077 0 00-.0788-.037 19.7363 19.7363 0 00-4.8852 1.515.0699.0699 0 00-.0321.0277C.5334 9.0458-.319 13.5799.0992 18.0578a.0824.0824 0 00.0312.0561c2.0528 1.5076 4.0413 2.4228 5.9929 3.0294a.0777.0777 0 00.0842-.0276c.4616-.6304.8731-1.2952 1.226-1.9942a.076.076 0 00-.0416-.1057c-.6528-.2476-1.2743-.5495-1.8722-.8923a.077.077 0 01-.0076-.1277c.1258-.0943.2517-.1923.3718-.2914a.0743.0743 0 01.0776-.0105c3.9278 1.7933 8.18 1.7933 12.0614 0a.0739.0739 0 01.0785.0095c.1202.099.246.1981.3728.2924a.077.077 0 01-.0066.1276 12.2986 12.2986 0 01-1.873.8914.0766.0766 0 00-.0407.1067c.3604.698.7719 1.3628 1.225 1.9932a.076.076 0 00.0842.0286c1.961-.6067 3.9495-1.5219 6.0023-3.0294a.077.077 0 00.0313-.0552c.5004-5.177-.8382-9.6739-3.5485-13.6604a.061.061 0 00-.0312-.0286zM8.02 15.3312c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9555-2.4189 2.157-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.9555 2.4189-2.1569 2.4189zm7.9748 0c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9554-2.4189 2.1569-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.946 2.4189-2.1568 2.4189Z"/></svg>
115
- </div>
116
- <div className="flex-1 text-left">
117
- <div className="font-bold text-[15px] text-armoyu-text">Discord</div>
118
- <div className="text-[11px] font-bold text-blue-500 uppercase tracking-wider">Bağlandı</div>
119
- </div>
120
- <div className="px-3.5 py-2 rounded-xl border border-red-500/20 text-red-500 text-xs font-black bg-red-500/5 hover:bg-red-500/10 transition-colors shadow-sm">İptal Et</div>
121
- </button>
122
-
123
- {/* Steam */}
124
- <button className="flex items-center gap-3 w-full p-3.5 rounded-2xl bg-[#171a21]/5 hover:bg-[#171a21]/10 dark:bg-[#171a21]/80 dark:hover:bg-[#171a21] border border-gray-200 dark:border-white/5 transition-all group shadow-sm hover:shadow-md">
125
- <div className="w-12 h-12 rounded-xl bg-[#171a21] flex items-center justify-center text-white shrink-0 shadow-sm">
126
- <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M11.97 0C5.35 0 0 5.37 0 12c0 2.87 1.02 5.51 2.71 7.55l3.82-5.59c-.06-.31-.08-.63-.08-.96 0-3.32 2.68-6 6-6s6 2.68 6 6-2.68 6-6 6c-.84 0-1.63-.17-2.36-.5l-3.23 4.74A11.961 11.961 0 0 0 11.97 24c6.62 0 12-5.37 12-12s-5.38-12-12-12m6.25 11.89c0 1.6-1.29 2.89-2.89 2.89a2.89 2.89 0 0 1-2.89-2.89c0-1.6 1.29-2.89 2.89-2.89s2.89 1.29 2.89 2.89M8.38 14.88c-.85.34-1.8.1-2.38-.6a2.031 2.031 0 0 1 .59-2.85c.85-.34 1.8-.1 2.38.6.59.71.26 2.5-.59 2.85"/></svg>
127
- </div>
128
- <div className="flex-1 text-left">
129
- <div className="font-bold text-[15px] text-armoyu-text">Steam</div>
130
- <div className="text-[11px] font-bold text-armoyu-text-muted uppercase tracking-wider">Bağlanmadı</div>
131
- </div>
132
- <div className="px-3.5 py-2 rounded-xl bg-black/5 dark:bg-white/5 text-xs font-black text-armoyu-text group-hover:bg-armoyu-text group-hover:text-white dark:group-hover:text-[#0a0a0e] transition-colors border border-black/5 dark:border-white/10 shadow-sm">Bağla</div>
133
- </button>
134
-
135
- {/* Instagram */}
136
- <button className="flex items-center gap-3 w-full p-3.5 rounded-2xl bg-pink-500/5 hover:bg-pink-500/10 dark:bg-pink-500/10 dark:hover:bg-pink-500/15 border border-pink-500/20 transition-all group shadow-sm hover:shadow-md">
137
- <div className="w-12 h-12 rounded-xl bg-gradient-to-tr from-yellow-400 via-pink-500 to-purple-500 flex items-center justify-center text-white shrink-0 shadow-[0_0_15px_rgba(236,72,153,0.4)]">
138
- <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"><rect x="2" y="2" width="20" height="20" rx="5" ry="5"></rect><path d="M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z"></path><line x1="17.5" y1="6.5" x2="17.51" y2="6.5"></line></svg>
139
- </div>
140
- <div className="flex-1 text-left">
141
- <div className="font-bold text-[15px] text-armoyu-text">Instagram</div>
142
- <div className="text-[11px] font-bold text-armoyu-text-muted uppercase tracking-wider">Bağlanmadı</div>
143
- </div>
144
- <div className="px-3.5 py-2 rounded-xl bg-black/5 dark:bg-white/5 text-xs font-black text-armoyu-text group-hover:bg-armoyu-text group-hover:text-white dark:group-hover:text-[#0a0a0e] transition-colors border border-black/5 dark:border-white/10 shadow-sm">Bağla</div>
145
- </button>
146
-
147
- {/* LinkedIn */}
148
- <button className="flex items-center gap-3 w-full p-3.5 rounded-2xl bg-[#0077b5]/5 hover:bg-[#0077b5]/10 dark:bg-[#0077b5]/10 dark:hover:bg-[#0077b5]/20 border border-[#0077b5]/20 transition-all group shadow-sm hover:shadow-md">
149
- <div className="w-12 h-12 rounded-xl bg-[#0077b5] flex items-center justify-center text-white shrink-0 shadow-[0_0_15px_rgba(0,119,181,0.4)]">
150
- <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"><path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"></path><rect x="2" y="9" width="4" height="12"></rect><circle cx="4" cy="4" r="2"></circle></svg>
151
- </div>
152
- <div className="flex-1 text-left">
153
- <div className="font-bold text-[15px] text-armoyu-text">LinkedIn</div>
154
- <div className="text-[11px] font-bold text-armoyu-text-muted uppercase tracking-wider">Bağlanmadı</div>
155
- </div>
156
- <div className="px-3.5 py-2 rounded-xl bg-black/5 dark:bg-white/5 text-xs font-black text-armoyu-text group-hover:bg-armoyu-text group-hover:text-white dark:group-hover:text-[#0a0a0e] transition-colors border border-black/5 dark:border-white/10 shadow-sm">Bağla</div>
157
- </button>
158
-
159
- {/* Facebook */}
160
- <button className="flex items-center gap-3 w-full p-3.5 rounded-2xl bg-[#1877F2]/5 hover:bg-[#1877F2]/10 dark:bg-[#1877F2]/10 dark:hover:bg-[#1877F2]/20 border border-[#1877F2]/20 transition-all group shadow-sm hover:shadow-md">
161
- <div className="w-12 h-12 rounded-xl bg-[#1877F2] flex items-center justify-center text-white shrink-0 shadow-[0_0_15px_rgba(24,119,242,0.4)]">
162
- <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"><path d="M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z"></path></svg>
163
- </div>
164
- <div className="flex-1 text-left">
165
- <div className="font-bold text-[15px] text-armoyu-text">Facebook</div>
166
- <div className="text-[11px] font-bold text-armoyu-text-muted uppercase tracking-wider">Bağlanmadı</div>
167
- </div>
168
- <div className="px-3.5 py-2 rounded-xl bg-black/5 dark:bg-white/5 text-xs font-black text-armoyu-text group-hover:bg-armoyu-text group-hover:text-white dark:group-hover:text-[#0a0a0e] transition-colors border border-black/5 dark:border-white/10 shadow-sm">Bağla</div>
169
- </button>
170
-
171
- </div>
172
- </div>
173
-
174
- </div>
175
-
176
- {/* Footer Actions Tab */}
177
- <div className="flex gap-4 pt-6 mt-auto sticky bottom-0 bg-white dark:bg-[#0a0a0e] pb-2 z-10 w-full shrink-0 border-t border-gray-200 dark:border-white/5">
178
- <button onClick={onClose} className="flex-1 py-3.5 text-sm font-black text-armoyu-text bg-black/5 dark:bg-white/5 hover:bg-black/10 dark:hover:bg-white/10 rounded-2xl transition-colors border border-black/5 dark:border-white/5 shadow-sm">
179
- İptal
180
- </button>
181
- <button onClick={handleSave} className="flex-1 py-3.5 text-sm font-black text-white bg-gradient-to-r from-blue-600 to-blue-500 hover:from-blue-700 hover:to-blue-600 rounded-2xl transition-all shadow-[0_0_20px_rgba(37,99,235,0.4)]">
182
- Değişiklikleri Kaydet
183
- </button>
184
- </div>
185
-
186
- </div>
187
- </div>
188
- );
189
-
190
- return createPortal(modalContent, document.body);
191
- }