@armoyu/ui 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/dist/app/api/proxy/[...path]/route.d.ts +22 -0
  2. package/dist/app/api/proxy/[...path]/route.d.ts.map +1 -0
  3. package/dist/app/api/proxy/[...path]/route.js +89 -0
  4. package/dist/app/api/proxy/[...path]/route.js.map +1 -0
  5. package/dist/app/layout.js +11 -11
  6. package/dist/components/Button.d.ts +7 -7
  7. package/dist/components/Button.js +15 -15
  8. package/dist/components/GenderStatsBar.d.ts +5 -5
  9. package/dist/components/GenderStatsBar.js +7 -7
  10. package/dist/components/RollingNumber.d.ts +6 -6
  11. package/dist/components/RollingNumber.js +23 -23
  12. package/dist/components/Slider.d.ts +10 -10
  13. package/dist/components/Slider.js +35 -35
  14. package/dist/components/StatsGrid.js +13 -13
  15. package/dist/components/ViewModeToggle.d.ts +7 -7
  16. package/dist/components/ViewModeToggle.js +9 -9
  17. package/dist/components/modules/auth/Dashboard.js +250 -250
  18. package/dist/components/modules/auth/MediaLightbox.d.ts +13 -13
  19. package/dist/components/modules/auth/MediaLightbox.js +46 -46
  20. package/dist/components/modules/auth/PostCard.js +112 -112
  21. package/dist/components/modules/auth/PostInteractionsModal.js +12 -12
  22. package/dist/components/modules/auth/RepostModal.js +75 -75
  23. package/dist/components/modules/auth/SidebarLeft.js +40 -40
  24. package/dist/components/modules/auth/Stories.js +15 -15
  25. package/dist/components/modules/auth/StoryViewer.js +47 -47
  26. package/dist/components/modules/chat/ChatContainer.js +196 -196
  27. package/dist/components/modules/chat/ChatInput.js +30 -30
  28. package/dist/components/modules/chat/ChatList.js +51 -51
  29. package/dist/components/modules/chat/ChatMessage.d.ts +11 -11
  30. package/dist/components/modules/chat/ChatMessage.js +6 -6
  31. package/dist/components/modules/chat/ChatNotes.js +11 -11
  32. package/dist/components/modules/community/GroupHeader.js +17 -17
  33. package/dist/components/modules/community/GroupMenu.js +16 -16
  34. package/dist/components/modules/community/SchoolCard.js +7 -7
  35. package/dist/components/modules/community/SurveyCard.js +35 -35
  36. package/dist/components/modules/forum/ForumBoard.d.ts +16 -16
  37. package/dist/components/modules/forum/ForumBoard.js +6 -6
  38. package/dist/components/modules/forum/ForumPost.d.ts +13 -13
  39. package/dist/components/modules/forum/ForumPost.js +5 -5
  40. package/dist/components/modules/forum/NewTopicModal.d.ts +7 -7
  41. package/dist/components/modules/forum/NewTopicModal.js +26 -26
  42. package/dist/components/modules/forum/TopicItem.d.ts +15 -15
  43. package/dist/components/modules/forum/TopicItem.js +6 -6
  44. package/dist/components/modules/galleries/GalleryCard.d.ts +9 -9
  45. package/dist/components/modules/galleries/GalleryCard.js +5 -5
  46. package/dist/components/modules/giveaways/GiveawayCard.d.ts +9 -9
  47. package/dist/components/modules/giveaways/GiveawayCard.js +6 -6
  48. package/dist/components/modules/groups/ApplicationModal.d.ts +7 -7
  49. package/dist/components/modules/groups/ApplicationModal.js +27 -27
  50. package/dist/components/modules/groups/GroupCard.d.ts +12 -12
  51. package/dist/components/modules/groups/GroupCard.js +6 -6
  52. package/dist/components/modules/guest/Introduction.js +13 -13
  53. package/dist/components/modules/magaza/BackToStore.js +10 -10
  54. package/dist/components/modules/magaza/StoreHeader.js +8 -8
  55. package/dist/components/modules/news/NewsCard.js +6 -6
  56. package/dist/components/modules/news/NewsComments.js +52 -52
  57. package/dist/components/modules/profile/CloudStorageModal.d.ts +8 -8
  58. package/dist/components/modules/profile/CloudStorageModal.js +31 -31
  59. package/dist/components/modules/profile/EditProfileModal.d.ts +8 -8
  60. package/dist/components/modules/profile/EditProfileModal.js +27 -27
  61. package/dist/components/modules/profile/ProfileContent.js +70 -70
  62. package/dist/components/modules/profile/ProfileHeader.js +19 -19
  63. package/dist/components/modules/profile/ProfileStats.d.ts +1 -1
  64. package/dist/components/modules/profile/ProfileStats.js +14 -14
  65. package/dist/components/modules/profile/TeamSelectorModal.js +16 -16
  66. package/dist/components/modules/stations/StationCard.js +25 -25
  67. package/dist/components/modules/stations/StationQRModal.js +12 -12
  68. package/dist/components/shared/FloatingChatButton.js +20 -20
  69. package/dist/components/shared/Footer.d.ts +1 -1
  70. package/dist/components/shared/Footer.js +9 -9
  71. package/dist/components/shared/Header.js +97 -97
  72. package/dist/components/shared/LoginModal.d.ts.map +1 -1
  73. package/dist/components/shared/LoginModal.js +12 -16
  74. package/dist/components/shared/LoginModal.js.map +1 -1
  75. package/dist/components/shared/MainLayoutWrapper.js +7 -7
  76. package/dist/components/shared/PageWidth.d.ts +5 -5
  77. package/dist/components/shared/PageWidth.js +13 -13
  78. package/dist/components/showcase/SocialTab.d.ts.map +1 -1
  79. package/dist/components/showcase/SocialTab.js +47 -2
  80. package/dist/components/showcase/SocialTab.js.map +1 -1
  81. package/dist/context/AuthContext.d.ts +1 -1
  82. package/dist/context/AuthContext.d.ts.map +1 -1
  83. package/dist/context/AuthContext.js +52 -33
  84. package/dist/context/AuthContext.js.map +1 -1
  85. package/dist/context/CartContext.js +63 -63
  86. package/dist/context/ChatContext.d.ts +12 -12
  87. package/dist/context/ChatContext.js +17 -17
  88. package/dist/context/LayoutContext.d.ts +10 -10
  89. package/dist/context/LayoutContext.js +16 -16
  90. package/dist/context/SocketContext.js +30 -30
  91. package/dist/context/ThemeContext.d.ts +10 -10
  92. package/dist/context/ThemeContext.js +39 -39
  93. package/dist/index.js +80 -80
  94. package/dist/lib/constants/educationData.js +117 -117
  95. package/dist/lib/constants/punishmentData.d.ts +29 -29
  96. package/dist/lib/constants/punishmentData.js +183 -183
  97. package/dist/lib/constants/seedData.js +694 -694
  98. package/dist/lib/constants/stationData.js +166 -166
  99. package/dist/lib/constants/surveyData.js +49 -49
  100. package/dist/lib/constants/teamData.js +65 -65
  101. package/dist/types/stats.d.ts +17 -17
  102. package/dist/types/stats.js +1 -1
  103. package/package.json +47 -46
  104. package/src/globals.css +187 -187
  105. package/next.config.ts +0 -13
  106. package/postcss.config.js +0 -6
  107. package/src/app/layout.tsx +0 -64
  108. package/src/app/page.tsx +0 -101
  109. package/src/components/Button.tsx +0 -41
  110. package/src/components/GenderStatsBar.tsx +0 -66
  111. package/src/components/RollingNumber.tsx +0 -50
  112. package/src/components/Slider.tsx +0 -114
  113. package/src/components/StatsGrid.tsx +0 -35
  114. package/src/components/ViewModeToggle.tsx +0 -39
  115. package/src/components/modules/auth/Dashboard.tsx +0 -649
  116. package/src/components/modules/auth/MediaLightbox.tsx +0 -112
  117. package/src/components/modules/auth/PostCard.tsx +0 -556
  118. package/src/components/modules/auth/PostInteractionsModal.tsx +0 -138
  119. package/src/components/modules/auth/RepostModal.tsx +0 -167
  120. package/src/components/modules/auth/SidebarLeft.tsx +0 -237
  121. package/src/components/modules/auth/Stories.tsx +0 -69
  122. package/src/components/modules/auth/StoryViewer.tsx +0 -146
  123. package/src/components/modules/chat/ChatContainer.tsx +0 -332
  124. package/src/components/modules/chat/ChatInput.tsx +0 -57
  125. package/src/components/modules/chat/ChatList.tsx +0 -179
  126. package/src/components/modules/chat/ChatMessage.tsx +0 -43
  127. package/src/components/modules/chat/ChatNotes.tsx +0 -58
  128. package/src/components/modules/community/GroupHeader.tsx +0 -111
  129. package/src/components/modules/community/GroupMenu.tsx +0 -82
  130. package/src/components/modules/community/SchoolCard.tsx +0 -104
  131. package/src/components/modules/community/SurveyCard.tsx +0 -149
  132. package/src/components/modules/forum/ForumBoard.tsx +0 -78
  133. package/src/components/modules/forum/ForumPost.tsx +0 -71
  134. package/src/components/modules/forum/NewTopicModal.tsx +0 -112
  135. package/src/components/modules/forum/TopicItem.tsx +0 -72
  136. package/src/components/modules/galleries/GalleryCard.tsx +0 -66
  137. package/src/components/modules/giveaways/GiveawayCard.tsx +0 -76
  138. package/src/components/modules/groups/ApplicationModal.tsx +0 -133
  139. package/src/components/modules/groups/GroupCard.tsx +0 -96
  140. package/src/components/modules/guest/Introduction.tsx +0 -60
  141. package/src/components/modules/magaza/BackToStore.tsx +0 -53
  142. package/src/components/modules/magaza/StoreHeader.tsx +0 -74
  143. package/src/components/modules/news/NewsCard.tsx +0 -66
  144. package/src/components/modules/news/NewsComments.tsx +0 -141
  145. package/src/components/modules/profile/CloudStorageModal.tsx +0 -200
  146. package/src/components/modules/profile/EditProfileModal.tsx +0 -191
  147. package/src/components/modules/profile/ProfileContent.tsx +0 -491
  148. package/src/components/modules/profile/ProfileHeader.tsx +0 -128
  149. package/src/components/modules/profile/ProfileStats.tsx +0 -72
  150. package/src/components/modules/profile/TeamSelectorModal.tsx +0 -129
  151. package/src/components/modules/stations/StationCard.tsx +0 -95
  152. package/src/components/modules/stations/StationQRModal.tsx +0 -102
  153. package/src/components/shared/FloatingChatButton.tsx +0 -57
  154. package/src/components/shared/Footer.tsx +0 -77
  155. package/src/components/shared/Header.tsx +0 -799
  156. package/src/components/shared/LoginModal.tsx +0 -208
  157. package/src/components/shared/MainLayoutWrapper.tsx +0 -15
  158. package/src/components/shared/PageWidth.tsx +0 -22
  159. package/src/components/showcase/CommunityTab.tsx +0 -22
  160. package/src/components/showcase/CorporateTab.tsx +0 -38
  161. package/src/components/showcase/GeneralTab.tsx +0 -41
  162. package/src/components/showcase/MessagesTab.tsx +0 -26
  163. package/src/components/showcase/ProfileTab.tsx +0 -20
  164. package/src/components/showcase/ShopTab.tsx +0 -24
  165. package/src/components/showcase/SocialTab.tsx +0 -28
  166. package/src/context/AuthContext.tsx +0 -104
  167. package/src/context/CartContext.tsx +0 -93
  168. package/src/context/ChatContext.tsx +0 -32
  169. package/src/context/LayoutContext.tsx +0 -29
  170. package/src/context/SocketContext.tsx +0 -50
  171. package/src/context/ThemeContext.tsx +0 -52
  172. package/src/index.ts +0 -96
  173. package/src/lib/constants/educationData.ts +0 -124
  174. package/src/lib/constants/punishmentData.ts +0 -201
  175. package/src/lib/constants/seedData.ts +0 -758
  176. package/src/lib/constants/stationData.ts +0 -170
  177. package/src/lib/constants/surveyData.ts +0 -53
  178. package/src/lib/constants/teamData.ts +0 -69
  179. package/src/lib/utils/numberFormat.ts +0 -16
  180. package/src/lib/utils/odpUtils.ts +0 -51
  181. package/src/types/index.ts +0 -1
  182. package/src/types/stats.ts +0 -17
@@ -1,41 +0,0 @@
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 }
@@ -1,66 +0,0 @@
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
- }
@@ -1,50 +0,0 @@
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
- }
@@ -1,114 +0,0 @@
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
- }
@@ -1,35 +0,0 @@
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
- }
@@ -1,39 +0,0 @@
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
- }