diff --git a/app/components/KnowledgeQuest.tsx b/app/components/KnowledgeQuest.tsx
new file mode 100644
index 0000000..1e52ee2
--- /dev/null
+++ b/app/components/KnowledgeQuest.tsx
@@ -0,0 +1,746 @@
+import React, {useState} from 'react';
+import { SettingOutlined, QuestionCircleOutlined, LogoutOutlined, DownOutlined} from '@ant-design/icons';
+import Icon from '@ant-design/icons';
+
+import AdministrationIcon from '~/components/customIcon/AdministrationIcon';
+import MyCoursesIcon from '~/components/customIcon/MyCoursesIcon';
+import ExaminationIcon from '~/components/customIcon/ExaminationIcon';
+import CommunityIcon from '~/components/customIcon/CommunityIcon';
+import NotificationIcon from '~/components/customIcon/NotificationIcon';
+import {Layout, Menu, theme, Button, Modal, MenuProps, Tabs} from 'antd';
+const { TabPane } = Tabs;
+
+import { Dropdown, Space } from 'antd';
+import '../../public/assets/knowledge-quest.css';
+
+let courseData = [
+ {
+ id : "1",
+ title : "Life History of Dr. Maria Montessori",
+ chapter : "1",
+ Program : "Graduate Program",
+ img : "../../assets/course1.jpg"
+ },
+ {
+ id : "2",
+ title : "Introduction to Montessori Methods",
+ chapter : "2",
+ Program : "Graduate Program",
+ img : "../../assets/course2.jpg"
+ },
+ {
+ id : "3",
+ title : "Exercises on Practical Life",
+ chapter : "3",
+ Program : "Graduate Program",
+ img : "../../assets/course3.jpg"
+ }
+];
+let knowledgeData = [
+ {
+ id: "1",
+ status: "1",
+ title: "Assessment on Special Education",
+ challenge: "Challenge yourself & climb the leaderboard.",
+ question: "Subjective Question",
+ img: "../../assets/knowledge1.jpg"
+ },
+ {
+ id: "2",
+ status: "1",
+ title: "Quiz on Children Psychology",
+ challenge: "Challenge yourself & climb the leaderboard.",
+ question: "MCQ",
+ img: "../../assets/knowledge2.jpg"
+ },
+ {
+ id: "3",
+ status: "1",
+ title: "Quiz on Montessori Methods",
+ challenge: "Challenge yourself & climb the leaderboard.",
+ question: "MCQ",
+ img: "../../assets/knowledge3.jpg"
+ },
+ {
+ id: "4",
+ status: "1",
+ title: "Assessment on Special Education",
+ challenge: "Challenge yourself & climb the leaderboard.",
+ question: "Subjective Question",
+ img: "../../assets/knowledge1.jpg"
+ },
+ {
+ id: "5",
+ status: "1",
+ title: "Quiz on Children Psychology",
+ challenge: "Challenge yourself & climb the leaderboard.",
+ question: "MCQ",
+ img: "../../assets/knowledge2.jpg"
+ },
+ {
+ id: "6",
+ status: "1",
+ title: "Quiz on Montessori Methods",
+ challenge: "Challenge yourself & climb the leaderboard.",
+ question: "MCQ",
+ img: "../../assets/knowledge3.jpg"
+ },
+ {
+ id: "7",
+ status: "1",
+ title: "Workshop on Child Development",
+ challenge: "Expand your knowledge & earn badges.",
+ question: "Interactive Session",
+ img: "../../assets/knowledge1.jpg"
+ },
+ {
+ id: "8",
+ status: "1",
+ title: "Webinar on Educational Psychology",
+ challenge: "Join & enhance your skills.",
+ question: "Discussion",
+ img: "../../assets/knowledge2.jpg"
+ },
+ {
+ id: "9",
+ status: "1",
+ title: "Seminar on Inclusive Education",
+ challenge: "Participate & gain insights.",
+ question: "Lecture",
+ img: "../../assets/knowledge3.jpg"
+ },
+ {
+ id: "10",
+ status: "1",
+ title: "Course on Early Childhood Education",
+ challenge: "Complete the course & get certified.",
+ question: "Multiple Modules",
+ img: "../../assets/knowledge1.jpg"
+ },
+ {
+ id: "11",
+ status: "1",
+ title: "Training on Classroom Management",
+ challenge: "Improve your teaching strategies.",
+ question: "Practical Tasks",
+ img: "../../assets/knowledge2.jpg"
+ },
+ {
+ id: "12",
+ status: "1",
+ title: "Lecture on Cognitive Development",
+ challenge: "Expand your understanding & get certified.",
+ question: "Q&A Session",
+ img: "../../assets/knowledge3.jpg"
+ },
+ {
+ id: "13",
+ status: "1",
+ title: "Workshop on Behavioral Issues",
+ challenge: "Join & learn from experts.",
+ question: "Interactive Session",
+ img: "../../assets/knowledge1.jpg"
+ },
+ {
+ id: "14",
+ status: "1",
+ title: "Seminar on Learning Disabilities",
+ challenge: "Participate & enhance your knowledge.",
+ question: "Lecture",
+ img: "../../assets/knowledge2.jpg"
+ },
+ {
+ id: "15",
+ status: "1",
+ title: "Webinar on Child Psychology",
+ challenge: "Join & expand your skills.",
+ question: "Discussion",
+ img: "../../assets/knowledge3.jpg"
+ },
+ {
+ id: "16",
+ status: "1",
+ title: "Course on Special Education Needs",
+ challenge: "Complete the course & get certified.",
+ question: "Multiple Modules",
+ img: "../../assets/knowledge1.jpg"
+ },
+ {
+ id: "17",
+ status: "1",
+ title: "Training on Autism Spectrum Disorder",
+ challenge: "Improve your teaching strategies.",
+ question: "Practical Tasks",
+ img: "../../assets/knowledge2.jpg"
+ },
+ {
+ id: "18",
+ status: "1",
+ title: "Lecture on Emotional Development",
+ challenge: "Expand your understanding & get certified.",
+ question: "Q&A Session",
+ img: "../../assets/knowledge3.jpg"
+ },
+ {
+ id: "19",
+ status: "1",
+ title: "Workshop on ADHD",
+ challenge: "Join & learn from experts.",
+ question: "Interactive Session",
+ img: "../../assets/knowledge1.jpg"
+ },
+ {
+ id: "20",
+ status: "1",
+ title: "Seminar on Speech and Language Disorders",
+ challenge: "Participate & enhance your knowledge.",
+ question: "Lecture",
+ img: "../../assets/knowledge2.jpg"
+ },
+ {
+ id: "21",
+ status: "1",
+ title: "Webinar on Child Nutrition",
+ challenge: "Join & expand your skills.",
+ question: "Discussion",
+ img: "../../assets/knowledge3.jpg"
+ }
+];
+
+
+let performersData = [
+ {
+ id: "1",
+ name: "Eiden",
+ score: "48/50",
+ points: "999",
+ rank: "1",
+ program: "Graduate Program",
+ avatar: "../../assets/avatar1.png"
+ },
+ {
+ id: "2",
+ name: "Jackson",
+ score: "45/50",
+ points: "997",
+ rank: "2",
+ program: "Graduate Program",
+ avatar: "../../assets/avatar2.png"
+ },
+ {
+ id: "3",
+ name: "Emma Aria",
+ score: "43/50",
+ points: "994",
+ rank: "3",
+ program: "Graduate Program",
+ avatar: "../../assets/avatar3.png"
+ },
+ {
+ id: "4",
+ name: "John Doe",
+ score: "40/50",
+ points: "990",
+ rank: "4",
+ program: "Graduate Program",
+ avatar: "../../assets/avatar4.png"
+ },
+ {
+ id: "5",
+ name: "Jane Cooper",
+ score: "37/50",
+ points: "987",
+ rank: "5",
+ program: "Graduate Program",
+ avatar: "../../assets/avatar5.png"
+ },
+ {
+ id: "6",
+ name: "John Doe",
+ score: "35/50",
+ points: "982",
+ rank: "6",
+ program: "Graduate Program",
+ avatar: "../../assets/avatar6.png"
+ },
+ {
+ id: "7",
+ name: "Alice",
+ score: "33/50",
+ points: "980",
+ rank: "7",
+ program: "Graduate Program",
+ avatar: "../../assets/avatar1.png"
+ },
+ {
+ id: "8",
+ name: "Bob",
+ score: "32/50",
+ points: "978",
+ rank: "8",
+ program: "Graduate Program",
+ avatar: "../../assets/avatar2.png"
+ },
+ {
+ id: "9",
+ name: "Charlie",
+ score: "30/50",
+ points: "975",
+ rank: "9",
+ program: "Graduate Program",
+ avatar: "../../assets/avatar3.png"
+ },
+ {
+ id: "10",
+ name: "Diana",
+ score: "28/50",
+ points: "972",
+ rank: "10",
+ program: "Graduate Program",
+ avatar: "../../assets/avatar4.png"
+ },
+ {
+ id: "11",
+ name: "Edward",
+ score: "27/50",
+ points: "970",
+ rank: "11",
+ program: "Graduate Program",
+ avatar: "../../assets/avatar5.png"
+ },
+ {
+ id: "12",
+ name: "Fiona",
+ score: "26/50",
+ points: "968",
+ rank: "12",
+ program: "Graduate Program",
+ avatar: "../../assets/avatar6.png"
+ },
+ {
+ id: "13",
+ name: "George",
+ score: "25/50",
+ points: "965",
+ rank: "13",
+ program: "Graduate Program",
+ avatar: "../../assets/avatar1.png"
+ },
+ {
+ id: "14",
+ name: "Hannah",
+ score: "23/50",
+ points: "962",
+ rank: "14",
+ program: "Graduate Program",
+ avatar: "../../assets/avatar2.png"
+ },
+ {
+ id: "15",
+ name: "Ian",
+ score: "22/50",
+ points: "960",
+ rank: "15",
+ program: "Graduate Program",
+ avatar: "../../assets/avatar3.png"
+ },
+ {
+ id: "16",
+ name: "Julia",
+ score: "20/50",
+ points: "957",
+ rank: "16",
+ program: "Graduate Program",
+ avatar: "../../assets/avatar4.png"
+ },
+ {
+ id: "17",
+ name: "Kyle",
+ score: "19/50",
+ points: "955",
+ rank: "17",
+ program: "Graduate Program",
+ avatar: "../../assets/avatar5.png"
+ },
+ {
+ id: "18",
+ name: "Laura",
+ score: "18/50",
+ points: "953",
+ rank: "18",
+ program: "Graduate Program",
+ avatar: "../../assets/avatar6.png"
+ },
+ {
+ id: "19",
+ name: "Michael",
+ score: "17/50",
+ points: "950",
+ rank: "19",
+ program: "Graduate Program",
+ avatar: "../../assets/avatar1.png"
+ },
+ {
+ id: "20",
+ name: "Nancy",
+ score: "16/50",
+ points: "947",
+ rank: "20",
+ program: "Graduate Program",
+ avatar: "../../assets/avatar2.png"
+ },
+ {
+ id: "21",
+ name: "Oliver",
+ score: "15/50",
+ points: "945",
+ rank: "21",
+ program: "Graduate Program",
+ avatar: "../../assets/avatar3.png"
+ }
+];
+
+
+const sortedData = performersData.sort((a, b) => parseInt(a.rank) - parseInt(b.rank));
+
+const highestRank = sortedData[0];
+const secondHighestRank = sortedData[1];
+const thirdHighestRank = sortedData[2];
+
+console.log('The highest rank is:', highestRank);
+console.log('The second highest rank is:', secondHighestRank);
+console.log('The Third highest rank is:', thirdHighestRank);
+
+
+
+// const highestRank = performersData.reduce((prev, current) => (prev.rank < current.rank) ? prev : current);
+
+// console.log('The highest rank is:', highestRank);
+
+const { Header, Content, Sider } = Layout;
+
+const items1: MenuProps['items'] = ['1', '2', '3'].map((key) => ({
+ key,
+ label: `navkq ${key}`,
+}));
+
+type MenuItem = Required['items'][number];
+
+
+const items2: MenuProps['items'] = [
+ {
+ key: 'subkq1',
+ icon: ,
+ label: 'Administration',
+ children: [
+ {
+ key: '1kq',
+ label: (Class Schedules),
+ },
+ {
+ key: '2kq',
+ label: (Classmate Directory),
+ },
+ {
+ key: '3kq',
+ label: (Qualifications),
+ },
+ ],
+ },
+ {
+ key: 'subkq2',
+ icon: ,
+ label: 'My Courses',
+ children: [
+ {
+ key: '4kq',
+ label: (Graduate Program),
+ },
+ {
+ key: '5kq',
+ label: (Post-Graduate Program),
+ },
+ ],
+ },
+ {
+ key: 'subkq3',
+ icon: ,
+ label: 'Examinations',
+ children: [
+ {
+ key: '6kq',
+ label: (Exam Scheduled),
+ },
+ {
+ key: '7kq',
+ label: (Upcoming Exam),
+ },
+ {
+ key: '8kq',
+ label: (Passed Exam),
+ },
+ ],
+ },
+ {
+ key: 'subkq4',
+ icon: ,
+ label: 'Community',
+ children: [
+ {
+ key: '9kq',
+ label: (Exam Scheduled),
+ },
+ {
+ key: '10kq',
+ label: (Upcoming Exam),
+ },
+ {
+ key: '11kq',
+ label: (Passed Exam),
+ },
+ ],
+ },
+ {
+ key: 'subkq5',
+ icon: ,
+ label: 'Notifications',
+ children: [
+ {
+ key: '12kq',
+ label: (Exam Scheduled),
+ },
+ {
+ key: '13kq',
+ label: (Upcoming Exam),
+ },
+ {
+ key: '14kq',
+ label: (Passed Exam),
+ },
+ ],
+ },
+ // getItem('Files', '9', ),
+ {
+ key: 'grp',
+ label: '',
+ type: 'group',
+ style: { marginTop: '100px' },
+ children: [
+ {
+ key: '15kq', style: {paddingTop: '10px', paddingBottom: '10px', border: 'none'},
+ icon: React.createElement(SettingOutlined, { style: { color: '#000' } }),
+ label: (Settings
)
+ },
+ {
+ key: '16kq', style: {paddingTop: '10px', paddingBottom: '10px', border: 'none'},
+ icon: React.createElement(QuestionCircleOutlined, { style: { color: '#000' } }),
+ label: (Help & Support
)
+ },
+ {
+ key: '17kq', style: {paddingTop: '10px', paddingBottom: '10px', border: 'none'},
+ icon: React.createElement(LogoutOutlined, { style: { color: '#000' } }),
+ label: (Logout
)
+ },
+ ],
+ },
+];
+const items: MenuProps['items'] = [
+ {
+ label: 1st menu item,
+ key: '01kq',
+ },
+ {
+ type: 'divider',
+ },
+ {
+ label: 2nd menu item,
+ key: '02kq',
+ },
+ {
+ type: 'divider',
+ },
+ {
+ label: '3rd menu item',
+ key: '03kq',
+ },
+ ];
+
+const App: React.FC = () => {
+ const [collapsed, setCollapsed] = useState(false);
+ const [open, setOpen] = React.useState(false);
+ const [loading, setLoading] = React.useState(true);
+
+ const showLoading = () => {
+ setOpen(true);
+ setLoading(true);
+
+ // Simple loading mock. You should add cleanup logic in real world.
+ setTimeout(() => {
+ setLoading(false);
+ }, 100);
+ };
+ const { token: { colorBgContainer}, } = theme.useToken();
+
+ return (
+
+
+ <>
+ {/* */}
+ Loading Modal
} footer={ } loading={loading} open={open} onCancel={() => setOpen(false)} >
+ Some contents...
+ Some contents...
+ Some contents...
+
+ >
+ {/* */}
+
+
+
setCollapsed(value)} width={366} style={{overflow: 'auto', height: '110vh', position: 'fixed', left: 0, top: 0, bottom: 0, background: '#FFF', borderRight: '1px solid #CFCFCF', borderBottom: '2px solid #000'}}>
+
+
+
+
+ {/* defaultSelectedKeys={['1']} defaultOpenKeys={['sub1']} */}
+
+
+
+
+
+ {/*

*/}
+
Knowledge Quests
+
+
+
+
+
+
+
+
+
+
+
+ {knowledgeData.map(data => (
+
+
+

+
+
{data.title}
+
{data.challenge}
+
{data.question}
+
+
+
+
+ ))}
+
+
+
+
+ {knowledgeData.map(data => (
+
+
+

+
+
{data.title}
+
{data.challenge}
+
{data.question}
+
+
+
Review
+
+ ))}
+
+
+
+
+ {/*
Knowledge Quests 
*/}
+
+
+
Top Performers 
+
Knowledge Quest
+
+
+
+

