@hed-hog/lms 0.0.329 → 0.0.330

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 (37) hide show
  1. package/hedhog/frontend/app/_components/class-form-sheet.tsx.ejs +18 -8
  2. package/hedhog/frontend/app/_components/course-form-sheet.tsx.ejs +7 -5
  3. package/hedhog/frontend/app/_components/create-lms-person-sheet.tsx.ejs +5 -9
  4. package/hedhog/frontend/app/_components/create-lms-student-person-sheet.tsx.ejs +5 -9
  5. package/hedhog/frontend/app/certificates/models/LeftPanel.tsx.ejs +15 -14
  6. package/hedhog/frontend/app/certificates/models/RightPanel.tsx.ejs +66 -29
  7. package/hedhog/frontend/app/certificates/models/TemplateEditorPage.tsx.ejs +4 -2
  8. package/hedhog/frontend/app/certificates/models/TopBar.tsx.ejs +44 -34
  9. package/hedhog/frontend/app/classes/[id]/page.tsx.ejs +10 -10
  10. package/hedhog/frontend/app/classes/page.tsx.ejs +23 -15
  11. package/hedhog/frontend/app/courses/[id]/page.tsx.ejs +5 -3
  12. package/hedhog/frontend/app/courses/[id]/structure/_components/confirm-dialog.tsx.ejs +5 -3
  13. package/hedhog/frontend/app/courses/[id]/structure/_components/course-tree-panel.tsx.ejs +9 -7
  14. package/hedhog/frontend/app/courses/[id]/structure/_components/course-tree-skeleton.tsx.ejs +3 -1
  15. package/hedhog/frontend/app/courses/[id]/structure/_components/drag-handle.tsx.ejs +4 -2
  16. package/hedhog/frontend/app/courses/[id]/structure/_components/editor-bulk.tsx.ejs +24 -23
  17. package/hedhog/frontend/app/courses/[id]/structure/_components/multi-select-bar.tsx.ejs +21 -19
  18. package/hedhog/frontend/app/courses/[id]/structure/_components/shortcuts-help.tsx.ejs +7 -5
  19. package/hedhog/frontend/app/courses/[id]/structure/_components/tree-display-settings-popover.tsx.ejs +18 -16
  20. package/hedhog/frontend/app/courses/[id]/structure/_components/tree-row-lesson.tsx.ejs +13 -11
  21. package/hedhog/frontend/app/courses/[id]/structure/_components/tree-row-session.tsx.ejs +5 -3
  22. package/hedhog/frontend/app/courses/[id]/structure/_components/use-course-structure-shortcuts.ts.ejs +14 -9
  23. package/hedhog/frontend/app/courses/[id]/structure/_data/use-course-structure-mutations.ts.ejs +42 -25
  24. package/hedhog/frontend/app/enterprise/_components/enterprise-admin-create-sheet.tsx.ejs +3 -1
  25. package/hedhog/frontend/app/enterprise/_components/enterprise-administrators-tab.tsx.ejs +10 -8
  26. package/hedhog/frontend/app/enterprise/_components/enterprise-classes-tab.tsx.ejs +22 -20
  27. package/hedhog/frontend/app/enterprise/_components/enterprise-course-create-sheet.tsx.ejs +3 -3
  28. package/hedhog/frontend/app/enterprise/_components/enterprise-courses-tab.tsx.ejs +21 -19
  29. package/hedhog/frontend/app/enterprise/_components/enterprise-sheet.tsx.ejs +34 -36
  30. package/hedhog/frontend/app/enterprise/_components/enterprise-student-create-sheet.tsx.ejs +3 -1
  31. package/hedhog/frontend/app/enterprise/_components/enterprise-students-tab.tsx.ejs +7 -5
  32. package/hedhog/frontend/app/enterprise/page.tsx.ejs +106 -54
  33. package/hedhog/frontend/app/instructor-skills/page.tsx.ejs +79 -59
  34. package/hedhog/frontend/app/instructors/page.tsx.ejs +4 -2
  35. package/hedhog/frontend/messages/en.json +619 -13
  36. package/hedhog/frontend/messages/pt.json +619 -13
  37. package/package.json +7 -7
@@ -569,6 +569,14 @@
569
569
  "secondaryColor": {
570
570
  "label": "Secondary Color",
571
571
  "placeholder": "#111827"
572
+ },
573
+ "logo": {
574
+ "label": "Course Logo",
575
+ "alt": "Course logo",
576
+ "upload": "Upload logo",
577
+ "replace": "Replace logo",
578
+ "remove": "Remove",
579
+ "description": "Optional image to identify the course"
572
580
  }
