@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
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@armoyu/ui",
3
+ "version": "1.0.0",
4
+ "description": "UI component library for ARMOYU platforms.",
5
+ "main": "dist/index.js",
6
+ "module": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "files": [
9
+ "dist",
10
+ "src",
11
+ "tailwind.config.ts",
12
+ "postcss.config.js",
13
+ "next.config.ts"
14
+ ],
15
+ "private": false,
16
+ "scripts": {
17
+ "build": "tsc -p tsconfig.lib.json",
18
+ "watch": "tsc -p tsconfig.lib.json --watch",
19
+ "dev": "next dev"
20
+ },
21
+ "peerDependencies": {
22
+ "@armoyu/core": "file:../armoyu-core/armoyu-core-1.0.0.tgz",
23
+ "lucide-react": "^1.7.0",
24
+ "next": "^16.1.7",
25
+ "react": "^19.0.0",
26
+ "react-dom": "^19.0.0",
27
+ "socket.io-client": "^4.8.3"
28
+ },
29
+ "devDependencies": {
30
+ "@armoyu/core": "file:../armoyu-core/armoyu-core-1.0.0.tgz",
31
+ "@tailwindcss/postcss": "^4.2.2",
32
+ "@types/node": "^20.0.0",
33
+ "@types/react": "^19.2.14",
34
+ "@types/react-dom": "^19.2.3",
35
+ "autoprefixer": "^10.4.27",
36
+ "lucide-react": "^1.7.0",
37
+ "next": "^16.1.7",
38
+ "postcss": "^8.5.8",
39
+ "react": "^19.2.4",
40
+ "react-dom": "^19.2.4",
41
+ "socket.io-client": "^4.8.3",
42
+ "tailwindcss": "^4.2.2",
43
+ "tsc-alias": "^1.8.16",
44
+ "typescript": "^5.9.3"
45
+ }
46
+ }
@@ -0,0 +1,6 @@
1
+ module.exports = {
2
+ plugins: {
3
+ '@tailwindcss/postcss': {},
4
+ autoprefixer: {},
5
+ },
6
+ }
@@ -0,0 +1,64 @@
1
+ import type { Metadata } from 'next';
2
+ import { Inter } from 'next/font/google';
3
+ import "../globals.css";
4
+ import { ThemeProvider } from "../context/ThemeContext";
5
+ import { LayoutProvider } from "../context/LayoutContext";
6
+ import { AuthProvider } from "../context/AuthContext";
7
+ import { SocketProvider } from "../context/SocketContext";
8
+ import { CartProvider } from "../context/CartContext";
9
+ import { ChatProvider } from "../context/ChatContext";
10
+
11
+ const inter = Inter({ subsets: ['latin'] });
12
+
13
+ export const metadata: Metadata = {
14
+ title: "ARMOYU UI Showcase",
15
+ description: "Visual component gallery for Armoyu UI Library",
16
+ };
17
+
18
+ export default function RootLayout({
19
+ children,
20
+ }: Readonly<{
21
+ children: React.ReactNode;
22
+ }>) {
23
+ return (
24
+ <html lang="tr" className="scroll-smooth dark" suppressHydrationWarning>
25
+ <head>
26
+ <script
27
+ dangerouslySetInnerHTML={{
28
+ __html: `
29
+ (function() {
30
+ try {
31
+ var theme = localStorage.getItem('armoyu_theme');
32
+ if (theme === 'light') {
33
+ document.documentElement.classList.remove('dark');
34
+ } else {
35
+ document.documentElement.classList.add('dark');
36
+ }
37
+ } catch (e) {}
38
+ })();
39
+ `,
40
+ }}
41
+ />
42
+ </head>
43
+ <body className={`${inter.className} bg-armoyu-bg text-armoyu-text min-h-screen flex flex-col antialiased relative transition-colors duration-500`}>
44
+ <ThemeProvider>
45
+ <AuthProvider>
46
+ <SocketProvider>
47
+ <LayoutProvider>
48
+ <CartProvider>
49
+ <ChatProvider>
50
+ <div className="fixed inset-0 pointer-events-none z-[-1]">
51
+ <div className="absolute top-[-10%] left-[-10%] w-[40%] h-[40%] bg-blue-600/20 blur-[120px] rounded-full" />
52
+ <div className="absolute bottom-[-10%] right-[-10%] w-[40%] h-[40%] bg-purple-600/20 blur-[120px] rounded-full" />
53
+ </div>
54
+ {children}
55
+ </ChatProvider>
56
+ </CartProvider>
57
+ </LayoutProvider>
58
+ </SocketProvider>
59
+ </AuthProvider>
60
+ </ThemeProvider>
61
+ </body>
62
+ </html>
63
+ );
64
+ }
@@ -0,0 +1,101 @@
1
+ 'use client';
2
+
3
+ import React, { useState } from 'react';
4
+ import {
5
+ Box,
6
+ Layers,
7
+ Share2,
8
+ User,
9
+ MessageSquare,
10
+ ShoppingBag,
11
+ Users
12
+ } from 'lucide-react';
13
+
14
+ // Showcase Components
15
+ import { GeneralTab } from '../components/showcase/GeneralTab';
16
+ import { CorporateTab } from '../components/showcase/CorporateTab';
17
+ import { SocialTab } from '../components/showcase/SocialTab';
18
+ import { ProfileTab } from '../components/showcase/ProfileTab';
19
+ import { MessagesTab } from '../components/showcase/MessagesTab';
20
+ import { CommunityTab } from '../components/showcase/CommunityTab';
21
+ import { ShopTab } from '../components/showcase/ShopTab';
22
+
23
+ export default function ShowcasePage() {
24
+ const [activeTab, setActiveTab] = useState('Genel');
25
+
26
+ const tabs = [
27
+ { name: 'Genel', icon: <Box size={18} /> },
28
+ { name: 'Kurumsal', icon: <Layers size={18} /> },
29
+ { name: 'Sosyal', icon: <Share2 size={18} /> },
30
+ { name: 'Profil', icon: <User size={18} /> },
31
+ { name: 'Mesajlar', icon: <MessageSquare size={18} /> },
32
+ { name: 'Topluluk', icon: <Users size={18} /> },
33
+ { name: 'Mağaza', icon: <ShoppingBag size={18} /> },
34
+ ];
35
+
36
+ const renderTabContent = () => {
37
+ switch (activeTab) {
38
+ case 'Genel': return <GeneralTab />;
39
+ case 'Kurumsal': return <CorporateTab />;
40
+ case 'Sosyal': return <SocialTab />;
41
+ case 'Profil': return <ProfileTab />;
42
+ case 'Mesajlar': return <MessagesTab />;
43
+ case 'Topluluk': return <CommunityTab />;
44
+ case 'Mağaza': return <ShopTab />;
45
+ default: return <GeneralTab />;
46
+ }
47
+ };
48
+
49
+ return (
50
+ <div className="min-h-screen bg-armoyu-bg flex flex-col font-sans selection:bg-blue-500/30">
51
+
52
+ {/* MINIMAL SHOWCASE HEADER */}
53
+ <nav className="sticky top-0 z-[110] w-full border-b border-white/5 bg-black/20 backdrop-blur-2xl">
54
+ <div className="max-w-7xl mx-auto px-6 h-16 flex items-center justify-between">
55
+ <div className="flex items-center gap-4">
56
+ <div className="w-8 h-8 rounded-xl bg-gradient-to-br from-blue-600 to-indigo-600 flex items-center justify-center shadow-lg shadow-blue-600/20">
57
+ <span className="text-white font-black text-xs italic">UI</span>
58
+ </div>
59
+ <div>
60
+ <h2 className="text-sm font-black text-armoyu-text uppercase tracking-tighter italic">ARMOYU <span className="text-blue-500">VITRINI</span></h2>
61
+ <p className="text-[9px] font-bold text-armoyu-text-muted uppercase tracking-[0.2em] opacity-50">V3 Design System</p>
62
+ </div>
63
+ </div>
64
+
65
+ <div className="hidden md:flex items-center gap-1 bg-white/5 p-1 rounded-xl border border-white/5">
66
+ {tabs.map((tab) => (
67
+ <button
68
+ key={tab.name}
69
+ onClick={() => setActiveTab(tab.name)}
70
+ className={`px-4 py-2 rounded-lg text-[10px] font-black uppercase tracking-widest transition-all italic ${
71
+ activeTab === tab.name
72
+ ? 'bg-white dark:bg-white/10 text-blue-500 shadow-sm'
73
+ : 'text-armoyu-text-muted hover:text-armoyu-text'
74
+ }`}
75
+ >
76
+ {tab.name}
77
+ </button>
78
+ ))}
79
+ </div>
80
+
81
+ <div className="flex items-center gap-3">
82
+ <span className="text-[10px] font-black py-1.5 px-3 rounded-full bg-emerald-500/10 text-emerald-500 border border-emerald-500/20 uppercase tracking-widest">v1.0.0 Stable</span>
83
+ </div>
84
+ </div>
85
+ </nav>
86
+
87
+ <main className="flex-1 max-w-7xl mx-auto w-full px-4 py-12">
88
+ <div className="animate-in fade-in slide-in-from-bottom-4 duration-700">
89
+ {renderTabContent()}
90
+ </div>
91
+ </main>
92
+
93
+ {/* MINIMAL SHOWCASE FOOTER */}
94
+ <footer className="py-8 border-t border-white/5 text-center">
95
+ <p className="text-[10px] font-black text-armoyu-text-muted uppercase tracking-[0.4em] opacity-30 italic">
96
+ © 2024 ARMOYU DEVELOPER EXPERIENCE • VITRIN MODU
97
+ </p>
98
+ </footer>
99
+ </div>
100
+ );
101
+ }
@@ -0,0 +1,41 @@
1
+ import * as React from "react"
2
+
3
+ export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
4
+ variant?: 'primary' | 'secondary' | 'danger' | 'ghost';
5
+ isLoading?: boolean;
6
+ }
7
+
8
+ const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
9
+ ({ className = '', variant = 'primary', isLoading, children, ...props }, ref) => {
10
+
11
+ // Core aesthetic premium styling (Glassmorphism & Modern UI)
12
+ const baseStyles = "inline-flex items-center justify-center rounded-lg text-sm font-medium transition-all duration-300 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 disabled:pointer-events-none disabled:opacity-50 h-10 px-4 py-2 cursor-pointer";
13
+
14
+ const variants = {
15
+ primary: "bg-blue-600 text-white hover:bg-blue-700 hover:shadow-[0_0_15px_rgba(37,99,235,0.5)] border border-transparent",
16
+ secondary: "bg-white/5 text-white hover:bg-white/10 backdrop-blur-md border border-white/10 hover:border-white/20 shadow-[0_4px_30px_rgba(0,0,0,0.1)]",
17
+ danger: "bg-red-500/80 text-white hover:bg-red-600 border border-red-500/50 hover:shadow-[0_0_15px_rgba(239,68,68,0.5)]",
18
+ ghost: "hover:bg-white/10 hover:text-white text-gray-300"
19
+ };
20
+
21
+ return (
22
+ <button
23
+ ref={ref}
24
+ className={`${baseStyles} ${variants[variant]} ${className}`}
25
+ disabled={isLoading || props.disabled}
26
+ {...props}
27
+ >
28
+ {isLoading ? (
29
+ <span className="mr-2 relative flex h-4 w-4">
30
+ <span className="animate-ping absolute inline-flex h-full w-full rounded-full bg-white opacity-75"></span>
31
+ <span className="relative inline-flex rounded-full h-4 w-4 bg-white/50 border-2 border-white border-t-transparent animate-spin"></span>
32
+ </span>
33
+ ) : null}
34
+ {children}
35
+ </button>
36
+ )
37
+ }
38
+ )
39
+ Button.displayName = "Button"
40
+
41
+ export { Button }
@@ -0,0 +1,66 @@
1
+ import React from 'react';
2
+
3
+ export interface GenderStatsBarProps {
4
+ maleCount: number;
5
+ femaleCount: number;
6
+ }
7
+
8
+ export function GenderStatsBar({ maleCount = 50, femaleCount = 50 }: GenderStatsBarProps) {
9
+ const total = maleCount + femaleCount;
10
+ const malePercentage = total > 0 ? Math.round((maleCount / total) * 100) : 0;
11
+ const femalePercentage = total > 0 ? 100 - malePercentage : 0;
12
+
13
+ return (
14
+ <div className="w-full space-y-3">
15
+ {/* Etiketler ve İkonlar */}
16
+ <div className="flex justify-between items-end px-1">
17
+
18
+ {/* Erkek */}
19
+ <div className="flex items-center gap-2 text-blue-400">
20
+ <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" className="drop-shadow-[0_0_8px_rgba(59,130,246,0.6)]">
21
+ <circle cx="10" cy="14" r="5" />
22
+ <line x1="13.5" y1="10.5" x2="19" y2="5" />
23
+ <polyline points="14 5 19 5 19 10" />
24
+ </svg>
25
+ <span className="font-extrabold text-xl tracking-tight">{malePercentage}%</span>
26
+ <span className="text-gray-400 text-sm hidden sm:inline border-l border-white/10 pl-2 ml-1">
27
+ Erkek Üyeler ({maleCount.toLocaleString('tr-TR')})
28
+ </span>
29
+ </div>
30
+
31
+ {/* Kadın */}
32
+ <div className="flex items-center gap-2 text-pink-400">
33
+ <span className="text-gray-400 text-sm hidden sm:inline border-r border-white/10 pr-2 mr-1 text-right">
34
+ Kadın Üyeler ({femaleCount.toLocaleString('tr-TR')})
35
+ </span>
36
+ <span className="font-extrabold text-xl tracking-tight">{femalePercentage}%</span>
37
+ <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" className="drop-shadow-[0_0_8px_rgba(236,72,153,0.6)]">
38
+ <circle cx="12" cy="10" r="5" />
39
+ <line x1="12" y1="15" x2="12" y2="22" />
40
+ <line x1="9" y1="19" x2="15" y2="19" />
41
+ </svg>
42
+ </div>
43
+
44
+ </div>
45
+
46
+ {/* Progress Bar Container */}
47
+ <div className="w-full h-5 rounded-full bg-white/5 border border-white/10 flex overflow-hidden shadow-inner p-0.5 relative">
48
+ <div className="absolute inset-0 bg-gradient-to-r from-blue-500/20 to-pink-500/20 blur-xl"></div>
49
+
50
+ {/* Erkek Bar */}
51
+ <div
52
+ className="h-full bg-gradient-to-r from-blue-600 to-blue-400 shadow-[0_0_15px_rgba(59,130,246,0.8)] transition-all duration-[1500ms] cubic-bezier(0.4, 0, 0.2, 1) rounded-full z-10"
53
+ style={{ width: `${malePercentage}%` }}
54
+ title={`Erkek: ${malePercentage}%`}
55
+ />
56
+
57
+ {/* Kadın Bar */}
58
+ <div
59
+ className="h-full bg-gradient-to-r from-pink-400 to-pink-600 shadow-[0_0_15px_rgba(236,72,153,0.8)] transition-all duration-[1500ms] cubic-bezier(0.4, 0, 0.2, 1) rounded-full ml-1 z-10"
60
+ style={{ width: `calc(${femalePercentage}% - 4px)` }}
61
+ title={`Kadın: ${femalePercentage}%`}
62
+ />
63
+ </div>
64
+ </div>
65
+ );
66
+ }
@@ -0,0 +1,50 @@
1
+ 'use client';
2
+
3
+ import React, { useEffect, useState } from 'react';
4
+
5
+ interface RollingNumberProps {
6
+ value: number | string;
7
+ className?: string;
8
+ }
9
+
10
+ export function RollingNumber({ value, className = "" }: RollingNumberProps) {
11
+ const [digits, setDigits] = useState<string[]>([]);
12
+
13
+ useEffect(() => {
14
+ setDigits(value.toString().split(''));
15
+ }, [value]);
16
+
17
+ return (
18
+ <div className={`flex items-center overflow-hidden h-[1.2em] leading-[1.2em] ${className}`}>
19
+ {digits.map((digit, idx) => (
20
+ <Digit key={`${idx}-${digit}`} char={digit} />
21
+ ))}
22
+ </div>
23
+ );
24
+ }
25
+
26
+ function Digit({ char }: { char: string }) {
27
+ const isNumber = !isNaN(parseInt(char));
28
+ const [offset, setOffset] = useState(0);
29
+
30
+ useEffect(() => {
31
+ if (isNumber) {
32
+ setOffset(parseInt(char) * 100);
33
+ }
34
+ }, [char, isNumber]);
35
+
36
+ if (!isNumber) {
37
+ return <span className="inline-block transition-all duration-500">{char}</span>;
38
+ }
39
+
40
+ return (
41
+ <div className="relative w-[0.6em] h-[1.2em] flex flex-col transition-transform duration-500 ease-out"
42
+ style={{ transform: `translateY(-${offset}%)` }}>
43
+ {[0, 1, 2, 3, 4, 5, 6, 7, 8, 9].map((n) => (
44
+ <span key={n} className="h-[1.2em] flex items-center justify-center shrink-0">
45
+ {n}
46
+ </span>
47
+ ))}
48
+ </div>
49
+ );
50
+ }
@@ -0,0 +1,114 @@
1
+ 'use client';
2
+
3
+ import React, { useState, useEffect } from 'react';
4
+
5
+ export interface SlideItem {
6
+ wallpaper: string;
7
+ content: React.ReactNode;
8
+ }
9
+
10
+ export interface SliderProps {
11
+ slides?: SlideItem[];
12
+ durationTime?: number; // In milliseconds
13
+ }
14
+
15
+ const defaultSlides: SlideItem[] = [
16
+ {
17
+ wallpaper: 'https://images.unsplash.com/photo-1542751371-adc38448a05e?q=80&w=2070&auto=format&fit=crop',
18
+ content: (
19
+ <div className="space-y-4">
20
+ <h2 className="text-4xl md:text-6xl font-black text-white drop-shadow-lg">E-Spor Turnuvaları</h2>
21
+ <p className="text-lg md:text-xl text-gray-200 drop-shadow-md font-medium">Yeteneklerini göster ve devasa ödül havuzundan payını al.</p>
22
+ </div>
23
+ )
24
+ },
25
+ {
26
+ wallpaper: 'https://images.unsplash.com/photo-1511512578047-dfb367046420?q=80&w=2071&auto=format&fit=crop',
27
+ content: (
28
+ <div className="space-y-4">
29
+ <h2 className="text-4xl md:text-6xl font-black text-white drop-shadow-lg">ARMOYU Minecraft</h2>
30
+ <p className="text-lg md:text-xl text-gray-200 drop-shadow-md font-medium">Gelişmiş eklentiler ve bitmeyen aksiyon mc.armoyu.com'da.</p>
31
+ </div>
32
+ )
33
+ },
34
+ {
35
+ wallpaper: 'https://images.unsplash.com/photo-1552820728-8b83bb6b773f?q=80&w=2070&auto=format&fit=crop',
36
+ content: (
37
+ <div className="space-y-4">
38
+ <h2 className="text-4xl md:text-6xl font-black text-white drop-shadow-lg">Büyük Topluluk</h2>
39
+ <p className="text-lg md:text-xl text-gray-200 drop-shadow-md font-medium">Binlerce oyuncuyla tanış, ekibini kur ve rekabete katıl.</p>
40
+ </div>
41
+ )
42
+ }
43
+ ];
44
+
45
+ export function Slider({ slides = defaultSlides, durationTime = 5000 }: SliderProps) {
46
+ const [currentIndex, setCurrentIndex] = useState(0);
47
+
48
+ useEffect(() => {
49
+ if (!slides || slides.length <= 1) return;
50
+
51
+ const timer = setInterval(() => {
52
+ setCurrentIndex((prev) => (prev + 1) % slides.length);
53
+ }, durationTime);
54
+
55
+ return () => clearInterval(timer);
56
+ }, [slides, durationTime, currentIndex]);
57
+
58
+ if (!slides || slides.length === 0) return null;
59
+
60
+ return (
61
+ <div className="relative w-full h-full min-h-[400px] md:min-h-[500px] rounded-[30px] overflow-hidden group shadow-2xl border border-white/5">
62
+ {/* Background Images */}
63
+ {slides.map((slide, index) => (
64
+ <div
65
+ key={index}
66
+ className={`absolute inset-0 transition-opacity duration-1000 ease-in-out ${
67
+ index === currentIndex ? 'opacity-100 z-10' : 'opacity-0 z-0'
68
+ }`}
69
+ >
70
+ <div className="absolute inset-0 bg-gradient-to-t from-[#0a0a0e] via-black/40 to-transparent z-10" />
71
+ <img
72
+ src={slide.wallpaper}
73
+ alt={`Slide ${index}`}
74
+ className="absolute inset-0 w-full h-full object-cover transition-transform duration-[10000ms] ease-linear overflow-hidden"
75
+ style={{
76
+ transform: index === currentIndex ? 'scale(1.05)' : 'scale(1)',
77
+ }}
78
+ />
79
+ <div className="absolute inset-0 z-20 flex flex-col justify-end pb-20 px-8 lg:px-16 text-left max-w-7xl mx-auto">
80
+ <div className={`transition-all duration-700 transform ${index === currentIndex ? 'translate-y-0 opacity-100' : 'translate-y-8 opacity-0'}`}>
81
+ {slide.content}
82
+ </div>
83
+ </div>
84
+ </div>
85
+ ))}
86
+
87
+ {/* Progress Bar Container */}
88
+ <div className="absolute bottom-6 left-0 right-0 z-20 flex justify-center px-8 lg:px-16 max-w-7xl mx-auto">
89
+ <div className="flex gap-3 w-full">
90
+ {slides.map((_, index) => (
91
+ <div
92
+ key={index}
93
+ className="h-1 lg:h-1.5 flex-1 bg-white/20 rounded-full overflow-hidden cursor-pointer backdrop-blur-sm transition-all hover:bg-white/40"
94
+ onClick={() => setCurrentIndex(index)}
95
+ >
96
+ {index === currentIndex && (
97
+ <div
98
+ key={`progress-${currentIndex}`}
99
+ className="h-full bg-blue-500 rounded-full shadow-[0_0_10px_rgba(59,130,246,0.8)]"
100
+ style={{
101
+ animation: `progressBar ${durationTime}ms linear forwards`
102
+ }}
103
+ />
104
+ )}
105
+ {index < currentIndex && (
106
+ <div className="h-full bg-white/60 rounded-full" />
107
+ )}
108
+ </div>
109
+ ))}
110
+ </div>
111
+ </div>
112
+ </div>
113
+ );
114
+ }
@@ -0,0 +1,35 @@
1
+ 'use client';
2
+
3
+ import React from 'react';
4
+ import { GlobalStats } from "@armoyu/core";
5
+
6
+ export interface StatsGridProps {
7
+ stats: GlobalStats;
8
+ }
9
+
10
+ export function StatsGrid({ stats }: StatsGridProps) {
11
+ const statItems = [
12
+ { label: 'Toplam Oyuncu', value: stats.totalPlayers.toLocaleString('tr-TR'), icon: '🎮', color: 'text-blue-400' },
13
+ { label: 'Aktif Kullanıcı (24s)', value: stats.activeUsers24h.toLocaleString('tr-TR'), icon: '🔥', color: 'text-orange-400' },
14
+ { label: 'Açılan Forum', value: stats.totalForums.toLocaleString('tr-TR'), icon: '💬', color: 'text-purple-400' },
15
+ { label: 'Oynanan Maç', value: stats.totalMatchesPlayed.toLocaleString('tr-TR'), icon: '⚔️', color: 'text-red-400' },
16
+ { label: 'Kurulan Grup', value: stats.totalGuilds.toLocaleString('tr-TR'), icon: '🛡️', color: 'text-yellow-400' },
17
+ { label: 'Düzenlenen Anket', value: stats.totalPolls.toLocaleString('tr-TR'), icon: '📊', color: 'text-emerald-400' },
18
+ ];
19
+
20
+ return (
21
+ <div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4">
22
+ {statItems.map((item, idx) => (
23
+ <div key={idx} className="bg-white/5 p-4 flex items-center gap-4 rounded-2xl border border-white/5 hover:bg-white/10 transition-colors shadow-lg hover:-translate-y-1 duration-300 cursor-default">
24
+ <div className="text-3xl bg-[#0a0a0e]/50 p-3 rounded-xl border border-white/10 shadow-inner">
25
+ {item.icon}
26
+ </div>
27
+ <div>
28
+ <p className="text-gray-400 text-sm font-medium">{item.label}</p>
29
+ <p className={`text-2xl font-black tracking-tight ${item.color}`}>{item.value}</p>
30
+ </div>
31
+ </div>
32
+ ))}
33
+ </div>
34
+ );
35
+ }
@@ -0,0 +1,39 @@
1
+ 'use client';
2
+
3
+ import React from 'react';
4
+
5
+ export type ViewMode = 'grid' | 'table';
6
+
7
+ interface ViewModeToggleProps {
8
+ mode: ViewMode;
9
+ onChange: (mode: ViewMode) => void;
10
+ }
11
+
12
+ export function ViewModeToggle({ mode, onChange }: ViewModeToggleProps) {
13
+ return (
14
+ <div className="flex bg-black/5 dark:bg-white/5 p-1 rounded-2xl border border-black/5 dark:border-white/5 shadow-inner">
15
+ <button
16
+ onClick={() => onChange('grid')}
17
+ className={`p-2.5 rounded-xl transition-all ${
18
+ mode === 'grid'
19
+ ? 'bg-white dark:bg-blue-600 text-blue-600 dark:text-white shadow-lg'
20
+ : 'text-gray-400 hover:text-white hover:bg-black/5 dark:hover:bg-white/5'
21
+ }`}
22
+ title="Izgara Görünümü"
23
+ >
24
+ <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>
25
+ </button>
26
+ <button
27
+ onClick={() => onChange('table')}
28
+ className={`p-2.5 rounded-xl transition-all ${
29
+ mode === 'table'
30
+ ? 'bg-white dark:bg-blue-600 text-blue-600 dark:text-white shadow-lg'
31
+ : 'text-gray-400 hover:text-white hover:bg-black/5 dark:hover:bg-white/5'
32
+ }`}
33
+ title="Tablo Görünümü"
34
+ >
35
+ <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"><line x1="8" y1="6" x2="21" y2="6"></line><line x1="8" y1="12" x2="21" y2="12"></line><line x1="8" y1="18" x2="21" y2="18"></line><line x1="3" y1="6" x2="3.01" y2="6"></line><line x1="3" y1="12" x2="3.01" y2="12"></line><line x1="3" y1="18" x2="3.01" y2="18"></line></svg>
36
+ </button>
37
+ </div>
38
+ );
39
+ }