+

+
+
{secondHighestRank.name}
+
{secondHighestRank.score}
+
+
+
+
{highestRank.name}
+
{highestRank.score}
+
+
+
+

+

+
+
{thirdHighestRank.name}
+
{thirdHighestRank.score}
+
+
+
+ {sortedData.slice(3).map(data => (
+
+
# {data.rank}
+

+
+
{data.name}
+
{data.program}
+
+
+

+
{data.points} Points
+
+
+ ))}
+
+
+
+
+
+
+
+
+ );
+};
+export default App;
\ No newline at end of file
diff --git a/app/components/StudentDashboard.tsx b/app/components/StudentDashboard.tsx
new file mode 100644
index 0000000..ccc5b13
--- /dev/null
+++ b/app/components/StudentDashboard.tsx
@@ -0,0 +1,468 @@
+import React, {useState} from 'react';
+import { SettingOutlined, QuestionCircleOutlined, LogoutOutlined, DownOutlined} from '@ant-design/icons';
+import Icon from '@ant-design/icons';
+
+import AdministrationIcon from '~/components/customIcon/AdministrationIcon';
+import MyCoursesIcon from '~/components/customIcon/MyCoursesIcon';
+import ExaminationIcon from '~/components/customIcon/ExaminationIcon';
+import CommunityIcon from '~/components/customIcon/CommunityIcon';
+import NotificationIcon from '~/components/customIcon/NotificationIcon';
+import {Layout, Menu, theme, Button, Modal, MenuProps} from 'antd';
+import { Dropdown, Space } from 'antd';
+import '../../public/assets/student-dashboard.css';
+
+let courseData = [
+ {
+ id : "1",
+ title : "Life History of Dr. Maria Montessori",
+ chapter : "1",
+ Program : "Graduate Program",
+ img : "../../assets/course1.jpg"
+ },
+ {
+ id : "2",
+ title : "Introduction to Montessori Methods",
+ chapter : "2",
+ Program : "Graduate Program",
+ img : "../../assets/course2.jpg"
+ },
+ {
+ id : "3",
+ title : "Exercises on Practical Life",
+ chapter : "3",
+ Program : "Graduate Program",
+ img : "../../assets/course3.jpg"
+ }
+];
+let knowledgeData = [
+ {
+ id: "1",
+ status: "1",
+ title: "Assessment on Special Education",
+ challenge: "Challenge yourself & climb the leaderboard.",
+ question: "Subjective Question",
+ img: "../../assets/knowledge1.jpg"
+ },
+ {
+ id: "2",
+ status: "1",
+ title: "Quiz on Children Psychology",
+ challenge: "Challenge yourself & climb the leaderboard.",
+ question: "MCQ",
+ img: "../../assets/knowledge2.jpg"
+ },
+ {
+ id: "3",
+ status: "1",
+ title: "Quiz on Montessori Methods",
+ challenge: "Challenge yourself & climb the leaderboard.",
+ question: "MCQ",
+ img: "../../assets/knowledge3.jpg"
+ }
+];
+
+let performersData = [
+ {
+ id: "1",
+ name: "Eiden",
+ score: "48/50",
+ points: "999",
+ rank: "1",
+ program: "Graduate Program",
+ avatar: "../../assets/avatar1.png"
+ },
+ {
+ id: "2",
+ name: "Jackson",
+ score: "45/50",
+ points: "997",
+ rank: "2",
+ program: "Graduate Program",
+ avatar: "../../assets/avatar2.png"
+ },
+ {
+ id: "3",
+ name: "Emma Aria",
+ score: "43/50",
+ points: "994",
+ rank: "3",
+ program: "Graduate Program",
+ avatar: "../../assets/avatar3.png"
+ },
+ {
+ id: "4",
+ name: "John Doe",
+ score: "40/50",
+ points: "990",
+ rank: "4",
+ program: "Graduate Program",
+ avatar: "../../assets/avatar4.png"
+ },
+ {
+ id: "5",
+ name: "Jane Cooper",
+ score: "37/50",
+ points: "987",
+ rank: "5",
+ program: "Graduate Program",
+ avatar: "../../assets/avatar5.png"
+ },
+ {
+ id: "6",
+ name: "John Doe",
+ score: "35/50",
+ points: "982",
+ rank: "6",
+ program: "Graduate Program",
+ avatar: "../../assets/avatar6.png"
+ }
+];
+
+const sortedData = performersData.sort((a, b) => parseInt(a.rank) - parseInt(b.rank));
+
+const highestRank = sortedData[0];
+const secondHighestRank = sortedData[1];
+const thirdHighestRank = sortedData[2];
+
+console.log('The highest rank is:', highestRank);
+console.log('The second highest rank is:', secondHighestRank);
+console.log('The Third highest rank is:', thirdHighestRank);
+
+
+
+// const highestRank = performersData.reduce((prev, current) => (prev.rank < current.rank) ? prev : current);
+
+// console.log('The highest rank is:', highestRank);
+
+const { Header, Content, Sider } = Layout;
+
+const items1: MenuProps['items'] = ['1', '2', '3'].map((key) => ({
+ key,
+ label: `navsd ${key}`,
+}));
+
+type MenuItem = Required['items'][number];
+
+
+const items2: MenuProps['items'] = [
+ {
+ key: 'subsd1',
+ icon: ,
+ label: 'Administration',
+ children: [
+ {
+ key: '1sd',
+ label: (Class Schedules),
+ },
+ {
+ key: '2sd',
+ label: (Classmate Directory),
+ },
+ {
+ key: '3sd',
+ label: (Qualifications),
+ },
+ ],
+ },
+ {
+ key: 'subsd2',
+ icon: ,
+ label: 'My Courses',
+ children: [
+ {
+ key: '4sd',
+ label: (Graduate Program),
+ },
+ {
+ key: '5sd',
+ label: (Post-Graduate Program),
+ },
+ ],
+ },
+ {
+ key: 'subsd3',
+ icon: ,
+ label: 'Examinations',
+ children: [
+ {
+ key: '6sd',
+ label: (Exam Scheduled),
+ },
+ {
+ key: '7sd',
+ label: (Upcoming Exam),
+ },
+ {
+ key: '8sd',
+ label: (Passed Exam),
+ },
+ ],
+ },
+ {
+ key: 'subsd4',
+ icon: ,
+ label: 'Community',
+ children: [
+ {
+ key: '9sd',
+ label: (Exam Scheduled),
+ },
+ {
+ key: '10sd',
+ label: (Upcoming Exam),
+ },
+ {
+ key: '11sd',
+ label: (Passed Exam),
+ },
+ ],
+ },
+ {
+ key: 'subsd5',
+ icon: ,
+ label: 'Notifications',
+ children: [
+ {
+ key: '12sd',
+ label: (Exam Scheduled),
+ },
+ {
+ key: '13sd',
+ label: (Upcoming Exam),
+ },
+ {
+ key: '14sd',
+ label: (Passed Exam),
+ },
+ ],
+ },
+ // getItem('Files', '9', ),
+ {
+ key: 'grp',
+ label: '',
+ type: 'group',
+ style: { marginTop: '100px' },
+ children: [
+ {
+ key: '15sd', style: {paddingTop: '10px', paddingBottom: '10px', border: 'none'},
+ icon: React.createElement(SettingOutlined, { style: { color: '#000' } }),
+ label: (Settings
)
+ },
+ {
+ key: '16sd', style: {paddingTop: '10px', paddingBottom: '10px', border: 'none'},
+ icon: React.createElement(QuestionCircleOutlined, { style: { color: '#000' } }),
+ label: (Help & Support
)
+ },
+ {
+ key: '17sd', style: {paddingTop: '10px', paddingBottom: '10px', border: 'none'},
+ icon: React.createElement(LogoutOutlined, { style: { color: '#000' } }),
+ label: (Logout
)
+ },
+ ],
+ },
+];
+const items: MenuProps['items'] = [
+ {
+ label: 1st menu item,
+ key: '01sd',
+ },
+ {
+ type: 'divider',
+ },
+ {
+ label: 2nd menu item,
+ key: '02sd',
+ },
+ {
+ type: 'divider',
+ },
+ {
+ label: '3rd menu item',
+ key: '03sd',
+ },
+ ];
+
+const App: React.FC = () => {
+ const [collapsed, setCollapsed] = useState(false);
+ const [open, setOpen] = React.useState(false);
+ const [loading, setLoading] = React.useState(true);
+
+ const showLoading = () => {
+ setOpen(true);
+ setLoading(true);
+
+ // Simple loading mock. You should add cleanup logic in real world.
+ setTimeout(() => {
+ setLoading(false);
+ }, 100);
+ };
+ const { token: { colorBgContainer}, } = theme.useToken();
+
+ return (
+
+
+ <>
+ {/* */}
+ Loading Modal} footer={ } loading={loading} open={open} onCancel={() => setOpen(false)} >
+ Some contents...
+ Some contents...
+ Some contents...
+
+ >
+ {/* */}
+
+
+
setCollapsed(value)} width={366} style={{overflow: 'auto', height: '110vh', position: 'fixed', left: 0, top: 0, bottom: 0, background: '#FFF', borderRight: '1px solid #CFCFCF', borderBottom: '2px solid #000'}}>
+
+
+
+
+ {/* defaultSelectedKeys={['1']} defaultOpenKeys={['sub1']} */}
+
+
+
+
+
+