573
581
  },
574
582
  "flags": {
@@ -629,6 +637,7 @@
629
637
  },
630
638
  "breadcrumbs": {
631
639
  "home": "Home",
640
+ "lms": "LMS",
632
641
  "courses": "Courses",
633
642
  "structure": "Course Structure"
634
643
  },
@@ -651,6 +660,129 @@
651
660
  "description": "Start by creating the first session of your course.",
652
661
  "action": "Create First Session"
653
662
  },
663
+ "loading": "Loading course structure",
664
+ "dragHandle": {
665
+ "disabled": "Clear search to reorder",
666
+ "enabled": "Drag to reorder"
667
+ },
668
+ "bulkEditor": {
669
+ "title": "Bulk edit",
670
+ "clearSelection": "Clear selection",
671
+ "productionStatus": "Production status",
672
+ "keepCurrent": "Keep current",
673
+ "visibilityTitle": "Visibility",
674
+ "moveToSession": "Move to session",
675
+ "selectSession": "Select session…",
676
+ "apiNotice": "Bulk changes are not integrated with the API yet. Click save to preview.",
677
+ "toast": {
678
+ "preview": "Bulk edit: {changes} (mock)",
679
+ "none": "No change selected"
680
+ },
681
+ "types": {
682
+ "lessons": "lessons",
683
+ "sessions": "sessions",
684
+ "items": "items",
685
+ "selected": "selected"
686
+ },
687
+ "status": {
688
+ "preparada": "Prepared",
689
+ "gravada": "Recorded",
690
+ "editada": "Edited",
691
+ "finalizada": "Finalized",
692
+ "publicada": "Published"
693
+ },
694
+ "visibility": {
695
+ "publico": "Public",
696
+ "privado": "Private",
697
+ "restrito": "Restricted"
698
+ }
699
+ },
700
+ "multiSelectBar": {
701
+ "copyLessonsSuccess": "{count} lessons copied",
702
+ "copySessionsSuccess": "{count} sessions copied",
703
+ "copyMixedError": "Select only lessons or only sessions to copy.",
704
+ "duplicatingLessons": "{count} lessons are being duplicated...",
705
+ "duplicatingSessions": "{count} sessions are being duplicated...",
706
+ "deleteTitle": "Delete {label}?",
707
+ "deleteSessionsDescription": "The sessions and all their lessons will be permanently deleted.",
708
+ "deleteDescription": "This action cannot be undone.",
709
+ "toolbarAria": "{count} selected items — actions",
710
+ "copyTitle": "Copy selected (Ctrl+C)",
711
+ "copyAria": "Copy selected",
712
+ "duplicateTitle": "Duplicate selected (Ctrl+D)",
713
+ "duplicateAria": "Duplicate selected",
714
+ "moveTitle": "Move to another session",
715
+ "moveAria": "Move to another session",
716
+ "deleteActionTitle": "Delete selected (Delete)",
717
+ "deleteActionAria": "Delete selected",
718
+ "clearTitle": "Clear selection (Escape)",
719
+ "clearAria": "Clear selection"
720
+ },
721
+ "shortcuts": {
722
+ "title": "Keyboard shortcuts",
723
+ "footer": "Shortcuts are disabled while focus is in inputs, except Ctrl+S, Ctrl+F, and Ctrl+/ which work in any context.",
724
+ "triggerTitle": "Keyboard shortcuts (Ctrl+/)",
725
+ "triggerLabel": "Shortcuts",
726
+ "deleteTitle": "Delete {label}?",
727
+ "deleteDescription": "This action cannot be undone.",
728
+ "items": "items",
729
+ "selectedItem": "selected item",
730
+ "itemsDeleted": "{count} items deleted",
731
+ "itemDeleted": "Item deleted",
732
+ "itemsCopied": "{count} items copied",
733
+ "itemCopied": "Item copied",
734
+ "itemDuplicated": "Item duplicated",
735
+ "nothingToPaste": "Nothing to paste",
736
+ "newSessionCreated": "New session created",
737
+ "newLessonCreated": "New lesson created",
738
+ "newLessonSameSession": "New lesson created in the same session"
739
+ },
740
+ "displaySettings": {
741
+ "title": "List display settings",
742
+ "label": "Display",
743
+ "sectionTitle": "Lesson information",
744
+ "sectionDescription": "Choose what to show on each row",
745
+ "showStatusDot": {
746
+ "label": "Status dot",
747
+ "description": "Color indicating production stage"
748
+ },
749
+ "showVisibility": {
750
+ "label": "Visibility",
751
+ "description": "Public / private / restricted icon"
752
+ },
753
+ "showCode": {
754
+ "label": "Code",
755
+ "description": "Shows the identifier code"
756
+ },
757
+ "showVideoIndicator": {
758
+ "label": "Linked video",
759
+ "description": "Icon when a video lesson has a defined URL"
760
+ },
761
+ "showResourcesIndicator": {
762
+ "label": "Download resources",
763
+ "description": "Icon when files are attached"
764
+ },
765
+ "showTranscriptionIndicator": {
766
+ "label": "Transcription",
767
+ "description": "Icon when a video has transcription"
768
+ }
769
+ },
770
+ "lessonRow": {
771
+ "rename": "Rename lesson",
772
+ "visibility": "Visibility: {value}",
773
+ "status": "Status: {value}",
774
+ "videoLinked": "Linked video",
775
+ "resources": "{count} downloadable resource(s)",
776
+ "resourcesAria": "{count} resources",
777
+ "hasTranscription": "Has transcription"
778
+ },
779
+ "sessionRow": {
780
+ "collapse": "Collapse session",
781
+ "expand": "Expand session",
782
+ "rename": "Rename session",
783
+ "draft": "Draft",
784
+ "published": "Published"
785
+ },
654
786
  "sessionForm": {
655
787
  "titleCreate": "New Session",
656
788
  "titleEdit": "Edit Session",
@@ -698,9 +830,7 @@
698
830
  "leadInstructorHint": "The first selected instructor will be defined as lead.",
699
831
  "videoConfig": "Video Configuration",
700
832
  "provider": "Provider",
701
- "videoUrl": "Video URL",
702
833
  "videoUrlPlaceholder": "https://...",
703
- "autoDuration": "Auto duration",
704
834
  "autoDurationHelp": "Detect duration from video.",
705
835
  "transcriptionUpload": "Transcription Upload",
706
836
  "transcriptionUploadText": "Click to upload .txt, .srt, .vtt",
@@ -708,10 +838,7 @@
708
838
  "videoUploadText": "Click to upload a video file",
709
839
  "videoUploadHelp": "Only video files are accepted in this area.",
710
840
  "linkExam": "Link Exam",
711
- "linkedExam": "Linked exam",
712
- "linkedExamPlaceholder": "Select an exam...",
713
841
  "linkedExamHelp": "Student will be redirected to the exam when opening this lesson.",
714
- "postContent": "Post Content",
715
842
  "contentEditor": "Content Editor",
716
843
  "bold": "Bold",
717
844
  "italic": "Italic",
@@ -730,7 +857,6 @@
730
857
  "upload": "Upload",
731
858
  "dragOrClick": "Drag files or click to upload",
732
859
  "fileTypes": "PDF, ZIP, PNG, JPG, MP4 (max 50MB)",
733
- "noResources": "No resources added.",
734
860
  "publicTooltip": "Public (click to make private)",
735
861
  "privateTooltip": "Private (click to make public)",
736
862
  "autoSaveSaving": "Saving automatically...",
@@ -858,20 +984,27 @@
858
984
  "tree": "Tree",
859
985
  "detail": "Details"
860
986
  },
