Round 15: Timetable, Resource Library, Advanced Analytics, Accessibility

This commit is contained in:
Mustafa Cetin committed 2026-07-29 11:16:28 +00:00
1 parent 0a7cfae311
commit a94f900ae0
15 files changed
+4580 -1079

No files matched your search

+61
View File
@@ -1175,6 +1175,56 @@ export interface AnalyticsAtRiskStudent {
latestEntryDate: string;
}
export interface AnalyticsSubjectMasteryPoint {
categoryId: string;
categoryName: string;
avgMastery: number;
entryCount: number;
}
export interface AnalyticsTeacherPerformancePoint {
teacherId: string;
teacherName: string;
assessmentCount: number;
progressCount: number;
improvementRate: number;
notebookCount: number;
}
export interface AnalyticsSelfVsTeacherAgg {
avgSelfLevel: number;
avgTeacherLevel: number;
avgGap: number;
totalComparisons: number;
}
export interface AnalyticsGapAnalysisPoint {
studentId: string;
studentName: string;
competencyId: string;
selfLevel: number;
teacherLevel: number;
gap: number;
}
export interface AnalyticsExcellingStudent {
studentId: string;
studentName: string;
className: string;
latestMastery: number;
improvement: number;
}
export interface AnalyticsClassRadarPoint {
classId: string;
className: string;
mastery: number;
attendance: number;
engagement: number;
progress: number;
behavior: number;
}
export interface AnalyticsData {
masteryTrend: AnalyticsMasteryTrendPoint[];
classComparison: AnalyticsClassComparisonPoint[];
@@ -1187,6 +1237,17 @@ export interface AnalyticsData {
totalEntries: number;
totalStudents: number;
overallAvgMastery: number;
// New fields
totalClasses: number;
totalTeachers: number;
totalCompetencies: number;
competencyCoveragePct: number;
subjectMasteryAvg: AnalyticsSubjectMasteryPoint[];
teacherPerformance: AnalyticsTeacherPerformancePoint[];
selfVsTeacherAgg: AnalyticsSelfVsTeacherAgg | null;
gapAnalysis: AnalyticsGapAnalysisPoint[];
excellingStudents: AnalyticsExcellingStudent[];
classRadarData: AnalyticsClassRadarPoint[];
}
export function fetchAnalytics(params: {
+278
View File
@@ -2591,6 +2591,8 @@ const de: TranslationDict = {
'portfolio.all_types': 'Alle Arten',
'portfolio.add_new': 'Neuer Eintrag',
'nav.portfolio': 'Portfolio',
'nav.timetable': 'Stundenplan',
'nav.resources': 'Mediathek',
// Navigation - Homework
'nav.homework': 'Hausaufgaben',
@@ -2703,6 +2705,143 @@ const de: TranslationDict = {
'announcement.target_parents': 'Eltern',
'announcement.no_announcements': 'Keine Ankündigungen vorhanden',
'announcement.dismiss': 'Ausblenden',
// ─── Advanced Analytics ──────────────────────────────────────────
'analytics.school_overview': 'Schulübersicht',
'analytics.student_performance': 'Schülerleistung',
'analytics.teacher_performance': 'Lehrerleistung',
'analytics.predictive': 'Prognose',
'analytics.at_risk': 'Gefährdet',
'analytics.excelling': 'Hervorragend',
'analytics.needs_attention': 'Aufmerksamkeit erforderlich',
'analytics.export_chart': 'Diagramm exportieren',
'analytics.export_csv': 'CSV exportieren',
'analytics.print_report': 'Bericht drucken',
'analytics.student_teacher_ratio': 'Schüler-Lehrer-Ratio',
'analytics.competency_coverage': 'Kompetenzabdeckung',
'analytics.avg_mastery_subject': 'Ø Kompetenz je Fach',
'analytics.attendance_trend': 'Anwesenheitsverlauf',
'analytics.behavior_trend': 'Verhaltensverlauf',
'analytics.mastery_histogram': 'Kompetenzverteilung (Histogram)',
'analytics.progress_over_time': 'Verlauf über Zeit',
'analytics.subject_comparison': 'Fachvergleich',
'analytics.assessment_distribution': 'Bewertungsverteilung',
'analytics.self_vs_teacher': 'Selbst- vs. Lehrerbewertung',
'analytics.gap_analysis': 'Gap-Analyse',
'analytics.self_assessment': 'Selbstbewertung',
'analytics.teacher_assessment': 'Lehrerbewertung',
'analytics.radar_comparison': 'Radarvergleich',
'analytics.heatmap_coverage': 'Kompetenzabdeckung (Heatmap)',
'analytics.ranking_table': 'Ranking-Tabelle',
'analytics.assessments_per_teacher': 'Bewertungen pro Lehrkraft',
'analytics.progress_per_teacher': 'Fortschritt pro Lehrkraft',
'analytics.improvement_rate': 'Verbesserungsrate',
'analytics.notebook_usage': 'Notizbuchnutzung',
'analytics.students_at_risk': 'Gefährdete Schüler:innen',
'analytics.students_excelling': 'Hervorragende Schüler:innen',
'analytics.areas_needing_attention': 'Bereiche mit Förderbedarf',
'analytics.risk_trend': 'Risikoentwicklung',
'analytics.excelling_trend': 'Entwicklung hervorragender Schüler:innen',
'analytics.attendance_rate': 'Anwesenheitsrate',
'analytics.behavior_incidents': 'Verhaltensvorfälle',
'analytics.total_classes': 'Klassen',
'analytics.total_teachers': 'Lehrkräfte',
'analytics.total_competencies': 'Kompetenzen',
'analytics.coverage_pct': 'Abgedeckt',
'analytics.uncovered_pct': 'Offen',
'analytics.score': 'Punktzahl',
'analytics.gap': 'Differenz',
'analytics.rank': 'Rang',
'analytics.entries': 'Einträge',
'analytics.improvement': 'Verbesserung',
'analytics.export_png': 'PNG exportieren',
'analytics.no_export_data': 'Keine Daten zum Exportieren',
'analytics.class_dim_mastery': 'Kompetenz',
'analytics.class_dim_attendance': 'Anwesenheit',
'analytics.class_dim_engagement': 'Engagement',
'analytics.class_dim_progress': 'Fortschritt',
'analytics.class_dim_behavior': 'Verhalten',
'analytics.self_level': 'Selbstniveau',
'analytics.teacher_level': 'Lehrerniveau',
'analytics.section_school': 'Schulübersicht',
'analytics.section_performance': 'Leistung',
'analytics.section_class': 'Klassen',
'analytics.section_teacher': 'Lehrkräfte',
'analytics.section_predictive': 'Prognose',
'analytics.section_export': 'Export',
// ─── Accessibility ───────────────────────────────────────────────
'accessibility.skip_to_content': 'Zum Inhalt springen',
'accessibility.high_contrast': 'Hoher Kontrast',
'accessibility.reduced_motion': 'Reduzierte Bewegung',
'accessibility.keyboard_shortcuts': 'Tastaturkurzbefehle',
'accessibility.shortcut_desc': 'Tastaturkurzbefehle für die Navigation',
// Timetable
'timetable.title': 'Stundenplan',
'timetable.monday': 'Montag',
'timetable.tuesday': 'Dienstag',
'timetable.wednesday': 'Mittwoch',
'timetable.thursday': 'Donnerstag',
'timetable.friday': 'Freitag',
'timetable.period': 'Stunde',
'timetable.break': 'Pause',
'timetable.add_slot': 'Stunde hinzufügen',
'timetable.edit_slot': 'Stunde bearbeiten',
'timetable.no_subject': 'Kein Fach',
'timetable.print': 'Stundenplan drucken',
'timetable.class_view': 'Klassensicht',
'timetable.room': 'Raum',
'timetable.start_time': 'Beginn',
'timetable.end_time': 'Ende',
'timetable.subject': 'Fach',
'timetable.teacher': 'Lehrkraft',
'timetable.day': 'Tag',
'timetable.period_num': 'Stunde {n}',
'timetable.no_slots': 'Keine Stunden vorhanden',
'timetable.select_class': 'Klasse auswählen',
'timetable.batch_create': 'Stundenplan erstellen',
'timetable.delete_slot': 'Stunde löschen',
'timetable.break_period': 'Pause',
'timetable.drag_hint': 'Ziehen zum Verschieben',
// Resources
'resources.title': 'Ressourcen',
'resources.library': 'Mediathek',
'resources.upload': 'Hochladen',
'resources.type': 'Typ',
'resources.document': 'Dokument',
'resources.worksheet': 'Arbeitsblatt',
'resources.presentation': 'Präsentation',
'resources.video': 'Video',
'resources.link': 'Link',
'resources.image': 'Bild',
'resources.audio': 'Audio',
'resources.download': 'Herunterladen',
'resources.downloads': 'Downloads',
'resources.preview': 'Vorschau',
'resources.favorite': 'Favorit',
'resources.create': 'Ressource erstellen',
'resources.edit': 'Ressource bearbeiten',
'resources.search': 'Ressourcen suchen',
'resources.filter_type': 'Nach Typ filtern',
'resources.filter_subject': 'Nach Fach filtern',
'resources.all_types': 'Alle Typen',
'resources.all_subjects': 'Alle Fächer',
'resources.public': 'Öffentlich',
'resources.private': 'Privat',
'resources.toggle_public': 'Öffentlich/Privat',
'resources.no_resources': 'Keine Ressourcen vorhanden',
'resources.title_field': 'Titel',
'resources.description_field': 'Beschreibung',
'resources.url_field': 'URL',
'resources.content_field': 'Inhalt',
'resources.subject_field': 'Fach',
'resources.class_field': 'Klasse',
'resources.grade_field': 'Klassenstufe',
'resources.tags_field': 'Schlagwörter',
'resources.add_tag': 'Schlagwort hinzufügen',
'resources.delete_confirm': 'Ressource wirklich löschen?',
};
const en: TranslationDict = {
@@ -5293,6 +5432,8 @@ const en: TranslationDict = {
'portfolio.all_types': 'All Types',
'portfolio.add_new': 'New Entry',
'nav.portfolio': 'Portfolio',
'nav.timetable': 'Timetable',
'nav.resources': 'Resources',
// Navigation - Homework
'nav.homework': 'Homework',
@@ -5405,6 +5546,143 @@ const en: TranslationDict = {
'announcement.target_parents': 'Parents',
'announcement.no_announcements': 'No announcements available',
'announcement.dismiss': 'Dismiss',
// ─── Advanced Analytics ──────────────────────────────────────────
'analytics.school_overview': 'School Overview',
'analytics.student_performance': 'Student Performance',
'analytics.teacher_performance': 'Teacher Performance',
'analytics.predictive': 'Predictive',
'analytics.at_risk': 'At Risk',
'analytics.excelling': 'Excelling',
'analytics.needs_attention': 'Needs Attention',
'analytics.export_chart': 'Export Chart',
'analytics.export_csv': 'Export CSV',
'analytics.print_report': 'Print Report',
'analytics.student_teacher_ratio': 'Student-to-Teacher Ratio',
'analytics.competency_coverage': 'Competency Coverage',
'analytics.avg_mastery_subject': 'Avg Mastery per Subject',
'analytics.attendance_trend': 'Attendance Trend',
'analytics.behavior_trend': 'Behavior Trend',
'analytics.mastery_histogram': 'Mastery Distribution (Histogram)',
'analytics.progress_over_time': 'Progress Over Time',
'analytics.subject_comparison': 'Subject Comparison',
'analytics.assessment_distribution': 'Assessment Score Distribution',
'analytics.self_vs_teacher': 'Self-Assessment vs Teacher Assessment',
'analytics.gap_analysis': 'Gap Analysis',
'analytics.self_assessment': 'Self-Assessment',
'analytics.teacher_assessment': 'Teacher Assessment',
'analytics.radar_comparison': 'Radar Comparison',
'analytics.heatmap_coverage': 'Competency Coverage (Heatmap)',
'analytics.ranking_table': 'Ranking Table',
'analytics.assessments_per_teacher': 'Assessments per Teacher',
'analytics.progress_per_teacher': 'Progress per Teacher',
'analytics.improvement_rate': 'Improvement Rate',
'analytics.notebook_usage': 'Notebook Usage',
'analytics.students_at_risk': 'Students at Risk',
'analytics.students_excelling': 'Students Excelling',
'analytics.areas_needing_attention': 'Areas Needing Attention',
'analytics.risk_trend': 'Risk Trend',
'analytics.excelling_trend': 'Excelling Students Trend',
'analytics.attendance_rate': 'Attendance Rate',
'analytics.behavior_incidents': 'Behavior Incidents',
'analytics.total_classes': 'Classes',
'analytics.total_teachers': 'Teachers',
'analytics.total_competencies': 'Competencies',
'analytics.coverage_pct': 'Covered',
'analytics.uncovered_pct': 'Uncovered',
'analytics.score': 'Score',
'analytics.gap': 'Gap',
'analytics.rank': 'Rank',
'analytics.entries': 'Entries',
'analytics.improvement': 'Improvement',
'analytics.export_png': 'Export PNG',
'analytics.no_export_data': 'No data to export',
'analytics.class_dim_mastery': 'Mastery',
'analytics.class_dim_attendance': 'Attendance',
'analytics.class_dim_engagement': 'Engagement',
'analytics.class_dim_progress': 'Progress',
'analytics.class_dim_behavior': 'Behavior',
'analytics.self_level': 'Self Level',
'analytics.teacher_level': 'Teacher Level',
'analytics.section_school': 'School Overview',
'analytics.section_performance': 'Performance',
'analytics.section_class': 'Classes',
'analytics.section_teacher': 'Teachers',
'analytics.section_predictive': 'Predictive',
'analytics.section_export': 'Export',
// ─── Accessibility ───────────────────────────────────────────────
'accessibility.skip_to_content': 'Skip to content',
'accessibility.high_contrast': 'High Contrast',
'accessibility.reduced_motion': 'Reduced Motion',
'accessibility.keyboard_shortcuts': 'Keyboard Shortcuts',
'accessibility.shortcut_desc': 'Keyboard shortcuts for navigation',
// Timetable
'timetable.title': 'Timetable',
'timetable.monday': 'Monday',
'timetable.tuesday': 'Tuesday',
'timetable.wednesday': 'Wednesday',
'timetable.thursday': 'Thursday',
'timetable.friday': 'Friday',
'timetable.period': 'Period',
'timetable.break': 'Break',
'timetable.add_slot': 'Add Slot',
'timetable.edit_slot': 'Edit Slot',
'timetable.no_subject': 'No Subject',
'timetable.print': 'Print Timetable',
'timetable.class_view': 'Class View',
'timetable.room': 'Room',
'timetable.start_time': 'Start Time',
'timetable.end_time': 'End Time',
'timetable.subject': 'Subject',
'timetable.teacher': 'Teacher',
'timetable.day': 'Day',
'timetable.period_num': 'Period {n}',
'timetable.no_slots': 'No slots available',
'timetable.select_class': 'Select Class',
'timetable.batch_create': 'Create Timetable',
'timetable.delete_slot': 'Delete Slot',
'timetable.break_period': 'Break',
'timetable.drag_hint': 'Drag to move',
// Resources
'resources.title': 'Resources',
'resources.library': 'Resource Library',
'resources.upload': 'Upload',
'resources.type': 'Type',
'resources.document': 'Document',
'resources.worksheet': 'Worksheet',
'resources.presentation': 'Presentation',
'resources.video': 'Video',
'resources.link': 'Link',
'resources.image': 'Image',
'resources.audio': 'Audio',
'resources.download': 'Download',
'resources.downloads': 'Downloads',
'resources.preview': 'Preview',
'resources.favorite': 'Favorite',
'resources.create': 'Create Resource',
'resources.edit': 'Edit Resource',
'resources.search': 'Search Resources',
'resources.filter_type': 'Filter by Type',
'resources.filter_subject': 'Filter by Subject',
'resources.all_types': 'All Types',
'resources.all_subjects': 'All Subjects',
'resources.public': 'Public',
'resources.private': 'Private',
'resources.toggle_public': 'Public/Private',
'resources.no_resources': 'No resources available',
'resources.title_field': 'Title',
'resources.description_field': 'Description',
'resources.url_field': 'URL',
'resources.content_field': 'Content',
'resources.subject_field': 'Subject',
'resources.class_field': 'Class',
'resources.grade_field': 'Grade Level',
'resources.tags_field': 'Tags',
'resources.add_tag': 'Add Tag',
'resources.delete_confirm': 'Are you sure you want to delete this resource?',
};
const translations: Record<string, TranslationDict> = { de, en };
+3 -1
View File
@@ -26,7 +26,9 @@ export type ViewName =
| 'notebooks'
| 'drawing'
| 'homework'
| 'portfolio';
| 'portfolio'
| 'timetable'
| 'resources';
export interface CurrentUser {
id: string;