@hed-hog/lms 0.0.268 → 0.0.270

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 (52) hide show
  1. package/hedhog/data/menu.yaml +8 -1
  2. package/hedhog/frontend/app/classes/[id]/page.tsx.ejs +1387 -0
  3. package/hedhog/frontend/app/classes/page.tsx.ejs +4 -4
  4. package/hedhog/frontend/app/courses/[id]/page.tsx.ejs +1237 -0
  5. package/hedhog/frontend/app/courses/[id]/structure/page.tsx.ejs +2642 -0
  6. package/hedhog/frontend/app/courses/page.tsx.ejs +825 -727
  7. package/hedhog/frontend/app/exams/[id]/attempt/page.tsx.ejs +976 -0
  8. package/hedhog/frontend/app/exams/[id]/questions/page.tsx.ejs +931 -0
  9. package/hedhog/frontend/app/exams/page.tsx.ejs +9 -7
  10. package/hedhog/frontend/app/training/page.tsx.ejs +3 -3
  11. package/hedhog/frontend/messages/en.json +703 -14
  12. package/hedhog/frontend/messages/pt.json +863 -174
  13. package/hedhog/query/triggers.sql +0 -0
  14. package/hedhog/table/certificate.yaml +89 -0
  15. package/hedhog/table/certificate_template.yaml +24 -0
  16. package/hedhog/table/course.yaml +67 -1
  17. package/hedhog/table/course_category.yaml +22 -0
  18. package/hedhog/table/course_class_attendance.yaml +34 -0
  19. package/hedhog/table/course_class_group.yaml +58 -0
  20. package/hedhog/table/course_class_session.yaml +38 -0
  21. package/hedhog/table/course_class_session_instructor.yaml +27 -0
  22. package/hedhog/table/course_enrollment.yaml +45 -0
  23. package/hedhog/table/course_image.yaml +33 -0
  24. package/hedhog/table/course_lesson.yaml +35 -0
  25. package/hedhog/table/course_lesson_file.yaml +23 -0
  26. package/hedhog/table/course_lesson_instructor.yaml +27 -0
  27. package/hedhog/table/course_lesson_progress.yaml +40 -0
  28. package/hedhog/table/course_lesson_question.yaml +24 -0
  29. package/hedhog/table/course_module.yaml +25 -0
  30. package/hedhog/table/course_prerequisite.yaml +48 -0
  31. package/hedhog/table/evaluation_rating.yaml +30 -0
  32. package/hedhog/table/evaluation_topic.yaml +68 -0
  33. package/hedhog/table/exam.yaml +91 -0
  34. package/hedhog/table/exam_answer.yaml +40 -0
  35. package/hedhog/table/exam_attempt.yaml +51 -0
  36. package/hedhog/table/exam_image.yaml +33 -0
  37. package/hedhog/table/exam_option.yaml +25 -0
  38. package/hedhog/table/exam_question.yaml +24 -0
  39. package/hedhog/table/image_type.yaml +28 -0
  40. package/hedhog/table/instructor.yaml +23 -0
  41. package/hedhog/table/learning_path.yaml +49 -0
  42. package/hedhog/table/learning_path_enrollment.yaml +33 -0
  43. package/hedhog/table/learning_path_image.yaml +33 -0
  44. package/hedhog/table/learning_path_step.yaml +43 -0
  45. package/hedhog/table/question.yaml +15 -0
  46. package/package.json +9 -6
  47. package/src/index.ts +1 -1
  48. package/src/lms.module.ts +15 -15
  49. package/hedhog/table/classes.yaml +0 -3
  50. package/hedhog/table/exams.yaml +0 -3
  51. package/hedhog/table/reports.yaml +0 -3
  52. package/hedhog/table/training.yaml +0 -3
@@ -7,6 +7,174 @@
7
7
  "lms": "LMS"
8
8
  }
9
9
  },