+
Student Dashboard
+
+
+
+
+
+
+
+
Continue Learning 
+
+ {courseData.map(data=>(
+
+

+
{data.title}
+
+ Chapter {data.chapter} •
+ {data.Program}
+
+
+ ))}
+
+
+
+ {/* knowledgeData */}
+
+
+
+
Knowledge Quests 
+
+ {knowledgeData.map(data => (
+
+
+

+
+
{data.title}
+
{data.challenge}
+
{data.question}
+
+
+
+
+ ))}
+
+
+
+
Top Performers 
+
Knowledge Quest
+
+
+
+

+

+
+
{secondHighestRank.name}
+
{secondHighestRank.score}
+
+
+
+
{highestRank.name}
+
{highestRank.score}
+
+
+
+

+

+
+
{thirdHighestRank.name}
+
{thirdHighestRank.score}
+
+
+
+ {sortedData.slice(3).map(data => (
+
+
# {data.rank}
+

+
+
{data.name}
+
{data.program}
+
+
+

+
{data.points} Points
+
+
+ ))}
+
+
+
+
+
+
+
+
+ );
+};
+export default App;
\ No newline at end of file
diff --git a/app/components/TestComponent.tsx b/app/components/TestComponent.tsx
index e9c712e..e8703c7 100644
--- a/app/components/TestComponent.tsx
+++ b/app/components/TestComponent.tsx
@@ -235,7 +235,7 @@ const App: React.FC = () => {
-
+
Student Dashboard
@@ -268,7 +268,7 @@ const App: React.FC = () => {
-
+
Course Content 
{courseData.map(data=>(
@@ -284,7 +284,7 @@ const App: React.FC = () => {
-
+
diff --git a/app/components/TestComponent2.tsx b/app/components/TestComponent2.tsx
new file mode 100644
index 0000000..0e8b9a2
--- /dev/null
+++ b/app/components/TestComponent2.tsx
@@ -0,0 +1,356 @@
+import React, {useState} from 'react';
+import { SettingOutlined, QuestionCircleOutlined, LogoutOutlined, DownOutlined} from '@ant-design/icons';
+import Icon from '@ant-design/icons';
+
+import AdministrationIcon from '~/components/customIcon/AdministrationIcon';
+import MyCoursesIcon from '~/components/customIcon/MyCoursesIcon';
+import ExaminationIcon from '~/components/customIcon/ExaminationIcon';
+import CommunityIcon from '~/components/customIcon/CommunityIcon';
+import NotificationIcon from '~/components/customIcon/NotificationIcon';
+import {Layout, Menu, theme, Button, Modal, MenuProps} from 'antd';
+import { Dropdown, Space } from 'antd';
+import '../../public/assets/ss1.css';
+
+let courseData = [
+ {
+ id : "1",
+ title : "Life History of Dr. Maria Montessori",
+ chapter : "1",
+ Program : "Graduate Program",
+ img : "../../assets/course-blank.jpg"
+ },
+ {
+ id : "2",
+ title : "Introduction to Montessori Methods",
+ chapter : "2",
+ Program : "Graduate Program",
+ img : "../../assets/course-blank.jpg"
+ },
+ {
+ id : "3",
+ title : "Exercises on Practical Life",
+ chapter : "3",
+ Program : "Graduate Program",
+ img : "../../assets/course-blank.jpg"
+ }
+ ]
+
+const { Header, Content, Sider } = Layout;
+
+const items1: MenuProps['items'] = ['1', '2', '3'].map((key) => ({
+ key,
+ label: `navx ${key}`,
+}));
+
+type MenuItem = Required
['items'][number];
+
+
+const items2: MenuProps['items'] = [
+ {
+ key: 'subx1',
+ icon: ,
+ label: 'Administration',
+ children: [
+ {
+ key: '1x',
+ label: (Class Schedules),
+ },
+ {
+ key: '2x',
+ label: (Classmate Directory),
+ },
+ {
+ key: '3x',
+ label: (Qualifications),
+ },
+ ],
+ },
+ {
+ key: 'subx2',
+ icon: ,
+ label: 'My Courses',
+ children: [
+ {
+ key: '4x',
+ label: (Graduate Program),
+ },
+ {
+ key: '5x',
+ label: (Post-Graduate Program),
+ },
+ ],
+ },
+ {
+ key: 'subx3',
+ icon: ,
+ label: 'Examinations',
+ children: [
+ {
+ key: '6x',
+ label: (Exam Scheduled),
+ },
+ {
+ key: '7x',
+ label: (Upcoming Exam),
+ },
+ {
+ key: '8x',
+ label: (Passed Exam),
+ },
+ ],
+ },
+ {
+ key: 'subx4',
+ icon: ,
+ label: 'Community',
+ children: [
+ {
+ key: '9x',
+ label: (Exam Scheduled),
+ },
+ {
+ key: '10x',
+ label: (Upcoming Exam),
+ },
+ {
+ key: '11x',
+ label: (Passed Exam),
+ },
+ ],
+ },
+ {
+ key: 'subx5',
+ icon: ,
+ label: 'Notifications',
+ children: [
+ {
+ key: '12x',
+ label: (Exam Scheduled),
+ },
+ {
+ key: '13x',
+ label: (Upcoming Exam),
+ },
+ {
+ key: '14x',
+ label: (Passed Exam),
+ },
+ ],
+ },
+ // getItem('Files', '9', ),
+ {
+ key: 'grp',
+ label: '',
+ type: 'group',
+ style: { marginTop: '100px' },
+ children: [
+ {
+ key: '15x', style: {paddingTop: '10px', paddingBottom: '10px', border: 'none'},
+ icon: React.createElement(SettingOutlined, { style: { color: '#FFF' } }),
+ label: (Settings
)
+ },
+ {
+ key: '16x', style: {paddingTop: '10px', paddingBottom: '10px', border: 'none'},
+ icon: React.createElement(QuestionCircleOutlined, { style: { color: '#FFF' } }),
+ label: (Help & Support
)
+ },
+ {
+ key: '17x', style: {paddingTop: '10px', paddingBottom: '10px', border: 'none'},
+ icon: React.createElement(LogoutOutlined, { style: { color: '#FFF' } }),
+ label: (Logout
)
+ },
+ ],
+ },
+];
+const items: MenuProps['items'] = [
+ {
+ label: 1st menu item,
+ key: '01',
+ },
+ {
+ type: 'divider',
+ },
+ {
+ label: 2nd menu item,
+ key: '02',
+ },
+ {
+ type: 'divider',
+ },
+ {
+ label: '3rd menu item',
+ key: '03',
+ },
+ ];
+
+const App: React.FC = () => {
+ const [collapsed, setCollapsed] = useState(false);
+ const [open, setOpen] = React.useState(false);
+ const [loading, setLoading] = React.useState(true);
+
+ const showLoading = () => {
+ setOpen(true);
+ setLoading(true);
+
+ // Simple loading mock. You should add cleanup logic in real world.
+ setTimeout(() => {
+ setLoading(false);
+ }, 100);
+ };
+ const { token: { colorBgContainer}, } = theme.useToken();
+
+ return (
+
+
+ <>
+ {/* */}
+ Loading Modal} footer={ } loading={loading} open={open} onCancel={() => setOpen(false)} >
+ Some contents...
+ Some contents...
+ Some contents...
+
+ >
+ {/* */}
+
+
+
setCollapsed(value)} width={310} style={{overflow: 'auto', height: '110vh', position: 'fixed', left: 0, top: 0, bottom: 0, background: 'linear-gradient(180deg, #2F1B08D6 0%, #000000D6 83.93%)', borderRight: '1px solid #CFCFCF', borderBottom: '2px solid #000'}}>
+
+
+
+
+ {/* defaultSelectedKeys={['1']} defaultOpenKeys={['sub1']} */}
+
+
+
+
+
+

+
Student Dashboard
+
+
+
+
+
+
+
Course Content 
+
+ {courseData.map(data=>(
+
+

+
{data.title}
+
+ Chapter {data.chapter} •
+ {data.Program}
+
+
+ ))}
+
+
+
+
+
+
+
+
+
+
Attendance
+

+
+
Graph
+
+
+
+
Upcoming Classes
+

+
+
+
+
+
+
Accomplishments / Qualifications
+
+
+
+
+
Upcoming Tests
+
+
+

+
+
+

+
+
+

+
+
+

+
+
+

+
+
+

+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default App;
diff --git a/app/routes/about.tsx b/app/routes/about.tsx
deleted file mode 100644
index a39e2a3..0000000
--- a/app/routes/about.tsx
+++ /dev/null
@@ -1,10 +0,0 @@
-import type { MetaFunction } from "@remix-run/node";
-import TestComponent from '../components/TestComponent'; // Fix typo here
-
-export default function Index() {
- return (
-
- {/* Ensure the component name matches the import */}
-
- );
-}
diff --git a/app/routes/knowledge-quest.tsx b/app/routes/knowledge-quest.tsx
new file mode 100644
index 0000000..237ca3a
--- /dev/null
+++ b/app/routes/knowledge-quest.tsx
@@ -0,0 +1,10 @@
+import type { MetaFunction } from "@remix-run/node";
+import KnowledgeQuest from '../components/KnowledgeQuest'
+
+export default function Index() {
+ return (
+
+ {/* Ensure the component name matches the import */}
+
+ );
+}
diff --git a/app/routes/student-dashboard2.tsx b/app/routes/student-dashboard2.tsx
new file mode 100644
index 0000000..99bc5dc
--- /dev/null
+++ b/app/routes/student-dashboard2.tsx
@@ -0,0 +1,10 @@
+import type { MetaFunction } from "@remix-run/node";
+import StudentDashboard from '../components/StudentDashboard'
+
+export default function Index() {
+ return (
+
+ {/* Ensure the component name matches the import */}
+
+ );
+}
diff --git a/app/routes/test2.tsx b/app/routes/test2.tsx
new file mode 100644
index 0000000..1e01811
--- /dev/null
+++ b/app/routes/test2.tsx
@@ -0,0 +1,476 @@
+import React, {useState} from 'react';
+import { SettingOutlined, QuestionCircleOutlined, LogoutOutlined, DownOutlined} from '@ant-design/icons';
+import Icon from '@ant-design/icons';
+
+import AdministrationIcon from '~/components/customIcon/AdministrationIcon';
+import MyCoursesIcon from '~/components/customIcon/MyCoursesIcon';
+import ExaminationIcon from '~/components/customIcon/ExaminationIcon';
+import CommunityIcon from '~/components/customIcon/CommunityIcon';
+import NotificationIcon from '~/components/customIcon/NotificationIcon';
+import {Layout, Menu, theme, Button, Modal, MenuProps, Tabs} from 'antd';
+const { TabPane } = Tabs;
+
+import { Dropdown, Space } from 'antd';
+import '../../public/assets/knowledge-quest.css';
+
+let courseData = [
+ {
+ id : "1",
+ title : "Life History of Dr. Maria Montessori",
+ chapter : "1",
+ Program : "Graduate Program",
+ img : "../../assets/course1.jpg"
+ },
+ {
+ id : "2",
+ title : "Introduction to Montessori Methods",
+ chapter : "2",
+ Program : "Graduate Program",
+ img : "../../assets/course2.jpg"
+ },
+ {
+ id : "3",
+ title : "Exercises on Practical Life",
+ chapter : "3",
+ Program : "Graduate Program",
+ img : "../../assets/course3.jpg"
+ }
+];
+let knowledgeData = [
+ {
+ id: "1",
+ status: "1",
+ title: "Assessment on Special Education",
+ challenge: "Challenge yourself & climb the leaderboard.",
+ question: "Subjective Question",
+ img: "../../assets/knowledge1.jpg"
+ },
+ {
+ id: "2",
+ status: "1",
+ title: "Quiz on Children Psychology",
+ challenge: "Challenge yourself & climb the leaderboard.",
+ question: "MCQ",
+ img: "../../assets/knowledge2.jpg"
+ },
+ {
+ id: "3",
+ status: "1",
+ title: "Quiz on Montessori Methods",
+ challenge: "Challenge yourself & climb the leaderboard.",
+ question: "MCQ",
+ img: "../../assets/knowledge3.jpg"
+ }
+];
+
+let performersData = [
+ {
+ id: "1",
+ name: "Eiden",
+ score: "48/50",
+ points: "999",
+ rank: "1",
+ program: "Graduate Program",
+ avatar: "../../assets/avatar1.png"
+ },
+ {
+ id: "2",
+ name: "Jackson",
+ score: "45/50",
+ points: "997",
+ rank: "2",
+ program: "Graduate Program",
+ avatar: "../../assets/avatar2.png"
+ },
+ {
+ id: "3",
+ name: "Emma Aria",
+ score: "43/50",
+ points: "994",
+ rank: "3",
+ program: "Graduate Program",
+ avatar: "../../assets/avatar3.png"
+ },
+ {
+ id: "4",
+ name: "John Doe",
+ score: "40/50",
+ points: "990",
+ rank: "4",
+ program: "Graduate Program",
+ avatar: "../../assets/avatar4.png"
+ },
+ {
+ id: "5",
+ name: "Jane Cooper",
+ score: "37/50",
+ points: "987",
+ rank: "5",
+ program: "Graduate Program",
+ avatar: "../../assets/avatar5.png"
+ },
+ {
+ id: "6",
+ name: "John Doe",
+ score: "35/50",
+ points: "982",
+ rank: "6",
+ program: "Graduate Program",
+ avatar: "../../assets/avatar6.png"
+ }
+];
+
+const sortedData = performersData.sort((a, b) => parseInt(a.rank) - parseInt(b.rank));
+
+const highestRank = sortedData[0];
+const secondHighestRank = sortedData[1];
+const thirdHighestRank = sortedData[2];
+
+console.log('The highest rank is:', highestRank);
+console.log('The second highest rank is:', secondHighestRank);
+console.log('The Third highest rank is:', thirdHighestRank);
+
+
+
+// const highestRank = performersData.reduce((prev, current) => (prev.rank < current.rank) ? prev : current);
+
+// console.log('The highest rank is:', highestRank);
+
+const { Header, Content, Sider } = Layout;
+
+const items1: MenuProps['items'] = ['1', '2', '3'].map((key) => ({
+ key,
+ label: `navkq ${key}`,
+}));
+
+type MenuItem = Required['items'][number];
+
+
+const items2: MenuProps['items'] = [
+ {
+ key: 'subkq1',
+ icon: ,
+ label: 'Administration',
+ children: [
+ {
+ key: '1kq',
+ label: (Class Schedules),
+ },
+ {
+ key: '2kq',
+ label: (Classmate Directory),
+ },
+ {
+ key: '3kq',
+ label: (Qualifications),
+ },
+ ],
+ },
+ {
+ key: 'subkq2',
+ icon: ,
+ label: 'My Courses',
+ children: [
+ {
+ key: '4kq',
+ label: (Graduate Program),
+ },
+ {
+ key: '5kq',
+ label: (Post-Graduate Program),
+ },
+ ],
+ },
+ {
+ key: 'subkq3',
+ icon: ,
+ label: 'Examinations',
+ children: [
+ {
+ key: '6kq',
+ label: (Exam Scheduled),
+ },
+ {
+ key: '7kq',
+ label: (Upcoming Exam),
+ },
+ {
+ key: '8kq',
+ label: (Passed Exam),
+ },
+ ],
+ },
+ {
+ key: 'subkq4',
+ icon: ,
+ label: 'Community',
+ children: [
+ {
+ key: '9kq',
+ label: (Exam Scheduled),
+ },
+ {
+ key: '10kq',
+ label: (Upcoming Exam),
+ },
+ {
+ key: '11kq',
+ label: (Passed Exam),
+ },
+ ],
+ },
+ {
+ key: 'subkq5',
+ icon: ,
+ label: 'Notifications',
+ children: [
+ {
+ key: '12kq',
+ label: (Exam Scheduled),
+ },
+ {
+ key: '13kq',
+ label: (Upcoming Exam),
+ },
+ {
+ key: '14kq',
+ label: (Passed Exam),
+ },
+ ],
+ },
+ // getItem('Files', '9', ),
+ {
+ key: 'grp',
+ label: '',
+ type: 'group',
+ style: { marginTop: '100px' },
+ children: [
+ {
+ key: '15kq', style: {paddingTop: '10px', paddingBottom: '10px', border: 'none'},
+ icon: React.createElement(SettingOutlined, { style: { color: '#000' } }),
+ label: (Settings
)
+ },
+ {
+ key: '16kq', style: {paddingTop: '10px', paddingBottom: '10px', border: 'none'},
+ icon: React.createElement(QuestionCircleOutlined, { style: { color: '#000' } }),
+ label: (Help & Support
)
+ },
+ {
+ key: '17kq', style: {paddingTop: '10px', paddingBottom: '10px', border: 'none'},
+ icon: React.createElement(LogoutOutlined, { style: { color: '#000' } }),
+ label: (Logout
)
+ },
+ ],
+ },
+];
+const items: MenuProps['items'] = [
+ {
+ label: 1st menu item,
+ key: '01kq',
+ },
+ {
+ type: 'divider',
+ },
+ {
+ label: 2nd menu item,
+ key: '02kq',
+ },
+ {
+ type: 'divider',
+ },
+ {
+ label: '3rd menu item',
+ key: '03kq',
+ },
+ ];
+
+const App: React.FC = () => {
+ const [collapsed, setCollapsed] = useState(false);
+ const [open, setOpen] = React.useState(false);
+ const [loading, setLoading] = React.useState(true);
+
+ const showLoading = () => {
+ setOpen(true);
+ setLoading(true);
+
+ // Simple loading mock. You should add cleanup logic in real world.
+ setTimeout(() => {
+ setLoading(false);
+ }, 100);
+ };
+ const { token: { colorBgContainer}, } = theme.useToken();
+
+ return (
+
+
+ <>
+ {/* */}
+ Loading Modal} footer={ } loading={loading} open={open} onCancel={() => setOpen(false)} >
+ Some contents...
+ Some contents...
+ Some contents...
+
+ >
+ {/* */}
+
+
+
setCollapsed(value)} width={310} style={{overflow: 'auto', height: '110vh', position: 'fixed', left: 0, top: 0, bottom: 0, background: '#FFF', borderRight: '1px solid #CFCFCF', borderBottom: '2px solid #000'}}>
+
+
+
+
+ {/* defaultSelectedKeys={['1']} defaultOpenKeys={['sub1']} */}
+
+
+
+
+
+ {/*

*/}
+
Knowledge Quests
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {knowledgeData.map(data => (
+
+
+

+
+
{data.title}
+
{data.challenge}
+
{data.question}
+
+
+
+
+ ))}
+
+
+
+
+ {knowledgeData.map(data => (
+
+
+

+
+
{data.title}
+
{data.challenge}
+
{data.question}
+
+
+
+
+ ))}
+
+
+
+
+ {/*
Knowledge Quests 
*/}
+
+
+
Top Performers 
+
Knowledge Quest
+
+
+
+

+

+
+
{secondHighestRank.name}
+
{secondHighestRank.score}
+
+
+
+
{highestRank.name}
+
{highestRank.score}
+
+
+
+

+

+
+
{thirdHighestRank.name}
+
{thirdHighestRank.score}
+
+
+
+ {sortedData.slice(3).map(data => (
+
+
# {data.rank}
+

+
+
{data.name}
+
{data.program}
+
+
+

+
{data.points} Points
+
+
+ ))}
+
+
+
+
+
+
+
+
+ );
+};
+export default App;
\ No newline at end of file
diff --git a/package.json b/package.json
index bcaf8de..6090ca6 100644
--- a/package.json
+++ b/package.json
@@ -5,7 +5,7 @@
"type": "module",
"scripts": {
"build": "remix vite:build",
- "dev": "remix vite:dev",
+ "dev": "remix vite:dev --host 0.0.0.0",
"lint": "eslint --ignore-path .gitignore --cache --cache-location ./node_modules/.cache/eslint .",
"start": "remix-serve ./build/server/index.js",
"typecheck": "tsc"
diff --git a/public/assets/ai-button-icon.svg b/public/assets/ai-button-icon.svg
new file mode 100644
index 0000000..da579d3
--- /dev/null
+++ b/public/assets/ai-button-icon.svg
@@ -0,0 +1,4 @@
+
diff --git a/public/assets/avatar1.png b/public/assets/avatar1.png
new file mode 100644
index 0000000..db2ff2e
Binary files /dev/null and b/public/assets/avatar1.png differ
diff --git a/public/assets/avatar2.png b/public/assets/avatar2.png
new file mode 100644
index 0000000..f8c024e
Binary files /dev/null and b/public/assets/avatar2.png differ
diff --git a/public/assets/avatar3.png b/public/assets/avatar3.png
new file mode 100644
index 0000000..2e7473a
Binary files /dev/null and b/public/assets/avatar3.png differ
diff --git a/public/assets/avatar4.png b/public/assets/avatar4.png
new file mode 100644
index 0000000..04027fe
Binary files /dev/null and b/public/assets/avatar4.png differ
diff --git a/public/assets/avatar5.png b/public/assets/avatar5.png
new file mode 100644
index 0000000..215c2e6
Binary files /dev/null and b/public/assets/avatar5.png differ
diff --git a/public/assets/avatar6.png b/public/assets/avatar6.png
new file mode 100644
index 0000000..20c9dce
Binary files /dev/null and b/public/assets/avatar6.png differ
diff --git a/public/assets/bacth1.svg b/public/assets/bacth1.svg
new file mode 100644
index 0000000..4efc331
--- /dev/null
+++ b/public/assets/bacth1.svg
@@ -0,0 +1,17 @@
+
+
diff --git a/public/assets/bacth2.svg b/public/assets/bacth2.svg
new file mode 100644
index 0000000..0be0746
--- /dev/null
+++ b/public/assets/bacth2.svg
@@ -0,0 +1,15 @@
+
+
diff --git a/public/assets/bacth3.svg b/public/assets/bacth3.svg
new file mode 100644
index 0000000..3b1839c
--- /dev/null
+++ b/public/assets/bacth3.svg
@@ -0,0 +1,14 @@
+
+
diff --git a/public/assets/crown.png b/public/assets/crown.png
new file mode 100644
index 0000000..78a7b2c
Binary files /dev/null and b/public/assets/crown.png differ
diff --git a/public/assets/knowledge-quest.css b/public/assets/knowledge-quest.css
new file mode 100644
index 0000000..566c483
--- /dev/null
+++ b/public/assets/knowledge-quest.css
@@ -0,0 +1,115 @@
+
+
+.ant-menu-light .ant-menu-item-selected{
+ color: #ED9545;
+ border-left: 3px solid #ED9545 ;
+ background: transparent;
+}
+/* App.css */
+.custom-menu .ant-menu-item{
+ border-radius: 0; /* Remove border-radius */
+ color: #6E6E6E;
+}
+
+:where(.css-dev-only-do-not-override-1uq9j6g).ant-menu-light .ant-menu-item a, :where(.css-dev-only-do-not-override-1uq9j6g).ant-menu-light>.ant-menu .ant-menu-item a, :where(.css-dev-only-do-not-override-1uq9j6g).ant-menu-light .ant-menu-item a:hover, :where(.css-dev-only-do-not-override-1uq9j6g).ant-menu-light>.ant-menu .ant-menu-item a:hover{
+ color: #6E6E6E;
+}
+
+
+/* Specific styling for parent menu items (non-selected) */
+.custom-menu .ant-menu-submenu-title {
+ border-bottom: 1px solid #CFCFCF; /* Default border color for parent items */
+ border-radius: 0; /* Remove border-radius for parent items */
+ font-size: 18px;
+ color: #000;
+ font-weight: 700;
+ padding-top: 40px;
+ padding-bottom: 40px;
+ --icon-color: #000; /* Default icon color */
+}
+
+/* Specific styling for selected parent menu items */
+.custom-menu .ant-menu-submenu-selected .ant-menu-submenu-title,
+.custom-menu .ant-menu-submenu-title.ant-menu-submenu-title-selected,
+.custom-menu .ant-menu-submenu-title .ant-menu-submenu-open {
+ color: #ED9545; /* Selected text color for parent items */
+ border-bottom: 1px solid #CFCFCF; /* Selected border color for parent items */
+ --icon-color: #ED9545; /* Selected icon color */
+}
+
+
+
+/* Ensure parent item remains #ED9545 when any child is selected */
+.custom-menu .ant-menu-submenu-open > .ant-menu-submenu-title {
+ color: #ED9545; /* Ensure parent item text color */
+ border-bottom: 1px solid #CFCFCF; /* Ensure parent item border color */
+ --icon-color: #ED9545; /* Ensure parent item icon color */
+}
+
+/* Ensure parent item text color reverts to #000 when submenu is collapsed */
+.custom-menu .ant-menu-submenu-closed > .ant-menu-submenu-title {
+ color: #000; /* Ensure parent item text color */
+ --icon-color: #000; /* Ensure parent item icon color */
+}
+
+
+
+/* For Custom Scrollbar */
+
+/* Custom scrollbar for WebKit browsers */
+::-webkit-scrollbar {
+ width: 3px; /* Width of the scrollbar */
+ }
+
+ ::-webkit-scrollbar-track {
+ background: #fcfcfc; /* Track background */
+ }
+
+ ::-webkit-scrollbar-thumb {
+ background: #CFCFCF; /* Scrollbar color */
+ border-radius: 10px; /* Rounded corners */
+ }
+
+ ::-webkit-scrollbar-thumb:hover {
+ background: #555; /* Color when hovering */
+ }
+/* Firefox scrollbar styling */
+
+.custom-gradient-border {
+ border: 4.32px solid transparent;
+ border-image-source: linear-gradient(159.09deg, #FFFFFF 13.82%, rgba(0, 0, 0, 0) 97.01%);
+ border-image-slice: 1;
+ border-radius: 8px; /* Adjust as needed */
+}
+.ant-tabs-nav {
+ border-bottom: none;
+ color: #EF7A0C;
+}
+
+/* Optional: Style the tab bar ink */
+.ant-tabs-ink-bar {
+ background-color: #000;
+ color: #EF7A0C;
+}
+
+:where(.css-dev-only-do-not-override-1uq9j6g).ant-tabs .ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn{
+ color: #EF7A0C;
+}
+
+:where(.css-dev-only-do-not-override-1uq9j6g).ant-tabs .ant-tabs-tab {
+ color: #9D9D9D;
+ font-weight: 700;
+ font-size: 18px;
+ padding: 15px 20px;
+
+}
+:where(.css-dev-only-do-not-override-1uq9j6g).ant-tabs .ant-tabs-tab:hover{
+ color: #EF7A0C;
+}
+
+.ant-tabs-tab.ant-tabs-tab-active {
+ border-bottom: 4px solid #EF7A0C;
+ width: 70px;
+ z-index: 2;
+ justify-content: center;
+}
\ No newline at end of file
diff --git a/public/assets/knowledge1.jpg b/public/assets/knowledge1.jpg
new file mode 100644
index 0000000..3fb7c1f
Binary files /dev/null and b/public/assets/knowledge1.jpg differ
diff --git a/public/assets/knowledge2.jpg b/public/assets/knowledge2.jpg
new file mode 100644
index 0000000..22e157d
Binary files /dev/null and b/public/assets/knowledge2.jpg differ
diff --git a/public/assets/knowledge3.jpg b/public/assets/knowledge3.jpg
new file mode 100644
index 0000000..8fbe12a
Binary files /dev/null and b/public/assets/knowledge3.jpg differ
diff --git a/public/assets/points-icon.svg b/public/assets/points-icon.svg
new file mode 100644
index 0000000..2393268
--- /dev/null
+++ b/public/assets/points-icon.svg
@@ -0,0 +1,6 @@
+
+
diff --git a/public/assets/student-dashboard.css b/public/assets/student-dashboard.css
new file mode 100644
index 0000000..bf49270
--- /dev/null
+++ b/public/assets/student-dashboard.css
@@ -0,0 +1,83 @@
+
+
+.ant-menu-light .ant-menu-item-selected{
+ color: #ED9545;
+ border-left: 3px solid #ED9545 ;
+ background: transparent;
+}
+/* App.css */
+.custom-menu .ant-menu-item{
+ border-radius: 0; /* Remove border-radius */
+ color: #6E6E6E;
+}
+
+:where(.css-dev-only-do-not-override-1uq9j6g).ant-menu-light .ant-menu-item a, :where(.css-dev-only-do-not-override-1uq9j6g).ant-menu-light>.ant-menu .ant-menu-item a, :where(.css-dev-only-do-not-override-1uq9j6g).ant-menu-light .ant-menu-item a:hover, :where(.css-dev-only-do-not-override-1uq9j6g).ant-menu-light>.ant-menu .ant-menu-item a:hover{
+ color: #6E6E6E;
+}
+
+
+/* Specific styling for parent menu items (non-selected) */
+.custom-menu .ant-menu-submenu-title {
+ border-bottom: 1px solid #CFCFCF; /* Default border color for parent items */
+ border-radius: 0; /* Remove border-radius for parent items */
+ font-size: 18px;
+ color: #000;
+ font-weight: 700;
+ padding-top: 40px;
+ padding-bottom: 40px;
+ --icon-color: #000; /* Default icon color */
+}
+
+/* Specific styling for selected parent menu items */
+.custom-menu .ant-menu-submenu-selected .ant-menu-submenu-title,
+.custom-menu .ant-menu-submenu-title.ant-menu-submenu-title-selected,
+.custom-menu .ant-menu-submenu-title .ant-menu-submenu-open {
+ color: #ED9545; /* Selected text color for parent items */
+ border-bottom: 1px solid #CFCFCF; /* Selected border color for parent items */
+ --icon-color: #ED9545; /* Selected icon color */
+}
+
+
+
+/* Ensure parent item remains #ED9545 when any child is selected */
+.custom-menu .ant-menu-submenu-open > .ant-menu-submenu-title {
+ color: #ED9545; /* Ensure parent item text color */
+ border-bottom: 1px solid #CFCFCF; /* Ensure parent item border color */
+ --icon-color: #ED9545; /* Ensure parent item icon color */
+}
+
+/* Ensure parent item text color reverts to #000 when submenu is collapsed */
+.custom-menu .ant-menu-submenu-closed > .ant-menu-submenu-title {
+ color: #000; /* Ensure parent item text color */
+ --icon-color: #000; /* Ensure parent item icon color */
+}
+
+
+
+/* For Custom Scrollbar */
+
+/* Custom scrollbar for WebKit browsers */
+::-webkit-scrollbar {
+ width: 3px; /* Width of the scrollbar */
+ }
+
+ ::-webkit-scrollbar-track {
+ background: #fcfcfc; /* Track background */
+ }
+
+ ::-webkit-scrollbar-thumb {
+ background: #CFCFCF; /* Scrollbar color */
+ border-radius: 10px; /* Rounded corners */
+ }
+
+ ::-webkit-scrollbar-thumb:hover {
+ background: #555; /* Color when hovering */
+ }
+/* Firefox scrollbar styling */
+
+.custom-gradient-border {
+ border: 4.32px solid transparent;
+ border-image-source: linear-gradient(159.09deg, #FFFFFF 13.82%, rgba(0, 0, 0, 0) 97.01%);
+ border-image-slice: 1;
+ border-radius: 8px; /* Adjust as needed */
+}