@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,32 +0,0 @@
1
- 'use client';
2
-
3
- import React, { createContext, useContext, useState } from 'react';
4
-
5
- interface ChatContextType {
6
- isChatOpen: boolean;
7
- toggleChat: () => void;
8
- openChat: () => void;
9
- closeChat: () => void;
10
- }
11
-
12
- const ChatContext = createContext<ChatContextType | undefined>(undefined);
13
-
14
- export function ChatProvider({ children }: { children: React.ReactNode }) {
15
- const [isChatOpen, setIsChatOpen] = useState(false);
16
-
17
- const toggleChat = () => setIsChatOpen(!isChatOpen);
18
- const openChat = () => setIsChatOpen(true);
19
- const closeChat = () => setIsChatOpen(false);
20
-
21
- return (
22
- <ChatContext.Provider value={{ isChatOpen, toggleChat, openChat, closeChat }}>
23
- {children}
24
- </ChatContext.Provider>
25
- );
26
- }
27
-
28
- export function useChat() {
29
- const context = useContext(ChatContext);
30
- if (!context) throw new Error('useChat must be used within ChatProvider');
31
- return context;
32
- }
@@ -1,29 +0,0 @@
1
- 'use client';
2
-
3
- import React, { createContext, useContext, useState, ReactNode } from 'react';
4
-
5
- type LayoutContextType = {
6
- pageWidth: string; // Tailwind class like max-w-7xl or max-w-[80vw]
7
- setPageWidth: (width: string) => void;
8
- };
9
-
10
- const LayoutContext = createContext<LayoutContextType | undefined>(undefined);
11
-
12
- export function LayoutProvider({ children }: { children: ReactNode }) {
13
- // Varsayılan masaüstü değeri %80 olarak ayarlanmıştır.
14
- const [pageWidth, setPageWidth] = useState('max-w-[80%]');
15
-
16
- return (
17
- <LayoutContext.Provider value={{ pageWidth, setPageWidth }}>
18
- {children}
19
- </LayoutContext.Provider>
20
- );
21
- }
22
-
23
- export function useLayout() {
24
- const context = useContext(LayoutContext);
25
- if (!context) {
26
- throw new Error('useLayout must be used within a LayoutProvider');
27
- }
28
- return context;
29
- }
@@ -1,50 +0,0 @@
1
- 'use client';
2
-
3
- import React, { createContext, useContext, useState, useEffect } from 'react';
4
- import { socketService, SocketEvent } from '@armoyu/core';
5
-
6
-
7
- interface SocketContextType {
8
- isConnected: boolean;
9
- emit: (event: SocketEvent, data: any) => void;
10
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
11
- on: (event: SocketEvent, callback: (data: any) => void) => () => void;
12
- }
13
-
14
- const SocketContext = createContext<SocketContextType | undefined>(undefined);
15
-
16
- export function SocketProvider({ children }: { children: React.ReactNode }) {
17
- const [isConnected, setIsConnected] = useState(socketService.isConnected);
18
-
19
- useEffect(() => {
20
- const handleConnect = () => setIsConnected(true);
21
- const handleDisconnect = () => setIsConnected(false);
22
-
23
- const offConnect = socketService.on('connect', handleConnect);
24
- const offDisconnect = socketService.on('disconnect', handleDisconnect);
25
-
26
- return () => {
27
- offConnect();
28
- offDisconnect();
29
- };
30
- }, []);
31
-
32
- return (
33
- <SocketContext.Provider value={{
34
- isConnected,
35
- emit: socketService.emit.bind(socketService),
36
- on: socketService.on.bind(socketService)
37
- }}>
38
- {children}
39
- </SocketContext.Provider>
40
- );
41
- }
42
-
43
- export function useSocket() {
44
- const context = useContext(SocketContext);
45
- if (context === undefined) {
46
- throw new Error('useSocket must be used within a SocketProvider');
47
- }
48
- return context;
49
- }
50
-
@@ -1,52 +0,0 @@
1
- 'use client';
2
-
3
- import React, { createContext, useContext, useState, useEffect } from 'react';
4
-
5
- interface ThemeContextType {
6
- theme: 'dark' | 'light';
7
- toggleTheme: () => void;
8
- }
9
-
10
- const ThemeContext = createContext<ThemeContextType | undefined>(undefined);
11
-
12
- export function ThemeProvider({ children }: { children: React.ReactNode }) {
13
- const [theme, setTheme] = useState<'dark' | 'light'>('dark');
14
-
15
- // Tarayıcı hafızasını okuyarak temayı yükleme (Local Storage)
16
- useEffect(() => {
17
- const savedTheme = localStorage.getItem('armoyu_theme') as 'dark' | 'light';
18
- if (savedTheme === 'light') {
19
- setTheme('light');
20
- document.documentElement.classList.remove('dark');
21
- } else {
22
- setTheme('dark');
23
- document.documentElement.classList.add('dark');
24
- // İlk girişte varsayılan olarak depolanır
25
- localStorage.setItem('armoyu_theme', 'dark');
26
- }
27
- }, []);
28
-
29
- const toggleTheme = () => {
30
- const newTheme = theme === 'dark' ? 'light' : 'dark';
31
- setTheme(newTheme);
32
- localStorage.setItem('armoyu_theme', newTheme);
33
-
34
- if (newTheme === 'dark') {
35
- document.documentElement.classList.add('dark');
36
- } else {
37
- document.documentElement.classList.remove('dark');
38
- }
39
- };
40
-
41
- return (
42
- <ThemeContext.Provider value={{ theme, toggleTheme }}>
43
- {children}
44
- </ThemeContext.Provider>
45
- );
46
- }
47
-
48
- export function useTheme() {
49
- const context = useContext(ThemeContext);
50
- if (!context) throw new Error('useTheme hooks must be used inside ThemeProvider!');
51
- return context;
52
- }
package/src/index.ts DELETED
@@ -1,96 +0,0 @@
1
- export * from './components/Button';
2
- export * from './components/Slider';
3
- export * from './components/RollingNumber';
4
- export * from './components/ViewModeToggle';
5
- export * from './components/GenderStatsBar';
6
- export * from './components/StatsGrid';
7
-
8
- // Contexts
9
- export * from './context/AuthContext';
10
- export * from './context/CartContext';
11
- export * from './context/ChatContext';
12
- export * from './context/LayoutContext';
13
- export * from './context/SocketContext';
14
- export * from './context/ThemeContext';
15
-
16
- // Types & Constants
17
- export * from './types';
18
- export * from './lib/constants/seedData';
19
- export * from './lib/constants/educationData';
20
- export * from './lib/constants/punishmentData';
21
- export * from './lib/constants/stationData';
22
- export * from './lib/constants/surveyData';
23
- export * from './lib/constants/teamData';
24
- export * from './lib/utils/odpUtils';
25
-
26
-
27
- // Shared Components
28
- export { Header } from './components/shared/Header';
29
- export { Footer } from './components/shared/Footer';
30
- export { LoginModal } from './components/shared/LoginModal';
31
- export { FloatingChatButton } from './components/shared/FloatingChatButton';
32
- export { MainLayoutWrapper } from './components/shared/MainLayoutWrapper';
33
- export { PageWidth } from './components/shared/PageWidth';
34
-
35
- // Auth Module
36
- export { Dashboard as AuthDashboard } from './components/modules/auth/Dashboard';
37
- export { Dashboard } from './components/modules/auth/Dashboard';
38
- export { PostCard } from './components/modules/auth/PostCard';
39
- export { PostInteractionsModal } from './components/modules/auth/PostInteractionsModal';
40
- export { RepostModal } from './components/modules/auth/RepostModal';
41
- export { SidebarLeft as AuthSidebarLeft } from './components/modules/auth/SidebarLeft';
42
- export { Stories } from './components/modules/auth/Stories';
43
- export { StoryViewer } from './components/modules/auth/StoryViewer';
44
- export { MediaLightbox, type PostMedia } from './components/modules/auth/MediaLightbox';
45
-
46
- // Chat Module
47
- export { ChatContainer } from './components/modules/chat/ChatContainer';
48
- export { ChatInput } from './components/modules/chat/ChatInput';
49
- export { ChatList } from './components/modules/chat/ChatList';
50
- export { ChatMessage } from './components/modules/chat/ChatMessage';
51
- export { ChatNotes } from './components/modules/chat/ChatNotes';
52
-
53
- // Community Module
54
- export { GroupHeader } from './components/modules/community/GroupHeader';
55
- export { GroupMenu } from './components/modules/community/GroupMenu';
56
- export { SchoolCard } from './components/modules/community/SchoolCard';
57
- export { SurveyCard } from './components/modules/community/SurveyCard';
58
-
59
- // Forum Module
60
- export { ForumBoard } from './components/modules/forum/ForumBoard';
61
- export { ForumPost } from './components/modules/forum/ForumPost';
62
- export { NewTopicModal } from './components/modules/forum/NewTopicModal';
63
- export { TopicItem } from './components/modules/forum/TopicItem';
64
-
65
- // Galleries Module
66
- export { GalleryCard } from './components/modules/galleries/GalleryCard';
67
-
68
- // Giveaways Module
69
- export { GiveawayCard } from './components/modules/giveaways/GiveawayCard';
70
-
71
- // Groups Module
72
- export { GroupCard } from './components/modules/groups/GroupCard';
73
- export { ApplicationModal as GroupApplicationModal } from './components/modules/groups/ApplicationModal';
74
-
75
- // Guest Module
76
- export { Introduction } from './components/modules/guest/Introduction';
77
-
78
- // Magaza Module
79
- export { BackToStore } from './components/modules/magaza/BackToStore';
80
- export { StoreHeader } from './components/modules/magaza/StoreHeader';
81
-
82
- // News Module
83
- export { NewsCard } from './components/modules/news/NewsCard';
84
- export { NewsComments } from './components/modules/news/NewsComments';
85
-
86
- // Profile Module
87
- export { ProfileHeader } from './components/modules/profile/ProfileHeader';
88
- export { ProfileStats } from './components/modules/profile/ProfileStats';
89
- export { ProfileContent } from './components/modules/profile/ProfileContent';
90
- export { EditProfileModal } from './components/modules/profile/EditProfileModal';
91
- export { TeamSelectorModal } from './components/modules/profile/TeamSelectorModal';
92
- export { CloudStorageModal } from './components/modules/profile/CloudStorageModal';
93
-
94
- // Stations Module
95
- export { StationCard } from './components/modules/stations/StationCard';
96
- export { StationQRModal } from './components/modules/stations/StationQRModal';
@@ -1,124 +0,0 @@
1
- import { School, Faculty, Classroom, SchoolTeam, User } from '@armoyu/core';
2
-
3
-
4
- export const MOCK_EDUCATION_DATA = (userList: any[]) => {
5
- // 1. School Teams (Traditional & Esports)
6
- const teams = [
7
- new SchoolTeam({
8
- id: 'st1',
9
- name: 'ARMOYU CS2 Team',
10
- gameOrSport: 'Counter-Strike 2',
11
- type: 'ESPORTS',
12
- schoolId: 'sch1',
13
- captain: userList[0]
14
- }),
15
- new SchoolTeam({
16
- id: 'st2',
17
- name: 'UAV Football Varsity',
18
- gameOrSport: 'Football',
19
- type: 'TRADITIONAL_SPORTS',
20
- schoolId: 'sch1',
21
- captain: userList[11]
22
- }),
23
- new SchoolTeam({
24
- id: 'st3',
25
- name: 'Code Masters LoL',
26
- gameOrSport: 'League of Legends',
27
- type: 'ESPORTS',
28
- schoolId: 'sch2',
29
- captain: userList[1]
30
- })
31
- ];
32
-
33
- // 2. Faculties
34
- const faculties = [
35
- new Faculty({ id: 'f1', name: 'Mühendislik Fakültesi', schoolId: 'sch1', representative: userList[14] }),
36
- new Faculty({ id: 'f2', name: 'İktisadi ve İdari Bilimler Fakültesi', schoolId: 'sch1', representative: userList[12] }),
37
- new Faculty({ id: 'f3', name: 'Fen Edebiyat Fakültesi', schoolId: 'sch2', representative: userList[3] })
38
- ];
39
-
40
- // 3. Classrooms
41
- const classrooms = [
42
- new Classroom({ id: 'c1', name: 'Web Geliştirme 101', schoolId: 'sch1', teacher: userList[0], password: 'armoyu_learn' }),
43
- new Classroom({ id: 'c2', name: 'Algoritma ve Veri Yapıları', schoolId: 'sch1', teacher: userList[14] }),
44
- new Classroom({ id: 'c3', name: 'Dijital Tasarım', schoolId: 'sch2', teacher: userList[1] })
45
- ];
46
-
47
- // 4. Schools
48
- const schools = [
49
- new School({
50
- id: 'sch1',
51
- name: 'İstanbul Teknik Üniversitesi',
52
- slug: 'itu',
53
- logo: 'https://upload.wikimedia.org/wikipedia/tr/a/ae/%C4%B0T%C3%9C_Logo.png',
54
- representative: userList[0],
55
- faculties: faculties.filter(f => f.schoolId === 'sch1'),
56
- teams: teams.filter(t => t.schoolId === 'sch1'),
57
- classrooms: classrooms.filter(cl => cl.schoolId === 'sch1'),
58
- memberCount: 1250
59
- }),
60
- new School({
61
- id: 'sch2',
62
- name: 'Boğaziçi Üniversitesi',
63
- slug: 'bogazici',
64
- logo: 'https://upload.wikimedia.org/wikipedia/tr/b/b3/Bo%C4%9Fazi%C3%A7i_%C3%9Cniversitesi_Logosu.png',
65
- representative: userList[1],
66
- faculties: faculties.filter(f => f.schoolId === 'sch2'),
67
- teams: teams.filter(t => t.schoolId === 'sch2'),
68
- classrooms: classrooms.filter(cl => cl.schoolId === 'sch2'),
69
- memberCount: 890
70
- }),
71
- new School({
72
- id: 'sch3',
73
- name: 'Sivas Cumhuriyet Üniversitesi',
74
- slug: 'cumhuriyet',
75
- logo: 'https://upload.wikimedia.org/wikipedia/tr/a/ac/Cumhuriyet_%C3%9Cniversitesi_Logosu.png',
76
- representative: userList[2],
77
- faculties: [
78
- new Faculty({ id: 'f4', name: 'Tıp Fakültesi', schoolId: 'sch3', representative: userList[4] }),
79
- new Faculty({ id: 'f5', name: 'Eğitim Fakültesi', schoolId: 'sch3', representative: userList[5] })
80
- ],
81
- teams: [
82
- new SchoolTeam({ id: 'st4', name: 'CU Eagles Volleyball', gameOrSport: 'Volleyball', type: 'TRADITIONAL_SPORTS', schoolId: 'sch3', captain: userList[2] }),
83
- new SchoolTeam({ id: 'st5', name: 'CU Valorant', gameOrSport: 'Valorant', type: 'ESPORTS', schoolId: 'sch3', captain: userList[4] })
84
- ],
85
- classrooms: [
86
- new Classroom({ id: 'c4', name: 'Temel Programlama', schoolId: 'sch3', teacher: userList[2] })
87
- ],
88
- memberCount: 2100
89
- }),
90
- new School({
91
- id: 'sch4',
92
- name: 'Tokat Gaziosmanpaşa Üniversitesi',
93
- slug: 'gop',
94
- logo: 'https://upload.wikimedia.org/wikipedia/tr/5/5e/Tokat_Gaziosmanpa%C5%9Fa_%C3%9Cniversitesi_Logosu.png',
95
- representative: userList[3],
96
- faculties: [
97
- new Faculty({ id: 'f6', name: 'Ziraat Fakültesi', schoolId: 'sch4', representative: userList[3] })
98
- ],
99
- teams: [
100
- new SchoolTeam({ id: 'st6', name: 'GOP Football', gameOrSport: 'Football', type: 'TRADITIONAL_SPORTS', schoolId: 'sch4', captain: userList[3] })
101
- ],
102
- classrooms: [],
103
- memberCount: 1450
104
- }),
105
- new School({
106
- id: 'sch5',
107
- name: 'Samsun Ondokuz Mayıs Üniversitesi',
108
- slug: 'omu',
109
- logo: 'https://upload.wikimedia.org/wikipedia/tr/6/6d/Ondokuz_May%C4%B1s_%C3%9Cniversitesi_Logosu.png',
110
- representative: userList[10],
111
- faculties: [
112
- new Faculty({ id: 'f7', name: 'Hukuk Fakültesi', schoolId: 'sch5', representative: userList[10] })
113
- ],
114
- teams: [
115
- new SchoolTeam({ id: 'st7', name: 'OMU Cyber Sports', gameOrSport: 'DotA 2', type: 'ESPORTS', schoolId: 'sch5', captain: userList[11] })
116
- ],
117
- classrooms: [],
118
- memberCount: 3200
119
- })
120
- ];
121
-
122
- return { schools, faculties, teams, classrooms };
123
- };
124
-
@@ -1,201 +0,0 @@
1
- export type RestrictionType = 'CHAT_BAN' | 'POST_BAN' | 'PROFILE_EDIT_BAN' | 'LOGIN_BAN' | 'PERMANENT_BAN';
2
-
3
- export type RuleCategory = 'SOHBET' | 'GÜVENLİK' | 'İÇERİK' | 'HESAP' | 'ETKİNLİK';
4
-
5
- export interface PunishmentRule {
6
- id: string;
7
- article: string; // e.g., "M1.1"
8
- name: string;
9
- category: RuleCategory;
10
- description: string;
11
- duration: number; // in hours, 0 for permanent
12
- restrictions: RestrictionType[];
13
- severity: 'low' | 'medium' | 'high' | 'critical';
14
- isMajor?: boolean; // If true, escalation is stricter. If false, it's educational.
15
- }
16
-
17
- export const PUNISHMENT_RULES: PunishmentRule[] = [
18
- // SOHBET (M1.X)
19
- {
20
- id: 'spam-flood',
21
- article: 'M1.1',
22
- category: 'SOHBET',
23
- name: 'Spam / Flood',
24
- description: 'Sohbet veya yorum alanlarında tekrarlayıcı ve rahatsız edici içerik paylaşımı.',
25
- duration: 24,
26
- restrictions: ['CHAT_BAN'],
27
- severity: 'low',
28
- isMajor: false
29
- },
30
- {
31
- id: 'inappropriate-lang',
32
- article: 'M1.2',
33
- category: 'SOHBET',
34
- name: 'Uygunsuz Dil / Küfür',
35
- description: 'Diğer kullanıcılara yönelik hakaret, küfür veya aşağılayıcı ifadeler.',
36
- duration: 72,
37
- restrictions: ['CHAT_BAN'],
38
- severity: 'medium',
39
- isMajor: true
40
- },
41
- {
42
- id: 'toxic-behavior',
43
- article: 'M1.3',
44
- category: 'SOHBET',
45
- name: 'Toksik Davranış / Kışkırtma',
46
- description: 'Topluluk huzurunu bozmaya yönelik kışkırtmalar ve huzursuzluk çıkarma.',
47
- duration: 48,
48
- restrictions: ['CHAT_BAN'],
49
- severity: 'low',
50
- isMajor: false
51
- },
52
-
53
- // İÇERİK (M2.X)
54
- {
55
- id: 'misleading-content',
56
- article: 'M2.1',
57
- category: 'İÇERİK',
58
- name: 'Hatalı Paylaşım / Clickbait',
59
- description: 'Topluluğu yanıltıcı veya gereksiz (çöp) içerik üretimi.',
60
- duration: 48,
61
- restrictions: ['POST_BAN'],
62
- severity: 'low',
63
- isMajor: false
64
- },
65
- {
66
- id: 'illegal-content',
67
- article: 'M2.2',
68
- category: 'İÇERİK',
69
- name: 'İllegal / Uygunsuz Paylaşım',
70
- description: 'Yasal olmayan içeriklerin, korsan yazılım veya uygunsuz medyanın paylaşımı.',
71
- duration: 0,
72
- restrictions: ['PERMANENT_BAN'],
73
- severity: 'critical',
74
- isMajor: true
75
- },
76
- {
77
- id: 'ad-sharing',
78
- article: 'M2.3',
79
- category: 'İÇERİK',
80
- name: 'İzinsiz Reklam / Tanıtım',
81
- description: 'Yönetimden izin almadan yapılan topluluk, yayıncı veya ürün reklamları.',
82
- duration: 168,
83
- restrictions: ['POST_BAN', 'CHAT_BAN'],
84
- severity: 'medium',
85
- isMajor: false
86
- },
87
-
88
- // GÜVENLİK (M3.X)
89
- {
90
- id: 'harassment',
91
- article: 'M3.1',
92
- category: 'GÜVENLİK',
93
- name: 'Kullanıcı Taciz / Rahatsızlık',
94
- description: 'Kullanıcıları sistematik olarak rahatsız etme veya taciz etme.',
95
- duration: 168,
96
- restrictions: ['CHAT_BAN', 'POST_BAN', 'PROFILE_EDIT_BAN'],
97
- severity: 'high',
98
- isMajor: true
99
- },
100
- {
101
- id: 'doxxing',
102
- article: 'M3.2',
103
- category: 'GÜVENLİK',
104
- name: 'Kişisel Veri İhlali / Doxxing',
105
- description: 'Bir kullanıcının gerçek hayat verilerini, adresini veya telefonunu izinsiz paylaşma.',
106
- duration: 0,
107
- restrictions: ['PERMANENT_BAN'],
108
- severity: 'critical',
109
- isMajor: true
110
- },
111
- {
112
- id: 'bug-abuse',
113
- article: 'M3.3',
114
- category: 'GÜVENLİK',
115
- name: 'Sistem Odaklı Hata Kullanımı',
116
- description: 'Platformdaki hataları (bug) bildirmek yerine kendi çıkarı için kullanma.',
117
- duration: 720, // 1 month
118
- restrictions: ['LOGIN_BAN', 'POST_BAN'],
119
- severity: 'high',
120
- isMajor: true
121
- },
122
-
123
- // HESAP (M4.X)
124
- {
125
- id: 'fake-identity',
126
- article: 'M4.1',
127
- category: 'HESAP',
128
- name: 'Sahte Kimlik / Taklit',
129
- description: 'Başka bir kullanıcıyı veya yetkiliyi taklit etme.',
130
- duration: 0,
131
- restrictions: ['PERMANENT_BAN'],
132
- severity: 'critical',
133
- isMajor: true
134
- },
135
- {
136
- id: 'hate-speech',
137
- article: 'M4.2',
138
- category: 'HESAP',
139
- name: 'Nefret Söylemi / Değerlere Hakaret',
140
- description: 'Dini, milli veya manevi değerlere yönelik ağır hakaret ve saldırı.',
141
- duration: 0,
142
- restrictions: ['PERMANENT_BAN'],
143
- severity: 'critical',
144
- isMajor: true
145
- },
146
- {
147
- id: 'fraud',
148
- article: 'M4.3',
149
- category: 'HESAP',
150
- name: 'Dolandırıcılık / Sahtekarlık',
151
- description: 'Hizmet veya ürün alımlarında kullanıcıları veya sistemi dolandırma girişimi.',
152
- duration: 0,
153
- restrictions: ['PERMANENT_BAN'],
154
- severity: 'critical',
155
- isMajor: true
156
- },
157
- {
158
- id: 'multi-account',
159
- article: 'M4.4',
160
- category: 'HESAP',
161
- name: 'Çoklu Hesap / Multi Account',
162
- description: 'Yasaklandığı halde farklı hesaplarla sisteme tekrar dahil olma girişimi.',
163
- duration: 0,
164
- restrictions: ['PERMANENT_BAN'],
165
- severity: 'critical',
166
- isMajor: true
167
- }
168
- ];
169
-
170
- export const getRestrictionLabel = (type: RestrictionType): string => {
171
- switch (type) {
172
- case 'CHAT_BAN': return 'Sohbet Yasağı';
173
- case 'POST_BAN': return 'Paylaşım Yasağı';
174
- case 'PROFILE_EDIT_BAN': return 'Profil Düzenleme Yasağı';
175
- case 'LOGIN_BAN': return 'Giriş Yasağı';
176
- case 'PERMANENT_BAN': return 'Kalıcı Yasaklama (Ban)';
177
- default: return 'Bilinmeyen Kısıtlama';
178
- }
179
- };
180
-
181
- /**
182
- * Calculates the escalated duration based on the number of previous punishments.
183
- * Formula: base * multiplier
184
- */
185
- export const calculateEscalatedDuration = (baseDuration: number, punishmentCount: number): number => {
186
- if (baseDuration === 0) return 0; // Permanent stays permanent
187
-
188
- const level = getCommunityComplianceLevel(punishmentCount);
189
- return Math.round(baseDuration * level.multiplier);
190
- };
191
-
192
- /**
193
- * Returns the community compliance level details based on involvement count.
194
- */
195
- export const getCommunityComplianceLevel = (count: number) => {
196
- if (count === 0) return { label: 'Tam Uyumlu', color: '#10b981', multiplier: 1.0, severity: 'safe' };
197
- if (count < 3) return { label: 'Biliyor', color: '#3b82f6', multiplier: 1.1, severity: 'low' };
198
- if (count < 6) return { label: 'Dikkat Etmeli', color: '#eab308', multiplier: 1.3, severity: 'medium' };
199
- if (count < 9) return { label: 'Rehberlik Gerekli', color: '#f97316', multiplier: 1.6, severity: 'high' };
200
- return { label: 'İnceleme Altında', color: '#ef4444', multiplier: 2.0, severity: 'critical' };
201
- };