10
+ "CursoEditPage": {
11
+ "pageHeader": {
12
+ "description": "Edit the course information below. Fields with * are required."
13
+ },
14
+ "breadcrumbs": {
15
+ "home": "Home",
16
+ "courses": "Courses",
17
+ "editCourse": "Edit course"
18
+ },
19
+ "actions": {
20
+ "goToStructure": "Go to Structure",
21
+ "manageClasses": "Manage Classes",
22
+ "viewReports": "View Reports"
23
+ },
24
+ "badges": {
25
+ "featured": "Featured"
26
+ },
27
+ "kpis": {
28
+ "totalStudents": "Total Students",
29
+ "avgCompletion": "Avg Completion",
30
+ "totalLessons": "Total Lessons",
31
+ "sessions": "Sessions",
32
+ "certificates": "Certificates"
33
+ },
34
+ "chart": {
35
+ "title": "Progress by Module",
36
+ "description": "Average completion percentage of students in each module",
37
+ "progress": "Progress"
38
+ },
39
+ "form": {
40
+ "title": "Course Data",
41
+ "description": "Edit the course information below. Fields with * are required.",
42
+ "fields": {
43
+ "code": {
44
+ "label": "Code *",
45
+ "placeholder": "Ex: REACT-ADV",
46
+ "description": "Unique identifier (letters, numbers and hyphens)"
47
+ },
48
+ "internalName": {
49
+ "label": "Internal Name *",
50
+ "placeholder": "Ex: react-advanced",
51
+ "description": "Internal slug for system use"
52
+ },
53
+ "title": {
54
+ "label": "Commercial Title *",
55
+ "placeholder": "Ex: Advanced React"
56
+ },
57
+ "description": {
58
+ "label": "Public Description *",
59
+ "placeholder": "Describe the course content and objectives...",
60
+ "description": "This description will be displayed on the public course page"
61
+ },
62
+ "level": {
63
+ "label": "Level *",
64
+ "placeholder": "Select the level"
65
+ },
66
+ "status": {
67
+ "label": "Status *",
68
+ "placeholder": "Select the status"
69
+ },
70
+ "categories": {
71
+ "label": "Categories *",
72
+ "description": "Select one or more categories for the course"
73
+ },
74
+ "instructors": {
75
+ "label": "Instructors",
76
+ "description": "Select the instructors responsible for the course",
77
+ "selected": "{count} instructor(s) selected"
78
+ },
79
+ "prerequisites": {
80
+ "label": "Prerequisites",
81
+ "placeholder": "Ex: JavaScript ES6+, Basic HTML/CSS...",
82
+ "description": "List the recommended prior knowledge"
83
+ },
84
+ "logo": {
85
+ "label": "Course Logo",
86
+ "description": "Square image, max 5MB (PNG, JPG)",
87
+ "change": "Change",
88
+ "clickToUpload": "Click to upload"
89
+ },
90
+ "banner": {
91
+ "label": "Course Banner",
92
+ "description": "16:9 image, max 5MB (PNG, JPG)",
93
+ "change": "Change",
94
+ "clickToUpload": "Click to upload"
95
+ },
96
+ "certificateModel": {
97
+ "label": "Certificate Model",
98
+ "description": "Select a single model for certificate issuance",
99
+ "placeholder": "Select a model"
100
+ }
101
+ },
102
+ "flags": {
103
+ "title": "Main Flags",
104
+ "featured": {
105
+ "label": "Featured",
106
+ "description": "Display in showcase"
107
+ },
108
+ "certificate": {
109
+ "label": "Certificate",
110
+ "description": "Issue upon completion"
111
+ },
112
+ "listed": {
113
+ "label": "Listed",
114
+ "description": "Visible in catalog"
115
+ }
116
+ },
117
+ "actions": {
118
+ "deleteCourse": "Delete Course",
119
+ "cancel": "Cancel",
120
+ "saveChanges": "Save Changes"
121
+ }
122
+ },
123
+ "categories": {
124
+ "technology": "Technology",
125
+ "design": "Design",
126
+ "management": "Management",
127
+ "marketing": "Marketing",
128
+ "finance": "Finance",
129
+ "health": "Health",
130
+ "languages": "Languages",
131
+ "law": "Law"
132
+ },
133
+ "levels": {
134
+ "beginner": "Beginner",
135
+ "intermediate": "Intermediate",
136
+ "advanced": "Advanced"
137
+ },
138
+ "status": {
139
+ "active": "Active",
140
+ "draft": "Draft",
141
+ "archived": "Archived"
142
+ },
143
+ "certificateModels": {
144
+ "standard": "Institutional Standard",
145
+ "premium": "Premium - Gold Borders",
146
+ "minimalist": "Minimalist",
147
+ "technology": "Technology - Dark Theme",
148
+ "corporate": "Corporate - Formal"
149
+ },
150
+ "deleteDialog": {
151
+ "title": "Confirm Deletion",
152
+ "description": "Are you sure you want to delete the course",
153
+ "warning": "This course has {students} enrolled student(s) and {certificates} issued certificate(s). This action is irreversible.",
154
+ "actions": {
155
+ "cancel": "Cancel",
156
+ "delete": "Delete Course"
157
+ }
158
+ },
159
+ "toasts": {
160
+ "onlyImages": "Only image files are allowed.",
161
+ "maxSize": "Maximum allowed size: 5MB.",
162
+ "fileSelected": "{name} selected.",
163
+ "courseUpdated": "Course updated successfully!",
164
+ "courseDeleted": "Course deleted successfully!"
165
+ },
166
+ "validation": {
167
+ "codeMin": "Code must be at least 2 characters",
168
+ "codeMax": "Code must be at most 16 characters",
169
+ "codeFormat": "Only letters, numbers and hyphens",
170
+ "internalNameMin": "Internal name must be at least 3 characters",
171
+ "titleMin": "Commercial title must be at least 3 characters",
172
+ "descriptionMin": "Description must be at least 10 characters",
173
+ "levelRequired": "Select a level",
174
+ "statusRequired": "Select a status",
175
+ "categoryRequired": "Select at least one category"
176
+ }
177
+ },
10
178
  "CoursesPage": {
11
179
  "title": "Courses",
12
180
  "description": "Manage your courses, categories, and levels easily and quickly.",
@@ -23,14 +191,37 @@
23
191
  "allStatuses": "All Statuses",
24
192
  "allLevels": "All Levels",
25
193
  "allCategories": "All Categories",
26
- "clear": "Clear"
194
+ "clear": "Clear",
195
+ "search": "Search"
27
196
  },