861
- "breadcrumbs": {
862
- "lms": "LMS",
863
- "courses": "Courses",
864
- "structure": "Structure"
865
- },
866
987
  "search": {
867
- "placeholder": "Search..."
988
+ "placeholder": "Search...",
989
+ "noResults": "No results found",
990
+ "results": "{count} result(s) found"
868
991
  },
869
992
  "tree": {
870
993
  "collapseAll": "Collapse all",
871
994
  "expandAll": "Expand all",
995
+ "collapseAllShortcut": "Collapse all (Ctrl+Shift+E)",
996
+ "expandAllShortcut": "Expand all (Ctrl+Shift+E)",
872
997
  "addItem": "Add item",
873
998
  "addSession": "New session"
874
999
  },
1000
+ "confirmDialog": {
1001
+ "cancel": "Cancel",
1002
+ "confirm": "Delete"
1003
+ },
1004
+ "mobile": {
1005
+ "openStructure": "Open course structure",
1006
+ "sheetTitle": "{title} — Structure"
1007
+ },
875
1008
  "contextMenu": {
876
1009
  "edit": "Edit",
877
1010
  "addLesson": "Add lesson",
@@ -1566,6 +1699,142 @@
1566
1699
  "designSystem": "Design System"
1567
1700
  }
1568
1701
  },
