@hed-hog/lms 0.0.350 → 0.0.351

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 (160) hide show
  1. package/dist/certificate/certificate.controller.d.ts +2 -2
  2. package/dist/certificate/certificate.controller.d.ts.map +1 -1
  3. package/dist/certificate/certificate.controller.js +8 -6
  4. package/dist/certificate/certificate.controller.js.map +1 -1
  5. package/dist/certificate/certificate.service.d.ts +5 -2
  6. package/dist/certificate/certificate.service.d.ts.map +1 -1
  7. package/dist/certificate/certificate.service.js +70 -6
  8. package/dist/certificate/certificate.service.js.map +1 -1
  9. package/dist/course/course-structure.controller.d.ts +24 -10
  10. package/dist/course/course-structure.controller.d.ts.map +1 -1
  11. package/dist/course/course-structure.controller.js +23 -2
  12. package/dist/course/course-structure.controller.js.map +1 -1
  13. package/dist/course/course-structure.service.d.ts +16 -8
  14. package/dist/course/course-structure.service.d.ts.map +1 -1
  15. package/dist/course/course-structure.service.js +61 -30
  16. package/dist/course/course-structure.service.js.map +1 -1
  17. package/dist/course/course-video-conversion.service.d.ts +37 -0
  18. package/dist/course/course-video-conversion.service.d.ts.map +1 -0
  19. package/dist/course/course-video-conversion.service.js +308 -0
  20. package/dist/course/course-video-conversion.service.js.map +1 -0
  21. package/dist/course/course.controller.d.ts +17 -0
  22. package/dist/course/course.controller.d.ts.map +1 -1
  23. package/dist/course/course.controller.js +23 -0
  24. package/dist/course/course.controller.js.map +1 -1
  25. package/dist/course/course.module.d.ts.map +1 -1
  26. package/dist/course/course.module.js +15 -2
  27. package/dist/course/course.module.js.map +1 -1
  28. package/dist/course/course.service.d.ts +15 -0
  29. package/dist/course/course.service.d.ts.map +1 -1
  30. package/dist/course/course.service.js +103 -49
  31. package/dist/course/course.service.js.map +1 -1
  32. package/dist/course/dto/create-course-structure-lesson.dto.d.ts +5 -1
  33. package/dist/course/dto/create-course-structure-lesson.dto.d.ts.map +1 -1
  34. package/dist/course/dto/create-course-structure-lesson.dto.js +16 -2
  35. package/dist/course/dto/create-course-structure-lesson.dto.js.map +1 -1
  36. package/dist/course/dto/create-course.dto.d.ts +1 -0
  37. package/dist/course/dto/create-course.dto.d.ts.map +1 -1
  38. package/dist/course/dto/create-course.dto.js +9 -0
  39. package/dist/course/dto/create-course.dto.js.map +1 -1
  40. package/dist/enterprise/enterprise.controller.d.ts +3 -3
  41. package/dist/enterprise/enterprise.controller.d.ts.map +1 -1
  42. package/dist/enterprise/enterprise.controller.js +0 -1
  43. package/dist/enterprise/enterprise.controller.js.map +1 -1
  44. package/dist/enterprise/enterprise.service.d.ts +3 -3
  45. package/dist/evaluation/evaluation.service.d.ts.map +1 -1
  46. package/dist/evaluation/evaluation.service.js +9 -2
  47. package/dist/evaluation/evaluation.service.js.map +1 -1
  48. package/dist/index.d.ts +1 -0
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +1 -0
  51. package/dist/index.js.map +1 -1
  52. package/dist/lms.module.d.ts.map +1 -1
  53. package/dist/lms.module.js +3 -0
  54. package/dist/lms.module.js.map +1 -1
  55. package/dist/video-resolution-profile/dto/create-video-resolution-profile.dto.d.ts +6 -0
  56. package/dist/video-resolution-profile/dto/create-video-resolution-profile.dto.d.ts.map +1 -0
  57. package/dist/video-resolution-profile/dto/create-video-resolution-profile.dto.js +33 -0
  58. package/dist/video-resolution-profile/dto/create-video-resolution-profile.dto.js.map +1 -0
  59. package/dist/video-resolution-profile/dto/update-video-resolution-profile.dto.d.ts +6 -0
  60. package/dist/video-resolution-profile/dto/update-video-resolution-profile.dto.d.ts.map +1 -0
  61. package/dist/video-resolution-profile/dto/update-video-resolution-profile.dto.js +33 -0
  62. package/dist/video-resolution-profile/dto/update-video-resolution-profile.dto.js.map +1 -0
  63. package/dist/video-resolution-profile/video-resolution-profile.controller.d.ts +38 -0
  64. package/dist/video-resolution-profile/video-resolution-profile.controller.d.ts.map +1 -0
  65. package/dist/video-resolution-profile/video-resolution-profile.controller.js +89 -0
  66. package/dist/video-resolution-profile/video-resolution-profile.controller.js.map +1 -0
  67. package/dist/video-resolution-profile/video-resolution-profile.mcp-tools.d.ts +26 -0
  68. package/dist/video-resolution-profile/video-resolution-profile.mcp-tools.d.ts.map +1 -0
  69. package/dist/video-resolution-profile/video-resolution-profile.mcp-tools.js +160 -0
  70. package/dist/video-resolution-profile/video-resolution-profile.mcp-tools.js.map +1 -0
  71. package/dist/video-resolution-profile/video-resolution-profile.module.d.ts +3 -0
  72. package/dist/video-resolution-profile/video-resolution-profile.module.d.ts.map +1 -0
  73. package/dist/video-resolution-profile/video-resolution-profile.module.js +26 -0
  74. package/dist/video-resolution-profile/video-resolution-profile.module.js.map +1 -0
  75. package/dist/video-resolution-profile/video-resolution-profile.service.d.ts +45 -0
  76. package/dist/video-resolution-profile/video-resolution-profile.service.d.ts.map +1 -0
  77. package/dist/video-resolution-profile/video-resolution-profile.service.js +117 -0
  78. package/dist/video-resolution-profile/video-resolution-profile.service.js.map +1 -0
  79. package/hedhog/data/menu.yaml +17 -0
  80. package/hedhog/data/route.yaml +133 -0
  81. package/hedhog/data/video_resolution_profile.yaml +7 -0
  82. package/hedhog/frontend/app/_components/class-form-sheet.tsx.ejs +269 -324
  83. package/hedhog/frontend/app/_components/course-form-sheet.tsx.ejs +124 -70
  84. package/hedhog/frontend/app/_components/create-lms-instructor-sheet.tsx.ejs +7 -4
  85. package/hedhog/frontend/app/_components/create-lms-person-sheet.tsx.ejs +2 -2
  86. package/hedhog/frontend/app/_components/create-lms-student-person-sheet.tsx.ejs +2 -2
  87. package/hedhog/frontend/app/_lib/editor/templateSerializer.ts.ejs +34 -4
  88. package/hedhog/frontend/app/_lib/editor/types.ts.ejs +28 -3
  89. package/hedhog/frontend/app/achievements/page.tsx.ejs +9 -3
  90. package/hedhog/frontend/app/bitcodes/page.tsx.ejs +9 -3
  91. package/hedhog/frontend/app/certificates/issued/page.tsx.ejs +7 -3
  92. package/hedhog/frontend/app/certificates/models/CanvasStage.tsx.ejs +29 -8
  93. package/hedhog/frontend/app/certificates/models/LeftPanel.tsx.ejs +14 -0
  94. package/hedhog/frontend/app/certificates/models/RightPanel.tsx.ejs +194 -9
  95. package/hedhog/frontend/app/certificates/models/page.tsx.ejs +15 -5
  96. package/hedhog/frontend/app/classes/[id]/page.tsx.ejs +9 -5
  97. package/hedhog/frontend/app/classes/page.tsx.ejs +73 -47
  98. package/hedhog/frontend/app/courses/[id]/_components/CourseCertificateCard.tsx.ejs +19 -9
  99. package/hedhog/frontend/app/courses/[id]/_components/CourseClassificationCard.tsx.ejs +24 -1
  100. package/hedhog/frontend/app/courses/[id]/_components/CourseContentCard.tsx.ejs +1 -1
  101. package/hedhog/frontend/app/courses/[id]/_components/CourseMainInfoCard.tsx.ejs +1 -1
  102. package/hedhog/frontend/app/courses/[id]/_components/CourseRelationsCard.tsx.ejs +28 -16
  103. package/hedhog/frontend/app/courses/[id]/_components/CourseSectionCard.tsx.ejs +11 -6
  104. package/hedhog/frontend/app/courses/[id]/_components/CourseSummaryCard.tsx.ejs +7 -4
  105. package/hedhog/frontend/app/courses/[id]/_components/course-edit-types.ts.ejs +1 -0
  106. package/hedhog/frontend/app/courses/[id]/page.tsx.ejs +24 -87
  107. package/hedhog/frontend/app/courses/[id]/structure/_components/editor-course.tsx.ejs +892 -411
  108. package/hedhog/frontend/app/courses/[id]/structure/_components/editor-lesson.tsx.ejs +1004 -293
  109. package/hedhog/frontend/app/courses/[id]/structure/_components/editor-session.tsx.ejs +11 -11
  110. package/hedhog/frontend/app/courses/[id]/structure/_components/shortcuts-help.tsx.ejs +62 -52
  111. package/hedhog/frontend/app/courses/[id]/structure/_components/types.ts.ejs +2 -0
  112. package/hedhog/frontend/app/courses/[id]/structure/_data/adapters/course-structure.adapter.ts.ejs +19 -6
  113. package/hedhog/frontend/app/courses/[id]/structure/_data/services/course-structure.service.ts.ejs +86 -1
  114. package/hedhog/frontend/app/courses/[id]/structure/_data/types/api-course.types.ts.ejs +3 -0
  115. package/hedhog/frontend/app/courses/[id]/structure/_data/use-course-structure-mutations.ts.ejs +1 -0
  116. package/hedhog/frontend/app/courses/page.tsx.ejs +112 -89
  117. package/hedhog/frontend/app/enterprise/[id]/page.tsx.ejs +1 -1
  118. package/hedhog/frontend/app/enterprise/_components/enterprise-admin-create-sheet.tsx.ejs +10 -3
  119. package/hedhog/frontend/app/enterprise/_components/enterprise-detail-sheet.tsx.ejs +8 -4
  120. package/hedhog/frontend/app/enterprise/_components/enterprise-person-edit-sheet.tsx.ejs +2 -2
  121. package/hedhog/frontend/app/enterprise/_components/enterprise-sheet.tsx.ejs +10 -4
  122. package/hedhog/frontend/app/enterprise/_components/enterprise-student-create-sheet.tsx.ejs +10 -3
  123. package/hedhog/frontend/app/enterprise/_components/enterprise-user-create-sheet.tsx.ejs +10 -3
  124. package/hedhog/frontend/app/evaluations/_components/evaluation-topic-form-sheet.tsx.ejs +10 -3
  125. package/hedhog/frontend/app/exams/[id]/questions/page.tsx.ejs +23 -9
  126. package/hedhog/frontend/app/exams/page.tsx.ejs +14 -6
  127. package/hedhog/frontend/app/instructor-skills/page.tsx.ejs +9 -3
  128. package/hedhog/frontend/app/instructors/_components/instructor-form-sheet.tsx.ejs +190 -17
  129. package/hedhog/frontend/app/layout.tsx.ejs +5 -1
  130. package/hedhog/frontend/app/paths/page.tsx.ejs +13 -5
  131. package/hedhog/frontend/app/reports/evaluations/page.tsx.ejs +10 -10
  132. package/hedhog/frontend/app/training/page.tsx.ejs +13 -5
  133. package/hedhog/frontend/app/video-resolution-profiles/page.tsx.ejs +607 -0
  134. package/hedhog/frontend/messages/en.json +250 -9
  135. package/hedhog/frontend/messages/pt.json +250 -9
  136. package/hedhog/table/course.yaml +4 -0
  137. package/hedhog/table/course_lesson_file.yaml +8 -0
  138. package/hedhog/table/course_video_resolution_profile.yaml +22 -0
  139. package/hedhog/table/video_resolution_profile.yaml +18 -0
  140. package/package.json +7 -6
  141. package/src/certificate/certificate.controller.ts +19 -14
  142. package/src/certificate/certificate.service.ts +106 -11
  143. package/src/course/course-structure.controller.ts +24 -2
  144. package/src/course/course-structure.service.ts +21 -4
  145. package/src/course/course-video-conversion.service.ts +415 -0
  146. package/src/course/course.controller.ts +18 -0
  147. package/src/course/course.module.ts +15 -2
  148. package/src/course/course.service.ts +72 -2
  149. package/src/course/dto/create-course-structure-lesson.dto.ts +13 -2
  150. package/src/course/dto/create-course.dto.ts +8 -0
  151. package/src/enterprise/enterprise.controller.ts +0 -1
  152. package/src/evaluation/evaluation.service.ts +9 -2
  153. package/src/index.ts +1 -0
  154. package/src/lms.module.ts +3 -0
  155. package/src/video-resolution-profile/dto/create-video-resolution-profile.dto.ts +16 -0
  156. package/src/video-resolution-profile/dto/update-video-resolution-profile.dto.ts +16 -0
  157. package/src/video-resolution-profile/video-resolution-profile.controller.ts +62 -0
  158. package/src/video-resolution-profile/video-resolution-profile.mcp-tools.ts +128 -0
  159. package/src/video-resolution-profile/video-resolution-profile.module.ts +13 -0
  160. package/src/video-resolution-profile/video-resolution-profile.service.ts +117 -0