28
197
  "bulkActions": {
29
- "selected": "{{count}} selected",
198
+ "selected": "{count} selected",
30
199
  "archive": "Archive",
31
200
  "delete": "Delete",
32
201
  "clearSelection": "Clear selection"
33
202
  },
203
+ "kpis": {
204
+ "totalCourses": {
205
+ "label": "Total Courses",
206
+ "sub": "registered"
207
+ },
208
+ "activeCourses": {
209
+ "label": "Active Courses",
210
+ "sub": "published"
211
+ },
212
+ "totalStudents": {
213
+ "label": "Total Students",
214
+ "sub": "enrolled"
215
+ },
216
+ "featured": {
217
+ "label": "Featured",
218
+ "sub": "featured courses"
219
+ }
220
+ },
221
+ "cards": {
222
+ "tooltip": "Double click to open",
223
+ "studentsLabel": "students"
224
+ },
34
225
  "categories": {
35
226
  "technology": "Technology",
36
227
  "design": "Design",
@@ -72,7 +263,7 @@
72
263
  "delete": "Delete"
73
264
  },
74
265
  "selectAll": "Select all",
75
- "selectCourse": "Select {{title}}"
266
+ "selectCourse": "Select {title}"
76
267
  },
77
268
  "pagination": {
78
269
  "showing": "Showing",
@@ -80,7 +271,15 @@
80
271
  "of": "of",
81
272
  "results": "results",
82
273
  "previousPage": "Previous page",
83
- "nextPage": "Next page"
274
+ "nextPage": "Next page",
275
+ "course": "course",
276
+ "courses": "courses",
277
+ "found": "found",
278
+ "foundPlural": "found",
279
+ "page": "Page",
280
+ "firstPage": "First page",
281
+ "lastPage": "Last page",
282
+ "itemsPerPage": "Items per page"
84
283
  },