1702
+ "CertificateTemplateEditor": {
1703
+ "page": {
1704
+ "toasts": {
1705
+ "invalidTemplate": "Invalid template, loaded with default configuration.",
1706
+ "loadError": "Could not load the selected template."
1707
+ }
1708
+ },
1709
+ "leftPanel": {
1710
+ "tabs": {
1711
+ "elements": "Elements",
1712
+ "assets": "Assets"
1713
+ },
1714
+ "sections": {
1715
+ "fields": "Fields",
1716
+ "text": "Text",
1717
+ "shapes": "Shapes",
1718
+ "image": "Image"
1719
+ },
1720
+ "elements": {
1721
+ "staticText": "Fixed Text",
1722
+ "rectangle": "Rectangle",
1723
+ "line": "Line",
1724
+ "image": "Image"
1725
+ },
1726
+ "background": {
1727
+ "title": "Certificate Background",
1728
+ "upload": "Upload background image",
1729
+ "description": "The image will be set as the certificate background and locked (not selectable)."
1730
+ }
1731
+ },
1732
+ "topBar": {
1733
+ "templateNameAriaLabel": "Template name",
1734
+ "actions": {
1735
+ "new": "New",
1736
+ "save": "Save",
1737
+ "exportJson": "Export JSON",
1738
+ "importJson": "Import JSON",
1739
+ "snap": "Snap",
1740
+ "grid": "Grid",
1741
+ "margins": "Margins",
1742
+ "zoomOut": "Zoom out",
1743
+ "zoomIn": "Zoom in",
1744
+ "resetZoom": "Reset zoom"
1745
+ },
1746
+ "tooltips": {
1747
+ "newTemplate": "New template",
1748
+ "saveDatabase": "Save to database",
1749
+ "saveLocalStorage": "Save to localStorage",
1750
+ "exportJson": "Export JSON",
1751
+ "importJson": "Import JSON",
1752
+ "disableSnap": "Disable snap",
1753
+ "enableSnap": "Enable snap",
1754
+ "hideGrid": "Hide grid",
1755
+ "showGrid": "Show grid",
1756
+ "hideMargins": "Hide margins",
1757
+ "showMargins": "Show safe margins",
1758
+ "zoomOut": "Zoom -",
1759
+ "zoomIn": "Zoom +",
1760
+ "resetZoom": "Reset zoom + pan (50%)"
1761
+ },
1762
+ "shortcuts": {
1763
+ "ctrlScrollZoom": "Ctrl+Scroll: zoom",
1764
+ "spaceDragPan": "Space+Drag: pan",
1765
+ "delDelete": "Del: delete",
1766
+ "ctrlDDuplicate": "Ctrl+D: duplicate"
1767
+ },
1768
+ "toasts": {
1769
+ "autoSaveError": "Automatic save failed",
1770
+ "created": "New template created",
1771
+ "savedLocalStorage": "Template saved to localStorage",
1772
+ "saved": "Template saved",
1773
+ "saveError": "Failed to save template",
1774
+ "exportedJson": "JSON exported",
1775
+ "invalidJson": "Invalid JSON: schema or version mismatch",
1776
+ "imported": "Template imported successfully",
1777
+ "readJsonError": "Error reading JSON"
1778
+ }
1779
+ },
1780
+ "rightPanel": {
1781
+ "tabs": {
1782
+ "properties": "Properties",
1783
+ "layers": "Layers",
1784
+ "data": "Data"
1785
+ },
1786
+ "emptySelection": "Select an object on the canvas to edit its properties.",
1787
+ "common": {
1788
+ "color": "Color"
1789
+ },
1790
+ "text": {
1791
+ "font": "Font",
1792
+ "size": "Size ({size}px)",
1793
+ "weight": "Weight",
1794
+ "weights": {
1795
+ "normal": "Normal (400)",
1796
+ "semiBold": "Semi-Bold (600)",
1797
+ "bold": "Bold (700)"
1798
+ },
1799
+ "italic": "Italic",
1800
+ "color": "Text color",
1801
+ "alignment": "Alignment",
1802
+ "alignments": {
1803
+ "left": "Left",
1804
+ "center": "Center",
1805
+ "right": "Right"
1806
+ }
1807
+ },
1808
+ "stroke": {
1809
+ "title": "Text stroke",
1810
+ "width": "Thickness ({size}px)"
1811
+ },
1812
+ "shadow": {
1813
+ "title": "Shadow",
1814
+ "offsetX": "Offset X ({size}px)",
1815
+ "offsetY": "Offset Y ({size}px)",
1816
+ "blur": "Blur ({size}px)"
1817
+ },
1818
+ "shape": {
1819
+ "fill": "Fill",
1820
+ "borderColor": "Border color",
1821
+ "borderWidth": "Border thickness ({size}px)"
1822
+ }
1823
+ }
1824
+ },
1825
+ "CreateLmsPersonSheet": {
1826
+ "errors": {
1827
+ "personNotFound": "Could not find the registered person.",
1828
+ "linkInstructorFailed": "Could not link the professor."
1829
+ }
1830
+ },
1831
+ "CreateLmsStudentPersonSheet": {
1832
+ "errors": {
1833
+ "personNotFound": "Could not find the registered person.",
1834
+ "alreadyEnrolled": "This person is already enrolled in the class.",
1835
+ "enrollFailed": "Could not enroll the student."
1836
+ }
1837
+ },
1569
1838
  "ReportsCoursesPage": {
1570
1839
  "title": "Course Report",
1571
1840
  "description": "Track enrollments, completion, and course performance in a single dashboard.",
@@ -2355,7 +2624,9 @@
2355
2624
  },
