@armoyu/ui 1.0.0

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 (384) hide show
  1. package/dist/app/layout.d.ts +7 -0
  2. package/dist/app/layout.d.ts.map +1 -0
  3. package/dist/app/layout.js +31 -0
  4. package/dist/app/layout.js.map +1 -0
  5. package/dist/app/page.d.ts +2 -0
  6. package/dist/app/page.d.ts.map +1 -0
  7. package/dist/app/page.js +40 -0
  8. package/dist/app/page.js.map +1 -0
  9. package/dist/components/Button.d.ts +8 -0
  10. package/dist/components/Button.d.ts.map +1 -0
  11. package/dist/components/Button.js +16 -0
  12. package/dist/components/Button.js.map +1 -0
  13. package/dist/components/GenderStatsBar.d.ts +6 -0
  14. package/dist/components/GenderStatsBar.d.ts.map +1 -0
  15. package/dist/components/GenderStatsBar.js +8 -0
  16. package/dist/components/GenderStatsBar.js.map +1 -0
  17. package/dist/components/RollingNumber.d.ts +7 -0
  18. package/dist/components/RollingNumber.d.ts.map +1 -0
  19. package/dist/components/RollingNumber.js +24 -0
  20. package/dist/components/RollingNumber.js.map +1 -0
  21. package/dist/components/Slider.d.ts +11 -0
  22. package/dist/components/Slider.d.ts.map +1 -0
  23. package/dist/components/Slider.js +36 -0
  24. package/dist/components/Slider.js.map +1 -0
  25. package/dist/components/StatsGrid.d.ts +6 -0
  26. package/dist/components/StatsGrid.d.ts.map +1 -0
  27. package/dist/components/StatsGrid.js +14 -0
  28. package/dist/components/StatsGrid.js.map +1 -0
  29. package/dist/components/ViewModeToggle.d.ts +8 -0
  30. package/dist/components/ViewModeToggle.d.ts.map +1 -0
  31. package/dist/components/ViewModeToggle.js +10 -0
  32. package/dist/components/ViewModeToggle.js.map +1 -0
  33. package/dist/components/modules/auth/Dashboard.d.ts +2 -0
  34. package/dist/components/modules/auth/Dashboard.d.ts.map +1 -0
  35. package/dist/components/modules/auth/Dashboard.js +251 -0
  36. package/dist/components/modules/auth/Dashboard.js.map +1 -0
  37. package/dist/components/modules/auth/MediaLightbox.d.ts +14 -0
  38. package/dist/components/modules/auth/MediaLightbox.d.ts.map +1 -0
  39. package/dist/components/modules/auth/MediaLightbox.js +47 -0
  40. package/dist/components/modules/auth/MediaLightbox.js.map +1 -0
  41. package/dist/components/modules/auth/PostCard.d.ts +25 -0
  42. package/dist/components/modules/auth/PostCard.d.ts.map +1 -0
  43. package/dist/components/modules/auth/PostCard.js +113 -0
  44. package/dist/components/modules/auth/PostCard.js.map +1 -0
  45. package/dist/components/modules/auth/PostInteractionsModal.d.ts +12 -0
  46. package/dist/components/modules/auth/PostInteractionsModal.d.ts.map +1 -0
  47. package/dist/components/modules/auth/PostInteractionsModal.js +13 -0
  48. package/dist/components/modules/auth/PostInteractionsModal.js.map +1 -0
  49. package/dist/components/modules/auth/RepostModal.d.ts +22 -0
  50. package/dist/components/modules/auth/RepostModal.d.ts.map +1 -0
  51. package/dist/components/modules/auth/RepostModal.js +76 -0
  52. package/dist/components/modules/auth/RepostModal.js.map +1 -0
  53. package/dist/components/modules/auth/SidebarLeft.d.ts +2 -0
  54. package/dist/components/modules/auth/SidebarLeft.d.ts.map +1 -0
  55. package/dist/components/modules/auth/SidebarLeft.js +41 -0
  56. package/dist/components/modules/auth/SidebarLeft.js.map +1 -0
  57. package/dist/components/modules/auth/Stories.d.ts +2 -0
  58. package/dist/components/modules/auth/Stories.d.ts.map +1 -0
  59. package/dist/components/modules/auth/Stories.js +16 -0
  60. package/dist/components/modules/auth/Stories.js.map +1 -0
  61. package/dist/components/modules/auth/StoryViewer.d.ts +10 -0
  62. package/dist/components/modules/auth/StoryViewer.d.ts.map +1 -0
  63. package/dist/components/modules/auth/StoryViewer.js +48 -0
  64. package/dist/components/modules/auth/StoryViewer.js.map +1 -0
  65. package/dist/components/modules/chat/ChatContainer.d.ts +2 -0
  66. package/dist/components/modules/chat/ChatContainer.d.ts.map +1 -0
  67. package/dist/components/modules/chat/ChatContainer.js +197 -0
  68. package/dist/components/modules/chat/ChatContainer.js.map +1 -0
  69. package/dist/components/modules/chat/ChatInput.d.ts +5 -0
  70. package/dist/components/modules/chat/ChatInput.d.ts.map +1 -0
  71. package/dist/components/modules/chat/ChatInput.js +31 -0
  72. package/dist/components/modules/chat/ChatInput.js.map +1 -0
  73. package/dist/components/modules/chat/ChatList.d.ts +7 -0
  74. package/dist/components/modules/chat/ChatList.d.ts.map +1 -0
  75. package/dist/components/modules/chat/ChatList.js +52 -0
  76. package/dist/components/modules/chat/ChatList.js.map +1 -0
  77. package/dist/components/modules/chat/ChatMessage.d.ts +12 -0
  78. package/dist/components/modules/chat/ChatMessage.d.ts.map +1 -0
  79. package/dist/components/modules/chat/ChatMessage.js +7 -0
  80. package/dist/components/modules/chat/ChatMessage.js.map +1 -0
  81. package/dist/components/modules/chat/ChatNotes.d.ts +2 -0
  82. package/dist/components/modules/chat/ChatNotes.d.ts.map +1 -0
  83. package/dist/components/modules/chat/ChatNotes.js +12 -0
  84. package/dist/components/modules/chat/ChatNotes.js.map +1 -0
  85. package/dist/components/modules/community/GroupHeader.d.ts +11 -0
  86. package/dist/components/modules/community/GroupHeader.d.ts.map +1 -0
  87. package/dist/components/modules/community/GroupHeader.js +18 -0
  88. package/dist/components/modules/community/GroupHeader.js.map +1 -0
  89. package/dist/components/modules/community/GroupMenu.d.ts +10 -0
  90. package/dist/components/modules/community/GroupMenu.d.ts.map +1 -0
  91. package/dist/components/modules/community/GroupMenu.js +17 -0
  92. package/dist/components/modules/community/GroupMenu.js.map +1 -0
  93. package/dist/components/modules/community/SchoolCard.d.ts +7 -0
  94. package/dist/components/modules/community/SchoolCard.d.ts.map +1 -0
  95. package/dist/components/modules/community/SchoolCard.js +8 -0
  96. package/dist/components/modules/community/SchoolCard.js.map +1 -0
  97. package/dist/components/modules/community/SurveyCard.d.ts +7 -0
  98. package/dist/components/modules/community/SurveyCard.d.ts.map +1 -0
  99. package/dist/components/modules/community/SurveyCard.js +38 -0
  100. package/dist/components/modules/community/SurveyCard.js.map +1 -0
  101. package/dist/components/modules/forum/ForumBoard.d.ts +17 -0
  102. package/dist/components/modules/forum/ForumBoard.d.ts.map +1 -0
  103. package/dist/components/modules/forum/ForumBoard.js +7 -0
  104. package/dist/components/modules/forum/ForumBoard.js.map +1 -0
  105. package/dist/components/modules/forum/ForumPost.d.ts +14 -0
  106. package/dist/components/modules/forum/ForumPost.d.ts.map +1 -0
  107. package/dist/components/modules/forum/ForumPost.js +6 -0
  108. package/dist/components/modules/forum/ForumPost.js.map +1 -0
  109. package/dist/components/modules/forum/NewTopicModal.d.ts +8 -0
  110. package/dist/components/modules/forum/NewTopicModal.d.ts.map +1 -0
  111. package/dist/components/modules/forum/NewTopicModal.js +27 -0
  112. package/dist/components/modules/forum/NewTopicModal.js.map +1 -0
  113. package/dist/components/modules/forum/TopicItem.d.ts +16 -0
  114. package/dist/components/modules/forum/TopicItem.d.ts.map +1 -0
  115. package/dist/components/modules/forum/TopicItem.js +7 -0
  116. package/dist/components/modules/forum/TopicItem.js.map +1 -0
  117. package/dist/components/modules/galleries/GalleryCard.d.ts +10 -0
  118. package/dist/components/modules/galleries/GalleryCard.d.ts.map +1 -0
  119. package/dist/components/modules/galleries/GalleryCard.js +6 -0
  120. package/dist/components/modules/galleries/GalleryCard.js.map +1 -0
  121. package/dist/components/modules/giveaways/GiveawayCard.d.ts +10 -0
  122. package/dist/components/modules/giveaways/GiveawayCard.d.ts.map +1 -0
  123. package/dist/components/modules/giveaways/GiveawayCard.js +7 -0
  124. package/dist/components/modules/giveaways/GiveawayCard.js.map +1 -0
  125. package/dist/components/modules/groups/ApplicationModal.d.ts +8 -0
  126. package/dist/components/modules/groups/ApplicationModal.d.ts.map +1 -0
  127. package/dist/components/modules/groups/ApplicationModal.js +28 -0
  128. package/dist/components/modules/groups/ApplicationModal.js.map +1 -0
  129. package/dist/components/modules/groups/GroupCard.d.ts +13 -0
  130. package/dist/components/modules/groups/GroupCard.d.ts.map +1 -0
  131. package/dist/components/modules/groups/GroupCard.js +7 -0
  132. package/dist/components/modules/groups/GroupCard.js.map +1 -0
  133. package/dist/components/modules/guest/Introduction.d.ts +2 -0
  134. package/dist/components/modules/guest/Introduction.d.ts.map +1 -0
  135. package/dist/components/modules/guest/Introduction.js +14 -0
  136. package/dist/components/modules/guest/Introduction.js.map +1 -0
  137. package/dist/components/modules/magaza/BackToStore.d.ts +2 -0
  138. package/dist/components/modules/magaza/BackToStore.d.ts.map +1 -0
  139. package/dist/components/modules/magaza/BackToStore.js +11 -0
  140. package/dist/components/modules/magaza/BackToStore.js.map +1 -0
  141. package/dist/components/modules/magaza/StoreHeader.d.ts +6 -0
  142. package/dist/components/modules/magaza/StoreHeader.d.ts.map +1 -0
  143. package/dist/components/modules/magaza/StoreHeader.js +9 -0
  144. package/dist/components/modules/magaza/StoreHeader.js.map +1 -0
  145. package/dist/components/modules/news/NewsCard.d.ts +12 -0
  146. package/dist/components/modules/news/NewsCard.d.ts.map +1 -0
  147. package/dist/components/modules/news/NewsCard.js +7 -0
  148. package/dist/components/modules/news/NewsCard.js.map +1 -0
  149. package/dist/components/modules/news/NewsComments.d.ts +2 -0
  150. package/dist/components/modules/news/NewsComments.d.ts.map +1 -0
  151. package/dist/components/modules/news/NewsComments.js +53 -0
  152. package/dist/components/modules/news/NewsComments.js.map +1 -0
  153. package/dist/components/modules/profile/CloudStorageModal.d.ts +9 -0
  154. package/dist/components/modules/profile/CloudStorageModal.d.ts.map +1 -0
  155. package/dist/components/modules/profile/CloudStorageModal.js +32 -0
  156. package/dist/components/modules/profile/CloudStorageModal.js.map +1 -0
  157. package/dist/components/modules/profile/EditProfileModal.d.ts +9 -0
  158. package/dist/components/modules/profile/EditProfileModal.d.ts.map +1 -0
  159. package/dist/components/modules/profile/EditProfileModal.js +28 -0
  160. package/dist/components/modules/profile/EditProfileModal.js.map +1 -0
  161. package/dist/components/modules/profile/ProfileContent.d.ts +5 -0
  162. package/dist/components/modules/profile/ProfileContent.d.ts.map +1 -0
  163. package/dist/components/modules/profile/ProfileContent.js +71 -0
  164. package/dist/components/modules/profile/ProfileContent.js.map +1 -0
  165. package/dist/components/modules/profile/ProfileHeader.d.ts +8 -0
  166. package/dist/components/modules/profile/ProfileHeader.d.ts.map +1 -0
  167. package/dist/components/modules/profile/ProfileHeader.js +20 -0
  168. package/dist/components/modules/profile/ProfileHeader.js.map +1 -0
  169. package/dist/components/modules/profile/ProfileStats.d.ts +2 -0
  170. package/dist/components/modules/profile/ProfileStats.d.ts.map +1 -0
  171. package/dist/components/modules/profile/ProfileStats.js +15 -0
  172. package/dist/components/modules/profile/ProfileStats.js.map +1 -0
  173. package/dist/components/modules/profile/TeamSelectorModal.d.ts +11 -0
  174. package/dist/components/modules/profile/TeamSelectorModal.d.ts.map +1 -0
  175. package/dist/components/modules/profile/TeamSelectorModal.js +17 -0
  176. package/dist/components/modules/profile/TeamSelectorModal.js.map +1 -0
  177. package/dist/components/modules/stations/StationCard.d.ts +3 -0
  178. package/dist/components/modules/stations/StationCard.d.ts.map +1 -0
  179. package/dist/components/modules/stations/StationCard.js +26 -0
  180. package/dist/components/modules/stations/StationCard.js.map +1 -0
  181. package/dist/components/modules/stations/StationQRModal.d.ts +10 -0
  182. package/dist/components/modules/stations/StationQRModal.d.ts.map +1 -0
  183. package/dist/components/modules/stations/StationQRModal.js +13 -0
  184. package/dist/components/modules/stations/StationQRModal.js.map +1 -0
  185. package/dist/components/shared/FloatingChatButton.d.ts +5 -0
  186. package/dist/components/shared/FloatingChatButton.d.ts.map +1 -0
  187. package/dist/components/shared/FloatingChatButton.js +21 -0
  188. package/dist/components/shared/FloatingChatButton.js.map +1 -0
  189. package/dist/components/shared/Footer.d.ts +2 -0
  190. package/dist/components/shared/Footer.d.ts.map +1 -0
  191. package/dist/components/shared/Footer.js +10 -0
  192. package/dist/components/shared/Footer.js.map +1 -0
  193. package/dist/components/shared/Header.d.ts +2 -0
  194. package/dist/components/shared/Header.d.ts.map +1 -0
  195. package/dist/components/shared/Header.js +98 -0
  196. package/dist/components/shared/Header.js.map +1 -0
  197. package/dist/components/shared/LoginModal.d.ts +5 -0
  198. package/dist/components/shared/LoginModal.d.ts.map +1 -0
  199. package/dist/components/shared/LoginModal.js +70 -0
  200. package/dist/components/shared/LoginModal.js.map +1 -0
  201. package/dist/components/shared/MainLayoutWrapper.d.ts +4 -0
  202. package/dist/components/shared/MainLayoutWrapper.d.ts.map +1 -0
  203. package/dist/components/shared/MainLayoutWrapper.js +8 -0
  204. package/dist/components/shared/MainLayoutWrapper.js.map +1 -0
  205. package/dist/components/shared/PageWidth.d.ts +6 -0
  206. package/dist/components/shared/PageWidth.d.ts.map +1 -0
  207. package/dist/components/shared/PageWidth.js +14 -0
  208. package/dist/components/shared/PageWidth.js.map +1 -0
  209. package/dist/components/showcase/CommunityTab.d.ts +2 -0
  210. package/dist/components/showcase/CommunityTab.d.ts.map +1 -0
  211. package/dist/components/showcase/CommunityTab.js +6 -0
  212. package/dist/components/showcase/CommunityTab.js.map +1 -0
  213. package/dist/components/showcase/CorporateTab.d.ts +2 -0
  214. package/dist/components/showcase/CorporateTab.d.ts.map +1 -0
  215. package/dist/components/showcase/CorporateTab.js +6 -0
  216. package/dist/components/showcase/CorporateTab.js.map +1 -0
  217. package/dist/components/showcase/GeneralTab.d.ts +2 -0
  218. package/dist/components/showcase/GeneralTab.d.ts.map +1 -0
  219. package/dist/components/showcase/GeneralTab.js +6 -0
  220. package/dist/components/showcase/GeneralTab.js.map +1 -0
  221. package/dist/components/showcase/MessagesTab.d.ts +2 -0
  222. package/dist/components/showcase/MessagesTab.d.ts.map +1 -0
  223. package/dist/components/showcase/MessagesTab.js +6 -0
  224. package/dist/components/showcase/MessagesTab.js.map +1 -0
  225. package/dist/components/showcase/ProfileTab.d.ts +2 -0
  226. package/dist/components/showcase/ProfileTab.d.ts.map +1 -0
  227. package/dist/components/showcase/ProfileTab.js +7 -0
  228. package/dist/components/showcase/ProfileTab.js.map +1 -0
  229. package/dist/components/showcase/ShopTab.d.ts +2 -0
  230. package/dist/components/showcase/ShopTab.d.ts.map +1 -0
  231. package/dist/components/showcase/ShopTab.js +6 -0
  232. package/dist/components/showcase/ShopTab.js.map +1 -0
  233. package/dist/components/showcase/SocialTab.d.ts +2 -0
  234. package/dist/components/showcase/SocialTab.d.ts.map +1 -0
  235. package/dist/components/showcase/SocialTab.js +7 -0
  236. package/dist/components/showcase/SocialTab.js.map +1 -0
  237. package/dist/context/AuthContext.d.ts +19 -0
  238. package/dist/context/AuthContext.d.ts.map +1 -0
  239. package/dist/context/AuthContext.js +75 -0
  240. package/dist/context/AuthContext.js.map +1 -0
  241. package/dist/context/CartContext.d.ts +17 -0
  242. package/dist/context/CartContext.d.ts.map +1 -0
  243. package/dist/context/CartContext.js +64 -0
  244. package/dist/context/CartContext.js.map +1 -0
  245. package/dist/context/ChatContext.d.ts +13 -0
  246. package/dist/context/ChatContext.d.ts.map +1 -0
  247. package/dist/context/ChatContext.js +18 -0
  248. package/dist/context/ChatContext.js.map +1 -0
  249. package/dist/context/LayoutContext.d.ts +11 -0
  250. package/dist/context/LayoutContext.d.ts.map +1 -0
  251. package/dist/context/LayoutContext.js +17 -0
  252. package/dist/context/LayoutContext.js.map +1 -0
  253. package/dist/context/SocketContext.d.ts +13 -0
  254. package/dist/context/SocketContext.d.ts.map +1 -0
  255. package/dist/context/SocketContext.js +31 -0
  256. package/dist/context/SocketContext.js.map +1 -0
  257. package/dist/context/ThemeContext.d.ts +11 -0
  258. package/dist/context/ThemeContext.d.ts.map +1 -0
  259. package/dist/context/ThemeContext.js +40 -0
  260. package/dist/context/ThemeContext.js.map +1 -0
  261. package/dist/index.d.ts +66 -0
  262. package/dist/index.d.ts.map +1 -0
  263. package/dist/index.js +81 -0
  264. package/dist/index.js.map +1 -0
  265. package/dist/lib/constants/educationData.d.ts +8 -0
  266. package/dist/lib/constants/educationData.d.ts.map +1 -0
  267. package/dist/lib/constants/educationData.js +118 -0
  268. package/dist/lib/constants/educationData.js.map +1 -0
  269. package/dist/lib/constants/punishmentData.d.ts +30 -0
  270. package/dist/lib/constants/punishmentData.d.ts.map +1 -0
  271. package/dist/lib/constants/punishmentData.js +184 -0
  272. package/dist/lib/constants/punishmentData.js.map +1 -0
  273. package/dist/lib/constants/seedData.d.ts +165 -0
  274. package/dist/lib/constants/seedData.d.ts.map +1 -0
  275. package/dist/lib/constants/seedData.js +709 -0
  276. package/dist/lib/constants/seedData.js.map +1 -0
  277. package/dist/lib/constants/stationData.d.ts +14 -0
  278. package/dist/lib/constants/stationData.d.ts.map +1 -0
  279. package/dist/lib/constants/stationData.js +167 -0
  280. package/dist/lib/constants/stationData.js.map +1 -0
  281. package/dist/lib/constants/surveyData.d.ts +3 -0
  282. package/dist/lib/constants/surveyData.d.ts.map +1 -0
  283. package/dist/lib/constants/surveyData.js +50 -0
  284. package/dist/lib/constants/surveyData.js.map +1 -0
  285. package/dist/lib/constants/teamData.d.ts +13 -0
  286. package/dist/lib/constants/teamData.d.ts.map +1 -0
  287. package/dist/lib/constants/teamData.js +66 -0
  288. package/dist/lib/constants/teamData.js.map +1 -0
  289. package/dist/lib/utils/numberFormat.d.ts +10 -0
  290. package/dist/lib/utils/numberFormat.d.ts.map +1 -0
  291. package/dist/lib/utils/numberFormat.js +17 -0
  292. package/dist/lib/utils/numberFormat.js.map +1 -0
  293. package/dist/lib/utils/odpUtils.d.ts +16 -0
  294. package/dist/lib/utils/odpUtils.d.ts.map +1 -0
  295. package/dist/lib/utils/odpUtils.js +44 -0
  296. package/dist/lib/utils/odpUtils.js.map +1 -0
  297. package/dist/types/index.d.ts +2 -0
  298. package/dist/types/index.d.ts.map +1 -0
  299. package/dist/types/index.js +2 -0
  300. package/dist/types/index.js.map +1 -0
  301. package/dist/types/stats.d.ts +18 -0
  302. package/dist/types/stats.d.ts.map +1 -0
  303. package/dist/types/stats.js +2 -0
  304. package/dist/types/stats.js.map +1 -0
  305. package/next.config.ts +13 -0
  306. package/package.json +46 -0
  307. package/postcss.config.js +6 -0
  308. package/src/app/layout.tsx +64 -0
  309. package/src/app/page.tsx +101 -0
  310. package/src/components/Button.tsx +41 -0
  311. package/src/components/GenderStatsBar.tsx +66 -0
  312. package/src/components/RollingNumber.tsx +50 -0
  313. package/src/components/Slider.tsx +114 -0
  314. package/src/components/StatsGrid.tsx +35 -0
  315. package/src/components/ViewModeToggle.tsx +39 -0
  316. package/src/components/modules/auth/Dashboard.tsx +649 -0
  317. package/src/components/modules/auth/MediaLightbox.tsx +112 -0
  318. package/src/components/modules/auth/PostCard.tsx +556 -0
  319. package/src/components/modules/auth/PostInteractionsModal.tsx +138 -0
  320. package/src/components/modules/auth/RepostModal.tsx +167 -0
  321. package/src/components/modules/auth/SidebarLeft.tsx +237 -0
  322. package/src/components/modules/auth/Stories.tsx +69 -0
  323. package/src/components/modules/auth/StoryViewer.tsx +146 -0
  324. package/src/components/modules/chat/ChatContainer.tsx +332 -0
  325. package/src/components/modules/chat/ChatInput.tsx +57 -0
  326. package/src/components/modules/chat/ChatList.tsx +179 -0
  327. package/src/components/modules/chat/ChatMessage.tsx +43 -0
  328. package/src/components/modules/chat/ChatNotes.tsx +58 -0
  329. package/src/components/modules/community/GroupHeader.tsx +111 -0
  330. package/src/components/modules/community/GroupMenu.tsx +82 -0
  331. package/src/components/modules/community/SchoolCard.tsx +104 -0
  332. package/src/components/modules/community/SurveyCard.tsx +149 -0
  333. package/src/components/modules/forum/ForumBoard.tsx +78 -0
  334. package/src/components/modules/forum/ForumPost.tsx +71 -0
  335. package/src/components/modules/forum/NewTopicModal.tsx +112 -0
  336. package/src/components/modules/forum/TopicItem.tsx +72 -0
  337. package/src/components/modules/galleries/GalleryCard.tsx +66 -0
  338. package/src/components/modules/giveaways/GiveawayCard.tsx +76 -0
  339. package/src/components/modules/groups/ApplicationModal.tsx +133 -0
  340. package/src/components/modules/groups/GroupCard.tsx +96 -0
  341. package/src/components/modules/guest/Introduction.tsx +60 -0
  342. package/src/components/modules/magaza/BackToStore.tsx +53 -0
  343. package/src/components/modules/magaza/StoreHeader.tsx +74 -0
  344. package/src/components/modules/news/NewsCard.tsx +66 -0
  345. package/src/components/modules/news/NewsComments.tsx +141 -0
  346. package/src/components/modules/profile/CloudStorageModal.tsx +200 -0
  347. package/src/components/modules/profile/EditProfileModal.tsx +191 -0
  348. package/src/components/modules/profile/ProfileContent.tsx +491 -0
  349. package/src/components/modules/profile/ProfileHeader.tsx +128 -0
  350. package/src/components/modules/profile/ProfileStats.tsx +72 -0
  351. package/src/components/modules/profile/TeamSelectorModal.tsx +129 -0
  352. package/src/components/modules/stations/StationCard.tsx +95 -0
  353. package/src/components/modules/stations/StationQRModal.tsx +102 -0
  354. package/src/components/shared/FloatingChatButton.tsx +57 -0
  355. package/src/components/shared/Footer.tsx +77 -0
  356. package/src/components/shared/Header.tsx +799 -0
  357. package/src/components/shared/LoginModal.tsx +208 -0
  358. package/src/components/shared/MainLayoutWrapper.tsx +15 -0
  359. package/src/components/shared/PageWidth.tsx +22 -0
  360. package/src/components/showcase/CommunityTab.tsx +22 -0
  361. package/src/components/showcase/CorporateTab.tsx +38 -0
  362. package/src/components/showcase/GeneralTab.tsx +41 -0
  363. package/src/components/showcase/MessagesTab.tsx +26 -0
  364. package/src/components/showcase/ProfileTab.tsx +20 -0
  365. package/src/components/showcase/ShopTab.tsx +24 -0
  366. package/src/components/showcase/SocialTab.tsx +28 -0
  367. package/src/context/AuthContext.tsx +104 -0
  368. package/src/context/CartContext.tsx +93 -0
  369. package/src/context/ChatContext.tsx +32 -0
  370. package/src/context/LayoutContext.tsx +29 -0
  371. package/src/context/SocketContext.tsx +50 -0
  372. package/src/context/ThemeContext.tsx +52 -0
  373. package/src/globals.css +187 -0
  374. package/src/index.ts +96 -0
  375. package/src/lib/constants/educationData.ts +124 -0
  376. package/src/lib/constants/punishmentData.ts +201 -0
  377. package/src/lib/constants/seedData.ts +758 -0
  378. package/src/lib/constants/stationData.ts +170 -0
  379. package/src/lib/constants/surveyData.ts +53 -0
  380. package/src/lib/constants/teamData.ts +69 -0
  381. package/src/lib/utils/numberFormat.ts +16 -0
  382. package/src/lib/utils/odpUtils.ts +51 -0
  383. package/src/types/index.ts +1 -0
  384. package/src/types/stats.ts +17 -0
