@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.
- package/dist/app/api/proxy/[...path]/route.d.ts +22 -0
- package/dist/app/api/proxy/[...path]/route.d.ts.map +1 -0
- package/dist/app/api/proxy/[...path]/route.js +89 -0
- package/dist/app/api/proxy/[...path]/route.js.map +1 -0
- package/dist/app/layout.js +11 -11
- package/dist/components/Button.d.ts +7 -7
- package/dist/components/Button.js +15 -15
- package/dist/components/GenderStatsBar.d.ts +5 -5
- package/dist/components/GenderStatsBar.js +7 -7
- package/dist/components/RollingNumber.d.ts +6 -6
- package/dist/components/RollingNumber.js +23 -23
- package/dist/components/Slider.d.ts +10 -10
- package/dist/components/Slider.js +35 -35
- package/dist/components/StatsGrid.js +13 -13
- package/dist/components/ViewModeToggle.d.ts +7 -7
- package/dist/components/ViewModeToggle.js +9 -9
- package/dist/components/modules/auth/Dashboard.js +250 -250
- package/dist/components/modules/auth/MediaLightbox.d.ts +13 -13
- package/dist/components/modules/auth/MediaLightbox.js +46 -46
- package/dist/components/modules/auth/PostCard.js +112 -112
- package/dist/components/modules/auth/PostInteractionsModal.js +12 -12
- package/dist/components/modules/auth/RepostModal.js +75 -75
- package/dist/components/modules/auth/SidebarLeft.js +40 -40
- package/dist/components/modules/auth/Stories.js +15 -15
- package/dist/components/modules/auth/StoryViewer.js +47 -47
- package/dist/components/modules/chat/ChatContainer.js +196 -196
- package/dist/components/modules/chat/ChatInput.js +30 -30
- package/dist/components/modules/chat/ChatList.js +51 -51
- package/dist/components/modules/chat/ChatMessage.d.ts +11 -11
- package/dist/components/modules/chat/ChatMessage.js +6 -6
- package/dist/components/modules/chat/ChatNotes.js +11 -11
- package/dist/components/modules/community/GroupHeader.js +17 -17
- package/dist/components/modules/community/GroupMenu.js +16 -16
- package/dist/components/modules/community/SchoolCard.js +7 -7
- package/dist/components/modules/community/SurveyCard.js +35 -35
- package/dist/components/modules/forum/ForumBoard.d.ts +16 -16
- package/dist/components/modules/forum/ForumBoard.js +6 -6
- package/dist/components/modules/forum/ForumPost.d.ts +13 -13
- package/dist/components/modules/forum/ForumPost.js +5 -5
- package/dist/components/modules/forum/NewTopicModal.d.ts +7 -7
- package/dist/components/modules/forum/NewTopicModal.js +26 -26
- package/dist/components/modules/forum/TopicItem.d.ts +15 -15
- package/dist/components/modules/forum/TopicItem.js +6 -6
- package/dist/components/modules/galleries/GalleryCard.d.ts +9 -9
- package/dist/components/modules/galleries/GalleryCard.js +5 -5
- package/dist/components/modules/giveaways/GiveawayCard.d.ts +9 -9
- package/dist/components/modules/giveaways/GiveawayCard.js +6 -6
- package/dist/components/modules/groups/ApplicationModal.d.ts +7 -7
- package/dist/components/modules/groups/ApplicationModal.js +27 -27
- package/dist/components/modules/groups/GroupCard.d.ts +12 -12
- package/dist/components/modules/groups/GroupCard.js +6 -6
- package/dist/components/modules/guest/Introduction.js +13 -13
- package/dist/components/modules/magaza/BackToStore.js +10 -10
- package/dist/components/modules/magaza/StoreHeader.js +8 -8
- package/dist/components/modules/news/NewsCard.js +6 -6
- package/dist/components/modules/news/NewsComments.js +52 -52
- package/dist/components/modules/profile/CloudStorageModal.d.ts +8 -8
- package/dist/components/modules/profile/CloudStorageModal.js +31 -31
- package/dist/components/modules/profile/EditProfileModal.d.ts +8 -8
- package/dist/components/modules/profile/EditProfileModal.js +27 -27
- package/dist/components/modules/profile/ProfileContent.js +70 -70
- package/dist/components/modules/profile/ProfileHeader.js +19 -19
- package/dist/components/modules/profile/ProfileStats.d.ts +1 -1
- package/dist/components/modules/profile/ProfileStats.js +14 -14
- package/dist/components/modules/profile/TeamSelectorModal.js +16 -16
- package/dist/components/modules/stations/StationCard.js +25 -25
- package/dist/components/modules/stations/StationQRModal.js +12 -12
- package/dist/components/shared/FloatingChatButton.js +20 -20
- package/dist/components/shared/Footer.d.ts +1 -1
- package/dist/components/shared/Footer.js +9 -9
- package/dist/components/shared/Header.js +97 -97
- package/dist/components/shared/LoginModal.d.ts.map +1 -1
- package/dist/components/shared/LoginModal.js +12 -16
- package/dist/components/shared/LoginModal.js.map +1 -1
- package/dist/components/shared/MainLayoutWrapper.js +7 -7
- package/dist/components/shared/PageWidth.d.ts +5 -5
- package/dist/components/shared/PageWidth.js +13 -13
- package/dist/components/showcase/SocialTab.d.ts.map +1 -1
- package/dist/components/showcase/SocialTab.js +47 -2
- package/dist/components/showcase/SocialTab.js.map +1 -1
- package/dist/context/AuthContext.d.ts +1 -1
- package/dist/context/AuthContext.d.ts.map +1 -1
- package/dist/context/AuthContext.js +52 -33
- package/dist/context/AuthContext.js.map +1 -1
- package/dist/context/CartContext.js +63 -63
- package/dist/context/ChatContext.d.ts +12 -12
- package/dist/context/ChatContext.js +17 -17
- package/dist/context/LayoutContext.d.ts +10 -10
- package/dist/context/LayoutContext.js +16 -16
- package/dist/context/SocketContext.js +30 -30
- package/dist/context/ThemeContext.d.ts +10 -10
- package/dist/context/ThemeContext.js +39 -39
- package/dist/index.js +80 -80
- package/dist/lib/constants/educationData.js +117 -117
- package/dist/lib/constants/punishmentData.d.ts +29 -29
- package/dist/lib/constants/punishmentData.js +183 -183
- package/dist/lib/constants/seedData.js +694 -694
- package/dist/lib/constants/stationData.js +166 -166
- package/dist/lib/constants/surveyData.js +49 -49
- package/dist/lib/constants/teamData.js +65 -65
- package/dist/types/stats.d.ts +17 -17
- package/dist/types/stats.js +1 -1
- package/package.json +47 -46
- package/src/globals.css +187 -187
- package/next.config.ts +0 -13
- package/postcss.config.js +0 -6
- package/src/app/layout.tsx +0 -64
- package/src/app/page.tsx +0 -101
- package/src/components/Button.tsx +0 -41
- package/src/components/GenderStatsBar.tsx +0 -66
- package/src/components/RollingNumber.tsx +0 -50
- package/src/components/Slider.tsx +0 -114
- package/src/components/StatsGrid.tsx +0 -35
- package/src/components/ViewModeToggle.tsx +0 -39
- package/src/components/modules/auth/Dashboard.tsx +0 -649
- package/src/components/modules/auth/MediaLightbox.tsx +0 -112
- package/src/components/modules/auth/PostCard.tsx +0 -556
- package/src/components/modules/auth/PostInteractionsModal.tsx +0 -138
- package/src/components/modules/auth/RepostModal.tsx +0 -167
- package/src/components/modules/auth/SidebarLeft.tsx +0 -237
- package/src/components/modules/auth/Stories.tsx +0 -69
- package/src/components/modules/auth/StoryViewer.tsx +0 -146
- package/src/components/modules/chat/ChatContainer.tsx +0 -332
- package/src/components/modules/chat/ChatInput.tsx +0 -57
- package/src/components/modules/chat/ChatList.tsx +0 -179
- package/src/components/modules/chat/ChatMessage.tsx +0 -43
- package/src/components/modules/chat/ChatNotes.tsx +0 -58
- package/src/components/modules/community/GroupHeader.tsx +0 -111
- package/src/components/modules/community/GroupMenu.tsx +0 -82
- package/src/components/modules/community/SchoolCard.tsx +0 -104
- package/src/components/modules/community/SurveyCard.tsx +0 -149
- package/src/components/modules/forum/ForumBoard.tsx +0 -78
- package/src/components/modules/forum/ForumPost.tsx +0 -71
- package/src/components/modules/forum/NewTopicModal.tsx +0 -112
- package/src/components/modules/forum/TopicItem.tsx +0 -72
- package/src/components/modules/galleries/GalleryCard.tsx +0 -66
- package/src/components/modules/giveaways/GiveawayCard.tsx +0 -76
- package/src/components/modules/groups/ApplicationModal.tsx +0 -133
- package/src/components/modules/groups/GroupCard.tsx +0 -96
- package/src/components/modules/guest/Introduction.tsx +0 -60
- package/src/components/modules/magaza/BackToStore.tsx +0 -53
- package/src/components/modules/magaza/StoreHeader.tsx +0 -74
- package/src/components/modules/news/NewsCard.tsx +0 -66
- package/src/components/modules/news/NewsComments.tsx +0 -141
- package/src/components/modules/profile/CloudStorageModal.tsx +0 -200
- package/src/components/modules/profile/EditProfileModal.tsx +0 -191
- package/src/components/modules/profile/ProfileContent.tsx +0 -491
- package/src/components/modules/profile/ProfileHeader.tsx +0 -128
- package/src/components/modules/profile/ProfileStats.tsx +0 -72
- package/src/components/modules/profile/TeamSelectorModal.tsx +0 -129
- package/src/components/modules/stations/StationCard.tsx +0 -95
- package/src/components/modules/stations/StationQRModal.tsx +0 -102
- package/src/components/shared/FloatingChatButton.tsx +0 -57
- package/src/components/shared/Footer.tsx +0 -77
- package/src/components/shared/Header.tsx +0 -799
- package/src/components/shared/LoginModal.tsx +0 -208
- package/src/components/shared/MainLayoutWrapper.tsx +0 -15
- package/src/components/shared/PageWidth.tsx +0 -22
- package/src/components/showcase/CommunityTab.tsx +0 -22
- package/src/components/showcase/CorporateTab.tsx +0 -38
- package/src/components/showcase/GeneralTab.tsx +0 -41
- package/src/components/showcase/MessagesTab.tsx +0 -26
- package/src/components/showcase/ProfileTab.tsx +0 -20
- package/src/components/showcase/ShopTab.tsx +0 -24
- package/src/components/showcase/SocialTab.tsx +0 -28
- package/src/context/AuthContext.tsx +0 -104
- package/src/context/CartContext.tsx +0 -93
- package/src/context/ChatContext.tsx +0 -32
- package/src/context/LayoutContext.tsx +0 -29
- package/src/context/SocketContext.tsx +0 -50
- package/src/context/ThemeContext.tsx +0 -52
- package/src/index.ts +0 -96
- package/src/lib/constants/educationData.ts +0 -124
- package/src/lib/constants/punishmentData.ts +0 -201
- package/src/lib/constants/seedData.ts +0 -758
- package/src/lib/constants/stationData.ts +0 -170
- package/src/lib/constants/surveyData.ts +0 -53
- package/src/lib/constants/teamData.ts +0 -69
- package/src/lib/utils/numberFormat.ts +0 -16
- package/src/lib/utils/odpUtils.ts +0 -51
- package/src/types/index.ts +0 -1
- package/src/types/stats.ts +0 -17
|
@@ -1,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
|
-
}
|