2356
2625
  "professor": {
2357
2626
  "label": "Professor",
2358
- "placeholder": "Professor's name"
2627
+ "placeholder": "Professor's name",
2628
+ "emptyState": "No professor found.",
2629
+ "noResults": "No professor found."
2359
2630
  },
2360
2631
  "vacancies": {
2361
2632
  "label": "Vacancies"
@@ -2483,6 +2754,12 @@
2483
2754
  "label": "Actions"
2484
2755
  }
2485
2756
  },
2757
+ "messages": {
2758
+ "classLoadError": "Failed to load class data.",
2759
+ "classCreateCourseError": "Failed to create course.",
2760
+ "classSaveError": "Failed to save class.",
2761
+ "classDeleteError": "Failed to delete class."
2762
+ },
2486
2763
  "DetailPage": {
2487
2764
  "breadcrumbs": {
2488
2765
  "home": "Home",
@@ -2817,6 +3094,16 @@
2817
3094
  "attendanceSaving": "Saving attendance...",
2818
3095
  "attendanceSaved": "Attendance saved successfully!",
2819
3096
  "error": "An error occurred. Please try again."
3097
+ },
3098
+ "messages": {
3099
+ "linkAddError": "Failed to add the link.",
3100
+ "materialRemoveError": "Failed to remove the material.",
3101
+ "courseUpdateSuccess": "Course updated successfully.",
3102
+ "courseSaveError": "Failed to save the course.",
3103
+ "noEligiblePersonFound": "No eligible person found for enrollment.",
3104
+ "personAlreadyEnrolled": "This person is already enrolled in the class.",
3105
+ "lessonRemovedSuccess": "Lesson removed successfully.",
3106
+ "classCourseNotFound": "Could not find the course for this class."
2820
3107
  }
2821
3108
  }
2822
3109
  },
@@ -3047,6 +3334,196 @@
3047
3334
  "description": "This will permanently delete \"{name}\" and all associated data. This action cannot be undone.",
3048
3335
  "confirm": "Delete",
3049
3336
  "cancel": "Cancel"