@@ -209,6 +209,11 @@
209
209
  "description": "Recorded course for self-paced consumption without depending on class groups."
210
210
  },
211
211
  "scheduled": {
212
+ "sectionDescriptions": {
213
+ "basicInfo": "The course identifiers and main communication details live here.",
214
+ "relations": "Group the links that help people find, operate, and teach this course.",
215
+ "certification": "Choose the model used for issuance and make the impact of this link explicit."
216
+ },
212
217
  "label": "Scheduled",
213
218
  "description": "Course mainly offered through class groups with calendars and planned meetings."
214
219
  },
@@ -240,9 +245,10 @@
240
245
  "description": "Edit the course information below. Fields with * are required.",
241
246
  "fields": {
242
247
  "code": {
243
- "label": "Code *",
244
- "placeholder": "Ex: REACT-ADV",
245
- "description": "Unique identifier (letters, numbers and hyphens)"
248
+ "label": "Edition Code",
249
+ "placeholder": "E.g.: REACT2024",
250
+ "description": "Uppercase letters and numbers only, no spaces (minimum 2)",
251
+ "sectionTitle": "Edition Code"
246
252
  },
247
253
  "internalName": {
248
254
  "label": "Internal Name *",
@@ -285,9 +291,18 @@
285
291
  "selectPlaceholder": "Select a category",
286
292
  "searchPlaceholder": "Type to search category...",
287
293
  "noResults": "No category found",
294
+ "emptyHint": "No linked category yet.",
288
295
  "selectedCount": "selected category(ies)",
289
296
  "removeAction": "Remove category",
290
- "createAction": "Create category"
297
+ "createAction": "Create category",
298
+ "createTitle": "Create category",
299
+ "createDescription": "Register a category quickly without leaving the course editor.",
300
+ "createFields": {
301
+ "name": {
302
+ "label": "Category name",
303
+ "placeholder": "Ex: Web Development"
304
+ }
305
+ }
291
306
  },
292
307
  "instructors": {
293
308
  "label": "Instructors",
@@ -296,7 +311,16 @@
296
311
  "selectPlaceholder": "Select an instructor",
297
312
  "searchPlaceholder": "Type to search instructor...",
298
313
  "noResults": "No instructor found",
299
- "removeAction": "Remove instructor"
314
+ "emptyHint": "No linked instructor yet.",
315
+ "removeAction": "Remove instructor",
316
+ "createAction": "Register instructor"
317
+ },
318
+ "operationsProject": {
319
+ "label": "Linked project",
320
+ "placeholder": "Select an Operations project",
321
+ "searchPlaceholder": "Search project...",
322
+ "entityLabel": "project",
323
+ "noResults": "No project found"
300
324
  },
301
325
  "prerequisites": {
302
326
  "label": "Prerequisites",
@@ -322,7 +346,21 @@
322
346
  "certificateModel": {
323
347
  "label": "Certificate Model",
324
348
  "description": "Select a single model for certificate issuance",
325
- "placeholder": "Select a model"
349
+ "placeholder": "Select a model",
350
+ "entityLabel": "certificate model",
351
+ "createAction": "Create model",
352
+ "createTitle": "Create certificate model",
353
+ "createDescription": "Create a base model and link it to the course without leaving this page.",
354
+ "createFields": {
355
+ "name": {
356
+ "label": "Model name",
357
+ "placeholder": "Ex: Institutional certificate"
358
+ },
359
+ "description": {
360
+ "label": "Description",
361
+ "placeholder": "Internal summary to identify the template"
362
+ }
363
+ }
326
364
  }
327
365
  },
328
366
  "flags": {
@@ -380,7 +418,76 @@
380
418
  "media": "Media",
381
419
  "resources": "Resources",
382
420
  "extra": "Extra",
383
- "publish": "Publish"
421
+ "publish": "Publish",
422
+ "videoProfiles": "Videos"
423
+ },
424
+ "structureTab": {
425
+ "summary": {
426
+ "title": "Content summary",
427
+ "stats": {
428
+ "sessions": "Sessions",
429
+ "lessons": "Lessons",
430
+ "duration": "Duration",
431
+ "published": "Published"
432
+ }
433
+ },
434
+ "mainInfo": {
435
+ "title": "Main data",
436
+ "fields": {
437
+ "title": "Title",
438
+ "internalName": "Internal Name",
439
+ "slug": "Slug"
440
+ }
441
+ },
442
+ "description": {
443
+ "title": "Description"
444
+ }
445
+ },
446
+ "resources": {
447
+ "title": "Course download resources",
448
+ "dropzoneAriaLabel": "Drop file or click to select",
449
+ "uploading": "Uploading files...",
450
+ "saving": "Saving resources...",
451
+ "idle": "Drag files to add",
452
+ "helper": "Click to select files",
453
+ "empty": "No course resource registered yet.",
454
+ "attachedFile": "Attached file",
455
+ "downloadAria": "Download {name}",
456
+ "removeAria": "Remove {name}"
457
+ },
458
+ "videoProfiles": {
459
+ "title": "Video Resolution Profiles",
460
+ "placeholder": "Select a video profile...",
461
+ "createTitle": "New video profile",
462
+ "createFields": {
463
+ "name": {
464
+ "label": "Name",
465
+ "placeholder": "Ex: 1080p Full HD"
466
+ },
467
+ "ffmpegParams": {
468
+ "label": "FFmpeg parameters",
469
+ "placeholder": "-vf \"scale=1920:1080\" -c:v libx264 ..."
470
+ }
471
+ },
472
+ "createError": "Could not create the profile.",
473
+ "empty": "No resolution profile added.",
474
+ "fallbackName": "Profile #{id}",
475
+ "editAria": "Edit profile",
476
+ "removeAria": "Remove profile",
477
+ "sheet": {
478
+ "title": "Edit video profile",
479
+ "description": "Update this resolution profile's name and FFmpeg parameters.",
480
+ "actions": {
481
+ "cancel": "Cancel",
482
+ "save": "Save",
483
+ "saving": "Saving..."
484
+ }
485
+ }
486
+ },
487
+ "footer": {
488
+ "cancel": "Cancel",
489
+ "newSession": "New session",
490
+ "save": "Save"
384
491
  },
385
492
  "publishChecklist": {
386
493
  "title": "Publishing checklist",
@@ -432,7 +539,8 @@
432
539
  "statusRequired": "Select a status",
433
540
  "offeringTypeRequired": "Select the course format",
434
541
  "categoryRequired": "Select at least one category",
435
- "colorInvalid": "Enter a valid hexadecimal color (ex: #107f46)"
542
+ "colorInvalid": "Enter a valid hexadecimal color (ex: #107f46)",
543
+ "editionCodeFormat": "Uppercase letters and numbers only, no spaces (minimum 2)"
436
544
  }
437
545
  },