@@ -0,0 +1,491 @@
1
+ 'use client';
2
+
3
+ import React, { useState, useEffect } from 'react';
4
+ import { PostCard } from '../auth/PostCard';
5
+ import { CloudStorageModal } from './CloudStorageModal';
6
+ import { X, Calendar, Plus, Edit3, Trash2, Shield, Sparkles } from 'lucide-react';
7
+ import { User } from '@armoyu/core';
8
+ import { TeamSelectorModal } from './TeamSelectorModal';
9
+ import { Team } from '@armoyu/core';
10
+ import { ZODIAC_SIGNS } from '../../../lib/constants/teamData';
11
+ import { useAuth } from '../../../context/AuthContext';
12
+
13
+ export function ProfileContent({ user }: { user?: User }) {
14
+ const { user: currentUser, updateUser } = useAuth();
15
+ const [activeTab, setActiveTab] = useState('Kariyer');
16
+ const [isCloudModalOpen, setIsCloudModalOpen] = useState(false);
17
+ const [isTeamModalOpen, setIsTeamModalOpen] = useState(false);
18
+ const [isBioModalOpen, setIsBioModalOpen] = useState(false);
19
+ const [showTeamBanner, setShowTeamBanner] = useState(false);
20
+
21
+ // Use currentUser from context if it's our own profile to ensure reactivity
22
+ const isOwnProfile = currentUser?.username === user?.username;
23
+ const displayUser = isOwnProfile ? currentUser : user;
24
+ const [tempBio, setTempBio] = useState(displayUser?.bio || '');
25
+
26
+ useEffect(() => {
27
+ // Show banner only on own profile and if team is missing and not dismissed
28
+ if (isOwnProfile && !displayUser?.favoriteTeam) {
29
+ const dismissed = localStorage.getItem(`team_prompt_dismissed_${displayUser?.id}`);
30
+ if (!dismissed) {
31
+ setShowTeamBanner(true);
32
+ }
33
+ }
34
+ }, [isOwnProfile, user]);
35
+
36
+ const handleTeamSelect = (team: Team | null, zodiac: string) => {
37
+ if (displayUser) {
38
+ if (isOwnProfile && currentUser) {
39
+ updateUser({
40
+ ...currentUser,
41
+ favoriteTeam: team,
42
+ zodiac: zodiac
43
+ } as any);
44
+ }
45
+ }
46
+ setIsTeamModalOpen(false);
47
+ setShowTeamBanner(false);
48
+ localStorage.setItem(`team_prompt_dismissed_${displayUser?.id}`, 'true');
49
+ };
50
+
51
+ const handleBioSave = () => {
52
+ if (isOwnProfile && currentUser) {
53
+ updateUser({
54
+ ...currentUser,
55
+ bio: tempBio
56
+ } as any);
57
+ setIsBioModalOpen(false);
58
+ }
59
+ };
60
+
61
+ const userZodiac = ZODIAC_SIGNS.find(s => s.name === displayUser?.zodiac);
62
+
63
+ const tabs = ['Gönderiler', 'Hakkında', 'Kariyer', 'Oynadığı Oyunlar', 'Arkadaşlar'];
64
+
65
+ const mockCareerEvents = displayUser?.career?.length ? displayUser.career : [
66
+ { id: '1', date: '12.03.2018', title: 'ARMOYU Ailesine Katıldı', description: 'Platformdaki ilk adımlarını attı.', type: 'JOIN' },
67
+ { id: '2', date: '05.06.2020', title: 'Yayıncı Rütbesi Aldı', description: 'Oyun yayınlarına ve içerik üretimine başladı.', type: 'RANK' },
68
+ { id: '3', date: '15.01.2022', title: 'RIHTIM Grubunu Kurdu', description: 'Kendi topluluğunu oluşturarak liderlik yolculuğuna başladı.', type: 'GROUP' },
69
+ { id: '4', date: '01.04.2024', title: 'V3 Beta Testçisi', description: 'Yeni nesil platformun gelişimine katkıda bulundu.', type: 'AWARD' },
70
+ ];
71
+
72
+ return (
73
+ <div className="w-full flex flex-col lg:flex-row gap-6 mt-6">
74
+
75
+ {/* Sol Panel: Hakkında Özeti */}
76
+ <div className="w-full lg:w-80 shrink-0 space-y-6">
77
+ <div className="bg-armoyu-card-bg border border-armoyu-card-border rounded-3xl p-6 shadow-sm">
78
+ <div className="flex items-center justify-between mb-4">
79
+ <h3 className="text-lg font-black text-armoyu-text">Hakkında</h3>
80
+ {isOwnProfile && (
81
+ <button
82
+ onClick={() => {
83
+ setTempBio(displayUser?.bio || '');
84
+ setIsBioModalOpen(true);
85
+ }}
86
+ className="p-2 text-armoyu-text-muted hover:text-blue-500 bg-black/5 hover:bg-blue-500/10 rounded-xl transition-all"
87
+ title="Hakkında Yazısını Düzenle"
88
+ >
89
+ <Edit3 size={14} />
90
+ </button>
91
+ )}
92
+ </div>
93
+ <p className="text-sm font-medium text-armoyu-text-muted leading-relaxed mb-6">
94
+ {displayUser?.bio || 'Bu kullanıcı henüz hakkında bir bilgi eklememiş.'}
95
+ </p>
96
+
97
+ <div className="space-y-4">
98
+ <div className="flex items-center gap-3">
99
+ <div className="w-8 h-8 rounded-full bg-blue-500/10 flex items-center justify-center text-blue-500">
100
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"></path><circle cx="12" cy="10" r="3"></circle></svg>
101
+ </div>
102
+ <div>
103
+ <div className="text-[10px] font-bold text-armoyu-text-muted uppercase">Konum</div>
104
+ <div className="text-sm font-bold text-armoyu-text">İstanbul, Türkiye</div>
105
+ </div>
106
+ </div>
107
+
108
+ <div className="flex items-center gap-3">
109
+ <div className="w-8 h-8 rounded-full bg-blue-500/10 flex items-center justify-center text-blue-500">
110
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" 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>
111
+ </div>
112
+ <div>
113
+ <div className="text-[10px] font-bold text-armoyu-text-muted uppercase">Katılım Tarihi</div>
114
+ <div className="text-sm font-bold text-armoyu-text">Ağustos 2018</div>
115
+ </div>
116
+ </div>
117
+
118
+ <div className="flex items-center gap-3">
119
+ <div className="w-8 h-8 rounded-full bg-blue-500/10 flex items-center justify-center text-blue-500">
120
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5"><rect x="2" y="3" width="20" height="14" rx="2" ry="2"></rect><line x1="8" y1="21" x2="16" y2="21"></line><line x1="12" y1="17" x2="12" y2="21"></line></svg>
121
+ </div>
122
+ <div>
123
+ <div className="text-[10px] font-bold text-armoyu-text-muted uppercase">Ana Platform</div>
124
+ <div className="text-sm font-bold text-armoyu-text">PC (Steam)</div>
125
+ </div>
126
+ </div>
127
+
128
+ {displayUser?.zodiac ? (
129
+ <div className="flex items-center justify-between group/item">
130
+ <div className="flex items-center gap-3 animate-in slide-in-from-left duration-500">
131
+ <div className="w-8 h-8 rounded-full bg-purple-500/10 flex items-center justify-center text-purple-500 text-lg">
132
+ {userZodiac?.icon || '✨'}
133
+ </div>
134
+ <div>
135
+ <div className="text-[10px] font-bold text-armoyu-text-muted uppercase">Burç</div>
136
+ <div className="text-sm font-bold text-armoyu-text">{displayUser.zodiac}</div>
137
+ </div>
138
+ </div>
139
+ {isOwnProfile && (
140
+ <button onClick={() => setIsTeamModalOpen(true)} className="p-2 text-armoyu-text-muted hover:text-blue-500 opacity-0 group-hover/item:opacity-100 transition-all bg-black/5 rounded-lg mr-1" title="Burcu Değiştir">
141
+ <Edit3 size={12} />
142
+ </button>
143
+ )}
144
+ </div>
145
+ ) : isOwnProfile && (
146
+ <button
147
+ onClick={() => setIsTeamModalOpen(true)}
148
+ className="flex items-center gap-3 p-2 rounded-2xl hover:bg-purple-500/5 border border-dashed border-armoyu-card-border group transition-all w-full text-left"
149
+ >
150
+ <div className="w-8 h-8 rounded-full bg-purple-500/5 group-hover:bg-purple-500/10 flex items-center justify-center text-purple-500/40 group-hover:text-purple-500 transition-colors">
151
+ <Sparkles size={14} />
152
+ </div>
153
+ <div>
154
+ <div className="text-[10px] font-bold text-armoyu-text-muted uppercase opacity-60">Burç</div>
155
+ <div className="text-[11px] font-black text-purple-500/60 group-hover:text-purple-500 uppercase italic tracking-widest transition-colors">Burç Ekle</div>
156
+ </div>
157
+ </button>
158
+ )}
159
+
160
+ {displayUser?.favoriteTeam && displayUser.favoriteTeam.id !== 'none' ? (
161
+ <div className="flex items-center justify-between group/item">
162
+ <div className="flex items-center gap-3 animate-in slide-in-from-left duration-700">
163
+ <div className="w-8 h-8 rounded-full bg-black/10 flex items-center justify-center overflow-hidden">
164
+ <img src={displayUser.favoriteTeam.logo} alt={displayUser.favoriteTeam.name} className="w-5 h-5 object-contain" />
165
+ </div>
166
+ <div>
167
+ <div className="text-[10px] font-bold text-armoyu-text-muted uppercase">Favori Takım</div>
168
+ <div className="text-sm font-bold text-armoyu-text">{displayUser.favoriteTeam.name}</div>
169
+ </div>
170
+ </div>
171
+ {isOwnProfile && (
172
+ <button onClick={() => setIsTeamModalOpen(true)} className="p-2 text-armoyu-text-muted hover:text-blue-500 opacity-0 group-hover/item:opacity-100 transition-all bg-black/5 rounded-lg mr-1" title="Takımı Değiştir">
173
+ <Edit3 size={12} />
174
+ </button>
175
+ )}
176
+ </div>
177
+ ) : isOwnProfile && (
178
+ <button
179
+ onClick={() => setIsTeamModalOpen(true)}
180
+ className="flex items-center gap-3 p-2 rounded-2xl hover:bg-blue-500/5 border border-dashed border-armoyu-card-border group transition-all w-full text-left"
181
+ >
182
+ <div className="w-8 h-8 rounded-full bg-blue-500/5 group-hover:bg-blue-500/10 flex items-center justify-center text-blue-500/40 group-hover:text-blue-500 transition-colors">
183
+ <Shield size={14} />
184
+ </div>
185
+ <div>
186
+ <div className="text-[10px] font-bold text-armoyu-text-muted uppercase opacity-60">Favori Takım</div>
187
+ <div className="text-[11px] font-black text-blue-500/60 group-hover:text-blue-500 uppercase italic tracking-widest transition-colors">Takım Seç</div>
188
+ </div>
189
+ </button>
190
+ )}
191
+ </div>
192
+ </div>
193
+
194
+ {/* Rozetler Vitrini */}
195
+ <div className="bg-armoyu-card-bg border border-armoyu-card-border rounded-3xl p-6 shadow-sm hidden lg:block">
196
+ <h3 className="text-lg font-black text-armoyu-text mb-4">Rozetler</h3>
197
+ <div className="flex flex-wrap gap-2">
198
+ <span className="bg-red-500/10 text-red-500 text-xs font-bold px-3 py-1.5 rounded-xl border border-red-500/20">Kurucu</span>
199
+ <span className="bg-emerald-500/10 text-emerald-500 text-xs font-bold px-3 py-1.5 rounded-xl border border-emerald-500/20">5 Yıllık Üye</span>
200
+ <span className="bg-purple-500/10 text-purple-500 text-xs font-bold px-3 py-1.5 rounded-xl border border-purple-500/20">Turnuva Şampiyonu</span>
201
+ <span className="bg-yellow-500/10 text-yellow-600 dark:text-yellow-400 text-xs font-bold px-3 py-1.5 rounded-xl border border-yellow-500/20">Premium</span>
202
+ </div>
203
+ </div>
204
+
205
+ {/* Cloud Depolama Temsili Kutusu - Sadece Kendi Profilinde */}
206
+ {isOwnProfile && (
207
+ <div className="bg-armoyu-card-bg border border-armoyu-card-border rounded-3xl p-6 shadow-sm hidden lg:block">
208
+ <div className="flex justify-between items-center mb-4">
209
+ <h3 className="text-lg font-black text-armoyu-text flex items-center gap-2">
210
+ <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" 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>
211
+ ARMOYU Cloud
212
+ </h3>
213
+ <span className="text-xs font-bold text-armoyu-text-muted">48%</span>
214
+ </div>
215
+
216
+ <div className="w-full h-2 bg-gray-100 dark:bg-white/5 rounded-full overflow-hidden mb-3 shadow-inner">
217
+ <div className="w-[48%] h-full bg-blue-500 rounded-full shadow-[0_0_10px_rgba(59,130,246,0.6)]"></div>
218
+ </div>
219
+
220
+ <p className="text-xs font-medium text-armoyu-text-muted mb-4">
221
+ 5 GB alanın <span className="font-bold text-armoyu-text">2.4 GB</span> kadarı hesaba yedeklendi.
222
+ </p>
223
+
224
+ <button
225
+ onClick={() => setIsCloudModalOpen(true)}
226
+ className="w-full py-2.5 text-xs font-bold text-blue-600 dark:text-blue-400 bg-blue-500/10 hover:bg-blue-500/20 rounded-xl transition-colors border border-blue-500/10"
227
+ >
228
+ Depolamayı Yönet
229
+ </button>
230
+ </div>
231
+ )}
232
+
233
+ {/* Arkadaşlar Widget */}
234
+ <div className="bg-armoyu-card-bg border border-armoyu-card-border rounded-3xl p-6 shadow-sm">
235
+ <div className="flex justify-between items-center mb-5">
236
+ <h3 className="text-lg font-black text-armoyu-text">
237
+ Arkadaşlar <span className="text-blue-500 ml-1">{displayUser?.friends?.length || 0}</span>
238
+ </h3>
239
+ <button
240
+ onClick={() => setActiveTab('Arkadaşlar')}
241
+ className="text-xs font-bold text-blue-500 hover:underline"
242
+ >
243
+ Tümünü Gör
244
+ </button>
245
+ </div>
246
+
247
+ <div className="grid grid-cols-5 gap-2">
248
+ {(displayUser?.friends || []).slice(0, 5).map((friend, idx) => (
249
+ <div key={friend.id || idx} className="group relative">
250
+ <img
251
+ src={friend.avatar}
252
+ alt={friend.displayName}
253
+ className="w-10 h-10 rounded-xl object-cover border border-white/10 group-hover:scale-110 transition-transform cursor-pointer shadow-sm"
254
+ title={friend.displayName}
255
+ />
256
+ </div>
257
+ ))}
258
+ {(displayUser?.friends?.length || 0) === 0 && (
259
+ <p className="col-span-5 text-xs text-armoyu-text-muted text-center py-2 italic">
260
+ Henüz arkadaş eklenmemiş.
261
+ </p>
262
+ )}
263
+ </div>
264
+ </div>
265
+ </div>
266
+
267
+ {/* Sağ Panel: İçerik ve Sekmeler */}
268
+ <div className="flex-1 min-w-0 flex flex-col gap-6">
269
+
270
+ {/* Team Selection Prompt Banner */}
271
+ {showTeamBanner && (
272
+ <div className="glass-panel p-6 rounded-[32px] border border-blue-500/30 bg-blue-600/5 relative overflow-hidden group animate-in slide-in-from-top duration-700">
273
+ <div className="absolute -right-8 -top-8 w-32 h-32 bg-blue-500/10 blur-3xl rounded-full group-hover:scale-150 transition-transform duration-1000" />
274
+
275
+ <div className="flex flex-col md:flex-row items-center justify-between gap-6 relative z-10">
276
+ <div className="flex items-center gap-5 text-center md:text-left">
277
+ <div className="w-16 h-16 rounded-[24px] bg-blue-600 flex items-center justify-center text-white shadow-xl shadow-blue-600/20">
278
+ <Shield size={32} />
279
+ </div>
280
+ <div>
281
+ <h3 className="text-lg font-black text-armoyu-text uppercase italic tracking-tighter leading-none">TAKIMINI SEÇMEDİN!</h3>
282
+ <p className="text-xs font-bold text-armoyu-text-muted mt-2 max-w-xs leading-relaxed uppercase tracking-wider italic">Favori takımını ve burcunu ekleyerek profilini daha renkli hale getir.</p>
283
+ </div>
284
+ </div>
285
+ <div className="flex items-center gap-3 w-full md:w-auto">
286
+ <button
287
+ onClick={() => setIsTeamModalOpen(true)}
288
+ className="flex-1 md:flex-none px-8 py-3.5 bg-blue-600 hover:bg-blue-500 text-white font-black rounded-2xl text-[10px] uppercase tracking-widest shadow-xl shadow-blue-600/20 transition-all active:scale-95 italic"
289
+ >
290
+ ŞİMDİ SEÇ
291
+ </button>
292
+ <button
293
+ onClick={() => {
294
+ setShowTeamBanner(false);
295
+ localStorage.setItem(`team_prompt_dismissed_${user?.id}`, 'true');
296
+ }}
297
+ className="p-3.5 text-armoyu-text-muted hover:text-armoyu-text bg-black/5 hover:bg-black/10 rounded-2xl transition-all"
298
+ >
299
+ <X size={18} />
300
+ </button>
301
+ </div>
302
+ </div>
303
+ </div>
304
+ )}
305
+
306
+ {/* Modern Tabs */}
307
+ <div className="bg-armoyu-card-bg border border-armoyu-card-border rounded-2xl p-2 shadow-sm overflow-x-auto hide-scrollbar">
308
+ <div className="flex gap-2 min-w-max">
309
+ {tabs.map((tab) => (
310
+ <button
311
+ key={tab}
312
+ onClick={() => setActiveTab(tab)}
313
+ className={`px-5 py-2.5 rounded-xl text-sm font-bold transition-all ${activeTab === tab
314
+ ? 'bg-blue-500 text-white shadow-[0_0_15px_rgba(37,99,235,0.4)]'
315
+ : 'text-armoyu-text-muted hover:text-armoyu-text hover:bg-black/5 dark:hover:bg-white/5'
316
+ }`}
317
+ >
318
+ {tab}
319
+ </button>
320
+ ))}
321
+ </div>
322
+ </div>
323
+
324
+ {/* Tab İçerikleri */}
325
+ {activeTab === 'Gönderiler' && (
326
+ <div className="space-y-6">
327
+ <div className="bg-armoyu-card-bg border border-armoyu-card-border rounded-3xl p-5 shadow-sm">
328
+ <div className="flex gap-4">
329
+ <img src="https://api.dicebear.com/7.x/avataaars/svg?seed=Berkay" className="w-10 h-10 rounded-full bg-black/5 dark:bg-white/5 shrink-0 object-cover" alt="Avatar" />
330
+ <input type="text" placeholder="Profiline sabit bir gönderi yaz..." className="flex-1 bg-transparent border-none outline-none text-sm font-medium text-armoyu-text placeholder:text-armoyu-text-muted" />
331
+ </div>
332
+ </div>
333
+
334
+ {(user?.myPosts || []).map(post => (
335
+ <PostCard key={post.id} {...post} />
336
+ ))}
337
+ {(user?.myPosts?.length || 0) === 0 && (
338
+ <div className="bg-armoyu-card-bg border border-armoyu-card-border rounded-3xl p-12 text-center">
339
+ <p className="text-armoyu-text-muted font-medium">Henüz bir paylaşım yapılmamış.</p>
340
+ </div>
341
+ )}
342
+ </div>
343
+ )}
344
+
345
+ {activeTab === 'Arkadaşlar' && (
346
+ <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
347
+ {(displayUser?.friends || []).map((friend) => (
348
+ <div
349
+ key={friend.id}
350
+ className="bg-armoyu-card-bg border border-armoyu-card-border rounded-3xl p-5 shadow-sm hover:shadow-md transition-all group"
351
+ >
352
+ <div className="flex items-center gap-4">
353
+ <div className="w-16 h-16 rounded-2xl overflow-hidden border-2 border-armoyu-card-border group-hover:scale-105 transition-transform">
354
+ <img src={friend.avatar} alt={friend.displayName} className="w-full h-full object-cover" />
355
+ </div>
356
+ <div className="flex-1 min-w-0">
357
+ <h4 className="text-base font-bold text-armoyu-text truncate">{friend.displayName}</h4>
358
+ <p className="text-sm font-medium text-blue-500 truncate">@{friend.username}</p>
359
+ <div className="flex items-center gap-2 mt-2">
360
+ <span className="w-2 h-2 rounded-full bg-emerald-500 animate-pulse"></span>
361
+ <span className="text-[10px] font-bold text-armoyu-text-muted uppercase tracking-wider">Çevrimiçi</span>
362
+ </div>
363
+ </div>
364
+ </div>
365
+
366
+ <div className="grid grid-cols-2 gap-3 mt-5">
367
+ <a
368
+ href={`/oyuncular/${friend.username}`}
369
+ className="py-2 text-center text-xs font-bold text-armoyu-text bg-black/5 dark:bg-white/5 hover:bg-black/10 dark:hover:bg-white/10 rounded-xl transition-colors border border-armoyu-card-border"
370
+ >
371
+ Profili Gör
372
+ </a>
373
+ <button className="py-2 text-center text-xs font-bold text-white bg-blue-500 hover:bg-blue-600 rounded-xl shadow-lg shadow-blue-500/20 transition-all">
374
+ Mesaj At
375
+ </button>
376
+ </div>
377
+ </div>
378
+ ))}
379
+ {(displayUser?.friends?.length || 0) === 0 && (
380
+ <div className="col-span-full bg-armoyu-card-bg border border-armoyu-card-border rounded-3xl p-12 text-center">
381
+ <p className="text-armoyu-text-muted font-medium">Henüz arkadaş listeniz boş.</p>
382
+ </div>
383
+ )}
384
+ </div>
385
+ )}
386
+
387
+ {activeTab === 'Kariyer' && (
388
+ <div className="space-y-8 py-4">
389
+ <div className="relative">
390
+ {/* Vertical Line */}
391
+ <div className="absolute left-6 top-8 bottom-4 w-1 bg-gradient-to-b from-blue-500 to-purple-500/20 rounded-full" />
392
+
393
+ <div className="space-y-12">
394
+ {mockCareerEvents.map((event: any) => (
395
+ <div key={event.id} className="relative flex gap-8 group">
396
+ {/* Event Dot/Icon */}
397
+ <div className="relative z-10">
398
+ <div className="w-12 h-12 rounded-2xl bg-armoyu-card-bg border-4 border-armoyu-bg flex items-center justify-center shadow-lg transition-transform group-hover:scale-110 duration-500 shrink-0">
399
+ {event.type === 'JOIN' && <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" className="text-emerald-500"><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"></path></svg>}
400
+ {event.type === 'RANK' && <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" className="text-blue-500"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path></svg>}
401
+ {event.type === 'GROUP' && <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" className="text-purple-500"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="9" cy="7" r="4"></circle><path d="M23 21v-2a4 4 0 0 0-3-3.87"></path><path d="M16 3.13a4 4 0 0 1 0 7.75"></path></svg>}
402
+ {event.type === 'AWARD' && <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" className="text-amber-500"><path d="M6 9H4.5a2.5 2.5 0 0 1 0-5H6"></path><path d="M18 9h1.5a2.5 2.5 0 0 0 0-5H18"></path><path d="M4 22h16"></path><path d="M10 14.66V17c0 .55-.47.98-.97 1.21C7.85 18.75 7 20.24 7 22"></path><path d="M14 14.66V17c0 .55.47.98.97 1.21C16.15 18.75 17 20.24 17 22"></path><path d="M18 2H6v7a6 6 0 0 0 12 0V2z"></path></svg>}
403
+ </div>
404
+ </div>
405
+
406
+ {/* Event Content */}
407
+ <div className="flex-1 pt-1 text-left">
408
+ <div className="flex flex-col md:flex-row md:items-center justify-between gap-2 mb-2">
409
+ <h4 className="text-lg font-black text-armoyu-text uppercase italic leading-none">{event.title}</h4>
410
+ <span className="text-[10px] font-black text-armoyu-text-muted bg-black/5 dark:bg-white/5 px-3 py-1.5 rounded-xl uppercase tracking-widest leading-none">{event.date}</span>
411
+ </div>
412
+ <div className="bg-armoyu-card-bg border border-armoyu-card-border p-6 rounded-[32px] shadow-sm group-hover:border-blue-500/30 transition-all leading-normal">
413
+ <p className="text-sm font-medium text-armoyu-text-muted leading-relaxed italic">
414
+ {event.description}
415
+ </p>
416
+ </div>
417
+ </div>
418
+ </div>
419
+ ))}
420
+ </div>
421
+ </div>
422
+ </div>
423
+ )}
424
+
425
+ {activeTab !== 'Gönderiler' && activeTab !== 'Arkadaşlar' && activeTab !== 'Kariyer' && (
426
+ <div className="bg-armoyu-card-bg border border-armoyu-card-border rounded-3xl p-12 shadow-sm flex flex-col items-center justify-center text-center">
427
+ <div className="w-16 h-16 bg-black/5 dark:bg-white/5 rounded-full flex items-center justify-center text-armoyu-text-muted mb-4 font-bold uppercase italic">
428
+ <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12.01" y2="16"></line></svg>
429
+ </div>
430
+ <h3 className="text-xl font-bold text-armoyu-text mb-2">Bu alan henüz yapım aşamasında</h3>
431
+ <p className="text-armoyu-text-muted text-sm max-w-sm italic">"{activeTab}" sekmesine ait içerikler yakında eklenecek. Sabrınız için teşekkür ederiz.</p>
432
+ </div>
433
+ )}
434
+
435
+ </div>
436
+
437
+ <CloudStorageModal isOpen={isCloudModalOpen} onClose={() => setIsCloudModalOpen(false)} />
438
+ <TeamSelectorModal
439
+ isOpen={isTeamModalOpen}
440
+ onClose={() => setIsTeamModalOpen(false)}
441
+ onSelect={handleTeamSelect}
442
+ initialTeam={displayUser?.favoriteTeam}
443
+ initialZodiac={displayUser?.zodiac}
444
+ />
445
+
446
+ {/* Bio Güncelleme Modalı */}
447
+ {isBioModalOpen && (
448
+ <div className="fixed inset-0 z-[200] flex items-center justify-center p-6 text-left">
449
+ <div className="absolute inset-0 bg-black/60 backdrop-blur-md" onClick={() => setIsBioModalOpen(false)} />
450
+ <div className="bg-armoyu-card-bg border border-armoyu-card-border rounded-[40px] w-full max-w-lg relative z-10 shadow-2xl animate-in zoom-in-95 duration-300 overflow-hidden">
451
+ <div className="p-8 border-b border-armoyu-card-border flex items-center justify-between bg-black/5">
452
+ <div className="flex items-center gap-4">
453
+ <div className="w-12 h-12 rounded-2xl bg-blue-500/10 flex items-center justify-center text-blue-500 text-2xl">
454
+ ✍️
455
+ </div>
456
+ <div>
457
+ <h3 className="text-xl font-black text-armoyu-text uppercase tracking-tight italic">Biyografini Düzenle</h3>
458
+ <p className="text-xs font-medium text-armoyu-text-muted">Kendini ARMOYU üyelerine tanıt.</p>
459
+ </div>
460
+ </div>
461
+ <button onClick={() => setIsBioModalOpen(false)} className="p-2 text-armoyu-text-muted hover:text-armoyu-text bg-black/10 rounded-xl transition-all">
462
+ <X size={20} />
463
+ </button>
464
+ </div>
465
+
466
+ <div className="p-8 space-y-6">
467
+ <div className="space-y-2">
468
+ <label className="text-[10px] font-black text-armoyu-text-muted uppercase tracking-widest ml-4">HAKKINDA</label>
469
+ <textarea
470
+ className="w-full bg-black/10 border border-armoyu-card-border rounded-3xl px-6 py-5 text-sm font-bold text-armoyu-text focus:outline-none focus:border-blue-500 transition-all min-h-[150px] resize-none"
471
+ placeholder="Kendinden bahset..."
472
+ value={tempBio}
473
+ onChange={(e) => setTempBio(e.target.value)}
474
+ autoFocus
475
+ />
476
+ </div>
477
+
478
+ <button
479
+ onClick={handleBioSave}
480
+ className="w-full py-5 bg-blue-600 hover:bg-blue-500 text-white font-black rounded-[20px] text-xs uppercase tracking-widest shadow-xl shadow-blue-500/20 active:scale-95 transition-all flex items-center justify-center gap-2 italic"
481
+ >
482
+ DEĞİŞİKLİKLERİ KAYDET
483
+ </button>
484
+ </div>
485
+ </div>
486
+ </div>
487
+ )}
488
+ </div>
489
+ );
490
+ }
491
+
@@ -0,0 +1,128 @@
1
+ 'use client';
2
+
3
+ import React, { useState } from 'react';
4
+ import { EditProfileModal } from './EditProfileModal';
5
+ import { User } from '@armoyu/core';
6
+
7
+ import { userList, MOCK_RANKING_POPULARITY } from '../../../lib/constants/seedData';
8
+
9
+ interface ProfileHeaderProps {
10
+ user: User | any;
11
+ isOwnProfile?: boolean;
12
+ }
13
+
14
+ export function ProfileHeader({ user, isOwnProfile }: ProfileHeaderProps) {
15
+ const [isEditModalOpen, setIsEditModalOpen] = useState(false);
16
+
17
+ const name = user.displayName || user.name || 'İsimsiz Oyuncu';
18
+ const banner = user.banner || 'https://images.unsplash.com/photo-1614680376593-902f74cf0d41?q=80&w=2574&auto=format&fit=crop';
19
+ const badge = user.badge || user.role?.name || '';
20
+ const socials = user.socials || {};
21
+
22
+ // Sıralama Bilgisi
23
+ const rankIndex = MOCK_RANKING_POPULARITY.findIndex((r: any) => r.username === user.username);
24
+ const rank = rankIndex !== -1 ? rankIndex + 1 : null;
25
+
26
+ return (
27
+ <div className="w-full bg-armoyu-card-bg border border-armoyu-card-border rounded-3xl overflow-hidden shadow-sm">
28
+ {/* Banner */}
29
+ <div className="h-48 md:h-72 w-full relative">
30
+ <img src={banner} alt="Kapak" className="w-full h-full object-cover" />
31
+ <div className="absolute inset-0 bg-gradient-to-t from-black/60 to-transparent"></div>
32
+ </div>
33
+
34
+ {/* Profil Alt Kısım */}
35
+ <div className="px-6 md:px-10 pb-6 relative flex flex-col md:flex-row md:justify-between md:items-end">
36
+
37
+ {/* Avatar & İsim */}
38
+ <div className="flex flex-col md:flex-row md:items-end gap-4 md:gap-6 -mt-16 md:-mt-20 relative z-10 mb-6 md:mb-0">
39
+ <div className="relative group shrink-0">
40
+ {/* Avatar Container */}
41
+ <div className="w-32 h-32 md:w-40 md:h-40 rounded-full border-4 border-armoyu-bg overflow-hidden shadow-xl bg-black/5 dark:bg-white/5">
42
+ <img src={user.avatar} alt={name} className="w-full h-full object-cover" />
43
+ </div>
44
+
45
+ {/* Sıralama Rozeti */}
46
+ {rank && (
47
+ <div className={`absolute -top-1 -right-1 w-10 h-10 md:w-12 md:h-12 rounded-2xl flex flex-col items-center justify-center shadow-xl border-2 transform rotate-12 group-hover:rotate-0 transition-transform duration-500 z-20 ${
48
+ rank === 1 ? 'bg-gradient-to-br from-yellow-400 via-yellow-500 to-yellow-600 border-yellow-300' :
49
+ rank === 2 ? 'bg-gradient-to-br from-slate-300 via-slate-400 to-slate-500 border-slate-200' :
50
+ rank === 3 ? 'bg-gradient-to-br from-orange-400 via-orange-500 to-orange-600 border-orange-300' :
51
+ 'bg-blue-600 border-blue-400'
52
+ }`}>
53
+ {rank === 1 && (
54
+ <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="currentColor" className="text-yellow-100 mb-0.5"><path d="M5 21h14a2 2 0 0 0 2-2V5L12 2 3 5v14a2 2 0 0 0 2 2z"></path></svg>
55
+ )}
56
+ <span className="text-[10px] md:text-xs font-black text-white leading-none">#{rank}</span>
57
+ <span className="text-[6px] md:text-[8px] font-bold text-white/80 uppercase tracking-tighter">POP</span>
58
+
59
+ </div>
60
+ )}
61
+ </div>
62
+
63
+ <div className="pb-2 text-center md:text-left">
64
+ <div className="flex flex-col md:flex-row items-center gap-2 md:gap-3">
65
+ <h1 className="text-2xl md:text-3xl font-black text-armoyu-text tracking-tight">{name}</h1>
66
+ {badge && (
67
+ <span className="bg-blue-500/10 text-blue-600 dark:text-blue-400 text-xs font-bold px-2.5 py-1 rounded-md uppercase tracking-wider border border-blue-500/20 shadow-sm">{badge}</span>
68
+ )}
69
+ </div>
70
+ <p className="text-blue-600 dark:text-blue-400 font-extrabold mt-1 text-sm md:text-base mb-3">@{user.username}</p>
71
+
72
+ {/* Sosyal Medya İkonları */}
73
+ {socials && (
74
+ <div className="flex items-center justify-center md:justify-start gap-4 mt-2">
75
+ {socials.discord && (
76
+ <a href={socials.discord} target="_blank" rel="noopener noreferrer" className="w-8 h-8 rounded-full bg-[#5865F2]/10 hover:bg-[#5865F2]/20 text-[#5865F2] flex items-center justify-center transition-all hover:scale-110" title="Discord">
77
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" 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>
78
+ </a>
79
+ )}
80
+ {socials.steam && (
81
+ <a href={socials.steam} target="_blank" rel="noopener noreferrer" className="w-8 h-8 rounded-full bg-[#171a21]/5 hover:bg-[#171a21]/15 dark:bg-[#171a21]/80 dark:hover:bg-[#171a21] text-[#171a21] dark:text-white flex items-center justify-center transition-all hover:scale-110" title="Steam">
82
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" 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>
83
+ </a>
84
+ )}
85
+ {socials.instagram && (
86
+ <a href={socials.instagram} target="_blank" rel="noopener noreferrer" className="w-8 h-8 rounded-full bg-pink-500/10 hover:bg-pink-500/20 text-pink-500 flex items-center justify-center transition-all hover:scale-110" title="Instagram">
87
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" 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>
88
+ </a>
89
+ )}
90
+ {socials.linkedin && (
91
+ <a href={socials.linkedin} target="_blank" rel="noopener noreferrer" className="w-8 h-8 rounded-full bg-[#0077b5]/10 hover:bg-[#0077b5]/20 text-[#0077b5] flex items-center justify-center transition-all hover:scale-110" title="LinkedIn">
92
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" 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>
93
+ </a>
94
+ )}
95
+ {socials.facebook && (
96
+ <a href={socials.facebook} target="_blank" rel="noopener noreferrer" className="w-8 h-8 rounded-full bg-[#1877F2]/10 hover:bg-[#1877F2]/20 text-[#1877F2] flex items-center justify-center transition-all hover:scale-110" title="Facebook">
97
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" 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>
98
+ </a>
99
+ )}
100
+ </div>
101
+ )}
102
+ </div>
103
+ </div>
104
+
105
+ {/* Aksiyon Butonları */}
106
+ <div className="flex gap-3 pb-2 flex-wrap justify-center md:justify-end w-full md:w-auto">
107
+ {isOwnProfile ? (
108
+ <button onClick={() => setIsEditModalOpen(true)} className="flex-1 md:flex-none px-6 py-2.5 bg-black/5 dark:bg-white/5 hover:bg-black/10 dark:hover:bg-white/10 text-armoyu-text font-bold rounded-xl transition-all border border-armoyu-card-border shadow-sm">
109
+ Profili Düzenle
110
+ </button>
111
+ ) : (
112
+ <>
113
+ <button className="flex-1 md:flex-none px-8 py-2.5 bg-gradient-to-r from-blue-600 to-blue-500 hover:from-blue-700 hover:to-blue-600 text-white font-bold rounded-xl shadow-[0_0_15px_rgba(37,99,235,0.4)] transition-all">
114
+ Takip Et
115
+ </button>
116
+ <button className="px-4 py-2.5 bg-black/5 dark:bg-white/5 hover:bg-black/10 dark:hover:bg-white/10 text-armoyu-text rounded-xl transition-all border border-armoyu-card-border" title="Mesaj Gönder">
117
+ <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="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path></svg>
118
+ </button>
119
+ </>
120
+ )}
121
+ </div>
122
+ </div>
123
+
124
+ <EditProfileModal isOpen={isEditModalOpen} onClose={() => setIsEditModalOpen(false)} user={user} />
125
+ </div>
126
+ );
127
+ }
128
+