3337
+ },
3338
+ "sheet": {
3339
+ "createTitle": "New enterprise account",
3340
+ "editTitle": "Edit enterprise account",
3341
+ "createDescription": "Register a new corporate account in the LMS platform.",
3342
+ "editDescription": "Update the corporate account details below.",
3343
+ "fields": {
3344
+ "name": "Name",
3345
+ "namePlaceholder": "e.g. Techcorp Brasil",
3346
+ "slug": "Slug / Internal code",
3347
+ "slugPlaceholder": "techcorp-brasil",
3348
+ "slugDescription": "Unique identifier used internally and in URLs. Auto-filled from the name when creating.",
3349
+ "status": "Status",
3350
+ "company": "Company",
3351
+ "companyPlaceholder": "Select company...",
3352
+ "companySearchPlaceholder": "Search by name...",
3353
+ "companyEmpty": "No linked company",
3354
+ "companyEntity": "company",
3355
+ "companyCreateName": "Name",
3356
+ "companyCreateNamePlaceholder": "E.g. Techcorp Brasil Ltd",
3357
+ "portalEnabled": "Portal enabled",
3358
+ "portalEnabledDescription": "Allow this account to access the self-service learning portal.",
3359
+ "licenseLimit": "License limit",
3360
+ "licenseLimitPlaceholder": "e.g. 500 — leave blank for unlimited",
3361
+ "licenseLimitDescription": "Maximum number of active users. Leave blank for unlimited.",
3362
+ "notes": "Notes",
3363
+ "notesPlaceholder": "Internal notes about this account..."
3364
+ },
3365
+ "status": {
3366
+ "active": "Active",
3367
+ "trial": "Trial",
3368
+ "inactive": "Inactive",
3369
+ "suspended": "Suspended"
3370
+ },
3371
+ "actions": {
3372
+ "cancel": "Cancel",
3373
+ "saveChanges": "Save changes",
3374
+ "create": "Create account"
3375
+ },
3376
+ "messages": {
3377
+ "createSuccess": "Account created successfully.",
3378
+ "createError": "Failed to create account.",
3379
+ "updateSuccess": "Account updated successfully.",
3380
+ "updateError": "Failed to update account."
3381
+ },
3382
+ "adminCreated": "Failed to create administrator account.",
3383
+ "studentCreated": "Failed to create person.",
3384
+ "adminAddError": "Failed to add administrator.",
3385
+ "adminLinkError": "Failed to link user to enterprise.",
3386
+ "studentAddError": "Failed to add student.",
3387
+ "studentLinkError": "Person created but failed to link to enterprise.",
3388
+ "adminRoleUpdating": "Saving role…",
3389
+ "adminRoleUpdated": "Role updated.",
3390
+ "adminRoleUpdateError": "Failed to update role.",
3391
+ "adminRemoving": "Removing administrator…",
3392
+ "adminRemoved": "Administrator removed.",
3393
+ "adminRemoveError": "Failed to remove administrator.",
3394
+ "studentRemoving": "Removing student…",
3395
+ "studentRemoved": "Student removed.",
3396
+ "studentRemoveError": "Failed to remove student."
3397
+ },
3398
+ "form": {
3399
+ "toasts": {
3400
+ "courseCreated": "Course created successfully! Redirecting...",
3401
+ "courseCreateError": "Failed to create the course."
3402
+ }
3403
+ }
3404
+ },
3405
+ "InstructorsPage": {
3406
+ "messages": {
3407
+ "instructorRemovedSuccess": "Instructor removed successfully.",
3408
+ "instructorRemoveError": "Failed to remove instructor. Please try again."
3409
+ },
3410
+ "form": {
3411
+ "title": "New Instructor",
3412
+ "description": "Link an existing person or create a new one to register as an instructor.",
3413
+ "tabs": {
3414
+ "details": "Details",
3415
+ "skills": "Skills",
3416
+ "classes": "Classes",
3417
+ "evaluations": "Evaluations"
3418
+ },
3419
+ "fields": {
3420
+ "person": "Person",
3421
+ "personRequired": "Select a person",
3422
+ "searchPerson": "Search or select a person...",
3423
+ "editPerson": "Edit person's record",
3424
+ "status": "Status",
3425
+ "active": "Active",
3426
+ "inactive": "Inactive",
3427
+ "hourlyRate": "Hourly Rate (R$)",
3428
+ "hourlyRatePlaceholder": "E.g. 150.00",
3429
+ "canTeachCourses": "Can teach courses",
3430
+ "canTeachCoursesHint": "Allows the instructor to be linked to course lessons.",
3431
+ "trainingAccess": "Hcode Training Access",
3432
+ "trainingAccessHint": "Allows this instructor to access the platform with instructor profile.",
3433
+ "noUserLinked": "No user linked to this record. Link a user to enable.",
3434
+ "qualifications": "Qualifications"
3435
+ },
3436
+ "skills": {
3437
+ "title": "Manage Skills",
3438
+ "description": "Manage the skills associated with this instructor.",
3439
+ "none": "No skills assigned.",
3440
+ "addSkill": "Add skill...",
3441
+ "noSkills": "No skills available",
3442
+ "newSkill": "New skill",
3443
+ "newSkillDescription": "Register a new skill to link to the instructor.",
3444
+ "removeSkill": "Remove skill {skill}"
3445
+ },
3446
+ "buttons": {
3447
+ "cancel": "Cancel",
3448
+ "save": "Save changes"
3449
+ },
3450
+ "toasts": {
3451
+ "skillsSaved": "Skills updated successfully.",
3452
+ "skillsError": "Error saving skills.",
3453
+ "instructorUpdated": "Instructor updated successfully.",
3454
+ "instructorCreated": "Instructor created successfully.",
3455
+ "updateError": "Error updating instructor. Please try again.",
3456
+ "createError": "Error creating instructor. Please try again.",
3457
+ "accessEnabled": "Training access enabled.",
3458
+ "accessDisabled": "Training access disabled.",
3459
+ "accessError": "Error changing Training access."
3460
+ }
3461
+ }
3462
+ },
3463
+ "InstructorSkillsPage": {
3464
+ "title": "Instructor Skills",
3465
+ "description": "Manage the catalog of skills available for instructors.",
3466
+ "breadcrumbs": {
3467
+ "home": "Home",
3468
+ "lms": "LMS",
3469
+ "current": "Instructor Skills"
3470
+ },
3471
+ "filters": {
3472
+ "searchPlaceholder": "Search by slug or name..."
3473
+ },
3474
+ "table": {
3475
+ "slug": "Slug",
3476
+ "namePt": "Name (PT)",
3477
+ "nameEn": "Name (EN)",
3478
+ "status": "Status"
3479
+ },
3480
+ "form": {
3481
+ "slug": "Slug",
3482
+ "slugPlaceholder": "e.g. javascript, react-js",
3483
+ "namePt": "Name (PT)",
3484
+ "namePtPlaceholder": "Portuguese name",
3485
+ "nameEn": "Name (EN)",
3486
+ "nameEnPlaceholder": "Name in English (optional)",
3487
+ "status": "Status",
3488
+ "statusPlaceholder": "Select status",
3489
+ "validation": {
3490
+ "required": "Required",
3491
+ "max100": "Maximum 100 characters",
3492
+ "max255": "Maximum 255 characters",
3493
+ "slugPattern": "Use only lowercase letters, numbers and hyphens"
3494
+ }
3495
+ },
3496
+ "sheet": {
3497
+ "createTitle": "New Skill",
3498
+ "editTitle": "Edit Skill"
3499
+ },
3500
+ "status": {
3501
+ "active": "Active",
3502
+ "inactive": "Inactive"
3503
+ },
3504
+ "actions": {
3505
+ "create": "New Skill",
3506
+ "edit": "Edit",
3507
+ "delete": "Delete",
3508
+ "save": "Save",
3509
+ "saving": "Saving...",
3510
+ "cancel": "Cancel",
3511
+ "deleting": "Deleting..."
3512
+ },
3513
+ "messages": {
3514
+ "createSuccess": "Skill created successfully.",
3515
+ "updateSuccess": "Skill updated successfully.",
3516
+ "saveError": "Error saving skill. Please try again.",
3517
+ "deleteSuccess": "Skill removed successfully.",
3518
+ "deleteError": "Error removing skill. Please try again."
3519
+ },
3520
+ "empty": {
3521
+ "title": "No skills found",
3522
+ "description": "Create a new skill or adjust the search filters."
3523
+ },
3524
+ "deleteDialog": {
3525
+ "title": "Delete skill",
3526
+ "description": "Are you sure you want to delete the skill \"{slug}\"? This action cannot be undone."
3050
3527
  }
3051
3528
  },