438
546
  "CoursesPage": {
@@ -607,6 +715,10 @@
607
715
  "replace": "Replace logo",
608
716
  "remove": "Remove",
609
717
  "description": "Optional image to identify the course"
718
+ },
719
+ "code": {
720
+ "label": "Edition Code",
721
+ "placeholder": "E.g.: REACT2024"
610
722
  }
611
723
  },
612
724
  "flags": {
@@ -640,7 +752,8 @@
640
752
  "levelRequired": "Select a level",
641
753
  "statusRequired": "Select a status",
642
754
  "categoriesRequired": "Select at least one category",
643
- "colorInvalid": "Enter a valid HEX color"
755
+ "colorInvalid": "Enter a valid HEX color",
756
+ "editionCodePattern": "Uppercase letters and numbers only, minimum 2 characters"
644
757
  }
645
758
  },
646
759
  "deleteDialog": {
@@ -927,6 +1040,7 @@
927
1040
  "update": "Update",
928
1041
  "save": "Save lesson",
929
1042
  "tabData": "Data",
1043
+ "tabVideos": "Videos",
930
1044
  "tabTranscription": "Transcription",
931
1045
  "tabResources": "Resources",
932
1046
  "videoProvider": "Video provider",
@@ -950,6 +1064,70 @@
950
1064
  "videoResolutionPlaceholder": "Eg.: 1080p",
951
1065
  "uploadVideoForResolution": "Upload video for this resolution",
952
1066
  "noResolutionVideosYet": "No resolution-based videos uploaded yet.",
1067
+ "loadingVideoProfiles": "Loading course video profiles...",
1068
+ "videoProfilesLoadError": "Could not load the course video profiles.",
1069
+ "retryLoadVideoProfiles": "Try loading again",
1070
+ "noVideoProfilesConfigured": "Configure video profiles in the course Videos tab before attaching File Storage videos.",
1071
+ "originalVideoTitle": "Original high-resolution video",
1072
+ "originalVideoHint": "Upload an original video to automatically generate the course profile videos.",
1073
+ "originalVideoPurpose": "This original file is only used to generate the course video variants.",
1074
+ "fileStorageVideoHint": "Use the original video below to automatically generate the course profile variants.",
1075
+ "uploadOriginalForConversion": "Upload original for conversion",
1076
+ "videoUploadBlockedWhileProcessing": "Original uploads stay blocked while the current conversion is still running.",
1077
+ "videoUploadMaxSizeError": "The video exceeds the {size} limit.",
1078
+ "videoConversionQueued": "Video conversion queued as job #{id}.",
1079
+ "videoConversionFailed": "Could not queue the video conversion.",
1080
+ "videoConversionJob": "Conversion queued as job #{id}",
1081
+ "videoJobFeedbackTitle": "Conversion tracking",
1082
+ "videoJobLoading": "Loading conversion progress...",
1083
+ "videoJobPendingLoad": "Preparing conversion job tracking...",
1084
+ "videoJobLoadError": "Could not load the conversion progress.",
1085
+ "retryLoadVideoJob": "Try again",
1086
+ "videoJobIdLabel": "Job",
1087
+ "videoJobAttemptsLabel": "Attempts",
1088
+ "videoJobAttemptsValue": "{current} of {total}",
1089
+ "videoJobCreatedAt": "Queued at",
1090
+ "videoJobStartedAt": "Started at",
1091
+ "videoJobFinishedAt": "Finished at",
1092
+ "videoJobLatestAttempt": "Latest attempt",
1093
+ "videoJobAttemptValue": "Attempt {count}",
1094
+ "videoJobLastError": "Last error",
1095
+ "videoJobRecentEvents": "Recent events",
1096
+ "videoJobNoEvents": "No events recorded yet.",
1097
+ "videoProfilesLockedWhileProcessing": "Profile video uploads stay locked while the original conversion job is active.",
1098
+ "videoJobStatuses": {
1099
+ "pending": "Queued",
1100
+ "scheduled": "Scheduled",
1101
+ "processing": "Processing",
1102
+ "completed": "Completed",
1103
+ "failed": "Failed",
1104
+ "retrying": "Retrying",
1105
+ "canceled": "Canceled",
1106
+ "dead_letter": "Dead letter"
1107
+ },
1108
+ "videoAttemptStatuses": {
1109
+ "processing": "Running",
1110
+ "completed": "Completed",
1111
+ "failed": "Failed",
1112
+ "canceled": "Canceled"
1113
+ },
1114
+ "videoJobEvents": {
1115
+ "created": "Created",
1116
+ "scheduled": "Scheduled",
1117
+ "locked": "Locked by worker",
1118
+ "started": "Started",
1119
+ "completed": "Completed",
1120
+ "failed": "Failed",
1121
+ "retry_scheduled": "Retry scheduled",
1122
+ "canceled": "Canceled",
1123
+ "moved_to_dead_letter": "Moved to dead letter",
1124
+ "requeued": "Requeued",
1125
+ "unlocked": "Unlocked"
1126
+ },
1127
+ "videoProfileMissing": "No video uploaded for this profile.",
1128
+ "playVideoAria": "Play video {name}",
1129
+ "videoPreviewTitle": "Video preview: {name}",
1130
+ "replaceVideo": "Replace",
953
1131
  "openVideoAria": "Open video {name}",
954
1132
  "downloadVideoAria": "Download video {name}",
955
1133
  "removeVideoAria": "Remove video {name}",
@@ -3844,6 +4022,8 @@
3844
4022
  }