85
284
  "form": {
86
285
  "title": {
@@ -158,7 +357,7 @@
158
357
  "deleteDialog": {
159
358
  "title": "Confirm Deletion",
160
359
  "description": "Are you sure you want to delete the course",
161
- "warning": "This course has {{count}} enrolled student(s). Deletion is irreversible.",
360
+ "warning": "This course has {count} enrolled student(s). Deletion is irreversible.",
162
361
  "actions": {
163
362
  "cancel": "Cancel",
164
363
  "delete": "Delete Course"
@@ -167,10 +366,201 @@
167
366
  "toasts": {
168
367
  "courseUpdated": "Course updated successfully!",
169
368
  "courseCreated": "Course created successfully! Redirecting...",
170
- "courseRemoved": "Course \"{{title}}\" removed.",
171
- "coursesRemoved": "{{count}} course(s) removed.",
172
- "coursesArchived": "{{count}} course(s) archived.",
173
- "codeCopied": "Code \"{{code}}\" copied."
369
+ "courseRemoved": "Course \"{title}\" removed.",
370
+ "coursesRemoved": "{count} course(s) removed.",
371
+ "coursesArchived": "{count} course(s) archived.",
372
+ "codeCopied": "Code \"{code}\" copied."
373
+ },
374
+ "StructurePage": {
375
+ "pageHeader": {
376
+ "title": "Course Structure",
377
+ "description": "{sessions} sessions - {lessons} lessons - {hours}h {minutes}min of content"
378
+ },
379
+ "breadcrumbs": {
380
+ "home": "Home",
381
+ "courses": "Courses",
382
+ "structure": "Course Structure"
383
+ },
384
+ "actions": {
385
+ "saveOrder": "Save Order",
386
+ "newSession": "New Session"
387
+ },
388
+ "selection": {
389
+ "lessonsSelected": "{count} lesson(s) selected",
390
+ "moveTo": "Move to...",
391
+ "duplicate": "Duplicate",
392
+ "delete": "Delete",
393
+ "clear": "Clear selection"
394
+ },
395
+ "instructions": {
396
+ "dragToReorder": "Drag to reorder sessions and lessons. Use CTRL+click or SHIFT+click to select multiple lessons."
397
+ },
398
+ "empty": {
399
+ "title": "No sessions created",
400
+ "description": "Start by creating the first session of your course.",
401
+ "action": "Create First Session"
402
+ },
403
+ "sessionForm": {
404
+ "titleCreate": "New Session",
405
+ "titleEdit": "Edit Session",
406
+ "descriptionCreate": "Fill in the details to create a new session.",
407
+ "descriptionEdit": "Update the session information.",
408
+ "code": "Code *",
409
+ "codePlaceholder": "E.g.: S01",
410
+ "codeDescription": "Unique identifier for the session.",
411
+ "title": "Title *",
412
+ "titlePlaceholder": "E.g.: Introduction to React",
413
+ "duration": "Estimated duration (min) *",
414
+ "durationDescription": "Total expected duration of the session in minutes.",
415
+ "create": "Create Session",
416
+ "update": "Update"
417
+ },
418
+ "lessonForm": {
419
+ "titleCreate": "New Lesson",
420
+ "titleEdit": "Edit Lesson",
421
+ "descriptionCreate": "Fill in the details to create a new lesson.",
422
+ "descriptionEdit": "Update the lesson information.",
423
+ "tabs": {
424
+ "data": "Data",
425
+ "transcription": "Transcription",
426
+ "resources": "Resources"
427
+ },
428
+ "code": "Code *",
429
+ "codePlaceholder": "E.g.: A01",
430
+ "title": "Title *",
431
+ "titlePlaceholder": "E.g.: Introduction to useReducer",
432
+ "duration": "Duration (min) *",
433
+ "publicDescription": "Public description",
434
+ "publicDescriptionPlaceholder": "Description visible to students...",
435
+ "publicDescriptionHelp": "Visible on the course page.",
436
+ "privateDescription": "Private description",
437
+ "privateDescriptionPlaceholder": "Internal notes for the team...",
438
+ "privateDescriptionHelp": "Only visible to instructors and admins.",
439
+ "type": "Type *",
440
+ "typePlaceholder": "Select type",
441
+ "videoConfig": "Video Configuration",
442
+ "provider": "Provider",
443
+ "videoUrl": "Video URL",
444
+ "videoUrlPlaceholder": "https://...",
445
+ "autoDuration": "Auto duration",
446
+ "autoDurationHelp": "Detect duration from video.",
447
+ "transcriptionUpload": "Transcription Upload",
448
+ "transcriptionUploadText": "Click to upload .txt, .srt, .vtt",
449
+ "linkExam": "Link Exam",
450
+ "linkedExam": "Linked exam",
451
+ "linkedExamPlaceholder": "Select an exam...",
452
+ "linkedExamHelp": "Student will be redirected to the exam when opening this lesson.",
453
+ "postContent": "Post Content",
454
+ "contentEditor": "Content Editor",
455
+ "bold": "Bold",
456
+ "italic": "Italic",
457
+ "underline": "Underline",
458
+ "link": "Link",
459
+ "image": "Image",
460
+ "postContentPlaceholder": "Write the lesson content in Markdown...",
461
+ "postContentHelp": "Supports Markdown. Use the toolbar above.",
462
+ "fullTranscription": "Full transcription",
463
+ "wordCount": "{count} words",
464
+ "copyText": "Copy text",
465
+ "downloadTxt": "Download .txt",
466
+ "noTranscription": "No transcription available",
467
+ "noTranscriptionHelp": "Upload a transcription file in the Data tab (video field).",
468
+ "resources": "Resources ({count})",
469
+ "upload": "Upload",
470
+ "dragOrClick": "Drag files or click to upload",
471
+ "fileTypes": "PDF, ZIP, PNG, JPG, MP4 (max 50MB)",
472
+ "noResources": "No resources added.",
473
+ "publicTooltip": "Public (click to make private)",
474
+ "privateTooltip": "Private (click to make public)",
475
+ "cancel": "Cancel",
476
+ "create": "Create Lesson",
477
+ "update": "Update"
478
+ },
479
+ "deleteSession": {
480
+ "title": "Delete Session",
481
+ "message": "Are you sure you want to delete the session",
482
+ "warning": "This session has {count} lesson(s) that will be removed as well.",
483
+ "cancel": "Cancel",
484
+ "confirm": "Delete"
485
+ },
486
+ "deleteLesson": {
487
+ "title": "Delete Lesson",
488
+ "message": "Are you sure you want to delete the lesson",
489
+ "warning": "This action cannot be undone.",
490
+ "cancel": "Cancel",
491
+ "confirm": "Delete"
492
+ },
493
+ "bulkDelete": {
494
+ "title": "Delete {count} lesson(s)",
495
+ "message": "Are you sure you want to delete {count} selected lesson(s)? This action cannot be undone.",
496
+ "cancel": "Cancel",
497
+ "confirm": "Delete {count} lesson(s)"
498
+ },
499
+ "session": {
500
+ "expand": "Expand",
501
+ "collapse": "Collapse",
502
+ "estimatedDuration": "{minutes}min estimated",
503
+ "lessonsAndDuration": "{lessons} lessons · {minutes}min",
504
+ "selectAll": "Select all lessons",
505
+ "addLesson": "Add lesson",
506
+ "edit": "Edit session",
507
+ "merge": "Merge with another session",
508
+ "mergeWith": "Merge lessons with:",
509
+ "delete": "Delete session",
510
+ "noLessons": "No lessons in this session"
511
+ },
512
+ "lesson": {
513
+ "dragSession": "Drag session",
514
+ "dragLesson": "Drag lesson",
515
+ "edit": "Edit lesson",
516
+ "delete": "Delete lesson"
517
+ },
518
+ "types": {
519
+ "video": "Video",
520
+ "post": "Post",
521
+ "questao": "Question",
522
+ "exercicio": "Exercise"
523
+ },
524
+ "providers": {
525
+ "custom": "Custom"
526
+ },
527
+ "mockExams": {
528
+ "hooksBasic": "Assessment: Basic Hooks",
529
+ "hooksAdvanced": "Assessment: Advanced Hooks",
530
+ "reactPatterns": "Exam: React Patterns",
531
+ "performance": "Quiz: Performance",
532
+ "finalEvaluation": "Final Assessment"
533
+ },
534
+ "toasts": {
535
+ "sessionsMerged": "Sessions merged successfully!",
536
+ "sessionUpdated": "Session updated!",
537
+ "sessionCreated": "Session created!",
538
+ "sessionDeleted": "Session removed!",
539
+ "lessonUpdated": "Lesson updated!",
540
+ "lessonCreated": "Lesson created!",
541
+ "lessonDeleted": "Lesson removed!",
542
+ "resourceAdded": "Resource added!",
543
+ "resourceRemoved": "Resource removed!",
544
+ "lessonsDeleted": "{count} lesson(s) removed!",
545
+ "lessonsMoved": "{count} lesson(s) moved!",
546
+ "lessonsDuplicated": "{count} lesson(s) duplicated!",
547
+ "structureSaved": "Structure saved!",
548
+ "transcriptionUploaded": "Transcription uploaded!",
549
+ "boldApplied": "Bold applied",
550
+ "italicApplied": "Italic applied",
551
+ "underlineApplied": "Underline applied",
552
+ "insertLink": "Insert link",
553
+ "insertImage": "Insert image",
554
+ "transcriptionCopied": "Transcription copied!",
555
+ "downloadStarted": "Download started!",
556
+ "filesAdded": "{count} file(s) added!"
557
+ },
558
+ "validation": {
559
+ "codeMin": "Code must be at least 2 characters",
560
+ "titleMin": "Title must be at least 3 characters",
561
+ "durationMin": "Minimum duration of 1 minute",
562
+ "typeRequired": "Select a type"
563
+ }
174
564
  }
175
565
  },
176
566
  "ExamsPage": {
@@ -302,7 +692,7 @@
302
692
  "deleteDialog": {
303
693
  "title": "Delete Exam",
304
694
  "description": "Are you sure you want to delete",
305
- "warning": "This exam has {{count}} completion(s). This action cannot be undone.",
695
+ "warning": "This exam has {count} completion(s). This action cannot be undone.",
306
696
  "actions": {
307
697
  "cancel": "Cancel",
308
698
  "delete": "Delete"
@@ -314,8 +704,90 @@
314
704
  "examRemoved": "Exam removed!"
315
705
  }
316
706
  },
707
+ "QuestionsPage": {
708
+ "title": "Manage Questions",
709
+ "description": "Exam {code} - {count} questions - {total} points",
710
+ "breadcrumbs": {
711
+ "home": "Home",
712
+ "exams": "Exams",
713
+ "questions": "Questions"
714
+ },
715
+ "actions": {
716
+ "save": "Save",
717
+ "newQuestion": "New Question"
718
+ },
719
+ "stats": {
720
+ "questions": "Questions",
721
+ "totalScore": "Total Score",
722
+ "avgAlternatives": "Avg Alternatives"
723
+ },
724
+ "empty": {
725
+ "title": "No questions registered",
726
+ "description": "Create the first question for this exam.",
727
+ "action": "Create Question"
728
+ },
729
+ "question": {
730
+ "alternatives": "{count} alternatives",
731
+ "points": "{score} pt",
732
+ "pointsPlural": "{score} pts",
733
+ "actions": {
734
+ "edit": "Edit",
735
+ "duplicate": "Duplicate",
736
+ "delete": "Delete"
737
+ },
738
+ "dragQuestion": "Drag question",
739
+ "dragAlternative": "Drag alternative",
740
+ "markCorrect": "Mark as correct",
741
+ "markIncorrect": "Mark as incorrect",
742
+ "removeAlternative": "Remove alternative"
743
+ },
744
+ "sheet": {
745
+ "titleCreate": "New Question",
746
+ "titleEdit": "Edit Question",
747
+ "descriptionCreate": "Configure the statement and alternatives. Drag to reorder.",
748
+ "descriptionEdit": "Edit the statement, alternatives and scoring.",
749
+ "fields": {
750
+ "statement": "Statement",
751
+ "statementPlaceholder": "Enter the question statement...",
752
+ "score": "Score",
753
+ "scorePlaceholder": "2",
754
+ "alternatives": "Alternatives",
755
+ "alternativesDescription": "Drag to reorder. Click the circle to mark as correct.",
756
+ "alternativePlaceholder": "Alternative text..."
757
+ },
758
+ "actions": {
759
+ "add": "Add",
760
+ "create": "Create Question",
761
+ "update": "Save Changes"
762
+ },
763
+ "validation": {
764
+ "minAlternatives": "Minimum of 2 alternatives required.",
765
+ "statementMin": "Statement must be at least 5 characters",
766
+ "scoreMin": "Minimum score of 0.5"
767
+ }
768
+ },
769
+ "deleteDialog": {
770
+ "title": "Delete Question",
771
+ "description": "Are you sure you want to delete this question? This action cannot be undone.",
772
+ "actions": {
773
+ "cancel": "Cancel",
774
+ "confirm": "Delete"
775
+ }
776
+ },
777
+ "toasts": {
778
+ "noCorrectAnswer": "Mark at least one alternative as correct.",
779
+ "allMustHaveText": "All alternatives must have text.",
780
+ "minAlternatives": "Minimum of 2 alternatives.",
781
+ "questionUpdated": "Question updated!",
782
+ "questionCreated": "Question created!",
783
+ "questionRemoved": "Question removed!",
784
+ "questionDuplicated": "Question duplicated!",
785
+ "changesSaved": "Changes saved successfully!"
786
+ },
787
+ "copySuffix": " (copy)"
788
+ },
317
789
  "TrainingPage": {
318
- "title": "Trainings",
790
+ "title": "Training",
319
791
  "description": "Learning paths with multiple courses",
320
792
  "breadcrumbs": {
321
793
  "home": "Home",
@@ -461,7 +933,7 @@
461
933
  "deleteDialog": {
462
934
  "title": "Delete Training",
463
935
  "description": "Are you sure you want to delete",
464
- "warning": "This training has {{count}} enrolled student(s). This action cannot be undone.",
936
+ "warning": "This training has {count} enrolled student(s). This action cannot be undone.",
465
937
  "actions": {
466
938
  "cancel": "Cancel",
467
939
  "delete": "Delete"
@@ -471,7 +943,7 @@
471
943
  "formacaoUpdated": "Training updated!",
472
944
  "formacaoCriada": "Training created!",
473
945
  "formacaoRemovida": "Training removed!",
474
- "openingFormacao": "Opening \"{{nome}}\"...",
946
+ "openingFormacao": "Opening \"{nome}\"...",
475
947
  "openingDetails": "Opening training..."
476
948
  }
477
949
  },
@@ -625,6 +1097,77 @@
625
1097
  "designSystem": "Design System"
626
1098
  }
627
1099
  },
1100
+ "AttemptPage": {
1101
+ "breadcrumbs": {
1102
+ "home": "Home",
1103
+ "exams": "Exams",
1104
+ "attemptExam": "Exam Attempt",
1105
+ "examResult": "Exam Result"
1106
+ },
1107
+ "startScreen": {
1108
+ "questions": "Questions",
1109
+ "minutes": "Minutes",
1110
+ "points": "Points",
1111
+ "minGrade": "Min Grade",
1112
+ "instructions": "Instructions",
1113
+ "instructionsList": {
1114
+ "item1": "Answer all questions within the time limit.",
1115
+ "item2": "You can navigate between questions freely.",
1116
+ "item3": "Use the flag button to mark questions for review.",
1117
+ "item4": "Progress is saved automatically.",
1118
+ "item5": "Upon completion, your answers will be evaluated immediately."
1119
+ },
1120
+ "startButton": "Start Exam"
1121
+ },
1122
+ "resultScreen": {
1123
+ "passed": "Passed!",
1124
+ "failed": "Failed",
1125
+ "scoreText": "{total} of {max} points",
1126
+ "answered": "Answered",
1127
+ "blank": "Blank",
1128
+ "timeUsed": "Time Used",
1129
+ "answersSummary": "Answers Summary",
1130
+ "noAnswer": "No answer",
1131
+ "backButton": "Back"
1132
+ },
1133
+ "examInProgress": {
1134
+ "saveButton": "Save",
1135
+ "finishButton": "Finish",
1136
+ "question": "Question",
1137
+ "of": "of",
1138
+ "marked": "Marked",
1139
+ "markQuestion": "Mark question",
1140
+ "previousButton": "Previous",
1141
+ "nextButton": "Next",
1142
+ "navigation": "Navigation",
1143
+ "answeredCount": "{count} of {total} answered",
1144
+ "questionLabel": "Question {number}",
1145
+ "questionAnswered": "(answered)",
1146
+ "questionMarked": "(marked)",
1147
+ "current": "Current",
1148
+ "answeredLabel": "Answered",
1149
+ "notAnswered": "Not answered",
1150
+ "markedForReview": "Marked for review",
1151
+ "navigationMobile": "Navigation - {count}/{total} answered",
1152
+ "closeButton": "Close",
1153
+ "progressSaved": "Progress saved!"
1154
+ },
1155
+ "submitDialog": {
1156
+ "title": "Finish Exam",
1157
+ "description": "Do you really want to finish the exam and submit your answers?",
1158
+ "answeredLabel": "Answered",
1159
+ "blankLabel": "Blank",
1160
+ "markedLabel": "Marked",
1161
+ "warning": "Warning: You have {count} unanswered question(s).",
1162
+ "continueButton": "Continue Exam",
1163
+ "submitButton": "Finish and Submit"
1164
+ },
1165
+ "timeUpDialog": {
1166
+ "title": "Time Up",
1167
+ "description": "The exam time is over. Your answers will be submitted automatically.",
1168
+ "viewResultButton": "View Result"
1169
+ }
1170
+ },
628
1171
  "ClassesPage": {
629
1172
  "title": "Classes",
630
1173
  "description": "Manage classes, students, and schedules",
@@ -773,7 +1316,7 @@
773
1316
  "deleteDialog": {
774
1317
  "title": "Delete Class",
775
1318
  "description": "Are you sure you want to delete the class",
776
- "warning": "This class has {{count}} enrolled student(s). This action cannot be undone.",
1319
+ "warning": "This class has {count} enrolled student(s). This action cannot be undone.",
777
1320
  "actions": {
778
1321
  "cancel": "Cancel",
779
1322
  "delete": "Delete"
@@ -783,6 +1326,152 @@
783
1326
  "turmaUpdated": "Class updated successfully!",
784
1327
  "turmaCreated": "Class created! Redirecting...",
785
1328
  "turmaRemoved": "Class removed!"
1329
+ },
1330
+ "DetailPage": {
1331
+ "breadcrumbs": {
1332
+ "home": "Home",
1333
+ "classes": "Classes",
1334
+ "management": "Class Management"
1335
+ },
1336
+ "actions": {
1337
+ "viewCourse": "View Course",
1338
+ "newLesson": "New Lesson"
1339
+ },
1340
+ "calendar": {
1341
+ "today": "Today",
1342
+ "previous": "Previous",
1343
+ "next": "Next",
1344
+ "month": "Month",
1345
+ "week": "Week",
1346
+ "day": "Day",
1347
+ "agenda": "Agenda",
1348
+ "date": "Date",
1349
+ "time": "Time",
1350
+ "event": "Event",
1351
+ "noEventsInRange": "No lessons in this period",
1352
+ "showMore": "+{count} more",
1353
+ "helper": "Click a lesson to edit it or create new lessons."
1354
+ },
1355
+ "info": {
1356
+ "period": "Period",
1357
+ "schedule": "Schedule",
1358
+ "onlineLabel": "Link",
1359
+ "locationLabel": "Location",
1360
+ "accessRoom": "Access room",
1361
+ "modality": "Modality"
1362
+ },
1363
+ "tabs": {
1364
+ "students": "Students",
1365
+ "calendar": "Calendar",
1366
+ "attendance": "Attendance"
1367
+ },
1368
+ "students": {
1369
+ "searchPlaceholder": "Search student by name or email...",
1370
+ "selectedCount": "{count} student(s) selected",
1371
+ "progress": "Progress",
1372
+ "attendance": "Attendance",
1373
+ "actions": {
1374
+ "removeSelected": "Remove {count}",
1375
+ "addStudent": "Add Student",
1376
+ "clearSelection": "Clear"
1377
+ },
1378
+ "empty": {
1379
+ "notFound": "No student found",
1380
+ "notEnrolled": "No enrolled students"
1381
+ },
1382
+ "menu": {
1383
+ "viewProfile": "View profile",
1384
+ "sendEmail": "Send email",
1385
+ "removeFromClass": "Remove from class"
1386
+ }
1387
+ },
1388
+ "attendance": {
1389
+ "helper": "Select a lesson to record student attendance.",
1390
+ "register": "Record"
1391
+ },
1392
+ "dialogs": {
1393
+ "addStudents": {
1394
+ "title": "Add Students",
1395
+ "description": "Select students to add to the class.",
1396
+ "confirm": "Add"
1397
+ },
1398
+ "removeStudent": {
1399
+ "title": "Remove Student",
1400
+ "descriptionPrefix": "Are you sure you want to remove",
1401
+ "descriptionSuffix": "from this class? This action can be reverted later."
1402
+ }
1403
+ },
1404
+ "common": {
1405
+ "cancel": "Cancel",
1406
+ "remove": "Remove"
1407
+ },
1408
+ "sheet": {
1409
+ "lessonForm": {
1410
+ "titleCreate": "New Lesson",
1411
+ "titleEdit": "Edit Lesson",
1412
+ "descriptionCreate": "Fill in the data to create a new lesson.",
1413
+ "descriptionEdit": "Update the lesson data.",
1414
+ "fields": {
1415
+ "title": "Title",
1416
+ "titlePlaceholder": "E.g.: Introduction to Hooks",
1417
+ "date": "Date",
1418
+ "type": "Type",
1419
+ "select": "Select",
1420
+ "startTime": "Start Time",
1421
+ "endTime": "End Time",
1422
+ "location": "Location / Link",
1423
+ "locationPlaceholder": "Room 201 or https://meet.google.com/..."
1424
+ },
1425
+ "actions": {
1426
+ "save": "Save",
1427
+ "create": "Create Lesson"
1428
+ },
1429
+ "validation": {
1430
+ "titleMin": "Minimum 3 characters",
1431
+ "dateRequired": "Date required",
1432
+ "startTimeRequired": "Time required",
1433
+ "endTimeRequired": "Time required",
1434
+ "locationRequired": "Location required",
1435
+ "typeRequired": "Select a type"
1436
+ }
1437
+ },
1438
+ "attendance": {
1439
+ "title": "Attendance List",
1440
+ "summary": "{present} present out of {total}",
1441
+ "allPresent": "All present",
1442
+ "allAbsent": "All absent",
1443
+ "present": "Present",
1444
+ "absent": "Absent",
1445
+ "save": "Save Attendance"
1446
+ }
1447
+ },
1448
+ "kpis": {
1449
+ "enrolledStudents": {
1450
+ "label": "Enrolled Students",
1451
+ "sub": "of {vagas} spots"
1452
+ },
1453
+ "occupancyRate": {
1454
+ "label": "Occupancy Rate",
1455
+ "subFree": "{count} spots available",
1456
+ "subFull": "Full"
1457
+ },
1458
+ "avgAttendance": {
1459
+ "label": "Average Attendance",
1460
+ "sub": "overall attendance"
1461
+ },
1462
+ "completedLessons": {
1463
+ "label": "Completed Lessons",
1464
+ "sub": "of {total} total"
1465
+ }
1466
+ },
1467
+ "toasts": {
1468
+ "studentsAdded": "{count} student(s) added successfully!",
1469
+ "studentRemoved": "Student removed from class.",
1470
+ "studentsRemoved": "{count} student(s) removed from class.",
1471
+ "lessonUpdated": "Lesson updated successfully!",
1472
+ "lessonCreated": "Lesson created successfully!",
1473
+ "attendanceSaved": "Attendance saved successfully!"
1474
+ }
786
1475
  }
787
1476
  }
788
1477
  }