3052
3529
  "EnterpriseDetailPage": {
@@ -3148,6 +3625,135 @@
3148
3625
  "createdLabel": "Created",
3149
3626
  "updatedLabel": "Updated",
3150
3627
  "editHint": "Edit"
3628
+ },
3629
+ "relatedCourses": {
3630
+ "searchPlaceholder": "Search by course name...",
3631
+ "pickerPlaceholder": "Select a course...",
3632
+ "pickerEntityLabel": "course",
3633
+ "filters": {
3634
+ "allStatuses": "All statuses"
3635
+ },
3636
+ "status": {
3637
+ "published": "Published",
3638
+ "draft": "Draft",
3639
+ "archived": "Archived"
3640
+ },
3641
+ "actions": {
3642
+ "create": "Create new course",
3643
+ "add": "Add"
3644
+ },
3645
+ "empty": {
3646
+ "title": "No courses found.",
3647
+ "description": "Adjust the search or status filter to see results."
3648
+ },
3649
+ "table": {
3650
+ "course": "Course",
3651
+ "modality": "Modality",
3652
+ "status": "Status",
3653
+ "contracted": "Contracted"
3654
+ },
3655
+ "messages": {
3656
+ "removeSuccess": "Course removed from enterprise.",
3657
+ "removeError": "Failed to remove course.",
3658
+ "addError": "Failed to add course."
3659
+ }
3660
+ },
3661
+ "relatedClasses": {
3662
+ "searchPlaceholder": "Search by code or course...",
3663
+ "pickerPlaceholder": "Select a class...",
3664
+ "pickerEntityLabel": "class",
3665
+ "filters": {
3666
+ "allStatuses": "All statuses"
3667
+ },
3668
+ "status": {
3669
+ "open": "Open",
3670
+ "ongoing": "Ongoing",
3671
+ "completed": "Completed",
3672
+ "cancelled": "Cancelled"
3673
+ },
3674
+ "actions": {
3675
+ "create": "Create new class",
3676
+ "add": "Add"
3677
+ },
3678
+ "empty": {
3679
+ "title": "No classes found.",
3680
+ "description": "Adjust the search or status filter to see results."
3681
+ },
3682
+ "table": {
3683
+ "class": "Class",
3684
+ "status": "Status",
3685
+ "period": "Period",
3686
+ "capacity": "Capacity"
3687
+ },
3688
+ "messages": {
3689
+ "removeSuccess": "Class removed from enterprise.",
3690
+ "removeError": "Failed to remove class.",
3691
+ "addError": "Failed to add class."
3692
+ }
3693
+ }
3694
+ },
3695
+ "components": {
3696
+ "entityPicker": {
3697
+ "courses": {
3698
+ "empty": "No courses found.",
3699
+ "loading": "Loading courses..."
3700
+ },
3701
+ "instructors": {
3702
+ "empty": "No instructors found.",
3703
+ "loading": "Loading instructors..."
3704
+ }
3705
+ }
3706
+ },
3707
+ "courseStructure": {
3708
+ "contextMenu": {
3709
+ "expandedAll": "All expanded",
3710
+ "collapsedAll": "All collapsed",
3711
+ "newSession": "New session",
3712
+ "newLessonHere": "New lesson in this session",
3713
+ "rename": "Rename",
3714
+ "duplicateSession": "Duplicate session",
3715
+ "pasteSession": "Paste session",
3716
+ "deleteSessions": "Delete sessions",
3717
+ "moveUp": "Move up",
3718
+ "moveDown": "Move down",
3719
+ "duplicateLesson": "Duplicate lesson",
3720
+ "pasteLesson": "Paste lesson",
3721
+ "deleteLesson": "Delete lesson"
3722
+ },
3723
+ "mutations": {
3724
+ "course": {
3725
+ "saveSuccess": "Course saved",
3726
+ "saveError": "Error saving course"
3727
+ },
3728
+ "session": {
3729
+ "createSuccess": "Session created",
3730
+ "createError": "Error creating session",
3731
+ "saveSuccess": "Session saved",
3732
+ "saveError": "Error saving session",
3733
+ "deleteSuccess": "Session deleted",
3734
+ "deleteError": "Error deleting session",
3735
+ "reorderError": "Error saving session order — reverted",
3736
+ "duplicateSuccess": "Session duplicated",
3737
+ "duplicateError": "Error duplicating session",
3738
+ "pasteError": "Error pasting sessions"
3739
+ },
3740
+ "lesson": {
3741
+ "createSuccess": "Lesson created",
3742
+ "createError": "Error creating lesson",
3743
+ "saveSuccess": "Lesson saved",
3744
+ "saveError": "Error saving lesson",
3745
+ "deleteSuccess": "Lesson deleted",
3746
+ "deleteError": "Error deleting lesson",
3747
+ "reorderError": "Error saving lesson order — reverted",
3748
+ "moveError": "Error moving lesson — reverted",
3749
+ "moveBatchError": "Error moving lessons — reverted",
3750
+ "duplicateSuccess": "Lesson duplicated",
3751
+ "duplicateError": "Error duplicating lesson",
3752
+ "pasteError": "Error pasting lessons"
3753
+ },
3754
+ "item": {
3755
+ "deleteError": "Error deleting items"
3756
+ }
3151
3757
  }
3152
3758
  }
3153
3759
  }