3845
4023
  },
3846
4024
  "evaluations": {
4025
+ "emptyTitle": "Evaluations — feature coming soon",
4026
+ "emptyDescription": "Soon you will be able to view the evaluations submitted by students.",
3847
4027
  "comingSoonTitle": "Evaluations — feature coming soon",
3848
4028
  "comingSoonDescription": "Soon you will be able to view the evaluations submitted by students."
3849
4029
  },
@@ -4396,5 +4576,66 @@
4396
4576
  "deleteError": "Error deleting items"
4397
4577
  }
4398
4578
  }
4579
+ },
4580
+ "VideoResolutionProfilesPage": {
4581
+ "title": "Video Profiles",
4582
+ "description": "Manage FFmpeg encoding profiles for video transcoding.",
4583
+ "breadcrumbs": {
4584
+ "home": "Home",
4585
+ "lms": "LMS",
4586
+ "current": "Video Profiles"
4587
+ },
4588
+ "table": {
4589
+ "name": "Name",
4590
+ "ffmpegParams": "FFmpeg Parameters",
4591
+ "status": "Status"
4592
+ },
4593
+ "form": {
4594
+ "name": "Name",
4595
+ "namePlaceholder": "e.g. 1080p Full HD",
4596
+ "ffmpegParams": "FFmpeg Parameters",
4597
+ "ffmpegParamsPlaceholder": "-vf \"scale=1920:1080\" -c:v libx264 ...",
4598
+ "status": "Status",
4599
+ "statusPlaceholder": "Select status",
4600
+ "validation": {
4601
+ "required": "This field is required.",
4602
+ "max100": "Maximum 100 characters."
4603
+ }
4604
+ },
4605
+ "sheet": {
4606
+ "createTitle": "New Video Profile",
4607
+ "editTitle": "Edit Video Profile"
4608
+ },
4609
+ "status": {
4610
+ "active": "Active",
4611
+ "inactive": "Inactive"
4612
+ },
4613
+ "actions": {
4614
+ "create": "New Profile",
4615
+ "edit": "Edit",
4616
+ "delete": "Delete",
4617
+ "save": "Save",
4618
+ "saving": "Saving...",
4619
+ "cancel": "Cancel",
4620
+ "deleting": "Deleting..."
4621
+ },
4622
+ "filters": {
4623
+ "searchPlaceholder": "Search profiles..."
4624
+ },
4625
+ "empty": {
4626
+ "title": "No video profiles",
4627
+ "description": "Create the first video resolution profile to start transcoding videos."
4628
+ },
4629
+ "messages": {
4630
+ "createSuccess": "Profile created successfully.",
4631
+ "updateSuccess": "Profile updated successfully.",
4632
+ "deleteSuccess": "Profile deleted successfully.",
4633
+ "saveError": "Error saving profile.",
4634
+ "deleteError": "Error deleting profile."
4635
+ },
4636
+ "deleteDialog": {
4637
+ "title": "Delete profile",
4638
+ "description": "Are you sure you want to delete the profile \"{name}\"? This action cannot be undone."
4639
+ }
4399
4640
  }
4400
4641
  }