{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/reports/misc/utils.ts","webpack:///./src/components/course_tree/node/CourseTreeNode.vue?a1f1","webpack:///./src/components/course_tree/node/CourseTreeNode.vue","webpack:///./src/components/course_tree/node/CourseTreeNode.vue?5754","webpack:///./src/components/ui/Toggle.vue?fc90","webpack:///./src/assets/hero/undraw_teaching_re_g7e3.svg","webpack:///./src/models/types.ts","webpack:///./src/models/logic.ts","webpack:///./src/models/constants.ts","webpack:///./src/models/factories.ts","webpack:///./src/models/helpers.ts","webpack:///./src/assets/thumbnails/text-2.png","webpack:///./src/assets/thumbnails/text.png","webpack:///./src/assets sync ^\\.\\/.*$","webpack:///./src/assets/participationStateIcons.ts","webpack:///./src/api/courses.ts","webpack:///./src/components/course_tree/node/FileNode.vue?6971","webpack:///./src/components/course_tree/node/FileNode.vue","webpack:///./src/components/course_tree/node/FileNode.vue?b495","webpack:///./src/components/ui/DropdownMenu.vue?89c0","webpack:///./src/components/ui/DropdownMenu.vue","webpack:///./src/components/ui/DropdownMenu.vue?073f","webpack:///./src/views/student/MainStudent.vue?5c55","webpack:///./src/components/ui/BreadCrumbs.vue?d023","webpack:///./src/components/ui/Timestamp.vue?0e4c","webpack:///./src/components/ui/Timestamp.vue","webpack:///./src/components/ui/Timestamp.vue?3cae","webpack:///./src/components/ui/RadioGroup.vue?3208","webpack:///./src/assets/classroom_sync.png","webpack:///./src/assets/thumbnails/archive-2.png","webpack:///./src/api/utils.ts","webpack:///./src/assets/eventStateIcons.ts","webpack:///./src/api/course_tree.ts","webpack:///./src/api/events.ts","webpack:///./src/components/ui/TagInput.vue?a22f","webpack:///./src/navigation/const.ts","webpack:///./src/integrations/moodle/types.ts","webpack:///./src/stores/mainStore.ts","webpack:///./src/assets/evo_classroom.png","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./src/components/ui/Btn.vue?4aa7","webpack:///./src/components/ui/Btn.vue","webpack:///./src/components/ui/Btn.vue?3392","webpack:///./public/unipi-logo.svg","webpack:///./src/components/shared/ExerciseSolution/utils.ts","webpack:///./public/valutami.png","webpack:///./src/assets/thumbnails/video.png","webpack:///./src/i18n/it.ts","webpack:///./src/i18n/en.ts","webpack:///./src/i18n/index.ts","webpack:///./src/components/ui/AnimatedIcon.vue?6fe8","webpack:///./src/assets/exerciseTestCaseTypeIcons.ts","webpack:///./src/components/ui/TextInput.vue?ab8d","webpack:///./src/components/ui/TextInput.vue","webpack:///./src/components/ui/TextInput.vue?7928","webpack:///./public/c.svg","webpack:///./src/api/converters.ts","webpack:///./src/components/messaging/Message.vue?6a64","webpack:///./src/components/messaging/Message.vue","webpack:///./src/components/messaging/Message.vue?95ac","webpack:///./src/assets/icons/json_evo.png","webpack:///./src/components/ui/Spinner.vue?783d","webpack:///./src/components/ui/Spinner.vue","webpack:///./src/components/ui/Spinner.vue?578b","webpack:///./src/assets/hero/undraw_education_f8ru.svg","webpack:///./src/reports/examParticipations/types.ts","webpack:///./src/components/ui/RadioGroup.vue?5c5e","webpack:///./src/components/ui/RadioGroup.vue","webpack:///./src/components/ui/RadioGroup.vue?86bb","webpack:///./public/telegram.jpg","webpack:///./src/gamification/types.ts","webpack:///./src/gamification/api.ts","webpack:///./src/api/users.ts","webpack:///./src/api/gamification.ts","webpack:///./src/components/ui/AnimatedIcon.vue?9e66","webpack:///./src/components/ui/AnimatedIcon.vue","webpack:///./src/components/ui/AnimatedIcon.vue?be84","webpack:///./src/components/ui/FadedEdgesScrollableFragment.vue?c2cf","webpack:///./src/utils.ts","webpack:///./src/assets/announcements.ts","webpack:///./src/views/teacher/MainTeacher.vue?6c5a","webpack:///./src/assets/classroom.png","webpack:///./src/assets/hero/undraw_6.svg","webpack:///./src/components/ui/CopyToClipboard.vue?8540","webpack:///./src/components/ui/CopyToClipboard.vue","webpack:///./src/components/ui/CopyToClipboard.vue?9a53","webpack:///./src/components/ui/Dialog.vue?af22","webpack:///./src/components/messaging/MessageEditor.vue?d6fe","webpack:///./src/components/messaging/MessageEditor.vue","webpack:///./src/components/messaging/MessageEditor.vue?19cd","webpack:///./src/App.vue?1f01","webpack:///./src/assets/hero-bg.png","webpack:///./src/components/ui/Avatar.vue?055b","webpack:///./src/components/ui/Avatar.vue","webpack:///./src/components/ui/Avatar.vue?b74c","webpack:///./src/components/course_tree/shared.ts","webpack:///./src/components/ui/Spinner.vue?3402","webpack:///./src/const.ts","webpack:///./src/components/shared/CourseListItem.vue?d212","webpack:///./src/assets/coursePrivilegeIcons.ts","webpack:///./src/assets sync nonrecursive ^\\.\\/.*$","webpack:///./src/assets/exerciseStatesIcons.ts","webpack:///./src/views/teacher/MainTeacher.vue?a5b1","webpack:///./src/components/shared/HelpCenter/HelpCenter.vue?ca16","webpack:///./src/helpCenter/index.ts","webpack:///./src/navigation/sidebar.ts","webpack:///./src/helpCenter/articlesIt.ts","webpack:///./src/components/shared/HelpCenter/HelpCenterArticleFull.vue?d12d","webpack:///./src/components/shared/HelpCenter/HelpCenterArticleFull.vue","webpack:///./src/components/shared/HelpCenter/HelpCenterArticleFull.vue?e70f","webpack:///./src/components/shared/HelpCenter/HelpCenter.vue","webpack:///./src/components/shared/HelpCenter/HelpCenter.vue?6253","webpack:///./src/views/teacher/MainTeacher.vue","webpack:///./src/views/teacher/MainTeacher.vue?52de","webpack:///./src/views/student/MainStudent.vue?045f","webpack:///./src/components/ui/Dialog.vue?7bc8","webpack:///./src/components/ui/Dialog.vue","webpack:///./src/components/ui/Dialog.vue?4890","webpack:///./src/components/ui/NumberInput.vue?eeea","webpack:///./src/components/ui/NumberInput.vue","webpack:///./src/components/ui/NumberInput.vue?c6a7","webpack:///./src/views/student/MainStudent.vue","webpack:///./src/views/student/MainStudent.vue?adef","webpack:///./src/views/student/CourseEnrollment.vue?b348","webpack:///./src/views/student/CourseEnrollment.vue","webpack:///./src/views/student/CourseEnrollment.vue?270f","webpack:///./src/views/shared/CourseList.vue?d88e","webpack:///./src/components/shared/CourseListItem.vue?aa4d","webpack:///./src/components/shared/CourseListItem.vue","webpack:///./src/components/shared/CourseListItem.vue?dda5","webpack:///./src/components/ui/skeletons/CourseListItemSkeleton.vue?9a7c","webpack:///./src/components/ui/Card.vue?0f81","webpack:///./src/components/ui/Card.vue","webpack:///./src/components/ui/Card.vue?9f69","webpack:///./src/components/ui/skeletons/CourseListItemSkeleton.vue","webpack:///./src/components/ui/skeletons/CourseListItemSkeleton.vue?a84e","webpack:///./src/components/shared/CourseSearchFilters.vue?268d","webpack:///./src/components/ui/Toggle.vue?903e","webpack:///./src/components/ui/Toggle.vue","webpack:///./src/components/ui/Toggle.vue?3475","webpack:///./src/components/shared/CourseSearchFilters.vue","webpack:///./src/components/shared/CourseSearchFilters.vue?e10c","webpack:///./src/integrations/classroom/components/StudentScopesBanner.vue?7ccd","webpack:///./src/integrations/components/GoogleScopeChecker.vue?aa2c","webpack:///./src/integrations/classroom/const.ts","webpack:///./src/integrations/stores/googleIntegrationsStore.ts","webpack:///./src/integrations/components/GoogleScopesButton.vue?1db5","webpack:///./src/integrations/components/GoogleScopesButton.vue","webpack:///./src/integrations/components/GoogleScopesButton.vue?5c30","webpack:///./src/integrations/components/GoogleScopeChecker.vue","webpack:///./src/integrations/components/GoogleScopeChecker.vue?0a1f","webpack:///./src/components/shared/HelpCenter/ArticleHandle.vue?2562","webpack:///./src/components/shared/HelpCenter/ArticleHandle.vue","webpack:///./src/components/shared/HelpCenter/ArticleHandle.vue?f12d","webpack:///./src/integrations/classroom/components/StudentScopesBanner.vue","webpack:///./src/integrations/classroom/components/StudentScopesBanner.vue?6731","webpack:///./src/views/shared/CourseList.vue","webpack:///./src/views/shared/CourseList.vue?edf2","webpack:///./src/views/teacher/CourseDashboard.vue?e846","webpack:///./src/components/teacher/EventEditor/EventEditorPreview.vue?7ddd","webpack:///./src/components/ui/MultiIcon.vue?6541","webpack:///./src/components/ui/MultiIcon.vue","webpack:///./src/components/ui/MultiIcon.vue?6599","webpack:///./src/components/teacher/EventEditor/EventEditorPreview.vue","webpack:///./src/components/teacher/EventEditor/EventEditorPreview.vue?66c7","webpack:///./src/components/teacher/ExerciseEditor/MinimalExercisePreview.vue?3356","webpack:///./src/components/ui/Tag.vue","webpack:///./src/components/ui/Tag.vue?968a","webpack:///./src/components/shared/FullExercise.vue?deae","webpack:///./src/components/shared/AbstractEventParticipationSlot.vue?0c47","webpack:///./src/components/shared/Exercise/Exercise.vue?9b38","webpack:///./src/components/shared/Exercise/MultipleChoiceExercise.vue?5729","webpack:///./src/components/shared/Exercise/AbstractExercise.vue?c274","webpack:///./src/components/shared/Exercise/shared.ts","webpack:///./src/components/shared/Exercise/AbstractExercise.vue","webpack:///./src/components/shared/Exercise/AbstractExercise.vue?814a","webpack:///./src/components/ui/CheckboxGroup.vue?56e6","webpack:///./src/components/ui/CheckboxGroup.vue","webpack:///./src/components/ui/CheckboxGroup.vue?dbd2","webpack:///./src/components/shared/Exercise/utils.ts","webpack:///./src/components/shared/Exercise/MultipleChoiceExercise.vue","webpack:///./src/components/shared/Exercise/MultipleChoiceExercise.vue?9f4a","webpack:///./src/components/shared/Exercise/OpenAnswerExercise.vue?b011","webpack:///./src/components/ui/TextEditor.vue?d026","webpack:///./src/components/ui/TextEditor.vue","webpack:///./src/components/ui/TextEditor.vue?501a","webpack:///./src/components/shared/Exercise/OpenAnswerExercise.vue","webpack:///./src/components/shared/Exercise/OpenAnswerExercise.vue?d846","webpack:///./src/components/shared/Exercise/AttachmentExercise.vue?5450","webpack:///./src/components/ui/FileUpload.vue?4b2c","webpack:///./src/components/ui/FileUpload.vue","webpack:///./src/components/ui/FileUpload.vue?b231","webpack:///./src/components/shared/Exercise/AttachmentExercise.vue","webpack:///./src/components/shared/Exercise/AttachmentExercise.vue?a752","webpack:///./src/components/shared/Exercise/AggregatedExercise.vue?94c7","webpack:///./src/components/shared/Exercise/AggregatedExercise.vue","webpack:///./src/components/shared/Exercise/AggregatedExercise.vue?77db","webpack:///./src/components/shared/Exercise/ClozeExercise.vue?2f45","webpack:///./src/components/shared/Exercise/ClozeExercise.vue","webpack:///./src/components/shared/Exercise/ClozeExercise.vue?42f9","webpack:///./src/components/shared/Exercise/ProgrammingExercise.vue?d142","webpack:///./src/components/ui/Tabs.vue?af06","webpack:///./src/components/ui/SegmentedControls.vue?35ca","webpack:///./src/components/ui/SegmentedControls.vue","webpack:///./src/components/ui/SegmentedControls.vue?1080","webpack:///./src/components/ui/Tabs.vue","webpack:///./src/components/ui/Tabs.vue?a61f","webpack:///./src/components/ui/CodeEditor.vue?6dfe","webpack:///./src/components/ui/MonacoEditorCustom.vue","webpack:///./src/components/ui/MonacoEditorCustom.vue?7a3d","webpack:///./src/components/ui/CodeEditor.vue","webpack:///./src/components/ui/CodeEditor.vue?7b08","webpack:///./src/components/shared/CodeExecutionResults.vue?03c3","webpack:///./src/components/shared/ExerciseTestCase.vue?0e7f","webpack:///./src/components/shared/ExerciseTestCase.vue","webpack:///./src/components/shared/ExerciseTestCase.vue?17f9","webpack:///./src/components/shared/CodeExecutionResults.vue","webpack:///./src/components/shared/CodeExecutionResults.vue?9ce6","webpack:///./src/components/shared/Exercise/ProgrammingExercise.vue","webpack:///./src/components/shared/Exercise/ProgrammingExercise.vue?594b","webpack:///./src/components/shared/Exercise/Exercise.vue","webpack:///./src/components/shared/Exercise/Exercise.vue?d394","webpack:///./src/components/shared/ParticipationSlotAssessment.vue?95ed","webpack:///./src/components/shared/ParticipationSlotAssessment.vue","webpack:///./src/components/shared/ParticipationSlotAssessment.vue?fdf1","webpack:///./src/components/shared/AbstractEventParticipationSlot.vue","webpack:///./src/components/shared/AbstractEventParticipationSlot.vue?2ec5","webpack:///./src/components/shared/FullExercise.vue","webpack:///./src/components/shared/FullExercise.vue?e8cf","webpack:///./src/components/ui/FadedEdgesScrollableFragment.vue?c416","webpack:///./src/components/ui/FadedEdgesScrollableFragment.vue","webpack:///./src/components/ui/FadedEdgesScrollableFragment.vue?fc4e","webpack:///./src/components/teacher/ExerciseEditor/MinimalExercisePreview.vue","webpack:///./src/components/teacher/ExerciseEditor/MinimalExercisePreview.vue?3a94","webpack:///./src/components/ui/skeletons/EventEditorPreviewSkeleton.vue?a844","webpack:///./src/components/ui/skeletons/EventEditorPreviewSkeleton.vue","webpack:///./src/components/ui/skeletons/EventEditorPreviewSkeleton.vue?2085","webpack:///./src/components/ui/skeletons/MinimalExercisePreviewSkeleton.vue?0a61","webpack:///./src/components/ui/skeletons/MinimalExercisePreviewSkeleton.vue","webpack:///./src/components/ui/skeletons/MinimalExercisePreviewSkeleton.vue?230f","webpack:///./src/validation/validators.ts","webpack:///./src/validation/models.ts","webpack:///./src/views/teacher/CourseDashboard.vue","webpack:///./src/views/teacher/CourseDashboard.vue?55c8","webpack:///./src/views/student/CourseDashboard/Main.vue?67d7","webpack:///./src/views/student/CourseDashboard/Main.vue","webpack:///./src/views/student/CourseDashboard/Main.vue?76ab","webpack:///./src/views/student/CourseDashboard/ExamsList.vue?760f","webpack:///./src/components/student/EventParticipationPreview.vue?3ca6","webpack:///./src/components/student/ParticipationThumbnail.vue?0aca","webpack:///./src/components/student/ParticipationThumbnail.vue","webpack:///./src/components/student/ParticipationThumbnail.vue?3019","webpack:///./src/components/student/EventParticipationPreview.vue","webpack:///./src/components/student/EventParticipationPreview.vue?4b8c","webpack:///./src/components/ui/SkeletonCard.vue?3892","webpack:///./src/components/ui/SkeletonCard.vue","webpack:///./src/components/ui/SkeletonCard.vue?397f","webpack:///./src/views/student/CourseDashboard/ExamsList.vue","webpack:///./src/views/student/CourseDashboard/ExamsList.vue?3365","webpack:///./src/views/student/CourseDashboard/PublicExamsList.vue?2e36","webpack:///./src/components/student/ExamCard.vue?9b8a","webpack:///./src/components/student/ExamCard.vue","webpack:///./src/components/student/ExamCard.vue?849d","webpack:///./src/views/student/CourseDashboard/PublicExamsList.vue","webpack:///./src/views/student/CourseDashboard/PublicExamsList.vue?f142","webpack:///./src/views/student/CourseDashboard/PracticeList.vue?95d5","webpack:///./src/components/student/PracticeTemplateEditorNew.vue?5727","webpack:///./src/components/ui/Chipset.vue?cbdb","webpack:///./src/components/ui/Chipset.vue","webpack:///./src/components/ui/Chipset.vue?7392","webpack:///./src/components/student/PracticeTemplateEditorNew.vue","webpack:///./src/components/student/PracticeTemplateEditorNew.vue?1084","webpack:///./src/views/student/CourseDashboard/PracticeList.vue","webpack:///./src/views/student/CourseDashboard/PracticeList.vue?48fd","webpack:///./src/views/student/CourseDashboard/ExerciseThreadList.vue?65bf","webpack:///./src/components/shared/ExerciseSolution/ExerciseSolutionContainer.vue?50cb","webpack:///./src/components/shared/ExerciseSolution/ExerciseSolution.vue?8bf4","webpack:///./src/components/shared/ExerciseSolution/ExerciseSolution.vue","webpack:///./src/components/shared/ExerciseSolution/ExerciseSolution.vue?6429","webpack:///./src/components/shared/ExerciseSolution/ExerciseSolutionEditor.vue?d4c1","webpack:///./src/components/ui/CloudSaveStatus.vue?a813","webpack:///./src/components/ui/CloudSaveStatus.vue","webpack:///./src/components/ui/CloudSaveStatus.vue?53d0","webpack:///./src/components/shared/ExerciseSolution/ExerciseSolutionEditor.vue","webpack:///./src/components/shared/ExerciseSolution/ExerciseSolutionEditor.vue?b4e8","webpack:///./src/autoSave.ts","webpack:///./src/components/shared/ExerciseSolution/ExerciseSolutionContainer.vue","webpack:///./src/components/shared/ExerciseSolution/ExerciseSolutionContainer.vue?bfe1","webpack:///./src/components/teacher/ExerciseSearchFilters.vue?84bc","webpack:///./src/components/teacher/ExerciseSearchFilters.vue","webpack:///./src/components/teacher/ExerciseSearchFilters.vue?a7d2","webpack:///./src/views/student/CourseDashboard/ExerciseThreadList.vue","webpack:///./src/views/student/CourseDashboard/ExerciseThreadList.vue?4a7f","webpack:///./src/views/student/CourseDashboard/FavoriteContentsList.vue?9fd3","webpack:///./src/views/student/CourseDashboard/FavoriteContentsList.vue","webpack:///./src/views/student/CourseDashboard/FavoriteContentsList.vue?cb1f","webpack:///./src/views/teacher/CourseExercises.vue?cc94","webpack:///./src/components/teacher/ExerciseEditor/ExerciseEditorWrapper.vue?a9cf","webpack:///./src/components/teacher/ExerciseEditor/ExerciseEditor.vue?23d8","webpack:///./src/components/ui/Dropdown.vue?bd65","webpack:///./src/components/ui/Dropdown.vue","webpack:///./src/components/ui/Dropdown.vue?22c4","webpack:///./src/components/ui/TagInput.vue?4ed2","webpack:///./src/components/ui/TagInput.vue","webpack:///./src/components/ui/TagInput.vue?b967","webpack:///./src/components/teacher/ExerciseEditor/ChoiceEditor.vue?45ab","webpack:///./src/components/teacher/ExerciseEditor/ChoiceEditor.vue","webpack:///./src/components/teacher/ExerciseEditor/ChoiceEditor.vue?a824","webpack:///./src/components/teacher/ExerciseEditor/TestCaseEditor.vue?df94","webpack:///./src/components/teacher/ExerciseEditor/TestCaseEditor.vue","webpack:///./src/components/teacher/ExerciseEditor/TestCaseEditor.vue?9382","webpack:///./src/components/teacher/ExerciseEditor/ExerciseEditor.vue","webpack:///./src/components/teacher/ExerciseEditor/ExerciseEditor.vue?03f3","webpack:///./src/components/teacher/ExerciseEditor/ExerciseEditorWrapper.vue","webpack:///./src/components/teacher/ExerciseEditor/ExerciseEditorWrapper.vue?a390","webpack:///./src/components/ui/skeletons/ExerciseEditorWrapperSkeleton.vue?b468","webpack:///./src/components/ui/skeletons/ExerciseEditorWrapperSkeleton.vue","webpack:///./src/components/ui/skeletons/ExerciseEditorWrapperSkeleton.vue?266c","webpack:///./src/components/teacher/ExerciseImporter.vue?028f","webpack:///./src/integrations/moodle/utils.ts","webpack:///./src/integrations/moodle/import.ts","webpack:///./src/components/teacher/ExerciseImporter.vue","webpack:///./src/components/teacher/ExerciseImporter.vue?4978","webpack:///./src/views/teacher/CourseExercises.vue","webpack:///./src/views/teacher/CourseExercises.vue?1fc3","webpack:///./src/views/course_tree/CourseTree.vue?c490","webpack:///./src/components/course_tree/editors/CourseTreeNodeEditor.vue?27ec","webpack:///./src/components/course_tree/editors/AnnouncementNodeEditor.vue?5eff","webpack:///./src/integrations/classroom/components/IntegrationSwitch.vue?b3b4","webpack:///./src/integrations/classroom/components/IntegrationSwitch.vue","webpack:///./src/integrations/classroom/components/IntegrationSwitch.vue?bb92","webpack:///./src/integrations/classroom/components/PublishedOnClassroom.vue?5802","webpack:///./src/integrations/classroom/components/PublishedOnClassroom.vue","webpack:///./src/integrations/classroom/components/PublishedOnClassroom.vue?3a16","webpack:///./src/components/course_tree/editors/SchedulePublishDialog.vue?207d","webpack:///./src/components/ui/CalendarInput.vue?9fbb","webpack:///./src/components/ui/CalendarInput.vue","webpack:///./src/components/ui/CalendarInput.vue?d067","webpack:///./src/components/course_tree/editors/SchedulePublishDialog.vue","webpack:///./src/components/course_tree/editors/SchedulePublishDialog.vue?fb8a","webpack:///./src/components/course_tree/editors/AnnouncementNodeEditor.vue","webpack:///./src/components/course_tree/editors/AnnouncementNodeEditor.vue?d7a6","webpack:///./src/components/course_tree/editors/FileNodeEditor.vue?0393","webpack:///./src/components/course_tree/editors/FileNodeEditor.vue","webpack:///./src/components/course_tree/editors/FileNodeEditor.vue?a6b7","webpack:///./src/components/course_tree/editors/LessonNodeEditor.vue?cf57","webpack:///./src/components/course_tree/editors/LessonNodeEditor.vue","webpack:///./src/components/course_tree/editors/LessonNodeEditor.vue?befc","webpack:///./src/components/course_tree/editors/PollNodeEditor.vue?8b85","webpack:///./src/components/course_tree/editors/PollNodeEditor.vue","webpack:///./src/components/course_tree/editors/PollNodeEditor.vue?580e","webpack:///./src/components/course_tree/editors/TopicNodeEditor.vue?f249","webpack:///./src/components/course_tree/editors/TopicNodeEditor.vue","webpack:///./src/components/course_tree/editors/TopicNodeEditor.vue?71d9","webpack:///./src/components/course_tree/editors/CourseTreeNodeEditor.vue","webpack:///./src/components/course_tree/editors/CourseTreeNodeEditor.vue?4f71","webpack:///./src/views/course_tree/CourseTree.vue","webpack:///./src/views/course_tree/CourseTree.vue?fa1b","webpack:///./src/views/course_tree/NodeDetail.vue?41bc","webpack:///./src/views/course_tree/NodeDetail.vue","webpack:///./src/views/course_tree/NodeDetail.vue?551c","webpack:///./src/views/teacher/CourseExams.vue?1ad3","webpack:///./src/views/teacher/CourseExams.vue","webpack:///./src/views/teacher/CourseExams.vue?fc42","webpack:///./src/views/teacher/CourseInsights.vue?c56c","webpack:///./src/components/ui/DataTable.vue?9940","webpack:///./src/components/ui/DataTable.vue","webpack:///./src/components/ui/DataTable.vue?62f0","webpack:///./src/components/shared/StudentCard.vue?30ca","webpack:///./src/components/ui/Timeline.vue?c720","webpack:///./src/components/ui/Timeline.vue","webpack:///./src/components/ui/Timeline.vue?58db","webpack:///./src/components/shared/StudentCard.vue","webpack:///./src/components/shared/StudentCard.vue?ae31","webpack:///./src/reports/courseExamsParticipations/courseParticipationReport.ts","webpack:///./src/components/shared/UserPicker.vue?c170","webpack:///./src/components/shared/UserPicker.vue","webpack:///./src/components/shared/UserPicker.vue?67c0","webpack:///./src/components/datatable/StudentRenderer.vue?dcf5","webpack:///./src/components/datatable/StudentRenderer.vue","webpack:///./src/components/datatable/StudentRenderer.vue?979c","webpack:///./src/components/datatable/CourseInsightsExamParticipationRenderer.vue?4997","webpack:///./src/components/datatable/CourseInsightsExamParticipationRenderer.vue","webpack:///./src/components/datatable/CourseInsightsExamParticipationRenderer.vue?5462","webpack:///./src/components/datatable/CourseInsightsExamHeaderRenderer.vue?3036","webpack:///./src/components/datatable/CourseInsightsExamHeaderRenderer.vue","webpack:///./src/components/datatable/CourseInsightsExamHeaderRenderer.vue?8822","webpack:///./src/views/teacher/CourseInsights.vue","webpack:///./src/views/teacher/CourseInsights.vue?51ac","webpack:///./src/views/teacher/CourseIntegrations.vue?7f88","webpack:///./src/integrations/classroom/views/GoogleClassroomIntegrationSettings.vue?3280","webpack:///./src/integrations/classroom/components/GoogleClassroomCourseItem.vue?a0d4","webpack:///./src/integrations/classroom/components/GoogleClassroomCourseItem.vue","webpack:///./src/integrations/classroom/components/GoogleClassroomCourseItem.vue?5759","webpack:///./src/integrations/classroom/views/GoogleClassroomIntegrationSettings.vue","webpack:///./src/integrations/classroom/views/GoogleClassroomIntegrationSettings.vue?4b54","webpack:///./src/views/teacher/CourseIntegrations.vue","webpack:///./src/views/teacher/CourseIntegrations.vue?ee78","webpack:///./src/views/teacher/CoursePermissions.vue?7532","webpack:///./src/components/ui/Combobox.vue?715f","webpack:///./src/components/ui/Combobox.vue","webpack:///./src/components/ui/Combobox.vue?8b4e","webpack:///./src/views/teacher/CoursePermissions.vue","webpack:///./src/views/teacher/CoursePermissions.vue?6847","webpack:///./src/components/teacher/EventEditor/EventEditor.vue?6d93","webpack:///./src/components/teacher/EventEditor/EventMetaEditor.vue?d07c","webpack:///./src/components/teacher/EventEditor/EventMetaEditor.vue","webpack:///./src/components/teacher/EventEditor/EventMetaEditor.vue?088a","webpack:///./src/components/teacher/EventEditor/EventStateEditor.vue?4689","webpack:///./src/components/teacher/EventEditor/EventStateEditor.vue","webpack:///./src/components/teacher/EventEditor/EventStateEditor.vue?846e","webpack:///./src/components/teacher/EventTemplateEditor/EventTemplateEditor.vue?3ff5","webpack:///./src/components/teacher/EventTemplateEditor/EventTemplateRuleEditor.vue?5950","webpack:///./src/components/teacher/ExercisePicker.vue?8135","webpack:///./src/components/teacher/ExercisePicker.vue","webpack:///./src/components/teacher/ExercisePicker.vue?2282","webpack:///./src/components/teacher/EventTemplateEditor/TagBasedEventTemplateRuleEditor.vue?2c28","webpack:///./src/components/teacher/EventTemplateEditor/TagBasedEventTemplateRuleEditor.vue","webpack:///./src/components/teacher/EventTemplateEditor/TagBasedEventTemplateRuleEditor.vue?1b94","webpack:///./src/components/teacher/EventTemplateEditor/EventTemplateRuleEditor.vue","webpack:///./src/components/teacher/EventTemplateEditor/EventTemplateRuleEditor.vue?128f","webpack:///./src/components/teacher/EventTemplateEditor/EventTemplateEditor.vue","webpack:///./src/components/teacher/EventTemplateEditor/EventTemplateEditor.vue?715e","webpack:///./src/components/teacher/EventEditor/EventInstancesPreview.vue?f927","webpack:///./src/components/teacher/EventEditor/EventInstancesPreview.vue","webpack:///./src/components/teacher/EventEditor/EventInstancesPreview.vue?c908","webpack:///./src/components/teacher/EventEditor/EventEditor.vue","webpack:///./src/components/teacher/EventEditor/EventEditor.vue?1253","webpack:///./src/views/student/EventParticipationPage.vue?9aab","webpack:///./src/components/ui/Countdown.vue?755f","webpack:///./src/components/ui/Countdown.vue","webpack:///./src/components/ui/Countdown.vue?57af","webpack:///./src/views/student/EventParticipationPage.vue","webpack:///./src/views/student/EventParticipationPage.vue?c546","webpack:///./src/views/shared/EventParticipationFull.vue?7fc6","webpack:///./src/views/shared/EventParticipationFull.vue","webpack:///./src/views/shared/EventParticipationFull.vue?07be","webpack:///./src/views/student/ExamPreview.vue?b038","webpack:///./src/views/student/ExamPreview.vue","webpack:///./src/views/student/ExamPreview.vue?cf2a","webpack:///./src/views/student/ExerciseSolutionThread.vue?0b33","webpack:///./src/views/student/ExerciseSolutionThread.vue","webpack:///./src/views/student/ExerciseSolutionThread.vue?8ec7","webpack:///./src/views/teacher/EventParticipationsMonitor.vue?f9c9","webpack:///./src/components/teacher/CsvParticipationDownloader.vue?56da","webpack:///./src/reports/examParticipations/examStats.ts","webpack:///./src/reports/examParticipations/chartOptions.ts","webpack:///./src/reports/examParticipations/csv.ts","webpack:///./src/reports/examParticipations/utils.ts","webpack:///./src/components/teacher/CsvParticipationDownloader.vue","webpack:///./src/components/teacher/CsvParticipationDownloader.vue?034e","webpack:///./src/components/datatable/EventParticipationSlotScoreRenderer.vue?47e6","webpack:///./src/components/datatable/EventParticipationSlotScoreRenderer.vue","webpack:///./src/components/datatable/EventParticipationSlotScoreRenderer.vue?4d3c","webpack:///./src/components/datatable/EventParticipationSlotCompletionRenderer.vue?9809","webpack:///./src/components/datatable/EventParticipationSlotCompletionRenderer.vue","webpack:///./src/components/datatable/EventParticipationSlotCompletionRenderer.vue?6a53","webpack:///./src/components/datatable/EventParticipationEmailRenderer.vue?7180","webpack:///./src/components/datatable/EventParticipationEmailRenderer.vue","webpack:///./src/components/datatable/EventParticipationEmailRenderer.vue?8c37","webpack:///./src/components/datatable/EventParticipationStateRenderer.vue?0a08","webpack:///./src/components/datatable/EventParticipationStateRenderer.vue","webpack:///./src/components/datatable/EventParticipationStateRenderer.vue?bd76","webpack:///./src/components/datatable/EventParticipationAssessmentStateRenderer.vue?55a0","webpack:///./src/components/datatable/EventParticipationAssessmentStateRenderer.vue","webpack:///./src/components/datatable/EventParticipationAssessmentStateRenderer.vue?71d4","webpack:///./src/components/datatable/EventParticipationScoreRenderer.vue?6c89","webpack:///./src/components/datatable/EventParticipationScoreRenderer.vue","webpack:///./src/components/datatable/EventParticipationScoreRenderer.vue?6fe2","webpack:///./src/views/teacher/EventParticipationsMonitor.vue","webpack:///./src/views/teacher/EventParticipationsMonitor.vue?07cb","webpack:///./src/views/teacher/CourseExerciseSolutionThreads.vue?d874","webpack:///./src/views/teacher/CourseExerciseSolutionThreads.vue","webpack:///./src/views/teacher/CourseExerciseSolutionThreads.vue?d858","webpack:///./src/views/teacher/DetailExerciseSolutionThreads.vue?7731","webpack:///./src/views/teacher/DetailExerciseSolutionThreads.vue","webpack:///./src/views/teacher/DetailExerciseSolutionThreads.vue?fd48","webpack:///./src/views/shared/GamificationLeaderboard.vue?9fdf","webpack:///./src/views/shared/GamificationLeaderboard.vue","webpack:///./src/views/shared/GamificationLeaderboard.vue?540c","webpack:///./src/views/teacher/EventStats.vue?5b2f","webpack:///./src/components/teacher/ExerciseWithStats.vue?8472","webpack:///./src/components/teacher/ExerciseWithStats.vue","webpack:///./src/components/teacher/ExerciseWithStats.vue?21d8","webpack:///./src/views/teacher/EventStats.vue","webpack:///./src/views/teacher/EventStats.vue?f962","webpack:///./src/views/Login.vue?e1a7","webpack:///./src/views/Login.vue","webpack:///./src/views/Login.vue?a459","webpack:///./src/views/shared/PageNotFound.vue?ac28","webpack:///./src/views/shared/PageNotFound.vue","webpack:///./src/views/shared/PageNotFound.vue?3908","webpack:///./src/views/teacher/CourseCreationForm.vue?2da9","webpack:///./src/views/teacher/CourseCreationForm.vue","webpack:///./src/views/teacher/CourseCreationForm.vue?53b5","webpack:///./src/navigation/breadcrumbs.ts","webpack:///./src/router/guards.ts","webpack:///./src/router/index.ts","webpack:///./src/mixins.ts","webpack:///./src/components/ui/DraggablePopup.vue?0753","webpack:///./src/components/ui/DraggablePopup.vue","webpack:///./src/components/ui/DraggablePopup.vue?b4b4","webpack:///./src/assets/thumbnails/code.png","webpack:///./src/api/exercises.ts","webpack:///./src/assets/unipi.png","webpack:///./src/App.vue?6676","webpack:///./src/components/ui/Notification.vue?319b","webpack:///./src/components/ui/Notification.vue","webpack:///./src/components/ui/Notification.vue?17d3","webpack:///./src/components/ui/SideBar.vue?3787","webpack:///./src/components/ui/SideBar.vue","webpack:///./src/components/ui/SideBar.vue?e027","webpack:///./src/components/ui/AppBar.vue?4df2","webpack:///./src/components/ui/LocaleSelector.vue?bf55","webpack:///./src/components/ui/LocaleSelector.vue","webpack:///./src/components/ui/LocaleSelector.vue?44aa","webpack:///./src/components/ui/AppBar.vue","webpack:///./src/components/ui/AppBar.vue?d027","webpack:///./src/components/ui/SnackBar.vue?1eb4","webpack:///./src/components/ui/SnackBar.vue","webpack:///./src/components/ui/SnackBar.vue?9482","webpack:///./src/views/shared/ErrorView.vue?2e1f","webpack:///./src/views/shared/ErrorView.vue","webpack:///./src/views/shared/ErrorView.vue?6f8e","webpack:///./src/components/student/GamificationContextPanel.vue?9828","webpack:///./src/components/ui/CircularProgress.vue?6d52","webpack:///./src/components/ui/CircularProgress.vue","webpack:///./src/components/ui/CircularProgress.vue?f2a5","webpack:///./src/components/ui/GamificationBadge.vue?b8ab","webpack:///./src/components/ui/GamificationBadge.vue","webpack:///./src/components/ui/GamificationBadge.vue?42c8","webpack:///./src/components/student/GamificationContextPanel.vue","webpack:///./src/components/student/GamificationContextPanel.vue?3164","webpack:///./src/App.vue","webpack:///./src/App.vue?8ecf","webpack:///./src/main.ts","webpack:///./src/assets/google.png","webpack:///./src/assets/logo.png","webpack:///./src/components/ui/CodeFragment.vue?549c","webpack:///./src/components/ui/CodeFragment.vue","webpack:///./src/components/ui/CodeFragment.vue?6e6b","webpack:///./src/assets/assessmentStateIcons.ts","webpack:///./src/components/ui/BreadCrumbs.vue?513b","webpack:///./src/components/ui/BreadCrumbs.vue","webpack:///./src/components/ui/BreadCrumbs.vue?45f7","webpack:///./src/components/ui/CalendarInput.vue?2ba8","webpack:///./src/components/ui/LinearProgress.vue?8a49","webpack:///./src/components/ui/LinearProgress.vue","webpack:///./src/components/ui/LinearProgress.vue?119a","webpack:///./public/evo_logo.png","webpack:///./src/assets/exerciseTypesIcons.ts","webpack:///./src/assets/thumbnails/archive.png","webpack:///./src/components/ui/Tooltip.vue?5b92","webpack:///./src/components/ui/Tooltip.vue","webpack:///./src/components/ui/Tooltip.vue?a3c2","webpack:///./src/stores/metaStore.ts","webpack:///./src/views/Login.vue?4653","webpack:///./src/assets/courseTreeNodeTypeIcons.ts","webpack:///./src/components/ui/CircularProgress.vue?03f7","webpack:///./src/assets/icons/moodle.png","webpack:///./src/components/ui/TextEditor.vue?da25","webpack:///./src/components/ui/skeletons/SlotSkeleton.vue?90ab","webpack:///./src/components/ui/skeletons/SlotSkeleton.vue","webpack:///./src/components/ui/skeletons/SlotSkeleton.vue?2490","webpack:///./src/components/ui/ProcessedTextFragment.vue?083c","webpack:///./src/components/ui/ProcessedTextFragment.vue","webpack:///./src/components/ui/ProcessedTextFragment.vue?29ad","webpack:///./src/components/course_tree/node_detail/FileNodeDetail.vue?aaf2","webpack:///./src/components/file_viewers/FileViewer.vue?db16","webpack:///./src/components/file_viewers/ImageViewer.vue?52dc","webpack:///./src/components/file_viewers/shared.ts","webpack:///./src/components/file_viewers/ImageViewer.vue","webpack:///./src/components/file_viewers/ImageViewer.vue?5822","webpack:///./src/components/file_viewers/PdfViewer.vue?2e2e","webpack:///./src/components/file_viewers/PdfViewer.vue","webpack:///./src/components/file_viewers/PdfViewer.vue?6b80","webpack:///./src/components/file_viewers/SourceCodeViewer.vue?fd6e","webpack:///./src/components/file_viewers/SourceCodeViewer.vue","webpack:///./src/components/file_viewers/SourceCodeViewer.vue?6bbe","webpack:///./src/components/file_viewers/VideoViewer.vue?aed1","webpack:///./src/components/file_viewers/VideoViewer.vue","webpack:///./src/components/file_viewers/VideoViewer.vue?97fd","webpack:///./src/components/file_viewers/FallbackFileViewer.vue?69d3","webpack:///./src/components/file_viewers/FallbackFileViewer.vue","webpack:///./src/components/file_viewers/FallbackFileViewer.vue?40a1","webpack:///./src/components/file_viewers/FileViewer.vue","webpack:///./src/components/file_viewers/FileViewer.vue?a8fa","webpack:///./src/components/course_tree/node_detail/FileNodeDetail.vue","webpack:///./src/components/course_tree/node_detail/FileNodeDetail.vue?cb79"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","jsonpScriptSrc","p","exports","module","l","e","promises","installedChunkData","promise","Promise","resolve","reject","onScriptComplete","script","document","createElement","charset","timeout","nc","setAttribute","src","error","Error","event","onerror","onload","clearTimeout","chunk","errorType","type","realSrc","target","message","name","request","undefined","setTimeout","head","appendChild","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","err","console","jsonpArray","window","oldJsonpFunction","slice","makeLabelText","text","processedText","replace","MAX_LINE_LENGTH","LINE_LENGTH","Math","ceil","breakPivot","floor","breakFirstLineAt","findNearestSpace","remaining","breakSecondLineAt","index","charAt","render","_ctx","_cache","$props","$setup","$data","$options","componentName","onEditNode","$event","$emit","onDeleteNode","onLoadChildren","onLoadComments","props","node","required","emits","beforeCreate","this","components","LessonNode","TopicNode","FileNode","AnnouncementNode","PollNode","methods","computed","mapping","resourcetype","__exports__","CourseTreeNodeType","LessonNodeState","AnnouncementNodeState","PollNodeState","ExerciseType","ExerciseTestCaseType","ExerciseState","EventType","EventState","EventAccessRule","EventTimeLimitRule","EventTemplateRuleType","EventParticipationState","ParticipationAssessmentProgress","AssessmentVisibility","AssessmentSlotState","CoursePrivilege","CourseFeature","ExerciseSolutionState","VoteType","ExerciseValidationError","multipleChoiceExerciseTypes","MULTIPLE_CHOICE_MULTIPLE_POSSIBLE","MULTIPLE_CHOICE_SINGLE_POSSIBLE","programmingExerciseTypes","JS","C","PYTHON","exerciseChildrenNames","sub_exercise","testcase","choice","programmingExerciseTypeToLanguageId","getBlankUser","id","email","full_name","first_name","last_name","is_teacher","mat","course","avatar_url","getBlankCourse","privileges","getBlankExerciseSolution","state","content","comments","user","score","is_bookmarked","getBlankChoice","correctness","code","testcase_type","SHOW_CODE_SHOW_TEXT","stdin","expected_stdout","label","exercise_type","DRAFT","all_or_nothing","choices","instructions","begin_timestamp","end_timestamp","event_type","EXAM","exercises_shown_at_a_time","allow_going_back","randomize_rule_order","access_rule","ALLOW_ACCESS","access_rule_exceptions","template","rules","time_limit_seconds","SELF_SERVICE_PRACTICE","OPEN","getBlankEventTemplate","slots","IN_PROGRESS","time_limit_timestamp","getBlankEventTemplateRule","rule_type","initialAmount","amount","weight","getBlankTag","getBlankTagBasedEventTemplateRuleClause","tag","tags","getFakeEventParticipationSlot","exercise","answer_text","selected_choices","sub_slots","sub_exercises","map","getEmptySubmission","attachment","getVote","voteType","vote_type","getComment","parentId","parent_id","title","body","created","comment_count","modified","file","mime_type","thumbnail","getBlankCourseTreeNodeComment","comment","is_edited","getBlankPollNodeChoice","getCourseTreeNodeTitle","userMatchesSearch","search","searchTokens","toLowerCase","split","fullName","every","includes","webpackContext","req","webpackContextResolve","keys","icons","TURNED_IN","CLOSED_BY_TEACHER","getCourses","a","response","manageSelfCourseEnrollment","courseId","remove","method","setCourseBookmark","getCourseParticipationReport","getCourseGamificationContext","getCourse","createCourse","post","getUserCourseParticipations","userId","updateCourse","put","getTags","includeExerciseCount","_hoisted_1","class","style","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_component_LinearProgress","_component_Timestamp","_component_Btn","_component_CopyToClipboard","_component_FileNodeDetail","_directive_wave","tabindex","isDraggable","loadingFile","loadingThumbnail","onClick","showDetails","onKeyup","creator","updatedOnDifferentDay","$t","canEdit","variant","outline","tooltip","default","_","permalink","thumbnailPresent","thumbnailSrc","defaultThumbnail","initialOpacity","onViewerClose","Boolean","mixins","mainStore","loadCourseTreeNodeThumbnail","nodeId","thumbnailLoaded","thumbnailByCourseNodeId","humanReadableFileSize","size","Date","LinearProgress","FileNodeDetail","Timestamp","CopyToClipboard","Btn","_directive_click_outside","$slots","activator","icon","trailingIcon","expanded","placement","loading","String","formattedValue","dateOnly","reduced","tagNamesToTags","names","getTagByName","tagIdsToTags","ids","getTagById","getEventUrlQueryParams","filters","ret","getBlankExerciseSearchFilters","exercise_types","states","getBlankCourseSearchFilters","withPrivileges","hidden","isEmptyFilter","filter","getExerciseSolutionUrlQueryParams","bookmarked","JSON","stringify","join","getEventParticipationUrlQueryParams","getExerciseUrlQueryParams","with_submitted_solutions","with_bookmarked_solutions","by_popularity","encodeURIComponent","convertEventTemplateRules","processedRules","TAG_BASED","clauses","isNumeric","num","trim","isNaN","normalizeOptionalStringContainingNumber","val","strVal","parseFloat","updatePaginatedData","existingData","newData","prepend","prependToPaginatedData","paginatedData","newElement","deleteByIdFromPaginatedData","toDelete","getEmptyPaginatedData","count","isLastPage","pageNumber","PLANNED","CLOSED","RESTRICTED","getCourseTopLevelNodes","getCourseTopicNodes","getCourseNode","getNodeChildren","moveCourseNode","targetId","position","getCourseRootNodeId","createCourseNode","config","formData","FormData","entries","forEach","k","v","append","partialUpdateCourseNode","payload","fireIntegrationEvent","patch","uploadNodeFile","deleteCourseNode","delete","getFileNodeUrl","defaults","baseURL","downloadFileNode","url","onDownloadProgress","responseType","downloadFileNodeAsAttachment","fileName","headers","getFileNodeThumbnail","getCourseNodeComments","createCourseNodeComment","deleteCourseNodeComment","commentId","createPollNodeChoice","partialUpdatePollNodeChoice","choiceId","changes","votePollNodeChoice","deletePollNodeChoice","getEvents","getEvent","eventId","includeDetails","lockEvent","unlockEvent","heartbeatEvent","getEventTemplate","templateId","getEventTemplateRule","ruleId","createEvent","convertedEvent","updateEvent","getEventInstances","partialUpdateEvent","getCourseEventParticipations","includeEvent","normalizedData","results","getEventParticipations","forCsv","getEventParticipation","participationId","createEventTemplateRule","rule","partialUpdateEventTemplateRule","deleteEventTemplateRule","createEventTemplateRuleClause","clause","updateEventTemplateRuleClause","deleteEventTemplateRuleClause","clauseId","participateInEvent","partialUpdateEventParticipation","bulkPartialUpdateEventParticipation","participationIds","partialUpdateEventParticipationSlot","slotId","forceStudent","partialUpdateEventParticipationSlotSubmission","getEventParticipationSlot","getEventParticipationSlotExecutionResults","downloadEventParticipationSlotAttachment","runEventParticipationSlotCode","moveEventParticipationCurrentSlotCursor","direction","ROUTE_TITLE_COURSE_NAME_TOKEN","ROUTE_TITLE_EVENT_NAME_TOKEN","ROUTE_TITLE_NODE_NAME_TOKEN","DataFormat","useMainStore","courses","paginatedTopLevelCourseTreeNodes","privilegedUsers","enrolledUsers","activeUsers","paginatedUsers","paginatedExercises","events","draggingCourseTreeNode","courseIdToTreeRootId","commentsByCourseNodeId","paginatedEventParticipations","eventParticipations","paginatedSolutionsByExerciseId","exerciseTestCaseAttachmentsByTestCaseId","progressByGoalId","paginatedChildrenByNodeId","currentEventParticipation","currentCourseTreeNode","previewingEvent","gamificationContext","gamificationContextGoals","getters","exams","getPaginatedExercises","getCourseById","find","getUserById","u","getEventById","getEventByTemplateId","exercises","tagId","tagName","getExerciseById","exerciseId","flattenedExercises","flat","getPaginatedSolutionsByExerciseId","getEventParticipationById","getCommentsByNodeId","examParticipations","sort","p1","p2","practiceParticipations","currentEventParticipationFlattenedSlots","flatCourseTreeNodes","values","children","currentNode","getCourseTreeNodeById","actions","selfEnrollInCourse","enrolled","selfUnenrollInCourse","isTopLevelNode","getCourseRootId","rootId","thumbnail64","createCourseTreeNode","createdNode","currentChildren","createCourseTreeNodeComment","newComment","newChoice","poll","updatedChoice","assign","pollWithNewVote","getCourseTreeNodeComments","moveCourseTreeNode","targetNodeList","currentNodeList","targetNodeListBefore","currentNodeListBefore","parentIdBefore","newParentId","currentIndex","findIndex","targetIndex","deleteCourseTreeNode","partialUpdateCourseTreeNode","updatedNode","patchCourseTreeNode","oldParentId","oldChildren","uploadCourseTreeNodeFile","getCourseTreeNodeDetail","fromFirstPage","nodes","getCourseTreeNodeChildren","existingChildren","setCourse","setEvent","setEventParticipationSlot","setEventParticipation","setExercise","targetExercise","removeExerciseChild","childType","childId","childrenName","targetChildIndex","setExerciseChild","setExerciseChildren","patchEventTemplateRule","targetTemplate","targetRule","patchEventTemplateRuleClause","setEventTemplateRules","removeEventTemplateRule","removeEventTemplateRuleClause","setEventParticipationSlots","setEventParticipations","participations","setCurrentEventParticipationSlot","slot","flattenedSlots","patchCurrentEventParticipationSlot","setExerciseSolution","solutions","participation","moveEventParticipationCurrentSlotCursorForward","moveEventParticipationCurrentSlotCursorBack","getEventPreview","partialUpdateCurrentEventParticipation","getCurrentEventParticipation","partialUpdateCurrentEventParticipationSlot","mutate","partialUpdateCurrentEventParticipationSlotSubmission","runCurrentEventParticipationSlotCode","previousExecutionResults","execution_results","createExerciseSolution","solution","newSolution","exerciseSolutions","updateExerciseSolution","getSolutionsByExercise","paginatedSolutionsForExercise","paginatedSolutions","deleteExerciseSolution","solutionId","createExerciseSolutionComment","createExerciseSolutionVote","vote","updatedSolution","setExerciseSolutionBookmark","context","getGamificationContextGoals","contextId","goals","getGamificationGoalProgress","goalId","progress","current_level","action_counts","newCourse","bookmarkCourse","updatedCourse","oldCourse","createExercise","newExercise","getExercise","bulkCreateExercises","newExercises","updateExercise","deleteExercise","lockExercise","createExerciseChild","apiCalls","apiCall","newChild","updateExerciseChild","reFetch","deleteExerciseChild","getExercisesById","exerciseIds","getExerciseTestCaseAttachments","testcaseId","attachments","createExerciseTestCaseAttachment","deleteExerciseTestCaseAttachment","attachmentId","getExercises","addExerciseTag","isPublic","removeExerciseTag","newEvent","unshift","newRule","newClause","getUsersForCourse","teachersOnly","isTeacher","users","getPrivilegedUsersForCourse","hasPrivileges","getCourseEnrolledUsers","enrollUsersInCourse","userIds","emails","getCourseActiveUsers","updateUserCoursePrivileges","newPrivileges","course_privileges","privilegedUserIndex","userWasPrivileged","shouldAddToPrivilegedUsers","shouldRemoveFromPrivilegedUsers","_component_Spinner","_component_Tooltip","noArrow","textValue","disabled","forceActive","rounded","Spinner","Tooltip","rippleClass","getExerciseSolutionThreadRoute","params","getCourseTreeNodeRoute","getExerciseThreadRoute","it","dialog","default_yes_text","default_confirm_text","default_cancel_text","default_no_text","default_ok_text","enroll","enroll_title","course_panel","go_to_course","access_as_student","enrollment","do_you_want_to_enroll","do_you_want_to_unenroll","unenroll","filter_results","filter_by_tag","filter_by_type","there_are_active_filters","more_filters","remove_filters","login_screen","unauthorized_email_1","unauthorized_email_2","entering_you_agree_to","login_with_google","login","login_text","warning","cookies_warning","all_cookies","enable_third_party_cookies_1","enable_third_party_cookies_2","course_permissions","search_user","search_user_hint","users_with_privileges","course_creator","add_permissions_tooltip","search_cant_find_user","try_with_email_hint","headings","course_tree","exercise_solution_threads","course_title","new_course","exercise_solution_thread_detail","course_dashboard","course_exercises","course_exams","course_insights","course_integrations","course_list","exam_progress","exam_results","ongoing_practice","ongoing_exam","exam_preview","review_submission","review_assessment","practice_summary","student_exercise_solution_thread","student_exercise_solution_threads","student_favorites","student_course_leaderboard","event_participation_page","exam_has_time_limit_warning_1","exam_has_time_limit_warning_2","exam_has_time_limit_warning_3","times_up","all_answers_saved","of","next_exercise","previous_exercise","skip_exercise","turn_in","turn_in_dialog_title","turn_in_dialog_text","turn_in_confirm_button","turned_in_text","review_answers","next_dialog_title","next_dialog_text","next_dialog_confirm_button","participate","exam_not_yet_begun","exam_is_over","turn_in_timestamp","event_participation_slot","text_answer_label","event_participation_headings","participation_state","grade","student","event_assessment","no_score_for_exercise","undo_score_edit_tooltip","overall_score","you_overrode_score","all_participations_assesses","some_exams_require_manual_assessment","exams_awaiting_assessment_are_marked","ready_to_publish_1","ready_to_publish_2","all_published","publish_results","this_comment_is_private","comment_for_student","student_will_see_this_comment","this_exercise_requires_manual_assessment","some_sub_slots_pending","some_slots_pending","default_score","assessment_state","confirm_assessment","assess","assigned_score","your_assessment","exercise_seen_at","exercise_answered_at","viewing_participation_of","viewing_practice_of","sub_slot_assessment_unavailable_open_full_1","sub_slot_assessment_unavailable_open_full_2","sub_slot_assessment_unavailable_open_full_3","undo_overall_score_edit","undo_score_edit","overall_score_instructions","average","no_filter","filter_average_greater_than","filter_average_less_than","no_users_matching_search","exams_stats","enrolled_students","no_enrolled_students","no_user_activity","select_closed_exams","filter_exams","score_sum","score_average","practice_sessions","active_students","no_active_students","active_students_description","search_students","enroll_students","search_student","add_enrolled_students","user_history_event_descriptions","student_data","edit_mat_title","your_mat","your_course","you_havent_yet","missing_mat","and","missing_course","insert_mat_and_course","donate","donate_title","donate_content","donate_now","misc","this_morning","this_afternoon","tomorrow_morning","tomorrow_afternoon","next_week","disable","an_error_occurred","try_again","popup_blocked","selected","show_base_editor","insert_latex","updated_on","file_too_big","max_upload_size_is","terms_and_conditions","no_native_video_support","show_all","show_more","share","page","pages","maintenance_mode","show_preview","hide_preview","contact_us","select_all","unselect_all","ads","no_favorites","undo","redo","correct_answers","wait","limit","find_out_more","experimental_feature_warning","time_limit","minutes","scored_plural","scored_singular","download","downloading","csv","pdf","ok","from","to","add","wrong_file_format","expand","collapse","back","no_answer","using_base_editor","having_troubles_with_editor","show_full_editor","fix_sidebar","unfix_sidebar","show_recent","logged_in","logged_out","select","preview","save_and_close","teacher","passed_tests","hidden_to_students","file_upload_no_files","file_upload","upload","course_settings","example","select_empty_option","changes_saved_to_server","exercise_preview_title","for","success","participants","participant","close","reopen","exam","edit","at","copy","copied","confirm_exiting_unsaved_changes","click_to_edit","among","teacher_comment","out_of","save","download_as_csv","download_results","select_one","logout","exercise_solution_thread","thread_title","teacher_description","student_dashboard_options","my_exams","my_practice_sessions","popular_exercises","leaderboard","my_favorites","exercise_solution","copyright_disclaimer","confirm_deletion","load_more_solutions","go_to_exercise_thread","reveal_solutions_1","reveal_solutions_2_singular","reveal_solutions_2_plural","there_are_pending_solutions_1","there_are_pending_solutions_2","no_solutions_to_review","you_rejected_this_solution","verified","add_comment","teacher_is_this_solution_correct","approve","default_author","add_bookmark","remove_bookmark","no_solutions_call_to_action","propose_solution","proposed_solutions_title","propose_solution_title","publish","publishing","your_solution_placeholder","reveal_solution","APPROVED","SUBMITTED","REJECTED","participation_downloader","report_type","mat_and_scores_title","full_name_and_scores_title","all_fields_title","all_fields_description","custom_title","custom_description","introduction","report_fields","EXERCISES_ANSWER","EXERCISES_SCORE","EXERCISES_LABEL","STUDENT_COURSE","STUDENT_MAT","STUDENT_FULL_NAME","STUDENT_EMAIL","SCORE","cloud","saving","saved","sidebar_labels","course_dashboard_dashboard","course_dashboard_material","course_dashboard_exams","course_dashboard_practices","course_dashboard_exercises","course_dashboard_back_to_courses","course_list_courses","course_list_new_course","teacher_course_dashboard","dashboard","see_all","recent_exams","recently_edited_exercises","course_name","course_description","course_link_for_students","course_creation_form","name_required","name_already_taken","course_visibility","hide_course","public_description","hidden_description","import_exercises","import_exercises_description","new_exercise","export_exercises","import_exercises_title","no_exercises","no_matching_exercises","selected_exercises","selected_exercise","create_exam_from_selected_exercises","cannot_delete_nondraft","confirm_delete_exercise","confirm_delete_exercise_title","choice_score_word_singular","choice_score_word_plural","clone_label","course_events","new_exam","no_exams","reopen_exam_body","reopen_exam_title","close_exam_for_everyone_title","close_for_everyone","reopen_for_everyone","close_exam_for_everyone_body_1","close_exam_for_everyone_body_2","close_exam_for_everyone_body_3","close_exam_for_everyone_body_1_alt","exercise_preview","unnamed_exercise","event_preview","unnamed_event","monitor","editor","still_open_for_some","copy_link","copied_link","event_monitor","select_students_to_publish_results","if_selected","assess_slot","change_slot_score","undo_turn_in","stats_turned_in","stats_participants","stats_average_progress","close_for_selected","reopen_for_selected","open_for_selected","close_for_selected_text_1","open_for_selected_text","close_for_selected_text_2","some_exams_still_open","un_turn_in_text","un_turn_in_instructions","student_will_be_brought_back_to_first_slot","in_column_state","sorting_tooltip","sort_options","alphabetical","alphabetical_reverse","begin_timestamp_reverse","average_increasing","average_decreasing","event_stats","not_yet_assessed","overall","score_distribution","per_exercise_stats","selections","answers","back_to_results","testcase_passed_in","submissions","no_stats_available_for_exercise","incomplete_scores","cloze_stats_title","event_results","publish_confirm_text","event_template_editor","no_rules","list_view","grid_view","add_more_rules","editor_title","introduction_text","add_rule","confirm_delete_rule","rule_order_randomization_off","rule_order_randomization_on","exercise_picker","cannot_pick_draft","already_selected","go_to_exercises","no_available_exercises","help","help_guide_label","help_center_title","based_on_your_activity","take_the_tour","cannot_find_the_answer","start_tour","articles","event_template_rule_editor","reset_slot_settings","exercise_number","choose_exercise","change_exercise","populate_slot_singular_title","populate_slot_plural_title","mode_selection_text","pick_single_exercise","pick_exercise_from_pool","pick_exercise_tag_based","pick_single_exercise_help_text","pick_exercise_from_pool_help_text","pick_exercise_tag_based_help_text","one_exercise_from_set_description","tag_based_description","tag_based_description_multiple_1","tag_based_description_multiple_2","same_exercise_for_everyone_description","tag_based_introduction","tag_based_select_exercises","tag_based_at_least_one","tag_based_among","tag_based_and","tag_based_add_condition","eligible_exercises","no_tags_student","no_tags","unsatisfiable_tag_rule","unset_rule_type_confirmation","event_editor","state_editor_title","current_state_is","current_state_is_draft","current_state_is_planned","state_is","max_grade","flow_rules","access_rules","time_limit_rules","time_limit_label","manage_time_limit_exceptions","time_limit_exceptions","no_time_limit_description","exceptions_to_time_limit","time_limit_description","add_exception","no_time_limit_exception","remove_time_limit_exception_confirmation","delete_exception","exercises_shown_at_a_time_label","allow_everyone_access_label","deny_access_by_default_label","allow_going_back_label","show_all_exercises_at_once","show_one_exercise_at_once","revert_to_draft","event_planned_help_text","editing_open_event_title","editing_open_event_body","correct_errors_to_publish","cannot_change_timestamp","this_is_the_link_to_the_event","edit_template_in_progress_warning","currently_locked_by","lock_stand_by","tip_you_used_randomization","generate_examples","generating_examples","allow_access_description","deny_access_description","choose_allowed","import_from_valutami","manage_allowed_description","manage_allowed_import_from_valutami_1","manage_allowed_import_from_valutami_2","manage_allowed_import_from_valutami_3","student_email","import_enrolled","allowed_students","publish_exam","publish_announcement_prompt","exercise_editor","confirm_delete_testcase_attachment","testcase_add_attachments","testcase_attachments","testcase_attachments_description","use_assert_lib","exercise_editor_title","draft_notice","max_score","solutions_title","choices_title","clozes_title","testcases_title","exercise_label","exercise_text","select_exercise_type","exercise_state","exercise_public_tags","exercise_tags","exercise_private_tags","choice_text","choice_correctness","choice_score_checked","choice_score_unchecked","testcase_text","testcase_code","testcase_stdin","test_solution","testing_solution","testcase_expected_stdout","edit_non_draft_title","edit_non_draft_body","new_choice","new_solution","new_testcase","new_sub_exercise","new_cloze","edit_cloze","editing_cloze","sub_exercises_title","sub_exercise_weight","cannot_publish","cannot_publish_body","make_public_confirmation_title","make_public_confirmation_body","requires_typescript","confirm_delete_choice","confirm_delete_solution","confirm_delete_testcase","confirm_delete_sub_exercise","code_execution_will_appear_here","clone","delete_sub_exercise","delete_choice","delete_testcase","clone_confirm","is_choice_correct","no_choice_penalty_warning","cloze","invalid_cloze_id","exercise_wrapper","student_course_dashboard","begin_exam","you_are_in_student_mode","show_bookmarked","show_all_practices","too_many_exercises","your_practice_events","new_practice_event","exams_you_participated_in","view_assessment","resume","assessment_available","new_practice","resume_practice","draft_practice","pending","available_exercises_tooltip","no_public_exercises","practice_template_editor","add_tag_1","add_tag_2","add_tag_3","begin_practice","choose_tags_text","choose_exercises_no_tag_text","rule_amount_1","rule_amount_2","exercise_amount","seen_exercises_wont_be_selected","exercises_with_this_tag","all_exercises_seen_with_this_tag","programming_exercise","open_text_popup","tab_text","tab_testcases","tab_editor","tab_execution_results","run_code","running_code","passed","not_passed","test_failed_with_error","test_failed_stdout","code_errored","compilation_errored","no_testcases","results_ok_but_no_testcases","internal_error","OPEN_ANSWER","COMPLETION","ATTACHMENT","AGGREGATED","exercise_states","PUBLIC","PRIVATE","event_states","event_participation_states","exercise_states_descriptions","event_states_descriptions","validation_errors","lesson","modelValue","announcement","dirtyCourse","eventTemplateRule","exercise_validation_errors","BLANK_TEXT","NO_CHOICES","BLANK_CHOICE","NO_TESTCASES","NO_SUB_EXERCISES","ACCESS_EXERCISES","ASSESS_PARTICIPATIONS","MANAGE_EVENTS","MANAGE_EXERCISE_SOLUTIONS","MANAGE_EXERCISES","UPDATE_COURSE","MANAGE_MATERIAL","course_privileges_short","testcase_types","SHOW_TEXT_ONLY","HIDDEN","event_template_rule_type","FULLY_RANDOM","course_privileges_page","edit_permissions_title","data_table","equals","notEqual","lessThan","lessThanOrEqual","greaterThan","greaterThanOrEqual","filterOoo","contains","noRowsToShow","errors","retry","no_connection","400","401","403","404","500","unknown_error","invalid_schedule_time","scheduled_confirm_publish_now_1","scheduled_confirm_publish_now_2","save_to_cancel_scheduled_publish","scheduled_for","schedule","schedule_label","select_schedule_datetime","schedule_datetime","schedule_publish_title","editor_discard_unsaved_changes","confirm_delete_comment","file_by_url_description","file_url","file_editor_title","file_node_editor_file_upload","file_node_editor_url","poll_results","save_poll_choice","poll_choice_not_saved_yet","confirm_delete_poll_choice","new_poll_choice","poll_choice_text","poll_closed","poll_title","publish_poll","poll_text","poll_choices","poll_editor_title","announcement_title","publish_announcement","announcement_body","announcement_attachments","announcement_editor_title","node_comments_title","node_comment_title","cannot_delete_nonempty_topic","delete_node_confirm","topic_label","no_topic","topic_node_name","new_topic_title","update_topic_title","save_draft","create_file_node_title","no_nodes","unnamed_lesson","back_to_tree","new","lesson_title","lesson_body","lesson_editor_title","draft","publish_lesson","lesson_creation_date","lesson_attachments","add_attachment","course_tree_node_types","announcements","exam_published_1","exam_published_2","exam_published_3","breadcrumbs","exam_participation_page","practice_participation_page","submission_review","practice_review","exam_assessment","course_tree_node","filter_courses","courses_i_teach","hidden_courses","no_courses","no_courses_with_filters","help_texts","telegram","testcase_passes","testcase_fails","practice_score","student_practice_rule_amount","all_or_nothing_programming","public_tags","private_tags","clozes","copy_exam_link","stats","edit_score","edit_overall_grade","hidden_course","tour","integrations_header","integrations_content","new_material_header","new_material_content","material_header","material_content","demo_student_header","demo_student_content","demo_practice_header","demo_practice_content","demo_popular_exercises_header","demo_popular_exercises_content","demo_leaderboard_header","demo_leaderboard_content","demo_help_center_header","demo_help_center_content","demo_permissions_header","demo_permissions_content","demo_solutions_header","demo_solutions_content","demo_exams_header","demo_exams_content","demo_exercises_header","demo_exercises_content","demo_course_header","demo_course_content","demo_welcome_header","demo_welcome_content","new_sidebar_header","new_sidebar_content","help_center_header","help_center_content","skip","next","previous","finish","add_exercises_header","add_exercises_content","add_exams_header","add_exams_content","permissions_header","permissions_content","exam_insights_header","exam_insights_content","gamification","to_reach_next_level","your_reputation","your_leaderboard_position","your_badges","show_panel","no_leaderboard","no_goals","SUBMIT_EXERCISE_SOLUTION","EXERCISE_SOLUTION_APPROVED","TURN_IN_PRACTICE_PARTICIPATION","CORRECTLY_ANSWERED_EXERCISE","EXERCISE_SOLUTION_UPVOTED","SUBMIT_FIRST_EXERCISE_SOLUTION","reports","course_participation_report_headers","csv_headers","passed_testcases","failed_testcases","passed_testcase_0","passed_testcase_1","passed_testcase_2","passed_testcase_3","passed_testcase_4","passed_testcase_5","passed_testcase_6","passed_testcase_7","passed_testcase_8","passed_testcase_9","locales","en","server_messages","NOT_ENROLLED","EVENT_CLOSED","ALREADY_ENROLLED","NOT_IN_EVENT_ALLOWED_LIST","exercise_import","formats","MOODLE_XML","EVO_JSON","select_format","choose_file","import","importing","imported_exercises_state","detected_exercises","extras_detected_tags","extras_detected_tags_description","integrations","classroom","sync_roster","sync_classroom_roster","sync_classroom_roster_description_1","sync_classroom_roster_description_2","sync_classroom_roster_description_3","roster_sync_scheduled","sync_grades_with_classroom","sync","sync_grades_with_classroom_description","student_no_scopes_warning","published_on_classroom","type_course_name_to_disable_integration","disable_warning","publish_on_classroom","select_course_to_pair","enable","grant_scopes_btn","grant_scopes_to_use_integration","you_have_outstanding_scopes","pair_a_classroom_course","is_paired_with","you_dont_teach_any_courses","pair_course","feature_exams","feature_exam_participations","feature_material","feature_roster","disable_title","disable_body","keep_active","find_out_features","choose_exercises_text","choice_score","score_if_checked","score_if_unchecked","messages","i18n","locale","silentFallbackWarn","getTranslatedString","global","tc","searchBar","maxlength","maxLength","onBlur","onInput","placeholder","fixedLabel","leftIcon","rightIcon","Number","normalizeIncomingExercise","child_weight","normalizeIncomingExerciseChoice","normalizeIncomingEventParticipation","normalizeIncomingEventParticipationSlot","normalizeIncomingEventTemplateRuleClause","normalizeIncomingEventTemplateRule","normalizeIncomingEventTemplate","normalizeIncomingEvent","aggregateExerciseSolutionThreads","ex","solutionExercise","convertPaginatedResponseToLocalPaginatedData","_component_Avatar","canDelete","deleteMessage","Avatar","fill","cx","cy","width","spinnerSize","height","viewBox","xmlns","fast","ReportSettingsPreset","ReportType","ReportField","options","option","innerHTML","Array","watch","handler","$nextTick","radios","radio","immediate","mounted","getElementById","checked","listen","log","showFeedback","inputEvent","preventDefault","GamificationAction","getContextGoals","getGoalProgress","getUsers","queryParams","getMe","updateUser","getActiveUsersForCourse","getUsersEnrolledInCourse","user_ids","getCourseLeaderboard","SEARCH_DEBOUNCE_TIME_MS","SEARCH_DEBOUNCE_MAX_WAIT_MS","getCurrentUserId","logOut","showMessage","redirect","metaStore","resetToken","query","setErrorNotification","redirectToCourseEnrollment","redirectToMainView","currentRoute","getDebouncedForFilter","callback","maxWait","getFormattedTimestamp","timestamp","format","getExamPermalink","location","origin","examId","fullPath","getErrorData","useAsIs","isMaintenanceMode","detail","DEFAULT_SERVER_MESSAGES","status","setPageWideError","pageWideErrorData","setErrorNotificationData","hideTimeout","getColorFromString","str","saturation","lightness","hash","charCodeAt","h","min","f","color","max","round","toString","padStart","forceFileDownload","URL","createObjectURL","Blob","link","href","click","containsLatex","html","test","stripHtmlFromLaTexBlocks","LATEX_REGEX","textContent","formatExerciseText","getExerciseTitle","getClonedExercise","csvToArray","headerLineBeginning","delimiter","indexOf","rows","arr","row","el","reduce","header","getParticipationRemainingTime","time_limit_rule","TIME_LIMIT","endMoment","now","diff","getFileContent","reader","FileReader","readAsText","clickOutsideDirective","beforeMount","binding","clickOutsideEvent","addEventListener","unmounted","removeEventListener","roundToTwoDecimals","EPSILON","logAnalyticsEvent","eventName","getMaxUploadFileSizeBytes","isDemoMode","parse","getDefaultThumbnail","ARCHIVE_TYPES","SOURCE_CODE_TYPES","getHumanFileSize","bytes","thresh","abs","units","toFixed","arraybufferToBase64","Buffer","md5","inputString","hc","rh","ad","x","y","rl","cm","q","b","ff","gg","hh","ii","sb","nblk","blks","olda","oldb","oldc","oldd","sameDay","d1","d2","getFullYear","getMonth","getDate","getFileNameFromResponseHeader","disposition","utf8FilenameRegex","asciiFilenameRegex","decodeURIComponent","exec","filenameStart","partialDisposition","matches","highlightMatchingText","words","w","searchWord","matchIndex","substring","isValidEmailAddress","input","checkValidity","examPublishedAnnouncementTemplate","_directive_clipboard","iconOnly","onCopy","confirmationMessage","_component_TextInput","onSend","isValidMessage","posting","sendMessage","resolveFn","rejectFn","TextInput","showFallbackavatar","avatarSize","toLocaleUpperCase","referrerpolicy","onError","nodeProps","loadingComments","loadingChildren","nodeEmits","editNode","deleteNode","loadChildren","loadComments","viewerClose","nodeEditorProps","blockingSaving","isExistingNode","savingError","showAutoSaveIndicator","uploadProgress","nodeEditorEmits","patchNode","updateState","newState","blur","closeEditor","onChangeNodePosition","nodeList","oldIndex","newIndex","movedNode","moveArgs","newRightSibling","ProgrammingExerciseTabs","TEST_CASE_AUTO_SAVE_DEBOUNCE_TIME_MS","TEST_CASE_AUTO_SAVE_DEBOUNCED_FIELDS","EVENT_AUTO_SAVE_DEBOUNCE_TIME_MS","EVENT_AUTO_SAVE_DEBOUNCED_FIELDS","EXERCISE_AUTO_SAVE_DEBOUNCE_TIME_MS","EXERCISE_AUTO_SAVE_DEBOUNCED_FIELDS","EXERCISE_SOLUTION_AUTO_SAVE_DEBOUNCE_TIME_MS","EXERCISE_SOLUTION_AUTO_SAVE_DEBOUNCE_FIELDS","EXERCISE_CHOICE_AUTO_SAVE_DEBOUNCE_TIME_MS","EXERCISE_CHOICE_AUTO_SAVE_DEBOUNCED_FIELDS","EVENT_PARTICIPATION_SLOT_DEBOUNCE_TIME_MS","EVENT_PARTICIPATION_SLOT_DEBOUNCED_FIELDS","exerciseTypeOptions","parseInt","exerciseStateOptions","description","testcaseTypeOptions","examInsightsPageTourSteps","newSidebarHelpCenterTourSteps","demoLoginTourSteps","demoCourseTourSteps","newMaterialModuleTourSteps","teacherTourSteps","demoStudentTourSteps","demoTeacherTourSteps","tourOptions","highlight","labels","buttonSkip","buttonPrevious","buttonNext","buttonStop","programmingExerciseTabsOptions","TEXT","EXECUTION_RESULTS","TEST_CASES","courseSelectionOptions","CLOZE_PLACEHOLDER_REGEX","RegExp","CLOZE_SEPARATOR","getCourseInsightsHeaders","examsColors","field","hide","headerName","resizable","cellRenderer","pinned","wrapText","filterParams","allowedCharPattern","numberParser","filterOptions","suppressAndOrCondition","headerComponent","getEventParticipationMonitorHeaders","resultsMode","minWidth","checkboxSelection","headerCheckboxSelection","headerCheckboxSelectionFilteredOnly","flex","slot_number","MAX_PRACTICE_EXERCISE_COUNT","sanitizeOptions","allowedTags","disallowedTagsMode","allowedAttributes","img","selfClosing","allowedSchemes","allowedSchemesByTag","allowedSchemesAppliedToAttributes","allowProtocolRelative","enforceHtmlBoundary","_component_HelpCenter","_component_router_view","helpCenterOpen","onStartTour","startTour","onClose","setHelpCenterVisibility","routeTitle","_component_HelpCenterArticleFull","_component_DraggablePopup","whiteBg","dragOnTitleOnly","initialTop","initialLeft","mediaQueryMdMatches","inForeground","helpCenterSelectedArticleId","relevantArticles","article","setHelpCenterArticleId","irrelevantArticles","selectedArticle","onBack","allowGoBack","ArticleTag","courseListSidebarOptions","routeName","requiredPrivileges","studentCourseListSidebarOptions","courseDashboardSidebarOptions","studentDashboardSidebarOptions","requiredFeatures","PRACTICE","MATERIAL","MY_EXAMS","EXERCISE_SOLUTIONS","LEADERBOARD","BOOKMARKED","routeParams","sideBarOptions","related","articleId","SHOWN_ARTICLES","DraggablePopup","HelpCenterArticleFull","path","$route","getArticleRelevance","routeTags","meta","showAll","isDemo","sortedArticles","Infinity","LOCAL_STORAGE_FIX_SIDEBAR_KEY","showMobileSidebar","newVal","classList","routerViewPaddingLeft","clientWidth","localStorage","getItem","unfixingSideBar","fixSideBar","mq","matchMedia","mediaQueryMd","hoveringSidebar","sideBarHoverHandle","donateExpanded","$tours","start","isRouteActive","onSideBarHover","className","onSideBarLeave","toggleFixSideBar","setItem","onToggleDonate","logoUrl","allowedSidebarOptions","sidebarOptions","currentCourse","currentEvent","routerViewStyle","unfixedSidebarOnMdScreen","HelpCenter","_component_NumberInput","_component_Dialog","editingMat","onNo","onYes","onSaveMat","dirtyMat","_hoisted_13","appear","dismiss","showDialog","fullWidth","large","dialogBoxClasses","fullHeight","noPadding","backButton","stickyHeader","headerBorder","showActions","footerBorder","emitChoice","disableOk","yesText","confirmOnly","noText","dismissible","severity","beforeUnmount","bodyContainsOverflowHidden","showContent","small","filled","proxyModelValue","elementId","number","iconFilled","rightHint","set","replaceTitleTokens","onShowMatEdit","withLoading","patchUser","showSuccessFeedback","showSecondaryHeader","matched","Dialog","NumberInput","onEnroll","enrolling","onCancel","$router","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_component_CourseSearchFilters","_component_StudentScopesBanner","_component_CourseListItem","_component_CourseListItemSkeleton","_component_v_tour","firstLoading","searchFilters","localLoading","coursesFiltered","onToggleFavorite","onCourseToggleFavorite","onEnrollChange","onUnenroll","enrollmentLoading","enrollmentDialogMode","showBlockingDialog","resolveBlockingDialog","selectedCourseForEnrollment","fn","steps","_component_router_link","textCode","formattedDescription","canAccessCoursePanel","MAX_DESC_LENGTH","_component_Card","hoverable","focusable","highlighted","borderLess","side","expandSideOnSmall","marginLess","Card","_component_Toggle","anyCourseHasPrivileges","emitUpdate","_directive_wave_trigger","labelOnLeft","overrideId","trigger","syncCheckboxState","checkboxElement","some","Toggle","_component_ArticleHandle","_component_GoogleScopeChecker","shake","googleIntegrationStore","studentScopesBannerShaking","role","onAnimationend","onScopesOk","onScopesCheckFailed","noScopes","outstandingScopes","showMissingScopesBanner","_component_GoogleScopesButton","scopes","getUrl","getClassroomScopesAuthUrl","onAuthDone","loadAuthorizedScopes","CLASSROOM_TEACHER_SCOPES","CLASSROOM_STUDENT_SCOPES","useGoogleIntegrationsStore","authorizedScopes","courseTwins","studentScopesBannerVisible","getGoogleClassroomCoursesTaughtByCurrentUser","getAuthorizedScopes","getCourseTwin","isGoogleClassroomIntegrationActive","enabled","createCourseTwin","classroomCourseId","classroom_course_id","partialUpdateCourseTwin","syncExamGrades","syncCourseRoster","getGoogleClassroomCourseWorkTwin","getGoogleClassroomMaterialTwin","lessonId","getGoogleClassroomAnnouncementTwin","announcementId","popupBlocked","grantScopes","Function","popupHandle","popup","open","closed","setInterval","clearInterval","outstandingScopesLength","granted","GoogleScopesButton","validator","shakeBanner","GoogleScopeChecker","ArticleHandle","DEMO_COURSES_TOUR_KEY","CourseListItem","CourseListItemSkeleton","CourseSearchFilters","StudentScopesBanner","withFirstLoading","getBlockingBinaryDialogChoice","withLocalLoading","sortCourses","coursesSorted","bookmarkedEnrolledCourses","enrolledCourses","bookmarkedCourses","otherCourses","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","_hoisted_40","_hoisted_41","_component_TextEditor","_component_EventEditorPreview","_component_EventEditorPreviewSkeleton","_component_MinimalExercisePreview","_component_MinimalExercisePreviewSkeleton","editCourseName","editingName","onKeydown","v$","$invalid","$touch","onDoneEditingName","dirtyCourseName","$errors","$uid","editCourseDescription","editingDescription","forceBaseEditor","dirtyCourseDescription","onDoneEditingDescription","onChangeCourseVisibility","loadingEvents","recentExams","allowClose","buttonIconsOnly","showExercises","loadingExercises","recentExercises","selectable","showEdit","onEdit","_component_MultiIcon","isDraft","previewTitle","useTwoTone","eventStateIcons","hasBegun","hasEnded","isRawIcon","parsedIcons","fontSize","classExceptions","sizeExceptions","javascript","update","block","event_available","sizeException","startsWith","MultiIcon","canReopen","getTime","halfClosed","_component_Tag","_component_FadedEdgesScrollableFragment","_component_ProcessedTextFragment","_component_FullExercise","previewable","showPreview","selectionDisabled","exerciseStateIcons","exerciseTypeIcons","tagsDivId","tagsDivStyle","previewText","emitEdit","selectButtonTitle","onSelection","showTags","_component_AbstractEventParticipationSlot","exerciseWrapperSlot","allowEditAssessment","allowEditSubmission","showAnswer","_component_Exercise","_component_ClozeExercise","_component_ParticipationSlotAssessment","subSlot","showAssessmentCard","showReadOnlyAnswer","submission","readOnly","showLabel","showExerciseLabel","showSolution","showSolutionAndScores","showPublicTags","onUpdateSubmission","onRunCode","showScores","assessment","assessmentExpanded","writeOnly","assessmentWriteOnly","onToggleExpanded","setAssessmentExpanded","onSave","onSaveAssessment","onUpdateAssessment","maxScore","assessmentLoading","scoreTitle","seen_at","answered_at","assessmentControlsVisibility","onSetAssessmentExpanded","exerciseComponentName","_component_CheckboxGroup","_component_RadioGroup","_component_AbstractExercise","submissionControls","exerciseChoicesAsOptions","selectedChoicesProxy","item","exerciseTitle","showPrivateTags","readOnlyAnswer","exerciseProps","ProcessedTextFragment","Tag","optionClass","itemClass","labelClass","useToggles","usesCustomSlot","checkboxes","checkbox","onToggleUpdate","getMaxScore","exType","assessable_sub_exercises","testcases","getCorrectChoices","subExercises","maxCorrectness","flatMap","correctChoices","$sanitize","AbstractExercise","CheckboxGroup","RadioGroup","answerTextProxy","defaultValue","_component_quill_editor","tall","onMouseup","endDragging","resizablePanelId","previewPanelStyle","showBaseEditor","baseEditorRows","editorOptions","internalDisabled","onChange","onEditorChange","onReady","onEditorReady","toggleBaseEditor","dividerStyle","onMousedown","startDragging","transform","previewPanelWidth","ImageResize","ImageDrop","register","showPreviewButton","quillEditor","triggerTexRender","triggerTexHandle","addCustomButtons","instance","pos","handleDragging","percentage","pageX","innerWidth","latexButton","querySelector","selection","getSelection","insertText","setSelection","htmlButton","quill","on","onSelectionChange","root","fullText","getText","range","left","theme","toolbar","list","imageResize","imageDrop","magicUrl","TextEditor","_component_FileUpload","attachmentProxy","onDownload","onDownloadAttachment","_component_VueUploadComponent","uploading","onInputFilter","inputFilter","onInputFile","inputFile","ref","drop","files","emitUpload","invisible","thumb","showUpload","showMaxSize","fileTooBig","fileTooBigTextShake","humanReadableMaxUploadSize","$refs","active","VueUploadComponent","AnimatedIcon","maxFilesNum","autoUpload","clearImmediately","refUploading","minSize","maxSize","component","fileBlob","blob","newFile","oldFile","prevent","mimeType","isImage","Image","extras","participation_id","slot_id","FileUpload","_component_v_runtime_template","exerciseText","onSelectionUpdate","textTemplate","getChoice","updateSubmission","processedIds","clozeId","clozeSlot","VRuntimeTemplate","_component_Tabs","_component_ExerciseTestCase","_component_CodeExecutionResults","_component_CodeEditor","_component_CodeFragment","currentTab","filteredTabsOptions","language","languageCode","showRunButton","runCoolDown","running","isRunning","onRun","runButton","sidePaneTitle","sidePane","executionResults","testCases","bottom","executionState","_component_SegmentedControls","_component_multi_icon","onMouseDown","SegmentedControls","_component_MonacoEditor","containerHeight","isRendered","onEditorDidMount","onDidMount","monacoOptions","baseHeight","sidePaneContentHeight","diffEditor","original","setup","fixedWidth","fixedHeight","initMonaco","beforeDestroy","dispose","monaco","$el","_setModel","_getEditor","onDidChangeModelContent","getValue","onDidBlurEditorWidget","libSource","libUri","typescript","typescriptDefaults","addExtraLib","javascriptDefaults","originalModel","createModel","modifiedModel","setModel","_setValue","setValue","_getValue","modifiedEditor","_setOriginal","getModel","deep","updateOptions","setModelLanguage","setTheme","MonacoEditor","clientHeight","monacoModule","editorInstance","textModel","minimap","scale","quickSuggestions","other","strings","parameterHints","suggestOnTriggerCharacters","acceptSuggestionOnEnter","tabCompletion","wordBasedSuggestions","editorHeight","tests","filteredExecutionResultsTests","onlyErrors","testCaseDetailsVisibility","exerciseTestCase","stdout","collapsible","stderr","execution_error","compilation_errors","testCase","showDescription","CodeFragment","showTestIds","ExerciseTestCase","RUN_COOL_DOWN","showExecutingMessage","oldVal","coolDownHandle","Tabs","CodeEditor","CodeExecutionResults","validators","isArray","warn","runCode","componentNames","MultipleChoiceExercise","OpenAnswerExercise","AttachmentExercise","AggregatedExercise","ClozeExercise","ProgrammingExercise","onShowAssessmentControls","score_edited","onUndoScoreEdit","isSubSlot","scoreProxy","commentProxy","dirtyScore","onHideAssessmentControls","toggleExpanded","updateAssessment","dirtyComment","confirm","Exercise","ParticipationSlotAssessment","saveAssessment","change","isProgrammingExercise","isOpenAnswerExercise","someSubSlotsPending","AbstractEventParticipationSlot","atBeginX","atEndX","opacity","scrollBy","isScrollable","element","debounce","onScroll","passive","atBeginY","atEndY","frame","cancelAnimationFrame","requestAnimationFrame","scrollWidth","getComputedStyle","overflowX","scrollLeft","perc","expandable","FullExercise","FadedEdgesScrollableFragment","setWidthFn","tagsDivWidth","parentElement","exerciseStatesIcons","exerciseTypesIcons","ID_BASED","satisfying","ruleTypeSet","ruleType","matchAll","courseValidation","unique","$autoDirty","eventTemplateRuleValidation","idBasedRulePopulated","tagBasedRulePopulated","tagBasedRuleSatisfied","eventTemplateValidation","$each","eventValidation","exerciseChoiceValidation","baseExerciseValidation","clozeIdsAreValid","choicesRequiredIfMultipleChoiceExercise","atLeastOneCorrectChoice","exerciseValidation","lessonNodeValidation","pollNodeValidation","announcementNodeValidation","DEMO_COURSE_DASHBOARD_TOUR_KEY","NEW_MATERIAL_MODULE_TOUR_KEY","EventEditorPreview","MinimalExercisePreview","EventEditorPreviewSkeleton","MinimalExercisePreviewSkeleton","showTour","validations","discard","_component_BreadCrumbs","route","SIDEBAR_WIDTH_EXPANDED","sidebarWidth","showGamificationPanel","internalSidebarOptions","BreadCrumbs","_component_EventParticipationPreview","_component_SkeletonCard","_component_VueEternalLoading","load","onLoadMore","isInitialInfiniteLoad","_component_ParticipationThumbnail","showThumbnail","isParticipable","ParticipationThumbnail","full","short","EventParticipationPreview","SkeletonCard","VueEternalLoading","loaded","noMore","moreResults","_component_ExamCard","formattedTime","hours","seconds","ExamCard","_component_PracticeTemplateEditorNew","showBookmarkedOnly","ads3Code","adsMobileCode","onCreatePractice","filteredPracticeParticipations","onBookmark","loadingParticipations","has","onCancelPracticeEditorDialog","onBeginPractice","practiceEditorDialogLoading","draftEventTemplate","isEditingRule","showPracticeEditorDialog","isResumingUnstartedPractice","onIsEditing","_component_Chipset","tagsAsSelectableOptions","allowMultiple","editingTagId","optionValue","tagsToRules","editingTag","public_exercises_not_seen","editingTagDirtyAmount","$tc","resolveTagSelectPromise","wrap","compact","deletable","onRemove","showAddChip","addChipTooltip","rejectTagSelectPromise","onTagSelect","confirmed","onAddRuleByTagId","onRemoveRuleByTagId","selectedTagIds","newTagId","removedTagId","selectedTags","public_exercises","Chipset","DEMO_TOUR_KEY","SCOPES_REQUIRED_TO_CREATE_PRACTICE","PracticeTemplateEditorNew","showNotRecent","Set","public_exercises_count","eventPayload","newPracticeEvent","_component_ExerciseSearchFilters","_component_ExerciseSolutionContainer","_component_SlotSkeleton","allowFilterByState","allowFilterByType","searchFilter","onResetFilters","loadingSolutionsByExercise","canLoadMore","loadMore","showSolutionsByExercise","getSolutionCountForExercise","_component_ExerciseSolution","_component_ExerciseSolutionEditor","showTitle","shownSolutions","forceExpanded","standalone","showTeacherControls","onUpdateState","onSolutionStateUpdate","onEditSolution","onDeleteSolution","onAddSolution","canShowMore","onShowMore","allowAddSolution","showExerciseThreadLink","threadPermalink","editingSolutionId","editingSolutionDeepCopy","editingSolution","onUpdateSolution","onDraftSolutionChange","editorType","solutionType","_component_Message","_component_MessageEditor","isOwnSolution","onVote","UP_VOTE","has_upvote","DOWN_VOTE","has_downvote","collapsed","calculatingHeight","MAX_CONTENT_HEIGHT_PX","bookmarking","onToggleBookmark","authorName","postingComment","onSendMessage","onAddComment","canVote","canChangeState","canComment","intervalHandle","contentElement","voting","showAnimation","runningCode","ws","hasAnyPrivileges","MessageEditor","Message","_component_CloudSaveStatus","onUpdate","onSubmit","hadError","showSaved","showOutOfViewFeedback","showSavedHandle","showOutOfViewFeedbackHandle","isElementInViewPort","rect","getBoundingClientRect","top","innerHeight","documentElement","right","CloudSaveStatus","AutoSaveManagerState","remotePatchFunction","localPatchFunction","debouncedFields","debounceTime","successFunction","errorFunction","cleanupFunction","revertOnFailure","alwaysPatchLocal","wrapRemotePatchFunction","unsavedChanges","beforeChanges","UP_TO_DATE","PENDING","flush","cancel","ERROR","SHOW_INITIALLY_COUNT","showFirst","forceShowAll","allowShowMore","initialEditorContent","autoSaveManager","instantiateAutoSaveManager","instantiateLocalOnlyAutoSaveManager","onDoneEditing","forSolution","onSolutionStateChange","creatingSolution","editDraftSolution","changed","draftSolutions","nonDraftSolutions","ExerciseSolution","ExerciseSolutionEditor","tagsOptions","emptyFilters","onFilterChange","fetchSolutionsForNewExercises","force","SlotSkeleton","ExerciseSolutionContainer","ExerciseSearchFilters","_component_DropdownMenu","_component_ExerciseEditorWrapper","_component_ExerciseEditorWrapperSkeleton","_component_ExerciseImporter","canCreateAndEditExercises","onAddExercise","dropdownExpanded","onExportExercises","showExerciseImporter","ref_for","onDelete","onDeleteExercise","onCloneExercise","editable","dialogData","importedExercises","onImportDone","importLoading","onUpdateExercises","_component_ExerciseEditor","showEditor","toggleExpand","onClone","_hoisted_42","_hoisted_43","_hoisted_44","_hoisted_45","_hoisted_46","_hoisted_47","_hoisted_48","_hoisted_49","_hoisted_50","_hoisted_51","_hoisted_52","_hoisted_53","_hoisted_54","_hoisted_55","_hoisted_56","_hoisted_57","_hoisted_58","_hoisted_59","_hoisted_60","_hoisted_61","_hoisted_62","_hoisted_63","_hoisted_64","_hoisted_65","_hoisted_66","_hoisted_67","_hoisted_68","_hoisted_69","_hoisted_70","_hoisted_71","_hoisted_72","_hoisted_73","_hoisted_74","_hoisted_75","_hoisted_76","_hoisted_77","_component_Dropdown","_component_TagInput","_component_ChoiceEditor","_component_draggable","_component_TestCaseEditor","exerciseLocked","locked_by","fetchingExercise","subExercise","onBaseExerciseChange","invalidChildWeight","stateDropdownId","onExerciseStateChange","onExerciseTypeChange","textEditorInstance","onTextSelectionChange","modelValueWrapperSlot","onAddCloze","addingCloze","editableClozeSubExerciseId","editingClozeSubExerciseId","loadingSolutions","onBlurSolution","onTestSolution","testingSolutions","solutionTestSlots","onAddTag","onRemoveTag","canBeAllOrNothing","isMultipleChoice","showNoChoicePenaltyWarning","animation","handle","onEnd","onChoiceDragEnd","correctnessIsBoolean","singleLine","invalidCorrectness","choicesCorrectnessError","onDeleteChoice","onBlurChoice","onChoiceUpdate","onUpdateChoice","onAddChoice","childWeightError","onDeleteSubExercise","onAddSubExercise","executingSolution","testCaseAutoSaveManagers","isPending","testCaseType","onBlurTestCase","onDeleteTestCase","onCreateAttachment","onTestCaseCreateAttachment","onTestCaseDownloadAttachment","onDeleteAttachment","onTestCaseDeleteAttachment","executionResultsSlots","onTestCaseUpdate","onUpdateTestCase","onAddTestCase","editingCloze","selectedOption","DropdownMenu","_component_VueTagsInput","existingOnly","processedModelValue","onBeforeAddingTag","beforeAddingTag","onBeforeDeletingTag","beforeDeletingTag","autoCompleteItems","alwaysShowAutocomplete","allowAutocomplete","VueTagsInput","serializedProcessedModelValue","_newVal","_oldVal","ignoreWatcher","addingTag","removingTag","processTag","classes","ghostTag","processedChoices","booleanCorrectnessProxy","iconType","allTestsPass","allowHoverOnText","nonPassingExecutionResults","showAttachmentArea","testcaseAttachment","testResults","testCaseExecutionResults","Dropdown","ChoiceEditor","TagInput","draggable","TestCaseEditor","unlockEditingObject","lockEditingObject","instantiateChoiceAutoSaveManager","instantiateTestCaseAutoSaveManager","instantiateSolutionAutoSaveManager","choiceAutoSaveManagers","solutionAutoSaveManagers","showValidationErrors","preventEdit","showStickyStateDropdown","lockPollingHandle","heartbeatHandle","draggedChoice","LOCK_POLLING_INTERVAL","LOCK_HEARTBEAT_INTERVAL","setUpHeartbeatPollingFn","onFocusNonDraft","sId","fakeSlot","clozeSeparatorPositions","matchPosition","matchText","newSubExercise","newTestcase","testCaseId","insertionIndex","getLength","allOrNothingTypes","ExerciseEditor","dataFormatsAsSelectableOptions","onSelect","selectedFormat","onFileInputChange","currentStep","importedExercisesStateProxy","tagsAsOptions","selectedTagsProxy","parseString","xmlToJson","xml","getTagsFromMoodleCategory","category","questionType","$","exerciseType","single","clozeSubQuestionRegex","answerRegex","questiontext","match","childWeight","child","answer","answerMatch","isCorrectAnswer","answerScore","answerText","fileNamesAndContents","imgRegex","importExercisesFromEvoJson","importExercisesFromMoodleXml","moodleExercises","quiz","question","fraction","importFunctions","getImportedData","fromFormat","fileContents","importedData","getImageUrl","imageName","ExerciseEditorWrapper","ExerciseEditorWrapperSkeleton","ExerciseImporter","expandId","editorRef","expandResultFilter","scrollIntoView","cloned","wrapperFunc","_component_CourseTreeNode","_component_CourseTreeNodeEditor","canCreateNodes","createMenuExpanded","nodeTypesAsSelectableOptions","nodeType","onCreateNode","topLevelNodes","onStart","onNodeDragStart","onNodeDragEnd","canEditNodes","fullHeightDialog","largeDialog","fullScreenDialog","onDismissNodeEditor","showEditorDialog","autoSaveEditingNode","editorDialogLoading","editingNode","proxyEditingNode","fileUploadProgress","onPatchNode","onEditingNodeChange","onEditingNodeSave","onCloseEditor","onEditorBlur","onEditingNodeStateUpdate","editorComponentName","_component_IntegrationSwitch","_component_PublishedOnClassroom","_component_FileNode","_component_SchedulePublishDialog","onPublish","publishOnly","showScheduleDialog","showClassroomIntegrationSwitch","publishToClassroom","hasGoogleClassroomTwin","googleClassroomAnnouncementTwin","alternateLink","canceledScheduledPublish","schedule_publish_at","onSchedule","loadingTopics","topicsAsOptions","onParentChange","onNodeChange","allowChildren","fileChildren","fileNode","attachmentUploadProgress","creatingAttachment","onConfirm","visible","initialValue","remoteObjectUrl","_component_CalendarInput","invalid","showErrors","_component_date_picker","onOpen","calendarOpen","onFocus","formatter","momentFormat","shortcuts","DatePicker","date","toDate","getWeek","nineAMToday","setHours","twoPMToday","tomorrow","setDate","setTime","CalendarInput","topics","checkForAnnouncementTwin","datetime","PUBLISHED","onUploadProgress","total","IntegrationSwitch","PublishedOnClassroom","SchedulePublishDialog","fileProxy","currentPane","panes","googleClassroomMaterialTwin","checkForMaterialTwin","autoSave","editingChoice","onEditChoice","onSaveChoice","onDiscardChoice","onCreateChoice","editingChoiceText","savingChoice","resourceTypeToEditorMapping","FileNodeEditor","LessonNodeEditor","TopicNodeEditor","AnnouncementNodeEditor","PollNodeEditor","beforeWindowUnload","selectedTopicId","editingNodeAutoSaveManager","editingNodeUnsavedChanges","uploadingFile","editingTopicName","draggingNode","draftFileNode","returnValue","editingNodeDebouncedFields","oldState","createNodeFromUnsavedChanges","updateNodeFromUnsavedChanges","factories","factory","newNode","autoSavedNodeTypes","courseTreeNodeTypeIcons","CourseTreeNode","CourseTreeNodeEditor","nodeChildren","passDownProps","onDismissEditor","editorOpen","onStateUpdate","LessonNodeDetail","PollNodeDetail","AnnouncementNodeDetail","onAddExam","onCloseExam","onReopen","onReopenExam","blockingDialogData","buttonLoading","users_allowed_past_closure","newExam","_component_DataTable","_component_StudentCard","_component_UserPicker","viewModesAsOptions","viewMode","examSelectionExpanded","examsAsSelectableOptions","selectedExamsIds","custom","closedExamIds","examsViewSearchText","examsViewSortingOptionsExpanded","examsViewSortingOptions","setSortingOption","examsViewSelectedSortingOption","examsViewSelectedFilterOption","examViewFilteringOptions","examsViewAverageGradeFilterValue","downloadingReport","downloadReport","columnDefs","tableHeaders","rowData","tableData","getRowId","onGridReady","gridApi","api","columnApi","autoSizeAllColumns","usersViewSearchText","onEnrollUsers","classroomIntegrationActive","showClassroomSyncDialog","filteredEnrolledUsers","onSyncClassroomRoster","syncingClassroomRoster","googleClassroomCourseTwin","enrollingUsers","usersToEnrollCount","usersToEnroll","_component_ag_grid_vue","suppressRowClickSelection","alwaysShowHorizontalScroll","scrolled","suppressRowHoverHighlight","suppressCellSelection","rowSelection","isRowSelectable","getRowClass","rowClassRules","getRowNodeId","immutableData","localeTextFunc","onCellClick","onFirstDataRendered","onFilterChanged","onBodyScroll","AgGridVue","rowCount","getDisplayedRowCount","_component_Timeline","fetching","processedHistory","eventType","step","participationHistory","Timeline","CourseParticipationReportField","examMatch","report","replacer","processedUsers","acc","addingUsers","onRemoveUser","searchText","loadingUsers","isAtTop","scrollableElementId","filteredUsers","isSearchTextValidEmail","isUserSelected","onToggleUser","throttledGetUsers","addingUserIds","addingEmails","cachedUsers","cachedEmails","onUserSearch","displayName","column","getColId","DataTable","StudentCard","UserPicker","StudentRenderer","CourseInsightsExamParticipationRenderer","CourseInsightsExamHeaderRenderer","fetchUserPollingHandle","focus","fetchUsers","fetchExams","loadingEnrolledStudents","loadingExams","filteredSortedUsers","scoreAverage","selectedExams","usersAsOptions","sortFn","r1","r2","lastName1","lastName2","average1","average2","rawTableData","activeUsersForSelectedExams","getScoreSumFn","_component_GoogleClassroomIntegrationSettings","_component_GoogleClassroomCourseItem","integrationEnabled","feature","scopesVerified","twinCourse","showDisableIntegrationDialog","onIntegrationDisable","disablingIntegration","disableConfirmCheckSuccess","disableConfirmText","classroomCourses","creatingCourseTwin","selectedClassroomCourseId","fetchingClassroomCourses","errorWhileFetchingClassroomCourses","fetchClassroomCourses","onCourseSelected","classroomScopes","onIntegrationEnable","normalize","toLocaleLowerCase","GoogleClassroomCourseItem","GoogleClassroomIntegrationSettings","_component_Combobox","canManagePermissions","items","onShowUserPermissionsDialog","onCreateOption","onUpdateSearchText","hint","isCreatableFunction","filterFunction","filterUser","noResults","createOption","isCourseCreator","currentUserId","getUserPermissionsAsOptions","onDeleteChip","onRemoveUserPrivilege","onAddChip","hideDialog","editingUser","privilegesAsOptions","editingUserPrivileges","shouldShowLoading","filteredItems","itemId","allowCreate","Combobox","editingUserId","editingUserEmail","coursePrivilegeIcons","onSetUserPrivileges","updatedUser","privilege","userOption","_component_EventMetaEditor","_component_EventTemplateEditor","_component_EventInstancesPreview","_component_EventStateEditor","_component_AnnouncementNodeEditor","examLocked","onUpdateEvent","randomRuleOrder","modelValueTemplate","showEditWarning","onTemplateChanged","invalidateExamples","onSaving","onDoneSaving","afterRules","editingMaxScore","dirtyMaxScore","computedMaxScore","onSaveMaxScore","onEditMaxScore","usedRandomization","getInstances","loadingExamples","onHide","showInstancesDialog","show","instances","updatingState","showConfirmationDialog","bounceDialog","showAnnouncementEditor","publishingAnnouncement","onAnnouncementNodeChange","footerButtons","rejectBlockingDialog","emitBlur","onBeginTimestampOpen","exercisesShownAtOnceOptions","accessRulesOptions","onAccessRuleChange","showAccessRuleDialog","DENY_ACCESS","timeLimitRuleProxy","timeLimitProxy","showTimeLimitDialog","allowedAccessAsTags","onAddAllowedAccess","onRemoveAllowedAccess","exception","onRemoveTimeLimitException","onAddTimeLimitException","timeLimitExceptionsSerialized","beginTimestampElement","FIRST_HEADER_NAME","EMAIL_HEADER_NAME","csvElements","validCsvRecords","NO_TIME_LIMIT","currentEventStateDescription","isPlanned","relevantErrors","shakeErrorBanner","currentEventStateName","onInvalidSubmission","revertToDraft","googleClassroomCourseWorkTwin","isOpen","checkForCourseworkTwin","scrollTo","scrollHeight","eventStateOptions","formattedTimestamp","_component_EventTemplateRuleEditor","onRuleDragEnd","randomOrder","globallySelectedExercises","selectedExercises","lockRuleType","ordering","getActualSlotOrdering","onUpdateRule","onRuleUpdate","onAddClause","onRuleAddClause","onUpdateClause","onRuleUpdateClause","onDeleteClause","onRuleDeleteClause","onDeleteRule","onRuleDelete","onAddRule","addMultipleRulesExpanded","addRuleAmount","_component_ExercisePicker","_component_TagBasedEventTemplateRuleEditor","displayedOrdering","showRuleDialog","isSlotPopulated","ruleExercises","loadingPreview","onCloseDialog","setRuleMode","pickOneExerciseOnly","alreadySelected","onRemoveExercise","isExerciseDraft","isSelectedInAnotherRule","isSelected","emptyFilter","allowPickingDraft","showTeacherIntroductionText","allowCreateMoreClauses","newTagName","newTag","removedTagName","removedTag","ExercisePicker","TagBasedEventTemplateRuleEditor","strNewVal","localExercisesIds","previewExercises","toFetch","toRemove","fetched","pickOne","baseOrdering","EventTemplateRuleEditor","instantiateRuleAutoSaveManager","instantiateRuleClauseAutoSaveManager","rulesAutoSaveInstances","ruleClausesAutoSaveInstances","_ordering","draggedRule","instancesAsSelectableOptions","currentInstance","onPrint","instanceIndex","__","slotIndex","instancesAsSlotArrays","worker","filename","html2canvas","jsPDF","orientation","unit","putOnlyUsedFonts","floatPrecision","EventMetaEditor","EventTemplateEditor","EventStateEditor","EventInstancesPreview","beforeRouteLeave","doSave","stateSaving","promptForPublishingAnnouncement","keyCode","ctrlKey","metaKey","_component_Countdown","showTimeUpBackdrop","onTimeUp","endTimestamp","isInitialized","runTimer","oneExerciseAtATime","onUpdateSelectedChoices","last_slot_number","goingBackAllowed","onGoBack","canGoBack","goingBack","goingForward","schedulingCodeRun","canGoForward","onGoForward","confirmGoForward","canTurnIn","confirmTurnIn","turningIn","showConfirmDialog","littleTimeRemaining","hasShakenLittleTime","lessThanHalfTimeRemaining","hasShakenHalfTime","isInitialTimeValid","onShakeEnd","initialSeconds","startTimer","stopTimer","timerCallback","EXECUTION_RESULTS_POLLING_INTERVAL","Countdown","instantiateSlotAutoSaveManager","executionResultsPollingHandles","pollForExecutionResults","slotAutoSaveManagers","lastSlotChanged","remainingTime","detectedTimerMisfire","onUpdateAttachment","currentSlot","onTurnIn","showSubmissionConfirmationMessage","reverting","is_last","is_first","showEditScore","onShowEditScore","onHideEditScore","someSlotsPending","onSlotSaveAssessment","slotsAssessmentControlsVisibility","slotsAssessmentLoading","slotsLoadingSolution","getSolutionsForExercise","history","timeLimitMinutes","onSaveStudentData","canParticipate","participation_exists","paginatedExerciseSolutions","_component_CsvParticipationDownloader","participantCount","turnedInCount","averageProgress","sortingOptionsExpanded","sortingOptions","selectedSortingOption","onPublishResults","selectedParticipationsIds","onSyncGradesWithClassroom","bulkActions","action","selectedParticipations","applicable","filteredParticipationsData","participationPreviewColumns","getRowClassRules","onCellClicked","onSelectionChanged","dispatchingCall","editingSlot","showAssessmentEditorDialog","dispatchAssessmentUpdate","editingSlotDirty","onOpenFull","editingParticipationId","onUpdateSlotAssessment","editingFullName","loadingReport","selectedDownloadPreset","presetsAsOptions","CUSTOM","fieldsAsOptions","downloadSettingsProxy","fields","availablePresets","formatsAsOptions","reportType","downloadSettings","getScoreFrequencyFromParticipations","normalizedDatum","record","datum","frequency","getTestCasePassingFrequencyFor","scoreFrequency","testCasesDetails","passedTestCases","testCasePassingRate","testCaseResults","rt","selectedChoicesIds","selectedChoicesFrequency","ch","scoreChartOptions","responsive","maintainAspectRatio","plugins","legend","display","scales","grid","ticks","stepSize","beginAtZero","passedTestCasesBarChartOptions","exerciseChoicesBarChartOptions","indexAxis","scoreChartDatasetSettings","backgroundColor","maxBarThickness","exerciseChoiceDatasetSettings","reportSettings","samePositionSlotTypes","samePositionExercises","otherProgrammingExercises","maxTestcases","tokens","slotNumber","matchPassedTestCases","matchPassedTestCase","matchFailedTestCases","matchSelectedChoices","cId","passedTests","testcaseIndex","assessment_progress","FULLY_ASSESSED","divisor","current_slot_cursor","getExerciseListFromParticipations","ALL_FIELDS","MAT_AND_SCORES","FULL_NAME_AND_SCORES","getCustomReportPreset","LOCAL_STORAGE_SETTINGS_KEY","CUSTOM_SETTINGS_KEY","settingsAsJson","settings","CSV","apiCallPromise","getReportData","formatDataForReportType","downloadReportFile","PDF","hasNullishScore","hasAnswer","participationStateIcons","PARTIALLY_ASSESSED","assessmentStateIcons","VISITED_INSIGHTS_TOUR_KEY","CsvParticipationDownloader","EventParticipationSlotScoreRenderer","EventParticipationSlotCompletionRenderer","EventParticipationEmailRenderer","EventParticipationStateRenderer","EventParticipationAssessmentStateRenderer","EventParticipationScoreRenderer","refreshData","allowEditParticipations","setDataRefreshInterval","runningSlotsCheckFn","refreshHandle","showThereAreUnpublishedResultsBanner","showRestrictedModeBanner","showThereArePendingAssessmentsBanner","showAllAssessmentsPublishedBanner","areAllParticipationsFullyAssessed","interval","visibility","getSelectedNodes","deselectAllRows","deselectAll","colDef","onOpenAssessmentEditorDialog","refreshCells","onCloseSelectedExams","applicableParticipationsIds","dispatchParticipationsUpdate","onOpenSelectedExams","reOpen","openExams","onUndoParticipationTurnIn","undoTurnIn","begin1","begin2","defaultData","thereAreUnpublishedAssessments","participationsData","currentSlotCursor","remainingCount","processedExercises","highlightedSolutionIds","exercisePaginatedSolutions","getUserPosition","reputation","lastPageNumber","pageNumbers","pageSize","_component_Bar","_component_ExerciseWithStats","tabsAsSelectableOptions","scoreFrequencyChartData","ExamStatsTabs","OVERALL","EXERCISES","getSlotsContaining","selectedChoicesFrequencyChartData","programmingExerciseScoreFrequencyChartData","programmingExerciseScoresFrequency","isClozeExercise","clozeSubExercisesChoicesFrequencyChartData","subExerciseData","Bar","subExerciseChoiceFrequency","datasets","ExerciseWithStats","_component_GoogleLogin","loginAttemptWithUnauthorizedEmailAddress","onLogin","disableLogin","showIcons","callbacks","onFinish","onTourFinish","loadingLogin","token","access_token","convertToken","getUserData","onLoginAttemptWithUnauthorizedEmailAddress","redirectToDemoPage","redirectUrl","VUE_APP_DEMO_REDIRECT_URL","Vue3GoogleOauth","isAuthenticated","go","onFileUploadClick","onCreate","alert","courseListBreadCrumb","courseDashBoardBreadCrumb","courseDashBoardBreadCrumbs","examsListBreadCrumbs","practicesListBreadCrumbs","examParticipationBreadCrumbs","courseTreeBreadCrumbs","courseTreeNodeBreadCrumbs","practiceParticipationBreadCrumbs","submissionReviewBreadCrumbs","practiceReviewBreadCrumbs","examAssessmentBreadCrumbs","exerciseThreadsBreadCrumbs","leaderboardBreadCrumbs","studentFavoritesBreadCrumbs","exerciseSolutionThreadBreadCrumbs","hasPrivilegesOverRouteCourse","privilegedRouteName","unprivilegedRouteName","courseListBeforeGuard","exerciseSolutionThreadBeforeGuard","courseTreeNodeDetailBeforeGuard","courseTreeBeforeGuard","courseBeforeGuard","routes","MainStudent","hideBreadcrumbs","Login","beforeEnter","CourseEnrollment","MainTeacher","teacherRoute","CourseList","requireTeacher","CourseCreationForm","unprivilegedRedirect","CourseTree","NodeDetail","CoursePermissions","CourseInsights","CourseIntegrations","CourseExercises","CourseExams","EventEditor","EventParticipationsMonitor","allowEdit","EventStats","EventParticipationFull","CourseExerciseSolutionThreads","DetailExerciseSolutionThreads","hideUserInfoFromNav","GamificationLeaderboard","FavoriteContentsList","ExerciseSolutionThread","ExamPreview","EventParticipationPage","PageNotFound","router","scrollBehavior","savedPosition","beforeEach","DEFAULT_UNPRIVILEGED_REDIRECT_ROUTE","redirectRoute","afterEach","courseIdMixin","nodeMixin","fileViewerMixin","source","arrayBufferSource","downloadNodeFile","self","fileArrayBuffer","nodeIdMixin","eventIdMixin","texMixin","dirtyTex","blockingDialogMixin","blockingDialogPromise","mediaQueryMixin","adComponentMixin","ads1Code","ads2Code","loadingMixin","onSuccess","savingMixin","scrollMixin","leading","fromTop","scrollTop","fromBottom","courseFeatureMixin","hasFeatures","features","coursePrivilegeMixin","requiredPrivilegesList","myPrivileges","userCoursePrivileges","containerId","opaque","resize","dragMouseDown","container","overlayHeight","overlayWidth","positions","clientX","clientY","movementX","movementY","onmousemove","elementDrag","onmouseup","closeDragElement","resX","draggableContainer","offsetLeft","resY","offsetTop","offsetWidth","offsetHeight","overlayStyle","filterUrlQuery","normalizedResponseData","exportCourseExercises","unlockExercise","heartbeatExercise","addTagToExercise","public","removeTagFromExercise","testProgrammingExerciseSolution","getExerciseChoices","createExerciseChoice","updateExerciseChoice","deleteExerciseChoice","deleteExerciseTestCase","downloadExerciseTestCaseAttachment","createExerciseSubExercise","updateExerciseSubExercise","subExerciseId","deleteExerciseSubExercise","createExerciseTestCase","updateExerciseTestCase","getExerciseSolutionsByExercise","voteExerciseSolution","_component_Notification","_component_AppBar","_component_GamificationContextPanel","_component_SideBar","_component_ErrorView","_component_SnackBar","_showSuccessFeedback","customSuccessFeedbackMessage","showAppBar","showCollapseSideBarButton","showSidebar","showMobileSidebarButton","onToggleSidebarCollapsed","onToggleCollapseSidebar","onToggleMobileSidebar","showHelpCenterButton","showLocaleSelector","sidebarCollapsed","onLogout","sticky","currentCourseName","initializing","initializingSidebar","isTeacherRoute","leaderboard_position","hasAnyPrivilegesOrIsTeacher","errorNotificationData","showFooter","_component_AnimatedIcon","hovering","onMouseover","onMouseleave","footer","DESKTOP_SIDEBAR_WIDTH_EXPANDED","useMetaStore","desktopSidebarWidth","hoverHandle","$i18n","availableLocales","onLocaleChange","SELECTED_LOCALE_KEY","deafault","moreHorizontalPadding","LocaleSelector","hasCustomMessage","_component_CircularProgress","_component_GamificationBadge","sortedGoals","goal","getNextLevel","requirements","requirement","loadingProgressByGoalId","getActionCount","displayType","sideLength","g","levels","level_value","getPercentageRequirementProgress","CircularProgress","GamificationBadge","SIDEBAR_COLLASPED_LOCALSTORAGE","initStore","sidebarCollapsedLocalStorage","Notification","SideBar","AppBar","SnackBar","ErrorView","GamificationContextPanel","redirectTo","typesetTex","showUnsavedChangesNotification","MathJax","typeset","courseListRoute","dev","interceptors","use","app","App","directive","clientId","duration","autoSetContainer","appendToBody","mount","dsn","routingInstrumentation","tracingOrigins","tracesSampleRate","logErrors","beforeSend","IGNORED_MESSAGES","_component_highlightjs","setDark","dark","useDefault","isTruncated","autodetect","processedValue","registerLanguage","MAX_COLLAPSED_LENGTH","MAX_EXPANDED_LENGTH","MAX_COLLAPSED_LINES","LOCALSTORAGE_DARK_THEME_KEY","highlightjs","updateDark","storage","isDark","dispatchEvent","CustomEvent","themeTitles","activeTheme","removeTheme","removeAttribute","processedValueLinesHeight","firstLines","NOT_ASSESSED","breadcrumb","indeterminate","showText","hideText","helpText","showHandle","setShow","refreshToken","common","setUser","setToken","removeItem","setRefreshToken","grant_type","client_id","client_secret","backend","refresh_token","convertAuthorizationCode","sanitizedFormattedValue","_component_FileViewer","onFileDownload","fileUrl","viewerComponentName","onZoom","isLoading","base64Source","fileViewerProps","setInitialWidth","initialWidth","MAX_INITIAL_WIDTH_RATIO","windowWidth","image","naturalWidth","imageWidth","multiplier","MIN_WIDTH","MAX_WIDTH","FACTOR","_component_vue_pdf_embed","pageCount","onProgress","onRendered","handleDocumentRender","VuePdfEmbed","screen","availWidth","reRendering","showAllPages","lastWidth","evt","pdfRef","sourceAsText","atob","controls","videoSrc","downloadProgress","webkitURL","downloaded","mimeTypePrefix","mimeTypeSuffix","PdfViewer","VideoViewer","SourceCodeViewer","ImageViewer","FallbackFileViewer","FileViewer"],"mappings":"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","file":"js/app.1ea370c5.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({}[chunkId]||chunkId) + \".\" + {\"chunk-2d0a3196\":\"2dc5202b\",\"chunk-2d0a3577\":\"d49dd877\",\"chunk-2d0a40c8\":\"22ba3a35\",\"chunk-2d0a43df\":\"e87f4ee8\",\"chunk-2d0a4bbf\":\"e4b59008\",\"chunk-2d0aa90c\":\"da8bb1b7\",\"chunk-2d0aab07\":\"c5b38383\",\"chunk-2d0abc00\":\"85b6de43\",\"chunk-2d0ae937\":\"1dc20200\",\"chunk-2d0aeb45\":\"30e41831\",\"chunk-2d0af08c\":\"8bfc3337\",\"chunk-2d0afa49\":\"8be77e90\",\"chunk-2d0b1fd5\":\"de62ab2d\",\"chunk-2d0b21d7\":\"80421c11\",\"chunk-2d0b2762\":\"ade1bc3f\",\"chunk-2d0b2b36\":\"25166468\",\"chunk-2d0b6187\":\"cad2285f\",\"chunk-2d0ba136\":\"f4db86fb\",\"chunk-2d0bb267\":\"b7fee88c\",\"chunk-2d0bcec1\":\"9387af57\",\"chunk-2d0bdf38\":\"f3f42b2b\",\"chunk-2d0bff92\":\"18872557\",\"chunk-2d0c0494\":\"77dd28fa\",\"chunk-2d0c0881\":\"a5f0abb4\",\"chunk-2d0c0a09\":\"5859b254\",\"chunk-2d0c1ed0\":\"7fc4eb72\",\"chunk-2d0c4313\":\"44c897a0\",\"chunk-2d0c46d1\":\"e54af410\",\"chunk-2d0c4a95\":\"de560299\",\"chunk-2d0c512b\":\"d14ea2cb\",\"chunk-2d0c86e3\":\"8426e8c0\",\"chunk-2d0c8f4c\":\"fd54a813\",\"chunk-2d0cf16e\":\"ca69e096\",\"chunk-2d0d056d\":\"5f8e5612\",\"chunk-2d0d0645\":\"332defb0\",\"chunk-2d0d2f22\":\"8c085b83\",\"chunk-2d0d61fd\":\"e655ebd2\",\"chunk-2d0d69ad\":\"39dc5677\",\"chunk-2d0d7e63\":\"211649e0\",\"chunk-2d0dda4e\":\"c83fb4ec\",\"chunk-2d0de971\":\"53808090\",\"chunk-2d0e1b57\":\"410577ab\",\"chunk-2d0e1fbe\":\"fb479130\",\"chunk-2d0e22d6\":\"e9258420\",\"chunk-2d0e4fe5\":\"c808ba71\",\"chunk-2d0e542a\":\"d4c2210e\",\"chunk-2d0e57ec\":\"abe5dc3a\",\"chunk-2d0e5b34\":\"9cdfc939\",\"chunk-2d0e6553\":\"1db13875\",\"chunk-2d0e6c86\":\"d556fc8b\",\"chunk-2d0ea098\":\"1c1a63b4\",\"chunk-2d0f0a11\":\"9f75f0ff\",\"chunk-2d208ac5\":\"1b947dcc\",\"chunk-2d208bdf\":\"6b8d45bf\",\"chunk-2d209408\":\"37ced34d\",\"chunk-2d20eff5\":\"6f8ae760\",\"chunk-2d20f745\":\"2b072301\",\"chunk-2d20ff23\":\"9aa317e8\",\"chunk-2d2138c7\":\"09676ac5\",\"chunk-2d213b15\":\"0d6f1e84\",\"chunk-2d216214\":\"481a199e\",\"chunk-2d216f3b\":\"06a226d7\",\"chunk-2d217e5b\":\"f64c3699\",\"chunk-2d21ab79\":\"887c1da8\",\"chunk-2d21b84a\":\"14fdfd50\",\"chunk-2d21dcd2\":\"7e8363ab\",\"chunk-2d21f327\":\"d4a7a131\",\"chunk-2d2214b3\":\"09d0507d\",\"chunk-2d221799\":\"9ae3b728\",\"chunk-2d221814\":\"c6889716\",\"chunk-2d221a34\":\"a72781ab\",\"chunk-2d22502a\":\"8f7c7879\",\"chunk-2d226775\":\"bd4cab4e\",\"chunk-2d228ca6\":\"7b3f5c28\",\"chunk-2d229411\":\"a80679fe\",\"chunk-2d2295e9\":\"da2ae697\",\"chunk-2d22c171\":\"dbd4c691\",\"chunk-2d22c2b8\":\"29707b7f\",\"chunk-2d22c533\":\"8445824f\",\"chunk-2d22ca58\":\"5a3d60f1\",\"chunk-2d2311f7\":\"aae84ba6\",\"chunk-2d2371be\":\"b1f97ec8\",\"chunk-2d237ee7\":\"a47eae40\",\"chunk-2d238465\":\"7c7aca0e\",\"chunk-59f6d71c\":\"594df214\",\"chunk-59fbf0fa\":\"ea228c4a\",\"chunk-5a25bc14\":\"54abce37\",\"chunk-7532b3ea\":\"d1b6d9b4\",\"chunk-f8594e66\":\"2a3793fb\"}[chunkId] + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([4,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","// strips html off the given string as chart.js doesn't support html in labels,\n// and breaks longer texts into multiple lines\nexport const makeLabelText = (text: string): string | string[] => {\n\tconst processedText = text\n\t\t.replace(/(<([^>]+)>)/gi, \"\")\n\t\t.replace(/</g, \"<\")\n\t\t.replace(/>/g, \">\")\n\t\t.replace(/&/g, \"&\");\n\n\tconst MAX_LINE_LENGTH = 100;\n\n\tconst LINE_LENGTH =\n\t\tprocessedText.length > MAX_LINE_LENGTH || processedText.length < MAX_LINE_LENGTH / 1.5\n\t\t\t? MAX_LINE_LENGTH\n\t\t\t: Math.ceil(processedText.length / 2);\n\n\tif (processedText.length < LINE_LENGTH) {\n\t\treturn processedText;\n\t}\n\t// try to break at a point that makes the lines balanced in length\n\t// and break when encountering a space to avoid warping mid-word\n\tconst breakPivot =\n\t\tprocessedText.length > MAX_LINE_LENGTH * 2\n\t\t\t? LINE_LENGTH\n\t\t\t: Math.floor(processedText.length / 2);\n\tconst breakFirstLineAt = findNearestSpace(processedText, breakPivot);\n\n\tconst remaining = processedText.slice(breakFirstLineAt);\n\n\tif (remaining.length <= LINE_LENGTH) {\n\t\t// two lines are enough, no need to break text into a third line\n\t\treturn [processedText.slice(0, breakFirstLineAt), remaining];\n\t}\n\n\tconst breakSecondLineAt = findNearestSpace(remaining, LINE_LENGTH);\n\n\treturn [\n\t\tprocessedText.slice(0, breakFirstLineAt),\n\t\tremaining.slice(0, breakSecondLineAt),\n\t\tremaining.slice(breakSecondLineAt, LINE_LENGTH + breakSecondLineAt) +\n\t\t\t(remaining.slice(breakSecondLineAt).length > LINE_LENGTH ? \"...\" : \"\"),\n\t];\n};\n\nconst findNearestSpace = (text: string, index: number): number => {\n\tlet i = 0;\n\twhile (i < text.length) {\n\t\tif (text.charAt(index - i) === \" \") {\n\t\t\treturn index - i;\n\t\t}\n\t\tif (text.charAt(index + i) === \" \") {\n\t\t\treturn index + i;\n\t\t}\n\t\ti++;\n\t}\n\treturn -1;\n};\n","import { resolveDynamicComponent as _resolveDynamicComponent, mergeProps as _mergeProps, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createBlock(_resolveDynamicComponent(_ctx.componentName), _mergeProps(_ctx.$props, {\n onEditNode: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('editNode', $event))),\n onDeleteNode: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$emit('deleteNode', $event))),\n onLoadChildren: _cache[2] || (_cache[2] = ($event: any) => (_ctx.$emit('loadChildren', $event))),\n onLoadComments: _cache[3] || (_cache[3] = ($event: any) => (_ctx.$emit('loadComments', $event)))\n }), null, 16))\n}","\nimport { CourseTreeNode } from \"@/models\";\nimport { defineComponent, PropType, defineAsyncComponent } from \"@vue/runtime-core\";\nimport { nodeEmits, nodeProps } from \"../shared\";\n// import FileNode from \"./FileNode.vue\";\n// import TopicNode from \"./TopicNode.vue\";\n// import LessonNode from \"./LessonNode.vue\";\nexport default defineComponent({\n\tname: \"CourseTreeNode\",\n\tprops: {\n\t\tnode: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\t...nodeProps,\n\t},\n\temits: {\n\t\t...nodeEmits,\n\t},\n\tbeforeCreate() {\n\t\t// dynamically import specialized components to prevent circular imports\n\n\t\t(this.$options.components as any).LessonNode = defineAsyncComponent(\n\t\t\t() => import(\"./LessonNode.vue\"),\n\t\t);\n\n\t\t(this.$options.components as any).TopicNode = defineAsyncComponent(\n\t\t\t() => import(\"./TopicNode.vue\"),\n\t\t);\n\n\t\t(this.$options.components as any).FileNode = defineAsyncComponent(\n\t\t\t() => import(\"./FileNode.vue\"),\n\t\t);\n\n\t\t(this.$options.components as any).AnnouncementNode = defineAsyncComponent(\n\t\t\t() => import(\"./AnnouncementNode.vue\"),\n\t\t);\n\n\t\t(this.$options.components as any).PollNode = defineAsyncComponent(\n\t\t\t() => import(\"./PollNode.vue\"),\n\t\t);\n\t},\n\tmethods: {},\n\tcomputed: {\n\t\tcomponentName(): string {\n\t\t\tconst mapping: Record = {\n\t\t\t\tFileNode: \"FileNode\",\n\t\t\t\tLessonNode: \"LessonNode\",\n\t\t\t\tTopicNode: \"TopicNode\",\n\t\t\t\tAnnouncementNode: \"AnnouncementNode\",\n\t\t\t\tPollNode: \"PollNode\",\n\t\t\t};\n\t\t\treturn mapping[this.node.resourcetype];\n\t\t},\n\t},\n\tcomponents: {},\n\t//components: { FileNode, LessonNode, TopicNode },\n});\n","import { render } from \"./CourseTreeNode.vue?vue&type=template&id=999c7af6&ts=true\"\nimport script from \"./CourseTreeNode.vue?vue&type=script&lang=ts\"\nexport * from \"./CourseTreeNode.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Toggle.vue?vue&type=style&index=0&id=9a8f2360&lang=css\"","module.exports = __webpack_public_path__ + \"img/undraw_teaching_re_g7e3.73e5be70.svg\";","export enum CourseTreeNodeType {\n\tLessonNode = \"LessonNode\",\n\tFileNode = \"FileNode\",\n\tTopicNode = \"TopicNode\",\n\tAnnouncementNode = \"AnnouncementNode\",\n\tPollNode = \"PollNode\",\n}\n\nexport enum LessonNodeState {\n\tDRAFT,\n\tPUBLISHED,\n}\n\nexport enum AnnouncementNodeState {\n\tDRAFT,\n\tPUBLISHED,\n}\n\nexport enum PollNodeState {\n\tDRAFT,\n\tOPEN,\n\tCLOSED,\n}\n\nexport enum ExerciseType {\n\tMULTIPLE_CHOICE_SINGLE_POSSIBLE,\n\tMULTIPLE_CHOICE_MULTIPLE_POSSIBLE,\n\tOPEN_ANSWER,\n\tCOMPLETION,\n\tAGGREGATED,\n\tJS,\n\tATTACHMENT,\n\tC,\n\tPYTHON,\n\t//EXTERNAL_RESOURCE,\n}\n\nexport enum ExerciseTestCaseType {\n\tSHOW_CODE_SHOW_TEXT,\n\tSHOW_TEXT_ONLY,\n\tHIDDEN,\n}\n\nexport enum ExerciseState {\n\tDRAFT,\n\tPRIVATE,\n\tPUBLIC,\n}\n\nexport enum EventType {\n\tSELF_SERVICE_PRACTICE,\n\tIN_CLASS_PRACTICE,\n\tEXAM,\n\tHOME_ASSIGNMENT,\n\tEXTERNAL,\n}\n\nexport enum EventState {\n\tDRAFT,\n\tPLANNED,\n\tOPEN,\n\tCLOSED,\n\tRESTRICTED,\n}\n\nexport enum EventAccessRule {\n\tALLOW_ACCESS,\n\tDENY_ACCESS,\n}\n\nexport enum EventTimeLimitRule {\n\tNO_TIME_LIMIT,\n\tTIME_LIMIT,\n}\n\nexport enum EventTemplateRuleType {\n\tTAG_BASED,\n\tID_BASED,\n\tFULLY_RANDOM,\n}\n\nexport enum EventParticipationState {\n\tIN_PROGRESS,\n\tTURNED_IN,\n\tCLOSED_BY_TEACHER,\n}\n\nexport enum ParticipationAssessmentProgress {\n\tNOT_ASSESSED,\n\tPARTIALLY_ASSESSED,\n\tFULLY_ASSESSED,\n}\n\nexport enum AssessmentVisibility {\n\tDRAFT,\n\tFOR_REVIEW,\n\tPUBLISHED,\n}\n\nexport enum AssessmentSlotState {\n\tNOT_ASSESSED,\n\tASSESSED,\n}\n\nexport enum CoursePrivilege {\n\tUPDATE_COURSE = \"update_course\",\n\tMANAGE_MATERIAL = \"manage_course_tree_nodes\",\n\tACCESS_EXERCISES = \"access_exercises\",\n\tMANAGE_EXERCISES = \"manage_exercises\",\n\tASSESS_PARTICIPATIONS = \"assess_participations\",\n\tMANAGE_EVENTS = \"manage_events\",\n\tMANAGE_EXERCISE_SOLUTIONS = \"manage_exercise_solutions\",\n}\n\nexport enum CourseFeature {\n\tPRACTICE = \"practice\",\n\tEXAM_LIST = \"exam_list\",\n\tMY_EXAMS = \"my_exams\",\n\tMATERIAL = \"material\",\n\tEXERCISE_SOLUTIONS = \"exercise_solutions\",\n\tLEADERBOARD = \"leaderboard\",\n\tBOOKMARKED = \"bookmarked\",\n}\n\nexport enum ExerciseSolutionState {\n\tDRAFT,\n\tSUBMITTED,\n\tAPPROVED,\n\tREJECTED,\n}\n\nexport enum VoteType {\n\tUP_VOTE,\n\tDOWN_VOTE,\n}\n","import { Event, EventTemplateRule, Exercise, ExerciseType } from \".\";\n\nexport enum ExerciseValidationError {\n\tBLANK_TEXT,\n\tNO_CHOICES,\n\tBLANK_CHOICE,\n\tNO_TESTCASES,\n\tNO_SUB_EXERCISES,\n}\n\nexport const getExerciseValidationErrors = (\n\texercise: Exercise,\n): ExerciseValidationError[] => {\n\tconst errors = [] as ExerciseValidationError[];\n\n\tconst et = ExerciseType;\n\tconst err = ExerciseValidationError;\n\n\tif (\n\t\t[\n\t\t\tet.OPEN_ANSWER,\n\t\t\tet.MULTIPLE_CHOICE_MULTIPLE_POSSIBLE,\n\t\t\tet.MULTIPLE_CHOICE_SINGLE_POSSIBLE,\n\t\t].includes(exercise.exercise_type as ExerciseType) &&\n\t\texercise.text.length == 0\n\t) {\n\t\terrors.push(err.BLANK_TEXT);\n\t}\n\n\tif (\n\t\t[et.MULTIPLE_CHOICE_MULTIPLE_POSSIBLE, et.MULTIPLE_CHOICE_SINGLE_POSSIBLE].includes(\n\t\t\texercise.exercise_type as ExerciseType,\n\t\t)\n\t) {\n\t\tif (exercise.choices?.length == 0) {\n\t\t\terrors.push(err.NO_CHOICES);\n\t\t}\n\t\tif (exercise.choices?.some(choice => choice.text.length == 0)) {\n\t\t\terrors.push(err.BLANK_CHOICE);\n\t\t}\n\t}\n\n\treturn errors;\n};\n","import { Exercise, ExerciseChoice, ExerciseTestCase } from \"./interfaces\";\nimport { ExerciseType } from \".\";\n\nexport const multipleChoiceExerciseTypes = [\n\tExerciseType.MULTIPLE_CHOICE_MULTIPLE_POSSIBLE,\n\tExerciseType.MULTIPLE_CHOICE_SINGLE_POSSIBLE,\n];\n\nexport const programmingExerciseTypes = [\n\tExerciseType.JS,\n\tExerciseType.C,\n\tExerciseType.PYTHON,\n];\n\nexport type exerciseChildName = \"choice\" | \"testcase\" | \"sub_exercise\";\nexport type exerciseChildrenName = \"choices\" | \"testcases\" | \"sub_exercises\";\nexport type exerchiseChild = ExerciseChoice | ExerciseTestCase | Exercise;\n\nexport interface exerciseChildNameToChildType {\n\tchoice: ExerciseChoice;\n\ttestcase: ExerciseTestCase;\n\tsub_exercise: Exercise;\n}\n\nexport interface exerciseChildrenNameToChildType {\n\tchoices: ExerciseChoice[];\n\ttestcases: ExerciseTestCase[];\n\tsub_exercises: Exercise[];\n}\n\nexport const exerciseChildrenNames = {\n\tsub_exercise: \"sub_exercises\",\n\ttestcase: \"testcases\",\n\tchoice: \"choices\",\n} as Record;\n\nexport type ProgrammingExerciseType =\n\t| ExerciseType.JS\n\t| ExerciseType.C\n\t| ExerciseType.PYTHON;\n\nexport const programmingExerciseTypeToLanguageId: Record<\n\tProgrammingExerciseType,\n\tstring\n> = {\n\t[ExerciseType.C]: \"c\",\n\t[ExerciseType.JS]: \"typescript\",\n\t[ExerciseType.PYTHON]: \"python\",\n};\n","import {\n\tAnnouncementNode,\n\tEventParticipation,\n\tExerciseTestCase,\n\tFileNode,\n\tLessonNode,\n\tNodeComment,\n\tPollNode,\n\tPollNodeChoice,\n\tTopicNode,\n\tUser,\n} from \"./interfaces\";\nimport {\n\tCourse,\n\tEvent,\n\tEventParticipationSlot,\n\tEventParticipationSlotSubmission,\n\tEventState,\n\tEventTemplate,\n\tEventTemplateRule,\n\tEventTemplateRuleClause,\n\tEventTemplateRuleType,\n\tEventType,\n\tExercise,\n\tExerciseChoice,\n\tExerciseSolution,\n\tExerciseSolutionComment,\n\tExerciseSolutionVote,\n\tExerciseState,\n\tExerciseTestCaseType,\n\tExerciseType,\n\tTag,\n} from \".\";\nimport {\n\tAnnouncementNodeState,\n\tCourseTreeNodeType,\n\tEventAccessRule,\n\tEventParticipationState,\n\tExerciseSolutionState,\n\tLessonNodeState,\n\tPollNodeState,\n\tVoteType,\n} from \"./types\";\n\nexport const getBlankUser = (): User => ({\n\tid: \"\",\n\temail: \"\",\n\tfull_name: \"\",\n\tfirst_name: \"\",\n\tlast_name: \"\",\n\tis_teacher: false,\n\tmat: \"\",\n\tcourse: \"\",\n\tavatar_url: \"\",\n});\n\nexport const getBlankCourse = (): Course => ({\n\tid: \"\",\n\tname: \"\",\n\tprivileges: [],\n});\n\nexport const getBlankExerciseSolution = (\n\tstate: ExerciseSolutionState | undefined,\n\tcontent = \"\",\n): ExerciseSolution => ({\n\tid: \"\",\n\tstate,\n\tcomments: [],\n\t// votes: [],\n\tcontent,\n\tuser: null,\n\tscore: 0,\n\tis_bookmarked: false,\n});\n\nexport const getBlankChoice = (correctness?: number): ExerciseChoice => ({\n\tid: \"\",\n\ttext: \"\",\n\tcorrectness: correctness ?? 0,\n});\n\nexport const getBlankTestCase = (): ExerciseTestCase => ({\n\tid: \"\",\n\ttext: \"\",\n\tcode: \"\",\n\ttestcase_type: ExerciseTestCaseType.SHOW_CODE_SHOW_TEXT,\n\tstdin: \"\",\n\texpected_stdout: \"\",\n});\n\nexport const getBlankExercise = (): Exercise => ({\n\tid: \"\",\n\tlabel: \"\",\n\ttext: \"\",\n\texercise_type: ExerciseType.MULTIPLE_CHOICE_SINGLE_POSSIBLE,\n\tstate: ExerciseState.DRAFT,\n\tall_or_nothing: false,\n\tchoices: [],\n});\n\nexport const getBlankExam = (): Event => ({\n\tid: \"\",\n\tname: \"\",\n\tinstructions: \"\",\n\tbegin_timestamp: null,\n\tend_timestamp: null,\n\tevent_type: EventType.EXAM,\n\tstate: EventState.DRAFT,\n\texercises_shown_at_a_time: 1,\n\tallow_going_back: true,\n\trandomize_rule_order: false,\n\taccess_rule: EventAccessRule.ALLOW_ACCESS,\n\taccess_rule_exceptions: [],\n\ttemplate: { id: \"\", rules: [] },\n\ttime_limit_seconds: null,\n});\n\nexport const getBlankPractice = (): Event => ({\n\tid: \"\",\n\tname: \"\",\n\tinstructions: \"\",\n\tbegin_timestamp: null,\n\tend_timestamp: null,\n\tevent_type: EventType.SELF_SERVICE_PRACTICE,\n\tstate: EventState.OPEN,\n\texercises_shown_at_a_time: null,\n\tallow_going_back: true,\n\trandomize_rule_order: false,\n\ttime_limit_seconds: null,\n});\n\nexport const getBlankEventTemplate = (): EventTemplate => ({\n\tid: \"\",\n\trules: [],\n\tname: \"\",\n});\n\nexport const getBlankEventParticipation = (): EventParticipation => ({\n\tbegin_timestamp: \"\",\n\tevent: getBlankExam(),\n\tid: \"\",\n\tslots: [],\n\tstate: EventParticipationState.IN_PROGRESS,\n\tuser: getBlankUser(),\n\ttime_limit_timestamp: null,\n});\n\nexport const getBlankEventTemplateRule = (\n\trule_type?: EventTemplateRuleType,\n\tinitialAmount?: number,\n): EventTemplateRule => ({\n\tid: \"\",\n\tamount: initialAmount ?? 1,\n\tweight: 1,\n\trule_type,\n});\n\nexport const getBlankTag = (): Tag => ({\n\tid: \"\",\n\tname: \"\",\n});\n\nexport const getBlankTagBasedEventTemplateRuleClause = (\n\ttag?: Tag,\n): EventTemplateRuleClause => ({\n\tid: \"\",\n\ttags: tag ? [tag] : [],\n});\n\nexport const getFakeEventParticipationSlot = (\n\texercise: Exercise,\n): EventParticipationSlot => ({\n\tid: \"\",\n\texercise,\n\tanswer_text: \"\",\n\tselected_choices: [],\n\tsub_slots: [\n\t\t...(exercise.sub_exercises?.map(e => getFakeEventParticipationSlot(e)) ?? []),\n\t],\n});\n\nexport const getEmptySubmission = (): EventParticipationSlotSubmission => ({\n\tselected_choices: [],\n\tanswer_text: \"\",\n\tattachment: undefined,\n});\n\nexport const getVote = (voteType: VoteType): ExerciseSolutionVote => ({\n\tid: \"\",\n\tvote_type: voteType,\n});\n\nexport const getComment = (content: string): ExerciseSolutionComment => ({\n\tid: \"\",\n\tuser: getBlankUser(),\n\tcontent,\n});\n\nexport const getBlankLessonNode = (parentId: string | null): LessonNode => ({\n\tparent_id: parentId,\n\ttitle: \"\",\n\tbody: \"\",\n\tcreated: \"\",\n\tstate: LessonNodeState.DRAFT,\n\tid: \"\",\n\tcomment_count: 0,\n\tresourcetype: CourseTreeNodeType.LessonNode,\n\tmodified: \"\",\n});\n\nexport const getBlankAnnouncementNode = (): AnnouncementNode => ({\n\tid: \"\",\n\tparent_id: null,\n\tbody: \"\",\n\tcreated: \"\",\n\tstate: AnnouncementNodeState.DRAFT,\n\tresourcetype: CourseTreeNodeType.AnnouncementNode,\n\tmodified: \"\",\n});\n\nexport const getBlankPollNode = (): PollNode => ({\n\tchoices: [],\n\tid: \"\",\n\ttext: \"\",\n\tcreated: \"\",\n\tparent_id: null,\n\tstate: PollNodeState.DRAFT,\n\tresourcetype: CourseTreeNodeType.PollNode,\n\tmodified: \"\",\n});\n\nexport const getBlankTopicNode = (parentId: string | null, name = \"\"): TopicNode => ({\n\tparent_id: parentId,\n\tname,\n\tcreated: \"\",\n\tid: \"\",\n\tresourcetype: CourseTreeNodeType.TopicNode,\n\tmodified: \"\",\n});\n\nexport const getBlankFileNode = (parentId: string | null): FileNode => ({\n\tparent_id: parentId,\n\tfile: null,\n\tcreated: \"\",\n\tid: \"\",\n\tmime_type: \"\",\n\tthumbnail: \"\",\n\tresourcetype: CourseTreeNodeType.FileNode,\n\tmodified: \"\",\n});\n\nexport const getBlankCourseTreeNodeComment = (comment: string): NodeComment => ({\n\tcomment,\n\tuser: getBlankUser(),\n\tcreated: \"\",\n\tis_edited: false,\n\tid: \"\",\n});\n\nexport const getBlankPollNodeChoice = (): PollNodeChoice => ({\n\tid: \"\",\n\ttext: \"\",\n});\n","import { getTranslatedString as _ } from \"@/i18n\";\nimport { CourseTreeNode, User } from \"./interfaces\";\nimport { CourseTreeNodeType } from \"./types\";\n\nexport function getCourseTreeNodeTitle(node: CourseTreeNode) {\n\tswitch (node.resourcetype) {\n\t\tcase CourseTreeNodeType.LessonNode:\n\t\t\treturn node.title;\n\t\tcase CourseTreeNodeType.TopicNode:\n\t\t\treturn node.name;\n\t\tcase CourseTreeNodeType.FileNode:\n\t\t\treturn (node.file as { name: string }).name;\n\t\tcase CourseTreeNodeType.AnnouncementNode:\n\t\t\treturn _(\"course_tree.announcement_title\");\n\t\tcase CourseTreeNodeType.PollNode:\n\t\t\treturn _(\"course_tree.poll_title\");\n\t\tdefault:\n\t\t\tthrow new Error(\"getCourseTreeNodeTitle not implemented for \" + node);\n\t}\n}\n\nexport function userMatchesSearch(search: string, user: User) {\n\tconst searchTokens = search.toLowerCase().split(/\\s/);\n\n\tconst fullName = (user?.full_name ?? \"\").toLowerCase().replace(/\\s/g, \"\");\n\tconst email = (user?.email ?? \"\").toLowerCase().replace(/\\s/g, \"\");\n\n\treturn searchTokens.every(t => fullName.includes(t) || email.includes(t));\n}\n","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAACWCAYAAAA8AXHiAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAABgAAAAYADwa0LPAAAEnElEQVR42u3dPWiddRTH8d//XqWKpUlsc2u0QpEOrlqcuggGHB3EQcVFlLYxHcRCCxaSDIKBrk3EF1x0UQR10c1dEAXBQaUUfKnepOYmLmrIcxxCFV8wEHPOeV6+nz0959/75Xlu7s1NJAAAAAAAAAAAAABdVLIXuO7MrdeObN1Y7jHrTck0kb3PXiilfLs0HHsze4+Us2cOf/bINzf/urn/lFQek+l49j4+bGFpODGfvUW0tAdy5vD6o6psUUV3Zv8n+OteXOFhPSLrDwbrL5h0LvvwkYq0eGk4fj57jyi92HFWDg1Gr3ctKkky6dzMYG0+e48ooWGdnlw/X1SeyD50njL3zGD0YvYWISeNGjR7cOPuql99LumG7ENn68JtMeyKZX1bFFFJ2r4ttv3KFXLFmplcP6ZiX2Uftn7a+91izBWrVA9lH9RZtbsvK3NtfUIfdCssD2Yf1Pd4drZIP+3yi1sZV9RzrKPZB/XUK/rUzB6QdG13/0L7vluMCmsq+6DellYmPpPZtHYZV9ue0EeFtT/7oBGI60/Br7y3H3FtIywHxEVYbroeF2E56nJchOWsq3ERVoAuxkVYQboWF2EF6lJchBWsK3ERVoIuxEVYSdoeF2ElanNchJWsrXERVg20MS7Cqom2xUVYNdKmuAirZtoSF2HVUBviIqyaanpchFVjTY6LsGquqXERVgM0MS7CaoimxUVYDdKkuAirYfYirog9CauB/m9cEQiroeoeF2E1WJ3jIqyGq2tchNUCdYyLXza7B6qqXJwZjNay9zBpVKSD2XtIhLVXjmcvINXrDxFxK4QLwoILwoILwoILwoILwoILwoILwoILwoILwoILwoILwoILwoILwoILwoILwoILwoKLmv4EqS0sDSfms7dogu0/VF7msvf4O65YcEFYcEFYcEFYcEFYcEFYcEFYcEFYcEFYcEFYcEFYcFHT9wrLidOTo5BfwtoCJ7IX+Dc1DUvTpWg6ewnsHrdCuCAsuCAsuCAsuCAsuCAsuCAsuCAsuCAsuCAsuCAsuKjpe4Xt/sDq7G1r91dV+Sh7D09cseCCsOCCsOCCsOCCsOCCsOCCsOCCsOCCsOCCsOCCsOCipu8VtvsDq1bpruwdvNU0rHZ/YNWyFwjArRAuCAsuCAsuCAsuCAsuCAsuCAsuCAsuCAsuCAsuCAsuosL6Ofug+MNGxJCosK4GzcFOir6PGBMV1pWgOdiJxTwWMWEV+zBkDnZUrHwQMSckLLPynrrxY0h1Z1v96v2IQSFhLQ/HL0t6J2IW/oPprZd+mLgSMSrs5YZS9Z6XtBk1D/+wKZULUcPCwrq0euBLk52Pmoe/KlbOLq2MfR02L/qAM4dHr8n0ZPTcLjPTq8sr409Hzgx/5X3px7GnJFsQT+YjWJEWBytjJ6MHh1+xrjs1GD3cky5KOpq1Q8tdNtlzy8OJdzOGp4UlSWeO2b5qfeOkij1u0n3Z+7RAJeljs/LG6uSBV97+ovyWtUhtHsjZQyu3W3/fvaZqSmZ3FJWbsndqApP9olK+K+pd3dzqf/Ly6i28fQYAAAAAAAAAAAAgze8tRNw0YyohRwAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMi0xMi0yN1QyMDoyMzoyMSswMDowMKy9MNEAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjItMTItMjdUMjA6MjM6MjErMDA6MDDd4IhtAAAAAElFTkSuQmCC\"","var map = {\n\t\"./announcements\": \"7de2\",\n\t\"./announcements.ts\": \"7de2\",\n\t\"./assessmentStateIcons\": \"d3bd\",\n\t\"./assessmentStateIcons.ts\": \"d3bd\",\n\t\"./classroom.png\": \"8796\",\n\t\"./classroom_sync.png\": \"27c1\",\n\t\"./coursePrivilegeIcons\": \"ac5d\",\n\t\"./coursePrivilegeIcons.ts\": \"ac5d\",\n\t\"./courseTreeNodeTypeIcons\": \"ea21\",\n\t\"./courseTreeNodeTypeIcons.ts\": \"ea21\",\n\t\"./eventStateIcons\": \"2a44\",\n\t\"./eventStateIcons.ts\": \"2a44\",\n\t\"./evo_classroom.png\": \"3e7e\",\n\t\"./exerciseStatesIcons\": \"af55\",\n\t\"./exerciseStatesIcons.ts\": \"af55\",\n\t\"./exerciseTestCaseTypeIcons\": \"612c\",\n\t\"./exerciseTestCaseTypeIcons.ts\": \"612c\",\n\t\"./exerciseTypesIcons\": \"dad4\",\n\t\"./exerciseTypesIcons.ts\": \"dad4\",\n\t\"./google.png\": \"cebc\",\n\t\"./hero-bg.png\": \"9bda\",\n\t\"./hero/undraw_6.svg\": \"893b\",\n\t\"./hero/undraw_education_f8ru.svg\": \"709d\",\n\t\"./hero/undraw_teaching_re_g7e3.svg\": \"054d\",\n\t\"./icons/json_evo.png\": \"6e71\",\n\t\"./icons/moodle.png\": \"f114\",\n\t\"./logo.png\": \"cf05\",\n\t\"./participationStateIcons\": \"1954\",\n\t\"./participationStateIcons.ts\": \"1954\",\n\t\"./thumbnails/archive-2.png\": \"284f\",\n\t\"./thumbnails/archive.png\": \"e24e\",\n\t\"./thumbnails/code.png\": \"bfc5\",\n\t\"./thumbnails/text-2.png\": \"12a7\",\n\t\"./thumbnails/text.png\": \"1442\",\n\t\"./thumbnails/video.png\": \"5544\",\n\t\"./unipi.png\": \"ca71\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"1771\";","import { EventParticipationState } from \"@/models\";\n\nexport const icons = {\n\t[EventParticipationState.IN_PROGRESS]: [\"remove\"],\n\t[EventParticipationState.TURNED_IN]: [\"assignment_turned_in\"],\n\t[EventParticipationState.CLOSED_BY_TEACHER]: [\"block\"],\n};\n","import {\n\tCourse,\n\tEventTemplateRule,\n\tTag,\n\tEvent,\n\tEventParticipation,\n\tGamificationContext,\n\tCourseExamParticipationReport,\n} from \"@/models\";\nimport axios from \"axios\";\nimport { convertEventTemplateRules } from \"./utils\";\n\nexport async function getCourses(): Promise {\n\tconst response = await axios.get(`/courses/`);\n\treturn response?.data ?? [];\n}\n\nexport async function manageSelfCourseEnrollment(\n\tcourseId: string,\n\tremove: boolean,\n): Promise {\n\tconst method = remove ? \"delete\" : \"put\";\n\tconst response = await axios[method](`/courses/${courseId}/my_enrollment/`);\n\treturn response.data;\n}\n\nexport async function setCourseBookmark(\n\tcourseId: string,\n\tremove: boolean,\n): Promise {\n\tconst method = remove ? \"delete\" : \"put\";\n\tconst response = await axios[method](`/courses/${courseId}/bookmark/`);\n\treturn response.data;\n}\n\nexport async function getCourseParticipationReport(\n\tcourseId: string,\n): Promise {\n\tconst response = await axios.get(`/courses/${courseId}/participation_report/`);\n\treturn response.data;\n}\n\nexport async function getCourseGamificationContext(\n\tcourseId: string,\n): Promise {\n\tconst response = await axios.get(`/courses/${courseId}/gamification_context/`);\n\treturn response.data;\n}\n\nexport async function getCourseUnstartedPracticeEvents(\n\tcourseId: string,\n): Promise {\n\t// TODO make action for this\n\tconst response = await axios.get(`/courses/${courseId}/unstarted_practice_events/`);\n\n\tif (response.data.length > 0) {\n\t\tconst event = response.data[0] as Event; // currently can only have one unstarted event\n\t\tconst processedRules = convertEventTemplateRules(\n\t\t\tevent.template?.rules as EventTemplateRule[],\n\t\t);\n\n\t\tconst convertedEvent = {\n\t\t\t...event,\n\t\t\ttemplate: {\n\t\t\t\t...event.template,\n\t\t\t\trules: processedRules,\n\t\t\t},\n\t\t} as Event;\n\n\t\treturn [convertedEvent];\n\t}\n\n\treturn [];\n}\n\nexport async function getCourse(courseId: string): Promise {\n\tconst response = await axios.get(`/courses/${courseId}/`);\n\n\t// const { unstarted_practice_events, ...course } = response.data;\n\t// if (unstarted_practice_events && unstarted_practice_events.length > 0) {\n\t// \tconst event = unstarted_practice_events[0] as Event; // currently can only have one unstarted event\n\t// \tconst processedRules = convertEventTemplateRules(\n\t// \t\tevent.template?.rules as EventTemplateRule[],\n\t// \t);\n\n\t// \tconst convertedEvent = {\n\t// \t\t...event,\n\t// \t\ttemplate: {\n\t// \t\t\t...event.template,\n\t// \t\t\trules: processedRules,\n\t// \t\t},\n\t// \t} as Event;\n\n\t// \treturn { ...course, unstarted_practice_events: [convertedEvent] };\n\t// }\n\n\treturn response.data;\n}\n\nexport async function createCourse(course: Course): Promise {\n\tconst response = await axios.post(`/courses/`, course);\n\treturn response.data;\n}\n\nexport async function getUserCourseParticipations(\n\tcourseId: string,\n\tuserId: string,\n): Promise {\n\tconst response = await axios.get(\n\t\t`/courses/${courseId}/participations/?user_id=${userId}&include_event=true`,\n\t);\n\treturn response.data;\n}\n\nexport async function updateCourse(courseId: string, course: Course): Promise {\n\tconst response = await axios.put(`/courses/${courseId}/`, course);\n\treturn response.data;\n}\n\nexport async function deleteCourse(courseId: string): Promise {\n\tconst response = await axios.delete(`/courses/${courseId}/`);\n\treturn response.data;\n}\n\nexport async function getTags(\n\tcourseId: string,\n\tincludeExerciseCount: boolean,\n): Promise {\n\tconst response = await axios.get(\n\t\t`/courses/${courseId}/tags/${\n\t\t\tincludeExerciseCount ? \"?include_exercise_count=1\" : \"\"\n\t\t}`,\n\t);\n\treturn response.data;\n}\n","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, withKeys as _withKeys, createVNode as _createVNode, withCtx as _withCtx, resolveDirective as _resolveDirective, withDirectives as _withDirectives, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"div\", {\n class: \"md:ml-5 ml-4 mb-auto md:my-auto mt-4 flex rounded-full mr-3 bg-primary bg-opacity-15\",\n style: {\"min-width\":\"2.5rem\",\"max-width\":\"2.5rem\",\"min-height\":\"2.5rem\",\"max-height\":\"2.5rem\"}\n}, [\n /*#__PURE__*/_createElementVNode(\"span\", {\n style: {\"font-size\":\"28px !important\"},\n class: \"m-auto material-icons-outlined text-primary\"\n }, \"file_present\")\n], -1)\nconst _hoisted_2 = {\n key: 1,\n class: \"opacity-0 group-hover:opacity-50 transition-opacity duration-100 ease absolute top-1/2 transform -translate-y-1/2 left-0 text-lg cursor-move drag-handle material-icons-outlined\"\n}\nconst _hoisted_3 = { class: \"flex-col md:flex-row flex w-full py-4 overflow-hidden\" }\nconst _hoisted_4 = {\n key: 0,\n class: \"my-auto overflow-hidden\"\n}\nconst _hoisted_5 = [\"title\"]\nconst _hoisted_6 = { class: \"flex flex-wrap ml-0.5\" }\nconst _hoisted_7 = {\n key: 0,\n class: \"text-sm mr-2\"\n}\nconst _hoisted_8 = {\n key: 1,\n class: \"text-sm text-muted\",\n style: {\"margin-right\":\"3px\"}\n}\nconst _hoisted_9 = { class: \"z-10 mr-2 ml-auto flex items-center group-hover:opacity-100 transition-opacity duration-100 ease opacity-50\" }\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-xl material-icons\" }, \" delete \", -1)\nconst _hoisted_11 = [\"src\"]\nconst _hoisted_12 = [\"src\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_LinearProgress = _resolveComponent(\"LinearProgress\")!\n const _component_Timestamp = _resolveComponent(\"Timestamp\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_CopyToClipboard = _resolveComponent(\"CopyToClipboard\")!\n const _component_FileNodeDetail = _resolveComponent(\"FileNodeDetail\")!\n const _directive_wave = _resolveDirective(\"wave\")!\n\n return (_openBlock(), _createElementBlock(\"div\", null, [\n _createElementVNode(\"div\", {\n tabindex: \"0\",\n class: _normalizeClass([\"relative flex rounded card-border group\", {\n\t\t\t\t'card-hoverable hover-shadow-elevation hover:border-transparent': _ctx.isDraggable,\n\t\t\t}])\n }, [\n (_ctx.loadingFile || _ctx.loadingThumbnail)\n ? (_openBlock(), _createBlock(_component_LinearProgress, {\n key: 0,\n class: \"absolute w-full top-0 left-0 rounded-t-sm\"\n }))\n : _createCommentVNode(\"\", true),\n _hoisted_1,\n (_ctx.isDraggable)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_2, \" drag_indicator \"))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_3, [\n (_ctx.node.file)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createElementVNode(\"h4\", {\n title: _ctx.node.file.name,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.showDetails = true)),\n onKeyup: _cache[1] || (_cache[1] = _withKeys(($event: any) => (_ctx.showDetails = true), [\"enter\"])),\n style: {\"line-height\":\"0.95\",\"white-space\":\"nowrap\",\"overflow\":\"hidden\",\"text-overflow\":\"ellipsis\"},\n class: \"mb-0.5 pr-1 cursor-pointer hover:text-primary hover:underline\"\n }, _toDisplayString(_ctx.node.file.name), 41, _hoisted_5),\n _createElementVNode(\"div\", _hoisted_6, [\n (_ctx.node.creator)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_7, _toDisplayString(_ctx.node.creator.full_name), 1))\n : _createCommentVNode(\"\", true),\n (_ctx.updatedOnDifferentDay)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_8, _toDisplayString(_ctx.$t(\"misc.updated_on\")), 1))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_Timestamp, {\n \"date-only\": true,\n class: \"text-sm text-muted\",\n value: _ctx.node.modified\n }, null, 8, [\"value\"])\n ])\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_9, [\n (_ctx.canEdit)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 0,\n class: \"mr-4\",\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.$emit('deleteNode', _ctx.node))),\n variant: 'icon',\n outline: true,\n tooltip: _ctx.$t('misc.delete')\n }, {\n default: _withCtx(() => [\n _hoisted_10\n ]),\n _: 1\n }, 8, [\"tooltip\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_CopyToClipboard, {\n \"icon-only\": true,\n tooltip: _ctx.$t('exercise_solution.share'),\n value: _ctx.permalink\n }, null, 8, [\"tooltip\", \"value\"])\n ])\n ]),\n _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.showDetails = true)),\n onKeyup: _cache[4] || (_cache[4] = _withKeys(($event: any) => (_ctx.showDetails = true), [\"enter\"])),\n class: \"bg-gray-200 lg:w-56 w-40 cursor-pointer flex rounded-tr-sm rounded-br-sm ml-auto relative overflow-hidden\",\n style: {\"min-height\":\"120px !important\"}\n }, [\n (_ctx.thumbnailPresent)\n ? (_openBlock(), _createElementBlock(\"img\", {\n key: 0,\n class: \"absolute top-0 w-11/12 left-1/2 transform -translate-x-1/2 pointer-events-none\",\n src: _ctx.thumbnailSrc\n }, null, 8, _hoisted_11))\n : (!_ctx.loadingThumbnail)\n ? (_openBlock(), _createElementBlock(\"img\", {\n key: 1,\n style: {\"height\":\"50px !important\",\"margin\":\"auto\"},\n class: \"pointer-events-none opacity-100\",\n src: _ctx.defaultThumbnail\n }, null, 8, _hoisted_12))\n : _createCommentVNode(\"\", true)\n ], 32)), [\n [_directive_wave, { initialOpacity: 0.25 }]\n ])\n ], 2),\n (_ctx.showDetails)\n ? (_openBlock(), _createBlock(_component_FileNodeDetail, {\n key: 0,\n onViewerClose: _cache[5] || (_cache[5] = ($event: any) => (_ctx.showDetails = false)),\n node: _ctx.node\n }, null, 8, [\"node\"]))\n : _createCommentVNode(\"\", true)\n ]))\n}","\nimport Btn from \"@/components/ui/Btn.vue\";\nimport CopyToClipboard from \"@/components/ui/CopyToClipboard.vue\";\nimport LinearProgress from \"@/components/ui/LinearProgress.vue\";\nimport Timestamp from \"@/components/ui/Timestamp.vue\";\nimport { courseIdMixin, nodeMixin } from \"@/mixins\";\nimport { FileNode } from \"@/models\";\nimport { useMainStore } from \"@/stores/mainStore\";\nimport { getDefaultThumbnail, getHumanFileSize, sameDay } from \"@/utils\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport { mapStores } from \"pinia\";\nimport FileNodeDetail from \"../node_detail/FileNodeDetail.vue\";\nimport { nodeEmits, nodeProps } from \"../shared\";\nexport default defineComponent({\n\tname: \"FileNode\",\n\tprops: {\n\t\tnode: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\tloadingFile: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\t...nodeProps,\n\t},\n\temits: { ...nodeEmits },\n\tmixins: [courseIdMixin, nodeMixin],\n\tasync created() {\n\t\tthis.loadingThumbnail = true;\n\t\ttry {\n\t\t\tawait this.mainStore.loadCourseTreeNodeThumbnail({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\tnodeId: this.node.id,\n\t\t\t});\n\t\t\tthis.thumbnailLoaded = true;\n\t\t} finally {\n\t\t\tthis.loadingThumbnail = false;\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tshowDetails: false,\n\t\t\tloadingThumbnail: false,\n\t\t\tthumbnailLoaded: false,\n\t\t};\n\t},\n\tmethods: {},\n\tcomputed: {\n\t\t...mapStores(useMainStore),\n\t\tthumbnailPresent() {\n\t\t\treturn (\n\t\t\t\t!this.loadingThumbnail &&\n\t\t\t\tthis.thumbnailLoaded &&\n\t\t\t\t!!this.mainStore.thumbnailByCourseNodeId[this.node.id]\n\t\t\t);\n\t\t},\n\t\tthumbnailSrc() {\n\t\t\tconst thumbnail = this.mainStore.thumbnailByCourseNodeId[this.node.id];\n\t\t\tif (!thumbnail || !this.thumbnailLoaded) {\n\t\t\t\treturn \"\";\n\t\t\t}\n\t\t\treturn `data:image/jpeg;base64,${thumbnail}`;\n\t\t},\n\t\tdefaultThumbnail() {\n\t\t\treturn getDefaultThumbnail(this.node.mime_type);\n\t\t},\n\t\thumanReadableFileSize() {\n\t\t\treturn getHumanFileSize(this.node.file?.size ?? 0);\n\t\t},\n\t\tupdatedOnDifferentDay() {\n\t\t\treturn !sameDay(new Date(this.node.created), new Date(this.node.modified));\n\t\t},\n\t},\n\tcomponents: { LinearProgress, FileNodeDetail, Timestamp, CopyToClipboard, Btn },\n});\n","import { render } from \"./FileNode.vue?vue&type=template&id=1b971a2e&ts=true\"\nimport script from \"./FileNode.vue?vue&type=script&lang=ts\"\nexport * from \"./FileNode.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { renderSlot as _renderSlot, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, withCtx as _withCtx, createBlock as _createBlock, createVNode as _createVNode, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, resolveDirective as _resolveDirective, withDirectives as _withDirectives } from \"vue\"\n\nconst _hoisted_1 = { class: \"relative\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"material-icons-outlined\"\n}\nconst _hoisted_3 = {\n key: 1,\n class: \"ml-1\"\n}\nconst _hoisted_4 = {\n key: 2,\n class: \"h-full w-0 opacity-30\",\n style: {\"border-width\":\"0.5px\",\"margin-left\":\"10px\",\"margin-right\":\"5px\"}\n}\nconst _hoisted_5 = {\n key: 3,\n class: \"material-icons-outlined -mr-4\"\n}\nconst _hoisted_6 = {\n key: 0,\n class: \"relative\",\n style: {\"width\":\"200%\"}\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_LinearProgress = _resolveComponent(\"LinearProgress\")!\n const _directive_click_outside = _resolveDirective(\"click-outside\")!\n\n return _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_ctx.$slots.activator?.())\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('toggleExpanded')))\n }, [\n _renderSlot(_ctx.$slots, \"activator\")\n ]))\n : (_openBlock(), _createBlock(_component_Btn, {\n key: 1,\n variant: _ctx.label ? 'primary' : 'icon',\n outline: !_ctx.label,\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$emit('toggleExpanded')))\n }, {\n default: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"icon\"),\n (!_ctx.$slots.icon?.())\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_2, _toDisplayString(_ctx.icon), 1))\n : _createCommentVNode(\"\", true),\n (_ctx.label)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_3, _toDisplayString(_ctx.label), 1))\n : _createCommentVNode(\"\", true),\n (_ctx.trailingIcon)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4))\n : _createCommentVNode(\"\", true),\n (_ctx.trailingIcon)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_5, _toDisplayString(_ctx.trailingIcon), 1))\n : _createCommentVNode(\"\", true)\n ]),\n _: 3\n }, 8, [\"variant\", \"outline\"])),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"absolute z-50 overflow-y-auto transition-all duration-100 ease-in transform bg-white mt-1.5 card shadow-popup\", {\n\t\t\t\t'opacity-0 scale-95 invisible max-h-97': !_ctx.expanded,\n\t\t\t\t'max-h-97 opacity-100 scale-100': _ctx.expanded,\n\t\t\t\t'origin-top-left left-0': _ctx.placement === 'left',\n\t\t\t\t'origin-top-right right-0': _ctx.placement === 'right',\n\t\t\t}])\n }, [\n (_ctx.loading)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _createVNode(_component_LinearProgress, { class: \"absolute px-4 -mx-8 -top-4 w-full\" })\n ]))\n : _createCommentVNode(\"\", true),\n _renderSlot(_ctx.$slots, \"default\")\n ], 2)\n ])), [\n [_directive_click_outside, () => (_ctx.expanded ? _ctx.$emit('toggleExpanded') : undefined)]\n ])\n}","\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport Btn from \"./Btn.vue\";\nimport LinearProgress from \"./LinearProgress.vue\";\nexport default defineComponent({\n\tname: \"DropdownMenu\",\n\tprops: {\n\t\ttooltip: {\n\t\t\ttype: String,\n\t\t\tdefault: \"\",\n\t\t},\n\t\tlabel: {\n\t\t\ttype: String,\n\t\t\tdefault: \"\",\n\t\t},\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\tdefault: \"more_vert\",\n\t\t},\n\t\ttrailingIcon: {\n\t\t\ttype: String,\n\t\t\tdefault: \"\",\n\t\t},\n\t\texpanded: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tplacement: {\n\t\t\ttype: String as PropType<\"left\" | \"right\">,\n\t\t\tdefault: \"left\",\n\t\t},\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tmethods: {},\n\tcomputed: {},\n\tcomponents: { Btn, LinearProgress },\n});\n","import { render } from \"./DropdownMenu.vue?vue&type=template&id=0309a8c3&ts=true\"\nimport script from \"./DropdownMenu.vue?vue&type=script&lang=ts\"\nexport * from \"./DropdownMenu.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./MainStudent.vue?vue&type=style&index=0&id=4a0b0c74&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./BreadCrumbs.vue?vue&type=style&index=0&id=79a57964&lang=css\"","import { toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"span\", null, _toDisplayString(_ctx.formattedValue), 1))\n}","\nimport { getFormattedTimestamp } from \"@/utils\";\nimport { defineComponent } from \"@vue/runtime-core\";\n\nexport default defineComponent({\n\tname: \"Timestamp\",\n\tprops: {\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdateOnly: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\treduced: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tcomputed: {\n\t\tformattedValue(): string {\n\t\t\treturn getFormattedTimestamp(this.value, this.dateOnly, this.reduced);\n\t\t},\n\t},\n});\n","import { render } from \"./Timestamp.vue?vue&type=template&id=633677d8&ts=true\"\nimport script from \"./Timestamp.vue?vue&type=script&lang=ts\"\nexport * from \"./Timestamp.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./RadioGroup.vue?vue&type=style&index=0&id=0d37d180&lang=css\"","module.exports = __webpack_public_path__ + \"img/classroom_sync.41c9589e.png\";","module.exports = __webpack_public_path__ + \"img/archive-2.636ab339.png\";","import {\n\tCourseSearchFilter,\n\tEventParticipationSearchFilter,\n\tEventSearchFilter,\n\tExerciseSearchFilter,\n\tExerciseSolutionSearchFilter,\n\tPaginatedData,\n} from \"./interfaces\";\nimport { EventTemplateRule, EventTemplateRuleType, Tag } from \"@/models\";\nimport { useMainStore } from \"@/stores/mainStore\";\n\n// converts a list of tag names to a list of Tag objects\nexport const tagNamesToTags = (names: string[]): Tag[] => {\n\tconst mainStore = useMainStore();\n\treturn names.map(n => mainStore.getTagByName(n));\n};\n// converts a list of tag id's to a list of Tag objects\nexport const tagIdsToTags = (ids: string[]): Tag[] => {\n\tconst mainStore = useMainStore();\n\treturn ids.map(i => mainStore.getTagById(i));\n};\n\nexport const getEventUrlQueryParams = (filters: EventSearchFilter | null): string => {\n\tif (!filters) {\n\t\treturn \"\";\n\t}\n\tlet ret = \"\";\n\tif (typeof filters.event_type !== \"undefined\" || typeof filters.state !== \"undefined\") {\n\t\tret += \"?\";\n\t}\n\tif (typeof filters.event_type !== \"undefined\") {\n\t\tret += `event_type=${filters.event_type}&`;\n\t}\n\tif (typeof filters.state !== \"undefined\") {\n\t\tret += `state=${filters.state}&`;\n\t}\n\treturn ret;\n};\n\nexport const getBlankExerciseSearchFilters = (): ExerciseSearchFilter => ({\n\tlabel: \"\",\n\ttext: \"\",\n\ttags: [] as string[],\n\texercise_types: [],\n\tstates: [],\n});\n\nexport const getBlankCourseSearchFilters = (): CourseSearchFilter => ({\n\tname: \"\",\n\twithPrivileges: false,\n\thidden: false,\n});\n\nexport const isEmptyFilter = (filter: ExerciseSearchFilter): boolean =>\n\tfilter.label.length === 0 &&\n\tfilter.text.length === 0 &&\n\tfilter.exercise_types.length === 0 &&\n\tfilter.states.length === 0 &&\n\tfilter.tags.length === 0;\n\nexport const getExerciseSolutionUrlQueryParams = (\n\tfilters: ExerciseSolutionSearchFilter | null,\n): string => {\n\tif (!filters) {\n\t\treturn \"\";\n\t}\n\tlet ret = \"\";\n\tif (typeof filters.bookmarked !== \"undefined\" || filters.states.length > 0) {\n\t\tret += \"&\";\n\t}\n\n\tif (typeof filters.bookmarked !== \"undefined\") {\n\t\tret += `bookmarked=${JSON.stringify(filters.bookmarked)}&`;\n\t}\n\n\tif (filters.states && filters.states.length > 0) {\n\t\tret += `state=${filters.states.join(\",\")}&`;\n\t}\n\treturn ret;\n};\n\nexport const getEventParticipationUrlQueryParams = (\n\tfilters: EventParticipationSearchFilter | null,\n): string => {\n\tif (!filters) {\n\t\treturn \"\";\n\t}\n\tlet ret = \"\";\n\tif (\n\t\ttypeof filters.bookmarked !== \"undefined\" ||\n\t\ttypeof filters.event_type !== \"undefined\"\n\t) {\n\t\tret += \"&\";\n\t}\n\n\tif (typeof filters.bookmarked !== \"undefined\") {\n\t\tret += `bookmarked=${JSON.stringify(filters.bookmarked)}&`;\n\t}\n\n\tif (typeof filters.event_type !== \"undefined\") {\n\t\tret += `event_type=${filters.event_type}&`;\n\t}\n\treturn ret;\n};\n\nexport const getExerciseUrlQueryParams = (\n\tfilters: ExerciseSearchFilter | null,\n): string => {\n\tif (!filters) {\n\t\treturn \"\";\n\t}\n\tlet ret = \"\";\n\tif (\n\t\t(filters.label?.length ?? 0) > 0 ||\n\t\t(filters.exercise_types?.length ?? 0) > 0 ||\n\t\t(filters.states?.length ?? 0) > 0 ||\n\t\t(filters.tags?.length ?? 0) > 0 ||\n\t\t(filters.text?.length ?? 0) > 0 ||\n\t\ttypeof filters.with_submitted_solutions !== \"undefined\" ||\n\t\ttypeof filters.with_bookmarked_solutions !== \"undefined\" ||\n\t\ttypeof filters.by_popularity !== \"undefined\"\n\t) {\n\t\tret += \"&\";\n\t}\n\n\tif (filters.label || filters.text) {\n\t\tret += `search=${encodeURIComponent(filters.label ?? \"\")} ${encodeURIComponent(\n\t\t\tfilters.text ?? \"\",\n\t\t)}&`;\n\t}\n\n\tif (filters.exercise_types && filters.exercise_types.length > 0) {\n\t\tret += `exercise_type=${filters.exercise_types.join(\",\")}&`;\n\t}\n\n\tif (filters.states && filters.states.length > 0) {\n\t\tret += `state=${filters.states.join(\",\")}&`;\n\t}\n\n\tif (filters.tags && filters.tags.length > 0) {\n\t\tret += `tags=${filters.tags.join(\"&tags=\")}&`;\n\t}\n\n\tif (typeof filters.with_submitted_solutions !== \"undefined\") {\n\t\tret += `with_submitted_solutions=${JSON.stringify(\n\t\t\tfilters.with_submitted_solutions,\n\t\t)}&`;\n\t}\n\n\tif (typeof filters.with_bookmarked_solutions !== \"undefined\") {\n\t\tret += `with_bookmarked_solutions=${JSON.stringify(\n\t\t\tfilters.with_bookmarked_solutions,\n\t\t)}&`;\n\t}\n\n\tif (typeof filters.by_popularity !== \"undefined\") {\n\t\tret += `by_popularity=${JSON.stringify(filters.by_popularity)}&`;\n\t}\n\n\treturn ret;\n};\n\nexport const convertEventTemplateRules = (\n\trules?: EventTemplateRule[],\n): EventTemplateRule[] | undefined => {\n\t// convert tag-based template rules from backend's format (which uses a list of\n\t//ids to represent the field `tags` on EventTemplateRuleClause) to the\n\t// frontend's format, which uses Tag[] for that field\n\tconst processedRules = rules?.map(r => {\n\t\tif (r.rule_type != EventTemplateRuleType.TAG_BASED) {\n\t\t\treturn r;\n\t\t}\n\t\treturn {\n\t\t\t...r,\n\t\t\tclauses: r.clauses?.map(c => ({\n\t\t\t\t...c,\n\t\t\t\t// we're expecting to receive EventTemplateRuleClause, but the server is sending\n\t\t\t\t// {id: string, tags: string[]}, so the conversion is needed here\n\t\t\t\t// ? might fix this by having an EventPayload, EventTemplatePayload, ... interfaces\n\t\t\t\ttags: tagIdsToTags(c.tags as unknown as string[]),\n\t\t\t})),\n\t\t};\n\t});\n\n\treturn processedRules;\n};\n\nexport const isNumeric = (num: any) =>\n\t(typeof num === \"number\" || (typeof num === \"string\" && num.trim() !== \"\")) &&\n\t!isNaN(num as number);\n\nexport const normalizeOptionalStringContainingNumber = (\n\tval: undefined | null | string | number,\n): undefined | null | string | number => {\n\t/**\n\t * Takes in a value that can be either null, undefined, a number, or a string\n\t * If the value is null, undefined, or a string that doesn't describe a number\n\t * (e.g. '2.1'), the value is returned unchanged.\n\t *\n\t * If the value is a string describing a number, the value is returned as a number\n\t */\n\tif (typeof val === \"undefined\") {\n\t\treturn undefined;\n\t}\n\tif (val === null) {\n\t\treturn null;\n\t}\n\n\tconst strVal = String(val);\n\t// if strVal doesn't contain a valid number, return it as is\n\tif (!isNumeric(strVal)) {\n\t\treturn val;\n\t}\n\t// if strVal represents a number, return it as a number\n\treturn parseFloat(strVal);\n};\n\nexport const updatePaginatedData = (\n\texistingData: PaginatedData,\n\tnewData: PaginatedData,\n\tprepend: boolean,\n): PaginatedData => ({\n\t...existingData,\n\t...newData,\n\tdata: [\n\t\t...(prepend ? newData.data : []),\n\t\t...existingData.data,\n\t\t...(prepend ? [] : newData.data),\n\t],\n});\n\nexport const prependToPaginatedData = (\n\tpaginatedData: PaginatedData,\n\t...newElement: T[]\n): PaginatedData => ({\n\t...paginatedData,\n\tdata: [...newElement, ...paginatedData.data],\n\t//count: paginatedData.count + 1,\n});\n\nexport const deleteByIdFromPaginatedData = (\n\tpaginatedData: PaginatedData,\n\t...toDelete: { id: string }[]\n): PaginatedData => ({\n\t...paginatedData,\n\tdata: paginatedData.data.filter(\n\t\td => !toDelete.map(t => String(t.id)).includes(String(d.id)),\n\t),\n});\n\nexport const getEmptyPaginatedData = (): PaginatedData => ({\n\tcount: 0,\n\tdata: [],\n\tisLastPage: true,\n\tpageNumber: 1,\n});\n","import { EventState } from \"@/models\";\n\nexport const icons = {\n\t[EventState.DRAFT]: [\"insert_drive_file\"],\n\t[EventState.PLANNED]: [\"event_available\"],\n\t[EventState.OPEN]: [\"update\"],\n\t[EventState.CLOSED]: [\"block\"],\n\t[EventState.RESTRICTED]: [\"lock\"],\n};\n","import {\n\tCourse,\n\tCourseTreeNode,\n\tCourseTreeNodeType,\n\tFileNode,\n\tNodeComment,\n\tPollNode,\n\tPollNodeChoice,\n\tTopicNode,\n} from \"@/models\";\nimport { forceFileDownload, getFileNameFromResponseHeader } from \"@/utils\";\nimport axios, { AxiosRequestConfig } from \"axios\";\nimport { convertPaginatedResponseToLocalPaginatedData } from \"./converters\";\nimport { BackendPaginatedResponse, PaginatedData } from \"./interfaces\";\n\nexport async function getCourseTopLevelNodes(\n\tcourseId: string,\n\tpageNumber: number,\n): Promise> {\n\tconst response = await axios.get(\n\t\t`/courses/${courseId}/nodes/?page=${pageNumber}&top_level=true`,\n\t);\n\treturn convertPaginatedResponseToLocalPaginatedData(response.data, pageNumber);\n}\n\nexport async function getCourseTopicNodes(courseId: string): Promise {\n\tconst response = await axios.get(\n\t\t`/courses/${courseId}/nodes/?page=1&resourcetype=${CourseTreeNodeType.TopicNode}&size=9999999`,\n\t);\n\treturn convertPaginatedResponseToLocalPaginatedData(\n\t\tresponse.data as BackendPaginatedResponse,\n\t\t1,\n\t).data;\n}\n\nexport async function getCourseNode(\n\tcourseId: string,\n\tnodeId: string,\n): Promise {\n\tconst response = await axios.get(`/courses/${courseId}/nodes/${nodeId}/`);\n\treturn response.data;\n}\n\nexport async function getNodeChildren(\n\tcourseId: string,\n\tnodeId: string,\n\tpageNumber: number,\n): Promise> {\n\tconst response = await axios.get(\n\t\t`/courses/${courseId}/nodes/${nodeId}/children/?page=${pageNumber}`,\n\t);\n\treturn convertPaginatedResponseToLocalPaginatedData(response.data, pageNumber);\n}\n\nexport async function moveCourseNode(\n\tcourseId: string,\n\tnodeId: string,\n\ttargetId: string,\n\tposition: \"first-child\" | \"last-child\" | \"left\" | \"right\",\n) {\n\tconst response = await axios.post(\n\t\t`/courses/${courseId}/nodes/${nodeId}/move/?target=${targetId}&position=${position}`,\n\t);\n\treturn response.data;\n}\n\nexport async function getCourseRootNodeId(courseId: string): Promise {\n\tconst response = await axios.get(`/courses/${courseId}/nodes/root_id/`);\n\treturn response.data;\n}\n\nexport async function createCourseNode(\n\tcourseId: string,\n\tnode: CourseTreeNode,\n\tconfig?: AxiosRequestConfig,\n): Promise {\n\t// use FormData if uploading a file together with the rest of the payload\n\tif (node.resourcetype === CourseTreeNodeType.FileNode && node.file !== null) {\n\t\tconst formData = new FormData();\n\t\tObject.entries(node).forEach(([k, v]) => formData.append(k, v));\n\t\tconst response = await axios.post(`/courses/${courseId}/nodes/`, formData, config);\n\t\treturn response.data;\n\t}\n\tconst response = await axios.post(`/courses/${courseId}/nodes/`, node, config);\n\treturn response.data;\n}\n\nexport async function partialUpdateCourseNode(\n\tcourseId: string,\n\tnodeId: string,\n\tpayload: Partial,\n\tfireIntegrationEvent?: boolean,\n): Promise {\n\tconst response = await axios.patch(\n\t\t`/courses/${courseId}/nodes/${nodeId}/${\n\t\t\ttypeof fireIntegrationEvent === \"boolean\"\n\t\t\t\t? `?fire_integration_event=${JSON.stringify(fireIntegrationEvent)}`\n\t\t\t\t: \"\"\n\t\t}`,\n\t\tpayload,\n\t);\n\treturn response.data;\n}\n\nexport async function uploadNodeFile(\n\tcourseId: string,\n\tnodeId: string,\n\tfile: Blob,\n): Promise {\n\tconst formData = new FormData();\n\tformData.append(\"file\", file);\n\tconst response = await axios.patch(`/courses/${courseId}/nodes/${nodeId}/`, formData);\n\treturn response.data;\n}\n\nexport async function deleteCourseNode(courseId: string, nodeId: string): Promise {\n\tconst response = await axios.delete(`/courses/${courseId}/nodes/${nodeId}/`);\n\treturn response.data;\n}\n\nexport function getFileNodeUrl(courseId: string, nodeId: string): string {\n\treturn `${axios.defaults.baseURL}/courses/${courseId}/nodes/${nodeId}/download/`;\n}\n\nexport async function downloadFileNode(\n\turl: string,\n\tonDownloadProgress?: (e: any) => void,\n): Promise {\n\tconst response = await axios.get(url, {\n\t\tresponseType: \"arraybuffer\",\n\t\t...(onDownloadProgress ? { onDownloadProgress } : {}),\n\t});\n\treturn response.data;\n}\n\nexport async function downloadFileNodeAsAttachment(\n\tcourseId: string,\n\tnodeId: string,\n): Promise {\n\tconst response = await axios.get(`/courses/${courseId}/nodes/${nodeId}/download/`, {\n\t\tresponseType: \"arraybuffer\",\n\t});\n\tconst fileName = getFileNameFromResponseHeader(response.headers[\"content-disposition\"]);\n\t// (\n\t// \tresponse.headers[\"content-disposition\"].split(/.*filename=(.*)/)[1] ?? \"filename\"\n\t// ).replace(/\"/g, \"\");\n\tforceFileDownload(response, fileName);\n}\n\nexport async function getFileNodeThumbnail(\n\tcourseId: string,\n\tnodeId: string,\n): Promise {\n\tconst response = await axios.get(`/courses/${courseId}/nodes/${nodeId}/thumbnail/`, {\n\t\tresponseType: \"arraybuffer\",\n\t});\n\treturn response.data;\n}\n\nexport async function getCourseNodeComments(\n\tcourseId: string,\n\tnodeId: string,\n): Promise {\n\tconst response = await axios.get(`/courses/${courseId}/nodes/${nodeId}/comments/`);\n\treturn response.data;\n}\n\nexport async function createCourseNodeComment(\n\tcourseId: string,\n\tnodeId: string,\n\tcomment: NodeComment,\n): Promise {\n\tconst response = await axios.post(\n\t\t`/courses/${courseId}/nodes/${nodeId}/comments/`,\n\t\tcomment,\n\t);\n\treturn response.data;\n}\n\nexport async function deleteCourseNodeComment(\n\tcourseId: string,\n\tnodeId: string,\n\tcommentId: string,\n): Promise {\n\tconst response = await axios.delete(\n\t\t`/courses/${courseId}/nodes/${nodeId}/comments/${commentId}/`,\n\t);\n\treturn response.data;\n}\n\nexport async function createPollNodeChoice(\n\tcourseId: string,\n\tnodeId: string,\n\tchoice: PollNodeChoice,\n): Promise {\n\tconst response = await axios.post(\n\t\t`/courses/${courseId}/nodes/${nodeId}/choices/`,\n\t\tchoice,\n\t);\n\treturn response.data;\n}\n\nexport async function partialUpdatePollNodeChoice(\n\tcourseId: string,\n\tnodeId: string,\n\tchoiceId: string,\n\tchanges: Partial,\n): Promise {\n\tconst response = await axios.patch(\n\t\t`/courses/${courseId}/nodes/${nodeId}/choices/${choiceId}/`,\n\t\tchanges,\n\t);\n\treturn response.data;\n}\n\nexport async function votePollNodeChoice(\n\tcourseId: string,\n\tnodeId: string,\n\tchoiceId: string,\n\tremove: boolean,\n): Promise {\n\tconst response = await (remove ? axios.delete : axios.put)(\n\t\t`/courses/${courseId}/nodes/${nodeId}/choices/${choiceId}/vote/`,\n\t);\n\treturn response.data;\n}\n\n// export async function unvotePollNodeChoice(\n// \tcourseId: string,\n// \tnodeId: string,\n// \tchoiceId: string,\n// ): Promise {\n// \tconst response = await axios.delete(\n// \t\t`/courses/${courseId}/nodes/${nodeId}/choices/${choiceId}/vote/`,\n// \t);\n// \treturn response.data;\n// }\n\nexport async function deletePollNodeChoice(\n\tcourseId: string,\n\tnodeId: string,\n\tchoiceId: string,\n): Promise {\n\tconst response = await axios.delete(\n\t\t`/courses/${courseId}/nodes/${nodeId}/choices/${choiceId}/`,\n\t);\n\treturn response.data;\n}\n","import {\n\tconvertPaginatedResponseToLocalPaginatedData,\n\tnormalizeIncomingEvent,\n\tnormalizeIncomingEventParticipation,\n\tnormalizeIncomingEventParticipationSlot,\n\tnormalizeIncomingEventTemplate,\n\tnormalizeIncomingEventTemplateRule,\n\tnormalizeIncomingEventTemplateRuleClause,\n} from \"./converters\";\nimport {\n\tBackendPaginatedResponse,\n\tEventParticipationSearchFilter,\n\tEventSearchFilter,\n\tPaginatedData,\n} from \"./interfaces\";\nimport {\n\tCodeExecutionResults,\n\tEvent,\n\tEventParticipation,\n\tEventParticipationSlot,\n\tEventParticipationSlotSubmission,\n\tEventTemplate,\n\tEventTemplateRule,\n\tEventTemplateRuleClause,\n\tEventTemplateRuleType,\n\tExercise,\n} from \"@/models\";\nimport { forceFileDownload, getFileNameFromResponseHeader } from \"@/utils\";\nimport axios from \"axios\";\nimport {\n\tconvertEventTemplateRules,\n\tgetEventParticipationUrlQueryParams,\n\tgetEventUrlQueryParams,\n\ttagIdsToTags,\n\ttagNamesToTags,\n} from \"./utils\";\n\nexport async function getEvents(\n\tcourseId: string,\n\tfilters?: EventSearchFilter,\n): Promise {\n\tconst response = await axios.get(\n\t\t`/courses/${courseId}/events/${getEventUrlQueryParams(filters ?? null)}`,\n\t);\n\treturn (response.data as Event[]).map(e => normalizeIncomingEvent(e));\n}\n\nexport async function getEvent(\n\tcourseId: string,\n\teventId: string,\n\tincludeDetails: boolean,\n): Promise {\n\tconst response = await axios.get(\n\t\t`/courses/${courseId}/events/${eventId}/${\n\t\t\tincludeDetails ? \"?include_event_template_rule_details=true\" : \"\"\n\t\t}`,\n\t);\n\treturn normalizeIncomingEvent(response.data);\n}\n\nexport async function lockEvent(courseId: string, eventId: string): Promise {\n\tconst response = await axios.post(`/courses/${courseId}/events/${eventId}/lock/`);\n\treturn normalizeIncomingEvent(response.data);\n}\n\nexport async function unlockEvent(courseId: string, eventId: string): Promise {\n\tconst response = await axios.post(`/courses/${courseId}/events/${eventId}/unlock/`);\n\treturn response.data;\n}\n\nexport async function heartbeatEvent(courseId: string, eventId: string): Promise {\n\tconst response = await axios.post(`/courses/${courseId}/events/${eventId}/heartbeat/`);\n\treturn response.data;\n}\n\nexport async function getEventTemplate(\n\tcourseId: string,\n\ttemplateId: string,\n): Promise {\n\tconst response = await axios.get(`/courses/${courseId}/templates/${templateId}/`);\n\treturn normalizeIncomingEventTemplate(response.data);\n}\n\nexport async function getEventTemplateRule(\n\tcourseId: string,\n\ttemplateId: string,\n\truleId: string,\n): Promise {\n\tconst response = await axios.get(\n\t\t`/courses/${courseId}/templates/${templateId}/rules/${ruleId}/`,\n\t);\n\t// const rule = response.data as EventTemplateRule;\n\t// const processedRule = convertEventTemplateRules([\n\t// rule,\n\t// ]) as EventTemplateRule[];\n\treturn normalizeIncomingEventTemplateRule(response.data);\n\t//return processedRule[0];\n}\n\nexport async function createEvent(courseId: string, event: Event): Promise {\n\t// if the event contains a template with tag-based rules,\n\t// we need to convert the tag objects to tag ids\n\tconst convertedEvent = {\n\t\t...event,\n\t\t...(event.template\n\t\t\t? {\n\t\t\t\t\ttemplate: {\n\t\t\t\t\t\t...event.template,\n\t\t\t\t\t\trules: event.template.rules.map(r => ({\n\t\t\t\t\t\t\t...r,\n\t\t\t\t\t\t\tclauses: (r.clauses ?? []).map(c => ({\n\t\t\t\t\t\t\t\t...c,\n\t\t\t\t\t\t\t\ttags: c.tags.map(t => t.id),\n\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t})),\n\t\t\t\t\t},\n\t\t\t }\n\t\t\t: {}),\n\t};\n\tconst response = await axios.post(`courses/${courseId}/events/`, convertedEvent);\n\treturn normalizeIncomingEvent(response.data);\n}\n\nexport async function updateEvent(\n\tcourseId: string,\n\teventId: string,\n\tevent: Event,\n): Promise {\n\tconst response = await axios.put(`courses/${courseId}/events/${eventId}/`, event);\n\treturn normalizeIncomingEvent(response.data);\n}\n\nexport async function getEventInstances(\n\tcourseId: string,\n\teventId: string,\n\tamount: number,\n): Promise {\n\tconst response = await axios.get(\n\t\t`courses/${courseId}/events/${eventId}/instances/?amount=${amount}`,\n\t);\n\treturn response.data;\n}\n\nexport async function partialUpdateEvent(\n\tcourseId: string,\n\teventId: string,\n\tchanges: Partial,\n\tfireIntegrationEvent?: boolean,\n): Promise {\n\tconst response = await axios.patch(\n\t\t`courses/${courseId}/events/${eventId}/${\n\t\t\ttypeof fireIntegrationEvent === \"boolean\"\n\t\t\t\t? `?fire_integration_event=${JSON.stringify(fireIntegrationEvent)}`\n\t\t\t\t: \"\"\n\t\t}`,\n\t\tchanges,\n\t);\n\treturn normalizeIncomingEvent(response.data);\n}\n\nexport async function deleteEvent(courseId: string, eventId: string): Promise {\n\tconst response = await axios.delete(`/courses/${courseId}/events/${eventId}/`);\n\treturn response.data;\n}\n\nexport async function getCourseEventParticipations(\n\tcourseId: string,\n\tpageNumber: number,\n\tincludeDetails?: boolean,\n\tincludeEvent?: boolean,\n\tfilter?: EventParticipationSearchFilter,\n): Promise> {\n\tconst response = await axios.get(\n\t\t`/courses/${courseId}/participations/?page=${pageNumber}${\n\t\t\tincludeDetails ? \"&include_details=\" + includeDetails : \"\"\n\t\t}${\n\t\t\tincludeEvent ? \"&include_event=\" + includeEvent : \"\"\n\t\t}${getEventParticipationUrlQueryParams(filter ?? null)}`,\n\t);\n\tconst normalizedData = (\n\t\tresponse.data as BackendPaginatedResponse\n\t).results.map((p: EventParticipation) => normalizeIncomingEventParticipation(p));\n\n\treturn convertPaginatedResponseToLocalPaginatedData(\n\t\t{ ...response.data, results: normalizedData },\n\t\tpageNumber,\n\t);\n}\n\nexport async function getEventParticipations(\n\tcourseId: string,\n\teventId: string,\n\tincludeDetails?: boolean,\n\tforCsv?: boolean,\n): Promise {\n\tconst response = await axios.get(\n\t\t`/courses/${courseId}/events/${eventId}/participations/${\n\t\t\tincludeDetails ? \"?include_details=\" + includeDetails : \"\"\n\t\t}${forCsv ? \"&for_csv=\" + forCsv : \"\"}`,\n\t);\n\treturn response.data.map((p: EventParticipation) =>\n\t\tnormalizeIncomingEventParticipation(p),\n\t);\n}\n\nexport async function getEventParticipation(\n\tcourseId: string,\n\teventId: string,\n\tparticipationId: string,\n): Promise {\n\tconst response = await axios.get(\n\t\t`/courses/${courseId}/events/${eventId}/participations/${participationId}/`,\n\t);\n\treturn normalizeIncomingEventParticipation(response.data);\n}\n\nexport async function createEventTemplateRule(\n\tcourseId: string,\n\ttemplateId: string,\n\trule: EventTemplateRule,\n): Promise {\n\tconst response = await axios.post(\n\t\t`courses/${courseId}/templates/${templateId}/rules/`,\n\t\trule,\n\t);\n\treturn normalizeIncomingEventTemplateRule(response.data);\n}\n\nexport async function updateEventTemplateRule(\n\tcourseId: string,\n\ttemplateId: string,\n\truleId: string,\n\trule: EventTemplateRule,\n): Promise {\n\tconst response = await axios.put(\n\t\t`/courses/${courseId}/templates/${templateId}/rules/${ruleId}/`,\n\t\trule,\n\t);\n\treturn normalizeIncomingEventTemplateRule(response.data);\n}\n\nexport async function partialUpdateEventTemplateRule(\n\tcourseId: string,\n\ttemplateId: string,\n\truleId: string,\n\tchanges: Partial,\n): Promise {\n\tconst response = await axios.put(\n\t\t`/courses/${courseId}/templates/${templateId}/rules/${ruleId}/`,\n\t\tchanges,\n\t);\n\treturn normalizeIncomingEventTemplateRule(response.data);\n}\n\nexport async function deleteEventTemplateRule(\n\tcourseId: string,\n\ttemplateId: string,\n\truleId: string,\n): Promise {\n\tconst response = await axios.delete(\n\t\t`/courses/${courseId}/templates/${templateId}/rules/${ruleId}/`,\n\t);\n\treturn response.data;\n}\n\nexport async function createEventTemplateRuleClause(\n\tcourseId: string,\n\ttemplateId: string,\n\truleId: string,\n\tclause: EventTemplateRuleClause,\n): Promise {\n\t// transform tag name list to tag id list to match backend format\n\tconst payload = {\n\t\t...clause,\n\t\ttags: tagNamesToTags(clause.tags.map(t => t.name)).map(t => t.id),\n\t};\n\tconst response = await axios.post(\n\t\t`courses/${courseId}/templates/${templateId}/rules/${ruleId}/clauses/`,\n\t\tpayload,\n\t);\n\treturn normalizeIncomingEventTemplateRuleClause(response.data);\n}\n\nexport async function updateEventTemplateRuleClause(\n\tcourseId: string,\n\ttemplateId: string,\n\truleId: string,\n\tclause: EventTemplateRuleClause,\n): Promise {\n\tconst payload = {\n\t\t...clause,\n\t\ttags: tagNamesToTags(clause.tags.map(t => t.name)).map(t => t.id),\n\t};\n\tconst response = await axios.put(\n\t\t`courses/${courseId}/templates/${templateId}/rules/${ruleId}/clauses/${clause.id}/`,\n\t\tpayload,\n\t);\n\treturn normalizeIncomingEventTemplateRuleClause(response.data);\n}\n\nexport async function deleteEventTemplateRuleClause(\n\tcourseId: string,\n\ttemplateId: string,\n\truleId: string,\n\tclauseId: string,\n): Promise {\n\tconst response = await axios.delete(\n\t\t`courses/${courseId}/templates/${templateId}/rules/${ruleId}/clauses/${clauseId}/`,\n\t);\n\treturn response.data;\n}\n\nexport async function participateInEvent(\n\tcourseId: string,\n\teventId: string,\n): Promise {\n\tconst response = await axios.post(\n\t\t`/courses/${courseId}/events/${eventId}/participations/?as_student=true`,\n\t);\n\treturn normalizeIncomingEventParticipation(response.data);\n}\n\nexport async function partialUpdateEventParticipation(\n\tcourseId: string,\n\teventId: string,\n\tparticipationId: string,\n\tchanges: Partial,\n): Promise {\n\tconst response = await axios.patch(\n\t\t`/courses/${courseId}/events/${eventId}/participations/${participationId}/`,\n\t\tchanges,\n\t);\n\treturn normalizeIncomingEventParticipation(response.data);\n}\n\nexport async function bulkPartialUpdateEventParticipation(\n\tcourseId: string,\n\teventId: string,\n\tparticipationIds: string[],\n\tchanges: Partial,\n\tfireIntegrationEvent?: boolean,\n): Promise {\n\tconst url = `/courses/${courseId}/events/${eventId}/participations/bulk_patch/?ids=${participationIds.join(\n\t\t\",\",\n\t)}${\n\t\ttypeof fireIntegrationEvent === \"boolean\"\n\t\t\t? `&fire_integration_event=${JSON.stringify(fireIntegrationEvent)}`\n\t\t\t: \"\"\n\t}`;\n\tconst response = await axios.patch(url, changes);\n\treturn response.data.map((p: EventParticipation) =>\n\t\tnormalizeIncomingEventParticipation(p),\n\t);\n}\n\nexport async function partialUpdateEventParticipationSlot(\n\tcourseId: string,\n\teventId: string,\n\tparticipationId: string,\n\tslotId: string,\n\tchanges: Partial,\n\tforceStudent = false,\n): Promise {\n\tconst response = await axios.patch(\n\t\t`/courses/${courseId}/events/${eventId}/participations/${participationId}/slots/${slotId}/${\n\t\t\tforceStudent ? \"?as_student=1\" : \"\"\n\t\t}`,\n\t\tchanges,\n\t);\n\treturn normalizeIncomingEventParticipationSlot(response.data);\n}\n\nexport async function partialUpdateEventParticipationSlotSubmission(\n\tcourseId: string,\n\teventId: string,\n\tparticipationId: string,\n\tslotId: string,\n\tchanges: Partial,\n): Promise {\n\tconst response = await axios.patch(\n\t\t`/courses/${courseId}/events/${eventId}/participations/${participationId}/slots/${slotId}/patch_submission/`,\n\t\tchanges,\n\t);\n\treturn normalizeIncomingEventParticipationSlot(response.data);\n}\n\nexport async function getEventParticipationSlot(\n\tcourseId: string,\n\teventId: string,\n\tparticipationId: string,\n\tslotId: string,\n\tforceStudent = false,\n): Promise {\n\tconst response = await axios.get(\n\t\t`/courses/${courseId}/events/${eventId}/participations/${participationId}/slots/${slotId}/${\n\t\t\tforceStudent ? \"?as_student=1\" : \"\"\n\t\t}`,\n\t);\n\treturn normalizeIncomingEventParticipationSlot(response.data);\n}\n\nexport async function getEventParticipationSlotExecutionResults(\n\tcourseId: string,\n\teventId: string,\n\tparticipationId: string,\n\tslotId: string,\n\tforceStudent = false,\n): Promise {\n\tconst response = await axios.get(\n\t\t`/courses/${courseId}/events/${eventId}/participations/${participationId}/slots/${slotId}/execution_results/${\n\t\t\tforceStudent ? \"?as_student=1\" : \"\"\n\t\t}`,\n\t);\n\treturn response.data;\n}\n\nexport async function downloadEventParticipationSlotAttachment(\n\tcourseId: string,\n\teventId: string,\n\tparticipationId: string,\n\tslotId: string,\n): Promise {\n\tconst response = await axios.get(\n\t\t`/courses/${courseId}/events/${eventId}/participations/${participationId}/slots/${slotId}/attachment/`,\n\t\t{ responseType: \"arraybuffer\" },\n\t);\n\tconst fileName = getFileNameFromResponseHeader(response.headers[\"content-disposition\"]);\n\t// (\n\t// \tresponse.headers[\"content-disposition\"].split(/.*filename=(.*)/)[1] ?? \"attachment\"\n\t// ).replace(/\"/g, \"\");\n\tforceFileDownload(response, fileName);\n}\n\nexport async function runEventParticipationSlotCode(\n\tcourseId: string,\n\teventId: string,\n\tparticipationId: string,\n\tslotId: string,\n): Promise {\n\tconst response = await axios.post(\n\t\t`/courses/${courseId}/events/${eventId}/participations/${participationId}/slots/${slotId}/run/`,\n\t);\n\treturn normalizeIncomingEventParticipationSlot(response.data);\n}\n\nexport async function moveEventParticipationCurrentSlotCursor(\n\tcourseId: string,\n\teventId: string,\n\tparticipationId: string,\n\tdirection: \"forward\" | \"back\",\n): Promise {\n\tconst response = await axios.post(\n\t\t`/courses/${courseId}/events/${eventId}/participations/${participationId}/go_${direction}/`,\n\t);\n\treturn normalizeIncomingEventParticipationSlot(response.data);\n}\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./TagInput.vue?vue&type=style&index=0&id=21daa8bd&lang=css\"","export const ROUTE_TITLE_COURSE_NAME_TOKEN = \"$course\";\nexport const ROUTE_TITLE_EVENT_NAME_TOKEN = \"$event\";\nexport const ROUTE_TITLE_NODE_NAME_TOKEN = \"$node\";\n","export enum DataFormat {\n\tMOODLE_XML = \"Moodle XML\",\n\tEVO_JSON = \"Evo JSON\",\n}\n","import {\n\taddTagToExercise,\n\tbulkCreateExercises,\n\tbulkPartialUpdateEventParticipation,\n\tcreateCourse,\n\tcreateEvent,\n\tcreateEventTemplateRule,\n\tcreateEventTemplateRuleClause,\n\tcreateExercise,\n\tcreateExerciseChoice,\n\tcreateExerciseSolution,\n\tcreateExerciseSolutionComment,\n\tcreateExerciseSubExercise,\n\tcreateExerciseTestCase,\n\tcreateExerciseTestCaseAttachment,\n\tdeleteEventTemplateRule,\n\tdeleteEventTemplateRuleClause,\n\tdeleteExercise,\n\tdeleteExerciseChoice,\n\tdeleteExerciseSolution,\n\tdeleteExerciseSubExercise,\n\tdeleteExerciseTestCase,\n\tdeleteExerciseTestCaseAttachment,\n\tenrollUsersInCourse,\n\tEventParticipationSearchFilter,\n\tEventSearchFilter,\n\tExerciseSearchFilter,\n\tExerciseSolutionSearchFilter,\n\tgetActiveUsersForCourse,\n\tgetCourse,\n\tgetCourseEventParticipations,\n\tgetCourseGamificationContext,\n\tgetCourses,\n\tgetEvent,\n\tgetEventParticipation,\n\tgetEventParticipations,\n\tgetEventParticipationSlot,\n\tgetEvents,\n\tgetEventTemplate,\n\tgetEventTemplateRule,\n\tgetExerciseChoices,\n\tgetExercises,\n\tgetExercisesById,\n\tgetExerciseSolutionsByExercise,\n\tgetExerciseTestCaseAttachments,\n\tgetTags,\n\tgetUsers,\n\tgetUsersEnrolledInCourse,\n\tlockEvent,\n\tlockExercise,\n\tmanageSelfCourseEnrollment,\n\tmoveEventParticipationCurrentSlotCursor,\n\tPaginatedData,\n\tpartialUpdateEvent,\n\tpartialUpdateEventParticipation,\n\tpartialUpdateEventParticipationSlot,\n\tpartialUpdateEventParticipationSlotSubmission,\n\tpartialUpdateEventTemplateRule,\n\tparticipateInEvent,\n\tremoveTagFromExercise,\n\trunEventParticipationSlotCode,\n\tsetCourseBookmark,\n\tsetExerciseSolutionBookmark,\n\tupdateCourse,\n\tupdateEvent,\n\tupdateEventTemplateRuleClause,\n\tupdateExercise,\n\tupdateExerciseChoice,\n\tupdateExerciseSolution,\n\tupdateExerciseSubExercise,\n\tupdateExerciseTestCase,\n\tupdateUserCoursePrivileges,\n\tvoteExerciseSolution,\n} from \"@/api\";\nimport {\n\tcreateCourseNode,\n\tcreateCourseNodeComment,\n\tcreatePollNodeChoice,\n\tdeleteCourseNode,\n\tdeleteCourseNodeComment,\n\tdeletePollNodeChoice,\n\tgetCourseNode,\n\tgetCourseNodeComments,\n\tgetCourseRootNodeId,\n\tgetCourseTopLevelNodes,\n\tgetFileNodeThumbnail,\n\tgetNodeChildren,\n\tmoveCourseNode,\n\tpartialUpdateCourseNode,\n\tpartialUpdatePollNodeChoice,\n\tuploadNodeFile,\n\tvotePollNodeChoice,\n} from \"@/api/course_tree\";\nimport {\n\tdeleteByIdFromPaginatedData,\n\tgetEmptyPaginatedData,\n\tprependToPaginatedData,\n\tupdatePaginatedData,\n} from \"@/api/utils\";\nimport { getContextGoals, getGoalProgress, Goal, GoalProgress } from \"@/gamification\";\nimport {\n\tCourse,\n\tCourseTreeNode,\n\tTag,\n\tUser,\n\tEvent,\n\tExerciseSolution,\n\tExerciseTestCaseAttachment,\n\tEventParticipation,\n\tGamificationContext,\n\tExercise,\n\tgetBlankExam,\n\tgetBlankExercise,\n\tEventType,\n\texerciseChildName,\n\tEventParticipationSlot,\n\texerciseChildrenNames,\n\texerciseChildNameToChildType,\n\tExerciseChoice,\n\tExerciseTestCase,\n\texerciseChildrenName,\n\texerciseChildrenNameToChildType,\n\tEventTemplateRule,\n\tEventTemplateRuleClause,\n\tExerciseSolutionComment,\n\tExerciseSolutionVote,\n\tCoursePrivilege,\n\tgetBlankTag,\n\tFileNode,\n\tNodeComment,\n\tPollNodeChoice,\n\tCourseTreeNodeType,\n\tEventParticipationSlotSubmission,\n} from \"@/models\";\nimport {\n\tCourseIdActionPayload,\n\tEventActionPayload,\n\tEventIdActionPayload,\n\tEventTemplateRuleActionPayload,\n\tEventTemplateRuleClauseActionPayload,\n\tExerciseActionPayload,\n\tExerciseIdActionPayload,\n\tExerciseSolutionActionPayload,\n\tExerciseSolutionIdActionPayload,\n\tMutationPayload,\n\tParticipationIdActionPayload,\n\tParticipationSlotIdActionPayload,\n\tTemplateRuleIdActionPayload,\n\tTemplateIdPayload,\n\tTemplateRuleClauseIdActionPayload,\n\tCourseTreeNodeIdActionPayload,\n} from \"@/store/types\";\nimport { arraybufferToBase64 } from \"@/utils\";\nimport { AxiosRequestConfig } from \"axios\";\nimport { defineStore } from \"pinia\";\n\nexport const useMainStore = defineStore(\"main\", {\n\tstate: () => ({\n\t\tcourses: [] as Course[], // global list of courses\n\t\tpaginatedTopLevelCourseTreeNodes: null as null | PaginatedData,\n\t\ttags: [] as Tag[], // tags of current course\n\n\t\tprivilegedUsers: [] as User[], // users with privileges for the current course\n\t\tenrolledUsers: [] as User[], // users enrolled in current course\n\t\tactiveUsers: [] as User[], // users active (i.e. with >= 1 participation) in current course\n\t\tpaginatedUsers: getEmptyPaginatedData() as PaginatedData, // general-purpose store for users\n\t\tpaginatedExercises: getEmptyPaginatedData() as PaginatedData, // exercises currently displayed\n\t\tevents: [] as Event[], // events currently displayed (e.g. course exam list)\n\n\t\t// whether a node of the current course tree is being dragged\n\t\tdraggingCourseTreeNode: false,\n\n\t\t// maps id's of courses to id's of root nodes\n\t\tcourseIdToTreeRootId: {} as Record,\n\n\t\t// maps id's of course tree nodes to arrays of comments\n\t\tcommentsByCourseNodeId: {} as Record,\n\n\t\t// maps id's of course tree nodes to base64 thumnbails\n\t\tthumbnailByCourseNodeId: {} as Record,\n\n\t\t// event participations of the user\n\t\t// ! used on the home page for student dashboard, with the Event nested inside; improve\n\t\tpaginatedEventParticipations: null as null | PaginatedData,\n\n\t\teventParticipations: [] as EventParticipation[], // event participations currently displayed (e.g. exam results page)\n\t\t// exercise id to set of ExerciseSolution\n\t\tpaginatedSolutionsByExerciseId: {} as Record>,\n\t\t// testcase id to set of ExerciseTestCaseAttachment\n\t\texerciseTestCaseAttachmentsByTestCaseId: {} as Record<\n\t\t\tstring,\n\t\t\tExerciseTestCaseAttachment[]\n\t\t>,\n\t\t// gamification goal id to GoalProgress\n\t\tprogressByGoalId: {} as Record,\n\t\t// node id to set of children nodes\n\t\tpaginatedChildrenByNodeId: {} as Record>,\n\n\t\t// event participation currently displayed (e.g. during an exam or when reviewing answers)\n\t\tcurrentEventParticipation: null as EventParticipation | null,\n\t\t// course tree node currently viewed in detail mode\n\t\tcurrentCourseTreeNode: null as CourseTreeNode | null,\n\n\t\t// event currently being displayed (e.g. in the confirmation page before joining an event)\n\t\tpreviewingEvent: null as Event | null,\n\n\t\t// gamification context for the current course\n\t\tgamificationContext: null as GamificationContext | null,\n\t\t// goals of the current gamificationContext\n\t\tgamificationContextGoals: [] as Goal[],\n\t}),\n\tgetters: {\n\t\texams: state => state.events.filter(e => e.event_type == EventType.EXAM),\n\t\tgetPaginatedExercises: state => state.paginatedExercises ?? getEmptyPaginatedData(),\n\t\tgetCourseById: state => (courseId: string) =>\n\t\t\tstate.courses.find(c => c.id == courseId),\n\t\tgetUserById: state => (userId: string) =>\n\t\t\t[\n\t\t\t\t...state.privilegedUsers,\n\t\t\t\t...state.enrolledUsers,\n\t\t\t\t...state.activeUsers,\n\t\t\t\t...state.paginatedUsers.data,\n\t\t\t].find(u => u.id == userId),\n\t\tgetEventById: state => (eventId: string) =>\n\t\t\tstate.events.find(e => e.id == eventId) ?? getBlankExam(),\n\t\tgetEventByTemplateId: state => (templateId: string) =>\n\t\t\tstate.events.find(e => e.template?.id == templateId),\n\t\texercises: state => state.paginatedExercises?.data ?? [],\n\t\tgetTagById: state => (tagId: string) =>\n\t\t\tstate.tags.find(t => t.id == tagId) ?? getBlankTag(),\n\t\tgetTagByName: state => (tagName: string) =>\n\t\t\tstate.tags.find(t => t.name == tagName) ?? getBlankTag(),\n\t\tgetExerciseById: state => (exerciseId: string) => {\n\t\t\tconst flattenedExercises = (state.paginatedExercises?.data ?? [])\n\t\t\t\t.map(e => [e, ...(e.sub_exercises ?? [])])\n\t\t\t\t.flat(10);\n\t\t\treturn flattenedExercises.find(e => e.id == exerciseId) ?? getBlankExercise();\n\t\t},\n\t\tgetPaginatedSolutionsByExerciseId: state => (exerciseId: string) =>\n\t\t\tstate.paginatedSolutionsByExerciseId[exerciseId] ?? getEmptyPaginatedData(),\n\t\tgetEventParticipationById: state => (participationId: string) => {\n\t\t\tconst target = [\n\t\t\t\t...state.eventParticipations,\n\t\t\t\t...(state.paginatedEventParticipations?.data ?? []),\n\t\t\t].find(p => p.id == participationId);\n\t\t\treturn target;\n\t\t},\n\t\tgetCommentsByNodeId: state => (nodeId: string) => {\n\t\t\treturn state.commentsByCourseNodeId[nodeId] ?? [];\n\t\t},\n\t\texamParticipations: state =>\n\t\t\t[\n\t\t\t\t...(state.paginatedEventParticipations?.data ?? []).filter(\n\t\t\t\t\tp => p.event.event_type === EventType.EXAM,\n\t\t\t\t),\n\t\t\t].sort((p1, p2) =>\n\t\t\t\tnew Date(p1.begin_timestamp) < new Date(p2.begin_timestamp) ? 1 : -1,\n\t\t\t),\n\t\tpracticeParticipations: state =>\n\t\t\t[\n\t\t\t\t...(state.paginatedEventParticipations?.data ?? []).filter(\n\t\t\t\t\tp => p.event.event_type === EventType.SELF_SERVICE_PRACTICE,\n\t\t\t\t),\n\t\t\t].sort((p1, p2) =>\n\t\t\t\tnew Date(p1.begin_timestamp) < new Date(p2.begin_timestamp) ? 1 : -1,\n\t\t\t),\n\t\tcurrentEventParticipationFlattenedSlots: state => {\n\t\t\treturn (state.currentEventParticipation?.slots ?? [])\n\t\t\t\t.map(e => [e, ...(e.sub_slots ?? [])])\n\t\t\t\t.flat(10);\n\t\t},\n\t\t/* Course tree */\n\t\tflatCourseTreeNodes: state => {\n\t\t\tconst ret = [...(state.paginatedTopLevelCourseTreeNodes?.data ?? [])];\n\t\t\t// flatten children\n\t\t\tObject.values(state.paginatedChildrenByNodeId).forEach(p => {\n\t\t\t\tconst children = p.data;\n\t\t\t\tret.push(...children);\n\t\t\t});\n\t\t\tconst currentNode = state.currentCourseTreeNode\n\t\t\t\t? [state.currentCourseTreeNode]\n\t\t\t\t: [];\n\t\t\treturn [...currentNode, ...ret];\n\t\t},\n\t\tgetCourseTreeNodeById() {\n\t\t\treturn (nodeId: string) => this.flatCourseTreeNodes.find(n => n.id == nodeId);\n\t\t},\n\t},\n\tactions: {\n\t\tasync selfEnrollInCourse({ courseId }: CourseIdActionPayload) {\n\t\t\tawait manageSelfCourseEnrollment(courseId, false);\n\t\t\tconst course = this.getCourseById(courseId);\n\t\t\tif (course) {\n\t\t\t\tcourse.enrolled = true;\n\t\t\t} else {\n\t\t\t\tthrow new Error(\"selfEnrollInCourse couldn't find course with id \" + courseId);\n\t\t\t}\n\t\t},\n\t\tasync selfUnenrollInCourse({ courseId }: CourseIdActionPayload) {\n\t\t\tawait manageSelfCourseEnrollment(courseId, true);\n\t\t\tconst course = this.getCourseById(courseId);\n\t\t\tif (course) {\n\t\t\t\tcourse.enrolled = false;\n\t\t\t} else {\n\t\t\t\tthrow new Error(\"selfUnenrollInCourse couldn't find course with id \" + courseId);\n\t\t\t}\n\t\t},\n\t\tasync isTopLevelNode({\n\t\t\tcourseId,\n\t\t\tnode,\n\t\t}: CourseIdActionPayload & { node: CourseTreeNode }) {\n\t\t\tconst rootId = await this.getCourseRootId({ courseId });\n\t\t\treturn node.parent_id == rootId;\n\t\t},\n\t\tasync getCourseRootId({ courseId }: CourseIdActionPayload) {\n\t\t\tif (typeof this.courseIdToTreeRootId[courseId] === \"undefined\") {\n\t\t\t\tthis.courseIdToTreeRootId[courseId] = await getCourseRootNodeId(courseId);\n\t\t\t}\n\t\t\tconst rootId = this.courseIdToTreeRootId[courseId];\n\t\t\treturn rootId;\n\t\t},\n\t\tasync loadCourseTreeNodeThumbnail({\n\t\t\tcourseId,\n\t\t\tnodeId,\n\t\t}: CourseIdActionPayload & CourseTreeNodeIdActionPayload) {\n\t\t\tconst thumbnail = await getFileNodeThumbnail(courseId, nodeId);\n\t\t\tconst target = this.flatCourseTreeNodes.find(n => n.id == nodeId) as\n\t\t\t\t| FileNode\n\t\t\t\t| undefined;\n\n\t\t\tif (!target) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"loadCourseTreeNodeThumbnail couldn't find node with id \" + nodeId,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst thumbnail64 = arraybufferToBase64(thumbnail);\n\t\t\tthis.thumbnailByCourseNodeId[nodeId] = thumbnail64;\n\t\t},\n\t\tasync createCourseTreeNode({\n\t\t\tcourseId,\n\t\t\tnode,\n\t\t\tconfig = undefined,\n\t\t}: CourseIdActionPayload & { node: CourseTreeNode; config?: AxiosRequestConfig }) {\n\t\t\tif (node.parent_id === null) {\n\t\t\t\t// creating a top-level node\n\t\t\t\tnode.parent_id = await this.getCourseRootId({ courseId });\n\t\t\t}\n\t\t\tconst createdNode = await createCourseNode(courseId, node, config);\n\t\t\tif (await this.isTopLevelNode({ courseId, node: createdNode })) {\n\t\t\t\tthis.paginatedTopLevelCourseTreeNodes = prependToPaginatedData(\n\t\t\t\t\tthis.paginatedTopLevelCourseTreeNodes ?? getEmptyPaginatedData(),\n\t\t\t\t\tcreatedNode,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// child of some other node\n\t\t\t\tconst currentChildren =\n\t\t\t\t\tthis.paginatedChildrenByNodeId[createdNode.parent_id as string] ??\n\t\t\t\t\tgetEmptyPaginatedData();\n\t\t\t\tthis.paginatedChildrenByNodeId[createdNode.parent_id as string] =\n\t\t\t\t\tprependToPaginatedData(currentChildren, createdNode);\n\t\t\t}\n\t\t\treturn createdNode;\n\t\t},\n\t\tasync createCourseTreeNodeComment({\n\t\t\tcourseId,\n\t\t\tnodeId,\n\t\t\tcomment,\n\t\t}: CourseIdActionPayload & CourseTreeNodeIdActionPayload & { comment: NodeComment }) {\n\t\t\tconst newComment = await createCourseNodeComment(courseId, nodeId, comment);\n\t\t\tif (typeof this.commentsByCourseNodeId[nodeId] === \"undefined\") {\n\t\t\t\tthis.commentsByCourseNodeId[nodeId] = [];\n\t\t\t}\n\t\t\tthis.commentsByCourseNodeId[nodeId].push(newComment);\n\t\t},\n\t\tasync deleteCourseNodeComment({\n\t\t\tcourseId,\n\t\t\tnodeId,\n\t\t\tcommentId,\n\t\t}: CourseIdActionPayload & CourseTreeNodeIdActionPayload & { commentId: string }) {\n\t\t\tawait deleteCourseNodeComment(courseId, nodeId, commentId);\n\t\t\tthis.commentsByCourseNodeId[nodeId] = this.commentsByCourseNodeId[nodeId].filter(\n\t\t\t\tc => c.id != commentId,\n\t\t\t);\n\t\t},\n\t\tasync createPollNodeChoice({\n\t\t\tcourseId,\n\t\t\tnodeId,\n\t\t\tchoice,\n\t\t}: CourseIdActionPayload &\n\t\t\tCourseTreeNodeIdActionPayload & { choice: PollNodeChoice }) {\n\t\t\tconst newChoice = await createPollNodeChoice(courseId, nodeId, choice);\n\t\t\tconst poll = this.getCourseTreeNodeById(nodeId);\n\t\t\tif (!poll || poll.resourcetype !== CourseTreeNodeType.PollNode) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"createPollNodeChoice couldn't find node with id \" +\n\t\t\t\t\t\tnodeId +\n\t\t\t\t\t\t\" or its type was \" +\n\t\t\t\t\t\tpoll?.resourcetype,\n\t\t\t\t);\n\t\t\t}\n\t\t\tpoll.choices.push(newChoice);\n\t\t},\n\t\tasync partialUpdatePollNodeChoice({\n\t\t\tcourseId,\n\t\t\tnodeId,\n\t\t\tchoiceId,\n\t\t\tchanges,\n\t\t}: CourseIdActionPayload &\n\t\t\tCourseTreeNodeIdActionPayload & {\n\t\t\t\tchoiceId: string;\n\t\t\t\tchanges: Partial;\n\t\t\t}) {\n\t\t\tconst updatedChoice = await partialUpdatePollNodeChoice(\n\t\t\t\tcourseId,\n\t\t\t\tnodeId,\n\t\t\t\tchoiceId,\n\t\t\t\tchanges,\n\t\t\t);\n\t\t\tconst poll = this.getCourseTreeNodeById(nodeId);\n\t\t\tif (!poll || poll.resourcetype !== CourseTreeNodeType.PollNode) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"updatePollNodeChoice couldn't find node with id \" +\n\t\t\t\t\t\tnodeId +\n\t\t\t\t\t\t\" or its type was \" +\n\t\t\t\t\t\tpoll?.resourcetype,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst target = poll.choices.find(c => c.id == choiceId);\n\t\t\tif (!target) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"updatePollNodeChoice couldn't find poll choice with id \" + choiceId,\n\t\t\t\t);\n\t\t\t}\n\t\t\tObject.assign(target, { ...target, ...updatedChoice });\n\t\t},\n\t\tasync deletePollNodeChoice({\n\t\t\tcourseId,\n\t\t\tnodeId,\n\t\t\tchoiceId,\n\t\t}: CourseIdActionPayload &\n\t\t\tCourseTreeNodeIdActionPayload & {\n\t\t\t\tchoiceId: string;\n\t\t\t}) {\n\t\t\tawait deletePollNodeChoice(courseId, nodeId, choiceId);\n\t\t\tconst poll = this.getCourseTreeNodeById(nodeId);\n\t\t\tif (!poll || poll.resourcetype !== CourseTreeNodeType.PollNode) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"updatePollNodeChoice couldn't find node with id \" +\n\t\t\t\t\t\tnodeId +\n\t\t\t\t\t\t\" or its type was \" +\n\t\t\t\t\t\tpoll?.resourcetype,\n\t\t\t\t);\n\t\t\t}\n\t\t\tpoll.choices = poll.choices.filter(c => c.id != choiceId);\n\t\t},\n\t\tasync votePollNodeChoice({\n\t\t\tcourseId,\n\t\t\tnodeId,\n\t\t\tchoiceId,\n\t\t\tremove,\n\t\t}: CourseIdActionPayload &\n\t\t\tCourseTreeNodeIdActionPayload & {\n\t\t\t\tchoiceId: string;\n\t\t\t\tremove: boolean;\n\t\t\t}) {\n\t\t\tconst pollWithNewVote = await votePollNodeChoice(\n\t\t\t\tcourseId,\n\t\t\t\tnodeId,\n\t\t\t\tchoiceId,\n\t\t\t\tremove,\n\t\t\t);\n\t\t\tconst poll = this.getCourseTreeNodeById(nodeId);\n\t\t\tif (!poll || poll.resourcetype !== CourseTreeNodeType.PollNode) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"updatePollNodeChoice couldn't find node with id \" +\n\t\t\t\t\t\tnodeId +\n\t\t\t\t\t\t\" or its type was \" +\n\t\t\t\t\t\tpoll?.resourcetype,\n\t\t\t\t);\n\t\t\t}\n\t\t\tObject.assign(poll, pollWithNewVote);\n\t\t},\n\t\tasync getCourseTreeNodeComments({\n\t\t\tcourseId,\n\t\t\tnodeId,\n\t\t}: CourseIdActionPayload & CourseTreeNodeIdActionPayload) {\n\t\t\tconst comments = await getCourseNodeComments(courseId, nodeId);\n\t\t\tthis.commentsByCourseNodeId[nodeId] = comments;\n\t\t},\n\t\tasync moveCourseTreeNode({\n\t\t\tcourseId,\n\t\t\tnode,\n\t\t\ttargetId,\n\t\t\tposition,\n\t\t}: CourseIdActionPayload & {\n\t\t\tnode: CourseTreeNode;\n\t\t\ttargetId: string;\n\t\t\tposition: \"first-child\" | \"last-child\" | \"left\" | \"right\";\n\t\t}) {\n\t\t\t// get target node from target id. if the target id is the id of the root\n\t\t\t// node of the course, set the target to null\n\t\t\tconst target =\n\t\t\t\ttargetId == (await this.getCourseRootId({ courseId }))\n\t\t\t\t\t? null\n\t\t\t\t\t: this.getCourseTreeNodeById(targetId);\n\n\t\t\tif (typeof target === \"undefined\") {\n\t\t\t\tthrow new Error(\"moveCourseTreeNode didn't find target with id \" + targetId);\n\t\t\t}\n\n\t\t\tconst targetNodeList =\n\t\t\t\t// if the target is null, the list of siblings of the moved\n\t\t\t\t// node is the list of top-level nodes of the course\n\t\t\t\ttarget === null\n\t\t\t\t\t? this.paginatedTopLevelCourseTreeNodes?.data ?? []\n\t\t\t\t\t: [\"first-child\", \"last-child\"].includes(position)\n\t\t\t\t\t? // per django-mptt, if position is first-child or last-child, the target\n\t\t\t\t\t // is to be interpreted as the new parent\n\t\t\t\t\t this.paginatedChildrenByNodeId[targetId].data\n\t\t\t\t\t: // otherwise, the target is to be interpreted as the node whose\n\t\t\t\t\t// parent will become the new parent. here, position will either\n\t\t\t\t\t// be `left` or `right`\n\t\t\t\t\t(await this.isTopLevelNode({ courseId, node: target }))\n\t\t\t\t\t? // node will become sibling of a top-level node\n\t\t\t\t\t this.paginatedTopLevelCourseTreeNodes?.data ?? []\n\t\t\t\t\t: // node will become sibling of `target`, therefore the sibling list\n\t\t\t\t\t // will be that of children of `target.parent_id`\n\t\t\t\t\t this.paginatedChildrenByNodeId[target?.parent_id as string].data;\n\n\t\t\tconst currentNodeList = (await this.isTopLevelNode({ courseId, node }))\n\t\t\t\t? this.paginatedTopLevelCourseTreeNodes?.data ?? []\n\t\t\t\t: this.paginatedChildrenByNodeId[node.parent_id as string]?.data ?? [];\n\n\t\t\t// save before state in order to be able to restore it\n\t\t\t// if an error occurs when making the API call\n\t\t\tconst targetNodeListBefore = [...targetNodeList];\n\t\t\tconst currentNodeListBefore = [...currentNodeList];\n\t\t\tconst parentIdBefore = node.parent_id;\n\n\t\t\t// again, per django-mptt semantics, if position is `first-child` or\n\t\t\t// `last-child`, then the new parent will be `target`, otherwise it'll\n\t\t\t// be `target`'s parent\n\t\t\tconst newParentId = [\"first-child\", \"last-child\"].includes(position)\n\t\t\t\t? targetId\n\t\t\t\t: (target?.parent_id as string);\n\n\t\t\tconst currentIndex = currentNodeList.findIndex(n => n.id == node.id);\n\t\t\tconst targetIndex =\n\t\t\t\tposition === \"first-child\"\n\t\t\t\t\t? 0\n\t\t\t\t\t: position === \"last-child\"\n\t\t\t\t\t? targetNodeList.length - 1\n\t\t\t\t\t: // if position is `left` or `right`, node will\n\t\t\t\t\t // take up the position of `target`\n\t\t\t\t\t targetNodeList.findIndex(n => n.id == targetId);\n\n\t\t\t// perform move locally\n\t\t\tcurrentNodeList.splice(currentIndex, 1);\n\t\t\tnode.parent_id = newParentId;\n\t\t\ttargetNodeList.splice(targetIndex, 0, node);\n\n\t\t\ttry {\n\t\t\t\tawait moveCourseNode(courseId, node.id, targetId, position);\n\t\t\t} catch (e) {\n\t\t\t\t// roll back state\n\t\t\t\tObject.assign(targetNodeList, targetNodeListBefore);\n\t\t\t\tObject.assign(currentNodeList, currentNodeListBefore);\n\t\t\t\tnode.parent_id = parentIdBefore;\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t},\n\t\tasync deleteCourseTreeNode({\n\t\t\tcourseId,\n\t\t\tnodeId,\n\t\t}: CourseIdActionPayload & CourseTreeNodeIdActionPayload) {\n\t\t\tconst toDelete = this.getCourseTreeNodeById(nodeId);\n\t\t\tif (!toDelete) {\n\t\t\t\tthrow new Error(\"deleteCourseTreeNode couldn't find node with id \" + nodeId);\n\t\t\t}\n\t\t\tawait deleteCourseNode(courseId, nodeId);\n\t\t\tif (await this.isTopLevelNode({ courseId, node: toDelete })) {\n\t\t\t\tthis.paginatedTopLevelCourseTreeNodes = deleteByIdFromPaginatedData(\n\t\t\t\t\tthis.paginatedTopLevelCourseTreeNodes ?? getEmptyPaginatedData(),\n\t\t\t\t\t{ id: nodeId },\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.paginatedChildrenByNodeId[toDelete.parent_id as string] =\n\t\t\t\t\tdeleteByIdFromPaginatedData(\n\t\t\t\t\t\tthis.paginatedChildrenByNodeId[toDelete.parent_id as string] ??\n\t\t\t\t\t\t\tgetEmptyPaginatedData(),\n\t\t\t\t\t\t{ id: nodeId },\n\t\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\tasync partialUpdateCourseTreeNode({\n\t\t\tcourseId,\n\t\t\tnodeId,\n\t\t\tchanges,\n\t\t\tfireIntegrationEvent = false,\n\t\t}: CourseIdActionPayload &\n\t\t\tCourseTreeNodeIdActionPayload & {\n\t\t\t\tchanges: Partial;\n\t\t\t\tfireIntegrationEvent?: boolean;\n\t\t\t}) {\n\t\t\tconst updatedNode = await partialUpdateCourseNode(\n\t\t\t\tcourseId,\n\t\t\t\tnodeId,\n\t\t\t\tchanges,\n\t\t\t\tfireIntegrationEvent,\n\t\t\t);\n\t\t\treturn updatedNode;\n\t\t},\n\t\tpatchCourseTreeNode({\n\t\t\tcourseId,\n\t\t\tnodeId,\n\t\t\tchanges,\n\t\t}: CourseIdActionPayload &\n\t\t\tCourseTreeNodeIdActionPayload & { changes: Partial }) {\n\t\t\tconst target = this.flatCourseTreeNodes.find(n => n.id == nodeId);\n\t\t\tif (!target) {\n\t\t\t\tthrow new Error(\"patchCourseTreeNode couldn't find node with id \" + nodeId);\n\t\t\t}\n\t\t\tconst oldParentId = target.parent_id;\n\t\t\tObject.assign(target, { ...target, ...changes });\n\t\t\tif (changes.parent_id) {\n\t\t\t\tif (oldParentId == this.courseIdToTreeRootId[courseId]) {\n\t\t\t\t\t// remove node from children list of top-level nodes\n\t\t\t\t\tthis.paginatedTopLevelCourseTreeNodes = deleteByIdFromPaginatedData(\n\t\t\t\t\t\tthis.paginatedTopLevelCourseTreeNodes ?? getEmptyPaginatedData(),\n\t\t\t\t\t\t{ id: nodeId },\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\t// remove node from children list of old parent\n\t\t\t\t\tconst oldChildren =\n\t\t\t\t\t\tthis.paginatedChildrenByNodeId[oldParentId as string] ??\n\t\t\t\t\t\tgetEmptyPaginatedData();\n\t\t\t\t\t// remove node from children list of old parent\n\t\t\t\t\tthis.paginatedChildrenByNodeId[oldParentId as string] =\n\t\t\t\t\t\tdeleteByIdFromPaginatedData(oldChildren, { id: nodeId });\n\t\t\t\t}\n\n\t\t\t\t// add to new list (either top-level or children list of new parent)\n\t\t\t\tif (changes.parent_id == this.courseIdToTreeRootId[courseId]) {\n\t\t\t\t\tthis.paginatedTopLevelCourseTreeNodes = prependToPaginatedData(\n\t\t\t\t\t\tthis.paginatedTopLevelCourseTreeNodes ?? getEmptyPaginatedData(),\n\t\t\t\t\t\ttarget,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tthis.paginatedChildrenByNodeId[changes.parent_id] = prependToPaginatedData(\n\t\t\t\t\t\tthis.paginatedChildrenByNodeId[changes.parent_id] ?? getEmptyPaginatedData(),\n\t\t\t\t\t\ttarget,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tasync uploadCourseTreeNodeFile({\n\t\t\tcourseId,\n\t\t\tnodeId,\n\t\t\tfile,\n\t\t}: CourseIdActionPayload & CourseTreeNodeIdActionPayload & { file: Blob }) {\n\t\t\tconst updatedNode = await uploadNodeFile(courseId, nodeId, file);\n\t\t\tconst target = this.getCourseTreeNodeById(nodeId);\n\t\t\tif (!target) {\n\t\t\t\tthrow new Error(\"uploadCourseTreeNodeFile couldn't find node with id \" + nodeId);\n\t\t\t}\n\t\t\tObject.assign(target, updatedNode);\n\t\t},\n\t\t/** Course tree */\n\t\tasync getCourseTreeNodeDetail({\n\t\t\tcourseId,\n\t\t\tnodeId,\n\t\t}: CourseIdActionPayload & CourseTreeNodeIdActionPayload) {\n\t\t\tconst node = await getCourseNode(courseId, nodeId);\n\t\t\tthis.currentCourseTreeNode = node;\n\t\t},\n\t\tasync getCourseTopLevelNodes({\n\t\t\tcourseId,\n\t\t\tfromFirstPage,\n\t\t}: CourseIdActionPayload & {\n\t\t\tfromFirstPage: boolean;\n\t\t}) {\n\t\t\tconst nodes = await getCourseTopLevelNodes(\n\t\t\t\tcourseId,\n\t\t\t\tfromFirstPage ? 1 : (this.paginatedTopLevelCourseTreeNodes?.pageNumber ?? 0) + 1,\n\t\t\t);\n\t\t\tif (fromFirstPage || !this.paginatedTopLevelCourseTreeNodes) {\n\t\t\t\tthis.paginatedTopLevelCourseTreeNodes = nodes;\n\t\t\t} else {\n\t\t\t\tthis.paginatedTopLevelCourseTreeNodes = updatePaginatedData(\n\t\t\t\t\tthis.paginatedTopLevelCourseTreeNodes,\n\t\t\t\t\tnodes,\n\t\t\t\t\tfalse,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn !nodes.isLastPage;\n\t\t},\n\t\tasync getCourseTreeNodeChildren({\n\t\t\tcourseId,\n\t\t\tnodeId,\n\t\t\tfromFirstPage,\n\t\t}: CourseIdActionPayload &\n\t\t\tCourseTreeNodeIdActionPayload & {\n\t\t\t\tfromFirstPage: boolean;\n\t\t\t}) {\n\t\t\tconst existingChildren =\n\t\t\t\tthis.paginatedChildrenByNodeId[nodeId] ?? getEmptyPaginatedData();\n\t\t\tconst nodes = await getNodeChildren(\n\t\t\t\tcourseId,\n\t\t\t\tnodeId,\n\t\t\t\tfromFirstPage ? 1 : existingChildren.pageNumber + 1,\n\t\t\t);\n\t\t\tif (fromFirstPage || !this.paginatedChildrenByNodeId[nodeId]) {\n\t\t\t\tthis.paginatedChildrenByNodeId[nodeId] = nodes;\n\t\t\t} else {\n\t\t\t\tthis.paginatedChildrenByNodeId[nodeId] = updatePaginatedData(\n\t\t\t\t\tthis.paginatedChildrenByNodeId[nodeId],\n\t\t\t\t\tnodes,\n\t\t\t\t\tfalse,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn !nodes.isLastPage;\n\t\t},\n\t\t/** Previous shared mutations */\n\t\tsetCourse(course: Course) {\n\t\t\tconst target = this.courses.find(c => c.id == course.id);\n\t\t\tif (target) {\n\t\t\t\tObject.assign(target, course);\n\t\t\t} else {\n\t\t\t\tthrow new Error(\"setCourse couldn't find \" + course.id);\n\t\t\t}\n\t\t},\n\t\t/** Previous teacher mutations */\n\t\t// update an event in memory with the given payload\n\t\tsetEvent({ eventId, payload }: { eventId: string; payload: Event }) {\n\t\t\tObject.assign(this.getEventById(eventId), payload);\n\t\t},\n\t\t// update the slot with id `slotId` using the given payload\n\t\tsetEventParticipationSlot({\n\t\t\tparticipationId,\n\t\t\tslotId,\n\t\t\tpayload,\n\t\t}: {\n\t\t\tparticipationId: string;\n\t\t\tslotId: string;\n\t\t\tpayload: EventParticipationSlot;\n\t\t}) {\n\t\t\tconst target = this.getEventParticipationById(participationId)?.slots?.find(\n\t\t\t\ts => s.id == slotId,\n\t\t\t);\n\t\t\tif (target) {\n\t\t\t\tObject.assign(target, payload);\n\t\t\t} else {\n\t\t\t\tconsole.error(\"setEventParticipationSlot didn't find\", payload);\n\t\t\t\tthrow Error();\n\t\t\t}\n\t\t},\n\t\t// updates the in-memory participation that has the same id as the\n\t\t// one in the payload with the given payload\n\t\tsetEventParticipation(payload: EventParticipation) {\n\t\t\tconst target = this.getEventParticipationById(payload.id);\n\t\t\tif (target) {\n\t\t\t\tObject.assign(target, payload);\n\t\t\t} else {\n\t\t\t\tconsole.error(\"setEventParticipation didn't find\", payload);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * Operations on exercises and exercise children\n\t\t */\n\t\t// updates the in-memory exercise with the given payload's id\n\t\tsetExercise(payload: Exercise) {\n\t\t\tconst targetExercise = this.getExerciseById(payload.id);\n\t\t\tif (targetExercise) {\n\t\t\t\tObject.assign(targetExercise, payload);\n\t\t\t} else {\n\t\t\t\tconsole.error(\"setExercise didn't find\", payload);\n\t\t\t}\n\t\t},\n\t\t// generic function that removes from the store a child\n\t\t// element of an exercise by id\n\t\tremoveExerciseChild({\n\t\t\texerciseId,\n\t\t\tchildType,\n\t\t\tchildId,\n\t\t}: {\n\t\t\texerciseId: string;\n\t\t\tchildType: exerciseChildName;\n\t\t\tchildId: string;\n\t\t}) {\n\t\t\tconst targetExercise = this.getExerciseById(exerciseId);\n\t\t\tconst childrenName = exerciseChildrenNames[childType];\n\t\t\tconst children = targetExercise?.[childrenName];\n\t\t\tif (children) {\n\t\t\t\tconst targetChildIndex = children.findIndex(\n\t\t\t\t\t(c: { id: string }) => c.id == childId,\n\t\t\t\t);\n\t\t\t\tchildren.splice(targetChildIndex, 1);\n\t\t\t} else {\n\t\t\t\tconsole.error(\"removeExerciseChild didn't find\", exerciseId, childType, childId);\n\t\t\t}\n\t\t},\n\t\t// generic function that updates a child of the given exercises\n\t\t// if it exists, otherwise pushes a new one\n\t\tsetExerciseChild({\n\t\t\texerciseId,\n\t\t\tchildType,\n\t\t\tpayload,\n\t\t}: {\n\t\t\texerciseId: string;\n\t\t\tchildType: K;\n\t\t\tpayload: exerciseChildNameToChildType[K];\n\t\t}) {\n\t\t\tconst targetExercise = this.getExerciseById(exerciseId);\n\t\t\tconst childrenName = exerciseChildrenNames[childType];\n\t\t\tconst children = targetExercise?.[childrenName];\n\t\t\tif (children) {\n\t\t\t\t// TODO refactor\n\t\t\t\tconst target = (\n\t\t\t\t\tchildren as (ExerciseChoice | Exercise | ExerciseTestCase | ExerciseSolution)[]\n\t\t\t\t).find(c => c.id == payload.id);\n\t\t\t\tif (target) {\n\t\t\t\t\t// update child\n\t\t\t\t\tObject.assign(target, payload);\n\t\t\t\t} else {\n\t\t\t\t\t// push new child\n\t\t\t\t\tchildren.push(payload as any);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconsole.error(\"setExerciseChild didn't find\", childType, \"for\", exerciseId);\n\t\t\t}\n\t\t},\n\t\t// generic function that updates the list of elements related to an\n\t\t// exercise (choices, sub-exercises, etc.)\n\t\tsetExerciseChildren({\n\t\t\texerciseId,\n\t\t\tchildrenName,\n\t\t\tpayload,\n\t\t}: {\n\t\t\texerciseId: string;\n\t\t\tchildrenName: K;\n\t\t\tpayload: exerciseChildrenNameToChildType[K];\n\t\t}) {\n\t\t\tconst target = this.getExerciseById(exerciseId);\n\t\t\tif (target && childrenName) {\n\t\t\t\t// TODO refactor to better use types\n\t\t\t\ttarget[childrenName] = payload as any;\n\t\t\t} else {\n\t\t\t\tconsole.error(\"setExerciseChildren didn't find\", exerciseId);\n\t\t\t}\n\t\t},\n\t\t/** --------------------------------------------------- */\n\n\t\t/**\n\t\t * Operations on event templates, template rules, and rule clauses\n\t\t */\n\t\tpatchEventTemplateRule({\n\t\t\ttemplateId,\n\t\t\truleId,\n\t\t\tpayload,\n\t\t}: {\n\t\t\ttemplateId: string;\n\t\t\truleId: string;\n\t\t\tpayload: Partial;\n\t\t}) {\n\t\t\tconst event = this.getEventByTemplateId(templateId);\n\t\t\tconst targetTemplate = event?.template;\n\t\t\tif (targetTemplate) {\n\t\t\t\tconst targetRule = targetTemplate.rules.find(r => r.id == ruleId);\n\t\t\t\tObject.assign(targetRule as EventTemplateRule, { ...targetRule, ...payload });\n\t\t\t} else {\n\t\t\t\tconsole.error(\"patchEventTemplateRule didn't find\", templateId, ruleId);\n\t\t\t}\n\t\t},\n\t\tpatchEventTemplateRuleClause({\n\t\t\ttemplateId,\n\t\t\truleId,\n\t\t\tclauseId,\n\t\t\tpayload,\n\t\t}: {\n\t\t\ttemplateId: string;\n\t\t\truleId: string;\n\t\t\tclauseId: string;\n\t\t\tpayload: Partial;\n\t\t}) {\n\t\t\tconst event = this.getEventByTemplateId(templateId);\n\t\t\tconst template = event?.template;\n\t\t\tconst rule = template?.rules?.find(r => r.id == ruleId);\n\t\t\tconst target = rule?.clauses?.find(c => c.id == clauseId);\n\n\t\t\tif (target) {\n\t\t\t\tObject.assign(target, { ...target, ...payload });\n\t\t\t} else {\n\t\t\t\tconsole.error(\n\t\t\t\t\t\"patchEventTemplateRuleClause didn't find\",\n\t\t\t\t\ttemplateId,\n\t\t\t\t\truleId,\n\t\t\t\t\tclauseId,\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\tsetEventTemplateRules({\n\t\t\ttemplateId,\n\t\t\tpayload,\n\t\t}: {\n\t\t\ttemplateId: string;\n\t\t\tpayload: EventTemplateRule[];\n\t\t}) {\n\t\t\tconst target = this.getEventByTemplateId(templateId);\n\t\t\tif (target && target.template) {\n\t\t\t\ttarget.template.rules = payload;\n\t\t\t} else {\n\t\t\t\tconsole.error(\"setEventTemplateRules didn't find\", templateId, payload);\n\t\t\t}\n\t\t},\n\t\tremoveEventTemplateRule({\n\t\t\ttemplateId,\n\t\t\truleId,\n\t\t}: {\n\t\t\ttemplateId: string;\n\t\t\truleId: string;\n\t\t}) {\n\t\t\tconst target = this.getEventByTemplateId(templateId);\n\t\t\tif (target && target.template) {\n\t\t\t\ttarget.template.rules = target.template.rules.filter(r => r.id != ruleId);\n\t\t\t} else {\n\t\t\t\tconsole.error(\"removeEventTemplateRule didn't find\", templateId);\n\t\t\t}\n\t\t},\n\t\tremoveEventTemplateRuleClause({\n\t\t\ttemplateId,\n\t\t\truleId,\n\t\t\tclauseId,\n\t\t}: {\n\t\t\ttemplateId: string;\n\t\t\truleId: string;\n\t\t\tclauseId: string;\n\t\t}) {\n\t\t\tconst event = this.getEventByTemplateId(templateId);\n\t\t\tconst target = event?.template?.rules.find(r => r.id == ruleId);\n\t\t\tif (target) {\n\t\t\t\ttarget.clauses = target.clauses?.filter(c => c.id != clauseId);\n\t\t\t} else {\n\t\t\t\tconsole.error(\"removeEventTemplateRuleClause didn't find\", templateId, ruleId);\n\t\t\t}\n\t\t},\n\n\t\t/** ------------------------------------------------- */\n\n\t\t/** Previous student mutations */\n\n\t\t// update the slots of the current event participation\n\t\tsetEventParticipationSlots(slots: EventParticipationSlot[]) {\n\t\t\tif (this.currentEventParticipation) {\n\t\t\t\tthis.currentEventParticipation.slots = slots;\n\t\t\t}\n\t\t},\n\t\tsetEventParticipations(participations: PaginatedData) {\n\t\t\tthis.paginatedEventParticipations = participations;\n\t\t},\n\t\tsetCurrentEventParticipationSlot(slot: Partial) {\n\t\t\t// look for both slots and sub-slots\n\t\t\tconst flattenedSlots = this.currentEventParticipationFlattenedSlots;\n\t\t\tconst target = flattenedSlots.find(s => s.id == slot.id);\n\t\t\tif (!target) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"setCurrentEventParticipationSlot couldn't find slot with id \" + slot.id,\n\t\t\t\t);\n\t\t\t}\n\t\t\tObject.assign(target, { ...target, ...slot });\n\t\t},\n\t\tpatchCurrentEventParticipationSlot({\n\t\t\tslotId,\n\t\t\tchanges,\n\t\t}: {\n\t\t\tslotId: string;\n\t\t\tchanges: Partial;\n\t\t}) {\n\t\t\t// look for both slots and sub-slots\n\t\t\tconst flattenedSlots = this.currentEventParticipationFlattenedSlots;\n\t\t\tconst target = flattenedSlots.find((s: EventParticipationSlot) => s.id == slotId);\n\t\t\tif (!target) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"patchCurrentEventParticipationSlot couldn't find slot with id \" + slotId,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tObject.assign(target, { ...target, ...changes });\n\t\t},\n\n\t\t// updates an existing solution for an exercises or pushes a new one\n\t\tsetExerciseSolution({\n\t\t\texerciseId,\n\t\t\tpayload,\n\t\t}: {\n\t\t\texerciseId: string;\n\t\t\tpayload: ExerciseSolution;\n\t\t}) {\n\t\t\tconst solutions = this.getPaginatedSolutionsByExerciseId(exerciseId);\n\t\t\tconst target = solutions.data.find(s => s.id == payload.id);\n\t\t\tif (target) {\n\t\t\t\tObject.assign(target, payload);\n\t\t\t} else {\n\t\t\t\tsolutions.data.push(payload);\n\t\t\t}\n\t\t},\n\t\t/** --------------------------------------------- */\n\n\t\t/** Previous student actions */\n\t\tasync participateInEvent({ courseId, eventId }: EventIdActionPayload) {\n\t\t\tconst participation = await participateInEvent(courseId, eventId);\n\t\t\tthis.currentEventParticipation = participation;\n\t\t},\n\t\tasync moveEventParticipationCurrentSlotCursorForward({\n\t\t\tcourseId,\n\t\t}: CourseIdActionPayload) {\n\t\t\tif (!this.currentEventParticipation) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"moveEventParticipationCurrentSlotCursorForward called while currentEventParticipation was null\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst slot = await moveEventParticipationCurrentSlotCursor(\n\t\t\t\tcourseId,\n\t\t\t\tthis.currentEventParticipation.event.id,\n\t\t\t\tthis.currentEventParticipation.id,\n\t\t\t\t\"forward\",\n\t\t\t);\n\t\t\tthis.setEventParticipationSlots([slot]);\n\t\t},\n\t\tasync moveEventParticipationCurrentSlotCursorBack({\n\t\t\tcourseId,\n\t\t}: CourseIdActionPayload) {\n\t\t\tif (!this.currentEventParticipation) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"moveEventParticipationCurrentSlotCursorBack called while currentEventParticipation was null\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst slot = await moveEventParticipationCurrentSlotCursor(\n\t\t\t\tcourseId,\n\t\t\t\tthis.currentEventParticipation.event.id,\n\t\t\t\tthis.currentEventParticipation.id,\n\t\t\t\t\"back\",\n\t\t\t);\n\t\t\tthis.setEventParticipationSlots([slot]);\n\t\t},\n\t\tasync getEventPreview({ courseId, eventId }: EventIdActionPayload) {\n\t\t\t/**\n\t\t\t * Gets an event in detail mode\n\t\t\t *\n\t\t\t * Used to display a preview of an exam before participating into it\n\t\t\t */\n\t\t\tconst event = await getEvent(courseId, eventId, false);\n\t\t\tthis.previewingEvent = event;\n\t\t},\n\t\tasync partialUpdateCurrentEventParticipation({\n\t\t\tcourseId,\n\t\t\tchanges,\n\t\t}: CourseIdActionPayload & { changes: Partial }) {\n\t\t\tif (!this.currentEventParticipation) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"partialUpdateCurrentEventParticipation called with null currentParticipation\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst response = await partialUpdateEventParticipation(\n\t\t\t\tcourseId,\n\t\t\t\t// TODO assumes currentEventParticipation contains Event\n\t\t\t\tthis.currentEventParticipation.event.id,\n\t\t\t\tthis.currentEventParticipation.id,\n\t\t\t\tchanges,\n\t\t\t);\n\t\t\tthis.currentEventParticipation = response;\n\t\t},\n\t\tasync partialUpdateEventParticipation({\n\t\t\tcourseId,\n\t\t\teventId,\n\t\t\tparticipationId,\n\t\t\tchanges,\n\t\t}: ParticipationIdActionPayload & { changes: Partial }) {\n\t\t\tconst response = await partialUpdateEventParticipation(\n\t\t\t\tcourseId,\n\t\t\t\teventId,\n\t\t\t\tparticipationId,\n\t\t\t\tchanges,\n\t\t\t);\n\t\t\tthis.setEventParticipation(response);\n\t\t},\n\t\tasync getCurrentEventParticipation({\n\t\t\tcourseId,\n\t\t\teventId,\n\t\t\tparticipationId,\n\t\t}: ParticipationIdActionPayload) {\n\t\t\tconst participation = await getEventParticipation(\n\t\t\t\tcourseId,\n\t\t\t\teventId,\n\t\t\t\tparticipationId,\n\t\t\t);\n\t\t\tthis.currentEventParticipation = participation;\n\t\t},\n\t\t// TODO this is used for retrieving practices of a student, use better naming\n\t\tasync getCourseEventParticipations({\n\t\t\tcourseId,\n\t\t\tfromFirstPage,\n\t\t\tfilter = undefined,\n\t\t}: CourseIdActionPayload & {\n\t\t\tfromFirstPage: boolean;\n\t\t\tfilter: undefined | EventParticipationSearchFilter;\n\t\t}) {\n\t\t\tconst participations = await getCourseEventParticipations(\n\t\t\t\tcourseId,\n\t\t\t\tfromFirstPage ? 1 : (this.paginatedEventParticipations?.pageNumber ?? 0) + 1,\n\t\t\t\ttrue,\n\t\t\t\ttrue,\n\t\t\t\tfilter,\n\t\t\t);\n\n\t\t\tif (fromFirstPage || !this.paginatedEventParticipations) {\n\t\t\t\tthis.paginatedEventParticipations = participations;\n\t\t\t} else {\n\t\t\t\tthis.paginatedEventParticipations = updatePaginatedData(\n\t\t\t\t\tthis.paginatedEventParticipations,\n\t\t\t\t\tparticipations,\n\t\t\t\t\tfalse,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn !participations.isLastPage;\n\t\t},\n\t\tasync partialUpdateCurrentEventParticipationSlot({\n\t\t\tcourseId,\n\t\t\tslotId,\n\t\t\tchanges,\n\t\t\t// true if action mutates the store state to reflect changes,\n\t\t\t//false if action only dispatches api call\n\t\t\tmutate = true,\n\t\t\tforceStudent,\n\t\t}: CourseIdActionPayload & { slotId: string } & {\n\t\t\tchanges: Partial;\n\t\t\tmutate: boolean;\n\t\t\tforceStudent: boolean;\n\t\t}) {\n\t\t\tif (!this.currentEventParticipation) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"partialUpdateCurrentEventParticipation called with null currentParticipation\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst response = await partialUpdateEventParticipationSlot(\n\t\t\t\tcourseId,\n\t\t\t\t// TODO assumes currentEventParticipation contains Event\n\t\t\t\tthis.currentEventParticipation.event.id,\n\t\t\t\tthis.currentEventParticipation.id,\n\t\t\t\tslotId,\n\t\t\t\tchanges,\n\t\t\t\tforceStudent,\n\t\t\t);\n\t\t\tif (mutate) {\n\t\t\t\tthis.setCurrentEventParticipationSlot(response);\n\t\t\t}\n\t\t},\n\n\t\tasync partialUpdateCurrentEventParticipationSlotSubmission({\n\t\t\tcourseId,\n\t\t\tslotId,\n\t\t\tchanges,\n\t\t}: CourseIdActionPayload & { slotId: string } & {\n\t\t\tchanges: Partial;\n\t\t}) {\n\t\t\tif (!this.currentEventParticipation) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"partialUpdateCurrentEventParticipationSubmission called with null currentParticipation\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst response = await partialUpdateEventParticipationSlotSubmission(\n\t\t\t\tcourseId,\n\t\t\t\t// TODO assumes currentEventParticipation contains Event\n\t\t\t\tthis.currentEventParticipation.event.id,\n\t\t\t\tthis.currentEventParticipation.id,\n\t\t\t\tslotId,\n\t\t\t\tchanges,\n\t\t\t);\n\t\t\tthis.setCurrentEventParticipationSlot(response);\n\t\t},\n\t\tasync runCurrentEventParticipationSlotCode({\n\t\t\tcourseId,\n\t\t\tslot,\n\t\t}: CourseIdActionPayload & {\n\t\t\tslot: EventParticipationSlot;\n\t\t}) {\n\t\t\tif (!this.currentEventParticipation) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"runCurrentEventParticipationSlotCode called with null currentParticipation\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst previousExecutionResults = slot.execution_results;\n\t\t\ttry {\n\t\t\t\t// immediately mark slot as running\n\t\t\t\tthis.patchCurrentEventParticipationSlot({\n\t\t\t\t\tslotId: slot.id,\n\t\t\t\t\tchanges: { execution_results: { ...slot.execution_results, state: \"running\" } },\n\t\t\t\t});\n\t\t\t\t// schedule running on the server-side\n\t\t\t\tconst response = await runEventParticipationSlotCode(\n\t\t\t\t\tcourseId,\n\t\t\t\t\t// TODO assumes currentEventParticipation contains Event\n\t\t\t\t\tthis.currentEventParticipation.event.id,\n\t\t\t\t\tthis.currentEventParticipation.id,\n\t\t\t\t\tslot.id,\n\t\t\t\t);\n\t\t\t\tthis.setCurrentEventParticipationSlot(response);\n\t\t\t\treturn response;\n\t\t\t} catch (e) {\n\t\t\t\t// reset execution results in case of errors\n\t\t\t\tthis.patchCurrentEventParticipationSlot({\n\t\t\t\t\tslotId: slot.id,\n\t\t\t\t\tchanges: { execution_results: previousExecutionResults },\n\t\t\t\t});\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t},\n\t\tasync createExerciseSolution({\n\t\t\tcourseId,\n\t\t\texerciseId,\n\t\t\tsolution,\n\t\t}: ExerciseIdActionPayload & ExerciseSolutionActionPayload) {\n\t\t\tconst newSolution = await createExerciseSolution(courseId, exerciseId, solution);\n\t\t\tconst exerciseSolutions = this.paginatedSolutionsByExerciseId[exerciseId]?.data;\n\n\t\t\tif (!exerciseSolutions) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"createExerciseSolution couldn't find field solutions for exercise \" +\n\t\t\t\t\t\texerciseId,\n\t\t\t\t);\n\t\t\t}\n\t\t\texerciseSolutions.push(newSolution);\n\t\t\treturn newSolution;\n\t\t},\n\t\tasync updateExerciseSolution({\n\t\t\tcourseId,\n\t\t\texerciseId,\n\t\t\tsolution,\n\t\t}: ExerciseIdActionPayload & ExerciseSolutionActionPayload) {\n\t\t\tconst updatedSolution = await updateExerciseSolution(\n\t\t\t\tcourseId,\n\t\t\t\texerciseId,\n\t\t\t\tsolution.id,\n\t\t\t\tsolution,\n\t\t\t);\n\t\t\t//this.setExerciseSolution({ exerciseId, solution: updatedSolution });\n\t\t},\n\t\tasync getSolutionsByExercise({\n\t\t\tcourseId,\n\t\t\texerciseId,\n\t\t\tfromFirstPage = true,\n\t\t\tfilter = null,\n\t\t}: ExerciseIdActionPayload & {\n\t\t\tfromFirstPage: boolean;\n\t\t\tfilter: ExerciseSolutionSearchFilter | null;\n\t\t}) {\n\t\t\tconst paginatedSolutionsForExercise =\n\t\t\t\tthis.paginatedSolutionsByExerciseId[exerciseId];\n\t\t\tconst paginatedSolutions = await getExerciseSolutionsByExercise(\n\t\t\t\tcourseId,\n\t\t\t\texerciseId,\n\t\t\t\tfromFirstPage ? 1 : (paginatedSolutionsForExercise?.pageNumber ?? 0) + 1, // TODO refactor\n\t\t\t\tfilter,\n\t\t\t);\n\n\t\t\tif (fromFirstPage) {\n\t\t\t\tthis.paginatedSolutionsByExerciseId[exerciseId] = paginatedSolutions;\n\t\t\t} else {\n\t\t\t\tthis.paginatedSolutionsByExerciseId[exerciseId] = updatePaginatedData(\n\t\t\t\t\tthis.getPaginatedSolutionsByExerciseId(exerciseId),\n\t\t\t\t\tpaginatedSolutions,\n\t\t\t\t\tfalse,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn !this.paginatedSolutionsByExerciseId[exerciseId].isLastPage;\n\t\t},\n\t\tasync deleteExerciseSolution({\n\t\t\tcourseId,\n\t\t\texerciseId,\n\t\t\tsolutionId,\n\t\t}: ExerciseSolutionIdActionPayload) {\n\t\t\tawait deleteExerciseSolution(courseId, exerciseId, solutionId);\n\t\t\tconst exerciseSolutions = this.paginatedSolutionsByExerciseId[exerciseId];\n\n\t\t\tif (!exerciseSolutions) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"addExerciseSolution couldn't find field solutions for exercise \" + exerciseId,\n\t\t\t\t);\n\t\t\t}\n\t\t\texerciseSolutions.data = exerciseSolutions.data.filter(s => s.id != solutionId);\n\t\t},\n\t\tasync createExerciseSolutionComment({\n\t\t\tcourseId,\n\t\t\texerciseId,\n\t\t\tsolutionId,\n\t\t\tcomment,\n\t\t}: ExerciseSolutionIdActionPayload & {\n\t\t\tcomment: ExerciseSolutionComment;\n\t\t}) {\n\t\t\tconst newComment = await createExerciseSolutionComment(\n\t\t\t\tcourseId,\n\t\t\t\texerciseId,\n\t\t\t\tsolutionId,\n\t\t\t\tcomment,\n\t\t\t);\n\t\t\tconst solution = this.getPaginatedSolutionsByExerciseId(exerciseId).data.find(\n\t\t\t\ts => s.id == solutionId,\n\t\t\t);\n\t\t\tif (!solution) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"createExerciseSolutionComment couldn't find solution with id \" + solutionId,\n\t\t\t\t);\n\t\t\t}\n\t\t\tsolution.comments.push(newComment);\n\t\t},\n\t\t/**\n\t\t * Creates an ExerciseSolutionVote and re-fetches the voted solution\n\t\t */\n\t\tasync createExerciseSolutionVote({\n\t\t\tcourseId,\n\t\t\texerciseId,\n\t\t\tsolutionId,\n\t\t\tvote,\n\t\t}: ExerciseSolutionIdActionPayload & {\n\t\t\tvote: ExerciseSolutionVote | undefined;\n\t\t}) {\n\t\t\tconst updatedSolution = await voteExerciseSolution(\n\t\t\t\tcourseId,\n\t\t\t\texerciseId,\n\t\t\t\tsolutionId,\n\t\t\t\tvote,\n\t\t\t);\n\t\t\tconst solution = this.getPaginatedSolutionsByExerciseId(exerciseId).data.find(\n\t\t\t\ts => s.id == solutionId,\n\t\t\t);\n\t\t\tif (!solution) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"createExerciseSolutionComment couldn't find solution with id \" + solutionId,\n\t\t\t\t);\n\t\t\t}\n\t\t\tObject.assign(solution, updatedSolution);\n\t\t},\n\t\t/**\n\t\t * Toggles an ExerciseSolution bookmark status for\n\t\t * the user and re-fetches the solution\n\t\t */\n\t\tasync setExerciseSolutionBookmark({\n\t\t\tcourseId,\n\t\t\texerciseId,\n\t\t\tsolutionId,\n\t\t\tbookmarked,\n\t\t}: ExerciseSolutionIdActionPayload & {\n\t\t\tbookmarked: boolean;\n\t\t}) {\n\t\t\tconst updatedSolution = await setExerciseSolutionBookmark(\n\t\t\t\tcourseId,\n\t\t\t\texerciseId,\n\t\t\t\tsolutionId,\n\t\t\t\tbookmarked,\n\t\t\t);\n\n\t\t\tconst solution = this.getPaginatedSolutionsByExerciseId(exerciseId).data.find(\n\t\t\t\ts => s.id == solutionId,\n\t\t\t);\n\n\t\t\tif (!solution) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"setExerciseSolutionBookmark couldn't find solution with id \" + solutionId,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tObject.assign(solution, updatedSolution);\n\t\t},\n\n\t\t/** Previous teacher actions */\n\t\t// CRUD on courses\n\t\tasync getCourse({ courseId }: CourseIdActionPayload) {\n\t\t\tconst course = await getCourse(courseId);\n\t\t\tthis.setCourse(course);\n\t\t},\n\t\tasync getCourseGamificationContext({ courseId }: CourseIdActionPayload) {\n\t\t\ttry {\n\t\t\t\tconst context = await getCourseGamificationContext(courseId);\n\t\t\t\tthis.gamificationContext = context;\n\t\t\t} catch {\n\t\t\t\tthis.gamificationContext = null;\n\t\t\t}\n\t\t},\n\t\tasync getGamificationContextGoals({ contextId }: { contextId: string }) {\n\t\t\tconst goals = await getContextGoals(contextId);\n\t\t\tthis.gamificationContextGoals = goals;\n\t\t\tthis.progressByGoalId = {};\n\t\t},\n\t\tasync getGamificationGoalProgress({\n\t\t\tcontextId,\n\t\t\tgoalId,\n\t\t}: {\n\t\t\tcontextId: string;\n\t\t\tgoalId: string;\n\t\t}) {\n\t\t\ttry {\n\t\t\t\tconst progress = await getGoalProgress(contextId, goalId);\n\t\t\t\tthis.progressByGoalId[goalId] = progress;\n\t\t\t} catch (e) {\n\t\t\t\tthis.progressByGoalId[goalId] = { current_level: 0, action_counts: [] };\n\t\t\t}\n\t\t},\n\t\tasync getCourses() {\n\t\t\tconst courses = await getCourses();\n\t\t\tthis.courses = courses;\n\t\t},\n\t\tasync getTags({\n\t\t\tcourseId,\n\t\t\tincludeExerciseCount = false,\n\t\t}: CourseIdActionPayload & { includeExerciseCount: boolean }) {\n\t\t\tconst tags = await getTags(courseId, includeExerciseCount);\n\t\t\tthis.tags = tags;\n\t\t},\n\t\tasync createCourse(course: Course) {\n\t\t\tconst newCourse = await createCourse(course);\n\t\t\treturn newCourse;\n\t\t},\n\t\tasync bookmarkCourse({\n\t\t\tcourseId,\n\t\t\tremove,\n\t\t}: CourseIdActionPayload & { remove: boolean }) {\n\t\t\tconst updatedCourse = await setCourseBookmark(courseId, remove);\n\t\t\tconst oldCourse = this.getCourseById(courseId);\n\t\t\tif (!oldCourse) {\n\t\t\t\tthrow new Error(\"updateCourse couldn't find course with id \" + courseId);\n\t\t\t}\n\t\t\tObject.assign(oldCourse, updatedCourse);\n\t\t\treturn updatedCourse;\n\t\t},\n\t\tasync updateCourse(course: Course) {\n\t\t\tconst updatedCourse = await updateCourse(course.id, course);\n\t\t\tconst oldCourse = this.getCourseById(course.id);\n\t\t\tif (!oldCourse) {\n\t\t\t\tthrow new Error(\"updateCourse couldn't find course with id \" + course.id);\n\t\t\t}\n\t\t\tObject.assign(oldCourse, updatedCourse);\n\t\t\treturn updatedCourse;\n\t\t},\n\n\t\t// CRUD on exercises\n\t\tasync createExercise({\n\t\t\tcourseId,\n\t\t\texercise,\n\t\t}: CourseIdActionPayload & ExerciseActionPayload) {\n\t\t\tconst newExercise = await createExercise(courseId, exercise);\n\t\t\tthis.paginatedExercises = prependToPaginatedData(\n\t\t\t\tthis.paginatedExercises,\n\t\t\t\tnewExercise,\n\t\t\t);\n\t\t\treturn newExercise;\n\t\t},\n\t\tasync getExercise({ courseId, exerciseId }: ExerciseIdActionPayload) {\n\t\t\tconst exercise = (await getExercisesById(courseId, [exerciseId]))[0];\n\t\t\tthis.setExercise(exercise);\n\t\t},\n\t\tasync bulkCreateExercises({\n\t\t\tcourseId,\n\t\t\texercises,\n\t\t}: CourseIdActionPayload & {\n\t\t\texercises: Exercise[];\n\t\t}) {\n\t\t\tconst newExercises = await bulkCreateExercises(courseId, exercises);\n\t\t\tthis.paginatedExercises = prependToPaginatedData(\n\t\t\t\tthis.getPaginatedExercises,\n\t\t\t\t...newExercises,\n\t\t\t);\n\t\t\treturn newExercises;\n\t\t},\n\t\tasync updateExercise({\n\t\t\tcourseId,\n\t\t\texercise,\n\t\t}: CourseIdActionPayload & ExerciseActionPayload) {\n\t\t\tawait updateExercise(courseId, exercise.id, exercise);\n\t\t},\n\t\tasync deleteExercise({ courseId, exerciseId }: ExerciseIdActionPayload) {\n\t\t\tawait deleteExercise(courseId, exerciseId);\n\t\t\tthis.paginatedExercises = deleteByIdFromPaginatedData(this.paginatedExercises, {\n\t\t\t\tid: exerciseId,\n\t\t\t});\n\t\t},\n\t\tasync lockExercise({ courseId, exerciseId }: ExerciseIdActionPayload) {\n\t\t\tconst exercise = await lockExercise(courseId, exerciseId);\n\t\t\tthis.setExercise(exercise);\n\t\t},\n\t\tasync createExerciseChild(\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t\t\t{\n\t\t\t\tcourseId,\n\t\t\t\texerciseId,\n\t\t\t\tchildType,\n\t\t\t\tpayload,\n\t\t\t}: ExerciseIdActionPayload & {\n\t\t\t\tchildType: K;\n\t\t\t\tpayload: exerciseChildNameToChildType[K];\n\t\t\t},\n\t\t) {\n\t\t\tconst apiCalls: Record = {\n\t\t\t\tchoice: createExerciseChoice,\n\t\t\t\ttestcase: createExerciseTestCase,\n\t\t\t\tsub_exercise: createExerciseSubExercise,\n\t\t\t};\n\t\t\t// get the correct api call to create the child\n\t\t\tconst apiCall = apiCalls[childType];\n\t\t\tconst newChild = await apiCall(courseId, exerciseId, payload);\n\t\t\tthis.setExerciseChild({\n\t\t\t\tchildType,\n\t\t\t\texerciseId: exerciseId,\n\t\t\t\tpayload: newChild as any, // TODO review\n\t\t\t});\n\t\t\treturn newChild;\n\t\t},\n\t\tasync updateExerciseChild({\n\t\t\tcourseId,\n\t\t\texerciseId,\n\t\t\tchildType,\n\t\t\tpayload,\n\t\t\treFetch = false,\n\t\t}: ExerciseIdActionPayload & {\n\t\t\tchildType: K;\n\t\t\tpayload: exerciseChildNameToChildType[K];\n\t\t\treFetch: boolean;\n\t\t}) {\n\t\t\tconst apiCalls: Record = {\n\t\t\t\tchoice: updateExerciseChoice,\n\t\t\t\ttestcase: updateExerciseTestCase,\n\t\t\t\tsub_exercise: updateExerciseSubExercise,\n\t\t\t};\n\t\t\tconst apiCall = apiCalls[childType];\n\n\t\t\tawait apiCall(courseId, exerciseId, payload.id as string, payload as any);\n\n\t\t\tif (reFetch) {\n\t\t\t\tif (childType !== \"choice\") {\n\t\t\t\t\tthrow new Error(\"reFetch not implemented for \" + childType);\n\t\t\t\t}\n\t\t\t\tconst choices = await getExerciseChoices(courseId, exerciseId);\n\t\t\t\tthis.setExerciseChildren({\n\t\t\t\t\texerciseId,\n\t\t\t\t\tchildrenName: \"choices\",\n\t\t\t\t\tpayload: choices,\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tasync deleteExerciseChild({\n\t\t\tcourseId,\n\t\t\texerciseId,\n\t\t\tchildType,\n\t\t\tchildId,\n\t\t}: ExerciseIdActionPayload & {\n\t\t\tchildType: exerciseChildName;\n\t\t\tchildId: string;\n\t\t}) {\n\t\t\tconst apiCalls: Record = {\n\t\t\t\tchoice: deleteExerciseChoice,\n\t\t\t\ttestcase: deleteExerciseTestCase,\n\t\t\t\tsub_exercise: deleteExerciseSubExercise,\n\t\t\t};\n\t\t\tconst apiCall = apiCalls[childType];\n\t\t\tawait apiCall(courseId, exerciseId, childId);\n\t\t\tthis.removeExerciseChild({ exerciseId, childType, childId });\n\t\t},\n\t\tasync getExercisesById({\n\t\t\tcourseId,\n\t\t\texerciseIds,\n\t\t\treplace = true,\n\t\t}: CourseIdActionPayload & {\n\t\t\texerciseIds: string[];\n\t\t\treplace: boolean;\n\t\t}) {\n\t\t\tconst exercises = await getExercisesById(courseId, exerciseIds);\n\t\t\tif (replace) {\n\t\t\t\tthis.paginatedExercises = {\n\t\t\t\t\tdata: exercises,\n\t\t\t\t\tisLastPage: true,\n\t\t\t\t\tcount: exercises.length,\n\t\t\t\t\tpageNumber: 1,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tthis.paginatedExercises = prependToPaginatedData(\n\t\t\t\t\tthis.paginatedExercises,\n\t\t\t\t\t...exercises,\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\tasync getExerciseTestCaseAttachments({\n\t\t\tcourseId,\n\t\t\texerciseId,\n\t\t\ttestcaseId,\n\t\t}: ExerciseIdActionPayload & {\n\t\t\ttestcaseId: string;\n\t\t}) {\n\t\t\tconst attachments = await getExerciseTestCaseAttachments(\n\t\t\t\tcourseId,\n\t\t\t\texerciseId,\n\t\t\t\ttestcaseId,\n\t\t\t);\n\t\t\tthis.exerciseTestCaseAttachmentsByTestCaseId[testcaseId] = attachments;\n\t\t\treturn attachments;\n\t\t},\n\t\tasync createExerciseTestCaseAttachment({\n\t\t\tcourseId,\n\t\t\texerciseId,\n\t\t\ttestcaseId,\n\t\t\tattachment,\n\t\t}: ExerciseIdActionPayload & {\n\t\t\ttestcaseId: string;\n\t\t\tattachment: Blob;\n\t\t}) {\n\t\t\tconst response = await createExerciseTestCaseAttachment(\n\t\t\t\tcourseId,\n\t\t\t\texerciseId,\n\t\t\t\ttestcaseId,\n\t\t\t\tattachment,\n\t\t\t);\n\t\t\tthis.exerciseTestCaseAttachmentsByTestCaseId[testcaseId] ??= [];\n\t\t\tthis.exerciseTestCaseAttachmentsByTestCaseId[testcaseId].push(response);\n\t\t},\n\t\tasync deleteExerciseTestCaseAttachment({\n\t\t\tcourseId,\n\t\t\texerciseId,\n\t\t\ttestcaseId,\n\t\t\tattachmentId,\n\t\t}: ExerciseIdActionPayload & {\n\t\t\ttestcaseId: string;\n\t\t\tattachmentId: string;\n\t\t}) {\n\t\t\tawait deleteExerciseTestCaseAttachment(\n\t\t\t\tcourseId,\n\t\t\t\texerciseId,\n\t\t\t\ttestcaseId,\n\t\t\t\tattachmentId,\n\t\t\t);\n\t\t\tthis.exerciseTestCaseAttachmentsByTestCaseId[testcaseId] =\n\t\t\t\tthis.exerciseTestCaseAttachmentsByTestCaseId[testcaseId]?.filter(\n\t\t\t\t\ta => a.id != attachmentId,\n\t\t\t\t) ?? [];\n\t\t},\n\t\tasync getExercises({\n\t\t\tcourseId,\n\t\t\tfromFirstPage = true,\n\t\t\tfilters = null,\n\t\t}: CourseIdActionPayload & {\n\t\t\tfromFirstPage: boolean;\n\t\t\tfilters: ExerciseSearchFilter | null;\n\t\t}) {\n\t\t\tconst paginatedExercises = await getExercises(\n\t\t\t\tcourseId,\n\t\t\t\tfromFirstPage ? 1 : (this.paginatedExercises.pageNumber ?? 0) + 1, // TODO refactor\n\t\t\t\tfilters,\n\t\t\t);\n\n\t\t\t// investigate https://sentry.io/organizations/samuele/issues/3565313088/?project=6265941&query=is%3Aunresolved\n\t\t\tif (!paginatedExercises.data) {\n\t\t\t\tconsole.error(\n\t\t\t\t\t{ courseId, fromFirstPage, filters },\n\t\t\t\t\t\"responded with undefined\",\n\t\t\t\t\tpaginatedExercises,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (fromFirstPage) {\n\t\t\t\tthis.paginatedExercises = paginatedExercises;\n\t\t\t} else {\n\t\t\t\tthis.paginatedExercises = updatePaginatedData(\n\t\t\t\t\tthis.paginatedExercises,\n\t\t\t\t\tpaginatedExercises,\n\t\t\t\t\tfalse,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn !this.paginatedExercises.isLastPage;\n\t\t},\n\t\tasync addExerciseTag({\n\t\t\tcourseId,\n\t\t\texerciseId,\n\t\t\ttag,\n\t\t\tisPublic,\n\t\t}: ExerciseIdActionPayload & {\n\t\t\ttag: string;\n\t\t\tisPublic: boolean;\n\t\t}) {\n\t\t\tawait addTagToExercise(courseId, exerciseId, tag, isPublic);\n\t\t\tconst target = this.getExerciseById(exerciseId);\n\t\t\ttarget[isPublic ? \"public_tags\" : \"private_tags\"]?.push({\n\t\t\t\tname: tag,\n\t\t\t});\n\t\t},\n\t\tasync removeExerciseTag({\n\t\t\tcourseId,\n\t\t\texerciseId,\n\t\t\ttag,\n\t\t\tisPublic,\n\t\t}: ExerciseIdActionPayload & {\n\t\t\ttag: string;\n\t\t\tisPublic: boolean;\n\t\t}) {\n\t\t\tawait removeTagFromExercise(courseId, exerciseId, tag, isPublic);\n\t\t\tconst target = this.getExerciseById(exerciseId);\n\t\t\ttarget[isPublic ? \"public_tags\" : \"private_tags\"] = target[\n\t\t\t\tisPublic ? \"public_tags\" : \"private_tags\"\n\t\t\t]?.filter(t => t.name != tag);\n\t\t},\n\n\t\t// CRUD on events\n\t\tasync createEvent({ courseId, event }: CourseIdActionPayload & EventActionPayload) {\n\t\t\tconst newEvent = await createEvent(courseId, event);\n\t\t\tthis.events.unshift(newEvent);\n\t\t\treturn newEvent;\n\t\t},\n\t\t// TODO better naming scheme, e.g. getEventsByFilter\n\t\tasync getEvents({\n\t\t\tcourseId,\n\t\t\tfilters,\n\t\t}: CourseIdActionPayload & {\n\t\t\tfilters?: EventSearchFilter;\n\t\t}) {\n\t\t\tconst events = await getEvents(courseId, filters);\n\t\t\tthis.events = events;\n\t\t},\n\t\tasync getEvent({\n\t\t\tcourseId,\n\t\t\teventId,\n\t\t\tincludeDetails = false,\n\t\t}: EventIdActionPayload & {\n\t\t\tincludeDetails: boolean;\n\t\t}) {\n\t\t\tconst event = await getEvent(courseId, eventId, includeDetails);\n\t\t\tthis.events.unshift(event);\n\t\t},\n\t\tasync updateEvent({ courseId, event }: CourseIdActionPayload & EventActionPayload) {\n\t\t\tawait updateEvent(courseId, event.id, event);\n\t\t},\n\t\tasync partialUpdateEvent({\n\t\t\tcourseId,\n\t\t\teventId,\n\t\t\tchanges,\n\t\t\tmutate = false,\n\t\t\tfireIntegrationEvent = false,\n\t\t}: EventIdActionPayload & {\n\t\t\tchanges: Partial;\n\t\t\tmutate: boolean;\n\t\t\tfireIntegrationEvent?: boolean;\n\t\t}) {\n\t\t\tconst event = await partialUpdateEvent(\n\t\t\t\tcourseId,\n\t\t\t\teventId,\n\t\t\t\tchanges,\n\t\t\t\tfireIntegrationEvent,\n\t\t\t);\n\t\t\tif (mutate) {\n\t\t\t\tthis.setEvent({ eventId, payload: event });\n\t\t\t}\n\t\t},\n\t\tasync lockEvent({ courseId, eventId }: EventIdActionPayload) {\n\t\t\tconst event = await lockEvent(courseId, eventId);\n\t\t\tthis.setEvent({ eventId, payload: event });\n\t\t},\n\n\t\t// CRUD on event participations\n\t\tasync getEventParticipations({\n\t\t\tcourseId,\n\t\t\teventId,\n\t\t\tincludeDetails,\n\t\t\tforCsv, // TODO refactor\n\t\t\t// TODO mutate = false is only used by course insights & csv downloader, consider calling the api function directly and removing this param\n\t\t\tmutate = true,\n\t\t}: EventIdActionPayload & {\n\t\t\tincludeDetails?: boolean;\n\t\t\tforCsv?: boolean;\n\t\t\tmutate: boolean;\n\t\t}) {\n\t\t\tconst participations = await getEventParticipations(\n\t\t\t\tcourseId,\n\t\t\t\teventId,\n\t\t\t\tincludeDetails,\n\t\t\t\tforCsv,\n\t\t\t);\n\t\t\tif (mutate) {\n\t\t\t\tthis.eventParticipations = participations;\n\t\t\t}\n\t\t\treturn participations;\n\t\t},\n\t\tasync getEventParticipation({\n\t\t\tcourseId,\n\t\t\teventId,\n\t\t\tparticipationId,\n\t\t}: ParticipationIdActionPayload) {\n\t\t\tconst participation = await getEventParticipation(\n\t\t\t\tcourseId,\n\t\t\t\teventId,\n\t\t\t\tparticipationId,\n\t\t\t);\n\t\t\tthis.setEventParticipation(participation);\n\t\t},\n\n\t\t// CRUD on event templates, template rules, and rule clauses\n\t\tasync deleteEventTemplateRule({\n\t\t\tcourseId,\n\t\t\ttemplateId,\n\t\t\truleId,\n\t\t}: TemplateRuleIdActionPayload) {\n\t\t\tawait deleteEventTemplateRule(courseId, templateId, ruleId);\n\t\t\tthis.removeEventTemplateRule({ templateId, ruleId });\n\t\t},\n\t\tasync deleteEventTemplateRuleClause({\n\t\t\tcourseId,\n\t\t\ttemplateId,\n\t\t\truleId,\n\t\t\tclauseId,\n\t\t}: TemplateRuleClauseIdActionPayload) {\n\t\t\tawait deleteEventTemplateRuleClause(courseId, templateId, ruleId, clauseId);\n\t\t\tthis.removeEventTemplateRuleClause({\n\t\t\t\ttemplateId,\n\t\t\t\truleId,\n\t\t\t\tclauseId,\n\t\t\t});\n\t\t},\n\t\tasync partialUpdateEventTemplateRule({\n\t\t\tcourseId,\n\t\t\ttemplateId,\n\t\t\truleId,\n\t\t\tchanges,\n\t\t\treFetch = false,\n\t\t}: TemplateRuleIdActionPayload & {\n\t\t\tchanges: Partial;\n\t\t\treFetch: boolean;\n\t\t}) {\n\t\t\tawait partialUpdateEventTemplateRule(courseId, templateId, ruleId, changes);\n\t\t\tif (reFetch) {\n\t\t\t\tconst rules = (await getEventTemplate(courseId, templateId)).rules;\n\t\t\t\tthis.setEventTemplateRules({\n\t\t\t\t\ttemplateId,\n\t\t\t\t\tpayload: rules,\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tasync getEventTemplateRule({\n\t\t\tcourseId,\n\t\t\ttemplateId,\n\t\t\truleId,\n\t\t}: TemplateRuleIdActionPayload) {\n\t\t\tconst rule = await getEventTemplateRule(courseId, templateId, ruleId);\n\t\t\tthis.patchEventTemplateRule({\n\t\t\t\ttemplateId,\n\t\t\t\truleId,\n\t\t\t\tpayload: rule,\n\t\t\t});\n\t\t},\n\t\tasync createEventTemplateRule({\n\t\t\tcourseId,\n\t\t\ttemplateId,\n\t\t\trule,\n\t\t}: CourseIdActionPayload & TemplateIdPayload & EventTemplateRuleActionPayload) {\n\t\t\tconst newRule = await createEventTemplateRule(courseId, templateId, rule);\n\t\t\tconst event = this.getEventByTemplateId(templateId);\n\t\t\tconst rules = event?.template?.rules;\n\t\t\tif (!rules) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"addEventTemplateRule couldn't find event with template id \" + templateId,\n\t\t\t\t);\n\t\t\t}\n\t\t\trules.push(newRule);\n\t\t\treturn newRule;\n\t\t},\n\t\tasync createEventTemplateRuleClause({\n\t\t\tcourseId,\n\t\t\ttemplateId,\n\t\t\truleId,\n\t\t\tclause,\n\t\t}: TemplateRuleIdActionPayload & EventTemplateRuleClauseActionPayload) {\n\t\t\tconst newClause = await createEventTemplateRuleClause(\n\t\t\t\tcourseId,\n\t\t\t\ttemplateId,\n\t\t\t\truleId,\n\t\t\t\tclause,\n\t\t\t);\n\t\t\tconst event = this.getEventByTemplateId(templateId);\n\t\t\tconst rules = event?.template?.rules;\n\t\t\tif (!rules) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"addEventTemplateRuleClause couldn't find event with template id \" + templateId,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst targetRule = rules?.find((r: EventTemplateRule) => r.id === ruleId);\n\t\t\tif (!targetRule) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"addEventTemplateRuleClause couldn't find rule with id \" + ruleId,\n\t\t\t\t);\n\t\t\t}\n\t\t\ttargetRule?.clauses?.push(newClause);\n\t\t\treturn newClause;\n\t\t},\n\t\tasync updateEventTemplateRuleClause({\n\t\t\tcourseId,\n\t\t\ttemplateId,\n\t\t\truleId,\n\t\t\tclause,\n\t\t}: TemplateRuleIdActionPayload & EventTemplateRuleClauseActionPayload) {\n\t\t\tconst updatedClause = await updateEventTemplateRuleClause(\n\t\t\t\tcourseId,\n\t\t\t\ttemplateId,\n\t\t\t\truleId,\n\t\t\t\tclause,\n\t\t\t);\n\t\t\t//return updatedClause;\n\t\t},\n\n\t\t/** CRUD on users */\n\t\tasync getUsersForCourse(\n\t\t\t// returns users with applied filters their permissions relative to given course\n\t\t\t{\n\t\t\t\tcourseId,\n\t\t\t\tteachersOnly,\n\t\t\t\tsearch,\n\t\t\t}: CourseIdActionPayload & { teachersOnly: boolean; search?: string },\n\t\t) {\n\t\t\t// TODO pagination\n\t\t\tconst users = await getUsers(courseId, {\n\t\t\t\tisTeacher: teachersOnly ? true : undefined,\n\t\t\t\tsearch,\n\t\t\t});\n\t\t\tthis.paginatedUsers = users;\n\t\t},\n\t\tasync getPrivilegedUsersForCourse({ courseId }: CourseIdActionPayload) {\n\t\t\t// we can assume the number of privileged users for a given course will be fairly\n\t\t\t// small, therefore no need to keep them paginated - we can fetch all of them at once\n\t\t\tconst users = await getUsers(courseId, { hasPrivileges: true, size: 99999999 });\n\t\t\tthis.privilegedUsers = users.data;\n\t\t},\n\t\tasync getCourseEnrolledUsers(\n\t\t\t// returns all users that are enrolled in given course\n\t\t\t{ courseId }: CourseIdActionPayload,\n\t\t) {\n\t\t\tconst users = await getUsersEnrolledInCourse(courseId);\n\t\t\tthis.enrolledUsers = users;\n\t\t},\n\t\tasync enrollUsersInCourse(\n\t\t\t// returns all users that are enrolled in given course\n\t\t\t{\n\t\t\t\tcourseId,\n\t\t\t\tuserIds,\n\t\t\t\temails,\n\t\t\t}: CourseIdActionPayload & { userIds: string[]; emails: string[] },\n\t\t) {\n\t\t\tawait enrollUsersInCourse(courseId, userIds, emails);\n\t\t},\n\t\tasync getCourseActiveUsers(\n\t\t\t// returns all users that are active in given course\n\t\t\t{ courseId }: CourseIdActionPayload,\n\t\t) {\n\t\t\tconst users = await getActiveUsersForCourse(courseId);\n\t\t\tthis.activeUsers = users;\n\t\t},\n\t\tasync updateUserCoursePrivileges({\n\t\t\tcourseId,\n\t\t\tuserId,\n\t\t\temail,\n\t\t\tprivileges,\n\t\t}: CourseIdActionPayload & {\n\t\t\tuserId: string | null;\n\t\t\temail: string | null;\n\t\t\tprivileges: CoursePrivilege[];\n\t\t}) {\n\t\t\tconst user = await updateUserCoursePrivileges(courseId, userId, email, privileges);\n\n\t\t\tconst newPrivileges = user.course_privileges ?? [];\n\t\t\tconst privilegedUserIndex = this.privilegedUsers.findIndex(u => u.id == user.id);\n\t\t\tconst userWasPrivileged = privilegedUserIndex !== -1;\n\n\t\t\t// if user was not among the privileged users but now has at least\n\t\t\t// one privilege, it should be added\n\t\t\tconst shouldAddToPrivilegedUsers = !userWasPrivileged && newPrivileges.length > 0;\n\n\t\t\t// if user was among the privileged users but now has 0 privileges,\n\t\t\t// it should be removed\n\t\t\tconst shouldRemoveFromPrivilegedUsers =\n\t\t\t\tuserWasPrivileged && newPrivileges.length === 0;\n\n\t\t\t// update or add user to user list\n\t\t\tconst target = this.paginatedUsers.data.find(u => u.id == user.id);\n\t\t\tif (target) {\n\t\t\t\tObject.assign(target, user);\n\t\t\t} else {\n\t\t\t\tprependToPaginatedData(this.paginatedUsers, user);\n\t\t\t}\n\n\t\t\t// update, add, or remove user in privileged users list\n\t\t\tif (shouldRemoveFromPrivilegedUsers) {\n\t\t\t\tthis.privilegedUsers.splice(privilegedUserIndex, 1);\n\t\t\t} else if (shouldAddToPrivilegedUsers) {\n\t\t\t\tthis.privilegedUsers.push(user);\n\t\t\t} else {\n\t\t\t\tObject.assign(this.privilegedUsers[privilegedUserIndex], user);\n\t\t\t}\n\n\t\t\treturn user;\n\t\t},\n\t\tasync bulkPartialUpdateEventParticipation({\n\t\t\tcourseId,\n\t\t\tchanges,\n\t\t\teventId,\n\t\t\tparticipationIds,\n\t\t\tfireIntegrationEvent,\n\t\t}: EventIdActionPayload & {\n\t\t\tchanges: Partial;\n\t\t\tparticipationIds: string[];\n\t\t\tfireIntegrationEvent?: boolean;\n\t\t}) {\n\t\t\tconst response = await bulkPartialUpdateEventParticipation(\n\t\t\t\tcourseId,\n\t\t\t\teventId,\n\t\t\t\tparticipationIds,\n\t\t\t\tchanges,\n\t\t\t\tfireIntegrationEvent,\n\t\t\t);\n\t\t\tresponse.forEach(p => this.setEventParticipation(p));\n\t\t},\n\t\tasync getEventParticipationSlot({\n\t\t\tcourseId,\n\t\t\teventId,\n\t\t\tparticipationId,\n\t\t\tslotId,\n\t\t}: ParticipationSlotIdActionPayload) {\n\t\t\tconst response = await getEventParticipationSlot(\n\t\t\t\tcourseId,\n\t\t\t\teventId,\n\t\t\t\tparticipationId,\n\t\t\t\tslotId,\n\t\t\t);\n\t\t\tthis.setEventParticipationSlot({ participationId, slotId, payload: response });\n\t\t},\n\t\tasync partialUpdateEventParticipationSlot({\n\t\t\tcourseId,\n\t\t\teventId,\n\t\t\tparticipationId,\n\t\t\tslotId,\n\t\t\tchanges,\n\t\t\t// true if action mutates the store state to reflect changes,\n\t\t\t//false if action only dispatches api call\n\t\t\tmutate = true,\n\t\t}: ParticipationSlotIdActionPayload & {\n\t\t\tchanges: Partial;\n\t\t\tmutate: boolean;\n\t\t}) {\n\t\t\tconst response = await partialUpdateEventParticipationSlot(\n\t\t\t\tcourseId,\n\t\t\t\teventId,\n\t\t\t\tparticipationId,\n\t\t\t\tslotId,\n\t\t\t\tchanges,\n\t\t\t);\n\t\t\tif (mutate) {\n\t\t\t\tthis.setEventParticipationSlot({ slotId, payload: response, participationId });\n\t\t\t}\n\t\t\treturn response;\n\t\t},\n\t},\n});\n","module.exports = __webpack_public_path__ + \"img/evo_classroom.4579900b.png\";","var map = {\n\t\"./af\": \"2bfb\",\n\t\"./af.js\": \"2bfb\",\n\t\"./ar\": \"8e73\",\n\t\"./ar-dz\": \"a356\",\n\t\"./ar-dz.js\": \"a356\",\n\t\"./ar-kw\": \"423e\",\n\t\"./ar-kw.js\": \"423e\",\n\t\"./ar-ly\": \"1cfd\",\n\t\"./ar-ly.js\": \"1cfd\",\n\t\"./ar-ma\": \"0a84\",\n\t\"./ar-ma.js\": \"0a84\",\n\t\"./ar-sa\": \"8230\",\n\t\"./ar-sa.js\": \"8230\",\n\t\"./ar-tn\": \"6d83\",\n\t\"./ar-tn.js\": \"6d83\",\n\t\"./ar.js\": \"8e73\",\n\t\"./az\": \"485c\",\n\t\"./az.js\": \"485c\",\n\t\"./be\": \"1fc1\",\n\t\"./be.js\": \"1fc1\",\n\t\"./bg\": \"84aa\",\n\t\"./bg.js\": \"84aa\",\n\t\"./bm\": \"a7fa\",\n\t\"./bm.js\": \"a7fa\",\n\t\"./bn\": \"9043\",\n\t\"./bn-bd\": \"9686\",\n\t\"./bn-bd.js\": \"9686\",\n\t\"./bn.js\": \"9043\",\n\t\"./bo\": \"d26a\",\n\t\"./bo.js\": \"d26a\",\n\t\"./br\": \"6887\",\n\t\"./br.js\": \"6887\",\n\t\"./bs\": \"2554\",\n\t\"./bs.js\": \"2554\",\n\t\"./ca\": \"d716\",\n\t\"./ca.js\": \"d716\",\n\t\"./cs\": \"3c0d\",\n\t\"./cs.js\": \"3c0d\",\n\t\"./cv\": \"03ec\",\n\t\"./cv.js\": \"03ec\",\n\t\"./cy\": \"9797\",\n\t\"./cy.js\": \"9797\",\n\t\"./da\": \"0f14\",\n\t\"./da.js\": \"0f14\",\n\t\"./de\": \"b469\",\n\t\"./de-at\": \"b3eb\",\n\t\"./de-at.js\": \"b3eb\",\n\t\"./de-ch\": \"bb71\",\n\t\"./de-ch.js\": \"bb71\",\n\t\"./de.js\": \"b469\",\n\t\"./dv\": \"598a\",\n\t\"./dv.js\": \"598a\",\n\t\"./el\": \"8d47\",\n\t\"./el.js\": \"8d47\",\n\t\"./en-au\": \"0e6b\",\n\t\"./en-au.js\": \"0e6b\",\n\t\"./en-ca\": \"3886\",\n\t\"./en-ca.js\": \"3886\",\n\t\"./en-gb\": \"39a6\",\n\t\"./en-gb.js\": \"39a6\",\n\t\"./en-ie\": \"e1d3\",\n\t\"./en-ie.js\": \"e1d3\",\n\t\"./en-il\": \"7333\",\n\t\"./en-il.js\": \"7333\",\n\t\"./en-in\": \"ec2e\",\n\t\"./en-in.js\": \"ec2e\",\n\t\"./en-nz\": \"6f50\",\n\t\"./en-nz.js\": \"6f50\",\n\t\"./en-sg\": \"b7e9\",\n\t\"./en-sg.js\": \"b7e9\",\n\t\"./eo\": \"65db\",\n\t\"./eo.js\": \"65db\",\n\t\"./es\": \"898b\",\n\t\"./es-do\": \"0a3c\",\n\t\"./es-do.js\": \"0a3c\",\n\t\"./es-mx\": \"b5b7\",\n\t\"./es-mx.js\": \"b5b7\",\n\t\"./es-us\": \"55c9\",\n\t\"./es-us.js\": \"55c9\",\n\t\"./es.js\": \"898b\",\n\t\"./et\": \"ec18\",\n\t\"./et.js\": \"ec18\",\n\t\"./eu\": \"0ff2\",\n\t\"./eu.js\": \"0ff2\",\n\t\"./fa\": \"8df4\",\n\t\"./fa.js\": \"8df4\",\n\t\"./fi\": \"81e9\",\n\t\"./fi.js\": \"81e9\",\n\t\"./fil\": \"d69a\",\n\t\"./fil.js\": \"d69a\",\n\t\"./fo\": \"0721\",\n\t\"./fo.js\": \"0721\",\n\t\"./fr\": \"9f26\",\n\t\"./fr-ca\": \"d9f8\",\n\t\"./fr-ca.js\": \"d9f8\",\n\t\"./fr-ch\": \"0e49\",\n\t\"./fr-ch.js\": \"0e49\",\n\t\"./fr.js\": \"9f26\",\n\t\"./fy\": \"7118\",\n\t\"./fy.js\": \"7118\",\n\t\"./ga\": \"5120\",\n\t\"./ga.js\": \"5120\",\n\t\"./gd\": \"f6b4\",\n\t\"./gd.js\": \"f6b4\",\n\t\"./gl\": \"8840\",\n\t\"./gl.js\": \"8840\",\n\t\"./gom-deva\": \"aaf2\",\n\t\"./gom-deva.js\": \"aaf2\",\n\t\"./gom-latn\": \"0caa\",\n\t\"./gom-latn.js\": \"0caa\",\n\t\"./gu\": \"e0c5\",\n\t\"./gu.js\": \"e0c5\",\n\t\"./he\": \"c7aa\",\n\t\"./he.js\": \"c7aa\",\n\t\"./hi\": \"dc4d\",\n\t\"./hi.js\": \"dc4d\",\n\t\"./hr\": \"4ba9\",\n\t\"./hr.js\": \"4ba9\",\n\t\"./hu\": \"5b14\",\n\t\"./hu.js\": \"5b14\",\n\t\"./hy-am\": \"d6b6\",\n\t\"./hy-am.js\": \"d6b6\",\n\t\"./id\": \"5038\",\n\t\"./id.js\": \"5038\",\n\t\"./is\": \"0558\",\n\t\"./is.js\": \"0558\",\n\t\"./it\": \"6e98\",\n\t\"./it-ch\": \"6f12\",\n\t\"./it-ch.js\": \"6f12\",\n\t\"./it.js\": \"6e98\",\n\t\"./ja\": \"079e\",\n\t\"./ja.js\": \"079e\",\n\t\"./jv\": \"b540\",\n\t\"./jv.js\": \"b540\",\n\t\"./ka\": \"201b\",\n\t\"./ka.js\": \"201b\",\n\t\"./kk\": \"6d79\",\n\t\"./kk.js\": \"6d79\",\n\t\"./km\": \"e81d\",\n\t\"./km.js\": \"e81d\",\n\t\"./kn\": \"3e92\",\n\t\"./kn.js\": \"3e92\",\n\t\"./ko\": \"22f8\",\n\t\"./ko.js\": \"22f8\",\n\t\"./ku\": \"2421\",\n\t\"./ku.js\": \"2421\",\n\t\"./ky\": \"9609\",\n\t\"./ky.js\": \"9609\",\n\t\"./lb\": \"440c\",\n\t\"./lb.js\": \"440c\",\n\t\"./lo\": \"b29d\",\n\t\"./lo.js\": \"b29d\",\n\t\"./lt\": \"26f9\",\n\t\"./lt.js\": \"26f9\",\n\t\"./lv\": \"b97c\",\n\t\"./lv.js\": \"b97c\",\n\t\"./me\": \"293c\",\n\t\"./me.js\": \"293c\",\n\t\"./mi\": \"688b\",\n\t\"./mi.js\": \"688b\",\n\t\"./mk\": \"6909\",\n\t\"./mk.js\": \"6909\",\n\t\"./ml\": \"02fb\",\n\t\"./ml.js\": \"02fb\",\n\t\"./mn\": \"958b\",\n\t\"./mn.js\": \"958b\",\n\t\"./mr\": \"39bd\",\n\t\"./mr.js\": \"39bd\",\n\t\"./ms\": \"ebe4\",\n\t\"./ms-my\": \"6403\",\n\t\"./ms-my.js\": \"6403\",\n\t\"./ms.js\": \"ebe4\",\n\t\"./mt\": \"1b45\",\n\t\"./mt.js\": \"1b45\",\n\t\"./my\": \"8689\",\n\t\"./my.js\": \"8689\",\n\t\"./nb\": \"6ce3\",\n\t\"./nb.js\": \"6ce3\",\n\t\"./ne\": \"3a39\",\n\t\"./ne.js\": \"3a39\",\n\t\"./nl\": \"facd\",\n\t\"./nl-be\": \"db29\",\n\t\"./nl-be.js\": \"db29\",\n\t\"./nl.js\": \"facd\",\n\t\"./nn\": \"b84c\",\n\t\"./nn.js\": \"b84c\",\n\t\"./oc-lnc\": \"167b\",\n\t\"./oc-lnc.js\": \"167b\",\n\t\"./pa-in\": \"f3ff\",\n\t\"./pa-in.js\": \"f3ff\",\n\t\"./pl\": \"8d57\",\n\t\"./pl.js\": \"8d57\",\n\t\"./pt\": \"f260\",\n\t\"./pt-br\": \"d2d4\",\n\t\"./pt-br.js\": \"d2d4\",\n\t\"./pt.js\": \"f260\",\n\t\"./ro\": \"972c\",\n\t\"./ro.js\": \"972c\",\n\t\"./ru\": \"957c\",\n\t\"./ru.js\": \"957c\",\n\t\"./sd\": \"6784\",\n\t\"./sd.js\": \"6784\",\n\t\"./se\": \"ffff\",\n\t\"./se.js\": \"ffff\",\n\t\"./si\": \"eda5\",\n\t\"./si.js\": \"eda5\",\n\t\"./sk\": \"7be6\",\n\t\"./sk.js\": \"7be6\",\n\t\"./sl\": \"8155\",\n\t\"./sl.js\": \"8155\",\n\t\"./sq\": \"c8f3\",\n\t\"./sq.js\": \"c8f3\",\n\t\"./sr\": \"cf1e\",\n\t\"./sr-cyrl\": \"13e9\",\n\t\"./sr-cyrl.js\": \"13e9\",\n\t\"./sr.js\": \"cf1e\",\n\t\"./ss\": \"52bd\",\n\t\"./ss.js\": \"52bd\",\n\t\"./sv\": \"5fbd\",\n\t\"./sv.js\": \"5fbd\",\n\t\"./sw\": \"74dc\",\n\t\"./sw.js\": \"74dc\",\n\t\"./ta\": \"3de5\",\n\t\"./ta.js\": \"3de5\",\n\t\"./te\": \"5cbb\",\n\t\"./te.js\": \"5cbb\",\n\t\"./tet\": \"576c\",\n\t\"./tet.js\": \"576c\",\n\t\"./tg\": \"3b1b\",\n\t\"./tg.js\": \"3b1b\",\n\t\"./th\": \"10e8\",\n\t\"./th.js\": \"10e8\",\n\t\"./tk\": \"5aff\",\n\t\"./tk.js\": \"5aff\",\n\t\"./tl-ph\": \"0f38\",\n\t\"./tl-ph.js\": \"0f38\",\n\t\"./tlh\": \"cf75\",\n\t\"./tlh.js\": \"cf75\",\n\t\"./tr\": \"0e81\",\n\t\"./tr.js\": \"0e81\",\n\t\"./tzl\": \"cf51\",\n\t\"./tzl.js\": \"cf51\",\n\t\"./tzm\": \"c109\",\n\t\"./tzm-latn\": \"b53d\",\n\t\"./tzm-latn.js\": \"b53d\",\n\t\"./tzm.js\": \"c109\",\n\t\"./ug-cn\": \"6117\",\n\t\"./ug-cn.js\": \"6117\",\n\t\"./uk\": \"ada2\",\n\t\"./uk.js\": \"ada2\",\n\t\"./ur\": \"5294\",\n\t\"./ur.js\": \"5294\",\n\t\"./uz\": \"2e8c\",\n\t\"./uz-latn\": \"010e\",\n\t\"./uz-latn.js\": \"010e\",\n\t\"./uz.js\": \"2e8c\",\n\t\"./vi\": \"2921\",\n\t\"./vi.js\": \"2921\",\n\t\"./x-pseudo\": \"fd7e\",\n\t\"./x-pseudo.js\": \"fd7e\",\n\t\"./yo\": \"7f33\",\n\t\"./yo.js\": \"7f33\",\n\t\"./zh-cn\": \"5c3a\",\n\t\"./zh-cn.js\": \"5c3a\",\n\t\"./zh-hk\": \"49ab\",\n\t\"./zh-hk.js\": \"49ab\",\n\t\"./zh-mo\": \"3a6c\",\n\t\"./zh-mo.js\": \"3a6c\",\n\t\"./zh-tw\": \"90ea\",\n\t\"./zh-tw.js\": \"90ea\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"4678\";","import { renderSlot as _renderSlot, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveDirective as _resolveDirective, withDirectives as _withDirectives, withCtx as _withCtx, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = [\"disabled\"]\nconst _hoisted_2 = { class: \"flex w-full\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"absolute transform -translate-x-1/2 -translate-y-1/2 top-1/2 left-1/2\"\n}\nconst _hoisted_4 = [\"disabled\"]\nconst _hoisted_5 = { class: \"flex w-full\" }\nconst _hoisted_6 = {\n key: 0,\n class: \"absolute transform -translate-x-1/2 -translate-y-1/2 top-1/2 left-1/2\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Spinner = _resolveComponent(\"Spinner\")!\n const _component_Tooltip = _resolveComponent(\"Tooltip\")!\n const _directive_wave = _resolveDirective(\"wave\")!\n\n return (_ctx.tooltip)\n ? (_openBlock(), _createBlock(_component_Tooltip, {\n key: 0,\n noArrow: true,\n placement: 'bottom',\n textValue: _ctx.tooltip\n }, {\n default: _withCtx(() => [\n _withDirectives((_openBlock(), _createElementBlock(\"button\", {\n disabled: _ctx.disabled || _ctx.loading,\n class: _normalizeClass([\"relative overflow-hidden disabled:cursor-not-allowed\", {\n\t\t\t\t'disabled:opacity-40 transition-all duration-100 ease-linear':\n\t\t\t\t\t_ctx.variant === 'secondary',\n\t\t\t\t'disabled:opacity-70': _ctx.variant !== 'secondary',\n\t\t\t\t'shadow-elevation-2 bg-light': _ctx.forceActive,\n\t\t\t\t'bg-success-light bg-opacity-30': _ctx.forceActive && _ctx.variant === 'success-borderless',\n\t\t\t\t'px-6 py-2 font-medium': !_ctx.outline && _ctx.size === 'base' && _ctx.variant !== 'transparent',\n\t\t\t\t'px-6 py-6.3px font-medium': _ctx.outline && _ctx.size === 'base' && _ctx.variant !== 'icon',\n\t\t\t\t'px-3.5 .5': _ctx.size === 'sm' && _ctx.variant !== 'icon',\n\t\t\t\t'px-1': _ctx.size === 'xs' && _ctx.variant !== 'icon',\n\t\t\t\t'px-14 py-2 text-lg font-medium': _ctx.size === 'lg' && _ctx.variant !== 'icon',\n\t\t\t\t'text-onPrimary bg-primary hover:bg-primary-dark shadow-btn':\n\t\t\t\t\t!_ctx.outline && _ctx.variant === 'primary',\n\t\t\t\t'text-onSecondary bg-secondary': !_ctx.outline && _ctx.variant === 'secondary',\n\t\t\t\t'hover:bg-secondary-dark shadow-btn':\n\t\t\t\t\t!_ctx.outline && _ctx.variant === 'secondary' && !_ctx.disabled,\n\t\t\t\t'text-danger-dark bg-danger shadow-btn': !_ctx.outline && _ctx.variant === 'danger',\n\t\t\t\t'text-danger-dark border-danger-dark bg-white border hover:bg-danger-dark hover:bg-opacity-5':\n\t\t\t\t\t_ctx.outline && _ctx.variant === 'danger',\n\t\t\t\t'text-success-dark bg-success-light shadow-btn':\n\t\t\t\t\t!_ctx.outline && _ctx.variant === 'success',\n\t\t\t\t'transition-colors duration-100': _ctx.outline,\n\t\t\t\t'focus:outline-primary': false && _ctx.variant === 'primary',\n\t\t\t\t'focus:outline-danger-dark': _ctx.variant === 'danger',\n\t\t\t\t'focus:outline-success': false && _ctx.variant === 'success',\n\t\t\t\t'hover:bg-light hover:shadow-inner': _ctx.variant === 'light',\n\t\t\t\t'text-primary bg-transparent hover:bg-primary hover:bg-opacity-5 border-primary border-1.5 ':\n\t\t\t\t\t_ctx.outline && _ctx.variant === 'primary',\n\t\t\t\t'text-lg font-medium text-primary hover:bg-light ':\n\t\t\t\t\t_ctx.variant === 'primary-borderless',\n\t\t\t\t'px-6': _ctx.variant === 'primary-borderless' && _ctx.size !== 'xs',\n\t\t\t\t'text-lg font-bold text-secondary hover:bg-light px-6 focus:bg-secondary-light focus:bg-opacity-30':\n\t\t\t\t\t_ctx.variant === 'secondary-borderless',\n\t\t\t\t'text-lg font-bold text-success hover:bg-light px-6 focus:bg-success-light focus:bg-opacity-30':\n\t\t\t\t\t_ctx.variant === 'success-borderless',\n\t\t\t\t'border-gray-300 bg-white hover:bg-primary hover:bg-opacity-10 hover:text-primary transition-colors duration-100':\n\t\t\t\t\t_ctx.variant === 'transparent',\n\t\t\t\trounded: _ctx.variant !== 'transparent',\n\t\t\t\t'rounded-full bg-transparent hover:bg-gray-200 text-gray-600 icon-btn':\n\t\t\t\t\t_ctx.variant === 'icon',\n\t\t\t\t'icon-btn icon-btn-sm': _ctx.variant === 'icon' && _ctx.size === 'sm',\n\t\t\t\t'icon-btn icon-btn-xs': _ctx.variant === 'icon' && _ctx.size === 'xs',\n\t\t\t\t'icon-btn icon-btn-base': _ctx.variant === 'icon' && _ctx.size === 'base',\n\t\t\t\t'icon-btn icon-btn-lg': _ctx.variant === 'icon' && _ctx.size === 'lg',\n\t\t\t}])\n }, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"p\", {\n class: _normalizeClass([\"flex items-center mx-auto\", _ctx.loading ? 'invisible' : ''])\n }, [\n _renderSlot(_ctx.$slots, \"default\")\n ], 2)\n ]),\n (_ctx.loading)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_3, [\n _createVNode(_component_Spinner, {\n size: 'md',\n variant: 'gray'\n })\n ]))\n : _createCommentVNode(\"\", true),\n _renderSlot(_ctx.$slots, \"content\")\n ], 10, _hoisted_1)), [\n [_directive_wave, _ctx.disabled ? false : {}]\n ])\n ]),\n _: 3\n }, 8, [\"textValue\"]))\n : _withDirectives((_openBlock(), _createElementBlock(\"button\", {\n key: 1,\n disabled: _ctx.disabled || _ctx.loading,\n class: _normalizeClass([\"relative overflow-hidden disabled:cursor-not-allowed\", {\n\t\t\t'disabled:opacity-40 transition-all duration-100 ease-linear':\n\t\t\t\t_ctx.variant === 'secondary',\n\t\t\t'disabled:opacity-70': _ctx.variant !== 'secondary',\n\t\t\t'shadow-elevation-2 bg-light': _ctx.forceActive,\n\t\t\t'bg-success-light bg-opacity-30': _ctx.forceActive && _ctx.variant === 'success-borderless',\n\t\t\t'px-6 py-2 font-medium': !_ctx.outline && _ctx.size === 'base' && _ctx.variant !== 'transparent',\n\t\t\t'px-6 py-6.3px font-medium': _ctx.outline && _ctx.size === 'base' && _ctx.variant !== 'icon',\n\t\t\t'px-3.5 py-1.5': _ctx.size === 'sm' && _ctx.variant !== 'icon',\n\t\t\t'px-1': _ctx.size === 'xs' && _ctx.variant !== 'icon',\n\t\t\t'px-14 py-2 text-lg font-medium': _ctx.size === 'lg' && _ctx.variant !== 'icon',\n\t\t\t'text-onPrimary bg-primary hover:bg-primary-dark shadow-btn':\n\t\t\t\t!_ctx.outline && _ctx.variant === 'primary',\n\t\t\t'text-onSecondary bg-secondary': !_ctx.outline && _ctx.variant === 'secondary',\n\t\t\t'hover:bg-secondary-dark shadow-btn':\n\t\t\t\t!_ctx.outline && _ctx.variant === 'secondary' && !_ctx.disabled,\n\t\t\t'text-danger-dark bg-danger shadow-btn': !_ctx.outline && _ctx.variant === 'danger',\n\t\t\t'text-danger-dark border-danger-dark bg-white border hover:bg-danger-dark hover:bg-opacity-5':\n\t\t\t\t_ctx.outline && _ctx.variant === 'danger',\n\t\t\t'text-success-dark bg-success-light shadow-btn': !_ctx.outline && _ctx.variant === 'success',\n\t\t\t'transition-colors duration-100': _ctx.outline,\n\t\t\t'focus:outline-primary': false && _ctx.variant === 'primary',\n\t\t\t'focus:outline-danger-dark': _ctx.variant === 'danger',\n\t\t\t'focus:outline-success': false && _ctx.variant === 'success',\n\t\t\t'hover:bg-light hover:shadow-inner': _ctx.variant === 'light',\n\t\t\t'text-primary bg-transparent hover:bg-primary hover:bg-opacity-5 border-primary border-1.5 ':\n\t\t\t\t_ctx.outline && _ctx.variant === 'primary',\n\t\t\t'text-lg font-medium text-primary hover:bg-light ':\n\t\t\t\t_ctx.variant === 'primary-borderless',\n\t\t\t'px-6': _ctx.variant === 'primary-borderless' && _ctx.size !== 'xs',\n\t\t\t'text-lg font-bold text-secondary hover:bg-light px-6 focus:bg-secondary-light focus:bg-opacity-30':\n\t\t\t\t_ctx.variant === 'secondary-borderless',\n\t\t\t'text-lg font-bold text-success hover:bg-light px-6 focus:bg-success-light focus:bg-opacity-30':\n\t\t\t\t_ctx.variant === 'success-borderless',\n\t\t\t'border-gray-300 bg-white hover:bg-primary hover:bg-opacity-10 hover:text-primary transition-colors duration-100':\n\t\t\t\t_ctx.variant === 'transparent',\n\t\t\trounded: _ctx.variant !== 'transparent',\n\t\t\t'rounded-full bg-transparent hover:bg-gray-200 text-gray-600 icon-btn':\n\t\t\t\t_ctx.variant === 'icon',\n\t\t\t'icon-btn icon-btn-sm': _ctx.variant === 'icon' && _ctx.size === 'sm',\n\t\t\t'icon-btn icon-btn-xs': _ctx.variant === 'icon' && _ctx.size === 'xs',\n\t\t\t'icon-btn icon-btn-base': _ctx.variant === 'icon' && _ctx.size === 'base',\n\t\t\t'icon-btn icon-btn-lg': _ctx.variant === 'icon' && _ctx.size === 'lg',\n\t\t}])\n }, [\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"p\", {\n class: _normalizeClass([\"flex items-center mx-auto\", _ctx.loading ? 'invisible' : ''])\n }, [\n _renderSlot(_ctx.$slots, \"default\")\n ], 2)\n ]),\n (_ctx.loading)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_6, [\n _createVNode(_component_Spinner, {\n size: 'md',\n variant: 'gray'\n })\n ]))\n : _createCommentVNode(\"\", true),\n _renderSlot(_ctx.$slots, \"content\")\n ], 10, _hoisted_4)), [\n [_directive_wave, _ctx.disabled ? false : {}]\n ])\n}","\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport Spinner from \"./Spinner.vue\";\nimport Tooltip from \"./Tooltip.vue\";\n\nexport default defineComponent({\n\tcomponents: {\n\t\tSpinner,\n\t\tTooltip,\n\t},\n\tname: \"Btn\",\n\tprops: {\n\t\toutline: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tvariant: {\n\t\t\ttype: String as PropType<\n\t\t\t\t| \"primary\"\n\t\t\t\t| \"secondary\"\n\t\t\t\t| \"danger\"\n\t\t\t\t| \"success\"\n\t\t\t\t| \"dark\"\n\t\t\t\t| \"light\"\n\t\t\t\t| \"primary-borderless\"\n\t\t\t\t| \"secondary-borderless\"\n\t\t\t\t| \"success-borderless\"\n\t\t\t\t| \"transparent\"\n\t\t\t\t| \"icon\"\n\t\t\t>,\n\t\t\tdefault: \"primary\",\n\t\t},\n\t\tsize: {\n\t\t\ttype: String as PropType<\"xs\" | \"sm\" | \"base\" | \"lg\">,\n\t\t\tdefault: \"base\",\n\t\t},\n\t\tforceActive: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\ttooltip: {\n\t\t\ttype: String,\n\t\t\tdefault: \"\",\n\t\t},\n\t},\n\tdata() {\n\t\treturn {};\n\t},\n\tcomputed: {\n\t\trippleClass() {\n\t\t\tswitch (this.variant) {\n\t\t\t\tcase \"primary-borderless\":\n\t\t\t\t\treturn \"ripple-primary\";\n\t\t\t\tcase \"success-borderless\":\n\t\t\t\t\treturn \"ripple-success\";\n\t\t\t\tcase \"transparent\":\n\t\t\t\t\treturn \"ripple-primary\";\n\t\t\t\tcase \"primary\":\n\t\t\t\t\tif (this.outline) {\n\t\t\t\t\t\treturn \"ripple-primary\";\n\t\t\t\t\t}\n\t\t\t\t\treturn \"ripple-white\";\n\t\t\t\tcase \"icon\":\n\t\t\t\t\treturn \"ripple-icon\";\n\t\t\t\tdefault:\n\t\t\t\t\treturn \"ripple-white\";\n\t\t\t}\n\t\t},\n\t},\n});\n","import { render } from \"./Btn.vue?vue&type=template&id=13e2a962&ts=true\"\nimport script from \"./Btn.vue?vue&type=script&lang=ts\"\nexport * from \"./Btn.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","module.exports = __webpack_public_path__ + \"img/unipi-logo.f0cb2a25.svg\";","import { RouteLocationRaw, RouteRecordNormalized } from \"vue-router\";\n\nexport const getExerciseSolutionThreadRoute = (\n\tcourseId: string,\n\texerciseId: string,\n\tsolutionId: string,\n): RouteLocationRaw => ({\n\tname: \"ExerciseSolutionThreadDispatcher\",\n\tparams: { courseId, exerciseId, solutionId },\n});\n\nexport const getCourseTreeRoute = (courseId: string): RouteLocationRaw => ({\n\tname: \"CourseTreeDispatcher\",\n\tparams: { courseId },\n});\n\nexport const getCourseTreeNodeRoute = (\n\tcourseId: string,\n\tnodeId: string,\n): RouteLocationRaw => ({\n\tname: \"CourseTreeNodeDetailDispatcher\",\n\tparams: { courseId, nodeId },\n});\n\nexport const getExerciseThreadRoute = (\n\tcourseId: string,\n\texerciseId: string,\n): RouteLocationRaw => ({\n\tname: \"ExerciseSolutionThread\",\n\tparams: { courseId, exerciseId },\n});\n","module.exports = __webpack_public_path__ + \"img/valutami.b784915f.png\";","module.exports = \"data:image/png;base64,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\"","import { DataFormat } from \"@/integrations/moodle/types\";\nimport { ReportField } from \"../reports/examParticipations/types\";\nimport {\n\tCoursePrivilege,\n\tEventParticipationState,\n\tEventState,\n\tEventTemplateRuleType,\n\tEventType,\n\tExerciseSolutionState,\n\tExerciseTestCaseType,\n\tExerciseState,\n\tExerciseType,\n\tExerciseValidationError,\n\tCourseTreeNodeType,\n} from \"@/models\";\nimport {\n\tROUTE_TITLE_COURSE_NAME_TOKEN,\n\tROUTE_TITLE_EVENT_NAME_TOKEN,\n\tROUTE_TITLE_NODE_NAME_TOKEN,\n} from \"@/navigation/const\";\nimport { GamificationAction } from \"@/gamification\";\n\nexport const it = {\n\tdialog: {\n\t\tdefault_yes_text: \"Sì\",\n\t\tdefault_confirm_text: \"Conferma\",\n\t\tdefault_cancel_text: \"Annulla\",\n\t\tdefault_no_text: \"No\",\n\t\tdefault_ok_text: \"OK\",\n\t},\n\tcourses: {\n\t\tenroll: \"Iscriviti\",\n\t\tenroll_title: \"Iscriviti al corso\",\n\t\tcourse_panel: \"Pannello docente\",\n\t\tgo_to_course: \"Vai al corso\",\n\t\taccess_as_student: \"Entra come studente\",\n\t},\n\tenrollment: {\n\t\tenrollment: \"Iscrizione\",\n\t\tdo_you_want_to_enroll: \"Vuoi iscriverti a\",\n\t\tdo_you_want_to_unenroll: \"Vuoi disiscriverti da\",\n\t\tenroll: \"Iscriviti\",\n\t\tunenroll: \"Disiscriviti\",\n\t},\n\tfilter_results: {\n\t\ttitle: \"Cerca esercizi\",\n\t\tfilter_by_tag: \"Filtra per tag\",\n\t\tfilter_by_type: \"Filtra per tipologia\",\n\t\tthere_are_active_filters: \"Ci sono filtri attivi\",\n\t\tmore_filters: \"Filtri avanzati\",\n\t\tremove_filters: \"Rimuovi filtri\",\n\t},\n\tlogin_screen: {\n\t\tunauthorized_email_1:\n\t\t\t\"L'indirizzo email che hai utilizzato non è abilitato per accedere. Per favore, utilizza un indirizzo email\",\n\t\tunauthorized_email_2: \"dell'Università di Pisa\",\n\t\tentering_you_agree_to: \"Usufruendo del servizio accetti i nostri\",\n\t\tlogin_with_google: \"Entra con Google\",\n\t\tlogin: \"Entra\",\n\t\tlogin_text: \"Effettua l'accesso con la tua email\",\n\t\twarning: \"Attenzione\",\n\t\tcookies_warning: \"i cookie del tuo browser sono disattivati. Per accedere, abilita \",\n\t\tall_cookies: \"tutti i cookie\",\n\t\tenable_third_party_cookies_1: \"Assicurati anche di abilitare i\",\n\t\tenable_third_party_cookies_2: \"cookie di terze parti\",\n\t},\n\tcourse_permissions: {\n\t\tsearch_user: \"Aggiungi utente con permessi\",\n\t\tsearch_user_hint: \"Cerca per indirizzo email o per nome e cognome\",\n\t\tusers_with_privileges: \"Utenti con permessi\",\n\t\tcourse_creator: \"Creatore del corso\",\n\t\tadd_permissions_tooltip: \"Aggiungi permessi\",\n\t\tsearch_cant_find_user: \"Non trovi l'utente che stai cercando?\",\n\t\ttry_with_email_hint: \"Digita l'indirizzo email dell'utente\",\n\t},\n\theadings: {\n\t\tcourse_tree: \"Materiale \" + ROUTE_TITLE_COURSE_NAME_TOKEN,\n\t\texercise_solution_threads: \"Soluzioni esercizi \" + ROUTE_TITLE_COURSE_NAME_TOKEN,\n\t\tlogin: \"Login\",\n\t\tcourse_title: ROUTE_TITLE_COURSE_NAME_TOKEN,\n\t\tnew_course: \"Nuovo corso\",\n\t\texercise_solution_thread_detail: \"Discussione esercizio\",\n\t\tcourse_dashboard: \"Dashboard \" + ROUTE_TITLE_COURSE_NAME_TOKEN,\n\t\tcourse_exercises: \"Esercizi \" + ROUTE_TITLE_COURSE_NAME_TOKEN,\n\t\tcourse_exams: \"Esami \" + ROUTE_TITLE_COURSE_NAME_TOKEN,\n\t\tcourse_permissions: \"Permessi \" + ROUTE_TITLE_COURSE_NAME_TOKEN,\n\t\tcourse_insights: \"Registro \" + ROUTE_TITLE_COURSE_NAME_TOKEN,\n\t\tcourse_integrations: \"Integrazioni per \" + ROUTE_TITLE_COURSE_NAME_TOKEN,\n\t\tcourse_list: \"Corsi\",\n\t\texam_progress: \"Progresso \" + ROUTE_TITLE_EVENT_NAME_TOKEN,\n\t\texam_results: \"Risultati \" + ROUTE_TITLE_EVENT_NAME_TOKEN,\n\t\tongoing_practice: \"Esercitazione in corso\",\n\t\tongoing_exam: \"Esame \" + ROUTE_TITLE_EVENT_NAME_TOKEN + \" in corso\",\n\t\texam_preview: \"Anteprima esame\",\n\t\treview_submission: \"Revisione risposte\",\n\t\treview_assessment: \"Correzione risposte\",\n\t\tpractice_summary: \"Riepilogo esercitazione\",\n\t\tstudent_exercise_solution_thread: \"Discussione esercizio\",\n\t\tstudent_exercise_solution_threads: \"Esercizi popolari\",\n\t\tstudent_favorites: \"Contenuti salvati\",\n\t\tstudent_course_leaderboard: \"Classifica\",\n\t},\n\tevent_participation_page: {\n\t\texam_has_time_limit_warning_1: \"Questo esame ha un limite di tempo di \",\n\t\texam_has_time_limit_warning_2:\n\t\t\t\"che inizieranno a decorrere dal momento in cui inizierai la tua partecipazione. Una volta iniziato, non potrai fermare il tempo.\",\n\t\texam_has_time_limit_warning_3:\n\t\t\t\"Tutte le tue risposte vengono salvate automaticamente. Anche se non riesci a consegnare prima dello scadere del tempo, tutte le tue risposte saranno mostrate al docente.\",\n\t\ttimes_up: \"Tempo scaduto\",\n\t\tall_answers_saved: \"Tutte le tue risposte sono state salvate\",\n\t\texercise: \"Esercizio\",\n\t\tof: \"di\",\n\t\tnext_exercise: \"Avanti\",\n\t\tprevious_exercise: \"Indietro\",\n\t\tskip_exercise: \"Salta esercizio\",\n\t\tturn_in: \"Consegna\",\n\t\tturn_in_dialog_title: \"Sei sicuro di voler consegnare?\",\n\t\tturn_in_dialog_text:\n\t\t\t\"Una volta consegnato, non potrai più modificare le tue risposte.\",\n\t\tturn_in_confirm_button: \"Consegna\",\n\t\tturned_in_text:\n\t\t\t\"Fatto! Hai consegnato con successo. Qui sotto puoi rivedere le tue risposte. Quando vuoi, puoi chiudere questa pagina.\",\n\t\treview_answers: \"Revisione risposte\",\n\t\tnext_dialog_title: \"Sei sicuro di voler passare al prossimo esercizio?\",\n\t\tnext_dialog_text:\n\t\t\t\"Se vai avanti, non potrai più tornare indietro a questo esercizio.\",\n\t\tnext_dialog_confirm_button: \"Vai avanti\",\n\t\tparticipate: \"Partecipa\",\n\t\texam_not_yet_begun: \"L'esame non è ancora iniziato.\",\n\t\texam_is_over: \"L'esame è terminato.\",\n\t\tbegin_timestamp: \"Data e ora di inizio\",\n\t\tturn_in_timestamp: \"Data e ora di consegna\",\n\t},\n\n\tevent_participation_slot: {\n\t\ttext_answer_label: \"La tua risposta\",\n\t},\n\tevent_participation_headings: {\n\t\tmat: \"Matricola\",\n\t\tcourse: \"Corso\",\n\t\tstate: \"Correzione\",\n\t\tparticipation_state: \"Consegna\",\n\t\temail: \"Email\",\n\t\texercise: \"Es.\",\n\t\tgrade: \"Voto\",\n\t\tstudent: \"Studente\",\n\t},\n\tevent_assessment: {\n\t\tno_score_for_exercise: \"Punteggio non assegnato\",\n\t\tundo_score_edit_tooltip: \"Ripristina punteggio originale\",\n\t\toverall_score: \"Voto\",\n\t\tyou_overrode_score:\n\t\t\t\"Hai assegnato manualmente un voto all'esame.\" +\n\t\t\t\" Se modifichi il punteggio di un esercizio adesso, il voto complessivo non verrà aggiornato.\",\n\t\t// \" Se vuoi che il voto si aggiorni automaticamente in base ai punteggi degli esercizi, ripristina il voto di default.\",\n\t\tall_participations_assesses:\n\t\t\t\"Tutti gli esami sono stati corretti. Puoi pubblicare i risultati.\",\n\t\tsome_exams_require_manual_assessment:\n\t\t\t\"Alcuni esercizi richiedono una correzione manuale. Prima di poter pubblicare i risultati, devi assegnare un punteggio agli esercizi che ancora non lo hanno.\",\n\t\texams_awaiting_assessment_are_marked:\n\t\t\t\"Per assegnare un punteggio alle risposte non ancora valutate, clicca sull'icona\",\n\t\tready_to_publish_1:\n\t\t\t\"I risultati sono pronti per essere pubblicati. Seleziona le righe che vuoi pubblicare e clicca su\",\n\t\tready_to_publish_2:\n\t\t\t\"Le righe evidenziate in verde corrispondono a risultati già pubblicati.\",\n\t\tall_published:\n\t\t\t\"Tutti i risultati sono stati pubblicati e sono ora visibili agli studenti.\",\n\t\tpublish_results: \"Pubblica i risultati\",\n\t\tthis_comment_is_private:\n\t\t\t\"Questo commento verrà visualizzato dagli insegnanti ma non dallo studente\",\n\t\tcomment_for_student: \"Commento per lo studente\",\n\t\tstudent_will_see_this_comment:\n\t\t\t\"Questo commento sarà visibile allo studente quando pubblicherai i risultati\",\n\t\tthis_exercise_requires_manual_assessment:\n\t\t\t\"Devi assegnare un punteggio a questa risposta.\",\n\t\tsome_sub_slots_pending:\n\t\t\t\"Il punteggio mostrato è incompleto perché alcuni sotto-esercizi non hanno ancora ricevuto una valutazione.\",\n\t\tsome_slots_pending:\n\t\t\t\"Il punteggio mostrato è incompleto perché alcuni esercizi non hanno ancora ricevuto una valutazione.\",\n\t\tdefault_score:\n\t\t\t\"Il punteggio mostrato è la somma dei punteggi dei singoli esercizi.\" +\n\t\t\t\" Se modifichi il punteggio di un esercizio, il voto verrà aggiornato automaticamente.\" +\n\t\t\t\" Puoi sovrascrivere il voto inserendo manualmente un valore.\",\n\t\tassessment_state: \"Stato della correzione\",\n\t\tconfirm_assessment: \"Salva\",\n\t\texercise: \"esercizio\",\n\t\tassess: \"Valuta\",\n\t\tassigned_score: \"Punteggio assegnato\",\n\t\tyour_assessment: \"Valutazione\",\n\t\ttext_answer_label: \"Risposta\",\n\t\texercise_seen_at: \"Visto:\",\n\t\texercise_answered_at: \"Risposto:\",\n\t\tviewing_participation_of: \"Stai visualizzando l'esame di\",\n\t\tviewing_practice_of: \"Stai visualizzando un'esercitazione di\",\n\t\tsub_slot_assessment_unavailable_open_full_1: \"Apri la\",\n\t\tsub_slot_assessment_unavailable_open_full_2: \"partecipazione completa\",\n\t\tsub_slot_assessment_unavailable_open_full_3:\n\t\t\t\"all'esame per assegnare un punteggio a questo sotto-esercizio.\",\n\t\tundo_overall_score_edit: \"Vuoi ripristinare il voto originale?\",\n\t\tundo_score_edit: \"Vuoi ripristinare il punteggio originale per questo esercizio?\",\n\t\toverall_score_instructions:\n\t\t\t\"Puoi assegnare manualmente un voto allo studente. Il voto può essere numerico\" +\n\t\t\t\" oppure una stringa.\",\n\t},\n\tcourse_insights: {\n\t\taverage: \"Media\",\n\t\tno_filter: \"Nessun filtro\",\n\t\tfilter_average_greater_than: \"Media maggiore o uguale a\",\n\t\tfilter_average_less_than: \"Media minore o uguale a\",\n\t\tno_users_matching_search: \"Nessuno studente corrisponde ai criteri di ricerca\",\n\t\texams_stats: \"Esami\",\n\t\tenrolled_students: \"Studenti iscritti\",\n\t\tno_enrolled_students: \"Non ci sono ancora iscritti\",\n\t\tno_user_activity: \"Nessuna attività nel corso\",\n\t\tselect_closed_exams: \"Seleziona esami chiusi\",\n\t\tfilter_exams: \"Filtra esami\",\n\t\tscore_sum: \"Somma\",\n\t\tscore_average: \"Media\",\n\t\tpractice_sessions: \"Esercitazioni\",\n\t\texercises: \"Esercizi presenti nel corso\",\n\t\tactive_students: \"Studenti attivi\",\n\t\tno_active_students: \"Non ci sono ancora studenti attivi nel corso\",\n\t\tactive_students_description:\n\t\t\t\"Gli studenti attivi sono studenti che hanno partecipato ad almeno un esame o hanno iniziato autonomamente almeno un'esercitazione nel corso.\",\n\t\tsearch_students: \"Cerca studenti\",\n\t\tenroll_students: \"Iscrivi studenti\",\n\t\tsearch_student: \"Cerca studente\",\n\t\tadd_enrolled_students: \"Iscrivi studenti\",\n\t\tenroll: \"Iscrivi\",\n\t\tunenroll: \"Rimuovi iscrizione\",\n\t\tuser_history_event_descriptions: {\n\t\t\t[EventType.EXAM]: \"Ha partecipato all'esame\",\n\t\t\t[EventType.SELF_SERVICE_PRACTICE]: \"Ha svolto un'esercitazione\",\n\t\t},\n\t},\n\tstudent_data: {\n\t\tedit_mat_title: \"Modifica matricola\",\n\t\tyour_mat: \"Il tuo numero di matricola\",\n\t\tyour_course: \"Il tuo corso\",\n\t\tyou_havent_yet: \"Non hai ancora\",\n\t\tmissing_mat: \"inserito il tuo numero di matricola\",\n\t\tand: \"e\",\n\t\tmissing_course: \"selezionato il tuo corso\",\n\t\tinsert_mat_and_course:\n\t\t\t\"L'inserimento del numero di matricola e la selezione del corso sono necessari per poter partecipare agli esami. Fallo ora e non pensarci più!\",\n\t},\n\tdonate: {\n\t\tdonate_title: \"Dona\",\n\t\tdonate_content:\n\t\t\t\"Evo Learning è un progetto open source. Se vuoi sostenerne lo sviluppo, considera di effettuare una donazione. Ti ringraziamo in anticipo!\",\n\t\tdonate_now: \"Dona ora\",\n\t},\n\tmisc: {\n\t\tthis_morning: \"Stamattina\",\n\t\tthis_afternoon: \"Oggi pomeriggio\",\n\t\ttomorrow_morning: \"Domani mattina\",\n\t\ttomorrow_afternoon: \"Domani pomeriggio\",\n\t\tnext_week: \"Prossima settimana\",\n\t\tdisable: \"Disabilita\",\n\t\tan_error_occurred: \"Si è verificato un errore\",\n\t\ttry_again: \"Riprova\",\n\t\tpopup_blocked:\n\t\t\t\"Il tuo browser ha bloccato l'apertura di una nuova scheda. Per favore, abilita l'apertura di schede e pop-up per proseguire\",\n\t\tselected: \"selezionato | selezionati\",\n\t\tshow_base_editor: \"Editor base\",\n\t\tinsert_latex: \"Inserisci formula LaTeX\",\n\t\tupdated_on: \"Aggiornato\",\n\t\tfile_too_big: \"Il file che hai scelto è troppo grande\",\n\t\tmax_upload_size_is: \"La dimensione massima consentita è\",\n\t\tterms_and_conditions: \"termini e condizioni\",\n\t\tno_native_video_support:\n\t\t\t\"Il tuo browser non supporta la riproduzione video HTML5. Scarica il file per visualizzarlo.\",\n\t\tshow_all: \"Mostra tutti\",\n\t\tshow_more: \"Mostra di più\",\n\t\tshare: \"Condividi\",\n\t\tpage: \"pagina\",\n\t\tpages: \"pagine\",\n\t\tmaintenance_mode: \"Evo Learning è in modalità manutenzione. Riprova più tardi.\",\n\t\tshow_preview: \"Mostra anteprima\",\n\t\thide_preview: \"Nascondi anteprima\",\n\t\tcontact_us: \"Contattaci\",\n\t\tselect_all: \"Seleziona tutti\",\n\t\tunselect_all: \"Deseleziona tutti\",\n\t\tads: \"Pubblicità\",\n\t\tno_favorites: \"Non ci sono contenuti salvati\",\n\t\tundo: \"Annulla\",\n\t\tredo: \"Ripeti\",\n\t\tcorrect_answers: \"Risposte corrette\",\n\t\twait: \"Attendi...\",\n\t\tlimit: \"Limite\",\n\t\tfind_out_more: \"Scopri di più\",\n\t\texperimental_feature_warning:\n\t\t\t\"Questa funzionalità è ancora in fase sperimentale. Per favore, segnala eventuali bug verificatisi durante l'utilizzo.\",\n\t\ttime_limit: \"Limite di tempo\",\n\t\tminutes: \"minuti\",\n\t\tscored_plural: \"punti\",\n\t\tscored_singular: \"punto\",\n\t\tdownload: \"Scarica\",\n\t\tdownloading: \"Download in corso...\",\n\t\tcsv: \"CSV\",\n\t\tpdf: \"PDF\",\n\t\tok: \"OK\",\n\t\tslots: \"slot\",\n\t\tfrom: \"da\",\n\t\tto: \"a\",\n\t\tadd: \"Aggiungi\",\n\t\twrong_file_format: \"Il formato del file che hai selezionato non è corretto\",\n\t\texpand: \"Espandi\",\n\t\tcollapse: \"Riduci\",\n\t\tback: \"Indietro\",\n\t\tno_answer: \"Nessuna risposta\",\n\t\tusing_base_editor: \"Stai usando la versione base dell'editor\",\n\t\thaving_troubles_with_editor: \"Problemi con l'editor?\",\n\t\tshow_full_editor: \"Torna all'editor completo\",\n\t\tfix_sidebar: \"Blocca menu\",\n\t\tunfix_sidebar: \"Nascondi menu\",\n\t\tshow_recent: \"Mostra recenti\",\n\t\tlogged_in: \"Login effettuato con successo\",\n\t\tlogged_out: \"Logout effettuato con successo\",\n\t\tselect: \"Seleziona\",\n\t\tpreview: \"Anteprima\",\n\t\tsave_and_close: \"Salva e chiudi\",\n\t\thidden: \"Nascosto\",\n\t\tteacher: \"Docente\",\n\t\tpassed_tests: \"Test case superati\",\n\t\thidden_to_students: \"Nascosto agli studenti\",\n\t\tfile_upload_no_files: \"Nessun file presente\",\n\t\tfile_upload: \"Trascina qui il tuo file oppure clicca qui\",\n\t\tupload: \"Carica\",\n\t\tcourse_settings: \"Impostazioni corso\",\n\t\texample: \"Esempio\",\n\t\tselect_empty_option: \"Seleziona\",\n\t\tchanges_saved_to_server: \"Tutte le modifiche sono state salvate sul server\",\n\t\texercise_preview_title: \"Anteprima esercizio\",\n\t\tfor: \"per\",\n\t\tsuccess: \"Operazione completata con successo\",\n\t\tparticipants: \"partecipanti\",\n\t\tparticipant: \"partecipante | partecipanti\",\n\t\tclose: \"Chiudi\",\n\t\treopen: \"Riapri\",\n\t\texams: \"esami\",\n\t\texam: \"esame | esami\",\n\t\tedit: \"Modifica\",\n\t\tat: \"alle\",\n\t\tcopy: \"Copia\",\n\t\tcopied: \"Copiato negli appunti\",\n\t\tconfirm_exiting_unsaved_changes:\n\t\t\t\"Hai effettuato delle modifiche non ancora salvate. Se esci, perderai le ultime modifiche. Vuoi uscire?\",\n\t\tfull_name: \"Nome e cognome\",\n\t\tclick_to_edit: \"Clicca per modificare\",\n\t\tamong: \"tra\",\n\t\tand: \"e\",\n\t\ttags: \"Tag\",\n\t\tscore: \"Punteggio\",\n\t\tteacher_comment: \"Commento del docente\",\n\t\tout_of: \"su\",\n\t\tsave: \"Salva\",\n\t\tsolution: \"Soluzione\",\n\t\twarning: \"Attenzione\",\n\t\tdownload_as_csv: \"Scarica come CSV\",\n\t\tdownload_results: \"Scarica risultati\",\n\t\tselect_one: \"Seleziona...\",\n\t\tdelete: \"Elimina\",\n\t\tlogout: \"Logout\",\n\t},\n\texercise_solution_thread: {\n\t\tthread_title: \"Discussione esercizio\",\n\t\tteacher_description:\n\t\t\t\"In questa pagina sono visulizzate le soluzioni agli esercizi proposte dagli studenti. Puoi rendere ufficiali quelle corrette e scartare quelle errate.\",\n\t},\n\tstudent_dashboard_options: {\n\t\tmy_exams: \"I miei esami\",\n\t\tmy_practice_sessions: \"Le mie esercitazioni\",\n\t\tpopular_exercises: \"Esercizi popolari\",\n\t\tleaderboard: \"Classifica\",\n\t\tmy_favorites: \"Salvati\",\n\t},\n\texercise_solution: {\n\t\tcopyright_disclaimer:\n\t\t\t\"Proponendo una soluzione, accetti di rinunciare alla proprietà intellettuale su di essa. \",\n\t\tconfirm_deletion:\n\t\t\t\"Sei sicuro di voler cancellare questa soluzione? Quest'operazione è irreversibile.\",\n\t\tload_more_solutions: \"Carica più soluzioni\",\n\t\tgo_to_exercise_thread: \"Vai alla discussione di questo esercizio\",\n\t\treveal_solutions_1: \"Mostra\",\n\t\treveal_solutions_2_singular: \"soluzione proposta\",\n\t\treveal_solutions_2_plural: \"soluzioni proposte\",\n\t\tthere_are_pending_solutions_1: \"Ci sono\",\n\t\tthere_are_pending_solutions_2: \"esercizi con soluzioni da visionare.\",\n\t\tno_solutions_to_review: \"Non ci sono soluzioni da visionare\",\n\t\tyou_rejected_this_solution: \"Hai scartato questa soluzione\",\n\t\tverified: \"Soluzione verificata\",\n\t\tcomments: \"Commenti\",\n\t\tadd_comment: \"Aggiungi commento\",\n\t\tteacher_is_this_solution_correct: \"Questa soluzione è corretta?\",\n\t\tapprove: \"Approva\",\n\t\treject: \"Scarta\",\n\t\tdefault_author: \"Docenti del corso\",\n\t\tedit: \"Modifica\",\n\t\tdelete: \"Elimina\",\n\t\tshare: \"Condividi\",\n\t\tadd_bookmark: \"Aggiungi ai preferiti\",\n\t\tremove_bookmark: \"Rimuovi dai preferiti\",\n\t\tno_solutions_call_to_action:\n\t\t\t\"Non ci sono ancora soluzioni. Sii il primo a proporne una!\",\n\t\tpropose_solution: \"Proponi soluzione\",\n\t\tproposed_solutions_title: \"Soluzioni proposte\",\n\t\tpropose_solution_title: \"Proponi una soluzione per l'esercizio\",\n\t\tpublish: \"Pubblica\",\n\t\tpublishing: \"Pubblicazione in corso...\",\n\t\tyour_solution_placeholder: \"La tua soluzione\",\n\t\tshow_all: \"Mostra tutte\",\n\t\treveal_solution: \"Continua a leggere\",\n\t\tstates: {\n\t\t\t[ExerciseSolutionState.DRAFT]: \"Bozza\",\n\t\t\t[ExerciseSolutionState.APPROVED]: \"Pubblicata\",\n\t\t\t[ExerciseSolutionState.SUBMITTED]: \"Proposta\",\n\t\t\t[ExerciseSolutionState.REJECTED]: \"Scartata\",\n\t\t},\n\t},\n\tparticipation_downloader: {\n\t\treport_type: \"Formato del report\",\n\t\tdownload_results: \"Scarica risultati\",\n\t\tmat_and_scores_title: \"Matricola e voto\",\n\t\tfull_name_and_scores_title: \"Nome, cognome e voto\",\n\t\tall_fields_title: \"Tutte le informazioni\",\n\t\tall_fields_description:\n\t\t\t\"Nome, cognome, matricola, corso, voto e, per ogni esercizio, risposta data e punteggio\",\n\t\tcustom_title: \"Personalizzato\",\n\t\tcustom_description: \"Scegli quali campi includere\",\n\t\tintroduction:\n\t\t\t\"Scegli quali informazioni vuoi includere nel report. Per ciascuno studente, includi:\",\n\t},\n\treport_fields: {\n\t\t[ReportField.EXERCISES_ANSWER]: \"Risposte dello studente\",\n\t\t[ReportField.EXERCISES_SCORE]: \"Punteggio ottenuto per ciascun esercizio\",\n\t\t[ReportField.EXERCISES_LABEL]: \"Nomi degli esercizi assegnati\",\n\t\t[ReportField.STUDENT_COURSE]: \"Corso\",\n\t\t[ReportField.STUDENT_MAT]: \"Matricola\",\n\t\t[ReportField.STUDENT_FULL_NAME]: \"Nome e cognome\",\n\t\t[ReportField.STUDENT_EMAIL]: \"Email\",\n\t\t[ReportField.STUDENT_COURSE]: \"Corso\",\n\t\t[ReportField.SCORE]: \"Voto\",\n\t},\n\tcloud: {\n\t\tsaving: \"Salvataggio in corso...\",\n\t\tsaved: \"Salvato!\",\n\t\tchanges_saved_to_server: \"Tutte le modifiche sono state salvate sul server\",\n\t\terror: \"Si è verificato un errore nel salvataggio dei dati. Riprova.\",\n\t},\n\tsidebar_labels: {\n\t\tcourse_dashboard_dashboard: \"Dashboard\",\n\t\tcourse_permissions: \"Permessi\",\n\t\tcourse_dashboard_material: \"Materiale\",\n\t\tcourse_dashboard_exams: \"Esami\",\n\t\tcourse_dashboard_practices: \"Esercitazioni\",\n\t\tcourse_dashboard_exercises: \"Esercizi\",\n\t\texercise_solution_threads: \"Soluzioni\",\n\t\tcourse_insights: \"Registro\",\n\t\tcourse_integrations: \"Integrazioni\",\n\t\tcourse_dashboard_back_to_courses: \"Torna ai corsi\",\n\t\tcourse_list_courses: \"Corsi\",\n\t\tcourse_list_new_course: \"Nuovo corso\",\n\t},\n\tteacher_course_dashboard: {\n\t\tdashboard: \"Dashboard\",\n\t\tsee_all: \"Visualizza tutti\",\n\t\trecent_exams: \"Esami recenti\",\n\t\trecently_edited_exercises: \"Esercizi modificati di recente\",\n\t\tcourse_creator: \"Creatore del corso\",\n\t\tcourse_name: \"Nome del corso\",\n\t\tcourse_description: \"Descrizione del corso (opzionale)\",\n\t\tcourse_link_for_students: \"Link al corso per gli studenti\",\n\t},\n\tcourse_creation_form: {\n\t\tcourse_name: \"Nome del corso\",\n\t\tcourse_description: \"Descrizione del corso (opzionale)\",\n\t\tname_required: \"Il nome del corso non può essere vuoto\",\n\t\tname_already_taken: \"Esiste già un corso con questo nome\",\n\t\tcourse_visibility: \"Visibilità\",\n\t\thide_course: \"Nascondi corso\",\n\t\tpublic_description: \"Visibile da subito sia agli studenti che agli altri insegnanti.\",\n\t\thidden_description:\n\t\t\t\"Non comparirà nella lista dei corsi mostrata agli studenti, ma sarà visible agli altri insegnanti. Potrai rendere il corso pubblico in un secondo momento.\",\n\t\tcreate: \"Crea\",\n\t\timport_exercises: \"Importa esercizi\",\n\t\timport_exercises_description:\n\t\t\t\"Puoi importare da subito esercizi per questo corso. Se non li importi ora, potrai farlo in un secondo momento dalla pagina degli esercizi per questo corso.\",\n\t},\n\tcourse_exercises: {\n\t\tnew_exercise: \"Nuovo esercizio\",\n\t\texport_exercises: \"Esporta\",\n\t\timport_exercises: \"Importa\",\n\t\timport_exercises_title: \"Importa esercizi\",\n\t\tno_exercises: \"Non ci sono ancora esercizi\",\n\t\tno_matching_exercises: \"Non ci sono risultati coi filtri di ricerca selezionati\",\n\t\tselected_exercises: \"esercizi selezionati\",\n\t\tselected_exercise: \"esercizio selezionato\",\n\t\tcreate_exam_from_selected_exercises: \"Crea esame con questi esercizi\",\n\t\tcannot_delete_nondraft:\n\t\t\t\"Questo esercizio non è in stato di bozza. Per eliminarlo, imposta prima il suo stato a Bozza.\",\n\t\tconfirm_delete_exercise:\n\t\t\t\"Sei sicuro di voler eliminare questo esercizio? Quest'azione è irreversibile.\",\n\t\tconfirm_delete_exercise_title: \"Conferma eliminazione\",\n\t},\n\texercise: {\n\t\tchoice_score_word_singular: \"punto\",\n\t\tchoice_score_word_plural: \"punti\",\n\t\tclone_label: \"(copia)\",\n\t},\n\tcourse_events: {\n\t\tnew_exam: \"Nuovo esame\",\n\t\texams_stats: \"Statistiche esami\",\n\t\tno_exams: \"Non ci sono ancora esami\",\n\t\treopen: \"Riapri\",\n\t\treopen_exam_body: \"Vuoi riaprire l'esame\",\n\t\treopen_exam_title: \"Riapri esame\",\n\t\tclose_exam_for_everyone_title: \"Chiudi l'esame per tutti\",\n\t\tclose_for_everyone: \"Chiudi per tutti\",\n\t\treopen_for_everyone: \"Riapri per tutti\",\n\t\tclose_exam_for_everyone_body_1: \"Stai per chiudere l'esame\",\n\t\tclose_exam_for_everyone_body_2: \"per tutti i partecipanti\",\n\t\tclose_exam_for_everyone_body_3:\n\t\t\t\"Se vuoi chiudere l'esame solo per alcuni studenti, selezionali dalla pagina\",\n\t\tclose_exam_for_everyone_body_1_alt: \"Vuoi chiudere l'esame\",\n\t},\n\texercise_preview: {\n\t\tunnamed_exercise: \"Esercizio senza nome\",\n\t},\n\tevent_preview: {\n\t\tunnamed_event: \"Esame senza nome\",\n\t\tmonitor: \"Monitora\",\n\t\tresults: \"Risultati\",\n\t\teditor: \"Editor\",\n\t\tclose: \"Chiudi\",\n\t\treopen: \"Riapri\",\n\t\tstill_open_for_some: \"L'esame è ancora aperto per alcuni studenti.\",\n\t\tcopy_link: \"Copia link per gli studenti\",\n\t\tcopied_link: \"Copiato link per gli studenti negli appunti\",\n\t},\n\tevent_monitor: {\n\t\tselect_students_to_publish_results:\n\t\t\t\"Seleziona gli studenti per pubblicare i risultati\",\n\t\tif_selected: \"Se selezionati\",\n\t\tsearch_students: \"Cerca studenti\",\n\t\tassess_slot: \"Valuta\",\n\t\tchange_slot_score: \"Modifica punteggio\",\n\t\tundo_turn_in: \"Annulla consegna\",\n\t\tstats_turned_in: \"consegnati\",\n\t\tstats_participants: \"partecipanti\",\n\t\tstats_average_progress: \"completamento medio\",\n\t\tclose_for_selected: \"Chiudi\",\n\t\treopen_for_selected: \"Riapri\",\n\t\topen_for_selected: \"Apri esame per i selezionati\",\n\t\tclose_for_selected_text_1: \"Stai per chiudere l'esame per\",\n\t\topen_for_selected_text: \"Stai per riaprire l'esame per\",\n\t\tclose_for_selected_text_2: \"L'esame rimarrà aperto per\",\n\t\tsome_exams_still_open:\n\t\t\t\"L'esame è stato chiuso per alcuni partecipanti. Ricorda di chiudere l'esame per tutti al termine. Le righe evidenziate in rosso corrispondono a esami già chiusi.\",\n\t\tun_turn_in_text:\n\t\t\t\"Vuoi annullare la consegna dello studento selezionato?|Vuoi annullare la consegna degli studenti selezionati?\",\n\t\tun_turn_in_instructions:\n\t\t\t\"Per riaprire l'esame di uno studente che ha già consegnato, clicca sull'icona\",\n\t\tstudent_will_be_brought_back_to_first_slot:\n\t\t\t\"Lo studente verrà riportato al primo esercizio e potrà cambiare le risposte date finora. | Gli studenti selezionati verranno riportati al primo esercizio e potranno cambiare le risposte date finora.\",\n\t\tin_column_state: \"nella colonna Consegna.\",\n\t\tsorting_tooltip: \"Cambia ordinamento\",\n\t\tsort_options: {\n\t\t\talphabetical: \"Alfabetico (cognome)\",\n\t\t\talphabetical_reverse: \"Alfabetico inverso (cognome)\",\n\t\t\tbegin_timestamp: \"Ordine di inizio\",\n\t\t\tbegin_timestamp_reverse: \"Ordine di inizio inverso\",\n\t\t\taverage_increasing: \"Media crescente\",\n\t\t\taverage_decreasing: \"Media decrescente\",\n\t\t},\n\t},\n\tevent_stats: {\n\t\tnot_yet_assessed: \"Non ancora corretto\",\n\t\toverall: \"Riepilogo\",\n\t\texercises: \"Esercizi\",\n\t\tscore_distribution: \"Distribuzione voti\",\n\t\tper_exercise_stats: \"Statistiche per esercizio\",\n\t\tselections: \"Selezioni\",\n\t\tanswers: \"Risposte\",\n\t\tevent_stats: \"Statistiche\",\n\t\tback_to_results: \"Torna ai risultati\",\n\t\ttestcase_passed_in: \"Superato in\",\n\t\tsubmissions: \"sottomissioni\",\n\t\tno_stats_available_for_exercise:\n\t\t\t\"Nessuna statistica disponibile per questo esercizio\",\n\t\tincomplete_scores:\n\t\t\t\"Le statistiche visualizzate sono incomplete perché non hai ancora corretto tutti gli esami\",\n\t\tcloze_stats_title: \"Gruppo di risposte\",\n\t},\n\tevent_results: {\n\t\tpublish_results: \"Pubblica risultati\",\n\t\tpublish_confirm_text:\n\t\t\t\"Una volta pubblicati, i risultati selezionati saranno visibili agli studenti. Confermi di volerli pubblicare?\",\n\t\tpublish: \"Pubblica\",\n\t},\n\tevent_template_editor: {\n\t\tno_rules: \"Non ci sono ancora slot\",\n\t\tlist_view: \"Visualizzazione lista\",\n\t\tgrid_view: \"Visualizzazione griglia\",\n\t\tadd_more_rules: \"Aggiungi più slot\",\n\t\teditor_title: \"Modello esame\",\n\t\tintroduction_text:\n\t\t\t\"Crea il modello per questo esame. Per ogni slot, puoi scegliere se far vedere a ogni studente lo stesso esercizio o se utilizzare i criteri di scelta casuale.\",\n\t\tadd_rule: \"Aggiungi slot\",\n\t\tconfirm_delete_rule: \"Sei sicuro di voler eliminare questo slot?\",\n\t\trandomize_rule_order: \"Randomizza ordine degli slot\",\n\t\trule_order_randomization_off:\n\t\t\t\"Gli slot verranno assegnati agli studenti nell'ordine in cui sono disposti qui\",\n\t\trule_order_randomization_on:\n\t\t\t\"Gli slot verranno assegnati agli studenti in ordine casuale\",\n\t},\n\texercise_picker: {\n\t\tcannot_pick_draft: \"Non puoi usare un esercizio in stato di bozza in un esame\",\n\t\talready_selected: \"Questo esercizio è già stato selezionato in un altro slot\",\n\t\tgo_to_exercises: \"Vai agli esercizi\",\n\t\tno_available_exercises:\n\t\t\t\"Non hai ancora creato esercizi per questo corso. Dalla pagina degli esercizi, creane almeno uno per poter popolare questo slot. Ricordati di rimuovere lo stato di bozza dagli esercizi che vuoi inserire in un esame!\",\n\t},\n\thelp: {\n\t\thelp_guide_label: \"Guida all'utilizzo\",\n\t\thelp_center_title: \"Guida all'utilizzo\",\n\t\tbased_on_your_activity: \"In base alla tua attività\",\n\t\ttake_the_tour: \"Scopri le funzionalità della piattaforma col feature tour.\",\n\t\tcannot_find_the_answer: \"Non trovi la risposta?\",\n\t\tstart_tour: \"Inizia\",\n\t\tarticles: \"Articoli\",\n\t},\n\tevent_template_rule_editor: {\n\t\tweight: \"Peso esercizio\",\n\t\treset_slot_settings: \"Resetta slot\",\n\t\texercise_number: \"Slot\",\n\t\tchoose_exercise: \"Scegli esercizio\",\n\t\tchange_exercise: \"Cambia esercizio\",\n\t\tpopulate_slot_singular_title: \"Seleziona esercizio per lo slot\",\n\t\tpopulate_slot_plural_title: \"Seleziona esercizi per gli slot\",\n\t\tmode_selection_text: \"Come vuoi scegliere l'esercizio per questo slot?\",\n\t\tpick_single_exercise: \"Seleziona un esercizio\",\n\t\tpick_exercise_from_pool: \"Seleziona esercizio da un insieme\",\n\t\tpick_exercise_tag_based: \"Seleziona esercizio in base ai tag\",\n\t\tpick_single_exercise_help_text: \"Tutti gli studenti vedranno lo stesso esercizio\",\n\t\tpick_exercise_from_pool_help_text:\n\t\t\t\"Ogni studente vedrà un esercizio scelto a caso dall'insieme selezionato\",\n\t\tpick_exercise_tag_based_help_text:\n\t\t\t\"Ogni studente vedrà un esercizio scelto a caso con i tag selezionati\",\n\t\tone_exercise_from_set_description:\n\t\t\t\"Ogni studente vedrà un esercizio scelto a caso tra questi:\",\n\t\ttag_based_description:\n\t\t\t\"Ogni studente vedrà un esercizio scelto a caso che tra i tag ha:\",\n\t\ttag_based_description_multiple_1: \"Ogni studente vedrà\",\n\t\ttag_based_description_multiple_2: \"esercizi scelti a caso che tra i tag hanno:\",\n\t\tsame_exercise_for_everyone_description:\n\t\t\t\"Tutti gli studenti vedranno questo esercizio:\",\n\t\ttag_based_introduction:\n\t\t\t\"Ogni studente vedrà un esercizio scelto a caso che rispetta le condizioni definite qui. Un esercizio è idoneo se, per ogni gruppo di tag definito, contiene almeno un tag di quel gruppo.\",\n\t\ttag_based_select_exercises: \"Verranno scelti solo esercizi che hanno\",\n\t\ttag_based_at_least_one: \"almeno uno\",\n\t\ttag_based_among: \"tra i seguenti tag:\",\n\t\ttag_based_and: \"... e\",\n\t\ttag_based_add_condition: \"Aggiungi condizione\",\n\t\teligible_exercises: \"Esercizi che soddisfano queste condizioni:\",\n\t\tno_tags_student:\n\t\t\t\"I docenti del corso non hanno ancora inserito tag, quindi la ricerca per tag non è abilitata. Verranno scelti esercizi in maniera casuale.\",\n\t\tno_tags:\n\t\t\t\"Non puoi utilizzare questa funzionalità in quanto non hai ancora creato tag per questo corso. Dalla pagina degli esercizi, puoi aggiungere tag agli esercizi già esistenti, o crearne di nuovi.\",\n\t\tunsatisfiable_tag_rule:\n\t\t\t\"Non ci sono esercizi con i tag richiesti: modifica le condizioni\",\n\t\tunset_rule_type_confirmation:\n\t\t\t\"Sei sicuro di voler resettare le impostazioni per questo slot?\",\n\t},\n\tevent_editor: {\n\t\tname: \"Nome\",\n\t\tstate_editor_title: \"Pubblica\",\n\t\tstate: \"Stato esame\",\n\t\tcurrent_state_is: \"L'esame è attualmente in stato\",\n\t\tcurrent_state_is_draft: \"L'esame è in stato di bozza\",\n\t\tcurrent_state_is_planned: \"L'esame è stato pianificato\",\n\t\tstate_is: \"L'esame è\",\n\t\tmax_grade: \"Voto massimo\",\n\t\tbegin_timestamp: \"Data e ora di inizio\",\n\t\tend_timestamp: \"Data e ora di fine\",\n\t\tinstructions: \"Istruzioni (opzionale)\",\n\t\teditor_title: \"Editor esame\",\n\t\tflow_rules: \"Visualizzazione esercizi\",\n\t\taccess_rules: \"Accesso all'esame\",\n\t\ttime_limit_rules: \"Limite di tempo\",\n\t\ttime_limit_label: \"Imponi un limite di tempo ai partecipanti\",\n\t\tmanage_time_limit_exceptions: \"Gestisci eccezioni\",\n\t\ttime_limit_exceptions: \"eccezioni\",\n\t\tno_time_limit_description: \"Dovrai chiudere manualmente l'esame.\",\n\t\texceptions_to_time_limit: \"Eccezioni al limite di tempo\",\n\t\ttime_limit_description: \"Al termine del tempo, l'esame si chiude automaticamente.\",\n\t\tadd_exception: \"Aggiungi eccezione\",\n\t\tno_time_limit_exception: \"Non hai impostato eccezioni al limite di tempo.\",\n\t\tremove_time_limit_exception_confirmation:\n\t\t\t\"Sei sicuro di voler rimuovere questa eccezione al limite di tempo?\",\n\t\tdelete_exception: \"Rimuovi eccezione\",\n\t\texercises_shown_at_a_time_label: \"Numero di esercizi da mostrare per pagina\",\n\t\tallow_everyone_access_label:\n\t\t\t\"Permetti di partecipare a tutti quelli che hanno il link all'esame\",\n\t\tdeny_access_by_default_label:\n\t\t\t\"Permetti di partecipare solo agli studenti da te indicati\",\n\t\tallow_going_back_label:\n\t\t\t\"Permetti agli studenti di tornare indietro a un esercizio già visto\",\n\t\tshow_all_exercises_at_once: \"Mostra tutti gli esercizi insieme\",\n\t\tshow_one_exercise_at_once: \"Mostra solo un esercizio alla volta\",\n\t\tpublish: \"Pubblica\",\n\t\trevert_to_draft: \"Torna in bozza\",\n\t\tevent_planned_help_text: \"L'esame verrà aperto agli studenti automaticamente in data\",\n\t\tediting_open_event_title: \"Modifica di un esame in corso\",\n\t\tediting_open_event_body:\n\t\t\t\"Stai modificando un esame già iniziato. Sei sicuro di volerlo modificare?\",\n\t\tcorrect_errors_to_publish:\n\t\t\t\"Prima di poter pubblicare l'esame, correggi i seguenti errori:\",\n\t\tcannot_change_timestamp:\n\t\t\t\"Non puoi modificare la data e ora di inizio dell'esame una volta pianificato. Per modificare questo campo, metti l'esame in stato di bozza.\",\n\t\tthis_is_the_link_to_the_event:\n\t\t\t\"Ecco il link per accedere all'esame. Comunicalo agli studenti che parteciperanno.\",\n\t\tedit_template_in_progress_warning:\n\t\t\t\"Modificare il modello dell'esame quando questo è già iniziato può avere conseguenze imprevedibili. Gli studenti che hanno già iniziato l'esame non saranno interessati dalle modifiche. Procedi solo se sai cosa stai facendo.\",\n\t\tcurrently_locked_by: \"È in corso una modifica a questo esame da parte di\",\n\t\tlock_stand_by: \"L'editor verrà sbloccato non appena la modifica sarà conclusa.\",\n\t\ttip_you_used_randomization:\n\t\t\t\"Hai utilizzato alcune delle funzionalità di randomizzazione. Verifica che gli esami generati siano corretti.\",\n\t\tgenerate_examples: \"Genera esempi\",\n\t\tgenerating_examples: \"Generazione esempi...\",\n\t\tallow_access_description:\n\t\t\t\"Tutti coloro che hanno il link potranno partecipare all'esame una volta aperto.\",\n\t\tdeny_access_description:\n\t\t\t\"Solo gli studenti da te indicati potranno partecipare all'esame una volta aperto.\",\n\t\tchoose_allowed: \"Gestisci ammessi\",\n\t\timport_from_valutami: \"Importa da Valutami\",\n\t\tmanage_allowed_description:\n\t\t\t\"Inserisci gli indirizzi email degli studenti che possono partecipare all'esame. Solo gli studenti il cui indirizzo email è in questa lista potranno accedere all'esame quando viene aperto.\",\n\t\tmanage_allowed_import_from_valutami_1:\n\t\t\t\"Puoi importare la lista degli iscritti all'esame dal portale\",\n\t\tmanage_allowed_import_from_valutami_2: \"Valutami\",\n\t\tmanage_allowed_import_from_valutami_3:\n\t\t\t\"Questo permetterà solo agli studenti che si sono iscritti all'appello sul portale di accedere a questo esame.\",\n\t\tstudent_email: \"Email dello studente\",\n\t\timport_enrolled: \"Importa iscritti\",\n\t\tallowed_students: \"studenti ammessi\",\n\t\tpublish_exam: \"Pubblica esame\",\n\t\tpublish_announcement_prompt:\n\t\t\t\"Vuoi pianificare la pubblicazione di un annuncio sul materiale del corso contenente il link all'esame?\",\n\t},\n\texercise_editor: {\n\t\tconfirm_delete_testcase_attachment: \"Sei sicuro di voler eliminare l'allegato\",\n\t\ttestcase_add_attachments: \"Aggiungi allegati\",\n\t\ttestcase_attachments: \"Allegati\",\n\t\ttestcase_attachments_description:\n\t\t\t\"I file che alleghi a un test case verranno inclusi nella directory di lavoro nella quale verrà eseguito il codice. Gli allegati di un test case sono disponibili solo durante l'esecuzione di quel test case.\",\n\t\tuse_assert_lib: \"Per scrivere il codice dei test case, utilizza la libreria\",\n\t\texercise_editor_title: \"Editor esercizio\",\n\t\tdraft_notice: \"Bozza\",\n\t\tmax_score: \"Punteggio massimo\",\n\t\tsolutions_title: \"Soluzioni\",\n\t\tchoices_title: \"Scelte\",\n\t\tclozes_title: \"Gruppi di scelte\",\n\t\ttestcases_title: \"Test case\",\n\t\texercise_label: \"Nome dell'esercizio\",\n\t\texercise_text: \"Testo dell'esercizio\",\n\t\texercise_solution: \"Soluzione dell'esercizio (opzionale)\",\n\t\tselect_exercise_type: \"Seleziona tipologia\",\n\t\texercise_type: \"Tipologia\",\n\t\texercise_state: \"Visibilità\",\n\t\texercise_public_tags: \"Tag pubblici\",\n\t\texercise_tags: \"Tag\",\n\t\texercise_private_tags: \"Tag privati\",\n\t\tall_or_nothing: \"All or nothing\",\n\t\tchoice_text: \"Testo\",\n\t\tchoice_correctness: \"Punteggio\",\n\t\tchoice_score_checked: \"Punteggio selez.\",\n\t\tchoice_score_unchecked: \"Punteg. non selez.\",\n\t\ttestcase_type: \"Visibilità\",\n\t\ttestcase_text: \"Descrizione\",\n\t\ttestcase_code: \"Codice\",\n\t\ttestcase_stdin: \"Input (stdin)\",\n\t\ttest_solution: \"Testa\",\n\t\ttesting_solution: \"Test in corso...\",\n\t\ttestcase_expected_stdout: \"Output atteso (stdout)\",\n\t\thidden_to_students: \"Nascosto agli studenti\",\n\t\tedit_non_draft_title: \"Modifica di un esercizio non bozza\",\n\t\tedit_non_draft_body:\n\t\t\t\"Stai per modificare un esercizio non in stato di bozza. Potrebbe essere già presente in un esame o essere già stato visto dagli studenti. Sei sicuro di volerlo modificare?\",\n\t\tnew_choice: \"Nuova\",\n\t\tnew_solution: \"Nuova\",\n\t\tnew_testcase: \"Nuovo\",\n\t\tnew_sub_exercise: \"Nuovo\",\n\t\tnew_cloze: \"Aggiungi domanda\",\n\t\tedit_cloze: \"Modifica domanda\",\n\t\tediting_cloze: \"Stai modificando il gruppo di scelte\",\n\t\tsub_exercises_title: \"Sotto-esercizi\",\n\t\tsub_exercise_weight: \"Peso sotto-esercizio\",\n\t\tcannot_publish: \"Non puoi ancora pubblicare questo esercizio\",\n\t\tcannot_publish_body:\n\t\t\t\"Per poter rimuovere lo stato di bozza, correggi i seguenti errori:\",\n\t\tmake_public_confirmation_title:\n\t\t\t\"Sei sicuro di voler rendere questo esercizio pubblico?\",\n\t\tmake_public_confirmation_body:\n\t\t\t\"Se rendi questo esercizio pubblico, tutti gli studenti potranno visualizzarlo in qualsiasi momento. Se vuoi utilizzare questo esercizio in un esame, rendilo privato.\",\n\t\tcurrently_locked_by: \"È in corso una modifica a questo esercizio da parte di\",\n\t\trequires_typescript: \"Richiedi l'utilizzo di TypeScript\",\n\t\tconfirm_delete_choice: \"Sei sicuro di voler eliminare questa scelta?\",\n\t\tconfirm_delete_solution: \"Sei sicuro di voler eliminare questa soluzione?\",\n\t\tconfirm_delete_testcase: \"Sei sicuro di voler eliminare questo test case?\",\n\t\tconfirm_delete_sub_exercise: \"Sei sicuro di voler eliminare questo sotto-esercizio?\",\n\t\tcode_execution_will_appear_here:\n\t\t\t\"I risultati dell'esecuzione del codice della soluzione appariranno qui.\",\n\t\tclone: \"Clona esercizio\",\n\t\tdelete: \"Elimina esercizio\",\n\t\tdelete_sub_exercise: \"Elimina sotto-esercizio\",\n\t\tdelete_choice: \"Elimina scelta\",\n\t\tdelete_testcase: \"Elimina test case\",\n\t\tclone_confirm: \"Sei sicuro di voler clonare\",\n\t\tis_choice_correct: \"Corretta\",\n\t\tno_choice_penalty_warning:\n\t\t\t\"Non hai impostato una penalità (punteggio negativo) per alcuna scelta. Gli studenti potranno ottenere il punteggio massimo per questo esercizio selezionando tutte le scelte disponibili.\",\n\t},\n\tcloze: {\n\t\tinvalid_cloze_id: \"(ID sotto-domanda invalido)\",\n\t},\n\texercise_wrapper: {\n\t\tselect: \"Seleziona\",\n\t},\n\tstudent_course_dashboard: {\n\t\tbegin_exam: \"Inizia\",\n\t\tyou_are_in_student_mode: \"Stai visualizzando il corso in modalità studente\",\n\t\tno_exams: \"Non hai ancora partecipato a nessun esame\",\n\t\tshow_bookmarked: \"Mostra solo preferite\",\n\t\tadd_bookmark: \"Aggiungi ai preferiti\",\n\t\tremove_bookmark: \"Rimuovi dai preferiti\",\n\t\tshow_all_practices: \"Mostra tutte\",\n\t\ttoo_many_exercises: \"Hai aggiunto troppi esercizi. Selezionane al massimo\",\n\t\tyour_practice_events: \"Le mie esercitazioni\",\n\t\tnew_practice_event: \"Nuova esercitazione\",\n\t\texams_you_participated_in: \"I miei esami\",\n\t\treview_submission: \"Rivedi risposte\",\n\t\tview_assessment: \"Valutazione\",\n\t\tresume: \"Riprendi\",\n\t\tassessment_available: \"Sono stati pubblicati i voti relativi a questo esame\",\n\t\tnew_practice: \"Nuova esercitazione\",\n\t\tresume_practice: \"Riprendi esercitazione\",\n\t\tdraft_practice: \"Bozza esercitazione\",\n\t\tpending: \"In corso\",\n\t\tpractice_summary: \"Riepilogo\",\n\t\tavailable_exercises_tooltip: \"esercizi disponibili\",\n\t\tno_public_exercises:\n\t\t\t\"Non puoi iniziare un'esercitazione perché i docenti del corso non hanno ancora aggiunto esercizi\",\n\t},\n\tpractice_template_editor: {\n\t\tadd_tag_1: \"Aggiungi\",\n\t\tadd_tag_2: \" esercizio con tag | esercizi con tag\",\n\t\tadd_tag_3: \"alla mia esercitazione\",\n\t\tbegin_practice: \"Inizia esercitazione\",\n\t\tadd_rule: \"Aggiungi esercizi\",\n\t\tchoose_tags_text: \"Seleziona i tag che ti interessano per creare l'esercitazione.\",\n\t\tchoose_exercises_no_tag_text: \"Quanti esercizi vuoi che l'esercitazione contenga?\",\n\t\trule_amount_1: \"Quanti esercizi col tag\",\n\t\trule_amount_2: \"vuoi vedere?\",\n\t\texercise_amount: \"Numero di esercizi\",\n\t\tseen_exercises_wont_be_selected:\n\t\t\t\"Non verranno selezionati esercizi che hai già visto. Hai già incontrato\",\n\t\texercises_with_this_tag: \"esercizi con questo tag.\",\n\t\tall_exercises_seen_with_this_tag: \"Hai già visto tutti gli esercizi per questo tag\",\n\t},\n\tprogramming_exercise: {\n\t\topen_text_popup: \"Apri popup\",\n\t\ttab_text: \"Testo\",\n\t\ttab_testcases: \"Test case\",\n\t\ttab_editor: \"Editor\",\n\t\ttab_execution_results: \"Risultato\",\n\t\trun_code: \"Esegui\",\n\t\trunning_code: \"Esecuzione in corso...\",\n\t\texecution_results: \"Risultato esecuzione\",\n\t\ttestcase: \"Test case\",\n\t\ttestcase_stdin: \"Input\",\n\t\ttestcase_expected_stdout: \"Output atteso\",\n\t\tpassed: \"Superato\",\n\t\tnot_passed: \"Non superato\",\n\t\ttest_failed_with_error:\n\t\t\t\"L'esecuzione del programma si è interrotta producendo il seguente errore\",\n\t\ttest_failed_stdout: \"Il programma ha prodotto il seguente output\",\n\t\tcode_errored: \"L'esecuzione del codice ha prodotto il seguente errore\",\n\t\tcompilation_errored: \"La fase di compilazione ha prodotto i seguenti errori\",\n\t\tno_testcases:\n\t\t\t\"Questo esercizio non contiene test case. Prova a chiedere al docente di inserirne qualcuno.\",\n\t\tresults_ok_but_no_testcases:\n\t\t\t\"L'esecuzione del tuo codice non ha prodotto errori. Purtroppo questo esercizio non ha test case, quindi questo è tutto ciò che sappiamo.\",\n\t\tinternal_error:\n\t\t\t\"Si è verificato un errore interno durante l'esecuzione del codice. Per favore, segnala questo errore ai docenti.\",\n\t\tcode_execution_will_appear_here:\n\t\t\t\"I risultati dell'esecuzione del tuo codice appariranno qui.\",\n\t},\n\texercise_types: {\n\t\t[ExerciseType.MULTIPLE_CHOICE_SINGLE_POSSIBLE]:\n\t\t\t\"Scelta multipla con selezione singola\",\n\t\t[ExerciseType.MULTIPLE_CHOICE_MULTIPLE_POSSIBLE]:\n\t\t\t\"Scelta multipla con selezione multipla\",\n\t\t[ExerciseType.OPEN_ANSWER]: \"Risposta aperta\",\n\t\t[ExerciseType.JS]: \"Esercizio JavaScript\",\n\t\t[ExerciseType.C]: \"Esercizio C\",\n\t\t[ExerciseType.PYTHON]: \"Esercizio Python\",\n\t\t[ExerciseType.COMPLETION]: \"Esercizio a completamento\",\n\t\t[ExerciseType.ATTACHMENT]: \"Caricamento di file\",\n\t\t[ExerciseType.AGGREGATED]: \"Esercizio composto\",\n\t},\n\texercise_states: {\n\t\t[ExerciseState.PUBLIC]: \"Pubblico\",\n\t\t[ExerciseState.PRIVATE]: \"Solo esami\",\n\t\t[ExerciseState.DRAFT]: \"Bozza\",\n\t},\n\tevent_states: {\n\t\t[EventState.DRAFT]: \"Bozza\",\n\t\t[EventState.PLANNED]: \"Pianificato\",\n\t\t[EventState.OPEN]: \"In corso\",\n\t\t[EventState.CLOSED]: \"Terminato\",\n\t\t[EventState.RESTRICTED]: \"Aperto per alcuni\",\n\t},\n\tevent_participation_states: {\n\t\t[EventParticipationState.IN_PROGRESS]: \"In corso\",\n\t\t[EventParticipationState.TURNED_IN]: \"Consegnato\",\n\t},\n\texercise_states_descriptions: {\n\t\t[ExerciseState.PUBLIC]:\n\t\t\t\"Sarà visibile agli studenti e potrà essere inserito negli esami o comparire nelle esercitazioni.\",\n\t\t[ExerciseState.PRIVATE]:\n\t\t\t\"Non comparirà nelle esercitazioni iniziate dagli studenti, ma potrà essere inserito negli esami dagli insegnanti.\",\n\t\t[ExerciseState.DRAFT]:\n\t\t\t\"Non potrà essere inserito negli esami e non comparirà nelle esercitazioni.\",\n\t},\n\tevent_states_descriptions: {\n\t\t[EventState.PLANNED]:\n\t\t\t\"È tutto pronto! L'anteprima dell'esame è visibile agli studenti, ma questi non potranno accedervi fino alla data e ora di inizio.\",\n\t\t[EventState.DRAFT]:\n\t\t\t\"L'esame non è visibile agli studenti e non sarà accessibile fino a quando viene pubblicato.\",\n\t\t[EventState.OPEN]: \"\",\n\t\t[EventState.CLOSED]: \"\",\n\t},\n\tvalidation_errors: {\n\t\tcourse_tree: {\n\t\t\tlesson: {\n\t\t\t\tmodelValue: {\n\t\t\t\t\t\"title-required\": \"Inserisci un titolo per la lezione\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tannouncement: {\n\t\t\t\tmodelValue: {\n\t\t\t\t\t\"body-required\": \"L'annuncio non può essere vuoto\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tpoll: {\n\t\t\t\tmodelValue: {\n\t\t\t\t\t\"text-required\": \"Il testo non può essere vuoto\",\n\t\t\t\t\t\"choices-required\": \"Inserisci almeno una scelta\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tevent: {\n\t\t\tmodelValue: {\n\t\t\t\t\"name-required\": \"Inserisci un nome per l'esame\",\n\t\t\t\t\"begin_timestamp-required\": \"Inserisci una data e ora di inizio\",\n\t\t\t\t\"end_timestamp-required\": \"Inserisci una data e ora di fine\",\n\t\t\t\ttemplate: {\n\t\t\t\t\t\"rules-$each\": \"Alcuni slot sono configurati in maniera errata\",\n\t\t\t\t\t\"rules-required\": \"Aggiungi almeno uno slot\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\texercise: {\n\t\t\tmodelValue: {\n\t\t\t\t\"text-clozeIdsAreValid\": \"Hai inserito degli ID errati per le sotto-domande\",\n\t\t\t\t\"text-required\": \"Il testo dell'esercizio non può essere vuoto.\",\n\t\t\t\t\"choices-choicesRequiredIfMultipleChoiceExercise\":\n\t\t\t\t\t\"L'esercizio deve avere almeno una scelta selezionabile.\",\n\t\t\t\t\"choices-atLeastOneCorrectChoice\":\n\t\t\t\t\t\"L'esercizio deve avere almeno una scelta corretta (con punteggio maggiore di 0).\",\n\t\t\t\t\"choices-$each\": \"Alcune scelte non sono configurate correttamente.\",\n\t\t\t\t\"sub_exercises-$each\":\n\t\t\t\t\t\"Alcuni sotto-esercizi non sono configurati correttamente.\",\n\t\t\t},\n\t\t\tchoice: {\n\t\t\t\tchoice: {\n\t\t\t\t\t\"text-required\": \"Il testo della scelta non può essere vuoto.\",\n\t\t\t\t},\n\t\t\t\t\"text-required\": \"Il testo della scelta non può essere vuoto.\",\n\t\t\t},\n\t\t},\n\t\tcourse: {\n\t\t\t\"name-required\": \"Il nome del corso non può essere vuoto\",\n\t\t\t\"name-unique\": \"Esiste già un corso con questo nome\",\n\t\t},\n\t\tdirtyCourse: {\n\t\t\t\"name-required\": \"Il nome del corso non può essere vuoto\",\n\t\t\t\"name-unique\": \"Esiste già un corso con questo nome\",\n\t\t},\n\t\teventTemplateRule: {\n\t\t\tmodelValue: {\n\t\t\t\t\"rule_type-ruleTypeSet\": \"Non hai impostato un criterio per popolare questo slot\",\n\t\t\t\t\"exercises-idBasedRulePopulated\": \"Questo slot non contiene esercizi\",\n\t\t\t\t\"clauses-tagBasedRulePopulated\": \"Questo slot non contiene tag\",\n\t\t\t\t\"satisfying-tagBasedRuleSatisfied\":\n\t\t\t\t\t\"Non ci sono abbastanza esercizi che soddisfano le condizioni scelte\",\n\t\t\t\t// not_satisfied_by_enough:\n\t\t\t\t// \"Non ci sono abbastanza esercizi che soddisfano le condizioni scelte\",\n\t\t\t},\n\t\t},\n\t},\n\t// exam_validation_errors: {\n\t// [ExamValidationError.NO_NAME]: \"Non hai assegnato un nome all'esame\",\n\t// [ExamValidationError.NO_VALID_TEMPLATE_RULES]:\n\t// \"Non hai creato slot per gli esercizi per questo esame\",\n\t// [ExamValidationError.NO_END_TIMESTAMP]:\n\t// \"Non hai assegnato una data e ora di fine a questo esame\",\n\t// [ExamValidationError.NO_BEGIN_TIMESTAMP]:\n\t// \"Non hai assegnato una data e ora di inizio a questo esame\",\n\t// [ExamValidationError.INVALID_TIMESTAMPS]:\n\t// \"Hai selezionato data e ora di inizio e fine non corrette per questo esame\",\n\t// },\n\texercise_validation_errors: {\n\t\t[ExerciseValidationError.BLANK_TEXT]: \"Questo esercizio è senza testo\",\n\t\t[ExerciseValidationError.NO_CHOICES]:\n\t\t\t\"Questo esercizio a scelta multipla non ha scelte\",\n\t\t[ExerciseValidationError.BLANK_CHOICE]:\n\t\t\t\"Questo esercizio a scelta multipla contiene delle scelte senza testo\",\n\t\t[ExerciseValidationError.NO_TESTCASES]:\n\t\t\t\"Questo esercizio di programmazione non ha test case\",\n\t\t[ExerciseValidationError.NO_SUB_EXERCISES]:\n\t\t\t\"Questo esercizio composto non contiene sotto-esercizi\",\n\t},\n\tcourse_privileges: {\n\t\t[CoursePrivilege.ACCESS_EXERCISES]:\n\t\t\t\"Può accedere alla lista degli esercizi del corso.\",\n\t\t[CoursePrivilege.ASSESS_PARTICIPATIONS]:\n\t\t\t\"Può vedere le partecipazioni agli esami e assegnare voti.\",\n\t\t[CoursePrivilege.MANAGE_EVENTS]: \"Può creare e modificare gli esami del corso.\",\n\t\t[CoursePrivilege.MANAGE_EXERCISE_SOLUTIONS]:\n\t\t\t\"Può visionare le soluzioni agli esercizi scritte dagli studenti e approvarle o scartarle.\",\n\t\t[CoursePrivilege.MANAGE_EXERCISES]: \"Può creare e modificare esercizi.\",\n\t\t[CoursePrivilege.UPDATE_COURSE]:\n\t\t\t\"Può modificare le impostazioni del corso, incluso assegnare permessi ad altri utenti.\",\n\t\t[CoursePrivilege.MANAGE_MATERIAL]:\n\t\t\t\"Può creare e modificare materiale didattico per il corso, come lezioni, allegati, annunci e sondaggi.\",\n\t},\n\tcourse_privileges_short: {\n\t\t[CoursePrivilege.ACCESS_EXERCISES]: \"Vedere esercizi\",\n\t\t[CoursePrivilege.ASSESS_PARTICIPATIONS]: \"Assegnare voti\",\n\t\t[CoursePrivilege.MANAGE_EVENTS]: \"Creare esami\",\n\t\t[CoursePrivilege.MANAGE_EXERCISES]: \"Creare esercizi\",\n\t\t[CoursePrivilege.UPDATE_COURSE]: \"Modificare impostazioni corso\",\n\t\t[CoursePrivilege.MANAGE_EXERCISE_SOLUTIONS]: \"Gestire soluzioni\",\n\t\t[CoursePrivilege.MANAGE_MATERIAL]: \"Gestire materiale didattico\",\n\t},\n\ttestcase_types: {\n\t\t[ExerciseTestCaseType.SHOW_CODE_SHOW_TEXT]: \"Pubblico\",\n\t\t[ExerciseTestCaseType.SHOW_TEXT_ONLY]: \"Solo descriz.\",\n\t\t[ExerciseTestCaseType.HIDDEN]: \"Nascosto\",\n\t},\n\tevent_template_rule_type: {\n\t\t[EventTemplateRuleType.TAG_BASED]: \"Per tag\",\n\t\t[EventTemplateRuleType.FULLY_RANDOM]: \"A caso\",\n\t},\n\tcourse_privileges_page: {\n\t\tcourse_privileges: \"Permessi\",\n\t\tedit_permissions_title: \"Modifica i permessi di\",\n\t},\n\tdata_table: {\n\t\tequals: \"Uguale a\",\n\t\tnotEqual: \"Diverso da\",\n\t\tlessThan: \"Minore di\",\n\t\tlessThanOrEqual: \"Minore di o uguale a\",\n\t\tgreaterThan: \"Maggiore di\",\n\t\tgreaterThanOrEqual: \"Maggiore di o uguale a\",\n\t\tfilterOoo: \"Cerca...\",\n\t\tcontains: \"Contenuto\",\n\t\tnoRowsToShow: \"Non ci sono dati da mostrare\",\n\t},\n\terrors: {\n\t\tretry: \"Riprova\",\n\t\tback: \"Torna indietro\",\n\t\tno_connection: \"Connessione assente\",\n\t\t400: \"La tua richiesta contiene un errore\",\n\t\t401: \"Effettua il login per visualizzare questa pagina\",\n\t\t403: \"Non hai i permessi necessari per effettuare quest'azione\",\n\t\t404: \"La pagina richiesta non sembra esistere\",\n\t\t500: \"Si è verificato un errore interno\",\n\t\tunknown_error: \"Si è verificato un errore sconosciuto\",\n\t},\n\tcourse_tree: {\n\t\tinvalid_schedule_time: \"Data e ora invalide\",\n\t\tscheduled_confirm_publish_now_1:\n\t\t\t\"Hai pianificato la pubblicazione di questo elemento per il \",\n\t\tscheduled_confirm_publish_now_2: \". Vuoi pubblicarlo subito?\",\n\t\tsave_to_cancel_scheduled_publish:\n\t\t\t\"Salva le modifiche per annullare la pubblicazione pianificata\",\n\t\tscheduled_for: \"Pianificato per il\",\n\t\tschedule: \"Pianifica pubblicazione\",\n\t\tschedule_label: \"Pianifica\",\n\t\tselect_schedule_datetime: \"Seleziona data e ora per pianificare la pubblicazione.\",\n\t\tschedule_datetime: \"Data e ora\",\n\t\tschedule_publish_title: \"Pianifica pubblicazione\",\n\t\teditor_discard_unsaved_changes: \"Vuoi scartare le modifiche non salvate?\",\n\t\tconfirm_delete_comment: \"Sei sicuro di voler eliminare questo commento?\",\n\t\tfile_by_url_description:\n\t\t\t\"Inserisci l'URL del file da condividere. È possibile visualizzare alcune tipologie di file in modalità integrata direttamente all'interno di Evo Learning.\",\n\t\tfile_url: \"Indirizzo del file\",\n\t\tfile_editor_title: \"Nuovo file\",\n\t\tfile_node_editor_file_upload: \"Carica file\",\n\t\tfile_node_editor_url: \"Importa da URL\",\n\t\tpoll_results: \"Risultati\",\n\t\tsave_poll_choice: \"Conferma\",\n\t\tpoll_choice_not_saved_yet: \"Selezione non ancora salvata\",\n\t\tconfirm_delete_poll_choice: \"Vuoi eliminare questa scelta?\",\n\t\tnew_poll_choice: \"Nuova\",\n\t\tpoll_choice_text: \"Testo opzione\",\n\t\tpoll_closed: \"Questo sondaggio è chiuso\",\n\t\tpoll_title: \"Sondaggio\",\n\t\tpublish_poll: \"Pubblica\",\n\t\tpoll_text: \"Testo del sondaggio\",\n\t\tpoll_choices: \"Opzioni\",\n\t\tpoll_editor_title: \"Sondaggio\",\n\t\tannouncement_title: \"Annuncio\",\n\t\tpublish_announcement: \"Pubblica\",\n\t\tannouncement_body: \"Annuncio\",\n\t\tannouncement_attachments: \"Allegati\",\n\t\tannouncement_editor_title: \"Annuncio\",\n\t\tnode_comments_title: \"commenti\",\n\t\tnode_comment_title: \"commento\",\n\t\tcannot_delete_nonempty_topic: \"Sezione non vuota\",\n\t\tdelete_node_confirm:\n\t\t\t\"Sei sicuro di voler eliminare questo elemento? Quest'azione è irreversibile.\",\n\t\ttopic_label: \"Sezione\",\n\t\tno_topic: \"Nessuna sezione\",\n\t\tcreate: \"Crea\",\n\t\ttopic_node_name: \"Nome sezione\",\n\t\tnew_topic_title: \"Nuova sezione\",\n\t\tupdate_topic_title: \"Aggiorna sezione\",\n\t\tsave: \"Salva\",\n\t\tsave_draft: \"Salva bozza\",\n\t\tcreate_file_node_title: \"Nuovo file\",\n\t\tno_nodes: \"Non c'è ancora materiale\",\n\t\tunnamed_lesson: \"Lezione senza titolo\",\n\t\tback_to_tree: \"Torna al materiale\",\n\t\tnew: \"Nuovo\",\n\t\tlesson_title: \"Titolo\",\n\t\tlesson_body: \"Contenuti\",\n\t\tlesson_editor_title: \"Editor lezione\",\n\t\tdraft: \"Bozza\",\n\t\tpublish_lesson: \"Pubblica\",\n\t\tlesson_creation_date: \"Creata il\",\n\t\tlesson_attachments: \"Allegati\",\n\t\tadd_attachment: \"Aggiungi allegato\",\n\t},\n\tcourse_tree_node_types: {\n\t\t[CourseTreeNodeType.FileNode]: \"File\",\n\t\t[CourseTreeNodeType.TopicNode]: \"Sezione\",\n\t\t[CourseTreeNodeType.LessonNode]: \"Lezione\",\n\t\t[CourseTreeNodeType.PollNode]: \"Sondaggio\",\n\t\t[CourseTreeNodeType.AnnouncementNode]: \"Annuncio\",\n\t},\n\tannouncements: {\n\t\texam_published_1: \"È stato pubblicato l'esame\",\n\t\texam_published_2: \"L'esame inizierà il giorno\",\n\t\texam_published_3: \"Ecco il link per accedere all'esame\",\n\t},\n\tbreadcrumbs: {\n\t\tcourse_list: \"Corsi\",\n\t\tcourse_dashboard: ROUTE_TITLE_COURSE_NAME_TOKEN,\n\t\texam_participation_page: ROUTE_TITLE_EVENT_NAME_TOKEN,\n\t\tpractice_participation_page: \"Esercitazione\",\n\t\tsubmission_review: \"Revisione \" + ROUTE_TITLE_EVENT_NAME_TOKEN,\n\t\tpractice_review: \"Riepilogo esercitazione\",\n\t\texam_assessment: \"Valutazione \" + ROUTE_TITLE_EVENT_NAME_TOKEN,\n\t\tcourse_tree: \"Materiale\",\n\t\tcourse_tree_node: ROUTE_TITLE_NODE_NAME_TOKEN,\n\t\texercise_solution_thread: \"Discussione esercizio\",\n\t\texercise_solution_threads: \"Esercizi popolari\",\n\t\tstudent_favorites: \"Contenuti salvati\",\n\t\tstudent_course_leaderboard: \"Classifica\",\n\t},\n\tcourse_list: {\n\t\tfilter_courses: \"Cerca corsi\",\n\t\tcourses_i_teach: \"Mostra solo i miei corsi\",\n\t\thidden_courses: \"Mostra corsi nascosti agli studenti\",\n\t\tno_courses: \"Non ci sono ancora corsi\",\n\t\tno_courses_with_filters: \"Non ci sono corsi che corrispondono ai criteri di ricerca\",\n\t},\n\thelp_texts: {\n\t\ttelegram: \"Canale Telegram\",\n\t\ttestcase_passes: \"Test case superato dalla soluzione\",\n\t\ttestcase_fails: \"Test case non superato dalla soluzione\",\n\t\tpractice_score: \"Basato sugli esercizi correggibili automaticamente\",\n\t\tstudent_practice_rule_amount: \"Quanti esercizi con questo tag vuoi vedere?\",\n\t\texercise_editor: {\n\t\t\tall_or_nothing_programming:\n\t\t\t\t\"Se attivo, le sottomissioni che non superano tutti i test case riceveranno 0 punti.\",\n\t\t\tall_or_nothing:\n\t\t\t\t\"Se attivo, gli studenti che selezionano almeno una scelta errata o non selezionano tutte quelle corrette otterranno 0 punti.\",\n\t\t\tlabel: \"Il nome dell'esercizio non viene mai mostrato agli studenti\",\n\t\t\tsub_exercise_weight:\n\t\t\t\t\"Peso con cui il punteggio ottenuto in questo sotto-esercizio incide sulla valutazione complessiva dell'esercizio.\",\n\t\t\t// score_if_checked:\n\t\t\t// \"100% indica risposta corretta. Puoi usare valori negativi per dare una penalità.\",\n\t\t\t//score_if_unchecked: \"Punteggio se la risposta non viene selezionata\",\n\t\t\tsolution:\n\t\t\t\t\"Se pubblichi questo esercizio, quando viene incluso in un'esercitazione creata da uno studente, la soluzione verrà mostrata al termine della stessa.\",\n\t\t\tpublic_tags:\n\t\t\t\t\"Se pubblichi questo esercizio, i tag pubblici potranno essere utilizzati dagli studenti per cercarlo quando compongono un'esercitazione\",\n\t\t\tprivate_tags:\n\t\t\t\t\"Questi tag non verranno mai mostrati agli studenti e possono essere utilizzati per organizzare gli esercizi e aggiungerli agli esami\",\n\t\t\tclozes:\n\t\t\t\t\"Per aggiungere una sotto-domanda, posiziona il cursore nella posizione del testo dove vuoi aggiungerla e clicca Aggiungi domanda. \\\n\t\t\t\tPer modificare una sotto-domanda, clicca sul segnaposto corrispondente, per esempio [[1234]], e clicca Modifica domanda.\",\n\t\t},\n\t\tevent_template_rule_editor: {\n\t\t\tweight: \"Punteggio massimo ottenibile per gli esercizi di questo slot\",\n\t\t},\n\t\tcopy_exam_link: \"Copia link all'esame\",\n\t\tstats: \"Statistiche esame\",\n\t\tedit_score: \"Modifica punteggio\",\n\t\tedit_overall_grade: \"Modifica voto\",\n\t\thidden_course: \"Corso nascosto agli studenti\",\n\t},\n\ttour: {\n\t\tintegrations_header: \"Integrazioni\",\n\t\tintegrations_content:\n\t\t\t\"Se utilizzi altri servizi di gestione dell'apprendimento, come Google Classroom, puoi integrarli con Evo Learning.\",\n\t\tnew_material_header: \"Materiale\",\n\t\tnew_material_content:\n\t\t\t\"Prova subito il nuovo modulo Materiale! Esso ti permette di creare lezioni, caricare contenuti didattici, creare sondaggi e pubblicare annunci.\",\n\t\tmaterial_header: \"Aggiungi materiale\",\n\t\tmaterial_content:\n\t\t\t\"Puoi creare lezioni e aggiungere materiale come video, file PDF e altri allegati. Puoi anche creare sondaggi o pubblicare annunci per il tuo corso.\",\n\t\tdemo_student_header: \"Benvenuto nella sezione studenti!\",\n\t\tdemo_student_content:\n\t\t\t\"Questa è la dashboard che i tuoi studenti visualizzeranno quando accedono ai tuoi corsi. Vediamo alcune delle funzionalità principali.\",\n\t\tdemo_practice_header: \"Esercitazioni\",\n\t\tdemo_practice_content:\n\t\t\t\"Evo Learning permette agli studenti di creare autonomamente esercitazioni sfruttando gli esercizi che il docente ha reso pubblici. Prova a creare un'esercitazione.\",\n\t\tdemo_popular_exercises_header: \"Esercizi popolari\",\n\t\tdemo_popular_exercises_content:\n\t\t\t\"Da questa sezione, gli studenti possono visualizzare gli esercizi che hanno ricevuto più attenzione e discuterne tra di loro, proponendo soluzioni e votando le soluzioni proposte da altri.\",\n\t\tdemo_leaderboard_header: \"Classifica\",\n\t\tdemo_leaderboard_content:\n\t\t\t\"Per i corsi in cui le funzionalità di gioco sono attive la classifica mostra gli studenti più attivi. Attenzione: nella demo non potrai gestire le funzionalità di gioco nei tuoi corsi, ma abbiamo già attivato queste funzionalità per te, quindi potrai provarle da studente.\",\n\t\tdemo_help_center_header: \"Centro supporto\",\n\t\tdemo_help_center_content:\n\t\t\t\"Se hai dubbi su qualche funzionalità, visita il centro di supporto: troverai articoli che rispondono alle domande più frequenti sull'utilizzo. Se non trovi la risposta alla tua domanda, utilizza la funzione Contattaci.\",\n\t\tdemo_permissions_header: \"Permessi\",\n\t\tdemo_permissions_content:\n\t\t\t\"Da questa sezione puoi aggiungere docenti al tuo corso, assegnando loro permessi diversi a seconda del loro ruolo.\",\n\t\tdemo_solutions_header: \"Soluzioni agli esercizi\",\n\t\tdemo_solutions_content:\n\t\t\t\"Mentre dalla sezione Esercizi potrai scrivere le soluzioni per gli esercizi del tuo corso, in questa sezione troverai le soluzioni proposte dagli studenti.\",\n\t\tdemo_exams_header: \"Esami\",\n\t\tdemo_exams_content:\n\t\t\t\"Gli esercizi che crei potranno essere inseriti in prove d'esame. In questa sezione potrai creare esami per il tuo corso, monitorare l'andamento di quelli in corso e visualizzare le statistiche di quelli già conclusi.\",\n\t\tdemo_exercises_header: \"Esercizi\",\n\t\tdemo_exercises_content:\n\t\t\t\"La maggior parte delle funzionalità di Evo Learning sono incentrate sugli esercizi. In questa sezione troverai gli esercizi del tuo corso e potrai crearne di nuovi.\",\n\t\tdemo_course_header: \"È tutto pronto\",\n\t\tdemo_course_content:\n\t\t\t\"Abbiamo già creato alcuni corsi per te, in modo che tu possa provare tutte le funzionaltà di Evo Learning. Inizia accedendo al pannello docente di uno dei corsi disponibili.\",\n\t\tdemo_welcome_header: \"Benvenuto nella tua demo di Evo Learning!\",\n\t\tdemo_welcome_content:\n\t\t\t\"Per iniziare, effettua l'accesso con l'indirizzo email che hai usato per attivare la demo.\",\n\t\tnew_sidebar_header: \"Nuova sidebar\",\n\t\tnew_sidebar_content:\n\t\t\t\"La nuova sidebar collassabile ti permette di concentrarti sul tuo lavoro senza distrazioni. Per mantenerla aperta sempre, clicca sul bottone qui in alto.\",\n\t\thelp_center_header: \"Nuova guida all'utilizzo\",\n\t\thelp_center_content:\n\t\t\t\"Nella nuova guida all'utilizzo della piattaforma, troverai articoli e risposte alle domande più frequenti. Consultala se trovi difficoltà nell'utilizzo o se hai domande sulla piattaforma.\",\n\t\tskip: \"Salta tour\",\n\t\tnext: \"Avanti\",\n\t\tprevious: \"Indietro\",\n\t\tfinish: \"Termina\",\n\t\tadd_exercises_header: \"Creazione esercizi\",\n\t\tadd_exercises_content:\n\t\t\t\"Per prima cosa, aggiungi esercizi al corso. Gli esercizi che crei potranno essere usati per comporre esami oppure resi disponibili agli studenti per esercitarsi.\",\n\t\tadd_exams_header: \"Creazione esami\",\n\t\tadd_exams_content:\n\t\t\t\"Dopo aver creato gli esercizi, puoi utilizzarli per comporre esami.\",\n\t\tpermissions_header: \"Aggiungi docenti\",\n\t\tpermissions_content:\n\t\t\t\"Dalla pagina dei permessi puoi consentire l'accesso alle funzionalità di gestione del corso ad altri docenti o figure di rilievo, come i tutor.\",\n\t\texam_insights_header: \"Statistiche esame\",\n\t\texam_insights_content:\n\t\t\t\"Visita la pagina delle statistiche per vedere approfondimenti sull'andamento dell'esame.\",\n\t},\n\tgamification: {\n\t\tto_reach_next_level: \"Per il prossimo livello\",\n\t\tcurrent_level: \"Livello attuale\",\n\t\tyour_reputation: \"La tua reputazione\",\n\t\tyour_leaderboard_position: \"La tua posizione in classifica\",\n\t\tyour_badges: \"Le tue medaglie\",\n\t\tshow_panel: \"Mostra dettagli\",\n\t\tgoals: \"Obiettivi\",\n\t\tno_leaderboard: \"La classifica è vuota... per ora\",\n\t\tno_goals: \"Non ci sono ancora obiettivi\",\n\t\tactions: {\n\t\t\t[GamificationAction.SUBMIT_EXERCISE_SOLUTION]:\n\t\t\t\t\"Proponi la soluzione di un esercizio\",\n\t\t\t[GamificationAction.EXERCISE_SOLUTION_APPROVED]:\n\t\t\t\t\"Ottieni l'approvazione del docente per una tua soluzione\",\n\t\t\t[GamificationAction.TURN_IN_PRACTICE_PARTICIPATION]: \"Completa un'esercitazione\",\n\t\t\t[GamificationAction.CORRECTLY_ANSWERED_EXERCISE]:\n\t\t\t\t\"Risolvi correttamente un esercizio\",\n\t\t\t[GamificationAction.EXERCISE_SOLUTION_UPVOTED]:\n\t\t\t\t\"Ottieni un Mi piace a una soluzione da te scritta\",\n\t\t\t[GamificationAction.SUBMIT_FIRST_EXERCISE_SOLUTION]:\n\t\t\t\t\"Proponi la soluzione di un esercizio per primo\",\n\t\t},\n\t},\n\treports: {\n\t\tcourse_participation_report_headers: {\n\t\t\temail: \"Email\",\n\t\t\tcourse: \"Corso\",\n\t\t\tfull_name: \"Nome e cognome\",\n\t\t\tmat: \"Matricola\",\n\t\t\tscore_average: \"Media\",\n\t\t},\n\t\tcsv_headers: {\n\t\t\tuser: {\n\t\t\t\temail: \"Email\",\n\t\t\t\tcourse: \"Corso\",\n\t\t\t\tfull_name: \"Nome e cognome\",\n\t\t\t\tfirst_name: \"Nome\",\n\t\t\t\tlast_name: \"Cognome\",\n\t\t\t\tmat: \"Matricola\",\n\t\t\t},\n\t\t\tbegin_timestamp: \"Data e ora di inizio\",\n\t\t\tend_timestamp: \"Data e ora di consegna\",\n\t\t\tscore: \"Voto\",\n\t\t\tslot: \"Slot\",\n\t\t\tslots: {\n\t\t\t\texercise: {\n\t\t\t\t\tlabel: \"nome esercizio\",\n\t\t\t\t},\n\t\t\t\tscore: \"punteggio\",\n\t\t\t\tanswer_text: \"risposta\",\n\t\t\t\tselected_choices: \"risposte selezionate\",\n\t\t\t\tpassed_testcases: \"test case superati\",\n\t\t\t\tfailed_testcases: \"test case falliti\",\n\t\t\t\tpassed_testcase_0: \"Test case 1 superato\",\n\t\t\t\tpassed_testcase_1: \"Test case 2 superato\",\n\t\t\t\tpassed_testcase_2: \"Test case 3 superato\",\n\t\t\t\tpassed_testcase_3: \"Test case 4 superato\",\n\t\t\t\tpassed_testcase_4: \"Test case 5 superato\",\n\t\t\t\tpassed_testcase_5: \"Test case 6 superato\",\n\t\t\t\tpassed_testcase_6: \"Test case 7 superato\",\n\t\t\t\tpassed_testcase_7: \"Test case 8 superato\",\n\t\t\t\tpassed_testcase_8: \"Test case 9 superato\",\n\t\t\t\tpassed_testcase_9: \"Test case 10 superato\",\n\t\t\t},\n\t\t},\n\t},\n\tlocales: {\n\t\tit: \"Italiano\",\n\t\ten: \"English\",\n\t},\n\tserver_messages: {\n\t\terror: {\n\t\t\tNOT_ENROLLED: \"Non sei iscritto a questo corso. Iscriviti per continuare.\",\n\t\t\tEVENT_CLOSED: \"L'esame è terminato.\",\n\t\t\tALREADY_ENROLLED: \"Sei già iscritto a questo corso.\",\n\t\t\tNOT_IN_EVENT_ALLOWED_LIST:\n\t\t\t\t\"Non sei nella lista di studenti ammessi a questo esame. Se ritieni che si tratti di un errore, contatta il docente.\",\n\t\t},\n\t},\n\texercise_import: {\n\t\tformats: {\n\t\t\t[DataFormat.MOODLE_XML]: \"Moodle XML\",\n\t\t\t[DataFormat.EVO_JSON]: \"SAI Evo JSON\",\n\t\t},\n\t\tselect_format: \"Seleziona il formato\",\n\t\tchoose_file: \"Scegli il file da importare\",\n\t\timport: \"Importa\",\n\t\timporting: \"Attendi...\",\n\t\timported_exercises_state: \"Visibilità degli esercizi importati\",\n\t\tdetected_exercises: \"esercizi rilevati\",\n\t\textras_detected_tags: \"Tag rilevati\",\n\t\textras_detected_tags_description:\n\t\t\t\"Clicca sui tag che vuoi aggiungere agli esercizi importati. I tag selezionati verranno aggiunti come tag pubblici.\",\n\t},\n\tintegrations: {\n\t\tclassroom: {\n\t\t\tsync_roster: \"Importa\",\n\t\t\tsync_classroom_roster: \"Importa iscritti da Classroom\",\n\t\t\tsync_classroom_roster_description_1: \"Tutti gli studenti iscritti a \",\n\t\t\tsync_classroom_roster_description_2: \"saranno aggiunti a\",\n\t\t\tsync_classroom_roster_description_3:\n\t\t\t\t\"L'operazione potrebbe richiedere alcuni minuti.\",\n\t\t\troster_sync_scheduled:\n\t\t\t\t\"Operazione pianificata. Il completamento potrebbe richiedere alcuni minuti.\",\n\t\t\tsync_grades_with_classroom: \"Sincronizza voti con Classroom\",\n\t\t\tsync: \"Sincronizza\",\n\t\t\tsync_grades_with_classroom_description:\n\t\t\t\t\"I voti che hai assegnato agli studenti verranno sincronizzati con Classroom. I voti non verranno pubblicati e quindi non saranno ancora visibili agli studenti.\",\n\t\t\tstudent_no_scopes_warning:\n\t\t\t\t\"Alcune funzionalità potrebbero non operare correttamente perché non \\\n\t\t\thai autorizzato l'applicazione ad accedere alle informazioni necessarie del tuo account Google.\",\n\t\t\tpublished_on_classroom: \"Pubblicato su Classroom\",\n\t\t\ttype_course_name_to_disable_integration:\n\t\t\t\t\"Per disabilitare l'integrazione, scrivi qui sotto\",\n\t\t\tdisable_warning:\n\t\t\t\t\"Se disabiliti l'integrazione, tutti i dati del tuo corso non saranno più sincronizzati con Google Classroom. Anche se riabiliti l'integrazione, i dati che hai sincronizzato in passato non verranno sincronizzati nuovamente. \",\n\t\t\tpublish_on_classroom: \"Pubblica anche su Classroom\",\n\t\t\tintroduction:\n\t\t\t\t\"L'integrazione Evo Learning + Google Classroom ti consente di collegare i corsi che hai creato su Evo ai corsi che insegni su Classroom.\",\n\t\t\tselect_course_to_pair:\n\t\t\t\t\"Seleziona il corso di Google Classroom che vuoi associare a \",\n\t\t\tenable: \"Abilita integrazione con Google Classroom per questo corso\",\n\t\t\tgrant_scopes_btn: \"Abilita permessi\",\n\t\t\tgrant_scopes_to_use_integration:\n\t\t\t\t\"Per utilizzare l'integrazione con Google Classroom, abilita i permessi necessari.\",\n\t\t\tyou_have_outstanding_scopes: \"Non hai ancora abilitato tutti i permessi necessari\",\n\t\t\tpair_a_classroom_course: \"Associa un corso Google Classroom\",\n\t\t\tis_paired_with: \"è associato con il corso\",\n\t\t\tyou_dont_teach_any_courses:\n\t\t\t\t\"Non è stato possibile trovare corsi su Google Classroom di cui sei un insegnante. Prova con un altro account.\",\n\t\t\tpair_course: \"Associa\",\n\t\t\tfeature_exams:\n\t\t\t\t\"Pubblica i tuoi esami su Evo e verranno sincronizzati con gli assegnamenti su Classroom\",\n\t\t\tfeature_exam_participations:\n\t\t\t\t\"Tieni traccia su Classroom delle consegne e dei voti assegnati agli studenti per esami che hai creato su Evo\",\n\t\t\tfeature_material:\n\t\t\t\t\"Pubblica lezioni, annunci e materiale su Evo e visualizzali anche nel tuo corso Classroom\",\n\t\t\tfeature_roster:\n\t\t\t\t\"Sincronizza le iscrizioni ai tuoi corsi Classroom con quelle ai corsi associati in Evo\",\n\t\t\tdisable_title: \"Disabilita integrazione\",\n\t\t\tdisable_body:\n\t\t\t\t\"Se disabiliti l'integrazione, le seguenti funzionalità verranno disattivate:\",\n\t\t\tkeep_active: \"Mantieni attiva\",\n\t\t\tfind_out_features: \"Scopri i vantaggi dell'integrazione Evo + Classroom\",\n\t\t},\n\t},\n};\n","import { GamificationAction } from \"@/gamification\";\nimport {\n\tExerciseState,\n\tExerciseType,\n\tEventState,\n\tExerciseTestCaseType,\n\tCourseTreeNodeType,\n} from \"@/models\";\nimport {\n\tROUTE_TITLE_COURSE_NAME_TOKEN,\n\tROUTE_TITLE_EVENT_NAME_TOKEN,\n} from \"@/navigation/const\";\n\nexport const en = {\n\tdialog: {\n\t\tdefault_ok_text: \"OK\",\n\t\tdefault_cancel_text: \"Cancel\",\n\t\tdefault_yes_text: \"Yes\",\n\t\tdefault_no_text: \"No\",\n\t},\n\tpractice_template_editor: {\n\t\tbegin_practice: \"Start practice\",\n\t\tadd_rule: \"Aggiungi esercizi\",\n\t\tchoose_exercises_text:\n\t\t\t\"Select the tags you're interested in in order to create your practice session.\",\n\t\trule_amount_1: \"How many exercises with tag\",\n\t\trule_amount_2: \"do you want to see?\",\n\t},\n\tlogin_screen: {\n\t\tlogin: \"Login\",\n\t},\n\theadings: {\n\t\tcourse_integrations: \"Integrations for \" + ROUTE_TITLE_COURSE_NAME_TOKEN,\n\t\tcourse_tree: \"Material \" + ROUTE_TITLE_COURSE_NAME_TOKEN,\n\t\texercise_solution_threads: \"Soluzioni esercizi \" + ROUTE_TITLE_COURSE_NAME_TOKEN,\n\t\tlogin: \"Login\",\n\t\tcourse_title: ROUTE_TITLE_COURSE_NAME_TOKEN,\n\t\tnew_course: \"Nuovo corso\",\n\t\texercise_solution_thread_detail: \"Discussione esercizio\",\n\t\tcourse_dashboard: \"Dashboard \" + ROUTE_TITLE_COURSE_NAME_TOKEN,\n\t\tcourse_exercises: \"Esercizi \" + ROUTE_TITLE_COURSE_NAME_TOKEN,\n\t\tcourse_exams: \"Esami \" + ROUTE_TITLE_COURSE_NAME_TOKEN,\n\t\tcourse_permissions: \"Permessi \" + ROUTE_TITLE_COURSE_NAME_TOKEN,\n\t\tcourse_insights: \"Statistiche \" + ROUTE_TITLE_COURSE_NAME_TOKEN,\n\t\tcourse_list: \"Courses\",\n\t\texam_progress: \"Progresso \" + ROUTE_TITLE_EVENT_NAME_TOKEN,\n\t\texam_results: \"Risultati \" + ROUTE_TITLE_EVENT_NAME_TOKEN,\n\t\tongoing_practice: \"Practice\",\n\t\tongoing_exam: \"Esame \" + ROUTE_TITLE_EVENT_NAME_TOKEN + \" in corso\",\n\t\texam_preview: \"Anteprima esame\",\n\t\treview_submission: \"Revisione risposte\",\n\t\treview_assessment: \"Correzione risposte\",\n\t\tpractice_summary: \"Riepilogo esercitazione\",\n\t\tstudent_exercise_solution_thread: \"Discussione esercizio\",\n\t\tstudent_exercise_solution_threads: \"Esercizi popolari\",\n\t\tstudent_favorites: \"Contenuti salvati\",\n\t\tstudent_course_leaderboard: \"Leaderboard\",\n\t},\n\tcourse_tree: {\n\t\tpoll_results: \"Risultati\",\n\t\tsave_poll_choice: \"Conferma\",\n\t\tpoll_choice_not_saved_yet: \"Selezione non ancora salvata\",\n\t\tconfirm_delete_poll_choice: \"Vuoi eliminare questa scelta?\",\n\t\tnew_poll_choice: \"Nuova\",\n\t\tpoll_choice_text: \"Testo opzione\",\n\t\tpoll_closed: \"Questo sondaggio è chiuso\",\n\t\tpoll_title: \"Poll\",\n\t\tpublish_poll: \"Pubblica\",\n\t\tpoll_text: \"Testo del sondaggio\",\n\t\tpoll_choices: \"Opzioni\",\n\t\tpoll_editor_title: \"Sondaggio\",\n\t\tannouncement_title: \"Annuncio\",\n\t\tpublish_announcement: \"Pubblica\",\n\t\tannouncement_body: \"Annuncio\",\n\t\tannouncement_attachments: \"Allegati\",\n\t\tannouncement_editor_title: \"Annuncio\",\n\t\tnode_comments_title: \"commenti\",\n\t\tnode_comment_title: \"commento\",\n\t\tcannot_delete_nonempty_topic: \"Sezione non vuota\",\n\t\tdelete_node_confirm:\n\t\t\t\"Sei sicuro di voler eliminare questo elemento? Quest'azione è irreversibile.\",\n\t\ttopic_label: \"Section\",\n\t\tno_topic: \"No section\",\n\t\tcreate: \"Crea\",\n\t\ttopic_node_name: \"Nome sezione\",\n\t\tnew_topic_title: \"Nuova sezione\",\n\t\tsave: \"Save\",\n\t\tsave_draft: \"Save draft\",\n\t\tcreate_file_node_title: \"New file\",\n\t\tno_nodes: \"Non c'è ancora materiale\",\n\t\tunnamed_lesson: \"Lezione senza titolo\",\n\t\tback_to_tree: \"Torna al materiale\",\n\t\tnew: \"New\",\n\t\tlesson_title: \"Title\",\n\t\tlesson_body: \"Contents\",\n\t\tlesson_editor_title: \"Lesson editor\",\n\t\tdraft: \"Draft\",\n\t\tpublish_lesson: \"Publish\",\n\t\tlesson_creation_date: \"Creata il\",\n\t\tlesson_attachments: \"Attachments\",\n\t\tadd_attachment: \"Add attachment\",\n\t},\n\tcourse_tree_node_types: {\n\t\t[CourseTreeNodeType.FileNode]: \"File\",\n\t\t[CourseTreeNodeType.TopicNode]: \"Section\",\n\t\t[CourseTreeNodeType.LessonNode]: \"Lesson\",\n\t\t[CourseTreeNodeType.PollNode]: \"Poll\",\n\t\t[CourseTreeNodeType.AnnouncementNode]: \"Announcement\",\n\t},\n\tcourses: {\n\t\taccess_as_student: \"Access as student\",\n\t\tcourse_panel: \"Teacher panel\",\n\t},\n\tcourse_list: {\n\t\tfilter_courses: \"Search courses\",\n\t\tcourses_i_teach: \"Courses I teach\",\n\t\thidden_courses: \"Courses hidden to students\",\n\t},\n\tsidebar_labels: {\n\t\tcourse_dashboard_dashboard: \"Dashboard\",\n\t\tcourse_permissions: \"Permissions\",\n\t\tcourse_dashboard_material: \"Material\",\n\t\tcourse_dashboard_exams: \"Exams\",\n\t\tcourse_dashboard_practices: \"Practice\",\n\t\tcourse_dashboard_exercises: \"Exercises\",\n\t\texercise_solution_threads: \"Solutions\",\n\t\tcourse_insights: \"Statistics\",\n\t\tcourse_dashboard_back_to_courses: \"Back to courses\",\n\t\tcourse_list_courses: \"Courses\",\n\t\tcourse_list_new_course: \"New course\",\n\t\tcourse_integrations: \"Integrations\",\n\t},\n\tbreadcrumbs: {\n\t\tcourse_list: \"Courses\",\n\t\tcourse_dashboard: ROUTE_TITLE_COURSE_NAME_TOKEN,\n\t\texam_participation_page: ROUTE_TITLE_EVENT_NAME_TOKEN,\n\t\tpractice_participation_page: \"Practice\",\n\t\tsubmission_review: \"Review \" + ROUTE_TITLE_EVENT_NAME_TOKEN,\n\t\tpractice_review: \"Review practice\",\n\t\texam_assessment: \"Assessment \" + ROUTE_TITLE_EVENT_NAME_TOKEN,\n\t\texercise_solution_thread: \"Exercise discussion\",\n\t\texercise_solution_threads: \"Popular exercises\",\n\t\tstudent_favorites: \"Saved content\",\n\t\tstudent_course_leaderboard: \"Leaderboard\",\n\t},\n\tprogramming_exercise: {\n\t\topen_text_popup: \"Open as popup\",\n\t\ttab_text: \"Text\",\n\t\ttab_testcases: \"Test cases\",\n\t\ttab_editor: \"Editor\",\n\t\ttab_execution_results: \"Results\",\n\t\trun_code: \"Run\",\n\t\trunning_code: \"Running your code...\",\n\t\texecution_results: \"Execution results\",\n\t\ttestcase: \"Test case\",\n\t\ttestcase_stdin: \"Standard input\",\n\t\ttestcase_expected_stdout: \"Expected output\",\n\t\tpassed: \"Passed\",\n\t\tnot_passed: \"Failed\",\n\t\ttest_failed_with_error: \"Execution aborted with the following error\",\n\t\ttest_failed_stdout: \"Your program produced the following output\",\n\t\tcode_errored: \"Execution aborted with the following error\",\n\t\tcompilation_errored: \"Compilation failed producing the following error\",\n\t\tno_testcases:\n\t\t\t\"This exercise doesn't have any test cases. Try asking your teacher to add some.\",\n\t\tresults_ok_but_no_testcases:\n\t\t\t\"Your code ran without producing errors. Unfortunately, this exercise doesn't have any test cases, so that's all we know.\",\n\t\tinternal_error:\n\t\t\t\"An internal error occurred while attempting to run your code. Please, report this error to the teachers.\",\n\t\tcode_execution_will_appear_here:\n\t\t\t\"The execution results for your code will appear here.\",\n\t},\n\tevent_states: {\n\t\t[EventState.DRAFT]: \"Draft\",\n\t\t[EventState.PLANNED]: \"Planned\",\n\t\t[EventState.OPEN]: \"In progress\",\n\t\t[EventState.CLOSED]: \"Closed\",\n\t\t[EventState.RESTRICTED]: \"Restricted access\",\n\t},\n\tevent_states_descriptions: {\n\t\t[EventState.PLANNED]:\n\t\t\t\"It's all set! The exam preview is visible to students, but they won't be able to access it until its begin timestamp.\",\n\t\t[EventState.DRAFT]: \"This exam won't be visible to students until you publish it.\",\n\t\t[EventState.OPEN]: \"\",\n\t\t[EventState.CLOSED]: \"\",\n\t},\n\tevent_editor: {\n\t\tchoose_allowed: \"Choose allowed\",\n\t\tallowed_students: \"allowed students\",\n\t\tcurrent_state_is_draft: \"This exam is currently in draft state\",\n\t\tmax_grade: \"Maximum grade\",\n\t\tname: \"Name\",\n\t\tstate_editor_title: \"Publish\",\n\t\tstate: \"State\",\n\t\tcurrent_state_is: \"Exam is currently in state: \",\n\t\tstate_is: \"The exam has\",\n\t\tbegin_timestamp: \"Beings at\",\n\t\tend_timestamp: \"Ends at\",\n\t\tinstructions: \"Instructions (optional)\",\n\t\teditor_title: \"Exam editor\",\n\t\tflow_rules: \"Exam rules\",\n\t\taccess_rules: \"Access rules\",\n\t\tallow_everyone_access_label: \"Allow access to anyone who has the link\",\n\t\tdeny_access_by_default_label: \"Only allow access to those you select\",\n\t\tallow_access_description:\n\t\t\t\"Anyone who has the link to this exam will be able to participate once it starts\",\n\t\tdeny_access_description: \"Only the students you select will be able to participate\",\n\t\ttime_limit_rules: \"Time limit\",\n\t\ttime_limit_label: \"Enforce time limit\",\n\t\tno_time_limit_description:\n\t\t\t\"The exam will not end automatically and you'll have to manually close it\",\n\t\ttime_limit_description:\n\t\t\t\"After the specified time limit, the exam will end. This applies to each student individually.\",\n\t\tmanage_time_limit_exceptions: \"Exceptions\",\n\t\ttime_limit_exceptions: \"exceptions\",\n\t\texercises_shown_at_a_time_label: \"Numero di esercizi da mostrare per pagina\",\n\t\tallow_going_back_label: \"Allow going back to a previously seen exercise\",\n\t\tshow_all_exercises_at_once: \"Display all exercises at once\",\n\t\tshow_one_exercise_at_once: \"Display one exercise at a time\",\n\t\tpublish: \"Publish\",\n\t\trevert_to_draft: \"Torna a stato di bozza\",\n\t\tevent_planned_help_text: \"L'esame verrà aperto agli studenti automaticamente in data\",\n\t\tediting_open_event_title: \"Modifica di un esame in corso\",\n\t\tediting_open_event_body:\n\t\t\t\"Stai modificando un esame già iniziato. Sei sicuro di volerlo modificare?\",\n\t\tcorrect_errors_to_publish:\n\t\t\t\"Prima di poter pubblicare l'esame, correggi i seguenti errori:\",\n\t\tcannot_change_timestamp:\n\t\t\t\"Non puoi modificare la data e ora di inizio dell'esame una volta pianificato. Per modificare questo campo, metti l'esame in stato di bozza.\",\n\t\tthis_is_the_link_to_the_event:\n\t\t\t\"Ecco il link per accedere all'esame. Comunicalo agli studenti che parteciperanno.\",\n\t\tedit_template_in_progress_warning:\n\t\t\t\"Modificare il modello dell'esame quando questo è già iniziato può avere conseguenze imprevedibili. Gli studenti che hanno già iniziato l'esame non saranno interessati dalle modifiche. Procedi solo se sai cosa stai facendo.\",\n\t\tcurrently_locked_by: \"È in corso una modifica a questo esame da parte di\",\n\t\tlock_stand_by: \"L'editor verrà sbloccato non appena la modifica sarà conclusa.\",\n\t\ttip_you_used_randomization:\n\t\t\t\"Hai utilizzato alcune delle funzionalità di randomizzazione. Verifica che gli esami generati siano corretti.\",\n\t\tgenerate_examples: \"Genera esempi\",\n\t\tgenerating_examples: \"Generazione esempi...\",\n\t},\n\tstudent_course_dashboard: {\n\t\tyour_practice_events: \"Le tue esercitazioni\",\n\t\tnew_practice_event: \"Nuova esercitazione\",\n\t\texams_you_participated_in: \"Esami a cui hai partecipato\",\n\t\treview_submission: \"Rivedi risposte\",\n\t\tview_assessment: \"Valutazione\",\n\t\tresume: \"Riprendi\",\n\t\tassessment_available: \"Sono stati pubblicati i voti relativi a questo esame\",\n\t\tnew_practice: \"New practice session\",\n\t\tresume_practice: \"Resume practice\",\n\t\tdraft_practice: \"Bozza esercitazione\",\n\t\tpending: \"In corso\",\n\t\tpractice_summary: \"Riepilogo\",\n\t\tno_public_exercises:\n\t\t\t\"Non puoi iniziare un'esercitazione perché i docenti del corso non hanno ancora aggiunto esercizi\",\n\t},\n\texercise_preview: {\n\t\tunnamed_exercise: \"Unnamed exercise\",\n\t},\n\texercise_editor: {\n\t\ttestcases_title: \"Test cases\",\n\t\ttestcase_type: \"Visibility\",\n\t\ttestcase_text: \"Description\",\n\t\ttestcase_stdin: \"Standard Input\",\n\t\ttestcase_expected_stdout: \"Expected Standard Output\",\n\t\tmax_score: \"Max score\",\n\t\tsolutions_title: \"Solutions\",\n\t\tnew_solution: \"New solution\",\n\t\texercise_tags: \"Tags\",\n\t\texercise_editor_title: \"Exercise editor\",\n\t\tdraft_notice: \"Draft\",\n\t\tchoices_title: \"Choices\",\n\t\texercise_label: \"Exercise label\",\n\t\texercise_text: \"Text\",\n\t\texercise_solution: \"Solution (optional)\",\n\t\tselect_exercise_type: \"Select type\",\n\t\texercise_type: \"Type\",\n\t\texercise_state: \"Visibility\",\n\t\texercise_public_tags: \"Public tags\",\n\t\texercise_private_tags: \"Private tags\",\n\t\tchoice_text: \"Text\",\n\t\tchoice_score: \"Score\",\n\t\tchoice_correctness: \"Score\",\n\t\tedit_non_draft_title: \"Modifica di un esercizio non bozza\",\n\t\tedit_non_draft_body:\n\t\t\t\"Stai per modificare un esercizio non in stato di bozza. Potrebbe essere già presente in un esame o essere già stato visto dagli studenti. Sei sicuro di volerlo modificare?\",\n\t\tnew_choice: \"New choice\",\n\t\tnew_testcase: \"New test case\",\n\t\tcannot_publish: \"Non puoi ancora pubblicare questo esercizio\",\n\t\tcannot_publish_body:\n\t\t\t\"Per poter rimuovere lo stato di bozza, correggi i seguenti errori:\",\n\t\tmake_public_confirmation_title:\n\t\t\t\"Sei sicuro di voler rendere questo esercizio pubblico?\",\n\t\tmake_public_confirmation_body:\n\t\t\t\"Se rendi questo esercizio pubblico, tutti gli studenti potranno visualizzarlo in qualsiasi momento. Se vuoi utilizzare questo esercizio in un esame, rendilo privato.\",\n\t},\n\tevent_monitor: {\n\t\tsearch_students: \"Search students\",\n\t\tclose_for_selected: \"Close\",\n\t\tundo_turn_in: \"Undo turn-in\",\n\t\tif_selected: \"If selected\",\n\t\treopen_for_selected: \"Reopen\",\n\t\tstats_participants: \"Participants\",\n\t\tstats_turned_in: \"Turned in\",\n\t\tstats_average_progress: \"Average completion\",\n\t},\n\tevent_participation_headings: {\n\t\tstudent: \"Student\",\n\t\tmat: \"Mat\",\n\t\tcourse: \"Course\",\n\t\texercise: \"Exercise\",\n\t\tparticipation_state: \"Turned in\",\n\t},\n\tfilter_results: {\n\t\ttitle: \"Search exercises\",\n\t\tmore_filters: \"More filters\",\n\t},\n\texercise_types: {\n\t\t[ExerciseType.MULTIPLE_CHOICE_SINGLE_POSSIBLE]: \"Multiple choices, only one correct\",\n\t\t[ExerciseType.MULTIPLE_CHOICE_MULTIPLE_POSSIBLE]:\n\t\t\t\"Multiple choices, more than one correct\",\n\t\t[ExerciseType.OPEN_ANSWER]: \"Open answer\",\n\t\t[ExerciseType.JS]: \"JavaScript Exercise\",\n\t\t[ExerciseType.COMPLETION]: \"Cloze exercise\",\n\t\t[ExerciseType.ATTACHMENT]: \"Attachment answer\",\n\t\t[ExerciseType.AGGREGATED]: \"Composite exercise\",\n\t\t[ExerciseType.C]: \"C Exercise\",\n\t},\n\texercise_states: {\n\t\t[ExerciseState.PUBLIC]: \"Public\",\n\t\t[ExerciseState.PRIVATE]: \"Exams only\",\n\t\t[ExerciseState.DRAFT]: \"Draft\",\n\t},\n\tmisc: {\n\t\twarning: \"Warning\",\n\t\tfind_out_more: \"Find out more\",\n\t\tminutes: \"Minutes\",\n\t\ttime_limit: \"Time limit\",\n\t\tupdated_on: \"Updated on\",\n\t\twait: \"Wait...\",\n\t\tfile_upload: \"Upload file\",\n\t\tshow_preview: \"Show preview\",\n\t\thide_preview: \"Hide preview\",\n\t\thaving_troubles_with_editor: \"Having problems with the editor?\",\n\t\ttags: \"Tags\",\n\t\texample: \"Example\",\n\t\tscore: \"Score\",\n\t\tout_of: \"out of\",\n\t\tat: \"at\",\n\t\tedit: \"Edit\",\n\t\tselect: \"Select\",\n\t\tpreview: \"Preview\",\n\t},\n\tenrollment: {\n\t\tenroll: \"Enroll\",\n\t\tenrollment: \"Enrollment\",\n\t\tdo_you_want_to_enroll: \"Do you want to enroll in\",\n\t},\n\tgamification: {\n\t\tto_reach_next_level: \"To reach next level\",\n\t\tyour_reputation: \"Your reputation\",\n\t\tyour_leaderboard_position: \"Your leaderboard position\",\n\t\tyour_badges: \"Your badges\",\n\t\tshow_panel: \"Show details\",\n\t\tgoals: \"Goals\",\n\t\tno_leaderboard: \"The leaderboard is empty... for now\",\n\t\tno_goals: \"There are no study goals\",\n\t\tcurrent_level: \"Current level\",\n\t\tactions: {\n\t\t\t[GamificationAction.SUBMIT_EXERCISE_SOLUTION]: \"Propose a solution to an exercise\",\n\t\t\t[GamificationAction.EXERCISE_SOLUTION_APPROVED]:\n\t\t\t\t\"Get teacher's approval to a solution you proposed\",\n\t\t\t[GamificationAction.TURN_IN_PRACTICE_PARTICIPATION]: \"Complete a practice session\",\n\t\t\t[GamificationAction.CORRECTLY_ANSWERED_EXERCISE]: \"Answer correctly to an exercise\",\n\t\t\t[GamificationAction.EXERCISE_SOLUTION_UPVOTED]:\n\t\t\t\t\"Get a thumbs up to a solution you proposed\",\n\t\t\t[GamificationAction.SUBMIT_FIRST_EXERCISE_SOLUTION]:\n\t\t\t\t\"Be the first to propose a solution to an exercise\",\n\t\t},\n\t},\n\thelp_texts: {\n\t\tstudent_practice_rule_amount: \"Quanti esercizi con questo tag vuoi vedere?\",\n\t\texercise_editor: {\n\t\t\tscore_if_checked:\n\t\t\t\t\"100% means correct answer. You can use negative values to apply a penalty\",\n\t\t\tscore_if_unchecked: \"Punteggio se la risposta non viene selezionata\",\n\t\t\tsolution:\n\t\t\t\t\"Se pubblichi questo esercizio, quando viene incluso in un'esercitazione creata da uno studente, la soluzione verrà mostrata al termine della stessa.\",\n\t\t\tpublic_tags:\n\t\t\t\t\"Se pubblichi questo esercizio, i tag pubblici potranno essere utilizzati dagli studenti per cercarlo quando compongono un'esercitazione\",\n\t\t\tprivate_tags:\n\t\t\t\t\"Questi tag non verranno mai mostrati agli studenti e possono essere utilizzati per organizzare gli esercizi e aggiungerli agli esami\",\n\t\t},\n\t\tcopy_exam_link: \"Copy link\",\n\t\tstats: \"Statistiche esame\",\n\t\tedit_score: \"Modifica punteggio\",\n\t\tedit_overall_grade: \"Modifica voto\",\n\t\thidden_course: \"Corso nascosto agli studenti\",\n\t},\n\tevent_preview: {\n\t\tunnamed_event: \"Unnamed exam\",\n\t\tmonitor: \"Monitora\",\n\t\tresults: \"Risultati\",\n\t\teditor: \"Editor\",\n\t\tclose: \"Close\",\n\t\tstill_open_for_some: \"L'esame è ancora aperto per alcuni studenti.\",\n\t\tcopy_link: \"Copia link per gli studenti\",\n\t\tcopied_link: \"Copiato link per gli studenti\",\n\t},\n\tcloud: {\n\t\tchanges_saved_to_server: \"All changes saved to server\",\n\t\tsaving: \"Saving...\",\n\t\tsaved: \"All changed saved!\",\n\t\terror: \"An error occurred while saving your changes\",\n\t},\n\tevent_template_editor: {\n\t\tadd_more_rules: \"Aggiungi più slot\",\n\t\teditor_title: \"Exam template\",\n\t\tintroduction_text:\n\t\t\t\"Create the template for this exam. For each slot, you can decide whether to show the same exercise to all students or to use randomization criteria.\",\n\t\tadd_rule: \"Add slot\",\n\t\tconfirm_delete_rule: \"Sei sicuro di voler eliminare questo slot?\",\n\t\trandomize_rule_order: \"Randomize order of slots\",\n\t\trule_order_randomization_off:\n\t\t\t\"Gli slot verranno assegnati agli studenti nell'ordine in cui sono disposti qui\",\n\t\trule_order_randomization_on:\n\t\t\t\"Gli slot verranno assegnati agli studenti in ordine casuale\",\n\t},\n\tevent_template_rule_editor: {\n\t\tweight: \"Weight\",\n\t\treset_slot_settings: \"Reset slot\",\n\t\texercise_number: \"Slot\",\n\t\tchoose_exercise: \"Choose exercise\",\n\t\tpopulate_slot_plural_title: \"Select exercise(s) for slots\",\n\t\tpopulate_slot_singular_title: \"Select exercise(s) for slot\",\n\t\tmode_selection_text: \"Come vuoi scegliere l'esercizio per questo slot?\",\n\t\tpick_single_exercise: \"Seleziona un esercizio\",\n\t\tpick_exercise_from_pool: \"Pick exercise from a pool\",\n\t\tpick_exercise_tag_based: \"Seleziona esercizio in base ai tag\",\n\t\tpick_single_exercise_help_text: \"Tutti gli studenti vedranno lo stesso esercizio\",\n\t\tpick_exercise_from_pool_help_text:\n\t\t\t\"Each student will be shown an exercise randomly picked from the pool you define\",\n\t\tpick_exercise_tag_based_help_text:\n\t\t\t\"Ogni studente vedrà un esercizio scelto a caso con i tag selezionati\",\n\t\tone_exercise_from_set_description:\n\t\t\t\"Each student will be shown a randomly picked exercise among these:\",\n\t\ttag_based_description: \"Ogni studente vedrà un esercizio a caso che tra i tag ha:\",\n\t\tsame_exercise_for_everyone_description:\n\t\t\t\"All participants will be shown this exercise:\",\n\t\ttag_based_introduction:\n\t\t\t\"Each student will see one exercise chosen randomly among those that meet the conditions defined here. An exercise is eligible if, for each group of tags defined, it contains at least one tag from that group.\",\n\t\ttag_based_select_exercises: \"Exercises will be eligible only if they have\",\n\t\ttag_based_at_least_one: \"at least one\",\n\t\ttag_based_among: \"among the following tags:\",\n\t\ttag_based_and: \"... and\",\n\t\ttag_based_add_condition: \"Aggiungi condizione\",\n\t\teligible_exercises: \"Eligible exercises:\",\n\t},\n\texercise_states_descriptions: {\n\t\t[ExerciseState.PUBLIC]:\n\t\t\t\"Will be visible to students and able to be used both in exams and in student practice sessions.\",\n\t\t[ExerciseState.PRIVATE]:\n\t\t\t\"Won't be visible by students, but teachers will be able to use it in exams.\",\n\t\t[ExerciseState.DRAFT]:\n\t\t\t\"Won't be visible to students and teachers won't be able to use it in exams.\",\n\t},\n\tevent_participation_page: {\n\t\texercise: \"Exercise\",\n\t\tof: \"of\",\n\t\tnext_exercise: \"Avanti\",\n\t\tprevious_exercise: \"Indietro\",\n\t\tskip_exercise: \"Salta esercizio\",\n\t\tturn_in: \"Turn in\",\n\t\tturn_in_dialog_title: \"Sei sicuro di voler consegnare?\",\n\t\tturn_in_dialog_text:\n\t\t\t\"Una volta consegnato, non potrai più modificare le tue risposte.\",\n\t\tturn_in_confirm_button: \"Consegna\",\n\t\tturned_in_text:\n\t\t\t\"Fatto! Hai consegnato con successo. Qui sotto puoi rivedere le tue risposte. Quando vuoi, puoi chiudere questa pagina.\",\n\t\treview_answers: \"Revisione risposte\",\n\t\tnext_dialog_title: \"Sei sicuro di voler passare al prossimo esercizio?\",\n\t\tnext_dialog_text:\n\t\t\t\"Se vai avanti, non potrai più tornare indietro a questo esercizio.\",\n\t\tnext_dialog_confirm_button: \"Vai avanti\",\n\t\tparticipate: \"Partecipa\",\n\t\texam_not_yet_begun: \"L'esame non è ancora iniziato.\",\n\t\texam_is_over: \"L'esame è terminato.\",\n\t\tbegin_timestamp: \"Began on\",\n\t\tturn_in_timestamp: \"Turned in on\",\n\t},\n\ttestcase_types: {\n\t\t[ExerciseTestCaseType.SHOW_CODE_SHOW_TEXT]: \"Public\",\n\t\t[ExerciseTestCaseType.SHOW_TEXT_ONLY]: \"Only descript.\",\n\t\t[ExerciseTestCaseType.HIDDEN]: \"Hidden\",\n\t},\n\tevent_assessment: {\n\t\toverall_score: \"Grade\",\n\t\tyou_overrode_score:\n\t\t\t\"You assigned a grade manually.\" +\n\t\t\t\" If you edit the score of an exercise now, the overall grade won't be updated.\",\n\t\t// \" Se vuoi che il voto si aggiorni automaticamente in base ai punteggi degli esercizi, ripristina il voto di default.\",\n\t\tall_participations_assesses:\n\t\t\t\"Tutti gli esami sono stati corretti. Puoi pubblicare i risultati.\",\n\t\tsome_exams_require_manual_assessment:\n\t\t\t\"Alcuni esercizi richiedono una correzione manuale. Prima di poter pubblicare i risultati, devi assegnare un punteggio agli esercizi che ancora non lo hanno.\",\n\t\texams_awaiting_assessment_are_marked:\n\t\t\t\"Per assegnare un punteggio alle risposte non ancora valutate, clicca sull'icona\",\n\t\tready_to_publish_1:\n\t\t\t\"I risultati sono pronti per essere pubblicati. Seleziona le righe che vuoi pubblicare e clicca su\",\n\t\tready_to_publish_2:\n\t\t\t\"Le righe evidenziate in verde corrispondono a risultati già pubblicati.\",\n\t\tall_published:\n\t\t\t\"Tutti i risultati sono stati pubblicati e sono ora visibili agli studenti.\",\n\t\tpublish_results: \"Pubblica i risultati\",\n\t\tthis_comment_is_private:\n\t\t\t\"Questo commento verrà visualizzato dagli insegnanti ma non dallo studente\",\n\t\tcomment_for_student: \"Feedback\",\n\t\tstudent_will_see_this_comment:\n\t\t\t\"Questo commento sarà visibile allo studente quando pubblicherai i risultati\",\n\t\tthis_exercise_requires_manual_assessment: \"You have to assign a score manually.\",\n\t\tsome_sub_slots_pending:\n\t\t\t\"Il punteggio mostrato è incompleto perché alcuni sotto-esercizi non hanno ancora ricevuto una valutazione.\",\n\t\tsome_slots_pending:\n\t\t\t\"The grade shown is incomplete because you haven't yet assigned a score to some exercises.\",\n\t\tdefault_score:\n\t\t\t\"The grade shown is computed as the sum of the scores of each individual exercise.\" +\n\t\t\t\" If you edit the score for an exercise, the overall grade will be updated automatically.\" +\n\t\t\t\" You can override this grade by setting a value manually.\",\n\t\tassessment_state: \"Stato della correzione\",\n\t\tconfirm_assessment: \"Save assessment\",\n\t\texercise: \"esercizio\",\n\t\tassess: \"Valuta\",\n\t\tassigned_score: \"Score\",\n\t\tyour_assessment: \"Assessment\",\n\t\ttext_answer_label: \"Risposta dello studente\",\n\t\texercise_seen_at: \"Visto:\",\n\t\texercise_answered_at: \"Answered at:\",\n\t\tviewing_participation_of: \"You are viewing the participation to the exam of\",\n\t\tviewing_practice_of: \"Stai visualizzando un'esercitazione di\",\n\t\tsub_slot_assessment_unavailable_open_full_1: \"Apri la\",\n\t\tsub_slot_assessment_unavailable_open_full_2: \"partecipazione completa\",\n\t\tsub_slot_assessment_unavailable_open_full_3:\n\t\t\t\"all'esame per assegnare un punteggio a questo sotto-esercizio.\",\n\t\tundo_overall_score_edit: \"Vuoi ripristinare il voto originale?\",\n\t\tundo_score_edit: \"Vuoi ripristinare il punteggio originale per questo esercizio?\",\n\t\toverall_score_instructions:\n\t\t\t\"You can assign a grade manually to this student. The grade can be\" +\n\t\t\t\" a number or a string.\",\n\t},\n\tintegrations: {\n\t\tclassroom: {\n\t\t\tpublish_on_classroom: \"Also publish on Classroom\",\n\t\t\tstudent_no_scopes_warning:\n\t\t\t\t\"Some features may not work properly because you haven't authorized this app to access \\\n\t\t\t\tthe necessary information from your Google account.\",\n\t\t\tgrant_scopes_btn: \"Authorize\",\n\t\t\tgrant_scopes_to_use_integration:\n\t\t\t\t\"To use this integration, authorize Evo Learning to access the relevant data of your Google account.\",\n\t\t},\n\t},\n\tdata_table: {\n\t\tnoRowsToShow: \"No results\",\n\t},\n};\n","import { createI18n } from \"vue-i18n\";\nimport { it } from \"./it\";\nimport { en } from \"./en\";\n\nexport const messages = {\n\tit,\n\ten,\n};\n\nexport const i18n = createI18n({\n\tmessages,\n\tlocale: \"it\",\n\tsilentFallbackWarn: true,\n});\n\nexport const getTranslatedString = i18n.global.tc;\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./AnimatedIcon.vue?vue&type=style&index=0&id=4c82c431&lang=css\"","import { ExerciseTestCaseType } from \"@/models\";\n\nexport const icons = {\n\t[ExerciseTestCaseType.SHOW_TEXT_ONLY]: [\"code_off-sm\"],\n\t[ExerciseTestCaseType.SHOW_CODE_SHOW_TEXT]: [\"public-sm\"],\n\t[ExerciseTestCaseType.HIDDEN]: [\"visibility_off-sm\"],\n};\n","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createElementBlock as _createElementBlock, renderSlot as _renderSlot } from \"vue\"\n\nconst _hoisted_1 = { class: \"darken-on-hover\" }\nconst _hoisted_2 = [\"disabled\", \"maxlength\", \"value\", \"placeholder\"]\nconst _hoisted_3 = { class: \"text-base text-muted material-icons-outlined\" }\nconst _hoisted_4 = {\n key: 2,\n class: \"absolute bottom-0.5 right-1.5 -z-1\"\n}\nconst _hoisted_5 = { class: \"text-base text-muted material-icons-outlined\" }\nconst _hoisted_6 = {\n key: 0,\n class: \"text-sm font-light text-danger-dark\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_LinearProgress = _resolveComponent(\"LinearProgress\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([{\n\t\t\t\t'border-danger-dark focus-within:border-danger-dark': _ctx.$slots.errors,\n\t\t\t\t'py-1.5 px-2 rounded-t-sm border-b-2': !_ctx.searchBar,\n\t\t\t\t'py-2 px-3 rounded-full': _ctx.searchBar,\n\t\t\t}, \"light-input relative z-10 bg-light hover:bg-gray-150 focus-within:border-primary duration-300 transition-border\"])\n }, [\n (_ctx.loading)\n ? (_openBlock(), _createBlock(_component_LinearProgress, {\n key: 0,\n class: \"absolute -bottom-1 rounded-b-sm left-0\"\n }))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"input\", {\n disabled: _ctx.disabled,\n maxlength: _ctx.maxLength,\n type: \"text\",\n value: _ctx.modelValue,\n onBlur: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('blur'))),\n onInput: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$emit('update:modelValue', $event.target.value))),\n placeholder: _ctx.placeholder,\n class: _normalizeClass([{\n\t\t\t\t\t'floating-label-error': _ctx.$slots.errors?.(),\n\t\t\t\t\t'floating-label': !_ctx.fixedLabel,\n\t\t\t\t\t'pl-5': _ctx.leftIcon.length > 0,\n\t\t\t\t}, \"z-10 block w-full bg-transparent appearance-none focus:outline-none\"])\n }, null, 42, _hoisted_2),\n (_ctx.leftIcon.length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: _normalizeClass(['absolute -z-1', _ctx.searchBar ? 'left-3 bottom-1' : 'left-1.5 bottom-0.5'])\n }, [\n _createElementVNode(\"span\", _hoisted_3, _toDisplayString(_ctx.leftIcon), 1)\n ], 2))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"label\", {\n class: _normalizeClass([{ 'top-2 left-1.5 origin-0 fixed-label': _ctx.fixedLabel }, \"absolute bottom-1.5 origin-0 -z-1\"])\n }, [\n _renderSlot(_ctx.$slots, \"default\")\n ], 2),\n (_ctx.rightIcon.length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createElementVNode(\"span\", _hoisted_5, _toDisplayString(_ctx.rightIcon), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ], 2),\n (_ctx.$slots.errors?.())\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _renderSlot(_ctx.$slots, \"errors\")\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}","\nimport { defineComponent } from \"@vue/runtime-core\";\nimport LinearProgress from \"./LinearProgress.vue\";\n\nexport default defineComponent({\n\tname: \"TextInput\",\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\trightIcon: {\n\t\t\ttype: String,\n\t\t\tdefault: \"\",\n\t\t},\n\t\tmaxLength: {\n\t\t\ttype: Number,\n\t\t\tdefault: -1,\n\t\t},\n\t\tleftIcon: {\n\t\t\ttype: String,\n\t\t\tdefault: \"\",\n\t\t},\n\t\tplaceholder: {\n\t\t\ttype: String,\n\t\t\tdefault: \" \",\n\t\t},\n\t\tfixedLabel: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tsearchBar: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tcomponents: { LinearProgress },\n});\n","import { render } from \"./TextInput.vue?vue&type=template&id=dd633606&ts=true\"\nimport script from \"./TextInput.vue?vue&type=script&lang=ts\"\nexport * from \"./TextInput.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","module.exports = __webpack_public_path__ + \"img/c.0ff0d803.svg\";","import { normalizeOptionalStringContainingNumber, tagIdsToTags } from \"./utils\";\nimport {\n\tEvent,\n\tEventTemplateRule,\n\tEventParticipation,\n\tEventTemplate,\n\tExercise,\n\tExerciseChoice,\n\tEventTemplateRuleClause,\n\tEventParticipationSlot,\n\tExerciseSolution,\n\tCourseTreeNode,\n} from \"@/models\";\nimport { BackendPaginatedResponse, PaginatedData } from \"./interfaces\";\n\n// export const normalizeIncomingCourseTreeNode = (\n// \tnode: CourseTreeNode & { children: BackendPaginatedResponse },\n// \tpageNumber: number,\n// ): CourseTreeNode => ({\n// \t...node,\n// \tchildren: convertPaginatedResponseToLocalPaginatedData(\n// \t\t{\n// \t\t\t...node.children,\n// \t\t\tresults: node.children.results.map(c =>\n// \t\t\t\tnormalizeIncomingCourseTreeNode(c as any, pageNumber),\n// \t\t\t),\n// \t\t},\n// \t\tpageNumber,\n// \t),\n// });\nexport const normalizeIncomingExercise = (exercise: Exercise): Exercise => ({\n\t...exercise,\n\tsub_exercises: (exercise.sub_exercises ?? []).map(s => normalizeIncomingExercise(s)),\n\tchild_weight: normalizeOptionalStringContainingNumber(exercise.child_weight) as number,\n\tchoices: (exercise.choices ?? []).map(c => normalizeIncomingExerciseChoice(c)),\n});\n\nexport const normalizeIncomingExerciseChoice = (\n\tchoice: ExerciseChoice,\n): ExerciseChoice => ({\n\t...choice,\n\t...(typeof choice.correctness === \"undefined\"\n\t\t? {}\n\t\t: {\n\t\t\t\tcorrectness: normalizeOptionalStringContainingNumber(\n\t\t\t\t\tchoice.correctness,\n\t\t\t\t) as number,\n\t\t }),\n});\n\nexport const normalizeIncomingEventParticipation = (\n\tparticipation: EventParticipation,\n): EventParticipation => ({\n\t...participation,\n\t...(typeof participation.score === \"undefined\"\n\t\t? {}\n\t\t: {\n\t\t\t\tscore: String(\n\t\t\t\t\t// score can currently only be a string, so normalize to get\n\t\t\t\t\t// rid of trailing decimal 0's and re-convert to string\n\t\t\t\t\tnormalizeOptionalStringContainingNumber(participation.score),\n\t\t\t\t),\n\t\t }),\n\tslots: (participation.slots ?? []).map(s => normalizeIncomingEventParticipationSlot(s)),\n});\n\nexport const normalizeIncomingEventParticipationSlot = (\n\tslot: EventParticipationSlot,\n): EventParticipationSlot => ({\n\t...slot,\n\tweight: normalizeOptionalStringContainingNumber(slot.weight) as number,\n\t// TODO a thought: instead of doing this, you can just put score and it can possibly be undefined\n\t...(typeof slot.score === \"undefined\"\n\t\t? {}\n\t\t: {\n\t\t\t\tscore: normalizeOptionalStringContainingNumber(slot.score) as number | null,\n\t\t }),\n});\n\nexport const normalizeIncomingEventTemplateRuleClause = (\n\tclause: EventTemplateRuleClause,\n): EventTemplateRuleClause => ({\n\t...clause,\n\t// clause tags are sent as id's - convert them to Tag objects\n\ttags: tagIdsToTags(clause.tags as any), // TODO use interfaces for incoming data\n});\n\nexport const normalizeIncomingEventTemplateRule = (\n\trule: EventTemplateRule,\n): EventTemplateRule => ({\n\t...rule,\n\tweight: normalizeOptionalStringContainingNumber(rule.weight) as number,\n\t...(typeof rule.clauses === \"undefined\"\n\t\t? {}\n\t\t: {\n\t\t\t\tclauses: rule.clauses.map(c => normalizeIncomingEventTemplateRuleClause(c)),\n\t\t }),\n});\n\nexport const normalizeIncomingEventTemplate = (\n\ttemplate: EventTemplate,\n): EventTemplate => ({\n\t...template,\n\trules: template.rules.map(r => normalizeIncomingEventTemplateRule(r)),\n});\n\nexport const normalizeIncomingEvent = (event: Event): Event => ({\n\t...event,\n\ttime_limit_seconds: normalizeOptionalStringContainingNumber(\n\t\tevent.time_limit_seconds,\n\t) as number | null,\n\t...(typeof event.template === \"undefined\" || event.template === null\n\t\t? {}\n\t\t: {\n\t\t\t\ttemplate: normalizeIncomingEventTemplate(event.template),\n\t\t }),\n});\n\n/**\n * Takes in an array of ExerciseSolution objects that also have a\n * reference to an Exercise; returns an array of Exercise objects\n * where each one contains all the solutions that referenced it\n */\nexport const aggregateExerciseSolutionThreads = (\n\tsolutions: (ExerciseSolution & { exercise: Exercise })[],\n): Exercise[] => {\n\tconst exercises = solutions\n\t\t.map(s => s.exercise)\n\t\t.filter((e, i, a) => a.findIndex(ex => ex.id == e.id) === i);\n\tsolutions.forEach(s => {\n\t\tconst solutionExercise = exercises.find(e => e.id == s.exercise.id) as Exercise;\n\t\tsolutionExercise.solutions ??= [];\n\t\tconst { exercise, ...solution } = s;\n\t\tsolutionExercise.solutions.push(solution);\n\t});\n\treturn exercises;\n};\n\nexport const convertPaginatedResponseToLocalPaginatedData = (\n\tresponse: BackendPaginatedResponse,\n\tpageNumber: number,\n): PaginatedData => ({\n\tdata: response.results,\n\tcount: response.count,\n\tisLastPage: response.next === null,\n\tpageNumber,\n});\n","import { resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex items-center w-full my-3 space-x-2\" }\nconst _hoisted_2 = { class: \"w-full\" }\nconst _hoisted_3 = { class: \"flex items-center space-x-1\" }\nconst _hoisted_4 = { class: \"mr-2 font-medium capitalize\" }\nconst _hoisted_5 = { class: \"flex w-full items-center\" }\nconst _hoisted_6 = { class: \"break-normal\" }\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons text-muted\" }, \"delete\", -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Avatar = _resolveComponent(\"Avatar\")!\n const _component_Timestamp = _resolveComponent(\"Timestamp\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Avatar, {\n class: \"my-auto\",\n user: _ctx.user\n }, null, 8, [\"user\"]),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"p\", _hoisted_4, _toDisplayString(_ctx.user.full_name ?? \"\"), 1),\n _createVNode(_component_Timestamp, {\n value: _ctx.created,\n reduced: true,\n class: \"text-muted text-xs opacity-90\"\n }, null, 8, [\"value\"])\n ]),\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"p\", _hoisted_6, _toDisplayString(_ctx.message), 1)\n ])\n ]),\n (_ctx.canDelete)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 0,\n variant: 'icon',\n outline: true,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('deleteMessage'))),\n class: \"ml-auto opacity-30 hover:opacity-100 transition-opacity duration-75 ease-in-out\"\n }, {\n default: _withCtx(() => [\n _hoisted_7\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true)\n ]))\n}","\nimport { User } from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport Avatar from \"../ui/Avatar.vue\";\nimport Btn from \"../ui/Btn.vue\";\nimport Timestamp from \"../ui/Timestamp.vue\";\nexport default defineComponent({\n\tname: \"Message\",\n\tprops: {\n\t\tmessage: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tuser: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\tcreated: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tcanDelete: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t},\n\temits: {\n\t\tdeleteMessage() {\n\t\t\treturn true;\n\t\t},\n\t},\n\tmethods: {},\n\tcomputed: {},\n\tcomponents: { Avatar, Timestamp, Btn },\n});\n","import { render } from \"./Message.vue?vue&type=template&id=77350c6e&ts=true\"\nimport script from \"./Message.vue?vue&type=script&lang=ts\"\nexport * from \"./Message.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","module.exports = __webpack_public_path__ + \"img/json_evo.0c45fbf7.png\";","import { createElementVNode as _createElementVNode, normalizeStyle as _normalizeStyle, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex items-center justify-center\" }\nconst _hoisted_2 = [\"width\", \"height\"]\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"circle\", {\n class: \"path\",\n fill: \"none\",\n \"stroke-width\": \"6\",\n \"stroke-linecap\": \"round\",\n cx: \"33\",\n cy: \"33\",\n r: \"30\"\n}, null, -1)\nconst _hoisted_4 = [\n _hoisted_3\n]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: _normalizeClass({\n\t\t\t\t'text-primary': _ctx.variant === 'primary',\n\t\t\t\t'text-gray-800': _ctx.variant === 'dark',\n\t\t\t\t'text-gray-400': _ctx.variant === 'gray',\n\t\t\t})\n }, [\n (_openBlock(), _createElementBlock(\"svg\", {\n class: \"spinner\",\n width: _ctx.spinnerSize,\n height: _ctx.spinnerSize,\n style: _normalizeStyle(_ctx.size === 'xl' ? 'filter: drop-shadow(1px 1px 2px rgba(0,0,0,0.1))' : ''),\n viewBox: \"0 0 66 66\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, _hoisted_4, 12, _hoisted_2))\n ], 2)\n ]))\n}","\nimport { defineComponent } from \"@vue/runtime-core\";\nimport { PropType } from \"vue\";\n\nexport default defineComponent({\n\tname: \"Spinner\",\n\tprops: {\n\t\tsize: {\n\t\t\ttype: String as PropType<\"sm\" | \"md\" | \"lg\" | \"xl\">,\n\t\t\tdefault: \"md\",\n\t\t},\n\t\tvariant: {\n\t\t\ttype: String as PropType<\"primary\" | \"gray\" | \"light\" | \"dark\">,\n\t\t\tdefault: \"gray\",\n\t\t},\n\t\tfast: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tcomputed: {\n\t\tspinnerSize() {\n\t\t\tswitch (this.size) {\n\t\t\t\tcase \"sm\":\n\t\t\t\t\treturn \"12px\";\n\t\t\t\tcase \"md\":\n\t\t\t\t\treturn \"20px\";\n\t\t\t\tcase \"lg\":\n\t\t\t\t\treturn \"24px\";\n\t\t\t\tcase \"xl\":\n\t\t\t\t\treturn \"48px\";\n\t\t\t\tdefault:\n\t\t\t\t\treturn \"12px\";\n\t\t\t}\n\t\t},\n\t},\n});\n","import { render } from \"./Spinner.vue?vue&type=template&id=6cf18e44&ts=true\"\nimport script from \"./Spinner.vue?vue&type=script&lang=ts\"\nexport * from \"./Spinner.vue?vue&type=script&lang=ts\"\n\nimport \"./Spinner.vue?vue&type=style&index=0&id=6cf18e44&lang=css\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","module.exports = __webpack_public_path__ + \"img/undraw_education_f8ru.cbc1e760.svg\";","// export interface DataFrequency {\n// \tdatum: T;\n// \tfrequency: number;\n// }\n\nexport enum ReportSettingsPreset {\n\tMAT_AND_SCORES,\n\tFULL_NAME_AND_SCORES,\n\tALL_FIELDS,\n\tCUSTOM,\n}\n\nexport enum ReportType {\n\tPDF = \"pdf\",\n\tCSV = \"csv\",\n}\n\nexport enum ReportField {\n\tSTUDENT_EMAIL = \"email\",\n\tSTUDENT_MAT = \"mat\",\n\tSTUDENT_COURSE = \"course\",\n\tSTUDENT_FULL_NAME = \"fullName\",\n\tSCORE = \"score\",\n\tEXERCISES_LABEL = \"exercisesLabel\",\n\tEXERCISES_ANSWER = \"exercisesAnswer\",\n\tEXERCISES_SCORE = \"exercisesScore\",\n}\n\nexport interface ReportSettings {\n\t// reportType: ReportType;\n\tfields: ReportField[];\n}\n","import { renderSlot as _renderSlot, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = { class: \"relative\" }\nconst _hoisted_2 = { class: \"absolute top-2 left-1.5 origin-0 fixed-label\" }\nconst _hoisted_3 = { class: \"w-full\" }\nconst _hoisted_4 = [\"id\"]\nconst _hoisted_5 = [\"id\", \"name\", \"value\"]\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"mdc-radio__background\" }, [\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"mdc-radio__outer-circle\" }),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"mdc-radio__inner-circle\" })\n], -1)\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"mdc-radio__ripple\" }, null, -1)\nconst _hoisted_8 = [\"for\"]\nconst _hoisted_9 = [\"innerHTML\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"label\", _hoisted_2, [\n _renderSlot(_ctx.$slots, \"default\")\n ]),\n _createElementVNode(\"div\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.options, (option, index) => {\n return (_openBlock(), _createElementBlock(\"label\", {\n class: _normalizeClass([\"relative flex my-0 max-h-screen space-x-0 cursor-pointer items-start radio-item\", { 'radio-container': !_ctx.disabled }]),\n key: _ctx.id + '-option-' + index\n }, [\n _createElementVNode(\"div\", {\n id: _ctx.id + '-radio-' + index,\n class: \"mdc-radio\"\n }, [\n _createElementVNode(\"input\", {\n id: _ctx.id + '-radio-' + index + '-native',\n class: \"mdc-radio__native-control\",\n type: \"radio\",\n name: _ctx.id,\n value: option.value\n }, null, 8, _hoisted_5),\n _hoisted_6,\n _hoisted_7\n ], 8, _hoisted_4),\n _createElementVNode(\"label\", {\n class: \"mt-2 cursor-pointer\",\n for: _ctx.id + '-radio-' + index + '-native'\n }, [\n _createElementVNode(\"p\", {\n innerHTML: option.content\n }, null, 8, _hoisted_9)\n ], 8, _hoisted_8)\n ], 2))\n }), 128))\n ])\n ]))\n}","\nimport { defineComponent } from \"@vue/runtime-core\";\nimport { v4 as uuid4 } from \"uuid\";\nimport MultiIcon from \"@/components/ui/MultiIcon.vue\";\nimport { SelectableOption } from \"../../interfaces\";\nimport { MDCRadio } from \"@material/radio\";\nimport { PropType } from \"vue\";\n\nexport default defineComponent({\n\tname: \"RadioGroup\",\n\tprops: {\n\t\toptions: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\tmodelValue: {\n\t\t\ttype: Array as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tcomponents: {\n\t\t//MultiIcon,\n\t},\n\twatch: {\n\t\tdisabled: {\n\t\t\thandler() {\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\tthis.radios.forEach(radio => {\n\t\t\t\t\t\tradio.disabled = this.disabled;\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\timmediate: true,\n\t\t},\n\t},\n\n\tmounted() {\n\t\t(this.options as SelectableOption[]).map((option, i) => {\n\t\t\tconst radio = new MDCRadio(\n\t\t\t\tdocument.getElementById(this.id + \"-radio-\" + i) as Element,\n\t\t\t);\n\t\t\tthis.radios.push(radio);\n\n\t\t\tradio.checked = this.modelValue == option.value;\n\t\t\tradio.disabled = this.disabled;\n\n\t\t\t// attach event listener\n\t\t\tradio.listen(\"input\", e => {\n\t\t\t\tconsole.log(e);\n\t\t\t\tthis.$emit(\"update:modelValue\", option.value);\n\t\t\t});\n\t\t});\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tshowFeedback: false,\n\t\t\tid: \"a\" + uuid4(),\n\t\t\tradios: [] as any,\n\t\t};\n\t},\n\tmethods: {\n\t\tonInput(value: string, inputEvent: Event) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-extra-semi\n\t\t\t//(inputEvent.target as unknown as { checked: boolean }).checked = false;\n\t\t\tinputEvent.preventDefault();\n\t\t\tthis.$emit(\"update:modelValue\", value);\n\t\t},\n\t},\n});\n","import { render } from \"./RadioGroup.vue?vue&type=template&id=0d37d180&ts=true\"\nimport script from \"./RadioGroup.vue?vue&type=script&lang=ts\"\nexport * from \"./RadioGroup.vue?vue&type=script&lang=ts\"\n\nimport \"./RadioGroup.vue?vue&type=style&index=0&id=0d37d180&lang=css\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","module.exports = __webpack_public_path__ + \"img/telegram.ea33774e.jpg\";","export interface GoalLevel {\n\tid: string;\n\tlevel_value: number;\n\trequirements: ActionCount[];\n}\n\nexport interface ActionCount {\n\taction: GamificationAction;\n\tamount: number;\n}\n\nexport interface Goal {\n\tid: string;\n\tname: string;\n\tlevels: GoalLevel[];\n}\n\nexport interface GoalProgress {\n\tcurrent_level: number;\n\taction_counts: ActionCount[];\n}\n\nexport interface ActionDefinition {\n\tid: string;\n\taction_code: GamificationAction;\n}\n\nexport enum GamificationAction {\n\tTURN_IN_PRACTICE_PARTICIPATION = \"TURN_IN_PRACTICE_PARTICIPATION\",\n\tSUBMIT_FIRST_EXERCISE_SOLUTION = \"SUBMIT_FIRST_EXERCISE_SOLUTION\",\n\tSUBMIT_EXERCISE_SOLUTION = \"SUBMIT_EXERCISE_SOLUTION\",\n\tEXERCISE_SOLUTION_APPROVED = \"EXERCISE_SOLUTION_APPROVED\",\n\tEXERCISE_SOLUTION_UPVOTED = \"EXERCISE_SOLUTION_UPVOTED\",\n\tEXERCISE_SOLUTION_DOWNVOTED = \"EXERCISE_SOLUTION_DOWNVOTED\",\n\tEXERCISE_SOLUTION_UPVOTE_DELETED = \"EXERCISE_SOLUTION_UPVOTE_DELETED\",\n\tEXERCISE_SOLUTION_DOWNVOTE_DELETED = \"EXERCISE_SOLUTION_DOWNVOTE_DELETED\",\n\tCORRECTLY_ANSWERED_EXERCISE = \"CORRECTLY_ANSWERED_EXERCISE\",\n}\n","import axios from \"axios\";\nimport { Goal, GoalProgress } from \"@/gamification\";\n\nexport async function getContextGoals(contextId: string): Promise {\n\tconst response = await axios.get(`gamification/contexts/${contextId}/goals/`);\n\treturn response.data;\n}\n\nexport async function getGoalProgress(\n\tcontextId: string,\n\tgoalId: string,\n): Promise {\n\tconst response = await axios.get(\n\t\t`gamification/contexts/${contextId}/goals/${goalId}/progress/`,\n\t);\n\treturn response.data;\n}\n","import { CoursePrivilege, User } from \"@/models\";\nimport axios from \"axios\";\nimport { convertPaginatedResponseToLocalPaginatedData } from \"./converters\";\nimport { PaginatedData } from \"./interfaces\";\n\nexport async function getUsers(\n\tcourseId: string,\n\t{\n\t\tsearch,\n\t\tisTeacher,\n\t\thasPrivileges,\n\t\tsize,\n\t}: { search?: string; isTeacher?: boolean; hasPrivileges?: boolean; size?: number },\n): Promise> {\n\tconst queryParams =\n\t\t(typeof isTeacher === \"boolean\" ? `&is_teacher=${String(isTeacher)}` : \"\") +\n\t\t(typeof hasPrivileges === \"boolean\"\n\t\t\t? `&has_privileges=${String(hasPrivileges)}`\n\t\t\t: \"\") +\n\t\t(typeof search === \"string\" ? `&search=${encodeURIComponent(search)}` : \"\") +\n\t\t(typeof size === \"number\" ? `&size=${size}` : \"\");\n\tconst response = await axios.get(`/users/?course_id=${courseId}${queryParams}`);\n\t// !! TODO take in a page arg\n\treturn convertPaginatedResponseToLocalPaginatedData(response.data, 1);\n}\n\nexport async function getMe(): Promise {\n\tconst response = await axios.get(\"/users/me/\");\n\treturn response.data;\n}\n\nexport async function updateUser(userId: string, changes: Partial): Promise {\n\tconst response = await axios.patch(`/users/${userId}/`, changes);\n\treturn response.data;\n}\n\nexport async function getActiveUsersForCourse(courseId: string): Promise {\n\tconst response = await axios.get(`/courses/${courseId}/active_users/`);\n\treturn response.data;\n}\n\nexport async function getUsersEnrolledInCourse(courseId: string): Promise {\n\tconst response = await axios.get(`/courses/${courseId}/enrollments/`);\n\treturn response.data;\n}\n\nexport async function enrollUsersInCourse(\n\tcourseId: string,\n\tuserIds: string[],\n\temails: string[],\n): Promise {\n\tconst response = await axios.put(`/courses/${courseId}/enrollments/`, {\n\t\tuser_ids: userIds,\n\t\temails,\n\t});\n\treturn response.data;\n}\n\nexport async function updateUserCoursePrivileges(\n\tcourseId: string,\n\tuserId: string | null,\n\temail: string | null,\n\tprivileges: CoursePrivilege[],\n): Promise {\n\tconst response = await axios.patch(\n\t\t`/courses/${courseId}/privileges/?${userId ? \"user_id=\" + userId : \"email=\" + email}`,\n\t\t{\n\t\t\tcourse_privileges: privileges,\n\t\t},\n\t);\n\treturn response.data;\n}\n","import {\n\tCourse,\n\tEventTemplateRule,\n\tTag,\n\tEvent,\n\tEventParticipation,\n\tGamificationContext,\n\tGamificationUser,\n} from \"@/models\";\nimport axios from \"axios\";\nimport { convertPaginatedResponseToLocalPaginatedData } from \"./converters\";\nimport { PaginatedData } from \"./interfaces\";\n\nexport async function getCourseLeaderboard(\n\tcontextId: string,\n\tpageNumber: number,\n): Promise> {\n\tconst response = await axios.get(\n\t\t`/gamification/contexts/${contextId}/leaderboard/?page=${pageNumber}`,\n\t);\n\treturn convertPaginatedResponseToLocalPaginatedData(response.data, pageNumber);\n}\n","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex items-center justify-center\" }\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"svg\", {\n class: \"checkmark\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 52 52\"\n}, [\n /*#__PURE__*/_createElementVNode(\"circle\", {\n class: \"checkmark__circle\",\n cx: \"26\",\n cy: \"26\",\n r: \"25\",\n fill: \"none\"\n }),\n /*#__PURE__*/_createElementVNode(\"path\", {\n class: \"checkmark__check\",\n fill: \"none\",\n d: \"M14.1 27.2l7.1 7.2 16.7-16.8\"\n })\n], -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, _hoisted_3))\n}","\nimport { defineComponent } from \"@vue/runtime-core\";\n\nexport default defineComponent({\n\tname: \"AnimatedIcon\",\n});\n","import { render } from \"./AnimatedIcon.vue?vue&type=template&id=4c82c431&ts=true\"\nimport script from \"./AnimatedIcon.vue?vue&type=script&lang=ts\"\nexport * from \"./AnimatedIcon.vue?vue&type=script&lang=ts\"\n\nimport \"./AnimatedIcon.vue?vue&type=style&index=0&id=4c82c431&lang=css\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./FadedEdgesScrollableFragment.vue?vue&type=style&index=0&id=7ce833c8&lang=css\"","/* eslint-disable no-var */\ndeclare const Buffer;\n\nimport { EventParticipation, Event, Exercise, EventTimeLimitRule } from \"@/models\";\nimport { getTranslatedString } from \"./i18n/index\";\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport debounce from \"lodash/debounce\";\nimport moment from \"moment\";\nimport \"moment/locale/it\";\nimport { getTranslatedString as _ } from \"./i18n\";\nimport { ErrorMessage } from \"./interfaces\";\nimport router from \"./router\";\nimport { ExerciseState } from \"./models\";\n\nconst EDITOR_DEBOUNCE_TIME_MS = 1500;\nconst EDITOR_DEBOUNCE_MAX_WAIT_MS = 4000;\n\nconst SEARCH_DEBOUNCE_TIME_MS = 500;\nconst SEARCH_DEBOUNCE_MAX_WAIT_MS = 1000;\n\nconst STUDENT_DEBOUNCE_TEXT_TIME_MS = 5000;\nconst STUDENT_DEBOUNCE_TEXT_MAX_WAIT_MS = 10000;\n\nexport const getCurrentUserId = () => useMetaStore().user.id;\n\nexport const logOut = (showMessage = true, redirect = \"\"): void => {\n\tconst metaStore = useMetaStore();\n\tmetaStore.resetToken();\n\n\trouter.push({\n\t\tname: \"Login\",\n\t\tparams: {\n\t\t\tcourseId: -1, // !\n\t\t},\n\t\t...(redirect ? { query: { redirect } } : {}),\n\t});\n\tif (showMessage) {\n\t\tsetErrorNotification(getTranslatedString(\"misc.logged_out\"), true);\n\t}\n};\n\nexport const redirectToCourseEnrollment = (redirect: string): void => {\n\trouter.push({\n\t\tname: \"CourseEnrollment\",\n\t\tquery: {\n\t\t\tredirect,\n\t\t},\n\t});\n};\n\nexport const redirectToMainView = (): void => {\n\tconst metaStore = useMetaStore();\n\tif (router.currentRoute.value.query.redirect) {\n\t\trouter.push(router.currentRoute.value.query.redirect as string);\n\t} else if (metaStore.user.is_teacher) {\n\t\trouter.push({ name: \"TeacherCourseList\" });\n\t} else {\n\t\trouter.push({ name: \"StudentCourseList\" });\n\t}\n};\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport const getDebouncedForFilter = (callback: any) =>\n\tdebounce(callback, SEARCH_DEBOUNCE_TIME_MS, {\n\t\tmaxWait: SEARCH_DEBOUNCE_MAX_WAIT_MS,\n\t});\n\nexport const getFormattedTimestamp = (\n\ttimestamp: string,\n\tdateOnly = false,\n\treduced = false,\n): string => {\n\tmoment().locale(\"it\"); // TODO get user locale\n\treturn (\n\t\tmoment(timestamp)\n\t\t\t//.calendar()\n\t\t\t.format(\n\t\t\t\treduced\n\t\t\t\t\t? \"DD MMM YYYY\" + (dateOnly ? \"\" : \", HH:mm\")\n\t\t\t\t\t: \"DD MMMM YYYY\" + (dateOnly ? \"\" : `, [${_(\"misc.at\")}] HH:mm`),\n\t\t\t)\n\t);\n};\n\nexport const getExamPermalink = (exam: Event) =>\n\twindow.location.origin +\n\trouter.resolve({\n\t\tname: \"ExamParticipationPreview\",\n\t\tparams: { examId: exam.id },\n\t}).fullPath;\n\nexport const getErrorData = (e: any, useAsIs = false): ErrorMessage => {\n\tif (isMaintenanceMode()) {\n\t\treturn {\n\t\t\ttitle: _(\"misc.maintenance_mode\"),\n\t\t\ticon: \"engineering\",\n\t\t};\n\t}\n\n\tif (useAsIs) {\n\t\treturn { title: e };\n\t}\n\tconsole.log(\"Error data\", e.response, e);\n\tif (e.response) {\n\t\treturn {\n\t\t\ticon: \"error_outline\",\n\t\t\ttitle:\n\t\t\t\t!e.response?.data?.detail ||\n\t\t\t\tDEFAULT_SERVER_MESSAGES.includes(e.response?.data?.detail)\n\t\t\t\t\t? _(\"errors.\" + e.response.status)\n\t\t\t\t\t: _(\"server_messages.error.\" + e.response.data.detail),\n\t\t\tcontent: e.response?.data?.detail,\n\t\t};\n\t} else if (e.request) {\n\t\treturn {\n\t\t\ttitle: _(\"errors.no_connection\"),\n\t\t\ticon: \"cloud_off\",\n\t\t};\n\t} else {\n\t\treturn {\n\t\t\ttitle: _(\"errors.unknown_error\"),\n\t\t};\n\t}\n};\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport const setPageWideError = (e: any) => {\n\tconst metaStore = useMetaStore();\n\t// if the error is a 401 response or a NOT_ENROLLED error, don't set the global\n\t// error message to allow for redirecting to the appropriate view\n\tif (\n\t\ttypeof e !== \"object\" ||\n\t\t(e?.response?.status !== 401 && e?.response?.data?.detail !== \"NOT_ENROLLED\")\n\t) {\n\t\tmetaStore.pageWideErrorData = getErrorData(e);\n\t}\n\tthrow e;\n};\n\nexport const setErrorNotification = (e: any, useAsIs = false) => {\n\tconsole.error(\"setErrorNotification\", e);\n\tconst metaStore = useMetaStore();\n\tmetaStore.setErrorNotificationData({\n\t\tdata: getErrorData(e, useAsIs),\n\t\thideTimeout: 4000,\n\t});\n};\n\nexport const getColorFromString = (str: string) => {\n\tconst saturation = 75;\n\tconst lightness = 0.7;\n\tlet hash = 0;\n\tfor (let i = 0; i < str.length; i++) {\n\t\thash = str.charCodeAt(i) + ((hash << 5) - hash);\n\t\thash = hash & hash;\n\t}\n\tconst h = hash % 360;\n\tconst a = (saturation * Math.min(lightness, 1 - lightness)) / 100;\n\tconst f = n => {\n\t\tconst k = (n + h / 30) % 12;\n\t\tconst color = lightness - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n\t\treturn Math.round(255 * color)\n\t\t\t.toString(16)\n\t\t\t.padStart(2, \"0\"); // convert to Hex and prefix \"0\" if needed\n\t};\n\treturn `#${f(0)}${f(8)}${f(4)}`;\n};\n\nexport function forceFileDownload(response: { data: BlobPart }, title: string) {\n\t// console.log(\"--- calling download\", title, response.data);\n\tconst url = window.URL.createObjectURL(new Blob([response.data]));\n\tconst link = document.createElement(\"a\");\n\tlink.href = url;\n\tlink.setAttribute(\"download\", title);\n\tdocument.body.appendChild(link);\n\tlink.click();\n}\n\nexport const containsLatex = (html: string) => /(\\${1,2})((?:\\\\.|[\\s\\S])*)\\1/.test(html);\n\nexport function stripHtmlFromLaTexBlocks(html: string) {\n\t/**\n\t\tReturns the given string containing html where all blocks\n\t\tenclosed in $ or $$ have all html tags stripped off (currently\n\t\tonly

,

, and
tags). This is needed due to quill\n\t\teditor adding html to them, which messes with MathJax\n\t */\n\t// eslint-disable-next-line no-useless-escape\n\tconst LATEX_REGEX = /(\\${1,2})((?:\\\\.|[\\s\\S])*)\\1/g;\n\n\treturn html.replace(LATEX_REGEX, val => {\n\t\tconst textContent = val\n\t\t\t.replace(/<\\/p>/g, \"\\n\")\n\t\t\t.replace(/

/g, \"\")\n\t\t\t.replace(//g, \"\\n\");\n\t\t//new DOMParser().parseFromString(val, \"text/html\").body.textContent ?? \"\";\n\t\treturn textContent;\n\t});\n}\n\nexport const formatExerciseText = (text: string): string => {\n\treturn text.replace(/```([^`]*)```/g, \"

$1
\");\n};\n\nexport const getExerciseTitle = (exercise: Exercise): string =>\n\t(exercise?.label ?? \"\").trim().length > 0\n\t\t? (exercise.label as string)\n\t\t: _(\"exercise_preview.unnamed_exercise\");\n\nexport const getClonedExercise = (exercise: Exercise): Exercise => ({\n\t...exercise,\n\tlabel: exercise.label + \" \" + _(\"exercise.clone_label\"),\n\tstate: ExerciseState.DRAFT,\n});\n\nexport const csvToArray = (\n\tstr: string,\n\theaderLineBeginning: string,\n): Record[] => {\n\tconst delimiter = \";\"; // TODO find delimiter in string\n\n\t// remove part of the string that comes before the header line\n\tstr = str.slice(str.indexOf(headerLineBeginning));\n\n\t// slice from start of text to the first \\n index\n\t// use split to create an array from string by delimiter\n\tconst headers = str.slice(0, str.indexOf(\"\\n\")).split(delimiter);\n\n\t// slice from \\n index + 1 to the end of the text\n\t// use split to create an array of each csv value row\n\tconst rows = str.slice(str.indexOf(\"\\n\") + 1).split(\"\\n\");\n\n\t// Map the rows\n\t// split values from each row into an array\n\t// use headers.reduce to create an object\n\t// object properties derived from headers:values\n\t// the object passed as an element of the array\n\tconst arr = rows.map(function (row) {\n\t\tconst values = row.split(delimiter);\n\t\tconst el = headers.reduce((object, header, index) => {\n\t\t\tobject[header] = values[index];\n\t\t\treturn object;\n\t\t}, {} as Record);\n\t\treturn el;\n\t});\n\n\t// return the array\n\treturn arr;\n};\n\nexport const getParticipationRemainingTime = (\n\tparticipation: EventParticipation,\n\tevent: Event,\n): number | null => {\n\tif (\n\t\ttypeof event.time_limit_seconds !== \"number\" ||\n\t\tevent.time_limit_rule !== EventTimeLimitRule.TIME_LIMIT\n\t) {\n\t\treturn null;\n\t}\n\tconst endMoment = moment(participation.begin_timestamp).add(\n\t\tevent.time_limit_seconds,\n\t\t\"seconds\",\n\t);\n\tconst now = moment();\n\tconst remaining = endMoment.diff(now, \"seconds\");\n\n\treturn Math.max(remaining, 0);\n};\n\nexport const getFileContent = async (file: File): Promise => {\n\treturn new Promise((resolve, reject) => {\n\t\tconst reader = new FileReader();\n\t\treader.onload = () => {\n\t\t\tresolve(reader.result as string);\n\t\t};\n\t\treader.onerror = reject;\n\t\treader.readAsText(file);\n\t});\n};\n\nexport const clickOutsideDirective = {\n\tbeforeMount: (\n\t\tel: {\n\t\t\tclickOutsideEvent: {\n\t\t\t\t(event: any): void;\n\t\t\t\t(this: Document, ev: MouseEvent): any;\n\t\t\t};\n\t\t\tcontains: (arg0: any) => any;\n\t\t},\n\t\tbinding: { value: () => void },\n\t) => {\n\t\tel.clickOutsideEvent = (event: any) => {\n\t\t\t// check that click was outside the element and its children\n\t\t\tif (!(el == event.target || el.contains(event.target))) {\n\t\t\t\tbinding.value?.();\n\t\t\t}\n\t\t};\n\t\tdocument.addEventListener(\"click\", el.clickOutsideEvent);\n\t},\n\tunmounted: (el: { clickOutsideEvent: (this: Document, ev: MouseEvent) => any }) => {\n\t\tdocument.removeEventListener(\"click\", el.clickOutsideEvent);\n\t},\n};\n\nexport const roundToTwoDecimals = (num: number) =>\n\tMath.round((num + Number.EPSILON) * 100) / 100;\n\n// export function isElementVisible(element: HTMLElement | null) {\n// \tif (element === null) {\n// \t\treturn true;\n// \t}\n// \tif (element.offsetWidth === 0 || element.offsetHeight === 0) return false;\n// \tconst height = document.documentElement.clientHeight,\n// \t\trects = element.getClientRects(),\n// \t\tonTop = function (r: any) {\n// \t\t\tconst x = (r.left + r.right) / 2,\n// \t\t\t\ty = (r.top + r.bottom) / 2;\n// \t\t\treturn document.elementFromPoint(x, y) === element;\n// \t\t};\n// \tfor (let i = 0, l = rects.length; i < l; i++) {\n// \t\tconst r = rects[i],\n// \t\t\tin_viewport = r.top > 0 ? r.top <= height : r.bottom > 0 && r.bottom <= height;\n// \t\tif (\n// \t\t\tin_viewport\n// \t\t\t// TODO fix\n// \t\t\t// && onTop(r)\n// \t\t)\n// \t\t\treturn true;\n// \t}\n// \treturn false;\n// }\n\nimport { event } from \"vue-gtag\";\nimport { useMetaStore } from \"./stores/metaStore\";\n\nexport function logAnalyticsEvent(eventName: string, params: Record) {\n\tevent(eventName, params);\n}\n\nexport const getMaxUploadFileSizeBytes = () =>\n\tparseFloat(process.env.VUE_APP_MAX_UPLOAD_SIZE_BYTES ?? String(1_100_000_000));\nexport const isDemoMode = () => JSON.parse(process.env.VUE_APP_DEMO_MODE ?? \"false\");\nexport const isMaintenanceMode = () =>\n\tJSON.parse(process.env.VUE_APP_MAINTENANCE_MODE ?? \"false\");\n\nexport const DEFAULT_SERVER_MESSAGES = [\n\t\"You do not have permission to perform this action.\",\n\t\"Not found.\",\n\t\"Invalid token header. No credentials provided.\",\n];\n\nexport function getDefaultThumbnail(mime_type: string) {\n\tconst ARCHIVE_TYPES = [\n\t\t\"application/zip\",\n\t\t\"application/gzip\",\n\t\t\"application/x-tar\",\n\t\t\"application/vnd.rar\",\n\t\t\"application/x-bzip\",\n\t\t\"application/x-bzip2\",\n\t\t\"application/java-archive\",\n\t\t\"application/x-7z-compressed\",\n\t];\n\tconst SOURCE_CODE_TYPES = [\n\t\t\"text/x-script.python\",\n\t\t\"text/x-c\",\n\t\t\"text/x-java\",\n\t\t\"text/javascript\",\n\t\t\"text/x-sh\",\n\t\t\"application/json\",\n\t\t\"text/html\",\n\t\t\"text/css\",\n\t\t\"text/x-python-script\",\n\t\t\"text/xml\",\n\t];\n\tif (ARCHIVE_TYPES.includes(mime_type)) {\n\t\treturn require(\"@/assets/thumbnails/archive.png\");\n\t}\n\tif (SOURCE_CODE_TYPES.includes(mime_type)) {\n\t\treturn require(\"@/assets/thumbnails/code.png\");\n\t}\n\tif (mime_type.split(\"/\")[0] === \"video\") {\n\t\treturn require(\"@/assets/thumbnails/video.png\");\n\t}\n\treturn require(\"@/assets/thumbnails/text.png\");\n}\n\nexport function getHumanFileSize(bytes: number) {\n\tconst thresh = 1024;\n\n\tif (Math.abs(bytes) < thresh) {\n\t\treturn bytes + \" B\";\n\t}\n\n\tconst units = [\"kB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"];\n\tlet u = -1;\n\tconst r = 10;\n\n\tdo {\n\t\tbytes /= thresh;\n\t\t++u;\n\t} while (Math.round(Math.abs(bytes) * r) / r >= thresh && u < units.length - 1);\n\n\treturn bytes.toFixed(1) + \" \" + units[u];\n}\n\nexport function arraybufferToBase64(data: any): string {\n\treturn Buffer.from(data, \"binary\").toString(\"base64\");\n}\n\n// A formatted version of a popular md5 implementation.\n// Original copyright (c) Paul Johnston & Greg Holt.\nexport function md5(inputString) {\n\tconst hc = \"0123456789abcdef\";\n\tfunction rh(n) {\n\t\tvar j,\n\t\t\ts = \"\";\n\t\tfor (j = 0; j <= 3; j++)\n\t\t\ts += hc.charAt((n >> (j * 8 + 4)) & 0x0f) + hc.charAt((n >> (j * 8)) & 0x0f);\n\t\treturn s;\n\t}\n\tfunction ad(x, y) {\n\t\tvar l = (x & 0xffff) + (y & 0xffff);\n\t\tvar m = (x >> 16) + (y >> 16) + (l >> 16);\n\t\treturn (m << 16) | (l & 0xffff);\n\t}\n\tfunction rl(n, c) {\n\t\treturn (n << c) | (n >>> (32 - c));\n\t}\n\tfunction cm(q, a, b, x, s, t) {\n\t\treturn ad(rl(ad(ad(a, q), ad(x, t)), s), b);\n\t}\n\tfunction ff(a, b, c, d, x, s, t) {\n\t\treturn cm((b & c) | (~b & d), a, b, x, s, t);\n\t}\n\tfunction gg(a, b, c, d, x, s, t) {\n\t\treturn cm((b & d) | (c & ~d), a, b, x, s, t);\n\t}\n\tfunction hh(a, b, c, d, x, s, t) {\n\t\treturn cm(b ^ c ^ d, a, b, x, s, t);\n\t}\n\tfunction ii(a, b, c, d, x, s, t) {\n\t\treturn cm(c ^ (b | ~d), a, b, x, s, t);\n\t}\n\tfunction sb(x) {\n\t\tvar i;\n\t\tvar nblk = ((x.length + 8) >> 6) + 1;\n\t\tvar blks = new Array(nblk * 16);\n\t\tfor (i = 0; i < nblk * 16; i++) blks[i] = 0;\n\t\tfor (i = 0; i < x.length; i++) blks[i >> 2] |= x.charCodeAt(i) << ((i % 4) * 8);\n\t\tblks[i >> 2] |= 0x80 << ((i % 4) * 8);\n\t\tblks[nblk * 16 - 2] = x.length * 8;\n\t\treturn blks;\n\t}\n\tvar i,\n\t\tx = sb(inputString),\n\t\ta = 1732584193,\n\t\tb = -271733879,\n\t\tc = -1732584194,\n\t\td = 271733878,\n\t\tolda,\n\t\toldb,\n\t\toldc,\n\t\toldd;\n\tfor (i = 0; i < x.length; i += 16) {\n\t\tolda = a;\n\t\toldb = b;\n\t\toldc = c;\n\t\toldd = d;\n\t\ta = ff(a, b, c, d, x[i + 0], 7, -680876936);\n\t\td = ff(d, a, b, c, x[i + 1], 12, -389564586);\n\t\tc = ff(c, d, a, b, x[i + 2], 17, 606105819);\n\t\tb = ff(b, c, d, a, x[i + 3], 22, -1044525330);\n\t\ta = ff(a, b, c, d, x[i + 4], 7, -176418897);\n\t\td = ff(d, a, b, c, x[i + 5], 12, 1200080426);\n\t\tc = ff(c, d, a, b, x[i + 6], 17, -1473231341);\n\t\tb = ff(b, c, d, a, x[i + 7], 22, -45705983);\n\t\ta = ff(a, b, c, d, x[i + 8], 7, 1770035416);\n\t\td = ff(d, a, b, c, x[i + 9], 12, -1958414417);\n\t\tc = ff(c, d, a, b, x[i + 10], 17, -42063);\n\t\tb = ff(b, c, d, a, x[i + 11], 22, -1990404162);\n\t\ta = ff(a, b, c, d, x[i + 12], 7, 1804603682);\n\t\td = ff(d, a, b, c, x[i + 13], 12, -40341101);\n\t\tc = ff(c, d, a, b, x[i + 14], 17, -1502002290);\n\t\tb = ff(b, c, d, a, x[i + 15], 22, 1236535329);\n\t\ta = gg(a, b, c, d, x[i + 1], 5, -165796510);\n\t\td = gg(d, a, b, c, x[i + 6], 9, -1069501632);\n\t\tc = gg(c, d, a, b, x[i + 11], 14, 643717713);\n\t\tb = gg(b, c, d, a, x[i + 0], 20, -373897302);\n\t\ta = gg(a, b, c, d, x[i + 5], 5, -701558691);\n\t\td = gg(d, a, b, c, x[i + 10], 9, 38016083);\n\t\tc = gg(c, d, a, b, x[i + 15], 14, -660478335);\n\t\tb = gg(b, c, d, a, x[i + 4], 20, -405537848);\n\t\ta = gg(a, b, c, d, x[i + 9], 5, 568446438);\n\t\td = gg(d, a, b, c, x[i + 14], 9, -1019803690);\n\t\tc = gg(c, d, a, b, x[i + 3], 14, -187363961);\n\t\tb = gg(b, c, d, a, x[i + 8], 20, 1163531501);\n\t\ta = gg(a, b, c, d, x[i + 13], 5, -1444681467);\n\t\td = gg(d, a, b, c, x[i + 2], 9, -51403784);\n\t\tc = gg(c, d, a, b, x[i + 7], 14, 1735328473);\n\t\tb = gg(b, c, d, a, x[i + 12], 20, -1926607734);\n\t\ta = hh(a, b, c, d, x[i + 5], 4, -378558);\n\t\td = hh(d, a, b, c, x[i + 8], 11, -2022574463);\n\t\tc = hh(c, d, a, b, x[i + 11], 16, 1839030562);\n\t\tb = hh(b, c, d, a, x[i + 14], 23, -35309556);\n\t\ta = hh(a, b, c, d, x[i + 1], 4, -1530992060);\n\t\td = hh(d, a, b, c, x[i + 4], 11, 1272893353);\n\t\tc = hh(c, d, a, b, x[i + 7], 16, -155497632);\n\t\tb = hh(b, c, d, a, x[i + 10], 23, -1094730640);\n\t\ta = hh(a, b, c, d, x[i + 13], 4, 681279174);\n\t\td = hh(d, a, b, c, x[i + 0], 11, -358537222);\n\t\tc = hh(c, d, a, b, x[i + 3], 16, -722521979);\n\t\tb = hh(b, c, d, a, x[i + 6], 23, 76029189);\n\t\ta = hh(a, b, c, d, x[i + 9], 4, -640364487);\n\t\td = hh(d, a, b, c, x[i + 12], 11, -421815835);\n\t\tc = hh(c, d, a, b, x[i + 15], 16, 530742520);\n\t\tb = hh(b, c, d, a, x[i + 2], 23, -995338651);\n\t\ta = ii(a, b, c, d, x[i + 0], 6, -198630844);\n\t\td = ii(d, a, b, c, x[i + 7], 10, 1126891415);\n\t\tc = ii(c, d, a, b, x[i + 14], 15, -1416354905);\n\t\tb = ii(b, c, d, a, x[i + 5], 21, -57434055);\n\t\ta = ii(a, b, c, d, x[i + 12], 6, 1700485571);\n\t\td = ii(d, a, b, c, x[i + 3], 10, -1894986606);\n\t\tc = ii(c, d, a, b, x[i + 10], 15, -1051523);\n\t\tb = ii(b, c, d, a, x[i + 1], 21, -2054922799);\n\t\ta = ii(a, b, c, d, x[i + 8], 6, 1873313359);\n\t\td = ii(d, a, b, c, x[i + 15], 10, -30611744);\n\t\tc = ii(c, d, a, b, x[i + 6], 15, -1560198380);\n\t\tb = ii(b, c, d, a, x[i + 13], 21, 1309151649);\n\t\ta = ii(a, b, c, d, x[i + 4], 6, -145523070);\n\t\td = ii(d, a, b, c, x[i + 11], 10, -1120210379);\n\t\tc = ii(c, d, a, b, x[i + 2], 15, 718787259);\n\t\tb = ii(b, c, d, a, x[i + 9], 21, -343485551);\n\t\ta = ad(a, olda);\n\t\tb = ad(b, oldb);\n\t\tc = ad(c, oldc);\n\t\td = ad(d, oldd);\n\t}\n\treturn rh(a) + rh(b) + rh(c) + rh(d);\n}\n\nexport function sameDay(d1: Date, d2: Date) {\n\treturn (\n\t\td1.getFullYear() === d2.getFullYear() &&\n\t\td1.getMonth() === d2.getMonth() &&\n\t\td1.getDate() === d2.getDate()\n\t);\n}\n\n// returns a file name from the content-disposition header of a download response\n// https://stackoverflow.com/a/67994693/12424975\nexport function getFileNameFromResponseHeader(disposition: string): string {\n\tconst utf8FilenameRegex = /filename\\*=UTF-8''([\\w%\\-.]+)(?:; ?|$)/i;\n\tconst asciiFilenameRegex = /^filename=([\"']?)(.*?[^\\\\])\\1(?:; ?|$)/i;\n\n\tlet fileName = \"filename\";\n\tif (utf8FilenameRegex.test(disposition)) {\n\t\tfileName = decodeURIComponent(utf8FilenameRegex.exec(disposition)?.[1] ?? \"filename\");\n\t} else {\n\t\t// prevent ReDos attacks by anchoring the ascii regex to string start and\n\t\t// slicing off everything before 'filename='\n\t\tconst filenameStart = disposition.toLowerCase().indexOf(\"filename=\");\n\t\tif (filenameStart >= 0) {\n\t\t\tconst partialDisposition = disposition.slice(filenameStart);\n\t\t\tconst matches = asciiFilenameRegex.exec(partialDisposition);\n\t\t\tif (matches != null && matches[2]) {\n\t\t\t\tfileName = matches[2];\n\t\t\t}\n\t\t}\n\t}\n\treturn fileName;\n}\n\nexport function highlightMatchingText(search: string, text: string) {\n\tconst words = text.split(/\\s/);\n\treturn words\n\t\t.map(w => {\n\t\t\tfor (const searchWord of search.split(/\\s/)) {\n\t\t\t\tconst matchIndex = w.toLowerCase().indexOf(searchWord.toLowerCase());\n\t\t\t\tif (matchIndex !== -1) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\tw.substring(0, matchIndex) +\n\t\t\t\t\t\t`${w.substring(\n\t\t\t\t\t\t\tmatchIndex,\n\t\t\t\t\t\t\tmatchIndex + searchWord.length,\n\t\t\t\t\t\t)}` +\n\t\t\t\t\t\tw.substring(matchIndex + searchWord.length, w.length)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn w;\n\t\t})\n\t\t.join(\" \");\n}\n\nexport function isValidEmailAddress(text: string) {\n\t// TODO improve to match django logic for validating an email\n\tconst input = document.createElement(\"input\");\n\tinput.type = \"email\";\n\tinput.required = true;\n\tinput.value = text;\n\treturn typeof input.checkValidity === \"function\"\n\t\t? input.checkValidity()\n\t\t: /\\S+@\\S+\\.\\S+/.test(text);\n}\n","import { getTranslatedString as _ } from \"@/i18n\";\nimport { Event } from \"@/models\";\nimport { getExamPermalink, getFormattedTimestamp, sameDay } from \"@/utils\";\n\nexport const examPublishedAnnouncementTemplate = (exam: Event) => `\n

${_(\"announcements.exam_published_1\")} ${exam.name}. ${\n\t!sameDay(new Date(exam.begin_timestamp as string), new Date())\n\t\t? _(\"announcements.exam_published_2\") + \" \"\n\t\t: \"\"\n}${\n\t!sameDay(new Date(exam.begin_timestamp as string), new Date())\n\t\t? getFormattedTimestamp(exam.begin_timestamp ?? \"\") + \". \"\n\t\t: \"\"\n}${_(\"announcements.exam_published_3\")} ${getExamPermalink(exam)}.

\n`;\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./MainTeacher.vue?vue&type=style&index=0&id=6896b1ae&lang=css\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAEmElEQVR4Ae1YTWhcVRT+7n13ZvKcSZM0aWzSphoTRFCri1qDij8Ll8VGcCFaEHShezVLpZsa3LtyVyk4WrPQjYoLf5DqxlprlRqCLTFtpOZHm07n/R2Hy8zlEt7Ju883UIr54C7Oue+8+53fd2ewjZsb29iGQBtEJDa+nnopCa+8oaTc09Z2NgFbBoHfd7cjdh+p9lGSXPKkPwPguHHg6mdtrv7uF0Xz0rubjW6oI4yeVP9zAE4AgCKE0MrG8puesEnz5G80kmBttuOAWP+krJWqMkg26Ubo5YoqbdJ3MUN63y/HtmzKX3kiPbIPrR0ypKw0W6+mfHpbdnwWMHosDNeRBgkGPPni4MnnhwLA17Y5gD+8e+Cj7+gATzytRFz3ioAZJowDRLwp5yADvqa7D+XgM1867tHP+2zxHiC+oRkL94bvZqaUy6TgyfOZKTbB3B1jMpCfvI2yV8LM/mkcvu1BLc/9fgpvnfkIzTgqNsFSbgMKyG7GnKWlyT8/8ZiRj0w+rs8+eroOG91odAkDslfqGHXsCxN5G9PjU47Rz1dyEhkgZhop4WGsNoS91UEo6eWucyW1Pfa1lidkdhUYpx2/A7RFUwsIHBieQFX1aHm0Nojvls8DRJ2a12Vj4+TCt4aQEAIHhydRLflt+504dfk8iJL8gQAPtkl7S74m30FN9bR0Pfg7aGiCs2fmtNX07VOG/OxPc+igr3SLIU9E6FU+dpR9rDc3mAlWZAqlvLCZBO190dHrCWP24xBHf6jrldYrjaSp9cKyb0SBQ/RzTiGu4a5HIc6t/oHJvt1a/m1tqaUL7GP4Rtf2Ec6tLMK2D+Iw89x8GSDaMgZLG3/pZT/nqzIOjR3AE6P34p6BfdhV6dP6P5vrOLt6AV8sncXHF7/HtSjA4tUremVNHrLCkb8HGNOKVOivVOGrCkgQGmGAh4fvwsx9T2NnuYbNGPEH9Hpy9H68vv8wjp3+EN8s/6Ltk7b9yvV/ECSRQ+0XmEKe9HDnjhGMVAf0JOng0VvvxrPjj8AB2sG3D76A9xa+wpeXfzb6hJJWRlfw69oi4jQuDKTjjwy9WmWhR54hT3rpssmLp8YegE1RCoG9tUHsHxp3iD6ZpQBy7oEhv5YWDj1G3WFGsTnXprerpzeVcnd6gES6vjisdwmQ1dTuPYDsuvt88cfU9E588Era3YnJJvEXOf77w7JS7hEi99/OLuSZM5xuqZZOgfGOClyz05+hLbNDvHNFesD9w+YSdXfy7D7/rwQRO4XyEncqGUpSyIuM86lQD7hnh406AYiT1gJEm7ywtrROth2RcPjPFVt8B/5TSWU39Pwz7yALd7z/MkgK96tE0T4A8jd1nplHRiD32+j8cB2Z4LPAyuGndYTXBDSY5pzvT1CqEnMG40CUiCUlaTQ/YSfixrZUBYQHRA12NiEOBKQHeJUk9ZkkwgXjQEvQEMqbAYXHkQsOGUhpQNVDkJ5AHGiZIUmAALyy0RvEMV5FG2L1pH1O7xHpxceEpD3FM2B0rCNJLIAYW5aTUAmENOqLaNJrAOpmf+0EbmpIYNuBbQf+1w78C51cVxPfMDmbAAAAAElFTkSuQmCC\"","module.exports = __webpack_public_path__ + \"img/undraw_6.2e748555.svg\";","import { openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderSlot as _renderSlot, resolveComponent as _resolveComponent, resolveDirective as _resolveDirective, withCtx as _withCtx, createBlock as _createBlock, withDirectives as _withDirectives, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"tooltip\"\n}\nconst _hoisted_2 = {\n key: 0,\n class: \"text-xl material-icons\"\n}\nconst _hoisted_3 = {\n key: 1,\n class: \"flex items-center max-w-full px-2 py-1 border border-gray-300 rounded-md shadow-inner w-max\"\n}\nconst _hoisted_4 = [\"title\"]\nconst _hoisted_5 = { class: \"flex ml-2 border-l\" }\nconst _hoisted_6 = { class: \"h-full -mb-0.5 tooltip\" }\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-base material-icons-outlined\" }, \" content_copy \", -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _directive_clipboard = _resolveDirective(\"clipboard\")!\n\n return (_ctx.iconOnly)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _withDirectives((_openBlock(), _createBlock(_component_Btn, {\n tooltip: _ctx.showFeedback ? '' : _ctx.tooltip,\n class: \"copy-btn\",\n title: _ctx.title || _ctx.$t('misc.copy'),\n outline: true,\n size: 'sm',\n variant: 'icon'\n }, {\n default: _withCtx(() => [\n (!_ctx.$slots.default)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_2, \" share \"))\n : _createCommentVNode(\"\", true),\n _renderSlot(_ctx.$slots, \"default\")\n ]),\n _: 3\n }, 8, [\"tooltip\", \"title\"])), [\n [_directive_clipboard, _ctx.value, \"copy\"],\n [_directive_clipboard, _ctx.onCopy, \"success\"]\n ]),\n (_ctx.showFeedback)\n ? (_openBlock(), _createElementBlock(\"span\", {\n key: 0,\n class: _normalizeClass([\"tooltip-text tooltip-bottom\", { 'tooltip-text-force': _ctx.showFeedback }])\n }, _toDisplayString(_ctx.confirmationMessage || _ctx.$t(\"misc.copied\")), 3))\n : _createCommentVNode(\"\", true)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n title: _ctx.$t('misc.copy'),\n class: \"cursor-pointer hover:bg-light px-1 py-0.5 rounded-sm overflow-x-auto\"\n }, [\n _createTextVNode(_toDisplayString(_ctx.value), 1)\n ], 8, _hoisted_4)), [\n [_directive_clipboard, _ctx.value, \"copy\"],\n [_directive_clipboard, _ctx.onCopy, \"success\"]\n ]),\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"div\", _hoisted_6, [\n _withDirectives((_openBlock(), _createBlock(_component_Btn, {\n title: _ctx.$t('misc.copy'),\n class: \"h-full px-2 py-2 -mt-1 -mb-1 -mr-2 rounded-tr-md rounded-br-md\",\n variant: 'transparent'\n }, {\n default: _withCtx(() => [\n _hoisted_7\n ]),\n _: 1\n }, 8, [\"title\"])), [\n [_directive_clipboard, _ctx.value, \"copy\"],\n [_directive_clipboard, _ctx.onCopy, \"success\"]\n ]),\n (_ctx.showFeedback)\n ? (_openBlock(), _createElementBlock(\"span\", {\n key: 0,\n class: _normalizeClass([\"tooltip-text tooltip-bottom\", { 'tooltip-text-force': _ctx.showFeedback }])\n }, _toDisplayString(_ctx.$t(\"misc.copied\")), 3))\n : _createCommentVNode(\"\", true)\n ])\n ])\n ]))\n}","\nimport { logAnalyticsEvent } from \"@/utils\";\nimport { defineComponent } from \"@vue/runtime-core\";\nimport Btn from \"./Btn.vue\";\n\nexport default defineComponent({\n\tcomponents: { Btn },\n\tname: \"CopyToClipboard\",\n\tprops: {\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\ticonOnly: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\tdefault: \"\",\n\t\t},\n\t\tconfirmationMessage: {\n\t\t\ttype: String,\n\t\t\tdefault: \"\",\n\t\t},\n\t\ttooltip: {\n\t\t\ttype: String,\n\t\t\tdefault: \"\",\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tshowFeedback: false,\n\t\t};\n\t},\n\tmethods: {\n\t\tonCopy() {\n\t\t\tthis.showFeedback = true;\n\t\t\tsetTimeout(() => (this.showFeedback = false), 2000);\n\t\t\tlogAnalyticsEvent(\"copyToClipboard\", { value: this.value });\n\t\t},\n\t},\n});\n","import { render } from \"./CopyToClipboard.vue?vue&type=template&id=3c0563c2&ts=true\"\nimport script from \"./CopyToClipboard.vue?vue&type=script&lang=ts\"\nexport * from \"./CopyToClipboard.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Dialog.vue?vue&type=style&index=0&id=f0ab2976&lang=css\"","import { resolveComponent as _resolveComponent, createVNode as _createVNode, withKeys as _withKeys, createElementVNode as _createElementVNode, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex items-center w-full mt-4 space-x-2\" }\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons\" }, \"send\", -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Avatar = _resolveComponent(\"Avatar\")!\n const _component_TextInput = _resolveComponent(\"TextInput\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Avatar, {\n class: \"\",\n user: _ctx.metaStore.user\n }, null, 8, [\"user\"]),\n _createVNode(_component_TextInput, {\n onKeyup: _cache[0] || (_cache[0] = _withKeys(($event: any) => (_ctx.onSend()), [\"enter\"])),\n class: \"w-full\",\n modelValue: _ctx.draft,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((_ctx.draft) = $event)),\n placeholder: _ctx.$t('exercise_solution.add_comment')\n }, null, 8, [\"modelValue\", \"placeholder\"]),\n _createVNode(_component_Btn, {\n disabled: !_ctx.isValidMessage,\n loading: _ctx.posting,\n variant: 'secondary',\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.onSend()))\n }, {\n default: _withCtx(() => [\n _hoisted_2\n ]),\n _: 1\n }, 8, [\"disabled\", \"loading\"])\n ]))\n}","\nimport { useMetaStore } from \"@/stores/metaStore\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport { mapStores } from \"pinia\";\nimport Avatar from \"../ui/Avatar.vue\";\nimport Btn from \"../ui/Btn.vue\";\nimport TextInput from \"../ui/TextInput.vue\";\nexport default defineComponent({\n\tname: \"MessageEditor\",\n\temits: {\n\t\tsendMessage({\n\t\t\tmessage,\n\t\t\tresolveFn,\n\t\t\trejectFn,\n\t\t}: {\n\t\t\tmessage: string;\n\t\t\tresolveFn: (v: unknown) => void;\n\t\t\trejectFn: (v: unknown) => void;\n\t\t}) {\n\t\t\treturn true;\n\t\t},\n\t},\n\tprops: {\n\t\tposting: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tdraft: \"\",\n\t\t};\n\t},\n\tmethods: {\n\t\tasync onSend() {\n\t\t\tif (!this.isValidMessage) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait new Promise((resolve, reject) => {\n\t\t\t\tthis.$emit(\"sendMessage\", {\n\t\t\t\t\tmessage: this.draft,\n\t\t\t\t\tresolveFn: resolve,\n\t\t\t\t\trejectFn: reject,\n\t\t\t\t});\n\t\t\t});\n\t\t\tthis.draft = \"\";\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMetaStore),\n\t\tisValidMessage() {\n\t\t\treturn this.draft.trim().length > 0;\n\t\t},\n\t},\n\tcomponents: { Avatar, TextInput, Btn },\n});\n","import { render } from \"./MessageEditor.vue?vue&type=template&id=7a73eff8&ts=true\"\nimport script from \"./MessageEditor.vue?vue&type=script&lang=ts\"\nexport * from \"./MessageEditor.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../node_modules/vue-loader-v16/dist/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--1-0!../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./App.vue?vue&type=style&index=0&id=456359d0&lang=css\"","module.exports = __webpack_public_path__ + \"img/hero-bg.5c3504df.png\";","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, normalizeStyle as _normalizeStyle, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"mx-auto my-auto font-semibold\" }\nconst _hoisted_2 = [\"src\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_ctx.showFallbackavatar || !_ctx.user.avatar_url)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"flex rounded-full bg-primary-light text-primary bg-opacity-30\",\n style: _normalizeStyle(_ctx.avatarSize)\n }, [\n _createElementVNode(\"p\", _hoisted_1, _toDisplayString(_ctx.fullName[0].toLocaleUpperCase()), 1)\n ], 4))\n : (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n style: _normalizeStyle(_ctx.avatarSize),\n class: \"flex rounded-full overflow-hidden\"\n }, [\n _createElementVNode(\"img\", {\n referrerpolicy: \"no-referrer\",\n onError: _cache[0] || (_cache[0] = ($event: any) => (_ctx.showFallbackavatar = true)),\n src: _ctx.user.avatar_url\n }, null, 40, _hoisted_2)\n ], 4))\n}","\nimport { User } from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nexport default defineComponent({\n\tname: \"Avatar\",\n\tprops: {\n\t\tuser: {\n\t\t\ttype: Object as PropType,\n\t\t\tdefault: () => ({}),\n\t\t},\n\t\tsize: {\n\t\t\ttype: String as PropType<\"sm\" | \"md\" | \"lg\" | \"xl\">,\n\t\t\tdefault: \"md\",\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tshowFallbackavatar: false,\n\t\t};\n\t},\n\tmethods: {},\n\tcomputed: {\n\t\tfullName(): string {\n\t\t\treturn this.user?.full_name || this.user?.email || \"A\";\n\t\t},\n\t\tavatarSize() {\n\t\t\tconst size = this.size === \"md\" ? \"2rem\" : this.size === \"lg\" ? \"2.4rem\" : \"3.5rem\";\n\t\t\treturn `min-width: ${size} !important;\n\t\t\tmin-height: ${size} !important;\n\t\t\tmax-width: ${size} !important;\n\t\t\tmax-height: ${size} !important`;\n\t\t},\n\t},\n});\n","import { render } from \"./Avatar.vue?vue&type=template&id=1d0e53f0&ts=true\"\nimport script from \"./Avatar.vue?vue&type=script&lang=ts\"\nexport * from \"./Avatar.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import {\n\tAnnouncementNodeState,\n\tCourseTreeNode,\n\tLessonNodeState,\n\tPollNodeState,\n} from \"@/models\";\nimport { useMainStore } from \"@/stores/mainStore\";\n\nexport const nodeProps = {\n\tcanEdit: {\n\t\ttype: Boolean,\n\t\trequired: true as const,\n\t},\n\tisDraggable: {\n\t\ttype: Boolean,\n\t\trequired: true as const,\n\t},\n\tloadingComments: {\n\t\ttype: Boolean,\n\t\tdefault: false as const,\n\t},\n\tloadingChildren: {\n\t\ttype: Boolean,\n\t\tdefault: false as const,\n\t},\n};\n\nexport const nodeEmits = {\n\teditNode(node: CourseTreeNode) {\n\t\treturn true;\n\t},\n\tdeleteNode(node: CourseTreeNode) {\n\t\treturn true;\n\t},\n\tloadChildren({\n\t\tnode,\n\t\tfromFirstPage,\n\t\tresolveFn,\n\t}: {\n\t\tnode: CourseTreeNode;\n\t\tfromFirstPage: boolean;\n\t\tresolveFn?: (moreResults: boolean) => void;\n\t\trejectFn?: (error: any) => void;\n\t}) {\n\t\treturn true;\n\t},\n\tloadComments(node: CourseTreeNode) {\n\t\treturn true;\n\t},\n\tviewerClose() {\n\t\treturn true;\n\t},\n};\n\nexport const nodeEditorProps = {\n\tblockingSaving: {\n\t\ttype: Boolean,\n\t\tdefault: false as const,\n\t},\n\tisExistingNode: {\n\t\t// whether the editor is being used to create a new node (false)\n\t\t// or to update an existing one (true)\n\t\ttype: Boolean,\n\t\trequired: true as const,\n\t},\n\tsaving: {\n\t\ttype: Boolean,\n\t\tdefault: false as const,\n\t},\n\tsavingError: {\n\t\ttype: Boolean,\n\t\tdefault: false as const,\n\t},\n\tshowAutoSaveIndicator: {\n\t\ttype: Boolean,\n\t\trequired: true as const,\n\t},\n\tuploadProgress: {\n\t\ttype: Number,\n\t\trequired: false as const,\n\t},\n};\n\nexport interface NodeEditorStateUpdatePayload {\n\tnewState: LessonNodeState | AnnouncementNodeState | PollNodeState;\n\tparams: {\n\t\tfireIntegrationEvent?: boolean;\n\t};\n}\n\nexport const nodeEditorEmits = {\n\tpatchNode({\n\t\tkey,\n\t\tvalue,\n\t\tsave,\n\t}: {\n\t\tkey: K;\n\t\tvalue: N[K];\n\t\tsave?: boolean;\n\t}) {\n\t\treturn true;\n\t},\n\tupdateState({ newState, params }: NodeEditorStateUpdatePayload) {\n\t\treturn true;\n\t},\n\tdeleteNode(node: CourseTreeNode) {\n\t\treturn true;\n\t},\n\tblur() {\n\t\treturn true;\n\t},\n\tsave() {\n\t\treturn true;\n\t},\n\tcloseEditor() {\n\t\treturn true;\n\t},\n};\n\n/**\n * Handles reordering of a node. It is called when a node is\n * dropped after having been dragged.\n */\nexport async function onChangeNodePosition(\n\tcourseId: string,\n\tnodeList: CourseTreeNode[],\n\toldIndex: number,\n\tnewIndex: number,\n) {\n\tif (oldIndex === newIndex) {\n\t\t// node didn't change position\n\t\treturn;\n\t}\n\t// no updates have been fired yet, so to retrieve the node that was moved\n\t// it's sufficient to index the list of nodes using its old position\n\tconst movedNode = nodeList[oldIndex];\n\n\t// to fire the update request, two parameters are needed: a target arguments are dictated\n\t// and the position relative to the target. the meaning of these two by django-mptt:\n\t// https://django-mptt.readthedocs.io/en/stable/mptt.models.html#mptt.models.TreeManager.move_node\n\tlet moveArgs: {\n\t\ttarget: string | null;\n\t\tposition: \"first-child\" | \"last-child\" | \"left\" | \"right\";\n\t};\n\n\tif (newIndex === 0) {\n\t\t// node moved to the top of the list: it's the first child of its parent now\n\t\tmoveArgs = { target: movedNode.parent_id, position: \"first-child\" };\n\t} else if (newIndex === nodeList.length - 1) {\n\t\t// node moved to the end of the list: it's the last child of its parent now\n\t\tmoveArgs = { target: movedNode.parent_id, position: \"last-child\" };\n\t} else if (newIndex < oldIndex) {\n\t\t// node moved to the left: it's now the left sibling of the node\n\t\t// that was at `newIndex` before the node was moved\n\t\tconst newRightSibling = nodeList[newIndex];\n\t\tmoveArgs = { target: newRightSibling.id, position: \"left\" };\n\t} else {\n\t\t// node moved to the right: it's now the right siblin of the node\n\t\t// that was at `newIndex` before the node was moved\n\t\tconst newRightSibling = nodeList[newIndex];\n\t\tmoveArgs = { target: newRightSibling.id, position: \"right\" };\n\t}\n\n\t// fire move request\n\tawait useMainStore().moveCourseTreeNode({\n\t\tcourseId,\n\t\tnode: movedNode,\n\t\ttargetId: moveArgs.target as string,\n\t\tposition: moveArgs.position,\n\t});\n}\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Spinner.vue?vue&type=style&index=0&id=6cf18e44&lang=css\"","import { EventParticipation, ExerciseSolution } from \"@/models\";\nimport { FieldList } from \"./autoSave\";\nimport { SelectableOption } from \"./interfaces\";\nimport {\n\tEvent,\n\tEventParticipationSlot,\n\tEventParticipationState,\n\tExercise,\n\tExerciseChoice,\n\tExerciseState,\n\tExerciseTestCase,\n\tExerciseTestCaseType,\n\tExerciseType,\n\tParticipationAssessmentProgress,\n} from \"./models\";\nimport { icons as exerciseTypesIcons } from \"@/assets/exerciseTypesIcons\";\nimport { icons as exerciseStatesIcons } from \"@/assets/exerciseStatesIcons\";\nimport { icons as testCaseTypeIcons } from \"@/assets/exerciseTestCaseTypeIcons\";\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport { ColDef } from \"ag-grid-community\";\nimport { icons as assessmentStateIcons } from \"@/assets/assessmentStateIcons\";\nimport { icons as participationStateIcons } from \"@/assets/participationStateIcons\";\nimport { isDemoMode } from \"./utils\";\n\nexport const TEST_CASE_AUTO_SAVE_DEBOUNCE_TIME_MS = 3000;\nexport const TEST_CASE_AUTO_SAVE_DEBOUNCED_FIELDS: FieldList = [\n\t\"code\",\n\t\"text\",\n\t\"stdin\",\n\t\"expected_stdout\",\n];\n\nexport const EVENT_AUTO_SAVE_DEBOUNCE_TIME_MS = 3000;\nexport const EVENT_AUTO_SAVE_DEBOUNCED_FIELDS: FieldList = [\n\t\"name\",\n\t\"instructions\",\n\t\"time_limit_seconds\",\n\t\"time_limit_exceptions\",\n];\n\nexport const EXERCISE_AUTO_SAVE_DEBOUNCE_TIME_MS = 3000;\nexport const EXERCISE_AUTO_SAVE_DEBOUNCED_FIELDS: FieldList = [\"label\", \"text\"];\n\nexport const EXERCISE_SOLUTION_AUTO_SAVE_DEBOUNCE_TIME_MS = 3000;\nexport const EXERCISE_SOLUTION_AUTO_SAVE_DEBOUNCE_FIELDS: FieldList = [\n\t\"content\",\n];\n\nexport const EXERCISE_CHOICE_AUTO_SAVE_DEBOUNCE_TIME_MS = 3000;\nexport const EXERCISE_CHOICE_AUTO_SAVE_DEBOUNCED_FIELDS: FieldList = [\n\t\"text\",\n\t\"correctness\",\n];\n\nexport const EVENT_PARTICIPATION_SLOT_DEBOUNCE_TIME_MS = 10000;\nexport const EVENT_PARTICIPATION_SLOT_DEBOUNCED_FIELDS: FieldList =\n\t[\"answer_text\"];\n\nexport const exerciseTypeOptions: SelectableOption[] = (\n\tObject.keys(ExerciseType) as unknown[] as ExerciseType[]\n)\n\t.filter((key: string | number) => parseInt(key as string) == key)\n\t.map(key => ({\n\t\ticons: exerciseTypesIcons[key],\n\t\tvalue: parseInt(String(key)),\n\t\tcontent: _(\"exercise_types.\" + key),\n\t}));\n\nexport const exerciseStateOptions: SelectableOption[] = (\n\tObject.keys(ExerciseState) as unknown[] as ExerciseState[]\n)\n\t.filter((key: string | number) => parseInt(key as string) == key)\n\t.map(key => ({\n\t\ticons: exerciseStatesIcons[key],\n\t\tvalue: parseInt(String(key)),\n\t\tcontent: _(\"exercise_states.\" + key),\n\t\tdescription: _(\"exercise_states_descriptions.\" + key),\n\t}));\n\nexport const testcaseTypeOptions: SelectableOption[] = (\n\tObject.keys(ExerciseTestCaseType) as unknown[] as ExerciseTestCaseType[]\n)\n\t.filter((key: string | number) => parseInt(key as string) == key)\n\t.map(key => ({\n\t\ticons: testCaseTypeIcons[key],\n\t\tvalue: parseInt(String(key)),\n\t\tcontent: _(\"testcase_types.\" + key),\n\t\t//description: _(\"exercise_states_descriptions.\" + key),\n\t}));\n\nexport enum ProgrammingExerciseTabs {\n\tTEXT,\n\tEDITOR,\n\tTEST_CASES,\n\tEXECUTION_RESULTS,\n}\n\nexport const examInsightsPageTourSteps = [\n\t{\n\t\ttarget: \"#insights-btn\",\n\t\theader: {\n\t\t\ttitle: _(\"tour.exam_insights_header\"),\n\t\t},\n\t\tcontent: _(\"tour.exam_insights_content\"),\n\t\tparams: {\n\t\t\tplacement: \"bottom\",\n\t\t},\n\t},\n];\n\nexport const newSidebarHelpCenterTourSteps = [\n\t{\n\t\ttarget: \"#toggle-sidebar\",\n\t\theader: {\n\t\t\ttitle: _(\"tour.new_sidebar_header\"),\n\t\t},\n\t\tcontent: _(\"tour.new_sidebar_content\"),\n\t},\n\t{\n\t\ttarget: \"#help-center\",\n\t\theader: {\n\t\t\ttitle: _(\"tour.help_center_header\"),\n\t\t},\n\t\tcontent: _(\"tour.help_center_content\"),\n\t},\n];\n\nexport const demoLoginTourSteps = [\n\t{\n\t\ttarget: \"#login-btn\",\n\t\theader: {\n\t\t\ttitle: _(\"tour.demo_welcome_header\"),\n\t\t},\n\t\tcontent: _(\"tour.demo_welcome_content\"),\n\t\tparams: { placement: \"top\" },\n\t},\n];\n\nexport const demoCourseTourSteps = [\n\t{\n\t\ttarget: \"#course-0\",\n\t\theader: {\n\t\t\ttitle: _(\"tour.demo_course_header\"),\n\t\t},\n\t\tcontent: _(\"tour.demo_course_content\"),\n\t\tparams: { placement: \"top\" },\n\t},\n];\n\nexport const newMaterialModuleTourSteps = [\n\t{\n\t\t// material\n\t\ttarget: \"#sidebar-option-3\",\n\t\theader: {\n\t\t\ttitle: _(\"tour.new_material_header\"),\n\t\t},\n\t\tcontent: _(\"tour.new_material_content\"),\n\t\tparams: {\n\t\t\tplacement: \"right\",\n\t\t},\n\t},\n];\n\nexport const teacherTourSteps = [\n\t{\n\t\t// exercises\n\t\ttarget: \"#sidebar-option-2\",\n\t\theader: {\n\t\t\ttitle: _(\"tour.add_exercises_header\"),\n\t\t},\n\t\tcontent: _(\"tour.add_exercises_content\"),\n\t\tparams: {\n\t\t\tplacement: \"right\",\n\t\t},\n\t},\n\t{\n\t\t// exams\n\t\ttarget: \"#sidebar-option-1\",\n\t\theader: {\n\t\t\ttitle: _(\"tour.add_exams_header\"),\n\t\t},\n\t\tcontent: _(\"tour.add_exams_content\"),\n\t\tparams: {\n\t\t\tplacement: \"right\",\n\t\t},\n\t},\n\t{\n\t\t// material\n\t\ttarget: \"#sidebar-option-3\",\n\t\theader: {\n\t\t\ttitle: _(\"tour.material_header\"),\n\t\t},\n\t\tcontent: _(\"tour.material_content\"),\n\t\tparams: {\n\t\t\tplacement: \"right\",\n\t\t},\n\t},\n\t{\n\t\t// permissions\n\t\ttarget: \"#sidebar-option-6\",\n\t\theader: {\n\t\t\ttitle: _(\"tour.permissions_header\"),\n\t\t},\n\t\tcontent: _(\"tour.permissions_content\"),\n\t\tparams: {\n\t\t\tplacement: \"right\",\n\t\t},\n\t},\n\t{\n\t\t// integrations\n\t\ttarget: \"#sidebar-option-7\",\n\t\theader: {\n\t\t\ttitle: _(\"tour.integrations_header\"),\n\t\t},\n\t\tcontent: _(\"tour.integrations_content\"),\n\t\tparams: {\n\t\t\tplacement: \"right\",\n\t\t},\n\t},\n];\n\nexport const demoStudentTourSteps = [\n\t{\n\t\ttarget: \"body\",\n\t\theader: {\n\t\t\ttitle: _(\"tour.demo_student_header\"),\n\t\t},\n\t\tcontent: _(\"tour.demo_student_content\"),\n\t\t// params: {\n\t\t// \tplacement: \"bottom\",\n\t\t// },\n\t},\n\t{\n\t\ttarget: \"#create-practice-btn\",\n\t\theader: {\n\t\t\ttitle: _(\"tour.demo_practice_header\"),\n\t\t},\n\t\tcontent: _(\"tour.demo_practice_content\"),\n\t\tparams: {\n\t\t\tplacement: \"bottom\",\n\t\t},\n\t},\n\t{\n\t\ttarget: \".v-sidebar-menu\", //\".vsm--item:nth-child(4) .vsm--link .vsm--title span\",\n\t\theader: {\n\t\t\ttitle: _(\"tour.demo_popular_exercises_header\"),\n\t\t},\n\t\tcontent: _(\"tour.demo_popular_exercises_content\"),\n\t\tparams: {\n\t\t\tplacement: \"right\",\n\t\t},\n\t},\n\t{\n\t\ttarget: \".v-sidebar-menu\", //\".vsm--item:nth-child(5)\",\n\t\theader: {\n\t\t\ttitle: _(\"tour.demo_leaderboard_header\"),\n\t\t},\n\t\tcontent: _(\"tour.demo_leaderboard_content\"),\n\t\tparams: {\n\t\t\tplacement: \"right\",\n\t\t},\n\t},\n];\n\nexport const demoTeacherTourSteps = [\n\t{\n\t\t// exercises\n\t\ttarget: \"#sidebar-option-2\",\n\t\theader: {\n\t\t\ttitle: _(\"tour.demo_exercises_header\"),\n\t\t},\n\t\tcontent: _(\"tour.demo_exercises_content\"),\n\t\tparams: {\n\t\t\tplacement: \"right\",\n\t\t},\n\t},\n\t{\n\t\t// exams\n\t\ttarget: \"#sidebar-option-1\",\n\t\theader: {\n\t\t\ttitle: _(\"tour.demo_exams_header\"),\n\t\t},\n\t\tcontent: _(\"tour.demo_exams_content\"),\n\t\tparams: {\n\t\t\tplacement: \"right\",\n\t\t},\n\t},\n\t{\n\t\t// solutions\n\t\ttarget: \"#sidebar-option-4\",\n\t\theader: {\n\t\t\ttitle: _(\"tour.demo_solutions_header\"),\n\t\t},\n\t\tcontent: _(\"tour.demo_solutions_content\"),\n\t\tparams: {\n\t\t\tplacement: \"right\",\n\t\t},\n\t},\n\t{\n\t\t// permissions\n\t\ttarget: \"#sidebar-option-4\",\n\t\theader: {\n\t\t\ttitle: _(\"tour.demo_permissions_header\"),\n\t\t},\n\t\tcontent: _(\"tour.demo_permissions_content\"),\n\t\tparams: {\n\t\t\tplacement: \"right\",\n\t\t},\n\t},\n\t{\n\t\t// exams\n\t\ttarget: \"#help-center\",\n\t\theader: {\n\t\t\ttitle: _(\"tour.demo_help_center_header\"),\n\t\t},\n\t\tcontent: _(\"tour.demo_help_center_content\"),\n\t\tparams: {\n\t\t\tplacement: \"bottom\",\n\t\t},\n\t},\n];\n\nexport const tourOptions = {\n\thighlight: true,\n\tlabels: {\n\t\tbuttonSkip: _(\"tour.skip\"),\n\t\tbuttonPrevious: _(\"tour.previous\"),\n\t\tbuttonNext: _(\"tour.next\"),\n\t\tbuttonStop: _(\"tour.finish\"),\n\t},\n};\n\nexport const programmingExerciseTabsOptions: SelectableOption[] = [\n\t{\n\t\tvalue: ProgrammingExerciseTabs.TEXT,\n\t\tcontent: _(\"programming_exercise.tab_text\"),\n\t\ticons: [\"description-sm\"],\n\t},\n\t// {\n\t// \tvalue: ProgrammingExerciseTabs.EDITOR,\n\t// \tcontent: _(\"programming_exercise.tab_editor\"),\n\t// \ticons: [\"code-sm\"],\n\t// },\n\t{\n\t\tvalue: ProgrammingExerciseTabs.EXECUTION_RESULTS,\n\t\tcontent: _(\"programming_exercise.tab_execution_results\"),\n\t\ticons: [\"code-sm\"],\n\t},\n\t{\n\t\tvalue: ProgrammingExerciseTabs.TEST_CASES,\n\t\tcontent: _(\"programming_exercise.tab_testcases\"),\n\t\ticons: [\"integration_instructions-sm\"],\n\t},\n];\n\nexport const courseSelectionOptions: SelectableOption[] = [\n\t{ value: \"A\", content: \"Corso A\" },\n\t{ value: \"B\", content: \"Corso B\" },\n\t{ value: \"C\", content: \"Corso C\" },\n];\n\nexport const CLOZE_PLACEHOLDER_REGEX = new RegExp(\"\\\\[\\\\[([A-Za-z0-9]+)\\\\]\\\\]\", \"g\");\nexport const CLOZE_SEPARATOR = (id: string) => `[[${id}]]`;\n\n// returns the headers for the CourseInsights table\nexport const getCourseInsightsHeaders = (\n\texams: Event[],\n\texamsColors: Record,\n): ColDef[] => [\n\t{ field: \"id\", hide: true },\n\t{\n\t\tfield: \"student\",\n\t\theaderName: _(\"event_participation_headings.student\"),\n\t\t// filterParams: {\n\t\t// \tfilterOptions: [\"contains\"],\n\t\t// \tsuppressAndOrCondition: true,\n\t\t// },\n\t\t// filter: \"agTextColumnFilter\",\n\t\twidth: 450,\n\t\tresizable: true,\n\t\tcellRenderer: \"StudentRenderer\",\n\t\tpinned: \"left\",\n\t},\n\t{\n\t\tfield: \"scoreAverage\",\n\t\theaderName: _(\"course_insights.score_average\"),\n\t\t// filterParams: {\n\t\t// \tallowedCharPattern: \"\\\\d\\\\-\\\\,\", // note: ensure you escape as if you were creating a RegExp from a string\n\t\t// \tnumberParser: (text: string | null) => {\n\t\t// \t\treturn text == null ? null : parseFloat(text.replace(\",\", \".\"));\n\t\t// \t},\n\t\t// \tfilterOptions: [\n\t\t// \t\t\"equals\",\n\t\t// \t\t\"notEqual\",\n\t\t// \t\t\"lessThan\",\n\t\t// \t\t\"lessThanOrEqual\",\n\t\t// \t\t\"greaterThan\",\n\t\t// \t\t\"greaterThanOrEqual\",\n\t\t// \t],\n\t\t// \tsuppressAndOrCondition: true,\n\t\t// },\n\t\t// filter: \"agNumberColumnFilter\",\n\t\tpinned: \"left\",\n\t\twidth: 100,\n\t},\n\t...exams.map((e, i) => ({\n\t\t//autoHeight: true,\n\t\twrapText: true,\n\t\tfield: \"exam_\" + e.id,\n\t\theaderName:\n\t\t\te.name.trim().length > 0 ? e.name.trim() : _(\"event_preview.unnamed_event\"),\n\t\twidth: 200,\n\t\tresizable: false,\n\t\tfilterParams: {\n\t\t\tallowedCharPattern: \"\\\\d\\\\-\\\\,\", // note: ensure you escape as if you were creating a RegExp from a string\n\t\t\tnumberParser: (text: string | null) => {\n\t\t\t\treturn text == null ? null : parseFloat(text.replace(\",\", \".\"));\n\t\t\t},\n\t\t\tfilterOptions: [\n\t\t\t\t\"equals\",\n\t\t\t\t\"notEqual\",\n\t\t\t\t\"lessThan\",\n\t\t\t\t\"lessThanOrEqual\",\n\t\t\t\t\"greaterThan\",\n\t\t\t\t\"greaterThanOrEqual\",\n\t\t\t],\n\t\t\tsuppressAndOrCondition: true,\n\t\t},\n\t\tfilter: \"agNumberColumnFilter\",\n\t\tcellRenderer: \"CourseInsightsExamParticipationRenderer\",\n\t\theaderComponent: \"CourseInsightsExamHeaderRenderer\",\n\t\t// headerComponentParams: {\n\t\t// \ttemplate:\n\t\t// \t\t'
' +\n\t\t// \t\t' ' +\n\t\t// \t\t'
' +\n\t\t// \t\t' ' +\n\t\t// \t\t' ' +\n\t\t// \t\t' ' +\n\t\t// \t\t' ' +\n\t\t// \t\t` ` +\n\t\t// \t\t' ' +\n\t\t// \t\t' ' +\n\t\t// \t\t\"
\" +\n\t\t// \t\t\"
\",\n\t\t// },\n\t})),\n];\n\n// returns the headers for EventParticipationMonitor table\nexport const getEventParticipationMonitorHeaders = (\n\tresultsMode: boolean, // true if the event is over\n\teventParticipations: EventParticipation[],\n): ColDef[] => {\n\tif ((eventParticipations?.length ?? 0) === 0) {\n\t\treturn [];\n\t}\n\tconst ret = [\n\t\t{ field: \"id\", hide: true },\n\t\t{\n\t\t\tfield: \"email\",\n\t\t\theaderName: _(\"event_participation_headings.student\"),\n\t\t\tminWidth: 400,\n\t\t\tresizable: true,\n\t\t\tcellRenderer: \"EventParticipationEmailRenderer\",\n\t\t\tcheckboxSelection: true,\n\t\t\theaderCheckboxSelection: true,\n\t\t\theaderCheckboxSelectionFilteredOnly: true,\n\t\t\tpinned: \"left\",\n\t\t\tflex: 1,\n\t\t},\n\t\t{\n\t\t\tfield: \"mat\",\n\t\t\theaderName: _(\"event_participation_headings.mat\"),\n\t\t\tresizable: true,\n\t\t},\n\t\t...(isDemoMode()\n\t\t\t? []\n\t\t\t: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"course\",\n\t\t\t\t\t\theaderName: _(\"event_participation_headings.course\"),\n\t\t\t\t\t\tresizable: true,\n\t\t\t\t\t},\n\t\t\t ]),\n\t\t{ field: \"visibility\", hide: true },\n\t\t...(resultsMode\n\t\t\t? [\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"state\", // assessment progress\n\t\t\t\t\t\twidth: 90,\n\t\t\t\t\t\theaderName: _(\"event_participation_headings.state\"),\n\t\t\t\t\t\tcellRenderer: \"EventParticipationAssessmentStateRenderer\",\n\t\t\t\t\t},\n\t\t\t ]\n\t\t\t: []),\n\t\t...(!resultsMode\n\t\t\t? [\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"state\", // participation state (in progress / turned in)\n\t\t\t\t\t\twidth: 90,\n\t\t\t\t\t\theaderName: _(\"event_participation_headings.participation_state\"),\n\t\t\t\t\t\tcellRenderer: \"EventParticipationStateRenderer\",\n\t\t\t\t\t},\n\t\t\t ]\n\t\t\t: []),\n\t] as ColDef[];\n\tif (resultsMode) {\n\t\tret.push({\n\t\t\tfield: \"score\",\n\t\t\ttype: \"numericColumn\",\n\t\t\twidth: 60,\n\t\t\tresizable: true,\n\t\t\theaderName: _(\"event_participation_headings.grade\"),\n\t\t\tcellRenderer: \"EventParticipationScoreRenderer\",\n\t\t});\n\t}\n\n\t// TODO FIXME ! uses assumption that all participations have the same number of slots\n\t// add a heading for each slot\n\t(eventParticipations[0] as EventParticipation).slots.forEach(s =>\n\t\tret.push({\n\t\t\twidth: 90,\n\t\t\t...(resultsMode ? { type: \"numericColumn\" } : {}),\n\t\t\tfield: \"slot-\" + ((s.slot_number as number) + 1),\n\t\t\theaderName:\n\t\t\t\t_(\"event_participation_headings.exercise\") +\n\t\t\t\t\" \" +\n\t\t\t\t((s.slot_number as number) + 1),\n\t\t\tcellRenderer: resultsMode\n\t\t\t\t? \"EventParticipationSlotScoreRenderer\"\n\t\t\t\t: \"EventParticipationSlotCompletionRenderer\", //renderEventParticipationSlotCell(resultsMode),\n\t\t}),\n\t);\n\treturn ret;\n};\n\nexport const MAX_PRACTICE_EXERCISE_COUNT = 500;\n\nexport const sanitizeOptions = {\n\tallowedTags: [\n\t\t\"h1\",\n\t\t\"h2\",\n\t\t\"h3\",\n\t\t\"h4\",\n\t\t\"h5\",\n\t\t\"h6\",\n\t\t\"div\",\n\t\t\"hr\",\n\t\t\"li\",\n\t\t\"ol\",\n\t\t\"p\",\n\t\t\"pre\",\n\t\t\"ul\",\n\t\t\"a\",\n\t\t\"b\",\n\t\t\"img\",\n\t\t\"br\",\n\t\t\"cite\",\n\t\t\"code\",\n\t\t\"em\",\n\t\t\"i\",\n\t\t\"s\",\n\t\t\"samp\",\n\t\t\"small\",\n\t\t\"span\",\n\t\t\"strong\",\n\t\t\"sub\",\n\t\t\"sup\",\n\t\t\"time\",\n\t\t\"u\",\n\t\t\"caption\",\n\t\t\"col\",\n\t\t\"colgroup\",\n\t\t\"table\",\n\t\t\"tbody\",\n\t\t\"td\",\n\t\t\"tfoot\",\n\t\t\"th\",\n\t\t\"thead\",\n\t\t\"tr\",\n\t],\n\tdisallowedTagsMode: \"discard\",\n\tallowedAttributes: {\n\t\ta: [\"href\", \"name\", \"target\"],\n\t\timg: [\"src\", \"alt\", \"title\", \"width\", \"height\", \"data\"],\n\t},\n\t// Lots of these won't come up by default because we don't allow them\n\tselfClosing: [\"img\", \"br\", \"hr\", \"area\", \"base\", \"basefont\", \"input\", \"link\", \"meta\"],\n\t// URL schemes we permit\n\tallowedSchemes: [\"http\", \"https\", \"ftp\", \"mailto\", \"tel\", \"data\"],\n\tallowedSchemesByTag: {},\n\tallowedSchemesAppliedToAttributes: [\"href\", \"src\", \"cite\"],\n\tallowProtocolRelative: true,\n\tenforceHtmlBoundary: false,\n};\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./CourseListItem.vue?vue&type=style&index=0&id=2d28a811&lang=css\"","import { CoursePrivilege } from \"@/models\";\n\nexport const icons = {\n\t[CoursePrivilege.ACCESS_EXERCISES]: [\"visibility\"],\n\t[CoursePrivilege.ASSESS_PARTICIPATIONS]: [\"grading\"],\n\t[CoursePrivilege.MANAGE_EVENTS]: [\"edit\"],\n\t[CoursePrivilege.MANAGE_MATERIAL]: [\"book\"],\n\t[CoursePrivilege.MANAGE_EXERCISES]: [\"edit\"],\n\t[CoursePrivilege.UPDATE_COURSE]: [\"settings\"],\n\t[CoursePrivilege.MANAGE_EXERCISE_SOLUTIONS]: [\"grading\"],\n};\n","var map = {\n\t\"./announcements\": \"7de2\",\n\t\"./announcements.ts\": \"7de2\",\n\t\"./assessmentStateIcons\": \"d3bd\",\n\t\"./assessmentStateIcons.ts\": \"d3bd\",\n\t\"./classroom.png\": \"8796\",\n\t\"./classroom_sync.png\": \"27c1\",\n\t\"./coursePrivilegeIcons\": \"ac5d\",\n\t\"./coursePrivilegeIcons.ts\": \"ac5d\",\n\t\"./courseTreeNodeTypeIcons\": \"ea21\",\n\t\"./courseTreeNodeTypeIcons.ts\": \"ea21\",\n\t\"./eventStateIcons\": \"2a44\",\n\t\"./eventStateIcons.ts\": \"2a44\",\n\t\"./evo_classroom.png\": \"3e7e\",\n\t\"./exerciseStatesIcons\": \"af55\",\n\t\"./exerciseStatesIcons.ts\": \"af55\",\n\t\"./exerciseTestCaseTypeIcons\": \"612c\",\n\t\"./exerciseTestCaseTypeIcons.ts\": \"612c\",\n\t\"./exerciseTypesIcons\": \"dad4\",\n\t\"./exerciseTypesIcons.ts\": \"dad4\",\n\t\"./google.png\": \"cebc\",\n\t\"./hero-bg.png\": \"9bda\",\n\t\"./logo.png\": \"cf05\",\n\t\"./participationStateIcons\": \"1954\",\n\t\"./participationStateIcons.ts\": \"1954\",\n\t\"./unipi.png\": \"ca71\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"aeb6\";","import { ExerciseState } from \"@/models\";\n\nexport const icons = {\n\t[ExerciseState.DRAFT]: [\"insert_drive_file-sm\"],\n\t[ExerciseState.PUBLIC]: [\"public-sm\"],\n\t[ExerciseState.PRIVATE]: [\"visibility_off-sm\"],\n};\n","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementBlock as _createElementBlock, createVNode as _createVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"relative flex flex-col w-full\" }\nconst _hoisted_2 = {\n key: 1,\n class: \"\",\n style: {\"line-height\":\"1.2\"}\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_HelpCenter = _resolveComponent(\"HelpCenter\")!\n const _component_router_view = _resolveComponent(\"router-view\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_ctx.metaStore.helpCenterOpen)\n ? (_openBlock(), _createBlock(_component_HelpCenter, {\n key: 0,\n onStartTour: _cache[0] || (_cache[0] = ($event: any) => (_ctx.startTour())),\n onClose: _cache[1] || (_cache[1] = ($event: any) => (_ctx.metaStore.setHelpCenterVisibility(false)))\n }))\n : _createCommentVNode(\"\", true),\n (_ctx.routeTitle?.length > 0)\n ? (_openBlock(), _createElementBlock(\"h1\", _hoisted_2, _toDisplayString(_ctx.routeTitle), 1))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_router_view, { class: \"\" })\n ]))\n}","import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, resolveDirective as _resolveDirective, withDirectives as _withDirectives, resolveComponent as _resolveComponent, createBlock as _createBlock, normalizeStyle as _normalizeStyle, withCtx as _withCtx } from \"vue\"\n\nconst _hoisted_1 = { key: 0 }\nconst _hoisted_2 = {\n key: 0,\n class: \"flex items-center mb-4 space-x-1.5\"\n}\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons inline-icon text-primary\" }, \" auto_awesome \", -1)\nconst _hoisted_4 = [\"onClick\"]\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-8 h-8 pt-0.5 pl-1.5 mr-3 -mt-0.5 rounded-full bg-primary bg-opacity-20\" }, [\n /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-xl text-primary material-icons-outlined icon-light\" }, \" article \")\n], -1)\nconst _hoisted_6 = {\n key: 1,\n class: \"flex items-center my-4 space-x-1.5\"\n}\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons inline-icon text-primary\" }, \" article \", -1)\nconst _hoisted_8 = [\"onClick\"]\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-8 h-8 pt-0.5 pl-1.5 mr-3 -mt-0.5 rounded-full bg-primary bg-opacity-20\" }, [\n /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-xl text-primary material-icons-outlined icon-light\" }, \" article \")\n], -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_HelpCenterArticleFull = _resolveComponent(\"HelpCenterArticleFull\")!\n const _component_DraggablePopup = _resolveComponent(\"DraggablePopup\")!\n const _directive_wave = _resolveDirective(\"wave\")!\n\n return (_openBlock(), _createBlock(_component_DraggablePopup, {\n whiteBg: true,\n dragOnTitleOnly: true,\n initialTop: 60,\n initialLeft: _ctx.mediaQueryMdMatches ? 56.5 : 10,\n onClose: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$emit('close'))),\n title: _ctx.$t('help.help_center_title'),\n inForeground: true\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", {\n class: \"mt-3\",\n style: _normalizeStyle('max-height:' + (_ctx.mediaQueryMdMatches ? '30' : '15') + 'rem')\n }, [\n (_ctx.metaStore.helpCenterSelectedArticleId === null)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_ctx.relevantArticles.length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _hoisted_3,\n _createElementVNode(\"h4\", null, _toDisplayString(_ctx.$t(\"help.based_on_your_activity\")), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.relevantArticles, (article) => {\n return _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n onClick: ($event: any) => (_ctx.metaStore.setHelpCenterArticleId(article.id)),\n class: \"flex px-2 py-2 ml-1.5 transition-colors cursor-pointer items-top duration75 hover:bg-light\",\n key: 'art-' + article.id + '-relevant'\n }, [\n _hoisted_5,\n _createElementVNode(\"p\", null, _toDisplayString(article.title), 1)\n ], 8, _hoisted_4)), [\n [_directive_wave]\n ])\n }), 128)),\n (_ctx.irrelevantArticles.length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _hoisted_7,\n _createElementVNode(\"h4\", null, _toDisplayString(_ctx.$t(\"help.articles\")), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.irrelevantArticles, (article) => {\n return _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n onClick: ($event: any) => (_ctx.metaStore.setHelpCenterArticleId(article.id)),\n class: \"flex px-2 py-2 ml-1.5 transition-colors cursor-pointer items-top duration75 hover:bg-light\",\n key: 'art-' + article.id + '-relevant'\n }, [\n _hoisted_9,\n _createElementVNode(\"p\", null, _toDisplayString(article.title), 1)\n ], 8, _hoisted_8)), [\n [_directive_wave]\n ])\n }), 128))\n ]))\n : (_openBlock(), _createBlock(_component_HelpCenterArticleFull, {\n key: 1,\n article: _ctx.selectedArticle,\n onBack: _cache[0] || (_cache[0] = ($event: any) => (_ctx.metaStore.setHelpCenterArticleId(null))),\n allowGoBack: _ctx.allowGoBack\n }, null, 8, [\"article\", \"allowGoBack\"]))\n ], 4)\n ]),\n _: 1\n }, 8, [\"initialLeft\", \"title\"]))\n}","import {\n\tcourseDashboardSidebarOptions,\n\tcourseListSidebarOptions,\n} from \"@/navigation/sidebar\";\nimport { articles as articlesIt } from \"./articlesIt\";\nexport interface HelpCenterArticle {\n\tid: string;\n\ttitle: string;\n\tcontent: string;\n\ttags: string[]; // ArticleTag[];\n\trelated?: string[];\n}\n\nexport enum ArticleTag {\n\tEXERCISES,\n\tEXAMS,\n\tPERMISSIONS,\n\tGENERAL,\n}\n\nexport const getArticles = (): HelpCenterArticle[] => articlesIt; // TODO don't hard-code language\nexport const getArticle = (id: string): HelpCenterArticle | undefined =>\n\tarticlesIt.find(a => a.id === id);\n\nexport const getArticleAssetUrl = (filename: string) =>\n\trequire.context(\"../assets/\", false)(filename);\n","import { getTranslatedString as _ } from \"@/i18n\";\nimport { CourseFeature, CoursePrivilege } from \"@/models\";\n\nexport interface SidebarOption {\n\tlabel: string;\n\trouteName?: string; // ? use better typing\n\trouteParams?: Record;\n\tchildren?: string[];\n\ticon?: string;\n\trequiredPrivileges: CoursePrivilege[];\n\trequiresTeacher?: boolean;\n\trequiredFeatures?: CourseFeature[];\n}\n\nexport const courseListSidebarOptions: SidebarOption[] = [\n\t{\n\t\tlabel: _(\"sidebar_labels.course_list_courses\"),\n\t\ticon: \"list\",\n\t\trouteName: \"TeacherCourseList\",\n\t\trequiredPrivileges: [],\n\t},\n\t{\n\t\tlabel: _(\"sidebar_labels.course_list_new_course\"),\n\t\ticon: \"add\",\n\t\trouteName: \"CourseCreationForm\",\n\t\trequiredPrivileges: [],\n\t},\n];\n\nexport const studentCourseListSidebarOptions: SidebarOption[] = [\n\t{\n\t\tlabel: _(\"sidebar_labels.course_list_courses\"),\n\t\ticon: \"list\",\n\t\trouteName: \"StudentCourseList\",\n\t\trequiredPrivileges: [],\n\t},\n];\n\nexport const courseDashboardSidebarOptions: SidebarOption[] = [\n\t{\n\t\tlabel: _(\"sidebar_labels.course_dashboard_dashboard\"),\n\t\ticon: \"home\",\n\t\trouteName: \"TeacherCourseDashboard\",\n\t\trequiredPrivileges: [],\n\t},\n\t{\n\t\tlabel: _(\"sidebar_labels.course_dashboard_exams\"),\n\t\ticon: \"assignment\", //'quiz',\n\t\trouteName: \"CourseExams\",\n\t\tchildren: [\n\t\t\t\"ExamEditor\",\n\t\t\t\"ExamResults\",\n\t\t\t\"ExamProgress\",\n\t\t\t\"ExamStats\",\n\t\t\t\"ExamParticipationFull\",\n\t\t],\n\t\trequiredPrivileges: [],\n\t},\n\t{\n\t\tlabel: _(\"sidebar_labels.course_dashboard_exercises\"),\n\t\ticon: \"topic\",\n\t\trouteName: \"CourseExercises\",\n\t\trequiredPrivileges: [CoursePrivilege.ACCESS_EXERCISES],\n\t},\n\t{\n\t\tlabel: _(\"sidebar_labels.course_dashboard_material\"),\n\t\ticon: \"class\",\n\t\trouteName: \"TeacherCourseTree\",\n\t\tchildren: [\"TeacherNodeDetail\"],\n\t\trequiredPrivileges: [], //[CoursePrivilege.MANAGE_MATERIAL],\n\t},\n\t{\n\t\tlabel: _(\"sidebar_labels.course_insights\"),\n\t\ticon: \"assignment_ind\", //\"insights\",\n\t\trouteName: \"CourseInsights\",\n\t\trequiredPrivileges: [],\n\t},\n\t{\n\t\tlabel: _(\"sidebar_labels.exercise_solution_threads\"),\n\t\ticon: \"forum\",\n\t\trouteName: \"TeacherCourseExerciseSolutionThreads\",\n\t\tchildren: [\"TeacherDetailExerciseSolutionThreads\"],\n\t\trequiredPrivileges: [CoursePrivilege.MANAGE_EXERCISE_SOLUTIONS],\n\t},\n\t{\n\t\tlabel: _(\"sidebar_labels.course_permissions\"),\n\t\ticon: \"admin_panel_settings\",\n\t\trouteName: \"CoursePermissions\",\n\t\trequiredPrivileges: [], //[CoursePrivilege.UPDATE_COURSE],\n\t},\n\t{\n\t\tlabel: _(\"sidebar_labels.course_integrations\"),\n\t\ticon: \"extension\",\n\t\trouteName: \"CourseIntegrations\",\n\t\trequiredPrivileges: [],\n\t},\n\t{\n\t\tlabel: _(\"sidebar_labels.course_dashboard_back_to_courses\"),\n\t\ticon: \"chevron_left\",\n\t\trouteName: \"TeacherCourseList\",\n\t\trequiredPrivileges: [],\n\t},\n];\n\nexport const studentDashboardSidebarOptions: SidebarOption[] = [\n\t{\n\t\tlabel: _(\"student_dashboard_options.my_practice_sessions\"),\n\t\trequiredPrivileges: [],\n\t\tchildren: [],\n\t\ticon: \"fitness_center\",\n\t\trouteName: \"CourseDashBoardPracticeSessionList\",\n\t\trequiredFeatures: [CourseFeature.PRACTICE],\n\t},\n\t{\n\t\tlabel: _(\"sidebar_labels.course_dashboard_material\"),\n\t\ticon: \"class\",\n\t\trouteName: \"StudentCourseTree\",\n\t\tchildren: [\"StudentNodeDetail\"],\n\t\trequiredPrivileges: [],\n\t\trequiredFeatures: [CourseFeature.MATERIAL],\n\t},\n\t{\n\t\tlabel: _(\"student_dashboard_options.my_exams\"),\n\t\trequiredPrivileges: [],\n\t\tchildren: [],\n\t\ticon: \"assignment\",\n\t\trouteName: \"CourseDashBoardExamList\",\n\t\trequiredFeatures: [CourseFeature.MY_EXAMS],\n\t},\n\t// TODO add public exams\n\t{\n\t\tlabel: _(\"student_dashboard_options.popular_exercises\"),\n\t\trequiredPrivileges: [],\n\t\tchildren: [\"ExerciseSolutionThread\"],\n\t\ticon: \"topic\",\n\t\trouteName: \"CourseDashBoardExerciseThreadList\",\n\t\trequiredFeatures: [CourseFeature.EXERCISE_SOLUTIONS],\n\t},\n\t{\n\t\tlabel: _(\"student_dashboard_options.leaderboard\"),\n\t\trequiredPrivileges: [],\n\t\tchildren: [],\n\t\ticon: \"leaderboard\",\n\t\trouteName: \"StudentCourseLeaderboard\",\n\t\trequiredFeatures: [CourseFeature.LEADERBOARD],\n\t},\n\t{\n\t\tlabel: _(\"student_dashboard_options.my_favorites\"),\n\t\trequiredPrivileges: [],\n\t\tchildren: [],\n\t\ticon: \"bookmark_outline\",\n\t\trouteName: \"StudentFavorites\",\n\t\trequiredFeatures: [CourseFeature.BOOKMARKED],\n\t},\n\t{\n\t\tlabel: _(\"sidebar_labels.course_dashboard_back_to_courses\"),\n\t\ticon: \"chevron_left\",\n\t\trouteName: \"StudentCourseList\",\n\t\trouteParams: { courseId: \"-1\" }, // !\n\t\trequiredPrivileges: [],\n\t},\n];\n","import {\n\tcourseListSidebarOptions,\n\tcourseDashboardSidebarOptions,\n} from \"./../navigation/sidebar\";\nimport { getTranslatedString } from \"./../i18n/index\";\nimport { ArticleTag, HelpCenterArticle } from \"./index\";\n\nconst getSidebarOptionHtml = (routeName: string): string => {\n\tconst sideBarOptions = [...courseListSidebarOptions, ...courseDashboardSidebarOptions];\n\n\tconst option = sideBarOptions.find(o => o.routeName === routeName);\n\n\tif (!option) {\n\t\tthrow new Error(routeName);\n\t}\n\n\treturn `\n ${option.icon} \n ${option.label}`;\n};\n\nexport const articles: HelpCenterArticle[] = [\n\t{\n\t\tid: \"multiple_choice_eval_logic\",\n\t\ttitle: \"Come sono valutate le risposte a scelta multipla?\",\n\t\tcontent: ``,\n\t\ttags: [\"exercises\"],\n\t},\n\t{\n\t\tid: \"what_are_tags_for\",\n\t\ttitle: \"A cosa servono i tag negli esercizi?\",\n\t\tcontent: `
\n

I tag servono per classificare gli esercizi in base a criteri stabiliti dal docente, come per esempio l'argomento o la difficoltà.

\n

Gli esercizi hanno due tipi di tag: i tab pubblici e i tag privati.

\n\n

Se pubblichi un esercizio, i suoi tag pubblici verranno mostrati agli studenti e compariranno \n nella lista di tag che possono essere usati per creare esercitazioni. Se intendi pubblicare un esercizio, utilizza tag pubblici\n che possano essere utili agli studenti per trovare l'esercizio. È consigliato utilizzare i tag pubblici per elencare gli\n argomenti di un esercizio.

\n\n

I tag privati non verranno mai mostrati agli studenti, nemmeno se pubblichi un esercizio. Puoi utilizzarli\n per qualsiasi criterio di classificazione, per esempio per tenere traccia degli esami nei quali hai inserito un esericizio, \n oppure della sua difficoltà.

\n
`,\n\t\ttags: [\"exercises\", \"general\"],\n\t\trelated: [],\n\t},\n\t{\n\t\tid: \"why_evo_asks_for_google_scopes\",\n\t\ttitle:\n\t\t\t\"Perché Evo Learning richiede accesso alle informazioni del mio account Google?\",\n\t\tcontent: `
\n
\n \n \n
\n

Evo Learning realizza un'integrazione con Google Classroom che consente di sincronizzare i dati tra le \n due piattaforme. I dati interessati includono:

\n
    \n
  • Iscrizioni ai corsi
  • \n
  • Lezioni, annunci e materiale didattico
  • \n
  • Esami e voti
  • \n
\n

Al fine di fonirti la migliore esperienza possibile, Evo Learning richiede di accedere ai\n dati del tuo account Google d'interesse per l'integrazione con Google Classroom.

\n
`,\n\t\ttags: [\"general\", \"integrations\"],\n\t\trelated: [],\n\t},\n\t{\n\t\tid: \"close_exams_for_certain_students\",\n\t\ttitle: \"Come si chiude un esame solo per alcuni studenti?\",\n\t\tcontent: `\n

Dalla pagina ${getSidebarOptionHtml(\n\t\t\t\t\t\"CourseExams\",\n\t\t\t\t)} del tuo corso, clicca sul bottone con l'icona  visibility\n dell'esame in questione per entrare nella pagina di monitoraggio.

\n

Dalla pagina di monitoraggio, seleziona gli studenti per i quali vuoi chiudere l'esame cliccando sulla checkbox vicino all'indirizzo\n email dello studente.

\n

Clicca su block\n ${getTranslatedString(\n\t\t\t\t\t\"event_monitor.close_for_selected\",\n\t\t\t\t)} e conferma.

\n \n
\n

Se vuoi riaprire l'esame per alcuni studenti per i quali lo avevi precedentemente chiuso, selezionali\n cliccando le checkbox relative, poi clicca su redo ${getTranslatedString(\n\t\t\t\t\t\"event_monitor.open_for_selected\",\n\t\t\t\t)} e conferma.

\n `,\n\t\ttags: [\"exams\", \"participations\"],\n\t\trelated: [],\n\t},\n\t{\n\t\tid: \"whats_publishing_exercises_for\",\n\t\ttitle: \"A cosa serve pubblicare un esercizio?\",\n\t\tcontent: `\n

Gli esercizi hanno tre possibili valori di visibilità: bozza, solo esami e pubblico.

\n

Gli esercizi che sono in modalità pubblico possono comparire nelle esercitazioni degli studenti.

\n

Pubblicare un esercizio dà quindi agli studenti la possibilità di visualizzarlo nelle esercitazioni.

\n\n
\n \n tips_and_updates\n \n

Un buon momento per pubblicare un esercizio è subito dopo aver chiuso un esame nel quale lo hai inserito: questo darà la possibilità agli studenti che\n non hanno sostenuto quell'esame di esercitarsi in futuro con quell'esercizio.

\n `,\n\t\ttags: [\"exercises\"],\n\t\trelated: [],\n\t},\n\t{\n\t\tid: \"whats_exam_template\",\n\t\ttitle: \"Cos'è il modello di un esame?\",\n\t\ttags: [\"exams\"],\n\t\trelated: [],\n\t\tcontent: `\n

Il modello di un esame è un insieme di regole che stabilisce come vengono selezionati gli esercizi\n da assegnare agli studenti che partecipano all'esame.

\n\n

Il modello è composto da slot, e ogni slot stabilisce il criterio per scegliere un esercizio\n da assegnare ai partecipanti dell'esame. Questo ti consente sia di creare esami uguali per tutti,\n che di creare esami dove ogni studente\n vedrà esercizi diversi.

\n\n

\n Ogni slot del modello ti permette di impostare un criterio di scelta tra questi:\n

\n\n
    \n
  • \n topic\n Stesso esercizio per tutti\n

    A tutti gli studenti verrà assegnato lo stesso esercizio.

    \n
  • \n\n
  • \n shuffle\n Esercizio scelto casualmente da un insieme\n

    A ciascuno studente verrà assegnato un esercizio scelto casualmente tra quelli che selezioni.

    \n
  • \n\n
  • \n label\n Esercizio scelto casualmente in base ai tag\n

    A ciascuno studente verrà assegnato un esercizio scelto casualmente tra quelli che hanno i tag che selezioni.

    \n
  • \n
\n `,\n\t},\n\t{\n\t\tid: \"how_to_add_exercises_to_exam\",\n\t\ttitle: \"Come si inseriscono esercizi in un esame?\",\n\t\ttags: [\"exercises\", \"exams\"],\n\t\trelated: [],\n\t\tcontent: `\n

Dalla pagina ${getSidebarOptionHtml(\n\t\t\t\t\"CourseExercises\",\n\t\t\t)} del tuo corso, crea per prima cosa gli esercizi che vuoi inserire.

\n

Attenzione: dopo aver terminato le modifiche, cambia la visibilità degli esercizi in solo esami.

\n\n

Dalla pagina ${getSidebarOptionHtml(\n\t\t\t\t\"CourseExams\",\n\t\t\t)} del tuo corso, crea l'esame se non esiste già oppure apri il suo editor.

\n

Nella sezione ${getTranslatedString(\n\t\t\t\t\"event_template_editor.editor_title\",\n\t\t\t)}, crea uno slot cliccando su \n add ${getTranslatedString(\n\t\t\t\t\"event_template_editor.add_rule\",\n\t\t\t)}.

\n

Clicca su settings ${getTranslatedString(\n\t\t\t\"event_template_rule_editor.choose_exercise\",\n\t\t)} nello slot creato.

\n\n

Se vuoi inserire lo stesso esercizio per tutti

\n

Clicca su topic\n ${getTranslatedString(\n\t\t\t\"event_template_rule_editor.pick_single_exercise\",\n\t\t)}.

\n

Trova l'esercizio che vuoi aggiungere, poi clicca sulla sua icona \n done .

\n\n

Se vuoi randomizzare gli esercizi

\n

Clicca su shuffle\n ${getTranslatedString(\n\t\t\t\"event_template_rule_editor.pick_exercise_from_pool\",\n\t\t)}.

\n

Trova gli esercizi che vuoi aggiungere, poi clicca sull'icona \n done di ciascuno di essi.

\n

Ogni studente che parteciperà all'esame vedrà un esercizio tra quelli che hai scelto nella posizione dello slot.

\n `,\n\t},\n\t{\n\t\tid: \"how_to_create_an_exam\",\n\t\ttitle: \"Come si crea un esame?\",\n\t\ttags: [\"exams\", \"general\"],\n\t\trelated: [],\n\t\tcontent: `
\n tips_and_updates\n

\n Prima di creare un esame, assicurati di aver creato gli esercizi che vuoi inserirvi e \n di aver impostato la loro visibilità a solo esami.

\n
\n\n

Dalla pagina ${getSidebarOptionHtml(\n\t\t\t\t\t\t\"CourseExams\",\n\t\t\t\t\t)} del tuo corso, clicca su add ${getTranslatedString(\n\t\t\t\"course_events.new_exam\",\n\t\t)}.

\n

Seleziona il nome, la data e orario di inizio e fine dell'esame.

\n

Seleziona le regole di svolgimento e quelle di accesso.

\n

Crea il modello dell'esame aggiungendo gli esercizi precedentemente creati.

\n

Al termine delle modifiche, clicca su ${getTranslatedString(\n\t\t\t\t\t\t\"event_editor.publish\",\n\t\t\t\t\t)},\n poi copia il link all'esame e comunicalo agli studenti che vi parteciperanno. L'esame inizierà automaticamnte una volta raggiunta la data e ora indicate.

\n `,\n\t},\n\t{\n\t\tid: \"how_to_add_teachers\",\n\t\ttitle: \"Come si aggiungono docenti a un corso?\",\n\t\ttags: [\"permissions\", \"general\"],\n\t\trelated: [],\n\t\tcontent: `\n

Accedi alla pagina ${getSidebarOptionHtml(\n\t\t\t\t\"CoursePermissions\",\n\t\t\t)} del tuo corso.

\n

Nella casella di ricerca, digita il nome e cognome oppure l'indirizzo email\n dell'utente a cui vuoi aggiungere i permessi.

\n\n

Seleziona dai risultati l'utente al quale vuoi aggiungere i permessi.

\n

Clicca sugli switch toggle_on relativi\n ai permessi che vuoi abilitare.

\n\n
\n \n tips_and_updates\n \n

Se vuoi aggiungere i permessi a un utente ma non riesci a trovarlo, potrebbe non aver effettuato il primo login. Puoi comunque inserire\n il suo indirizzo email e assegnargli i permessi, che verranno applicati appena l'utente effettuerà il primo accesso.

\n `,\n\t},\n\t{\n\t\tid: \"how_to_limit_exam_access\",\n\t\ttitle: \"Come si limita l'accesso a un esame solo per alcuni studenti?\",\n\t\ttags: [\"exams\"],\n\t\trelated: [],\n\t\tcontent: `\n

Di default, tutti gli studenti che hanno il link per un esame possono parteciparvi. Potresti voler restringere l'accesso solo ad alcuni studenti, come quelli iscritti all'appello o che hanno superato un altro compito.

\n

Dall'editor dell'esame, nella sezione ${getTranslatedString(\n\t\t\t\t\"event_editor.access_rules\",\n\t\t\t)}, \n seleziona l'opzione ${getTranslatedString(\n\t\t\t\t\"event_editor.deny_access_by_default_label\",\n\t\t\t)}.

\n

Dopodiché, clicca sul bottone people ${getTranslatedString(\n\t\t\t\t\"event_editor.choose_allowed\",\n\t\t\t)}.

\n

Inserimento manuale

\n

Nell'area di input che apparirà, inserisci gli indirizzi email degli studenti che possono partecipare. Solo gli studenti il \n cui indirizzo email è in questa lista potranno accedere all'esame, quando viene aperto.

\n

Importare da Valutami

\n

Puoi importare la lista degli iscritti all'appello dal portale Valutami. Seleziona il file CSV scaricato da Valutami\n che contiene la lista degli iscritti all'esame e importalo nella sezione Importa da Valutami. Gli indirzzi email degli studenti\n contenuti nel foglio CSV verranno automaticamente aggiunti.

`,\n\t},\n\t{\n\t\tid: \"how_to_save_exercises\",\n\t\ttitle: \"Come si salvano le modifiche fatte a un esercizio?\",\n\t\ttags: [\"exercises\", \"editor\"],\n\t\trelated: [],\n\t\tcontent: `\n

Tutte le modifiche che fai a un esercizio sono salvate automaticamente; non c'è bisogno di salvare manualmente le tue modifiche.

\n

Se in alto a destra nell'editor compare l'icona \n cloud_done\n , le tue modifiche sono state salvate.\n

\n

\n \n error_outline\n \n A volte il salvataggio potrebbe richiedere un po' più tempo, per cui assicurati che tutte le modifiche siano state salvate prima di uscire\n dalla pagina. In ogni caso, se esci prima che le modifiche siano state salvate, ti verrà chiesta conferma.

\n `,\n\t},\n\t{\n\t\tid: \"how_to_save_exams\",\n\t\ttitle: \"Come si salvano le modifiche fatte a un esame?\",\n\t\ttags: [\"exams\", \"editor\"],\n\t\trelated: [],\n\t\tcontent: `\n

Tutte le modifiche che fai a un esame sono salvate automaticamente; non c'è bisogno di salvare manualmente le tue modifiche.

\n

Se in alto a destra nell'editor compare l'icona \n cloud_done\n , le tue modifiche sono state salvate.\n

\n

\n \n error_outline\n \n A volte il salvataggio potrebbe richiedere un po' più tempo, per cui assicurati che tutte le modifiche siano state salvate prima di uscire\n dalla pagina. In ogni caso, se esci prima che le modifiche siano state salvate, ti verrà chiesta conferma.

\n `,\n\t},\n\t{\n\t\tid: \"where_do_i_find_enrolled_students\",\n\t\ttitle: \"Dove trovo la lista degli studenti attivi nel mio corso?\",\n\t\ttags: [\"general\"],\n\t\trelated: [],\n\t\tcontent: `\n

\n Dalla pagina\n ${getSidebarOptionHtml(\"CourseInsights\")}, puoi \n visualizzare la lista degli studenti attivi nel tuo corso.

\n

Per ciascuno studente attivo, puoi visualizzare la lista delle sue esercitazioni e\n degli esami che ha sostenuto. Per farlo, clicca sull'icona \n expand_more accanto al suo nome.

\n `,\n\t},\n];\n","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex items-center space-x-2\" }\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined\" }, \" arrow_back \", -1)\nconst _hoisted_3 = { class: \"mx-4 mt-2\" }\nconst _hoisted_4 = [\"innerHTML\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n\n return (_openBlock(), _createElementBlock(\"div\", null, [\n _createElementVNode(\"div\", _hoisted_1, [\n (_ctx.allowGoBack)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 0,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('back'))),\n outline: true,\n variant: 'icon',\n tooltip: _ctx.$t('misc.back')\n }, {\n default: _withCtx(() => [\n _hoisted_2\n ]),\n _: 1\n }, 8, [\"tooltip\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"h3\", {\n class: _normalizeClass([{ 'ml-3': !_ctx.allowGoBack }, \"mb-0\"])\n }, _toDisplayString(_ctx.article.title), 3)\n ]),\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", {\n innerHTML: _ctx.article.content\n }, null, 8, _hoisted_4)\n ])\n ]))\n}","\nimport { HelpCenterArticle } from \"@/helpCenter\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport { logAnalyticsEvent } from \"@/utils\";\nexport default defineComponent({\n\tname: \"HelpCenterArticleFull\",\n\tprops: {\n\t\tarticle: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\tallowGoBack: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t},\n\tcreated() {\n\t\tlogAnalyticsEvent(\"openedHelpCenterArticle\", { articleId: this.article.id });\n\t},\n\tmethods: {},\n\tcomputed: {},\n\tcomponents: { Btn },\n});\n","import { render } from \"./HelpCenterArticleFull.vue?vue&type=template&id=985ad97a&ts=true\"\nimport script from \"./HelpCenterArticleFull.vue?vue&type=script&lang=ts\"\nexport * from \"./HelpCenterArticleFull.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nconst SHOWN_ARTICLES = 10;\n\nimport { defineComponent } from \"@vue/runtime-core\";\nimport DraggablePopup from \"@/components/ui/DraggablePopup.vue\";\nimport { getArticle, getArticles, HelpCenterArticle } from \"@/helpCenter\";\nimport HelpCenterArticleFull from \"./HelpCenterArticleFull.vue\";\nimport { courseIdMixin, mediaQueryMixin } from \"@/mixins\";\nimport { isDemoMode } from \"@/utils\";\nimport { logAnalyticsEvent } from \"@/utils\";\nimport { mapStores } from \"pinia\";\nimport { useMetaStore } from \"@/stores/metaStore\";\nexport default defineComponent({\n\tname: \"HelpCenter\",\n\tcomponents: { DraggablePopup, HelpCenterArticleFull },\n\tmixins: [courseIdMixin, mediaQueryMixin],\n\tprops: {\n\t\tallowGoBack: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t},\n\tcreated() {\n\t\tlogAnalyticsEvent(\"openedHelpCenter\", { path: this.$route.fullPath });\n\t},\n\tmethods: {\n\t\tgetArticleRelevance(article: HelpCenterArticle): number {\n\t\t\tconst routeTags: string[] = this.$route.meta.tags as string[];\n\t\t\treturn article.tags.filter(t => routeTags.includes(t)).length;\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tshowAll: false,\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useMetaStore),\n\t\tisDemo() {\n\t\t\treturn isDemoMode();\n\t\t},\n\t\tsortedArticles(): HelpCenterArticle[] {\n\t\t\treturn [...getArticles()].sort(\n\t\t\t\t(a, b) => this.getArticleRelevance(b) - this.getArticleRelevance(a),\n\t\t\t);\n\t\t},\n\t\trelevantArticles(): HelpCenterArticle[] {\n\t\t\treturn this.sortedArticles.filter(a => this.getArticleRelevance(a) > 0).slice(0, 3);\n\t\t},\n\t\tirrelevantArticles(): HelpCenterArticle[] {\n\t\t\treturn this.sortedArticles\n\t\t\t\t.filter(a => !this.relevantArticles.map(r => r.id).includes(a.id))\n\t\t\t\t.slice(0, this.showAll ? Infinity : SHOWN_ARTICLES);\n\t\t},\n\t\tselectedArticle(): HelpCenterArticle | undefined {\n\t\t\tif (this.metaStore.helpCenterSelectedArticleId === null) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\treturn getArticle(this.metaStore.helpCenterSelectedArticleId);\n\t\t},\n\t},\n});\n","import { render } from \"./HelpCenter.vue?vue&type=template&id=2c19ca8f&ts=true\"\nimport script from \"./HelpCenter.vue?vue&type=script&lang=ts\"\nexport * from \"./HelpCenter.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { courseIdMixin, coursePrivilegeMixin, eventIdMixin } from \"@/mixins\";\nimport { Course, Event } from \"@/models\";\nimport {\n\tROUTE_TITLE_COURSE_NAME_TOKEN,\n\tROUTE_TITLE_EVENT_NAME_TOKEN,\n} from \"@/navigation/const\";\nimport { SidebarOption } from \"@/navigation/sidebar\";\nimport { isDemoMode, logAnalyticsEvent } from \"@/utils\";\nimport { defineComponent } from \"@vue/runtime-core\";\nimport ErrorView from \"../shared/ErrorView.vue\";\nimport SnackBar from \"@/components/ui/SnackBar.vue\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport HelpCenter from \"@/components/shared/HelpCenter/HelpCenter.vue\";\nimport { newSidebarHelpCenterTourSteps, teacherTourSteps, tourOptions } from \"@/const\";\nimport LocaleSelector from \"@/components/ui/LocaleSelector.vue\";\n\nimport DropdownMenu from \"@/components/ui/DropdownMenu.vue\";\nimport { mapStores } from \"pinia\";\nimport { useMetaStore } from \"@/stores/metaStore\";\nimport { useMainStore } from \"@/stores/mainStore\";\nimport AppBar from \"@/components/ui/AppBar.vue\";\n\nconst LOCAL_STORAGE_FIX_SIDEBAR_KEY = \"sai_evo_fix_sidebar\";\n\nexport default defineComponent({\n\tname: \"MainTeacher\",\n\twatch: {\n\t\t$route() {\n\t\t\tthis.showMobileSidebar = false;\n\t\t},\n\t\tshowMobileSidebar(newVal) {\n\t\t\tif (newVal) {\n\t\t\t\tdocument.body.classList.add(\"overflow-y-hidden\");\n\t\t\t} else {\n\t\t\t\tdocument.body.classList.remove(\"overflow-y-hidden\");\n\t\t\t}\n\t\t},\n\t},\n\tmounted() {\n\t\tsetTimeout(() => {\n\t\t\tthis.routerViewPaddingLeft =\n\t\t\t\tdocument.getElementById(\"desktop-nav\")?.clientWidth ?? 0;\n\t\t\tconst fixSideBar = JSON.parse(\n\t\t\t\tlocalStorage.getItem(LOCAL_STORAGE_FIX_SIDEBAR_KEY) ?? \"false\",\n\t\t\t);\n\t\t\tthis.unfixingSideBar = true;\n\t\t\t// TODO adjust all paddings\n\t\t\tthis.fixSideBar = true; //!fixSideBar;\n\t\t\tthis.$nextTick(() => (this.unfixingSideBar = false));\n\t\t}, 1);\n\t\t// adjust router view padding and width according to screen size breakpoint\n\t\tconst mq = window.matchMedia(\"(min-width: 768px)\");\n\t\tmq.addEventListener(\"change\", event => (this.mediaQueryMd = mq.matches));\n\t\tthis.mediaQueryMd = mq.matches;\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tshowMobileSidebar: false,\n\t\t\thoveringSidebar: false,\n\t\t\tsideBarHoverHandle: null as null | number,\n\t\t\tfixSideBar: false,\n\t\t\tunfixingSideBar: false,\n\t\t\trouterViewPaddingLeft: 0,\n\t\t\tteacherTourSteps,\n\t\t\tnewSidebarHelpCenterTourSteps,\n\t\t\ttourOptions,\n\t\t\tmediaQueryMd: false,\n\t\t\tdonateExpanded: false,\n\t\t};\n\t},\n\tmixins: [courseIdMixin, eventIdMixin, coursePrivilegeMixin],\n\tmethods: {\n\t\tstartTour() {\n\t\t\t(this.$tours[\"helpCenterTour\"] as any).start();\n\t\t},\n\t\tisRouteActive(option: SidebarOption) {\n\t\t\treturn (\n\t\t\t\toption.routeName === this.$route.name ||\n\t\t\t\toption.children?.includes(this.$route.name as string)\n\t\t\t);\n\t\t},\n\t\tonSideBarHover(event: MouseEvent) {\n\t\t\tif (\n\t\t\t\tthis.sideBarHoverHandle == null &&\n\t\t\t\t!(event.target as any).className.split(\" \").includes(\"no-hover-sidebar\")\n\t\t\t) {\n\t\t\t\tthis.sideBarHoverHandle = setTimeout(() => (this.hoveringSidebar = true), 300);\n\t\t\t}\n\t\t},\n\t\tonSideBarLeave() {\n\t\t\tif (this.sideBarHoverHandle != null) {\n\t\t\t\tclearTimeout(this.sideBarHoverHandle);\n\t\t\t\tthis.sideBarHoverHandle = null;\n\t\t\t}\n\t\t\tthis.hoveringSidebar = false;\n\t\t},\n\t\ttoggleFixSideBar() {\n\t\t\tif (this.fixSideBar) {\n\t\t\t\tthis.unfixingSideBar = true;\n\t\t\t\tthis.fixSideBar = false;\n\t\t\t\tthis.$nextTick(() => (this.unfixingSideBar = false));\n\t\t\t} else {\n\t\t\t\tthis.fixSideBar = true;\n\t\t\t}\n\t\t\tlocalStorage.setItem(LOCAL_STORAGE_FIX_SIDEBAR_KEY, String(this.fixSideBar));\n\t\t},\n\t\tonToggleDonate() {\n\t\t\tif (!this.donateExpanded) {\n\t\t\t\tlogAnalyticsEvent(\"toggledDonate\", {});\n\t\t\t}\n\t\t\tthis.donateExpanded = !this.donateExpanded;\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMetaStore, useMainStore),\n\t\tisDemoMode() {\n\t\t\treturn isDemoMode();\n\t\t},\n\t\tlogoUrl() {\n\t\t\treturn require(\"../../assets/logo.png\");\n\t\t},\n\t\tallowedSidebarOptions(): SidebarOption[] {\n\t\t\treturn ((this.$route.meta?.sidebarOptions ?? []) as SidebarOption[]).filter(o =>\n\t\t\t\tthis.hasPrivileges(o.requiredPrivileges),\n\t\t\t);\n\t\t},\n\t\trouteTitle(): string {\n\t\t\treturn (this.$route.meta.routeTitle as string)\n\t\t\t\t?.replace(ROUTE_TITLE_COURSE_NAME_TOKEN, this.currentCourse?.name ?? \"\")\n\t\t\t\t?.replace(ROUTE_TITLE_EVENT_NAME_TOKEN, this.currentEvent?.name ?? \"\");\n\t\t},\n\t\tcurrentEvent(): Event {\n\t\t\treturn this.mainStore.getEventById(this.eventId);\n\t\t},\n\t\trouterViewStyle() {\n\t\t\tconst unfixedSidebarOnMdScreen = !this.fixSideBar && this.mediaQueryMd;\n\t\t\treturn {\n\t\t\t\t...(unfixedSidebarOnMdScreen\n\t\t\t\t\t? { width: \"97%\" }\n\t\t\t\t\t: !this.mediaQueryMd\n\t\t\t\t\t? { width: \"100%\" }\n\t\t\t\t\t: {}),\n\t\t\t\t...(unfixedSidebarOnMdScreen\n\t\t\t\t\t? {\n\t\t\t\t\t\t\t\"padding-left\": this.routerViewPaddingLeft + \"30\" + \"px\",\n\t\t\t\t\t\t\t\"padding-right\": \"30px\",\n\t\t\t\t\t }\n\t\t\t\t\t: {}),\n\t\t\t};\n\t\t},\n\t},\n\tcomponents: {\n\t\t// ErrorView,\n\t\t// SnackBar,\n\t\tHelpCenter,\n\t},\n});\n","import { render } from \"./MainTeacher.vue?vue&type=template&id=6896b1ae&ts=true\"\nimport script from \"./MainTeacher.vue?vue&type=script&lang=ts\"\nexport * from \"./MainTeacher.vue?vue&type=script&lang=ts\"\n\nimport \"./MainTeacher.vue?vue&type=style&index=0&id=6896b1ae&lang=css\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"w-full flex flex-col\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_router_view = _resolveComponent(\"router-view\")!\n const _component_NumberInput = _resolveComponent(\"NumberInput\")!\n const _component_Dialog = _resolveComponent(\"Dialog\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_router_view, { class: \"w-full\" }),\n _createVNode(_component_Dialog, {\n \"show-dialog\": _ctx.editingMat,\n onNo: _cache[1] || (_cache[1] = ($event: any) => (_ctx.editingMat = false)),\n onYes: _cache[2] || (_cache[2] = ($event: any) => (_ctx.onSaveMat())),\n \"yes-text\": _ctx.$t('misc.save'),\n \"no-text\": _ctx.$t('dialog.default_cancel_text')\n }, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"student_data.edit_mat_title\")), 1)\n ]),\n body: _withCtx(() => [\n _createVNode(_component_NumberInput, {\n modelValue: _ctx.dirtyMat,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.dirtyMat) = $event)),\n class: \"mt-8\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"student_data.your_mat\")), 1)\n ]),\n _: 1\n }, 8, [\"modelValue\"])\n ]),\n _: 1\n }, 8, [\"show-dialog\", \"yes-text\", \"no-text\"])\n ]))\n}","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, renderSlot as _renderSlot, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withCtx as _withCtx, createVNode as _createVNode, normalizeStyle as _normalizeStyle, Transition as _Transition, vShow as _vShow, withDirectives as _withDirectives } from \"vue\"\n\nconst _hoisted_1 = {\n style: {\"z-index\":\"1000\"},\n class: \"fixed top-0 left-0 flex items-center justify-center w-full h-full\"\n}\nconst _hoisted_2 = { key: 0 }\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"icon-surrounding bg-danger-light text-danger-dark\" }, [\n /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined\" }, \" priority_high \")\n], -1)\nconst _hoisted_4 = [\n _hoisted_3\n]\nconst _hoisted_5 = { key: 1 }\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"text-yellow-900 bg-yellow-500 icon-surrounding\" }, [\n /*#__PURE__*/_createElementVNode(\"span\", { class: \"ml-px material-icons-outlined\" }, \" priority_high \")\n], -1)\nconst _hoisted_7 = [\n _hoisted_6\n]\nconst _hoisted_8 = { key: 2 }\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"icon-surrounding bg-success-light text-success-dark\" }, [\n /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined\" }, \" check \")\n], -1)\nconst _hoisted_10 = [\n _hoisted_9\n]\nconst _hoisted_11 = { class: \"mb-0\" }\nconst _hoisted_12 = { class: \"\" }\nconst _hoisted_13 = { class: \"flex ml-auto\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_LinearProgress = _resolveComponent(\"LinearProgress\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n\n return _withDirectives((_openBlock(), _createBlock(_Transition, {\n name: \"fade\",\n appear: \"\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.dismiss())),\n style: {\"width\":\"100vw !important\",\"height\":\"100vh !important\"},\n class: \"absolute z-10 w-full h-full transition-none bg-gray-900 opacity-80\"\n }),\n _createVNode(_Transition, { name: \"bounce\" }, {\n default: _withCtx(() => [\n (_ctx.showDialog)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: _normalizeClass([\"relative z-20 max-h-full overflow-y-auto mx-1.5 bg-white rounded-md shadow-all-around md:mx-0 flex flex-col\", {\n\t\t\t\t\t\t'md:max-w-4xl md:min-w-md': !_ctx.fullWidth && !_ctx.large,\n\t\t\t\t\t\t'w-4/5 md:w-3/4 md:mx-4': _ctx.large,\n\t\t\t\t\t\t'w-full md:w-full md:mx-4': _ctx.fullWidth,\n\t\t\t\t\t\t[_ctx.dialogBoxClasses]: true,\n\t\t\t\t\t}]),\n style: _normalizeStyle(_ctx.fullHeight ? 'height: calc(100vh - 10px)' : '')\n }, [\n (_ctx.loading)\n ? (_openBlock(), _createBlock(_component_LinearProgress, {\n key: 0,\n class: \"rounded-t-md absolute top-0 left-0\"\n }))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", {\n style: {},\n class: _normalizeClass([\"w-full overflow-y-auto\", { 'px-4 md:px-8': !_ctx.noPadding }])\n }, [\n (_ctx.$slots.title)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: _normalizeClass([\"flex items-center space-x-2 bg-white\", {\n\t\t\t\t\t\t\t\t'py-2': !_ctx.noPadding && _ctx.$slots.backButton?.(),\n\t\t\t\t\t\t\t\t'pt-4': !_ctx.noPadding && !_ctx.$slots.backButton?.(),\n\t\t\t\t\t\t\t\t'sticky top-0 z-50': _ctx.stickyHeader,\n\t\t\t\t\t\t\t\t'border-b border-gray-200 -mx-4 md:-mx-8 px-8': _ctx.headerBorder,\n\t\t\t\t\t\t\t}])\n }, [\n _renderSlot(_ctx.$slots, \"backButton\", { class: \"\" }),\n (_ctx.error)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, _hoisted_4))\n : (_ctx.warning)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, _hoisted_7))\n : (_ctx.success)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, _hoisted_10))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"h2\", _hoisted_11, [\n _renderSlot(_ctx.$slots, \"title\")\n ])\n ], 2))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"pb-3 text-gray-600\", [\n\t\t\t\t\t\t\t\t!_ctx.$slots.title ? 'pt-6' : _ctx.error || _ctx.warning || _ctx.success ? 'pt-4' : 'pt-3',\n\t\t\t\t\t\t\t]])\n }, [\n _renderSlot(_ctx.$slots, \"body\")\n ], 2)\n ], 2),\n (_ctx.showActions)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: _normalizeClass([\"z-50 flex flex-col items-center pt-2 pb-2 pr-2 mt-auto md:flex-row\", {\n\t\t\t\t\t\t\t'border-t border-gray-200': _ctx.footerBorder,\n\t\t\t\t\t\t}])\n }, [\n _createElementVNode(\"div\", _hoisted_12, [\n _renderSlot(_ctx.$slots, \"footerButtons\")\n ]),\n _createElementVNode(\"div\", _hoisted_13, [\n _createVNode(_component_Btn, {\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.emitChoice('yes'))),\n variant: 'primary-borderless',\n disabled: _ctx.disableOk\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.yesText ||\n\t\t\t\t\t\t\t\t\t(_ctx.confirmOnly\n\t\t\t\t\t\t\t\t\t\t? _ctx.$t(\"dialog.default_ok_text\")\n\t\t\t\t\t\t\t\t\t\t: _ctx.$t(\"dialog.default_yes_text\"))), 1)\n ]),\n _: 1\n }, 8, [\"disabled\"]),\n (!_ctx.confirmOnly)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 0,\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.emitChoice('no'))),\n variant: 'primary-borderless'\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.noText || _ctx.$t(\"dialog.default_no_text\")), 1)\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true)\n ])\n ], 2))\n : _createCommentVNode(\"\", true)\n ], 6))\n : _createCommentVNode(\"\", true)\n ]),\n _: 3\n })\n ])\n ]),\n _: 3\n }, 512)), [\n [_vShow, _ctx.showDialog]\n ])\n}","\nimport { defineComponent } from \"@vue/runtime-core\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport LinearProgress from \"./LinearProgress.vue\";\nexport default defineComponent({\n\tname: \"Dialog\",\n\tprops: {\n\t\ttitle: String,\n\t\tfullHeight: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tfullWidth: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tlarge: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tstickyHeader: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tshowDialog: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tdismissible: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tseverity: {\n\t\t\ttype: Number,\n\t\t\tdefault: 1,\n\t\t},\n\t\tyesText: {\n\t\t\ttype: String,\n\t\t\tdefault: \"\",\n\t\t},\n\t\tnoText: {\n\t\t\ttype: String,\n\t\t\tdefault: \"\",\n\t\t},\n\t\terror: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\twarning: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tsuccess: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\theaderBorder: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tfooterBorder: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tnoPadding: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tshowActions: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tconfirmOnly: Boolean,\n\t\tdisableOk: Boolean,\n\t\tdialogBoxClasses: {\n\t\t\ttype: String,\n\t\t\tdefault: \"\",\n\t\t},\n\t},\n\tcomponents: {\n\t\tBtn,\n\t\tLinearProgress,\n\t},\n\tbeforeUnmount() {\n\t\tconst bodyContainsOverflowHidden =\n\t\t\tdocument.body.classList.contains(\"overflow-y-hidden\");\n\t\tif (bodyContainsOverflowHidden) {\n\t\t\tdocument.body.classList.remove(\"overflow-y-hidden\");\n\t\t}\n\t},\n\twatch: {\n\t\tshowDialog(newVal) {\n\t\t\t// prevent scrolling of the underlying page when dialog is open\n\t\t\tconst bodyContainsOverflowHidden =\n\t\t\t\tdocument.body.classList.contains(\"overflow-y-hidden\");\n\n\t\t\tif (newVal && !bodyContainsOverflowHidden) {\n\t\t\t\tdocument.body.classList.add(\"overflow-y-hidden\");\n\t\t\t} else if (!newVal && bodyContainsOverflowHidden) {\n\t\t\t\tdocument.body.classList.remove(\"overflow-y-hidden\");\n\t\t\t}\n\t\t},\n\t},\n\tcreated() {\n\t\tsetTimeout(() => (this.showContent = true), 0);\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tchoice: \"\",\n\t\t\tshowContent: false,\n\t\t};\n\t},\n\tmethods: {\n\t\temitChoice(choice: string) {\n\t\t\tthis.$emit(choice);\n\t\t},\n\t\tdismiss() {\n\t\t\tif (!this.dismissible) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.emitChoice(this.confirmOnly ? \"yes\" : \"no\");\n\t\t},\n\t},\n});\n","import { render } from \"./Dialog.vue?vue&type=template&id=f0ab2976&ts=true\"\nimport script from \"./Dialog.vue?vue&type=script&lang=ts\"\nexport * from \"./Dialog.vue?vue&type=script&lang=ts\"\n\nimport \"./Dialog.vue?vue&type=style&index=0&id=f0ab2976&lang=css\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { vModelText as _vModelText, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, withDirectives as _withDirectives, renderSlot as _renderSlot, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = [\"min\", \"max\", \"disabled\", \"id\"]\nconst _hoisted_2 = { class: \"absolute bottom-1.5 origin-0 -z-1 w-full\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"absolute bottom-0.5 right-1.5 -z-1\"\n}\nconst _hoisted_4 = {\n key: 1,\n class: \"absolute z-10 -mb-1.25px opacity-70 bottom-2 text-muted right-7\"\n}\nconst _hoisted_5 = {\n key: 2,\n style: {\"bottom\":\"3.2px\"},\n class: \"absolute left-1.5 -z-1\"\n}\nconst _hoisted_6 = {\n key: 3,\n class: \"hidden text-sm font-light text-danger-dark\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([{\n\t\t\t'border-danger-dark focus-within:border-danger-dark': _ctx.$slots.errors,\n\t\t\t'py-1.5 px-2': !_ctx.small,\n\t\t\t'py-0.5 px-1 w-20': _ctx.small,\n\t\t\t'bg-light': _ctx.filled,\n\t\t}, \"relative z-10 duration-300 border-b-2 rounded-t-sm light-input darken-on-hover transition-border focus-within:border-primary\"])\n }, [\n _withDirectives(_createElementVNode(\"input\", {\n type: \"number\",\n min: _ctx.min,\n max: _ctx.max,\n onBlur: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('blur'))),\n disabled: _ctx.disabled,\n placeholder: \" \",\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((_ctx.proxyModelValue) = $event)),\n id: _ctx.elementId,\n class: _normalizeClass([\"z-10 block w-full bg-transparent appearance-none floating-label focus:outline-none\", {\n\t\t\t\t'pl-5': _ctx.leftIcon.length > 0,\n\t\t\t\t'floating-label-error': _ctx.$slots.errors?.(),\n\t\t\t}])\n }, null, 42, _hoisted_1), [\n [\n _vModelText,\n _ctx.proxyModelValue,\n void 0,\n { number: true }\n ]\n ]),\n _createElementVNode(\"label\", _hoisted_2, [\n _renderSlot(_ctx.$slots, \"default\")\n ]),\n (_ctx.rightIcon.length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createElementVNode(\"span\", {\n class: _normalizeClass([\"text-base text-muted\", [_ctx.iconFilled ? 'material-icons' : 'material-icons-outlined']])\n }, _toDisplayString(_ctx.rightIcon), 3)\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.$slots.rightHint)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _renderSlot(_ctx.$slots, \"rightHint\")\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.leftIcon.length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createElementVNode(\"span\", {\n class: _normalizeClass([\"text-base text-muted\", [_ctx.iconFilled ? 'material-icons' : 'material-icons-outlined']])\n }, _toDisplayString(_ctx.leftIcon), 3)\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.$slots.errors?.())\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _renderSlot(_ctx.$slots, \"errors\")\n ]))\n : _createCommentVNode(\"\", true)\n ], 2))\n}","\nimport { defineComponent } from \"@vue/runtime-core\";\n\nexport default defineComponent({\n\tname: \"NumberInput\",\n\tprops: {\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tmodelValue: {\n\t\t\ttype: [Number, String],\n\t\t\trequired: true,\n\t\t},\n\t\trightIcon: {\n\t\t\ttype: String,\n\t\t\tdefault: \"\",\n\t\t},\n\t\tleftIcon: {\n\t\t\ttype: String,\n\t\t\tdefault: \"\",\n\t\t},\n\t\ticonFilled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tmin: {\n\t\t\ttype: Number,\n\t\t\tdefault: -1000000000,\n\t\t},\n\t\tmax: {\n\t\t\ttype: Number,\n\t\t\tdefault: 1000000000,\n\t\t},\n\t\tsmall: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tfilled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\telementId: {\n\t\t\ttype: String,\n\t\t\tdefault: \"\",\n\t\t},\n\t},\n\t// methods: {\n\t// onInput(value: string) {\n\t// this.$emit(\"update:modelValue\", value);\n\t// },\n\t// },\n\tcomputed: {\n\t\tproxyModelValue: {\n\t\t\tget() {\n\t\t\t\treturn this.modelValue;\n\t\t\t},\n\t\t\tset(value: any) {\n\t\t\t\t// TODO allow 2 decimal digits with \"^\\d*(\\.\\d{0,2})?$\"\n\t\t\t\tthis.$emit(\"update:modelValue\", value);\n\t\t\t},\n\t\t},\n\t},\n});\n","import { render } from \"./NumberInput.vue?vue&type=template&id=60104c28&ts=true\"\nimport script from \"./NumberInput.vue?vue&type=script&lang=ts\"\nexport * from \"./NumberInput.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { courseIdMixin, eventIdMixin, loadingMixin } from \"@/mixins\";\nimport {\n\tROUTE_TITLE_COURSE_NAME_TOKEN,\n\tROUTE_TITLE_EVENT_NAME_TOKEN,\n} from \"@/navigation/const\";\nimport { SidebarOption } from \"@/navigation/sidebar\";\nimport { defineComponent } from \"@vue/runtime-core\";\nimport ErrorView from \"../shared/ErrorView.vue\";\nimport SnackBar from \"@/components/ui/SnackBar.vue\";\nimport BreadCrumbs from \"@/components/ui/BreadCrumbs.vue\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport { isDemoMode } from \"@/utils\";\nimport Dialog from \"@/components/ui/Dialog.vue\";\nimport NumberInput from \"@/components/ui/NumberInput.vue\";\nimport { mapStores } from \"pinia\";\nimport { useMainStore } from \"@/stores/mainStore\";\nimport { useMetaStore } from \"@/stores/metaStore\";\nimport AppBar from \"@/components/ui/AppBar.vue\";\n\nexport default defineComponent({\n\tname: \"MainStudent\",\n\tdata() {\n\t\treturn {\n\t\t\teditingMat: false,\n\t\t\tdirtyMat: \"\",\n\t\t};\n\t},\n\tmixins: [courseIdMixin, eventIdMixin, loadingMixin],\n\tmethods: {\n\t\treplaceTitleTokens(str: string) {\n\t\t\treturn str\n\t\t\t\t?.replace(ROUTE_TITLE_COURSE_NAME_TOKEN, this.currentCourse.name)\n\t\t\t\t?.replace(ROUTE_TITLE_EVENT_NAME_TOKEN, this.currentEvent);\n\t\t},\n\t\tonShowMatEdit() {\n\t\t\tthis.dirtyMat = this.metaStore.user.mat;\n\t\t\tthis.editingMat = true;\n\t\t},\n\t\tasync onSaveMat() {\n\t\t\tawait this.withLoading(async () =>\n\t\t\t\tthis.metaStore.patchUser({\n\t\t\t\t\tuserId: this.metaStore.user.id,\n\t\t\t\t\tchanges: { mat: this.dirtyMat },\n\t\t\t\t}),\n\t\t\t);\n\t\t\tthis.editingMat = false;\n\t\t\tthis.metaStore.showSuccessFeedback();\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore, useMetaStore),\n\t\tisDemoMode() {\n\t\t\treturn isDemoMode();\n\t\t},\n\t\tlogoUrl() {\n\t\t\tif (!this.isDemoMode) {\n\t\t\t\treturn require(\"../../../public/unipi-logo.svg\");\n\t\t\t}\n\t\t\treturn require(\"../../../public/evo_logo.png\");\n\t\t},\n\t\t// sidebarOptions(): SidebarOption[] {\n\t\t// \treturn (this.$route.meta?.sidebarOptions ?? []) as SidebarOption[];\n\t\t// },\n\t\trouteTitle(): string {\n\t\t\treturn this.replaceTitleTokens(this.$route.meta.routeTitle as string);\n\t\t},\n\t\tshowSecondaryHeader(): boolean {\n\t\t\t// hide header in routes that have a sidebar\n\t\t\treturn !this.$route.matched.map(m => m.name).includes(\"StudentCourseDashboard\");\n\t\t},\n\t},\n\tcomponents: {\n\t\t// ErrorView,\n\t\t// SnackBar,\n\t\t//BreadCrumbs,\n\t\tDialog,\n\t\tNumberInput,\n\t},\n});\n","import { render } from \"./MainStudent.vue?vue&type=template&id=4a0b0c74&ts=true\"\nimport script from \"./MainStudent.vue?vue&type=script&lang=ts\"\nexport * from \"./MainStudent.vue?vue&type=script&lang=ts\"\n\nimport \"./MainStudent.vue?vue&type=style&index=0&id=4a0b0c74&lang=css\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode } from \"vue\"\n\nconst _hoisted_1 = { key: 0 }\nconst _hoisted_2 = {\n key: 1,\n style: {\"filter\":\"blur(5px)\"},\n class: \"opacity-50\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Dialog = _resolveComponent(\"Dialog\")!\n\n return (_openBlock(), _createElementBlock(\"div\", null, [\n _createVNode(_component_Dialog, {\n onYes: _cache[0] || (_cache[0] = ($event: any) => (_ctx.onEnroll())),\n disableOk: _ctx.enrolling,\n dismissible: false,\n onNo: _cache[1] || (_cache[1] = ($event: any) => (_ctx.onCancel())),\n showDialog: true,\n loading: _ctx.enrolling,\n yesText: _ctx.enrolling ? _ctx.$t('misc.wait') : _ctx.$t('enrollment.enroll'),\n noText: _ctx.$t('dialog.default_cancel_text')\n }, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"enrollment.enrollment\")), 1)\n ]),\n body: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"enrollment.do_you_want_to_enroll\")) + \" \", 1),\n (_ctx.currentCourse.name)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_1, _toDisplayString(_ctx.currentCourse.name), 1))\n : (_openBlock(), _createElementBlock(\"span\", _hoisted_2, \"course name\")),\n _createTextVNode(\"?\")\n ]),\n _: 1\n }, 8, [\"disableOk\", \"loading\", \"yesText\", \"noText\"])\n ]))\n}","\nimport Dialog from \"@/components/ui/Dialog.vue\";\nimport { courseIdMixin } from \"@/mixins\";\nimport { useMainStore } from \"@/stores/mainStore\";\nimport { useMetaStore } from \"@/stores/metaStore\";\nimport { setErrorNotification } from \"@/utils\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport { mapStores } from \"pinia\";\nimport { Course } from \"../../models\";\nexport default defineComponent({\n\tname: \"CourseEnrollment\",\n\tprops: {},\n\twatch: {\n\t\tcurrentCourse(newVal: Course | undefined) {\n\t\t\tif (newVal?.enrolled) {\n\t\t\t\tthis.$router.push({ name: \"StudentCourseDashboard\" });\n\t\t\t}\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tenrolling: false,\n\t\t};\n\t},\n\tmixins: [courseIdMixin],\n\tmethods: {\n\t\tasync onEnroll() {\n\t\t\tthis.enrolling = true;\n\t\t\ttry {\n\t\t\t\tawait this.mainStore.selfEnrollInCourse({ courseId: this.courseId });\n\t\t\t\tif (this.$router.currentRoute.value.query.redirect) {\n\t\t\t\t\tthis.$router.push(this.$router.currentRoute.value.query.redirect as string);\n\t\t\t\t} else {\n\t\t\t\t\tthis.$router.push({ name: \"StudentCourseList\" });\n\t\t\t\t}\n\t\t\t\tthis.metaStore.showSuccessFeedback();\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t} finally {\n\t\t\t\tthis.enrolling = false;\n\t\t\t}\n\t\t},\n\t\tonCancel() {\n\t\t\tthis.$router.push({ name: \"StudentCourseList\" });\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore, useMetaStore),\n\t},\n\tcomponents: { Dialog },\n});\n","import { render } from \"./CourseEnrollment.vue?vue&type=template&id=b4622c58&ts=true\"\nimport script from \"./CourseEnrollment.vue?vue&type=script&lang=ts\"\nexport * from \"./CourseEnrollment.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createBlock as _createBlock, renderList as _renderList, Fragment as _Fragment, createSlots as _createSlots } from \"vue\"\n\nconst _hoisted_1 = { class: \"pb-4\" }\nconst _hoisted_2 = { key: 0 }\nconst _hoisted_3 = {\n key: 0,\n class: \"mb-4 banner banner-danger\"\n}\nconst _hoisted_4 = { class: \"w-full\" }\nconst _hoisted_5 = { class: \"flex items-center space-x-3\" }\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined text-danger-dark\" }, \" school \", -1)\nconst _hoisted_7 = { class: \"font-semibold text-danger-dark\" }\nconst _hoisted_8 = { key: 0 }\nconst _hoisted_9 = { class: \"text-danger-dark\" }\nconst _hoisted_10 = { class: \"flex items-center mt-8 space-x-3\" }\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"opacity-0 material-icons-outlined\" }, \" school \", -1)\nconst _hoisted_12 = { class: \"grid gap-4 md:gap-8 md:grid-cols-2 lg:grid-cols-3 2xl:grid-cols-4\" }\nconst _hoisted_13 = {\n key: 1,\n class: \"grid gap-8 md:grid-cols-2 lg:grid-cols-3 2xl:grid-cols-4\"\n}\nconst _hoisted_14 = {\n key: 2,\n class: \"flex flex-col w-full text-center select-none mt-28\"\n}\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"span\", {\n style: {\"font-size\":\"5rem\"},\n class: \"mr-auto material-icons-outlined opacity-10\"\n}, \" west \", -1)\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"p\", {\n style: {\"font-size\":\"10rem\"},\n class: \"-mt-12 material-icons-outlined opacity-10\"\n}, \" book \", -1)\nconst _hoisted_17 = { class: \"opacity-40\" }\nconst _hoisted_18 = {\n key: 3,\n class: \"flex flex-col w-full text-center select-none mt-28\"\n}\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"p\", {\n style: {\"font-size\":\"10rem\"},\n class: \"-mt-12 material-icons-outlined opacity-10\"\n}, \" search_off \", -1)\nconst _hoisted_20 = { class: \"opacity-40\" }\nconst _hoisted_21 = { key: 0 }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_CourseSearchFilters = _resolveComponent(\"CourseSearchFilters\")!\n const _component_NumberInput = _resolveComponent(\"NumberInput\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_StudentScopesBanner = _resolveComponent(\"StudentScopesBanner\")!\n const _component_CourseListItem = _resolveComponent(\"CourseListItem\")!\n const _component_CourseListItemSkeleton = _resolveComponent(\"CourseListItemSkeleton\")!\n const _component_Dialog = _resolveComponent(\"Dialog\")!\n const _component_v_tour = _resolveComponent(\"v-tour\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (!_ctx.firstLoading)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createVNode(_component_CourseSearchFilters, {\n class: \"mb-8\",\n modelValue: _ctx.searchFilters,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.searchFilters) = $event))\n }, null, 8, [\"modelValue\"]),\n (!_ctx.metaStore.user.is_teacher && !_ctx.metaStore.user.mat && !_ctx.isDemoMode)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", _hoisted_5, [\n _hoisted_6,\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"p\", _hoisted_7, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"student_data.you_havent_yet\")) + \" \", 1),\n (!_ctx.metaStore.user.mat)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_8, _toDisplayString(_ctx.$t(\"student_data.missing_mat\")), 1))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"p\", _hoisted_9, _toDisplayString(_ctx.$t(\"student_data.insert_mat_and_course\")), 1)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_10, [\n _hoisted_11,\n _createVNode(_component_NumberInput, {\n class: \"w-96 text-darkText\",\n modelValue: _ctx.dirtyMat,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((_ctx.dirtyMat) = $event))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"student_data.your_mat\")), 1)\n ]),\n _: 1\n }, 8, [\"modelValue\"]),\n _createVNode(_component_Btn, {\n variant: 'primary',\n loading: _ctx.localLoading,\n disabled: String(_ctx.dirtyMat).length === 0,\n onClick: _ctx.onSaveMat,\n class: \"ml-auto\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"misc.save_and_close\")), 1)\n ]),\n _: 1\n }, 8, [\"loading\", \"disabled\", \"onClick\"])\n ])\n ])\n ]))\n : _createCommentVNode(\"\", true),\n (!_ctx.metaStore.user.is_teacher)\n ? (_openBlock(), _createBlock(_component_StudentScopesBanner, { key: 1 }))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_12, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.coursesFiltered, (course, index) => {\n return (_openBlock(), _createBlock(_component_CourseListItem, {\n key: 'course-' + course.id,\n course: course,\n id: index === 0 ? 'course-0' : '',\n onToggleFavorite: ($event: any) => (_ctx.onCourseToggleFavorite(course)),\n onEnroll: ($event: any) => (_ctx.onEnrollChange(course, 'enroll')),\n onUnenroll: ($event: any) => (_ctx.onEnrollChange(course, 'unenroll'))\n }, null, 8, [\"course\", \"id\", \"onToggleFavorite\", \"onEnroll\", \"onUnenroll\"]))\n }), 128))\n ])\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [\n _createVNode(_component_CourseListItemSkeleton),\n _createVNode(_component_CourseListItemSkeleton),\n _createVNode(_component_CourseListItemSkeleton),\n _createVNode(_component_CourseListItemSkeleton),\n _createVNode(_component_CourseListItemSkeleton),\n _createVNode(_component_CourseListItemSkeleton),\n _createVNode(_component_CourseListItemSkeleton, { class: \"2xl:block hidden\" }),\n _createVNode(_component_CourseListItemSkeleton, { class: \"2xl:block hidden\" }),\n _createVNode(_component_CourseListItemSkeleton, { class: \"2xl:block hidden\" }),\n _createVNode(_component_CourseListItemSkeleton, { class: \"2xl:block hidden\" })\n ])),\n (!_ctx.firstLoading && _ctx.mainStore.courses.length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_14, [\n _hoisted_15,\n _hoisted_16,\n _createElementVNode(\"h2\", _hoisted_17, _toDisplayString(_ctx.$t(\"course_list.no_courses\")), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (!_ctx.firstLoading && _ctx.mainStore.courses.length > 0 && _ctx.coursesFiltered.length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_18, [\n _hoisted_19,\n _createElementVNode(\"h2\", _hoisted_20, _toDisplayString(_ctx.$t(\"course_list.no_courses_with_filters\")), 1)\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_Dialog, {\n loading: _ctx.enrollmentLoading,\n yesText: \n\t\t\t\t_ctx.enrollmentLoading\n\t\t\t\t\t? _ctx.$t('misc.wait')\n\t\t\t\t\t: _ctx.enrollmentDialogMode === 'enroll'\n\t\t\t\t\t? _ctx.$t('enrollment.enroll')\n\t\t\t\t\t: _ctx.$t('enrollment.unenroll')\n\t\t\t,\n noText: _ctx.$t('dialog.default_cancel_text'),\n disableOk: _ctx.enrollmentLoading,\n showDialog: _ctx.showBlockingDialog,\n onYes: _cache[2] || (_cache[2] = ($event: any) => (_ctx.resolveBlockingDialog(true))),\n onNo: _cache[3] || (_cache[3] = ($event: any) => (_ctx.resolveBlockingDialog(false)))\n }, _createSlots({\n body: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.enrollmentDialogMode === \"enroll\"\n\t\t\t\t\t\t? _ctx.$t(\"enrollment.do_you_want_to_enroll\")\n\t\t\t\t\t\t: _ctx.$t(\"enrollment.do_you_want_to_unenroll\")) + \" \", 1),\n (_ctx.selectedCourseForEnrollment)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_21, _toDisplayString(_ctx.selectedCourseForEnrollment.name), 1))\n : _createCommentVNode(\"\", true),\n _createTextVNode(\" ?\")\n ]),\n _: 2\n }, [\n (_ctx.enrollmentDialogMode === 'enroll')\n ? {\n name: \"title\",\n fn: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"enrollment.enrollment\")), 1)\n ]),\n key: \"0\"\n }\n : undefined\n ]), 1032, [\"loading\", \"yesText\", \"noText\", \"disableOk\", \"showDialog\"]),\n _createVNode(_component_v_tour, {\n name: \"demoCourseTour\",\n steps: _ctx.demoCourseTourSteps,\n options: _ctx.tourOptions\n }, null, 8, [\"steps\", \"options\"])\n ]))\n}","import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, createTextVNode as _createTextVNode, createVNode as _createVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex flex-col px-6 py-6 overflow-x-hidden md:min-h-13rem lg:overflow-x-visible card card-border card-hoverable hover-shadow-elevation hover:border-transparent relative\" }\nconst _hoisted_2 = { class: \"text-darkText course-header bg-light bg-opacity-0 flex items-start py-4 -mt-4 rounded-t\" }\nconst _hoisted_3 = { class: \"flex items-start space-x-2\" }\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"div\", {\n style: {\"min-height\":\"2.8rem\",\"min-width\":\"2.8rem\",\"max-height\":\"2.8rem\",\"max-width\":\"2.8rem\"},\n class: \"w-8 h-8 flex mb-full rounded-full bg-primary bg-opacity-15\"\n}, [\n /*#__PURE__*/_createElementVNode(\"span\", {\n style: {\"font-size\":\"2.05rem\"},\n class: \"m-auto text-primary material-icons-outlined icon-light\"\n }, \" book \")\n], -1)\nconst _hoisted_5 = { class: \"mb-auto mt-0.5\" }\nconst _hoisted_6 = {\n style: {\"line-height\":\"25px\",\"font-size\":\"20px\"},\n class: \"hidden lg:block mb-1.5 pr-4.5 font-normal\"\n}\nconst _hoisted_7 = {\n style: {\"line-height\":\"22px\"},\n class: \"lg:hidden mb-1.5 pr-4.5 font-normal\"\n}\nconst _hoisted_8 = {\n style: {\"font-weight\":\"400\"},\n class: \"-mb-0.5 text-xs text-muted uppercase\"\n}\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mr-4 text-lg opacity-50 inline-icon icon-light material-icons-outlined\" }, \" visibility_off \", -1)\nconst _hoisted_10 = { class: \"my-1\" }\nconst _hoisted_11 = [\"title\"]\nconst _hoisted_12 = { class: \"mt-auto flex w-full\" }\nconst _hoisted_13 = { class: \"flex flex-col mt-auto space-y-1.5\" }\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons mr-2\" }, \"person_add\", -1)\nconst _hoisted_15 = { class: \"text-base 2xl:text-lg\" }\nconst _hoisted_16 = { class: \"text-base 2xl:text-lg\" }\nconst _hoisted_17 = { class: \"ml-auto flex items-center mt-auto\" }\nconst _hoisted_18 = { class: \"material-icons\" }\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons\" }, \"person_remove\", -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Tooltip = _resolveComponent(\"Tooltip\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_CopyToClipboard = _resolveComponent(\"CopyToClipboard\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"div\", _hoisted_3, [\n _hoisted_4,\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"h3\", _hoisted_6, _toDisplayString(_ctx.course.name), 1),\n _createElementVNode(\"h4\", _hoisted_7, _toDisplayString(_ctx.course.name), 1),\n _createElementVNode(\"p\", _hoisted_8, _toDisplayString(_ctx.course.creator?.full_name), 1)\n ])\n ])\n ]),\n (_ctx.course.hidden)\n ? (_openBlock(), _createBlock(_component_Tooltip, {\n key: 0,\n textCode: 'hidden_course',\n placement: 'bottom',\n noArrow: true,\n class: \"mt-1 ml-1\"\n }, {\n default: _withCtx(() => [\n _hoisted_9\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_10, [\n (_ctx.formattedDescription)\n ? (_openBlock(), _createElementBlock(\"p\", {\n key: 0,\n style: {\"line-height\":\"1.2rem\",\"font-weight\":\"400\",\"opacity\":\"0.8\"},\n class: \"my-3 text-sm\",\n title: _ctx.course.description\n }, _toDisplayString(_ctx.formattedDescription), 9, _hoisted_11))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_12, [\n _createElementVNode(\"div\", _hoisted_13, [\n (!_ctx.canAccessCoursePanel && !_ctx.course.enrolled)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 0,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('enroll'))),\n size: 'sm',\n variant: 'primary',\n outline: true\n }, {\n default: _withCtx(() => [\n _hoisted_14,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t(\"enrollment.enroll\")), 1)\n ]),\n _: 1\n }))\n : (_openBlock(), _createBlock(_component_router_link, {\n key: 1,\n class: \"w-full\",\n to: {\n\t\t\t\t\t\tname: 'StudentCourseDashboard',\n\t\t\t\t\t\tparams: { courseId: _ctx.course.id },\n\t\t\t\t\t}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Btn, {\n size: 'xs',\n variant: 'primary-borderless',\n outline: true,\n class: \"whitespace-nowrap font-medium\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", _hoisted_15, _toDisplayString(_ctx.metaStore.user.is_teacher || _ctx.canAccessCoursePanel\n\t\t\t\t\t\t\t\t? _ctx.$t(\"courses.access_as_student\")\n\t\t\t\t\t\t\t\t: _ctx.$t(\"courses.go_to_course\")), 1)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"to\"])),\n (_ctx.canAccessCoursePanel)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 2,\n class: \"\",\n to: {\n\t\t\t\t\t\tname: 'TeacherCourseDashboard',\n\t\t\t\t\t\tparams: { courseId: _ctx.course.id },\n\t\t\t\t\t}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Btn, {\n size: 'xs',\n outline: true,\n variant: 'primary-borderless',\n class: \"font-medium\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", _hoisted_16, _toDisplayString(_ctx.$t(\"courses.course_panel\")), 1)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"to\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_17, [\n _createVNode(_component_Btn, {\n variant: 'icon',\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$emit('toggleFavorite'))),\n outline: true\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", _hoisted_18, _toDisplayString(_ctx.course.bookmarked ? \"bookmark\" : \"bookmark_outline\"), 1)\n ]),\n _: 1\n }),\n (_ctx.course.enrolled)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 0,\n variant: 'icon',\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.$emit('unenroll'))),\n outline: true,\n tooltip: _ctx.$t('enrollment.unenroll')\n }, {\n default: _withCtx(() => [\n _hoisted_19\n ]),\n _: 1\n }, 8, [\"tooltip\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_CopyToClipboard, {\n iconOnly: true,\n tooltip: _ctx.$t('misc.share'),\n confirmationMessage: _ctx.$t('event_preview.copied_link'),\n value: _ctx.permalink\n }, null, 8, [\"tooltip\", \"confirmationMessage\", \"value\"])\n ])\n ])\n ]))\n}","\n//import Card from \"@/components/ui/Card.vue\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport { Course } from \"@/models\";\nimport { useMetaStore } from \"@/stores/metaStore\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport { mapStores } from \"pinia\";\nimport CopyToClipboard from \"../ui/CopyToClipboard.vue\";\nimport Tooltip from \"../ui/Tooltip.vue\";\nexport default defineComponent({\n\tname: \"CourseListItem\",\n\tprops: {\n\t\tcourse: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {};\n\t},\n\tcomponents: {\n\t\t//Card,\n\t\tBtn,\n\t\tTooltip,\n\t\tCopyToClipboard,\n\t},\n\tcomputed: {\n\t\t...mapStores(useMetaStore),\n\t\tpermalink() {\n\t\t\treturn (\n\t\t\t\twindow.location.origin +\n\t\t\t\tthis.$router.resolve({\n\t\t\t\t\tname: \"CourseDispatcher\",\n\t\t\t\t\tparams: { courseId: this.course.id },\n\t\t\t\t}).fullPath\n\t\t\t);\n\t\t},\n\t\tcanAccessCoursePanel(): boolean {\n\t\t\treturn (\n\t\t\t\tthis.course.creator?.id === this.metaStore.user.id ||\n\t\t\t\t(this.course.privileges?.length ?? 0) > 0\n\t\t\t);\n\t\t},\n\t\tformattedDescription() {\n\t\t\tconst MAX_DESC_LENGTH = 150;\n\t\t\tconst description = this.course.description ?? \"\";\n\t\t\treturn (\n\t\t\t\tdescription.slice(0, MAX_DESC_LENGTH) +\n\t\t\t\t(description.length > MAX_DESC_LENGTH ? \"...\" : \"\")\n\t\t\t);\n\t\t},\n\t\t// bookmarkColor() {\n\t\t// \treturn getColorFromString(this.course.name);\n\t\t// \t// return [\n\t\t// \t// \t\"#000066\",\n\t\t// \t// \t\"#310987\",\n\t\t// \t// \t\"#4f24a1\",\n\t\t// \t// \t\"#6b3cbc\",\n\t\t// \t// \t\"#8654d7\",\n\t\t// \t// \t\"#a26df3\",\n\t\t// \t// \t\"#c189fe\",\n\t\t// \t// \t\"#e1a7ff\",\n\t\t// \t// \t\"#ffc5ff\",\n\t\t// \t// ][this.course.name.length % 9];\n\t\t// },\n\t},\n\t// methods: {\n\t// \tgetColorFromString,\n\t// },\n});\n","import { render } from \"./CourseListItem.vue?vue&type=template&id=2d28a811&ts=true\"\nimport script from \"./CourseListItem.vue?vue&type=script&lang=ts\"\nexport * from \"./CourseListItem.vue?vue&type=script&lang=ts\"\n\nimport \"./CourseListItem.vue?vue&type=style&index=0&id=2d28a811&lang=css\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"relative\" }, [\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"absolute flex space-x-4\" }, [\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-10 rounded-lg skeleton-unit\" }),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-28 lg:w-64 skeleton-unit\" })\n ]),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"flex items-center opacity-0\" }, [\n /*#__PURE__*/_createElementVNode(\"span\", { class: \"mr-2 material-icons\" }, \"book\"),\n /*#__PURE__*/_createElementVNode(\"h3\", null, \" \")\n ])\n], -1)\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"relative h-full\" }, [\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"absolute flex flex-col w-full h-full\" }, [\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-3/5 h-3 mb-1 skeleton-unit\" }),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-3/5 h-3 skeleton-unit\" }),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-full h-3 mt-8 mb-1 skeleton-unit\" }),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-full h-3 skeleton-unit\" }),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-full h-3 my-1 skeleton-unit\" }),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-full h-3 mb-auto skeleton-unit\" }),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-1/2 mx-auto mt-auto rounded-lg skeleton-unit\" })\n ]),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"flex items-center opacity-0\" }, [\n /*#__PURE__*/_createElementVNode(\"p\", { class: \"text-sm text-muted\" }, \" \"),\n /*#__PURE__*/_createElementVNode(\"p\", { class: \"text-sm text-muted\" }, \" \")\n ])\n], -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createBlock(_component_Card, {\n class: \"h-80\",\n hoverable: false\n }, {\n header: _withCtx(() => [\n _hoisted_1\n ]),\n body: _withCtx(() => [\n _hoisted_2\n ]),\n _: 1\n }))\n}","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, Transition as _Transition, withCtx as _withCtx, createVNode as _createVNode, renderSlot as _renderSlot, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = [\"tabindex\"]\nconst _hoisted_2 = { class: \"flex flex-col flex-grow w-full\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_LinearProgress = _resolveComponent(\"LinearProgress\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n tabindex: _ctx.focusable ? 0 : false,\n class: _normalizeClass([\"flex card\", {\n\t\t\t'card-border': !_ctx.highlighted && !_ctx.borderLess,\n\t\t\t'border-2': _ctx.highlighted,\n\t\t\t'card-hoverable hover:border-transparent hover-shadow-elevation': _ctx.hoverable,\n\t\t\t'card-filled': _ctx.filled,\n\t\t}])\n }, [\n _createVNode(_Transition, { name: \"fade\" }, {\n default: _withCtx(() => [\n (_ctx.loading)\n ? (_openBlock(), _createBlock(_component_LinearProgress, {\n key: 0,\n class: \"absolute top-0 left-0 rounded-t\"\n }))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }),\n _createElementVNode(\"div\", _hoisted_2, [\n (_ctx.$slots.header)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _renderSlot(_ctx.$slots, \"header\")\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.$slots.body)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: _normalizeClass([\"flex-grow\", {\n\t\t\t\t\t'mt-3': true || (_ctx.size == 'default' && _ctx.$slots.header),\n\t\t\t\t\t'mt-1.5': false && _ctx.size == 'sm',\n\t\t\t\t}])\n }, [\n _renderSlot(_ctx.$slots, \"body\")\n ], 2))\n : _createCommentVNode(\"\", true)\n ]),\n (_ctx.$slots.side)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: _normalizeClass([\"h-full\", {\n\t\t\t\t'w-40': _ctx.size == 'default' && !_ctx.expandSideOnSmall,\n\t\t\t\t'md:w-10 w-8': _ctx.size == 'sm' && !_ctx.expandSideOnSmall,\n\t\t\t\t'flex-grow md:w-52': _ctx.expandSideOnSmall,\n\t\t\t}])\n }, [\n _renderSlot(_ctx.$slots, \"side\")\n ], 2))\n : _createCommentVNode(\"\", true)\n ], 10, _hoisted_1))\n}","\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport LinearProgress from \"./LinearProgress.vue\";\n\nexport default defineComponent({\n\tname: \"Card\",\n\tprops: {\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tsize: {\n\t\t\ttype: String as PropType<\"sm\" | \"default\">,\n\t\t\tdefault: \"default\",\n\t\t},\n\t\texpandSideOnSmall: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\thighlighted: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tmarginLess: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tborderLess: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tfocusable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tfilled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\thoverable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t},\n\tcomponents: { LinearProgress },\n});\n","import { render } from \"./Card.vue?vue&type=template&id=ffebebd8&ts=true\"\nimport script from \"./Card.vue?vue&type=script&lang=ts\"\nexport * from \"./Card.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { defineComponent } from \"@vue/runtime-core\";\nimport Card from \"../Card.vue\";\nexport default defineComponent({\n\tname: \"CourseListItemSkeleton\",\n\tcomponents: { Card },\n});\n","import { render } from \"./CourseListItemSkeleton.vue?vue&type=template&id=2bff8e1e&ts=true\"\nimport script from \"./CourseListItemSkeleton.vue?vue&type=script&lang=ts\"\nexport * from \"./CourseListItemSkeleton.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, normalizeClass as _normalizeClass, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"mt-2 mb-12\" }\nconst _hoisted_2 = { class: \"flex flex-col mb-3 flex-wrap md:items-center md:flex-row\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_TextInput = _resolveComponent(\"TextInput\")!\n const _component_Toggle = _resolveComponent(\"Toggle\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_TextInput, {\n searchBar: true,\n leftIcon: 'search',\n placeholder: _ctx.$t('course_list.filter_courses'),\n class: _normalizeClass([\n\t\t\t\t\t!_ctx.anyCourseHasPrivileges && !_ctx.metaStore.user.is_teacher\n\t\t\t\t\t\t? 'w-full'\n\t\t\t\t\t\t: 'w-full md:w-1/2',\n\t\t\t\t\t'mt-2 mr-auto',\n\t\t\t\t]),\n modelValue: _ctx.modelValue.name,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => (_ctx.emitUpdate('name', $event)))\n }, null, 8, [\"placeholder\", \"class\", \"modelValue\"]),\n (_ctx.anyCourseHasPrivileges)\n ? (_openBlock(), _createBlock(_component_Toggle, {\n key: 0,\n \"label-on-left\": true,\n class: \"mt-2 mr-4\",\n modelValue: _ctx.modelValue.withPrivileges,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => (_ctx.emitUpdate('withPrivileges', $event)))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"course_list.courses_i_teach\")), 1)\n ]),\n _: 1\n }, 8, [\"modelValue\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.metaStore.user.is_teacher)\n ? (_openBlock(), _createBlock(_component_Toggle, {\n key: 1,\n class: \"mt-2 md:mt-4 lg:mt-2\",\n \"label-on-left\": true,\n modelValue: _ctx.modelValue.hidden,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => (_ctx.emitUpdate('hidden', $event)))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"course_list.hidden_courses\")), 1)\n ]),\n _: 1\n }, 8, [\"modelValue\"]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}","import { vModelCheckbox as _vModelCheckbox, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, withDirectives as _withDirectives, resolveDirective as _resolveDirective, openBlock as _openBlock, createElementBlock as _createElementBlock, renderSlot as _renderSlot, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = [\"value\", \"id\"]\nconst _hoisted_2 = { class: \"absolute w-12 h-12 transition-all duration-100 ease-in-out rounded-full bg-opacity-10 bg-primary toggle-shadow -top-4\" }\nconst _hoisted_3 = [\"for\"]\nconst _hoisted_4 = [\"for\"]\nconst _hoisted_5 = [\"for\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _directive_wave = _resolveDirective(\"wave\")!\n const _directive_wave_trigger = _resolveDirective(\"wave-trigger\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"flex items-center\", {\n\t\t\t'opacity-40 pointer-events-none': _ctx.disabled,\n\t\t}])\n }, [\n _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([{ 'order-12 ml-4': _ctx.labelOnLeft }, \"relative inline-block w-10 h-4 mt-1 mr-2 align-middle transition duration-200 ease-in bg-transparent rounded-full select-none toggle-container\"])\n }, [\n _withDirectives(_createElementVNode(\"input\", {\n style: {\"z-index\":\"3\"},\n type: \"checkbox\",\n name: \"toggle\",\n value: _ctx.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.proxyModelValue) = $event)),\n id: _ctx.overrideId || _ctx.id,\n class: _normalizeClass([{\n\t\t\t\t\t'bg-white': !_ctx.modelValue,\n\t\t\t\t\t'bg-primary': _ctx.modelValue,\n\t\t\t\t}, \"absolute -left-0.5 block transition-all duration-100 rounded-full toggle-handle appearance-none cursor-pointer hover:ring-0 ring-secondary active:ring-opacity-40 ring-opacity-20 toggle-checkbox\"])\n }, null, 10, _hoisted_1), [\n [_vModelCheckbox, _ctx.proxyModelValue]\n ]),\n _withDirectives(_createElementVNode(\"div\", _hoisted_2, null, 512), [\n [_directive_wave, { trigger: 'toggleCheckbox', color: '#666ad1' }]\n ]),\n _createElementVNode(\"label\", {\n style: {\"z-index\":\"4\"},\n for: _ctx.overrideId || _ctx.id,\n class: _normalizeClass([[_ctx.proxyModelValue ? 'text-light' : 'text-gray-600'], \"absolute text-lg font-semibold transform translate-y-1/2 cursor-pointer toggle-mark opacity-70 material-icons-outlined bottom-1/2\"])\n }, \" \", 10, _hoisted_3),\n _createElementVNode(\"label\", {\n style: {\"z-index\":\"2\"},\n for: _ctx.overrideId || _ctx.id,\n class: \"relative block overflow-hidden bg-gray-400 rounded-full cursor-pointer toggle-rail toggle-label\"\n }, null, 8, _hoisted_4)\n ], 2)), [\n [_directive_wave_trigger, void 0, \"toggleCheckbox\"]\n ]),\n (_ctx.$slots.default)\n ? (_openBlock(), _createElementBlock(\"label\", {\n key: 0,\n class: \"cursor-pointer\",\n for: _ctx.id\n }, [\n _renderSlot(_ctx.$slots, \"default\")\n ], 8, _hoisted_5))\n : _createCommentVNode(\"\", true)\n ], 2))\n}","\nimport { defineComponent } from \"@vue/runtime-core\";\nimport { v4 as uuid4 } from \"uuid\";\nexport default defineComponent({\n\tname: \"Toggle\",\n\tprops: {\n\t\tmodelValue: [Boolean, Array],\n\t\tvalue: {\n\t\t\tdefault: null,\n\t\t},\n\t\tlabelOnLeft: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\toverrideId: {\n\t\t\ttype: String,\n\t\t\tdefault: \"\",\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\twatch: {\n\t\tmodelValue() {\n\t\t\tthis.syncCheckboxState();\n\t\t},\n\t},\n\tcreated() {\n\t\tthis.id = uuid4();\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tid: \"\",\n\t\t};\n\t},\n\tmethods: {\n\t\tsyncCheckboxState() {\n\t\t\t// this is needed to keep the `checked` attribute of the checkbox element\n\t\t\t// in sync with the value of `modelValue`. whenever either an `update:modelValue`\n\t\t\t// event is emitted, or the value of the `modelValue` prop changes, we make sure\n\t\t\t// the checkbox is checked if and only if the value is truthy\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tconst checkboxElement = document.getElementById(this.id) as HTMLInputElement;\n\t\t\t\tif (checkboxElement && checkboxElement.checked !== this.modelValue) {\n\t\t\t\t\tcheckboxElement.checked = this.modelValue as boolean;\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t},\n\tcomputed: {\n\t\tproxyModelValue: {\n\t\t\tget() {\n\t\t\t\treturn this.modelValue;\n\t\t\t},\n\t\t\tset(val: unknown) {\n\t\t\t\tthis.$emit(\"update:modelValue\", val);\n\t\t\t\tthis.syncCheckboxState();\n\t\t\t},\n\t\t},\n\t},\n});\n","import { render } from \"./Toggle.vue?vue&type=template&id=9a8f2360&ts=true\"\nimport script from \"./Toggle.vue?vue&type=script&lang=ts\"\nexport * from \"./Toggle.vue?vue&type=script&lang=ts\"\n\nimport \"./Toggle.vue?vue&type=style&index=0&id=9a8f2360&lang=css\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { CourseSearchFilter } from \"@/api/interfaces\";\nimport { useMainStore } from \"@/stores/mainStore\";\nimport { useMetaStore } from \"@/stores/metaStore\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport { mapStores } from \"pinia\";\nimport TextInput from \"../ui/TextInput.vue\";\nimport Toggle from \"../ui/Toggle.vue\";\nexport default defineComponent({\n\tname: \"CourseSearchFilters\",\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tmethods: {\n\t\temitUpdate(key: keyof CourseSearchFilter, value: unknown) {\n\t\t\tthis.$emit(\"update:modelValue\", {\n\t\t\t\t...this.modelValue,\n\t\t\t\t[key]: value,\n\t\t\t});\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore, useMetaStore),\n\t\tanyCourseHasPrivileges(): boolean {\n\t\t\treturn (\n\t\t\t\tthis.metaStore.user.is_teacher ||\n\t\t\t\tthis.mainStore.courses.some(c => (c.privileges?.length ?? 0) > 0)\n\t\t\t);\n\t\t},\n\t},\n\tcomponents: { TextInput, Toggle },\n});\n","import { render } from \"./CourseSearchFilters.vue?vue&type=template&id=0b9cd0ec&ts=true\"\nimport script from \"./CourseSearchFilters.vue?vue&type=script&lang=ts\"\nexport * from \"./CourseSearchFilters.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, createVNode as _createVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, vShow as _vShow, normalizeClass as _normalizeClass, withDirectives as _withDirectives, Transition as _Transition, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex flex-col space-y-4\" }\nconst _hoisted_2 = { class: \"flex items-center space-x-2\" }\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons\" }, \"error_outline\", -1)\nconst _hoisted_4 = { class: \"mb-0\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ArticleHandle = _resolveComponent(\"ArticleHandle\")!\n const _component_GoogleScopeChecker = _resolveComponent(\"GoogleScopeChecker\")!\n const _component_HelpCenter = _resolveComponent(\"HelpCenter\")!\n\n return (_openBlock(), _createElementBlock(\"div\", null, [\n _createVNode(_Transition, { name: \"fade\" }, {\n default: _withCtx(() => [\n _withDirectives(_createElementVNode(\"div\", {\n class: _normalizeClass([\"banner banner-danger mb-8\", { shake: _ctx.googleIntegrationStore.studentScopesBannerShaking }]),\n role: \"alert\",\n onAnimationend: _cache[2] || (_cache[2] = ($event: any) => (_ctx.googleIntegrationStore.studentScopesBannerShaking = false))\n }, [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createElementVNode(\"h4\", _hoisted_4, _toDisplayString(_ctx.$t(\"misc.warning\")), 1)\n ]),\n _createVNode(_component_GoogleScopeChecker, {\n class: \"flex flex-col items-start space-y-4\",\n onScopesOk: _cache[0] || (_cache[0] = ($event: any) => (_ctx.onScopesOk())),\n onScopesCheckFailed: _cache[1] || (_cache[1] = ($event: any) => (_ctx.onScopesCheckFailed())),\n role: 'student'\n }, {\n noScopes: _withCtx(() => [\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t(\"integrations.classroom.student_no_scopes_warning\")), 1),\n _createElementVNode(\"p\", null, [\n _createVNode(_component_ArticleHandle, { articleId: 'why_evo_asks_for_google_scopes' }),\n _createTextVNode(\".\")\n ])\n ]),\n outstandingScopes: _withCtx(() => [\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t(\"integrations.classroom.student_no_scopes_warning\")), 1),\n _createElementVNode(\"p\", null, [\n _createVNode(_component_ArticleHandle, { articleId: 'why_evo_asks_for_google_scopes' }),\n _createTextVNode(\".\")\n ])\n ]),\n _: 1\n })\n ])\n ], 34), [\n [_vShow, _ctx.showMissingScopesBanner]\n ])\n ]),\n _: 1\n }),\n (_ctx.metaStore.helpCenterOpen)\n ? (_openBlock(), _createBlock(_component_HelpCenter, {\n key: 0,\n onClose: _cache[3] || (_cache[3] = ($event: any) => (_ctx.metaStore.setHelpCenterVisibility(false))),\n allowGoBack: false\n }))\n : _createCommentVNode(\"\", true)\n ]))\n}","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, renderSlot as _renderSlot, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, withCtx as _withCtx } from \"vue\"\nimport _imports_0 from '@/assets/google.png'\n\n\nconst _hoisted_1 = { class: \"relative\" }\nconst _hoisted_2 = {\n key: 1,\n class: \"\"\n}\nconst _hoisted_3 = { class: \"mb-4\" }\nconst _hoisted_4 = {\n key: 2,\n class: \"\"\n}\nconst _hoisted_5 = { class: \"mb-4\" }\nconst _hoisted_6 = { class: \"flex items-center space-x-2.5\" }\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"img\", {\n src: _imports_0,\n style: {\"width\":\"15px\"}\n}, null, -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Spinner = _resolveComponent(\"Spinner\")!\n const _component_GoogleScopesButton = _resolveComponent(\"GoogleScopesButton\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_ctx.loading)\n ? (_openBlock(), _createBlock(_component_Spinner, {\n key: 0,\n size: 'lg',\n class: \"absolute top-1/2 left-1/2 transform -translate-y-1/2 -translate-x-1/2\"\n }))\n : _createCommentVNode(\"\", true),\n (!_ctx.loading && _ctx.outstandingScopes.length === _ctx.scopes.length)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _renderSlot(_ctx.$slots, \"noScopes\", {}, () => [\n _createElementVNode(\"p\", _hoisted_3, _toDisplayString(_ctx.$t(\"integrations.classroom.grant_scopes_to_use_integration\")), 1)\n ])\n ]))\n : (\n\t\t\t\t!_ctx.loading &&\n\t\t\t\t_ctx.outstandingScopes.length > 0 &&\n\t\t\t\t_ctx.outstandingScopes.length < _ctx.scopes.length\n\t\t\t)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _renderSlot(_ctx.$slots, \"outstandingScopes\", {}, () => [\n _createElementVNode(\"p\", _hoisted_5, _toDisplayString(_ctx.$t(\"integrations.classroom.grant_scopes_to_use_integration\")), 1)\n ])\n ]))\n : _createCommentVNode(\"\", true),\n (!_ctx.loading && _ctx.outstandingScopes.length > 0)\n ? (_openBlock(), _createBlock(_component_GoogleScopesButton, {\n key: 3,\n getUrl: () => _ctx.googleIntegrationStore.getClassroomScopesAuthUrl(_ctx.role),\n onAuthDone: _cache[0] || (_cache[0] = ($event: any) => (_ctx.loadAuthorizedScopes()))\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_6, [\n _hoisted_7,\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t(\"integrations.classroom.grant_scopes_btn\")), 1)\n ])\n ]),\n _: 1\n }, 8, [\"getUrl\"]))\n : _createCommentVNode(\"\", true)\n ]))\n}","export const CLASSROOM_TEACHER_SCOPES = [\n\t\"https://www.googleapis.com/auth/classroom.courses.readonly\",\n\t\"https://www.googleapis.com/auth/classroom.announcements\",\n\t\"https://www.googleapis.com/auth/classroom.courseworkmaterials\",\n\t\"https://www.googleapis.com/auth/classroom.coursework.students\",\n\t\"https://www.googleapis.com/auth/classroom.rosters\",\n\t\"https://www.googleapis.com/auth/classroom.profile.emails\",\n];\n\nexport const CLASSROOM_STUDENT_SCOPES = [\n\t// \"https://www.googleapis.com/auth/classroom.rosters\",\n\t\"https://www.googleapis.com/auth/classroom.coursework.me\",\n];\n","import { defineStore } from \"pinia\";\nimport axios from \"axios\";\nimport {\n\tGoogleClassroomAnnouncementTwin,\n\tGoogleClassroomCourseData,\n\tGoogleClassroomCourseTwin,\n\tGoogleClassroomCourseWorkTwin,\n\tGoogleClassroomMaterialTwin,\n} from \"../classroom/interfaces\";\n\nexport const useGoogleIntegrationsStore = defineStore(\"googleIntegration\", {\n\tstate: () => ({\n\t\t// Google OAuth scopes that the user has granted access to\n\t\tauthorizedScopes: [] as string[],\n\t\t// maps course id's to their course twins (i.e. the Classroom course to\n\t\t// which they are paired), if they exist\n\t\tcourseTwins: {} as Record,\n\t\t// whether the student scopes banner is visible\n\t\tstudentScopesBannerVisible: false,\n\t\tstudentScopesBannerShaking: false,\n\t}),\n\tgetters: {},\n\tactions: {\n\t\t/**\n\t\t * Utility functions\n\t\t */\n\t\tasync getGoogleClassroomCoursesTaughtByCurrentUser(): Promise<\n\t\t\tGoogleClassroomCourseData[]\n\t\t> {\n\t\t\tconst response = await axios.get(`/integrations/classroom/classroom_courses/`);\n\t\t\treturn response.data;\n\t\t},\n\t\tasync getClassroomScopesAuthUrl(role: \"student\" | \"teacher\"): Promise {\n\t\t\t/**\n\t\t\t * Returns a URL that can be used to authenticate and grant scopes\n\t\t\t * that allow the application to use Classroom's features\n\t\t\t */\n\t\t\tconst response = await axios.get(`/integrations/classroom/auth_url/?role=${role}`);\n\t\t\treturn response.data;\n\t\t},\n\t\tasync getAuthorizedScopes(): Promise {\n\t\t\t/**\n\t\t\t * Returns an array of strings each representing a Google OAuth\n\t\t\t * scope granted by the user. This is used to check whether the user\n\t\t\t * has granted all the necessary scopes for the integrations to work\n\t\t\t */\n\t\t\tconst response = await axios.get(`/integrations/classroom/authorized_scopes/`);\n\t\t\tthis.authorizedScopes = response.data;\n\t\t\treturn this.authorizedScopes;\n\t\t},\n\t\t/**\n\t\t * Course twin functions\n\t\t */\n\t\tasync getCourseTwin(courseId: string): Promise {\n\t\t\ttry {\n\t\t\t\tconst response = await axios.get(\n\t\t\t\t\t`/integrations/classroom/course/?course_id=${courseId}`,\n\t\t\t\t);\n\t\t\t\tthis.courseTwins[courseId] = response.data;\n\t\t\t\treturn response.data;\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error(e);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t},\n\t\tasync isGoogleClassroomIntegrationActive(courseId: string) {\n\t\t\treturn (await this.getCourseTwin(courseId))?.enabled ?? false;\n\t\t},\n\t\tasync createCourseTwin(\n\t\t\tcourseId: string,\n\t\t\tclassroomCourseId: string,\n\t\t): Promise {\n\t\t\tconst response = await axios.post(\n\t\t\t\t`/integrations/classroom/course/?course_id=${courseId}`,\n\t\t\t\t{\n\t\t\t\t\tclassroom_course_id: classroomCourseId,\n\t\t\t\t},\n\t\t\t);\n\t\t\tthis.courseTwins[courseId] = response.data;\n\t\t\treturn response.data;\n\t\t},\n\t\tasync partialUpdateCourseTwin(\n\t\t\tcourseId: string,\n\t\t\tpayload: Partial,\n\t\t): Promise {\n\t\t\tconst response = await axios.patch(\n\t\t\t\t`/integrations/classroom/course/?course_id=${courseId}`,\n\t\t\t\tpayload,\n\t\t\t);\n\t\t\tthis.courseTwins[courseId] = response.data;\n\t\t\treturn response.data;\n\t\t},\n\n\t\t/**\n\t\t * Actions for syncing data with Classroom\n\t\t */\n\t\tasync syncExamGrades(eventId: string): Promise {\n\t\t\tawait axios.post(`/integrations/classroom/sync_exam_grades/?event_id=${eventId}`);\n\t\t},\n\t\tasync syncCourseRoster(courseId: string): Promise {\n\t\t\tawait axios.post(\n\t\t\t\t`/integrations/classroom/sync_course_roster/?course_id=${courseId}`,\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t * Getters for twins of various types of items\n\t\t */\n\t\tasync getGoogleClassroomCourseWorkTwin(\n\t\t\teventId: string,\n\t\t): Promise {\n\t\t\ttry {\n\t\t\t\tconst response = await axios.get(\n\t\t\t\t\t`/integrations/classroom/coursework/?event_id=${eventId}`,\n\t\t\t\t);\n\t\t\t\treturn response.data;\n\t\t\t} catch (e) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t},\n\t\tasync getGoogleClassroomMaterialTwin(\n\t\t\tlessonId: string,\n\t\t): Promise {\n\t\t\ttry {\n\t\t\t\tconst response = await axios.get(\n\t\t\t\t\t`/integrations/classroom/material/?lesson_id=${lessonId}`,\n\t\t\t\t);\n\t\t\t\treturn response.data;\n\t\t\t} catch (e) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t},\n\t\tasync getGoogleClassroomAnnouncementTwin(\n\t\t\tannouncementId: string,\n\t\t): Promise {\n\t\t\ttry {\n\t\t\t\tconst response = await axios.get(\n\t\t\t\t\t`/integrations/classroom/announcement/?announcement_id=${announcementId}`,\n\t\t\t\t);\n\t\t\t\treturn response.data;\n\t\t\t} catch (e) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t},\n\t},\n});\n","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderSlot as _renderSlot, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex flex-col items-center\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"mb-4 banner banner-danger\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_ctx.popupBlocked)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t(\"misc.popup_blocked\")), 1)\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_Btn, {\n variant: 'secondary',\n loading: _ctx.loading,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.grantScopes()))\n }, {\n default: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"default\")\n ]),\n _: 3\n }, 8, [\"loading\"])\n ]))\n}","\n// const CLIENT_ID = process.env.VUE_APP_GOOGLE_OAUTH_CLIENT_ID;\n// const CLIENT_SECRET = process.env.VUE_APP_GOOGLE_OAUTH_CLIENT_SECRET;\n// const REDIRECT_URI = \"http://localhost:8080/redirect\";\n// const DEFAULT_SCOPES = [\"https://www.googleapis.com/auth/gmail.readonly\"];\n\n// const oauth2Client = new google.auth.OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI);\n//\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport { setErrorNotification } from \"@/utils\";\nimport Btn from \"@/components/ui/Btn.vue\";\nexport default defineComponent({\n\tname: \"GoogleScopesButton\",\n\tprops: {\n\t\tgetUrl: {\n\t\t\ttype: Function as PropType<() => Promise>,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tloading: false,\n\t\t\tpopupBlocked: false,\n\t\t\tpopupHandle: null as number | null,\n\t\t};\n\t},\n\tmethods: {\n\t\tasync grantScopes() {\n\t\t\tthis.popupBlocked = false;\n\t\t\tthis.loading = true;\n\t\t\tconst url = await this.getUrl();\n\t\t\tconst popup = window.open(url, \"\", \"popup=true\");\n\t\t\tif (!popup || popup.closed) {\n\t\t\t\tthis.popupBlocked = true;\n\t\t\t\tthis.loading = false;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.popupHandle = setInterval(() => {\n\t\t\t\tif (popup.closed) {\n\t\t\t\t\t// popup has been closed, check if scopes were granted\n\t\t\t\t\tclearInterval(this.popupHandle as number);\n\t\t\t\t\tthis.loading = false;\n\t\t\t\t\tthis.onAuthDone();\n\t\t\t\t}\n\t\t\t}, 300);\n\t\t},\n\t\tonAuthDone() {\n\t\t\tthis.$emit(\"authDone\");\n\t\t},\n\t},\n\tcomputed: {},\n\tcomponents: { Btn },\n});\n","import { render } from \"./GoogleScopesButton.vue?vue&type=template&id=8af3545c&ts=true\"\nimport script from \"./GoogleScopesButton.vue?vue&type=script&lang=ts\"\nexport * from \"./GoogleScopesButton.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport Spinner from \"@/components/ui/Spinner.vue\";\nimport { setErrorNotification } from \"@/utils\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport { mapStores } from \"pinia\";\nimport { CLASSROOM_STUDENT_SCOPES, CLASSROOM_TEACHER_SCOPES } from \"../classroom/const\";\nimport { useGoogleIntegrationsStore } from \"../stores/googleIntegrationsStore\";\nimport GoogleScopesButton from \"./GoogleScopesButton.vue\";\nexport default defineComponent({\n\tname: \"GoogleScopeChecker\",\n\tprops: {\n\t\trole: {\n\t\t\ttype: String as PropType<\"teacher\" | \"student\">,\n\t\t\trequired: true,\n\t\t},\n\t\t// scopes: {\n\t\t// \ttype: Array as PropType,\n\t\t// \trequired: true,\n\t\t// },\n\t},\n\tasync created() {\n\t\t// TODO remove setTimeout in production, it's to avoid local db lock\n\t\tsetTimeout(async () => await this.loadAuthorizedScopes(), 1000);\n\t},\n\twatch: {\n\t\toutstandingScopesLength(newVal) {\n\t\t\tif (newVal === 0) {\n\t\t\t\tthis.$emit(\"scopesOk\");\n\t\t\t} else {\n\t\t\t\tthis.$emit(\"scopesCheckFailed\");\n\t\t\t}\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tloading: true,\n\t\t\terror: false,\n\t\t};\n\t},\n\tmethods: {\n\t\tasync loadAuthorizedScopes() {\n\t\t\tthis.loading = true;\n\t\t\ttry {\n\t\t\t\tawait this.googleIntegrationStore.getAuthorizedScopes();\n\t\t\t} catch (e) {\n\t\t\t\tthis.error = true;\n\t\t\t\tsetErrorNotification(e);\n\t\t\t} finally {\n\t\t\t\tthis.loading = false;\n\t\t\t}\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useGoogleIntegrationsStore),\n\t\tscopes() {\n\t\t\treturn this.role === \"teacher\"\n\t\t\t\t? CLASSROOM_TEACHER_SCOPES\n\t\t\t\t: CLASSROOM_STUDENT_SCOPES;\n\t\t},\n\t\toutstandingScopes() {\n\t\t\t// List of required scopes the user hasn't granted yet\n\t\t\tconst granted = this.googleIntegrationStore.authorizedScopes;\n\t\t\treturn this.scopes.filter(s => !granted.includes(s));\n\t\t},\n\t\toutstandingScopesLength() {\n\t\t\tif (!this.loading) {\n\t\t\t\treturn this.outstandingScopes.length;\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\t},\n\tcomponents: { Spinner, GoogleScopesButton },\n});\n","import { render } from \"./GoogleScopeChecker.vue?vue&type=template&id=306046da&ts=true\"\nimport script from \"./GoogleScopeChecker.vue?vue&type=script&lang=ts\"\nexport * from \"./GoogleScopeChecker.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { renderSlot as _renderSlot, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"span\", {\n class: \"underline cursor-pointer text-primary hover:text-primary-dark\",\n onClick: _cache[0] || (_cache[0] = \n//@ts-ignore\n(...args) => (_ctx.onClick && _ctx.onClick(...args)))\n }, [\n _renderSlot(_ctx.$slots, \"default\"),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.text), 1)\n ]))\n}","\nimport { getArticles } from \"@/helpCenter\";\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport { useMetaStore } from \"@/stores/metaStore\";\nimport { defineComponent } from \"@vue/runtime-core\";\nimport { mapStores } from \"pinia\";\n\nexport default defineComponent({\n\tname: \"ArticleHandle\",\n\tprops: {\n\t\ttext: {\n\t\t\ttype: String,\n\t\t\tdefault: _(\"misc.find_out_more\"),\n\t\t},\n\t\tarticleId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tvalidator(value: string) {\n\t\t\t\treturn getArticles()\n\t\t\t\t\t.map(a => a.id)\n\t\t\t\t\t.includes(value);\n\t\t\t},\n\t\t},\n\t},\n\tmethods: {\n\t\tonClick() {\n\t\t\tthis.metaStore.setHelpCenterVisibility(true);\n\t\t\tthis.metaStore.setHelpCenterArticleId(this.articleId);\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMetaStore),\n\t},\n});\n","import { render } from \"./ArticleHandle.vue?vue&type=template&id=5c3bd22b&ts=true\"\nimport script from \"./ArticleHandle.vue?vue&type=script&lang=ts\"\nexport * from \"./ArticleHandle.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport GoogleScopeChecker from \"@/integrations/components/GoogleScopeChecker.vue\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport { CLASSROOM_STUDENT_SCOPES } from \"../const\";\nimport { mapStores } from \"pinia\";\nimport { useMetaStore } from \"../../../stores/metaStore\";\nimport ArticleHandle from \"../../../components/shared/HelpCenter/ArticleHandle.vue\";\nimport HelpCenter from \"../../../components/shared/HelpCenter/HelpCenter.vue\";\nimport { useGoogleIntegrationsStore } from \"../../stores/googleIntegrationsStore\";\nexport default defineComponent({\n\tname: \"StudentScopesBanner\",\n\tprops: {},\n\tdata() {\n\t\treturn {\n\t\t\tCLASSROOM_STUDENT_SCOPES,\n\t\t\tshakeBanner: false,\n\t\t};\n\t},\n\tmethods: {\n\t\tonScopesOk() {\n\t\t\tthis.googleIntegrationStore.studentScopesBannerVisible = false;\n\t\t},\n\t\tonScopesCheckFailed() {\n\t\t\tthis.googleIntegrationStore.studentScopesBannerVisible = true;\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMetaStore, useGoogleIntegrationsStore),\n\t\tshowMissingScopesBanner(): boolean {\n\t\t\treturn this.googleIntegrationStore.studentScopesBannerVisible;\n\t\t},\n\t},\n\tcomponents: { GoogleScopeChecker, ArticleHandle, HelpCenter },\n});\n","import { render } from \"./StudentScopesBanner.vue?vue&type=template&id=365b6246&ts=true\"\nimport script from \"./StudentScopesBanner.vue?vue&type=script&lang=ts\"\nexport * from \"./StudentScopesBanner.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { defineComponent } from \"@vue/runtime-core\";\nimport CourseListItem from \"@/components/shared/CourseListItem.vue\";\n\nimport { blockingDialogMixin, loadingMixin } from \"@/mixins\";\nimport CourseListItemSkeleton from \"@/components/ui/skeletons/CourseListItemSkeleton.vue\";\nimport NumberInput from \"@/components/ui/NumberInput.vue\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport { Course } from \"@/models\";\nimport { getBlankCourseSearchFilters } from \"@/api/utils\";\nimport { CourseSearchFilter } from \"@/api/interfaces\";\nimport CourseSearchFilters from \"@/components/shared/CourseSearchFilters.vue\";\nimport { demoCourseTourSteps, tourOptions } from \"@/const\";\nimport { isDemoMode, setErrorNotification } from \"@/utils\";\nimport { mapStores } from \"pinia\";\nimport { useMainStore } from \"@/stores/mainStore\";\nimport { useMetaStore } from \"@/stores/metaStore\";\nimport Dialog from \"@/components/ui/Dialog.vue\";\nimport StudentScopesBanner from \"@/integrations/classroom/components/StudentScopesBanner.vue\";\n\nconst DEMO_COURSES_TOUR_KEY = \"courses_tour_taken\";\n\nexport default defineComponent({\n\tname: \"CourseList\",\n\tmixins: [loadingMixin, blockingDialogMixin],\n\tcomponents: {\n\t\tCourseListItem,\n\t\tCourseListItemSkeleton,\n\t\tNumberInput,\n\t\tBtn,\n\t\tCourseSearchFilters,\n\t\tDialog,\n\t\tStudentScopesBanner,\n\t},\n\tasync created() {\n\t\tawait this.withFirstLoading(async () => this.mainStore.getCourses());\n\t\tthis.searchFilters.withPrivileges = this.metaStore.user.is_teacher;\n\t\tthis.searchFilters.hidden = this.metaStore.user.is_teacher;\n\n\t\tif (isDemoMode() && !(DEMO_COURSES_TOUR_KEY in localStorage)) {\n\t\t\tsetTimeout(() => ((this as any).$tours[\"demoCourseTour\"] as any).start(), 50);\n\t\t\tlocalStorage.setItem(DEMO_COURSES_TOUR_KEY, \"true\");\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tdirtyMat: \"\",\n\t\t\tsearchFilters: getBlankCourseSearchFilters(),\n\t\t\tdemoCourseTourSteps,\n\t\t\ttourOptions,\n\t\t\tenrollmentDialogMode: null as null | \"enroll\" | \"unenroll\",\n\t\t\tselectedCourseForEnrollment: null as Course | null,\n\t\t\tenrollmentLoading: false,\n\t\t};\n\t},\n\twatch: {\n\t\t// searchFilters: {\n\t\t// handler(newVal) {},\n\t\t// deep: true,\n\t\t// },\n\t},\n\tmethods: {\n\t\tasync onEnrollChange(course: Course, mode: \"enroll\" | \"unenroll\") {\n\t\t\tthis.enrollmentDialogMode = mode;\n\t\t\tthis.selectedCourseForEnrollment = course;\n\t\t\tconst choice = await this.getBlockingBinaryDialogChoice();\n\t\t\tif (!choice) {\n\t\t\t\tthis.showBlockingDialog = false;\n\t\t\t\tthis.selectedCourseForEnrollment = null;\n\t\t\t\tthis.enrollmentDialogMode = null;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tthis.enrollmentLoading = true;\n\t\t\t\tawait (this.enrollmentDialogMode === \"enroll\"\n\t\t\t\t\t? this.mainStore.selfEnrollInCourse\n\t\t\t\t\t: this.mainStore.selfUnenrollInCourse)({ courseId: course.id });\n\t\t\t\tthis.metaStore.showSuccessFeedback();\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t} finally {\n\t\t\t\tthis.showBlockingDialog = false;\n\t\t\t\tthis.selectedCourseForEnrollment = null;\n\t\t\t\tthis.enrollmentLoading = false;\n\t\t\t\tthis.enrollmentDialogMode = null;\n\t\t\t}\n\t\t},\n\t\tasync onSaveMat() {\n\t\t\tawait this.withLocalLoading(async () =>\n\t\t\t\tthis.metaStore.patchUser({\n\t\t\t\t\tuserId: this.metaStore.user.id,\n\t\t\t\t\tchanges: { mat: this.dirtyMat },\n\t\t\t\t}),\n\t\t\t);\n\t\t\tthis.metaStore.showSuccessFeedback();\n\t\t},\n\t\tasync onCourseToggleFavorite(course: Course) {\n\t\t\tconst remove = !!course.bookmarked;\n\t\t\tawait this.mainStore.bookmarkCourse({ courseId: course.id, remove });\n\t\t\t// TODO if adding a bookmark and courses moves out of view, show some kind of feedback\n\t\t},\n\t\tsortCourses(courses: Course[]) {\n\t\t\treturn courses.sort((a, b) => {\n\t\t\t\tif (a.creator?.id == this.metaStore.user.id) {\n\t\t\t\t\t// courses the user is creator of go first\n\t\t\t\t\treturn b.creator?.id == this.metaStore.user.id ? 0 : -1;\n\t\t\t\t}\n\t\t\t\treturn b.creator?.id == this.metaStore.user.id\n\t\t\t\t\t? 1\n\t\t\t\t\t: // then come the courses that user has privileges over\n\t\t\t\t\t (b.privileges?.length ?? 0) - (a.privileges?.length ?? 0) ||\n\t\t\t\t\t\t\t// as a last resort, sort by id\n\t\t\t\t\t\t\t(a.id < b.id ? -1 : 1);\n\t\t\t});\n\t\t},\n\t\t// testExtraScopes() {\n\t\t// \tconst SCOPES = [\n\t\t// \t\t\"https://www.googleapis.com/auth/classroom.courses.readonly\",\n\t\t// \t\t\"https://www.googleapis.com/auth/classroom.announcements\",\n\t\t// \t\t\"https://www.googleapis.com/auth/classroom.courseworkmaterials\",\n\t\t// \t\t\"https://www.googleapis.com/auth/classroom.coursework.students\",\n\t\t// \t\t\"https://www.googleapis.com/auth/classroom.rosters\",\n\t\t// \t\t\"https://www.googleapis.com/auth/classroom.profile.emails\",\n\t\t// \t];\n\t\t// \tvar options = new (window as any).gapi.auth2.SigninOptionsBuilder({\n\t\t// \t\tscope: \"email https://www.googleapis.com/auth/drive \" + SCOPES.join(\" \"),\n\t\t// \t});\n\n\t\t// \tconst googleUser = this.$gAuth.instance.currentUser.get(); //.get(); //(window as any).gapi.auth2.currentUser.get();\n\t\t// \tconsole.log(\"CURRENT\", this.$gAuth.instance.currentUser.get());\n\t\t// \tgoogleUser.grant(options).then(\n\t\t// \t\tfunction (success) {\n\t\t// \t\t\tconsole.log(JSON.stringify({ message: \"success\", value: success }));\n\t\t// \t\t},\n\t\t// \t\tfunction (fail) {\n\t\t// \t\t\talert(JSON.stringify({ message: \"fail\", value: fail }));\n\t\t// \t\t},\n\t\t// \t);\n\t\t// },\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore, useMetaStore),\n\t\tisDemoMode() {\n\t\t\treturn isDemoMode();\n\t\t},\n\t\tcoursesFiltered() {\n\t\t\tconst filters = this.searchFilters;\n\t\t\treturn this.coursesSorted.filter(\n\t\t\t\tc =>\n\t\t\t\t\t(filters.name.length === 0 ||\n\t\t\t\t\t\tc.name.toLowerCase().includes(filters.name.toLowerCase()) ||\n\t\t\t\t\t\t(c.creator?.full_name ?? \"\")\n\t\t\t\t\t\t\t.toLowerCase()\n\t\t\t\t\t\t\t.includes(filters.name.toLowerCase())) &&\n\t\t\t\t\t(!filters.withPrivileges || (c.privileges?.length ?? 0) > 0) &&\n\t\t\t\t\t(filters.hidden || !c.hidden),\n\t\t\t);\n\t\t},\n\t\tcoursesSorted() {\n\t\t\tconst bookmarkedEnrolledCourses = this.mainStore.courses.filter(\n\t\t\t\tc => c.bookmarked && c.enrolled,\n\t\t\t);\n\t\t\tconst enrolledCourses = this.mainStore.courses.filter(\n\t\t\t\tc => c.enrolled && !c.bookmarked,\n\t\t\t);\n\t\t\tconst bookmarkedCourses = this.mainStore.courses.filter(\n\t\t\t\tc => c.bookmarked && !c.enrolled,\n\t\t\t);\n\t\t\tconst otherCourses = this.mainStore.courses.filter(\n\t\t\t\tc => !c.bookmarked && !c.enrolled,\n\t\t\t);\n\t\t\treturn [\n\t\t\t\t...this.sortCourses(bookmarkedEnrolledCourses),\n\t\t\t\t...this.sortCourses(bookmarkedCourses),\n\t\t\t\t...this.sortCourses(enrolledCourses),\n\t\t\t\t...this.sortCourses(otherCourses),\n\t\t\t];\n\t\t},\n\t},\n});\n","import { render } from \"./CourseList.vue?vue&type=template&id=a2e68ec0&ts=true\"\nimport script from \"./CourseList.vue?vue&type=script&lang=ts\"\nexport * from \"./CourseList.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, vShow as _vShow, withDirectives as _withDirectives, renderList as _renderList, Fragment as _Fragment, createElementBlock as _createElementBlock, createTextVNode as _createTextVNode, withKeys as _withKeys, createSlots as _createSlots, createVNode as _createVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex items-center space-x-2\" }\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"my-auto mr-1 material-icons icon-light\" }, \" settings \", -1)\nconst _hoisted_3 = { class: \"mb-0.5\" }\nconst _hoisted_4 = { class: \"flex flex-col justify-between mt-2 lg:flex-row\" }\nconst _hoisted_5 = { class: \"flex flex-col space-y-6\" }\nconst _hoisted_6 = { class: \"flex items-center\" }\nconst _hoisted_7 = { class: \"mr-2 text-muted\" }\nconst _hoisted_8 = { class: \"mr-3\" }\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-xl material-icons\" }, \" edit \", -1)\nconst _hoisted_10 = { class: \"flex items-center\" }\nconst _hoisted_11 = { class: \"error-msg\" }\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-xl material-icons-outlined\" }, \" done \", -1)\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-xl material-icons-outlined\" }, \" close \", -1)\nconst _hoisted_14 = { class: \"flex flex-col\" }\nconst _hoisted_15 = { class: \"flex items-center\" }\nconst _hoisted_16 = { class: \"mr-2 text-muted\" }\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-xl material-icons\" }, \" edit \", -1)\nconst _hoisted_18 = [\"innerHTML\"]\nconst _hoisted_19 = { class: \"flex items-center\" }\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-xl material-icons-outlined\" }, \" done \", -1)\nconst _hoisted_21 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-xl material-icons-outlined\" }, \" close \", -1)\nconst _hoisted_22 = { class: \"flex flex-col mt-4 md:items-center md:flex-row md:space-x-2\" }\nconst _hoisted_23 = { class: \"text-muted\" }\nconst _hoisted_24 = { class: \"flex flex-col items-end mt-4 lg:mt-0 lg:w-2/5\" }\nconst _hoisted_25 = {\n key: 0,\n class: \"mr-auto text-muted\"\n}\nconst _hoisted_26 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mr-1 text-lg inline-icon text-danger-dark material-icons-outlined\" }, \"error_outline\", -1)\nconst _hoisted_27 = {\n key: 1,\n class: \"mr-auto text-muted\"\n}\nconst _hoisted_28 = { class: \"mt-8\" }\nconst _hoisted_29 = {\n key: 0,\n class: \"grid grid-cols-1 gap-4 mt-4 lg:grid-cols-2 xl:grid-cols-3\"\n}\nconst _hoisted_30 = {\n key: 1,\n class: \"grid grid-cols-1 gap-4 mt-4 lg:grid-cols-2 xl:grid-cols-3\"\n}\nconst _hoisted_31 = {\n key: 2,\n class: \"flex flex-col w-full mt-6 mb-16 text-center select-none\"\n}\nconst _hoisted_32 = /*#__PURE__*/_createElementVNode(\"p\", {\n style: {\"font-size\":\"6rem\"},\n class: \"material-icons-outlined opacity-10\"\n}, \" assignment \", -1)\nconst _hoisted_33 = { class: \"opacity-40\" }\nconst _hoisted_34 = {\n key: 3,\n class: \"flex w-full mt-4\"\n}\nconst _hoisted_35 = {\n key: 0,\n class: \"mt-8\"\n}\nconst _hoisted_36 = {\n key: 0,\n class: \"grid grid-cols-1 gap-4 mt-4 lg:grid-cols-2\"\n}\nconst _hoisted_37 = {\n key: 1,\n class: \"grid grid-cols-1 gap-4 lg:grid-cols-2\"\n}\nconst _hoisted_38 = {\n key: 2,\n class: \"flex flex-col w-full mt-6 text-center select-none mb-14\"\n}\nconst _hoisted_39 = /*#__PURE__*/_createElementVNode(\"p\", {\n style: {\"font-size\":\"6rem\"},\n class: \"material-icons-outlined opacity-10\"\n}, \"topic\", -1)\nconst _hoisted_40 = { class: \"opacity-40\" }\nconst _hoisted_41 = {\n key: 3,\n class: \"flex w-full mt-4\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_TextInput = _resolveComponent(\"TextInput\")!\n const _component_TextEditor = _resolveComponent(\"TextEditor\")!\n const _component_CopyToClipboard = _resolveComponent(\"CopyToClipboard\")!\n const _component_Toggle = _resolveComponent(\"Toggle\")!\n const _component_Card = _resolveComponent(\"Card\")!\n const _component_EventEditorPreview = _resolveComponent(\"EventEditorPreview\")!\n const _component_EventEditorPreviewSkeleton = _resolveComponent(\"EventEditorPreviewSkeleton\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_MinimalExercisePreview = _resolveComponent(\"MinimalExercisePreview\")!\n const _component_MinimalExercisePreviewSkeleton = _resolveComponent(\"MinimalExercisePreviewSkeleton\")!\n const _component_v_tour = _resolveComponent(\"v-tour\")!\n\n return (_openBlock(), _createElementBlock(\"div\", null, [\n _createVNode(_component_Card, {\n hoverable: false,\n filled: true,\n borderLess: true\n }, {\n header: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n _hoisted_2,\n _createElementVNode(\"h2\", _hoisted_3, _toDisplayString(_ctx.$t(\"misc.course_settings\")), 1)\n ])\n ]),\n body: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", _hoisted_5, [\n _withDirectives(_createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"p\", _hoisted_7, _toDisplayString(_ctx.$t(\"teacher_course_dashboard.course_name\")), 1),\n _createElementVNode(\"p\", _hoisted_8, _toDisplayString(_ctx.currentCourse.name), 1),\n (_ctx.hasPrivileges([_ctx.CoursePrivilege.UPDATE_COURSE]))\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 0,\n outline: true,\n variant: 'icon',\n onClick: _ctx.editCourseName\n }, {\n default: _withCtx(() => [\n _hoisted_9\n ]),\n _: 1\n }, 8, [\"onClick\"]))\n : _createCommentVNode(\"\", true)\n ], 512), [\n [_vShow, !_ctx.editingName]\n ]),\n _withDirectives(_createElementVNode(\"div\", _hoisted_10, [\n _createVNode(_component_TextInput, {\n onKeydown: _cache[0] || (_cache[0] = _withKeys(($event: any) => (_ctx.v$.$invalid ? _ctx.v$.$touch() : _ctx.onDoneEditingName()), [\"enter\"])),\n class: \"mr-2 w-96\",\n modelValue: _ctx.dirtyCourseName,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((_ctx.dirtyCourseName) = $event))\n }, _createSlots({\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"course_creation_form.course_name\")) + \" \", 1)\n ]),\n _: 2\n }, [\n (_ctx.v$.dirtyCourse.name.$errors.length > 0)\n ? {\n name: \"errors\",\n fn: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.v$.dirtyCourse.name.$errors, (error) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"input-errors\",\n key: error.$uid\n }, [\n _createElementVNode(\"div\", _hoisted_11, _toDisplayString(_ctx.$t(\"validation_errors.\" + error.$uid)), 1)\n ]))\n }), 128))\n ]),\n key: \"0\"\n }\n : undefined\n ]), 1032, [\"modelValue\"]),\n _createVNode(_component_Btn, {\n outline: true,\n variant: 'icon',\n loading: _ctx.localLoading,\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.v$.$invalid ? _ctx.v$.$touch() : _ctx.onDoneEditingName()))\n }, {\n default: _withCtx(() => [\n _hoisted_12\n ]),\n _: 1\n }, 8, [\"loading\"]),\n _createVNode(_component_Btn, {\n outline: true,\n class: \"\",\n variant: 'icon',\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.onDoneEditingName(true)))\n }, {\n default: _withCtx(() => [\n _hoisted_13\n ]),\n _: 1\n })\n ], 512), [\n [_vShow, _ctx.editingName]\n ]),\n _withDirectives(_createElementVNode(\"div\", _hoisted_14, [\n _createElementVNode(\"div\", _hoisted_15, [\n _createElementVNode(\"p\", _hoisted_16, _toDisplayString(_ctx.$t(\"course_creation_form.course_description\")), 1),\n (_ctx.hasPrivileges([_ctx.CoursePrivilege.UPDATE_COURSE]))\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 0,\n outline: true,\n variant: 'icon',\n onClick: _ctx.editCourseDescription\n }, {\n default: _withCtx(() => [\n _hoisted_17\n ]),\n _: 1\n }, 8, [\"onClick\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"p\", {\n class: \"mr-3\",\n innerHTML: _ctx.currentCourse.description\n }, null, 8, _hoisted_18)\n ], 512), [\n [_vShow, !_ctx.editingDescription]\n ]),\n _withDirectives(_createElementVNode(\"div\", _hoisted_19, [\n _createVNode(_component_TextEditor, {\n forceBaseEditor: true,\n class: \"w-full mr-2\",\n modelValue: _ctx.dirtyCourseDescription,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = ($event: any) => ((_ctx.dirtyCourseDescription) = $event))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"course_creation_form.course_description\")), 1)\n ]),\n _: 1\n }, 8, [\"modelValue\"]),\n _createVNode(_component_Btn, {\n outline: true,\n variant: 'icon',\n loading: _ctx.localLoading,\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.onDoneEditingDescription()))\n }, {\n default: _withCtx(() => [\n _hoisted_20\n ]),\n _: 1\n }, 8, [\"loading\"]),\n _createVNode(_component_Btn, {\n outline: true,\n class: \"\",\n variant: 'icon',\n onClick: _cache[6] || (_cache[6] = ($event: any) => (_ctx.onDoneEditingDescription(true)))\n }, {\n default: _withCtx(() => [\n _hoisted_21\n ]),\n _: 1\n })\n ], 512), [\n [_vShow, _ctx.editingDescription]\n ]),\n _createElementVNode(\"div\", _hoisted_22, [\n _createElementVNode(\"p\", _hoisted_23, _toDisplayString(_ctx.$t(\"teacher_course_dashboard.course_link_for_students\")), 1),\n _createVNode(_component_CopyToClipboard, {\n value: _ctx.permalink,\n title: _ctx.$t('event_preview.copy_link'),\n confirmationMessage: _ctx.$t('event_preview.copied_link')\n }, null, 8, [\"value\", \"title\", \"confirmationMessage\"])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_24, [\n _createVNode(_component_Toggle, {\n disabled: !_ctx.hasPrivileges([_ctx.CoursePrivilege.UPDATE_COURSE]),\n modelValue: _ctx.currentCourse.hidden,\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = ($event: any) => (_ctx.onChangeCourseVisibility($event))),\n class: \"mb-2 mr-auto\",\n labelOnLeft: true\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"course_creation_form.hide_course\")), 1)\n ]),\n _: 1\n }, 8, [\"disabled\", \"modelValue\"]),\n (_ctx.currentCourse.hidden)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_25, [\n _hoisted_26,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t(\"course_creation_form.hidden_description\")), 1)\n ]))\n : (_openBlock(), _createElementBlock(\"p\", _hoisted_27, _toDisplayString(_ctx.$t(\"course_creation_form.public_description\")), 1))\n ])\n ])\n ]),\n _: 1\n }),\n _createElementVNode(\"div\", _hoisted_28, [\n _createElementVNode(\"h3\", null, _toDisplayString(_ctx.$t(\"teacher_course_dashboard.recent_exams\")), 1),\n _createElementVNode(\"div\", null, [\n (!_ctx.loadingEvents)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_29, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.recentExams, (exam, index) => {\n return (_openBlock(), _createBlock(_component_EventEditorPreview, {\n key: exam + '-' + index,\n event: exam,\n allowClose: false,\n buttonIconsOnly: true\n }, null, 8, [\"event\"]))\n }), 128))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_30, [\n _createVNode(_component_EventEditorPreviewSkeleton),\n _createVNode(_component_EventEditorPreviewSkeleton),\n _createVNode(_component_EventEditorPreviewSkeleton)\n ])),\n (!_ctx.loadingEvents && _ctx.mainStore.exams.length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_31, [\n _hoisted_32,\n _createElementVNode(\"h2\", _hoisted_33, _toDisplayString(_ctx.$t(\"course_events.no_exams\")), 1)\n ]))\n : (!_ctx.loadingEvents)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_34, [\n _createVNode(_component_router_link, {\n class: \"mx-auto link\",\n to: { name: 'CourseExams' }\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Btn, { variant: 'primary-borderless' }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"teacher_course_dashboard.see_all\")), 1)\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n (_ctx.showExercises)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_35, [\n _createElementVNode(\"h3\", null, _toDisplayString(_ctx.$t(\"teacher_course_dashboard.recently_edited_exercises\")), 1),\n (!_ctx.loadingExercises)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_36, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.recentExercises, (exercise) => {\n return (_openBlock(), _createBlock(_component_MinimalExercisePreview, {\n key: 'e-' + exercise.id,\n exercise: exercise,\n selectable: false,\n hoverable: true,\n showEdit: true,\n onEdit: ($event: any) => (\n\t\t\t\t\t\t_ctx.$router.push({\n\t\t\t\t\t\t\tname: 'CourseExercises',\n\t\t\t\t\t\t\thash: '#editor-' + exercise.id,\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n }, null, 8, [\"exercise\", \"onEdit\"]))\n }), 128))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_37, [\n _createVNode(_component_MinimalExercisePreviewSkeleton),\n _createVNode(_component_MinimalExercisePreviewSkeleton),\n _createVNode(_component_MinimalExercisePreviewSkeleton),\n _createVNode(_component_MinimalExercisePreviewSkeleton)\n ])),\n (!_ctx.loadingExercises && _ctx.mainStore.exercises.length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_38, [\n _hoisted_39,\n _createElementVNode(\"h2\", _hoisted_40, _toDisplayString(_ctx.$t(\"course_exercises.no_exercises\")), 1)\n ]))\n : (!_ctx.loadingExercises)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_41, [\n _createVNode(_component_router_link, {\n class: \"mx-auto link\",\n to: { name: 'CourseExercises' }\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Btn, { variant: 'primary-borderless' }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"teacher_course_dashboard.see_all\")), 1)\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_v_tour, {\n name: \"teacherTour\",\n steps: _ctx.teacherTourSteps,\n options: _ctx.tourOptions\n }, null, 8, [\"steps\", \"options\"]),\n _createVNode(_component_v_tour, {\n name: \"newMaterialModuleTour\",\n steps: _ctx.newMaterialModuleTourSteps,\n options: _ctx.tourOptions\n }, null, 8, [\"steps\", \"options\"]),\n _createVNode(_component_v_tour, {\n name: \"demoTeacherTour\",\n steps: _ctx.demoTeacherTourSteps,\n options: _ctx.tourOptions\n }, null, 8, [\"steps\", \"options\"])\n ]))\n}","import { toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, withCtx as _withCtx, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex items-start w-full\" }\nconst _hoisted_2 = { class: \"\" }\nconst _hoisted_3 = { class: \"flex items-center\" }\nconst _hoisted_4 = [\"innerHTML\"]\nconst _hoisted_5 = { class: \"flex flex-col h-full\" }\nconst _hoisted_6 = { class: \"mt-1 space-y-1 text-sm mb-7\" }\nconst _hoisted_7 = {\n key: 0,\n class: \"flex space-x-1\"\n}\nconst _hoisted_8 = { class: \"text-muted\" }\nconst _hoisted_9 = {\n key: 1,\n class: \"flex space-x-1\"\n}\nconst _hoisted_10 = { class: \"text-muted\" }\nconst _hoisted_11 = { class: \"flex items-center mt-auto\" }\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-base material-icons-outlined\" }, \" block \", -1)\nconst _hoisted_13 = {\n key: 0,\n class: \"ml-1\"\n}\nconst _hoisted_14 = { class: \"flex items-center ml-auto\" }\nconst _hoisted_15 = {\n key: 0,\n class: \"ml-1.5\"\n}\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-base material-icons-outlined\" }, \" undo \", -1)\nconst _hoisted_17 = {\n key: 0,\n class: \"ml-1.5 hidden md:inline\"\n}\nconst _hoisted_18 = /*#__PURE__*/_createElementVNode(\"span\", {\n style: {\"font-size\":\"28px !important\"},\n class: \"material-icons-outlined\"\n}, \" bar_chart \", -1)\nconst _hoisted_19 = {\n key: 0,\n class: \"ml-1.5\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_MultiIcon = _resolveComponent(\"MultiIcon\")!\n const _component_Timestamp = _resolveComponent(\"Timestamp\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_CopyToClipboard = _resolveComponent(\"CopyToClipboard\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createBlock(_component_Card, {\n marginLess: true,\n filled: _ctx.isDraft\n }, {\n header: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"h4\", {\n class: _normalizeClass([\"mt-1.25px mr-4\", { 'text-muted': _ctx.event.name.length === 0 }]),\n style: {\"display\":\"-webkit-box\",\"-webkit-line-clamp\":\"2\",\"-webkit-box-orient\":\"vertical\",\"overflow\":\"hidden\"}\n }, _toDisplayString(_ctx.previewTitle), 3),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"mr-0 chip\", {\n\t\t\t\t\t\t\t'chip-primary':\n\t\t\t\t\t\t\t\t_ctx.event.state === _ctx.EventState.OPEN || _ctx.event.state === _ctx.EventState.RESTRICTED,\n\t\t\t\t\t\t\t'chip-light': _ctx.event.state === _ctx.EventState.CLOSED,\n\t\t\t\t\t\t\t'chip-success': _ctx.event.state === _ctx.EventState.PLANNED,\n\t\t\t\t\t\t}])\n }, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_MultiIcon, {\n useTwoTone: _ctx.event.state === _ctx.EventState.PLANNED,\n class: _normalizeClass([{\n\t\t\t\t\t\t\t\t\t'': _ctx.event.state === _ctx.EventState.PLANNED,\n\t\t\t\t\t\t\t\t}, \"w-6 mr-1 -mt-0.5\"]),\n icons: _ctx.eventStateIcons\n }, null, 8, [\"useTwoTone\", \"class\", \"icons\"]),\n _createElementVNode(\"p\", {\n innerHTML: _ctx.$t('event_states.' + _ctx.event.state)\n }, null, 8, _hoisted_4)\n ])\n ], 2)\n ])\n ])\n ]),\n body: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"div\", _hoisted_6, [\n (_ctx.event.begin_timestamp)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [\n _createElementVNode(\"p\", _hoisted_8, _toDisplayString(_ctx.$t(\"event_editor.begin_timestamp\")) + \":\", 1),\n _createVNode(_component_Timestamp, {\n reduced: _ctx.buttonIconsOnly,\n value: _ctx.event.begin_timestamp\n }, null, 8, [\"reduced\", \"value\"])\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.event.end_timestamp)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [\n _createElementVNode(\"p\", _hoisted_10, _toDisplayString(_ctx.$t(\"event_editor.end_timestamp\")) + \":\", 1),\n _createVNode(_component_Timestamp, {\n reduced: _ctx.buttonIconsOnly,\n value: _ctx.event.end_timestamp\n }, null, 8, [\"reduced\", \"value\"])\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_11, [\n (\n\t\t\t\t\t\t\t_ctx.allowClose && _ctx.hasBegun && _ctx.hasPrivileges([_ctx.CoursePrivilege.MANAGE_EVENTS])\n\t\t\t\t\t\t)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 0,\n class: \"\",\n size: 'sm',\n variant: 'danger',\n outline: true,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('close')))\n }, {\n default: _withCtx(() => [\n _hoisted_12,\n (true || !_ctx.buttonIconsOnly)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_13, _toDisplayString(_ctx.$t(\"event_preview.close\")), 1))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_14, [\n _createVNode(_component_router_link, {\n class: \"m-auto\",\n to: { name: 'ExamEditor', params: { examId: _ctx.event.id } }\n }, {\n default: _withCtx(() => [\n (_ctx.hasPrivileges([_ctx.CoursePrivilege.MANAGE_EVENTS]))\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 0,\n tooltip: _ctx.buttonIconsOnly ? _ctx.$t('misc.edit') : '',\n outline: _ctx.buttonIconsOnly,\n class: _normalizeClass({ 'icon-btn-primary -ml-2': _ctx.buttonIconsOnly }),\n variant: _ctx.buttonIconsOnly ? 'icon' : 'secondary'\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n class: _normalizeClass([_ctx.buttonIconsOnly ? 'text-xl' : 'text-base', 'material-icons'])\n }, \" edit \", 2),\n (!_ctx.buttonIconsOnly)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_15, _toDisplayString(_ctx.$t(\"event_preview.editor\")), 1))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }, 8, [\"tooltip\", \"outline\", \"class\", \"variant\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }, 8, [\"to\"]),\n (\n\t\t\t\t\t\t\t\t_ctx.hasEnded && _ctx.allowClose && _ctx.hasPrivileges([_ctx.CoursePrivilege.MANAGE_EVENTS])\n\t\t\t\t\t\t\t)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 0,\n class: \"\",\n tooltip: _ctx.$t('event_preview.reopen'),\n variant: 'icon',\n outline: true,\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$emit('reopen')))\n }, {\n default: _withCtx(() => [\n _hoisted_16\n ]),\n _: 1\n }, 8, [\"tooltip\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.hasBegun)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 1,\n to: { name: 'ExamProgress', params: { examId: _ctx.event.id } }\n }, {\n default: _withCtx(() => [\n (_ctx.hasPrivileges([_ctx.CoursePrivilege.MANAGE_EVENTS]))\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 0,\n variant: _ctx.buttonIconsOnly ? 'icon' : 'primary',\n outline: true,\n tooltip: _ctx.buttonIconsOnly ? _ctx.$t('event_preview.monitor') : ''\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n class: _normalizeClass([\n\t\t\t\t\t\t\t\t\t\t_ctx.buttonIconsOnly\n\t\t\t\t\t\t\t\t\t\t\t? 'text-xl material-icons'\n\t\t\t\t\t\t\t\t\t\t\t: 'text-base material-icons-outlined',\n\t\t\t\t\t\t\t\t\t])\n }, \" visibility \", 2),\n (!_ctx.buttonIconsOnly)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_17, _toDisplayString(_ctx.$t(\"event_preview.monitor\")), 1))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }, 8, [\"variant\", \"tooltip\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }, 8, [\"to\"]))\n : (\n\t\t\t\t\t\t\t\t_ctx.hasEnded && _ctx.hasPrivileges([_ctx.CoursePrivilege.ASSESS_PARTICIPATIONS])\n\t\t\t\t\t\t\t)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 2,\n to: { name: 'ExamResults', params: { examId: _ctx.event.id } }\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Btn, {\n tooltip: _ctx.buttonIconsOnly ? _ctx.$t('event_preview.results') : '',\n outline: true,\n variant: _ctx.buttonIconsOnly ? 'icon' : 'primary'\n }, {\n default: _withCtx(() => [\n _hoisted_18,\n (!_ctx.buttonIconsOnly)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_19, _toDisplayString(_ctx.$t(\"event_preview.results\")), 1))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }, 8, [\"tooltip\", \"variant\"])\n ]),\n _: 1\n }, 8, [\"to\"]))\n : _createCommentVNode(\"\", true),\n (!_ctx.isDraft && !_ctx.hasEnded)\n ? (_openBlock(), _createBlock(_component_CopyToClipboard, {\n key: 3,\n class: \"\",\n value: _ctx.permalink,\n iconOnly: true,\n title: _ctx.$t('event_preview.copy_link'),\n confirmationMessage: _ctx.$t('event_preview.copied_link'),\n tooltip: _ctx.$t('help_texts.copy_exam_link')\n }, null, 8, [\"value\", \"title\", \"confirmationMessage\", \"tooltip\"]))\n : _createCommentVNode(\"\", true)\n ])\n ])\n ])\n ]),\n _: 1\n }, 8, [\"filled\"]))\n}","import { openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle } from \"vue\"\nimport _imports_0 from '../../../public/c.svg'\n\n\nconst _hoisted_1 = {\n key: 0,\n class: /*#__PURE__*/_normalizeClass(['-mb-5px'])\n}\nconst _hoisted_2 = {\n key: 0,\n class: \"transform scale-125 ml-1.5 my-0\",\n src: _imports_0\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_ctx.icons?.length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_ctx.isRawIcon)\n ? (_openBlock(), _createElementBlock(\"img\", _hoisted_2))\n : (_openBlock(true), _createElementBlock(_Fragment, { key: 1 }, _renderList(_ctx.parsedIcons, (icon, index) => {\n return (_openBlock(), _createElementBlock(\"span\", {\n style: _normalizeStyle('font-size:' + _ctx.fontSize),\n class: _normalizeClass([\n\t\t\t\t_ctx.classExceptions[icon] ?? '',\n\t\t\t\t'mt-0.5 mx-auto',\n\t\t\t\t_ctx.useTwoTone ? 'material-icons-two-tone' : 'material-icons-outlined',\n\t\t\t]),\n key: _ctx.id + '-icon-' + index\n }, _toDisplayString(icon), 7))\n }), 128))\n ]))\n : _createCommentVNode(\"\", true)\n}","\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport { v4 as uuid4 } from \"uuid\";\n\nexport default defineComponent({\n\tname: \"MultiIcon\",\n\tprops: {\n\t\ticons: {\n\t\t\ttype: Array as PropType,\n\t\t},\n\t\tuseTwoTone: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tsmall: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tcreated() {\n\t\tthis.id = uuid4();\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tid: \"\",\n\t\t};\n\t},\n\tcomputed: {\n\t\ticon() {\n\t\t\treturn this.icons?.[0] ?? \"\";\n\t\t},\n\t\tsizeExceptions(): Record {\n\t\t\treturn {\n\t\t\t\tjavascript: \"28px !important\",\n\t\t\t};\n\t\t},\n\t\tclassExceptions(): Record {\n\t\t\treturn {\n\t\t\t\tjavascript: \"-ml-1 -mt-1.25px\",\n\t\t\t\tupdate: \"pt-0.5\",\n\t\t\t\tblock: \"pt-0.5\",\n\t\t\t\tevent_available: \"two-tone-success pt-0.5 mr-0.5\",\n\t\t\t};\n\t\t},\n\t\tfontSize() {\n\t\t\tconst sizeException = this.sizeExceptions[this.icon];\n\t\t\tif (sizeException) {\n\t\t\t\treturn sizeException;\n\t\t\t}\n\n\t\t\treturn this.small ? \"16px !important\" : \"20px !important\";\n\t\t},\n\t\tisRawIcon(): boolean {\n\t\t\treturn this.icons?.[0].startsWith(\"raw-\") ?? false;\n\t\t},\n\t\tparsedIcons() {\n\t\t\treturn this.icons?.map(i =>\n\t\t\t\ti.slice(-3) === \"-lg\" || i.slice(-3) === \"-sm\"\n\t\t\t\t\t? i.slice(0, -3)\n\t\t\t\t\t: i.slice(0, 4) === \"raw-\"\n\t\t\t\t\t? i.slice(4)\n\t\t\t\t\t: i,\n\t\t\t);\n\t\t},\n\t},\n});\n","import { render } from \"./MultiIcon.vue?vue&type=template&id=e22eb056&ts=true\"\nimport script from \"./MultiIcon.vue?vue&type=script&lang=ts\"\nexport * from \"./MultiIcon.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { defineComponent } from \"@vue/runtime-core\";\nimport { PropType } from \"vue\";\nimport { Event, EventState, CoursePrivilege } from \"@/models\";\nimport Card from \"@/components/ui/Card.vue\";\nimport Timestamp from \"@/components/ui/Timestamp.vue\";\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport { icons as eventStatesIcons } from \"@/assets/eventStateIcons\";\nimport MultiIcon from \"@/components/ui/MultiIcon.vue\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport { coursePrivilegeMixin } from \"@/mixins\";\nimport CopyToClipboard from \"@/components/ui/CopyToClipboard.vue\";\n\nexport default defineComponent({\n\tcomponents: {\n\t\tCard,\n\t\tTimestamp,\n\t\tMultiIcon,\n\t\tBtn,\n\t\tCopyToClipboard,\n\t},\n\tname: \"EventEditorPreview\",\n\tmixins: [coursePrivilegeMixin],\n\tprops: {\n\t\tevent: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\tbuttonIconsOnly: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tallowClose: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tCoursePrivilege,\n\t\t\tEventState,\n\t\t};\n\t},\n\tcomputed: {\n\t\tpreviewTitle(): string {\n\t\t\treturn (this.event?.name ?? \"\").trim().length > 0\n\t\t\t\t? (this.event.name as string)\n\t\t\t\t: _(\"event_preview.unnamed_event\");\n\t\t},\n\t\tisDraft(): boolean {\n\t\t\treturn this.event.state === EventState.DRAFT;\n\t\t},\n\t\teventStateIcons() {\n\t\t\treturn eventStatesIcons[this.event.state as EventState];\n\t\t},\n\t\thasBegun() {\n\t\t\treturn (\n\t\t\t\tthis.event.state === EventState.OPEN || this.event.state === EventState.RESTRICTED\n\t\t\t);\n\t\t},\n\t\tcanReopen() {\n\t\t\treturn (\n\t\t\t\tthis.hasEnded &&\n\t\t\t\t// TODO use absolute time to avoid tz issues\n\t\t\t\tMath.abs(\n\t\t\t\t\tnew Date().getTime() - new Date(this.event.begin_timestamp ?? \"\").getTime(),\n\t\t\t\t) /\n\t\t\t\t\t3600000 <\n\t\t\t\t\t24\n\t\t\t);\n\t\t},\n\t\thasEnded() {\n\t\t\treturn this.event.state === EventState.CLOSED;\n\t\t},\n\t\thalfClosed() {\n\t\t\treturn this.event.state === EventState.RESTRICTED;\n\t\t},\n\t\tpermalink(): string {\n\t\t\treturn (\n\t\t\t\twindow.location.origin +\n\t\t\t\tthis.$router.resolve({\n\t\t\t\t\tname: \"ExamParticipationPreview\",\n\t\t\t\t\tparams: { examId: this.event.id },\n\t\t\t\t}).fullPath\n\t\t\t);\n\t\t},\n\t},\n});\n","import { render } from \"./EventEditorPreview.vue?vue&type=template&id=720dc250&ts=true\"\nimport script from \"./EventEditorPreview.vue?vue&type=script&lang=ts\"\nexport * from \"./EventEditorPreview.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, normalizeStyle as _normalizeStyle, createTextVNode as _createTextVNode } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"flex items-center space-x-0.5\"\n}\nconst _hoisted_2 = { class: \"font-medium\" }\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"span\", {\n style: {\"font-size\":\"25px !important\"},\n class: \"material-icons-outlined -mb-0.5\"\n}, \" fullscreen \", -1)\nconst _hoisted_4 = { class: \"relative\" }\nconst _hoisted_5 = { class: \"flex items-center mb-3\" }\nconst _hoisted_6 = { class: \"my-auto cursor-default chip chip-sm\" }\nconst _hoisted_7 = { class: \"flex items-center\" }\nconst _hoisted_8 = { class: \"my-auto cursor-default chip chip-sm\" }\nconst _hoisted_9 = { class: \"flex items-center\" }\nconst _hoisted_10 = { class: \"relative overflow-y-hidden h-14\" }\nconst _hoisted_11 = { class: \"flex items-center mt-auto ml-auto\" }\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-xl material-icons\" }, \" edit \", -1)\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"span\", {\n style: {\"font-size\":\"25px !important\"},\n class: \"material-icons-outlined -mb-0.5\"\n}, \" fullscreen \", -1)\nconst _hoisted_14 = {\n key: 2,\n class: \"\"\n}\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg material-icons-outlined\" }, \" done \", -1)\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg material-icons-outlined\" }, \" done \", -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_MultiIcon = _resolveComponent(\"MultiIcon\")!\n const _component_Tooltip = _resolveComponent(\"Tooltip\")!\n const _component_Tag = _resolveComponent(\"Tag\")!\n const _component_FadedEdgesScrollableFragment = _resolveComponent(\"FadedEdgesScrollableFragment\")!\n const _component_ProcessedTextFragment = _resolveComponent(\"ProcessedTextFragment\")!\n const _component_FullExercise = _resolveComponent(\"FullExercise\")!\n const _component_Dialog = _resolveComponent(\"Dialog\")!\n\n return (_openBlock(), _createElementBlock(\"div\", null, [\n (_ctx.reduced)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"p\", _hoisted_2, _toDisplayString(_ctx.previewTitle), 1),\n (_ctx.previewable)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 0,\n variant: 'icon',\n outline: true,\n tooltip: _ctx.$t('misc.preview'),\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.showPreview = true))\n }, {\n default: _withCtx(() => [\n _hoisted_3\n ]),\n _: 1\n }, 8, [\"tooltip\"]))\n : _createCommentVNode(\"\", true)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: _normalizeClass([\"flex flex-col h-full card card-border\", {\n\t\t\t\t'card-hoverable hover:border-transparent hover-shadow-elevation': _ctx.hoverable,\n\t\t\t\t'outline-success outline-4 border-transparent': _ctx.highlighted,\n\t\t\t\t'bg-gray-50 opacity-60': _ctx.selectionDisabled,\n\t\t\t}])\n }, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"h4\", {\n class: _normalizeClass([\"mr-4\", {\n\t\t\t\t\t\t\t'text-muted font-semibold': _ctx.exercise.label?.length === 0,\n\t\t\t\t\t\t}])\n }, _toDisplayString(_ctx.previewTitle), 3),\n _createVNode(_component_Tooltip, {\n noArrow: true,\n placement: 'bottom',\n textValue: _ctx.$t('exercise_states.' + _ctx.exercise.state)\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"div\", _hoisted_7, [\n _createVNode(_component_MultiIcon, {\n class: \"-ml-1\",\n icons: _ctx.exerciseStateIcons\n }, null, 8, [\"icons\"])\n ])\n ])\n ]),\n _: 1\n }, 8, [\"textValue\"]),\n _createVNode(_component_Tooltip, {\n noArrow: true,\n placement: 'bottom',\n textValue: _ctx.$t('exercise_types.' + _ctx.exercise.exercise_type)\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_8, [\n _createElementVNode(\"div\", _hoisted_9, [\n _createVNode(_component_MultiIcon, {\n class: _normalizeClass([\"-ml-1\", {\n\t\t\t\t\t\t\t\t\t\t'-ml-1.5 mt-1': _ctx.exercise.exercise_type === _ctx.ExerciseType.JS,\n\t\t\t\t\t\t\t\t\t}]),\n icons: _ctx.exerciseTypeIcons\n }, null, 8, [\"class\", \"icons\"])\n ])\n ])\n ]),\n _: 1\n }, 8, [\"textValue\"])\n ]),\n _createVNode(_component_FadedEdgesScrollableFragment, {\n class: \"flex mb-2\",\n id: _ctx.tagsDivId,\n style: _normalizeStyle(_ctx.tagsDivStyle)\n }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.tags, (tag, index) => {\n return (_openBlock(), _createBlock(_component_Tag, {\n class: _normalizeClass([\"mr-1\", { 'z-10': index === _ctx.tags.length - 1 }]),\n key: _ctx.elementId + '-tag-' + index,\n tag: tag,\n small: true\n }, null, 8, [\"class\", \"tag\"]))\n }), 128))\n ]),\n _: 1\n }, 8, [\"id\", \"style\"])\n ]),\n _createElementVNode(\"div\", _hoisted_10, [\n _createVNode(_component_ProcessedTextFragment, {\n style: {\"display\":\"-webkit-box\",\"-webkit-line-clamp\":\"2\",\"-webkit-box-orient\":\"vertical\",\"overflow\":\"hidden\"},\n class: \"w-full overflow-x-hidden overflow-ellipsis text-muted\",\n value: _ctx.previewText\n }, null, 8, [\"value\"])\n ]),\n _createElementVNode(\"div\", _hoisted_11, [\n (_ctx.showEdit)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 0,\n onClick: _ctx.emitEdit,\n variant: 'icon',\n outline: true,\n class: \"icon-btn-primary\",\n tooltip: _ctx.$t('misc.edit')\n }, {\n default: _withCtx(() => [\n _hoisted_12\n ]),\n _: 1\n }, 8, [\"onClick\", \"tooltip\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.previewable)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 1,\n class: \"ml-auto\",\n variant: 'icon',\n outline: true,\n tooltip: _ctx.$t('misc.preview'),\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.showPreview = true))\n }, {\n default: _withCtx(() => [\n _hoisted_13\n ]),\n _: 1\n }, 8, [\"tooltip\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.selectable)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_14, [\n ((_ctx.selectButtonTitle?.length ?? 0) === 0)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 0,\n variant: 'icon',\n outline: true,\n tooltip: _ctx.$t('misc.select'),\n forceActive: _ctx.highlighted,\n disabled: _ctx.selectionDisabled,\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.onSelection())),\n class: _normalizeClass({ 'icon-btn-success': _ctx.highlighted })\n }, {\n default: _withCtx(() => [\n _hoisted_15\n ]),\n _: 1\n }, 8, [\"tooltip\", \"forceActive\", \"disabled\", \"class\"]))\n : (_openBlock(), _createBlock(_component_Tooltip, {\n key: 1,\n textValue: _ctx.selectButtonTitle,\n placement: 'bottom'\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Btn, {\n variant: 'icon',\n outline: true,\n forceActive: _ctx.highlighted,\n disabled: _ctx.selectionDisabled,\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.onSelection()))\n }, {\n default: _withCtx(() => [\n _hoisted_16\n ]),\n _: 1\n }, 8, [\"forceActive\", \"disabled\"])\n ]),\n _: 1\n }, 8, [\"textValue\"]))\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ], 2)),\n _createVNode(_component_Dialog, {\n showDialog: _ctx.showPreview,\n onYes: _cache[4] || (_cache[4] = ($event: any) => (_ctx.showPreview = false)),\n confirmOnly: true,\n fullWidth: true,\n dismissible: true\n }, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"misc.exercise_preview_title\")), 1)\n ]),\n body: _withCtx(() => [\n _createVNode(_component_FullExercise, {\n exercise: _ctx.exercise,\n showTags: false\n }, null, 8, [\"exercise\"])\n ]),\n _: 1\n }, 8, [\"showDialog\"])\n ]))\n}","\n\n\n\n\n","import { render } from \"./Tag.vue?vue&type=template&id=2913f64c\"\nimport script from \"./Tag.vue?vue&type=script&lang=js\"\nexport * from \"./Tag.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_AbstractEventParticipationSlot = _resolveComponent(\"AbstractEventParticipationSlot\")!\n\n return (_openBlock(), _createBlock(_component_AbstractEventParticipationSlot, {\n modelValue: _ctx.exerciseWrapperSlot,\n allowEditAssessment: false,\n allowEditSubmission: false,\n showAnswer: false,\n showTags: _ctx.showTags\n }, null, 8, [\"modelValue\", \"showTags\"]))\n}","import { renderSlot as _renderSlot, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withCtx as _withCtx, createVNode as _createVNode, normalizeClass as _normalizeClass, renderList as _renderList, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = { class: \"w-full\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"flex flex-wrap items-center\"\n}\nconst _hoisted_3 = { class: \"mb-0.5 mr-4\" }\nconst _hoisted_4 = {\n key: 2,\n class: \"w-full md:w-1/2\"\n}\nconst _hoisted_5 = {\n key: 1,\n class: \"flex flex-col mt-4 space-y-1 text-sm md:space-y-0 md:flex-row md:space-x-4\"\n}\nconst _hoisted_6 = {\n key: 0,\n class: \"flex items-center\"\n}\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mr-1 text-sm material-icons-outlined text-muted\" }, \" visibility \", -1)\nconst _hoisted_8 = { class: \"text-muted\" }\nconst _hoisted_9 = {\n key: 1,\n class: \"flex items-center\"\n}\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mr-1 text-sm material-icons-outlined text-muted\" }, \" question_answer \", -1)\nconst _hoisted_11 = { class: \"text-muted\" }\nconst _hoisted_12 = {\n key: 2,\n class: \"mt-8 sub-slot-container\"\n}\nconst _hoisted_13 = { class: \"text-lg\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Exercise = _resolveComponent(\"Exercise\")!\n const _component_ClozeExercise = _resolveComponent(\"ClozeExercise\")!\n const _component_ParticipationSlotAssessment = _resolveComponent(\"ParticipationSlotAssessment\")!\n const _component_Timestamp = _resolveComponent(\"Timestamp\")!\n const _component_AbstractEventParticipationSlot = _resolveComponent(\"AbstractEventParticipationSlot\", true)!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass({ 'pl-4': _ctx.subSlot })\n }, [\n _createElementVNode(\"div\", _hoisted_1, [\n (_ctx.$slots.default)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _renderSlot(_ctx.$slots, \"default\")\n ])\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", {\n class: _normalizeClass({\n\t\t\t\t\t'flex flex-col space-y-4': _ctx.allowEditAssessment || _ctx.showAssessmentCard,\n\t\t\t\t\t'md:flex-row md:space-x-8 md:space-y-0': true || !_ctx.subSlot,\n\t\t\t\t})\n }, [\n (_ctx.exercise.exercise_type !== _ctx.ExerciseType.COMPLETION)\n ? (_openBlock(), _createBlock(_component_Exercise, {\n key: 0,\n exercise: _ctx.exercise,\n showReadOnlyAnswer: _ctx.showAnswer,\n submission: _ctx.submission,\n readOnly: !_ctx.allowEditSubmission,\n showLabel: _ctx.showExerciseLabel,\n showSolution: _ctx.showSolutionAndScores,\n showPublicTags: _ctx.showTags,\n onUpdateSubmission: _cache[0] || (_cache[0] = ($event: any) => (_ctx.onUpdateSubmission($event))),\n onRunCode: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$emit('runCode', _ctx.modelValue))),\n onBlur: _cache[2] || (_cache[2] = ($event: any) => (_ctx.$emit('blur', _ctx.modelValue))),\n class: \"w-full\"\n }, null, 8, [\"exercise\", \"showReadOnlyAnswer\", \"submission\", \"readOnly\", \"showLabel\", \"showSolution\", \"showPublicTags\"]))\n : (_openBlock(), _createBlock(_component_ClozeExercise, {\n key: 1,\n class: \"w-full\",\n onUpdateSubmission: _cache[3] || (_cache[3] = ($event: any) => (_ctx.$emit('updateSubmission', $event))),\n slot: _ctx.modelValue,\n showScores: _ctx.showSolutionAndScores,\n readOnly: !_ctx.allowEditSubmission\n }, null, 8, [\"slot\", \"showScores\", \"readOnly\"])),\n (_ctx.showAssessmentCard)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createVNode(_component_ParticipationSlotAssessment, {\n assessment: _ctx.assessment,\n readOnly: !_ctx.allowEditAssessment,\n expanded: _ctx.assessmentExpanded,\n writeOnly: _ctx.assessmentWriteOnly,\n onToggleExpanded: _cache[4] || (_cache[4] = ($event: any) => (_ctx.setAssessmentExpanded($event))),\n onSave: _cache[5] || (_cache[5] = ($event: any) => (_ctx.onSaveAssessment($event))),\n onUpdateAssessment: _cache[6] || (_cache[6] = ($event: any) => (_ctx.onUpdateAssessment($event))),\n maxScore: _ctx.modelValue.weight,\n loading: _ctx.assessmentLoading\n }, {\n scoreTitle: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"misc.score\")) + \": \", 1)\n ]),\n _: 1\n }, 8, [\"assessment\", \"readOnly\", \"expanded\", \"writeOnly\", \"maxScore\", \"loading\"])\n ]))\n : _createCommentVNode(\"\", true)\n ], 2),\n (_ctx.allowEditAssessment && (_ctx.modelValue.seen_at || _ctx.modelValue.answered_at))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n (_ctx.modelValue.seen_at)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _hoisted_7,\n _createElementVNode(\"span\", _hoisted_8, _toDisplayString(_ctx.$t(\"event_assessment.exercise_seen_at\")) + \" \", 1),\n _createVNode(_component_Timestamp, {\n value: _ctx.modelValue.seen_at\n }, null, 8, [\"value\"])\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.modelValue.answered_at)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [\n _hoisted_10,\n _createElementVNode(\"span\", _hoisted_11, _toDisplayString(_ctx.$t(\"event_assessment.exercise_answered_at\")) + \" \", 1),\n _createVNode(_component_Timestamp, {\n value: _ctx.modelValue.answered_at\n }, null, 8, [\"value\"])\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.exercise.exercise_type === _ctx.ExerciseType.AGGREGATED)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_12, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.modelValue.sub_slots, (subSlot, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: _ctx.modelValue.id + '-sub-slot-' + subSlot.id,\n class: _normalizeClass({ 'mb-8': index !== _ctx.modelValue.sub_slots.length - 1 })\n }, [\n _createVNode(_component_AbstractEventParticipationSlot, {\n subSlot: true,\n modelValue: subSlot,\n allowEditAssessment: _ctx.allowEditAssessment,\n allowEditSubmission: _ctx.allowEditSubmission,\n showAssessmentCard: _ctx.showAssessmentCard,\n showSolutionAndScores: _ctx.showSolutionAndScores,\n assessmentControlsVisibility: _ctx.assessmentControlsVisibility,\n onRunCode: _cache[7] || (_cache[7] = ($event: any) => (_ctx.$emit('runCode', $event))),\n onSetAssessmentExpanded: _cache[8] || (_cache[8] = ($event: any) => (_ctx.$emit('setAssessmentExpanded', $event))),\n onUpdateAssessment: _cache[9] || (_cache[9] = ($event: any) => (_ctx.$emit('updateAssessment', $event))),\n onUpdateSubmission: _cache[10] || (_cache[10] = ($event: any) => (_ctx.$emit('updateSubmission', $event))),\n onBlur: _cache[11] || (_cache[11] = ($event: any) => (_ctx.$emit('blur', $event))),\n onSaveAssessment: _cache[12] || (_cache[12] = ($event: any) => (_ctx.$emit('saveAssessment', $event)))\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"h4\", _hoisted_13, _toDisplayString(_ctx.$t(\"event_participation_page.exercise\")) + \" \" + _toDisplayString(_ctx.modelValue.slot_number + 1) + \".\" + _toDisplayString(subSlot.slot_number + 1), 1)\n ]),\n _: 2\n }, 1032, [\"modelValue\", \"allowEditAssessment\", \"allowEditSubmission\", \"showAssessmentCard\", \"showSolutionAndScores\", \"assessmentControlsVisibility\"])\n ], 2))\n }), 128))\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ], 2))\n}","import { resolveDynamicComponent as _resolveDynamicComponent, mergeProps as _mergeProps, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createBlock(_resolveDynamicComponent(_ctx.exerciseComponentName), _mergeProps(_ctx.$props, {\n onUpdateSubmission: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('updateSubmission', $event))),\n onRunCode: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$emit('runCode'))),\n onBlur: _cache[2] || (_cache[2] = ($event: any) => (_ctx.$emit('blur')))\n }), null, 16))\n}","import { toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createBlock as _createBlock, normalizeProps as _normalizeProps, guardReactiveProps as _guardReactiveProps } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"flex items-center mb-2 space-x-2\"\n}\nconst _hoisted_2 = {\n key: 0,\n class: \"flex items-center mb-2 space-x-2\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_CheckboxGroup = _resolveComponent(\"CheckboxGroup\")!\n const _component_RadioGroup = _resolveComponent(\"RadioGroup\")!\n const _component_AbstractExercise = _resolveComponent(\"AbstractExercise\")!\n\n return (_openBlock(), _createBlock(_component_AbstractExercise, _normalizeProps(_guardReactiveProps(_ctx.$props)), {\n submissionControls: _withCtx(() => [\n (_ctx.exercise.exercise_type === _ctx.ExerciseType.MULTIPLE_CHOICE_MULTIPLE_POSSIBLE)\n ? (_openBlock(), _createBlock(_component_CheckboxGroup, {\n key: 0,\n options: _ctx.exerciseChoicesAsOptions,\n modelValue: _ctx.selectedChoicesProxy,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.selectedChoicesProxy) = $event)),\n disabled: _ctx.readOnly\n }, {\n item: _withCtx(({ description }) => [\n (_ctx.showSolution)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"p\", {\n class: _normalizeClass([{\n\t\t\t\t\t\t\t\t'text-success': description === 'done',\n\t\t\t\t\t\t\t\t'text-danger-dark': description === 'close',\n\t\t\t\t\t\t\t}, \"text-sm font-semibold text-muted material-icons-outlined\"])\n }, _toDisplayString(description), 3)\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }, 8, [\"options\", \"modelValue\", \"disabled\"]))\n : (\n\t\t\t\t\t_ctx.exercise.exercise_type === _ctx.ExerciseType.MULTIPLE_CHOICE_SINGLE_POSSIBLE\n\t\t\t\t)\n ? (_openBlock(), _createBlock(_component_RadioGroup, {\n key: 1,\n options: _ctx.exerciseChoicesAsOptions,\n modelValue: _ctx.selectedChoicesProxy,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((_ctx.selectedChoicesProxy) = $event)),\n disabled: _ctx.readOnly\n }, {\n item: _withCtx(({ description }) => [\n (_ctx.showSolution)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createElementVNode(\"p\", {\n class: _normalizeClass([{\n\t\t\t\t\t\t\t\t'text-success': description === 'done',\n\t\t\t\t\t\t\t\t'text-danger-dark': description === 'close',\n\t\t\t\t\t\t\t}, \"text-sm font-semibold text-muted material-icons-outlined\"])\n }, _toDisplayString(description), 3)\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }, 8, [\"options\", \"modelValue\", \"disabled\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }, 16))\n}","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, resolveComponent as _resolveComponent, createBlock as _createBlock, renderSlot as _renderSlot, createVNode as _createVNode } from \"vue\"\n\nconst _hoisted_1 = { key: 0 }\nconst _hoisted_2 = {\n key: 1,\n class: \"flex flex-wrap items-center mt-1 mb-2.5\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Tag = _resolveComponent(\"Tag\")!\n const _component_ProcessedTextFragment = _resolveComponent(\"ProcessedTextFragment\")!\n\n return (_openBlock(), _createElementBlock(\"div\", null, [\n (_ctx.showLabel)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"h3\", null, _toDisplayString(_ctx.exerciseTitle), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.showPrivateTags || _ctx.showPublicTags)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.tags, (tag) => {\n return (_openBlock(), _createBlock(_component_Tag, {\n key: 'tag-' + tag.id + '-slot-' + _ctx.exercise.id,\n tag: tag,\n class: \"mb-0.5 mr-2\"\n }, null, 8, [\"tag\"]))\n }), 128))\n ]))\n : _createCommentVNode(\"\", true),\n _renderSlot(_ctx.$slots, \"exerciseText\", {}, () => [\n _createVNode(_component_ProcessedTextFragment, {\n class: \"mb-4 user-content\",\n value: _ctx.exercise.text\n }, null, 8, [\"value\"])\n ]),\n (!_ctx.readOnly || !_ctx.$slots.readOnlyAnswer?.())\n ? _renderSlot(_ctx.$slots, \"submissionControls\", { key: 2 })\n : (_ctx.showReadOnlyAnswer)\n ? _renderSlot(_ctx.$slots, \"readOnlyAnswer\", { key: 3 })\n : _createCommentVNode(\"\", true),\n _renderSlot(_ctx.$slots, \"extras\")\n ]))\n}","import { Exercise, EventParticipationSlotSubmission, getEmptySubmission } from \"@/models\";\nimport { PropType } from \"@vue/runtime-core\";\n\nexport const exerciseProps = {\n\texercise: {\n\t\ttype: Object as PropType,\n\t\trequired: true as const,\n\t},\n\tsubmission: {\n\t\ttype: Object as PropType,\n\t\tdefault: getEmptySubmission,\n\t},\n\treadOnly: {\n\t\ttype: Boolean,\n\t\tdefault: false,\n\t},\n\tshowReadOnlyAnswer: {\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t},\n\tshowSolution: {\n\t\ttype: Boolean,\n\t\tdefault: false,\n\t},\n\tshowPublicTags: {\n\t\ttype: Boolean,\n\t\tdefault: false,\n\t},\n\tshowPrivateTags: {\n\t\ttype: Boolean,\n\t\tdefault: false,\n\t},\n\tshowLabel: {\n\t\ttype: Boolean,\n\t\tdefault: false,\n\t},\n};\n","\nimport { Tag as ITag } from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport ProcessedTextFragment from \"@/components/ui/ProcessedTextFragment.vue\";\nimport { exerciseProps } from \"./shared\";\nimport { getExerciseTitle } from \"@/utils\";\nimport Tag from \"@/components/ui/Tag.vue\";\nexport default defineComponent({\n\tname: \"AbstractExercise\",\n\tprops: {\n\t\t...exerciseProps,\n\t},\n\tmethods: {},\n\tcomputed: {\n\t\texerciseTitle(): string {\n\t\t\treturn getExerciseTitle(this.exercise);\n\t\t},\n\t\ttags(): ITag[] {\n\t\t\treturn [\n\t\t\t\t...(this.showPrivateTags ? this.exercise.private_tags ?? [] : []),\n\t\t\t\t...(this.showPublicTags ? this.exercise.public_tags ?? [] : []),\n\t\t\t];\n\t\t},\n\t},\n\tcomponents: { ProcessedTextFragment, Tag },\n});\n","import { render } from \"./AbstractExercise.vue?vue&type=template&id=b4e5da6a&ts=true\"\nimport script from \"./AbstractExercise.vue?vue&type=script&lang=ts\"\nexport * from \"./AbstractExercise.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, createStaticVNode as _createStaticVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"mdc-form-field\" }\nconst _hoisted_2 = [\"id\"]\nconst _hoisted_3 = [\"id\", \"name\"]\nconst _hoisted_4 = /*#__PURE__*/_createStaticVNode(\"
\", 2)\nconst _hoisted_6 = [\"for\"]\nconst _hoisted_7 = [\"innerHTML\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.options, (option, index) => {\n return (_openBlock(), _createElementBlock(\"label\", {\n class: _normalizeClass([[\n\t\t\t\t_ctx.disabled ? '' : 'checkbox-container',\n\t\t\t\t'relative flex space-x-1.5 items-start ',\n\t\t\t\t_ctx.optionClass,\n\t\t\t\t_ctx.itemClass,\n\t\t\t], \"checkbox-item\"]),\n key: _ctx.id + '-checkbox-' + index\n }, [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n id: _ctx.id + '-checkbox-' + index,\n class: \"mdc-checkbox\"\n }, [\n _createElementVNode(\"input\", {\n id: _ctx.id + '-checkbox-' + index + '-native',\n type: \"checkbox\",\n class: \"mdc-checkbox__native-control\",\n name: _ctx.id\n }, null, 8, _hoisted_3),\n _hoisted_4\n ], 8, _hoisted_2),\n _createElementVNode(\"label\", {\n for: _ctx.id + '-checkbox-' + index + '-native'\n }, [\n _createElementVNode(\"div\", {\n innerHTML: option.content\n }, null, 8, _hoisted_7)\n ], 8, _hoisted_6)\n ])\n ], 2))\n }), 128))\n ]))\n}","\nimport { SelectableOption } from \"@/interfaces\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport { v4 as uuid4 } from \"uuid\";\nimport { MDCCheckbox } from \"@material/checkbox\";\n\nexport default defineComponent({\n\tname: \"CheckboxGroup\",\n\t//props: ['options', 'modelValue', 'disabled'],\n\tprops: {\n\t\toptions: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\tmodelValue: {\n\t\t\ttype: Array as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tlabelClass: {\n\t\t\ttype: String,\n\t\t\tdefault: \"\",\n\t\t},\n\t\toptionClass: {\n\t\t\ttype: String,\n\t\t\tdefault: \"\",\n\t\t},\n\t\tuseToggles: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tusesCustomSlot: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\titemClass: {\n\t\t\ttype: String,\n\t\t\tdefault: \"\",\n\t\t},\n\t},\n\t// when disabled changes, update the checkboxes\n\twatch: {\n\t\tdisabled: {\n\t\t\thandler() {\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\tthis.checkboxes.forEach(checkbox => {\n\t\t\t\t\t\tcheckbox.disabled = this.disabled;\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\timmediate: true,\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.options.map((option, i) => {\n\t\t\tconst checkbox = new MDCCheckbox(\n\t\t\t\tdocument.getElementById(this.id + \"-checkbox-\" + i) as Element,\n\t\t\t);\n\t\t\tthis.checkboxes.push(checkbox);\n\n\t\t\tcheckbox.checked = this.modelValue.includes(option.value);\n\t\t\tcheckbox.disabled = this.disabled;\n\n\t\t\t// attach event listener\n\t\t\tcheckbox.listen(\"input\", e => {\n\t\t\t\tconsole.log(e);\n\t\t\t\tthis.$emit(\n\t\t\t\t\t\"update:modelValue\",\n\t\t\t\t\t(e.target as HTMLInputElement).checked\n\t\t\t\t\t\t? [...this.modelValue, option.value]\n\t\t\t\t\t\t: this.modelValue.filter(v => v !== option.value),\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tid: \"a\" + uuid4(),\n\t\t\tcheckboxes: [] as any[],\n\t\t};\n\t},\n\tmethods: {\n\t\tonToggleUpdate(event: unknown, option: SelectableOption) {\n\t\t\tif (event) {\n\t\t\t\t// new selection\n\t\t\t\tthis.proxyModelValue = [...this.proxyModelValue, option.value];\n\t\t\t} else {\n\t\t\t\t// deselection\n\t\t\t\tthis.proxyModelValue = this.proxyModelValue.filter(v => v !== option.value);\n\t\t\t}\n\t\t},\n\t},\n\tcomputed: {\n\t\tproxyModelValue: {\n\t\t\tget(): unknown[] {\n\t\t\t\treturn this.modelValue;\n\t\t\t},\n\t\t\tset(val: SelectableOption[]) {\n\t\t\t\tthis.$emit(\"update:modelValue\", val);\n\t\t\t},\n\t\t},\n\t},\n});\n","import { render } from \"./CheckboxGroup.vue?vue&type=template&id=b53a94ae&ts=true\"\nimport script from \"./CheckboxGroup.vue?vue&type=script&lang=ts\"\nexport * from \"./CheckboxGroup.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { Exercise, ExerciseType, programmingExerciseTypes } from \"@/models\";\n\nexport const isProgrammingExercise = (exercise: Exercise): boolean =>\n\tprogrammingExerciseTypes.includes(exercise.exercise_type as ExerciseType);\n\nexport const isOpenAnswerExercise = (exercise: Exercise): boolean =>\n\texercise.exercise_type === ExerciseType.OPEN_ANSWER;\n\nexport const isMultipleChoiceExercise = (exercise: Exercise): boolean =>\n\t[\n\t\tExerciseType.MULTIPLE_CHOICE_MULTIPLE_POSSIBLE,\n\t\tExerciseType.MULTIPLE_CHOICE_SINGLE_POSSIBLE,\n\t].includes(exercise.exercise_type as ExerciseType);\n\nexport const getAssessableSubExercises = (exercise: Exercise): Exercise[] => {\n\tif (exercise.exercise_type === ExerciseType.AGGREGATED) {\n\t\treturn exercise.sub_exercises ?? [];\n\t}\n\tif (exercise.exercise_type !== ExerciseType.COMPLETION) {\n\t\treturn [];\n\t}\n\t// for cloze exercises, only include sub-exercises which have a placeholder\n\t// that references their id in the main exercise text\n\treturn (exercise.sub_exercises ?? []).filter(e =>\n\t\texercise.text.includes(`[[${e.id}]]`),\n\t);\n};\n\nexport const getMaxScore = (exercise: Exercise): number | null => {\n\tconst exType = exercise.exercise_type as ExerciseType;\n\tif ([ExerciseType.OPEN_ANSWER, ExerciseType.ATTACHMENT].includes(exType)) {\n\t\treturn null;\n\t}\n\tif ([ExerciseType.COMPLETION, ExerciseType.AGGREGATED].includes(exType)) {\n\t\tconst assessable_sub_exercises = getAssessableSubExercises(exercise);\n\t\treturn (\n\t\t\tassessable_sub_exercises\n\t\t\t\t// TODO is 0 the appropriate default? what if I have an aggregated exercise, the sub-exercise is an open answer and its weight is 3? shouldn't it have a 3?\n\t\t\t\t.map(s => (getMaxScore(s) ?? 0) * (s.child_weight ?? 0))\n\t\t\t\t.reduce((a, b) => a + b, 0)\n\t\t);\n\t}\n\tif ([ExerciseType.C, ExerciseType.JS, ExerciseType.PYTHON].includes(exType)) {\n\t\treturn (exercise.testcases ?? []).length;\n\t}\n\tif (exType === ExerciseType.MULTIPLE_CHOICE_SINGLE_POSSIBLE) {\n\t\tconst choices = exercise.choices ?? [];\n\t\tif (choices.length === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\treturn Math.max(...choices.map(c => c.correctness ?? 0));\n\t}\n\tif (exType === ExerciseType.MULTIPLE_CHOICE_MULTIPLE_POSSIBLE) {\n\t\treturn (exercise.choices ?? [])\n\t\t\t.filter(c => (c.correctness ?? 0) > 0)\n\t\t\t.map(c => c.correctness ?? 0)\n\t\t\t.reduce((a, b) => a + b, 0);\n\t}\n\tthrow new Error(\"undefined for exercise type \" + exType);\n};\n\nexport const getCorrectChoices = (exercise: Exercise): string[] => {\n\tconst choices = exercise.choices ?? [];\n\tconst subExercises = exercise.sub_exercises ?? [];\n\tif (exercise.exercise_type === ExerciseType.MULTIPLE_CHOICE_MULTIPLE_POSSIBLE) {\n\t\treturn choices.filter(c => (c.correctness ?? 0) >= 0).map(c => c.id);\n\t}\n\tif (exercise.exercise_type === ExerciseType.MULTIPLE_CHOICE_SINGLE_POSSIBLE) {\n\t\tconst maxCorrectness = Math.max(...choices.map(c => c.correctness ?? 0));\n\t\treturn choices\n\t\t\t.filter(\n\t\t\t\tc => (c.correctness ?? 0) == maxCorrectness, // TODO use === once api normalization is complete\n\t\t\t)\n\t\t\t.map(c => c.id);\n\t}\n\tif (exercise.exercise_type === ExerciseType.COMPLETION) {\n\t\treturn subExercises.flatMap(s => getCorrectChoices(s));\n\t}\n\treturn [];\n};\n","\nimport {\n\tEventParticipationSlotSubmission,\n\tExercise,\n\tExerciseChoice,\n\tExerciseType,\n\tgetEmptySubmission,\n} from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport AbstractExercise from \"./AbstractExercise.vue\";\nimport CheckboxGroup from \"@/components/ui/CheckboxGroup.vue\";\nimport RadioGroup from \"@/components/ui/RadioGroup.vue\";\nimport { SelectableOption } from \"@/interfaces\";\nimport { formatExerciseText, stripHtmlFromLaTexBlocks } from \"@/utils\";\nimport { exerciseProps } from \"./shared\";\nimport { getCorrectChoices } from \"./utils\";\nexport default defineComponent({\n\tname: \"MultipleChoiceExercise\",\n\tprops: {\n\t\t...exerciseProps,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tExerciseType,\n\t\t};\n\t},\n\tmethods: {},\n\tcomputed: {\n\t\tselectedChoicesProxy: {\n\t\t\tget() {\n\t\t\t\treturn this.submission.selected_choices;\n\t\t\t},\n\t\t\tset(val: string | string[]) {\n\t\t\t\tthis.$emit(\"updateSubmission\", [\n\t\t\t\t\t\"selected_choices\",\n\t\t\t\t\ttypeof val === \"object\" ? val : [val],\n\t\t\t\t]);\n\t\t\t},\n\t\t},\n\t\tcorrectChoices(): string[] {\n\t\t\treturn getCorrectChoices(this.exercise);\n\t\t},\n\t\texerciseChoicesAsOptions(): SelectableOption[] {\n\t\t\tif (\n\t\t\t\tthis.exercise.exercise_type !== ExerciseType.MULTIPLE_CHOICE_SINGLE_POSSIBLE &&\n\t\t\t\tthis.exercise.exercise_type !== ExerciseType.MULTIPLE_CHOICE_MULTIPLE_POSSIBLE\n\t\t\t) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\treturn (this.exercise.choices as ExerciseChoice[]).map(c => ({\n\t\t\t\tvalue: c.id,\n\t\t\t\t// TODO extract this sanitizing (it's the same as in ProcessedTextFragment.vue)\n\t\t\t\tcontent: this.$sanitize(stripHtmlFromLaTexBlocks(formatExerciseText(c.text))),\n\t\t\t\tdescription: this.showSolution\n\t\t\t\t\t? this.correctChoices.includes(c.id)\n\t\t\t\t\t\t? \"done\"\n\t\t\t\t\t\t: \"close\"\n\t\t\t\t\t: \"\", // TODO instead of putting it in the description, there should be an `extras` parameter\n\t\t\t}));\n\t\t},\n\t},\n\tcomponents: { AbstractExercise, CheckboxGroup, RadioGroup },\n});\n","import { render } from \"./MultipleChoiceExercise.vue?vue&type=template&id=0c6f1c80&ts=true\"\nimport script from \"./MultipleChoiceExercise.vue?vue&type=script&lang=ts\"\nexport * from \"./MultipleChoiceExercise.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, normalizeProps as _normalizeProps, guardReactiveProps as _guardReactiveProps, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"w-full whitespace-pre\" }\nconst _hoisted_2 = { class: \"ml-2 text-sm text-muted\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_TextEditor = _resolveComponent(\"TextEditor\")!\n const _component_ProcessedTextFragment = _resolveComponent(\"ProcessedTextFragment\")!\n const _component_AbstractExercise = _resolveComponent(\"AbstractExercise\")!\n\n return (_openBlock(), _createBlock(_component_AbstractExercise, _normalizeProps(_guardReactiveProps(_ctx.$props)), {\n submissionControls: _withCtx(() => [\n _createVNode(_component_TextEditor, {\n disabled: _ctx.readOnly,\n modelValue: _ctx.answerTextProxy,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.answerTextProxy) = $event)),\n onBlur: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$emit('blur')))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_participation_slot.text_answer_label\")), 1)\n ]),\n _: 1\n }, 8, [\"disabled\", \"modelValue\"])\n ]),\n readOnlyAnswer: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"p\", _hoisted_2, _toDisplayString(_ctx.$t(\"event_assessment.text_answer_label\")), 1),\n _createVNode(_component_ProcessedTextFragment, {\n style: {\"white-space\":\"break-spaces\"},\n class: \"w-full px-4 py-2 rounded bg-gray-50\",\n value: _ctx.answerTextProxy,\n defaultValue: _ctx.$t('misc.no_answer')\n }, null, 8, [\"value\", \"defaultValue\"])\n ])\n ]),\n _: 1\n }, 16))\n}","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, renderSlot as _renderSlot, toDisplayString as _toDisplayString, vShow as _vShow, withCtx as _withCtx, createVNode as _createVNode, withDirectives as _withDirectives, normalizeStyle as _normalizeStyle } from \"vue\"\n\nconst _hoisted_1 = [\"id\"]\nconst _hoisted_2 = [\"id\"]\nconst _hoisted_3 = [\"rows\", \"value\"]\nconst _hoisted_4 = { class: \"absolute right-0 -top-5\" }\nconst _hoisted_5 = {\n class: \"text-sm\",\n style: {\"font-weight\":\"400\",\"font-size\":\"11px\"}\n}\nconst _hoisted_6 = {\n key: 0,\n class: \"relative z-10 flex w-full hide-in-thumbnail\"\n}\nconst _hoisted_7 = {\n key: 0,\n style: {\"font-size\":\"12px\"},\n class: \"ml-auto text-sm text-muted\"\n}\nconst _hoisted_8 = {\n class: \"text-sm\",\n style: {\"font-weight\":\"400\",\"font-size\":\"11px\"}\n}\nconst _hoisted_9 = [\"innerHTML\"]\nconst _hoisted_10 = {\n key: 0,\n class: \"text-sm font-light text-danger-dark\"\n}\nconst _hoisted_11 = [\"id\"]\nconst _hoisted_12 = {\n style: {\"width\":\"16px !important\"},\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\"\n}\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"path\", {\n class: \"ql-stroke\",\n style: {\"stroke-width\":\"0.5 !important\",\"fill\":\"unset\",\"stroke\":\"#444\"},\n d: \"M12.42,5.29C11.32,5.19 10.35,6 10.25,7.11L10,10H12.82V12H9.82L9.38,17.07C9.18,19.27 7.24,20.9 5.04,20.7C3.79,20.59 2.66,19.9 2,18.83L3.5,17.33C3.83,18.38 4.96,18.97 6,18.63C6.78,18.39 7.33,17.7 7.4,16.89L7.82,12H4.82V10H8L8.27,6.93C8.46,4.73 10.39,3.1 12.6,3.28C13.86,3.39 15,4.09 15.66,5.17L14.16,6.67C13.91,5.9 13.23,5.36 12.42,5.29M22,13.65L20.59,12.24L17.76,15.07L14.93,12.24L13.5,13.65L16.35,16.5L13.5,19.31L14.93,20.72L17.76,17.89L20.59,20.72L22,19.31L19.17,16.5L22,13.65Z\"\n}, null, -1)\nconst _hoisted_14 = [\"id\"]\nconst _hoisted_15 = {\n xmlns: \"http://www.w3.org/2000/svg\",\n \"enable-background\": \"new 0 0 24 24\",\n height: \"35px\",\n viewBox: \"0 0 24 24\",\n width: \"35px\",\n style: {\"fill\":\"currentColor\",\"margin-bottom\":\"-2px\",\"margin-left\":\"-10px\",\"transform\":\"scale(1.25)\"}\n}\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"g\", null, [\n /*#__PURE__*/_createElementVNode(\"rect\", {\n fill: \"none\",\n height: \"35\",\n width: \"35\"\n })\n], -1)\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"g\", null, [\n /*#__PURE__*/_createElementVNode(\"path\", {\n class: \"ql-stroke\",\n style: {\"stroke-width\":\"0.25 !important\",\"fill\":\"unset\",\"stroke\":\"#444\"},\n d: \"M3.5,9H5v6H3.5v-2.5h-2V15H0V9h1.5v2h2V9z M17.5,9H13c-0.55,0-1,0.45-1,1v5h1.5v-4.5h1V14H16v-3.51h1V15h1.5v-5 C18.5,9.45,18.05,9,17.5,9z M11,9H6v1.5h1.75V15h1.5v-4.5H11V9z M24,15v-1.5h-2.5V9H20v6H24z\"\n })\n], -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_quill_editor = _resolveComponent(\"quill-editor\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass({ 'h-full': _ctx.tall }),\n id: _ctx.id\n }, [\n _createElementVNode(\"div\", {\n onMouseup: _cache[7] || (_cache[7] = ($event: any) => (_ctx.endDragging())),\n class: \"relative flex space-x-2\"\n }, [\n _createElementVNode(\"div\", {\n id: _ctx.resizablePanelId,\n style: _normalizeStyle(_ctx.previewPanelStyle),\n class: _normalizeClass([\"relative z-10 h-full rounded-t-sm light-input darken-on-hover bg-light\", { 'opacity-80': _ctx.disabled, 'w-full': !_ctx.showPreview }])\n }, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"z-10 h-full tex2jax_ignore ql-editor-container\", [_ctx.$slots.errors?.() ? 'ql-editor-container-error' : '']])\n }, [\n (!_ctx.showBaseEditor && !_ctx.forceBaseEditor)\n ? (_openBlock(), _createBlock(_component_quill_editor, {\n key: 0,\n options: _ctx.editorOptions,\n value: _ctx.modelValue,\n disabled: _ctx.disabled || _ctx.internalDisabled,\n onChange: _cache[0] || (_cache[0] = ($event: any) => (_ctx.onEditorChange($event))),\n onReady: _cache[1] || (_cache[1] = ($event: any) => (_ctx.onEditorReady($event)))\n }, null, 8, [\"options\", \"value\", \"disabled\"]))\n : (_openBlock(), _createElementBlock(\"textarea\", {\n key: 1,\n class: \"py-3.5 px-3.5 bg-transparent rounded-t-sm outline-none\",\n rows: _ctx.baseEditorRows,\n onInput: _cache[2] || (_cache[2] = ($event: any) => (_ctx.$emit('update:modelValue', $event.target.value))),\n value: _ctx.modelValue\n }, null, 40, _hoisted_3))\n ], 2),\n _createElementVNode(\"label\", {\n class: _normalizeClass([\"absolute -z-1 top-2 left-2 origin-0 ql-floating-label\", { 'fixed-label': _ctx.modelValue?.length > 0 }])\n }, [\n _renderSlot(_ctx.$slots, \"default\")\n ], 2),\n _createElementVNode(\"div\", _hoisted_4, [\n _withDirectives(_createVNode(_component_Btn, {\n size: 'xs',\n variant: 'primary-borderless',\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.showPreview = !_ctx.showPreview))\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"p\", _hoisted_5, _toDisplayString(_ctx.showPreview ? _ctx.$t(\"misc.hide_preview\") : _ctx.$t(\"misc.show_preview\")), 1)\n ]),\n _: 1\n }, 512), [\n [_vShow, _ctx.containsLatex]\n ])\n ]),\n (!_ctx.forceBaseEditor)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n (_ctx.showBaseEditor)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_7, _toDisplayString(_ctx.$t(\"misc.using_base_editor\")), 1))\n : _createCommentVNode(\"\", true),\n (_ctx.showBaseEditor)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 1,\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.toggleBaseEditor())),\n size: 'xs',\n class: \"ml-2\",\n variant: 'primary-borderless'\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"p\", _hoisted_8, _toDisplayString(_ctx.$t(\"misc.show_full_editor\")), 1)\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true)\n ], 14, _hoisted_2),\n (_ctx.showPreview)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n style: _normalizeStyle([_ctx.dividerStyle, {\"width\":\"5px\",\"transition-property\":\"background\"}]),\n onMousedown: _cache[5] || (_cache[5] = ($event: any) => (_ctx.startDragging())),\n class: \"absolute top-0 z-30 h-full duration-150 delay-75 bg-gray-300 bg-opacity-50 resizer hover:bg-opacity-70\"\n }, null, 36))\n : _createCommentVNode(\"\", true),\n (_ctx.showPreview)\n ? (_openBlock(), _createElementBlock(\"span\", {\n key: 1,\n onMousedown: _cache[6] || (_cache[6] = ($event: any) => (_ctx.startDragging())),\n style: _normalizeStyle({\n\t\t\t\t\t..._ctx.dividerStyle,\n\t\t\t\t\ttransform: 'translate(-40%, -50%) rotate(90deg)',\n\t\t\t\t\t'font-size': '20px !important',\n\t\t\t\t}),\n class: \"absolute z-30 opacity-30 resizer top-1/2 material-icons-outlined\"\n }, \" drag_handle \", 36))\n : _createCommentVNode(\"\", true),\n (_ctx.showPreview)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 2,\n class: \"relative px-8 py-2\",\n style: _normalizeStyle({ width: 100 - _ctx.previewPanelWidth + '%' })\n }, [\n _createElementVNode(\"div\", {\n style: {\"white-space\":\"break-spaces\"},\n class: \"w-full\",\n innerHTML: _ctx.stripHtmlFromLaTexBlocks(_ctx.modelValue)\n }, null, 8, _hoisted_9)\n ], 4))\n : _createCommentVNode(\"\", true)\n ], 32),\n (_ctx.$slots.errors?.())\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_10, [\n _renderSlot(_ctx.$slots, \"errors\")\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", {\n class: \"hidden\",\n id: _ctx.id + 'latex-button-src'\n }, [\n (_openBlock(), _createElementBlock(\"svg\", _hoisted_12, [\n _createElementVNode(\"title\", null, _toDisplayString(_ctx.$t(\"misc.insert_latex\")), 1),\n _hoisted_13\n ]))\n ], 8, _hoisted_11),\n _createElementVNode(\"div\", {\n class: \"hidden\",\n id: _ctx.id + 'html-button-src'\n }, [\n (_openBlock(), _createElementBlock(\"svg\", _hoisted_15, [\n _createElementVNode(\"title\", null, _toDisplayString(_ctx.$t(\"misc.show_base_editor\")), 1),\n _hoisted_16,\n _hoisted_17\n ]))\n ], 8, _hoisted_14)\n ], 10, _hoisted_1))\n}","\nconst BORDER_SIZE = 4;\nimport { texMixin } from \"@/mixins\";\nimport { v4 as uuid4 } from \"uuid\";\nimport { defineComponent } from \"@vue/runtime-core\";\n\nimport { quillEditor } from \"vue3-quill\";\n\nimport Quill from \"quill\";\nconst ImageResize = require(\"quill-image-resize\").default;\nconst ImageDrop = require(\"quill-image-drop-module\").ImageDrop;\nimport MagicUrl from \"quill-magic-url\";\n\nQuill.register(\"modules/magicUrl\", MagicUrl);\nQuill.register(\"modules/imageDrop\", ImageDrop);\nQuill.register(\"modules/imageResize\", ImageResize);\n\nimport Btn from \"./Btn.vue\";\nimport { containsLatex, stripHtmlFromLaTexBlocks } from \"@/utils\";\nexport default defineComponent({\n\tname: \"TextEditor\",\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\ttall: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tplaceholder: {\n\t\t\ttype: String,\n\t\t\tdefault: \"\",\n\t\t},\n\t\tforceBaseEditor: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tshowPreviewButton: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tbaseEditorRows: {\n\t\t\ttype: Number,\n\t\t\tdefault: 8,\n\t\t},\n\t},\n\tmixins: [texMixin],\n\tcomponents: {\n\t\tquillEditor,\n\t\tBtn,\n\t},\n\twatch: {\n\t\tshowPreview(newVal) {\n\t\t\tif (newVal) {\n\t\t\t\tthis.triggerTexRender();\n\t\t\t}\n\t\t},\n\t\tmodelValue() {\n\t\t\tif (this.showPreview) {\n\t\t\t\tif (this.triggerTexHandle !== null) {\n\t\t\t\t\tclearTimeout(this.triggerTexHandle);\n\t\t\t\t}\n\t\t\t\tthis.triggerTexHandle = setTimeout(() => this.triggerTexRender(), 100);\n\t\t\t}\n\t\t},\n\t\tshowBaseEditor(newVal) {\n\t\t\tthis.$nextTick(this.addCustomButtons);\n\t\t},\n\t},\n\tmounted() {\n\t\t// prevent auto-focusing of quill editor\n\t\tthis.$nextTick(() => (this.internalDisabled = false));\n\t\tthis.addCustomButtons();\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tshowBaseEditor: false,\n\t\t\tinstance: null as any,\n\t\t\t//content: \"\",\n\t\t\tinternalDisabled: true,\n\t\t\tshowPreview: false,\n\t\t\tresizablePanelId: uuid4(),\n\t\t\tpreviewPanelWidth: 50,\n\t\t\tpos: 0,\n\t\t\ttriggerTexHandle: null as number | null,\n\t\t\tid: \"a\" + uuid4(), // https://github.com/testing-library/dom-testing-library/issues/168,\n\t\t};\n\t},\n\tmethods: {\n\t\thandleDragging(e: any) {\n\t\t\tconst percentage = ((e.pageX - 51) / window.innerWidth) * 100;\n\t\t\tif (percentage >= 30 && percentage <= 70) {\n\t\t\t\tthis.previewPanelWidth = percentage;\n\t\t\t}\n\t\t},\n\t\taddCustomButtons() {\n\t\t\t// add custom LaTeX button\n\t\t\tconst latexButton = document.querySelector(\"#\" + this.id + \" .ql-latex\");\n\t\t\tif (latexButton) {\n\t\t\t\t// when clicked, the LaTeX button inserts two $'s and positions the cursor between them\n\t\t\t\tlatexButton.addEventListener(\"click\", () => {\n\t\t\t\t\tconst selection = this.instance.getSelection(true);\n\t\t\t\t\tthis.instance.insertText(selection.index, \"$$\");\n\t\t\t\t\tthis.instance.setSelection(selection.index + 1, 0);\n\t\t\t\t});\n\t\t\t\tlatexButton.innerHTML = document.getElementById(`${this.id}latex-button-src`)\n\t\t\t\t\t?.innerHTML as string;\n\t\t\t}\n\t\t\t// add custom html button\n\t\t\tconst htmlButton = document.querySelector(\"#\" + this.id + \" .ql-html\");\n\t\t\tif (htmlButton) {\n\t\t\t\t// when clicked, the html button toggles between full & base editor\n\t\t\t\thtmlButton.addEventListener(\"click\", () => {\n\t\t\t\t\tthis.toggleBaseEditor();\n\t\t\t\t});\n\t\t\t\thtmlButton.innerHTML = document.getElementById(`${this.id}html-button-src`)\n\t\t\t\t\t?.innerHTML as string;\n\t\t\t}\n\t\t},\n\t\tstripHtmlFromLaTexBlocks,\n\t\tstartDragging() {\n\t\t\tdocument.addEventListener(\"mousemove\", this.handleDragging);\n\t\t},\n\t\tendDragging() {\n\t\t\tdocument.removeEventListener(\"mousemove\", this.handleDragging);\n\t\t},\n\t\ttoggleBaseEditor() {\n\t\t\tthis.showBaseEditor = !this.showBaseEditor;\n\t\t},\n\t\tonEditorChange({ quill, html, text }: unknown) {\n\t\t\tthis.$emit(\"update:modelValue\", html);\n\t\t},\n\t\tonEditorReady(quill: any) {\n\t\t\tthis.$emit(\"ready\", quill);\n\n\t\t\tquill.on(\"selection-change\", this.onSelectionChange);\n\t\t\tquill.root.addEventListener(\"blur\", () => this.$emit(\"blur\"));\n\t\t\tthis.instance = quill;\n\t\t},\n\t\tonSelectionChange(event: any) {\n\t\t\tif (event) {\n\t\t\t\tthis.$emit(\"selectionChange\", {\n\t\t\t\t\tfullText: this.instance.getText(),\n\t\t\t\t\ttext: this.instance.getText(event.index - 10, event.length + 15),\n\t\t\t\t\trange: event,\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t},\n\tcomputed: {\n\t\tpreviewPanelStyle() {\n\t\t\tif (!this.showPreview) {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t\treturn { width: this.previewPanelWidth + \"%\" };\n\t\t},\n\t\tdividerStyle() {\n\t\t\treturn { left: this.previewPanelWidth + \"%\" };\n\t\t},\n\t\tcontainsLatex() {\n\t\t\treturn containsLatex(this.modelValue);\n\t\t},\n\t\teditorOptions() {\n\t\t\treturn {\n\t\t\t\ttheme: \"snow\",\n\t\t\t\tplaceholder: this.placeholder,\n\t\t\t\tmodules: {\n\t\t\t\t\ttoolbar: [\n\t\t\t\t\t\t[\"bold\", \"italic\", \"underline\", \"strike\"],\n\t\t\t\t\t\t[\"code-block\"],\n\t\t\t\t\t\t//[{ header: 1 }, { header: 2 }],\n\t\t\t\t\t\t[{ list: \"ordered\" }, { list: \"bullet\" }],\n\t\t\t\t\t\t//[{ script: 'sub' }, { script: 'super' }],\n\t\t\t\t\t\t//[{ indent: '-1' }, { indent: '+1' }],\n\t\t\t\t\t\t//[{ direction: 'rtl' }],\n\t\t\t\t\t\t// [{ size: ['small', false, 'large', 'huge'] }],\n\t\t\t\t\t\t// [{ header: [1, 2, 3, 4, 5, 6, false] }],\n\t\t\t\t\t\t// [{ color: [] }, { background: [] }],\n\t\t\t\t\t\t// [{ font: [] }],\n\t\t\t\t\t\t// [{ align: [] }],\n\t\t\t\t\t\t[\"image\"], // \"video\"\n\t\t\t\t\t\t[\"clean\"],\n\t\t\t\t\t\t[\"latex\"],\n\t\t\t\t\t\t[\"html\"],\n\t\t\t\t\t],\n\t\t\t\t\timageResize: {\n\t\t\t\t\t\tmodules: [\"Resize\", \"DisplaySize\"],\n\t\t\t\t\t},\n\t\t\t\t\timageDrop: true,\n\t\t\t\t\tmagicUrl: true,\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t},\n});\n","import { render } from \"./TextEditor.vue?vue&type=template&id=92cd09fc&ts=true\"\nimport script from \"./TextEditor.vue?vue&type=script&lang=ts\"\nexport * from \"./TextEditor.vue?vue&type=script&lang=ts\"\n\nimport \"./TextEditor.vue?vue&type=style&index=0&id=92cd09fc&lang=css\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport TextEditor from \"@/components/ui/TextEditor.vue\";\nimport { Exercise, EventParticipationSlotSubmission, getEmptySubmission } from \"@/models\";\nimport AbstractExercise from \"./AbstractExercise.vue\";\nimport { exerciseProps } from \"./shared\";\nimport ProcessedTextFragment from \"@/components/ui/ProcessedTextFragment.vue\";\nexport default defineComponent({\n\tname: \"OpenAnswerExercise\",\n\tprops: {\n\t\t...exerciseProps,\n\t},\n\tmethods: {},\n\tcomputed: {\n\t\tanswerTextProxy: {\n\t\t\tget() {\n\t\t\t\treturn this.submission.answer_text;\n\t\t\t},\n\t\t\tset(val: string) {\n\t\t\t\tthis.$emit(\"updateSubmission\", [\"answer_text\", val]);\n\t\t\t},\n\t\t},\n\t},\n\tcomponents: { TextEditor, AbstractExercise, ProcessedTextFragment },\n});\n","import { render } from \"./OpenAnswerExercise.vue?vue&type=template&id=6afafb09&ts=true\"\nimport script from \"./OpenAnswerExercise.vue?vue&type=script&lang=ts\"\nexport * from \"./OpenAnswerExercise.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeProps as _normalizeProps, guardReactiveProps as _guardReactiveProps, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_FileUpload = _resolveComponent(\"FileUpload\")!\n const _component_AbstractExercise = _resolveComponent(\"AbstractExercise\")!\n\n return (_openBlock(), _createBlock(_component_AbstractExercise, _normalizeProps(_guardReactiveProps(_ctx.$props)), {\n submissionControls: _withCtx(() => [\n _createVNode(_component_FileUpload, {\n disabled: _ctx.readOnly,\n modelValue: _ctx.attachmentProxy,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.attachmentProxy) = $event)),\n onDownload: _ctx.onDownloadAttachment\n }, null, 8, [\"disabled\", \"modelValue\", \"onDownload\"])\n ]),\n _: 1\n }, 16))\n}","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, withCtx as _withCtx, createVNode as _createVNode, createTextVNode as _createTextVNode, withModifiers as _withModifiers } from \"vue\"\n\nconst _hoisted_1 = { class: \"w-full darken-on-hover\" }\nconst _hoisted_2 = { class: \"w-full relative\" }\nconst _hoisted_3 = {\n key: 1,\n class: \"absolute top-0 w-full h-44 z-10\"\n}\nconst _hoisted_4 = {\n key: 0,\n class: \"absolute flex w-full\"\n}\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined opacity-100 text-gray-50 text-5xl\" }, \" cloud_download \", -1)\nconst _hoisted_6 = [\n _hoisted_5\n]\nconst _hoisted_7 = [\"src\"]\nconst _hoisted_8 = { class: \"text-base text-muted\" }\nconst _hoisted_9 = {\n key: 0,\n class: \"mt-2 text-xs md:text-sm text-muted\"\n}\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined inline-icon mr-1\" }, \"info\", -1)\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined inline-icon mr-1\" }, \"info\", -1)\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mr-2 text-xl material-icons-outlined\" }, \"cloud_upload\", -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_LinearProgress = _resolveComponent(\"LinearProgress\")!\n const _component_AnimatedIcon = _resolveComponent(\"AnimatedIcon\")!\n const _component_VueUploadComponent = _resolveComponent(\"VueUploadComponent\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_ctx.uploading)\n ? (_openBlock(), _createBlock(_component_LinearProgress, {\n key: 0,\n progress: _ctx.uploadProgress,\n class: \"rounded-t absolute top-0 z-10\"\n }, null, 8, [\"progress\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.disabled)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_VueUploadComponent, {\n class: \"w-full\",\n onInputFilter: _ctx.inputFilter,\n onInputFile: _ctx.inputFile,\n ref: \"upload\",\n drop: true,\n modelValue: _ctx.files,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((_ctx.files) = $event)),\n \"custom-action\": _ctx.emitUpload,\n \"input-id\": _ctx.elementId\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", {\n class: _normalizeClass([[!_ctx.small ? 'h-44' : 'h-20'], \"relative flex border-2 border-gray-200 border-dashed rounded cursor-pointer w-full bg-light\"])\n }, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([{ invisible: _ctx.files.length > 0 }, \"p-4 mx-auto my-auto\"])\n }, [\n _createElementVNode(\"p\", {\n class: _normalizeClass([\"opacity-30 material-icons-outlined\", [!_ctx.small ? 'text-5xl' : 'text-3xl -mt-1.5']])\n }, _toDisplayString(_ctx.disabled ? \"file_download_off\" : \"cloud_upload\"), 3),\n _createElementVNode(\"p\", {\n class: _normalizeClass([\"opacity-60\", [!_ctx.small ? '' : '-mt-2 text-sm']])\n }, _toDisplayString(_ctx.disabled ? _ctx.$t(\"misc.file_upload_no_files\") : _ctx.$t(\"misc.file_upload\")), 3)\n ], 2),\n (_ctx.files.length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.files, (file, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"relative flex flex-col items-center mx-auto space-x-2 align-middle z-20 w-max p-8 pt-0\",\n key: 'file-' + index + '-' + file.id\n }, [\n _createElementVNode(\"div\", {\n onClick: _cache[0] || (_cache[0] = \n//@ts-ignore\n(...args) => (_ctx.download && _ctx.download(...args))),\n class: _normalizeClass([[_ctx.small ? 'py-4' : 'py-16'], \"absolute z-50 top-0 hover:bg-opacity-40 transition-all duration-75 hover:opacity-100 hover:bg-gray-500 opacity-0 w-full\"])\n }, _hoisted_6, 2),\n (false && file.success)\n ? (_openBlock(), _createBlock(_component_AnimatedIcon, {\n key: 0,\n class: \"absolute top-0 right-0 mt-2 mr-3\"\n }))\n : _createCommentVNode(\"\", true),\n (file.thumb)\n ? (_openBlock(), _createElementBlock(\"img\", {\n key: 1,\n class: _normalizeClass([\"\", [_ctx.small ? 'w-10 h-10 mt-2' : 'w-28 h-28 mt-7']]),\n src: file.thumb\n }, null, 10, _hoisted_7))\n : (_openBlock(), _createElementBlock(\"span\", {\n key: 2,\n class: _normalizeClass([\"material-icons-outlined text-gray-400\", [_ctx.small ? 'text-3xl mt-2.5' : 'text-5xl mt-12']])\n }, \" insert_drive_file \", 2)),\n _createElementVNode(\"p\", _hoisted_8, _toDisplayString(file.name), 1)\n ]))\n }), 128))\n ]))\n : _createCommentVNode(\"\", true)\n ], 2)\n ]),\n _: 1\n }, 8, [\"onInputFilter\", \"onInputFile\", \"modelValue\", \"custom-action\", \"input-id\"])\n ]),\n (!_ctx.showUpload && _ctx.showMaxSize && !_ctx.fileTooBig)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_9, [\n _hoisted_10,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t(\"misc.max_upload_size_is\")) + \" \" + _toDisplayString(_ctx.humanReadableMaxUploadSize), 1)\n ]))\n : (_ctx.fileTooBig)\n ? (_openBlock(), _createElementBlock(\"p\", {\n key: 1,\n class: _normalizeClass([\"mt-2 text-xs md:text-sm text-muted text-danger-dark\", { shake: _ctx.fileTooBigTextShake }]),\n onAnimationend: _cache[2] || (_cache[2] = ($event: any) => (_ctx.fileTooBigTextShake = false))\n }, [\n _hoisted_11,\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t(\"misc.file_too_big\")) + \".\", 1),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t(\"misc.max_upload_size_is\")) + \" \" + _toDisplayString(_ctx.humanReadableMaxUploadSize), 1)\n ], 34))\n : _createCommentVNode(\"\", true),\n (!_ctx.disabled && _ctx.showUpload)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 2,\n class: \"mt-4\",\n loading: _ctx.$refs.upload?.active,\n onClick: _cache[3] || (_cache[3] = _withModifiers(($event: any) => (_ctx.$refs.upload.active = true), [\"prevent\"]))\n }, {\n default: _withCtx(() => [\n _hoisted_12,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t(\"misc.upload\")), 1)\n ]),\n _: 1\n }, 8, [\"loading\"]))\n : _createCommentVNode(\"\", true)\n ]))\n}","\nimport { defineComponent } from \"@vue/runtime-core\";\nimport { PropType } from \"vue\";\n\nimport VueUploadComponent from \"vue-upload-component\";\nimport Btn from \"./Btn.vue\";\nimport AnimatedIcon from \"./AnimatedIcon.vue\";\nimport { loadingMixin } from \"@/mixins\";\nimport { v4 as uuid4 } from \"uuid\";\nimport { mapStores } from \"pinia\";\nimport { useMetaStore } from \"@/stores/metaStore\";\nimport LinearProgress from \"./LinearProgress.vue\";\nimport {\n\tgetDefaultThumbnail,\n\tgetHumanFileSize,\n\tgetMaxUploadFileSizeBytes,\n} from \"@/utils\";\n\nexport default defineComponent({\n\tname: \"FileUpload\",\n\tmixins: [loadingMixin],\n\tcomponents: {\n\t\tVueUploadComponent,\n\t\tBtn,\n\t\tAnimatedIcon,\n\t\tLinearProgress,\n\t},\n\tprops: {\n\t\tsmall: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tmaxFilesNum: {\n\t\t\ttype: Number,\n\t\t\tdefault: 1,\n\t\t},\n\t\tmodelValue: {\n\t\t\ttype: Array as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tautoUpload: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tuploading: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tuploadProgress: {\n\t\t\ttype: Number,\n\t\t\trequired: false,\n\t\t},\n\t\tclearImmediately: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tshowMaxSize: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\twatch: {\n\t\tuploading(newVal) {\n\t\t\tif (!newVal && this.clearImmediately) {\n\t\t\t\tthis.files = [];\n\t\t\t}\n\t\t},\n\t\t// TODO probably useless\n\t\trefUploading(newVal) {\n\t\t\tif (!newVal) {\n\t\t\t\tthis.showUpload = false;\n\t\t\t}\n\t\t},\n\t\tfileTooBig(newVal) {\n\t\t\tthis.fileTooBigTextShake = newVal;\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tfiles: [] as any,\n\t\t\tminSize: 0,\n\t\t\tmaxSize: 1000000000,\n\t\t\tshowUpload: false,\n\t\t\telementId: uuid4(),\n\t\t\tfileTooBig: false,\n\t\t\tfileTooBigTextShake: false,\n\t\t};\n\t},\n\tcreated() {\n\t\tthis.files = this.modelValue;\n\t},\n\tmethods: {\n\t\tdownload() {\n\t\t\tthis.$emit(\"download\");\n\t\t},\n\t\tasync emitUpload(\n\t\t\tfile: { blob: Blob }, //VueUploadItem,\n\t\t\tcomponent: any,\n\t\t) {\n\t\t\tconst fileBlob = file.blob;\n\t\t\tthis.$emit(\"update:modelValue\", fileBlob);\n\n\t\t\treturn component;\n\t\t},\n\t\tinputFilter(\n\t\t\tnewFile: {\n\t\t\t\tname: string;\n\t\t\t\tfile: Blob;\n\t\t\t\terror: string;\n\t\t\t\ttype: string;\n\t\t\t\tsize: number;\n\t\t\t\tblob: Blob;\n\t\t\t\tthumb: string;\n\t\t\t},\n\t\t\toldFile: { file: any; blob: any },\n\t\t\tprevent: () => any,\n\t\t) {\n\t\t\tthis.fileTooBig = false;\n\n\t\t\tconst mimeType = newFile.type;\n\t\t\tconst isImage = mimeType.substring(0, 6) === \"image/\";\n\n\t\t\tif (newFile.file.size > getMaxUploadFileSizeBytes()) {\n\t\t\t\tthis.$emit(\"fileTooBig\");\n\t\t\t\t// without this, the watcher for fileTooBig won't detect both changes\n\t\t\t\t// (the one above to false and this one) and the shake animation on\n\t\t\t\t// the warning text won't be re-triggered\n\t\t\t\tthis.$nextTick(() => (this.fileTooBig = true));\n\t\t\t\treturn prevent();\n\t\t\t}\n\t\t\tif (\n\t\t\t\tnewFile &&\n\t\t\t\tnewFile.error === \"\" &&\n\t\t\t\tnewFile.file &&\n\t\t\t\t(!oldFile || newFile.file !== oldFile.file)\n\t\t\t) {\n\t\t\t\tnewFile.blob = newFile.file;\n\t\t\t\tnewFile.thumb = \"\";\n\t\t\t\tif (newFile.blob && isImage) {\n\t\t\t\t\tnewFile.thumb = URL.createObjectURL(newFile.file);\n\t\t\t\t} else {\n\t\t\t\t\tnewFile.thumb = getDefaultThumbnail(mimeType);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// image size\n\t\t\tif (\n\t\t\t\tnewFile &&\n\t\t\t\tnewFile.error === \"\" &&\n\t\t\t\tisImage &&\n\t\t\t\tnewFile.blob &&\n\t\t\t\t(!oldFile || newFile.blob !== oldFile.blob)\n\t\t\t) {\n\t\t\t\tnewFile.error = \"image parsing\";\n\t\t\t\tlet img = new Image();\n\t\t\t\timg.onload = () => {\n\t\t\t\t\t(this.$refs as any).upload.update(newFile, {\n\t\t\t\t\t\terror: \"\",\n\t\t\t\t\t\theight: img.height,\n\t\t\t\t\t\twidth: img.width,\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t\timg.onerror = (e: any) => {\n\t\t\t\t\t(this.$refs as any).upload.update(newFile, {\n\t\t\t\t\t\terror: \"parsing image size\",\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t\timg.src = URL.createObjectURL(newFile.file); // newFile.blob;\n\t\t\t}\n\t\t},\n\t\t// add, update, remove File Event\n\t\tinputFile(\n\t\t\tnewFile: {\n\t\t\t\tactive: any;\n\t\t\t\tsize: number;\n\t\t\t\tprogress: any;\n\t\t\t\terror: any;\n\t\t\t\tsuccess: any;\n\t\t\t},\n\t\t\toldFile: {\n\t\t\t\tactive: any;\n\t\t\t\tprogress: any;\n\t\t\t\terror: any;\n\t\t\t\tsuccess: any;\n\t\t\t\tresponse: { id: any };\n\t\t\t},\n\t\t) {\n\t\t\tif (newFile && oldFile) {\n\t\t\t\tthis.showUpload = true;\n\t\t\t\t// update\n\t\t\t\tif (newFile.active && !oldFile.active) {\n\t\t\t\t\t// beforeSend\n\t\t\t\t\t// min size\n\t\t\t\t\tif (newFile.size >= 0 && this.minSize > 0 && newFile.size < this.minSize) {\n\t\t\t\t\t\t(this.$refs as any).upload.update(newFile, { error: \"size\" });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (newFile.progress !== oldFile.progress) {\n\t\t\t\t\t// progress\n\t\t\t\t}\n\t\t\t\tif (newFile.error && !oldFile.error) {\n\t\t\t\t\tconsole.log(\"error uploading file\");\n\t\t\t\t\t(this.$refs as any).upload.active = false;\n\t\t\t\t}\n\t\t\t\tif (newFile.success && !oldFile.success) {\n\t\t\t\t\tthis.showUpload = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!newFile && oldFile) {\n\t\t\t\t// remove\n\t\t\t\tif (oldFile.success && oldFile.response?.id) {\n\t\t\t\t\t// delete\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Automatically activate upload\n\t\t\tif (Boolean(newFile) !== Boolean(oldFile) || oldFile.error !== newFile.error) {\n\t\t\t\tif (!this.autoUpload) {\n\t\t\t\t\tthis.showUpload = true;\n\t\t\t\t}\n\n\t\t\t\tif (this.autoUpload && !(this.$refs as any).upload.active) {\n\t\t\t\t\t(this.$refs as any).upload.active = true;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMetaStore),\n\t\trefUploading(): boolean {\n\t\t\treturn !!(this.$refs as any).upload?.active;\n\t\t},\n\t\thumanReadableMaxUploadSize() {\n\t\t\treturn getHumanFileSize(getMaxUploadFileSizeBytes());\n\t\t},\n\t},\n});\n","import { render } from \"./FileUpload.vue?vue&type=template&id=523cdc9e&ts=true\"\nimport script from \"./FileUpload.vue?vue&type=script&lang=ts\"\nexport * from \"./FileUpload.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport AbstractExercise from \"./AbstractExercise.vue\";\nimport FileUpload from \"@/components/ui/FileUpload.vue\";\nimport { exerciseProps } from \"./shared\";\nimport { downloadEventParticipationSlotAttachment } from \"@/api/events\";\nimport { courseIdMixin, eventIdMixin, loadingMixin } from \"@/mixins\";\nexport default defineComponent({\n\tname: \"AttachmentExercise\",\n\tprops: {\n\t\t...exerciseProps,\n\t},\n\tmixins: [loadingMixin, courseIdMixin, eventIdMixin],\n\tmethods: {\n\t\tasync onDownloadAttachment() {\n\t\t\tconst attachment = this.submission.attachment as {\n\t\t\t\tname: string;\n\t\t\t\tsize: number;\n\t\t\t\textras: { slot_id: string; participation_id: string };\n\t\t\t};\n\t\t\tawait this.withLoading(\n\t\t\t\tasync () =>\n\t\t\t\t\tawait downloadEventParticipationSlotAttachment(\n\t\t\t\t\t\tthis.courseId,\n\t\t\t\t\t\tthis.eventId,\n\t\t\t\t\t\tattachment.extras.participation_id,\n\t\t\t\t\t\tattachment.extras.slot_id,\n\t\t\t\t\t),\n\t\t\t);\n\t\t},\n\t},\n\tcomputed: {\n\t\tattachmentProxy: {\n\t\t\tget() {\n\t\t\t\treturn this.submission.attachment ? [{ ...this.submission.attachment }] : [];\n\t\t\t},\n\t\t\tset(val: any) {\n\t\t\t\tthis.$emit(\"updateSubmission\", [\"attachment\", val]);\n\t\t\t},\n\t\t},\n\t},\n\tcomponents: { AbstractExercise, FileUpload },\n});\n","import { render } from \"./AttachmentExercise.vue?vue&type=template&id=4973d235&ts=true\"\nimport script from \"./AttachmentExercise.vue?vue&type=script&lang=ts\"\nexport * from \"./AttachmentExercise.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, normalizeProps as _normalizeProps, guardReactiveProps as _guardReactiveProps, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_AbstractExercise = _resolveComponent(\"AbstractExercise\")!\n\n return (_openBlock(), _createBlock(_component_AbstractExercise, _normalizeProps(_guardReactiveProps(_ctx.$props)), null, 16))\n}","\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport { exerciseProps } from \"./shared\";\nimport AbstractExercise from \"./AbstractExercise.vue\";\nexport default defineComponent({\n\tname: \"AggregatedExercise\",\n\tprops: {\n\t\t...exerciseProps,\n\t},\n\tmethods: {},\n\tcomputed: {},\n\tcomponents: { AbstractExercise },\n});\n","import { render } from \"./AggregatedExercise.vue?vue&type=template&id=7e9b5fda&ts=true\"\nimport script from \"./AggregatedExercise.vue?vue&type=script&lang=ts\"\nexport * from \"./AggregatedExercise.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, withCtx as _withCtx, createSlots as _createSlots, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"user-content\" }\nconst _hoisted_2 = { class: \"mt-4\" }\nconst _hoisted_3 = { class: \"ml-2 text-sm text-muted\" }\nconst _hoisted_4 = { class: \"w-full px-4 py-2 rounded bg-gray-50\" }\nconst _hoisted_5 = [\"innerHTML\"]\nconst _hoisted_6 = { key: 0 }\nconst _hoisted_7 = { class: \"w-full mt-4 whitespace-pre\" }\nconst _hoisted_8 = { class: \"ml-2 text-sm text-muted\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_v_runtime_template = _resolveComponent(\"v-runtime-template\")!\n const _component_ProcessedTextFragment = _resolveComponent(\"ProcessedTextFragment\")!\n const _component_AbstractExercise = _resolveComponent(\"AbstractExercise\")!\n\n return (_openBlock(), _createBlock(_component_AbstractExercise, {\n exercise: _ctx.slot.exercise,\n showSolution: _ctx.showScores\n }, _createSlots({\n exerciseText: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n _createVNode(_component_v_runtime_template, {\n onSelectionUpdate: _cache[0] || (_cache[0] = ($event: any) => (_ctx.onSelectionUpdate($event))),\n template: _ctx.textTemplate\n }, null, 8, [\"template\"])\n ])\n ]),\n _: 2\n }, [\n (_ctx.showScores)\n ? {\n name: \"extras\",\n fn: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"p\", _hoisted_3, _toDisplayString(_ctx.$t(\"misc.correct_answers\")), 1),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"ul\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.correctChoices, (choiceId) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n key: 'corr-' + choiceId,\n innerHTML: _ctx.getChoice(choiceId).text\n }, null, 8, _hoisted_5))\n }), 128))\n ])\n ])\n ]),\n ((_ctx.exercise.solution ?? '').trim().length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _createElementVNode(\"div\", _hoisted_7, [\n _createElementVNode(\"p\", _hoisted_8, _toDisplayString(_ctx.$t(\"misc.solution\")), 1),\n _createVNode(_component_ProcessedTextFragment, {\n style: {\"white-space\":\"break-spaces\"},\n class: \"w-full px-4 py-2 rounded bg-gray-50\",\n value: _ctx.exercise.solution,\n defaultValue: _ctx.$t('misc.no_answer')\n }, null, 8, [\"value\", \"defaultValue\"])\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n key: \"0\"\n }\n : undefined\n ]), 1032, [\"exercise\", \"showSolution\"]))\n}","\n/* eslint-disable no-constant-condition */\nimport { CLOZE_PLACEHOLDER_REGEX } from \"@/const\";\nimport {\n\tEventParticipationSlot,\n\tEventParticipationSlotSubmission,\n\tExercise,\n\tExerciseChoice,\n} from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport AbstractExercise from \"./AbstractExercise.vue\";\nimport VRuntimeTemplate from \"vue3-runtime-template\";\nimport { getTranslatedString } from \"@/i18n\";\nimport ProcessedTextFragment from \"@/components/ui/ProcessedTextFragment.vue\";\nimport { getCorrectChoices } from \"./utils\";\n\nexport default defineComponent({\n\tname: \"ClozeExercise\",\n\temits: {\n\t\tupdateSubmission(payload: {\n\t\t\tslot: EventParticipationSlot;\n\t\t\tpayload: [keyof EventParticipationSlotSubmission, any];\n\t\t}) {\n\t\t\treturn true;\n\t\t},\n\t},\n\tprops: {\n\t\tslot: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\tshowScores: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\treadOnly: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tmethods: {\n\t\tonSelectionUpdate(payload: { slotId: string; value: string }) {\n\t\t\tthis.$emit(\"updateSubmission\", {\n\t\t\t\tslot: this.slot.sub_slots.find(\n\t\t\t\t\ts => s.id == payload.slotId,\n\t\t\t\t) as EventParticipationSlot,\n\t\t\t\tpayload: [\"selected_choices\", payload.value.length === 0 ? [] : [payload.value]],\n\t\t\t});\n\t\t},\n\n\t\tgetChoice(choiceId: string) {\n\t\t\treturn this.exercise.sub_exercises\n\t\t\t\t?.flatMap(s => s.choices ?? [])\n\t\t\t\t.find(c => c.id == choiceId);\n\t\t},\n\t},\n\tcomputed: {\n\t\texercise(): Exercise {\n\t\t\treturn this.slot?.exercise;\n\t\t},\n\t\tcorrectChoices(): string[] {\n\t\t\treturn getCorrectChoices(this.exercise);\n\t\t},\n\t\ttextTemplate(): string {\n\t\t\t// Returns a template to be compiled and embedded as the exercise\n\t\t\t// text. The template combines the exercise text with dropdown\n\t\t\t// inputs in correspondence of CLOZE_SEPARATOR sequences.\n\t\t\tconst processedIds: string[] = []; // to prevent duplicates\n\t\t\treturn this.slot?.exercise.text.replace(CLOZE_PLACEHOLDER_REGEX, (_, clozeId) => {\n\t\t\t\tconst clozeSlot = this.slot.sub_slots\n\t\t\t\t\t.filter(s => !processedIds.includes(s.exercise.id))\n\t\t\t\t\t.find(s => s.exercise.id == clozeId);\n\t\t\t\tconst ret = clozeSlot\n\t\t\t\t\t? `\n \n \n ${(clozeSlot.exercise.choices ?? []).map(\n\t\t\t\t\t\t\t\t\tc => `\n ${c.text}\n `,\n\t\t\t\t\t\t\t\t)}\n \n ` +\n\t\t\t\t\t (this.showScores\n\t\t\t\t\t\t\t? `\n ${\n\t\t\t\t\t\t\t\t\tthis.correctChoices.includes(clozeSlot.selected_choices[0] ?? \"\")\n\t\t\t\t\t\t\t\t\t\t? \"done\"\n\t\t\t\t\t\t\t\t\t\t: \"close\"\n\t\t\t\t\t\t\t\t}\n \n `\n\t\t\t\t\t\t\t: \"\")\n\t\t\t\t\t: `${getTranslatedString(\n\t\t\t\t\t\t\t\"cloze.invalid_cloze_id\",\n\t\t\t\t\t )}`;\n\n\t\t\t\tif (clozeSlot) {\n\t\t\t\t\tprocessedIds.push(clozeSlot.exercise.id);\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t});\n\t\t},\n\t},\n\tcomponents: { AbstractExercise, VRuntimeTemplate, ProcessedTextFragment },\n});\n","import { render } from \"./ClozeExercise.vue?vue&type=template&id=06d94b29&ts=true\"\nimport script from \"./ClozeExercise.vue?vue&type=script&lang=ts\"\nexport * from \"./ClozeExercise.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, vShow as _vShow, withDirectives as _withDirectives, renderList as _renderList, Fragment as _Fragment, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createBlock as _createBlock, Transition as _Transition, withCtx as _withCtx, normalizeProps as _normalizeProps, guardReactiveProps as _guardReactiveProps } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"mx-auto mb-4 md:w-2/5 hide-in-thumbnail hidden\"\n}\nconst _hoisted_2 = { class: \"user-content\" }\nconst _hoisted_3 = [\"innerHTML\"]\nconst _hoisted_4 = { class: \"mb-1\" }\nconst _hoisted_5 = {\n key: 0,\n class: \"ml-2 icon-light inline-icon material-icons-outlined\"\n}\nconst _hoisted_6 = { key: 0 }\nconst _hoisted_7 = { class: \"mt-8 text-center text-muted\" }\nconst _hoisted_8 = {\n key: 0,\n class: \"relative flex\"\n}\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"ml-1 mr-1 text-base material-icons\" }, \" play_arrow \", -1)\nconst _hoisted_10 = {\n key: 0,\n class: \"opacity-50\"\n}\nconst _hoisted_11 = {\n key: 1,\n class: \"opacity-0\"\n}\nconst _hoisted_12 = { class: \"mx-auto mb-2 md:w-full hide-in-thumbnail\" }\nconst _hoisted_13 = { class: \"user-content mx-2 programming-exercise-text\" }\nconst _hoisted_14 = [\"innerHTML\"]\nconst _hoisted_15 = { class: \"mb-1\" }\nconst _hoisted_16 = {\n key: 0,\n class: \"ml-2 icon-light inline-icon material-icons-outlined\"\n}\nconst _hoisted_17 = { key: 0 }\nconst _hoisted_18 = { class: \"mt-8 text-center text-muted\" }\nconst _hoisted_19 = { class: \"flex items-center p-3 pl-4 space-x-2 rounded-tr-sm bg-gray-50\" }\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"my-auto material-icons-outlined icon-light\" }, \" code \", -1)\nconst _hoisted_21 = {\n key: 1,\n class: \"flex flex-col\"\n}\nconst _hoisted_22 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mx-auto mt-24 opacity-30 text-8xl material-icons-outlined\" }, \" code \", -1)\nconst _hoisted_23 = { class: \"px-4 mx-auto select-none text-muted\" }\nconst _hoisted_24 = {\n key: 0,\n class: \"absolute bottom-0 right-0 z-50 flex items-center px-6 py-3 mb-2 mr-4 space-x-2 rounded bg-dark text-lightText bg-opacity-90 shadow-popup\"\n}\nconst _hoisted_25 = { class: \"w-full mt-4\" }\nconst _hoisted_26 = { class: \"ml-2 text-sm text-muted\" }\nconst _hoisted_27 = {\n key: 0,\n class: \"mt-4 card card-filled\"\n}\nconst _hoisted_28 = { class: \"ml-2 text-sm text-muted\" }\nconst _hoisted_29 = { class: \"w-full mt-4\" }\nconst _hoisted_30 = { class: \"ml-2 text-sm text-muted\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Tabs = _resolveComponent(\"Tabs\")!\n const _component_ExerciseTestCase = _resolveComponent(\"ExerciseTestCase\")!\n const _component_CodeExecutionResults = _resolveComponent(\"CodeExecutionResults\")!\n const _component_Spinner = _resolveComponent(\"Spinner\")!\n const _component_CodeEditor = _resolveComponent(\"CodeEditor\")!\n const _component_CodeFragment = _resolveComponent(\"CodeFragment\")!\n const _component_AbstractExercise = _resolveComponent(\"AbstractExercise\")!\n\n return (_openBlock(), _createBlock(_component_AbstractExercise, _normalizeProps(_guardReactiveProps(_ctx.$props)), {\n exerciseText: _withCtx(() => [\n (_ctx.readOnly)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Tabs, {\n modelValue: _ctx.currentTab,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.currentTab) = $event)),\n options: _ctx.filteredTabsOptions\n }, null, 8, [\"modelValue\", \"options\"])\n ]))\n : _createCommentVNode(\"\", true),\n _withDirectives(_createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", {\n innerHTML: _ctx.exercise.text\n }, null, 8, _hoisted_3)\n ], 512), [\n [_vShow, _ctx.readOnly && _ctx.currentTab === _ctx.ProgrammingExerciseTabs.TEXT]\n ]),\n _withDirectives(_createElementVNode(\"div\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.exercise.testcases, (testcase, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"my-8\",\n key: 't-' + testcase.id\n }, [\n _createElementVNode(\"h4\", _hoisted_4, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"programming_exercise.testcase\")) + \" \" + _toDisplayString(index + 1) + \" \", 1),\n (!testcase.code && !testcase.text && !testcase.stdin)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_5, \"visibility_off\"))\n : _createCommentVNode(\"\", true)\n ]),\n _createVNode(_component_ExerciseTestCase, { \"test-case\": testcase }, null, 8, [\"test-case\"])\n ]))\n }), 128)),\n (_ctx.exercise.testcases?.length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _createElementVNode(\"h4\", _hoisted_7, _toDisplayString(_ctx.$t(\"programming_exercise.no_testcases\")), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ], 512), [\n [_vShow, _ctx.readOnly && _ctx.currentTab === _ctx.ProgrammingExerciseTabs.TEST_CASES]\n ])\n ]),\n submissionControls: _withCtx(() => [\n (true || _ctx.currentTab === _ctx.ProgrammingExerciseTabs.EDITOR)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _createVNode(_component_CodeEditor, {\n language: _ctx.languageCode,\n class: \"w-full\",\n size: 'lg',\n modelValue: _ctx.proxyModelValue,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((_ctx.proxyModelValue) = $event)),\n showRunButton: true,\n runCoolDown: _ctx.runCoolDown,\n running: _ctx.isRunning || _ctx.runCoolDown > 0,\n onRun: _cache[3] || (_cache[3] = ($event: any) => (_ctx.onRun())),\n onBlur: _cache[4] || (_cache[4] = ($event: any) => (_ctx.$emit('blur')))\n }, {\n runButton: _withCtx(() => [\n _hoisted_9,\n _createTextVNode(_toDisplayString(_ctx.$t(\"programming_exercise.run_code\")) + \" \", 1),\n (_ctx.runCoolDown > 0)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_10, \" (\" + _toDisplayString(_ctx.runCoolDown) + \")\", 1))\n : _createCommentVNode(\"\", true),\n (_ctx.runCoolDown < 10)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_11, \"0\"))\n : _createCommentVNode(\"\", true)\n ]),\n sidePaneTitle: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_12, [\n _createVNode(_component_Tabs, {\n modelValue: _ctx.currentTab,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((_ctx.currentTab) = $event)),\n options: _ctx.filteredTabsOptions\n }, null, 8, [\"modelValue\", \"options\"])\n ])\n ]),\n sidePane: _withCtx(() => [\n _withDirectives(_createElementVNode(\"div\", _hoisted_13, [\n _createElementVNode(\"div\", {\n innerHTML: _ctx.exercise.text\n }, null, 8, _hoisted_14)\n ], 512), [\n [_vShow, _ctx.currentTab === _ctx.ProgrammingExerciseTabs.TEXT]\n ]),\n _withDirectives(_createElementVNode(\"div\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.exercise.testcases, (testcase, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"my-8 mx-2\",\n key: 't-' + testcase.id\n }, [\n _createElementVNode(\"h4\", _hoisted_15, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"programming_exercise.testcase\")) + \" \" + _toDisplayString(index + 1) + \" \", 1),\n (!testcase.code && !testcase.text && !testcase.stdin)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_16, \"visibility_off\"))\n : _createCommentVNode(\"\", true)\n ]),\n _createVNode(_component_ExerciseTestCase, { \"test-case\": testcase }, null, 8, [\"test-case\"])\n ]))\n }), 128)),\n (_ctx.exercise.testcases?.length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [\n _createElementVNode(\"h4\", _hoisted_18, _toDisplayString(_ctx.$t(\"programming_exercise.no_testcases\")), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ], 512), [\n [_vShow, _ctx.currentTab === _ctx.ProgrammingExerciseTabs.TEST_CASES]\n ]),\n _withDirectives(_createElementVNode(\"div\", null, [\n _createElementVNode(\"div\", _hoisted_19, [\n _hoisted_20,\n _createElementVNode(\"h3\", null, _toDisplayString(_ctx.$t(\"programming_exercise.execution_results\")), 1)\n ]),\n (_ctx.submission.execution_results)\n ? (_openBlock(), _createBlock(_component_CodeExecutionResults, {\n key: 0,\n executionResults: _ctx.submission.execution_results,\n testCases: _ctx.exercise.testcases\n }, null, 8, [\"executionResults\", \"testCases\"]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_21, [\n _hoisted_22,\n _createElementVNode(\"p\", _hoisted_23, _toDisplayString(_ctx.$t(\"programming_exercise.code_execution_will_appear_here\")), 1)\n ]))\n ], 512), [\n [_vShow, _ctx.currentTab === _ctx.ProgrammingExerciseTabs.EXECUTION_RESULTS]\n ])\n ]),\n bottom: _withCtx(() => [\n _createVNode(_Transition, { name: \"quick-bounce\" }, {\n default: _withCtx(() => [\n (_ctx.executionState === 'running')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_24, [\n _createVNode(_component_Spinner, { fast: true }),\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t(\"programming_exercise.running_code\")), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"language\", \"modelValue\", \"runCoolDown\", \"running\"])\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n readOnlyAnswer: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_25, [\n _createElementVNode(\"p\", _hoisted_26, _toDisplayString(_ctx.$t(\"event_assessment.text_answer_label\")), 1),\n _createVNode(_component_CodeFragment, {\n value: _ctx.submission.answer_text,\n defaultValue: _ctx.$t('misc.no_answer')\n }, null, 8, [\"value\", \"defaultValue\"]),\n (_ctx.submission.execution_results)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_27, [\n _createElementVNode(\"h4\", _hoisted_28, _toDisplayString(_ctx.$t(\"programming_exercise.execution_results\")), 1),\n _createVNode(_component_CodeExecutionResults, {\n class: \"-mx-2\",\n testCases: _ctx.exercise.testcases,\n executionResults: _ctx.submission.execution_results,\n reduced: true\n }, null, 8, [\"testCases\", \"executionResults\"])\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n solution: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_29, [\n _createElementVNode(\"p\", _hoisted_30, _toDisplayString(_ctx.$t(\"misc.solution\")), 1),\n _createVNode(_component_CodeFragment, {\n value: _ctx.exercise.solution\n }, null, 8, [\"value\"])\n ])\n ]),\n _: 1\n }, 16))\n}","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_SegmentedControls = _resolveComponent(\"SegmentedControls\")!\n\n return (_openBlock(), _createBlock(_component_SegmentedControls, {\n options: _ctx.options,\n modelValue: _ctx.modelValue,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('update:modelValue', $event)))\n }, null, 8, [\"options\", \"modelValue\"]))\n}","import { renderSlot as _renderSlot, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, createBlock as _createBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, resolveDirective as _resolveDirective, withDirectives as _withDirectives } from \"vue\"\n\nconst _hoisted_1 = { class: \"relative segmented-controls\" }\nconst _hoisted_2 = { class: \"absolute top-2 left-3 origin-0 fixed-label\" }\nconst _hoisted_3 = { class: \"flex w-full\" }\nconst _hoisted_4 = [\"for\"]\nconst _hoisted_5 = [\"onInput\", \"id\", \"value\", \"checked\", \"disabled\"]\nconst _hoisted_6 = { class: \"flex mx-auto space-x-2 items-top\" }\nconst _hoisted_7 = {\n key: 1,\n class: \"flex flex-col\"\n}\nconst _hoisted_8 = [\"innerHTML\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_multi_icon = _resolveComponent(\"multi-icon\")!\n const _directive_wave = _resolveDirective(\"wave\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"label\", _hoisted_2, [\n _renderSlot(_ctx.$slots, \"default\")\n ]),\n _createElementVNode(\"div\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.options, (option, index) => {\n return _withDirectives((_openBlock(), _createElementBlock(\"label\", {\n onMousedown: _cache[0] || (_cache[0] = \n//@ts-ignore\n(...args) => (_ctx.onMouseDown && _ctx.onMouseDown(...args))),\n for: _ctx.id + '-input-' + index,\n class: _normalizeClass([\"relative flex flex-grow max-h-screen overflow-hidden overflow-x-hidden overflow-y-hidden font-semibold text-center text-gray-600 rounded-md cursor-pointer min-w-fit overflow-ellipsis whitespace-nowrap items-top\", {\n\t\t\t\t\t'py-1.5 px-2': !_ctx.small,\n\t\t\t\t\t'py-0.5 px-1': _ctx.small,\n\t\t\t\t\t'rounded-r-none': index < _ctx.options.length - 1,\n\t\t\t\t\t'rounded-l-none': index !== 0,\n\t\t\t\t\t'border border-primary bg-primary bg-opacity-20 text-primary ':\n\t\t\t\t\t\toption.value == _ctx.modelValue,\n\t\t\t\t\t'border hover:text-gray-800 hover:bg-light': option.value != _ctx.modelValue,\n\t\t\t\t}]),\n key: _ctx.id + '-option-' + index\n }, [\n _createElementVNode(\"input\", {\n onInput: ($event: any) => (_ctx.onInput(option.value, $event)),\n class: \"invisible w-0 h-0\",\n type: \"radio\",\n id: _ctx.id + '-input-' + index,\n value: option.value,\n checked: option.value == _ctx.modelValue,\n disabled: _ctx.disabled\n }, null, 40, _hoisted_5),\n _createElementVNode(\"div\", _hoisted_6, [\n (option.icons)\n ? (_openBlock(), _createBlock(_component_multi_icon, {\n key: 0,\n class: \"w-6\",\n icons: option.icons\n }, null, 8, [\"icons\"]))\n : _createCommentVNode(\"\", true),\n (option.content.length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [\n _createElementVNode(\"p\", {\n class: \"\",\n innerHTML: option.content\n }, null, 8, _hoisted_8)\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ], 42, _hoisted_4)), [\n [_directive_wave]\n ])\n }), 128))\n ])\n ]))\n}","\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport { v4 as uuid4 } from \"uuid\";\nimport MultiIcon from \"@/components/ui/MultiIcon.vue\";\nimport { SelectableOption } from \"@/interfaces\";\n\nexport default defineComponent({\n\tname: \"SegmentedControls\",\n\tprops: {\n\t\toptions: {\n\t\t\ttype: Array as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\tmodelValue: {\n\t\t\trequired: true,\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tsmall: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tcomponents: {\n\t\tMultiIcon,\n\t},\n\tcreated() {\n\t\tthis.id = uuid4();\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tshowFeedback: false,\n\t\t\tid: \"\",\n\t\t};\n\t},\n\tmethods: {\n\t\tonInput(value: string, inputEvent: Event) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-extra-semi\n\t\t\t(inputEvent.target as unknown as { checked: boolean }).checked = false;\n\t\t\tinputEvent.preventDefault();\n\t\t\tthis.$emit(\"update:modelValue\", value);\n\t\t},\n\t},\n});\n","import { render } from \"./SegmentedControls.vue?vue&type=template&id=ad683a7c&ts=true\"\nimport script from \"./SegmentedControls.vue?vue&type=script&lang=ts\"\nexport * from \"./SegmentedControls.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport SegmentedControls from \"./SegmentedControls.vue\";\nexport default defineComponent({\n\tname: \"Tabs\",\n\tprops: [\"options\", \"modelValue\", \"disabled\"],\n\tmethods: {},\n\tcomputed: {},\n\tcomponents: { SegmentedControls },\n});\n","import { render } from \"./Tabs.vue?vue&type=template&id=51659ee7&ts=true\"\nimport script from \"./Tabs.vue?vue&type=script&lang=ts\"\nexport * from \"./Tabs.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { renderSlot as _renderSlot, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle } from \"vue\"\n\nconst _hoisted_1 = { class: \"absolute top-2 left-1.5 origin-0 fixed-label w-full\" }\nconst _hoisted_2 = { class: \"flex md:flex-row space-x-1 flex-col md:space-y-0 space-y-2 w-full\" }\nconst _hoisted_3 = {\n style: {\"height\":\"inherit\"},\n class: \"absolute flex w-full\"\n}\nconst _hoisted_4 = {\n key: 0,\n class: \"hide-in-thumbnail top-0 ml-auto h-full z-40 right-0 mt-0.5 mr-4\"\n}\nconst _hoisted_5 = {\n key: 0,\n class: \"code-editor-side-pane flex flex-col w-full md:w-5/12 overflow-hidden\"\n}\nconst _hoisted_6 = [\"id\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_MonacoEditor = _resolveComponent(\"MonacoEditor\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"relative floating-label\",\n style: _normalizeStyle('height: ' + _ctx.containerHeight + ';')\n }, [\n _createElementVNode(\"label\", _hoisted_1, [\n _renderSlot(_ctx.$slots, \"default\")\n ]),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"relative rounded-sm hide-in-thumbnail\", _ctx.$slots.sidePane ? 'md:w-7/12 w-full' : 'w-full'])\n }, [\n _createElementVNode(\"div\", _hoisted_3, [\n (_ctx.showRunButton)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createVNode(_component_Btn, {\n disabled: _ctx.running || _ctx.runCoolDown > 0,\n variant: 'success',\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('run')))\n }, {\n default: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"runButton\")\n ]),\n _: 3\n }, 8, [\"disabled\"])\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n (_ctx.isRendered)\n ? (_openBlock(), _createBlock(_component_MonacoEditor, {\n key: 0,\n onEditorDidMount: _cache[1] || (_cache[1] = ($event: any) => (_ctx.onDidMount($event))),\n onChange: _cache[2] || (_cache[2] = ($event: any) => (_ctx.onChange($event))),\n onBlur: _cache[3] || (_cache[3] = ($event: any) => (_ctx.$emit('blur'))),\n value: _ctx.modelValue,\n theme: \"vs-dark\",\n class: \"rounded-md\",\n options: _ctx.monacoOptions,\n height: _ctx.baseHeight,\n language: _ctx.language\n }, null, 8, [\"value\", \"options\", \"height\", \"language\"]))\n : _createCommentVNode(\"\", true),\n _renderSlot(_ctx.$slots, \"bottom\")\n ], 2),\n (_ctx.$slots.sidePane)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createElementVNode(\"div\", {\n id: _ctx.elementId + 'sidePaneTitle'\n }, [\n _renderSlot(_ctx.$slots, \"sidePaneTitle\")\n ], 8, _hoisted_6),\n _createElementVNode(\"div\", {\n class: \"overflow-x-hidden overflow-y-auto rounded-sm rounded-t-none rounded-l-none\",\n style: _normalizeStyle('height:' + _ctx.sidePaneContentHeight + 'px')\n }, [\n _renderSlot(_ctx.$slots, \"sidePane\")\n ], 4)\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ], 4))\n}","\n\n\n","import { render } from \"./MonacoEditorCustom.vue?vue&type=template&id=f4e93ee4\"\nimport script from \"./MonacoEditorCustom.vue?vue&type=script&lang=js\"\nexport * from \"./MonacoEditorCustom.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport MonacoEditor from \"@/components/ui/MonacoEditorCustom.vue\";\nimport * as monaco from \"monaco-editor\";\n\nimport { defineComponent } from \"@vue/runtime-core\";\nimport { PropType } from \"vue\";\nimport Btn from \"./Btn.vue\";\nimport { v4 as uuid4 } from \"uuid\";\n\nexport default defineComponent({\n\tname: \"CodeEditor\",\n\tcomponents: {\n\t\tMonacoEditor,\n\t\tBtn,\n\t},\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: String,\n\t\t\t//required: true,\n\t\t},\n\t\trunCoolDown: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0,\n\t\t},\n\t\trunning: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tshowRunButton: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tsize: {\n\t\t\ttype: String as PropType<\"sm\" | \"md\" | \"lg\">,\n\t\t\tdefault: \"md\",\n\t\t},\n\t\tlanguage: {\n\t\t\ttype: String as PropType<\"typescript\" | \"c\" | \"python\">,\n\t\t\tdefault: \"typescript\",\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.sidePaneContentHeight =\n\t\t\tthis.baseHeight -\n\t\t\t(document.getElementById(this.elementId + \"sidePaneTitle\")?.clientHeight ?? 0);\n\n\t\t// tear down and re-render monaco to keep its width in sync (otherwise)\n\t\t// resizing the window gives graphical bugs\n\t\twindow.addEventListener(\"resize\", () => {\n\t\t\tthis.isRendered = false;\n\t\t\tthis.$nextTick(() => (this.isRendered = true));\n\t\t});\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tisRendered: true,\n\t\t\tmonacoModule: null as any,\n\t\t\teditorInstance: null as null | monaco.editor.IStandaloneCodeEditor,\n\t\t\ttextModel: null as null | monaco.editor.ITextModel,\n\t\t\tmonacoOptions: {\n\t\t\t\tfontSize: 14,\n\t\t\t\tminimap: {\n\t\t\t\t\tscale: 2,\n\t\t\t\t},\n\t\t\t\tquickSuggestions: {\n\t\t\t\t\tother: true,\n\t\t\t\t\tcomments: true,\n\t\t\t\t\tstrings: true,\n\t\t\t\t},\n\t\t\t\tparameterHints: {\n\t\t\t\t\tenabled: true,\n\t\t\t\t},\n\n\t\t\t\tsuggestOnTriggerCharacters: true,\n\t\t\t\tacceptSuggestionOnEnter: \"on\",\n\t\t\t\ttabCompletion: \"on\",\n\t\t\t\twordBasedSuggestions: true,\n\t\t\t},\n\t\t\telementId: uuid4(),\n\t\t\tsidePaneContentHeight: 0,\n\t\t};\n\t},\n\tmethods: {\n\t\tonChange(newVal: string) {\n\t\t\tthis.$emit(\"update:modelValue\", newVal);\n\t\t},\n\t\tonDidMount(event: monaco.editor.IStandaloneCodeEditor) {\n\t\t\tthis.editorInstance = event;\n\t\t\tthis.textModel = event.getModel();\n\t\t},\n\t},\n\tcomputed: {\n\t\tbaseHeight(): number {\n\t\t\tswitch (this.size) {\n\t\t\t\tcase \"sm\":\n\t\t\t\t\treturn 150;\n\t\t\t\tcase \"md\":\n\t\t\t\t\treturn 200;\n\t\t\t\tcase \"lg\":\n\t\t\t\t\treturn 520;\n\t\t\t}\n\t\t\tthrow new Error(\"unreachable\");\n\t\t},\n\t\teditorHeight(): string {\n\t\t\treturn this.baseHeight + \"px\";\n\t\t},\n\t\tcontainerHeight(): string {\n\t\t\treturn this.baseHeight + \"px\";\n\t\t},\n\t},\n});\n","import { render } from \"./CodeEditor.vue?vue&type=template&id=25274bac&ts=true\"\nimport script from \"./CodeEditor.vue?vue&type=script&lang=ts\"\nexport * from \"./CodeEditor.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, normalizeClass as _normalizeClass, resolveComponent as _resolveComponent, withCtx as _withCtx, createBlock as _createBlock, createVNode as _createVNode, vShow as _vShow, withDirectives as _withDirectives } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"px-4 pt-1\"\n}\nconst _hoisted_2 = { key: 1 }\nconst _hoisted_3 = { key: 0 }\nconst _hoisted_4 = { class: \"px-4 text-muted\" }\nconst _hoisted_5 = {\n key: 0,\n class: \"flex items-center mb-2 space-x-3\"\n}\nconst _hoisted_6 = { class: \"\" }\nconst _hoisted_7 = {\n key: 0,\n class: \"flex items-center font-semibold text-success-dark\"\n}\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mr-1 text-base material-icons-outlined\" }, \" done \", -1)\nconst _hoisted_9 = {\n key: 1,\n class: \"flex items-center font-semibold text-danger-dark\"\n}\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mr-1 text-base material-icons-outlined\" }, \" close \", -1)\nconst _hoisted_11 = {\n key: 1,\n class: \"mt-3\"\n}\nconst _hoisted_12 = { class: \"mb-1 text-muted\" }\nconst _hoisted_13 = {\n key: 2,\n class: \"mt-3\"\n}\nconst _hoisted_14 = { class: \"mb-1 text-muted\" }\nconst _hoisted_15 = {\n key: 2,\n class: \"px-4 pt-1\"\n}\nconst _hoisted_16 = { class: \"mb-1 text-muted\" }\nconst _hoisted_17 = {\n key: 3,\n class: \"px-4 pt-1\"\n}\nconst _hoisted_18 = { class: \"mb-1 text-muted\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_ExerciseTestCase = _resolveComponent(\"ExerciseTestCase\")!\n const _component_CodeFragment = _resolveComponent(\"CodeFragment\")!\n\n return (_openBlock(), _createElementBlock(\"div\", null, [\n (_ctx.executionResults?.state === 'internal_error')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, _toDisplayString(_ctx.$t(\"programming_exercise.internal_error\")), 1))\n : _createCommentVNode(\"\", true),\n (_ctx.executionResults?.tests)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n (_ctx.executionResults.tests.length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createElementVNode(\"p\", _hoisted_4, _toDisplayString(_ctx.$t(\"programming_exercise.results_ok_but_no_testcases\")), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.filteredExecutionResultsTests, (test, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: 'details-' + test.id,\n class: _normalizeClass([\"px-6 -mx-2\", { 'py-6': !_ctx.reduced, 'py-2': _ctx.reduced }])\n }, [\n (!_ctx.onlyErrors)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createElementVNode(\"h5\", _hoisted_6, _toDisplayString(_ctx.$t(\"programming_exercise.testcase\")) + \" \" + _toDisplayString(index + 1), 1),\n (test.passed)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [\n _hoisted_8,\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t(\"programming_exercise.passed\")), 1)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [\n _hoisted_10,\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t(\"programming_exercise.not_passed\")), 1)\n ])),\n (_ctx.reduced)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 2,\n variant: 'icon',\n outline: true,\n onClick: ($event: any) => (\n\t\t\t\t\t\t\t_ctx.testCaseDetailsVisibility[test.id] = !_ctx.testCaseDetailsVisibility[test.id]\n\t\t\t\t\t\t)\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n class: _normalizeClass([\n\t\t\t\t\t\t\t\t_ctx.testCaseDetailsVisibility[test.id]\n\t\t\t\t\t\t\t\t\t? 'material-icons'\n\t\t\t\t\t\t\t\t\t: 'material-icons-outlined',\n\t\t\t\t\t\t\t])\n }, \"visibility\", 2)\n ]),\n _: 2\n }, 1032, [\"onClick\"]))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true),\n _withDirectives(_createElementVNode(\"div\", null, [\n (!_ctx.onlyErrors)\n ? (_openBlock(), _createBlock(_component_ExerciseTestCase, {\n key: 0,\n small: true,\n \"test-case\": _ctx.exerciseTestCase(test.id)\n }, null, 8, [\"test-case\"]))\n : _createCommentVNode(\"\", true),\n (!test.passed && test.stdout)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [\n _createElementVNode(\"p\", _hoisted_12, _toDisplayString(_ctx.$t(\"programming_exercise.test_failed_stdout\")) + \": \", 1),\n _createVNode(_component_CodeFragment, {\n collapsible: true,\n value: test.stdout,\n small: true\n }, null, 8, [\"value\"])\n ]))\n : _createCommentVNode(\"\", true),\n (!test.passed && test.error)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [\n _createElementVNode(\"p\", _hoisted_14, _toDisplayString(_ctx.$t(\"programming_exercise.test_failed_with_error\")) + \": \", 1),\n _createVNode(_component_CodeFragment, {\n collapsible: true,\n value: test.stderr || test.error,\n small: true\n }, null, 8, [\"value\"])\n ]))\n : _createCommentVNode(\"\", true)\n ], 512), [\n [_vShow, !_ctx.reduced || _ctx.testCaseDetailsVisibility[test.id]]\n ])\n ], 2))\n }), 128))\n ]))\n : (!!_ctx.executionResults && _ctx.executionResults.execution_error)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_15, [\n _createElementVNode(\"p\", _hoisted_16, _toDisplayString(_ctx.$t(\"programming_exercise.code_errored\")) + \":\", 1),\n _createVNode(_component_CodeFragment, {\n collapsible: true,\n value: _ctx.executionResults?.execution_error\n }, null, 8, [\"value\"])\n ]))\n : (!!_ctx.executionResults && _ctx.executionResults.compilation_errors)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [\n _createElementVNode(\"p\", _hoisted_18, _toDisplayString(_ctx.$t(\"programming_exercise.compilation_errored\")) + \":\", 1),\n _createVNode(_component_CodeFragment, {\n collapsible: true,\n value: String(_ctx.executionResults?.compilation_errors)\n }, null, 8, [\"value\"])\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}","import { normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createVNode as _createVNode } from \"vue\"\n\nconst _hoisted_1 = [\"innerHTML\"]\nconst _hoisted_2 = { class: \"text-xs text-muted\" }\nconst _hoisted_3 = { class: \"text-xs text-muted\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_CodeFragment = _resolveComponent(\"CodeFragment\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"flex flex-col space-y-4\", { 'text-sm': _ctx.small }])\n }, [\n (!!_ctx.testCase.text && _ctx.showDescription)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: _normalizeClass([\"w-full mb-4 user-content\", [_ctx.small ? 'py-2.5 mt-2' : '']]),\n innerHTML: _ctx.testCase.text\n }, null, 10, _hoisted_1))\n : _createCommentVNode(\"\", true),\n (!!_ctx.testCase.code)\n ? (_openBlock(), _createBlock(_component_CodeFragment, {\n key: 1,\n collapsible: true,\n small: _ctx.small,\n class: \"w-full\",\n value: _ctx.testCase.code\n }, null, 8, [\"small\", \"value\"]))\n : _createCommentVNode(\"\", true),\n (!!_ctx.testCase.stdin)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 2,\n class: _normalizeClass([[!!_ctx.testCase.text ? 'md:w-1/2 w-full' : 'w-full'], \"flex flex-col\"])\n }, [\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(_ctx.$t(\"programming_exercise.testcase_stdin\")), 1),\n _createVNode(_component_CodeFragment, {\n collapsible: true,\n small: _ctx.small,\n value: _ctx.testCase.stdin\n }, null, 8, [\"small\", \"value\"])\n ], 2))\n : _createCommentVNode(\"\", true),\n (!!_ctx.testCase.expected_stdout)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 3,\n class: _normalizeClass([[!!_ctx.testCase.text ? 'md:w-1/2 w-full' : 'w-full'], \"flex flex-col\"])\n }, [\n _createElementVNode(\"div\", _hoisted_3, _toDisplayString(_ctx.$t(\"programming_exercise.testcase_expected_stdout\")), 1),\n _createVNode(_component_CodeFragment, {\n collapsible: true,\n small: _ctx.small,\n value: _ctx.testCase.expected_stdout\n }, null, 8, [\"small\", \"value\"])\n ], 2))\n : _createCommentVNode(\"\", true)\n ], 2))\n}","\nimport { ExerciseTestCase } from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport CodeFragment from \"../ui/CodeFragment.vue\";\nexport default defineComponent({\n\tname: \"ExerciseTestCase\",\n\tprops: {\n\t\ttestCase: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\tsmall: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tshowDescription: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t},\n\tmethods: {},\n\tcomputed: {},\n\tcomponents: { CodeFragment },\n});\n","import { render } from \"./ExerciseTestCase.vue?vue&type=template&id=36cb78b8&ts=true\"\nimport script from \"./ExerciseTestCase.vue?vue&type=script&lang=ts\"\nexport * from \"./ExerciseTestCase.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { CodeExecutionResults, ExerciseTestCase as IExerciseTestCase } from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport ExerciseTestCase from \"./ExerciseTestCase.vue\";\nimport CodeFragment from \"../ui/CodeFragment.vue\";\nimport Btn from \"../ui/Btn.vue\";\nexport default defineComponent({\n\tname: \"CodeExecutionResults\",\n\tprops: {\n\t\t// slot: {\n\t\t// type: Object as PropType,\n\t\t// required: true,\n\t\t// },\n\t\texecutionResults: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\ttestCases: {\n\t\t\ttype: Array as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\tshowTestIds: {\n\t\t\ttype: Array as PropType,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tonlyErrors: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\treduced: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\t// test case id -> whether it's expanded\n\t\t\ttestCaseDetailsVisibility: {} as Record,\n\t\t};\n\t},\n\tmethods: {},\n\tcomputed: {\n\t\texerciseTestCase() {\n\t\t\treturn (id: string) => this.testCases.find(t => String(t.id) === String(id));\n\t\t},\n\t\tfilteredExecutionResultsTests() {\n\t\t\treturn this.executionResults?.tests?.filter(\n\t\t\t\tt =>\n\t\t\t\t\tthis.showTestIds.length === 0 ||\n\t\t\t\t\tthis.showTestIds.map(i => String(i)).includes(String(t.id)),\n\t\t\t);\n\t\t},\n\t},\n\tcomponents: { ExerciseTestCase, CodeFragment, Btn },\n});\n","import { render } from \"./CodeExecutionResults.vue?vue&type=template&id=da08e804&ts=true\"\nimport script from \"./CodeExecutionResults.vue?vue&type=script&lang=ts\"\nexport * from \"./CodeExecutionResults.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nconst RUN_COOL_DOWN = 10;\n\nimport { programmingExerciseTabsOptions, ProgrammingExerciseTabs } from \"@/const\";\nimport {\n\tEventParticipationSlotSubmission,\n\tExercise,\n\tExerciseType,\n\tgetEmptySubmission,\n\tProgrammingExerciseType,\n\tprogrammingExerciseTypeToLanguageId,\n} from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport { loadingMixin, texMixin } from \"@/mixins\";\nimport { SelectableOption } from \"@/interfaces\";\nimport Tabs from \"@/components/ui/Tabs.vue\";\nimport CodeEditor from \"@/components/ui/CodeEditor.vue\";\nimport CodeExecutionResults from \"../CodeExecutionResults.vue\";\nimport Spinner from \"@/components/ui/Spinner.vue\";\nimport ExerciseTestCase from \"../ExerciseTestCase.vue\";\nimport { exerciseProps } from \"./shared\";\nimport AbstractExercise from \"./AbstractExercise.vue\";\nimport CodeFragment from \"@/components/ui/CodeFragment.vue\";\nexport default defineComponent({\n\tname: \"ProgrammingExercise\",\n\tmixins: [loadingMixin, texMixin],\n\tprops: {\n\t\t...exerciseProps,\n\t\trunning: {\n\t\t\ttype: Boolean,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tProgrammingExerciseTabs,\n\t\t\tprogrammingExerciseTabsOptions,\n\t\t\tcurrentTab: ProgrammingExerciseTabs.TEXT,\n\t\t\tshowExecutingMessage: false,\n\t\t\trunCoolDown: 0,\n\t\t\tExerciseType,\n\t\t};\n\t},\n\twatch: {\n\t\tisRunning(newVal, oldVal) {\n\t\t\tif (oldVal && !newVal) {\n\t\t\t\tthis.currentTab = ProgrammingExerciseTabs.EXECUTION_RESULTS;\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\tonRun() {\n\t\t\tthis.$emit(\"runCode\");\n\t\t\tthis.runCoolDown = RUN_COOL_DOWN;\n\t\t\tconst coolDownHandle = setInterval(() => {\n\t\t\t\tthis.runCoolDown--;\n\t\t\t\tif (this.runCoolDown <= 0) {\n\t\t\t\t\tclearInterval(coolDownHandle);\n\t\t\t\t}\n\t\t\t}, 1000);\n\t\t},\n\t},\n\tcomputed: {\n\t\tproxyModelValue: {\n\t\t\tget() {\n\t\t\t\treturn this.submission.answer_text;\n\t\t\t},\n\t\t\tset(val: string) {\n\t\t\t\tthis.$emit(\"updateSubmission\", [\"answer_text\", val]);\n\t\t\t},\n\t\t},\n\t\tfilteredTabsOptions(): SelectableOption[] {\n\t\t\treturn this.programmingExerciseTabsOptions.filter(\n\t\t\t\to => !this.readOnly || o.value === ProgrammingExerciseTabs.TEXT,\n\t\t\t);\n\t\t},\n\t\texecutionState() {\n\t\t\treturn this.submission.execution_results?.state;\n\t\t},\n\t\tlanguageCode() {\n\t\t\treturn programmingExerciseTypeToLanguageId[\n\t\t\t\tthis.exercise.exercise_type as ProgrammingExerciseType\n\t\t\t];\n\t\t},\n\t\tisRunning() {\n\t\t\treturn this.running || this.executionState === \"running\";\n\t\t},\n\t},\n\tcomponents: {\n\t\tTabs,\n\t\tCodeEditor,\n\t\tCodeExecutionResults,\n\t\tSpinner,\n\t\tExerciseTestCase,\n\t\tAbstractExercise,\n\t\tCodeFragment,\n\t},\n});\n","import { render } from \"./ProgrammingExercise.vue?vue&type=template&id=4f3a57ea&ts=true\"\nimport script from \"./ProgrammingExercise.vue?vue&type=script&lang=ts\"\nexport * from \"./ProgrammingExercise.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport {\n\tEventParticipationSlotSubmission,\n\tExercise,\n\tExerciseType,\n\tgetEmptySubmission,\n} from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport MultipleChoiceExercise from \"./MultipleChoiceExercise.vue\";\nimport OpenAnswerExercise from \"./OpenAnswerExercise.vue\";\nimport AttachmentExercise from \"./AttachmentExercise.vue\";\nimport AggregatedExercise from \"./AggregatedExercise.vue\";\nimport ClozeExercise from \"./ClozeExercise.vue\";\nimport ProgrammingExercise from \"./ProgrammingExercise.vue\";\nimport { exerciseProps } from \"./shared\";\nimport { texMixin } from \"@/mixins\";\nexport default defineComponent({\n\tname: \"Exercise\",\n\tmixins: [texMixin],\n\tcreated() {\n\t\tthis.triggerTexRender();\n\t},\n\temits: {\n\t\tblur: null,\n\t\tupdateSubmission: (payload: [keyof EventParticipationSlotSubmission, any]) => {\n\t\t\t/**\n\t\t\t * Emitted when the submission to this exercise changes\n\t\t\t */\n\t\t\tconst validators: Record<\n\t\t\t\tkeyof EventParticipationSlotSubmission,\n\t\t\t\t(val: any) => boolean\n\t\t\t> = {\n\t\t\t\tanswer_text: val => typeof val === \"string\",\n\t\t\t\tselected_choices: val =>\n\t\t\t\t\tval &&\n\t\t\t\t\tArray.isArray(val) &&\n\t\t\t\t\tval.every(v => [\"string\", \"number\"].includes(typeof v)),\n\t\t\t\tattachment: val => true,\n\t\t\t\texecution_results: val => false, // meant to be read-only\n\t\t\t};\n\t\t\tif (!(payload[0] in validators)) {\n\t\t\t\tconsole.warn(\"Invalid key in updateSubmission event\", payload[0]);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// check the value for that key is valid\n\t\t\tif (!validators[payload[0]](payload[1])) {\n\t\t\t\tconsole.warn(\"Invalid value for key\", payload[0], payload[1]);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\trunCode: null,\n\t},\n\tprops: { ...exerciseProps },\n\tmethods: {},\n\tcomputed: {\n\t\texerciseComponentName(): string {\n\t\t\tconst componentNames: Record = {\n\t\t\t\t[ExerciseType.MULTIPLE_CHOICE_MULTIPLE_POSSIBLE]: \"MultipleChoiceExercise\",\n\t\t\t\t[ExerciseType.MULTIPLE_CHOICE_SINGLE_POSSIBLE]: \"MultipleChoiceExercise\",\n\t\t\t\t[ExerciseType.OPEN_ANSWER]: \"OpenAnswerExercise\",\n\t\t\t\t[ExerciseType.JS]: \"ProgrammingExercise\",\n\t\t\t\t[ExerciseType.C]: \"ProgrammingExercise\",\n\t\t\t\t[ExerciseType.PYTHON]: \"ProgrammingExercise\",\n\t\t\t\t[ExerciseType.ATTACHMENT]: \"AttachmentExercise\",\n\t\t\t\t[ExerciseType.AGGREGATED]: \"AggregatedExercise\",\n\t\t\t\t[ExerciseType.COMPLETION]: \"ClozeExercise\",\n\t\t\t};\n\t\t\treturn componentNames[this.exercise.exercise_type as ExerciseType];\n\t\t},\n\t},\n\tcomponents: {\n\t\tMultipleChoiceExercise,\n\t\tOpenAnswerExercise,\n\t\tAttachmentExercise,\n\t\tAggregatedExercise,\n\t\tClozeExercise,\n\t\tProgrammingExercise,\n\t},\n});\n","import { render } from \"./Exercise.vue?vue&type=template&id=c90a4e56&ts=true\"\nimport script from \"./Exercise.vue?vue&type=script&lang=ts\"\nexport * from \"./Exercise.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderSlot as _renderSlot, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createBlock as _createBlock, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = { class: \"sticky mb-auto top-18 md:self-start shadow-elevation card card-filled\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"mb-2 -mx-5 -mt-4 text-sm rounded-b-none banner banner-danger\"\n}\nconst _hoisted_3 = { class: \"flex items-center mx-auto space-x-2\" }\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"p\", { class: \"my-auto text-base material-icons-outlined\" }, \"pending_actions\", -1)\nconst _hoisted_5 = { class: \"\" }\nconst _hoisted_6 = {\n key: 1,\n class: \"w-full\"\n}\nconst _hoisted_7 = { class: \"flex items-center w-full transition-opacity duration-100\" }\nconst _hoisted_8 = {\n key: 0,\n class: \"mr-auto text-muted\"\n}\nconst _hoisted_9 = { class: \"mr-1\" }\nconst _hoisted_10 = { class: \"text-lg\" }\nconst _hoisted_11 = { key: 0 }\nconst _hoisted_12 = { class: \"text-lg\" }\nconst _hoisted_13 = {\n key: 1,\n class: \"text-muted\"\n}\nconst _hoisted_14 = {\n key: 2,\n class: \"flex items-center ml-1\"\n}\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg icon-light material-icons\" }, \"edit\", -1)\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg icon-light material-icons-outlined\" }, \"undo\", -1)\nconst _hoisted_17 = { class: \"transition-opacity duration-100\" }\nconst _hoisted_18 = {\n key: 0,\n class: \"mt-2 text-muted\"\n}\nconst _hoisted_19 = [\"innerHTML\"]\nconst _hoisted_20 = { class: \"mt-4\" }\nconst _hoisted_21 = {\n key: 0,\n class: \"mt-4 ml-auto\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_NumberInput = _resolveComponent(\"NumberInput\")!\n const _component_TextEditor = _resolveComponent(\"TextEditor\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (!_ctx.readOnly && _ctx.assessment.score === null)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _hoisted_4,\n _createElementVNode(\"p\", _hoisted_5, _toDisplayString(_ctx.$t(\"event_assessment.this_exercise_requires_manual_assessment\")), 1)\n ])\n ]))\n : _createCommentVNode(\"\", true),\n (!_ctx.writeOnly)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _createElementVNode(\"div\", _hoisted_7, [\n (_ctx.assessment.score !== null)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_8, [\n _createElementVNode(\"span\", _hoisted_9, [\n _renderSlot(_ctx.$slots, \"scoreTitle\")\n ]),\n _createElementVNode(\"strong\", _hoisted_10, _toDisplayString(_ctx.assessment.score), 1),\n (_ctx.maxScore)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_11, [\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t(\"misc.out_of\")) + \" \", 1),\n _createElementVNode(\"strong\", _hoisted_12, _toDisplayString(_ctx.maxScore ?? 0), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n : (_openBlock(), _createElementBlock(\"p\", _hoisted_13, _toDisplayString(_ctx.$t(\"event_assessment.no_score_for_exercise\")), 1)),\n (!_ctx.readOnly)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_14, [\n _createVNode(_component_Btn, {\n outline: true,\n variant: 'icon',\n size: 'sm',\n tooltip: _ctx.expanded ? '' : _ctx.$t('help_texts.edit_score'),\n disabled: _ctx.expanded,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.onShowAssessmentControls()))\n }, {\n default: _withCtx(() => [\n _hoisted_15\n ]),\n _: 1\n }, 8, [\"tooltip\", \"disabled\"]),\n (!_ctx.readOnly && _ctx.assessment.score_edited)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 0,\n outline: true,\n class: \"ml-auto\",\n variant: 'icon',\n size: 'sm',\n tooltip: _ctx.$t('event_assessment.undo_score_edit_tooltip'),\n disabled: _ctx.expanded,\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.onUndoScoreEdit()))\n }, {\n default: _withCtx(() => [\n _hoisted_16\n ]),\n _: 1\n }, 8, [\"tooltip\", \"disabled\"]))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_17, [\n ((_ctx.assessment.comment?.length ?? 0) > 0)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_18, _toDisplayString(!_ctx.readOnly\n\t\t\t\t\t\t\t? _ctx.$t(\"event_assessment.comment_for_student\")\n\t\t\t\t\t\t\t: _ctx.$t(\"misc.teacher_comment\")) + \": \", 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"p\", {\n innerHTML: _ctx.assessment.comment\n }, null, 8, _hoisted_19)\n ])\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", {\n class: _normalizeClass([{\n\t\t\t\t'max-h-0': !_ctx.expanded,\n\t\t\t\t'max-h-96': _ctx.expanded,\n\t\t\t}, \"flex flex-col overflow-y-hidden duration-200 ease-in-out transition-max-height\"])\n }, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([{\n\t\t\t\t\t'md:flex-row md:items-center': !_ctx.isSubSlot,\n\t\t\t\t\t'mt-4': !_ctx.writeOnly,\n\t\t\t\t}, \"flex flex-col ease-in-out\"])\n }, [\n _createElementVNode(\"h3\", null, _toDisplayString(_ctx.$t(\"event_assessment.your_assessment\")), 1)\n ], 2),\n _createElementVNode(\"div\", _hoisted_20, [\n _createVNode(_component_NumberInput, {\n class: \"mb-4\",\n modelValue: _ctx.scoreProxy,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((_ctx.scoreProxy) = $event)),\n max: _ctx.maxScore\n }, {\n rightHint: _withCtx(() => [\n _createTextVNode(\"/\" + _toDisplayString(_ctx.maxScore ?? 0), 1)\n ]),\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_assessment.assigned_score\")) + \" \", 1)\n ]),\n _: 1\n }, 8, [\"modelValue\", \"max\"]),\n _createVNode(_component_TextEditor, {\n class: \"w-full\",\n modelValue: _ctx.commentProxy,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((_ctx.commentProxy) = $event))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_assessment.comment_for_student\")), 1)\n ]),\n _: 1\n }, 8, [\"modelValue\"])\n ]),\n (!_ctx.writeOnly)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_21, [\n _createVNode(_component_Btn, {\n class: \"mr-2\",\n outline: false,\n variant: 'primary',\n loading: _ctx.loading,\n disabled: _ctx.dirtyScore === null || String(_ctx.dirtyScore ?? '').length === 0,\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.onSave()))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_assessment.confirm_assessment\")), 1)\n ]),\n _: 1\n }, 8, [\"loading\", \"disabled\"]),\n _createVNode(_component_Btn, {\n outline: true,\n disabled: _ctx.loading,\n variant: 'primary',\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.onHideAssessmentControls()))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"dialog.default_cancel_text\")), 1)\n ]),\n _: 1\n }, 8, [\"disabled\"])\n ]))\n : _createCommentVNode(\"\", true)\n ], 2)\n ]))\n}","\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport { EventParticipationSlotAssessment } from \"@/models\";\nimport { tupleExpression } from \"@babel/types\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport Btn from \"../ui/Btn.vue\";\nimport NumberInput from \"../ui/NumberInput.vue\";\nimport TextEditor from \"../ui/TextEditor.vue\";\nexport default defineComponent({\n\tname: \"ParticipationSlotAssessment\",\n\temits: {\n\t\ttoggleExpanded(value: boolean) {\n\t\t\treturn true;\n\t\t},\n\t\tupdateAssessment(payload: [keyof EventParticipationSlotAssessment, any]) {\n\t\t\treturn true;\n\t\t},\n\t\tsave(changes: { score: number | null; comment: string }) {\n\t\t\treturn true;\n\t\t},\n\t},\n\tprops: {\n\t\tassessment: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\treadOnly: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tmaxScore: {\n\t\t\ttype: Number,\n\t\t},\n\t\texpanded: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\twriteOnly: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tisSubSlot: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\twatch: {\n\t\tassessment: {\n\t\t\timmediate: true,\n\t\t\tdeep: true,\n\t\t\thandler(newVal: EventParticipationSlotAssessment) {\n\t\t\t\tthis.dirtyComment = newVal.comment ?? \"\";\n\t\t\t\tthis.dirtyScore = newVal.score ?? null;\n\t\t\t},\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tdirtyScore: null as null | number,\n\t\t\tdirtyComment: null as null | string,\n\t\t};\n\t},\n\tmethods: {\n\t\tonShowAssessmentControls() {\n\t\t\tthis.$emit(\"toggleExpanded\", true);\n\t\t},\n\t\tonSave() {\n\t\t\tthis.$emit(\"save\", {\n\t\t\t\tcomment: this.dirtyComment ?? \"\",\n\t\t\t\tscore: this.dirtyScore,\n\t\t\t});\n\t\t},\n\t\tonHideAssessmentControls() {\n\t\t\tthis.$emit(\"toggleExpanded\", false);\n\t\t},\n\t\tonUndoScoreEdit() {\n\t\t\tif (confirm(_(\"event_assessment.undo_score_edit\"))) {\n\t\t\t\tthis.scoreProxy = null;\n\t\t\t\tthis.onSave();\n\t\t\t\tthis.onHideAssessmentControls();\n\t\t\t}\n\t\t},\n\t},\n\tcomputed: {\n\t\tscoreProxy: {\n\t\t\tget(): number | null {\n\t\t\t\treturn this.dirtyScore ?? 0;\n\t\t\t},\n\t\t\tset(val: any) {\n\t\t\t\tthis.dirtyScore = val;\n\t\t\t\tthis.$emit(\"updateAssessment\", [\"score\", val]);\n\t\t\t},\n\t\t},\n\t\tcommentProxy: {\n\t\t\tget() {\n\t\t\t\treturn this.dirtyComment ?? \"\";\n\t\t\t},\n\t\t\tset(val: string) {\n\t\t\t\tthis.dirtyComment = val;\n\t\t\t\tthis.$emit(\"updateAssessment\", [\"comment\", val]);\n\t\t\t},\n\t\t},\n\t},\n\tcomponents: { Btn, NumberInput, TextEditor },\n});\n","import { render } from \"./ParticipationSlotAssessment.vue?vue&type=template&id=48ac660f&ts=true\"\nimport script from \"./ParticipationSlotAssessment.vue?vue&type=script&lang=ts\"\nexport * from \"./ParticipationSlotAssessment.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport {\n\tEventParticipationSlot,\n\tEventParticipationSlotAssessment,\n\tEventParticipationSlotSubmission,\n\tExercise as IExercise,\n\tExerciseSolution,\n\tExerciseType,\n\tprogrammingExerciseTypes,\n} from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport Timestamp from \"../ui/Timestamp.vue\";\nimport { texMixin } from \"@/mixins\";\nimport Exercise from \"./Exercise/Exercise.vue\";\nimport ParticipationSlotAssessment from \"./ParticipationSlotAssessment.vue\";\nimport { isOpenAnswerExercise, isProgrammingExercise } from \"./Exercise/utils\";\nimport ClozeExercise from \"./Exercise/ClozeExercise.vue\";\n\nexport default defineComponent({\n\tcomponents: {\n\t\tTimestamp,\n\t\tExercise,\n\t\tParticipationSlotAssessment,\n\t\tClozeExercise,\n\t},\n\temits: {\n\t\tblur(slot: EventParticipationSlot) {\n\t\t\treturn true;\n\t\t},\n\t\tsaveAssessment(payload: {\n\t\t\tslot: EventParticipationSlot;\n\t\t\tchanges: { score: number | null; comment: string };\n\t\t}) {\n\t\t\treturn true;\n\t\t},\n\t\tupdateSubmission(payload: {\n\t\t\tslot: EventParticipationSlot;\n\t\t\tpayload: [keyof EventParticipationSlotSubmission, any];\n\t\t}) {\n\t\t\treturn true;\n\t\t},\n\t\tupdateAssessment(payload: {\n\t\t\tslot: EventParticipationSlot;\n\t\t\tpayload: [keyof EventParticipationSlotAssessment, any];\n\t\t}) {\n\t\t\treturn true;\n\t\t},\n\t\tsetAssessmentExpanded(payload: { slot: EventParticipationSlot; payload: boolean }) {\n\t\t\treturn true;\n\t\t},\n\t\trunCode(slot: EventParticipationSlot) {\n\t\t\treturn true;\n\t\t},\n\t},\n\tname: \"AbstractEventParticipationSlot\",\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\tsubSlot: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tallowEditAssessment: {\n\t\t\t// should be used when accessing as a teacher to assess the slot\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tallowEditSubmission: {\n\t\t\t// whether user should be able to edit the submission fields (answer text, selected choices etc.)\n\t\t\t// to be used by students during the participation to an event\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tshowExerciseLabel: {\n\t\t\t// whether the exercise label (i.e. name of the exercise) should be displayed\n\t\t\t// to be used when displaying the exercise preview\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tshowSolutionAndScores: {\n\t\t\t// whether the exercises' solutions and choices' scores should be displayed\n\t\t\t// to be used when reviewing a participation to a practice event\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tshowAnswer: {\n\t\t\t// whether the exercise's readOnlyAnswer prop should be shown, if enabled\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tshowAssessmentCard: {\n\t\t\t// whether the card with teacher assessment fields (scores and comments) should be displayed.\n\t\t\t// to be used when assessments are made available and a student displays them\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tassessmentWriteOnly: {\n\t\t\t// whether the assessment controls should be displayed \"stand-alone\",\n\t\t\t// without the ability to collapse them and show the current assessment\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tassessmentControlsVisibility: {\n\t\t\t// whether the card containing the input fields to assess the slot should be displayed.\n\t\t\t// to be used when accessing a full participation as a teacher and the user is editing\n\t\t\t// the assessment fields of the slot (i.e. clicked on edit button)\n\t\t\ttype: Object as PropType>, // Boolean,\n\t\t\tdefault: () => {},\n\t\t},\n\t\tassessmentLoading: {\n\t\t\t// used when dispatching changes to the assessment slots, to disable the button\n\t\t\t// until the action has succeeded\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tsaving: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tshowTags: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tmixins: [texMixin],\n\tcreated() {\n\t\tthis.triggerTexRender();\n\t},\n\tmethods: {\n\t\tonUpdateSubmission(change: [keyof EventParticipationSlotSubmission, any]) {\n\t\t\tthis.$emit(\"updateSubmission\", {\n\t\t\t\tslot: this.modelValue,\n\t\t\t\tpayload: change,\n\t\t\t});\n\t\t},\n\t\tonUpdateAssessment(change: [keyof EventParticipationSlotAssessment, any]) {\n\t\t\tthis.$emit(\"updateAssessment\", {\n\t\t\t\tslot: this.modelValue,\n\t\t\t\tpayload: change,\n\t\t\t});\n\t\t},\n\t\tsetAssessmentExpanded(value: boolean) {\n\t\t\tthis.$emit(\"setAssessmentExpanded\", {\n\t\t\t\tslot: this.modelValue,\n\t\t\t\tpayload: value,\n\t\t\t});\n\t\t},\n\t\tonSaveAssessment(changes: { score: number | null; comment: string }) {\n\t\t\tthis.$emit(\"saveAssessment\", {\n\t\t\t\tslot: this.modelValue,\n\t\t\t\tchanges,\n\t\t\t});\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tExerciseType,\n\t\t};\n\t},\n\tcomputed: {\n\t\texercise(): IExercise {\n\t\t\treturn this.modelValue.exercise;\n\t\t},\n\t\tassessment(): EventParticipationSlotAssessment {\n\t\t\tconst { comment, score, score_edited, assessment_state } = this.modelValue;\n\t\t\treturn {\n\t\t\t\tcomment,\n\t\t\t\tscore,\n\t\t\t\tscore_edited,\n\t\t\t\tassessment_state,\n\t\t\t};\n\t\t},\n\t\tsubmission(): EventParticipationSlotSubmission {\n\t\t\tconst { selected_choices, answer_text, execution_results, attachment } =\n\t\t\t\tthis.modelValue;\n\t\t\treturn {\n\t\t\t\tselected_choices,\n\t\t\t\tanswer_text,\n\t\t\t\texecution_results,\n\t\t\t\tattachment,\n\t\t\t};\n\t\t},\n\t\tisProgrammingExercise() {\n\t\t\treturn isProgrammingExercise(this.exercise);\n\t\t},\n\t\tisOpenAnswerExercise() {\n\t\t\treturn isOpenAnswerExercise(this.exercise);\n\t\t},\n\t\tassessmentExpanded(): boolean {\n\t\t\treturn (\n\t\t\t\tthis.assessmentWriteOnly ||\n\t\t\t\t(this.assessmentControlsVisibility?.[this.modelValue.id] ?? false)\n\t\t\t);\n\t\t},\n\t\tsomeSubSlotsPending(): boolean {\n\t\t\treturn this.modelValue.sub_slots.some(s => s.score === null);\n\t\t},\n\t},\n});\n","import { render } from \"./AbstractEventParticipationSlot.vue?vue&type=template&id=5f0ff4d6&ts=true\"\nimport script from \"./AbstractEventParticipationSlot.vue?vue&type=script&lang=ts\"\nexport * from \"./AbstractEventParticipationSlot.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport {\n\tEventParticipationSlot,\n\tExercise as IExercise,\n\tgetFakeEventParticipationSlot,\n} from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport Exercise from \"./Exercise/Exercise.vue\";\nimport AbstractEventParticipationSlot from \"./AbstractEventParticipationSlot.vue\"; // A read-only fake EventParticipationSlot as a wrapper to show an exercise\nexport default defineComponent({\n\tname: \"FullExercise\",\n\tprops: {\n\t\texercise: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\tshowTags: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t},\n\tcomponents: {\n\t\t// Exercise,\n\t\tAbstractEventParticipationSlot,\n\t},\n\tcomputed: {\n\t\texerciseWrapperSlot(): EventParticipationSlot {\n\t\t\treturn getFakeEventParticipationSlot(this.exercise);\n\t\t},\n\t},\n});\n","import { render } from \"./FullExercise.vue?vue&type=template&id=eeae5aec&ts=true\"\nimport script from \"./FullExercise.vue?vue&type=script&lang=ts\"\nexport * from \"./FullExercise.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, normalizeStyle as _normalizeStyle, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderSlot as _renderSlot, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons\" }, \"navigate_before\", -1)\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons\" }, \"navigate_next\", -1)\nconst _hoisted_3 = [\"id\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"relative overflow-hidden\", {\n\t\t\t'faded-left': !_ctx.atBeginX,\n\t\t\t'faded-right': !_ctx.atEndX,\n\t\t}])\n }, [\n (!_ctx.atBeginX)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n style: _normalizeStyle({\n\t\t\t\topacity: _ctx.atBeginX ? 0 : 1,\n\t\t\t\t'z-index': _ctx.atBeginX ? -1 : 15,\n\t\t\t}),\n class: \"faded-navigate-previous absolute left-0\"\n }, [\n _createVNode(_component_Btn, {\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.scrollBy(-15))),\n style: {\"z-index\":\"200\"},\n size: 'xs',\n outline: true,\n variant: 'icon'\n }, {\n default: _withCtx(() => [\n _hoisted_1\n ]),\n _: 1\n })\n ], 4))\n : _createCommentVNode(\"\", true),\n (_ctx.isScrollable)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n style: _normalizeStyle({\n\t\t\t\topacity: _ctx.atEndX ? 0 : 1,\n\t\t\t\t'z-index': _ctx.atEndX ? -1 : 15,\n\t\t\t}),\n class: \"faded-navigate-next absolute right-0\"\n }, [\n _createVNode(_component_Btn, {\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.scrollBy(15))),\n style: {\"z-index\":\"200\"},\n size: 'xs',\n outline: true,\n variant: 'icon'\n }, {\n default: _withCtx(() => [\n _hoisted_2\n ]),\n _: 1\n })\n ], 4))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", {\n class: \"flex overflow-x-auto scrollable-slot\",\n id: _ctx.elementId\n }, [\n _renderSlot(_ctx.$slots, \"default\")\n ], 8, _hoisted_3)\n ], 2))\n}","\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport { v4 as uuid4 } from \"uuid\";\nimport Btn from \"./Btn.vue\";\nexport default defineComponent({\n\tname: \"FadedEdgesScrollableFragment\",\n\tprops: {},\n\tmounted() {\n\t\tthis.element = document.getElementById(this.elementId);\n\t\tthis.element?.addEventListener(\"scroll\", this.debounce(this.onScroll), {\n\t\t\tpassive: true,\n\t\t});\n\t\tthis.onScroll();\n\t\t// (ugly workaround) trigger method to make the right arrow disappear if element isn't scrollable\n\t\tsetTimeout(() => this.onScroll(), 50);\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tatBeginX: true,\n\t\t\tatEndX: false,\n\t\t\tatBeginY: true,\n\t\t\tatEndY: false,\n\t\t\telementId: uuid4(),\n\t\t\telement: null as null | HTMLElement,\n\t\t\tisScrollable: false,\n\t\t};\n\t},\n\tmethods: {\n\t\tdebounce(fn: any) {\n\t\t\t// This holds the requestAnimationFrame reference, so we can cancel it if we wish\n\t\t\tlet frame: number;\n\t\t\t// The debounce function returns a new function that can receive a variable number of arguments\n\t\t\treturn (...params: any[]) => {\n\t\t\t\t// If the frame variable has been defined, clear it now, and queue for next frame\n\t\t\t\tif (frame) {\n\t\t\t\t\tcancelAnimationFrame(frame);\n\t\t\t\t}\n\t\t\t\t// Queue our function call for the next frame\n\t\t\t\tframe = requestAnimationFrame(() => {\n\t\t\t\t\t// Call our function and pass any params we received\n\t\t\t\t\tfn(...params);\n\t\t\t\t});\n\t\t\t};\n\t\t},\n\t\tonScroll() {\n\t\t\tconst el = this.element as HTMLElement;\n\t\t\tthis.isScrollable =\n\t\t\t\tel.scrollWidth > el.clientWidth &&\n\t\t\t\t[\"scroll\", \"auto\"].indexOf(getComputedStyle(el).overflowX) >= 0;\n\t\t\tthis.atEndX =\n\t\t\t\t!this.isScrollable || -(el.scrollLeft + el.clientWidth) + el.scrollWidth <= 1;\n\t\t\tthis.atBeginX = el.scrollLeft === 0;\n\t\t},\n\t\tscrollBy(perc: number) {\n\t\t\tconst el = this.element as HTMLElement;\n\t\t\tconst amount = (el.scrollWidth * perc) / 100;\n\t\t\tel.scrollLeft = el.scrollLeft + amount;\n\t\t},\n\t},\n\tcomputed: {},\n\tcomponents: { Btn },\n});\n","import { render } from \"./FadedEdgesScrollableFragment.vue?vue&type=template&id=7ce833c8&ts=true\"\nimport script from \"./FadedEdgesScrollableFragment.vue?vue&type=script&lang=ts\"\nexport * from \"./FadedEdgesScrollableFragment.vue?vue&type=script&lang=ts\"\n\nimport \"./FadedEdgesScrollableFragment.vue?vue&type=style&index=0&id=7ce833c8&lang=css\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport { v4 as uuid4 } from \"uuid\";\n\nimport { Exercise, ExerciseState, ExerciseType } from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport Tag from \"@/components/ui/Tag.vue\";\nimport MultiIcon from \"@/components/ui/MultiIcon.vue\";\nimport { icons as exerciseStatesIcons } from \"@/assets/exerciseStatesIcons\";\nimport { icons as exerciseTypesIcons } from \"@/assets/exerciseTypesIcons\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport Dialog from \"@/components/ui/Dialog.vue\";\nimport FullExercise from \"@/components/shared/FullExercise.vue\";\nimport { texMixin } from \"@/mixins\";\nimport Tooltip from \"@/components/ui/Tooltip.vue\";\nimport FadedEdgesScrollableFragment from \"@/components/ui/FadedEdgesScrollableFragment.vue\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { logAnalyticsEvent } from \"@/utils\";\nimport ProcessedTextFragment from \"@/components/ui/ProcessedTextFragment.vue\";\nexport default defineComponent({\n\tname: \"MinimalExercisePreview\",\n\tprops: {\n\t\texercise: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\thighlighted: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tselectable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tpreviewable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tselectionDisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tselectButtonTitle: {\n\t\t\ttype: String,\n\t\t\tdefault: \"\",\n\t\t},\n\t\texpandable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tshowTags: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\thoverable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tshowEdit: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\treduced: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tmixins: [texMixin],\n\tcomponents: {\n\t\tTag,\n\t\tMultiIcon,\n\t\tBtn,\n\t\tDialog,\n\t\tFullExercise,\n\t\tTooltip,\n\t\tFadedEdgesScrollableFragment,\n\t\tProcessedTextFragment,\n\t},\n\tcreated() {\n\t\tthis.elementId = uuid4();\n\t\tthis.tagsDivId = uuid4();\n\t\tthis.triggerTexRender();\n\t},\n\tmounted() {\n\t\tconst setWidthFn = () => {\n\t\t\tthis.tagsDivWidth =\n\t\t\t\tdocument.getElementById(this.tagsDivId)?.parentElement?.clientWidth ?? 0;\n\t\t};\n\t\twindow.addEventListener(\"resize\", setWidthFn);\n\t\tsetTimeout(setWidthFn, 10);\n\t},\n\twatch: {\n\t\tshowPreview(newVal) {\n\t\t\tif (newVal) {\n\t\t\t\tthis.triggerTexRender();\n\t\t\t}\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\telementId: \"\",\n\t\t\tshowPreview: false,\n\t\t\tExerciseType,\n\t\t\ttagsDivId: \"\",\n\t\t\ttagsDivWidth: 0,\n\t\t};\n\t},\n\tmethods: {\n\t\temitEdit() {\n\t\t\tthis.$emit(\"edit\");\n\t\t\tlogAnalyticsEvent(\"editExerciseFromPreview\", {});\n\t\t},\n\t\tonSelection() {\n\t\t\tthis.$emit(\"selection\");\n\t\t},\n\t},\n\tcomputed: {\n\t\ttagsDivStyle() {\n\t\t\treturn `width: ${this.tagsDivWidth ?? 508}px`;\n\t\t},\n\t\tpreviewTitle(): string {\n\t\t\treturn (this.exercise?.label ?? \"\").trim().length > 0\n\t\t\t\t? (this.exercise.label as string)\n\t\t\t\t: _(\"exercise_preview.unnamed_exercise\");\n\t\t},\n\t\tpreviewText(): string {\n\t\t\treturn this.exercise.text;\n\t\t},\n\t\texerciseStateIcons() {\n\t\t\treturn exerciseStatesIcons[this.exercise.state as ExerciseState];\n\t\t},\n\t\texerciseTypeIcons() {\n\t\t\treturn exerciseTypesIcons[this.exercise.exercise_type as ExerciseType];\n\t\t},\n\t\ttags() {\n\t\t\treturn [\n\t\t\t\t...(this.exercise.public_tags ?? []),\n\t\t\t\t...(this.exercise.private_tags ?? []),\n\t\t\t];\n\t\t},\n\t},\n});\n","import { render } from \"./MinimalExercisePreview.vue?vue&type=template&id=6f65333a&ts=true\"\nimport script from \"./MinimalExercisePreview.vue?vue&type=script&lang=ts\"\nexport * from \"./MinimalExercisePreview.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"relative\" }, [\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"absolute top-0 flex w-full space-x-4\" }, [\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-9/12 skeleton-unit\" }),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-3/12 ml-auto rounded-full skeleton-unit\" })\n ]),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"flex items-start w-full opacity-0\" }, [\n /*#__PURE__*/_createElementVNode(\"h3\", {\n class: \"flex-grow\",\n style: {\"display\":\"-webkit-box\",\"-webkit-line-clamp\":\"2\",\"-webkit-box-orient\":\"vertical\",\"overflow\":\"hidden\"}\n }, \"   \"),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"ml-auto\" }, [\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"mr-0 chip\" }, [\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"flex items-center\" }, [\n /*#__PURE__*/_createElementVNode(\"p\", null, \" \")\n ])\n ])\n ])\n ])\n], -1)\nconst _hoisted_2 = { class: \"relative\" }\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"absolute top-0 w-full\" }, [\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"flex w-full mb-2 space-x-2\" }, [\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-1/2 h-5 skeleton-unit\" }),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-1/2 h-5 skeleton-unit\" })\n ]),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"flex w-full space-x-2\" }, [\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-1/2 h-5 skeleton-unit\" }),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-1/2 h-5 skeleton-unit\" })\n ]),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"flex justify-between w-full mt-8\" }, [\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-20 rounded-md skeleton-unit\" }),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-20 rounded-md skeleton-unit\" })\n ])\n], -1)\nconst _hoisted_4 = { class: \"opacity-0\" }\nconst _hoisted_5 = { class: \"flex flex-col h-full\" }\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"mt-1 mb-4 space-y-1 text-sm\" }, [\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"flex space-x-1\" }, [\n /*#__PURE__*/_createElementVNode(\"p\", { class: \"text-muted\" }, \" \")\n ]),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"flex space-x-1\" }, [\n /*#__PURE__*/_createElementVNode(\"p\", { class: \"text-muted\" }, \" \")\n ])\n], -1)\nconst _hoisted_7 = { class: \"flex items-end mt-auto\" }\nconst _hoisted_8 = { class: \"flex mr-auto space-x-2\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createBlock(_component_Card, { marginLess: true }, {\n header: _withCtx(() => [\n _hoisted_1\n ]),\n body: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", _hoisted_5, [\n _hoisted_6,\n _createElementVNode(\"div\", _hoisted_7, [\n _createElementVNode(\"div\", _hoisted_8, [\n _createVNode(_component_Btn, null, {\n default: _withCtx(() => [\n _createTextVNode(\" \")\n ]),\n _: 1\n })\n ])\n ])\n ])\n ])\n ])\n ]),\n _: 1\n }))\n}","\nimport { defineComponent } from \"@vue/runtime-core\";\nimport Btn from \"../Btn.vue\";\nimport Card from \"../Card.vue\";\n\nexport default defineComponent({\n\tname: \"EventEditorPreviewSkeleton\",\n\tcomponents: { Btn, Card },\n});\n","import { render } from \"./EventEditorPreviewSkeleton.vue?vue&type=template&id=a9b8effe&ts=true\"\nimport script from \"./EventEditorPreviewSkeleton.vue?vue&type=script&lang=ts\"\nexport * from \"./EventEditorPreviewSkeleton.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"relative\" }, [\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"absolute top-0 w-full\" }, [\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"flex w-full space-x-4\" }, [\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-11/12 skeleton-unit\" }),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-1/12 rounded-full skeleton-unit\" })\n ])\n ]),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"opacity-0\" }, [\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"flex items-center\" }, [\n /*#__PURE__*/_createElementVNode(\"h5\", null, \" \"),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"flex ml-2 space-x-1\" }),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"my-auto ml-4 cursor-default chip chip-sm\" }, [\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"flex items-center\" }, \" \")\n ])\n ])\n ])\n], -1)\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"relative\" }, [\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"absolute top-0 w-full\" }, [\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-full h-4 my-2 skeleton-unit\" }),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-full h-4 skeleton-unit\" })\n ]),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"relative h-12 overflow-y-hidden opacity-0\" }, [\n /*#__PURE__*/_createElementVNode(\"div\", {\n style: {\"display\":\"-webkit-box\",\"-webkit-line-clamp\":\"2\",\"-webkit-box-orient\":\"vertical\",\"overflow\":\"hidden\"},\n class: \"w-11/12 overflow-x-hidden overflow-ellipsis text-muted\"\n }, \"   \")\n ])\n], -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createBlock(_component_Card, {\n size: 'sm',\n hoverable: false\n }, {\n header: _withCtx(() => [\n _hoisted_1\n ]),\n body: _withCtx(() => [\n _hoisted_2\n ]),\n _: 1\n }))\n}","\nimport { defineComponent } from \"vue\";\nimport Card from \"../Card.vue\";\n\nexport default defineComponent({\n\tname: \"MinimalExercisePreviewSkeleton\",\n\tcomponents: {\n\t\tCard,\n\t},\n});\n","import { render } from \"./MinimalExercisePreviewSkeleton.vue?vue&type=template&id=88ffcde0&ts=true\"\nimport script from \"./MinimalExercisePreviewSkeleton.vue?vue&type=script&lang=ts\"\nexport * from \"./MinimalExercisePreviewSkeleton.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { isMultipleChoiceExercise } from \"./../components/shared/Exercise/utils\";\nimport {\n\tCourse,\n\tEventTemplateRuleClause,\n\tEventTemplateRuleSatisfying,\n\tEventTemplateRuleType,\n\tExercise,\n\tExerciseChoice,\n\tExerciseType,\n\tEventTemplateRule,\n} from \"@/models\";\nimport { useMainStore } from \"@/stores/mainStore\";\nimport { CLOZE_PLACEHOLDER_REGEX } from \"@/const\";\n\nexport const courseNameUnique = (name: string, course: Course): boolean => {\n\tconst mainStore = useMainStore();\n\treturn mainStore.courses.every(c => c.name !== name || c.id == course.id);\n};\n\nexport const idBasedRulePopulated = (\n\texercises: string[] | undefined,\n\trule: EventTemplateRule,\n) => rule.rule_type !== EventTemplateRuleType.ID_BASED || (exercises?.length ?? 0) > 0;\n\nexport const tagBasedRulePopulated = (\n\tclauses: EventTemplateRuleClause[] | undefined,\n\trule: EventTemplateRule,\n) =>\n\trule.rule_type !== EventTemplateRuleType.TAG_BASED ||\n\t(((clauses?.length ?? 0) > 0 && clauses?.some(c => c.tags.length > 0)) ?? false);\n\nexport const tagBasedRuleSatisfied = (\n\tsatisfying: EventTemplateRuleSatisfying,\n\trule: EventTemplateRule,\n) =>\n\trule.rule_type !== EventTemplateRuleType.TAG_BASED ||\n\t(satisfying?.count ?? 0) >= rule.amount;\n\nexport const ruleTypeSet = (ruleType: EventTemplateRuleType) =>\n\ttypeof ruleType !== \"undefined\" && ruleType !== null;\n\nexport const choicesRequiredIfMultipleChoiceExercise = (\n\tchoices: ExerciseChoice[],\n\texercise: Exercise,\n) => !isMultipleChoiceExercise(exercise) || (choices?.length ?? 0) > 0;\n\nexport const atLeastOneCorrectChoice = (\n\tchoices: ExerciseChoice[],\n\texercise: Exercise,\n) => {\n\tif (\n\t\texercise.exercise_type !== ExerciseType.MULTIPLE_CHOICE_SINGLE_POSSIBLE &&\n\t\texercise.exercise_type !== ExerciseType.MULTIPLE_CHOICE_MULTIPLE_POSSIBLE\n\t) {\n\t\treturn true;\n\t}\n\treturn choices.some(c => (c.correctness ?? 0) > 0);\n};\n\n// checks that, for a cloze exercise, all cloze placeholders in its text\n// correspond to sub-exercises of the exercise\nexport const clozeIdsAreValid = (text: string, exercise: Exercise) =>\n\texercise.exercise_type !== ExerciseType.COMPLETION ||\n\t[...text.matchAll(CLOZE_PLACEHOLDER_REGEX)]\n\t\t.map(\n\t\t\tm => m[1], // capture group match, in this case the id of the cloze sub exercise\n\t\t)\n\t\t.every(id => (exercise.sub_exercises ?? []).some(e => e.id == id));\n","import { helpers, required } from \"@vuelidate/validators\";\nimport {\n\tatLeastOneCorrectChoice,\n\tchoicesRequiredIfMultipleChoiceExercise,\n\tcourseNameUnique,\n\tidBasedRulePopulated,\n\truleTypeSet,\n\ttagBasedRulePopulated,\n\ttagBasedRuleSatisfied,\n\tclozeIdsAreValid,\n} from \"./validators\";\n\nexport const courseValidation = {\n\tname: {\n\t\trequired,\n\t\tunique: courseNameUnique,\n\t\t$autoDirty: true,\n\t},\n};\n\nexport const eventTemplateRuleValidation = {\n\trule_type: {\n\t\truleTypeSet,\n\t},\n\texercises: {\n\t\tidBasedRulePopulated,\n\t},\n\tclauses: {\n\t\ttagBasedRulePopulated,\n\t},\n\tsatisfying: {\n\t\ttagBasedRuleSatisfied,\n\t},\n};\n\nexport const eventTemplateValidation = {\n\trules: {\n\t\t$each: helpers.forEach(eventTemplateRuleValidation),\n\t\t//$autoDirty: true,\n\t\trequired,\n\t},\n};\n\nexport const eventValidation = {\n\tname: {\n\t\trequired,\n\t\t$autoDirty: true,\n\t},\n\tbegin_timestamp: {\n\t\trequired,\n\t\t$autoDirty: true,\n\t},\n\tend_timestamp: {\n\t\trequired,\n\t\t$autoDirty: true,\n\t},\n\ttemplate: {\n\t\t...eventTemplateValidation,\n\t},\n};\n\nexport const exerciseChoiceValidation = {\n\ttext: {\n\t\trequired,\n\t},\n};\n\nexport const baseExerciseValidation = {\n\ttext: {\n\t\trequired,\n\t\tclozeIdsAreValid,\n\t},\n\texercise_type: {\n\t\trequired,\n\t},\n\tchoices: {\n\t\t$each: helpers.forEach(exerciseChoiceValidation),\n\t\tchoicesRequiredIfMultipleChoiceExercise,\n\t\tatLeastOneCorrectChoice,\n\t},\n};\n\nexport const exerciseValidation = {\n\t...baseExerciseValidation,\n\tsub_exercises: {\n\t\t// $each: helpers.forEach(baseExerciseValidation as any),\n\t},\n};\n\nexport const lessonNodeValidation = {\n\ttitle: {\n\t\trequired,\n\t},\n};\n\nexport const topicNodeValidation = {\n\tname: {\n\t\trequired,\n\t},\n};\n\nexport const pollNodeValidation = {\n\ttext: {\n\t\trequired,\n\t},\n\tchoices: {\n\t\trequired,\n\t},\n};\n\nexport const announcementNodeValidation = {\n\tbody: {\n\t\trequired,\n\t},\n};\n","\nimport { defineComponent } from \"@vue/runtime-core\";\nimport { courseIdMixin, coursePrivilegeMixin, loadingMixin } from \"@/mixins\";\nimport EventEditorPreview from \"@/components/teacher/EventEditor/EventEditorPreview.vue\";\nimport { Course, CoursePrivilege, Event, EventType, Exercise } from \"@/models\";\nimport MinimalExercisePreview from \"@/components/teacher/ExerciseEditor/MinimalExercisePreview.vue\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport EventEditorPreviewSkeleton from \"@/components/ui/skeletons/EventEditorPreviewSkeleton.vue\";\nimport MinimalExercisePreviewSkeleton from \"@/components/ui/skeletons/MinimalExercisePreviewSkeleton.vue\";\nimport TextInput from \"@/components/ui/TextInput.vue\";\nimport Toggle from \"@/components/ui/Toggle.vue\";\nimport Card from \"@/components/ui/Card.vue\";\nimport TextEditor from \"@/components/ui/TextEditor.vue\";\n\nimport useVuelidate from \"@vuelidate/core\";\n\nimport { courseValidation } from \"@/validation/models\";\nimport {\n\tdemoTeacherTourSteps,\n\tteacherTourSteps,\n\ttourOptions,\n\tnewMaterialModuleTourSteps,\n} from \"@/const\";\nimport CopyToClipboard from \"@/components/ui/CopyToClipboard.vue\";\nimport { isDemoMode, setErrorNotification } from \"@/utils\";\n\nconst DEMO_COURSE_DASHBOARD_TOUR_KEY = \"course_dashboard_tour_taken\";\nconst NEW_MATERIAL_MODULE_TOUR_KEY = \"new_material_module_tour_taken\";\n\nimport { mapStores } from \"pinia\";\nimport { useMainStore } from \"@/stores/mainStore\";\n\nexport default defineComponent({\n\tname: \"CourseDashboard\",\n\tcomponents: {\n\t\tEventEditorPreview,\n\t\tMinimalExercisePreview,\n\t\tBtn,\n\t\tEventEditorPreviewSkeleton,\n\t\tMinimalExercisePreviewSkeleton,\n\t\tTextInput,\n\t\tToggle,\n\t\tCard,\n\t\tTextEditor,\n\t\tCopyToClipboard,\n\t},\n\tmixins: [courseIdMixin, loadingMixin, coursePrivilegeMixin],\n\tsetup() {\n\t\treturn { v$: useVuelidate() };\n\t},\n\tasync created() {\n\t\tthis.loadingEvents = true;\n\t\tthis.loadingExercises = true;\n\t\ttry {\n\t\t\tawait this.mainStore.getEvents({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\tfilters: { event_type: EventType.EXAM },\n\t\t\t});\n\t\t} catch (e) {\n\t\t\tsetErrorNotification(e);\n\t\t} finally {\n\t\t\tthis.loadingEvents = false;\n\t\t}\n\t\ttry {\n\t\t\tawait this.mainStore.getExercises({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\tfromFirstPage: true,\n\t\t\t\tfilters: null,\n\t\t\t});\n\t\t} catch {\n\t\t\tthis.showExercises = false;\n\t\t} finally {\n\t\t\tthis.loadingExercises = false;\n\t\t}\n\t},\n\tprops: {\n\t\tshowTour: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tmounted() {\n\t\tif (this.showTour) {\n\t\t\tsetTimeout(() => (this.$tours[\"teacherTour\"] as any).start(), 500);\n\t\t}\n\t\tif (isDemoMode() && !(DEMO_COURSE_DASHBOARD_TOUR_KEY in localStorage)) {\n\t\t\tsetTimeout(() => (this.$tours[\"demoTeacherTour\"] as any).start(), 500);\n\t\t\tlocalStorage.setItem(DEMO_COURSE_DASHBOARD_TOUR_KEY, \"true\");\n\t\t}\n\t\tif (!this.showTour && !(NEW_MATERIAL_MODULE_TOUR_KEY in localStorage)) {\n\t\t\tsetTimeout(() => (this.$tours[\"newMaterialModuleTour\"] as any).start(), 500);\n\t\t\tlocalStorage.setItem(NEW_MATERIAL_MODULE_TOUR_KEY, \"true\");\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\teditingName: false,\n\t\t\tdirtyCourseName: \"\",\n\t\t\teditingDescription: false,\n\t\t\tdirtyCourseDescription: \"\",\n\t\t\tCoursePrivilege,\n\t\t\tteacherTourSteps,\n\t\t\tdemoTeacherTourSteps,\n\t\t\tnewMaterialModuleTourSteps,\n\t\t\ttourOptions,\n\t\t\tloadingEvents: false,\n\t\t\tloadingExercises: false,\n\t\t\tshowExercises: true,\n\t\t};\n\t},\n\tvalidations() {\n\t\treturn {\n\t\t\tdirtyCourse: courseValidation,\n\t\t};\n\t},\n\tmethods: {\n\t\teditCourseName() {\n\t\t\tthis.dirtyCourseName = this.currentCourse.name;\n\t\t\tthis.editingName = true;\n\t\t},\n\t\teditCourseDescription() {\n\t\t\tthis.dirtyCourseDescription = this.currentCourse.description ?? \"\";\n\t\t\tthis.editingDescription = true;\n\t\t},\n\t\tasync onDoneEditingName(discard = false) {\n\t\t\tif (!discard) {\n\t\t\t\tawait this.withLocalLoading(async () => {\n\t\t\t\t\tawait this.mainStore.updateCourse({\n\t\t\t\t\t\t...this.currentCourse,\n\t\t\t\t\t\tname: this.dirtyCourseName,\n\t\t\t\t\t});\n\t\t\t\t\tthis.editingName = false;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.editingName = false;\n\t\t\t}\n\t\t},\n\t\tasync onDoneEditingDescription(discard = false) {\n\t\t\tif (!discard) {\n\t\t\t\tawait this.withLocalLoading(async () => {\n\t\t\t\t\tawait this.mainStore.updateCourse({\n\t\t\t\t\t\t...this.currentCourse,\n\t\t\t\t\t\tdescription: this.dirtyCourseDescription,\n\t\t\t\t\t});\n\t\t\t\t\tthis.editingDescription = false;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.editingDescription = false;\n\t\t\t}\n\t\t},\n\t\tasync onChangeCourseVisibility(value: boolean) {\n\t\t\tawait this.withLoading(async () => {\n\t\t\t\tawait this.mainStore.updateCourse({ ...this.currentCourse, hidden: value });\n\t\t\t});\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore),\n\t\trecentExams(): Event[] {\n\t\t\treturn this.mainStore.exams?.slice(0, 3) ?? [];\n\t\t},\n\t\trecentExercises(): Exercise[] {\n\t\t\treturn this.mainStore.exercises?.slice(0, 4) ?? [];\n\t\t},\n\t\tdirtyCourse(): Course {\n\t\t\treturn {\n\t\t\t\t...this.currentCourse,\n\t\t\t\tname: this.dirtyCourseName,\n\t\t\t\tdescription: this.dirtyCourseDescription,\n\t\t\t};\n\t\t},\n\t\tpermalink(): string {\n\t\t\treturn (\n\t\t\t\twindow.location.origin +\n\t\t\t\tthis.$router.resolve({\n\t\t\t\t\tname: \"StudentCourseDashboard\",\n\t\t\t\t\tparams: { courseId: this.courseId },\n\t\t\t\t}).fullPath\n\t\t\t);\n\t\t},\n\t},\n});\n","import { render } from \"./CourseDashboard.vue?vue&type=template&id=1a6978f0&ts=true\"\nimport script from \"./CourseDashboard.vue?vue&type=script&lang=ts\"\nexport * from \"./CourseDashboard.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { vShow as _vShow, createElementVNode as _createElementVNode, withDirectives as _withDirectives, Transition as _Transition, withCtx as _withCtx, createVNode as _createVNode, toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"h-full\" }\nconst _hoisted_2 = { class: \"flex h-full md:space-x-10\" }\nconst _hoisted_3 = { class: \"w-full pb-4\" }\nconst _hoisted_4 = { class: \"mb-8 mt-4\" }\nconst _hoisted_5 = {\n class: \"mb-2\",\n style: {\"line-height\":\"1.2\"}\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BreadCrumbs = _resolveComponent(\"BreadCrumbs\")!\n const _component_StudentScopesBanner = _resolveComponent(\"StudentScopesBanner\")!\n const _component_router_view = _resolveComponent(\"router-view\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_Transition, { name: \"fade\" }, {\n default: _withCtx(() => [\n _withDirectives(_createElementVNode(\"div\", {\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.showMobileSidebar = false)),\n class: \"fixed z-50 w-full h-full opacity-50 bg-dark\"\n }, null, 512), [\n [_vShow, _ctx.showMobileSidebar]\n ])\n ]),\n _: 1\n }),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"section\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"h2\", _hoisted_5, _toDisplayString(_ctx.routeTitle), 1),\n _createVNode(_component_BreadCrumbs, { route: _ctx.$route }, null, 8, [\"route\"])\n ]),\n (!_ctx.metaStore.user.is_teacher)\n ? (_openBlock(), _createBlock(_component_StudentScopesBanner, { key: 0 }))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_router_view)\n ])\n ])\n ]))\n}","\nconst SIDEBAR_WIDTH_EXPANDED = \"270px\";\nimport { logOut } from \"@/utils\";\n\nimport { SidebarOption, studentDashboardSidebarOptions } from \"@/navigation/sidebar\";\nimport { defineComponent } from \"@vue/runtime-core\";\nimport BreadCrumbs from \"@/components/ui/BreadCrumbs.vue\";\nimport {\n\tROUTE_TITLE_COURSE_NAME_TOKEN,\n\tROUTE_TITLE_EVENT_NAME_TOKEN,\n} from \"@/navigation/const\";\nimport {\n\tcourseIdMixin,\n\tcoursePrivilegeMixin,\n\teventIdMixin,\n\tadComponentMixin,\n} from \"@/mixins\";\nimport { mapStores } from \"pinia\";\nimport { useMainStore } from \"@/stores/mainStore\";\nimport { useMetaStore } from \"@/stores/metaStore\";\nimport StudentScopesBanner from \"../../../integrations/classroom/components/StudentScopesBanner.vue\";\nexport default defineComponent({\n\tname: \"Main\",\n\tprops: {},\n\tmixins: [courseIdMixin, eventIdMixin, coursePrivilegeMixin, adComponentMixin],\n\twatch: {\n\t\t$route() {\n\t\t\tthis.showMobileSidebar = false;\n\t\t},\n\t\tshowMobileSidebar(newVal) {\n\t\t\tif (newVal) {\n\t\t\t\tdocument.body.classList.add(\"overflow-y-hidden\");\n\t\t\t} else {\n\t\t\t\tdocument.body.classList.remove(\"overflow-y-hidden\");\n\t\t\t}\n\t\t},\n\t},\n\tasync created() {\n\t\tawait this.mainStore.getCourseGamificationContext({ courseId: this.courseId });\n\t\tif (this.mainStore.gamificationContext) {\n\t\t\tawait this.mainStore.getGamificationContextGoals({\n\t\t\t\tcontextId: this.mainStore.gamificationContext.id,\n\t\t\t});\n\t\t}\n\t},\n\tmethods: {\n\t\tlogOut,\n\t\tisRouteActive(option: SidebarOption) {\n\t\t\treturn (\n\t\t\t\toption.routeName === this.$route.name ||\n\t\t\t\toption.children?.includes(this.$route.name as string)\n\t\t\t);\n\t\t},\n\t\treplaceTitleTokens(str: string) {\n\t\t\treturn str\n\t\t\t\t?.replace(ROUTE_TITLE_COURSE_NAME_TOKEN, this.currentCourse.name)\n\t\t\t\t?.replace(ROUTE_TITLE_EVENT_NAME_TOKEN, this.currentEvent);\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tsidebarWidth: SIDEBAR_WIDTH_EXPANDED,\n\t\t\tshowMobileSidebar: false,\n\t\t\tshowGamificationPanel: false,\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore, useMetaStore),\n\t\trouteTitle(): string {\n\t\t\treturn this.replaceTitleTokens(this.$route.meta.routeTitle as string);\n\t\t},\n\t\tinternalSidebarOptions() {\n\t\t\treturn [\n\t\t\t\t...studentDashboardSidebarOptions.filter(\n\t\t\t\t\tr => r.routeName !== \"StudentCourseList\",\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\t...studentDashboardSidebarOptions.filter(\n\t\t\t\t\t\tr => r.routeName === \"StudentCourseList\",\n\t\t\t\t\t)[0],\n\t\t\t\t\t// override path for course list for teachers so it goes to /teacher/courses\n\t\t\t\t\t// instead of /student/courses\n\t\t\t\t\t...(this.metaStore.user.is_teacher ? { routeName: \"TeacherCourseList\" } : {}),\n\t\t\t\t},\n\t\t\t];\n\t\t},\n\t},\n\tcomponents: {\n\t\tBreadCrumbs,\n\n\t\tStudentScopesBanner,\n\t},\n});\n","import { render } from \"./Main.vue?vue&type=template&id=11dd1e50&ts=true\"\nimport script from \"./Main.vue?vue&type=script&lang=ts\"\nexport * from \"./Main.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString } from \"vue\"\n\nconst _hoisted_1 = { class: \"mb-4\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"mb-8\"\n}\nconst _hoisted_3 = {\n key: 0,\n class: \"grid gap-4 xl:gap-8 md:grid-cols-2 lg:grid-cols-3\"\n}\nconst _hoisted_4 = {\n key: 1,\n class: \"grid grid-cols-1 gap-4 xl:gap-8 lg:grid-cols-3\"\n}\nconst _hoisted_5 = {\n key: 1,\n class: \"flex h-screen -mt-40\"\n}\nconst _hoisted_6 = { class: \"mx-auto my-auto flex flex-col\" }\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"p\", {\n style: {\"font-size\":\"10rem\"},\n class: \"material-icons-outlined opacity-10 mx-auto\"\n}, \" assignment \", -1)\nconst _hoisted_8 = { class: \"opacity-40 text-center\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_EventParticipationPreview = _resolveComponent(\"EventParticipationPreview\")!\n const _component_SkeletonCard = _resolveComponent(\"SkeletonCard\")!\n const _component_Spinner = _resolveComponent(\"Spinner\")!\n const _component_VueEternalLoading = _resolveComponent(\"VueEternalLoading\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_ctx.firstLoading || _ctx.mainStore.examParticipations.length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n (!_ctx.firstLoading)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.mainStore.examParticipations, (participation) => {\n return (_openBlock(), _createBlock(_component_EventParticipationPreview, {\n key: 'exam-participation-' + participation.id,\n participation: participation\n }, null, 8, [\"participation\"]))\n }), 128))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createVNode(_component_SkeletonCard, { class: \"h-44\" }),\n _createVNode(_component_SkeletonCard, { class: \"h-44\" }),\n _createVNode(_component_SkeletonCard, { class: \"h-44\" })\n ])),\n (!_ctx.firstLoading)\n ? (_openBlock(), _createBlock(_component_VueEternalLoading, {\n key: 2,\n load: _ctx.onLoadMore,\n class: \"mt-8\",\n \"is-initial\": _ctx.isInitialInfiniteLoad,\n \"onUpdate:is-initial\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.isInitialInfiniteLoad) = $event))\n }, {\n loading: _withCtx(() => [\n _createVNode(_component_Spinner)\n ]),\n \"no-more\": _withCtx(() => [\n _createTextVNode(\"   \")\n ]),\n _: 1\n }, 8, [\"load\", \"is-initial\"]))\n : _createCommentVNode(\"\", true)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createElementVNode(\"div\", _hoisted_6, [\n _hoisted_7,\n _createElementVNode(\"h2\", _hoisted_8, _toDisplayString(_ctx.$t(\"student_course_dashboard.no_exams\")), 1)\n ])\n ]))\n ]))\n}","import { toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createBlock as _createBlock, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"text-center\"\n}\nconst _hoisted_2 = { class: \"flex mx-auto font-medium text-muted\" }\nconst _hoisted_3 = { class: \"mx-auto space-x-1\" }\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"hidden inline-icon material-icons-outlined light-icon\" }, \" event \", -1)\nconst _hoisted_5 = {\n key: 0,\n class: \"hidden chip mx-auto chip-primary mb-0 pt-0.5\"\n}\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined text-base mr-1 mt-1.25px\" }, \" update \", -1)\nconst _hoisted_7 = { class: \"flex flex-col h-full\" }\nconst _hoisted_8 = {\n key: 0,\n class: \"\"\n}\nconst _hoisted_9 = {\n key: 1,\n class: \"h-0 -mx-4 border-b md:-mx-5\"\n}\nconst _hoisted_10 = { class: \"flex items-center mt-auto -mb-1 bg-black bg-opacity-0\" }\nconst _hoisted_11 = {\n key: 0,\n class: \"\"\n}\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mr-2 text-lg material-icons-outlined\" }, \" update \", -1)\nconst _hoisted_13 = {\n key: 1,\n class: \"flex -mt-0.5\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Timestamp = _resolveComponent(\"Timestamp\")!\n const _component_ParticipationThumbnail = _resolveComponent(\"ParticipationThumbnail\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", null, [\n _createVNode(_component_Card, {\n class: _normalizeClass({\n\t\t\t\t'md:h-23rem h-64': _ctx.showThumbnail,\n\t\t\t\t'h-44': !_ctx.showThumbnail,\n\t\t\t})\n }, {\n header: _withCtx(() => [\n (_ctx.participation.event.name.length > 0)\n ? (_openBlock(), _createElementBlock(\"h4\", _hoisted_1, _toDisplayString(_ctx.participation.event.name), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"p\", _hoisted_3, [\n _hoisted_4,\n _createVNode(_component_Timestamp, {\n value: _ctx.participation.begin_timestamp,\n \"date-only\": true\n }, null, 8, [\"value\"])\n ]),\n (_ctx.isParticipable)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _hoisted_6,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t(\"student_course_dashboard.pending\")), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n body: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_7, [\n (_ctx.showThumbnail)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _createVNode(_component_ParticipationThumbnail, { participation: _ctx.participation }, null, 8, [\"participation\"])\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.showThumbnail)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_10, [\n (_ctx.isParticipable)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [\n _createVNode(_component_router_link, {\n class: \"order-12 md:mt-6 xl:mt-0 xl:order-1\",\n to: {\n\t\t\t\t\t\t\t\t\tname: _ctx.showThumbnail\n\t\t\t\t\t\t\t\t\t\t? 'PracticeParticipationPage'\n\t\t\t\t\t\t\t\t\t\t: 'ExamParticipationPage',\n\t\t\t\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\t\t\t\texamId: _ctx.participation.event.id,\n\t\t\t\t\t\t\t\t\t\tcourseId: _ctx.courseId,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Btn, {\n variant: 'primary',\n outline: false,\n size: 'sm'\n }, {\n default: _withCtx(() => [\n _hoisted_12,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t(\"student_course_dashboard.resume\")), 1)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"to\"])\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [\n (_ctx.participation.assessment_available)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 0,\n to: {\n\t\t\t\t\t\t\t\t\tname: _ctx.showThumbnail ? 'PracticeSummaryPage' : 'AssessmentReviewPage',\n\t\t\t\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\t\t\t\tparticipationId: _ctx.participation.id,\n\t\t\t\t\t\t\t\t\t\texamId: _ctx.participation.event.id,\n\t\t\t\t\t\t\t\t\t\tcourseId: _ctx.courseId,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Btn, {\n size: 'sm',\n variant: 'primary-borderless'\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.showThumbnail\n\t\t\t\t\t\t\t\t\t\t\t? _ctx.$t(\"student_course_dashboard.practice_summary\")\n\t\t\t\t\t\t\t\t\t\t\t: _ctx.$t(\"student_course_dashboard.view_assessment\")), 1)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"to\"]))\n : _createCommentVNode(\"\", true),\n (!_ctx.showThumbnail)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 1,\n to: {\n\t\t\t\t\t\t\t\t\tname: 'SubmissionReviewPage',\n\t\t\t\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\t\t\t\tparticipationId: _ctx.participation.id,\n\t\t\t\t\t\t\t\t\t\texamId: _ctx.participation.event.id,\n\t\t\t\t\t\t\t\t\t\tcourseId: _ctx.courseId,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Btn, {\n size: 'sm',\n variant: 'primary-borderless'\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"student_course_dashboard.review_submission\")), 1)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"to\"]))\n : _createCommentVNode(\"\", true)\n ])),\n (_ctx.showThumbnail)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 2,\n tooltip: \n\t\t\t\t\t\t\t\t_ctx.participation.bookmarked\n\t\t\t\t\t\t\t\t\t? _ctx.$t('student_course_dashboard.remove_bookmark')\n\t\t\t\t\t\t\t\t\t: _ctx.$t('student_course_dashboard.add_bookmark')\n\t\t\t\t\t\t\t,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('bookmark'))),\n loading: _ctx.loading,\n variant: 'icon',\n outline: true,\n class: \"my-0 ml-auto\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n class: _normalizeClass([\"material-icons\", { 'text-primary': _ctx.participation.bookmarked }])\n }, _toDisplayString(_ctx.participation.bookmarked ? \"bookmark\" : \"bookmark_outline\"), 3)\n ]),\n _: 1\n }, 8, [\"tooltip\", \"loading\"]))\n : _createCommentVNode(\"\", true)\n ])\n ])\n ]),\n _: 1\n }, 8, [\"class\"])\n ]))\n}","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"overflow-hidden pointer-events-none select-none\" }\nconst _hoisted_2 = {\n style: {\"filter\":\"blur(0px)\"},\n class: \"relative w-full overflow-hidden h-8.5rem md:h-15rem\"\n}\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"div\", {\n class: \"absolute top-0 bottom-0 w-full bg-transparent\",\n style: {\"height\":\"100%\",\"z-index\":\"999999\"}\n}, null, -1)\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"h5\", { class: \"mb-0\" }, \"Esercizio 1\", -1)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"h5\", { class: \"mb-0\" }, \"Esercizio 2\", -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"h5\", { class: \"mb-0\" }, \"Esercizio 3\", -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_AbstractEventParticipationSlot = _resolveComponent(\"AbstractEventParticipationSlot\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n (_ctx.participation.slots[0])\n ? (_openBlock(), _createBlock(_component_AbstractEventParticipationSlot, {\n key: 0,\n \"model-value\": _ctx.participation.slots[0],\n \"allow-edit-submission\": true,\n class: \"thumbnail-slot -z-1\"\n }, {\n default: _withCtx(() => [\n _hoisted_4\n ]),\n _: 1\n }, 8, [\"model-value\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.participation.slots[1])\n ? (_openBlock(), _createBlock(_component_AbstractEventParticipationSlot, {\n key: 1,\n \"model-value\": _ctx.participation.slots[1],\n \"allow-edit-submission\": true,\n class: \"my-3 thumbnail-slot\"\n }, {\n default: _withCtx(() => [\n _hoisted_5\n ]),\n _: 1\n }, 8, [\"model-value\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.participation.slots[2])\n ? (_openBlock(), _createBlock(_component_AbstractEventParticipationSlot, {\n key: 2,\n \"model-value\": _ctx.participation.slots[2],\n \"allow-edit-submission\": true,\n class: \"thumbnail-slot\"\n }, {\n default: _withCtx(() => [\n _hoisted_6\n ]),\n _: 1\n }, 8, [\"model-value\"]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}","\nimport { EventParticipation } from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport AbstractEventParticipationSlot from \"../shared/AbstractEventParticipationSlot.vue\";\nexport default defineComponent({\n\tname: \"ParticipationThumbnail\",\n\tprops: {\n\t\tparticipation: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tmethods: {},\n\tcomputed: {},\n\tcomponents: { AbstractEventParticipationSlot },\n});\n","import { render } from \"./ParticipationThumbnail.vue?vue&type=template&id=5cbd2861&ts=true\"\nimport script from \"./ParticipationThumbnail.vue?vue&type=script&lang=ts\"\nexport * from \"./ParticipationThumbnail.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport {\n\tEventParticipation,\n\tEventParticipationState,\n\tEventState,\n\tEventType,\n} from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport Card from \"../ui/Card.vue\";\nimport Timestamp from \"../ui/Timestamp.vue\";\nimport Btn from \"../ui/Btn.vue\";\nimport { courseIdMixin } from \"@/mixins\";\nimport ParticipationThumbnail from \"./ParticipationThumbnail.vue\";\n\nexport default defineComponent({\n\tname: \"EventParticipationPreview\",\n\tprops: {\n\t\tparticipation: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tmixins: [courseIdMixin],\n\tdata() {\n\t\treturn {\n\t\t\tEventType,\n\t\t};\n\t},\n\tcomputed: {\n\t\tisParticipable(): boolean {\n\t\t\treturn (\n\t\t\t\tthis.participation.event.state === EventState.OPEN &&\n\t\t\t\tthis.participation.state === EventParticipationState.IN_PROGRESS\n\t\t\t);\n\t\t},\n\t\tshowThumbnail(): boolean {\n\t\t\treturn this.participation.event.event_type === EventType.SELF_SERVICE_PRACTICE;\n\t\t},\n\t},\n\tcomponents: {\n\t\tCard,\n\t\tTimestamp,\n\t\tBtn,\n\t\tParticipationThumbnail,\n\t},\n});\n","import { render } from \"./EventParticipationPreview.vue?vue&type=template&id=6453eb4b&ts=true\"\nimport script from \"./EventParticipationPreview.vue?vue&type=script&lang=ts\"\nexport * from \"./EventParticipationPreview.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"w-11/12 h-4 bg-gray-200 rounded\"\n}\nconst _hoisted_2 = {\n key: 0,\n class: \"w-11/12 h-4 bg-gray-200 rounded\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createBlock(_component_Card, {\n hoverable: false,\n borderLess: _ctx.borderLess,\n class: _normalizeClass([_ctx.full ? 'h-96' : ''])\n }, {\n header: _withCtx(() => [\n _createElementVNode(\"div\", {\n class: _normalizeClass([[_ctx.short ? 'h-3' : 'h-4'], \"bg-gray-200 rounded animate-pulse\"])\n }, null, 2)\n ]),\n body: _withCtx(() => [\n _createElementVNode(\"div\", {\n class: _normalizeClass({ 'pb-8': !_ctx.short })\n }, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([[_ctx.short ? 'h-3' : 'h-4'], \"w-11/12 mb-2 bg-gray-200 rounded animate-pulse\"])\n }, null, 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([[_ctx.short ? 'h-3 space-y-2' : 'h-4 space-y-3'], \"animate-pulse\"])\n }, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"grid grid-cols-3\", [_ctx.short ? 'gap-2' : 'gap-4']])\n }, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([[_ctx.short ? 'h-3' : 'h-4'], \"col-span-2 bg-gray-200 rounded\"])\n }, null, 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([[_ctx.short ? 'h-3' : 'h-4'], \"col-span-1 bg-gray-200 rounded\"])\n }, null, 2)\n ], 2),\n (!_ctx.short)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1))\n : _createCommentVNode(\"\", true)\n ], 2)\n ], 2),\n (_ctx.full)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: _normalizeClass([\"mt-12\", { 'pb-8': !_ctx.short }])\n }, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([[_ctx.short ? 'h-3' : 'h-4'], \"w-11/12 mb-2 bg-gray-200 rounded animate-pulse\"])\n }, null, 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([[_ctx.short ? 'h-3 space-y-2' : 'h-4 space-y-3'], \"animate-pulse\"])\n }, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"grid grid-cols-3\", [_ctx.short ? 'gap-2' : 'gap-4']])\n }, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([[_ctx.short ? 'h-3' : 'h-4'], \"col-span-2 bg-gray-200 rounded\"])\n }, null, 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([[_ctx.short ? 'h-3' : 'h-4'], \"col-span-1 bg-gray-200 rounded\"])\n }, null, 2)\n ], 2),\n (!_ctx.short)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2))\n : _createCommentVNode(\"\", true)\n ], 2)\n ], 2))\n : _createCommentVNode(\"\", true),\n (_ctx.full)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: _normalizeClass([[_ctx.short ? 'h-3' : 'h-4'], \"col-span-2 mt-12 bg-gray-200 rounded\"])\n }, null, 2))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }, 8, [\"borderLess\", \"class\"]))\n}","\nimport { defineComponent } from \"@vue/runtime-core\";\nimport Card from \"./Card.vue\";\nexport default defineComponent({\n\tname: \"SkeletonCard\",\n\tcomponents: {\n\t\tCard,\n\t},\n\tprops: {\n\t\tshort: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tborderLess: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tfull: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n});\n","import { render } from \"./SkeletonCard.vue?vue&type=template&id=01a08ea2&ts=true\"\nimport script from \"./SkeletonCard.vue?vue&type=script&lang=ts\"\nexport * from \"./SkeletonCard.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { courseIdMixin, loadingMixin } from \"@/mixins\";\nimport { defineComponent } from \"@vue/runtime-core\";\n\nimport EventParticipationPreview from \"@/components/student/EventParticipationPreview.vue\";\nimport SkeletonCard from \"@/components/ui/SkeletonCard.vue\";\nimport { EventType } from \"@/models\";\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport { LoadAction } from \"@ts-pro/vue-eternal-loading\";\nimport VueEternalLoading from \"@ts-pro/vue-eternal-loading/src/components/VueEternalLoading/VueEternalLoading.vue\";\nimport { EventParticipationSearchFilter } from \"@/api\";\nimport Spinner from \"@/components/ui/Spinner.vue\";\nimport { mapStores } from \"pinia\";\nimport { useMainStore } from \"@/stores/mainStore\";\n\nexport default defineComponent({\n\tcomponents: {\n\t\tEventParticipationPreview,\n\t\tSkeletonCard,\n\t\tVueEternalLoading,\n\t\tSpinner,\n\t},\n\tname: \"ExamList\",\n\tmixins: [courseIdMixin, loadingMixin],\n\tasync created() {\n\t\tawait this.withFirstLoading(async () => {\n\t\t\tawait this.mainStore.getTags({\n\t\t\t\t// TODO is this necessary?\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\tincludeExerciseCount: true,\n\t\t\t});\n\t\t\t//await this.mainStore.getCourse({ courseId: this.courseId });\n\t\t\tawait this.mainStore.getCourseEventParticipations({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\tfromFirstPage: true,\n\t\t\t\tfilter: { event_type: EventType.EXAM } as EventParticipationSearchFilter,\n\t\t\t});\n\t\t});\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tisInitialInfiniteLoad: false,\n\t\t};\n\t},\n\tmethods: {\n\t\tasync onLoadMore({ loaded, noMore, error }: LoadAction) {\n\t\t\ttry {\n\t\t\t\tconst moreResults = await this.mainStore.getCourseEventParticipations({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\tfromFirstPage: false,\n\t\t\t\t\tfilter: { event_type: EventType.EXAM } as EventParticipationSearchFilter,\n\t\t\t\t});\n\t\t\t\tif (!moreResults) {\n\t\t\t\t\tnoMore();\n\t\t\t\t} else {\n\t\t\t\t\tloaded();\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\terror();\n\t\t\t}\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore),\n\t},\n});\n","import { render } from \"./ExamsList.vue?vue&type=template&id=fd6ebc3c&ts=true\"\nimport script from \"./ExamsList.vue?vue&type=script&lang=ts\"\nexport * from \"./ExamsList.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString } from \"vue\"\n\nconst _hoisted_1 = { class: \"mb-4\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"mb-8\"\n}\nconst _hoisted_3 = {\n key: 0,\n class: \"grid gap-4 xl:gap-8 md:grid-cols-2 lg:grid-cols-3\"\n}\nconst _hoisted_4 = {\n key: 1,\n class: \"grid grid-cols-1 gap-4 xl:gap-8 lg:grid-cols-3\"\n}\nconst _hoisted_5 = {\n key: 1,\n class: \"flex h-screen -mt-40\"\n}\nconst _hoisted_6 = { class: \"mx-auto my-auto flex flex-col\" }\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"p\", {\n style: {\"font-size\":\"10rem\"},\n class: \"material-icons-outlined opacity-10 mx-auto\"\n}, \" assignment \", -1)\nconst _hoisted_8 = { class: \"opacity-40 text-center\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ExamCard = _resolveComponent(\"ExamCard\")!\n const _component_SkeletonCard = _resolveComponent(\"SkeletonCard\")!\n const _component_Spinner = _resolveComponent(\"Spinner\")!\n const _component_VueEternalLoading = _resolveComponent(\"VueEternalLoading\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_ctx.firstLoading || _ctx.mainStore.exams.length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n (!_ctx.firstLoading)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.mainStore.exams, (exam) => {\n return (_openBlock(), _createBlock(_component_ExamCard, {\n key: 'exam-' + exam.id,\n event: exam\n }, null, 8, [\"event\"]))\n }), 128))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createVNode(_component_SkeletonCard, { class: \"h-44\" }),\n _createVNode(_component_SkeletonCard, { class: \"h-44\" }),\n _createVNode(_component_SkeletonCard, { class: \"h-44\" })\n ])),\n (false && !_ctx.firstLoading)\n ? (_openBlock(), _createBlock(_component_VueEternalLoading, {\n key: 2,\n load: _ctx.onLoadMore,\n class: \"mt-8\",\n \"is-initial\": _ctx.isInitialInfiniteLoad,\n \"onUpdate:is-initial\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.isInitialInfiniteLoad) = $event))\n }, {\n loading: _withCtx(() => [\n _createVNode(_component_Spinner)\n ]),\n \"no-more\": _withCtx(() => [\n _createTextVNode(\"   \")\n ]),\n _: 1\n }, 8, [\"load\", \"is-initial\"]))\n : _createCommentVNode(\"\", true)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createElementVNode(\"div\", _hoisted_6, [\n _hoisted_7,\n _createElementVNode(\"h2\", _hoisted_8, _toDisplayString(_ctx.$t(\"student_course_dashboard.no_public_exams\")), 1)\n ])\n ]))\n ]))\n}","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx } from \"vue\"\n\nconst _hoisted_1 = { style: {\"line-height\":\"1.2\"} }\nconst _hoisted_2 = { class: \"flex flex-col h-full\" }\nconst _hoisted_3 = [\"innerHTML\"]\nconst _hoisted_4 = { class: \"flex place-content-between my-4\" }\nconst _hoisted_5 = {\n key: 0,\n class: \"flex items-center space-x-2\"\n}\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined opacity-70\" }, \"timer \", -1)\nconst _hoisted_7 = { key: 0 }\nconst _hoisted_8 = { key: 1 }\nconst _hoisted_9 = {\n key: 0,\n class: \"\"\n}\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"h-0 -mx-4 mb-3 border-b md:-mx-5\" }, null, -1)\nconst _hoisted_11 = { class: \"flex place-content-between items-center mt-auto -mb-1 bg-black bg-opacity-0\" }\nconst _hoisted_12 = {\n key: 0,\n class: \"\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Tag = _resolveComponent(\"Tag\")!\n const _component_ParticipationThumbnail = _resolveComponent(\"ParticipationThumbnail\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_CopyToClipboard = _resolveComponent(\"CopyToClipboard\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", null, [\n _createVNode(_component_Card, { class: \"md:h-23rem h-64\" }, {\n header: _withCtx(() => [\n _createElementVNode(\"h3\", _hoisted_1, _toDisplayString(_ctx.event.name), 1)\n ]),\n body: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", {\n class: \"flex-grow\",\n innerHTML: _ctx.event.instructions\n }, null, 8, _hoisted_3),\n _createElementVNode(\"div\", _hoisted_4, [\n (_ctx.event.time_limit_rule === _ctx.EventTimeLimitRule.TIME_LIMIT)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _hoisted_6,\n _createElementVNode(\"p\", null, [\n (_ctx.event.time_limit_seconds >= 3600)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_7, _toDisplayString(_ctx.formattedTime.hours) + \": \", 1))\n : _createCommentVNode(\"\", true),\n _createTextVNode(\" \" + _toDisplayString(_ctx.formattedTime.minutes) + \":\" + _toDisplayString(_ctx.formattedTime.seconds), 1)\n ])\n ]))\n : _createCommentVNode(\"\", true),\n false\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _createVNode(_component_Tag, { tag: { name: 'Entry Level' } })\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n false\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [\n _createVNode(_component_ParticipationThumbnail, { participation: null })\n ]))\n : _createCommentVNode(\"\", true),\n _hoisted_10,\n _createElementVNode(\"div\", _hoisted_11, [\n (_ctx.isParticipable)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_12, [\n _createVNode(_component_router_link, {\n class: \"order-12 md:mt-6 xl:mt-0 xl:order-1\",\n to: {\n\t\t\t\t\t\t\t\t\tname: 'ExamParticipationPage',\n\t\t\t\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\t\t\t\texamId: _ctx.event.id,\n\t\t\t\t\t\t\t\t\t\tcourseId: _ctx.courseId,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Btn, {\n variant: 'primary',\n outline: false,\n size: 'sm'\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"student_course_dashboard.begin_exam\")), 1)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"to\"])\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_CopyToClipboard, {\n \"icon-only\": true,\n tooltip: _ctx.$t('exercise_solution.share'),\n value: _ctx.permalink\n }, null, 8, [\"tooltip\", \"value\"])\n ])\n ])\n ]),\n _: 1\n })\n ]))\n}","\nimport { Event, EventState, EventTimeLimitRule, EventType } from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport Card from \"../ui/Card.vue\";\nimport Btn from \"../ui/Btn.vue\";\nimport { courseIdMixin } from \"@/mixins\";\nimport ParticipationThumbnail from \"./ParticipationThumbnail.vue\";\nimport CopyToClipboard from \"../ui/CopyToClipboard.vue\";\nimport { getExamPermalink } from \"../../utils\";\nimport Tag from \"../ui/Tag.vue\";\n\nexport default defineComponent({\n\tname: \"EventParticipationPreview\",\n\tprops: {\n\t\tevent: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tmixins: [courseIdMixin],\n\tdata() {\n\t\treturn {\n\t\t\tEventType,\n\t\t\tEventTimeLimitRule,\n\t\t};\n\t},\n\tcomputed: {\n\t\tisParticipable(): boolean {\n\t\t\treturn this.event.state === EventState.OPEN;\n\t\t},\n\t\tshowThumbnail(): boolean {\n\t\t\treturn false; //this.participation.event.event_type === EventType.SELF_SERVICE_PRACTICE;\n\t\t},\n\t\t// TODO make this a utility to avoid duplication with Countdown.vue\n\t\tformattedTime(): {\n\t\t\thours: string;\n\t\t\tminutes: string;\n\t\t\tseconds: string;\n\t\t} {\n\t\t\tconst hours = Math.floor((this.event.time_limit_seconds ?? 0) / 3600);\n\t\t\tconst minutes = Math.floor(\n\t\t\t\t((this.event.time_limit_seconds ?? 0) - hours * 3600) / 60,\n\t\t\t);\n\t\t\tconst seconds = (this.event.time_limit_seconds ?? 0) - minutes * 60 - hours * 3600;\n\n\t\t\treturn {\n\t\t\t\thours: String(hours).padStart(2, \"0\"),\n\t\t\t\tminutes: String(minutes).padStart(2, \"0\"),\n\t\t\t\tseconds: String(seconds).padStart(2, \"0\"),\n\t\t\t};\n\t\t},\n\t\tpermalink(): string {\n\t\t\treturn getExamPermalink(this.event);\n\t\t},\n\t},\n\tcomponents: {\n\t\tCard,\n\t\tBtn,\n\t\tParticipationThumbnail,\n\t\tCopyToClipboard,\n\t\tTag,\n\t},\n});\n","import { render } from \"./ExamCard.vue?vue&type=template&id=2cfd9208&ts=true\"\nimport script from \"./ExamCard.vue?vue&type=script&lang=ts\"\nexport * from \"./ExamCard.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { courseIdMixin, loadingMixin } from \"@/mixins\";\nimport { defineComponent } from \"@vue/runtime-core\";\n\nimport SkeletonCard from \"@/components/ui/SkeletonCard.vue\";\nimport { EventType } from \"@/models\";\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport { LoadAction } from \"@ts-pro/vue-eternal-loading\";\nimport VueEternalLoading from \"@ts-pro/vue-eternal-loading/src/components/VueEternalLoading/VueEternalLoading.vue\";\nimport { EventSearchFilter } from \"@/api\";\nimport Spinner from \"@/components/ui/Spinner.vue\";\nimport { mapStores } from \"pinia\";\nimport { useMainStore } from \"@/stores/mainStore\";\nimport ExamCard from \"../../../components/student/ExamCard.vue\";\n\nexport default defineComponent({\n\tcomponents: {\n\t\tSkeletonCard,\n\t\tVueEternalLoading,\n\t\tSpinner,\n\t\tExamCard,\n\t},\n\tname: \"PublicExamsList\",\n\tmixins: [courseIdMixin, loadingMixin],\n\tasync created() {\n\t\tawait this.withFirstLoading(\n\t\t\tasync () =>\n\t\t\t\tawait this.mainStore.getEvents({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\tfilters: {\n\t\t\t\t\t\tevent_type: EventType.EXAM,\n\t\t\t\t\t} as EventSearchFilter,\n\t\t\t\t}),\n\t\t);\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tisInitialInfiniteLoad: false,\n\t\t};\n\t},\n\tmethods: {\n\t\tasync onLoadMore({ loaded, noMore, error }: LoadAction) {\n\t\t\ttry {\n\t\t\t\t// TODO get more exams\n\t\t\t\t// const moreResults = await this.mainStore.getCourseEventParticipations({\n\t\t\t\t// \tcourseId: this.courseId,\n\t\t\t\t// \tfromFirstPage: false,\n\t\t\t\t// \tfilter: { event_type: EventType.EXAM } as EventParticipationSearchFilter,\n\t\t\t\t// });\n\t\t\t\t// if (!moreResults) {\n\t\t\t\t// \tnoMore();\n\t\t\t\t// } else {\n\t\t\t\t// \tloaded();\n\t\t\t\t// }\n\t\t\t} catch {\n\t\t\t\terror();\n\t\t\t}\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore),\n\t},\n});\n","import { render } from \"./PublicExamsList.vue?vue&type=template&id=8b97e64a&ts=true\"\nimport script from \"./PublicExamsList.vue?vue&type=script&lang=ts\"\nexport * from \"./PublicExamsList.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, toDisplayString as _toDisplayString, vShow as _vShow, withDirectives as _withDirectives, resolveDirective as _resolveDirective, openBlock as _openBlock, createBlock as _createBlock, renderList as _renderList, Fragment as _Fragment, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"mb-4\" }\nconst _hoisted_2 = { class: \"w-full\" }\nconst _hoisted_3 = { class: \"flex items-center -mt-12\" }\nconst _hoisted_4 = { class: \"relative w-full bg-light py-2 mb-6 mt-4 px-2\" }\nconst _hoisted_5 = { class: \"select-none uppercase text-muted text-xs mt-2 mr-2 absolute top-0 right-0\" }\nconst _hoisted_6 = [\"innerHTML\"]\nconst _hoisted_7 = [\"innerHTML\"]\nconst _hoisted_8 = {\n key: 0,\n class: \"grid grid-cols-1 gap-4 xl:gap-8 md:grid-cols-2 lg:grid-cols-4 2xl:grid-cols-5\"\n}\nconst _hoisted_9 = { class: \"absolute w-full transform -translate-x-1/2 left-1/2\" }\nconst _hoisted_10 = { class: \"text-center opacity-70\" }\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"flex flex-col h-full\" }, [\n /*#__PURE__*/_createElementVNode(\"h1\", { class: \"mx-auto my-auto text-7xl opacity-70 material-icons-outlined\" }, \" add \")\n], -1)\nconst _hoisted_12 = {\n key: 1,\n class: \"mt-4 w-full grid grid-cols-1 gap-4 xl:gap-8 md:grid-cols-2 lg:grid-cols-4 2xl:grid-cols-5\"\n}\nconst _hoisted_13 = { class: \"mb-4 text-muted\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_Card = _resolveComponent(\"Card\")!\n const _component_EventParticipationPreview = _resolveComponent(\"EventParticipationPreview\")!\n const _component_SkeletonCard = _resolveComponent(\"SkeletonCard\")!\n const _component_Spinner = _resolveComponent(\"Spinner\")!\n const _component_VueEternalLoading = _resolveComponent(\"VueEternalLoading\")!\n const _component_PracticeTemplateEditorNew = _resolveComponent(\"PracticeTemplateEditorNew\")!\n const _component_Dialog = _resolveComponent(\"Dialog\")!\n const _component_v_tour = _resolveComponent(\"v-tour\")!\n const _directive_wave = _resolveDirective(\"wave\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_Btn, {\n class: _normalizeClass([{\n\t\t\t\t\t\t'opacity-0': _ctx.firstLoading || _ctx.mainStore.practiceParticipations.length <= 3,\n\t\t\t\t\t}, \"ml-auto\"]),\n variant: 'icon',\n outline: true,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.showBookmarkedOnly = !_ctx.showBookmarkedOnly)),\n tooltip: \n\t\t\t\t\t\t_ctx.showBookmarkedOnly\n\t\t\t\t\t\t\t? _ctx.$t('student_course_dashboard.show_all_practices')\n\t\t\t\t\t\t\t: _ctx.$t('student_course_dashboard.show_bookmarked')\n\t\t\t\t\t\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n class: _normalizeClass([_ctx.showBookmarkedOnly ? 'material-icons' : 'material-icons-outlined'])\n }, \"bookmarks\", 2)\n ]),\n _: 1\n }, 8, [\"class\", \"tooltip\"])\n ]),\n _withDirectives(_createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"p\", _hoisted_5, _toDisplayString(_ctx.$t(\"misc.ads\")), 1),\n _withDirectives(_createElementVNode(\"div\", {\n class: \"hidden lg:block\",\n innerHTML: _ctx.ads3Code\n }, null, 8, _hoisted_6), [\n [_vShow, _ctx.ads3Code]\n ]),\n _withDirectives(_createElementVNode(\"div\", {\n class: \"lg:hidden\",\n innerHTML: _ctx.adsMobileCode\n }, null, 8, _hoisted_7), [\n [_vShow, _ctx.adsMobileCode]\n ])\n ], 512), [\n [_vShow, _ctx.ads3Code || _ctx.adsMobileCode]\n ]),\n (!_ctx.firstLoading)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _withDirectives((_openBlock(), _createBlock(_component_Card, {\n id: \"create-practice-btn\",\n \"margin-less\": true,\n hoverable: false,\n filled: true,\n \"border-less\": true,\n class: \"relative overflow-hidden text-gray-600 cursor-pointer md:h-23rem h-64 elevate-when-pressed bg-light hover:bg-gray-200 transition-all duration-300 ease-in-out\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.onCreatePractice()))\n }, {\n header: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_9, [\n _createElementVNode(\"h2\", _hoisted_10, _toDisplayString(_ctx.$t(\"student_course_dashboard.new_practice\")), 1)\n ])\n ]),\n body: _withCtx(() => [\n _hoisted_11\n ]),\n _: 1\n })), [\n [_directive_wave]\n ]),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.filteredPracticeParticipations, (participation) => {\n return (_openBlock(), _createBlock(_component_EventParticipationPreview, {\n key: 'practice-participation-' + participation.id,\n participation: participation,\n onBookmark: ($event: any) => (_ctx.onBookmark(participation)),\n loading: _ctx.loadingParticipations.has(participation.id)\n }, null, 8, [\"participation\", \"onBookmark\", \"loading\"]))\n }), 128))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_12, [\n _createVNode(_component_SkeletonCard, { full: true }),\n _createVNode(_component_SkeletonCard, { full: true }),\n _createVNode(_component_SkeletonCard, { full: true }),\n _createVNode(_component_SkeletonCard, { full: true })\n ])),\n (!_ctx.firstLoading)\n ? (_openBlock(), _createBlock(_component_VueEternalLoading, {\n key: 2,\n load: _ctx.onLoadMore,\n class: \"mt-8\",\n \"is-initial\": _ctx.isInitialInfiniteLoad,\n \"onUpdate:is-initial\": _cache[2] || (_cache[2] = ($event: any) => ((_ctx.isInitialInfiniteLoad) = $event))\n }, {\n loading: _withCtx(() => [\n _createVNode(_component_Spinner)\n ]),\n \"no-more\": _withCtx(() => [\n _createTextVNode(\"   \")\n ]),\n _: 1\n }, 8, [\"load\", \"is-initial\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createVNode(_component_Dialog, {\n onNo: _cache[5] || (_cache[5] = ($event: any) => (_ctx.onCancelPracticeEditorDialog())),\n onYes: _cache[6] || (_cache[6] = ($event: any) => (_ctx.onBeginPractice())),\n noText: _ctx.$t('dialog.default_cancel_text'),\n yesText: \n\t\t\t\t_ctx.practiceEditorDialogLoading\n\t\t\t\t\t? _ctx.$t('misc.wait')\n\t\t\t\t\t: _ctx.$t('practice_template_editor.begin_practice')\n\t\t\t,\n fullWidth: _ctx.mainStore.tags.length > 0,\n disableOk: \n\t\t\t\t_ctx.practiceEditorDialogLoading ||\n\t\t\t\t_ctx.draftEventTemplate.rules.length === 0 ||\n\t\t\t\t_ctx.isEditingRule\n\t\t\t,\n showDialog: _ctx.showPracticeEditorDialog,\n loading: _ctx.practiceEditorDialogLoading\n }, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.isResumingUnstartedPractice\n\t\t\t\t\t\t? _ctx.$t(\"student_course_dashboard.resume_practice\")\n\t\t\t\t\t\t: _ctx.$t(\"student_course_dashboard.new_practice\")), 1)\n ]),\n body: _withCtx(() => [\n _createElementVNode(\"p\", _hoisted_13, _toDisplayString(_ctx.mainStore.tags.length > 0\n\t\t\t\t\t\t\t? _ctx.$t(\"practice_template_editor.choose_tags_text\")\n\t\t\t\t\t\t\t: _ctx.$t(\"practice_template_editor.choose_exercises_no_tag_text\")), 1),\n _createVNode(_component_PracticeTemplateEditorNew, {\n modelValue: _ctx.draftEventTemplate,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((_ctx.draftEventTemplate) = $event)),\n onIsEditing: _cache[4] || (_cache[4] = ($event: any) => (_ctx.isEditingRule = $event))\n }, null, 8, [\"modelValue\"])\n ]),\n _: 1\n }, 8, [\"noText\", \"yesText\", \"fullWidth\", \"disableOk\", \"showDialog\", \"loading\"]),\n _createVNode(_component_v_tour, {\n name: \"demoStudentTour\",\n steps: _ctx.demoStudentTourSteps,\n options: _ctx.tourOptions\n }, null, 8, [\"steps\", \"options\"])\n ]))\n}","import { openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, normalizeClass as _normalizeClass, withCtx as _withCtx, createBlock as _createBlock, createElementVNode as _createElementVNode, createVNode as _createVNode, createTextVNode as _createTextVNode } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"\"\n}\nconst _hoisted_2 = { key: 0 }\nconst _hoisted_3 = {\n key: 0,\n class: \"px-2 ml-2 font-semibold rounded-full bg-primary bg-opacity-20 text-primary\"\n}\nconst _hoisted_4 = {\n key: 2,\n class: \"md:static absolute top-1/2 left-1/2 md:translate-x-0 md:translate-y-0 transform -translate-x-1/2 -translate-y-1/2 md:shadow-none shadow-lg bg-light md:bg-transparent flex md:flex-row flex-col mt-2 w-full items-center md:space-x-2 space-y-2 md:space-y-0 md:py-0 py-2 md:px-0 px-2\"\n}\nconst _hoisted_5 = { class: \"flex space-x-2 items-center\" }\nconst _hoisted_6 = {\n key: 0,\n class: \"mb-0\"\n}\nconst _hoisted_7 = { class: \"lg:block block md:hidden\" }\nconst _hoisted_8 = { class: \"flex items-center w-full md:w-max space-x-2\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Chipset = _resolveComponent(\"Chipset\")!\n const _component_NumberInput = _resolveComponent(\"NumberInput\")!\n const _component_Tag = _resolveComponent(\"Tag\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n\n return (_openBlock(), _createElementBlock(\"div\", null, [\n (_ctx.tagsAsSelectableOptions.length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1))\n : (_openBlock(), _createBlock(_component_Chipset, {\n key: 1,\n options: _ctx.tagsAsSelectableOptions,\n modelValue: _ctx.proxyModelValue,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.proxyModelValue) = $event)),\n allowMultiple: true,\n class: _normalizeClass({ 'opacity-30 select-none pointer-events-none': _ctx.editingTagId }),\n disabled: !!_ctx.editingTagId\n }, {\n default: _withCtx(({ optionValue }) => [\n (_ctx.tagsToRules[optionValue])\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n ((_ctx.tagsToRules[optionValue]?.amount ?? 0) > 0)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_3, _toDisplayString(_ctx.tagsToRules[optionValue].amount), 1))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }, 8, [\"options\", \"modelValue\", \"class\", \"disabled\"])),\n (_ctx.editingTagId)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t(\"practice_template_editor.add_tag_1\")), 1),\n _createVNode(_component_NumberInput, {\n min: 1,\n max: _ctx.editingTag?.public_exercises_not_seen ?? 100000000,\n class: \"lg:w-28 w-32\",\n label: _ctx.$t('practice_template_editor.amount'),\n modelValue: _ctx.editingTagDirtyAmount,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((_ctx.editingTagDirtyAmount) = $event))\n }, {\n rightHint: _withCtx(() => [\n (_ctx.editingTag?.public_exercises_not_seen)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, \" /\" + _toDisplayString(_ctx.editingTag?.public_exercises_not_seen ?? \"\"), 1))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }, 8, [\"max\", \"label\", \"modelValue\"]),\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$tc(\"practice_template_editor.add_tag_2\", _ctx.editingTagDirtyAmount ?? 1)), 1)\n ]),\n _createVNode(_component_Tag, {\n tag: _ctx.editingTag,\n class: \"\"\n }, null, 8, [\"tag\"]),\n _createElementVNode(\"p\", _hoisted_7, _toDisplayString(_ctx.$t(\"practice_template_editor.add_tag_3\")), 1),\n _createElementVNode(\"div\", _hoisted_8, [\n _createVNode(_component_Btn, {\n size: 'sm',\n class: \"my-auto md:w-max w-full\",\n disabled: _ctx.editingTagDirtyAmount < 1,\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.resolveTagSelectPromise(true)))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"dialog.default_ok_text\")), 1)\n ]),\n _: 1\n }, 8, [\"disabled\"]),\n _createVNode(_component_Btn, {\n size: 'sm',\n class: \"my-auto md:w-max w-full\",\n outline: true,\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.resolveTagSelectPromise(false)))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"dialog.default_cancel_text\")), 1)\n ]),\n _: 1\n })\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, vModelDynamic as _vModelDynamic, createElementVNode as _createElementVNode, withDirectives as _withDirectives, resolveComponent as _resolveComponent, normalizeClass as _normalizeClass, createBlock as _createBlock, createCommentVNode as _createCommentVNode, renderSlot as _renderSlot, withCtx as _withCtx, resolveDirective as _resolveDirective, createVNode as _createVNode } from \"vue\"\n\nconst _hoisted_1 = [\"type\", \"disabled\", \"id\", \"value\"]\nconst _hoisted_2 = [\"for\"]\nconst _hoisted_3 = [\"innerHTML\"]\nconst _hoisted_4 = {\n key: 1,\n class: \"\"\n}\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"span\", {\n style: {\"font-size\":\"15px !important\",\"margin-left\":\"0.5px !important\"},\n class: \"material-icons-outlined\"\n}, \"close\", -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons\" }, \"add_circle_outline\", -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_MultiIcon = _resolveComponent(\"MultiIcon\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_Tooltip = _resolveComponent(\"Tooltip\")!\n const _directive_wave = _resolveDirective(\"wave\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"flex p-1\", { 'flex-wrap': _ctx.wrap }])\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.options, (option, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: 'chipset-' + _ctx.id + '-option-' + index\n }, [\n _createVNode(_component_Tooltip, {\n textValue: option.description,\n noArrow: true,\n placement: 'bottom'\n }, {\n default: _withCtx(() => [\n _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"font-normal transition-colors duration-75 ease-linear chip\", {\n\t\t\t\t\t\t'chip-sm': _ctx.compact,\n\t\t\t\t\t\t'chip-primary': _ctx.modelValue.includes(option.value),\n\t\t\t\t\t\t'border-0 bg-light': _ctx.filled && !_ctx.modelValue.includes(option.value),\n\t\t\t\t\t\t'opacity-50 bg-gray-50': option.disabled,\n\t\t\t\t\t\t'hover:bg-gray-200': !option.disabled && !_ctx.deletable,\n\t\t\t\t\t}])\n }, [\n _withDirectives(_createElementVNode(\"input\", {\n type: _ctx.allowMultiple ? 'checkbox' : 'radio',\n class: \"w-0 h-0 opacity-0\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.proxyModelValue) = $event)),\n disabled: option.disabled,\n id: 'chipset-' + _ctx.id + '-option-' + index,\n value: option.value\n }, null, 8, _hoisted_1), [\n [_vModelDynamic, _ctx.proxyModelValue]\n ]),\n _createElementVNode(\"label\", {\n class: _normalizeClass([{ 'cursor-pointer': !option.disabled && !_ctx.deletable }, \"flex items-center\"]),\n for: 'chipset-' + _ctx.id + '-option-' + index\n }, [\n (option.icons)\n ? (_openBlock(), _createBlock(_component_MultiIcon, {\n key: 0,\n class: _normalizeClass([\"w-6 -ml-1\", [_ctx.compact ? 'mr-1' : 'mr-2']]),\n icons: option.icons,\n small: _ctx.compact\n }, null, 8, [\"class\", \"icons\", \"small\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"p\", {\n innerHTML: option.content\n }, null, 8, _hoisted_3),\n (_ctx.$slots.default)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _renderSlot(_ctx.$slots, \"default\", {\n optionValue: option.value\n })\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.deletable && !_ctx.disabled)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 2,\n onClick: ($event: any) => (_ctx.onRemove(option.value)),\n class: \"z-10 ml-1.5 -mr-1.5 bg-gray-200\",\n size: 'xs',\n variant: 'icon',\n outline: true\n }, {\n default: _withCtx(() => [\n _hoisted_5\n ]),\n _: 2\n }, 1032, [\"onClick\"]))\n : _createCommentVNode(\"\", true)\n ], 10, _hoisted_2)\n ], 2)), [\n [_directive_wave, !option.disabled && !_ctx.deletable]\n ])\n ]),\n _: 2\n }, 1032, [\"textValue\"])\n ]))\n }), 128)),\n (_ctx.showAddChip && !_ctx.disabled)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 0,\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$emit('addChip'))),\n variant: 'icon',\n outline: true,\n class: \"-mt-1 -ml-0.5\",\n tooltip: _ctx.addChipTooltip\n }, {\n default: _withCtx(() => [\n _hoisted_6\n ]),\n _: 1\n }, 8, [\"tooltip\"]))\n : _createCommentVNode(\"\", true)\n ], 2))\n}","\nimport { defineComponent } from \"@vue/runtime-core\";\nimport MultiIcon from \"@/components/ui/MultiIcon.vue\";\n\nimport { v4 as uuid4 } from \"uuid\";\nimport Tooltip from \"./Tooltip.vue\";\nimport Btn from \"./Btn.vue\";\nexport default defineComponent({\n\tname: \"Chipset\",\n\tprops: {\n\t\tmodelValue: Array,\n\t\tvalue: {\n\t\t\tdefault: null,\n\t\t},\n\t\toptions: Array,\n\t\tallowMultiple: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tfilled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tcompact: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\twrap: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tdeletable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tshowAddChip: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\taddChipTooltip: {\n\t\t\ttype: String,\n\t\t\tdefault: \"\",\n\t\t},\n\t},\n\tcomponents: {\n\t\tMultiIcon,\n\t\tTooltip,\n\t\tBtn,\n\t},\n\tcreated() {\n\t\tthis.id = uuid4();\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tid: \"\",\n\t\t};\n\t},\n\tmethods: {\n\t\tonRemove(val) {\n\t\t\t// console.log(\n\t\t\t// \t\"BEFORE\",\n\t\t\t// \tthis.proxyModelValue,\n\t\t\t// \t\"VAL\",\n\t\t\t// \tval,\n\t\t\t// \t\"AFTER\",\n\t\t\t// \tthis.proxyModelValue?.filter(o => o.value != val),\n\t\t\t// );\n\t\t\t//this.proxyModelValue = this.proxyModelValue?.filter(o => o.value != val);\n\t\t\tthis.$emit(\"deleteChip\", val);\n\t\t},\n\t},\n\tcomputed: {\n\t\tproxyModelValue: {\n\t\t\tget() {\n\t\t\t\treturn this.modelValue;\n\t\t\t},\n\t\t\tset(val: unknown) {\n\t\t\t\tthis.$emit(\n\t\t\t\t\t\"update:modelValue\",\n\t\t\t\t\tthis.allowMultiple ? val : val === this.modelValue?.[0] ? [] : [val],\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t},\n});\n","import { render } from \"./Chipset.vue?vue&type=template&id=237349a7&ts=true\"\nimport script from \"./Chipset.vue?vue&type=script&lang=ts\"\nexport * from \"./Chipset.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { SelectableOption } from \"@/interfaces\";\nimport {\n\tEventTemplate,\n\tEventTemplateRule,\n\tEventTemplateRuleType,\n\tTag as ITag,\n} from \"@/models\";\nimport { useMainStore } from \"@/stores/mainStore\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport { mapStores } from \"pinia\";\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport Chipset from \"@/components/ui/Chipset.vue\";\nimport NumberInput from \"../ui/NumberInput.vue\";\nimport Btn from \"../ui/Btn.vue\";\nimport Tag from \"../ui/Tag.vue\";\nexport default defineComponent({\n\tname: \"PracticeTemplateEditor\",\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t},\n\twatch: {\n\t\teditingTagId(newVal) {\n\t\t\tthis.$emit(\"isEditing\", !!newVal);\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\teditingTagId: null as string | null,\n\t\t\teditingTagDirtyAmount: null as number | null,\n\t\t\tresolveTagSelectPromise: null as ((v: boolean) => void) | null,\n\t\t\trejectTagSelectPromise: null as (() => void) | null,\n\t\t};\n\t},\n\tmethods: {\n\t\tasync onTagSelect(tagId: string) {\n\t\t\tthis.editingTagId = tagId;\n\t\t\tthis.editingTagDirtyAmount = 1;\n\t\t\ttry {\n\t\t\t\tconst confirmed = await new Promise((resolve, reject) => {\n\t\t\t\t\tthis.resolveTagSelectPromise = resolve;\n\t\t\t\t\tthis.rejectTagSelectPromise = reject;\n\t\t\t\t});\n\t\t\t\tif (confirmed) {\n\t\t\t\t\tthis.onAddRuleByTagId(tagId, this.editingTagDirtyAmount as number);\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tthis.editingTagId = null;\n\t\t\t\tthis.editingTagDirtyAmount = null;\n\t\t\t\tthis.resolveTagSelectPromise = null;\n\t\t\t\tthis.rejectTagSelectPromise = null;\n\t\t\t}\n\t\t},\n\t\tonAddRuleByTagId(tagId: string, amount: number) {\n\t\t\tthis.$emit(\"update:modelValue\", {\n\t\t\t\t...this.modelValue,\n\t\t\t\trules: [\n\t\t\t\t\t...this.modelValue.rules,\n\t\t\t\t\t{\n\t\t\t\t\t\trule_type: EventTemplateRuleType.TAG_BASED,\n\t\t\t\t\t\tweight: 1,\n\t\t\t\t\t\tamount,\n\t\t\t\t\t\tclauses: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttags: [this.mainStore.tags.find(t => t.id == tagId) as ITag],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t} as EventTemplate);\n\t\t},\n\t\tonRemoveRuleByTagId(tagId: string) {\n\t\t\tthis.$emit(\"update:modelValue\", {\n\t\t\t\t...this.modelValue,\n\t\t\t\trules: this.modelValue.rules.filter(r => r.clauses?.[0]?.tags[0]?.id != tagId),\n\t\t\t} as EventTemplate);\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore),\n\t\tproxyModelValue: {\n\t\t\tget() {\n\t\t\t\treturn this.selectedTagIds;\n\t\t\t},\n\t\t\tset(val: string[]) {\n\t\t\t\tif (val.length > this.proxyModelValue.length) {\n\t\t\t\t\t// adding a new tag\n\t\t\t\t\tconst newTagId = val.find(\n\t\t\t\t\t\tt => !this.proxyModelValue.includes(String(t)),\n\t\t\t\t\t) as string;\n\t\t\t\t\tthis.onTagSelect(newTagId);\n\t\t\t\t} else {\n\t\t\t\t\t// removing a tag\n\t\t\t\t\tconst removedTagId = this.proxyModelValue.find(\n\t\t\t\t\t\tt => !val.includes(String(t)),\n\t\t\t\t\t) as string;\n\t\t\t\t\tthis.onRemoveRuleByTagId(removedTagId);\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\teditingTag() {\n\t\t\treturn this.mainStore.tags.find(t => t.id == this.editingTagId);\n\t\t},\n\t\tselectedTags() {\n\t\t\treturn this.modelValue.rules.flatMap(r => (r.clauses ?? []).flatMap(c => c.tags));\n\t\t},\n\t\tselectedTagIds() {\n\t\t\treturn this.selectedTags.map(t => String(t.id));\n\t\t},\n\t\ttagsAsSelectableOptions(): SelectableOption[] {\n\t\t\treturn [...this.mainStore.tags]\n\t\t\t\t.sort((a, b) => (b.public_exercises ?? 0) - (a.public_exercises ?? 0))\n\t\t\t\t.map(t => ({\n\t\t\t\t\tvalue: String(t.id),\n\t\t\t\t\tcontent: t.name,\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t(t.public_exercises_not_seen ?? 0) === 0\n\t\t\t\t\t\t\t? _(\"practice_template_editor.all_exercises_seen_with_this_tag\")\n\t\t\t\t\t\t\t: String(t.public_exercises ?? 0) +\n\t\t\t\t\t\t\t \" \" +\n\t\t\t\t\t\t\t _(\"student_course_dashboard.available_exercises_tooltip\"),\n\t\t\t\t\tdisabled: (t.public_exercises_not_seen ?? 0) === 0,\n\t\t\t\t}));\n\t\t},\n\t\t// Maps tag ids to rules that contain that tag\n\t\ttagsToRules(): Record {\n\t\t\tconst ret = {} as Record;\n\t\t\tthis.modelValue.rules.forEach(r => {\n\t\t\t\t// take first tag of first clause\n\t\t\t\tconst tag = r?.clauses?.[0]?.tags[0];\n\t\t\t\tret[\n\t\t\t\t\t// TODO review if this is needed\n\t\t\t\t\tString(typeof tag === \"object\" ? tag?.id ?? \"\" : tag)\n\t\t\t\t] = r;\n\t\t\t});\n\t\t\treturn ret;\n\t\t},\n\t},\n\tcomponents: { Chipset, NumberInput, Btn, Tag },\n});\n","import { render } from \"./PracticeTemplateEditorNew.vue?vue&type=template&id=57b1fb1b&ts=true\"\nimport script from \"./PracticeTemplateEditorNew.vue?vue&type=script&lang=ts\"\nexport * from \"./PracticeTemplateEditorNew.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n/* eslint-disable @typescript-eslint/no-extra-semi */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { adComponentMixin, courseIdMixin, loadingMixin } from \"@/mixins\";\nimport { defineComponent } from \"@vue/runtime-core\";\n\nimport EventParticipationPreview from \"@/components/student/EventParticipationPreview.vue\";\nimport SkeletonCard from \"@/components/ui/SkeletonCard.vue\";\nimport Card from \"@/components/ui/Card.vue\";\nimport {\n\tEvent,\n\tEventParticipation,\n\tEventType,\n\tgetBlankEventTemplate,\n\tgetBlankPractice,\n} from \"@/models\";\nimport Dialog from \"@/components/ui/Dialog.vue\";\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport { sum } from \"lodash\";\nimport { demoStudentTourSteps, MAX_PRACTICE_EXERCISE_COUNT, tourOptions } from \"@/const\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport VueEternalLoading from \"@ts-pro/vue-eternal-loading/src/components/VueEternalLoading/VueEternalLoading.vue\";\nimport Spinner from \"@/components/ui/Spinner.vue\";\nimport { LoadAction } from \"@ts-pro/vue-eternal-loading\";\nimport { EventParticipationSearchFilter } from \"@/api\";\nimport { isDemoMode, setErrorNotification } from \"@/utils\";\nimport { logAnalyticsEvent } from \"@/utils\";\nimport { mapStores } from \"pinia\";\nimport { useMainStore } from \"@/stores/mainStore\";\nimport PracticeTemplateEditorNew from \"../../../components/student/PracticeTemplateEditorNew.vue\";\nimport { useGoogleIntegrationsStore } from \"../../../integrations/stores/googleIntegrationsStore\";\n\nconst DEMO_TOUR_KEY = \"demo_student_tour_taken\";\nconst SCOPES_REQUIRED_TO_CREATE_PRACTICE = true;\n\nexport default defineComponent({\n\tcomponents: {\n\t\tEventParticipationPreview,\n\t\tSkeletonCard,\n\t\tCard,\n\t\tDialog,\n\t\tBtn,\n\t\tVueEternalLoading,\n\t\tSpinner,\n\t\tPracticeTemplateEditorNew,\n\t},\n\tname: \"PracticeList\",\n\tmixins: [courseIdMixin, loadingMixin, adComponentMixin],\n\tasync created() {\n\t\tawait this.withFirstLoading(async () => {\n\t\t\tawait this.mainStore.getTags({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\tincludeExerciseCount: true,\n\t\t\t});\n\t\t\t// await this.mainStore.getCourse({ courseId: this.courseId });\n\t\t\tawait this.mainStore.getCourseEventParticipations({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\tfromFirstPage: true,\n\t\t\t\tfilter: {\n\t\t\t\t\tevent_type: EventType.SELF_SERVICE_PRACTICE,\n\t\t\t\t} as EventParticipationSearchFilter,\n\t\t\t});\n\t\t\tif (isDemoMode() && !(DEMO_TOUR_KEY in localStorage)) {\n\t\t\t\tsetTimeout(() => ((this as any).$tours[\"demoStudentTour\"] as any).start(), 50);\n\t\t\t\tlocalStorage.setItem(DEMO_TOUR_KEY, \"true\");\n\t\t\t}\n\t\t});\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tisInitialInfiniteLoad: false,\n\t\t\tisEditingRule: false,\n\t\t\tMAX_PRACTICE_EXERCISE_COUNT,\n\t\t\tshowNotRecent: true,\n\t\t\tshowBookmarkedOnly: false,\n\t\t\tloadingParticipations: new Set(),\n\t\t\ttourOptions,\n\t\t\tdemoStudentTourSteps,\n\t\t\tshowPracticeEditorDialog: false,\n\t\t\tdraftEventTemplate: getBlankEventTemplate(),\n\t\t\tpracticeEditorDialogLoading: false,\n\t\t};\n\t},\n\tmethods: {\n\t\tasync onLoadMore({ loaded, noMore, error }: LoadAction) {\n\t\t\ttry {\n\t\t\t\tconst moreResults = await this.mainStore.getCourseEventParticipations({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\tfromFirstPage: false,\n\t\t\t\t\tfilter: {\n\t\t\t\t\t\tevent_type: EventType.SELF_SERVICE_PRACTICE,\n\t\t\t\t\t} as EventParticipationSearchFilter,\n\t\t\t\t});\n\n\t\t\t\tif (!moreResults) {\n\t\t\t\t\tnoMore();\n\t\t\t\t} else {\n\t\t\t\t\tloaded();\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\terror();\n\t\t\t}\n\t\t},\n\t\tonCreatePractice() {\n\t\t\t/**\n\t\t\t * Open practice editor dialog and lets user define the practice template\n\t\t\t */\n\t\t\tlogAnalyticsEvent(\"createPractice\", { courseId: this.courseId });\n\t\t\tif (this.loading) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// if student hasn't granted scopes yet, deny practice creation\n\t\t\tif (\n\t\t\t\tthis.googleIntegrationStore.studentScopesBannerVisible &&\n\t\t\t\tSCOPES_REQUIRED_TO_CREATE_PRACTICE\n\t\t\t) {\n\t\t\t\tthis.googleIntegrationStore.studentScopesBannerShaking = true;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (this.currentCourse.public_exercises_count === 0) {\n\t\t\t\t// TODO if you use this.setErrorNotification, it's undefined - investigate\n\t\t\t\tsetErrorNotification(_(\"student_course_dashboard.no_public_exercises\"), true);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.showPracticeEditorDialog = true;\n\t\t},\n\t\tasync onBeginPractice() {\n\t\t\t/**\n\t\t\t * Create practice event using defined template and redirect to\n\t\t\t * practice participation page\n\t\t\t */\n\t\t\tlogAnalyticsEvent(\"beginPractice\", { courseId: this.courseId });\n\n\t\t\tconst eventPayload = {\n\t\t\t\t...getBlankPractice(),\n\t\t\t\ttemplate: this.draftEventTemplate,\n\t\t\t};\n\n\t\t\ttry {\n\t\t\t\tthis.practiceEditorDialogLoading = true;\n\n\t\t\t\t// create practice event with draftEventTemplate\n\t\t\t\tconst newPracticeEvent = await this.mainStore.createEvent({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\tevent: eventPayload,\n\t\t\t\t});\n\n\t\t\t\tthis.$router.push({\n\t\t\t\t\tname: \"PracticeParticipationPage\",\n\t\t\t\t\tparams: {\n\t\t\t\t\t\texamId: newPracticeEvent.id,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t} finally {\n\t\t\t\tthis.practiceEditorDialogLoading = false;\n\t\t\t}\n\t\t},\n\t\tonCancelPracticeEditorDialog() {\n\t\t\tthis.showPracticeEditorDialog = false;\n\t\t},\n\t\tasync onBookmark(participation: EventParticipation) {\n\t\t\ttry {\n\t\t\t\tlogAnalyticsEvent(\"bookmarkedPractice\", { courseId: this.courseId });\n\t\t\t\tthis.loadingParticipations.add(participation.id);\n\t\t\t\tawait this.mainStore.partialUpdateEventParticipation({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t// TODO assumes participation contains Event\n\t\t\t\t\teventId: participation.event.id,\n\t\t\t\t\tparticipationId: participation.id,\n\t\t\t\t\tchanges: {\n\t\t\t\t\t\tbookmarked: !(participation.bookmarked ?? false),\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t} finally {\n\t\t\t\tthis.loadingParticipations.delete(participation.id);\n\t\t\t}\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore, useGoogleIntegrationsStore),\n\t\tfilteredPracticeParticipations() {\n\t\t\treturn this.mainStore.practiceParticipations.filter(\n\t\t\t\t(p, i) =>\n\t\t\t\t\t(this.showNotRecent || i < 3 || (p.bookmarked && this.showBookmarkedOnly)) &&\n\t\t\t\t\t(!this.showBookmarkedOnly || p.bookmarked),\n\t\t\t);\n\t\t},\n\t\t// isResumingUnstartedPractice(): boolean {\n\t\t// \treturn (\n\t\t// \t\tthis.mainStore.editingEvent?.id ===\n\t\t// \t\tthis.currentCourse.unstarted_practice_events?.[0]?.id\n\t\t// \t);\n\t\t// },\n\t\t// totalRuleAmount(): number {\n\t\t// \tif (!this.mainStore.editingEvent) {\n\t\t// \t\treturn 0;\n\t\t// \t}\n\t\t// \treturn sum(\n\t\t// \t\t(this.mainStore.editingEvent as Event).template?.rules.map(r =>\n\t\t// \t\t\tparseInt(String(r.amount)),\n\t\t// \t\t),\n\t\t// \t);\n\t\t// },\n\t},\n});\n","import { render } from \"./PracticeList.vue?vue&type=template&id=6815c6a3&ts=true\"\nimport script from \"./PracticeList.vue?vue&type=script&lang=ts\"\nexport * from \"./PracticeList.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, vShow as _vShow, withDirectives as _withDirectives, createBlock as _createBlock, createTextVNode as _createTextVNode, withCtx as _withCtx } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"flex flex-col w-full mt-12 mb-12 text-center select-none\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"p\", {\n style: {\"font-size\":\"10rem\"},\n class: \"material-icons-outlined opacity-10\"\n}, \" search_off \", -1)\nconst _hoisted_3 = { class: \"opacity-40\" }\nconst _hoisted_4 = { key: 1 }\nconst _hoisted_5 = {\n key: 1,\n class: \"w-full mt-4 h-4 mb-2 skeleton-unit\"\n}\nconst _hoisted_6 = { key: 2 }\nconst _hoisted_7 = { key: 2 }\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-full h-1 bg-gray-200 rounded-md\" }, null, -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ExerciseSearchFilters = _resolveComponent(\"ExerciseSearchFilters\")!\n const _component_FullExercise = _resolveComponent(\"FullExercise\")!\n const _component_ExerciseSolutionContainer = _resolveComponent(\"ExerciseSolutionContainer\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_SlotSkeleton = _resolveComponent(\"SlotSkeleton\")!\n const _component_Spinner = _resolveComponent(\"Spinner\")!\n const _component_VueEternalLoading = _resolveComponent(\"VueEternalLoading\")!\n\n return (_openBlock(), _createElementBlock(\"div\", null, [\n _createVNode(_component_ExerciseSearchFilters, {\n class: \"bg-transparent mb-10 rounded-sm\",\n allowFilterByState: false,\n allowFilterByType: false,\n full: false,\n modelValue: _ctx.searchFilter,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.searchFilter) = $event)),\n onResetFilters: _cache[1] || (_cache[1] = ($event: any) => (_ctx.searchFilter = _ctx.getBlankExerciseSearchFilters()))\n }, null, 8, [\"modelValue\"]),\n (!_ctx.firstLoading && !_ctx.loading && _ctx.mainStore.exercises.length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _hoisted_2,\n _createElementVNode(\"h2\", _hoisted_3, _toDisplayString(_ctx.$t(\"course_exercises.no_matching_exercises\")), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (!_ctx.firstLoading)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.mainStore.exercises, (exercise) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"mb-14\",\n key: 'e-' + exercise.id\n }, [\n _createVNode(_component_FullExercise, { exercise: exercise }, null, 8, [\"exercise\"]),\n (!_ctx.loadingSolutionsByExercise[exercise.id])\n ? _withDirectives((_openBlock(), _createBlock(_component_ExerciseSolutionContainer, {\n key: 0,\n class: \"mt-4\",\n exercise: exercise,\n solutions: _ctx.mainStore.getPaginatedSolutionsByExerciseId(exercise.id).data,\n canLoadMore: \n\t\t\t\t\t\t!_ctx.mainStore.getPaginatedSolutionsByExerciseId(exercise.id).isLastPage\n\t\t\t\t\t,\n onLoadMore: ($event: any) => (_ctx.loadMore(exercise))\n }, null, 8, [\"exercise\", \"solutions\", \"canLoadMore\", \"onLoadMore\"])), [\n [_vShow, \n\t\t\t\t\t\t_ctx.showSolutionsByExercise[exercise.id] ||\n\t\t\t\t\t\t_ctx.getSolutionCountForExercise(exercise) === 0\n\t\t\t\t\t]\n ])\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_5)),\n (\n\t\t\t\t\t\t!_ctx.loadingSolutionsByExercise[exercise.id] &&\n\t\t\t\t\t\t!_ctx.showSolutionsByExercise[exercise.id] &&\n\t\t\t\t\t\t_ctx.getSolutionCountForExercise(exercise) > 0\n\t\t\t\t\t)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _createVNode(_component_Btn, {\n onClick: ($event: any) => (_ctx.showSolutionsByExercise[exercise.id] = true),\n size: 'sm',\n class: \"mt-2 -ml-4\",\n variant: 'primary-borderless'\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"exercise_solution.reveal_solutions_1\")) + \" \" + _toDisplayString(_ctx.getSolutionCountForExercise(exercise)) + \" \" + _toDisplayString(_ctx.getSolutionCountForExercise(exercise) === 1\n\t\t\t\t\t\t\t\t? _ctx.$t(\"exercise_solution.reveal_solutions_2_singular\")\n\t\t\t\t\t\t\t\t: _ctx.$t(\"exercise_solution.reveal_solutions_2_plural\")), 1)\n ]),\n _: 2\n }, 1032, [\"onClick\"])\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n }), 128))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [\n _createVNode(_component_SlotSkeleton),\n _createVNode(_component_SlotSkeleton),\n _createVNode(_component_SlotSkeleton),\n _createVNode(_component_SlotSkeleton)\n ])),\n (!_ctx.firstLoading)\n ? (_openBlock(), _createBlock(_component_VueEternalLoading, {\n key: 3,\n load: _ctx.onLoadMore,\n \"is-initial\": _ctx.isInitialInfiniteLoad,\n \"onUpdate:is-initial\": _cache[2] || (_cache[2] = ($event: any) => ((_ctx.isInitialInfiniteLoad) = $event))\n }, {\n loading: _withCtx(() => [\n _createVNode(_component_Spinner)\n ]),\n \"no-more\": _withCtx(() => [\n _hoisted_8\n ]),\n _: 1\n }, 8, [\"load\", \"is-initial\"]))\n : _createCommentVNode(\"\", true)\n ]))\n}","import { toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, resolveComponent as _resolveComponent, createBlock as _createBlock, createTextVNode as _createTextVNode, withCtx as _withCtx, createVNode as _createVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex items-center space-x-4\" }\nconst _hoisted_2 = { key: 0 }\nconst _hoisted_3 = {\n key: 0,\n class: \"flex md:flex-row items-center md:space-y-0 space-y-2 flex-col md:space-x-4\"\n}\nconst _hoisted_4 = { class: \"text-muted\" }\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mr-2 text-base material-icons\" }, \"reviews\", -1)\nconst _hoisted_6 = { class: \"flex flex-col\" }\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mr-2 text-base material-icons\" }, \"reviews\", -1)\nconst _hoisted_8 = { key: 1 }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ExerciseSolution = _resolveComponent(\"ExerciseSolution\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_ExerciseSolutionEditor = _resolveComponent(\"ExerciseSolutionEditor\")!\n\n return (_openBlock(), _createElementBlock(\"div\", null, [\n _createElementVNode(\"div\", _hoisted_1, [\n (_ctx.showTitle)\n ? (_openBlock(), _createElementBlock(\"h4\", _hoisted_2, _toDisplayString(_ctx.$t(\"exercise_solution.proposed_solutions_title\")), 1))\n : _createCommentVNode(\"\", true)\n ]),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.shownSolutions, (solution) => {\n return (_openBlock(), _createBlock(_component_ExerciseSolution, {\n class: \"w-full my-4\",\n publishing: _ctx.publishing,\n key: 'e-' + _ctx.exercise.id + '-solution-' + solution.id,\n solution: solution,\n exercise: _ctx.exercise,\n forceExpanded: _ctx.standalone,\n showTeacherControls: _ctx.showTeacherControls,\n onUpdateState: ($event: any) => (_ctx.onSolutionStateUpdate(solution, $event)),\n onEditSolution: ($event: any) => (_ctx.onEditSolution(solution)),\n onDeleteSolution: ($event: any) => (_ctx.onDeleteSolution(solution))\n }, null, 8, [\"publishing\", \"solution\", \"exercise\", \"forceExpanded\", \"showTeacherControls\", \"onUpdateState\", \"onEditSolution\", \"onDeleteSolution\"]))\n }), 128)),\n (_ctx.solutions.length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createElementVNode(\"p\", _hoisted_4, _toDisplayString(_ctx.$t(\"exercise_solution.no_solutions_call_to_action\")), 1),\n _createVNode(_component_Btn, {\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.onAddSolution())),\n variant: 'primary',\n class: \"w-full md:w-max\",\n size: 'sm',\n outline: true\n }, {\n default: _withCtx(() => [\n _hoisted_5,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t(\"exercise_solution.propose_solution\")), 1)\n ]),\n _: 1\n })\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_6, [\n (_ctx.canShowMore)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 0,\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.onShowMore())),\n size: 'xs',\n variant: 'primary-borderless',\n class: \"mr-auto -ml-1\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"exercise_solution.load_more_solutions\")) + \" \", 1)\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true),\n (_ctx.solutions.length > 0 && _ctx.allowAddSolution)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 1,\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.onAddSolution())),\n variant: 'primary',\n class: \"mt-4 md:mr-auto w-full md:w-max\",\n size: 'sm',\n outline: true\n }, {\n default: _withCtx(() => [\n _hoisted_7,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t(\"exercise_solution.propose_solution\")), 1)\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true),\n (_ctx.showExerciseThreadLink && _ctx.solutions.length > 0)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 2,\n to: _ctx.threadPermalink,\n class: \"mt-4\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Btn, {\n size: 'xs',\n class: \"-ml-1\",\n variant: 'primary-borderless'\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"exercise_solution.go_to_exercise_thread\")), 1)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"to\"]))\n : _createCommentVNode(\"\", true)\n ]),\n (_ctx.editingSolutionId !== null || _ctx.editingSolutionDeepCopy !== null)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _createVNode(_component_ExerciseSolutionEditor, {\n publishing: _ctx.publishing,\n saving: _ctx.saving,\n savingError: _ctx.savingError,\n modelValue: _ctx.editingSolution ?? _ctx.editingSolutionDeepCopy,\n onUpdateSolution: _cache[3] || (_cache[3] = ($event: any) => (_ctx.onDraftSolutionChange($event.key, $event.value))),\n onClose: _cache[4] || (_cache[4] = ($event: any) => (_ctx.onClose())),\n editorType: _ctx.solutionType,\n exercise: _ctx.exercise\n }, null, 8, [\"publishing\", \"saving\", \"savingError\", \"modelValue\", \"editorType\", \"exercise\"])\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createBlock as _createBlock, renderList as _renderList, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = { class: \"relative flex w-full rounded-sm card-border\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"flex absolute h-full w-full bg-opacity-0 bg-dark z-10\"\n}\nconst _hoisted_3 = { class: \"m-auto flex flex-col items-center space-y-2\" }\nconst _hoisted_4 = { class: \"flex md:flex-row flex-col h-full\" }\nconst _hoisted_5 = { class: \"h-full pt-2 pb-2 md:pb-0 px-4 md:pt-4 rounded-tl-sm bg-gray-50\" }\nconst _hoisted_6 = { class: \"sticky flex md:flex-col flex-row place-content-evenly items-center md:pb-4 md:space-y-4 md:space-x-0 top-18\" }\nconst _hoisted_7 = { class: \"relative\" }\nconst _hoisted_8 = { class: \"text-3xl md:text-4xl text-muted\" }\nconst _hoisted_9 = { class: \"flex flex-col w-full h-full bg-black bg-opacity-0 relative\" }\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-4xl material-icons text-success\" }, \"verified\", -1)\nconst _hoisted_11 = {\n key: 1,\n class: \"banner banner-light mx-2\"\n}\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons text-muted\" }, \" shield \", -1)\nconst _hoisted_13 = { class: \"\" }\nconst _hoisted_14 = { ref: \"content\" }\nconst _hoisted_15 = {\n key: 1,\n class: \"flex -mt-4 overflow-hidden\"\n}\nconst _hoisted_16 = { class: \"flex w-full mt-2 pb-0.5\" }\nconst _hoisted_17 = { class: \"flex md:ml-2\" }\nconst _hoisted_18 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons\" }, \"edit\", -1)\nconst _hoisted_19 = [\"loading\"]\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons\" }, \"delete\", -1)\nconst _hoisted_21 = { class: \"flex items-center ml-auto\" }\nconst _hoisted_22 = { class: \"md:mr-5 mr-2 text-sm md:text-base text-muted\" }\nconst _hoisted_23 = { class: \"w-full border-t px-4 py-4 border-gray-50\" }\nconst _hoisted_24 = { class: \"mb-2\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_Tooltip = _resolveComponent(\"Tooltip\")!\n const _component_ProcessedTextFragment = _resolveComponent(\"ProcessedTextFragment\")!\n const _component_CodeFragment = _resolveComponent(\"CodeFragment\")!\n const _component_CopyToClipboard = _resolveComponent(\"CopyToClipboard\")!\n const _component_Avatar = _resolveComponent(\"Avatar\")!\n const _component_Message = _resolveComponent(\"Message\")!\n const _component_MessageEditor = _resolveComponent(\"MessageEditor\")!\n\n return (_openBlock(), _createElementBlock(\"div\", null, [\n _createElementVNode(\"div\", _hoisted_1, [\n (_ctx.showTeacherControls && _ctx.solution.state === _ctx.ExerciseSolutionState.REJECTED)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"h5\", null, _toDisplayString(_ctx.$t(\"exercise_solution.you_rejected_this_solution\")), 1),\n _createVNode(_component_Btn, {\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.onUpdateState(_ctx.ExerciseSolutionState.SUBMITTED)))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"misc.undo\")), 1)\n ]),\n _: 1\n })\n ])\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"flex flex-col w-full\", {\n\t\t\t\t\t'opacity-50 hover:opacity-70 ease-in-out transition-opacity duration-200':\n\t\t\t\t\t\t_ctx.solution.state === _ctx.ExerciseSolutionState.REJECTED,\n\t\t\t\t}])\n }, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"div\", _hoisted_7, [\n _createVNode(_component_Btn, {\n disabled: _ctx.isOwnSolution,\n variant: 'icon',\n size: 'lg',\n outline: true,\n class: \"relative z-10\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.onVote(_ctx.VoteType.UP_VOTE)))\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n class: _normalizeClass([\n\t\t\t\t\t\t\t\t\t\t\t_ctx.solution.has_upvote ? 'material-icons' : 'material-icons-outlined',\n\t\t\t\t\t\t\t\t\t\t]),\n style: _normalizeStyle(\n\t\t\t\t\t\t\t\t\t\t\t_ctx.mediaQueryMdMatches\n\t\t\t\t\t\t\t\t\t\t\t\t? 'font-size: 35px !important'\n\t\t\t\t\t\t\t\t\t\t\t\t: 'font-size: 28px !important'\n\t\t\t\t\t\t\t\t\t\t)\n }, \" thumb_up_alt\", 6)\n ]),\n _: 1\n }, 8, [\"disabled\"])\n ]),\n _createElementVNode(\"p\", _hoisted_8, _toDisplayString(_ctx.solution.score), 1),\n _createVNode(_component_Btn, {\n disabled: _ctx.isOwnSolution,\n variant: 'icon',\n size: 'lg',\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.onVote(_ctx.VoteType.DOWN_VOTE))),\n outline: true,\n class: \"\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n class: _normalizeClass([\n\t\t\t\t\t\t\t\t\t\t_ctx.solution.has_downvote ? 'material-icons' : 'material-icons-outlined',\n\t\t\t\t\t\t\t\t\t]),\n style: _normalizeStyle(\n\t\t\t\t\t\t\t\t\t\t_ctx.mediaQueryMdMatches\n\t\t\t\t\t\t\t\t\t\t\t? 'font-size: 35px !important'\n\t\t\t\t\t\t\t\t\t\t\t: 'font-size: 28px !important'\n\t\t\t\t\t\t\t\t\t)\n }, \" thumb_down_alt\", 6)\n ]),\n _: 1\n }, 8, [\"disabled\"])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n (_ctx.solution.state === _ctx.ExerciseSolutionState.APPROVED)\n ? (_openBlock(), _createBlock(_component_Tooltip, {\n key: 0,\n textValue: _ctx.$t('exercise_solution.verified'),\n placement: 'bottom',\n class: \"mr-3 mt-3 absolute right-0 top-0 z-10\"\n }, {\n default: _withCtx(() => [\n _hoisted_10\n ]),\n _: 1\n }, 8, [\"textValue\"]))\n : _createCommentVNode(\"\", true),\n (\n\t\t\t\t\t\t\t\t_ctx.showTeacherControls && _ctx.solution.state === _ctx.ExerciseSolutionState.SUBMITTED\n\t\t\t\t\t\t\t)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [\n _hoisted_12,\n _createElementVNode(\"p\", _hoisted_13, _toDisplayString(_ctx.$t(\"exercise_solution.teacher_is_this_solution_correct\")), 1),\n _createVNode(_component_Btn, {\n disabled: _ctx.publishing,\n size: 'sm',\n class: \"ml-4 mr-2\",\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.onUpdateState(_ctx.ExerciseSolutionState.APPROVED)))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"exercise_solution.approve\")), 1)\n ]),\n _: 1\n }, 8, [\"disabled\"]),\n _createVNode(_component_Btn, {\n disabled: _ctx.publishing,\n size: 'sm',\n outline: true,\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.onUpdateState(_ctx.ExerciseSolutionState.REJECTED)))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"exercise_solution.reject\")), 1)\n ]),\n _: 1\n }, 8, [\"disabled\"])\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"relative w-full pt-4 mb-auto whitespace-pre\", {\n\t\t\t\t\t\t\t\t'h-full': !_ctx.collapsed && !_ctx.calculatingHeight,\n\t\t\t\t\t\t\t\t'overflow-y-hidden': _ctx.collapsed || _ctx.calculatingHeight,\n\t\t\t\t\t\t\t}]),\n style: _normalizeStyle(\n\t\t\t\t\t\t\t\t_ctx.collapsed || _ctx.calculatingHeight\n\t\t\t\t\t\t\t\t\t? 'max-height: ' + _ctx.MAX_CONTENT_HEIGHT_PX + 'px'\n\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t)\n }, [\n _createElementVNode(\"div\", _hoisted_14, [\n (_ctx.solutionType === 'text')\n ? (_openBlock(), _createBlock(_component_ProcessedTextFragment, {\n key: 0,\n style: {\"white-space\":\"break-spaces\"},\n class: \"w-full px-4 py-2 rounded\",\n value: _ctx.solution.content\n }, null, 8, [\"value\"]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_15, [\n _createVNode(_component_CodeFragment, {\n language: _ctx.solutionType,\n value: _ctx.solution.content,\n class: \"rounded-tr rounded-none flex-grow bg-dark\"\n }, null, 8, [\"language\", \"value\"])\n ])),\n (_ctx.collapsed)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 2,\n class: _normalizeClass([\"absolute bottom-0 left-0 flex w-full h-40\", [\n\t\t\t\t\t\t\t\t\t\t_ctx.solutionType === 'text' ? 'hidden-content' : 'hidden-content-code',\n\t\t\t\t\t\t\t\t\t]])\n }, [\n _createVNode(_component_Btn, {\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.collapsed = false)),\n variant: \n\t\t\t\t\t\t\t\t\t\t\t_ctx.solutionType === 'text' ? 'primary-borderless' : 'secondary'\n\t\t\t\t\t\t\t\t\t\t,\n class: \"z-20 mx-auto mt-auto mb-2\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"exercise_solution.reveal_solution\")), 1)\n ]),\n _: 1\n }, 8, [\"variant\"])\n ], 2))\n : _createCommentVNode(\"\", true)\n ], 512)\n ], 6),\n _createElementVNode(\"div\", _hoisted_16, [\n _createElementVNode(\"div\", _hoisted_17, [\n (_ctx.canEdit)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 0,\n variant: 'icon',\n outline: true,\n tooltip: _ctx.$t('exercise_solution.edit'),\n onClick: _cache[6] || (_cache[6] = ($event: any) => (_ctx.$emit('editSolution')))\n }, {\n default: _withCtx(() => [\n _hoisted_18\n ]),\n _: 1\n }, 8, [\"tooltip\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_CopyToClipboard, {\n \"icon-only\": true,\n tooltip: _ctx.$t('exercise_solution.share'),\n value: _ctx.permalink\n }, null, 8, [\"tooltip\", \"value\"]),\n _createVNode(_component_Btn, {\n variant: 'icon',\n outline: true,\n tooltip: \n\t\t\t\t\t\t\t\t\t\t_ctx.solution.is_bookmarked\n\t\t\t\t\t\t\t\t\t\t\t? _ctx.$t('exercise_solution.remove_bookmark')\n\t\t\t\t\t\t\t\t\t\t\t: _ctx.$t('exercise_solution.add_bookmark')\n\t\t\t\t\t\t\t\t\t\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n class: _normalizeClass([\"material-icons\", { 'text-primary': _ctx.solution.is_bookmarked }]),\n loading: _ctx.bookmarking,\n onClick: _cache[7] || (_cache[7] = ($event: any) => (_ctx.onToggleBookmark()))\n }, _toDisplayString(_ctx.solution.is_bookmarked ? \"bookmark\" : \"bookmark_outline\"), 11, _hoisted_19)\n ]),\n _: 1\n }, 8, [\"tooltip\"]),\n (_ctx.canEdit)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 1,\n class: \"icon-btn-danger\",\n variant: 'icon',\n outline: true,\n tooltip: _ctx.$t('exercise_solution.delete'),\n onClick: _cache[8] || (_cache[8] = ($event: any) => (_ctx.$emit('deleteSolution')))\n }, {\n default: _withCtx(() => [\n _hoisted_20\n ]),\n _: 1\n }, 8, [\"tooltip\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_21, [\n _createVNode(_component_Avatar, {\n class: \"ml-auto md:mr-2 mr-1\",\n user: _ctx.solution.user ?? {}\n }, null, 8, [\"user\"]),\n _createElementVNode(\"p\", _hoisted_22, _toDisplayString(_ctx.authorName), 1)\n ])\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_23, [\n _createElementVNode(\"h5\", _hoisted_24, _toDisplayString(_ctx.$t(\"exercise_solution.comments\")), 1),\n _createElementVNode(\"div\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.solution.comments, (comment) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: 'comment-' + comment.id,\n class: \"my-1.5\"\n }, [\n _createVNode(_component_Message, {\n canDelete: false,\n user: comment.user,\n message: comment.content\n }, null, 8, [\"user\", \"message\"])\n ]))\n }), 128))\n ]),\n _createVNode(_component_MessageEditor, {\n posting: _ctx.postingComment,\n onSendMessage: _cache[9] || (_cache[9] = ($event: any) => (_ctx.onAddComment($event.message, $event.resolveFn, $event.rejectFn)))\n }, null, 8, [\"posting\"])\n ])\n ], 2)\n ])\n ]))\n}","\nconst MAX_CONTENT_HEIGHT_PX = 300;\nimport {\n\tCodeExecutionResults as ICodeExecutionResults,\n\tExercise,\n\tExerciseSolution,\n\tExerciseSolutionState,\n\tgetComment,\n\tgetVote,\n\tProgrammingExerciseType,\n\tprogrammingExerciseTypeToLanguageId,\n\tVoteType,\n} from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport TextInput from \"@/components/ui/TextInput.vue\";\nimport Avatar from \"@/components/ui/Avatar.vue\";\nimport ProcessedTextFragment from \"@/components/ui/ProcessedTextFragment.vue\";\nimport { courseIdMixin, coursePrivilegeMixin, mediaQueryMixin, texMixin } from \"@/mixins\";\nimport { setErrorNotification } from \"@/utils\";\nimport CopyToClipboard from \"@/components/ui/CopyToClipboard.vue\";\nimport { getExerciseSolutionThreadRoute } from \"./utils\";\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport CodeFragment from \"@/components/ui/CodeFragment.vue\";\nimport Tooltip from \"@/components/ui/Tooltip.vue\";\nimport { mapStores } from \"pinia\";\nimport { useMetaStore } from \"@/stores/metaStore\";\nimport { useMainStore } from \"@/stores/mainStore\";\nimport MessageEditor from \"@/components/messaging/MessageEditor.vue\";\nimport Message from \"@/components/messaging/Message.vue\";\n\nexport default defineComponent({\n\tname: \"ExerciseSolution\",\n\tmixins: [courseIdMixin, coursePrivilegeMixin, mediaQueryMixin, texMixin],\n\tprops: {\n\t\texercise: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\tsolution: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\tcanVote: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tcanChangeState: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tcanComment: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tforceExpanded: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tshowTeacherControls: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tpublishing: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tcreated() {\n\t\tthis.triggerTexRender();\n\t},\n\tmounted() {\n\t\t// TODO stop using ref and use getElementById\n\n\t\t// workaround for https://sentry.io/organizations/samuele/issues/3527964852/?project=6265941&query=is%3Aunresolved\n\t\t// the `content` ref might not be available yet, so loop until it is not null anymore\n\t\tthis.intervalHandle = setInterval(() => {\n\t\t\tconst contentElement = this.$refs.content as HTMLElement;\n\t\t\tif (!contentElement) {\n\t\t\t\tconsole.warn(\"ref element is null\");\n\t\t\t\t// ref element isn't available yet\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tcontentElement.clientHeight > this.MAX_CONTENT_HEIGHT_PX &&\n\t\t\t\t!this.forceExpanded\n\t\t\t) {\n\t\t\t\tthis.collapsed = true;\n\t\t\t}\n\t\t\tthis.calculatingHeight = false;\n\t\t\tclearInterval(this.intervalHandle as number);\n\t\t\tthis.intervalHandle = null;\n\t\t}, 30);\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tvoting: false,\n\t\t\tpostingComment: false,\n\t\t\tbookmarking: false,\n\t\t\tVoteType,\n\t\t\tExerciseSolutionState,\n\t\t\tMAX_CONTENT_HEIGHT_PX,\n\t\t\tcollapsed: false,\n\t\t\tshowAnimation: false,\n\t\t\tcalculatingHeight: true,\n\t\t\tintervalHandle: null as number | null,\n\t\t\texecutionResults: {} as ICodeExecutionResults,\n\t\t\trunningCode: false,\n\t\t\tws: null as null | WebSocket,\n\t\t};\n\t},\n\tmethods: {\n\t\t// async runCode() {\n\t\t// \tconst taskId = uuid4();\n\t\t// \tconst taskMessage = {\n\t\t// \t\ttask_id: taskId,\n\t\t// \t\texercise_id: this.exercise.id,\n\t\t// \t\tcode: this.solution.content,\n\t\t// \t\taction: \"run_code\",\n\t\t// \t};\n\t\t// \tthis.runningCode = true;\n\t\t// \tthis.ws = await openAuthenticatedWsConnection(\n\t\t// \t\t\"code_runner\",\n\t\t// \t\ts => s.send(JSON.stringify(taskMessage)),\n\t\t// \t\tm => {\n\t\t// \t\t\tconst payload = JSON.parse(m.data);\n\t\t// \t\t\tif (payload.action === \"execution_results\") {\n\t\t// \t\t\t\tthis.executionResults = JSON.parse(payload.data);\n\t\t// \t\t\t\tthis.runningCode = false;\n\t\t// \t\t\t\tthis.ws?.close();\n\t\t// \t\t\t}\n\t\t// \t\t},\n\t\t// \t);\n\t\t// },\n\t\tasync onVote(voteType: VoteType) {\n\t\t\tif (this.voting) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.voting = true;\n\t\t\ttry {\n\t\t\t\tconst vote =\n\t\t\t\t\t(this.solution.has_upvote && voteType === VoteType.UP_VOTE) ||\n\t\t\t\t\t(this.solution.has_downvote && voteType === VoteType.DOWN_VOTE)\n\t\t\t\t\t\t? undefined // removing vote\n\t\t\t\t\t\t: getVote(voteType); // adding/updating vote\n\n\t\t\t\tawait this.mainStore.createExerciseSolutionVote({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\texerciseId: this.exercise.id,\n\t\t\t\t\tsolutionId: this.solution.id,\n\t\t\t\t\tvote,\n\t\t\t\t});\n\t\t\t\tif (typeof vote !== \"undefined\") {\n\t\t\t\t\t// TODO refactor animation\n\t\t\t\t\tthis.showAnimation = true;\n\t\t\t\t}\n\t\t\t\t// TODO fix this with an action\n\t\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\t\t// this.solution.votes.push(getVote(voteType));\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t} finally {\n\t\t\t\tthis.voting = false;\n\t\t\t}\n\t\t},\n\t\tasync onAddComment(message: string, resolveFn: () => void, rejectFn: () => void) {\n\t\t\tthis.postingComment = true;\n\t\t\ttry {\n\t\t\t\tawait this.mainStore.createExerciseSolutionComment({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\texerciseId: this.exercise.id,\n\t\t\t\t\tsolutionId: this.solution.id,\n\t\t\t\t\tcomment: getComment(message),\n\t\t\t\t});\n\t\t\t\tresolveFn();\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t\trejectFn();\n\t\t\t} finally {\n\t\t\t\tthis.postingComment = false;\n\t\t\t}\n\t\t},\n\t\tasync onToggleBookmark() {\n\t\t\tthis.bookmarking = true;\n\t\t\ttry {\n\t\t\t\tawait this.mainStore.setExerciseSolutionBookmark({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\texerciseId: this.exercise.id,\n\t\t\t\t\tsolutionId: this.solution.id,\n\t\t\t\t\tbookmarked: !this.solution.is_bookmarked,\n\t\t\t\t});\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t} finally {\n\t\t\t\tthis.bookmarking = false;\n\t\t\t}\n\t\t},\n\t\tonUpdateState(newState: ExerciseSolutionState) {\n\t\t\tthis.$emit(\"updateState\", newState);\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMetaStore, useMainStore),\n\t\t// TODO extract to utils\n\t\tsolutionType() {\n\t\t\tconst code =\n\t\t\t\tprogrammingExerciseTypeToLanguageId[\n\t\t\t\t\tthis.exercise.exercise_type as ProgrammingExerciseType\n\t\t\t\t];\n\t\t\treturn code ?? \"text\";\n\t\t},\n\t\tauthorName(): string {\n\t\t\treturn this.solution.user?.full_name ?? _(\"exercise_solution.default_author\");\n\t\t},\n\t\tisOwnSolution(): boolean {\n\t\t\treturn (this.solution.user?.id ?? \"\") == this.metaStore.user.id;\n\t\t},\n\t\tcanEdit(): boolean {\n\t\t\treturn this.isOwnSolution || this.hasAnyPrivileges();\n\t\t},\n\t\tpermalink(): string {\n\t\t\treturn (\n\t\t\t\twindow.location.origin +\n\t\t\t\tthis.$router.resolve(\n\t\t\t\t\tgetExerciseSolutionThreadRoute(\n\t\t\t\t\t\tthis.courseId,\n\t\t\t\t\t\tthis.exercise.id,\n\t\t\t\t\t\tthis.solution.id,\n\t\t\t\t\t),\n\t\t\t\t).fullPath\n\t\t\t);\n\t\t},\n\t},\n\tcomponents: {\n\t\tBtn,\n\t\tAvatar,\n\t\tProcessedTextFragment,\n\t\tCopyToClipboard,\n\t\tCodeFragment,\n\t\tTooltip,\n\t\tMessageEditor,\n\t\tMessage,\n\t},\n});\n","import { render } from \"./ExerciseSolution.vue?vue&type=template&id=8b0941a4&ts=true\"\nimport script from \"./ExerciseSolution.vue?vue&type=script&lang=ts\"\nexport * from \"./ExerciseSolution.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, createTextVNode as _createTextVNode, Transition as _Transition, vShow as _vShow, withDirectives as _withDirectives, normalizeStyle as _normalizeStyle } from \"vue\"\n\nconst _hoisted_1 = {\n style: {\"z-index\":\"1000\"},\n class: \"fixed top-0 left-0 flex items-center justify-center w-full h-full\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"div\", {\n style: {\"width\":\"100vw !important\",\"height\":\"100vh !important\"},\n class: \"fixed z-10 w-full h-full transition-none bg-gray-900 opacity-80\"\n}, null, -1)\nconst _hoisted_3 = { class: \"flex items-center w-full mb-8\" }\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined\" }, \"close\", -1)\nconst _hoisted_5 = { class: \"div flex items-center space-x-2 text-muted rounded-sm py-1 mb-2 lg:w-max\" }\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined text-lg\" }, \"info\", -1)\nconst _hoisted_7 = { class: \"text-sm\" }\nconst _hoisted_8 = { class: \"flex md:flex-row w-full h-full pb-10 flex-col md:space-x-8 overflow-y-auto\" }\nconst _hoisted_9 = { class: \"w-full h-full md:h-auto md:order-1 order-2 mt-4 md:mt-0\" }\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"ml-1 mr-1 text-base material-icons\" }, \" play_arrow \", -1)\nconst _hoisted_11 = {\n key: 0,\n class: \"opacity-50\"\n}\nconst _hoisted_12 = {\n key: 1,\n class: \"opacity-0\"\n}\nconst _hoisted_13 = {\n key: 0,\n class: \"absolute bottom-20 right-0 z-50 flex items-center px-6 py-3 mb-2 mr-4 space-x-2 rounded bg-dark text-lightText bg-opacity-90 shadow-popup\"\n}\nconst _hoisted_14 = { class: \"md:order-2 order-1 w-full h-full md:h-auto overflow-y-auto\" }\nconst _hoisted_15 = { class: \"flex items-center px-10 py-3 -mx-10 -mb-6 shadow-popup bg-light\" }\nconst _hoisted_16 = {\n key: 0,\n class: \"ml-6 text-muted\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_TextEditor = _resolveComponent(\"TextEditor\")!\n const _component_Spinner = _resolveComponent(\"Spinner\")!\n const _component_CodeEditor = _resolveComponent(\"CodeEditor\")!\n const _component_SegmentedControls = _resolveComponent(\"SegmentedControls\")!\n const _component_FullExercise = _resolveComponent(\"FullExercise\")!\n const _component_CodeExecutionResults = _resolveComponent(\"CodeExecutionResults\")!\n const _component_CloudSaveStatus = _resolveComponent(\"CloudSaveStatus\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _hoisted_2,\n _createElementVNode(\"div\", {\n style: _normalizeStyle(\n\t\t\t\t_ctx.mediaQueryMdMatches ? 'min-height: 24rem; max-height: 40rem' : 'height: 100vh'\n\t\t\t),\n class: \"fixed bottom-0 left-0 z-20 flex flex-col w-full px-10 py-6 bg-gray-50 shadow-all-around\"\n }, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"h3\", null, _toDisplayString(_ctx.$t(\"exercise_solution.propose_solution_title\")), 1),\n _createVNode(_component_Btn, {\n variant: 'icon',\n class: \"ml-auto\",\n outline: true,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('close'))),\n tooltip: _ctx.$t('misc.close')\n }, {\n default: _withCtx(() => [\n _hoisted_4\n ]),\n _: 1\n }, 8, [\"tooltip\"])\n ]),\n _createElementVNode(\"div\", _hoisted_5, [\n _hoisted_6,\n _createElementVNode(\"p\", _hoisted_7, _toDisplayString(_ctx.$t(\"exercise_solution.copyright_disclaimer\")), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n _createElementVNode(\"div\", _hoisted_9, [\n (_ctx.editorType === 'text')\n ? (_openBlock(), _createBlock(_component_TextEditor, {\n key: 0,\n tall: true,\n class: \"mt-auto\",\n modelValue: _ctx.modelValue.content,\n placeholder: _ctx.$t('exercise_solution.your_solution_placeholder'),\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => (_ctx.onUpdate('content', $event)))\n }, null, 8, [\"modelValue\", \"placeholder\"]))\n : (_openBlock(), _createBlock(_component_CodeEditor, {\n key: 1,\n showRunButton: false,\n runCoolDown: _ctx.runCoolDown,\n running: _ctx.runningCode || _ctx.runCoolDown > 0,\n size: 'lg',\n modelValue: _ctx.modelValue.content,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => (_ctx.onUpdate('content', $event))),\n language: _ctx.editorType\n }, {\n runButton: _withCtx(() => [\n _hoisted_10,\n _createTextVNode(_toDisplayString(_ctx.$t(\"programming_exercise.run_code\")) + \" \", 1),\n (_ctx.runCoolDown > 0)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_11, \" (\" + _toDisplayString(_ctx.runCoolDown) + \")\", 1))\n : _createCommentVNode(\"\", true),\n (_ctx.runCoolDown < 10)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_12, \"0\"))\n : _createCommentVNode(\"\", true)\n ]),\n bottom: _withCtx(() => [\n _createVNode(_Transition, { name: \"quick-bounce\" }, {\n default: _withCtx(() => [\n (_ctx.runningCode)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [\n _createVNode(_component_Spinner, { fast: true }),\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t(\"programming_exercise.running_code\")), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"runCoolDown\", \"running\", \"modelValue\", \"language\"]))\n ]),\n _createElementVNode(\"div\", _hoisted_14, [\n (false && _ctx.editorType !== 'text')\n ? (_openBlock(), _createBlock(_component_SegmentedControls, {\n key: 0,\n class: \"mb-4\",\n modelValue: _ctx.currentTab,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((_ctx.currentTab) = $event)),\n options: _ctx.programmingExerciseTabsOptions\n }, null, 8, [\"modelValue\", \"options\"]))\n : _createCommentVNode(\"\", true),\n _withDirectives(_createVNode(_component_FullExercise, {\n showTags: false,\n exercise: _ctx.exercise\n }, null, 8, [\"exercise\"]), [\n [_vShow, _ctx.currentTab === _ctx.ProgrammingExerciseTabs.TEXT]\n ]),\n _withDirectives(_createVNode(_component_CodeExecutionResults, {\n reduced: true,\n testCases: _ctx.exercise.testcases ?? [],\n executionResults: _ctx.executionResults\n }, null, 8, [\"testCases\", \"executionResults\"]), [\n [_vShow, _ctx.currentTab === _ctx.ProgrammingExerciseTabs.EXECUTION_RESULTS]\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_15, [\n _createVNode(_component_Btn, {\n disabled: _ctx.publishing || _ctx.modelValue.content.trim().length === 0,\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.onSubmit()))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.publishing\n\t\t\t\t\t\t\t? _ctx.$t(\"exercise_solution.publishing\")\n\t\t\t\t\t\t\t: _ctx.$t(\"exercise_solution.publish\")), 1)\n ]),\n _: 1\n }, 8, [\"disabled\"]),\n (_ctx.modelValue.state === _ctx.ExerciseSolutionState.DRAFT)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_16, \" (\" + _toDisplayString(_ctx.$t(\"exercise_solution.states.\" + _ctx.ExerciseSolutionState.DRAFT)) + \") \", 1))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_CloudSaveStatus, {\n class: \"ml-auto\",\n saving: _ctx.saving,\n hadError: _ctx.savingError\n }, null, 8, [\"saving\", \"hadError\"])\n ])\n ], 4)\n ]))\n}","import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, Transition as _Transition } from \"vue\"\n\nconst _hoisted_1 = [\"id\"]\nconst _hoisted_2 = { class: \"h-8\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"flex items-center ml-auto space-x-1.5 text-muted\"\n}\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-xl opacity-80 material-icons-outlined animate-spin\" }, \" sync \", -1)\nconst _hoisted_5 = { class: \"hidden md:block text-base\" }\nconst _hoisted_6 = {\n key: 1,\n class: \"flex items-center ml-auto space-x-1.5 text-muted\"\n}\nconst _hoisted_7 = {\n key: 0,\n class: \"mb-0.5 text-base\"\n}\nconst _hoisted_8 = { key: 2 }\nconst _hoisted_9 = { class: \"flex items-center space-x-1 text-sm text-muted text-danger-dark\" }\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-sm material-icons-outlined\" }, \"error_outline\", -1)\nconst _hoisted_11 = { class: \"\" }\nconst _hoisted_12 = {\n key: 0,\n class: \"fixed rounded-full bg-opacity-90 top-18 right-8 z-999 bg-gray-50\"\n}\nconst _hoisted_13 = { class: \"opacity-70 shadow-all-around px-3 pt-1.5 pb-1 pr-3 rounded-full\" }\nconst _hoisted_14 = {\n key: 0,\n class: \"flex items-center ml-auto space-x-1.5 text-muted\"\n}\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-xl opacity-80 material-icons-outlined animate-spin\" }, \" sync \", -1)\nconst _hoisted_16 = { class: \"text-base\" }\nconst _hoisted_17 = {\n key: 1,\n class: \"flex items-center ml-auto space-x-1.5 text-muted\"\n}\nconst _hoisted_18 = {\n key: 0,\n class: \"mb-0.5 text-base\"\n}\nconst _hoisted_19 = { key: 2 }\nconst _hoisted_20 = { class: \"flex items-center space-x-1 text-sm text-muted text-danger-dark\" }\nconst _hoisted_21 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-sm material-icons-outlined\" }, \"error_outline\", -1)\nconst _hoisted_22 = { class: \"\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Tooltip = _resolveComponent(\"Tooltip\")!\n\n return (_openBlock(), _createElementBlock(\"div\", { id: _ctx.elementId }, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_ctx.saving)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _hoisted_4,\n _createElementVNode(\"p\", _hoisted_5, _toDisplayString(_ctx.$t(\"cloud.saving\")), 1)\n ]))\n : (!_ctx.hadError)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _createVNode(_component_Tooltip, {\n placement: 'left',\n \"text-value\": _ctx.$t('cloud.changes_saved_to_server')\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n class: _normalizeClass([{\n\t\t\t\t\t\t\t'tooltip-handle hover:bg-light hover:bg-opacity-100 rounded px-1.5 transition-colors duration-100':\n\t\t\t\t\t\t\t\t!_ctx.showSaved,\n\t\t\t\t\t\t}, \"text-xl cursor-default select-none opacity-80 material-icons-outlined hover:text-primary\"])\n }, \" cloud_done \", 2)\n ]),\n _: 1\n }, 8, [\"text-value\"]),\n (_ctx.showSaved)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_7, _toDisplayString(_ctx.$t(\"cloud.saved\")), 1))\n : _createCommentVNode(\"\", true)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _createElementVNode(\"div\", _hoisted_9, [\n _hoisted_10,\n _createElementVNode(\"span\", _hoisted_11, _toDisplayString(_ctx.$t(\"cloud.error\")), 1)\n ])\n ]))\n ]),\n _createVNode(_Transition, { name: \"fade-autosave\" }, {\n default: _withCtx(() => [\n (_ctx.showOutOfViewFeedback)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_12, [\n _createElementVNode(\"div\", _hoisted_13, [\n (_ctx.saving)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_14, [\n _hoisted_15,\n _createElementVNode(\"p\", _hoisted_16, _toDisplayString(_ctx.$t(\"cloud.saving\")), 1)\n ]))\n : (!_ctx.hadError)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [\n _createVNode(_component_Tooltip, {\n placement: 'left',\n \"text-value\": _ctx.$t('cloud.changes_saved_to_server')\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n class: _normalizeClass([{\n\t\t\t\t\t\t\t\t\t'tooltip-handle hover:bg-light hover:bg-opacity-100 rounded px-1.5 transition-colors duration-100':\n\t\t\t\t\t\t\t\t\t\t!_ctx.showSaved,\n\t\t\t\t\t\t\t\t}, \"text-xl cursor-default select-none opacity-80 material-icons-outlined hover:text-primary\"])\n }, \" cloud_done \", 2)\n ]),\n _: 1\n }, 8, [\"text-value\"]),\n (_ctx.showSaved)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_18, _toDisplayString(_ctx.$t(\"cloud.saved\")), 1))\n : _createCommentVNode(\"\", true)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_19, [\n _createElementVNode(\"div\", _hoisted_20, [\n _hoisted_21,\n _createElementVNode(\"span\", _hoisted_22, _toDisplayString(_ctx.$t(\"cloud.error\")), 1)\n ])\n ]))\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n })\n ], 8, _hoisted_1))\n}","\nimport { defineComponent } from \"@vue/runtime-core\";\nimport Tooltip from \"./Tooltip.vue\";\nimport { v4 as uuid4 } from \"uuid\";\nexport default defineComponent({\n\tcomponents: {\n\t\tTooltip,\n\t},\n\tname: \"CloudSaveStatus\",\n\tprops: {\n\t\tsaving: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\thadError: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\twatch: {\n\t\tsaving(newVal: boolean, oldVal: boolean) {\n\t\t\tif (!newVal && oldVal) {\n\t\t\t\tif (this.showSavedHandle !== null) {\n\t\t\t\t\tclearInterval(this.showSavedHandle);\n\t\t\t\t}\n\t\t\t\tif (this.showOutOfViewFeedbackHandle !== null) {\n\t\t\t\t\tclearInterval(this.showOutOfViewFeedbackHandle);\n\t\t\t\t}\n\t\t\t\t// done saving\n\t\t\t\tthis.showSaved = true;\n\t\t\t\tif (!this.isElementInViewPort()) {\n\t\t\t\t\tthis.showOutOfViewFeedback = true;\n\t\t\t\t}\n\t\t\t\tthis.showSavedHandle = setTimeout(() => (this.showSaved = false), 5000);\n\t\t\t\tthis.showOutOfViewFeedbackHandle = setTimeout(\n\t\t\t\t\t() => (this.showOutOfViewFeedback = false),\n\t\t\t\t\t1000,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (newVal && !this.isElementInViewPort()) {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tif (this.saving) {\n\t\t\t\t\t\tthis.showOutOfViewFeedback = true;\n\t\t\t\t\t}\n\t\t\t\t}, 1000);\n\t\t\t}\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tshowSaved: false,\n\t\t\tshowSavedHandle: null as null | number,\n\t\t\tshowOutOfViewFeedback: false,\n\t\t\tshowOutOfViewFeedbackHandle: null as null | number,\n\t\t\telementId: uuid4(),\n\t\t};\n\t},\n\tmethods: {\n\t\tisElementInViewPort() {\n\t\t\tconst element = document.getElementById(this.elementId) as HTMLElement;\n\t\t\tconst rect = element.getBoundingClientRect();\n\n\t\t\treturn (\n\t\t\t\trect.top >= 0 &&\n\t\t\t\trect.left >= 0 &&\n\t\t\t\trect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n\t\t\t\trect.right <= (window.innerWidth || document.documentElement.clientWidth)\n\t\t\t);\n\t\t},\n\t},\n});\n","import { render } from \"./CloudSaveStatus.vue?vue&type=template&id=2ffdb03b&ts=true\"\nimport script from \"./CloudSaveStatus.vue?vue&type=script&lang=ts\"\nexport * from \"./CloudSaveStatus.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nconst RUN_COOL_DOWN = 10;\n\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport TextEditor from \"@/components/ui/TextEditor.vue\";\nimport {\n\tCodeExecutionResults as ICodeExecutionResults,\n\tExercise,\n\tExerciseSolution,\n\tExerciseSolutionState,\n} from \"@/models\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport CloudSaveStatus from \"@/components/ui/CloudSaveStatus.vue\";\nimport { mediaQueryMixin, texMixin } from \"@/mixins\";\nimport CodeEditor from \"@/components/ui/CodeEditor.vue\";\nimport FullExercise from \"../FullExercise.vue\";\nimport { ProgrammingExerciseTabs, programmingExerciseTabsOptions } from \"@/const\";\nimport CodeExecutionResults from \"../CodeExecutionResults.vue\";\nimport SegmentedControls from \"@/components/ui/SegmentedControls.vue\";\nimport Spinner from \"@/components/ui/Spinner.vue\";\n\nexport default defineComponent({\n\tname: \"ExerciseSolutionEditor\",\n\tmixins: [texMixin, mediaQueryMixin],\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\texercise: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\tsaving: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tsavingError: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\teditorType: {\n\t\t\ttype: String as PropType<\"text\" | \"typescript\" | \"c\" | \"python\">,\n\t\t\trequired: true,\n\t\t},\n\t\tpublishing: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tbeforeUnmount() {\n\t\tconst bodyContainsOverflowHidden =\n\t\t\tdocument.body.classList.contains(\"overflow-y-hidden\");\n\t\tif (bodyContainsOverflowHidden) {\n\t\t\tdocument.body.classList.remove(\"overflow-y-hidden\");\n\t\t}\n\t\tthis.ws?.close();\n\t},\n\tcreated() {\n\t\t// prevent scrolling of the underlying page when open\n\t\tconst bodyContainsOverflowHidden =\n\t\t\tdocument.body.classList.contains(\"overflow-y-hidden\");\n\t\tif (!bodyContainsOverflowHidden) {\n\t\t\tdocument.body.classList.add(\"overflow-y-hidden\");\n\t\t}\n\t\tthis.triggerTexRender();\n\t},\n\tmethods: {\n\t\tonUpdate(key: K, value: ExerciseSolution[K]) {\n\t\t\tthis.$emit(\"updateSolution\", { key, value });\n\t\t},\n\t\tonSubmit() {\n\t\t\tthis.onUpdate(\n\t\t\t\t\"state\",\n\t\t\t\tthis.modelValue.state === ExerciseSolutionState.DRAFT\n\t\t\t\t\t? ExerciseSolutionState.SUBMITTED\n\t\t\t\t\t: this.modelValue.state,\n\t\t\t);\n\t\t},\n\t\t// async runCode() {\n\t\t// \tconst taskId = uuid4();\n\t\t// \tconst taskMessage = {\n\t\t// \t\ttask_id: taskId,\n\t\t// \t\texercise_id: this.exercise.id,\n\t\t// \t\tcode: this.modelValue.content,\n\t\t// \t\taction: \"run_code\",\n\t\t// \t};\n\t\t// \tthis.runCoolDown = RUN_COOL_DOWN;\n\t\t// \tthis.intervalHandle = setInterval(() => {\n\t\t// \t\tthis.runCoolDown--;\n\t\t// \t\tif (this.runCoolDown === 0) {\n\t\t// \t\t\tclearInterval(this.intervalHandle as number);\n\t\t// \t\t\tthis.intervalHandle = null;\n\t\t// \t\t}\n\t\t// \t}, 1000);\n\t\t// \tthis.runningCode = true;\n\t\t// \tthis.ws = await openAuthenticatedWsConnection(\n\t\t// \t\t\"code_runner\",\n\t\t// \t\ts => s.send(JSON.stringify(taskMessage)),\n\t\t// \t\tm => {\n\t\t// \t\t\tconst payload = JSON.parse(m.data);\n\t\t// \t\t\tif (payload.action === \"execution_results\") {\n\t\t// \t\t\t\tthis.executionResults = JSON.parse(payload.data);\n\t\t// \t\t\t\tthis.runningCode = false;\n\t\t// \t\t\t\tthis.currentTab = ProgrammingExerciseTabs.EXECUTION_RESULTS;\n\t\t// \t\t\t}\n\t\t// \t\t},\n\t\t// \t);\n\t\t// },\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tExerciseSolutionState,\n\t\t\trunCoolDown: 0,\n\t\t\trunningCode: false,\n\t\t\tws: null as null | WebSocket,\n\t\t\texecutionResults: {} as ICodeExecutionResults,\n\t\t\tProgrammingExerciseTabs,\n\t\t\tprogrammingExerciseTabsOptions: programmingExerciseTabsOptions.filter(o =>\n\t\t\t\t[\n\t\t\t\t\tProgrammingExerciseTabs.TEXT,\n\t\t\t\t\tProgrammingExerciseTabs.EXECUTION_RESULTS,\n\t\t\t\t].includes(o.value),\n\t\t\t),\n\t\t\tcurrentTab: ProgrammingExerciseTabs.TEXT,\n\t\t\tintervalHandle: null as null | number,\n\t\t};\n\t},\n\tcomputed: {},\n\tcomponents: {\n\t\tTextEditor,\n\t\tBtn,\n\t\tCloudSaveStatus,\n\t\tCodeEditor,\n\t\tFullExercise,\n\t\tCodeExecutionResults,\n\t\tSegmentedControls,\n\t\tSpinner,\n\t},\n});\n","import { render } from \"./ExerciseSolutionEditor.vue?vue&type=template&id=dddac880&ts=true\"\nimport script from \"./ExerciseSolutionEditor.vue?vue&type=script&lang=ts\"\nexport * from \"./ExerciseSolutionEditor.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { debounce, DebouncedFunc } from \"lodash\";\n\ntype RemotePatchFunction = (changes: Partial) => Promise;\ntype PatchFunction = (changes: Partial, reverting?: boolean) => void;\nexport type FieldList = (keyof T)[];\n\nenum AutoSaveManagerState {\n\tUP_TO_DATE,\n\tPENDING,\n\tERROR,\n}\nexport class AutoSaveManager {\n\tinstance: T;\n\tunsavedChanges: Partial;\n\tbeforeChanges: Partial;\n\tremotePatchFunction: DebouncedFunc>;\n\tlocalPatchFunction: PatchFunction;\n\terrorFunction?: (e: any) => void;\n\tsuccessFunction?: () => void;\n\tcleanupFunction?: () => void;\n\tdebouncedFields: FieldList;\n\trevertOnFailure: boolean;\n\talwaysPatchLocal: boolean;\n\tstate: AutoSaveManagerState;\n\n\tconstructor(\n\t\tinstance: T,\n\t\tremotePatchFunction: RemotePatchFunction,\n\t\tlocalPatchFunction: PatchFunction,\n\t\tdebouncedFields: FieldList,\n\t\tdebounceTime: number,\n\t\tsuccessFunction?: () => void,\n\t\terrorFunction?: (e: any) => void,\n\t\tcleanupFunction?: () => void,\n\t\trevertOnFailure = false,\n\t\talwaysPatchLocal = true,\n\t) {\n\t\tthis.instance = instance;\n\t\tthis.localPatchFunction = localPatchFunction;\n\t\tthis.remotePatchFunction = debounce(\n\t\t\tthis.wrapRemotePatchFunction(remotePatchFunction),\n\t\t\tdebounceTime,\n\t\t);\n\t\tthis.debouncedFields = debouncedFields;\n\t\tthis.unsavedChanges = {};\n\t\tthis.beforeChanges = {};\n\t\tthis.successFunction = successFunction;\n\t\tthis.errorFunction = errorFunction;\n\t\tthis.cleanupFunction = cleanupFunction;\n\t\tthis.revertOnFailure = revertOnFailure;\n\t\tthis.alwaysPatchLocal = alwaysPatchLocal;\n\t\tthis.state = AutoSaveManagerState.UP_TO_DATE;\n\t}\n\n\tasync onChange(changes: Partial): Promise {\n\t\tthis.state = AutoSaveManagerState.PENDING;\n\n\t\t// record new change to field\n\t\tthis.unsavedChanges = { ...this.unsavedChanges, ...changes };\n\n\t\t// make deep copy of fields about to change in case rollback becomes necessary\n\t\t// (only for non-debounced fields as it would be disconcerting to roll back\n\t\t// debounced changes like in text fields)\n\t\tObject.keys(changes)\n\t\t\t.filter(k => !this.debouncedFields.includes(k as keyof T))\n\t\t\t.forEach(\n\t\t\t\tk => (this.beforeChanges[k] = JSON.parse(JSON.stringify(this.instance[k]))),\n\t\t\t);\n\n\t\tif (this.alwaysPatchLocal) {\n\t\t\t// instantly update in-memory instance\n\t\t\tthis.localPatchFunction(changes);\n\t\t}\n\n\t\t// dispatch update to backend\n\t\tawait this.remotePatchFunction(this.unsavedChanges);\n\n\t\tif (Object.keys(changes).some(k => !this.debouncedFields.includes(k as keyof T))) {\n\t\t\t// at least one field isn't to be debounced; call remote update immediately\n\t\t\tawait this.remotePatchFunction.flush();\n\t\t}\n\t}\n\n\tasync flush(): Promise {\n\t\tif (this.state !== AutoSaveManagerState.UP_TO_DATE) {\n\t\t\t/**\n\t\t\t * We don't just call .flush() on remotePatchFunction, because that'll\n\t\t\t * prevent us from calling flush multiple times in a row, as the\n\t\t\t * behavior of lodash's flush is to just return the last value if\n\t\t\t * called more than once in a row. Instead, we cancel any pending\n\t\t\t * invocations, schedule the function, and flush it immmediately\n\t\t\t */\n\t\t\tthis.remotePatchFunction.cancel();\n\t\t\tthis.remotePatchFunction(this.unsavedChanges);\n\t\t\tawait this.remotePatchFunction.flush();\n\t\t}\n\t}\n\n\tisPending(): boolean {\n\t\treturn this.state === AutoSaveManagerState.PENDING;\n\t}\n\n\tprivate wrapRemotePatchFunction(\n\t\tcallback: RemotePatchFunction,\n\t): RemotePatchFunction {\n\t\t/**\n\t\t * Wraps the callback into a function that awaits the callback first, and\n\t\t * if it is successful, then empties the unsaved changes object\n\t\t */\n\t\treturn async (changes: Partial) => {\n\t\t\ttry {\n\t\t\t\tawait callback(changes);\n\t\t\t\tif (!this.alwaysPatchLocal) {\n\t\t\t\t\t// update in-memory instance\n\t\t\t\t\tthis.localPatchFunction(changes);\n\t\t\t\t}\n\t\t\t\t// reset bookkeeping about recent changes\n\t\t\t\tthis.unsavedChanges = {};\n\t\t\t\tthis.beforeChanges = {};\n\t\t\t\tthis.state = AutoSaveManagerState.UP_TO_DATE;\n\n\t\t\t\t// call user-supplied success callback\n\t\t\t\tthis.successFunction?.();\n\t\t\t} catch (e) {\n\t\t\t\t// call user-supplied error callback\n\t\t\t\tthis.errorFunction?.(e);\n\n\t\t\t\tif (this.revertOnFailure) {\n\t\t\t\t\t// roll back unsaved changes\n\t\t\t\t\tthis.localPatchFunction(this.beforeChanges, true);\n\t\t\t\t}\n\t\t\t\tthis.state = AutoSaveManagerState.ERROR;\n\t\t\t} finally {\n\t\t\t\tthis.cleanupFunction?.();\n\t\t\t}\n\t\t};\n\t}\n}\n","\nconst SHOW_INITIALLY_COUNT = 1;\nimport { getExerciseThreadRoute } from \"./utils\";\n\nimport {\n\tExercise as IExercise,\n\tExerciseSolution as IExerciseSolution,\n\tExerciseSolutionState,\n\tgetBlankExerciseSolution,\n\tProgrammingExerciseType,\n\tprogrammingExerciseTypeToLanguageId,\n} from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport ExerciseSolution from \"./ExerciseSolution.vue\";\nimport ExerciseSolutionEditor from \"./ExerciseSolutionEditor.vue\";\nimport { courseIdMixin, loadingMixin, savingMixin } from \"@/mixins\";\nimport { logAnalyticsEvent, setErrorNotification } from \"@/utils\";\nimport { AutoSaveManager } from \"@/autoSave\";\nimport {\n\tEXERCISE_SOLUTION_AUTO_SAVE_DEBOUNCE_FIELDS,\n\tEXERCISE_SOLUTION_AUTO_SAVE_DEBOUNCE_TIME_MS,\n} from \"@/const\";\nimport { getTranslatedString } from \"@/i18n\";\nimport { mapStores } from \"pinia\";\nimport { useMetaStore } from \"@/stores/metaStore\";\nimport { useMainStore } from \"@/stores/mainStore\";\nexport default defineComponent({\n\tname: \"ExerciseSolutionContainer\",\n\tprops: {\n\t\texercise: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\tsolutions: {\n\t\t\ttype: Array as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\tcanLoadMore: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tshowFirst: {\n\t\t\ttype: Array as PropType,\n\t\t\trequired: false,\n\t\t},\n\t\tstandalone: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tshowTeacherControls: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tshowTitle: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tallowAddSolution: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tforceShowAll: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tshowExerciseThreadLink: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tallowShowMore: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tinitialEditorContent: {\n\t\t\ttype: String,\n\t\t\tdefault: \"\",\n\t\t},\n\t},\n\tmixins: [courseIdMixin, savingMixin, loadingMixin],\n\tmethods: {\n\t\tonClose() {\n\t\t\tthis.editingSolutionId = null;\n\t\t\tthis.editingSolutionDeepCopy = null;\n\t\t\tthis.autoSaveManager = null;\n\t\t},\n\t\tonShowMore() {\n\t\t\tif (!this.showAll && !this.forceShowAll) {\n\t\t\t\tthis.showAll = true;\n\t\t\t} else {\n\t\t\t\tthis.$emit(\"loadMore\");\n\t\t\t}\n\t\t},\n\t\tasync onDraftSolutionChange(\n\t\t\tkey: K,\n\t\t\tvalue: IExerciseSolution[K],\n\t\t) {\n\t\t\tawait this.autoSaveManager?.onChange({ [key]: value });\n\t\t},\n\t\tasync onSolutionStateUpdate(\n\t\t\tsolution: IExerciseSolution,\n\t\t\tnewState: ExerciseSolutionState,\n\t\t) {\n\t\t\tthis.instantiateAutoSaveManager(solution, true);\n\t\t\tthis.publishing = true;\n\t\t\ttry {\n\t\t\t\tlogAnalyticsEvent(\"updatedExerciseSolutionState\", {\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\tstate: newState,\n\t\t\t\t});\n\t\t\t\tawait this.autoSaveManager?.onChange({ state: newState });\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t} finally {\n\t\t\t\tthis.autoSaveManager = null;\n\t\t\t\tthis.publishing = false;\n\t\t\t}\n\t\t},\n\t\tinstantiateLocalOnlyAutoSaveManager() {\n\t\t\tthis.autoSaveManager = new AutoSaveManager(\n\t\t\t\tthis.editingSolutionDeepCopy as IExerciseSolution,\n\t\t\t\tasync changes => {\n\t\t\t\t\tif (\"state\" in changes) {\n\t\t\t\t\t\tawait this.onDoneEditing();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tchanges => {\n\t\t\t\t\tif (this.editingSolutionDeepCopy !== null) {\n\t\t\t\t\t\tthis.editingSolutionDeepCopy = {\n\t\t\t\t\t\t\t...this.editingSolutionDeepCopy,\n\t\t\t\t\t\t\t...changes,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tEXERCISE_SOLUTION_AUTO_SAVE_DEBOUNCE_FIELDS,\n\t\t\t\tEXERCISE_SOLUTION_AUTO_SAVE_DEBOUNCE_TIME_MS,\n\t\t\t\tundefined,\n\t\t\t\t() => (this.savingError = true),\n\t\t\t\t() => {\n\t\t\t\t\tthis.saving = false;\n\t\t\t\t\tthis.publishing = false;\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t\tinstantiateAutoSaveManager(forSolution?: IExerciseSolution, revertOnFailure = false) {\n\t\t\tconst solution = forSolution ?? (this.editingSolution as IExerciseSolution);\n\t\t\tthis.autoSaveManager = new AutoSaveManager(\n\t\t\t\tsolution,\n\t\t\t\tasync changes => {\n\t\t\t\t\tif (\"state\" in changes) {\n\t\t\t\t\t\tthis.publishing = true;\n\t\t\t\t\t}\n\t\t\t\t\tawait this.mainStore.updateExerciseSolution({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\texerciseId: this.exercise.id,\n\t\t\t\t\t\tsolution: { ...solution, ...changes },\n\t\t\t\t\t});\n\t\t\t\t\tif (\"state\" in changes) {\n\t\t\t\t\t\tthis.onSolutionStateChange();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tchanges => {\n\t\t\t\t\tthis.saving = true;\n\t\t\t\t\tthis.savingError = false;\n\t\t\t\t\tthis.mainStore.setExerciseSolution({\n\t\t\t\t\t\texerciseId: this.exercise.id,\n\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\t...solution,\n\t\t\t\t\t\t\t...changes,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tEXERCISE_SOLUTION_AUTO_SAVE_DEBOUNCE_FIELDS,\n\t\t\t\tEXERCISE_SOLUTION_AUTO_SAVE_DEBOUNCE_TIME_MS,\n\t\t\t\tundefined,\n\t\t\t\te => {\n\t\t\t\t\tthis.savingError = true;\n\t\t\t\t\tsetErrorNotification(e);\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tthis.saving = false;\n\t\t\t\t\tthis.publishing = false;\n\t\t\t\t},\n\t\t\t\trevertOnFailure,\n\t\t\t);\n\t\t},\n\t\tasync onAddSolution() {\n\t\t\tthis.creatingSolution = true;\n\t\t\ttry {\n\t\t\t\tconst changed = await this.editDraftSolution();\n\t\t\t\tif (changed) {\n\t\t\t\t\tthis.instantiateAutoSaveManager();\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t} finally {\n\t\t\t\tthis.creatingSolution = false;\n\t\t\t}\n\t\t},\n\t\tonEditSolution(solution: IExerciseSolution) {\n\t\t\t//this.editingSolutionId = solution.id;\n\t\t\tthis.editingSolutionDeepCopy = JSON.parse(JSON.stringify(solution));\n\t\t\tthis.instantiateLocalOnlyAutoSaveManager();\n\t\t},\n\t\tasync onDeleteSolution(solution: IExerciseSolution) {\n\t\t\tif (!confirm(getTranslatedString(\"exercise_solution.confirm_deletion\"))) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait this.withLoading(\n\t\t\t\tasync () =>\n\t\t\t\t\tawait this.mainStore.deleteExerciseSolution({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\texerciseId: this.exercise.id,\n\t\t\t\t\t\tsolutionId: solution.id,\n\t\t\t\t\t}),\n\t\t\t\tsetErrorNotification,\n\t\t\t);\n\t\t},\n\t\tasync editDraftSolution(): Promise {\n\t\t\tif (this.editingSolution !== null) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (this.draftSolutions.length > 0) {\n\t\t\t\tthis.editingSolutionId = this.draftSolutions[0].id;\n\t\t\t} else {\n\t\t\t\tconst newSolution = await this.mainStore.createExerciseSolution({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\texerciseId: this.exercise.id,\n\t\t\t\t\tsolution: getBlankExerciseSolution(\n\t\t\t\t\t\tExerciseSolutionState.DRAFT,\n\t\t\t\t\t\tthis.initialEditorContent,\n\t\t\t\t\t),\n\t\t\t\t});\n\t\t\t\tthis.editingSolutionId = newSolution.id;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\tonSolutionStateChange() {\n\t\t\tthis.editingSolutionId = null;\n\t\t\tthis.autoSaveManager = null;\n\t\t\tthis.metaStore.showSuccessFeedback();\n\t\t},\n\t\tasync onDoneEditing() {\n\t\t\tthis.publishing = true;\n\t\t\ttry {\n\t\t\t\tawait this.mainStore.updateExerciseSolution({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\texerciseId: this.exercise.id,\n\t\t\t\t\tsolution: this.editingSolutionDeepCopy as IExerciseSolution,\n\t\t\t\t});\n\t\t\t\tthis.mainStore.setExerciseSolution({\n\t\t\t\t\texerciseId: this.exercise.id,\n\t\t\t\t\tpayload: this.editingSolutionDeepCopy as IExerciseSolution,\n\t\t\t\t});\n\t\t\t\tthis.editingSolutionId = null;\n\t\t\t\tthis.editingSolutionDeepCopy = null;\n\t\t\t\tthis.autoSaveManager = null;\n\t\t\t\tthis.metaStore.showSuccessFeedback();\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t} finally {\n\t\t\t\tthis.publishing = false;\n\t\t\t}\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tsaving: false,\n\t\t\tsavingError: false,\n\t\t\tcreatingSolution: false,\n\t\t\tpublishing: false,\n\t\t\teditingSolutionId: null as string | null,\n\t\t\tautoSaveManager: null as AutoSaveManager | null,\n\t\t\tshowAll: false,\n\t\t\teditingSolutionDeepCopy: null as IExerciseSolution | null,\n\t\t\tSHOW_INITIALLY_COUNT,\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useMetaStore, useMainStore),\n\t\tcanShowMore() {\n\t\t\treturn (\n\t\t\t\tthis.allowShowMore &&\n\t\t\t\t(this.canLoadMore || this.shownSolutions.length < this.nonDraftSolutions.length)\n\t\t\t);\n\t\t},\n\t\tshownSolutions(): IExerciseSolution[] {\n\t\t\tconst ret = [...this.nonDraftSolutions];\n\t\t\tif (this.showFirst) {\n\t\t\t\tret.sort((a, _) =>\n\t\t\t\t\t(this.showFirst ?? []).map(s => String(s)).includes(String(a.id)) ? -1 : 0,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn ret.filter(\n\t\t\t\t(_, i) => this.showAll || this.forceShowAll || i < SHOW_INITIALLY_COUNT,\n\t\t\t);\n\t\t},\n\t\tdraftSolutions(): IExerciseSolution[] {\n\t\t\treturn this.solutions.filter(s => s.state === ExerciseSolutionState.DRAFT);\n\t\t},\n\t\tnonDraftSolutions(): IExerciseSolution[] {\n\t\t\treturn (this.solutions ?? []).filter(s => s.state !== ExerciseSolutionState.DRAFT);\n\t\t},\n\t\teditingSolution(): IExerciseSolution | null {\n\t\t\tif (this.editingSolutionId === null) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn (this.solutions ?? []).find(s => s.id == this.editingSolutionId) ?? null;\n\t\t},\n\t\tthreadPermalink() {\n\t\t\treturn this.$router.resolve(\n\t\t\t\tgetExerciseThreadRoute(this.courseId, this.exercise.id),\n\t\t\t);\n\t\t},\n\t\tsolutionType() {\n\t\t\tconst code =\n\t\t\t\tprogrammingExerciseTypeToLanguageId[\n\t\t\t\t\tthis.exercise.exercise_type as ProgrammingExerciseType\n\t\t\t\t];\n\t\t\treturn code ?? \"text\";\n\t\t},\n\t},\n\tcomponents: {\n\t\tBtn,\n\t\tExerciseSolution,\n\t\tExerciseSolutionEditor,\n\t},\n});\n","import { render } from \"./ExerciseSolutionContainer.vue?vue&type=template&id=16c6d474&ts=true\"\nimport script from \"./ExerciseSolutionContainer.vue?vue&type=script&lang=ts\"\nexport * from \"./ExerciseSolutionContainer.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"mt-2\" }\nconst _hoisted_2 = { class: \"flex flex-col space-y-4 md:flex-row md:space-y-0 md:space-x-4\" }\nconst _hoisted_3 = { class: \"flex items-center\" }\nconst _hoisted_4 = {\n key: 1,\n class: \"cursor-pointer text-muted\",\n for: \"more-filters-btn\"\n}\nconst _hoisted_5 = { class: \"flex items-center w-full\" }\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-xl material-icons-outlined\" }, \" filter_alt_off \", -1)\nconst _hoisted_7 = {\n key: 1,\n class: \"cursor-pointer text-muted\",\n for: \"remove-filters-btn\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_TextInput = _resolveComponent(\"TextInput\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_Chipset = _resolveComponent(\"Chipset\")!\n\n return (_openBlock(), _createElementBlock(\"div\", null, [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_TextInput, {\n modelValue: _ctx.modelValue.text,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => (_ctx.emitUpdate('text', $event))),\n class: \"flex-grow\",\n searchBar: true,\n leftIcon: 'search',\n placeholder: _ctx.$t('filter_results.title')\n }, null, 8, [\"modelValue\", \"placeholder\"]),\n _createElementVNode(\"div\", _hoisted_3, [\n (!_ctx.full)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 0,\n variant: 'icon',\n outline: true,\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.expanded = !_ctx.expanded)),\n class: \"\",\n id: \"more-filters-btn\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n class: _normalizeClass([\"transition-transform duration-200 ease-out transform material-icons-outlined\", { 'rotate-180': _ctx.expanded }])\n }, _toDisplayString(false && _ctx.expanded ? \"expand_less\" : \"expand_more\"), 3)\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true),\n (!_ctx.full)\n ? (_openBlock(), _createElementBlock(\"label\", _hoisted_4, _toDisplayString(_ctx.$t(\"filter_results.more_filters\")), 1))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"mt-4 duration-200 ease-in-out md:mt-6 transition-max-height\", {\n\t\t\t\t\t'max-h-100 overflow-auto': _ctx.full || _ctx.expanded,\n\t\t\t\t\t'max-h-0 overflow-y-hidden': !_ctx.full && !_ctx.expanded,\n\t\t\t\t}])\n }, [\n (_ctx.allowFilterByType)\n ? (_openBlock(), _createBlock(_component_Chipset, {\n key: 0,\n allowMultiple: false,\n options: _ctx.exerciseTypeOptions,\n modelValue: _ctx.modelValue.exercise_types,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => (_ctx.emitUpdate('exercise_types', $event)))\n }, null, 8, [\"options\", \"modelValue\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.allowFilterByState)\n ? (_openBlock(), _createBlock(_component_Chipset, {\n key: 1,\n class: \"my-2\",\n allowMultiple: false,\n options: _ctx.exerciseStateOptions,\n modelValue: _ctx.modelValue.states,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => (_ctx.emitUpdate('states', $event)))\n }, null, 8, [\"options\", \"modelValue\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_Chipset, {\n options: _ctx.tagsOptions,\n modelValue: _ctx.modelValue.tags,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = ($event: any) => (_ctx.emitUpdate('tags', $event)))\n }, null, 8, [\"options\", \"modelValue\"])\n ], 2),\n _createElementVNode(\"div\", _hoisted_5, [\n (!_ctx.emptyFilters)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 0,\n variant: 'icon',\n outline: true,\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.$emit('resetFilters'))),\n class: \"mr-0.5\",\n id: \"remove-filters-btn\"\n }, {\n default: _withCtx(() => [\n _hoisted_6\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true),\n (!_ctx.emptyFilters)\n ? (_openBlock(), _createElementBlock(\"label\", _hoisted_7, _toDisplayString(_ctx.$t(\"filter_results.remove_filters\")), 1))\n : _createCommentVNode(\"\", true)\n ])\n ])\n ]))\n}","\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport { ExerciseSearchFilter } from \"@/api/interfaces\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport Chipset from \"@/components/ui/Chipset.vue\";\nimport { ExerciseState, ExerciseType, Tag } from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport { icons as exerciseTypesIcons } from \"@/assets/exerciseTypesIcons\";\nimport { icons as exerciseStatesIcons } from \"@/assets/exerciseStatesIcons\";\nimport TextInput from \"../ui/TextInput.vue\";\nimport { isEmptyFilter } from \"@/api/utils\";\nimport { mapStores } from \"pinia\";\nimport { useMainStore } from \"@/stores/mainStore\";\nexport default defineComponent({\n\tname: \"ExerciseSearchFilters\",\n\tcomponents: {\n\t\tChipset,\n\t\tBtn,\n\t\tTextInput,\n\t},\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\tfull: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tallowFilterByState: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tallowFilterByType: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\texpanded: false,\n\t\t};\n\t},\n\tmethods: {\n\t\temitUpdate(key: keyof ExerciseSearchFilter, value: unknown) {\n\t\t\tthis.$emit(\"update:modelValue\", {\n\t\t\t\t...this.modelValue,\n\t\t\t\t[key]: value,\n\t\t\t});\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore),\n\t\temptyFilters() {\n\t\t\treturn isEmptyFilter(this.modelValue);\n\t\t},\n\t\ttagsOptions() {\n\t\t\treturn this.mainStore.tags.map((t: Tag) => ({\n\t\t\t\ticons: this.modelValue.tags.includes(t.id as string) ? [\"done-sm\"] : null,\n\t\t\t\tvalue: t.id,\n\t\t\t\tcontent: t.name,\n\t\t\t}));\n\t\t},\n\t\texerciseTypeOptions() {\n\t\t\treturn (Object.keys(ExerciseType) as unknown[] as ExerciseType[])\n\t\t\t\t.filter((key: string | number) => parseInt(key as string) == key) //(ExerciseType[key] as unknown) == 'number')\n\t\t\t\t.map(key => ({\n\t\t\t\t\ticons: exerciseTypesIcons[key],\n\t\t\t\t\tvalue: key,\n\t\t\t\t\tcontent: _(\"exercise_types.\" + key),\n\t\t\t\t}));\n\t\t},\n\t\texerciseStateOptions() {\n\t\t\treturn (Object.keys(ExerciseState) as unknown[] as ExerciseState[])\n\t\t\t\t.filter((key: string | number) => parseInt(key as string) == key) //(ExerciseType[key] as unknown) == 'number')\n\t\t\t\t.map(key => ({\n\t\t\t\t\ticons: exerciseStatesIcons[key],\n\t\t\t\t\tvalue: key,\n\t\t\t\t\tcontent: _(\"exercise_states.\" + key),\n\t\t\t\t\tdescription: _(\"exercise_states_descriptions.\" + key),\n\t\t\t\t}));\n\t\t},\n\t},\n});\n","import { render } from \"./ExerciseSearchFilters.vue?vue&type=template&id=758d8b66&ts=true\"\nimport script from \"./ExerciseSearchFilters.vue?vue&type=script&lang=ts\"\nexport * from \"./ExerciseSearchFilters.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { courseIdMixin, loadingMixin } from \"@/mixins\";\nimport { Exercise as IExercise } from \"@/models\";\nimport { defineComponent } from \"@vue/runtime-core\";\nimport ExerciseSolutionContainer from \"@/components/shared/ExerciseSolution/ExerciseSolutionContainer.vue\";\nimport SlotSkeleton from \"@/components/ui/skeletons/SlotSkeleton.vue\";\nimport Spinner from \"@/components/ui/Spinner.vue\";\nimport VueEternalLoading from \"@ts-pro/vue-eternal-loading/src/components/VueEternalLoading/VueEternalLoading.vue\";\nimport { LoadAction } from \"@ts-pro/vue-eternal-loading\";\nimport { getBlankExerciseSearchFilters } from \"@/api/utils\";\nimport ExerciseSearchFilters from \"@/components/teacher/ExerciseSearchFilters.vue\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport { getDebouncedForFilter, setErrorNotification } from \"@/utils\";\nimport FullExercise from \"@/components/shared/FullExercise.vue\";\nimport { mapStores } from \"pinia\";\nimport { useMainStore } from \"@/stores/mainStore\";\nexport default defineComponent({\n\tname: \"ExerciseThreadList\",\n\tmixins: [courseIdMixin, loadingMixin],\n\tprops: {},\n\twatch: {\n\t\tsearchFilter: {\n\t\t\tasync handler() {\n\t\t\t\tawait this.onFilterChange();\n\t\t\t},\n\t\t\tdeep: true,\n\t\t},\n\t},\n\tasync created() {\n\t\tthis.onFilterChange = getDebouncedForFilter(this.onFilterChange);\n\t\tthis.withFirstLoading(async () => {\n\t\t\tawait this.mainStore.getTags({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\tincludeExerciseCount: false,\n\t\t\t});\n\t\t\tawait this.mainStore.getExercises({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\tfromFirstPage: true,\n\t\t\t\tfilters: null, //{ by_popularity: true },\n\t\t\t});\n\t\t\tthis.fetchSolutionsForNewExercises(true);\n\t\t});\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tisInitialInfiniteLoad: false,\n\t\t\tloadingSolutionsByExercise: {} as Record,\n\t\t\tshowSolutionsByExercise: {} as Record,\n\t\t\tsearchFilter: getBlankExerciseSearchFilters(),\n\t\t};\n\t},\n\tmethods: {\n\t\tgetBlankExerciseSearchFilters,\n\t\tasync onFilterChange() {\n\t\t\tthis.isInitialInfiniteLoad = true;\n\t\t\tawait this.withLoading(\n\t\t\t\tasync () =>\n\t\t\t\t\tawait this.mainStore.getExercises({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\tfromFirstPage: true,\n\t\t\t\t\t\tfilters: {\n\t\t\t\t\t\t\tby_popularity: true,\n\t\t\t\t\t\t\t...this.searchFilter,\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t);\n\t\t\tthis.fetchSolutionsForNewExercises();\n\t\t},\n\t\tgetSolutionCountForExercise(exercise: IExercise): number {\n\t\t\treturn this.mainStore.getPaginatedSolutionsByExerciseId(exercise.id).count;\n\t\t},\n\t\tasync loadMore(exercise: IExercise) {\n\t\t\tawait this.withLoading(\n\t\t\t\tasync () =>\n\t\t\t\t\tawait this.mainStore.getSolutionsByExercise({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\texerciseId: exercise.id,\n\t\t\t\t\t\tfromFirstPage: false,\n\t\t\t\t\t\tfilter: null,\n\t\t\t\t\t}),\n\t\t\t);\n\t\t},\n\t\tfetchSolutionsForNewExercises(force = false) {\n\t\t\tthis.mainStore.exercises\n\t\t\t\t.filter(\n\t\t\t\t\te =>\n\t\t\t\t\t\tforce ||\n\t\t\t\t\t\ttypeof this.mainStore.paginatedSolutionsByExerciseId[e.id] === \"undefined\",\n\t\t\t\t)\n\t\t\t\t.forEach(async e => {\n\t\t\t\t\tthis.loadingSolutionsByExercise[e.id] = true;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.mainStore.getSolutionsByExercise({\n\t\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\t\texerciseId: e.id,\n\t\t\t\t\t\t\tfromFirstPage: true,\n\t\t\t\t\t\t\tfilter: null,\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tsetErrorNotification(e);\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tthis.loadingSolutionsByExercise[e.id] = false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t},\n\t\tasync onLoadMore({ loaded, noMore, error }: LoadAction) {\n\t\t\ttry {\n\t\t\t\tconst moreResults = await this.mainStore.getExercises({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\tfromFirstPage: false,\n\t\t\t\t\tfilters: { by_popularity: true, ...this.searchFilter },\n\t\t\t\t});\n\t\t\t\tif (!moreResults) {\n\t\t\t\t\tnoMore();\n\t\t\t\t} else {\n\t\t\t\t\tloaded();\n\t\t\t\t}\n\t\t\t\tthis.fetchSolutionsForNewExercises();\n\t\t\t} catch {\n\t\t\t\terror();\n\t\t\t}\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore),\n\t},\n\tcomponents: {\n\t\tSlotSkeleton,\n\t\t//Exercise,\n\t\tExerciseSolutionContainer,\n\t\tSpinner,\n\t\tVueEternalLoading,\n\t\tExerciseSearchFilters,\n\t\tBtn,\n\t\tFullExercise,\n\t},\n});\n","import { render } from \"./ExerciseThreadList.vue?vue&type=template&id=2e4773f3&ts=true\"\nimport script from \"./ExerciseThreadList.vue?vue&type=script&lang=ts\"\nexport * from \"./ExerciseThreadList.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, createVNode as _createVNode, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withCtx as _withCtx } from \"vue\"\n\nconst _hoisted_1 = { key: 0 }\nconst _hoisted_2 = {\n key: 0,\n class: \"flex flex-col items-center w-full mx-auto mt-28\"\n}\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"p\", {\n style: {\"font-size\":\"10rem\"},\n class: \"material-icons-outlined opacity-10\"\n}, \" bookmark \", -1)\nconst _hoisted_4 = { class: \"opacity-40\" }\nconst _hoisted_5 = { key: 1 }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_FullExercise = _resolveComponent(\"FullExercise\")!\n const _component_ExerciseSolutionContainer = _resolveComponent(\"ExerciseSolutionContainer\")!\n const _component_SlotSkeleton = _resolveComponent(\"SlotSkeleton\")!\n const _component_Spinner = _resolveComponent(\"Spinner\")!\n const _component_VueEternalLoading = _resolveComponent(\"VueEternalLoading\")!\n\n return (_openBlock(), _createElementBlock(\"div\", null, [\n (!_ctx.firstLoading)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.mainStore.exercises, (exercise) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"mb-14\",\n key: 'e-' + exercise.id\n }, [\n _createVNode(_component_FullExercise, { exercise: exercise }, null, 8, [\"exercise\"]),\n (!_ctx.loadingSolutionsByExercise[exercise.id])\n ? (_openBlock(), _createBlock(_component_ExerciseSolutionContainer, {\n key: 0,\n class: \"mt-4\",\n showTitle: false,\n forceShowAll: true,\n exercise: exercise,\n solutions: _ctx.mainStore.getPaginatedSolutionsByExerciseId(exercise.id).data,\n allowAddSolution: false,\n showExerciseThreadLink: true\n }, null, 8, [\"exercise\", \"solutions\"]))\n : (_openBlock(), _createBlock(_component_SlotSkeleton, { key: 1 }))\n ]))\n }), 128)),\n (_ctx.mainStore.exercises.length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _hoisted_3,\n _createElementVNode(\"h2\", _hoisted_4, _toDisplayString(_ctx.$t(\"misc.no_favorites\")), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createVNode(_component_SlotSkeleton),\n _createVNode(_component_SlotSkeleton),\n _createVNode(_component_SlotSkeleton),\n _createVNode(_component_SlotSkeleton)\n ])),\n _createVNode(_component_VueEternalLoading, {\n load: _ctx.onLoadMore,\n \"is-initial\": _ctx.isInitialInfiniteLoad,\n \"onUpdate:is-initial\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.isInitialInfiniteLoad) = $event))\n }, {\n loading: _withCtx(() => [\n _createVNode(_component_Spinner)\n ]),\n \"no-more\": _withCtx(() => [\n _createTextVNode(\"   \")\n ]),\n _: 1\n }, 8, [\"load\", \"is-initial\"])\n ]))\n}","\nimport { ExerciseSearchFilter, ExerciseSolutionSearchFilter } from \"@/api\";\nimport { courseIdMixin, loadingMixin } from \"@/mixins\";\nimport { defineComponent } from \"@vue/runtime-core\";\nimport ExerciseSolutionContainer from \"@/components/shared/ExerciseSolution/ExerciseSolutionContainer.vue\";\nimport SlotSkeleton from \"@/components/ui/skeletons/SlotSkeleton.vue\";\nimport Spinner from \"@/components/ui/Spinner.vue\";\nimport VueEternalLoading from \"@ts-pro/vue-eternal-loading/src/components/VueEternalLoading/VueEternalLoading.vue\";\nimport { LoadAction } from \"@ts-pro/vue-eternal-loading\";\nimport { getBlankExerciseSearchFilters } from \"@/api/utils\";\nimport FullExercise from \"@/components/shared/FullExercise.vue\";\nimport { logAnalyticsEvent, setErrorNotification } from \"@/utils\";\nimport { mapStores } from \"pinia\";\nimport { useMainStore } from \"@/stores/mainStore\";\nexport default defineComponent({\n\tname: \"FavoriteContentsList\",\n\tmixins: [courseIdMixin, loadingMixin],\n\tprops: {},\n\tasync created() {\n\t\tthis.withFirstLoading(async () => {\n\t\t\tawait this.mainStore.getTags({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\tincludeExerciseCount: false,\n\t\t\t});\n\t\t\tawait this.mainStore.getExercises({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\tfromFirstPage: true,\n\t\t\t\tfilters: { with_bookmarked_solutions: true } as ExerciseSearchFilter,\n\t\t\t});\n\t\t\tthis.fetchSolutionsForNewExercises(true);\n\t\t});\n\t\tlogAnalyticsEvent(\"viewedSavedContent\", { courseId: this.courseId });\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tisInitialInfiniteLoad: false,\n\t\t\tloadingSolutionsByExercise: {} as Record,\n\t\t\tshowSolutionsByExercise: {} as Record,\n\t\t\t//searchFilter: getBlankExerciseSearchFilters(),\n\t\t};\n\t},\n\tmethods: {\n\t\tgetBlankExerciseSearchFilters,\n\t\tfetchSolutionsForNewExercises(force = false) {\n\t\t\tthis.mainStore.exercises\n\t\t\t\t.filter(\n\t\t\t\t\te =>\n\t\t\t\t\t\tforce ||\n\t\t\t\t\t\ttypeof this.mainStore.paginatedSolutionsByExerciseId[e.id] === \"undefined\",\n\t\t\t\t)\n\t\t\t\t.forEach(async e => {\n\t\t\t\t\tthis.loadingSolutionsByExercise[e.id] = true;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.mainStore.getSolutionsByExercise({\n\t\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\t\texerciseId: e.id,\n\t\t\t\t\t\t\tfromFirstPage: true,\n\t\t\t\t\t\t\tfilter: { bookmarked: true } as ExerciseSolutionSearchFilter,\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tsetErrorNotification(e);\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tthis.loadingSolutionsByExercise[e.id] = false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t},\n\t\tasync onLoadMore({ loaded, noMore, error }: LoadAction) {\n\t\t\ttry {\n\t\t\t\tconst moreResults = await this.mainStore.getExercises({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\tfromFirstPage: false,\n\t\t\t\t\tfilters: { with_bookmarked_solutions: true } as ExerciseSearchFilter,\n\t\t\t\t});\n\t\t\t\tif (!moreResults) {\n\t\t\t\t\tnoMore();\n\t\t\t\t} else {\n\t\t\t\t\tloaded();\n\t\t\t\t}\n\t\t\t\tthis.fetchSolutionsForNewExercises();\n\t\t\t} catch {\n\t\t\t\terror();\n\t\t\t}\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore),\n\t},\n\tcomponents: {\n\t\tSlotSkeleton,\n\t\t// Exercise,\n\t\tExerciseSolutionContainer,\n\t\tSpinner,\n\t\tVueEternalLoading,\n\t\tFullExercise,\n\t},\n});\n","import { render } from \"./FavoriteContentsList.vue?vue&type=template&id=b974687c&ts=true\"\nimport script from \"./FavoriteContentsList.vue?vue&type=script&lang=ts\"\nexport * from \"./FavoriteContentsList.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, createBlock as _createBlock, TransitionGroup as _TransitionGroup } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"flex items-center w-full mt-8 mb-6\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mr-1 text-base material-icons-outlined\" }, \" add \", -1)\nconst _hoisted_3 = { class: \"-mx-5 -my-2.5\" }\nconst _hoisted_4 = { class: \"flex items-center align-top\" }\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mr-2 material-icons-outlined\" }, \" file_download \", -1)\nconst _hoisted_6 = { class: \"flex items-center align-top\" }\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mr-2 material-icons-outlined\" }, \" file_upload \", -1)\nconst _hoisted_8 = { key: 1 }\nconst _hoisted_9 = {\n key: 2,\n class: \"flex flex-col space-y-4\"\n}\nconst _hoisted_10 = {\n key: 3,\n class: \"flex flex-col w-full mt-12 mb-12 text-center select-none\"\n}\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"p\", {\n style: {\"font-size\":\"10rem\"},\n class: \"material-icons-outlined opacity-10\"\n}, \"topic\", -1)\nconst _hoisted_12 = { class: \"opacity-40\" }\nconst _hoisted_13 = {\n key: 4,\n class: \"flex flex-col w-full mt-12 mb-12 text-center select-none\"\n}\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"p\", {\n style: {\"font-size\":\"10rem\"},\n class: \"material-icons-outlined opacity-10\"\n}, \" search_off \", -1)\nconst _hoisted_15 = { class: \"opacity-40\" }\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-full h-1 bg-gray-200 rounded-md\" }, null, -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ExerciseSearchFilters = _resolveComponent(\"ExerciseSearchFilters\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_DropdownMenu = _resolveComponent(\"DropdownMenu\")!\n const _component_ExerciseEditorWrapper = _resolveComponent(\"ExerciseEditorWrapper\")!\n const _component_ExerciseEditorWrapperSkeleton = _resolveComponent(\"ExerciseEditorWrapperSkeleton\")!\n const _component_Spinner = _resolveComponent(\"Spinner\")!\n const _component_VueEternalLoading = _resolveComponent(\"VueEternalLoading\")!\n const _component_Dialog = _resolveComponent(\"Dialog\")!\n const _component_ExerciseImporter = _resolveComponent(\"ExerciseImporter\")!\n\n return (_openBlock(), _createElementBlock(\"div\", null, [\n _createElementVNode(\"div\", null, [\n _createVNode(_component_ExerciseSearchFilters, {\n modelValue: _ctx.searchFilter,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.searchFilter) = $event)),\n onResetFilters: _cache[1] || (_cache[1] = ($event: any) => (_ctx.searchFilter = _ctx.getBlankExerciseSearchFilters()))\n }, null, 8, [\"modelValue\"])\n ]),\n (_ctx.canCreateAndEditExercises)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Btn, {\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.onAddExercise())),\n loading: _ctx.localLoading,\n class: \"ml-auto\"\n }, {\n default: _withCtx(() => [\n _hoisted_2,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t(\"course_exercises.new_exercise\")), 1)\n ]),\n _: 1\n }, 8, [\"loading\"]),\n _createVNode(_component_DropdownMenu, {\n class: \"-mr-4\",\n expanded: _ctx.dropdownExpanded,\n onToggleExpanded: _cache[5] || (_cache[5] = ($event: any) => (_ctx.dropdownExpanded = !_ctx.dropdownExpanded)),\n placement: 'right'\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_Btn, {\n outline: true,\n class: \"px-8 pt-2 pb-2\",\n variant: 'transparent',\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.onExportExercises()))\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_4, [\n _hoisted_5,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t(\"course_exercises.export_exercises\")), 1)\n ])\n ]),\n _: 1\n }),\n _createVNode(_component_Btn, {\n outline: true,\n class: \"px-8 pt-2 pb-2\",\n variant: 'transparent',\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.showExerciseImporter = true))\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_6, [\n _hoisted_7,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t(\"course_exercises.import_exercises\")), 1)\n ])\n ]),\n _: 1\n })\n ])\n ]),\n _: 1\n }, 8, [\"expanded\"])\n ]))\n : _createCommentVNode(\"\", true),\n (!_ctx.firstLoading)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _createVNode(_TransitionGroup, { name: \"quick-bounce\" }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.mainStore.exercises, (exercise) => {\n return (_openBlock(), _createBlock(_component_ExerciseEditorWrapper, {\n key: 'course-' + _ctx.courseId + '-exercise-' + exercise.id,\n exercise: exercise,\n ref_for: true,\n ref: 'course-' + _ctx.courseId + '-exercise-' + exercise.id,\n id: 'course-' + _ctx.courseId + '-exercise-' + exercise.id,\n onDelete: ($event: any) => (_ctx.onDeleteExercise(exercise)),\n onCloneExercise: ($event: any) => (_ctx.onCloneExercise(exercise)),\n editable: _ctx.canCreateAndEditExercises\n }, null, 8, [\"exercise\", \"id\", \"onDelete\", \"onCloneExercise\", \"editable\"]))\n }), 128))\n ]),\n _: 1\n })\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [\n _createVNode(_component_ExerciseEditorWrapperSkeleton),\n _createVNode(_component_ExerciseEditorWrapperSkeleton),\n _createVNode(_component_ExerciseEditorWrapperSkeleton),\n _createVNode(_component_ExerciseEditorWrapperSkeleton)\n ])),\n (!_ctx.firstLoading && _ctx.mainStore.exercises.length === 0 && _ctx.emptyFilters)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_10, [\n _hoisted_11,\n _createElementVNode(\"h2\", _hoisted_12, _toDisplayString(_ctx.$t(\"course_exercises.no_exercises\")), 1)\n ]))\n : (!_ctx.firstLoading && _ctx.mainStore.exercises.length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [\n _hoisted_14,\n _createElementVNode(\"h2\", _hoisted_15, _toDisplayString(_ctx.$t(\"course_exercises.no_matching_exercises\")), 1)\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_VueEternalLoading, {\n load: _ctx.onLoadMore,\n \"is-initial\": _ctx.isInitialInfiniteLoad,\n \"onUpdate:is-initial\": _cache[6] || (_cache[6] = ($event: any) => ((_ctx.isInitialInfiniteLoad) = $event))\n }, {\n loading: _withCtx(() => [\n _createVNode(_component_Spinner)\n ]),\n \"no-more\": _withCtx(() => [\n _hoisted_16\n ]),\n _: 1\n }, 8, [\"load\", \"is-initial\"]),\n _createVNode(_component_Dialog, {\n showDialog: _ctx.showDialog,\n \"confirm-only\": _ctx.dialogData.confirmOnly,\n onYes: _cache[7] || (_cache[7] = ($event: any) => (_ctx.dialogData.onYes?.())),\n onNo: _cache[8] || (_cache[8] = ($event: any) => (_ctx.dialogData.onNo?.())),\n \"yes-text\": _ctx.dialogData.yesText,\n \"no-text\": _ctx.dialogData.noText\n }, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.dialogData.title), 1)\n ]),\n body: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.dialogData.text), 1)\n ]),\n _: 1\n }, 8, [\"showDialog\", \"confirm-only\", \"yes-text\", \"no-text\"]),\n _createVNode(_component_Dialog, {\n \"show-dialog\": _ctx.showExerciseImporter,\n onNo: _cache[10] || (_cache[10] = ($event: any) => (_ctx.showExerciseImporter = false)),\n onYes: _cache[11] || (_cache[11] = ($event: any) => (\n\t\t\t\t_ctx.importedExercises.length === 0 ? (_ctx.showExerciseImporter = false) : _ctx.onImportDone()\n\t\t\t)),\n dismissible: false,\n footerBorder: true,\n confirmOnly: _ctx.importedExercises.length === 0,\n noText: _ctx.$t('dialog.default_cancel_text'),\n disableOk: _ctx.importLoading,\n yesText: \n\t\t\t\t_ctx.importedExercises.length === 0\n\t\t\t\t\t? _ctx.$t('dialog.default_cancel_text')\n\t\t\t\t\t: _ctx.importLoading\n\t\t\t\t\t? _ctx.$t('exercise_import.importing')\n\t\t\t\t\t: _ctx.$t('exercise_import.import')\n\t\t\t,\n fullWidth: true\n }, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"course_exercises.import_exercises_title\")), 1)\n ]),\n body: _withCtx(() => [\n _createVNode(_component_ExerciseImporter, {\n onUpdateExercises: _cache[9] || (_cache[9] = ($event: any) => (_ctx.importedExercises = $event)),\n class: \"mt-4 text-darkText\"\n })\n ]),\n _: 1\n }, 8, [\"show-dialog\", \"confirmOnly\", \"noText\", \"disableOk\", \"yesText\"])\n ]))\n}","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, vShow as _vShow, withDirectives as _withDirectives, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = [\"id\"]\nconst _hoisted_2 = {\n style: {\"z-index\":\"50\"},\n class: \"absolute bottom-0 right-0 hidden mr-1 -mb-2\"\n}\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-xl text-danger-dark material-icons-outlined\" }, \" delete \", -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_MinimalExercisePreview = _resolveComponent(\"MinimalExercisePreview\")!\n const _component_ExerciseEditor = _resolveComponent(\"ExerciseEditor\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"relative my-4\",\n id: 'editor-' + _ctx.exercise.id\n }, [\n _withDirectives(_createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_Btn, {\n class: \"mb-4\",\n outline: true,\n size: 'lg',\n variant: 'icon',\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('delete')))\n }, {\n default: _withCtx(() => [\n _hoisted_3\n ]),\n _: 1\n })\n ], 512), [\n [_vShow, _ctx.showEditor]\n ]),\n _withDirectives(_createVNode(_component_MinimalExercisePreview, {\n exercise: _ctx.exercise,\n hoverable: true,\n selectable: false,\n onEdit: _cache[1] || (_cache[1] = ($event: any) => (_ctx.toggleExpand())),\n showEdit: _ctx.editable\n }, null, 8, [\"exercise\", \"showEdit\"]), [\n [_vShow, !_ctx.showEditor]\n ]),\n (_ctx.showEditor)\n ? (_openBlock(), _createBlock(_component_ExerciseEditor, {\n key: 0,\n saving: _ctx.saving,\n onClose: _cache[2] || (_cache[2] = ($event: any) => (_ctx.toggleExpand())),\n modelValue: _ctx.exercise,\n onDelete: _cache[3] || (_cache[3] = ($event: any) => (_ctx.$emit('delete'))),\n onCloneExercise: _ctx.onClone\n }, null, 8, [\"saving\", \"modelValue\", \"onCloneExercise\"]))\n : _createCommentVNode(\"\", true)\n ], 8, _hoisted_1))\n}","import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, vShow as _vShow, withDirectives as _withDirectives, Transition as _Transition, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, createSlots as _createSlots, createBlock as _createBlock, renderList as _renderList, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = { class: \"relative\" }\nconst _hoisted_2 = {\n style: {\"z-index\":\"59\"},\n class: \"absolute top-0 left-0 items-center w-full h-full\"\n}\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"div\", {\n style: {\"width\":\"100% !important\",\"height\":\"100% !important\"},\n class: \"absolute z-10 flex w-full h-full transition-none bg-gray-900 rounded opacity-40\"\n}, null, -1)\nconst _hoisted_4 = { class: \"sticky z-50 mx-auto mt-40 mb-40 text-center rounded -translate-y-3/4 md:top-1/4 md:w-max\" }\nconst _hoisted_5 = {\n style: {\"font-size\":\"10rem\"},\n class: \"opacity-50 material-icons-outlined text-lightText\"\n}\nconst _hoisted_6 = {\n key: 0,\n style: {\"padding-top\":\"1px\"},\n class: \"flex items-center mb-8\"\n}\nconst _hoisted_7 = { class: \"pt-2\" }\nconst _hoisted_8 = {\n key: 0,\n class: \"text-muted\"\n}\nconst _hoisted_9 = {\n key: 1,\n class: \"flex\"\n}\nconst _hoisted_10 = { class: \"flex space-x-1\" }\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-base material-icons\" }, \" delete \", -1)\nconst _hoisted_12 = {\n key: 0,\n style: {\"box-shadow\":\"0px 15px 15px -15px rgb(0 0 0 / 20%)\"},\n class: \"sticky z-50 flex items-start h-20 py-4 -mx-5 space-x-2 bg-white top-14 align-center\"\n}\nconst _hoisted_13 = { class: \"flex mx-auto space-x-2\" }\nconst _hoisted_14 = { class: \"mt-3 text-muted\" }\nconst _hoisted_15 = { class: \"ml-auto w-96\" }\nconst _hoisted_16 = {\n key: 1,\n class: \"flex flex-col\"\n}\nconst _hoisted_17 = {\n key: 0,\n class: \"flex flex-col items-start my-4 space-y-6 lg:space-x-8 lg:space-y-0 lg:flex-row\"\n}\nconst _hoisted_18 = {\n key: 0,\n class: \"w-full mt-0.5 mr-auto lg:w-4/12\"\n}\nconst _hoisted_19 = { class: \"flex space-x-1\" }\nconst _hoisted_20 = {\n key: 1,\n class: \"self-start w-full mr-auto lg:w-3/12\"\n}\nconst _hoisted_21 = { class: \"flex flex-col my-6 space-y-4 xl:flex-row xl:space-x-2 xl:space-y-0\" }\nconst _hoisted_22 = { class: \"error-msg\" }\nconst _hoisted_23 = {\n key: 1,\n class: \"relative w-full\"\n}\nconst _hoisted_24 = { class: \"absolute top-2 left-1.5 origin-0 fixed-label w-full\" }\nconst _hoisted_25 = {\n key: 1,\n class: \"flex items-start w-full mb-8 space-y-1 md:space-y-0\"\n}\nconst _hoisted_26 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mr-1.5 text-base material-icons-outlined\" }, \" add \", -1)\nconst _hoisted_27 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mr-1.5 text-base material-icons-outlined\" }, \" edit \", -1)\nconst _hoisted_28 = { class: \"flex items-start ml-4\" }\nconst _hoisted_29 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mt-1.25px material-icons-outlined inline-icon text-muted\" }, \"info\", -1)\nconst _hoisted_30 = { class: \"ml-1.5 text-sm text-muted\" }\nconst _hoisted_31 = {\n key: 2,\n class: \"mb-12\"\n}\nconst _hoisted_32 = { class: \"mb-4\" }\nconst _hoisted_33 = { key: 0 }\nconst _hoisted_34 = {\n key: 1,\n class: \"relative w-full\"\n}\nconst _hoisted_35 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"ml-1 mr-1 text-base material-icons-outlined\" }, \" science \", -1)\nconst _hoisted_36 = { class: \"flex items-center p-3 pl-4 space-x-2 rounded-tr-sm bg-light\" }\nconst _hoisted_37 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"my-auto material-icons-outlined icon-light\" }, \" code \", -1)\nconst _hoisted_38 = {\n key: 1,\n class: \"flex flex-col\"\n}\nconst _hoisted_39 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mx-auto mt-24 opacity-30 text-8xl material-icons-outlined\" }, \" code \", -1)\nconst _hoisted_40 = { class: \"px-4 mx-auto text-muted\" }\nconst _hoisted_41 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons\" }, \"delete\", -1)\nconst _hoisted_42 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mr-1 text-base material-icons-outlined\" }, \" add \", -1)\nconst _hoisted_43 = {\n key: 3,\n class: \"pb-4 mb-6\"\n}\nconst _hoisted_44 = {\n class: \"mb-1 ml-1 text-primary\",\n style: {\"width\":\"24px\",\"height\":\"24px\"},\n viewBox: \"0 0 24 24\"\n}\nconst _hoisted_45 = /*#__PURE__*/_createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M3,3H21V21H3V3M13.71,17.86C14.21,18.84 15.22,19.59 16.8,19.59C18.4,19.59 19.6,18.76 19.6,17.23C19.6,15.82 18.79,15.19 17.35,14.57L16.93,14.39C16.2,14.08 15.89,13.87 15.89,13.37C15.89,12.96 16.2,12.64 16.7,12.64C17.18,12.64 17.5,12.85 17.79,13.37L19.1,12.5C18.55,11.54 17.77,11.17 16.7,11.17C15.19,11.17 14.22,12.13 14.22,13.4C14.22,14.78 15.03,15.43 16.25,15.95L16.67,16.13C17.45,16.47 17.91,16.68 17.91,17.26C17.91,17.74 17.46,18.09 16.76,18.09C15.93,18.09 15.45,17.66 15.09,17.06L13.71,17.86M13,11.25H8V12.75H9.5V20H11.25V12.75H13V11.25Z\"\n}, null, -1)\nconst _hoisted_46 = [\n _hoisted_45\n]\nconst _hoisted_47 = {\n key: 4,\n class: \"mb-6\"\n}\nconst _hoisted_48 = { class: \"flex space-x-1\" }\nconst _hoisted_49 = { key: 5 }\nconst _hoisted_50 = { class: \"flex space-x-1\" }\nconst _hoisted_51 = {\n key: 2,\n class: \"mt-6\"\n}\nconst _hoisted_52 = { class: \"flex mt-1 space-x-1\" }\nconst _hoisted_53 = { class: \"mb-6\" }\nconst _hoisted_54 = {\n key: 0,\n class: \"mb-4 -mt-4\"\n}\nconst _hoisted_55 = { class: \"error-msg\" }\nconst _hoisted_56 = {\n key: 1,\n class: \"mb-8 -mt-4 banner banner-danger\"\n}\nconst _hoisted_57 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined\" }, \"warning\", -1)\nconst _hoisted_58 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mr-1 text-base material-icons-outlined\" }, \" add \", -1)\nconst _hoisted_59 = {\n key: 4,\n class: \"mt-8\"\n}\nconst _hoisted_60 = { class: \"mb-8\" }\nconst _hoisted_61 = {\n key: 0,\n class: \"mb-4 -mt-4\"\n}\nconst _hoisted_62 = { class: \"error-msg\" }\nconst _hoisted_63 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mr-1 text-base material-icons-outlined\" }, \" add \", -1)\nconst _hoisted_64 = {\n key: 5,\n class: \"mt-8\"\n}\nconst _hoisted_65 = { class: \"mb-8\" }\nconst _hoisted_66 = { key: 0 }\nconst _hoisted_67 = { class: \"mb-2 text-muted\" }\nconst _hoisted_68 = /*#__PURE__*/_createElementVNode(\"a\", {\n class: \"link\",\n href: \"https://nodejs.org/api/assert.html\",\n target: \"_blank\"\n}, [\n /*#__PURE__*/_createElementVNode(\"pre\", { class: \"inline text-sm\" }, \"assert\"),\n /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined ml-0.5 inline-icon\" }, \" open_in_new \")\n], -1)\nconst _hoisted_69 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mr-1 text-base material-icons-outlined\" }, \" add \", -1)\nconst _hoisted_70 = {\n key: 0,\n class: \"mt-2\"\n}\nconst _hoisted_71 = { class: \"list-disc list-inside\" }\nconst _hoisted_72 = { class: \"flex w-full mt-10\" }\nconst _hoisted_73 = {\n key: 0,\n class: \"flex items-center\"\n}\nconst _hoisted_74 = { class: \"ml-2\" }\nconst _hoisted_75 = { class: \"text-lg text-muted\" }\nconst _hoisted_76 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-2xl icon-light material-icons-outlined\" }, \" copy_all \", -1)\nconst _hoisted_77 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-2xl text-danger-dark material-icons-outlined\" }, \" delete \", -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_CloudSaveStatus = _resolveComponent(\"CloudSaveStatus\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_Tooltip = _resolveComponent(\"Tooltip\")!\n const _component_NumberInput = _resolveComponent(\"NumberInput\")!\n const _component_Dropdown = _resolveComponent(\"Dropdown\")!\n const _component_TextInput = _resolveComponent(\"TextInput\")!\n const _component_TextEditor = _resolveComponent(\"TextEditor\")!\n const _component_ClozeExercise = _resolveComponent(\"ClozeExercise\")!\n const _component_CodeExecutionResults = _resolveComponent(\"CodeExecutionResults\")!\n const _component_CodeEditor = _resolveComponent(\"CodeEditor\")!\n const _component_SlotSkeleton = _resolveComponent(\"SlotSkeleton\")!\n const _component_Toggle = _resolveComponent(\"Toggle\")!\n const _component_TagInput = _resolveComponent(\"TagInput\")!\n const _component_ArticleHandle = _resolveComponent(\"ArticleHandle\")!\n const _component_ChoiceEditor = _resolveComponent(\"ChoiceEditor\")!\n const _component_draggable = _resolveComponent(\"draggable\")!\n const _component_ExerciseEditor = _resolveComponent(\"ExerciseEditor\", true)!\n const _component_TestCaseEditor = _resolveComponent(\"TestCaseEditor\")!\n const _component_Dialog = _resolveComponent(\"Dialog\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_Transition, { name: \"fade-delay\" }, {\n default: _withCtx(() => [\n _withDirectives(_createElementVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"p\", _hoisted_5, _toDisplayString(_ctx.exerciseLocked ? \"lock\" : \"lock_open\"), 1),\n _createElementVNode(\"h3\", {\n class: _normalizeClass([[!_ctx.exerciseLocked ? 'opacity-0' : 'opacity-100'], \"pt-1 mx-auto rounded-t md:bg-transparent text-lightText\"]),\n style: {\"text-shadow\":\"0.5px 0.5px 4px rgb(0 0 0 / 50%)\"}\n }, _toDisplayString(_ctx.$t(\"exercise_editor.currently_locked_by\")) + \" \" + _toDisplayString(_ctx.modelValue?.locked_by?.full_name), 3),\n _createElementVNode(\"p\", {\n class: _normalizeClass([[!_ctx.exerciseLocked ? 'opacity-0' : 'opacity-100'], \"pb-1 rounded-b md:bg-transparent text-lightText md:mx-2 md:px-2\"]),\n style: {\"text-shadow\":\"0.5px 0.5px 4px rgb(0 0 0 / 50%)\"}\n }, _toDisplayString(_ctx.$t(\"event_editor.lock_stand_by\")), 3)\n ])\n ], 512), [\n [_vShow, _ctx.exerciseLocked]\n ])\n ]),\n _: 1\n }),\n (false && _ctx.modelValue.state !== _ctx.ExerciseState.DRAFT && _ctx.preventEdit)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n onClick: _cache[0] || (_cache[0] = \n//@ts-ignore\n(...args) => (_ctx.onFocusNonDraft && _ctx.onFocusNonDraft(...args))),\n style: {\"z-index\":\"20\"},\n class: \"absolute top-0 left-0 w-full h-full bg-gray-500 bg-opacity-0 cursor-pointer\"\n }))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_Card, {\n loading: _ctx.fetchingExercise,\n focusable: !_ctx.subExercise,\n hoverable: false,\n borderLess: _ctx.subExercise,\n filled: _ctx.subExercise,\n class: _normalizeClass({\n\t\t\t\t'bg-gray-50': false && _ctx.modelValue.state === _ctx.ExerciseState.DRAFT,\n\t\t\t\t'mb-6': _ctx.subExercise,\n\t\t\t\t'transition-shadow duration-100 focus-within-shadow-elevation-2': !_ctx.subExercise,\n\t\t\t})\n }, {\n header: _withCtx(() => [\n (!_ctx.subExercise)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _createElementVNode(\"h3\", _hoisted_7, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"exercise_editor.exercise_editor_title\")) + \" \", 1),\n (_ctx.modelValue.state === _ctx.ExerciseState.DRAFT)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_8, \"(\" + _toDisplayString(_ctx.$t(\"exercise_editor.draft_notice\")) + \")\", 1))\n : _createCommentVNode(\"\", true)\n ]),\n _createVNode(_component_CloudSaveStatus, {\n class: \"mt-1 ml-auto mr-1\",\n saving: _ctx.saving,\n hadError: _ctx.savingError\n }, null, 8, [\"saving\", \"hadError\"]),\n _createVNode(_component_Btn, {\n size: 'lg',\n variant: 'icon',\n tooltip: _ctx.$t('misc.close'),\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$emit('close')))\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n class: _normalizeClass([\"transition-transform duration-200 ease-out transform material-icons-outlined\", { 'rotate-180': false && _ctx.showEditor }])\n }, \" close \", 2)\n ]),\n _: 1\n }, 8, [\"tooltip\"])\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"w-1/5 mt-3\", { 'mb-8': _ctx.cloze }])\n }, [\n _createVNode(_component_NumberInput, {\n max: 100,\n min: 0,\n modelValue: _ctx.modelValue.child_weight,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => (_ctx.onBaseExerciseChange('child_weight', $event))),\n class: \"w-full\"\n }, _createSlots({\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_10, [\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t(\"exercise_editor.sub_exercise_weight\")), 1),\n _createVNode(_component_Tooltip, {\n class: \"transform scale-125\",\n \"text-code\": 'exercise_editor.sub_exercise_weight'\n }, null, 8, [\"text-code\"])\n ])\n ]),\n _: 2\n }, [\n (_ctx.invalidChildWeight)\n ? {\n name: \"errors\",\n fn: _withCtx(() => [\n _createTextVNode(\"   \")\n ]),\n key: \"0\"\n }\n : undefined\n ]), 1032, [\"modelValue\"])\n ], 2),\n (!_ctx.cloze)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 0,\n outline: true,\n variant: 'icon',\n tooltip: _ctx.$t('exercise_editor.delete_sub_exercise'),\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.$emit('delete'))),\n class: \"ml-auto -mt-1 -mr-2.5 transition-opacity duration-100 opacity-50 hover:opacity-100\"\n }, {\n default: _withCtx(() => [\n _hoisted_11\n ]),\n _: 1\n }, 8, [\"tooltip\"]))\n : _createCommentVNode(\"\", true)\n ]))\n ]),\n body: _withCtx(() => [\n false\n ? (_openBlock(), _createBlock(_Transition, {\n key: 0,\n name: \"fade\"\n }, {\n default: _withCtx(() => [\n (_ctx.showStickyStateDropdown)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_12, [\n _createElementVNode(\"div\", _hoisted_13, [\n _createElementVNode(\"p\", _hoisted_14, _toDisplayString(_ctx.$t(\"exercise_editor.exercise_state\")), 1),\n _createElementVNode(\"div\", _hoisted_15, [\n _createVNode(_component_Dropdown, {\n id: _ctx.stateDropdownId + '-sticky',\n options: _ctx.exerciseStateOptions,\n modelValue: _ctx.modelValue.state,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = ($event: any) => (_ctx.onExerciseStateChange($event)))\n }, null, 8, [\"id\", \"options\", \"modelValue\"])\n ])\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true),\n (!_ctx.subExercise || !_ctx.cloze)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_16, [\n (!_ctx.subExercise || !_ctx.cloze)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [\n (!_ctx.subExercise)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_18, [\n _createVNode(_component_TextInput, {\n modelValue: _ctx.modelValue.label,\n fixedLabel: true,\n placeholder: _ctx.$t('exercise_preview.unnamed_exercise'),\n onBlur: _cache[5] || (_cache[5] = ($event: any) => (_ctx.onBlur())),\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = ($event: any) => (_ctx.onBaseExerciseChange('label', $event)))\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_19, [\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t(\"exercise_editor.exercise_label\")), 1),\n _createVNode(_component_Tooltip, {\n class: \"transform scale-125\",\n \"text-code\": 'exercise_editor.label'\n }, null, 8, [\"text-code\"])\n ])\n ]),\n _: 1\n }, 8, [\"modelValue\", \"placeholder\"])\n ]))\n : _createCommentVNode(\"\", true),\n (!_ctx.subExercise)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_20, [\n _createVNode(_component_Dropdown, {\n id: _ctx.stateDropdownId,\n options: _ctx.exerciseStateOptions,\n modelValue: _ctx.modelValue.state,\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = ($event: any) => (_ctx.onExerciseStateChange($event)))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"exercise_editor.exercise_state\")), 1)\n ]),\n _: 1\n }, 8, [\"id\", \"options\", \"modelValue\"])\n ]))\n : _createCommentVNode(\"\", true),\n (!_ctx.cloze)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 2,\n class: _normalizeClass([{ 'md:ml-auto': !_ctx.subExercise }, \"flex flex-col w-full md:flex-row lg:w-5/12\"])\n }, [\n _createVNode(_component_Dropdown, {\n class: \"w-full\",\n id: 'exercise_type_' + _ctx.elementId,\n options: _ctx.exerciseTypeOptions,\n modelValue: _ctx.modelValue.exercise_type,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = ($event: any) => (_ctx.onExerciseTypeChange($event)))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"exercise_editor.exercise_type\")), 1)\n ]),\n _: 1\n }, 8, [\"id\", \"options\", \"modelValue\"])\n ], 2))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_21, [\n (!_ctx.cloze)\n ? (_openBlock(), _createBlock(_component_TextEditor, {\n key: 0,\n modelValue: _ctx.modelValue.text,\n onReady: _cache[9] || (_cache[9] = ($event: any) => (_ctx.textEditorInstance = $event)),\n onSelectionChange: _cache[10] || (_cache[10] = ($event: any) => (_ctx.onTextSelectionChange($event))),\n onBlur: _cache[11] || (_cache[11] = ($event: any) => (_ctx.onBlur())),\n \"onUpdate:modelValue\": _cache[12] || (_cache[12] = ($event: any) => (_ctx.onBaseExerciseChange('text', $event))),\n class: \"w-full\"\n }, _createSlots({\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"exercise_editor.exercise_text\")) + \" \", 1)\n ]),\n _: 2\n }, [\n (_ctx.v$.modelValue.text.$errors.length > 0)\n ? {\n name: \"errors\",\n fn: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.v$.modelValue.text.$errors, (error) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"input-errors\",\n key: error.$uid\n }, [\n _createElementVNode(\"div\", _hoisted_22, _toDisplayString(_ctx.$t(\"validation_errors.exercise.\" + error.$uid)), 1)\n ]))\n }), 128))\n ]),\n key: \"0\"\n }\n : undefined\n ]), 1032, [\"modelValue\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.modelValue.exercise_type === _ctx.ExerciseType.COMPLETION)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_23, [\n _createElementVNode(\"p\", _hoisted_24, _toDisplayString(_ctx.$t(\"misc.preview\")), 1),\n _createVNode(_component_ClozeExercise, { slot: _ctx.modelValueWrapperSlot }, null, 8, [\"slot\"])\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n (_ctx.modelValue.exercise_type === _ctx.ExerciseType.COMPLETION)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_25, [\n _createVNode(_component_Btn, {\n onClick: _cache[13] || (_cache[13] = ($event: any) => (_ctx.onAddCloze())),\n loading: _ctx.addingCloze,\n variant: 'secondary',\n class: \"w-1/2 2xl:w-1/3\"\n }, {\n default: _withCtx(() => [\n _hoisted_26,\n _createTextVNode(_toDisplayString(_ctx.$t(\"exercise_editor.new_cloze\")), 1)\n ]),\n _: 1\n }, 8, [\"loading\"]),\n _createVNode(_component_Btn, {\n outline: true,\n disabled: _ctx.editableClozeSubExerciseId === null,\n class: \"w-1/2 ml-2 mr-auto 2xl:w-1/3\",\n onClick: _cache[14] || (_cache[14] = ($event: any) => (_ctx.editingClozeSubExerciseId = _ctx.editableClozeSubExerciseId))\n }, {\n default: _withCtx(() => [\n _hoisted_27,\n _createTextVNode(_toDisplayString(_ctx.$t(\"exercise_editor.edit_cloze\")), 1)\n ]),\n _: 1\n }, 8, [\"disabled\"]),\n _createElementVNode(\"div\", _hoisted_28, [\n _hoisted_29,\n _createElementVNode(\"p\", _hoisted_30, _toDisplayString(_ctx.$t(\"help_texts.exercise_editor.clozes\")), 1)\n ])\n ]))\n : _createCommentVNode(\"\", true),\n (!_ctx.cloze)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_31, [\n _createElementVNode(\"h3\", _hoisted_32, _toDisplayString(_ctx.$t(\"exercise_editor.solutions_title\")), 1),\n (!_ctx.loadingSolutions)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_33, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.solutions, (solution) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: 'e-' + _ctx.modelValue.id + '-sol-' + solution.id,\n class: \"flex my-2 space-x-2\"\n }, [\n (!_ctx.cloze && !_ctx.isProgrammingExercise)\n ? (_openBlock(), _createBlock(_component_TextEditor, {\n key: 0,\n class: \"w-full\",\n modelValue: solution.content,\n onBlur: ($event: any) => (_ctx.onBlurSolution(solution.id)),\n \"onUpdate:modelValue\": ($event: any) => (_ctx.onUpdateSolution(solution.id, 'content', $event))\n }, null, 8, [\"modelValue\", \"onBlur\", \"onUpdate:modelValue\"]))\n : (!_ctx.cloze)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_34, [\n _createVNode(_component_CodeEditor, {\n modelValue: solution.content,\n \"onUpdate:modelValue\": ($event: any) => (_ctx.onUpdateSolution(solution.id, 'content', $event)),\n size: 'lg',\n showRunButton: true,\n language: _ctx.languageCode,\n onBlur: ($event: any) => (_ctx.onBlurSolution(solution.id)),\n onRun: ($event: any) => (_ctx.onTestSolution(solution.id)),\n running: _ctx.testingSolutions[solution.id] ?? false\n }, {\n runButton: _withCtx(() => [\n _hoisted_35,\n _createTextVNode(_toDisplayString(_ctx.testingSolutions[solution.id]\n\t\t\t\t\t\t\t\t\t\t\t\t\t? _ctx.$t(\"exercise_editor.testing_solution\")\n\t\t\t\t\t\t\t\t\t\t\t\t\t: _ctx.$t(\"exercise_editor.test_solution\")), 1)\n ]),\n sidePaneTitle: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_36, [\n _hoisted_37,\n _createElementVNode(\"h3\", null, _toDisplayString(_ctx.$t(\"programming_exercise.execution_results\")), 1)\n ])\n ]),\n sidePane: _withCtx(() => [\n (_ctx.solutionTestSlots[solution.id]?.execution_results)\n ? (_openBlock(), _createBlock(_component_CodeExecutionResults, {\n key: 0,\n executionResults: \n\t\t\t\t\t\t\t\t\t\t\t\t\t_ctx.solutionTestSlots[solution.id].execution_results\n\t\t\t\t\t\t\t\t\t\t\t\t,\n testCases: _ctx.modelValue.testcases\n }, null, 8, [\"executionResults\", \"testCases\"]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_38, [\n _hoisted_39,\n _createElementVNode(\"p\", _hoisted_40, _toDisplayString(_ctx.$t(\"exercise_editor.code_execution_will_appear_here\")), 1)\n ]))\n ]),\n _: 2\n }, 1032, [\"modelValue\", \"onUpdate:modelValue\", \"language\", \"onBlur\", \"onRun\", \"running\"])\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_Btn, {\n outline: true,\n variant: 'icon',\n class: \"transition-opacity duration-100 opacity-50 hover:opacity-100\",\n onClick: ($event: any) => (_ctx.onDeleteSolution(solution.id))\n }, {\n default: _withCtx(() => [\n _hoisted_41\n ]),\n _: 2\n }, 1032, [\"onClick\"])\n ]))\n }), 128))\n ]))\n : (_openBlock(), _createBlock(_component_SlotSkeleton, { key: 1 })),\n _createVNode(_component_Btn, {\n class: \"mt-2\",\n variant: 'secondary',\n size: 'sm',\n onClick: _cache[15] || (_cache[15] = ($event: any) => (_ctx.onAddSolution()))\n }, {\n default: _withCtx(() => [\n _hoisted_42,\n _createTextVNode(_toDisplayString(_ctx.$t(\"exercise_editor.new_solution\")), 1)\n ]),\n _: 1\n })\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.modelValue.exercise_type === _ctx.ExerciseType.JS)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_43, [\n _createVNode(_component_Toggle, {\n class: \"\",\n modelValue: _ctx.modelValue.requires_typescript,\n \"onUpdate:modelValue\": _cache[16] || (_cache[16] = ($event: any) => (_ctx.onBaseExerciseChange('requires_typescript', $event)))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"exercise_editor.requires_typescript\")) + \" \", 1),\n (_openBlock(), _createElementBlock(\"svg\", _hoisted_44, _hoisted_46))\n ]),\n _: 1\n }, 8, [\"modelValue\"])\n ]))\n : _createCommentVNode(\"\", true),\n (!_ctx.subExercise)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_47, [\n _createVNode(_component_TagInput, {\n choices: _ctx.mainStore.tags,\n modelValue: _ctx.modelValue.public_tags ?? [],\n \"allow-edit-tags\": false,\n placeholder: _ctx.$t('exercise_editor.exercise_public_tags'),\n onAddTag: _cache[17] || (_cache[17] = ($event: any) => (_ctx.onAddTag($event, true))),\n onRemoveTag: _cache[18] || (_cache[18] = ($event: any) => (_ctx.onRemoveTag($event, true)))\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_48, [\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t(\"exercise_editor.exercise_public_tags\")), 1),\n _createVNode(_component_Tooltip, {\n class: \"transform scale-125\",\n \"text-code\": 'exercise_editor.public_tags'\n }, null, 8, [\"text-code\"])\n ])\n ]),\n _: 1\n }, 8, [\"choices\", \"modelValue\", \"placeholder\"])\n ]))\n : _createCommentVNode(\"\", true),\n (!_ctx.subExercise)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_49, [\n _createVNode(_component_TagInput, {\n choices: _ctx.mainStore.tags,\n modelValue: _ctx.modelValue.private_tags ?? [],\n \"allow-edit-tags\": false,\n placeholder: _ctx.$t('exercise_editor.exercise_private_tags'),\n onAddTag: _cache[19] || (_cache[19] = ($event: any) => (_ctx.onAddTag($event, false))),\n onRemoveTag: _cache[20] || (_cache[20] = ($event: any) => (_ctx.onRemoveTag($event, false)))\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_50, [\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t(\"exercise_editor.exercise_private_tags\")), 1),\n _createVNode(_component_Tooltip, {\n class: \"transform scale-125\",\n \"text-code\": 'exercise_editor.private_tags'\n }, null, 8, [\"text-code\"])\n ])\n ]),\n _: 1\n }, 8, [\"choices\", \"modelValue\", \"placeholder\"])\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.canBeAllOrNothing)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_51, [\n _createVNode(_component_Toggle, {\n modelValue: _ctx.modelValue.all_or_nothing,\n \"onUpdate:modelValue\": _cache[21] || (_cache[21] = ($event: any) => (_ctx.onBaseExerciseChange('all_or_nothing', $event)))\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_52, [\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t(\"exercise_editor.all_or_nothing\")), 1),\n _createVNode(_component_Tooltip, {\n class: \"transform scale-125\",\n \"text-code\": \n\t\t\t\t\t\t\t\t\t_ctx.isProgrammingExercise\n\t\t\t\t\t\t\t\t\t\t? 'exercise_editor.all_or_nothing_programming'\n\t\t\t\t\t\t\t\t\t\t: 'exercise_editor.all_or_nothing'\n\t\t\t\t\t\t\t\t\n }, null, 8, [\"text-code\"])\n ])\n ]),\n _: 1\n }, 8, [\"modelValue\"])\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.isMultipleChoice)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 3,\n class: _normalizeClass([_ctx.cloze ? '-mt-6' : 'mt-8'])\n }, [\n _createElementVNode(\"h3\", _hoisted_53, _toDisplayString(_ctx.$t(\"exercise_editor.choices_title\")), 1),\n (_ctx.v$.modelValue.choices.$errors.length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_54, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.v$.modelValue.choices.$errors, (error) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"input-errors\",\n key: error.$uid\n }, [\n _createElementVNode(\"div\", _hoisted_55, _toDisplayString(_ctx.$t(\"validation_errors.exercise.\" + error.$uid)), 1)\n ]))\n }), 128))\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.showNoChoicePenaltyWarning)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_56, [\n _hoisted_57,\n _createElementVNode(\"p\", null, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"exercise_editor.no_choice_penalty_warning\")) + \" \", 1),\n _createVNode(_component_ArticleHandle, { articleId: 'multiple_choice_eval_logic' }),\n _createTextVNode(\". \")\n ])\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_draggable, {\n animation: \"100\",\n handle: \".drag-handle\",\n modelValue: _ctx.modelValue.choices,\n onEnd: _cache[22] || (_cache[22] = ($event: any) => (_ctx.onChoiceDragEnd($event))),\n \"ghost-class\": \"drag-ghost\",\n \"item-key\": \"id\"\n }, {\n item: _withCtx(({ element }) => [\n _createVNode(_component_ChoiceEditor, {\n correctnessIsBoolean: \n\t\t\t\t\t\t\t\t\t_ctx.modelValue.exercise_type ===\n\t\t\t\t\t\t\t\t\t\t_ctx.ExerciseType.MULTIPLE_CHOICE_MULTIPLE_POSSIBLE &&\n\t\t\t\t\t\t\t\t\t_ctx.modelValue.all_or_nothing\n\t\t\t\t\t\t\t\t,\n singleLine: _ctx.cloze,\n invalidCorrectness: !!_ctx.choicesCorrectnessError,\n modelValue: element,\n onDelete: ($event: any) => (_ctx.onDeleteChoice(element.id)),\n onBlur: ($event: any) => (_ctx.onBlurChoice(element.id)),\n onChoiceUpdate: ($event: any) => (_ctx.onUpdateChoice(element.id, $event.field, $event.value)),\n \"icon-type\": \n\t\t\t\t\t\t\t\t\t_ctx.cloze\n\t\t\t\t\t\t\t\t\t\t? 'dropdown'\n\t\t\t\t\t\t\t\t\t\t: _ctx.modelValue.exercise_type ===\n\t\t\t\t\t\t\t\t\t\t _ctx.ExerciseType.MULTIPLE_CHOICE_SINGLE_POSSIBLE\n\t\t\t\t\t\t\t\t\t\t? 'radio'\n\t\t\t\t\t\t\t\t\t\t: 'checkbox'\n\t\t\t\t\t\t\t\t\n }, null, 8, [\"correctnessIsBoolean\", \"singleLine\", \"invalidCorrectness\", \"modelValue\", \"onDelete\", \"onBlur\", \"onChoiceUpdate\", \"icon-type\"])\n ]),\n _: 1\n }, 8, [\"modelValue\"]),\n _createVNode(_component_Btn, {\n onClick: _cache[23] || (_cache[23] = ($event: any) => (_ctx.onAddChoice())),\n size: 'sm',\n variant: 'secondary'\n }, {\n default: _withCtx(() => [\n _hoisted_58,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t(\"exercise_editor.new_choice\")), 1)\n ]),\n _: 1\n })\n ], 2))\n : _createCommentVNode(\"\", true),\n (_ctx.modelValue.exercise_type === _ctx.ExerciseType.AGGREGATED)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_59, [\n _createElementVNode(\"h3\", _hoisted_60, _toDisplayString(_ctx.$t(\"exercise_editor.sub_exercises_title\")), 1),\n (_ctx.v$.modelValue.sub_exercises.$errors.length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_61, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.v$.modelValue.sub_exercises.$errors, (error) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"input-errors\",\n key: error.$uid\n }, [\n _createElementVNode(\"div\", _hoisted_62, _toDisplayString(_ctx.$t(\"validation_errors.exercise.\" + error.$uid)), 1)\n ]))\n }), 128))\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_draggable, {\n animation: \"100\",\n handle: \".drag-handle\",\n modelValue: _ctx.modelValue.sub_exercises,\n onEnd: _cache[24] || (_cache[24] = ($event: any) => (_ctx.onChoiceDragEnd($event))),\n \"ghost-class\": \"drag-ghost\",\n \"item-key\": \"id\"\n }, {\n item: _withCtx(({ element }) => [\n _createVNode(_component_ExerciseEditor, {\n invalidChildWeight: !!_ctx.childWeightError,\n onDelete: ($event: any) => (_ctx.onDeleteSubExercise(element.id)),\n subExercise: true,\n modelValue: element\n }, null, 8, [\"invalidChildWeight\", \"onDelete\", \"modelValue\"])\n ]),\n _: 1\n }, 8, [\"modelValue\"]),\n _createVNode(_component_Btn, {\n onClick: _cache[25] || (_cache[25] = ($event: any) => (_ctx.onAddSubExercise())),\n size: 'sm',\n variant: 'secondary'\n }, {\n default: _withCtx(() => [\n _hoisted_63,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t(\"exercise_editor.new_sub_exercise\")), 1)\n ]),\n _: 1\n })\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.isProgrammingExercise)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_64, [\n _createElementVNode(\"h3\", _hoisted_65, _toDisplayString(_ctx.$t(\"exercise_editor.testcases_title\")), 1),\n (_ctx.modelValue.exercise_type === _ctx.ExerciseType.JS)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_66, [\n _createElementVNode(\"p\", _hoisted_67, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"exercise_editor.use_assert_lib\")) + \" \", 1),\n _hoisted_68,\n _createTextVNode(\". \")\n ])\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_draggable, {\n animation: \"100\",\n modelValue: _ctx.modelValue.testcases,\n \"ghost-class\": \"drag-ghost\",\n handle: \".drag-handle\",\n \"item-key\": \"id\"\n }, {\n item: _withCtx(({ element }) => [\n _createVNode(_component_TestCaseEditor, {\n attachments: \n\t\t\t\t\t\t\t\t\t_ctx.mainStore.exerciseTestCaseAttachmentsByTestCaseId[element.id] ?? []\n\t\t\t\t\t\t\t\t,\n executingSolution: \n\t\t\t\t\t\t\t\t\t_ctx.testCaseAutoSaveManagers[element.id]?.isPending() ?? false\n\t\t\t\t\t\t\t\t,\n testCaseType: _ctx.modelValue.exercise_type,\n onBlur: ($event: any) => (_ctx.onBlurTestCase(element.id)),\n onDelete: ($event: any) => (_ctx.onDeleteTestCase(element.id)),\n onCreateAttachment: ($event: any) => (_ctx.onTestCaseCreateAttachment(element.id, $event)),\n onDownloadAttachment: ($event: any) => (_ctx.onTestCaseDownloadAttachment(element.id, $event)),\n onDeleteAttachment: ($event: any) => (_ctx.onTestCaseDeleteAttachment(element.id, $event)),\n modelValue: element,\n executionResultsSlots: Object.values(_ctx.solutionTestSlots),\n onTestCaseUpdate: ($event: any) => (_ctx.onUpdateTestCase(element.id, $event.field, $event.value))\n }, null, 8, [\"attachments\", \"executingSolution\", \"testCaseType\", \"onBlur\", \"onDelete\", \"onCreateAttachment\", \"onDownloadAttachment\", \"onDeleteAttachment\", \"modelValue\", \"executionResultsSlots\", \"onTestCaseUpdate\"])\n ]),\n _: 1\n }, 8, [\"modelValue\"]),\n _createVNode(_component_Btn, {\n onClick: _cache[26] || (_cache[26] = ($event: any) => (_ctx.onAddTestCase())),\n size: 'sm',\n variant: 'secondary'\n }, {\n default: _withCtx(() => [\n _hoisted_69,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t(\"exercise_editor.new_testcase\")), 1)\n ]),\n _: 1\n })\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.modelValue.exercise_type === _ctx.ExerciseType.COMPLETION)\n ? (_openBlock(), _createBlock(_component_Dialog, {\n key: 6,\n fullWidth: true,\n confirmOnly: true,\n onYes: _cache[27] || (_cache[27] = ($event: any) => (_ctx.editingClozeSubExerciseId = null)),\n showDialog: !!_ctx.editingCloze\n }, _createSlots({\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"exercise_editor.editing_cloze\")) + \" \" + _toDisplayString(_ctx.modelValue.sub_exercises?.findIndex(\n\t\t\t\t\t\t\t\ts => s.id == _ctx.editingClozeSubExerciseId,\n\t\t\t\t\t\t\t) + 1), 1)\n ]),\n _: 2\n }, [\n (!!_ctx.editingCloze)\n ? {\n name: \"body\",\n fn: _withCtx(() => [\n _createVNode(_component_ExerciseEditor, {\n modelValue: _ctx.editingCloze,\n subExercise: true,\n cloze: true,\n invalidChildWeight: !!_ctx.childWeightError\n }, null, 8, [\"modelValue\", \"invalidChildWeight\"])\n ]),\n key: \"0\"\n }\n : undefined\n ]), 1032, [\"showDialog\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_Dialog, {\n showDialog: _ctx.showDialog,\n onYes: _cache[28] || (_cache[28] = ($event: any) => (_ctx.dialogData.onYes())),\n onNo: _cache[29] || (_cache[29] = ($event: any) => (_ctx.dialogData.onNo())),\n yesText: _ctx.dialogData.yesText,\n noText: _ctx.dialogData.noText,\n error: _ctx.dialogData.error,\n confirmOnly: _ctx.dialogData.confirmOnly\n }, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.dialogData.title), 1)\n ]),\n body: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.dialogData.text) + \" \", 1),\n (_ctx.v$.modelValue.$errors)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_70, [\n _createElementVNode(\"ul\", _hoisted_71, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.v$.$errors, (error, index) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n class: \"text-muted text-danger-dark\",\n key: 'err-' + index\n }, _toDisplayString(_ctx.$t(\"validation_errors.exercise.\" + error.$uid)), 1))\n }), 128))\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }, 8, [\"showDialog\", \"yesText\", \"noText\", \"error\", \"confirmOnly\"]),\n _createElementVNode(\"div\", _hoisted_72, [\n (_ctx.maxScore !== null)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_73, [\n _createElementVNode(\"h4\", null, _toDisplayString(_ctx.$t(\"exercise_editor.max_score\")), 1),\n _createElementVNode(\"div\", _hoisted_74, [\n _createElementVNode(\"span\", _hoisted_75, _toDisplayString(_ctx.maxScore), 1)\n ])\n ]))\n : _createCommentVNode(\"\", true),\n (!_ctx.subExercise)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 1,\n style: {\"margin-top\":\"1px\"},\n class: \"ml-auto\",\n outline: true,\n size: 'lg',\n variant: 'icon',\n onClick: _cache[30] || (_cache[30] = ($event: any) => (_ctx.$emit('cloneExercise'))),\n tooltip: _ctx.$t('exercise_editor.clone')\n }, {\n default: _withCtx(() => [\n _hoisted_76\n ]),\n _: 1\n }, 8, [\"tooltip\"]))\n : _createCommentVNode(\"\", true),\n (!_ctx.subExercise)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 2,\n class: \"ml-5\",\n outline: true,\n size: 'lg',\n variant: 'icon',\n tooltip: _ctx.$t('exercise_editor.delete'),\n onClick: _cache[31] || (_cache[31] = ($event: any) => (_ctx.$emit('delete')))\n }, {\n default: _withCtx(() => [\n _hoisted_77\n ]),\n _: 1\n }, 8, [\"tooltip\"]))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _: 1\n }, 8, [\"loading\", \"focusable\", \"borderLess\", \"filled\", \"class\"])\n ]))\n}","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, renderSlot as _renderSlot, createElementVNode as _createElementVNode, createVNode as _createVNode, resolveDirective as _resolveDirective, createElementBlock as _createElementBlock, withDirectives as _withDirectives, renderList as _renderList, Fragment as _Fragment, normalizeClass as _normalizeClass, withCtx as _withCtx } from \"vue\"\n\nconst _hoisted_1 = { class: \"relative\" }\nconst _hoisted_2 = { class: \"absolute top-2 left-1.5 origin-0 fixed-label\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"darken-on-hover cursor-pointer rounded-t-sm border-b-2 flex overflow-hidden items-top py-2 px-3 light-input w-full relative z-10 bg-light hover:bg-gray-150 focus-within:border-primary duration-300 transition-border\"\n}\nconst _hoisted_4 = [\"innerHTML\"]\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"span\", {\n class: \"material-icons ml-auto text-muted\",\n style: {\"font-size\":\"26px !important\"}\n}, \"arrow_drop_down\", -1)\nconst _hoisted_6 = { class: \"-my-1.5 w-full\" }\nconst _hoisted_7 = [\"for\"]\nconst _hoisted_8 = [\"onInput\", \"onClick\", \"id\", \"value\", \"checked\"]\nconst _hoisted_9 = { class: \"flex space-x-2 overflow-hidden items-top\" }\nconst _hoisted_10 = [\"innerHTML\"]\nconst _hoisted_11 = [\"innerHTML\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_LinearProgress = _resolveComponent(\"LinearProgress\")!\n const _component_MultiIcon = _resolveComponent(\"MultiIcon\")!\n const _component_DropdownMenu = _resolveComponent(\"DropdownMenu\")!\n const _directive_wave = _resolveDirective(\"wave\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_ctx.loading)\n ? (_openBlock(), _createBlock(_component_LinearProgress, {\n key: 0,\n class: \"absolute top-0 rounded-t-sm\"\n }))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"label\", _hoisted_2, [\n _renderSlot(_ctx.$slots, \"default\")\n ]),\n _createVNode(_component_DropdownMenu, {\n expanded: _ctx.expanded,\n onToggleExpanded: _cache[0] || (_cache[0] = ($event: any) => (_ctx.expanded = !_ctx.expanded)),\n class: \"w-full\"\n }, {\n activator: _withCtx(() => [\n (_ctx.selectedOption)\n ? _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createVNode(_component_MultiIcon, {\n class: \"w-6 mr-2\",\n icons: _ctx.selectedOption.icons\n }, null, 8, [\"icons\"]),\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"p\", {\n innerHTML: _ctx.selectedOption.content\n }, null, 8, _hoisted_4)\n ]),\n _hoisted_5\n ])), [\n [_directive_wave]\n ])\n : _createCommentVNode(\"\", true)\n ]),\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_6, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.options, (option, index) => {\n return _withDirectives((_openBlock(), _createElementBlock(\"label\", {\n for: _ctx.id + '-input-' + index,\n class: _normalizeClass([{\n\t\t\t\t\t\t'text-primary-dark bg-primary-light bg-opacity-15':\n\t\t\t\t\t\t\toption.value == _ctx.modelValue,\n\t\t\t\t\t\t'hover:bg-gray-200': _ctx.modelValue != option.value,\n\t\t\t\t\t}, \"py-2.5 relative flex px-5 -mx-5 items-center max-h-screen overflow-hidden cursor-pointer\"]),\n key: _ctx.id + '-option-' + index\n }, [\n _createElementVNode(\"input\", {\n onInput: ($event: any) => (_ctx.onInput(option.value, $event)),\n onClick: ($event: any) => (option.value == _ctx.modelValue ? (_ctx.expanded = false) : null),\n class: \"w-0 h-0 opacity-0\",\n type: \"radio\",\n id: _ctx.id + '-input-' + index,\n value: option.value,\n checked: option.value == _ctx.modelValue\n }, null, 40, _hoisted_8),\n _createElementVNode(\"div\", _hoisted_9, [\n _createVNode(_component_MultiIcon, {\n class: \"w-6\",\n icons: option.icons\n }, null, 8, [\"icons\"]),\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"p\", {\n innerHTML: option.content,\n class: _normalizeClass({\n\t\t\t\t\t\t\t\t\t'font-semibold':\n\t\t\t\t\t\t\t\t\t\toption.value == _ctx.modelValue && (_ctx.expanded || _ctx.showFeedback),\n\t\t\t\t\t\t\t\t})\n }, null, 10, _hoisted_10),\n (option.description)\n ? (_openBlock(), _createElementBlock(\"p\", {\n key: 0,\n style: {\"margin-left\":\"-26px\"},\n innerHTML: option.description,\n class: _normalizeClass([\n\t\t\t\t\t\t\t\t\toption.value == _ctx.modelValue\n\t\t\t\t\t\t\t\t\t\t? 'text-primary-dark'\n\t\t\t\t\t\t\t\t\t\t: 'text-muted text-description',\n\t\t\t\t\t\t\t\t\t'text-sm my-1',\n\t\t\t\t\t\t\t\t])\n }, null, 10, _hoisted_11))\n : _createCommentVNode(\"\", true)\n ])\n ])\n ], 10, _hoisted_7)), [\n [_directive_wave]\n ])\n }), 128))\n ])\n ]),\n _: 1\n }, 8, [\"expanded\"])\n ]))\n}","\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport { v4 as uuid4 } from \"uuid\";\nimport MultiIcon from \"@/components/ui/MultiIcon.vue\";\nimport DropdownMenu from \"./DropdownMenu.vue\";\nimport { SelectableOption } from \"@/interfaces\";\nimport LinearProgress from \"./LinearProgress.vue\";\n\nexport default defineComponent({\n\tname: \"Dropdown\",\n\tprops: {\n\t\toptions: {\n\t\t\ttype: Array as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\tmodelValue: {\n\t\t\trequired: true,\n\t\t},\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tcomponents: {\n\t\tMultiIcon,\n\t\tDropdownMenu,\n\t\tLinearProgress,\n\t},\n\tcreated() {\n\t\tthis.id = uuid4();\n\t\tif (this.modelValue != null) {\n\t\t\tthis.expanded = false;\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\texpanded: true,\n\t\t\tshowFeedback: false,\n\t\t\tid: \"\",\n\t\t};\n\t},\n\tmethods: {\n\t\tonInput(value: string, inputEvent: Event) {\n\t\t\tconsole.log(\"INPUT\", value);\n\n\t\t\t// if (this.modelValue != value) {\n\t\t\t// \tthis.expanded = false;\n\t\t\t// \tthis.showFeedback = true;\n\t\t\t// \tsetTimeout(() => (this.showFeedback = false), 1000);\n\t\t\t// }\n\n\t\t\t// prevent target from automatically being checked -\n\t\t\t// it will if its value is equal to modelValue\n\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-extra-semi\n\t\t\t(inputEvent.target as unknown as { checked: boolean }).checked = false;\n\t\t\tinputEvent.preventDefault();\n\t\t\tthis.$emit(\"update:modelValue\", value);\n\t\t\tthis.expanded = false;\n\t\t},\n\t},\n\tcomputed: {\n\t\tselectedOption() {\n\t\t\treturn this.options.find(o => o.value == this.modelValue);\n\t\t},\n\t},\n});\n","import { render } from \"./Dropdown.vue?vue&type=template&id=796efa34&ts=true\"\nimport script from \"./Dropdown.vue?vue&type=script&lang=ts\"\nexport * from \"./Dropdown.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { renderSlot as _renderSlot, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"relative\" }\nconst _hoisted_2 = { class: \"absolute top-2 z-10 left-1.5 origin-0 fixed-label\" }\nconst _hoisted_3 = { class: \"tags-input-container\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_VueTagsInput = _resolveComponent(\"VueTagsInput\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"label\", _hoisted_2, [\n _renderSlot(_ctx.$slots, \"default\")\n ]),\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_VueTagsInput, {\n \"add-only-from-autocomplete\": _ctx.existingOnly,\n modelValue: _ctx.tag,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.tag) = $event)),\n class: \"\",\n tags: _ctx.processedModelValue,\n \"allow-edit-tags\": true,\n placeholder: _ctx.$slots.default ? '' : _ctx.placeholder,\n onBeforeAddingTag: _cache[1] || (_cache[1] = ($event: any) => (_ctx.beforeAddingTag($event))),\n onBeforeDeletingTag: _cache[2] || (_cache[2] = ($event: any) => (_ctx.beforeDeletingTag($event))),\n \"autocomplete-items\": _ctx.autoCompleteItems,\n \"autocomplete-min-length\": \n\t\t\t\t\t_ctx.alwaysShowAutocomplete ? 0 : _ctx.allowAutocomplete ? 1 : 10000000000000\n\t\t\t\t,\n \"autocomplete-filter-duplicates\": false\n }, null, 8, [\"add-only-from-autocomplete\", \"modelValue\", \"tags\", \"placeholder\", \"autocomplete-items\", \"autocomplete-min-length\"])\n ])\n ]))\n}","\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport { Tag } from \"@/models\";\nimport VueTagsInput from \"@sipec/vue3-tags-input\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\n\nexport default defineComponent({\n\tname: \"TagInput\",\n\tcomponents: {\n\t\tVueTagsInput,\n\t},\n\twatch: {\n\t\tserializedProcessedModelValue(_newVal, _oldVal) {\n\t\t\tif (this.ignoreWatcher) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst newVal = JSON.parse(_newVal);\n\t\t\tconst oldVal = JSON.parse(_oldVal);\n\n\t\t\tif (this.addingTag.length > 0 && newVal.length > oldVal.length) {\n\t\t\t\tthis.addingTag = \"\";\n\t\t\t} else if (this.removingTag.length > 0 && newVal.length < oldVal.length) {\n\t\t\t\tthis.removingTag = \"\";\n\t\t\t}\n\t\t},\n\t},\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: Array as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\tplaceholder: {\n\t\t\ttype: String,\n\t\t\tdefault: _(\"misc.tags\"),\n\t\t},\n\t\tchoices: {\n\t\t\ttype: Array as PropType,\n\t\t\tdefault: () => [],\n\t\t},\n\t\texistingOnly: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\talwaysShowAutocomplete: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tallowAutocomplete: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\ttag: \"\",\n\t\t\taddingTag: \"\",\n\t\t\tremovingTag: \"\",\n\t\t\tignoreWatcher: false,\n\t\t};\n\t},\n\tmethods: {\n\t\tbeforeAddingTag(event: any) {\n\t\t\tif (\n\t\t\t\t!this.processedModelValue\n\t\t\t\t\t.map((t: { text: string; classes?: string }) => t.text)\n\t\t\t\t\t.includes(event.tag.text) &&\n\t\t\t\t(!this.existingOnly ||\n\t\t\t\t\tthis.autoCompleteItems.map(i => i.text).includes(event.tag.text))\n\t\t\t) {\n\t\t\t\tthis.$emit(\"addTag\", event.tag.text);\n\n\t\t\t\t// this triggers ghost tag without having the watcher immediately remove it\n\t\t\t\tthis.ignoreWatcher = true;\n\t\t\t\tthis.addingTag = event.tag.text;\n\t\t\t\tthis.$nextTick(() => (this.ignoreWatcher = false));\n\n\t\t\t\tthis.tag = \"\";\n\t\t\t}\n\t\t},\n\t\tbeforeDeletingTag(event: any) {\n\t\t\tthis.removingTag = event.tag.text;\n\t\t\tthis.$emit(\"removeTag\", event.tag.text);\n\t\t},\n\t\tprocessTag(tag: { text: string }) {\n\t\t\treturn {\n\t\t\t\tname: tag.text,\n\t\t\t};\n\t\t},\n\t},\n\tcomputed: {\n\t\tserializedProcessedModelValue() {\n\t\t\treturn JSON.stringify(this.processedModelValue);\n\t\t},\n\t\tprocessedModelValue() {\n\t\t\tconst ret = this.modelValue.map((t: Tag) => ({\n\t\t\t\ttext: t.name,\n\t\t\t\tclasses: t.name === this.removingTag ? \"opacity-50 pointer-events-none\" : \"\",\n\t\t\t}));\n\n\t\t\tconst ghostTag = {\n\t\t\t\ttext: this.addingTag,\n\t\t\t\tclasses: \"opacity-50 pointer-events-none\",\n\t\t\t};\n\n\t\t\treturn [...ret, ...(this.addingTag.length > 0 ? [ghostTag] : [])];\n\t\t},\n\t\tprocessedChoices() {\n\t\t\treturn this.choices.map((t: Tag) => ({\n\t\t\t\ttext: t.name,\n\t\t\t}));\n\t\t},\n\t\tautoCompleteItems(): { text: string; classes?: string }[] {\n\t\t\tconst ret = this.processedChoices.filter(\n\t\t\t\t(c: { text: string }) =>\n\t\t\t\t\tc.text.toLowerCase().indexOf(this.tag.toLowerCase()) !== -1,\n\t\t\t);\n\t\t\tif (this.existingOnly || ret.length > 0) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t\treturn [{ text: this.tag, classes: \"create-tag\" }];\n\t\t},\n\t},\n});\n","import { render } from \"./TagInput.vue?vue&type=template&id=21daa8bd&ts=true\"\nimport script from \"./TagInput.vue?vue&type=script&lang=ts\"\nexport * from \"./TagInput.vue?vue&type=script&lang=ts\"\n\nimport \"./TagInput.vue?vue&type=style&index=0&id=21daa8bd&lang=css\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createTextVNode as _createTextVNode, createSlots as _createSlots, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex flex-col py-3 my-3 space-y-4 md:space-x-4 md:space-y-0 md:flex-row\" }\nconst _hoisted_2 = { class: \"flex items-center\" }\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-base text-danger-dark material-icons-outlined\" }, \" close \", -1)\nconst _hoisted_4 = { class: \"error-msg\" }\nconst _hoisted_5 = { class: \"error-msg\" }\nconst _hoisted_6 = { class: \"md:w-2/12\" }\nconst _hoisted_7 = { class: \"flex w-full items-center space-x-0.5\" }\nconst _hoisted_8 = { key: 1 }\nconst _hoisted_9 = { class: \"my-auto\" }\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-base material-icons\" }, \" delete \", -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_TextEditor = _resolveComponent(\"TextEditor\")!\n const _component_TextInput = _resolveComponent(\"TextInput\")!\n const _component_NumberInput = _resolveComponent(\"NumberInput\")!\n const _component_Toggle = _resolveComponent(\"Toggle\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"span\", {\n class: _normalizeClass([\"mr-auto text-lg cursor-move md:mr-2 drag-handle material-icons-outlined opacity-70\", { 'my-auto': !_ctx.singleLine, 'mt-1': _ctx.singleLine }])\n }, \" drag_indicator \", 2),\n _createVNode(_component_Btn, {\n class: \"ml-auto md:hidden\",\n outline: true,\n variant: 'icon',\n tooltip: _ctx.$t('exercise_editor.delete_choice'),\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('delete')))\n }, {\n default: _withCtx(() => [\n _hoisted_3\n ]),\n _: 1\n }, 8, [\"tooltip\"])\n ]),\n (!_ctx.singleLine)\n ? (_openBlock(), _createBlock(_component_TextEditor, {\n key: 0,\n onBlur: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$emit('blur'))),\n class: \"w-full md:w-10/12\",\n modelValue: _ctx.modelValue.text,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => (_ctx.onUpdate('text', $event)))\n }, _createSlots({\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"exercise_editor.choice_text\")) + \" \", 1)\n ]),\n _: 2\n }, [\n (_ctx.v$.choice.text.$errors.length > 0)\n ? {\n name: \"errors\",\n fn: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.v$.choice.text.$errors, (error) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"input-errors\",\n key: error.$uid\n }, [\n _createElementVNode(\"div\", _hoisted_4, _toDisplayString(_ctx.$t(\"validation_errors.exercise.choice.\" + error.$uid)), 1)\n ]))\n }), 128))\n ]),\n key: \"0\"\n }\n : undefined\n ]), 1032, [\"modelValue\"]))\n : (_openBlock(), _createBlock(_component_TextInput, {\n key: 1,\n onBlur: _cache[3] || (_cache[3] = ($event: any) => (_ctx.$emit('blur'))),\n class: \"w-full md:w-10/12\",\n modelValue: _ctx.modelValue.text,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = ($event: any) => (_ctx.onUpdate('text', $event)))\n }, _createSlots({\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"exercise_editor.choice_text\")) + \" \", 1)\n ]),\n _: 2\n }, [\n (_ctx.v$.choice.text.$errors.length > 0)\n ? {\n name: \"errors\",\n fn: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.v$.choice.text.$errors, (error) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"input-errors\",\n key: error.$uid\n }, [\n _createElementVNode(\"div\", _hoisted_5, _toDisplayString(_ctx.$t(\"validation_errors.exercise.choice.\" + error.$uid)), 1)\n ]))\n }), 128))\n ]),\n key: \"0\"\n }\n : undefined\n ]), 1032, [\"modelValue\"])),\n _createElementVNode(\"div\", _hoisted_6, [\n (!_ctx.correctnessIsBoolean)\n ? (_openBlock(), _createBlock(_component_NumberInput, {\n key: 0,\n class: \"mb-auto\",\n iconFilled: true,\n max: 100,\n min: -100,\n modelValue: _ctx.modelValue.correctness,\n onBlur: _cache[5] || (_cache[5] = ($event: any) => (_ctx.$emit('blur'))),\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = ($event: any) => (_ctx.onUpdate('correctness', $event))),\n leftIcon: \n\t\t\t\t\t_ctx.iconType === 'radio'\n\t\t\t\t\t\t? 'radio_button_checked'\n\t\t\t\t\t\t: _ctx.iconType === 'dropdown'\n\t\t\t\t\t\t? 'expand_circle_down'\n\t\t\t\t\t\t: 'check_box'\n\t\t\t\t\n }, _createSlots({\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_7, [\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t(\"exercise_editor.choice_correctness\")), 1)\n ])\n ]),\n _: 2\n }, [\n (_ctx.invalidCorrectness)\n ? {\n name: \"errors\",\n fn: _withCtx(() => [\n _createTextVNode(\"   \")\n ]),\n key: \"0\"\n }\n : undefined\n ]), 1032, [\"modelValue\", \"leftIcon\"]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _createVNode(_component_Toggle, {\n modelValue: _ctx.booleanCorrectnessProxy,\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = ($event: any) => ((_ctx.booleanCorrectnessProxy) = $event))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"exercise_editor.is_choice_correct\")), 1)\n ]),\n _: 1\n }, 8, [\"modelValue\"])\n ]))\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _createVNode(_component_Btn, {\n class: \"hidden -ml-3.5 transition-opacity duration-100 opacity-50 md:mr-1 md:-ml-3 md:block hover:opacity-100\",\n outline: true,\n variant: 'icon',\n tooltip: _ctx.$t('exercise_editor.delete_choice'),\n onClick: _cache[8] || (_cache[8] = ($event: any) => (_ctx.$emit('delete')))\n }, {\n default: _withCtx(() => [\n _hoisted_10\n ]),\n _: 1\n }, 8, [\"tooltip\"])\n ])\n ]))\n}","\nimport { ExerciseChoice } from \"@/models\";\nimport { defineComponent, PropType, inject } from \"@vue/runtime-core\";\nimport TextEditor from \"@/components/ui/TextEditor.vue\";\nimport NumberInput from \"@/components/ui/NumberInput.vue\";\nimport Tooltip from \"@/components/ui/Tooltip.vue\";\nimport TextInput from \"@/components/ui/TextInput.vue\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport useVuelidate from \"@vuelidate/core\";\nimport { exerciseChoiceValidation } from \"@/validation/models\";\nimport Toggle from \"@/components/ui/Toggle.vue\";\n\nexport default defineComponent({\n\tname: \"ChoiceEditor\",\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\ticonType: {\n\t\t\ttype: String as PropType<\"checkbox\" | \"radio\" | \"dropdown\">,\n\t\t\trequired: true,\n\t\t},\n\t\tsingleLine: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tinvalidCorrectness: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tcorrectnessIsBoolean: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\twatch: {\n\t\tcorrectnessIsBoolean(newVal) {\n\t\t\t// when the exercise is set to be all_or_nothing and this prop becomes true,\n\t\t\t// we need to make sure that incorrect choices have a `correctness` value\n\t\t\t// of -1. to ensure this, we instantly emit an update if the choice\n\t\t\t// `correctness` is 0. if we didn't do this, then by all_or_nothing logic the\n\t\t\t// choice would actually be considered true because selecting it doesn't\n\t\t\t// decrease the score obtained\n\t\t\tif (newVal && this.modelValue.correctness === 0) {\n\t\t\t\tthis.onUpdate(\"correctness\", -1);\n\t\t\t}\n\t\t},\n\t},\n\tvalidations() {\n\t\treturn {\n\t\t\tchoice: exerciseChoiceValidation,\n\t\t};\n\t},\n\tsetup() {\n\t\tconst v = useVuelidate();\n\t\t// provide(\"v$\", v);\n\t\treturn { v$: v };\n\t},\n\tcomponents: {\n\t\tTextEditor,\n\t\tNumberInput,\n\t\t//Tooltip,\n\t\tTextInput,\n\t\tBtn,\n\t\tToggle,\n\t},\n\tmethods: {\n\t\tonUpdate(field: K, value: ExerciseChoice[K]) {\n\t\t\tthis.$emit(\"choiceUpdate\", { field, value });\n\t\t},\n\t},\n\tcomputed: {\n\t\tchoice() {\n\t\t\treturn this.modelValue;\n\t\t},\n\t\tbooleanCorrectnessProxy: {\n\t\t\tget() {\n\t\t\t\treturn (this.modelValue.correctness ?? 0) > 0;\n\t\t\t},\n\t\t\tset(value: boolean) {\n\t\t\t\tthis.onUpdate(\"correctness\", value ? 1 : -1);\n\t\t\t},\n\t\t},\n\t},\n});\n","import { render } from \"./ChoiceEditor.vue?vue&type=template&id=550aeee2&ts=true\"\nimport script from \"./ChoiceEditor.vue?vue&type=script&lang=ts\"\nexport * from \"./ChoiceEditor.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, withCtx as _withCtx, renderList as _renderList, Fragment as _Fragment, createElementBlock as _createElementBlock, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex flex-col\" }\nconst _hoisted_2 = { class: \"flex items-center mb-2\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"mt-auto\"\n}\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined text-success-dark\" }, \"check_circle\", -1)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined text-danger-dark\" }, \"warning\", -1)\nconst _hoisted_6 = { class: \"max-w-lg m-2 overflow-y-scroll rounded-sm max-h-64 bg-light\" }\nconst _hoisted_7 = { class: \"ml-auto\" }\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-base material-icons\" }, \" delete \", -1)\nconst _hoisted_9 = { class: \"flex flex-col py-3 mb-12 space-y-2 md:flex-row md:space-x-4 md:space-y-0 md:items-start\" }\nconst _hoisted_10 = { class: \"grid w-full grid-cols-6 gap-5 md:grid-cols-12\" }\nconst _hoisted_11 = { class: \"flex w-full\" }\nconst _hoisted_12 = { class: \"mr-auto\" }\nconst _hoisted_13 = {\n key: 0,\n class: \"flex items-center ml-8 space-x-2 text-danger-dark\"\n}\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mr-2 text-sm material-icons-outlined\" }, \"visibility_off\", -1)\nconst _hoisted_15 = {\n key: 1,\n class: \"flex col-span-7 space-x-2 md:row-span-2\"\n}\nconst _hoisted_16 = { class: \"flex w-full\" }\nconst _hoisted_17 = { class: \"\" }\nconst _hoisted_18 = {\n key: 0,\n class: \"flex items-center ml-2 ml-4 space-x-2 text-danger-dark\"\n}\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mr-2 text-sm material-icons-outlined\" }, \"visibility_off\", -1)\nconst _hoisted_20 = { class: \"flex w-full\" }\nconst _hoisted_21 = { class: \"\" }\nconst _hoisted_22 = {\n key: 0,\n class: \"flex items-center ml-3 space-x-2 text-danger-dark\"\n}\nconst _hoisted_23 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mr-2 text-sm material-icons-outlined\" }, \"visibility_off\", -1)\nconst _hoisted_24 = { class: \"flex w-full\" }\nconst _hoisted_25 = { class: \"mr-auto\" }\nconst _hoisted_26 = {\n key: 0,\n class: \"flex items-center ml-8 space-x-2 text-danger-dark\"\n}\nconst _hoisted_27 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mr-2 text-sm material-icons-outlined\" }, \"visibility_off\", -1)\nconst _hoisted_28 = { class: \"text-sm\" }\nconst _hoisted_29 = {\n key: 3,\n class: \"col-span-12\"\n}\nconst _hoisted_30 = { class: \"mb-1\" }\nconst _hoisted_31 = { class: \"text-muted mb-2 text-sm\" }\nconst _hoisted_32 = { class: \"w-full flex items-start space-x-4\" }\nconst _hoisted_33 = { class: \"w-full\" }\nconst _hoisted_34 = {\n key: 0,\n class: \"w-full\"\n}\nconst _hoisted_35 = { class: \"flex items-center\" }\nconst _hoisted_36 = /*#__PURE__*/_createElementVNode(\"span\", {\n class: \"material-icons text-muted mr-1\",\n style: {\"font-size\":\"18px !important\"}\n}, \"insert_drive_file\", -1)\nconst _hoisted_37 = { class: \"text-sm mr-2\" }\nconst _hoisted_38 = { class: \"text-xs text-muted mr-2\" }\nconst _hoisted_39 = /*#__PURE__*/_createElementVNode(\"span\", {\n class: \"material-icons-outlined text-muted\",\n style: {\"font-size\":\"18px !important\"}\n}, \"file_download\", -1)\nconst _hoisted_40 = /*#__PURE__*/_createElementVNode(\"span\", {\n style: {\"font-size\":\"16px !important\"},\n class: \"material-icons\"\n}, \"close\", -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Spinner = _resolveComponent(\"Spinner\")!\n const _component_Tooltip = _resolveComponent(\"Tooltip\")!\n const _component_CodeExecutionResults = _resolveComponent(\"CodeExecutionResults\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_SegmentedControls = _resolveComponent(\"SegmentedControls\")!\n const _component_CodeEditor = _resolveComponent(\"CodeEditor\")!\n const _component_TextEditor = _resolveComponent(\"TextEditor\")!\n const _component_FileUpload = _resolveComponent(\"FileUpload\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n ((_ctx.executionResultsSlots ?? []).length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n (_ctx.executingSolution)\n ? (_openBlock(), _createBlock(_component_Spinner, {\n key: 0,\n class: \"mb-2 ml-0.5\"\n }))\n : (_ctx.allTestsPass)\n ? (_openBlock(), _createBlock(_component_Tooltip, {\n key: 1,\n textCode: 'testcase_passes'\n }, {\n default: _withCtx(() => [\n _hoisted_4\n ]),\n _: 1\n }))\n : (_openBlock(), _createBlock(_component_Tooltip, {\n key: 2,\n placement: 'right',\n allowHoverOnText: true,\n textCode: 'testcase_fails'\n }, {\n body: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_6, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.nonPassingExecutionResults, (executionResults, index) => {\n return (_openBlock(), _createBlock(_component_CodeExecutionResults, {\n key: 'test-' + _ctx.modelValue.id + '-non-passing-' + index,\n executionResults: executionResults,\n testCases: _ctx.executionResultsSlots?.[0].exercise.testcases,\n showTestIds: [_ctx.modelValue.id],\n onlyErrors: true\n }, null, 8, [\"executionResults\", \"testCases\", \"showTestIds\"]))\n }), 128))\n ])\n ]),\n default: _withCtx(() => [\n _hoisted_5\n ]),\n _: 1\n }))\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_7, [\n _createVNode(_component_Btn, {\n outline: true,\n variant: 'icon',\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('delete'))),\n tooltip: _ctx.$t('exercise_editor.delete_testcase'),\n class: \"transition-opacity duration-100 opacity-50 hover:opacity-100\"\n }, {\n default: _withCtx(() => [\n _hoisted_8\n ]),\n _: 1\n }, 8, [\"tooltip\"])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _createElementVNode(\"div\", _hoisted_10, [\n _createElementVNode(\"div\", {\n class: _normalizeClass({\n\t\t\t\t\t\t'col-span-6':\n\t\t\t\t\t\t\t_ctx.testCaseType === _ctx.ExerciseType.JS || _ctx.testCaseType === _ctx.ExerciseType.PYTHON,\n\t\t\t\t\t\t'md:col-span-5 col-span-7': _ctx.testCaseType === _ctx.ExerciseType.C,\n\t\t\t\t\t})\n }, [\n _createVNode(_component_SegmentedControls, {\n modelValue: _ctx.modelValue.testcase_type,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => (_ctx.onUpdate('testcase_type', $event))),\n options: _ctx.testcaseTypeOptions\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"exercise_editor.testcase_type\")), 1)\n ]),\n _: 1\n }, 8, [\"modelValue\", \"options\"])\n ], 2),\n (_ctx.testCaseType === _ctx.ExerciseType.JS || _ctx.testCaseType === _ctx.ExerciseType.PYTHON)\n ? (_openBlock(), _createBlock(_component_CodeEditor, {\n key: 0,\n onBlur: _cache[2] || (_cache[2] = ($event: any) => (_ctx.$emit('blur'))),\n class: \"col-span-6 md:row-span-2\",\n size: 'sm',\n modelValue: _ctx.modelValue.code,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => (_ctx.onUpdate('code', $event)))\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_11, [\n _createElementVNode(\"p\", _hoisted_12, _toDisplayString(_ctx.$t(\"exercise_editor.testcase_code\")), 1),\n (\n\t\t\t\t\t\t\t\t_ctx.modelValue.testcase_type === _ctx.ExerciseTestCaseType.HIDDEN ||\n\t\t\t\t\t\t\t\t_ctx.modelValue.testcase_type === _ctx.ExerciseTestCaseType.SHOW_TEXT_ONLY\n\t\t\t\t\t\t\t)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [\n _hoisted_14,\n _createTextVNode(_toDisplayString(_ctx.$t(\"exercise_editor.hidden_to_students\")), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _: 1\n }, 8, [\"modelValue\"]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_15, [\n _createVNode(_component_CodeEditor, {\n onBlur: _cache[4] || (_cache[4] = ($event: any) => (_ctx.$emit('blur'))),\n class: \"w-1/2\",\n size: 'sm',\n modelValue: _ctx.modelValue.stdin,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = ($event: any) => (_ctx.onUpdate('stdin', $event)))\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_16, [\n _createElementVNode(\"p\", _hoisted_17, _toDisplayString(_ctx.$t(\"exercise_editor.testcase_stdin\")), 1),\n (\n\t\t\t\t\t\t\t\t\t_ctx.modelValue.testcase_type === _ctx.ExerciseTestCaseType.HIDDEN ||\n\t\t\t\t\t\t\t\t\t_ctx.modelValue.testcase_type === _ctx.ExerciseTestCaseType.SHOW_TEXT_ONLY\n\t\t\t\t\t\t\t\t)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_18, [\n _hoisted_19,\n _createTextVNode(_toDisplayString(_ctx.$t(\"misc.hidden\")), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _: 1\n }, 8, [\"modelValue\"]),\n _createVNode(_component_CodeEditor, {\n onBlur: _cache[6] || (_cache[6] = ($event: any) => (_ctx.$emit('blur'))),\n class: \"w-1/2\",\n size: 'sm',\n modelValue: _ctx.modelValue.expected_stdout,\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = ($event: any) => (_ctx.onUpdate('expected_stdout', $event)))\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_20, [\n _createElementVNode(\"p\", _hoisted_21, _toDisplayString(_ctx.$t(\"exercise_editor.testcase_expected_stdout\")), 1),\n (\n\t\t\t\t\t\t\t\t\t_ctx.modelValue.testcase_type === _ctx.ExerciseTestCaseType.HIDDEN ||\n\t\t\t\t\t\t\t\t\t_ctx.modelValue.testcase_type === _ctx.ExerciseTestCaseType.SHOW_TEXT_ONLY\n\t\t\t\t\t\t\t\t)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_22, [\n _hoisted_23,\n _createTextVNode(_toDisplayString(_ctx.$t(\"misc.hidden\")), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _: 1\n }, 8, [\"modelValue\"])\n ])),\n _createVNode(_component_TextEditor, {\n onBlur: _cache[8] || (_cache[8] = ($event: any) => (_ctx.$emit('blur'))),\n class: _normalizeClass({\n\t\t\t\t\t\t'col-span-6':\n\t\t\t\t\t\t\t_ctx.testCaseType === _ctx.ExerciseType.JS || _ctx.testCaseType === _ctx.ExerciseType.PYTHON,\n\t\t\t\t\t\t'md:col-span-5 col-span-7': _ctx.testCaseType === _ctx.ExerciseType.C,\n\t\t\t\t\t}),\n modelValue: _ctx.modelValue.text,\n \"onUpdate:modelValue\": _cache[9] || (_cache[9] = ($event: any) => (_ctx.onUpdate('text', $event)))\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_24, [\n _createElementVNode(\"p\", _hoisted_25, _toDisplayString(_ctx.$t(\"exercise_editor.testcase_text\")), 1),\n (_ctx.modelValue.testcase_type === _ctx.ExerciseTestCaseType.HIDDEN)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_26, [\n _hoisted_27,\n _createTextVNode(_toDisplayString(_ctx.$t(\"exercise_editor.hidden_to_students\")), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _: 1\n }, 8, [\"class\", \"modelValue\"]),\n (_ctx.testCaseType === _ctx.ExerciseType.C && !_ctx.showAttachmentArea)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 2,\n class: \"-mt-4 col-span-3 w-max\",\n onClick: _cache[10] || (_cache[10] = ($event: any) => (_ctx.showAttachmentArea = true)),\n variant: 'primary-borderless',\n size: 'xs'\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", _hoisted_28, _toDisplayString(_ctx.$t(\"exercise_editor.testcase_add_attachments\")), 1)\n ]),\n _: 1\n }))\n : (_ctx.testCaseType === _ctx.ExerciseType.C)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_29, [\n _createElementVNode(\"h5\", _hoisted_30, _toDisplayString(_ctx.$t(\"exercise_editor.testcase_attachments\")), 1),\n _createElementVNode(\"p\", _hoisted_31, _toDisplayString(_ctx.$t(\"exercise_editor.testcase_attachments_description\")), 1),\n _createElementVNode(\"div\", _hoisted_32, [\n _createElementVNode(\"div\", _hoisted_33, [\n _createVNode(_component_FileUpload, {\n small: true,\n autoUpload: true,\n modelValue: _ctx.attachmentProxy,\n \"onUpdate:modelValue\": _cache[11] || (_cache[11] = ($event: any) => ((_ctx.attachmentProxy) = $event))\n }, null, 8, [\"modelValue\"])\n ]),\n (_ctx.attachments.length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_34, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.attachments, (testcaseAttachment) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"flex items-center w-full my-0.5\",\n key: 'attachment-' + testcaseAttachment.id\n }, [\n _createElementVNode(\"div\", _hoisted_35, [\n _hoisted_36,\n _createElementVNode(\"p\", _hoisted_37, _toDisplayString(testcaseAttachment.attachment.name), 1),\n _createElementVNode(\"p\", _hoisted_38, _toDisplayString(testcaseAttachment.attachment.size / 1000) + \" KB \", 1),\n _createVNode(_component_Btn, {\n onClick: ($event: any) => (_ctx.$emit('downloadAttachment', testcaseAttachment)),\n size: 'xs',\n outline: true,\n variant: 'icon'\n }, {\n default: _withCtx(() => [\n _hoisted_39\n ]),\n _: 2\n }, 1032, [\"onClick\"])\n ]),\n _createVNode(_component_Btn, {\n class: \"transition-opacity duration-100 ml-auto mr-2.5 opacity-50 hover:opacity-100\",\n onClick: ($event: any) => (_ctx.$emit('deleteAttachment', testcaseAttachment)),\n variant: 'icon',\n size: 'xs',\n outline: true\n }, {\n default: _withCtx(() => [\n _hoisted_40\n ]),\n _: 2\n }, 1032, [\"onClick\"])\n ]))\n }), 128))\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ])\n ]))\n}","\nimport {\n\tCodeExecutionResults as ICodeExecutionResults,\n\tEventParticipationSlot,\n\tExerciseTestCase,\n\tExerciseTestCaseAttachment,\n\tExerciseTestCaseType,\n\tExerciseType,\n\tTestCaseExecutionResults,\n} from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport TextEditor from \"@/components/ui/TextEditor.vue\";\nimport CodeEditor from \"@/components/ui/CodeEditor.vue\";\nimport SegmentedControls from \"@/components/ui/SegmentedControls.vue\";\nimport { testcaseTypeOptions } from \"@/const\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport Tooltip from \"@/components/ui/Tooltip.vue\";\nimport Spinner from \"@/components/ui/Spinner.vue\";\nimport CodeExecutionResults from \"@/components/shared/CodeExecutionResults.vue\";\nimport FileUpload from \"@/components/ui/FileUpload.vue\";\n\nexport default defineComponent({\n\tname: \"TestCaseEditor\",\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\ttestCaseType: {\n\t\t\ttype: Number as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\texecutionResultsSlots: {\n\t\t\ttype: Array as PropType,\n\t\t},\n\t\texecutingSolution: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tattachments: {\n\t\t\ttype: Array as PropType,\n\t\t\tdefault: () => [],\n\t\t},\n\t\t// TODO add language prop\n\t},\n\twatch: {\n\t\t// TODO review, it might be shared among components\n\t\tattachments: {\n\t\t\tdeep: true,\n\t\t\thandler(newVal) {\n\t\t\t\tif (newVal.length > 0) {\n\t\t\t\t\tthis.showAttachmentArea = true;\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t},\n\tcomponents: {\n\t\tTextEditor,\n\t\tCodeEditor,\n\t\tSegmentedControls,\n\t\tBtn,\n\t\tTooltip,\n\t\tSpinner,\n\t\tCodeExecutionResults,\n\t\tFileUpload,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\ttestcaseTypeOptions,\n\t\t\tExerciseTestCaseType,\n\t\t\tExerciseType,\n\t\t\tshowAttachmentArea: false,\n\t\t};\n\t},\n\tmethods: {\n\t\tonUpdate(field: keyof ExerciseTestCase, value: unknown) {\n\t\t\tthis.$emit(\"testCaseUpdate\", { field, value });\n\t\t},\n\t},\n\tcomputed: {\n\t\tattachmentProxy: {\n\t\t\tget() {\n\t\t\t\treturn [];\n\t\t\t},\n\t\t\tset(val: any) {\n\t\t\t\tthis.$emit(\"createAttachment\", val);\n\t\t\t},\n\t\t},\n\t\texecutionResults(): ICodeExecutionResults[] {\n\t\t\treturn (this.executionResultsSlots ?? []).map(\n\t\t\t\ts => s.execution_results ?? { state: \"completed\", tests: [] },\n\t\t\t);\n\t\t},\n\t\tnonPassingExecutionResults(): ICodeExecutionResults[] {\n\t\t\treturn this.executionResults.filter(e => {\n\t\t\t\tconst testResults = (e.tests ?? []).find(t => t.id == this.modelValue.id);\n\t\t\t\treturn typeof testResults === \"undefined\" || !testResults.passed;\n\t\t\t});\n\t\t},\n\t\ttestCaseExecutionResults(): (TestCaseExecutionResults | undefined)[] {\n\t\t\treturn this.executionResults.map(r =>\n\t\t\t\tr.tests?.find(t => t.id == this.modelValue.id),\n\t\t\t);\n\t\t},\n\t\tallTestsPass(): boolean {\n\t\t\treturn this.testCaseExecutionResults.every(\n\t\t\t\tr => typeof r !== \"undefined\" && r.passed,\n\t\t\t);\n\t\t},\n\t},\n});\n","import { render } from \"./TestCaseEditor.vue?vue&type=template&id=3ecabee4&ts=true\"\nimport script from \"./TestCaseEditor.vue?vue&type=script&lang=ts\"\nexport * from \"./TestCaseEditor.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport { v4 as uuid4 } from \"uuid\";\nimport Dropdown from \"@/components/ui/Dropdown.vue\";\nimport Dialog from \"@/components/ui/Dialog.vue\";\nimport draggable from \"vuedraggable\";\n\nimport {\n\tgetBlankChoice,\n\tExercise,\n\tExerciseState,\n\tExerciseChoice,\n\tExerciseType,\n\tExerciseTestCase,\n\tgetBlankTestCase,\n\tgetBlankExercise,\n\tEventParticipationSlot,\n\tgetFakeEventParticipationSlot,\n\tExerciseSolution,\n\tgetBlankExerciseSolution,\n\tExerciseSolutionState,\n\tprogrammingExerciseTypeToLanguageId,\n\tProgrammingExerciseType,\n\tExerciseTestCaseAttachment,\n\tprogrammingExerciseTypes,\n} from \"@/models\";\nimport Card from \"@/components/ui/Card.vue\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport useVuelidate from \"@vuelidate/core\";\n\nimport TextEditor from \"@/components/ui/TextEditor.vue\";\nimport TextInput from \"@/components/ui/TextInput.vue\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport TagInput from \"@/components/ui/TagInput.vue\";\n\nimport ChoiceEditor from \"@/components/teacher/ExerciseEditor/ChoiceEditor.vue\";\nimport CloudSaveStatus from \"@/components/ui/CloudSaveStatus.vue\";\nimport { courseIdMixin, loadingMixin, savingMixin } from \"@/mixins\";\nimport { DialogData } from \"@/interfaces\";\n\nimport { AutoSaveManager } from \"@/autoSave\";\nimport {\n\texerciseStateOptions,\n\texerciseTypeOptions,\n\tEXERCISE_AUTO_SAVE_DEBOUNCED_FIELDS,\n\tEXERCISE_AUTO_SAVE_DEBOUNCE_TIME_MS,\n\tEXERCISE_CHOICE_AUTO_SAVE_DEBOUNCED_FIELDS,\n\tEXERCISE_CHOICE_AUTO_SAVE_DEBOUNCE_TIME_MS,\n\tTEST_CASE_AUTO_SAVE_DEBOUNCED_FIELDS,\n\tTEST_CASE_AUTO_SAVE_DEBOUNCE_TIME_MS,\n\tCLOZE_SEPARATOR,\n\tEXERCISE_SOLUTION_AUTO_SAVE_DEBOUNCE_FIELDS,\n\tEXERCISE_SOLUTION_AUTO_SAVE_DEBOUNCE_TIME_MS,\n\tCLOZE_PLACEHOLDER_REGEX,\n} from \"@/const\";\nimport CodeEditor from \"@/components/ui/CodeEditor.vue\";\nimport TestCaseEditor from \"./TestCaseEditor.vue\";\nimport Tooltip from \"@/components/ui/Tooltip.vue\";\nimport Toggle from \"@/components/ui/Toggle.vue\";\nimport {\n\tdownloadExerciseTestCaseAttachment,\n\theartbeatExercise,\n\ttestProgrammingExerciseSolution,\n\tunlockExercise,\n} from \"@/api/exercises\";\nimport CodeExecutionResults from \"@/components/shared/CodeExecutionResults.vue\";\nimport NumberInput from \"@/components/ui/NumberInput.vue\";\nimport { exerciseValidation } from \"@/validation/models\";\nimport ArticleHandle from \"@/components/shared/HelpCenter/ArticleHandle.vue\";\nimport {\n\tgetMaxScore,\n\tisMultipleChoiceExercise,\n\tisProgrammingExercise,\n} from \"@/components/shared/Exercise/utils\";\nimport { ExerciseSolutionSearchFilter } from \"@/api/interfaces\";\nimport SlotSkeleton from \"@/components/ui/skeletons/SlotSkeleton.vue\";\nimport { forceFileDownload, getCurrentUserId, setErrorNotification } from \"@/utils\";\nimport { mapStores } from \"pinia\";\nimport { useMainStore } from \"@/stores/mainStore\";\nimport { useMetaStore } from \"@/stores/metaStore\";\nimport ClozeExercise from \"@/components/shared/Exercise/ClozeExercise.vue\";\n\nexport default defineComponent({\n\tname: \"ExerciseEditor\",\n\tcomponents: {\n\t\tCard,\n\t\tTextEditor,\n\t\tTextInput,\n\t\tDropdown,\n\t\tChoiceEditor,\n\t\tBtn,\n\t\tTagInput,\n\t\tCloudSaveStatus,\n\t\tDialog,\n\t\tdraggable,\n\t\tCodeEditor,\n\t\tTestCaseEditor,\n\t\tTooltip,\n\t\tToggle,\n\t\tCodeExecutionResults,\n\t\tNumberInput,\n\t\tArticleHandle,\n\t\tSlotSkeleton,\n\t\tClozeExercise,\n\t},\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\tsubExercise: {\n\t\t\t// hides certain fields depending on whether the exercise\n\t\t\t// is a base- or sub-exercise\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tcloze: {\n\t\t\t// hides certain fields depending on whether the exercise is a cloze\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tinvalidChildWeight: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tmixins: [courseIdMixin, savingMixin, loadingMixin],\n\tvalidations() {\n\t\treturn {\n\t\t\tmodelValue: exerciseValidation,\n\t\t};\n\t},\n\tsetup() {\n\t\tconst v = useVuelidate();\n\t\t//provide(\"v$\", v);\n\t\treturn { v$: v };\n\t},\n\tbeforeUnmount() {\n\t\tthis.unlockEditingObject();\n\t},\n\tasync created() {\n\t\t// fetch exercise to make sure to have the most up to date version\n\t\tawait this.$nextTick(\n\t\t\t// nextTick required to prevent render issues with vue-draggable\n\t\t\tasync () => {\n\t\t\t\tthis.fetchingExercise = true;\n\t\t\t\t// TODO overwriting the whole exercise isn't necessary, what we really want is locked_by\n\t\t\t\ttry {\n\t\t\t\t\tawait this.mainStore.getExercise({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\texerciseId: this.modelValue.id,\n\t\t\t\t\t});\n\t\t\t\t} catch (e) {\n\t\t\t\t\tsetErrorNotification(e);\n\t\t\t\t} finally {\n\t\t\t\t\tthis.fetchingExercise = false;\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\n\t\tawait this.lockEditingObject();\n\n\t\tthis.autoSaveManager = new AutoSaveManager(\n\t\t\tthis.modelValue,\n\t\t\tasync changes =>\n\t\t\t\tawait this.mainStore.updateExercise({\n\t\t\t\t\t// TODO use partial update\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\texercise: { ...this.modelValue, ...changes },\n\t\t\t\t}),\n\t\t\tchanges => {\n\t\t\t\tthis.saving = true;\n\t\t\t\tthis.savingError = false;\n\t\t\t\tthis.mainStore.setExercise({ ...this.modelValue, ...changes });\n\t\t\t},\n\t\t\tEXERCISE_AUTO_SAVE_DEBOUNCED_FIELDS,\n\t\t\tEXERCISE_AUTO_SAVE_DEBOUNCE_TIME_MS,\n\t\t\tundefined,\n\t\t\t() => (this.savingError = true),\n\t\t\t() => (this.saving = false),\n\t\t);\n\n\t\t// instantiate managers for children\n\t\tthis.modelValue.choices?.forEach(c =>\n\t\t\t// TODO extract auto-save manager instantiation to module\n\t\t\tthis.instantiateChoiceAutoSaveManager(c),\n\t\t);\n\n\t\t// for test cases, also fetch attachments\n\t\tthis.modelValue.testcases?.forEach(t => {\n\t\t\tthis.instantiateTestCaseAutoSaveManager(t);\n\t\t\tthis.mainStore.getExerciseTestCaseAttachments({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\texerciseId: this.modelValue.id,\n\t\t\t\ttestcaseId: t.id,\n\t\t\t});\n\t\t});\n\n\t\tthis.loadingSolutions = true;\n\t\ttry {\n\t\t\tawait this.mainStore.getSolutionsByExercise({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\texerciseId: this.modelValue.id,\n\t\t\t\tfromFirstPage: true, // TODO handle solutions on multiple pages\n\t\t\t\tfilter: {\n\t\t\t\t\tstates: [ExerciseSolutionState.APPROVED],\n\t\t\t\t} as ExerciseSolutionSearchFilter,\n\t\t\t});\n\t\t\tthis.solutions.forEach(s => this.instantiateSolutionAutoSaveManager(s));\n\t\t} catch (e) {\n\t\t\tsetErrorNotification(e);\n\t\t} finally {\n\t\t\tthis.loadingSolutions = false;\n\t\t}\n\t},\n\tmounted() {\n\t\tif (this.cloze) {\n\t\t\t(this.v$ as any).$touch();\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tloadingSolutions: false,\n\t\t\tautoSaveManager: null as AutoSaveManager | null,\n\t\t\tchoiceAutoSaveManagers: {} as Record>,\n\t\t\ttestCaseAutoSaveManagers: {} as Record>,\n\t\t\tsolutionAutoSaveManagers: {} as Record>,\n\t\t\telementId: uuid4(),\n\t\t\tshowSaved: false,\n\t\t\tsaving: false,\n\t\t\tsavingError: false,\n\t\t\tshowDialog: false,\n\t\t\tshowValidationErrors: false,\n\t\t\tpreventEdit: true,\n\t\t\tdialogData: {\n\t\t\t\ttitle: \"\",\n\t\t\t\ttext: \"\",\n\t\t\t\tonNo: null as null | (() => void),\n\t\t\t\tonYes: null as null | (() => void),\n\t\t\t\terror: false,\n\t\t\t\tconfirmOnly: false,\n\t\t\t} as DialogData,\n\t\t\texerciseStateOptions,\n\t\t\tExerciseState,\n\t\t\tExerciseType,\n\t\t\ttextEditorInstance: null as any,\n\t\t\teditingClozeSubExerciseId: null as string | null,\n\t\t\teditableClozeSubExerciseId: null as string | null,\n\t\t\tsolutionTestSlots: {} as Record,\n\t\t\ttestingSolutions: {} as Record,\n\t\t\tshowStickyStateDropdown: false,\n\t\t\tlockPollingHandle: null as null | number,\n\t\t\theartbeatHandle: null as null | number,\n\t\t\tfetchingExercise: false,\n\t\t\taddingCloze: false,\n\t\t};\n\t},\n\tmethods: {\n\t\tasync onChoiceDragEnd(event: { oldIndex: number; newIndex: number }) {\n\t\t\tconst draggedChoice = (this.modelValue.choices as ExerciseChoice[])[event.oldIndex];\n\n\t\t\tif (event.oldIndex !== event.newIndex) {\n\t\t\t\tawait this.onUpdateChoice(draggedChoice.id, \"_ordering\", event.newIndex);\n\t\t\t}\n\t\t},\n\t\tasync onBlur() {\n\t\t\tawait this.autoSaveManager?.flush();\n\t\t},\n\t\tasync onBaseExerciseChange(key: K, value: Exercise[K]) {\n\t\t\tawait this.autoSaveManager?.onChange({ [key]: value });\n\t\t},\n\t\tasync lockEditingObject() {\n\t\t\tconst LOCK_POLLING_INTERVAL = 5000;\n\t\t\tconst LOCK_HEARTBEAT_INTERVAL = 10000;\n\n\t\t\tconst setUpHeartbeatPollingFn = () =>\n\t\t\t\t(this.heartbeatHandle = setInterval(\n\t\t\t\t\t// TODO defensively handle failures, i.e. lock might've been passed onto someone else\n\t\t\t\t\tasync () => await heartbeatExercise(this.courseId, this.modelValue.id),\n\t\t\t\t\tLOCK_HEARTBEAT_INTERVAL,\n\t\t\t\t));\n\n\t\t\ttry {\n\t\t\t\tawait this.mainStore.lockExercise({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\texerciseId: this.modelValue.id,\n\t\t\t\t});\n\t\t\t\tsetUpHeartbeatPollingFn();\n\t\t\t} catch (e: any) {\n\t\t\t\tif (e.response?.status === 403) {\n\t\t\t\t\t// if lock can't be acquired at the moment, periodically\n\t\t\t\t\t// poll to see if the object is still locked, stopping\n\t\t\t\t\t// once the lock has been acquired by the requesting user\n\t\t\t\t\tthis.lockPollingHandle = setInterval(async () => {\n\t\t\t\t\t\tawait this.mainStore.getExercise({\n\t\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\t\texerciseId: this.modelValue.id,\n\t\t\t\t\t\t});\n\t\t\t\t\t\t// user has finally acquired the lock; stop polling\n\t\t\t\t\t\tif (this.modelValue.locked_by?.id === getCurrentUserId()) {\n\t\t\t\t\t\t\tclearInterval(this.lockPollingHandle as number);\n\t\t\t\t\t\t\tsetUpHeartbeatPollingFn();\n\t\t\t\t\t\t\tthis.lockPollingHandle = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}, LOCK_POLLING_INTERVAL);\n\t\t\t\t} else {\n\t\t\t\t\tsetErrorNotification(e);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tasync unlockEditingObject() {\n\t\t\tif (typeof this.heartbeatHandle === \"number\") {\n\t\t\t\tclearInterval(this.heartbeatHandle);\n\t\t\t}\n\t\t\tif (typeof this.lockPollingHandle === \"number\") {\n\t\t\t\tclearInterval(this.lockPollingHandle);\n\t\t\t}\n\t\t\tawait unlockExercise(this.courseId, this.modelValue.id);\n\t\t},\n\t\tonFocusNonDraft() {\n\t\t\tthis.showDialog = true;\n\t\t\tthis.dialogData = {\n\t\t\t\ttitle: _(\"exercise_editor.edit_non_draft_title\"),\n\t\t\t\ttext: _(\"exercise_editor.edit_non_draft_body\"),\n\t\t\t\tyesText: _(\"misc.edit\"),\n\t\t\t\tnoText: _(\"dialog.default_cancel_text\"),\n\t\t\t\tonNo: () => (this.showDialog = false),\n\t\t\t\tonYes: () => {\n\t\t\t\t\tthis.preventEdit = false;\n\t\t\t\t\tthis.showDialog = false;\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\tasync onTestSolution(solutionId?: string) {\n\t\t\ttry {\n\t\t\t\tif (solutionId) {\n\t\t\t\t\tthis.testingSolutions[solutionId] = true;\n\t\t\t\t\tawait this.solutionAutoSaveManagers[solutionId]?.flush();\n\t\t\t\t}\n\n\t\t\t\tconst executionResults = await testProgrammingExerciseSolution(\n\t\t\t\t\tthis.courseId,\n\t\t\t\t\tthis.modelValue.id,\n\t\t\t\t);\n\n\t\t\t\tObject.keys(executionResults).forEach(sId => {\n\t\t\t\t\tif (!solutionId || sId == solutionId) {\n\t\t\t\t\t\tconst fakeSlot = (this.solutionTestSlots[sId] ??=\n\t\t\t\t\t\t\tgetFakeEventParticipationSlot(this.modelValue));\n\t\t\t\t\t\tfakeSlot.execution_results = executionResults[sId];\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t} finally {\n\t\t\t\tif (solutionId) {\n\t\t\t\t\tthis.testingSolutions[solutionId] = false;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tonTextSelectionChange(event: {\n\t\t\tfullText: string;\n\t\t\ttext: string;\n\t\t\trange: { index: number; length: number };\n\t\t}) {\n\t\t\t/**\n\t\t\t * Used to detect whether the text cursor is positioned within the limits\n\t\t\t * of a cloze exercise placeholder (i.e. [[]])\n\t\t\t */\n\t\t\tif (this.modelValue.exercise_type !== ExerciseType.COMPLETION) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst clozeSeparatorPositions: [number, string, string][] = [\n\t\t\t\t...event.fullText.matchAll(CLOZE_PLACEHOLDER_REGEX),\n\t\t\t].map(m => [\n\t\t\t\tm.index as number, // position of the match\n\t\t\t\tm[0], // full text match (e.g. `[[123]]`)\n\t\t\t\tm[1], // capture group match, in this case the id of the cloze sub exercise\n\t\t\t]);\n\t\t\tif (\n\t\t\t\tevent.range.length === 0\n\t\t\t\t//&& event.text.includes(CLOZE_SEPARATOR)\n\t\t\t) {\n\t\t\t\tlet i = 0;\n\t\t\t\tfor (const [matchPosition, matchText, clozeId] of clozeSeparatorPositions) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tevent.range.index >= matchPosition &&\n\t\t\t\t\t\tevent.range.index + event.range.length <= matchPosition + matchText.length\n\t\t\t\t\t) {\n\t\t\t\t\t\tthis.editableClozeSubExerciseId = clozeId;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\ti++;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.editableClozeSubExerciseId = null;\n\t\t},\n\t\tonExerciseTypeChange(newVal: ExerciseType) {\n\t\t\tthis.onBaseExerciseChange(\"exercise_type\", newVal);\n\t\t},\n\t\t/* CRUD on related objects */\n\t\tasync onAddSolution() {\n\t\t\tconst newSolution: ExerciseSolution = await this.mainStore.createExerciseSolution({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\texerciseId: this.modelValue.id,\n\t\t\t\tsolution: getBlankExerciseSolution(ExerciseSolutionState.APPROVED),\n\t\t\t});\n\t\t\tthis.instantiateSolutionAutoSaveManager(newSolution);\n\t\t},\n\t\tasync onUpdateSolution(\n\t\t\tsolutionId: string,\n\t\t\tkey: K,\n\t\t\tvalue: ExerciseSolution[K],\n\t\t) {\n\t\t\tawait this.solutionAutoSaveManagers[solutionId].onChange({\n\t\t\t\t[key]: value,\n\t\t\t});\n\t\t},\n\t\tasync onBlurSolution(solutionId: string) {\n\t\t\tawait this.solutionAutoSaveManagers[solutionId].flush();\n\t\t},\n\t\tasync onAddChoice() {\n\t\t\t// when the exercise is set to be all_or_nothing, we need to make sure that\n\t\t\t// incorrect choices have a `correctness` value of -1.\n\t\t\t//.if we didn't do this, then by all_or_nothing logic the choice would\n\t\t\t// actually be considered true because selecting it doesn't\n\t\t\t// decrease the score obtained\n\t\t\tconst score = this.modelValue.all_or_nothing ? -1 : 0;\n\n\t\t\tconst newChoice: ExerciseChoice = await this.mainStore.createExerciseChild({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\texerciseId: this.modelValue.id,\n\t\t\t\tchildType: \"choice\",\n\t\t\t\tpayload: getBlankChoice(score),\n\t\t\t});\n\t\t\tthis.instantiateChoiceAutoSaveManager(newChoice);\n\t\t},\n\t\tasync onUpdateChoice(\n\t\t\tchoiceId: string,\n\t\t\tkey: K,\n\t\t\tvalue: ExerciseChoice[K],\n\t\t) {\n\t\t\tawait this.choiceAutoSaveManagers[choiceId].onChange({\n\t\t\t\t[key]: value,\n\t\t\t});\n\t\t},\n\t\tasync onBlurChoice(choiceId: string) {\n\t\t\tawait this.choiceAutoSaveManagers[choiceId].flush();\n\t\t},\n\t\tasync onDeleteChoice(choiceId: string) {\n\t\t\tif (confirm(_(\"exercise_editor.confirm_delete_choice\"))) {\n\t\t\t\tawait this.withLoading(\n\t\t\t\t\tasync () =>\n\t\t\t\t\t\tawait this.mainStore.deleteExerciseChild({\n\t\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\t\texerciseId: this.modelValue.id,\n\t\t\t\t\t\t\tchildType: \"choice\",\n\t\t\t\t\t\t\tchildId: choiceId,\n\t\t\t\t\t\t}),\n\t\t\t\t\tsetErrorNotification,\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\tasync onDeleteSolution(solutionId: string) {\n\t\t\tif (confirm(_(\"exercise_editor.confirm_delete_solution\"))) {\n\t\t\t\tawait this.withLoading(\n\t\t\t\t\tasync () =>\n\t\t\t\t\t\tawait this.mainStore.deleteExerciseSolution({\n\t\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\t\texerciseId: this.modelValue.id,\n\t\t\t\t\t\t\tsolutionId,\n\t\t\t\t\t\t}),\n\t\t\t\t\tsetErrorNotification,\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\tasync onAddSubExercise() {\n\t\t\tconst newSubExercise: Exercise = await this.mainStore.createExerciseChild({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\texerciseId: this.modelValue.id,\n\t\t\t\tchildType: \"sub_exercise\",\n\t\t\t\tpayload: getBlankExercise(),\n\t\t\t});\n\t\t\treturn newSubExercise;\n\t\t},\n\t\tasync onDeleteSubExercise(exerciseId: string) {\n\t\t\tif (confirm(_(\"exercise_editor.confirm_delete_sub_exercise\"))) {\n\t\t\t\tawait this.withLoading(\n\t\t\t\t\tasync () =>\n\t\t\t\t\t\tawait this.mainStore.deleteExerciseChild({\n\t\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\t\texerciseId: this.modelValue.id,\n\t\t\t\t\t\t\tchildType: \"sub_exercise\",\n\t\t\t\t\t\t\tchildId: exerciseId,\n\t\t\t\t\t\t}),\n\t\t\t\t\tsetErrorNotification,\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\tasync onAddTestCase() {\n\t\t\tconst newTestcase: ExerciseTestCase = await this.mainStore.createExerciseChild({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\texerciseId: this.modelValue.id,\n\t\t\t\tchildType: \"testcase\",\n\t\t\t\tpayload: getBlankTestCase(),\n\t\t\t});\n\t\t\tthis.instantiateTestCaseAutoSaveManager(newTestcase);\n\t\t},\n\t\tasync onUpdateTestCase(\n\t\t\ttestCaseId: string,\n\t\t\tkey: K,\n\t\t\tvalue: ExerciseTestCase[K],\n\t\t) {\n\t\t\tawait this.testCaseAutoSaveManagers[testCaseId].onChange({\n\t\t\t\t[key]: value,\n\t\t\t});\n\t\t},\n\t\tasync onBlurTestCase(testcaseId: string) {\n\t\t\tawait this.testCaseAutoSaveManagers[testcaseId].flush();\n\t\t},\n\t\tasync onDeleteTestCase(testcaseId: string) {\n\t\t\tif (confirm(_(\"exercise_editor.confirm_delete_testcase\"))) {\n\t\t\t\tawait this.withLoading(\n\t\t\t\t\tasync () =>\n\t\t\t\t\t\tawait this.mainStore.deleteExerciseChild({\n\t\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\t\texerciseId: this.modelValue.id,\n\t\t\t\t\t\t\tchildType: \"testcase\",\n\t\t\t\t\t\t\tchildId: testcaseId,\n\t\t\t\t\t\t}),\n\t\t\t\t\tsetErrorNotification,\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\tasync onTestCaseCreateAttachment(testcaseId: string, attachment: Blob) {\n\t\t\tawait this.mainStore.createExerciseTestCaseAttachment({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\texerciseId: this.modelValue.id,\n\t\t\t\ttestcaseId,\n\t\t\t\tattachment,\n\t\t\t});\n\t\t},\n\t\tasync onTestCaseDeleteAttachment(\n\t\t\ttestcaseId: string,\n\t\t\tattachment: ExerciseTestCaseAttachment,\n\t\t) {\n\t\t\tif (\n\t\t\t\t!confirm(\n\t\t\t\t\t_(\"exercise_editor.confirm_delete_testcase_attachment\") +\n\t\t\t\t\t\t\" \" +\n\t\t\t\t\t\t(attachment.attachment as { name: string }).name +\n\t\t\t\t\t\t\"?\",\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait this.mainStore.deleteExerciseTestCaseAttachment({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\texerciseId: this.modelValue.id,\n\t\t\t\ttestcaseId,\n\t\t\t\tattachmentId: attachment.id,\n\t\t\t});\n\t\t},\n\t\tasync onTestCaseDownloadAttachment(\n\t\t\ttestcaseId: string,\n\t\t\tattachment: ExerciseTestCaseAttachment,\n\t\t) {\n\t\t\tforceFileDownload(\n\t\t\t\t{\n\t\t\t\t\tdata: await downloadExerciseTestCaseAttachment(\n\t\t\t\t\t\tthis.courseId,\n\t\t\t\t\t\tthis.modelValue.id,\n\t\t\t\t\t\ttestcaseId,\n\t\t\t\t\t\tattachment.id,\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\t(attachment.attachment as { name: string }).name,\n\t\t\t);\n\t\t},\n\t\tasync onAddTag(tag: string, isPublic: boolean) {\n\t\t\tawait this.mainStore.addExerciseTag({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\texerciseId: this.modelValue.id,\n\t\t\t\ttag,\n\t\t\t\tisPublic,\n\t\t\t});\n\t\t\tawait this.mainStore.getTags({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\tincludeExerciseCount: false,\n\t\t\t});\n\t\t},\n\t\tasync onRemoveTag(tag: string, isPublic: boolean) {\n\t\t\tawait this.mainStore.removeExerciseTag({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\texerciseId: this.modelValue.id,\n\t\t\t\ttag,\n\t\t\t\tisPublic,\n\t\t\t});\n\t\t},\n\t\tasync onAddCloze() {\n\t\t\tconst selection = this.textEditorInstance.getSelection();\n\t\t\tconst insertionIndex = selection\n\t\t\t\t? selection.index + selection.length\n\t\t\t\t: this.textEditorInstance.getLength();\n\n\t\t\ttry {\n\t\t\t\tthis.addingCloze = true;\n\t\t\t\tconst subExercise = await this.onAddSubExercise();\n\n\t\t\t\t// insert placeholder for new cloze sub-exercise\n\t\t\t\tthis.textEditorInstance.insertText(\n\t\t\t\t\tinsertionIndex,\n\t\t\t\t\tCLOZE_SEPARATOR(subExercise.id),\n\t\t\t\t);\n\n\t\t\t\t// focus on most recently added cloze\n\t\t\t\tthis.editingClozeSubExerciseId = subExercise.id;\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t} finally {\n\t\t\t\tthis.addingCloze = false;\n\t\t\t}\n\t\t},\n\t\t/* end CRUD on related objects */\n\t\tonExerciseStateChange(newState: ExerciseState) {\n\t\t\tthis.v$.$touch();\n\t\t\t// TODO don't show errors in sub-exercises, or show them separately\n\t\t\t// TODO highlight in red the number-input of child weights and and correctness score (for \"missing correct choice\" error)\n\t\t\t// validation errors dialog\n\t\t\tif (newState != ExerciseState.DRAFT && this.v$.$errors.length > 0) {\n\t\t\t\tthis.showDialog = true;\n\t\t\t\tthis.showValidationErrors = true;\n\t\t\t\tthis.dialogData = {\n\t\t\t\t\ttitle: _(\"exercise_editor.cannot_publish\"),\n\t\t\t\t\ttext: _(\"exercise_editor.cannot_publish_body\"),\n\t\t\t\t\tonYes: () => {\n\t\t\t\t\t\tthis.showDialog = false;\n\t\t\t\t\t\tthis.showValidationErrors = false;\n\t\t\t\t\t},\n\t\t\t\t\terror: true,\n\t\t\t\t\tconfirmOnly: true,\n\t\t\t\t};\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// publish exercise confirmation\n\t\t\tif (newState === ExerciseState.PUBLIC) {\n\t\t\t\tthis.showDialog = true;\n\t\t\t\tthis.dialogData = {\n\t\t\t\t\ttitle: _(\"exercise_editor.make_public_confirmation_title\"),\n\t\t\t\t\ttext: _(\"exercise_editor.make_public_confirmation_body\"),\n\t\t\t\t\tonYes: () => {\n\t\t\t\t\t\tthis.onBaseExerciseChange(\"state\", newState);\n\t\t\t\t\t\tthis.showDialog = false;\n\t\t\t\t\t},\n\t\t\t\t\tonNo: () => (this.showDialog = false),\n\t\t\t\t\terror: false,\n\t\t\t\t\tconfirmOnly: false,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tthis.onBaseExerciseChange(\"state\", newState);\n\t\t\t}\n\t\t},\n\t\tinstantiateChoiceAutoSaveManager(choice: ExerciseChoice) {\n\t\t\tthis.choiceAutoSaveManagers[choice.id] = new AutoSaveManager(\n\t\t\t\tchoice,\n\t\t\t\tasync changes => {\n\t\t\t\t\t// if choices are re-ordered, re-fetch them from server\n\t\t\t\t\tconst reFetch = Object.keys(changes).includes(\"_ordering\");\n\t\t\t\t\tawait this.mainStore.updateExerciseChild({\n\t\t\t\t\t\tchildType: \"choice\",\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\texerciseId: this.modelValue.id,\n\t\t\t\t\t\tpayload: { ...choice, ...changes },\n\t\t\t\t\t\treFetch,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tchanges => {\n\t\t\t\t\tthis.saving = true;\n\t\t\t\t\tthis.savingError = false;\n\t\t\t\t\tthis.mainStore.setExerciseChild({\n\t\t\t\t\t\tchildType: \"choice\",\n\t\t\t\t\t\texerciseId: this.modelValue.id,\n\t\t\t\t\t\tpayload: { ...choice, ...changes },\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tEXERCISE_CHOICE_AUTO_SAVE_DEBOUNCED_FIELDS,\n\t\t\t\tEXERCISE_CHOICE_AUTO_SAVE_DEBOUNCE_TIME_MS,\n\t\t\t\tundefined,\n\t\t\t\t() => (this.savingError = true),\n\t\t\t\t() => (this.saving = false),\n\t\t\t);\n\t\t},\n\t\tinstantiateSolutionAutoSaveManager(solution: ExerciseSolution) {\n\t\t\tthis.solutionAutoSaveManagers[solution.id] = new AutoSaveManager(\n\t\t\t\tsolution,\n\t\t\t\tasync changes =>\n\t\t\t\t\tawait this.mainStore.updateExerciseSolution({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\texerciseId: this.modelValue.id,\n\t\t\t\t\t\tsolution: { ...solution, ...changes },\n\t\t\t\t\t}),\n\t\t\t\tchanges => {\n\t\t\t\t\tthis.saving = true;\n\t\t\t\t\tthis.savingError = false;\n\t\t\t\t\tthis.mainStore.setExerciseSolution({\n\t\t\t\t\t\texerciseId: this.modelValue.id,\n\t\t\t\t\t\tpayload: { ...solution, ...changes },\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tEXERCISE_SOLUTION_AUTO_SAVE_DEBOUNCE_FIELDS,\n\t\t\t\tEXERCISE_SOLUTION_AUTO_SAVE_DEBOUNCE_TIME_MS,\n\t\t\t\tundefined,\n\t\t\t\t() => (this.savingError = true),\n\t\t\t\t() => (this.saving = false),\n\t\t\t);\n\t\t},\n\t\tinstantiateTestCaseAutoSaveManager(testcase: ExerciseTestCase) {\n\t\t\tthis.testCaseAutoSaveManagers[testcase.id] = new AutoSaveManager(\n\t\t\t\ttestcase,\n\t\t\t\tasync changes => {\n\t\t\t\t\t// if choices are re-ordered, re-fetch them from server\n\t\t\t\t\tconst reFetch = Object.keys(changes).includes(\"_ordering\");\n\t\t\t\t\tawait this.mainStore.updateExerciseChild({\n\t\t\t\t\t\tchildType: \"testcase\",\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\texerciseId: this.modelValue.id,\n\t\t\t\t\t\tpayload: { ...testcase, ...changes },\n\t\t\t\t\t\treFetch,\n\t\t\t\t\t});\n\t\t\t\t\tawait this.onTestSolution();\n\t\t\t\t},\n\t\t\t\tchanges => {\n\t\t\t\t\tthis.saving = true;\n\t\t\t\t\tthis.savingError = false;\n\t\t\t\t\tthis.mainStore.setExerciseChild({\n\t\t\t\t\t\tchildType: \"testcase\",\n\t\t\t\t\t\texerciseId: this.modelValue.id,\n\t\t\t\t\t\tpayload: { ...testcase, ...changes },\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tTEST_CASE_AUTO_SAVE_DEBOUNCED_FIELDS,\n\t\t\t\tTEST_CASE_AUTO_SAVE_DEBOUNCE_TIME_MS,\n\t\t\t\tundefined,\n\t\t\t\t() => (this.savingError = true),\n\t\t\t\t() => (this.saving = false),\n\t\t\t);\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore, useMetaStore),\n\t\tsolutions() {\n\t\t\treturn this.mainStore.getPaginatedSolutionsByExerciseId(this.modelValue.id).data;\n\t\t},\n\t\tshowNoChoicePenaltyWarning(): boolean {\n\t\t\treturn (\n\t\t\t\tthis.modelValue.exercise_type ===\n\t\t\t\t\tExerciseType.MULTIPLE_CHOICE_MULTIPLE_POSSIBLE &&\n\t\t\t\t!this.modelValue.all_or_nothing &&\n\t\t\t\t!this.v$.$invalid &&\n\t\t\t\t!(this.modelValue.choices ?? []).some(c => (c.correctness ?? 0) < 0)\n\t\t\t);\n\t\t},\n\t\tisMultipleChoice(): boolean {\n\t\t\treturn isMultipleChoiceExercise(this.modelValue);\n\t\t},\n\t\tisProgrammingExercise(): boolean {\n\t\t\treturn isProgrammingExercise(this.modelValue);\n\t\t},\n\t\tmaxScore(): number | null {\n\t\t\treturn getMaxScore(this.modelValue);\n\t\t},\n\t\texerciseTypeOptions() {\n\t\t\treturn exerciseTypeOptions.filter(\n\t\t\t\to => !this.subExercise || o.value !== ExerciseType.AGGREGATED,\n\t\t\t);\n\t\t},\n\t\tcanBeAllOrNothing() {\n\t\t\tconst allOrNothingTypes = [\n\t\t\t\tExerciseType.MULTIPLE_CHOICE_MULTIPLE_POSSIBLE,\n\t\t\t\t...programmingExerciseTypes,\n\t\t\t];\n\t\t\tconsole.log(\n\t\t\t\t\"All\",\n\t\t\t\tallOrNothingTypes,\n\t\t\t\tthis.modelValue.exercise_type,\n\t\t\t\tallOrNothingTypes.includes(this.modelValue.exercise_type as ExerciseType),\n\t\t\t);\n\t\t\treturn allOrNothingTypes.includes(this.modelValue.exercise_type as ExerciseType);\n\t\t},\n\t\texerciseLocked(): boolean {\n\t\t\treturn (\n\t\t\t\t!!this.modelValue.locked_by &&\n\t\t\t\tthis.modelValue.locked_by.id != this.metaStore.user.id\n\t\t\t);\n\t\t},\n\t\teditingCloze(): Exercise | null {\n\t\t\tif (this.editingClozeSubExerciseId === null) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn (this.modelValue.sub_exercises as Exercise[]).find(\n\t\t\t\ts => s.id == this.editingClozeSubExerciseId,\n\t\t\t) as Exercise;\n\t\t},\n\t\tchildWeightError() {\n\t\t\treturn (this.v$ as any).modelValue.$errors.find((e: any) =>\n\t\t\t\t[\"modelValue.sub_exercises-subExerciseWeightAddsUp\"].includes(e.$uid),\n\t\t\t);\n\t\t},\n\t\tchoicesCorrectnessError() {\n\t\t\treturn (this.v$ as any).modelValue.$errors.find((e: any) =>\n\t\t\t\t[\"modelValue.choices-atLeastOneCorrectChoice\"].includes(e.$uid),\n\t\t\t);\n\t\t},\n\t\tlanguageCode() {\n\t\t\treturn programmingExerciseTypeToLanguageId[\n\t\t\t\tthis.modelValue.exercise_type as ProgrammingExerciseType\n\t\t\t];\n\t\t},\n\t\tstateDropdownId() {\n\t\t\treturn \"exercise_state_\" + this.elementId;\n\t\t},\n\t\tmodelValueWrapperSlot() {\n\t\t\treturn getFakeEventParticipationSlot(this.modelValue);\n\t\t},\n\t},\n});\n","import { render } from \"./ExerciseEditor.vue?vue&type=template&id=24cc77d9&ts=true\"\nimport script from \"./ExerciseEditor.vue?vue&type=script&lang=ts\"\nexport * from \"./ExerciseEditor.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport Btn from \"@/components/ui/Btn.vue\";\n\nimport ExerciseEditor from \"@/components/teacher/ExerciseEditor/ExerciseEditor.vue\";\n//import ExercisePreview from \"@/components/teacher/ExerciseEditor/ExercisePreview.vue\";\nimport { Exercise } from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport { texMixin } from \"@/mixins\";\nimport { getTranslatedString } from \"@/i18n\";\nimport { getExerciseTitle } from \"@/utils\";\nimport MinimalExercisePreview from \"./MinimalExercisePreview.vue\";\nexport default defineComponent({\n\tname: \"ExerciseEditorWrapper\",\n\tcomponents: {\n\t\tExerciseEditor,\n\t\t// ExercisePreview,\n\t\tBtn,\n\t\tMinimalExercisePreview,\n\t},\n\tmixins: [texMixin],\n\tprops: {\n\t\texercise: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\tselectable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\teditable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tshowEditor: false,\n\t\t\tsaving: false,\n\t\t\tdialog: false,\n\t\t};\n\t},\n\t//created () {},\n\tmethods: {\n\t\ttoggleExpand() {\n\t\t\tthis.showEditor = !this.showEditor;\n\t\t\tif (!this.showEditor) {\n\t\t\t\tthis.triggerTexRender();\n\t\t\t}\n\t\t},\n\t\tonClone() {\n\t\t\tif (\n\t\t\t\tconfirm(\n\t\t\t\t\tgetTranslatedString(\"exercise_editor.clone_confirm\") +\n\t\t\t\t\t\t\" \" +\n\t\t\t\t\t\tgetExerciseTitle(this.exercise) +\n\t\t\t\t\t\t\"?\",\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tthis.$emit(\"cloneExercise\");\n\t\t\t}\n\t\t},\n\t},\n});\n","import { render } from \"./ExerciseEditorWrapper.vue?vue&type=template&id=68c72504&ts=true\"\nimport script from \"./ExerciseEditorWrapper.vue?vue&type=script&lang=ts\"\nexport * from \"./ExerciseEditorWrapper.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"relative\" }, [\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"absolute top-0 flex w-full\" }, [\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-5/12 h-5 mr-4 skeleton-unit\" }),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-1/12 h-5 mr-2 rounded-full skeleton-unit\" }),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-1/12 h-5 rounded-full skeleton-unit\" }),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-10 h-5 ml-auto rounded-full skeleton-unit\" })\n ]),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"flex items-center opacity-0\" }, [\n /*#__PURE__*/_createElementVNode(\"h4\", null, \" \"),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"my-auto ml-4 chip\" }, [\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"flex items-center\" }, [\n /*#__PURE__*/_createElementVNode(\"p\", null, \" \")\n ])\n ])\n ])\n], -1)\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"relative h-20\" }, [\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"absolute top-0 flex flex-col w-full space-y-2 max-h-20\" }, [\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-full h-5 skeleton-unit\" }),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-full h-5 skeleton-unit\" }),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-full h-5 skeleton-unit\" })\n ]),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"overflow-x-hidden overflow-y-auto opacity-0 overflow-ellipsis max-h-20\" }, [\n /*#__PURE__*/_createElementVNode(\"div\", null, \" \")\n ])\n], -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createBlock(_component_Card, null, {\n header: _withCtx(() => [\n _hoisted_1\n ]),\n body: _withCtx(() => [\n _hoisted_2\n ]),\n _: 1\n }))\n}","\nimport { defineComponent } from \"vue\";\nimport Card from \"../Card.vue\";\n\nexport default defineComponent({\n\tname: \"ExerciseEditorWrapperSkeleton\",\n\tcomponents: { Card },\n});\n","import { render } from \"./ExerciseEditorWrapperSkeleton.vue?vue&type=template&id=40a1b9d3&ts=true\"\nimport script from \"./ExerciseEditorWrapperSkeleton.vue?vue&type=script&lang=ts\"\nexport * from \"./ExerciseEditorWrapperSkeleton.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, withKeys as _withKeys, normalizeClass as _normalizeClass, resolveDirective as _resolveDirective, withDirectives as _withDirectives, vShow as _vShow, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"mb-4 banner banner-light\" }\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons\" }, \"science\", -1)\nconst _hoisted_3 = { class: \"mb-4\" }\nconst _hoisted_4 = { class: \"flex space-x-4\" }\nconst _hoisted_5 = [\"onKeydown\", \"onClick\"]\nconst _hoisted_6 = { class: \"flex\" }\nconst _hoisted_7 = [\"src\"]\nconst _hoisted_8 = { class: \"flex mt-4\" }\nconst _hoisted_9 = { class: \"mx-auto select-none\" }\nconst _hoisted_10 = { class: \"mb-4\" }\nconst _hoisted_11 = { class: \"flex flex-col w-full mt-10 space-y-6\" }\nconst _hoisted_12 = { class: \"relative flex self-start w-full space-x-4\" }\nconst _hoisted_13 = { class: \"text-lg\" }\nconst _hoisted_14 = { key: 0 }\nconst _hoisted_15 = { class: \"\" }\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"span\", {\n style: {\"margin-top\":\"-2px\",\"font-size\":\"18px\",\"vertical-align\":\"middle\"},\n class: \"mr-1 material-icons text-primary\"\n}, \" auto_awesome \", -1)\nconst _hoisted_17 = { class: \"mb-2 text-muted\" }\nconst _hoisted_18 = { class: \"grid grid-cols-2 gap-4\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Dropdown = _resolveComponent(\"Dropdown\")!\n const _component_ArticleHandle = _resolveComponent(\"ArticleHandle\")!\n const _component_Chipset = _resolveComponent(\"Chipset\")!\n const _component_MinimalExercisePreview = _resolveComponent(\"MinimalExercisePreview\")!\n const _directive_wave = _resolveDirective(\"wave\")!\n\n return (_openBlock(), _createElementBlock(\"div\", null, [\n _createElementVNode(\"div\", _hoisted_1, [\n _hoisted_2,\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t(\"misc.experimental_feature_warning\")), 1)\n ])\n ]),\n _withDirectives(_createElementVNode(\"div\", null, [\n _createElementVNode(\"h3\", _hoisted_3, _toDisplayString(_ctx.$t(\"exercise_import.select_format\")), 1),\n _createElementVNode(\"div\", _hoisted_4, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.dataFormatsAsSelectableOptions, (format) => {\n return _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n tabindex: \"0\",\n onKeydown: _withKeys(($event: any) => (_ctx.onSelect(format.value)), [\"enter\"]),\n onClick: ($event: any) => (_ctx.onSelect(format.value)),\n class: _normalizeClass([{\n\t\t\t\t\t\t'outline-success hover:bg-opacity-20 outline-4 border-transparent bg-success-light bg-opacity-10':\n\t\t\t\t\t\t\t_ctx.selectedFormat === format.value,\n\t\t\t\t\t\t'hover:bg-light': _ctx.selectedFormat !== format.value,\n\t\t\t\t\t}, \"transition-colors duration-100 cursor-pointer card card-border\"]),\n key: 'format-' + format.value\n }, [\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"img\", {\n class: \"mx-auto pointer-events-none select-none w-18\",\n src: format.description\n }, null, 8, _hoisted_7)\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n _createElementVNode(\"p\", _hoisted_9, _toDisplayString(format.content), 1)\n ])\n ], 42, _hoisted_5)), [\n [_directive_wave]\n ])\n }), 128))\n ]),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"mt-8 mb-2\", { invisible: _ctx.selectedFormat === null }])\n }, [\n _createElementVNode(\"h3\", _hoisted_10, _toDisplayString(_ctx.$t(\"exercise_import.choose_file\")), 1),\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"input\", {\n type: \"file\",\n onChange: _cache[0] || (_cache[0] = \n//@ts-ignore\n(...args) => (_ctx.onFileInputChange && _ctx.onFileInputChange(...args)))\n }, null, 32)\n ])\n ], 2)\n ], 512), [\n [_vShow, _ctx.currentStep === 'initial']\n ]),\n _withDirectives(_createElementVNode(\"div\", null, [\n _createElementVNode(\"div\", _hoisted_11, [\n _createElementVNode(\"div\", _hoisted_12, [\n _createElementVNode(\"p\", _hoisted_13, [\n _createElementVNode(\"strong\", null, _toDisplayString(_ctx.exercises.length), 1),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t(\"exercise_import.detected_exercises\")), 1)\n ]),\n (_ctx.exercises.length > 0)\n ? (_openBlock(), _createBlock(_component_Dropdown, {\n key: 0,\n class: \"self-start w-1/4 mb-auto -mt-3\",\n id: \"imported-exercises-state-dropdown\",\n options: _ctx.exerciseStateOptions,\n modelValue: _ctx.importedExercisesStateProxy,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((_ctx.importedExercisesStateProxy) = $event))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"exercise_import.imported_exercises_state\")), 1)\n ]),\n _: 1\n }, 8, [\"options\", \"modelValue\"]))\n : _createCommentVNode(\"\", true)\n ]),\n (_ctx.extras.tags?.length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_14, [\n _createElementVNode(\"h4\", _hoisted_15, [\n _hoisted_16,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t(\"exercise_import.extras_detected_tags\")), 1)\n ]),\n _createElementVNode(\"p\", _hoisted_17, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"exercise_import.extras_detected_tags_description\")) + \" \", 1),\n _createVNode(_component_ArticleHandle, { articleId: 'what_are_tags_for' }),\n _createTextVNode(\". \")\n ]),\n (_ctx.exercises.length > 0)\n ? (_openBlock(), _createBlock(_component_Chipset, {\n key: 0,\n class: \"-ml-2\",\n options: _ctx.tagsAsOptions,\n modelValue: _ctx.selectedTagsProxy,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((_ctx.selectedTagsProxy) = $event))\n }, null, 8, [\"options\", \"modelValue\"]))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_18, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.exercises, (exercise, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: 'imported-exercise-' + index,\n class: \"\"\n }, [\n _createVNode(_component_MinimalExercisePreview, {\n selectable: false,\n exercise: exercise\n }, null, 8, [\"exercise\"])\n ]))\n }), 128))\n ])\n ])\n ], 512), [\n [_vShow, _ctx.currentStep === 'file_chosen']\n ])\n ]))\n}","import { CLOZE_SEPARATOR } from \"@/const\";\nimport { Exercise, ExerciseType } from \"@/models\";\nimport { MoodleCategory, MoodleQuestion } from \"./interfaces\";\n\nconst parseString = require(\"xml2js\").parseString;\n\nexport const xmlToJson = async (xml: string): Promise =>\n\tnew Promise((resolve, reject) => {\n\t\tparseString(xml, (err: any, result: any) => (err ? reject(err) : resolve(result)));\n\t});\n\nexport const getTagsFromMoodleCategory = (category: MoodleCategory): string[] =>\n\tcategory[0].text[0].split(\"$course$/\")[1].split(\"/\");\n\nexport const getExerciseTypeFromMoodleQuestion = (\n\tq: MoodleQuestion,\n): { exerciseType: ExerciseType | undefined; extras: any } => {\n\tconst questionType = q.$.type;\n\tif (questionType === \"truefalse\") {\n\t\treturn { exerciseType: ExerciseType.MULTIPLE_CHOICE_SINGLE_POSSIBLE, extras: {} };\n\t}\n\tif (questionType === \"multichoice\") {\n\t\treturn {\n\t\t\texerciseType: JSON.parse(q.single[0])\n\t\t\t\t? ExerciseType.MULTIPLE_CHOICE_SINGLE_POSSIBLE\n\t\t\t\t: ExerciseType.MULTIPLE_CHOICE_MULTIPLE_POSSIBLE,\n\t\t\textras: {},\n\t\t};\n\t}\n\tif (questionType === \"multichoiceset\") {\n\t\treturn {\n\t\t\texerciseType: ExerciseType.MULTIPLE_CHOICE_MULTIPLE_POSSIBLE,\n\t\t\textras: { all_or_nothing: true },\n\t\t};\n\t}\n\tif (questionType === \"cloze\") {\n\t\treturn { exerciseType: ExerciseType.COMPLETION, extras: {} };\n\t}\n\treturn { exerciseType: undefined, extras: {} };\n};\n\nconst clozeSubQuestionRegex =\n\t/\\{(\\d*\\s*):(MULTICHOICE|MC):(=?([^#}]*)\\s*#?\\s*([^~}]*\\s*)?)+\\}/g;\n\nexport const getMoodleClozeQuestionsAsExercises = (q: MoodleQuestion): Exercise[] => {\n\tconst answerRegex = /(=?)\\s*(%[-\\d]+%)?([^~]+)/;\n\n\tconst ret = [] as Exercise[];\n\n\tconst matches = q.questiontext[0].text[0].matchAll(clozeSubQuestionRegex);\n\tfor (const match of matches) {\n\t\tconst childWeight = match[1];\n\n\t\tconst child: Exercise = {\n\t\t\tid: \"\",\n\t\t\ttext: \"\",\n\t\t\texercise_type: ExerciseType.MULTIPLE_CHOICE_SINGLE_POSSIBLE,\n\t\t\tchoices: [],\n\t\t\tchild_weight: childWeight ? parseFloat(childWeight) : 1,\n\t\t\tall_or_nothing: false,\n\t\t};\n\t\tconst answers = match[3].split(\"~\");\n\t\tfor (const answer of answers) {\n\t\t\tconst answerMatch = answer.match(answerRegex) as RegExpMatchArray;\n\t\t\tconst isCorrectAnswer = answerMatch[1] === \"=\";\n\t\t\tconst answerScore = (answerMatch[2] ?? \"\").replace(/%/g, \"\"); // TODO check validity\n\t\t\tconst answerText = answerMatch[3] as string;\n\n\t\t\tchild.choices?.push({\n\t\t\t\ttext: answerText,\n\t\t\t\tid: \"\",\n\t\t\t\tcorrectness: isCorrectAnswer ? 1 : parseFloat(answerScore) / 100 || 0,\n\t\t\t});\n\t\t}\n\t\tret.push(child);\n\t}\n\treturn ret;\n};\n\nexport const processMoodleQuestionText = (q: MoodleQuestion): string => {\n\tconst fileNamesAndContents = (q.questiontext[0].file ?? []).map(f => ({\n\t\tname: f.$.name,\n\t\tcontent: f._,\n\t}));\n\tconst ret = q.questiontext[0].text[0];\n\n\tconst imgRegex = /]+src=\"?([^\"\\s]+)\"?[^>]*\\/?>/g;\n\treturn (\n\t\tret\n\t\t\t// substitute any cloze questions with the CLOZE_SEPARATOR sequence\n\t\t\t.replace(clozeSubQuestionRegex, CLOZE_SEPARATOR)\n\t\t\t// import images\n\t\t\t.replace(imgRegex, (img, src: string) =>\n\t\t\t\timg.replace(\n\t\t\t\t\tsrc,\n\t\t\t\t\t`data:image/jpeg;base64,${\n\t\t\t\t\t\tfileNamesAndContents.find(\n\t\t\t\t\t\t\tf => f.name === src.substring(\"@@PLUGINFILE@@/\".length),\n\t\t\t\t\t\t)?.content ?? \"\"\n\t\t\t\t\t}`,\n\t\t\t\t),\n\t\t\t)\n\t);\n};\n","import { Exercise, ExerciseState, ExerciseType } from \"@/models\";\nimport {\n\tgetExerciseTypeFromMoodleQuestion,\n\tgetMoodleClozeQuestionsAsExercises,\n\tgetTagsFromMoodleCategory,\n\tprocessMoodleQuestionText,\n\txmlToJson,\n} from \"./utils\";\nimport { ImportedExerciseData, MoodleQuestion } from \"./interfaces\";\nimport { DataFormat } from \"./types\";\n\n// TODO actually implement\nconst importExercisesFromEvoJson = (data: string) => JSON.parse(data);\n\nconst importExercisesFromMoodleXml = async (\n\tdata: string,\n): Promise => {\n\tlet moodleExercises;\n\t// eslint-disable-next-line no-useless-catch\n\ttry {\n\t\tmoodleExercises = (await xmlToJson(data)).quiz.question as MoodleQuestion[];\n\t} catch (e: any) {\n\t\tthrow e;\n\t\t// return {\n\t\t// data: [],\n\t\t// extras: null,\n\t\t// errors: [e],\n\t\t// };\n\t}\n\tconst ret: ImportedExerciseData = {\n\t\tdata: [] as Exercise[],\n\t\textras: {},\n\t\terrors: [],\n\t};\n\n\tconsole.log(moodleExercises);\n\n\tmoodleExercises.forEach(q => {\n\t\tconst questionType = q.$.type;\n\n\t\tif (questionType === \"category\") {\n\t\t\tret.extras.tags = getTagsFromMoodleCategory(q.category);\n\t\t} else {\n\t\t\tconst { exerciseType, extras } = getExerciseTypeFromMoodleQuestion(q);\n\t\t\tif (typeof exerciseType === \"undefined\") {\n\t\t\t\tret.errors?.push(\"Unsupported exercise type: \" + questionType);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tret.data.push({\n\t\t\t\tid: \"\",\n\t\t\t\tstate: ExerciseState.DRAFT,\n\t\t\t\tlabel: q.name[0].text[0],\n\t\t\t\ttext: processMoodleQuestionText(q),\n\t\t\t\texercise_type: exerciseType,\n\t\t\t\tchoices: (q.answer ?? []).map(a => ({\n\t\t\t\t\ttext: a.text[0],\n\t\t\t\t\tcorrectness:\n\t\t\t\t\t\t// for checkbox exercises, ensure incorrect choices get a negative value\n\t\t\t\t\t\tparseFloat(a.$.fraction) > 0 ||\n\t\t\t\t\t\texerciseType !== ExerciseType.MULTIPLE_CHOICE_MULTIPLE_POSSIBLE\n\t\t\t\t\t\t\t? parseFloat(a.$.fraction) / 100\n\t\t\t\t\t\t\t: -1,\n\t\t\t\t})),\n\t\t\t\tsub_exercises: getMoodleClozeQuestionsAsExercises(q),\n\t\t\t\t...extras,\n\t\t\t} as Exercise);\n\t\t}\n\t});\n\n\tconsole.log(ret);\n\n\treturn ret;\n};\n\nconst importFunctions: Record<\n\tDataFormat,\n\t(data: string) => Promise\n> = {\n\t[DataFormat.MOODLE_XML]: importExercisesFromMoodleXml,\n\t[DataFormat.EVO_JSON]: importExercisesFromEvoJson,\n};\n\nexport const getImportedData = async (\n\tdata: string,\n\tfromFormat: DataFormat,\n): Promise => await importFunctions[fromFormat](data);\n","\nimport { getTranslatedString } from \"@/i18n\";\nimport { DataFormat, getImportedData, ImportedExerciseData } from \"@/integrations\";\nimport { SelectableOption } from \"@/interfaces\";\nimport { loadingMixin } from \"@/mixins\";\nimport { Exercise, ExerciseState } from \"@/models\";\nimport { getFileContent, setErrorNotification } from \"@/utils\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport MinimalExercisePreview from \"./ExerciseEditor/MinimalExercisePreview.vue\";\nimport Dropdown from \"../ui/Dropdown.vue\";\nimport { exerciseStateOptions } from \"@/const\";\nimport Chipset from \"../ui/Chipset.vue\";\nimport ArticleHandle from \"../shared/HelpCenter/ArticleHandle.vue\";\nexport default defineComponent({\n\tname: \"ExerciseImporter\",\n\tprops: {},\n\tmixins: [loadingMixin],\n\twatch: {\n\t\texercises: {\n\t\t\tdeep: true,\n\t\t\thandler(newVal) {\n\t\t\t\tthis.$emit(\"updateExercises\", newVal);\n\t\t\t},\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tDataFormat,\n\t\t\tselectedFormat: null as DataFormat | null,\n\t\t\tcurrentStep: \"initial\" as \"initial\" | \"file_chosen\",\n\t\t\texercises: [] as Exercise[],\n\t\t\textras: {} as Record,\n\t\t\texerciseStateOptions,\n\t\t};\n\t},\n\tmethods: {\n\t\tasync onFileInputChange(event: { target: HTMLInputElement }) {\n\t\t\tif (event.target.files === null || event.target.files.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst file = event.target.files[0];\n\t\t\t\tconst fileContents = await getFileContent(file);\n\t\t\t\tconst importedData: ImportedExerciseData = await getImportedData(\n\t\t\t\t\tfileContents,\n\t\t\t\t\tthis.selectedFormat as DataFormat,\n\t\t\t\t);\n\t\t\t\tif ((importedData.errors?.length ?? 0) === 0) {\n\t\t\t\t\tthis.exercises = importedData.data;\n\t\t\t\t\tthis.extras = importedData.extras;\n\t\t\t\t\tthis.currentStep = \"file_chosen\";\n\t\t\t\t} else {\n\t\t\t\t\t// TODO handle errors\n\t\t\t\t\tsetErrorNotification(importedData.errors?.[0], true);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t}\n\t\t},\n\t\tonSelect(format: DataFormat) {\n\t\t\tif (format === this.selectedFormat) {\n\t\t\t\tthis.selectedFormat = null;\n\t\t\t} else {\n\t\t\t\tthis.selectedFormat = format;\n\t\t\t}\n\t\t},\n\t\tgetImageUrl(imageName: string) {\n\t\t\t// eslint-disable-next-line no-undef\n\t\t\treturn require(\"@/assets/\" + imageName);\n\t\t},\n\t},\n\tcomputed: {\n\t\ttagsAsOptions(): SelectableOption[] {\n\t\t\tif ((this.extras.tags?.length ?? 0) === 0) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\treturn (this.extras.tags as string[])\n\t\t\t\t.filter(t => t.length > 0)\n\t\t\t\t.map(t => ({\n\t\t\t\t\tvalue: t,\n\t\t\t\t\tcontent: t,\n\t\t\t\t\ticons: this.selectedTagsProxy.includes(t) ? [\"done-sm\"] : [],\n\t\t\t\t}));\n\t\t},\n\t\tdataFormatsAsSelectableOptions(): SelectableOption[] {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tvalue: DataFormat.MOODLE_XML,\n\t\t\t\t\tcontent: getTranslatedString(\n\t\t\t\t\t\t\"exercise_import.formats.\" + DataFormat.MOODLE_XML,\n\t\t\t\t\t),\n\t\t\t\t\tdescription: this.getImageUrl(\"icons/moodle.png\"),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tvalue: DataFormat.EVO_JSON,\n\t\t\t\t\tcontent: getTranslatedString(\"exercise_import.formats.\" + DataFormat.EVO_JSON),\n\t\t\t\t\tdescription: this.getImageUrl(\"icons/json_evo.png\"),\n\t\t\t\t},\n\t\t\t];\n\t\t},\n\t\timportedExercisesStateProxy: {\n\t\t\tget() {\n\t\t\t\treturn this.exercises[0]?.state;\n\t\t\t},\n\t\t\tset(val: ExerciseState) {\n\t\t\t\tfor (const e of this.exercises) {\n\t\t\t\t\te.state = val;\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\tselectedTagsProxy: {\n\t\t\tget() {\n\t\t\t\treturn (this.exercises[0]?.public_tags ?? []).map(t => t.name);\n\t\t\t},\n\t\t\tset(val: string[]) {\n\t\t\t\tfor (const e of this.exercises) {\n\t\t\t\t\te.public_tags = val.map(v => ({ name: v }));\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t},\n\tcomponents: { MinimalExercisePreview, Dropdown, Chipset, ArticleHandle },\n});\n","import { render } from \"./ExerciseImporter.vue?vue&type=template&id=2f8f02b8&ts=true\"\nimport script from \"./ExerciseImporter.vue?vue&type=script&lang=ts\"\nexport * from \"./ExerciseImporter.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n// ! TODO test, this requires migrating ExerciseEditor first\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport { icons as exerciseTypesIcons } from \"@/assets/exerciseTypesIcons\";\nimport { icons as exerciseStatesIcons } from \"@/assets/exerciseStatesIcons\";\nimport {\n\tCoursePrivilege,\n\tExercise,\n\tExerciseState,\n\tExerciseType,\n\tgetBlankExercise,\n} from \"@/models\";\n\nimport { VueEternalLoading, LoadAction } from \"@ts-pro/vue-eternal-loading\";\nimport { DialogData, SelectableOption } from \"@/interfaces\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport ExerciseEditorWrapper from \"@/components/teacher/ExerciseEditor/ExerciseEditorWrapper.vue\";\nimport { defineComponent } from \"@vue/runtime-core\";\nimport Spinner from \"@/components/ui/Spinner.vue\";\nimport ExerciseSearchFilters from \"@/components/teacher/ExerciseSearchFilters.vue\";\nimport {\n\tforceFileDownload,\n\tgetClonedExercise,\n\tgetDebouncedForFilter,\n\tsetErrorNotification,\n} from \"@/utils\";\nimport { courseIdMixin, coursePrivilegeMixin, loadingMixin } from \"@/mixins\";\nimport ExerciseEditorWrapperSkeleton from \"@/components/ui/skeletons/ExerciseEditorWrapperSkeleton.vue\";\nimport { getBlankExerciseSearchFilters, isEmptyFilter } from \"@/api/utils\";\nimport Dialog from \"@/components/ui/Dialog.vue\";\nimport ExerciseImporter from \"@/components/teacher/ExerciseImporter.vue\";\nimport DropdownMenu from \"@/components/ui/DropdownMenu.vue\";\nimport { exportCourseExercises } from \"@/api\";\nimport { mapStores } from \"pinia\";\nimport { useMainStore } from \"@/stores/mainStore\";\nimport { useMetaStore } from \"@/stores/metaStore\";\nexport default defineComponent({\n\tname: \"CourseExercises\",\n\tprops: {\n\t\tmodelValue: Array,\n\t\tvalue: {\n\t\t\tdefault: null,\n\t\t},\n\t\toptions: Array,\n\t},\n\tmixins: [courseIdMixin, loadingMixin, coursePrivilegeMixin],\n\twatch: {\n\t\tsearchFilter: {\n\t\t\tasync handler() {\n\t\t\t\tthis.isInitialInfiniteLoad = true;\n\t\t\t\tawait this.onFilterChange();\n\t\t\t},\n\t\t\tdeep: true,\n\t\t},\n\t},\n\tcomponents: {\n\t\tExerciseEditorWrapper,\n\t\tVueEternalLoading,\n\t\tBtn,\n\t\tSpinner,\n\t\tExerciseSearchFilters,\n\t\tExerciseEditorWrapperSkeleton,\n\t\tDialog,\n\t\tExerciseImporter,\n\t\tDropdownMenu,\n\t},\n\tasync created() {\n\t\tthis.onFilterChange = getDebouncedForFilter(this.onFilterChange);\n\t\tthis.withFirstLoading(async () => {\n\t\t\tawait this.mainStore.getExercises({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\tfromFirstPage: true,\n\t\t\t\tfilters: null,\n\t\t\t});\n\t\t\tawait this.mainStore.getTags({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\tincludeExerciseCount: false,\n\t\t\t});\n\t\t});\n\t},\n\tmounted() {\n\t\tsetTimeout(() => {\n\t\t\tif (this.$route.hash) {\n\t\t\t\t// TODO refactor and also handle possibility of editing exercises that are not in view\n\t\t\t\tconst expandId = this.$route.hash.split(/#editor-(.*)/)[1];\n\n\t\t\t\tconst editorRef: any =\n\t\t\t\t\tthis.$refs[\"course-\" + this.courseId + \"-exercise-\" + expandId]?.[0];\n\t\t\t\tif (editorRef) {\n\t\t\t\t\teditorRef.showEditor = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}, 500);\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tisInitialInfiniteLoad: false,\n\t\t\texpandResultFilter: true,\n\t\t\tsearchFilter: getBlankExerciseSearchFilters(),\n\t\t\tshowDialog: false,\n\t\t\tdialogData: {} as DialogData,\n\t\t\tshowExerciseImporter: false,\n\t\t\timportedExercises: [] as Exercise[],\n\t\t\timportLoading: false,\n\t\t\tdropdownExpanded: false,\n\t\t};\n\t},\n\tmethods: {\n\t\tgetBlankExerciseSearchFilters,\n\t\tasync onExportExercises() {\n\t\t\tawait this.withLoading(async () => {\n\t\t\t\tconst MAX_PAGE_SIZE = 999999;\n\t\t\t\tconst exercises = (await exportCourseExercises(this.courseId)).data;\n\t\t\t\tforceFileDownload({ data: JSON.stringify(exercises, null, 4) }, \"exercises.json\");\n\t\t\t}, setErrorNotification);\n\t\t},\n\t\tasync onFilterChange() {\n\t\t\tawait this.withLoading(\n\t\t\t\tasync () =>\n\t\t\t\t\tawait this.mainStore.getExercises({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\tfromFirstPage: true,\n\t\t\t\t\t\tfilters: this.searchFilter,\n\t\t\t\t\t}),\n\t\t\t);\n\t\t},\n\t\tasync onImportDone() {\n\t\t\tawait this.withLoading(\n\t\t\t\tasync () => {\n\t\t\t\t\tthis.importLoading = true;\n\t\t\t\t\tawait this.mainStore.bulkCreateExercises({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\texercises: this.importedExercises,\n\t\t\t\t\t});\n\t\t\t\t\tthis.importLoading = false;\n\t\t\t\t\tthis.metaStore.showSuccessFeedback();\n\t\t\t\t\tthis.importedExercises = [];\n\t\t\t\t\tthis.showExerciseImporter = false;\n\t\t\t\t},\n\t\t\t\te => {\n\t\t\t\t\tsetErrorNotification(e);\n\t\t\t\t\tthis.importLoading = false;\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t\tasync onLoadMore({ loaded, noMore, error }: LoadAction) {\n\t\t\ttry {\n\t\t\t\tconst moreResults = await this.mainStore.getExercises({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\tfromFirstPage: false,\n\t\t\t\t\tfilters: this.searchFilter,\n\t\t\t\t});\n\t\t\t\tif (!moreResults) {\n\t\t\t\t\tnoMore();\n\t\t\t\t} else {\n\t\t\t\t\tloaded();\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\terror();\n\t\t\t}\n\t\t},\n\t\tasync onCloneExercise(exercise: Exercise) {\n\t\t\tconst newExercise = await this.onAddExercise(getClonedExercise(exercise));\n\t\t\t// show notification\n\t\t\tthis.metaStore.showSuccessFeedback();\n\t\t\t// open new editor\n\t\t\tdocument\n\t\t\t\t.getElementById(\"course-\" + this.courseId + \"-exercise-\" + newExercise.id)\n\t\t\t\t?.scrollIntoView();\n\t\t},\n\t\tasync onAddExercise(cloned?: Exercise): Promise {\n\t\t\tconst wrapperFunc = cloned ? this.withLoading : this.withLocalLoading;\n\t\t\treturn (await wrapperFunc(async () => {\n\t\t\t\tconst newExercise = await this.mainStore.createExercise({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\texercise: cloned ?? getBlankExercise(),\n\t\t\t\t});\n\n\t\t\t\tconst editorRef: any =\n\t\t\t\t\tthis.$refs[\"course-\" + this.courseId + \"-exercise-\" + newExercise.id]?.[0];\n\t\t\t\teditorRef.showEditor = true;\n\n\t\t\t\treturn newExercise;\n\t\t\t})) as Exercise;\n\t\t},\n\t\tasync onDeleteExercise(exercise: Exercise) {\n\t\t\tthis.showDialog = true;\n\t\t\tif (exercise.state !== ExerciseState.DRAFT) {\n\t\t\t\tthis.dialogData = {\n\t\t\t\t\tconfirmOnly: true,\n\t\t\t\t\ttext: _(\"course_exercises.cannot_delete_nondraft\"),\n\t\t\t\t\tonYes: () => (this.showDialog = false),\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tthis.dialogData = {\n\t\t\t\t\tconfirmOnly: false,\n\t\t\t\t\ttext: _(\"course_exercises.confirm_delete_exercise\"),\n\t\t\t\t\tonYes: async () => {\n\t\t\t\t\t\tawait this.mainStore.deleteExercise({\n\t\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\t\texerciseId: exercise.id,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tthis.showDialog = false;\n\t\t\t\t\t},\n\t\t\t\t\tonNo: () => (this.showDialog = false),\n\t\t\t\t\tyesText: _(\"misc.delete\"),\n\t\t\t\t\tnoText: _(\"dialog.default_cancel_text\"),\n\t\t\t\t\ttitle: _(\"course_exercises.confirm_delete_exercise_title\"),\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore, useMetaStore),\n\t\temptyFilters() {\n\t\t\treturn isEmptyFilter(this.searchFilter);\n\t\t},\n\t\ttagsOptions() {\n\t\t\treturn this.mainStore.tags.map(t => ({\n\t\t\t\tvalue: t.name,\n\t\t\t\tcontent: t.name,\n\t\t\t}));\n\t\t},\n\t\texerciseTypeOptions(): SelectableOption[] {\n\t\t\treturn (Object.keys(ExerciseType) as unknown[] as ExerciseType[])\n\t\t\t\t.filter((key: string | number) => parseInt(key as string) == key) //(ExerciseType[key] as unknown) == 'number')\n\t\t\t\t.map(key => ({\n\t\t\t\t\ticons: exerciseTypesIcons[key],\n\t\t\t\t\tvalue: key,\n\t\t\t\t\tcontent: _(\"exercise_types.\" + key),\n\t\t\t\t}));\n\t\t},\n\t\texerciseStateOptions(): SelectableOption[] {\n\t\t\treturn (Object.keys(ExerciseState) as unknown[] as ExerciseState[])\n\t\t\t\t.filter((key: string | number) => parseInt(key as string) == key) //(ExerciseType[key] as unknown) == 'number')\n\t\t\t\t.map(key => ({\n\t\t\t\t\ticons: exerciseStatesIcons[key],\n\t\t\t\t\tvalue: key,\n\t\t\t\t\tcontent: _(\"exercise_states.\" + key),\n\t\t\t\t\tdescription: _(\"exercise_states_descriptions.\" + key),\n\t\t\t\t}));\n\t\t},\n\t\tcanCreateAndEditExercises() {\n\t\t\treturn this.hasPrivileges([CoursePrivilege.MANAGE_EXERCISES]);\n\t\t},\n\t},\n});\n","import { render } from \"./CourseExercises.vue?vue&type=template&id=59e80270&ts=true\"\nimport script from \"./CourseExercises.vue?vue&type=script&lang=ts\"\nexport * from \"./CourseExercises.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveDirective as _resolveDirective, withDirectives as _withDirectives, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"flex w-full mb-6 md:-mt-2 lg:-mt-8\"\n}\nconst _hoisted_2 = { class: \"-mx-5 -my-2\" }\nconst _hoisted_3 = { class: \"\" }\nconst _hoisted_4 = [\"onClick\"]\nconst _hoisted_5 = { class: \"material-icons-outlined text-muted mr-2\" }\nconst _hoisted_6 = {\n key: 2,\n class: \"flex w-full h-full mt-12\"\n}\nconst _hoisted_7 = { class: \"m-auto flex flex-col\" }\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"p\", {\n style: {\"font-size\":\"10rem\"},\n class: \"material-icons-outlined opacity-10 mx-auto\"\n}, \" book \", -1)\nconst _hoisted_9 = { class: \"opacity-40 mx-auto\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_DropdownMenu = _resolveComponent(\"DropdownMenu\")!\n const _component_CourseTreeNode = _resolveComponent(\"CourseTreeNode\")!\n const _component_draggable = _resolveComponent(\"draggable\")!\n const _component_Spinner = _resolveComponent(\"Spinner\")!\n const _component_VueEternalLoading = _resolveComponent(\"VueEternalLoading\")!\n const _component_CourseTreeNodeEditor = _resolveComponent(\"CourseTreeNodeEditor\")!\n const _component_Dialog = _resolveComponent(\"Dialog\")!\n const _directive_wave = _resolveDirective(\"wave\")!\n\n return (_openBlock(), _createElementBlock(\"div\", null, [\n (_ctx.canCreateNodes)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_DropdownMenu, {\n class: \"ml-auto\",\n expanded: _ctx.createMenuExpanded,\n onToggleExpanded: _cache[0] || (_cache[0] = ($event: any) => (_ctx.createMenuExpanded = !_ctx.createMenuExpanded)),\n label: _ctx.$t('course_tree.new'),\n placement: 'right',\n icon: 'add',\n trailingIcon: 'arrow_drop_down'\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"ul\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.nodeTypesAsSelectableOptions, (nodeType) => {\n return _withDirectives((_openBlock(), _createElementBlock(\"li\", {\n tabindex: \"0\",\n class: \"flex pl-4 pr-8 py-2.5 hover:bg-light transition-colors cursor-pointer items-top duration-75\",\n key: nodeType.value,\n onClick: ($event: any) => (_ctx.onCreateNode(nodeType.value))\n }, [\n _createElementVNode(\"span\", _hoisted_5, _toDisplayString(nodeType.icons[0]), 1),\n _createTextVNode(_toDisplayString(nodeType.content), 1)\n ], 8, _hoisted_4)), [\n [_directive_wave]\n ])\n }), 128))\n ])\n ])\n ]),\n _: 1\n }, 8, [\"expanded\", \"label\"])\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_draggable, {\n modelValue: _ctx.topLevelNodes,\n \"ghost-class\": \"drag-ghost\",\n \"drag-class\": \"dragging-element\",\n handle: \".drag-handle\",\n \"item-key\": \"id\",\n onStart: _cache[5] || (_cache[5] = ($event: any) => (_ctx.onNodeDragStart($event))),\n onEnd: _cache[6] || (_cache[6] = ($event: any) => (_ctx.onNodeDragEnd($event))),\n animation: \"200\",\n class: _normalizeClass({ 'dragging-inside-collection': _ctx.mainStore.draggingCourseTreeNode })\n }, {\n item: _withCtx(({ element }) => [\n _createElementVNode(\"div\", null, [\n _createVNode(_component_CourseTreeNode, {\n isDraggable: _ctx.canEditNodes,\n class: \"my-4\",\n onLoadChildren: _cache[1] || (_cache[1] = ($event: any) => (\n\t\t\t\t\t\t\t_ctx.onLoadChildren(\n\t\t\t\t\t\t\t\t$event.node,\n\t\t\t\t\t\t\t\t$event.fromFirstPage,\n\t\t\t\t\t\t\t\t$event.resolveFn,\n\t\t\t\t\t\t\t\t$event.rejectFn,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)),\n onLoadComments: _cache[2] || (_cache[2] = ($event: any) => (_ctx.onLoadComments($event))),\n canEdit: _ctx.canEditNodes,\n node: element,\n onEditNode: _cache[3] || (_cache[3] = ($event: any) => (_ctx.onEditNode($event))),\n onDeleteNode: _cache[4] || (_cache[4] = ($event: any) => (_ctx.onDeleteNode($event)))\n }, null, 8, [\"isDraggable\", \"canEdit\", \"node\"])\n ])\n ]),\n _: 1\n }, 8, [\"modelValue\", \"class\"]),\n (!_ctx.loading)\n ? (_openBlock(), _createBlock(_component_VueEternalLoading, {\n key: 1,\n load: _ctx.onLoadMore,\n \"is-initial\": _ctx.isInitialInfiniteLoad,\n \"onUpdate:is-initial\": _cache[7] || (_cache[7] = ($event: any) => ((_ctx.isInitialInfiniteLoad) = $event))\n }, {\n loading: _withCtx(() => [\n _createVNode(_component_Spinner)\n ]),\n \"no-more\": _withCtx(() => [\n _createTextVNode(\"   \")\n ]),\n _: 1\n }, 8, [\"load\", \"is-initial\"]))\n : _createCommentVNode(\"\", true),\n (!_ctx.loading && _ctx.topLevelNodes.length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _createElementVNode(\"div\", _hoisted_7, [\n _hoisted_8,\n _createElementVNode(\"h2\", _hoisted_9, _toDisplayString(_ctx.$t(\"course_tree.no_nodes\")), 1)\n ])\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_Dialog, {\n fullHeight: _ctx.fullHeightDialog,\n large: _ctx.largeDialog,\n fullWidth: _ctx.fullScreenDialog,\n onNo: _cache[14] || (_cache[14] = ($event: any) => (_ctx.onDismissNodeEditor())),\n showDialog: _ctx.showEditorDialog,\n showActions: false,\n dismissible: _ctx.autoSaveEditingNode,\n loading: _ctx.editorDialogLoading\n }, {\n body: _withCtx(() => [\n (_ctx.editingNode)\n ? (_openBlock(), _createBlock(_component_CourseTreeNodeEditor, {\n key: 0,\n class: \"text-darkText\",\n saving: _ctx.saving,\n savingError: _ctx.savingError,\n blockingSaving: _ctx.blockingSaving,\n modelValue: _ctx.proxyEditingNode,\n showAutoSaveIndicator: _ctx.autoSaveEditingNode,\n uploadProgress: _ctx.fileUploadProgress,\n isExistingNode: !!_ctx.editingNode.id,\n onPatchNode: _cache[8] || (_cache[8] = ($event: any) => (_ctx.onEditingNodeChange($event.key, $event.value, !!$event.save))),\n onSave: _cache[9] || (_cache[9] = ($event: any) => (_ctx.onEditingNodeSave())),\n onCloseEditor: _cache[10] || (_cache[10] = ($event: any) => (_ctx.onDismissNodeEditor())),\n onBlur: _cache[11] || (_cache[11] = ($event: any) => (_ctx.onEditorBlur())),\n onDeleteNode: _cache[12] || (_cache[12] = ($event: any) => (_ctx.onDeleteNode($event))),\n onUpdateState: _cache[13] || (_cache[13] = ($event: any) => (_ctx.onEditingNodeStateUpdate($event)))\n }, null, 8, [\"saving\", \"savingError\", \"blockingSaving\", \"modelValue\", \"showAutoSaveIndicator\", \"uploadProgress\", \"isExistingNode\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }, 8, [\"fullHeight\", \"large\", \"fullWidth\", \"showDialog\", \"dismissible\", \"loading\"])\n ]))\n}","import { resolveDynamicComponent as _resolveDynamicComponent, mergeProps as _mergeProps, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createBlock(_resolveDynamicComponent(_ctx.editorComponentName), _mergeProps(_ctx.$props, {\n onCloseEditor: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('closeEditor'))),\n onPatchNode: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$emit('patchNode', $event))),\n onBlur: _cache[2] || (_cache[2] = ($event: any) => (_ctx.$emit('blur'))),\n onSave: _cache[3] || (_cache[3] = ($event: any) => (_ctx.$emit('save'))),\n onDeleteNode: _cache[4] || (_cache[4] = ($event: any) => (_ctx.$emit('deleteNode', $event))),\n onUpdateState: _cache[5] || (_cache[5] = ($event: any) => (_ctx.$emit('updateState', $event)))\n }), null, 16))\n}","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, renderList as _renderList, Fragment as _Fragment, createSlots as _createSlots } from \"vue\"\n\nconst _hoisted_1 = { class: \"relative\" }\nconst _hoisted_2 = { class: \"flex flex-col space-y-4 mb-4\" }\nconst _hoisted_3 = { class: \"flex w-full items-center\" }\nconst _hoisted_4 = { class: \"mb-0 ml-2 mr-auto\" }\nconst _hoisted_5 = {\n key: 1,\n class: \"flex space-x-3 items-center\"\n}\nconst _hoisted_6 = { class: \"text-muted\" }\nconst _hoisted_7 = {\n key: 2,\n class: \"ml-2\"\n}\nconst _hoisted_8 = {\n key: 3,\n class: \"ml-2\"\n}\nconst _hoisted_9 = {\n style: {\"width\":\"24px\",\"fill\":\"currentColor\"},\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\"\n}\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"M15,13H16.5V15.82L18.94,17.23L18.19,18.53L15,16.69V13M19,8H5V19H9.67C9.24,18.09 9,17.07 9,16A7,7 0 0,1 16,9C17.07,9 18.09,9.24 19,9.67V8M5,21C3.89,21 3,20.1 3,19V5C3,3.89 3.89,3 5,3H6V1H8V3H16V1H18V3H19A2,2 0 0,1 21,5V11.1C22.24,12.36 23,14.09 23,16A7,7 0 0,1 16,23C14.09,23 12.36,22.24 11.1,21H5M16,11.15A4.85,4.85 0 0,0 11.15,16C11.15,18.68 13.32,20.85 16,20.85A4.85,4.85 0 0,0 20.85,16C20.85,13.32 18.68,11.15 16,11.15Z\" }, null, -1)\nconst _hoisted_11 = [\n _hoisted_10\n]\nconst _hoisted_12 = { class: \"w-full flex\" }\nconst _hoisted_13 = {\n style: {\"width\":\"24px\",\"fill\":\"currentColor\"},\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\"\n}\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"M15,13H16.5V15.82L18.94,17.23L18.19,18.53L15,16.69V13M19,8H5V19H9.67C9.24,18.09 9,17.07 9,16A7,7 0 0,1 16,9C17.07,9 18.09,9.24 19,9.67V8M5,21C3.89,21 3,20.1 3,19V5C3,3.89 3.89,3 5,3H6V1H8V3H16V1H18V3H19A2,2 0 0,1 21,5V11.1C22.24,12.36 23,14.09 23,16A7,7 0 0,1 16,23C14.09,23 12.36,22.24 11.1,21H5M16,11.15A4.85,4.85 0 0,0 11.15,16C11.15,18.68 13.32,20.85 16,20.85A4.85,4.85 0 0,0 20.85,16C20.85,13.32 18.68,11.15 16,11.15Z\" }, null, -1)\nconst _hoisted_15 = [\n _hoisted_14\n]\nconst _hoisted_16 = { class: \"flex items-center\" }\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons\" }, \"edit\", -1)\nconst _hoisted_18 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons\" }, \"close\", -1)\nconst _hoisted_19 = { class: \"mb-8 flex items-center space-x-8\" }\nconst _hoisted_20 = { class: \"w-1/3\" }\nconst _hoisted_21 = { class: \"mb-8\" }\nconst _hoisted_22 = { class: \"error-msg\" }\nconst _hoisted_23 = { key: 0 }\nconst _hoisted_24 = { class: \"mb-4\" }\nconst _hoisted_25 = { class: \"grid lg:grid-cols-2 lg:gap-6 gap-4 grid-cols-1\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_CloudSaveStatus = _resolveComponent(\"CloudSaveStatus\")!\n const _component_IntegrationSwitch = _resolveComponent(\"IntegrationSwitch\")!\n const _component_PublishedOnClassroom = _resolveComponent(\"PublishedOnClassroom\")!\n const _component_Timestamp = _resolveComponent(\"Timestamp\")!\n const _component_Dropdown = _resolveComponent(\"Dropdown\")!\n const _component_TextEditor = _resolveComponent(\"TextEditor\")!\n const _component_FileNode = _resolveComponent(\"FileNode\")!\n const _component_FileUpload = _resolveComponent(\"FileUpload\")!\n const _component_SchedulePublishDialog = _resolveComponent(\"SchedulePublishDialog\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_Btn, {\n variant: 'icon',\n outline: true,\n class: \"-ml-2\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n class: \"material-icons-outlined\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('closeEditor')))\n }, \" close\")\n ]),\n _: 1\n }),\n _createElementVNode(\"h1\", _hoisted_4, _toDisplayString(_ctx.$t(\"course_tree.announcement_editor_title\")), 1),\n (_ctx.showAutoSaveIndicator)\n ? (_openBlock(), _createBlock(_component_CloudSaveStatus, {\n key: 0,\n saving: _ctx.saving,\n hadError: _ctx.savingError,\n class: \"mt-1 mr-6\"\n }, null, 8, [\"saving\", \"hadError\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.modelValue.state === _ctx.AnnouncementNodeState.DRAFT)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createElementVNode(\"p\", _hoisted_6, _toDisplayString(_ctx.$t(\"course_tree.draft\")), 1),\n _createVNode(_component_Btn, {\n disabled: _ctx.blockingSaving,\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.onPublish()))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"course_tree.publish_announcement\")), 1)\n ]),\n _: 1\n }, 8, [\"disabled\"])\n ]))\n : _createCommentVNode(\"\", true),\n (!_ctx.publishOnly)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [\n _createVNode(_component_Btn, {\n outline: _ctx.modelValue.state === _ctx.AnnouncementNodeState.DRAFT,\n disabled: _ctx.blockingSaving,\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.onSave()))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.modelValue.state === _ctx.AnnouncementNodeState.DRAFT\n\t\t\t\t\t\t\t\t? _ctx.$t(\"course_tree.save_draft\")\n\t\t\t\t\t\t\t\t: _ctx.$t(\"course_tree.save\")), 1)\n ]),\n _: 1\n }, 8, [\"outline\", \"disabled\"])\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.modelValue.state === _ctx.AnnouncementNodeState.DRAFT)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _createVNode(_component_Btn, {\n variant: 'icon',\n outline: true,\n class: \"icon-btn-primary\",\n disabled: _ctx.blockingSaving,\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.showScheduleDialog = true)),\n tooltip: _ctx.$t('course_tree.schedule')\n }, {\n default: _withCtx(() => [\n (_openBlock(), _createElementBlock(\"svg\", _hoisted_9, _hoisted_11))\n ]),\n _: 1\n }, 8, [\"disabled\", \"tooltip\"])\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_12, [\n (\n\t\t\t\t\t\t_ctx.showClassroomIntegrationSwitch &&\n\t\t\t\t\t\t_ctx.modelValue.state === _ctx.AnnouncementNodeState.DRAFT\n\t\t\t\t\t)\n ? (_openBlock(), _createBlock(_component_IntegrationSwitch, {\n key: 0,\n class: \"ml-auto\",\n modelValue: _ctx.publishToClassroom,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = ($event: any) => ((_ctx.publishToClassroom) = $event))\n }, null, 8, [\"modelValue\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.hasGoogleClassroomTwin)\n ? (_openBlock(), _createBlock(_component_PublishedOnClassroom, {\n key: 1,\n class: \"banner-success rounded px-2 ml-auto\",\n \"remote-object-url\": _ctx.googleClassroomAnnouncementTwin?.data.alternateLink\n }, null, 8, [\"remote-object-url\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.canceledScheduledPublish)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 2,\n class: _normalizeClass([[\n\t\t\t\t\t\t(_ctx.showClassroomIntegrationSwitch &&\n\t\t\t\t\t\t\t_ctx.modelValue.state === _ctx.AnnouncementNodeState.DRAFT) ||\n\t\t\t\t\t\t_ctx.hasGoogleClassroomTwin\n\t\t\t\t\t\t\t? 'ml-12'\n\t\t\t\t\t\t\t: 'ml-auto',\n\t\t\t\t\t], \"banner banner-light py-1.5 px-1.5 text-muted\"])\n }, _toDisplayString(_ctx.$t(\"course_tree.save_to_cancel_scheduled_publish\")), 3))\n : _createCommentVNode(\"\", true),\n (\n\t\t\t\t\t\t_ctx.modelValue.state === _ctx.AnnouncementNodeState.DRAFT &&\n\t\t\t\t\t\t_ctx.modelValue.schedule_publish_at\n\t\t\t\t\t)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 3,\n class: _normalizeClass([[\n\t\t\t\t\t\t(_ctx.showClassroomIntegrationSwitch &&\n\t\t\t\t\t\t\t_ctx.modelValue.state === _ctx.AnnouncementNodeState.DRAFT) ||\n\t\t\t\t\t\t_ctx.hasGoogleClassroomTwin\n\t\t\t\t\t\t\t? 'ml-12'\n\t\t\t\t\t\t\t: 'ml-auto',\n\t\t\t\t\t], \"banner banner-light py-0.5 pr-1\"])\n }, [\n (_openBlock(), _createElementBlock(\"svg\", _hoisted_13, _hoisted_15)),\n _createElementVNode(\"p\", null, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"course_tree.scheduled_for\")) + \" \", 1),\n _createVNode(_component_Timestamp, {\n value: _ctx.modelValue.schedule_publish_at\n }, null, 8, [\"value\"])\n ]),\n _createElementVNode(\"div\", _hoisted_16, [\n _createVNode(_component_Btn, {\n variant: 'icon',\n outline: true,\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.showScheduleDialog = true))\n }, {\n default: _withCtx(() => [\n _hoisted_17\n ]),\n _: 1\n }),\n _createVNode(_component_Btn, {\n variant: 'icon',\n outline: true,\n onClick: _cache[6] || (_cache[6] = ($event: any) => (_ctx.onSchedule(null)))\n }, {\n default: _withCtx(() => [\n _hoisted_18\n ]),\n _: 1\n })\n ])\n ], 2))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_19, [\n _createElementVNode(\"div\", _hoisted_20, [\n _createVNode(_component_Dropdown, {\n loading: _ctx.loadingTopics,\n options: _ctx.topicsAsOptions,\n modelValue: _ctx.modelValue.parent_id,\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = ($event: any) => (_ctx.onParentChange($event)))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"course_tree.topic_label\")), 1)\n ]),\n _: 1\n }, 8, [\"loading\", \"options\", \"modelValue\"])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_21, [\n _createVNode(_component_TextEditor, {\n modelValue: _ctx.modelValue.body,\n fixedLabel: true,\n onBlur: _cache[8] || (_cache[8] = ($event: any) => (_ctx.onBlur())),\n \"onUpdate:modelValue\": _cache[9] || (_cache[9] = ($event: any) => (_ctx.onNodeChange('body', $event)))\n }, _createSlots({\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"course_tree.announcement_body\")) + \" \", 1)\n ]),\n _: 2\n }, [\n (_ctx.v$.modelValue.body.$errors.length > 0)\n ? {\n name: \"errors\",\n fn: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.v$.modelValue.body.$errors, (error) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"input-errors\",\n key: error.$uid\n }, [\n _createElementVNode(\"div\", _hoisted_22, _toDisplayString(_ctx.$t(\"validation_errors.course_tree.announcement.\" + error.$uid)), 1)\n ]))\n }), 128))\n ]),\n key: \"0\"\n }\n : undefined\n ]), 1032, [\"modelValue\"])\n ]),\n (_ctx.allowChildren)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_23, [\n _createElementVNode(\"h3\", _hoisted_24, _toDisplayString(_ctx.$t(\"course_tree.announcement_attachments\")), 1),\n _createElementVNode(\"div\", _hoisted_25, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.fileChildren, (fileNode) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: fileNode.id\n }, [\n _createVNode(_component_FileNode, {\n onDeleteNode: _cache[10] || (_cache[10] = ($event: any) => (_ctx.$emit('deleteNode', $event))),\n isDraggable: false,\n canEdit: true,\n node: fileNode\n }, null, 8, [\"node\"])\n ]))\n }), 128)),\n _createVNode(_component_FileUpload, {\n uploadProgress: _ctx.attachmentUploadProgress,\n uploading: _ctx.creatingAttachment,\n modelValue: _ctx.attachmentProxy,\n \"onUpdate:modelValue\": _cache[11] || (_cache[11] = ($event: any) => ((_ctx.attachmentProxy) = $event)),\n autoUpload: true,\n clearImmediately: true\n }, null, 8, [\"uploadProgress\", \"uploading\", \"modelValue\"])\n ])\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_SchedulePublishDialog, {\n onCancel: _cache[12] || (_cache[12] = ($event: any) => (_ctx.showScheduleDialog = false)),\n onConfirm: _cache[13] || (_cache[13] = ($event: any) => (_ctx.onSchedule($event))),\n visible: _ctx.showScheduleDialog,\n initialValue: _ctx.modelValue.schedule_publish_at\n }, null, 8, [\"visible\", \"initialValue\"])\n ]))\n}","import { createElementVNode as _createElementVNode, renderSlot as _renderSlot, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\nimport _imports_0 from '@/assets/classroom.png'\n\n\nconst _hoisted_1 = { class: \"flex items-center space-x-2\" }\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"img\", {\n src: _imports_0,\n style: {\"width\":\"30px\"}\n}, null, -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Toggle = _resolveComponent(\"Toggle\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _hoisted_2,\n _createVNode(_component_Toggle, {\n labelOnLeft: true,\n modelValue: _ctx.modelValue,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('update:modelValue', $event)))\n }, {\n default: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"default\", {}, () => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"integrations.classroom.publish_on_classroom\")), 1)\n ])\n ]),\n _: 3\n }, 8, [\"modelValue\"])\n ]))\n}","\nimport Toggle from \"@/components/ui/Toggle.vue\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nexport default defineComponent({\n\tname: \"IntegrationSwitch\",\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tmethods: {},\n\tcomputed: {},\n\tcomponents: { Toggle },\n});\n","import { render } from \"./IntegrationSwitch.vue?vue&type=template&id=7ac9b552&ts=true\"\nimport script from \"./IntegrationSwitch.vue?vue&type=script&lang=ts\"\nexport * from \"./IntegrationSwitch.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, renderSlot as _renderSlot, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveDynamicComponent as _resolveDynamicComponent, normalizeClass as _normalizeClass, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createElementBlock as _createElementBlock } from \"vue\"\nimport _imports_0 from '@/assets/classroom.png'\n\n\nconst _hoisted_1 = { class: \"flex items-center space-x-2.5 py-1\" }\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"relative\" }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n src: _imports_0,\n style: {\"width\":\"30px\"}\n })\n], -1)\nconst _hoisted_3 = { class: \"flex items-center space-x-1\" }\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"span\", {\n style: {\"font-size\":\"18px !important\"},\n class: \"material-icons text-success\"\n}, \"done\", -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", null, [\n _createElementVNode(\"div\", _hoisted_1, [\n _hoisted_2,\n _createElementVNode(\"div\", _hoisted_3, [\n (_openBlock(), _createBlock(_resolveDynamicComponent(_ctx.remoteObjectUrl ? 'a' : 'p'), {\n class: _normalizeClass({ 'hover:underline cursor-pointer': _ctx.remoteObjectUrl }),\n target: \"_blank\",\n href: _ctx.remoteObjectUrl\n }, {\n default: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"default\", {}, () => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"integrations.classroom.published_on_classroom\")), 1)\n ])\n ]),\n _: 3\n }, 8, [\"class\", \"href\"])),\n _hoisted_4\n ])\n ])\n ]))\n}","\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nexport default defineComponent({\n\tname: \"PublishedOnClassroom\",\n\tprops: {\n\t\tremoteObjectUrl: {\n\t\t\ttype: String,\n\t\t\tdefault: \"\",\n\t\t},\n\t},\n\tmethods: {},\n\tcomputed: {},\n});\n","import { render } from \"./PublishedOnClassroom.vue?vue&type=template&id=3b3e0cf8&ts=true\"\nimport script from \"./PublishedOnClassroom.vue?vue&type=script&lang=ts\"\nexport * from \"./PublishedOnClassroom.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"mb-6\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"text-danger-dark mt-4 flex items-center space-x-2\"\n}\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons\" }, \"error_outline\", -1)\nconst _hoisted_4 = { class: \"\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_CalendarInput = _resolveComponent(\"CalendarInput\")!\n const _component_Dialog = _resolveComponent(\"Dialog\")!\n\n return (_openBlock(), _createElementBlock(\"div\", null, [\n _createVNode(_component_Dialog, {\n loading: _ctx.loading,\n noText: _ctx.$t('dialog.default_cancel_text'),\n yesText: _ctx.$t('course_tree.schedule_label'),\n showDialog: _ctx.visible,\n disableOk: _ctx.invalid,\n onYes: _cache[1] || (_cache[1] = ($event: any) => (_ctx.onYes())),\n onNo: _cache[2] || (_cache[2] = ($event: any) => (_ctx.onNo()))\n }, {\n body: _withCtx(() => [\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"p\", _hoisted_1, _toDisplayString(_ctx.$t(\"course_tree.select_schedule_datetime\")), 1),\n _createVNode(_component_CalendarInput, {\n modelValue: _ctx.value,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.value) = $event)),\n class: \"w-full\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"course_tree.schedule_datetime\")), 1)\n ]),\n _: 1\n }, 8, [\"modelValue\"]),\n (_ctx.showErrors)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _hoisted_3,\n _createElementVNode(\"p\", _hoisted_4, _toDisplayString(_ctx.$t(\"course_tree.invalid_schedule_time\")), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _: 1\n }, 8, [\"loading\", \"noText\", \"yesText\", \"showDialog\", \"disableOk\"])\n ]))\n}","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, renderSlot as _renderSlot, normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"darken-on-hover\" }\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-base material-icons-outlined\" }, \" calendar_today \", -1)\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-base material-icons-outlined\" }, \" close \", -1)\nconst _hoisted_4 = {\n key: 0,\n class: \"text-sm font-light text-danger-dark\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_date_picker = _resolveComponent(\"date-picker\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([{\n\t\t\t\t'border-danger-dark focus-within:border-danger-dark': _ctx.$slots.errors,\n\t\t\t}, \"relative z-10 border-b-2 border-gray-200 bg-light w-max\"])\n }, [\n _createVNode(_component_date_picker, {\n class: \"z-10 bg-transparent calendar-floating-label\",\n onOpen: _cache[0] || (_cache[0] = ($event: any) => (_ctx.onOpen())),\n open: _ctx.calendarOpen,\n onClose: _cache[1] || (_cache[1] = ($event: any) => (_ctx.onClose())),\n onFocus: _cache[2] || (_cache[2] = ($event: any) => (_ctx.$emit('focus'))),\n value: _ctx.proxyModelValue,\n \"onUpdate:value\": _cache[3] || (_cache[3] = ($event: any) => ((_ctx.proxyModelValue) = $event)),\n type: \"datetime\",\n ref: 'calendar-' + _ctx.elementId,\n \"show-second\": false,\n formatter: _ctx.momentFormat,\n \"title-time-format\": 'DD-MM-YYYY',\n shortcuts: _ctx.shortcuts\n }, {\n \"icon-calendar\": _withCtx(() => [\n _hoisted_2\n ]),\n \"icon-clear\": _withCtx(() => [\n _hoisted_3\n ]),\n _: 1\n }, 8, [\"open\", \"value\", \"formatter\", \"shortcuts\"]),\n _createElementVNode(\"label\", {\n class: _normalizeClass([\"absolute left-1.5 origin-0 -z-1\", {\n\t\t\t\t\t'calendar-fixed-label': _ctx.proxyModelValue != null || _ctx.calendarOpen,\n\t\t\t\t\t'bottom-1.5': _ctx.proxyModelValue == null,\n\t\t\t\t}])\n }, [\n _renderSlot(_ctx.$slots, \"default\")\n ], 2)\n ], 2),\n (_ctx.$slots.errors?.())\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _renderSlot(_ctx.$slots, \"errors\")\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}","\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport { defineComponent } from \"@vue/runtime-core\";\nimport moment from \"moment\";\nimport { v4 as uuid4 } from \"uuid\";\n\nimport DatePicker from \"vue-datepicker-next\";\nimport \"vue-datepicker-next/index.css\";\nimport \"vue-datepicker-next/locale/it\";\n\nexport default defineComponent({\n\tname: \"CalendarInput\",\n\tcomponents: { DatePicker },\n\tprops: {\n\t\tmodelValue: {\n\t\t\trequired: true,\n\t\t},\n\t\t// allowPast: {\n\t\t// \ttype: Boolean,\n\t\t// \tdefault: false,\n\t\t// },\n\t},\n\tcreated() {\n\t\tthis.elementId = uuid4();\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tcalendarOpen: false,\n\t\t\telementId: \"\",\n\t\t\tmomentFormat: {\n\t\t\t\t//[optional] Date to String\n\t\t\t\tstringify: (date: moment.MomentInput) => {\n\t\t\t\t\treturn date ? moment(date).format(\"LLL\") : \"\";\n\t\t\t\t},\n\t\t\t\t//[optional] String to Date\n\t\t\t\tparse: (value: moment.MomentInput) => {\n\t\t\t\t\treturn value ? moment(value, \"LLL\").toDate() : null;\n\t\t\t\t},\n\t\t\t\t//[optional] getWeekNumber\n\t\t\t\tgetWeek: (date: any) => {\n\t\t\t\t\treturn; // a number\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t},\n\tmethods: {\n\t\tonOpen() {\n\t\t\tthis.calendarOpen = true;\n\t\t\tthis.$emit(\"open\");\n\t\t},\n\t\tonClose() {\n\t\t\tthis.calendarOpen = false;\n\t\t\tthis.$emit(\"close\");\n\t\t},\n\t\tclose() {\n\t\t\tthis.calendarOpen = false;\n\t\t},\n\t},\n\tcomputed: {\n\t\tproxyModelValue: {\n\t\t\tget() {\n\t\t\t\tif (!this.modelValue) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tif (typeof this.modelValue === \"string\") {\n\t\t\t\t\t// TODO move this to converter in API module\n\t\t\t\t\treturn new Date(this.modelValue.replace(\" \", \"T\"));\n\t\t\t\t}\n\n\t\t\t\treturn this.modelValue;\n\t\t\t},\n\t\t\tset(val: unknown) {\n\t\t\t\tthis.$emit(\"update:modelValue\", val);\n\t\t\t},\n\t\t},\n\t\t// isDateDisabledFn() {\n\t\t// \tif (this.allowPast) {\n\t\t// \t\treturn () => false;\n\t\t// \t}\n\t\t// \treturn date => {\n\t\t// \t\tif (date === this.modelValue) {\n\t\t// \t\t\treturn false;\n\t\t// \t\t}\n\t\t// \t\tconst today = new Date();\n\t\t// \t\tconst midnight = new Date(today.getFullYear(), today.getMonth(), today.getDate());\n\t\t// \t\treturn date.getTime() < midnight.getTime();\n\t\t// \t};\n\t\t// },\n\t\t// isTimeDisabledFn() {\n\t\t// \tif (this.allowPast) {\n\t\t// \t\treturn () => false;\n\t\t// \t}\n\t\t// \treturn date => {\n\t\t// \t\tif (date === this.modelValue) {\n\t\t// \t\t\treturn false;\n\t\t// \t\t}\n\t\t// \t\treturn date < new Date();\n\t\t// \t};\n\t\t// },\n\t\tshortcuts() {\n\t\t\tconst nineAMToday = new Date();\n\t\t\tnineAMToday.setHours(9, 0, 0, 0);\n\n\t\t\tconst twoPMToday = new Date();\n\t\t\ttwoPMToday.setHours(14, 0, 0, 0);\n\n\t\t\treturn [\n\t\t\t\t...(new Date() > nineAMToday\n\t\t\t\t\t? []\n\t\t\t\t\t: [{ text: _(\"misc.this_morning\"), onClick: () => nineAMToday }]),\n\t\t\t\t...(new Date() > twoPMToday\n\t\t\t\t\t? []\n\t\t\t\t\t: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttext: _(\"misc.this_afternoon\"),\n\t\t\t\t\t\t\t\tonClick: () => twoPMToday,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t ]),\n\t\t\t\t{\n\t\t\t\t\ttext: _(\"misc.tomorrow_morning\"),\n\t\t\t\t\tonClick: () => {\n\t\t\t\t\t\tconst tomorrow = new Date();\n\t\t\t\t\t\ttomorrow.setDate(tomorrow.getDate() + 1); // set the date to tomorrow\n\t\t\t\t\t\ttomorrow.setHours(9, 0, 0, 0);\n\t\t\t\t\t\treturn tomorrow;\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttext: _(\"misc.tomorrow_afternoon\"),\n\t\t\t\t\tonClick: () => {\n\t\t\t\t\t\tconst tomorrow = new Date();\n\t\t\t\t\t\ttomorrow.setDate(tomorrow.getDate() + 1); // set the date to tomorrow\n\t\t\t\t\t\ttomorrow.setHours(14, 0, 0, 0);\n\t\t\t\t\t\treturn tomorrow;\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttext: _(\"misc.next_week\"),\n\t\t\t\t\tonClick: () => {\n\t\t\t\t\t\tconst date = new Date();\n\t\t\t\t\t\tdate.setTime(date.getTime() + 3600 * 1000 * 24 * 7);\n\t\t\t\t\t\treturn date;\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t];\n\t\t},\n\t},\n});\n","import { render } from \"./CalendarInput.vue?vue&type=template&id=3823f0b3&ts=true\"\nimport script from \"./CalendarInput.vue?vue&type=script&lang=ts\"\nexport * from \"./CalendarInput.vue?vue&type=script&lang=ts\"\n\nimport \"./CalendarInput.vue?vue&type=style&index=0&id=3823f0b3&lang=css\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport CalendarInput from \"@/components/ui/CalendarInput.vue\";\nimport Dialog from \"@/components/ui/Dialog.vue\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nexport default defineComponent({\n\tname: \"SchedulePublishDialog\",\n\tprops: {\n\t\tvisible: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tinitialValue: {\n\t\t\ttype: Object as PropType,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\twatch: {\n\t\tvisible(newVal) {\n\t\t\tif (!newVal) {\n\t\t\t\tthis.value = null;\n\t\t\t} else {\n\t\t\t\tthis.value = this.initialValue;\n\t\t\t}\n\t\t},\n\t\tvalue(newVal) {\n\t\t\tthis.showErrors = newVal && this.invalid;\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tvalue: null as string | null,\n\t\t\tshowErrors: false,\n\t\t};\n\t},\n\tmethods: {\n\t\tonYes() {\n\t\t\treturn this.$emit(\"confirm\", this.value);\n\t\t},\n\t\tonNo() {\n\t\t\treturn this.$emit(\"cancel\");\n\t\t},\n\t},\n\tcomputed: {\n\t\tinvalid() {\n\t\t\tif (this.value === null) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn new Date(this.value).getTime() - new Date().getTime() <= 5 * 1000 * 60;\n\t\t},\n\t},\n\tcomponents: { Dialog, CalendarInput },\n});\n","import { render } from \"./SchedulePublishDialog.vue?vue&type=template&id=7fac47d8&ts=true\"\nimport script from \"./SchedulePublishDialog.vue?vue&type=script&lang=ts\"\nexport * from \"./SchedulePublishDialog.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { getCourseTopicNodes } from \"@/api\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport CloudSaveStatus from \"@/components/ui/CloudSaveStatus.vue\";\nimport Dropdown from \"@/components/ui/Dropdown.vue\";\nimport FileUpload from \"@/components/ui/FileUpload.vue\";\nimport TextEditor from \"@/components/ui/TextEditor.vue\";\nimport Timestamp from \"@/components/ui/Timestamp.vue\";\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport IntegrationSwitch from \"@/integrations/classroom/components/IntegrationSwitch.vue\";\nimport PublishedOnClassroom from \"@/integrations/classroom/components/PublishedOnClassroom.vue\";\nimport { GoogleClassroomAnnouncementTwin } from \"@/integrations/classroom/interfaces\";\nimport { useGoogleIntegrationsStore } from \"@/integrations/stores/googleIntegrationsStore\";\nimport { SelectableOption } from \"@/interfaces\";\nimport { courseIdMixin, savingMixin } from \"@/mixins\";\nimport {\n\tAnnouncementNode,\n\tAnnouncementNodeState,\n\tCourseTreeNode,\n\tCourseTreeNodeType,\n\tFileNode as IFileNode,\n\tgetBlankFileNode,\n\tTopicNode,\n} from \"@/models\";\nimport { useMainStore } from \"@/stores/mainStore\";\nimport { useMetaStore } from \"@/stores/metaStore\";\nimport { getFormattedTimestamp, setErrorNotification } from \"@/utils\";\nimport { announcementNodeValidation } from \"@/validation/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport useVuelidate from \"@vuelidate/core\";\nimport { mapStores } from \"pinia\";\nimport FileNode from \"../node/FileNode.vue\";\nimport { nodeEditorEmits, nodeEditorProps } from \"../shared\";\nimport SchedulePublishDialog from \"./SchedulePublishDialog.vue\";\nexport default defineComponent({\n\tname: \"AnnouncementNodeEditor\",\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\t// whether to only show the publish button or also\n\t\t// the save / save as draft one\n\t\tpublishOnly: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\t...nodeEditorProps,\n\t},\n\temits: { ...nodeEditorEmits },\n\tmixins: [courseIdMixin, savingMixin],\n\tvalidations() {\n\t\treturn {\n\t\t\tmodelValue: announcementNodeValidation,\n\t\t};\n\t},\n\tsetup() {\n\t\tconst v = useVuelidate();\n\t\treturn { v$: v };\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tAnnouncementNodeState,\n\t\t\tcreatingAttachment: false,\n\t\t\ttopics: [] as TopicNode[],\n\t\t\tloadingTopics: false,\n\t\t\tloadingChildren: false,\n\t\t\tattachmentUploadProgress: undefined as undefined | number,\n\t\t\tpublishToClassroom: true,\n\t\t\tshowClassroomIntegrationSwitch: false,\n\t\t\tgoogleClassroomAnnouncementTwin: null as null | GoogleClassroomAnnouncementTwin,\n\t\t\tshowScheduleDialog: false,\n\t\t\tcanceledScheduledPublish: false,\n\t\t};\n\t},\n\tasync created() {\n\t\tawait this.mainStore.getCourseRootId({ courseId: this.courseId });\n\t\tthis.showClassroomIntegrationSwitch =\n\t\t\tawait this.googleIntegrationStore.isGoogleClassroomIntegrationActive(this.courseId);\n\t\tthis.checkForAnnouncementTwin();\n\t\tawait Promise.all([\n\t\t\t(async () => {\n\t\t\t\tif (!this.allowChildren) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.loadingChildren = true;\n\t\t\t\ttry {\n\t\t\t\t\tawait this.mainStore.getCourseTreeNodeChildren({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\tnodeId: this.modelValue.id,\n\t\t\t\t\t\tfromFirstPage: true,\n\t\t\t\t\t});\n\t\t\t\t} catch (e) {\n\t\t\t\t\tsetErrorNotification(e);\n\t\t\t\t} finally {\n\t\t\t\t\tthis.loadingChildren = false;\n\t\t\t\t}\n\t\t\t})(),\n\t\t\t(async () => {\n\t\t\t\tthis.loadingTopics = true;\n\t\t\t\ttry {\n\t\t\t\t\tthis.topics = await getCourseTopicNodes(this.courseId);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tsetErrorNotification(e);\n\t\t\t\t} finally {\n\t\t\t\t\tthis.loadingTopics = false;\n\t\t\t\t}\n\t\t\t})(),\n\t\t]);\n\t},\n\tmethods: {\n\t\tasync onSchedule(datetime) {\n\t\t\tif (datetime !== null) {\n\t\t\t\tthis.v$.$touch();\n\t\t\t}\n\t\t\tif (datetime === null || this.v$.$errors.length === 0) {\n\t\t\t\tconst save = datetime !== null;\n\t\t\t\tthis.onNodeChange(\"schedule_publish_at\", datetime, save);\n\t\t\t\tif (datetime === null) {\n\t\t\t\t\tthis.canceledScheduledPublish = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.showScheduleDialog = false;\n\t\t\t}\n\t\t},\n\t\tonNodeChange(\n\t\t\tkey: any, //K,\n\t\t\tvalue: any, //CourseTreeNode[K],\n\t\t\tsave = false,\n\t\t) {\n\t\t\t// TODO extract shared behavior (mixin?)\n\t\t\tthis.$emit(\"patchNode\", { key, value, save });\n\t\t},\n\t\tasync checkForAnnouncementTwin() {\n\t\t\tthis.googleClassroomAnnouncementTwin =\n\t\t\t\tawait this.googleIntegrationStore.getGoogleClassroomAnnouncementTwin(\n\t\t\t\t\tthis.modelValue.id,\n\t\t\t\t);\n\t\t},\n\t\tonSave() {\n\t\t\tif (\n\t\t\t\t(this.modelValue.state !== AnnouncementNodeState.DRAFT ||\n\t\t\t\t\tthis.modelValue.schedule_publish_at) &&\n\t\t\t\tthis.v$.$invalid\n\t\t\t) {\n\t\t\t\tthis.v$.$touch();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.$emit(\"save\");\n\t\t},\n\t\tonBlur() {\n\t\t\tthis.$emit(\"blur\");\n\t\t},\n\t\tonParentChange(parentId: string) {\n\t\t\tthis.onNodeChange(\"parent_id\", parentId);\n\t\t},\n\t\tasync onPublish() {\n\t\t\tif (\n\t\t\t\tthis.modelValue.schedule_publish_at &&\n\t\t\t\t!confirm(\n\t\t\t\t\t_(\"course_tree.scheduled_confirm_publish_now_1\") +\n\t\t\t\t\t\tgetFormattedTimestamp(this.modelValue.schedule_publish_at) +\n\t\t\t\t\t\t_(\"course_tree.scheduled_confirm_publish_now_2\"),\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.v$.$touch();\n\t\t\tif (this.v$.$errors.length === 0) {\n\t\t\t\tthis.$emit(\"updateState\", {\n\t\t\t\t\tnewState: AnnouncementNodeState.PUBLISHED,\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tfireIntegrationEvent: this.publishToClassroom,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tasync onCreateAttachment(file) {\n\t\t\tthis.creatingAttachment = true;\n\t\t\tconst onUploadProgress = (e: { loaded: number; total: number }) => {\n\t\t\t\tthis.attachmentUploadProgress = (e.loaded / e.total) * 100;\n\t\t\t\t// make loader indeterminate after upload completes for\n\t\t\t\t//better visual feedback to the user\n\t\t\t\tif (this.attachmentUploadProgress === 100) {\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis.attachmentUploadProgress = undefined;\n\t\t\t\t\t}, 100);\n\t\t\t\t}\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tawait this.mainStore.createCourseTreeNode({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\tnode: { ...getBlankFileNode(this.modelValue.id), file },\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tonUploadProgress,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t} finally {\n\t\t\t\tthis.creatingAttachment = false;\n\t\t\t}\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore, useMetaStore, useGoogleIntegrationsStore),\n\t\thasGoogleClassroomTwin() {\n\t\t\treturn this.googleClassroomAnnouncementTwin !== null;\n\t\t},\n\t\t// TODO refactor, duplicated with CourseTree\n\t\ttopicsAsOptions(): SelectableOption[] {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tvalue: this.mainStore.courseIdToTreeRootId[this.courseId],\n\t\t\t\t\tcontent: _(\"course_tree.no_topic\"),\n\t\t\t\t},\n\t\t\t\t...this.topics.map(t => ({\n\t\t\t\t\tvalue: t.id,\n\t\t\t\t\tcontent: t.name,\n\t\t\t\t})),\n\t\t\t];\n\t\t},\n\t\tfileChildren(): IFileNode[] {\n\t\t\treturn (\n\t\t\t\tthis.mainStore.paginatedChildrenByNodeId[this.modelValue.id]?.data ?? []\n\t\t\t).filter(c => c.resourcetype === CourseTreeNodeType.FileNode) as IFileNode[];\n\t\t},\n\t\tallowChildren() {\n\t\t\treturn this.isExistingNode;\n\t\t},\n\t\tattachmentProxy: {\n\t\t\tget() {\n\t\t\t\treturn [];\n\t\t\t},\n\t\t\tasync set(val: any) {\n\t\t\t\tawait this.onCreateAttachment(val);\n\t\t\t},\n\t\t},\n\t},\n\tcomponents: {\n\t\tTextEditor,\n\t\tCloudSaveStatus,\n\t\tBtn,\n\t\tFileUpload,\n\t\tFileNode,\n\t\tDropdown,\n\t\tIntegrationSwitch,\n\t\tPublishedOnClassroom,\n\t\tSchedulePublishDialog,\n\t\tTimestamp,\n\t},\n});\n","import { render } from \"./AnnouncementNodeEditor.vue?vue&type=template&id=1a7ca92e&ts=true\"\nimport script from \"./AnnouncementNodeEditor.vue?vue&type=script&lang=ts\"\nexport * from \"./AnnouncementNodeEditor.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, vShow as _vShow, withDirectives as _withDirectives, createTextVNode as _createTextVNode, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"mb-2\" }\nconst _hoisted_2 = { class: \"flex md:flex-row flex-col w-full md:items-center mb-8\" }\nconst _hoisted_3 = { class: \"flex items-center\" }\nconst _hoisted_4 = { class: \"mb-0 ml-2 mr-auto\" }\nconst _hoisted_5 = { class: \"flex h-64 space-x-8 mb-2\" }\nconst _hoisted_6 = { class: \"w-2/3 mb-auto flex flex-col\" }\nconst _hoisted_7 = { class: \"text-muted mb-8\" }\nconst _hoisted_8 = { class: \"flex items-start space-x-2 mb-2\" }\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons text-muted mt-1.5\" }, \"link\", -1)\nconst _hoisted_10 = { class: \"w-full\" }\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-1/3 flex\" }, null, -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_Dropdown = _resolveComponent(\"Dropdown\")!\n const _component_SegmentedControls = _resolveComponent(\"SegmentedControls\")!\n const _component_FileUpload = _resolveComponent(\"FileUpload\")!\n const _component_ArticleHandle = _resolveComponent(\"ArticleHandle\")!\n const _component_TextInput = _resolveComponent(\"TextInput\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_Btn, {\n variant: 'icon',\n outline: true,\n class: \"-ml-2\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n class: \"material-icons-outlined\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('closeEditor')))\n }, \" close\")\n ]),\n _: 1\n }),\n _createElementVNode(\"h1\", _hoisted_4, _toDisplayString(_ctx.$t(\"course_tree.file_editor_title\")), 1)\n ]),\n _createVNode(_component_Dropdown, {\n class: \"md:w-1/3 w-2/3 ml-auto md:mt-0 md:-mb-0 mt-2 -mb-4\",\n loading: _ctx.loadingTopics,\n options: _ctx.topicsAsOptions,\n modelValue: _ctx.modelValue.parent_id,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => (_ctx.onParentChange($event)))\n }, null, 8, [\"loading\", \"options\", \"modelValue\"])\n ]),\n false\n ? (_openBlock(), _createBlock(_component_SegmentedControls, {\n key: 0,\n class: \"mb-10\",\n options: _ctx.panes,\n modelValue: _ctx.currentPane,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((_ctx.currentPane) = $event))\n }, null, 8, [\"options\", \"modelValue\"]))\n : _createCommentVNode(\"\", true),\n _withDirectives(_createElementVNode(\"div\", null, [\n _createVNode(_component_FileUpload, {\n uploadProgress: _ctx.uploadProgress,\n uploading: _ctx.blockingSaving,\n showMaxSize: true,\n modelValue: _ctx.fileProxy,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((_ctx.fileProxy) = $event))\n }, null, 8, [\"uploadProgress\", \"uploading\", \"modelValue\"])\n ], 512), [\n [_vShow, _ctx.currentPane === 'file_upload']\n ]),\n _withDirectives(_createElementVNode(\"div\", null, [\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"p\", _hoisted_7, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"course_tree.file_by_url_description\")) + \" \", 1),\n _createVNode(_component_ArticleHandle),\n _createTextVNode(\". \")\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n _hoisted_9,\n _createElementVNode(\"div\", _hoisted_10, [\n _createVNode(_component_TextInput, {\n class: \"w-full\",\n placeholder: _ctx.$t('course_tree.file_url')\n }, null, 8, [\"placeholder\"]),\n _createVNode(_component_Btn, { class: \"mt-2\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"misc.save\")), 1)\n ]),\n _: 1\n })\n ])\n ])\n ]),\n _hoisted_11\n ])\n ], 512), [\n [_vShow, _ctx.currentPane === 'url']\n ])\n ]))\n}","\nimport { getCourseTopicNodes } from \"@/api\";\nimport ArticleHandle from \"@/components/shared/HelpCenter/ArticleHandle.vue\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport Dropdown from \"@/components/ui/Dropdown.vue\";\nimport DropdownMenu from \"@/components/ui/DropdownMenu.vue\";\nimport FileUpload from \"@/components/ui/FileUpload.vue\";\nimport SegmentedControls from \"@/components/ui/SegmentedControls.vue\";\nimport TextInput from \"@/components/ui/TextInput.vue\";\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport { SelectableOption } from \"@/interfaces\";\nimport { courseIdMixin } from \"@/mixins\";\nimport { FileNode, TopicNode } from \"@/models\";\nimport { useMainStore } from \"@/stores/mainStore\";\nimport { setErrorNotification } from \"@/utils\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport { mapStores } from \"pinia\";\nimport { nodeEditorEmits, nodeEditorProps } from \"../shared\";\nexport default defineComponent({\n\tname: \"FileNodeEditor\",\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\t...nodeEditorProps,\n\t},\n\temits: {\n\t\t...nodeEditorEmits,\n\t},\n\tmixins: [courseIdMixin],\n\tasync created() {\n\t\tthis.loadingTopics = true;\n\t\ttry {\n\t\t\tthis.topics = await getCourseTopicNodes(this.courseId);\n\t\t} catch (e) {\n\t\t\tsetErrorNotification(e);\n\t\t} finally {\n\t\t\tthis.loadingTopics = false;\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tpanes: [\n\t\t\t\t{\n\t\t\t\t\tcontent: _(\"course_tree.file_node_editor_file_upload\"),\n\t\t\t\t\tvalue: \"file_upload\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcontent: _(\"course_tree.file_node_editor_url\"),\n\t\t\t\t\tvalue: \"url\",\n\t\t\t\t},\n\t\t\t] as SelectableOption[],\n\t\t\tcurrentPane: \"file_upload\",\n\t\t\t// TODO extract repeated code from this editor & lesson editor\n\t\t\ttopics: [] as TopicNode[],\n\t\t\tloadingTopics: false,\n\t\t};\n\t},\n\tmethods: {\n\t\tonNodeChange(key: any, value: any, save = false) {\n\t\t\tthis.$emit(\"patchNode\", { key, value, save });\n\t\t},\n\t\tonParentChange(parentId: string) {\n\t\t\tthis.onNodeChange(\"parent_id\", parentId);\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore),\n\t\tfileProxy: {\n\t\t\tget() {\n\t\t\t\treturn [];\n\t\t\t},\n\t\t\tset(val: Blob) {\n\t\t\t\tthis.onNodeChange(\"file\", val, true);\n\t\t\t},\n\t\t},\n\t\t// TODO refactor, duplicated with other editors - move up to abstract component & pass as prop\n\t\ttopicsAsOptions(): SelectableOption[] {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tvalue: this.mainStore.courseIdToTreeRootId[this.courseId],\n\t\t\t\t\tcontent: _(\"course_tree.no_topic\"),\n\t\t\t\t},\n\t\t\t\t...this.topics.map(t => ({\n\t\t\t\t\tvalue: t.id,\n\t\t\t\t\tcontent: t.name,\n\t\t\t\t})),\n\t\t\t];\n\t\t},\n\t},\n\tcomponents: { SegmentedControls, FileUpload, Btn, Dropdown, TextInput, ArticleHandle },\n});\n","import { render } from \"./FileNodeEditor.vue?vue&type=template&id=73bd7dfc&ts=true\"\nimport script from \"./FileNodeEditor.vue?vue&type=script&lang=ts\"\nexport * from \"./FileNodeEditor.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, renderList as _renderList, Fragment as _Fragment, createSlots as _createSlots } from \"vue\"\n\nconst _hoisted_1 = { class: \"relative\" }\nconst _hoisted_2 = { class: \"mb-12 flex flex-col space-y-4\" }\nconst _hoisted_3 = { class: \"flex md:flex-row md:space-y-0 space-y-2 flex-col w-full md:items-center\" }\nconst _hoisted_4 = { class: \"flex items-center mr-auto\" }\nconst _hoisted_5 = { class: \"mb-0 ml-2\" }\nconst _hoisted_6 = { class: \"flex items-center md:ml-0 ml-auto\" }\nconst _hoisted_7 = {\n key: 1,\n class: \"flex space-x-3 items-center\"\n}\nconst _hoisted_8 = { class: \"text-muted\" }\nconst _hoisted_9 = { class: \"ml-2\" }\nconst _hoisted_10 = {\n key: 2,\n class: \"ml-2\"\n}\nconst _hoisted_11 = {\n style: {\"width\":\"24px\",\"fill\":\"currentColor\"},\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\"\n}\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"M15,13H16.5V15.82L18.94,17.23L18.19,18.53L15,16.69V13M19,8H5V19H9.67C9.24,18.09 9,17.07 9,16A7,7 0 0,1 16,9C17.07,9 18.09,9.24 19,9.67V8M5,21C3.89,21 3,20.1 3,19V5C3,3.89 3.89,3 5,3H6V1H8V3H16V1H18V3H19A2,2 0 0,1 21,5V11.1C22.24,12.36 23,14.09 23,16A7,7 0 0,1 16,23C14.09,23 12.36,22.24 11.1,21H5M16,11.15A4.85,4.85 0 0,0 11.15,16C11.15,18.68 13.32,20.85 16,20.85A4.85,4.85 0 0,0 20.85,16C20.85,13.32 18.68,11.15 16,11.15Z\" }, null, -1)\nconst _hoisted_13 = [\n _hoisted_12\n]\nconst _hoisted_14 = { class: \"w-full flex\" }\nconst _hoisted_15 = {\n style: {\"width\":\"24px\",\"fill\":\"currentColor\"},\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\"\n}\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"M15,13H16.5V15.82L18.94,17.23L18.19,18.53L15,16.69V13M19,8H5V19H9.67C9.24,18.09 9,17.07 9,16A7,7 0 0,1 16,9C17.07,9 18.09,9.24 19,9.67V8M5,21C3.89,21 3,20.1 3,19V5C3,3.89 3.89,3 5,3H6V1H8V3H16V1H18V3H19A2,2 0 0,1 21,5V11.1C22.24,12.36 23,14.09 23,16A7,7 0 0,1 16,23C14.09,23 12.36,22.24 11.1,21H5M16,11.15A4.85,4.85 0 0,0 11.15,16C11.15,18.68 13.32,20.85 16,20.85A4.85,4.85 0 0,0 20.85,16C20.85,13.32 18.68,11.15 16,11.15Z\" }, null, -1)\nconst _hoisted_17 = [\n _hoisted_16\n]\nconst _hoisted_18 = { class: \"flex items-center\" }\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons\" }, \"edit\", -1)\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons\" }, \"close\", -1)\nconst _hoisted_21 = { class: \"mb-8 flex flex-col md:flex-row items-center md:space-x-8 md:space-y-0 space-y-6\" }\nconst _hoisted_22 = { class: \"error-msg\" }\nconst _hoisted_23 = { class: \"md:w-1/3 w-full\" }\nconst _hoisted_24 = { class: \"mt-8\" }\nconst _hoisted_25 = { class: \"mb-4\" }\nconst _hoisted_26 = { class: \"grid lg:grid-cols-2 lg:gap-6 gap-4 grid-cols-1\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_CloudSaveStatus = _resolveComponent(\"CloudSaveStatus\")!\n const _component_IntegrationSwitch = _resolveComponent(\"IntegrationSwitch\")!\n const _component_PublishedOnClassroom = _resolveComponent(\"PublishedOnClassroom\")!\n const _component_Timestamp = _resolveComponent(\"Timestamp\")!\n const _component_TextInput = _resolveComponent(\"TextInput\")!\n const _component_Dropdown = _resolveComponent(\"Dropdown\")!\n const _component_TextEditor = _resolveComponent(\"TextEditor\")!\n const _component_FileNode = _resolveComponent(\"FileNode\")!\n const _component_FileUpload = _resolveComponent(\"FileUpload\")!\n const _component_SchedulePublishDialog = _resolveComponent(\"SchedulePublishDialog\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(_component_Btn, {\n variant: 'icon',\n outline: true,\n class: \"-ml-2\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n class: \"material-icons-outlined\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('closeEditor')))\n }, \" close\")\n ]),\n _: 1\n }),\n _createElementVNode(\"h1\", _hoisted_5, _toDisplayString(_ctx.$t(\"course_tree.lesson_editor_title\")), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_6, [\n (_ctx.showAutoSaveIndicator)\n ? (_openBlock(), _createBlock(_component_CloudSaveStatus, {\n key: 0,\n saving: _ctx.saving,\n hadError: _ctx.savingError,\n class: \"mt-1 mr-6 ml-auto hidden md:block\"\n }, null, 8, [\"saving\", \"hadError\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.modelValue.state === _ctx.LessonNodeState.DRAFT)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [\n _createElementVNode(\"p\", _hoisted_8, _toDisplayString(_ctx.$t(\"course_tree.draft\")), 1),\n _createVNode(_component_Btn, {\n disabled: _ctx.blockingSaving,\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.onPublish()))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"course_tree.publish_lesson\")), 1)\n ]),\n _: 1\n }, 8, [\"disabled\"])\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_9, [\n _createVNode(_component_Btn, {\n disabled: _ctx.blockingSaving,\n outline: _ctx.modelValue.state === _ctx.LessonNodeState.DRAFT,\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.onSave()))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.modelValue.state === _ctx.LessonNodeState.DRAFT\n\t\t\t\t\t\t\t\t\t? _ctx.$t(\"course_tree.save_draft\")\n\t\t\t\t\t\t\t\t\t: _ctx.$t(\"course_tree.save\")), 1)\n ]),\n _: 1\n }, 8, [\"disabled\", \"outline\"])\n ]),\n (_ctx.modelValue.state === _ctx.LessonNodeState.DRAFT)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_10, [\n _createVNode(_component_Btn, {\n variant: 'icon',\n outline: true,\n class: \"icon-btn-primary\",\n disabled: _ctx.blockingSaving,\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.showScheduleDialog = true)),\n tooltip: _ctx.$t('course_tree.schedule')\n }, {\n default: _withCtx(() => [\n (_openBlock(), _createElementBlock(\"svg\", _hoisted_11, _hoisted_13))\n ]),\n _: 1\n }, 8, [\"disabled\", \"tooltip\"])\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_14, [\n (\n\t\t\t\t\t\t_ctx.showClassroomIntegrationSwitch && _ctx.modelValue.state === _ctx.LessonNodeState.DRAFT\n\t\t\t\t\t)\n ? (_openBlock(), _createBlock(_component_IntegrationSwitch, {\n key: 0,\n class: \"ml-auto\",\n modelValue: _ctx.publishToClassroom,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = ($event: any) => ((_ctx.publishToClassroom) = $event))\n }, null, 8, [\"modelValue\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.hasGoogleClassroomTwin)\n ? (_openBlock(), _createBlock(_component_PublishedOnClassroom, {\n key: 1,\n class: \"banner-success px-2 ml-auto\",\n remoteObjectUrl: _ctx.googleClassroomMaterialTwin?.data.alternateLink\n }, null, 8, [\"remoteObjectUrl\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.canceledScheduledPublish)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 2,\n class: _normalizeClass([[\n\t\t\t\t\t\t(_ctx.showClassroomIntegrationSwitch &&\n\t\t\t\t\t\t\t_ctx.modelValue.state === _ctx.LessonNodeState.DRAFT) ||\n\t\t\t\t\t\t_ctx.hasGoogleClassroomTwin\n\t\t\t\t\t\t\t? 'ml-12'\n\t\t\t\t\t\t\t: 'ml-auto',\n\t\t\t\t\t], \"banner banner-light py-1.5 px-1.5 text-muted\"])\n }, _toDisplayString(_ctx.$t(\"course_tree.save_to_cancel_scheduled_publish\")), 3))\n : _createCommentVNode(\"\", true),\n (\n\t\t\t\t\t\t_ctx.modelValue.state === _ctx.LessonNodeState.DRAFT && _ctx.modelValue.schedule_publish_at\n\t\t\t\t\t)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 3,\n class: _normalizeClass([[\n\t\t\t\t\t\t(_ctx.showClassroomIntegrationSwitch &&\n\t\t\t\t\t\t\t_ctx.modelValue.state === _ctx.LessonNodeState.DRAFT) ||\n\t\t\t\t\t\t_ctx.hasGoogleClassroomTwin\n\t\t\t\t\t\t\t? 'ml-12'\n\t\t\t\t\t\t\t: 'ml-auto',\n\t\t\t\t\t], \"banner banner-light py-0.5 pr-1\"])\n }, [\n (_openBlock(), _createElementBlock(\"svg\", _hoisted_15, _hoisted_17)),\n _createElementVNode(\"p\", null, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"course_tree.scheduled_for\")) + \" \", 1),\n _createVNode(_component_Timestamp, {\n value: _ctx.modelValue.schedule_publish_at\n }, null, 8, [\"value\"])\n ]),\n _createElementVNode(\"div\", _hoisted_18, [\n _createVNode(_component_Btn, {\n variant: 'icon',\n outline: true,\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.showScheduleDialog = true))\n }, {\n default: _withCtx(() => [\n _hoisted_19\n ]),\n _: 1\n }),\n _createVNode(_component_Btn, {\n variant: 'icon',\n outline: true,\n onClick: _cache[6] || (_cache[6] = ($event: any) => (_ctx.onSchedule(null)))\n }, {\n default: _withCtx(() => [\n _hoisted_20\n ]),\n _: 1\n })\n ])\n ], 2))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_21, [\n _createVNode(_component_TextInput, {\n class: \"w-full\",\n modelValue: _ctx.modelValue.title,\n onBlur: _cache[7] || (_cache[7] = ($event: any) => (_ctx.onBlur())),\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = ($event: any) => (_ctx.onNodeChange('title', $event)))\n }, _createSlots({\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"course_tree.lesson_title\")) + \" \", 1)\n ]),\n _: 2\n }, [\n (_ctx.v$.modelValue.title.$errors.length > 0)\n ? {\n name: \"errors\",\n fn: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.v$.modelValue.title.$errors, (error) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"input-errors\",\n key: error.$uid\n }, [\n _createElementVNode(\"div\", _hoisted_22, _toDisplayString(_ctx.$t(\"validation_errors.course_tree.lesson.\" + error.$uid)), 1)\n ]))\n }), 128))\n ]),\n key: \"0\"\n }\n : undefined\n ]), 1032, [\"modelValue\"]),\n _createElementVNode(\"div\", _hoisted_23, [\n _createVNode(_component_Dropdown, {\n loading: _ctx.loadingTopics,\n options: _ctx.topicsAsOptions,\n modelValue: _ctx.modelValue.parent_id,\n \"onUpdate:modelValue\": _cache[9] || (_cache[9] = ($event: any) => (_ctx.onParentChange($event)))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"course_tree.topic_label\")), 1)\n ]),\n _: 1\n }, 8, [\"loading\", \"options\", \"modelValue\"])\n ])\n ]),\n _createElementVNode(\"div\", null, [\n _createVNode(_component_TextEditor, {\n modelValue: _ctx.modelValue.body,\n fixedLabel: true,\n onBlur: _cache[10] || (_cache[10] = ($event: any) => (_ctx.onBlur())),\n \"onUpdate:modelValue\": _cache[11] || (_cache[11] = ($event: any) => (_ctx.onNodeChange('body', $event)))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"course_tree.lesson_body\")), 1)\n ]),\n _: 1\n }, 8, [\"modelValue\"])\n ]),\n _createElementVNode(\"div\", _hoisted_24, [\n _createElementVNode(\"h3\", _hoisted_25, _toDisplayString(_ctx.$t(\"course_tree.lesson_attachments\")), 1),\n _createElementVNode(\"div\", _hoisted_26, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.fileChildren, (fileNode) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: fileNode.id\n }, [\n _createVNode(_component_FileNode, {\n onDeleteNode: _cache[12] || (_cache[12] = ($event: any) => (_ctx.$emit('deleteNode', $event))),\n isDraggable: false,\n canEdit: true,\n node: fileNode\n }, null, 8, [\"node\"])\n ]))\n }), 128)),\n _createVNode(_component_FileUpload, {\n uploadProgress: _ctx.attachmentUploadProgress,\n uploading: _ctx.creatingAttachment,\n modelValue: _ctx.attachmentProxy,\n \"onUpdate:modelValue\": _cache[13] || (_cache[13] = ($event: any) => ((_ctx.attachmentProxy) = $event)),\n autoUpload: true,\n clearImmediately: true\n }, null, 8, [\"uploadProgress\", \"uploading\", \"modelValue\"])\n ])\n ]),\n _createVNode(_component_SchedulePublishDialog, {\n onCancel: _cache[14] || (_cache[14] = ($event: any) => (_ctx.showScheduleDialog = false)),\n onConfirm: _cache[15] || (_cache[15] = ($event: any) => (_ctx.onSchedule($event))),\n visible: _ctx.showScheduleDialog,\n initialValue: _ctx.modelValue.schedule_publish_at\n }, null, 8, [\"visible\", \"initialValue\"])\n ]))\n}","\nimport { getCourseTopicNodes } from \"@/api\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport CloudSaveStatus from \"@/components/ui/CloudSaveStatus.vue\";\nimport Dropdown from \"@/components/ui/Dropdown.vue\";\nimport FileUpload from \"@/components/ui/FileUpload.vue\";\nimport TextEditor from \"@/components/ui/TextEditor.vue\";\nimport TextInput from \"@/components/ui/TextInput.vue\";\nimport Timestamp from \"@/components/ui/Timestamp.vue\";\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport IntegrationSwitch from \"@/integrations/classroom/components/IntegrationSwitch.vue\";\nimport PublishedOnClassroom from \"@/integrations/classroom/components/PublishedOnClassroom.vue\";\nimport { GoogleClassroomMaterialTwin } from \"@/integrations/classroom/interfaces\";\nimport { useGoogleIntegrationsStore } from \"@/integrations/stores/googleIntegrationsStore\";\nimport { SelectableOption } from \"@/interfaces\";\nimport { courseIdMixin, savingMixin } from \"@/mixins\";\nimport {\n\tCourseTreeNode,\n\tCourseTreeNodeType,\n\tFileNode as IFileNode,\n\tgetBlankFileNode,\n\tLessonNode,\n\tLessonNodeState,\n\tTopicNode,\n} from \"@/models\";\nimport { useMainStore } from \"@/stores/mainStore\";\nimport { useMetaStore } from \"@/stores/metaStore\";\nimport { getFormattedTimestamp, setErrorNotification } from \"@/utils\";\nimport { lessonNodeValidation } from \"@/validation/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport useVuelidate from \"@vuelidate/core\";\nimport { mapStores } from \"pinia\";\nimport FileNode from \"../node/FileNode.vue\";\nimport { nodeEditorEmits, nodeEditorProps } from \"../shared\";\nimport SchedulePublishDialog from \"./SchedulePublishDialog.vue\";\nexport default defineComponent({\n\tname: \"LessonNodeEditor\",\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\t...nodeEditorProps,\n\t},\n\temits: {\n\t\t...nodeEditorEmits,\n\t},\n\tmixins: [courseIdMixin, savingMixin],\n\tvalidations() {\n\t\treturn {\n\t\t\tmodelValue: lessonNodeValidation,\n\t\t};\n\t},\n\tsetup() {\n\t\tconst v = useVuelidate();\n\t\treturn { v$: v };\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tLessonNodeState,\n\t\t\tcreatingAttachment: false,\n\t\t\ttopics: [] as TopicNode[],\n\t\t\tloadingTopics: false,\n\t\t\tloadingChildren: false,\n\t\t\tattachmentUploadProgress: undefined as undefined | number,\n\t\t\tpublishToClassroom: true,\n\t\t\tshowClassroomIntegrationSwitch: false,\n\t\t\tgoogleClassroomMaterialTwin: null as null | GoogleClassroomMaterialTwin,\n\t\t\tshowScheduleDialog: false,\n\t\t\tcanceledScheduledPublish: false,\n\t\t};\n\t},\n\tasync created() {\n\t\tawait this.mainStore.getCourseRootId({ courseId: this.courseId });\n\t\tthis.showClassroomIntegrationSwitch =\n\t\t\tawait this.googleIntegrationStore.isGoogleClassroomIntegrationActive(this.courseId);\n\t\tthis.checkForMaterialTwin();\n\t\tawait Promise.all([\n\t\t\t(async () => {\n\t\t\t\tthis.loadingChildren = true;\n\t\t\t\ttry {\n\t\t\t\t\tawait this.mainStore.getCourseTreeNodeChildren({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\tnodeId: this.modelValue.id,\n\t\t\t\t\t\tfromFirstPage: true,\n\t\t\t\t\t});\n\t\t\t\t} catch (e) {\n\t\t\t\t\tsetErrorNotification(e);\n\t\t\t\t} finally {\n\t\t\t\t\tthis.loadingChildren = false;\n\t\t\t\t}\n\t\t\t})(),\n\t\t\t(async () => {\n\t\t\t\tthis.loadingTopics = true;\n\t\t\t\ttry {\n\t\t\t\t\tthis.topics = await getCourseTopicNodes(this.courseId);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tsetErrorNotification(e);\n\t\t\t\t} finally {\n\t\t\t\t\tthis.loadingTopics = false;\n\t\t\t\t}\n\t\t\t})(),\n\t\t]);\n\t},\n\tmethods: {\n\t\tasync onSchedule(datetime) {\n\t\t\tif (datetime !== null) {\n\t\t\t\tthis.v$.$touch();\n\t\t\t}\n\t\t\tif (datetime === null || this.v$.$errors.length === 0) {\n\t\t\t\tconst save = datetime !== null;\n\t\t\t\tthis.onNodeChange(\"schedule_publish_at\", datetime, save);\n\t\t\t\tif (datetime === null) {\n\t\t\t\t\tthis.canceledScheduledPublish = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.showScheduleDialog = false;\n\t\t\t}\n\t\t},\n\t\tasync checkForMaterialTwin() {\n\t\t\tthis.googleClassroomMaterialTwin =\n\t\t\t\tawait this.googleIntegrationStore.getGoogleClassroomMaterialTwin(\n\t\t\t\t\tthis.modelValue.id,\n\t\t\t\t);\n\t\t},\n\t\tonNodeChange(\n\t\t\tkey: any, //K,\n\t\t\tvalue: any, //CourseTreeNode[K],\n\t\t\tsave = false,\n\t\t) {\n\t\t\t// TODO extract shared behavior (mixin?)\n\t\t\tthis.$emit(\"patchNode\", { key, value, save });\n\t\t},\n\t\tonSave() {\n\t\t\tif (\n\t\t\t\t(this.modelValue.state !== LessonNodeState.DRAFT ||\n\t\t\t\t\tthis.modelValue.schedule_publish_at) &&\n\t\t\t\tthis.v$.$invalid\n\t\t\t) {\n\t\t\t\tthis.v$.$touch();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.$emit(\"save\");\n\t\t},\n\t\tonBlur() {\n\t\t\tthis.$emit(\"blur\");\n\t\t},\n\t\tonParentChange(parentId: string) {\n\t\t\tthis.onNodeChange(\"parent_id\", parentId);\n\t\t},\n\t\tasync onPublish() {\n\t\t\tif (\n\t\t\t\tthis.modelValue.schedule_publish_at &&\n\t\t\t\t!confirm(\n\t\t\t\t\t_(\"course_tree.scheduled_confirm_publish_now_1\") +\n\t\t\t\t\t\tgetFormattedTimestamp(this.modelValue.schedule_publish_at) +\n\t\t\t\t\t\t_(\"course_tree.scheduled_confirm_publish_now_2\"),\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.v$.$touch();\n\t\t\tif (this.v$.$errors.length === 0) {\n\t\t\t\tthis.$emit(\"updateState\", {\n\t\t\t\t\tnewState: LessonNodeState.PUBLISHED,\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tfireIntegrationEvent: this.publishToClassroom,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tasync onCreateAttachment(file) {\n\t\t\tthis.creatingAttachment = true;\n\t\t\tconst onUploadProgress = (e: { loaded: number; total: number }) => {\n\t\t\t\tthis.attachmentUploadProgress = (e.loaded / e.total) * 100;\n\t\t\t\t// make loader indeterminate after upload completes for\n\t\t\t\t//better visual feedback to the user\n\t\t\t\tif (this.attachmentUploadProgress === 100) {\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis.attachmentUploadProgress = undefined;\n\t\t\t\t\t}, 100);\n\t\t\t\t}\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tawait this.mainStore.createCourseTreeNode({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\tnode: { ...getBlankFileNode(this.modelValue.id), file },\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tonUploadProgress,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t} finally {\n\t\t\t\tthis.creatingAttachment = false;\n\t\t\t}\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore, useMetaStore, useGoogleIntegrationsStore),\n\t\thasGoogleClassroomTwin() {\n\t\t\treturn this.googleClassroomMaterialTwin !== null;\n\t\t},\n\t\t// TODO refactor, duplicated with other editors\n\t\ttopicsAsOptions(): SelectableOption[] {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tvalue: this.mainStore.courseIdToTreeRootId[this.courseId],\n\t\t\t\t\tcontent: _(\"course_tree.no_topic\"),\n\t\t\t\t},\n\t\t\t\t...this.topics.map(t => ({\n\t\t\t\t\tvalue: t.id,\n\t\t\t\t\tcontent: t.name,\n\t\t\t\t})),\n\t\t\t];\n\t\t},\n\t\tfileChildren(): IFileNode[] {\n\t\t\treturn (\n\t\t\t\tthis.mainStore.paginatedChildrenByNodeId[this.modelValue.id]?.data ?? []\n\t\t\t).filter(c => c.resourcetype === CourseTreeNodeType.FileNode) as IFileNode[];\n\t\t},\n\t\tattachmentProxy: {\n\t\t\tget() {\n\t\t\t\treturn [];\n\t\t\t},\n\t\t\tasync set(val: any) {\n\t\t\t\tawait this.onCreateAttachment(val);\n\t\t\t},\n\t\t},\n\t},\n\tcomponents: {\n\t\tTextInput,\n\t\tTextEditor,\n\t\tCloudSaveStatus,\n\t\tBtn,\n\t\t//Timestamp,\n\t\tFileUpload,\n\t\tFileNode,\n\t\t//LinearProgress,\n\t\tDropdown,\n\t\tIntegrationSwitch,\n\t\tPublishedOnClassroom,\n\t\tSchedulePublishDialog,\n\t\tTimestamp,\n\t},\n});\n","import { render } from \"./LessonNodeEditor.vue?vue&type=template&id=3457de28&ts=true\"\nimport script from \"./LessonNodeEditor.vue?vue&type=script&lang=ts\"\nexport * from \"./LessonNodeEditor.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, createElementBlock as _createElementBlock, renderList as _renderList, Fragment as _Fragment, createSlots as _createSlots, withKeys as _withKeys, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = { class: \"relative\" }\nconst _hoisted_2 = { class: \"flex w-full items-center mb-12\" }\nconst _hoisted_3 = { class: \"mb-0 ml-2 mr-auto\" }\nconst _hoisted_4 = {\n key: 1,\n class: \"flex space-x-3 items-center\"\n}\nconst _hoisted_5 = { class: \"text-muted\" }\nconst _hoisted_6 = {\n key: 2,\n class: \"ml-2\"\n}\nconst _hoisted_7 = { class: \"mb-8 flex items-center space-x-8\" }\nconst _hoisted_8 = { class: \"w-1/3\" }\nconst _hoisted_9 = { class: \"error-msg\" }\nconst _hoisted_10 = { class: \"mt-8\" }\nconst _hoisted_11 = { class: \"mb-4\" }\nconst _hoisted_12 = { class: \"mb-4\" }\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"span\", {\n class: \"material-icons opacity-60\",\n style: {\"font-size\":\"20px !important\"}\n}, \" radio_button_checked \", -1)\nconst _hoisted_14 = {\n key: 0,\n class: \"flex items-center\"\n}\nconst _hoisted_15 = { class: \"mr-4 ml-1\" }\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons\" }, \"edit\", -1)\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons\" }, \"delete\", -1)\nconst _hoisted_18 = {\n key: 1,\n class: \"flex w-full items-center space-x-2\"\n}\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined\" }, \"done\", -1)\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined\" }, \"close\", -1)\nconst _hoisted_21 = {\n key: 0,\n class: \"mt-4 flex w-full items-center space-x-1\"\n}\nconst _hoisted_22 = /*#__PURE__*/_createElementVNode(\"span\", {\n class: \"material-icons opacity-60\",\n style: {\"font-size\":\"20px !important\"}\n}, \" radio_button_checked \", -1)\nconst _hoisted_23 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined\" }, \"done\", -1)\nconst _hoisted_24 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons\" }, \"close\", -1)\nconst _hoisted_25 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mr-1 text-base material-icons-outlined\" }, \" add \", -1)\nconst _hoisted_26 = { class: \"error-msg\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_CloudSaveStatus = _resolveComponent(\"CloudSaveStatus\")!\n const _component_Dropdown = _resolveComponent(\"Dropdown\")!\n const _component_TextEditor = _resolveComponent(\"TextEditor\")!\n const _component_TextInput = _resolveComponent(\"TextInput\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_Btn, {\n variant: 'icon',\n outline: true,\n class: \"-ml-2\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n class: \"material-icons-outlined\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('closeEditor')))\n }, \" close\")\n ]),\n _: 1\n }),\n _createElementVNode(\"h1\", _hoisted_3, _toDisplayString(_ctx.$t(\"course_tree.poll_editor_title\")), 1),\n (_ctx.showAutoSaveIndicator)\n ? (_openBlock(), _createBlock(_component_CloudSaveStatus, {\n key: 0,\n saving: _ctx.saving,\n hadError: _ctx.savingError,\n class: \"mt-1 mr-6\"\n }, null, 8, [\"saving\", \"hadError\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.modelValue.state === _ctx.PollNodeState.DRAFT)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createElementVNode(\"p\", _hoisted_5, _toDisplayString(_ctx.$t(\"course_tree.draft\")), 1),\n _createVNode(_component_Btn, {\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.onPublish()))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"course_tree.publish_poll\")), 1)\n ]),\n _: 1\n })\n ]))\n : _createCommentVNode(\"\", true),\n (!_ctx.autoSave)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _createVNode(_component_Btn, {\n disabled: _ctx.blockingSaving,\n outline: _ctx.modelValue.state === _ctx.PollNodeState.DRAFT,\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.onSave()))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.modelValue.state === _ctx.PollNodeState.DRAFT\n\t\t\t\t\t\t\t? _ctx.$t(\"course_tree.save_draft\")\n\t\t\t\t\t\t\t: _ctx.$t(\"course_tree.save\")), 1)\n ]),\n _: 1\n }, 8, [\"disabled\", \"outline\"])\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_7, [\n _createElementVNode(\"div\", _hoisted_8, [\n _createVNode(_component_Dropdown, {\n loading: _ctx.loadingTopics,\n options: _ctx.topicsAsOptions,\n modelValue: _ctx.modelValue.parent_id,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => (_ctx.onParentChange($event)))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"course_tree.topic_label\")), 1)\n ]),\n _: 1\n }, 8, [\"loading\", \"options\", \"modelValue\"])\n ])\n ]),\n _createElementVNode(\"div\", null, [\n _createVNode(_component_TextEditor, {\n modelValue: _ctx.modelValue.text,\n fixedLabel: true,\n onBlur: _cache[4] || (_cache[4] = ($event: any) => (_ctx.onBlur())),\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = ($event: any) => (_ctx.onNodeChange('text', $event)))\n }, _createSlots({\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"course_tree.poll_text\")) + \" \", 1)\n ]),\n _: 2\n }, [\n (_ctx.v$.modelValue.text.$errors.length > 0)\n ? {\n name: \"errors\",\n fn: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.v$.modelValue.text.$errors, (error) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"input-errors\",\n key: error.$uid\n }, [\n _createElementVNode(\"div\", _hoisted_9, _toDisplayString(_ctx.$t(\"validation_errors.course_tree.poll.\" + error.$uid)), 1)\n ]))\n }), 128))\n ]),\n key: \"0\"\n }\n : undefined\n ]), 1032, [\"modelValue\"])\n ]),\n _createElementVNode(\"div\", _hoisted_10, [\n _createElementVNode(\"h3\", _hoisted_11, _toDisplayString(_ctx.$t(\"course_tree.poll_choices\")), 1),\n _createElementVNode(\"div\", _hoisted_12, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.modelValue.choices, (choice) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: choice.id,\n class: _normalizeClass([\"flex items-center space-x-1 my-0.5 group transition-colors duration-100 ease-in-out rounded-sm\", { 'hover:bg-light': _ctx.editingChoice?.id !== choice.id }])\n }, [\n _hoisted_13,\n (_ctx.editingChoice?.id !== choice.id)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_14, [\n _createElementVNode(\"p\", _hoisted_15, _toDisplayString(choice.text), 1),\n _createVNode(_component_Btn, {\n class: \"opacity-0 group-hover:opacity-80 duration-100 transition-opacity ease-in-out\",\n onClick: ($event: any) => (_ctx.onEditChoice(choice)),\n variant: 'icon',\n outline: true\n }, {\n default: _withCtx(() => [\n _hoisted_16\n ]),\n _: 2\n }, 1032, [\"onClick\"]),\n (_ctx.modelValue.choices.length > 1)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 0,\n class: \"opacity-0 group-hover:opacity-80 duration-100 transition-opacity ease-in-out\",\n onClick: ($event: any) => (_ctx.onDeleteChoice(choice)),\n variant: 'icon',\n outline: true\n }, {\n default: _withCtx(() => [\n _hoisted_17\n ]),\n _: 2\n }, 1032, [\"onClick\"]))\n : _createCommentVNode(\"\", true)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_18, [\n _createVNode(_component_TextInput, {\n onKeyup: _withKeys(_ctx.onSaveChoice, [\"enter\"]),\n class: \"w-full\",\n modelValue: _ctx.editingChoice.text,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = ($event: any) => ((_ctx.editingChoice.text) = $event))\n }, null, 8, [\"onKeyup\", \"modelValue\"]),\n _createVNode(_component_Btn, {\n disabled: _ctx.editingChoice.text.trim().length === 0,\n onClick: _ctx.onSaveChoice,\n variant: 'icon',\n outline: true\n }, {\n default: _withCtx(() => [\n _hoisted_19\n ]),\n _: 1\n }, 8, [\"disabled\", \"onClick\"]),\n _createVNode(_component_Btn, {\n onClick: _ctx.onDiscardChoice,\n variant: 'icon',\n outline: true\n }, {\n default: _withCtx(() => [\n _hoisted_20\n ]),\n _: 1\n }, 8, [\"onClick\"])\n ]))\n ], 2))\n }), 128)),\n (_ctx.editingChoice?.id === '')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_21, [\n _hoisted_22,\n _createVNode(_component_TextInput, {\n class: \"w-full\",\n onKeyup: _withKeys(_ctx.onSaveChoice, [\"enter\"]),\n modelValue: _ctx.editingChoice.text,\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = ($event: any) => ((_ctx.editingChoice.text) = $event)),\n placeholder: _ctx.$t('course_tree.poll_choice_text')\n }, null, 8, [\"onKeyup\", \"modelValue\", \"placeholder\"]),\n _createVNode(_component_Btn, {\n disabled: _ctx.editingChoice.text.trim().length === 0,\n onClick: _ctx.onSaveChoice,\n variant: 'icon',\n outline: true,\n class: \"my-auto\"\n }, {\n default: _withCtx(() => [\n _hoisted_23\n ]),\n _: 1\n }, 8, [\"disabled\", \"onClick\"]),\n _createVNode(_component_Btn, {\n class: \"my-auto\",\n onClick: _ctx.onDiscardChoice,\n variant: 'icon',\n outline: true\n }, {\n default: _withCtx(() => [\n _hoisted_24\n ]),\n _: 1\n }, 8, [\"onClick\"])\n ]))\n : (_openBlock(), _createBlock(_component_Btn, {\n key: 1,\n class: \"mt-4 w-max\",\n variant: 'secondary',\n size: 'sm',\n onClick: _cache[8] || (_cache[8] = ($event: any) => (_ctx.onCreateChoice()))\n }, {\n default: _withCtx(() => [\n _hoisted_25,\n _createTextVNode(_toDisplayString(_ctx.$t(\"course_tree.new_poll_choice\")), 1)\n ]),\n _: 1\n }))\n ])\n ]),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.v$.modelValue.choices.$errors, (error) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"input-errors\",\n key: error.$uid\n }, [\n _createElementVNode(\"div\", _hoisted_26, _toDisplayString(_ctx.$t(\"validation_errors.course_tree.poll.\" + error.$uid)), 1)\n ]))\n }), 128))\n ]))\n}","\nimport { getCourseTopicNodes } from \"@/api\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport CloudSaveStatus from \"@/components/ui/CloudSaveStatus.vue\";\nimport Dropdown from \"@/components/ui/Dropdown.vue\";\nimport TextEditor from \"@/components/ui/TextEditor.vue\";\nimport TextInput from \"@/components/ui/TextInput.vue\";\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport { SelectableOption } from \"@/interfaces\";\nimport { courseIdMixin, savingMixin } from \"@/mixins\";\nimport {\n\tCourseTreeNodeType,\n\tFileNode as IFileNode,\n\tgetBlankFileNode,\n\tgetBlankPollNodeChoice,\n\tPollNode,\n\tPollNodeChoice,\n\tPollNodeState,\n\tTopicNode,\n} from \"@/models\";\nimport { useMainStore } from \"@/stores/mainStore\";\nimport { useMetaStore } from \"@/stores/metaStore\";\nimport { setErrorNotification } from \"@/utils\";\nimport { pollNodeValidation } from \"@/validation/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport useVuelidate from \"@vuelidate/core\";\nimport { mapStores } from \"pinia\";\nimport { nodeEditorProps } from \"../shared\";\nexport default defineComponent({\n\tname: \"PollNodeEditor\",\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\t...nodeEditorProps,\n\t},\n\tmixins: [courseIdMixin, savingMixin],\n\tvalidations() {\n\t\treturn {\n\t\t\tmodelValue: pollNodeValidation,\n\t\t};\n\t},\n\tsetup() {\n\t\tconst v = useVuelidate();\n\t\treturn { v$: v };\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tPollNodeState,\n\t\t\tcreatingAttachment: false,\n\t\t\ttopics: [] as TopicNode[],\n\t\t\tloadingTopics: false,\n\t\t\tloadingChildren: false,\n\t\t\teditingChoice: null as null | PollNodeChoice,\n\t\t\teditingChoiceText: \"\",\n\t\t\tsavingChoice: false,\n\t\t};\n\t},\n\tasync created() {\n\t\tawait this.mainStore.getCourseRootId({ courseId: this.courseId });\n\t\tawait Promise.all([\n\t\t\t(async () => {\n\t\t\t\tthis.loadingChildren = true;\n\t\t\t\ttry {\n\t\t\t\t\tawait this.mainStore.getCourseTreeNodeChildren({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\tnodeId: this.modelValue.id,\n\t\t\t\t\t\tfromFirstPage: true,\n\t\t\t\t\t});\n\t\t\t\t} catch (e) {\n\t\t\t\t\tsetErrorNotification(e);\n\t\t\t\t} finally {\n\t\t\t\t\tthis.loadingChildren = false;\n\t\t\t\t}\n\t\t\t})(),\n\t\t\t(async () => {\n\t\t\t\tthis.loadingTopics = true;\n\t\t\t\ttry {\n\t\t\t\t\tthis.topics = await getCourseTopicNodes(this.courseId);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tsetErrorNotification(e);\n\t\t\t\t} finally {\n\t\t\t\t\tthis.loadingTopics = false;\n\t\t\t\t}\n\t\t\t})(),\n\t\t]);\n\t},\n\tmethods: {\n\t\t// actions on choices\n\t\tonCreateChoice() {\n\t\t\tthis.editingChoice = getBlankPollNodeChoice();\n\t\t},\n\t\tonEditChoice(choice: PollNodeChoice) {\n\t\t\tthis.editingChoice = JSON.parse(JSON.stringify(choice));\n\t\t},\n\t\tasync onSaveChoice() {\n\t\t\tif (!this.editingChoice) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"attempting to save editingChoice, which is \" + this.editingChoice,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (this.editingChoice.text.trim().length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tthis.savingChoice = false;\n\t\t\t\tif (!this.editingChoice.id) {\n\t\t\t\t\tconsole.log(\"Creating\", this.editingChoice);\n\t\t\t\t\tawait this.mainStore.createPollNodeChoice({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\tnodeId: this.modelValue.id,\n\t\t\t\t\t\tchoice: this.editingChoice,\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tawait this.mainStore.partialUpdatePollNodeChoice({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\tnodeId: this.modelValue.id,\n\t\t\t\t\t\tchoiceId: this.editingChoice.id,\n\t\t\t\t\t\tchanges: this.editingChoice,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tthis.editingChoice = null;\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t} finally {\n\t\t\t\tthis.savingChoice = false;\n\t\t\t}\n\t\t},\n\t\tonDiscardChoice() {\n\t\t\tthis.editingChoice = null;\n\t\t},\n\t\tasync onDeleteChoice(choice: PollNodeChoice) {\n\t\t\tif (!confirm(_(\"course_tree.confirm_delete_poll_choice\"))) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait this.mainStore.deletePollNodeChoice({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\tnodeId: this.modelValue.id,\n\t\t\t\tchoiceId: choice.id,\n\t\t\t});\n\t\t},\n\t\t/** TODO this behavior is all shared with other editors, extract */\n\t\tasync onNodeChange(key: any, value: any, save = false) {\n\t\t\tthis.$emit(\"patchNode\", { key, value, save });\n\t\t},\n\t\tonSave() {\n\t\t\tif (this.modelValue.state !== PollNodeState.DRAFT && this.v$.$invalid) {\n\t\t\t\tthis.v$.$touch();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.$emit(\"save\");\n\t\t},\n\t\tonBlur() {\n\t\t\tthis.$emit(\"blur\");\n\t\t},\n\t\tasync onParentChange(parentId: string) {\n\t\t\tawait this.onNodeChange(\"parent_id\", parentId);\n\t\t},\n\t\tasync onPublish() {\n\t\t\tthis.v$.$touch();\n\t\t\tif (this.v$.$errors.length === 0) {\n\t\t\t\tthis.$emit(\"updateState\", {\n\t\t\t\t\tnewState: PollNodeState.OPEN,\n\t\t\t\t\tparams: {},\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t/** end shared behavior */\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore, useMetaStore),\n\t\t// TODO refactor, duplicated with CourseTree\n\t\ttopicsAsOptions(): SelectableOption[] {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tvalue: this.mainStore.courseIdToTreeRootId[this.courseId],\n\t\t\t\t\tcontent: _(\"course_tree.no_topic\"),\n\t\t\t\t},\n\t\t\t\t...this.topics.map(t => ({\n\t\t\t\t\tvalue: t.id,\n\t\t\t\t\tcontent: t.name,\n\t\t\t\t})),\n\t\t\t];\n\t\t},\n\t\tfileChildren(): IFileNode[] {\n\t\t\treturn (\n\t\t\t\tthis.mainStore.paginatedChildrenByNodeId[this.modelValue.id]?.data ?? []\n\t\t\t).filter(c => c.resourcetype === CourseTreeNodeType.FileNode) as IFileNode[];\n\t\t},\n\t\t// attachmentProxy: {\n\t\t// \tget() {\n\t\t// \t\treturn [];\n\t\t// \t},\n\t\t// \tasync set(val: any) {\n\t\t// \t\tawait this.onCreateAttachment(val);\n\t\t// \t},\n\t\t// },\n\t},\n\tcomponents: {\n\t\t//TextInput,\n\t\tTextEditor,\n\t\tCloudSaveStatus,\n\t\tBtn,\n\t\tDropdown,\n\t\tTextInput,\n\t},\n});\n","import { render } from \"./PollNodeEditor.vue?vue&type=template&id=5e8c43bc&ts=true\"\nimport script from \"./PollNodeEditor.vue?vue&type=script&lang=ts\"\nexport * from \"./PollNodeEditor.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex w-full items-center mb-12\" }\nconst _hoisted_2 = { class: \"mb-0 ml-2 mr-auto\" }\nconst _hoisted_3 = { class: \"flex w-full mt-4\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_TextInput = _resolveComponent(\"TextInput\")!\n\n return (_openBlock(), _createElementBlock(\"div\", null, [\n _createElementVNode(\"div\", _hoisted_1, [\n _createVNode(_component_Btn, {\n variant: 'icon',\n outline: true,\n class: \"-ml-2\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n class: \"material-icons-outlined\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('closeEditor')))\n }, \" close\")\n ]),\n _: 1\n }),\n _createElementVNode(\"h1\", _hoisted_2, _toDisplayString(_ctx.isExistingNode\n\t\t\t\t\t\t? _ctx.$t(\"course_tree.update_topic_title\")\n\t\t\t\t\t\t: _ctx.$t(\"course_tree.new_topic_title\")), 1)\n ]),\n _createElementVNode(\"div\", null, [\n _createVNode(_component_TextInput, {\n modelValue: _ctx.modelValue.name,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => (_ctx.onNodeChange('name', $event, false)))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"course_tree.topic_node_name\")), 1)\n ]),\n _: 1\n }, 8, [\"modelValue\"])\n ]),\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_Btn, {\n disabled: _ctx.blockingSaving || _ctx.modelValue.name.trim().length === 0,\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.onSave())),\n variant: 'primary-borderless',\n class: \"ml-auto\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.blockingSaving\n\t\t\t\t\t\t? _ctx.$t(\"misc.wait\")\n\t\t\t\t\t\t: _ctx.isExistingNode\n\t\t\t\t\t\t? _ctx.$t(\"course_tree.save\")\n\t\t\t\t\t\t: _ctx.$t(\"course_tree.create\")), 1)\n ]),\n _: 1\n }, 8, [\"disabled\"]),\n _createVNode(_component_Btn, {\n disabled: _ctx.blockingSaving,\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.$emit('closeEditor'))),\n variant: 'primary-borderless',\n class: \"-mr-6\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"dialog.default_cancel_text\")), 1)\n ]),\n _: 1\n }, 8, [\"disabled\"])\n ])\n ]))\n}","\nimport Btn from \"@/components/ui/Btn.vue\";\nimport TextInput from \"@/components/ui/TextInput.vue\";\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport { courseIdMixin, savingMixin } from \"@/mixins\";\nimport { CourseTreeNode, TopicNode } from \"@/models\";\nimport { useMainStore } from \"@/stores/mainStore\";\nimport { useMetaStore } from \"@/stores/metaStore\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport { mapStores } from \"pinia\";\nimport { nodeEditorEmits, nodeEditorProps } from \"../shared\";\nexport default defineComponent({\n\tname: \"TopicNodeEditor\",\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\t...nodeEditorProps,\n\t},\n\temits: {\n\t\t...nodeEditorEmits,\n\t},\n\tmixins: [courseIdMixin, savingMixin],\n\tdata() {\n\t\treturn {};\n\t},\n\tasync created() {\n\t\tawait this.mainStore.getCourseRootId({ courseId: this.courseId });\n\t},\n\tmethods: {\n\t\tonNodeChange(\n\t\t\tkey: any, //K,\n\t\t\tvalue: any, //CourseTreeNode[K],\n\t\t\tsave = false,\n\t\t) {\n\t\t\t// TODO extract shared behavior (mixin?)\n\t\t\tthis.$emit(\"patchNode\", { key, value, save });\n\t\t},\n\t\tonSave() {\n\t\t\tthis.$emit(\"save\");\n\t\t},\n\t\tonBlur() {\n\t\t\tthis.$emit(\"blur\");\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore, useMetaStore),\n\t},\n\tcomponents: {\n\t\tTextInput,\n\t\tBtn,\n\t},\n});\n","import { render } from \"./TopicNodeEditor.vue?vue&type=template&id=3f4457c6&ts=true\"\nimport script from \"./TopicNodeEditor.vue?vue&type=script&lang=ts\"\nexport * from \"./TopicNodeEditor.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { CourseTreeNode, CourseTreeNodeType } from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport { nodeEditorEmits, nodeEditorProps } from \"../shared\";\nimport AnnouncementNodeEditor from \"./AnnouncementNodeEditor.vue\";\nimport FileNodeEditor from \"./FileNodeEditor.vue\";\nimport LessonNodeEditor from \"./LessonNodeEditor.vue\";\nimport PollNodeEditor from \"./PollNodeEditor.vue\";\nimport TopicNodeEditor from \"./TopicNodeEditor.vue\";\nexport default defineComponent({\n\tname: \"CourseTreeNodeEditor\",\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\t...nodeEditorProps,\n\t},\n\temits: { ...nodeEditorEmits },\n\tmethods: {},\n\tcomputed: {\n\t\teditorComponentName() {\n\t\t\tconst resourceTypeToEditorMapping: Record = {\n\t\t\t\t[CourseTreeNodeType.FileNode]: \"FileNodeEditor\",\n\t\t\t\t[CourseTreeNodeType.LessonNode]: \"LessonNodeEditor\",\n\t\t\t\t[CourseTreeNodeType.TopicNode]: \"TopicNodeEditor\",\n\t\t\t\t[CourseTreeNodeType.PollNode]: \"PollNodeEditor\",\n\t\t\t\t[CourseTreeNodeType.AnnouncementNode]: \"AnnouncementNodeEditor\",\n\t\t\t};\n\t\t\treturn resourceTypeToEditorMapping[this.modelValue.resourcetype];\n\t\t},\n\t},\n\tcomponents: {\n\t\tFileNodeEditor,\n\t\tLessonNodeEditor,\n\t\tTopicNodeEditor,\n\t\tAnnouncementNodeEditor,\n\t\tPollNodeEditor,\n\t},\n});\n","import { render } from \"./CourseTreeNodeEditor.vue?vue&type=template&id=307c96c2&ts=true\"\nimport script from \"./CourseTreeNodeEditor.vue?vue&type=script&lang=ts\"\nexport * from \"./CourseTreeNodeEditor.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport draggable from \"vuedraggable\";\n\nimport CourseTreeNode from \"@/components/course_tree/node/CourseTreeNode.vue\";\nimport { SelectableOption } from \"@/interfaces\";\nimport {\n\tblockingDialogMixin,\n\tcourseIdMixin,\n\tcoursePrivilegeMixin,\n\tloadingMixin,\n\tsavingMixin,\n} from \"@/mixins\";\nimport {\n\tAnnouncementNodeState,\n\tCoursePrivilege,\n\tCourseTreeNode as ICourseTreeNode,\n\tCourseTreeNodeType,\n\tFileNode,\n\tgetBlankAnnouncementNode,\n\tgetBlankFileNode,\n\tgetBlankLessonNode,\n\tgetBlankPollNode,\n\tgetBlankTopicNode,\n\tLessonNodeState,\n\tPollNodeState,\n\tTopicNode,\n} from \"@/models\";\nimport { useMainStore } from \"@/stores/mainStore\";\nimport { useMetaStore } from \"@/stores/metaStore\";\nimport { defineComponent } from \"@vue/runtime-core\";\nimport { mapStores } from \"pinia\";\nimport { icons as courseTreeNodeTypeIcons } from \"@/assets/courseTreeNodeTypeIcons\";\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport Dialog from \"@/components/ui/Dialog.vue\";\nimport { setErrorNotification, setPageWideError } from \"@/utils\";\nimport CourseTreeNodeEditor from \"@/components/course_tree/editors/CourseTreeNodeEditor.vue\";\nimport { getCourseTopicNodes } from \"@/api\";\nimport DropdownMenu from \"@/components/ui/DropdownMenu.vue\";\nimport { AutoSaveManager, FieldList } from \"@/autoSave\";\nimport VueEternalLoading from \"@ts-pro/vue-eternal-loading/src/components/VueEternalLoading/VueEternalLoading.vue\";\nimport { LoadAction } from \"@ts-pro/vue-eternal-loading\";\nimport Spinner from \"@/components/ui/Spinner.vue\";\nimport {\n\tNodeEditorStateUpdatePayload,\n\tonChangeNodePosition,\n} from \"@/components/course_tree/shared\";\n\nexport default defineComponent({\n\tname: \"CourseTree\",\n\tprops: {},\n\tmixins: [\n\t\tcourseIdMixin,\n\t\tloadingMixin,\n\t\tblockingDialogMixin,\n\t\tsavingMixin,\n\t\tcoursePrivilegeMixin,\n\t],\n\tbeforeUnmount() {\n\t\twindow.removeEventListener(\"beforeunload\", this.beforeWindowUnload);\n\t},\n\tasync created() {\n\t\twindow.addEventListener(\"beforeunload\", this.beforeWindowUnload);\n\t\tawait this.withLoading(\n\t\t\tasync () =>\n\t\t\t\tawait this.mainStore.getCourseTopLevelNodes({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\tfromFirstPage: true,\n\t\t\t\t}),\n\t\t\tsetPageWideError,\n\t\t);\n\t\tawait this.mainStore.getCourseRootId({ courseId: this.courseId });\n\t\tthis.topics = await getCourseTopicNodes(this.courseId);\n\t\tthis.selectedTopicId = this.mainStore.courseIdToTreeRootId[this.courseId];\n\t},\n\twatch: {\n\t\t\"editingNode.id\"(newVal) {\n\t\t\t// re-instantiate (or dispose of) auto save manager each time\n\t\t\t// a new node is edited (or no node is edited anymore)\n\t\t\tif (newVal) {\n\t\t\t\tthis.instantiateAutoSaveManager(this.editingNode as ICourseTreeNode);\n\t\t\t} else {\n\t\t\t\tthis.editingNodeAutoSaveManager = null;\n\t\t\t}\n\t\t\tthis.editingNodeUnsavedChanges = {};\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tCourseTreeNodeType,\n\t\t\tcreateMenuExpanded: false,\n\t\t\tshowEditorDialog: false,\n\t\t\teditingNode: null as null | ICourseTreeNode,\n\t\t\teditingNodeAutoSaveManager: null as null | AutoSaveManager,\n\t\t\teditingNodeUnsavedChanges: {},\n\t\t\tautoSaveEditingNode: true,\n\t\t\tuploadingFile: false,\n\t\t\teditingTopicName: \"\",\n\t\t\tselectedTopicId: \"\",\n\t\t\ttopics: [] as TopicNode[],\n\t\t\tdraggingNode: false,\n\t\t\tsaving: false,\n\t\t\tsavingError: false,\n\t\t\tblockingSaving: false,\n\t\t\tdraftFileNode: null as null | FileNode,\n\t\t\tfileUploadProgress: undefined as undefined | number,\n\t\t\tisInitialInfiniteLoad: false,\n\t\t};\n\t},\n\tmethods: {\n\t\tbeforeWindowUnload(e: { preventDefault: () => void; returnValue: string }) {\n\t\t\tif (\n\t\t\t\tObject.keys(this.editingNodeUnsavedChanges).length > 0 &&\n\t\t\t\t!confirm(_(\"course_tree.editor_discard_unsaved_changes\"))\n\t\t\t) {\n\t\t\t\t// Cancel the event\n\t\t\t\te.preventDefault();\n\t\t\t\t// Chrome requires returnValue to be set\n\t\t\t\te.returnValue = \"\";\n\t\t\t}\n\t\t},\n\t\tasync onLoadMore({ loaded, noMore, error }: LoadAction) {\n\t\t\ttry {\n\t\t\t\tconst moreResults = await this.mainStore.getCourseTopLevelNodes({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\tfromFirstPage: false,\n\t\t\t\t});\n\t\t\t\tif (!moreResults) {\n\t\t\t\t\tnoMore();\n\t\t\t\t} else {\n\t\t\t\t\tloaded();\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\terror();\n\t\t\t}\n\t\t},\n\t\tasync onNodeDragStart() {\n\t\t\tthis.mainStore.draggingCourseTreeNode = true;\n\t\t},\n\t\tasync onNodeDragEnd(event: { oldIndex: number; newIndex: number }) {\n\t\t\tthis.mainStore.draggingCourseTreeNode = false;\n\t\t\ttry {\n\t\t\t\tawait onChangeNodePosition(\n\t\t\t\t\tthis.courseId,\n\t\t\t\t\tthis.topLevelNodes,\n\t\t\t\t\tevent.oldIndex,\n\t\t\t\t\tevent.newIndex,\n\t\t\t\t);\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t}\n\t\t},\n\t\tasync onEditorBlur() {\n\t\t\tthis.editingNodeAutoSaveManager?.flush();\n\t\t},\n\t\tonDismissNodeEditor() {\n\t\t\tif (\n\t\t\t\tObject.keys(this.editingNodeUnsavedChanges).length > 0 &&\n\t\t\t\t!confirm(_(\"course_tree.editor_discard_unsaved_changes\"))\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.showEditorDialog = false;\n\t\t\tthis.editingNode = null;\n\t\t\tthis.editingNodeUnsavedChanges = {};\n\t\t},\n\t\t// TODO extract shared logic with NodeDetail\n\t\tinstantiateAutoSaveManager(node: ICourseTreeNode) {\n\t\t\tthis.editingNodeAutoSaveManager = new AutoSaveManager(\n\t\t\t\tnode,\n\t\t\t\tasync changes => {\n\t\t\t\t\tawait this.mainStore.partialUpdateCourseTreeNode({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\tnodeId: node.id,\n\t\t\t\t\t\tchanges,\n\t\t\t\t\t});\n\t\t\t\t\tthis.saving = false;\n\t\t\t\t},\n\t\t\t\tchanges => {\n\t\t\t\t\tthis.saving = true;\n\t\t\t\t\tthis.savingError = false;\n\t\t\t\t\tthis.mainStore.patchCourseTreeNode({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\tnodeId: node.id,\n\t\t\t\t\t\tchanges,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tthis.editingNodeDebouncedFields as FieldList,\n\t\t\t\t2500,\n\t\t\t\tundefined,\n\t\t\t\te => {\n\t\t\t\t\tthis.saving = false;\n\t\t\t\t\tthis.savingError = true;\n\t\t\t\t\tthrow e;\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t\tasync onEditingNodeStateUpdate({ newState, params }: NodeEditorStateUpdatePayload) {\n\t\t\tif (!this.editingNode) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Called onEditingNodeStateUpdate with this.editingNode is \" + this.editingNode,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.blockingSaving = true;\n\t\t\tif (!this.editingNode.id) {\n\t\t\t\t// if the node hasn't been created yet, we just create it\n\t\t\t\t// with the supplied state value\n\t\t\t\tconst oldState =\n\t\t\t\t\tthis.proxyEditingNode && \"state\" in this.proxyEditingNode\n\t\t\t\t\t\t? this.proxyEditingNode.state\n\t\t\t\t\t\t: null;\n\t\t\t\tthis.editingNodeUnsavedChanges[\"state\"] = newState;\n\t\t\t\ttry {\n\t\t\t\t\tawait this.createNodeFromUnsavedChanges();\n\t\t\t\t\tthis.onDismissNodeEditor();\n\t\t\t\t\tthis.metaStore.showSuccessFeedback();\n\t\t\t\t} catch (e) {\n\t\t\t\t\tsetErrorNotification(e);\n\t\t\t\t\tthis.editingNodeUnsavedChanges[\"state\"] = oldState;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// otherwise, we first save the changes to the server and, if the rmeote update\n\t\t\t\t// is successful, we patch the local node too. if the node is being autosaved,\n\t\t\t\t// we first flush the autosave manager, then the only change we need to sync is\n\t\t\t\t// the new value for the state; otherwise, we patch the node with all unsaved\n\t\t\t\t// changes plus the new state\n\t\t\t\tconst changes = {\n\t\t\t\t\tstate: newState,\n\t\t\t\t\t...(this.autoSaveEditingNode ? {} : this.editingNodeUnsavedChanges),\n\t\t\t\t};\n\t\t\t\ttry {\n\t\t\t\t\t// flush any pending changes first\n\t\t\t\t\tawait this.editingNodeAutoSaveManager?.flush();\n\t\t\t\t\tawait this.mainStore.partialUpdateCourseTreeNode({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\tnodeId: this.editingNode.id,\n\t\t\t\t\t\tchanges,\n\t\t\t\t\t\tfireIntegrationEvent: params.fireIntegrationEvent,\n\t\t\t\t\t});\n\t\t\t\t\tthis.mainStore.patchCourseTreeNode({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\tnodeId: this.editingNode.id,\n\t\t\t\t\t\tchanges,\n\t\t\t\t\t});\n\t\t\t\t\tthis.editingNodeUnsavedChanges = {};\n\t\t\t\t\tthis.onDismissNodeEditor();\n\t\t\t\t\tthis.metaStore.showSuccessFeedback();\n\t\t\t\t} catch (e) {\n\t\t\t\t\tsetErrorNotification(e);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.blockingSaving = false;\n\t\t},\n\t\tasync onEditingNodeChange(\n\t\t\tkey: K,\n\t\t\tvalue: ICourseTreeNode[K],\n\t\t\tsave: boolean,\n\t\t) {\n\t\t\tif (this.autoSaveEditingNode) {\n\t\t\t\tawait this.editingNodeAutoSaveManager?.onChange({ [key]: value });\n\t\t\t} else {\n\t\t\t\t// update local copy of unsaved changes\n\t\t\t\tthis.editingNodeUnsavedChanges = {\n\t\t\t\t\t...this.editingNodeUnsavedChanges,\n\t\t\t\t\t[key]: value,\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (save) {\n\t\t\t\tawait this.onEditingNodeSave();\n\t\t\t}\n\t\t},\n\t\tasync createNodeFromUnsavedChanges() {\n\t\t\t// used if creating a FileNode to keep track of upload progress for the file\n\t\t\tconst onUploadProgress = (e: { loaded: number; total: number }) => {\n\t\t\t\tthis.fileUploadProgress = (e.loaded / e.total) * 100;\n\t\t\t\t// make loader indeterminate after upload completes for\n\t\t\t\t//better visual feedback to the user\n\t\t\t\tif (this.fileUploadProgress === 100) {\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis.fileUploadProgress = undefined;\n\t\t\t\t\t}, 100);\n\t\t\t\t}\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tthis.blockingSaving = true;\n\t\t\t\tawait this.mainStore.createCourseTreeNode({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\tnode: this.proxyEditingNode as ICourseTreeNode,\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tonUploadProgress,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\tthis.editingNodeUnsavedChanges = {};\n\t\t\t\tthis.onDismissNodeEditor();\n\t\t\t\tthis.metaStore.showSuccessFeedback();\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t} finally {\n\t\t\t\tthis.blockingSaving = false;\n\t\t\t\tthis.fileUploadProgress = 0;\n\t\t\t}\n\t\t},\n\t\tasync updateNodeFromUnsavedChanges() {\n\t\t\ttry {\n\t\t\t\tthis.blockingSaving = true;\n\t\t\t\tawait this.editingNodeAutoSaveManager?.onChange(this.editingNodeUnsavedChanges);\n\t\t\t\tawait this.editingNodeAutoSaveManager?.flush();\n\t\t\t\tthis.editingNodeUnsavedChanges = {};\n\t\t\t\tthis.onDismissNodeEditor();\n\t\t\t\tthis.metaStore.showSuccessFeedback();\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t\tthrow e;\n\t\t\t} finally {\n\t\t\t\tthis.blockingSaving = false;\n\t\t\t}\n\t\t},\n\t\tasync onEditingNodeSave() {\n\t\t\t/**\n\t\t\t * Generic utility function that saves changes to a node. This is used\n\t\t\t * under a few different circumstances:\n\t\t\t *\n\t\t\t * - when the node exists & autosave is on: this just closes the editor\n\t\t\t * dialog and show a feedback, without any actual saving operation\n\t\t\t * - when the node exists & autosave is off: this saves all unsaved\n\t\t\t * changes to the node, closes the editor, and shows a feedback\n\t\t\t * - when the node doesn't exist yet: this creates the node, saving\n\t\t\t * all unsaved changes to it\n\t\t\t */\n\t\t\tif (!this.editingNode) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"onEditingNodeSave called but editingNode is \" + this.editingNode,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (!this.editingNode.id) {\n\t\t\t\t/**\n\t\t\t\t * Create node\n\t\t\t\t * */\n\t\t\t\tawait this.createNodeFromUnsavedChanges();\n\t\t\t} else if (!this.autoSaveEditingNode) {\n\t\t\t\t/**\n\t\t\t\t * Save changes to existing node\n\t\t\t\t */\n\t\t\t\tawait this.updateNodeFromUnsavedChanges();\n\t\t\t} else {\n\t\t\t\t/**\n\t\t\t\t * Autosave is on, so changes were already saved\n\t\t\t\t * flush any pending changes & close editor\n\t\t\t\t */\n\t\t\t\tawait this.editingNodeAutoSaveManager?.flush();\n\t\t\t\tthis.onDismissNodeEditor();\n\t\t\t\tthis.metaStore.showSuccessFeedback();\n\t\t\t}\n\t\t},\n\t\tonEditNode(node: ICourseTreeNode) {\n\t\t\tthis.autoSaveEditingNode = false;\n\t\t\tthis.editingNode = node;\n\t\t\tthis.showEditorDialog = true;\n\t\t},\n\t\tasync onDeleteNode(node: ICourseTreeNode) {\n\t\t\t// TODO extract duplicated code with other components\n\t\t\tif (!confirm(_(\"course_tree.delete_node_confirm\"))) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait this.withLoading(\n\t\t\t\tasync () =>\n\t\t\t\t\tawait this.mainStore.deleteCourseTreeNode({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\tnodeId: node.id,\n\t\t\t\t\t}),\n\t\t\t\tsetErrorNotification,\n\t\t\t);\n\t\t},\n\t\tasync onCreateNode(nodeType: CourseTreeNodeType) {\n\t\t\t// functions used to get a new node based on the given node type\n\t\t\tconst factories = {\n\t\t\t\t[CourseTreeNodeType.LessonNode]: getBlankLessonNode,\n\t\t\t\t[CourseTreeNodeType.AnnouncementNode]: getBlankAnnouncementNode,\n\t\t\t\t[CourseTreeNodeType.PollNode]: getBlankPollNode,\n\t\t\t\t[CourseTreeNodeType.TopicNode]: getBlankTopicNode,\n\t\t\t\t[CourseTreeNodeType.FileNode]: getBlankFileNode,\n\t\t\t};\n\t\t\tconst factory = factories[nodeType];\n\t\t\tconst newNode = factory(this.mainStore.courseIdToTreeRootId[this.courseId]);\n\n\t\t\t// these types of node are autosaved on the server when created, and require\n\t\t\t// different treatment upon creation\n\t\t\tconst autoSavedNodeTypes = [\n\t\t\t\tCourseTreeNodeType.LessonNode,\n\t\t\t\tCourseTreeNodeType.AnnouncementNode,\n\t\t\t\tCourseTreeNodeType.PollNode,\n\t\t\t];\n\t\t\t// set autosaving on or off depending on whether the type of node being\n\t\t\t// created requires it\n\t\t\tthis.autoSaveEditingNode = autoSavedNodeTypes.includes(nodeType);\n\n\t\t\t// for autosaved node types, create the node immediately and use that one\n\t\t\t// for editing\n\t\t\tif (this.autoSaveEditingNode) {\n\t\t\t\tawait this.withLoading(async () => {\n\t\t\t\t\tthis.editingNode = await this.mainStore.createCourseTreeNode({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\tnode: newNode,\n\t\t\t\t\t});\n\t\t\t\t}, setErrorNotification);\n\t\t\t} else {\n\t\t\t\t// otherwise, only save changes to local object\n\t\t\t\tthis.editingNode = newNode;\n\t\t\t}\n\t\t\tthis.showEditorDialog = true;\n\t\t},\n\t\tasync onLoadComments(node: ICourseTreeNode) {\n\t\t\tawait this.mainStore.getCourseTreeNodeComments({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\tnodeId: node.id,\n\t\t\t});\n\t\t},\n\t\tasync onLoadChildren(\n\t\t\tnode: ICourseTreeNode,\n\t\t\tfromFirstPage: boolean,\n\t\t\tresolveFn: (moreResults: boolean) => void,\n\t\t\trejectFn: (e: any) => void,\n\t\t) {\n\t\t\tconsole.log(\"course tree on load children\", fromFirstPage);\n\t\t\ttry {\n\t\t\t\tconst moreResults = await this.mainStore.getCourseTreeNodeChildren({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\tnodeId: node.id,\n\t\t\t\t\tfromFirstPage,\n\t\t\t\t});\n\t\t\t\tresolveFn(moreResults);\n\t\t\t} catch (e) {\n\t\t\t\trejectFn?.(e);\n\t\t\t}\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore, useMetaStore),\n\t\tproxyEditingNode() {\n\t\t\tif (this.autoSaveEditingNode) {\n\t\t\t\treturn this.editingNode;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t...this.editingNode,\n\t\t\t\t...this.editingNodeUnsavedChanges,\n\t\t\t} as ICourseTreeNode;\n\t\t},\n\t\tfullScreenDialog() {\n\t\t\treturn (\n\t\t\t\tthis.editingNode?.resourcetype !== CourseTreeNodeType.TopicNode &&\n\t\t\t\tthis.editingNode?.resourcetype !== CourseTreeNodeType.FileNode\n\t\t\t); //this.editingNode?.resourcetype === CourseTreeNodeType.LessonNode;\n\t\t},\n\t\tfullHeightDialog() {\n\t\t\treturn (\n\t\t\t\tthis.fullScreenDialog &&\n\t\t\t\tthis.editingNode?.resourcetype !== CourseTreeNodeType.FileNode\n\t\t\t); //this.editingNode?.resourcetype === CourseTreeNodeType.LessonNode;\n\t\t},\n\t\tlargeDialog() {\n\t\t\treturn (\n\t\t\t\t!this.fullScreenDialog &&\n\t\t\t\t// display a smaller dialog for topic editor, as it only includes a\n\t\t\t\t// single input field and feels less like an \"editor\"\n\t\t\t\tthis.editingNode?.resourcetype !== CourseTreeNodeType.TopicNode\n\t\t\t);\n\t\t},\n\t\teditorDialogLoading() {\n\t\t\treturn (\n\t\t\t\tthis.blockingSaving &&\n\t\t\t\t// don't display loader in dialog for file nodes, as their editor\n\t\t\t\t// already shows a loader on the file upload component\n\t\t\t\tthis.editingNode?.resourcetype !== CourseTreeNodeType.FileNode\n\t\t\t);\n\t\t},\n\t\tnodeTypesAsSelectableOptions(): SelectableOption[] {\n\t\t\treturn (Object.keys(CourseTreeNodeType) as any[]).map(key => ({\n\t\t\t\tcontent: _(\"course_tree_node_types.\" + key),\n\t\t\t\ticons: courseTreeNodeTypeIcons[key],\n\t\t\t\tvalue: key,\n\t\t\t}));\n\t\t},\n\t\ttopLevelNodes() {\n\t\t\treturn this.mainStore.paginatedTopLevelCourseTreeNodes?.data ?? [];\n\t\t},\n\t\tcanEditNodes() {\n\t\t\treturn this.hasPrivileges([CoursePrivilege.MANAGE_MATERIAL]);\n\t\t},\n\t\tcanCreateNodes() {\n\t\t\treturn this.hasPrivileges([CoursePrivilege.MANAGE_MATERIAL]);\n\t\t},\n\t\teditingNodeDebouncedFields() {\n\t\t\tif (!this.editingNode) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst debouncedFields: Record = {\n\t\t\t\tAnnouncementNode: [\"body\"],\n\t\t\t\tTopicNode: [\"name\"],\n\t\t\t\tFileNode: [],\n\t\t\t\tPollNode: [\"text\"],\n\t\t\t\tLessonNode: [\"body\", \"title\"],\n\t\t\t};\n\t\t\treturn debouncedFields[this.editingNode.resourcetype];\n\t\t},\n\t},\n\tcomponents: {\n\t\tdraggable,\n\t\tCourseTreeNode,\n\t\tDropdownMenu,\n\t\tDialog,\n\t\tVueEternalLoading,\n\t\tCourseTreeNodeEditor,\n\t\tSpinner,\n\t},\n});\n","import { render } from \"./CourseTree.vue?vue&type=template&id=1a44905c&ts=true\"\nimport script from \"./CourseTree.vue?vue&type=script&lang=ts\"\nexport * from \"./CourseTree.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveDynamicComponent as _resolveDynamicComponent, mergeProps as _mergeProps, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, createElementBlock as _createElementBlock, withCtx as _withCtx } from \"vue\"\n\nconst _hoisted_1 = { key: 1 }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_SlotSkeleton = _resolveComponent(\"SlotSkeleton\")!\n const _component_CourseTreeNodeEditor = _resolveComponent(\"CourseTreeNodeEditor\")!\n const _component_Dialog = _resolveComponent(\"Dialog\")!\n\n return (_openBlock(), _createElementBlock(\"div\", null, [\n (!_ctx.firstLoading)\n ? (_openBlock(), _createBlock(_resolveDynamicComponent(_ctx.componentName), _mergeProps({\n key: 0,\n onLoadChildren: _cache[0] || (_cache[0] = ($event: any) => (_ctx.onLoadChildren($event.node, $event.fromFirstPage))),\n onLoadComments: _cache[1] || (_cache[1] = ($event: any) => (_ctx.onLoadComments($event))),\n onEditNode: _cache[2] || (_cache[2] = ($event: any) => (_ctx.onEditNode())),\n onDeleteNode: _cache[3] || (_cache[3] = ($event: any) => (_ctx.onDeleteNode($event))),\n onViewerClose: _cache[4] || (_cache[4] = ($event: any) => (_ctx.onViewerClose())),\n children: _ctx.nodeChildren\n }, _ctx.passDownProps, {\n loadingComments: _ctx.loadingComments,\n loadingChildren: _ctx.loadingChildren,\n node: _ctx.node\n }), null, 16, [\"children\", \"loadingComments\", \"loadingChildren\", \"node\"]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_SlotSkeleton),\n _createVNode(_component_SlotSkeleton),\n _createVNode(_component_SlotSkeleton)\n ])),\n _createVNode(_component_Dialog, {\n fullHeight: _ctx.fullScreenDialog,\n large: !_ctx.fullScreenDialog,\n fullWidth: _ctx.fullScreenDialog,\n onNo: _cache[10] || (_cache[10] = ($event: any) => (_ctx.onDismissEditor())),\n showDialog: _ctx.editorOpen,\n showActions: false,\n dismissible: false,\n loading: _ctx.blockingSaving\n }, {\n body: _withCtx(() => [\n _createVNode(_component_CourseTreeNodeEditor, {\n isExistingNode: true,\n class: \"text-darkText\",\n saving: _ctx.saving,\n savingError: _ctx.savingError,\n blockingSaving: _ctx.blockingSaving,\n modelValue: _ctx.proxyEditingNode,\n showAutoSaveIndicator: false,\n onPatchNode: _cache[5] || (_cache[5] = ($event: any) => (_ctx.onEditingNodeChange($event.key, $event.value, !!$event.save))),\n onUpdateState: _cache[6] || (_cache[6] = ($event: any) => (_ctx.onStateUpdate($event))),\n onSave: _cache[7] || (_cache[7] = ($event: any) => (_ctx.onSave())),\n onCloseEditor: _cache[8] || (_cache[8] = ($event: any) => (_ctx.onDismissEditor())),\n onDeleteNode: _cache[9] || (_cache[9] = ($event: any) => (_ctx.onDeleteNode($event)))\n }, null, 8, [\"saving\", \"savingError\", \"blockingSaving\", \"modelValue\"])\n ]),\n _: 1\n }, 8, [\"fullHeight\", \"large\", \"fullWidth\", \"showDialog\", \"loading\"])\n ]))\n}","\nimport { AutoSaveManager, FieldList } from \"@/autoSave\";\nimport CourseTreeNodeEditor from \"@/components/course_tree/editors/CourseTreeNodeEditor.vue\";\nimport {\n\tNodeEditorStateUpdatePayload,\n\tnodeEmits,\n\tnodeProps,\n} from \"@/components/course_tree/shared\";\nimport Dialog from \"@/components/ui/Dialog.vue\";\nimport SlotSkeleton from \"@/components/ui/skeletons/SlotSkeleton.vue\";\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport { courseIdMixin, coursePrivilegeMixin, loadingMixin, nodeIdMixin } from \"@/mixins\";\nimport { CoursePrivilege, CourseTreeNode, CourseTreeNodeType } from \"@/models\";\nimport { useMainStore } from \"@/stores/mainStore\";\nimport { setErrorNotification } from \"@/utils\";\nimport { defineAsyncComponent, defineComponent, PropType } from \"@vue/runtime-core\";\nimport { mapStores } from \"pinia\";\n\nexport default defineComponent({\n\tname: \"CourseTreeNodeDetail\",\n\tprops: {\n\t\t//...nodeProps,\n\t},\n\temits: {\n\t\t...nodeEmits,\n\t},\n\tmixins: [nodeIdMixin, loadingMixin, courseIdMixin, coursePrivilegeMixin],\n\tbeforeCreate() {\n\t\t// dynamically import specialized components to prevent circular imports\n\t\t(this.$options.components as any).LessonNodeDetail = defineAsyncComponent(\n\t\t\t() => import(\"../../components/course_tree/node_detail/LessonNodeDetail.vue\"),\n\t\t);\n\t\t(this.$options.components as any).PollNodeDetail = defineAsyncComponent(\n\t\t\t() => import(\"../../components/course_tree/node_detail/PollNodeDetail.vue\"),\n\t\t);\n\t\t(this.$options.components as any).AnnouncementNodeDetail = defineAsyncComponent(\n\t\t\t() => import(\"../../components/course_tree/node_detail/AnnouncementNodeDetail.vue\"),\n\t\t);\n\t\t(this.$options.components as any).FileNodeDetail = defineAsyncComponent(\n\t\t\t() => import(\"../../components/course_tree/node_detail/FileNodeDetail.vue\"),\n\t\t);\n\t},\n\tbeforeUnmount() {\n\t\twindow.removeEventListener(\"beforeunload\", this.beforeWindowUnload);\n\t},\n\tasync created() {\n\t\twindow.addEventListener(\"beforeunload\", this.beforeWindowUnload);\n\t\tawait this.withFirstLoading(async () =>\n\t\t\tthis.mainStore.getCourseTreeNodeDetail({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\tnodeId: this.nodeId,\n\t\t\t}),\n\t\t);\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tloadingChildren: false,\n\t\t\tloadingComments: false,\n\t\t\tunsavedChanges: {},\n\t\t\tautoSaveManager: null as null | AutoSaveManager,\n\t\t\teditorOpen: false,\n\t\t\tsaving: false,\n\t\t\tsavingError: false,\n\t\t\tblockingSaving: false,\n\t\t};\n\t},\n\tmethods: {\n\t\tbeforeWindowUnload(e: { preventDefault: () => void; returnValue: string }) {\n\t\t\tif (\n\t\t\t\tObject.keys(this.unsavedChanges).length > 0 &&\n\t\t\t\t!confirm(_(\"course_tree.editor_discard_unsaved_changes\"))\n\t\t\t) {\n\t\t\t\t// Cancel the event\n\t\t\t\te.preventDefault();\n\t\t\t\t// Chrome requires returnValue to be set\n\t\t\t\te.returnValue = \"\";\n\t\t\t}\n\t\t},\n\t\tonViewerClose() {\n\t\t\tthis.$router.push({\n\t\t\t\tname: \"CourseTreeDispatcher\",\n\t\t\t\tparams: { courseId: this.courseId },\n\t\t\t});\n\t\t},\n\t\tasync onSave() {\n\t\t\ttry {\n\t\t\t\tthis.blockingSaving = true;\n\t\t\t\tawait this.autoSaveManager?.onChange(this.unsavedChanges);\n\t\t\t\tawait this.autoSaveManager?.flush();\n\t\t\t\tthis.unsavedChanges = {};\n\t\t\t\tthis.onDismissEditor();\n\t\t\t\tthis.metaStore.showSuccessFeedback();\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t} finally {\n\t\t\t\tthis.blockingSaving = false;\n\t\t\t}\n\t\t},\n\t\tasync onStateUpdate({ newState, params }: NodeEditorStateUpdatePayload) {\n\t\t\tconst changes = {\n\t\t\t\tstate: newState,\n\t\t\t\t...this.unsavedChanges,\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tthis.blockingSaving = true;\n\t\t\t\tawait this.mainStore.partialUpdateCourseTreeNode({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\tnodeId: this.node.id,\n\t\t\t\t\tchanges,\n\t\t\t\t\tfireIntegrationEvent: params.fireIntegrationEvent,\n\t\t\t\t});\n\t\t\t\tthis.mainStore.patchCourseTreeNode({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\tnodeId: this.node.id,\n\t\t\t\t\tchanges,\n\t\t\t\t});\n\t\t\t\tthis.unsavedChanges = {};\n\t\t\t\tthis.onDismissEditor();\n\t\t\t\tthis.metaStore.showSuccessFeedback();\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t} finally {\n\t\t\t\tthis.blockingSaving = false;\n\t\t\t}\n\t\t},\n\t\tinstantiateAutoSaveManager(node: CourseTreeNode) {\n\t\t\tthis.autoSaveManager = new AutoSaveManager(\n\t\t\t\tnode,\n\t\t\t\tasync changes => {\n\t\t\t\t\tawait this.mainStore.partialUpdateCourseTreeNode({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\tnodeId: node.id,\n\t\t\t\t\t\tchanges,\n\t\t\t\t\t});\n\t\t\t\t\tthis.saving = false;\n\t\t\t\t},\n\t\t\t\tchanges => {\n\t\t\t\t\tthis.saving = true;\n\t\t\t\t\tthis.savingError = false;\n\t\t\t\t\tthis.mainStore.patchCourseTreeNode({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\tnodeId: node.id,\n\t\t\t\t\t\tchanges,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tthis.editingNodeDebouncedFields as FieldList,\n\t\t\t\t2500,\n\t\t\t\tundefined,\n\t\t\t\te => {\n\t\t\t\t\tthis.saving = false;\n\t\t\t\t\tthis.savingError = true;\n\t\t\t\t\tthrow e;\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t\tasync onEditingNodeChange(\n\t\t\tkey: K,\n\t\t\tvalue: CourseTreeNode[K],\n\t\t\tsave: boolean,\n\t\t) {\n\t\t\t// update local copy of unsaved changes\n\t\t\tthis.unsavedChanges = {\n\t\t\t\t...this.unsavedChanges,\n\t\t\t\t[key]: value,\n\t\t\t};\n\t\t\tif (save) {\n\t\t\t\tawait this.onSave();\n\t\t\t}\n\t\t},\n\t\tonEditNode() {\n\t\t\tthis.unsavedChanges = {};\n\t\t\t// TODO passing this.node causes bug that we had in exercise children editor, fix\n\t\t\tthis.instantiateAutoSaveManager(this.node as CourseTreeNode);\n\t\t\tthis.editorOpen = true;\n\t\t},\n\t\tonDismissEditor() {\n\t\t\tif (\n\t\t\t\tObject.keys(this.unsavedChanges).length > 0 &&\n\t\t\t\t!confirm(_(\"course_tree.editor_discard_unsaved_changes\"))\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.editorOpen = false;\n\t\t\tthis.autoSaveManager = null;\n\t\t},\n\t\tasync onLoadChildren(node: CourseTreeNode, fromFirstPage: boolean) {\n\t\t\tthis.loadingChildren = true;\n\t\t\ttry {\n\t\t\t\tawait this.mainStore.getCourseTreeNodeChildren({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\tnodeId: node.id,\n\t\t\t\t\tfromFirstPage,\n\t\t\t\t});\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t} finally {\n\t\t\t\tthis.loadingChildren = false;\n\t\t\t}\n\t\t},\n\t\tasync onLoadComments(node: CourseTreeNode) {\n\t\t\tthis.loadingComments = true;\n\t\t\ttry {\n\t\t\t\tawait this.mainStore.getCourseTreeNodeComments({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\tnodeId: node.id,\n\t\t\t\t});\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t} finally {\n\t\t\t\tthis.loadingComments = false;\n\t\t\t}\n\t\t},\n\t\tasync onDeleteNode(node: CourseTreeNode) {\n\t\t\t// TODO extract duplicated code with other components\n\t\t\tif (!confirm(_(\"course_tree.delete_node_confirm\"))) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait this.withLoading(\n\t\t\t\tasync () =>\n\t\t\t\t\tawait this.mainStore.deleteCourseTreeNode({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\tnodeId: node.id,\n\t\t\t\t\t}),\n\t\t\t\tsetErrorNotification,\n\t\t\t);\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore),\n\t\tnode() {\n\t\t\treturn this.mainStore.currentCourseTreeNode as CourseTreeNode;\n\t\t},\n\t\tnodeChildren() {\n\t\t\treturn this.mainStore.paginatedChildrenByNodeId[this.node?.id ?? \"\"]?.data ?? [];\n\t\t},\n\t\t// TODO extract shared logic\n\t\teditingNodeDebouncedFields() {\n\t\t\tif (this.node?.resourcetype !== CourseTreeNodeType.LessonNode) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\treturn [\"body\", \"title\"];\n\t\t},\n\t\tproxyEditingNode() {\n\t\t\treturn { ...this.node, ...this.unsavedChanges };\n\t\t},\n\t\tfullScreenDialog() {\n\t\t\treturn this.node?.resourcetype === CourseTreeNodeType.LessonNode;\n\t\t},\n\t\tpassDownProps() {\n\t\t\treturn { ...this.$props, canEdit: this.canEdit };\n\t\t},\n\t\tcanEdit() {\n\t\t\t// TODO extract logic shared with CourseTree\n\t\t\treturn this.hasPrivileges([CoursePrivilege.MANAGE_MATERIAL]);\n\t\t},\n\t\tcomponentName(): string {\n\t\t\tif (!this.node) {\n\t\t\t\treturn \"\";\n\t\t\t}\n\t\t\tconst mapping: Record = {\n\t\t\t\tFileNode: \"FileNodeDetail\",\n\t\t\t\tLessonNode: \"LessonNodeDetail\",\n\t\t\t\tTopicNode: \"TopicNodeDetail\",\n\t\t\t\tAnnouncementNode: \"AnnouncementNodeDetail\",\n\t\t\t\tPollNode: \"PollNodeDetail\",\n\t\t\t};\n\t\t\treturn mapping[this.node.resourcetype];\n\t\t},\n\t},\n\tcomponents: { SlotSkeleton, Dialog, CourseTreeNodeEditor },\n});\n","import { render } from \"./NodeDetail.vue?vue&type=template&id=f236adf8&ts=true\"\nimport script from \"./NodeDetail.vue?vue&type=script&lang=ts\"\nexport * from \"./NodeDetail.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex w-full mb-8\" }\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined\" }, \"insights\", -1)\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mr-1 text-base material-icons-outlined\" }, \" add \", -1)\nconst _hoisted_4 = {\n key: 0,\n class: \"grid grid-cols-1 gap-4 mt-4 lg:grid-cols-2\"\n}\nconst _hoisted_5 = {\n key: 1,\n class: \"grid grid-cols-1 gap-4 mt-4 lg:grid-cols-2\"\n}\nconst _hoisted_6 = {\n key: 2,\n class: \"flex flex-col w-full text-center select-none mt-9\"\n}\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"p\", {\n style: {\"font-size\":\"10rem\"},\n class: \"material-icons-outlined opacity-10\"\n}, \" assignment \", -1)\nconst _hoisted_8 = { class: \"opacity-40\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_EventEditorPreview = _resolveComponent(\"EventEditorPreview\")!\n const _component_EventEditorPreviewSkeleton = _resolveComponent(\"EventEditorPreviewSkeleton\")!\n const _component_Dialog = _resolveComponent(\"Dialog\")!\n\n return (_openBlock(), _createElementBlock(\"div\", null, [\n _createElementVNode(\"div\", _hoisted_1, [\n _createVNode(_component_router_link, {\n class: \"ml-auto mr-4\",\n to: { name: 'CourseInsights', hash: '#exams' }\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Btn, {\n class: \"icon-btn-primary\",\n tooltip: _ctx.$t('course_events.exams_stats'),\n variant: 'icon',\n outline: true\n }, {\n default: _withCtx(() => [\n _hoisted_2\n ]),\n _: 1\n }, 8, [\"tooltip\"])\n ]),\n _: 1\n }),\n (_ctx.firstLoading || _ctx.hasPrivileges([_ctx.CoursePrivilege.MANAGE_EVENTS]))\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 0,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.onAddExam())),\n loading: _ctx.localLoading,\n class: \"\",\n disabled: _ctx.firstLoading\n }, {\n default: _withCtx(() => [\n _hoisted_3,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t(\"course_events.new_exam\")), 1)\n ]),\n _: 1\n }, 8, [\"loading\", \"disabled\"]))\n : _createCommentVNode(\"\", true)\n ]),\n (!_ctx.firstLoading)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.mainStore.exams, (exam, index) => {\n return (_openBlock(), _createBlock(_component_EventEditorPreview, {\n key: exam + '-' + index,\n event: exam,\n onClose: ($event: any) => (_ctx.onCloseExam(exam)),\n onReopen: ($event: any) => (_ctx.onReopenExam(exam))\n }, null, 8, [\"event\", \"onClose\", \"onReopen\"]))\n }), 128))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createVNode(_component_EventEditorPreviewSkeleton),\n _createVNode(_component_EventEditorPreviewSkeleton),\n _createVNode(_component_EventEditorPreviewSkeleton),\n _createVNode(_component_EventEditorPreviewSkeleton),\n _createVNode(_component_EventEditorPreviewSkeleton),\n _createVNode(_component_EventEditorPreviewSkeleton)\n ])),\n (!_ctx.firstLoading && _ctx.mainStore.exams.length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _hoisted_7,\n _createElementVNode(\"h2\", _hoisted_8, _toDisplayString(_ctx.$t(\"course_events.no_exams\")), 1)\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_Dialog, {\n showDialog: _ctx.showBlockingDialog,\n onNo: _cache[1] || (_cache[1] = ($event: any) => (_ctx.resolveBlockingDialog(false))),\n onYes: _cache[2] || (_cache[2] = ($event: any) => (_ctx.resolveBlockingDialog(true))),\n yesText: _ctx.blockingDialogData?.yesText,\n noText: _ctx.blockingDialogData?.noText\n }, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.blockingDialogData?.title), 1)\n ]),\n body: _withCtx(() => [\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.blockingDialogData?.text), 1)\n ]),\n _: 1\n }, 8, [\"showDialog\", \"yesText\", \"noText\"])\n ]))\n}","\nimport EventEditorPreview from \"@/components/teacher/EventEditor/EventEditorPreview.vue\";\nimport { Event, EventState, CoursePrivilege, getBlankExam, EventType } from \"@/models\";\nimport Btn from \"@/components/ui/Btn.vue\";\n\nimport { defineComponent } from \"@vue/runtime-core\";\nimport {\n\tblockingDialogMixin,\n\tcourseIdMixin,\n\tcoursePrivilegeMixin,\n\tloadingMixin,\n} from \"@/mixins\";\nimport Dialog from \"@/components/ui/Dialog.vue\";\n\nimport EventEditorPreviewSkeleton from \"@/components/ui/skeletons/EventEditorPreviewSkeleton.vue\";\nimport { EventSearchFilter } from \"@/api/interfaces\";\nimport { mapStores } from \"pinia\";\nimport { useMainStore } from \"@/stores/mainStore\";\nimport { DialogData } from \"@/interfaces\";\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport { useMetaStore } from \"@/stores/metaStore\";\nimport { setErrorNotification } from \"@/utils\";\n\nexport default defineComponent({\n\tcomponents: {\n\t\tEventEditorPreview,\n\t\tBtn,\n\t\tDialog,\n\t\tEventEditorPreviewSkeleton,\n\t},\n\tname: \"CourseExams\",\n\tmixins: [courseIdMixin, loadingMixin, coursePrivilegeMixin, blockingDialogMixin],\n\tasync created() {\n\t\tawait this.withFirstLoading(\n\t\t\tasync () =>\n\t\t\t\tawait this.mainStore.getEvents({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\tfilters: {\n\t\t\t\t\t\tevent_type: EventType.EXAM,\n\t\t\t\t\t} as EventSearchFilter,\n\t\t\t\t}),\n\t\t);\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tCoursePrivilege,\n\t\t\tbuttonLoading: false,\n\t\t};\n\t},\n\tmethods: {\n\t\tasync onCloseExam(event: Event) {\n\t\t\tthis.blockingDialogData = {\n\t\t\t\ttitle: _(\"course_events.close_exam_for_everyone_title\"),\n\t\t\t\ttext:\n\t\t\t\t\t_(\"course_events.close_exam_for_everyone_body_1\") +\n\t\t\t\t\t\" \" +\n\t\t\t\t\tevent.name +\n\t\t\t\t\t\" \" +\n\t\t\t\t\t_(\"course_events.close_exam_for_everyone_body_2\") +\n\t\t\t\t\t\". \" +\n\t\t\t\t\t_(\"course_events.close_exam_for_everyone_body_3\") +\n\t\t\t\t\t\" \" +\n\t\t\t\t\t_(\"event_preview.monitor\") +\n\t\t\t\t\t\".\",\n\t\t\t\tyesText: _(\"course_events.close_for_everyone\"),\n\t\t\t\tnoText: _(\"dialog.default_cancel_text\"),\n\t\t\t};\n\n\t\t\tconst choice = await this.getBlockingBinaryDialogChoice();\n\n\t\t\tif (!choice) {\n\t\t\t\tthis.showBlockingDialog = false;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tawait this.withLoading(\n\t\t\t\tasync () =>\n\t\t\t\t\tawait this.mainStore.partialUpdateEvent({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\teventId: event.id,\n\t\t\t\t\t\tmutate: true,\n\t\t\t\t\t\tchanges: {\n\t\t\t\t\t\t\tstate: EventState.CLOSED,\n\t\t\t\t\t\t\tusers_allowed_past_closure: [],\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\tsetErrorNotification,\n\t\t\t\t() => this.metaStore.showSuccessFeedback(),\n\t\t\t);\n\t\t\tthis.showBlockingDialog = false;\n\t\t},\n\t\tasync onReopenExam(event: Event) {\n\t\t\tthis.blockingDialogData = {\n\t\t\t\ttitle: _(\"course_events.reopen_exam_title\"),\n\t\t\t\ttext: _(\"course_events.reopen_exam_body\") + \" \" + event.name + \"?\",\n\t\t\t\tyesText: _(\"course_events.reopen_for_everyone\"),\n\t\t\t\tnoText: _(\"dialog.default_cancel_text\"),\n\t\t\t};\n\n\t\t\tconst choice = await this.getBlockingBinaryDialogChoice();\n\n\t\t\tif (!choice) {\n\t\t\t\tthis.showBlockingDialog = false;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tawait this.withLoading(\n\t\t\t\tasync () =>\n\t\t\t\t\tawait this.mainStore.partialUpdateEvent({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\teventId: event.id,\n\t\t\t\t\t\tmutate: true,\n\t\t\t\t\t\tchanges: {\n\t\t\t\t\t\t\tstate: EventState.OPEN,\n\t\t\t\t\t\t\tusers_allowed_past_closure: [],\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\tsetErrorNotification,\n\t\t\t\t() => this.metaStore.showSuccessFeedback(),\n\t\t\t);\n\t\t\tthis.showBlockingDialog = false;\n\t\t},\n\t\tasync onAddExam() {\n\t\t\tawait this.withLocalLoading(async () => {\n\t\t\t\tconst newExam = await this.mainStore.createEvent({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\tevent: getBlankExam(),\n\t\t\t\t});\n\t\t\t\t// redirect to exam editor for newly created exam\n\t\t\t\tthis.$router.push({\n\t\t\t\t\tname: \"ExamEditor\",\n\t\t\t\t\tparams: { examId: newExam.id },\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore, useMetaStore),\n\t},\n});\n","import { render } from \"./CourseExams.vue?vue&type=template&id=0a0bf4d1&ts=true\"\nimport script from \"./CourseExams.vue?vue&type=script&lang=ts\"\nexport * from \"./CourseExams.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withCtx as _withCtx, vShow as _vShow, normalizeClass as _normalizeClass, withDirectives as _withDirectives, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, renderList as _renderList, Fragment as _Fragment } from \"vue\"\nimport _imports_0 from '@/assets/classroom_sync.png'\nimport _imports_1 from '@/assets/classroom.png'\n\n\nconst _hoisted_1 = { class: \"relative flex flex-col flex-grow\" }\nconst _hoisted_2 = { class: \"flex flex-col w-full -mt-4\" }\nconst _hoisted_3 = { class: \"flex flex-col w-full mb-4\" }\nconst _hoisted_4 = { class: \"flex items-center\" }\nconst _hoisted_5 = { class: \"flex items-center space-x-1.5 mb-3\" }\nconst _hoisted_6 = { class: \"text-sm\" }\nconst _hoisted_7 = { class: \"text-sm\" }\nconst _hoisted_8 = { class: \"text-sm\" }\nconst _hoisted_9 = {\n key: 0,\n class: \"flex flex-col flex-grow\"\n}\nconst _hoisted_10 = { class: \"flex items-center mb-2 -mt-2\" }\nconst _hoisted_11 = {\n style: {\"width\":\"22px\",\"height\":\"22px\"},\n class: \"opacity-70\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\"\n}\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"title\", null, \"sort\", -1)\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"M18 21L14 17H17V7H14L18 3L22 7H19V17H22M2 19V17H12V19M2 13V11H9V13M2 7V5H6V7H2Z\" }, null, -1)\nconst _hoisted_14 = [\n _hoisted_12,\n _hoisted_13\n]\nconst _hoisted_15 = { class: \"-mx-5 -my-2.5 w-max\" }\nconst _hoisted_16 = {\n key: 0,\n class: \"material-icons mr-2 text-primary\"\n}\nconst _hoisted_17 = { class: \"flex items-center align-top\" }\nconst _hoisted_18 = { class: \"flex space-x-1 ml-2\" }\nconst _hoisted_19 = { class: \"flex items-center ml-2\" }\nconst _hoisted_20 = {\n class: \"cursor-pointer text-muted\",\n for: \"more-filters-btn\"\n}\nconst _hoisted_21 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined\" }, \" file_download \", -1)\nconst _hoisted_22 = { class: \"flex-grow overflow-y-auto\" }\nconst _hoisted_23 = { class: \"flex flex-col flex-grow w-full\" }\nconst _hoisted_24 = { class: \"flex flex-col items-center w-full mb-12 space-y-4 md:flex-row md:space-y-0 -mt-2\" }\nconst _hoisted_25 = { class: \"flex items-center space-x-2 ml-auto\" }\nconst _hoisted_26 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mr-2 material-icons\" }, \"person_add\", -1)\nconst _hoisted_27 = /*#__PURE__*/_createElementVNode(\"img\", {\n src: _imports_0,\n style: {\"width\":\"28px\"}\n}, null, -1)\nconst _hoisted_28 = { class: \"grid grid-cols-1 gap-3 md:grid-cols-2 lg:grid-cols-3 2xl:grid-cols-4\" }\nconst _hoisted_29 = {\n key: 0,\n class: \"flex flex-col items-center w-full h-full mt-12 md:col-span-3 2xl:col-span-4\"\n}\nconst _hoisted_30 = /*#__PURE__*/_createElementVNode(\"p\", {\n style: {\"font-size\":\"6rem\"},\n class: \"material-icons-outlined opacity-10\"\n}, \" person_off \", -1)\nconst _hoisted_31 = { class: \"opacity-40\" }\nconst _hoisted_32 = {\n key: 1,\n class: \"flex flex-col items-center w-full h-full mt-12 md:col-span-3 2xl:col-span-4\"\n}\nconst _hoisted_33 = /*#__PURE__*/_createElementVNode(\"p\", {\n style: {\"font-size\":\"6rem\"},\n class: \"material-icons-outlined opacity-10\"\n}, \" person_off \", -1)\nconst _hoisted_34 = { class: \"opacity-40\" }\nconst _hoisted_35 = { class: \"text-darkText\" }\nconst _hoisted_36 = { class: \"\" }\nconst _hoisted_37 = /*#__PURE__*/_createElementVNode(\"img\", {\n src: _imports_1,\n style: {\"width\":\"20px\"},\n class: \"inline mr-1\"\n}, null, -1)\nconst _hoisted_38 = { class: \"text-darkText\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Tabs = _resolveComponent(\"Tabs\")!\n const _component_CheckboxGroup = _resolveComponent(\"CheckboxGroup\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_Spinner = _resolveComponent(\"Spinner\")!\n const _component_TextInput = _resolveComponent(\"TextInput\")!\n const _component_DropdownMenu = _resolveComponent(\"DropdownMenu\")!\n const _component_Dropdown = _resolveComponent(\"Dropdown\")!\n const _component_NumberInput = _resolveComponent(\"NumberInput\")!\n const _component_DataTable = _resolveComponent(\"DataTable\")!\n const _component_StudentCard = _resolveComponent(\"StudentCard\")!\n const _component_Dialog = _resolveComponent(\"Dialog\")!\n const _component_UserPicker = _resolveComponent(\"UserPicker\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_Tabs, {\n class: \"mt-2 mb-4\",\n options: _ctx.viewModesAsOptions,\n modelValue: _ctx.viewMode,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.viewMode) = $event))\n }, null, 8, [\"options\", \"modelValue\"]),\n _withDirectives(_createElementVNode(\"div\", {\n class: _normalizeClass([\n\t\t\t\t\t\t_ctx.examSelectionExpanded ? 'max-h-100' : 'max-h-0 overflow-y-hidden',\n\t\t\t\t\t\t'duration-200 ease-in-out w-full transition-max-height',\n\t\t\t\t\t])\n }, [\n _createVNode(_component_CheckboxGroup, {\n class: \"flex flex-wrap\",\n options: _ctx.examsAsSelectableOptions,\n modelValue: _ctx.selectedExamsIds,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((_ctx.selectedExamsIds) = $event)),\n usesCustomSlot: true,\n itemClass: 'mt-4 mr-5'\n }, {\n custom: _withCtx(({ item }) => [\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", {\n style: _normalizeStyle({\n\t\t\t\t\t\t\t\t\t\t'background-color': _ctx.examsColors[item.value],\n\t\t\t\t\t\t\t\t\t\t'margin-right': '5px',\n\t\t\t\t\t\t\t\t\t\t'min-width': '10px',\n\t\t\t\t\t\t\t\t\t\t'min-height': '10px',\n\t\t\t\t\t\t\t\t\t\twidth: '10px',\n\t\t\t\t\t\t\t\t\t\theight: '10px',\n\t\t\t\t\t\t\t\t\t\t'border-radius': '50%',\n\t\t\t\t\t\t\t\t\t})\n }, null, 4),\n _createTextVNode(\" \" + _toDisplayString(item.content), 1)\n ])\n ]),\n _: 1\n }, 8, [\"options\", \"modelValue\"]),\n _createElementVNode(\"div\", _hoisted_5, [\n _createVNode(_component_Btn, {\n class: \"mt-3 -ml-1 text-sm\",\n variant: 'primary-borderless',\n size: 'xs',\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.selectedExamsIds = _ctx.mainStore.exams.map(e => e.id)))\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", _hoisted_6, _toDisplayString(_ctx.$t(\"misc.select_all\")), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_Btn, {\n class: \"mt-3 text-sm\",\n variant: 'primary-borderless',\n size: 'xs',\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.selectedExamsIds = _ctx.closedExamIds))\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", _hoisted_7, _toDisplayString(_ctx.$t(\"course_insights.select_closed_exams\")), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_Btn, {\n class: \"mt-3 text-sm\",\n variant: 'primary-borderless',\n size: 'xs',\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.selectedExamsIds = []))\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", _hoisted_8, _toDisplayString(_ctx.$t(\"misc.unselect_all\")), 1)\n ]),\n _: 1\n })\n ])\n ], 2), [\n [_vShow, _ctx.viewMode === 'exams']\n ])\n ])\n ]),\n (_ctx.viewMode === 'exams')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [\n (_ctx.localLoading)\n ? (_openBlock(), _createBlock(_component_Spinner, {\n key: 0,\n variant: 'light',\n size: 'xl',\n class: \"absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2\"\n }))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_10, [\n _createVNode(_component_TextInput, {\n class: \"w-full md:w-1/3\",\n searchBar: true,\n leftIcon: 'search',\n placeholder: _ctx.$t('course_insights.search_students'),\n modelValue: _ctx.examsViewSearchText,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = ($event: any) => ((_ctx.examsViewSearchText) = $event))\n }, null, 8, [\"placeholder\", \"modelValue\"]),\n _createVNode(_component_DropdownMenu, {\n expanded: _ctx.examsViewSortingOptionsExpanded,\n onToggleExpanded: _cache[6] || (_cache[6] = ($event: any) => (\n\t\t\t\t\t\t_ctx.examsViewSortingOptionsExpanded = !_ctx.examsViewSortingOptionsExpanded\n\t\t\t\t\t))\n }, {\n activator: _withCtx(() => [\n _createVNode(_component_Btn, {\n variant: 'icon',\n outline: true,\n class: \"\"\n }, {\n default: _withCtx(() => [\n (_openBlock(), _createElementBlock(\"svg\", _hoisted_11, _hoisted_14))\n ]),\n _: 1\n })\n ]),\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_15, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.examsViewSortingOptions, (option, index) => {\n return (_openBlock(), _createElementBlock(\"div\", { key: index }, [\n _createVNode(_component_Btn, {\n outline: true,\n class: \"px-8 pt-2 pb-2 w-full\",\n variant: 'transparent',\n onClick: ($event: any) => (_ctx.setSortingOption(index))\n }, {\n default: _withCtx(() => [\n (index === _ctx.examsViewSelectedSortingOption)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_16, \"done\"))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_17, _toDisplayString(option.label), 1)\n ]),\n _: 2\n }, 1032, [\"onClick\"])\n ]))\n }), 128))\n ])\n ]),\n _: 1\n }, 8, [\"expanded\"]),\n _createElementVNode(\"div\", _hoisted_18, [\n _createVNode(_component_Dropdown, {\n modelValue: _ctx.examsViewSelectedFilterOption,\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = ($event: any) => ((_ctx.examsViewSelectedFilterOption) = $event)),\n options: _ctx.examViewFilteringOptions,\n class: \"w-60\"\n }, null, 8, [\"modelValue\", \"options\"]),\n (_ctx.examsViewSelectedFilterOption !== 'no_filter')\n ? (_openBlock(), _createBlock(_component_NumberInput, {\n key: 0,\n style: {\"padding-top\":\"0.5rem !important\",\"padding-bottom\":\"0.645rem !important\"},\n elementId: 'grade-filter-value-input',\n modelValue: _ctx.examsViewAverageGradeFilterValue,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = ($event: any) => ((_ctx.examsViewAverageGradeFilterValue) = $event)),\n class: \"w-16\"\n }, null, 8, [\"modelValue\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_19, [\n _createVNode(_component_Btn, {\n variant: 'icon',\n outline: true,\n onClick: _cache[9] || (_cache[9] = ($event: any) => (_ctx.examSelectionExpanded = !_ctx.examSelectionExpanded)),\n class: \"\",\n id: \"more-filters-btn\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n class: _normalizeClass([\"transition-transform duration-200 ease-out transform material-icons-outlined\", { 'rotate-180': _ctx.examSelectionExpanded }])\n }, _toDisplayString(\"expand_more\"), 2)\n ]),\n _: 1\n }),\n _createElementVNode(\"label\", _hoisted_20, _toDisplayString(_ctx.$t(\"course_insights.filter_exams\")), 1)\n ]),\n _createVNode(_component_Btn, {\n class: \"ml-auto\",\n disabled: _ctx.downloadingReport,\n outline: true,\n variant: 'icon',\n onClick: _cache[10] || (_cache[10] = ($event: any) => (_ctx.downloadReport())),\n tooltip: _ctx.$t('misc.download_as_csv')\n }, {\n default: _withCtx(() => [\n _hoisted_21\n ]),\n _: 1\n }, 8, [\"disabled\", \"tooltip\"])\n ]),\n _createElementVNode(\"div\", _hoisted_22, [\n _createVNode(_component_DataTable, {\n class: _normalizeClass({ 'opacity-60': _ctx.loading || _ctx.localLoading }),\n columnDefs: _ctx.tableHeaders,\n rowData: _ctx.loading ? [] : _ctx.tableData,\n getRowId: _ctx.getRowId,\n onGridReady: _cache[11] || (_cache[11] = ($event: any) => {\n\t\t\t\t\t\t_ctx.gridApi = $event.api;\n\t\t\t\t\t\t_ctx.columnApi = $event.columnApi;\n\t\t\t\t\t\t_ctx.columnApi.autoSizeAllColumns(false);\n\t\t\t\t\t})\n }, null, 8, [\"class\", \"columnDefs\", \"rowData\", \"getRowId\"])\n ])\n ]))\n : _createCommentVNode(\"\", true),\n _withDirectives(_createElementVNode(\"div\", _hoisted_23, [\n _createElementVNode(\"div\", _hoisted_24, [\n _createVNode(_component_TextInput, {\n class: \"w-full md:w-1/2\",\n searchBar: true,\n leftIcon: 'search',\n placeholder: _ctx.$t('course_insights.search_students'),\n modelValue: _ctx.usersViewSearchText,\n \"onUpdate:modelValue\": _cache[12] || (_cache[12] = ($event: any) => ((_ctx.usersViewSearchText) = $event))\n }, null, 8, [\"placeholder\", \"modelValue\"]),\n _createElementVNode(\"div\", _hoisted_25, [\n _createVNode(_component_Btn, {\n class: \"\",\n onClick: _cache[13] || (_cache[13] = ($event: any) => (_ctx.onEnrollUsers()))\n }, {\n default: _withCtx(() => [\n _hoisted_26,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t(\"course_insights.enroll_students\")), 1)\n ]),\n _: 1\n }),\n (_ctx.classroomIntegrationActive)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 0,\n outline: true,\n variant: 'icon',\n class: \"\",\n style: {\"margin-top\":\"2px\"},\n onClick: _cache[14] || (_cache[14] = ($event: any) => (_ctx.showClassroomSyncDialog = true)),\n tooltip: _ctx.$t('integrations.classroom.sync_classroom_roster')\n }, {\n default: _withCtx(() => [\n _hoisted_27\n ]),\n _: 1\n }, 8, [\"tooltip\"]))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_28, [\n (!_ctx.loading && _ctx.mainStore.enrolledUsers.length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_29, [\n _hoisted_30,\n _createElementVNode(\"h2\", _hoisted_31, _toDisplayString(_ctx.$t(\"course_insights.no_enrolled_students\")), 1)\n ]))\n : (!_ctx.loading && _ctx.filteredEnrolledUsers.length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_32, [\n _hoisted_33,\n _createElementVNode(\"h2\", _hoisted_34, _toDisplayString(_ctx.$t(\"course_insights.no_users_matching_search\")), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.filteredEnrolledUsers, (user) => {\n return (_openBlock(), _createBlock(_component_StudentCard, {\n class: \"mb-auto\",\n key: 'enrolled-user-' + user.id,\n user: user\n }, null, 8, [\"user\"]))\n }), 128))\n ])\n ], 512), [\n [_vShow, _ctx.viewMode === 'students']\n ]),\n _createVNode(_component_Dialog, {\n showDialog: _ctx.showClassroomSyncDialog,\n onYes: _cache[15] || (_cache[15] = ($event: any) => (_ctx.onSyncClassroomRoster())),\n onNo: _cache[16] || (_cache[16] = ($event: any) => (_ctx.showClassroomSyncDialog = false)),\n yesText: \n\t\t\t\t_ctx.syncingClassroomRoster\n\t\t\t\t\t? _ctx.$t('misc.wait')\n\t\t\t\t\t: _ctx.$t('integrations.classroom.sync_roster')\n\t\t\t,\n noText: _ctx.$t('dialog.default_cancel_text'),\n disableOk: _ctx.syncingClassroomRoster,\n loading: _ctx.syncingClassroomRoster\n }, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"integrations.classroom.sync_classroom_roster\")), 1)\n ]),\n body: _withCtx(() => [\n _createElementVNode(\"p\", _hoisted_35, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"integrations.classroom.sync_classroom_roster_description_1\")) + \" \", 1),\n _createElementVNode(\"span\", _hoisted_36, [\n _hoisted_37,\n _createElementVNode(\"strong\", null, _toDisplayString(_ctx.googleClassroomCourseTwin?.data?.name), 1)\n ]),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t(\"integrations.classroom.sync_classroom_roster_description_2\")) + \" \", 1),\n _createElementVNode(\"strong\", null, _toDisplayString(_ctx.currentCourse.name), 1),\n _createTextVNode(\". \")\n ])\n ]),\n _: 1\n }, 8, [\"showDialog\", \"yesText\", \"noText\", \"disableOk\", \"loading\"]),\n _createVNode(_component_Dialog, {\n showDialog: _ctx.showBlockingDialog,\n onYes: _cache[18] || (_cache[18] = ($event: any) => (_ctx.resolveBlockingDialog(true))),\n onNo: _cache[19] || (_cache[19] = ($event: any) => (_ctx.resolveBlockingDialog(false))),\n yesText: _ctx.enrollingUsers ? _ctx.$t('misc.wait') : _ctx.$t('course_insights.enroll'),\n noText: _ctx.$t('dialog.default_cancel_text'),\n disableOk: _ctx.usersToEnrollCount === 0 || _ctx.enrollingUsers,\n large: true,\n footerBorder: true,\n loading: _ctx.enrollingUsers\n }, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"course_insights.add_enrolled_students\")), 1)\n ]),\n body: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_38, [\n _createVNode(_component_UserPicker, {\n modelValue: _ctx.usersToEnroll,\n \"onUpdate:modelValue\": _cache[17] || (_cache[17] = ($event: any) => ((_ctx.usersToEnroll) = $event))\n }, null, 8, [\"modelValue\"])\n ])\n ]),\n _: 1\n }, 8, [\"showDialog\", \"yesText\", \"noText\", \"disableOk\", \"loading\"])\n ]))\n}","import { resolveComponent as _resolveComponent, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ag_grid_vue = _resolveComponent(\"ag-grid-vue\")!\n\n return (_openBlock(), _createBlock(_component_ag_grid_vue, {\n style: _normalizeStyle(_ctx.style),\n suppressRowClickSelection: true,\n alwaysShowHorizontalScroll: true,\n class: _normalizeClass([\"ag-theme-material\", { 'ag-scrolled': _ctx.scrolled }]),\n suppressRowHoverHighlight: \"true\",\n suppressCellSelection: \"false\",\n columnDefs: _ctx.columnDefs,\n rowSelection: 'multiple',\n isRowSelectable: _ctx.isRowSelectable,\n getRowClass: _ctx.getRowClass,\n rowClassRules: _ctx.rowClassRules,\n rowData: _ctx.rowData,\n getRowNodeId: _ctx.getRowId,\n immutableData: true,\n localeTextFunc: _ctx.localeTextFunc,\n onCellClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('cellClicked', $event))),\n onSelectionChange: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$emit('selectionChanged', $event))),\n onFirstDataRendered: _ctx.onGridReady,\n onFilterChanged: _ctx.onFilterChanged,\n onBodyScroll: _ctx.onBodyScroll\n }, null, 8, [\"style\", \"columnDefs\", \"isRowSelectable\", \"getRowClass\", \"rowClassRules\", \"rowData\", \"getRowNodeId\", \"localeTextFunc\", \"onFirstDataRendered\", \"onFilterChanged\", \"onBodyScroll\", \"class\"]))\n}","\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport \"ag-grid-community/dist/styles/ag-grid.css\";\nimport \"ag-grid-community/dist/styles/ag-theme-material.css\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport { AgGridVue } from \"ag-grid-vue3\";\nimport { ColDef } from \"ag-grid-community\";\nimport { getTranslatedString as _ } from \"@/i18n\";\n\nexport default defineComponent({\n\tname: \"DataTable\",\n\tcomponents: {\n\t\tAgGridVue,\n\t},\n\tprops: {\n\t\tcolumnDefs: {\n\t\t\ttype: Array as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\trowData: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\tisRowSelectable: {\n\t\t\ttype: Function,\n\t\t\tdefault: () => true,\n\t\t},\n\t\tgetRowClass: {\n\t\t\ttype: Function,\n\t\t\tdefault: () => \"\",\n\t\t},\n\t\trowClassRules: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => {},\n\t\t},\n\t\tgetRowId: {\n\t\t\ttype: Function,\n\t\t\tdefault: () => \"\",\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\t//columnDefs: [] as any,\n\t\t\t//rowData: [] as any,\n\t\t\tstyle: \"width: 100%; height: 100%; min-height: 300px\",\n\t\t\tgridApi: null as any,\n\t\t\trowCount: 0,\n\t\t\tscrolled: false,\n\t\t};\n\t},\n\tmethods: {\n\t\tlocaleTextFunc(key: string) {\n\t\t\treturn _(\"data_table.\" + key);\n\t\t},\n\t\tonGridReady(params: any) {\n\t\t\tthis.gridApi = params.api;\n\t\t\tthis.$emit(\"gridReady\", params);\n\t\t},\n\t\tonFilterChanged() {\n\t\t\tthis.rowCount = this.gridApi?.getDisplayedRowCount() ?? 0;\n\t\t},\n\t\tonBodyScroll(event) {\n\t\t\tthis.scrolled = event.left > 0;\n\t\t},\n\t\t// getRowId(params: any) {\n\t\t// return params.data.id;\n\t\t// },\n\t},\n});\n","import { render } from \"./DataTable.vue?vue&type=template&id=1da6981a&ts=true\"\nimport script from \"./DataTable.vue?vue&type=script&lang=ts\"\nexport * from \"./DataTable.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, withCtx as _withCtx, normalizeClass as _normalizeClass, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, createTextVNode as _createTextVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex items-center w-full mt-2\" }\nconst _hoisted_2 = { class: \"flex items-center space-x-4 overflow-hidden\" }\nconst _hoisted_3 = { class: \"flex flex-col -space-y-1 overflow-hidden\" }\nconst _hoisted_4 = [\"title\"]\nconst _hoisted_5 = { class: \"flex items-center space-x-1 overflow-hidden\" }\nconst _hoisted_6 = [\"title\"]\nconst _hoisted_7 = [\"href\"]\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"span\", {\n style: {\"font-size\":\"14px !important\"},\n class: \"material-icons-outlined icon-light\"\n}, \" email \", -1)\nconst _hoisted_9 = { class: \"text-sm text-muted\" }\nconst _hoisted_10 = { class: \"flex items-center space-x-1\" }\nconst _hoisted_11 = { key: 0 }\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"span\", {\n style: {\"font-size\":\"18px !important\"},\n class: \"material-icons-outlined\"\n}, \"launch\", -1)\nconst _hoisted_13 = {\n key: 2,\n class: \"text-muted\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Avatar = _resolveComponent(\"Avatar\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_SkeletonCard = _resolveComponent(\"SkeletonCard\")!\n const _component_Timestamp = _resolveComponent(\"Timestamp\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_Timeline = _resolveComponent(\"Timeline\")!\n const _component_Card = _resolveComponent(\"Card\")!\n\n return (_openBlock(), _createBlock(_component_Card, { \"margin-less\": true }, {\n header: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_Avatar, {\n size: 'lg',\n user: _ctx.user\n }, null, 8, [\"user\"]),\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"p\", {\n class: \"overflow-hidden overflow-ellipsis\",\n title: _ctx.user.full_name\n }, _toDisplayString(_ctx.user.full_name), 9, _hoisted_4),\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"p\", {\n class: \"overflow-hidden text-sm text-muted overflow-ellipsis\",\n title: _ctx.user.email\n }, _toDisplayString(_ctx.user.email), 9, _hoisted_6),\n _createElementVNode(\"a\", {\n style: {\"margin-bottom\":\"-4.85px\"},\n href: 'mailto:' + _ctx.user.email\n }, [\n _createVNode(_component_Btn, {\n size: 'xs',\n variant: 'icon',\n outline: true\n }, {\n default: _withCtx(() => [\n _hoisted_8\n ]),\n _: 1\n })\n ], 8, _hoisted_7)\n ])\n ])\n ]),\n _createVNode(_component_Btn, {\n class: \"ml-auto\",\n outline: true,\n variant: 'icon',\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.expanded = !_ctx.expanded))\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n class: _normalizeClass([\"transition-transform duration-200 ease-out transform material-icons-outlined\", { 'rotate-180': _ctx.expanded }])\n }, \" expand_more \", 2)\n ]),\n _: 1\n })\n ])\n ]),\n body: _withCtx(() => [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"duration-200 ease-in-out transition-max-height\", {\n\t\t\t\t\t'max-h-0 overflow-hidden': !_ctx.expanded,\n\t\t\t\t\t'max-h-96 overflow-y-auto': _ctx.expanded,\n\t\t\t\t}])\n }, [\n (_ctx.fetching)\n ? (_openBlock(), _createBlock(_component_SkeletonCard, {\n key: 0,\n \"border-less\": true,\n class: \"-ml-4\"\n }))\n : (_openBlock(), _createBlock(_component_Timeline, {\n key: 1,\n class: \"mt-4\",\n steps: _ctx.processedHistory\n }, {\n default: _withCtx(({ timestamp, eventType, data }) => [\n _createElementVNode(\"div\", _hoisted_9, [\n _createVNode(_component_Timestamp, { value: timestamp }, null, 8, [\"value\"])\n ]),\n _createElementVNode(\"div\", _hoisted_10, [\n _createElementVNode(\"p\", null, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"course_insights.user_history_event_descriptions.\" + eventType)) + \" \", 1),\n (eventType === _ctx.EventType.EXAM)\n ? (_openBlock(), _createElementBlock(\"strong\", _hoisted_11, _toDisplayString(data.name), 1))\n : _createCommentVNode(\"\", true)\n ]),\n _createVNode(_component_router_link, {\n to: {\n\t\t\t\t\t\t\t\tname: 'ExamParticipationFull',\n\t\t\t\t\t\t\t\tparams: { examId: data.examId, participationId: data.id },\n\t\t\t\t\t\t\t},\n target: \"_blank\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Btn, {\n outline: true,\n variant: 'icon'\n }, {\n default: _withCtx(() => [\n _hoisted_12\n ]),\n _: 1\n })\n ]),\n _: 2\n }, 1032, [\"to\"])\n ])\n ]),\n _: 1\n }, 8, [\"steps\"])),\n (_ctx.processedHistory.length === 0 && !_ctx.fetching)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_13, _toDisplayString(_ctx.$t(\"course_insights.no_user_activity\")), 1))\n : _createCommentVNode(\"\", true)\n ], 2)\n ]),\n _: 1\n }))\n}","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, renderSlot as _renderSlot } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex items-start space-x-2 mb-3\" }\nconst _hoisted_2 = { class: \"flex flex-col space-y-3 items-center\" }\nconst _hoisted_3 = { class: \"mb-4\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.steps, (step, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: _ctx.id + '-step-' + index\n }, [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"w-4 h-4 rounded-full bg-primary\", step.data?.class ?? ''])\n }, null, 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\n\t\t\t\t\t\t\tindex < _ctx.steps.length - 1 ? 'h-10' : '',\n\t\t\t\t\t\t\t'border-l-1.5 border-gray-200',\n\t\t\t\t\t\t])\n }, null, 2)\n ]),\n _createElementVNode(\"div\", _hoisted_3, [\n _renderSlot(_ctx.$slots, \"default\", {\n timestamp: step.timestamp,\n eventType: step.eventType,\n data: step.data\n })\n ])\n ])\n ]))\n }), 128))\n ]))\n}","\nimport { v4 as uuid4 } from \"uuid\";\n\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nexport default defineComponent({\n\tname: \"Timeline\",\n\tprops: {\n\t\tsteps: {\n\t\t\ttype: Array as PropType<{ eventType: any; timestamp: string; data: any }[]>,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tid: uuid4(),\n\t\t};\n\t},\n\tmethods: {},\n\tcomputed: {},\n});\n","import { render } from \"./Timeline.vue?vue&type=template&id=1d711f2b&ts=true\"\nimport script from \"./Timeline.vue?vue&type=script&lang=ts\"\nexport * from \"./Timeline.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { EventParticipation, EventType, User } from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport Card from \"../ui/Card.vue\";\nimport Btn from \"../ui/Btn.vue\";\nimport Timeline from \"../ui/Timeline.vue\";\nimport Timestamp from \"../ui/Timestamp.vue\";\nimport { getUserCourseParticipations } from \"@/api/courses\";\nimport { courseIdMixin, loadingMixin } from \"@/mixins\";\nimport SkeletonCard from \"../ui/SkeletonCard.vue\";\nimport { setErrorNotification } from \"@/utils\";\nimport Avatar from \"../ui/Avatar.vue\";\nexport default defineComponent({\n\tname: \"StudentCard\",\n\tmixins: [courseIdMixin, loadingMixin],\n\tprops: {\n\t\tuser: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t},\n\twatch: {\n\t\tasync expanded(newVal) {\n\t\t\tif (newVal && this.participationHistory.length === 0) {\n\t\t\t\tthis.fetching = true;\n\t\t\t\ttry {\n\t\t\t\t\tthis.participationHistory = await getUserCourseParticipations(\n\t\t\t\t\t\tthis.courseId,\n\t\t\t\t\t\tthis.user.id,\n\t\t\t\t\t);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tsetErrorNotification(e);\n\t\t\t\t} finally {\n\t\t\t\t\tthis.fetching = false;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tfetching: false,\n\t\t\texpanded: false,\n\t\t\tparticipationHistory: [] as EventParticipation[],\n\t\t\tEventType,\n\t\t};\n\t},\n\tmethods: {},\n\tcomputed: {\n\t\tprocessedHistory() {\n\t\t\treturn this.participationHistory\n\t\t\t\t.map(p => ({\n\t\t\t\t\teventType: p.event.event_type,\n\t\t\t\t\ttimestamp: p.begin_timestamp,\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tid: p.id,\n\t\t\t\t\t\tname: p.event.name,\n\t\t\t\t\t\texamId: p.event.id,\n\t\t\t\t\t\tclass:\n\t\t\t\t\t\t\tp.event.event_type === EventType.SELF_SERVICE_PRACTICE ? \"opacity-50\" : \"\",\n\t\t\t\t\t},\n\t\t\t\t}))\n\t\t\t\t.sort((a, b) => (new Date(a.timestamp) < new Date(b.timestamp) ? -1 : 1));\n\t\t},\n\t},\n\tcomponents: { Card, Btn, Timeline, Timestamp, SkeletonCard, Avatar },\n});\n","import { render } from \"./StudentCard.vue?vue&type=template&id=7ee33037&ts=true\"\nimport script from \"./StudentCard.vue?vue&type=script&lang=ts\"\nexport * from \"./StudentCard.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { getTranslatedString as _ } from \"@/i18n\";\nimport { CourseExamParticipationReport, Event, EventParticipation, User } from \"@/models\";\nimport { get } from \"lodash\";\nimport { isNumeric } from \"@/api/utils\";\n\nexport enum CourseParticipationReportField {\n\tSTUDENT_EMAIL = \"user.email\",\n\tSTUDENT_MAT = \"user.mat\",\n\tSTUDENT_COURSE = \"user.course\",\n\tSTUDENT_FULL_NAME = \"user.full_name\",\n\tEXAM_NAME = \"event.name\",\n\tEXAM_SCORE = \"participation.score\",\n\tPARTICIPATION_LINK = \"participation.link\",\n}\n\nexport interface CourseParticipationReportSettings {\n\t// reportType: ReportType;\n\tfields: CourseParticipationReportField[];\n}\n\nconst getHeaders = (exams: Event[]) => [\n\t...[\"email\", \"full_name\", \"mat\", \"course\", \"score_average\"],\n\t...exams.map(e => `participations[\"${e.id}\"].score`),\n];\n\nconst getHeaderString = (header: string, exams: Event[]) => {\n\tconst examMatch = header.match(/participations\\[\"([^\"]+)\"\\].score/);\n\tif (examMatch !== null) {\n\t\tconst examId = examMatch[1];\n\t\treturn exams.find(e => e.id == examId)?.name ?? \"\";\n\t}\n\treturn _(\"reports.course_participation_report_headers.\" + header);\n};\n\nconst getCellValue = (user, field: string) => {\n\treturn get(user, field);\n};\n\nexport const getCourseExamParticipationsReportAsCsv = (\n\treport: CourseExamParticipationReport,\n\tusers: (User & { score_average: number })[],\n\texams: Event[],\n): string => {\n\tconst headers = getHeaders(exams);\n\n\tconst replacer = (key: string, value: string) => {\n\t\tif (value === null) {\n\t\t\treturn null;\n\t\t}\n\t\tif (isNumeric(value)) {\n\t\t\t// ! TODO keep an eye on this, locale problems\n\t\t\treturn String(parseFloat(value)).replace(\".\", \",\");\n\t\t}\n\n\t\tif (typeof value === \"string\") {\n\t\t\treturn value\n\t\t\t\t.replace(/\\\\n/g, \"\\n\")\n\t\t\t\t.replace(/ ({\n\t\t...u,\n\t\tparticipations: Object.entries(report)\n\t\t\t.flatMap(([eventId, participations]) =>\n\t\t\t\tparticipations.map(p => ({\n\t\t\t\t\t...p,\n\t\t\t\t\teventId,\n\t\t\t\t})),\n\t\t\t)\n\t\t\t.filter(p => p.user == u.id)\n\t\t\t.reduce((acc, { eventId, ...p }) => {\n\t\t\t\tacc[eventId] = {\n\t\t\t\t\t...p,\n\t\t\t\t\tevent: exams.find(e => e.id == eventId) as Event,\n\t\t\t\t};\n\t\t\t\treturn acc;\n\t\t\t}, {} as Record),\n\t}));\n\n\tconst ret = [\n\t\theaders.map(h => getHeaderString(h, exams)).join(\",\"),\n\t\t...processedUsers.map(u => {\n\t\t\treturn headers\n\t\t\t\t.map(field =>\n\t\t\t\t\t(JSON.stringify(getCellValue(u, field), replacer) ?? \"\").replace(/\\\\\"/g, '\"'),\n\t\t\t\t)\n\t\t\t\t.join(\",\");\n\t\t}),\n\t].join(\"\\r\\n\");\n\treturn ret;\n};\n","import { toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, Transition as _Transition, withCtx as _withCtx, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, resolveComponent as _resolveComponent, createElementVNode as _createElementVNode, TransitionGroup as _TransitionGroup, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass, withKeys as _withKeys, resolveDirective as _resolveDirective, withDirectives as _withDirectives } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"mt-2 mb-4 font-medium\"\n}\nconst _hoisted_2 = { class: \"flex flex-wrap items-center mb-6 mr-2\" }\nconst _hoisted_3 = { class: \"flex items-center\" }\nconst _hoisted_4 = { class: \"flex flex-col\" }\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"span\", {\n style: {\"font-size\":\"15px !important\",\"margin-left\":\"0.5px !important\"},\n class: \"material-icons\"\n}, \"close\", -1)\nconst _hoisted_6 = { class: \"text-muted text-sm mt-0.5\" }\nconst _hoisted_7 = { class: \"relative mt-8\" }\nconst _hoisted_8 = {\n key: 0,\n class: \"absolute top-0 transform -translate-x-1/2 left-1/2\"\n}\nconst _hoisted_9 = [\"id\"]\nconst _hoisted_10 = { class: \"flex items-center mr-8 space-x-4\" }\nconst _hoisted_11 = {\n key: 1,\n class: \"flex flex-col items-center mx-2 mt-12\"\n}\nconst _hoisted_12 = { class: \"font-medium\" }\nconst _hoisted_13 = { class: \"text-muted\" }\nconst _hoisted_14 = [\"onClick\", \"onKeyup\"]\nconst _hoisted_15 = { class: \"flex items-center space-x-4\" }\nconst _hoisted_16 = { class: \"flex flex-col\" }\nconst _hoisted_17 = [\"innerHTML\"]\nconst _hoisted_18 = [\"innerHTML\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Avatar = _resolveComponent(\"Avatar\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_TextInput = _resolveComponent(\"TextInput\")!\n const _component_Spinner = _resolveComponent(\"Spinner\")!\n const _directive_wave = _resolveDirective(\"wave\")!\n\n return (_openBlock(), _createElementBlock(\"div\", null, [\n _createVNode(_Transition, { name: \"slide-fade\" }, {\n default: _withCtx(() => [\n (_ctx.addingUsers.length > 0)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_1, _toDisplayString(_ctx.addingUsers.length) + \" \" + _toDisplayString(_ctx.$tc(\"misc.selected\", _ctx.addingUsers.length)), 1))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }),\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_TransitionGroup, { name: \"quick-bounce\" }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.addingUsers, (user) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"mr-2.5 mb-2.5 bg-light flex px-3 my-auto w-max rounded-full\",\n key: user.email\n }, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_Avatar, {\n user: user,\n class: \"-ml-3 mr-1.5\"\n }, null, 8, [\"user\"]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"p\", null, _toDisplayString(user.full_name), 1)\n ]),\n _createVNode(_component_Btn, {\n variant: 'icon',\n class: \"ml-2 -mr-2 bg-gray-200\",\n outline: true,\n size: 'xs',\n onClick: ($event: any) => (_ctx.onRemoveUser(user))\n }, {\n default: _withCtx(() => [\n _hoisted_5\n ]),\n _: 2\n }, 1032, [\"onClick\"])\n ])\n ]))\n }), 128))\n ]),\n _: 1\n })\n ]),\n _createVNode(_component_TextInput, {\n modelValue: _ctx.searchText,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.searchText) = $event)),\n class: \"mt-4\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"course_insights.search_student\")), 1)\n ]),\n _: 1\n }, 8, [\"modelValue\"]),\n _createElementVNode(\"p\", _hoisted_6, _toDisplayString(_ctx.$t(\"course_permissions.search_user_hint\")), 1),\n _createElementVNode(\"div\", _hoisted_7, [\n (_ctx.loadingUsers)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _createVNode(_component_Spinner, { size: 'lg' })\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"w-full transition-all duration-75 ease-in-out\", [_ctx.isAtTop ? 'bg-transparent' : 'top-edge-shadow']])\n }, null, 2),\n _createElementVNode(\"div\", {\n class: \"mt-4 -mb-3 overflow-auto h-100\",\n id: _ctx.scrollableElementId\n }, [\n (_ctx.filteredUsers.length === 0 && _ctx.isSearchTextValidEmail)\n ? _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n tabindex: \"0\",\n class: _normalizeClass([\"px-2 py-2 transition-colors duration-75 cursor-pointer\", [\n\t\t\t\t\t\t_ctx.isUserSelected({ email: _ctx.searchText })\n\t\t\t\t\t\t\t? 'text-primary-dark bg-primary-light hover:bg-primary-light bg-opacity-15 hover:bg-opacity-20'\n\t\t\t\t\t\t\t: 'hover:bg-light',\n\t\t\t\t\t]]),\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.onToggleUser({ email: _ctx.searchText }))),\n onKeyup: _cache[2] || (_cache[2] = _withKeys(($event: any) => (_ctx.onToggleUser({ email: _ctx.searchText })), [\"enter\"]))\n }, [\n _createElementVNode(\"div\", _hoisted_10, [\n _createVNode(_component_Avatar, {\n user: { full_name: _ctx.searchText }\n }, null, 8, [\"user\"]),\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.searchText), 1)\n ])\n ], 34)), [\n [_directive_wave]\n ])\n : _createCommentVNode(\"\", true),\n (_ctx.filteredUsers.length === 0 && !_ctx.isSearchTextValidEmail && !_ctx.loadingUsers)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [\n _createElementVNode(\"h3\", _hoisted_12, _toDisplayString(_ctx.$t(\"course_permissions.search_cant_find_user\")), 1),\n _createElementVNode(\"p\", _hoisted_13, _toDisplayString(_ctx.$t(\"course_permissions.try_with_email_hint\")), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.filteredUsers, (user) => {\n return _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n tabindex: \"0\",\n class: _normalizeClass([\"px-2 py-2 transition-colors duration-75 cursor-pointer\", [\n\t\t\t\t\t\t_ctx.isUserSelected(user)\n\t\t\t\t\t\t\t? 'text-primary-dark bg-primary-light hover:bg-primary-light bg-opacity-15 hover:bg-opacity-20'\n\t\t\t\t\t\t\t: 'hover:bg-light',\n\t\t\t\t\t]]),\n key: user.id,\n onClick: ($event: any) => (_ctx.onToggleUser(user)),\n onKeyup: _withKeys(($event: any) => (_ctx.onToggleUser(user)), [\"enter\"])\n }, [\n _createElementVNode(\"div\", _hoisted_15, [\n _createVNode(_component_Avatar, { user: user }, null, 8, [\"user\"]),\n _createElementVNode(\"div\", _hoisted_16, [\n _createElementVNode(\"p\", {\n innerHTML: _ctx.highlightMatchingText(_ctx.searchText, user.full_name)\n }, null, 8, _hoisted_17),\n (user.email !== user.full_name)\n ? (_openBlock(), _createElementBlock(\"p\", {\n key: 0,\n innerHTML: _ctx.highlightMatchingText(_ctx.searchText, user.email),\n class: \"-mt-1 text-sm text-muted\"\n }, null, 8, _hoisted_18))\n : _createCommentVNode(\"\", true)\n ])\n ])\n ], 42, _hoisted_14)), [\n [_directive_wave]\n ])\n }), 128))\n ], 8, _hoisted_9)\n ])\n ]))\n}","\nimport { SelectableOption } from \"@/interfaces\";\nimport { courseIdMixin, scrollMixin } from \"@/mixins\";\nimport { userMatchesSearch, User } from \"@/models\";\nimport { useMainStore } from \"@/stores/mainStore\";\nimport {\n\thighlightMatchingText,\n\tsetErrorNotification,\n\tisValidEmailAddress,\n} from \"@/utils\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport { throttle } from \"lodash\";\nimport { mapStores } from \"pinia\";\nimport Avatar from \"../ui/Avatar.vue\";\nimport Btn from \"../ui/Btn.vue\";\nimport Combobox from \"../ui/Combobox.vue\";\nimport Spinner from \"../ui/Spinner.vue\";\nimport TextInput from \"../ui/TextInput.vue\";\nexport default defineComponent({\n\tname: \"UserPicker\",\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: Object as PropType<{\n\t\t\t\tids: string[];\n\t\t\t\temails: string[];\n\t\t\t}>,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tasync created() {\n\t\tthis.loadingUsers = true;\n\t\tawait this.throttledGetUsers(null);\n\t},\n\tmixins: [courseIdMixin, scrollMixin],\n\twatch: {\n\t\tsearchText(newVal) {\n\t\t\tthis.loadingUsers = true;\n\t\t\tthis.throttledGetUsers(newVal);\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tsearchText: \"\",\n\t\t\tloadingUsers: false,\n\t\t\taddingUserIds: [] as string[],\n\t\t\taddingEmails: [] as string[],\n\t\t\t/**\n\t\t\t * Users in the store may change due to filtered API calls,\n\t\t\t * so keep a local cache of selected user objects\n\t\t\t */\n\t\t\tcachedUsers: [] as User[],\n\t\t\t/**\n\t\t\t * Once an email address has been selected, it's saved into\n\t\t\t * a local cache so it can show up in later search results\n\t\t\t * as if it belonged to an actual user\n\t\t\t */\n\t\t\tcachedEmails: [] as string[],\n\t\t};\n\t},\n\tmethods: {\n\t\tonToggleUser(user: Partial) {\n\t\t\tif (user.id) {\n\t\t\t\tconst userId = user.id;\n\t\t\t\tif (this.modelValue.ids.includes(userId)) {\n\t\t\t\t\tthis.onRemoveUser({ id: userId });\n\t\t\t\t} else {\n\t\t\t\t\tif (!this.cachedUsers.find(u => u.id == userId)) {\n\t\t\t\t\t\t!this.cachedUsers.push(this.mainStore.getUserById(userId) as User);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.addingUserIds.push(userId);\n\t\t\t\t\tthis.$emit(\"update:modelValue\", {\n\t\t\t\t\t\temails: this.modelValue.emails,\n\t\t\t\t\t\tids: [...this.modelValue.ids, userId],\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst email = user.email as string;\n\t\t\t\tif (this.modelValue.emails.includes(email)) {\n\t\t\t\t\tthis.onRemoveUser({ email });\n\t\t\t\t} else {\n\t\t\t\t\tif (!this.cachedEmails.find(e => e == email)) {\n\t\t\t\t\t\t!this.cachedEmails.push(email);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.addingEmails.push(email);\n\t\t\t\t\tthis.$emit(\"update:modelValue\", {\n\t\t\t\t\t\temails: [...this.modelValue.emails, email],\n\t\t\t\t\t\tids: this.modelValue.ids,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tonRemoveUser(user: Partial) {\n\t\t\tif (user.id) {\n\t\t\t\tthis.$emit(\"update:modelValue\", {\n\t\t\t\t\temails: this.modelValue.emails,\n\t\t\t\t\tids: this.modelValue.ids.filter(i => i != user.id),\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.$emit(\"update:modelValue\", {\n\t\t\t\t\temails: this.modelValue.emails.filter(e => e != user.email),\n\t\t\t\t\tids: this.modelValue.ids,\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tisUserSelected(user: Partial) {\n\t\t\tif (user.id) {\n\t\t\t\treturn this.modelValue.ids.includes(user.id);\n\t\t\t}\n\t\t\treturn this.modelValue.emails.includes(user.email as string);\n\t\t},\n\t\tasync onUserSearch(search: string) {\n\t\t\tthis.loadingUsers = true;\n\t\t\tawait this.throttledGetUsers(search);\n\t\t},\n\t\tthrottledGetUsers: throttle(async function (this: any, search) {\n\t\t\ttry {\n\t\t\t\tawait this.mainStore.getUsersForCourse({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\tteachersOnly: false,\n\t\t\t\t\tsearch,\n\t\t\t\t});\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t} finally {\n\t\t\t\tthis.loadingUsers = false;\n\t\t\t}\n\t\t}, 500),\n\t\thighlightMatchingText,\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore),\n\t\tusers() {\n\t\t\treturn this.mainStore.paginatedUsers.data;\n\t\t},\n\t\tfilteredUsers() {\n\t\t\treturn [\n\t\t\t\t...this.users,\n\t\t\t\t...this.cachedEmails.map(e => ({ full_name: e, email: e })),\n\t\t\t].filter(u => userMatchesSearch(this.searchText, u as User));\n\t\t},\n\t\tisSearchTextValidEmail() {\n\t\t\treturn isValidEmailAddress(this.searchText);\n\t\t},\n\t\taddingUsers() {\n\t\t\treturn [\n\t\t\t\t...this.modelValue.ids.map(i => this.cachedUsers.find(u => u.id == i)),\n\t\t\t\t...this.modelValue.emails.map(e => ({\n\t\t\t\t\tfull_name: e,\n\t\t\t\t\temail: e,\n\t\t\t\t})),\n\t\t\t];\n\t\t},\n\t},\n\tcomponents: { Avatar, Spinner, TextInput, Btn },\n});\n","import { render } from \"./UserPicker.vue?vue&type=template&id=05ba4872&ts=true\"\nimport script from \"./UserPicker.vue?vue&type=script&lang=ts\"\nexport * from \"./UserPicker.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n class: \"flex items-center\",\n style: {\"margin-top\":\"13px\"}\n}\nconst _hoisted_2 = {\n class: \"flex flex-col space-y-0.5 ml-3 mr-1.5\",\n style: {\"line-height\":\"1 !important\"}\n}\nconst _hoisted_3 = { class: \"text-xs text-muted\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Avatar = _resolveComponent(\"Avatar\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Avatar, {\n style: {\"line-height\":\"1 !important\"},\n user: _ctx.params.value\n }, null, 8, [\"user\"]),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.params.value.full_name), 1),\n _createElementVNode(\"p\", _hoisted_3, _toDisplayString(_ctx.params.value.email), 1)\n ])\n ]))\n}","\nimport { courseIdMixin, eventIdMixin } from \"@/mixins\";\nimport { EventParticipation, User } from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport Avatar from \"../ui/Avatar.vue\";\nimport Btn from \"../ui/Btn.vue\";\nexport default defineComponent({\n\tname: \"StudentRenderer\",\n\tprops: {\n\t\tparams: {\n\t\t\ttype: Object as PropType<{\n\t\t\t\tvalue: User;\n\t\t\t}>,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tmixins: [eventIdMixin, courseIdMixin],\n\tmethods: {},\n\tcomputed: {},\n\tcomponents: {\n\t\t// Btn,\n\t\tAvatar,\n\t},\n});\n","import { render } from \"./StudentRenderer.vue?vue&type=template&id=361c3da6&ts=true\"\nimport script from \"./StudentRenderer.vue?vue&type=script&lang=ts\"\nexport * from \"./StudentRenderer.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_ctx.params.value.id)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 0,\n style: {\"margin-top\":\"9px\",\"line-height\":\"1\"},\n class: \"flex\",\n target: \"_blank\",\n to: {\n\t\t\tname: 'ExamParticipationFull',\n\t\t\tparams: { participationId: _ctx.params.value.id, examId: _ctx.params.value.examId },\n\t\t}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Btn, {\n variant: 'icon',\n outline: true\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.params.value.score), 1)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"to\"]))\n : _createCommentVNode(\"\", true)\n}","\nimport { EventParticipation } from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport { icons as assessmentStateIcons } from \"@/assets/assessmentStateIcons\";\nimport Btn from \"../ui/Btn.vue\";\n\nexport default defineComponent({\n\tname: \"CourseInsightsExamParticipationRenderer\",\n\tprops: {\n\t\tparams: {\n\t\t\ttype: Object as PropType<{\n\t\t\t\tvalue: {\n\t\t\t\t\tid: string;\n\t\t\t\t\texamId: string;\n\t\t\t\t\tscore: null | string | number;\n\t\t\t\t};\n\t\t\t}>,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {};\n\t},\n\tmethods: {},\n\tcomputed: {},\n\tcomponents: { Btn },\n});\n","import { render } from \"./CourseInsightsExamParticipationRenderer.vue?vue&type=template&id=288612d0&ts=true\"\nimport script from \"./CourseInsightsExamParticipationRenderer.vue?vue&type=script&lang=ts\"\nexport * from \"./CourseInsightsExamParticipationRenderer.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n class: \"ag-cell-label-container\",\n role: \"presentation\"\n}\nconst _hoisted_2 = {\n ref: \"eMenu\",\n class: \"ag-header-icon ag-header-cell-menu-button\"\n}\nconst _hoisted_3 = {\n ref: \"eLabel\",\n class: \"ag-header-cell-label\",\n role: \"presentation\"\n}\nconst _hoisted_4 = {\n ref: \"eSortOrder\",\n class: \"ag-header-icon ag-sort-order\"\n}\nconst _hoisted_5 = {\n ref: \"eSortAsc\",\n class: \"ag-header-icon ag-sort-ascending-icon\"\n}\nconst _hoisted_6 = {\n ref: \"eSortDesc\",\n class: \"ag-header-icon ag-sort-descending-icon\"\n}\nconst _hoisted_7 = {\n ref: \"eSortNone\",\n class: \"ag-header-icon ag-sort-none-icon\"\n}\nconst _hoisted_8 = {\n ref: \"eText\",\n class: \"ag-header-cell-text\",\n style: {\"white-space\":\"break-spaces\",\"max-width\":\"150px\"},\n role: \"columnheader\"\n}\nconst _hoisted_9 = {\n ref: \"eFilter\",\n class: \"ag-header-icon ag-filter-icon\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"span\", _hoisted_2, null, 512),\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"span\", _hoisted_4, null, 512),\n _createElementVNode(\"span\", _hoisted_5, null, 512),\n _createElementVNode(\"span\", _hoisted_6, null, 512),\n _createElementVNode(\"span\", _hoisted_7, null, 512),\n _createElementVNode(\"span\", _hoisted_8, [\n _createVNode(_component_router_link, {\n class: \"hover:text-primary hover:underline overflow-ellipsis overflow-hidden\",\n target: \"_blank\",\n style: {\"display\":\"-webkit-box\",\"-webkit-line-clamp\":\"2\",\"-webkit-box-orient\":\"vertical\"},\n to: {\n\t\t\t\t\t\tname: 'ExamResults',\n\t\t\t\t\t\tparams: { examId: _ctx.examId },\n\t\t\t\t\t}\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.params.displayName), 1)\n ]),\n _: 1\n }, 8, [\"to\"])\n ], 512),\n _createElementVNode(\"span\", _hoisted_9, null, 512)\n ], 512)\n ]))\n}","\nimport { EventParticipation } from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport { icons as assessmentStateIcons } from \"@/assets/assessmentStateIcons\";\nimport Btn from \"../ui/Btn.vue\";\nimport { IHeaderParams } from \"ag-grid-community\";\n\nexport default defineComponent({\n\tname: \"CourseInsightsExamHeaderRenderer\",\n\tprops: {\n\t\tparams: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {};\n\t},\n\tmethods: {},\n\tcomputed: {\n\t\texamId() {\n\t\t\treturn this.params.column.getColId().split(\"_\")[1];\n\t\t},\n\t},\n\tcomponents: {},\n});\n","import { render } from \"./CourseInsightsExamHeaderRenderer.vue?vue&type=template&id=53b52e08&ts=true\"\nimport script from \"./CourseInsightsExamHeaderRenderer.vue?vue&type=script&lang=ts\"\nexport * from \"./CourseInsightsExamHeaderRenderer.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { blockingDialogMixin, courseIdMixin, loadingMixin } from \"@/mixins\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport {\n\tforceFileDownload,\n\tgetColorFromString,\n\tlogAnalyticsEvent,\n\troundToTwoDecimals,\n\tsetErrorNotification,\n} from \"@/utils\";\nimport DataTable from \"@/components/ui/DataTable.vue\";\nimport { EventSearchFilter, getCourseParticipationReport } from \"@/api\";\nimport {\n\tEventState,\n\tEventType,\n\tUser,\n\tEvent,\n\tEventParticipation,\n\tCourseExamParticipationReport,\n\tuserMatchesSearch,\n} from \"@/models\";\nimport { getCourseInsightsHeaders } from \"@/const\";\nimport CheckboxGroup from \"@/components/ui/CheckboxGroup.vue\";\nimport { SelectableOption } from \"@/interfaces\";\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport { normalizeOptionalStringContainingNumber } from \"@/api/utils\";\nimport StudentCard from \"@/components/shared/StudentCard.vue\";\nimport { mapStores } from \"pinia\";\nimport { useMainStore } from \"@/stores/mainStore\";\nimport { getCourseExamParticipationsReportAsCsv } from \"@/reports/courseExamsParticipations\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport Tabs from \"@/components/ui/Tabs.vue\";\nimport TextInput from \"@/components/ui/TextInput.vue\";\nimport Dialog from \"@/components/ui/Dialog.vue\";\nimport UserPicker from \"@/components/shared/UserPicker.vue\";\nimport { useMetaStore } from \"@/stores/metaStore\";\nimport { useGoogleIntegrationsStore } from \"../../integrations/stores/googleIntegrationsStore\";\nimport { GoogleClassroomCourseTwin } from \"../../integrations/classroom/interfaces\";\nimport StudentRenderer from \"@/components/datatable/StudentRenderer.vue\";\nimport CourseInsightsExamParticipationRenderer from \"../../components/datatable/CourseInsightsExamParticipationRenderer.vue\";\nimport CourseInsightsExamHeaderRenderer from \"../../components/datatable/CourseInsightsExamHeaderRenderer.vue\";\nimport DropdownMenu from \"../../components/ui/DropdownMenu.vue\";\nimport Dropdown from \"../../components/ui/Dropdown.vue\";\nimport NumberInput from \"../../components/ui/NumberInput.vue\";\nimport Spinner from \"../../components/ui/Spinner.vue\";\n\ninterface ExamsTableRow {\n\tuser: User;\n\tscoreAverage: number;\n}\n\nexport default defineComponent({\n\tname: \"CourseInsights\",\n\tmixins: [courseIdMixin, loadingMixin, blockingDialogMixin],\n\tprops: {},\n\tcomponents: {\n\t\tDataTable,\n\t\tCheckboxGroup,\n\t\tBtn,\n\t\tStudentCard,\n\t\tTabs,\n\t\tTextInput,\n\t\tDialog,\n\t\tUserPicker,\n\t\t// eslint-disable-next-line vue/no-unused-components\n\t\tStudentRenderer,\n\t\t// eslint-disable-next-line vue/no-unused-components\n\t\tCourseInsightsExamParticipationRenderer,\n\t\t// eslint-disable-next-line vue/no-unused-components\n\t\tCourseInsightsExamHeaderRenderer,\n\t\tDropdownMenu,\n\t\tDropdown,\n\t\tNumberInput,\n\t\tSpinner,\n\t},\n\tbeforeUnmount() {\n\t\tif (this.fetchUserPollingHandle) {\n\t\t\tclearInterval(this.fetchUserPollingHandle);\n\t\t}\n\t},\n\twatch: {\n\t\tviewMode(newVal) {\n\t\t\tlogAnalyticsEvent(\"changeCourseInsightsViewMode\", {\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\tto: newVal,\n\t\t\t});\n\t\t\twindow.location.hash = newVal;\n\t\t},\n\t\tusersToEnroll: {\n\t\t\thandler(newVal) {\n\t\t\t\t// this will enable the `unsavedChanges` getter which will prompt\n\t\t\t\t// user for confirmation when leaving the window\n\t\t\t\tthis.metaStore.saving = newVal.ids.length > 0 || newVal.emails.length > 0;\n\t\t\t},\n\t\t\tdeep: true,\n\t\t},\n\t\texamsViewSelectedFilterOption(newVal) {\n\t\t\tif (newVal !== \"no_filter\") {\n\t\t\t\tthis.$nextTick(() =>\n\t\t\t\t\tdocument.getElementById(\"grade-filter-value-input\")?.focus(),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.examsViewAverageGradeFilterValue = 0;\n\t\t\t}\n\t\t},\n\t},\n\tasync created() {\n\t\tconst hash = window.location.hash.replace(\"#\", \"\");\n\t\t// check for invalid hash\n\t\tif ([\"students\", \"exams\"].includes(hash)) {\n\t\t\tthis.viewMode = hash as \"students\" | \"exams\";\n\t\t}\n\n\t\tawait this.withLoading(async () => {\n\t\t\tawait Promise.all([this.fetchUsers(), this.fetchExams()]);\n\t\t});\n\n\t\tthis.googleClassroomCourseTwin = await this.googleIntegrationStore.getCourseTwin(\n\t\t\tthis.courseId,\n\t\t);\n\n\t\tawait this.withLocalLoading(async () => {\n\t\t\t// initially enable all exams in the table\n\t\t\tthis.selectedExamsIds = this.mainStore.exams.map(e => e.id);\n\t\t\tthis.participations = await getCourseParticipationReport(this.courseId);\n\t\t});\n\n\t\tlogAnalyticsEvent(\"viewedCourseStats\", { courseId: this.courseId });\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tloadingEnrolledStudents: false,\n\t\t\texamSelectionExpanded: false,\n\t\t\tloadingExams: false,\n\t\t\tgridApi: null as any,\n\t\t\tcolumnApi: null as any,\n\t\t\tparticipations: {} as CourseExamParticipationReport,\n\t\t\tselectedExamsIds: [] as string[],\n\t\t\tviewMode: \"students\" as \"exams\" | \"students\",\n\t\t\tdownloadingReport: false,\n\t\t\tusersViewSearchText: \"\",\n\t\t\tusersToEnroll: { ids: [], emails: [] } as {\n\t\t\t\tids: string[];\n\t\t\t\temails: string[];\n\t\t\t},\n\t\t\tenrollingUsers: false,\n\t\t\tgoogleClassroomCourseTwin: null as null | GoogleClassroomCourseTwin,\n\t\t\tshowClassroomSyncDialog: false,\n\t\t\tsyncingClassroomRoster: false,\n\t\t\tfetchUserPollingHandle: null as null | number,\n\t\t\t// filtering on exam view\n\t\t\texamsViewSearchText: \"\",\n\t\t\texamsViewSelectedFilterOption: \"no_filter\",\n\t\t\texamsViewAverageGradeFilterValue: 0,\n\t\t\texamsViewSelectedSortingOption: 0,\n\t\t\texamsViewSortingOptionsExpanded: false,\n\t\t};\n\t},\n\tmethods: {\n\t\tgetRowId(data: any) {\n\t\t\treturn data.id;\n\t\t},\n\t\tasync onSyncClassroomRoster() {\n\t\t\ttry {\n\t\t\t\tthis.syncingClassroomRoster = true;\n\t\t\t\tawait this.googleIntegrationStore.syncCourseRoster(this.courseId);\n\t\t\t\tthis.showClassroomSyncDialog = false;\n\t\t\t\tthis.metaStore.showSuccessFeedback(\n\t\t\t\t\t_(\"integrations.classroom.roster_sync_scheduled\"),\n\t\t\t\t\t5000,\n\t\t\t\t);\n\t\t\t\tthis.fetchUserPollingHandle = setInterval(() => {\n\t\t\t\t\tthis.fetchUsers();\n\t\t\t\t}, 10_000);\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t} finally {\n\t\t\t\tthis.syncingClassroomRoster = false;\n\t\t\t}\n\t\t},\n\t\tasync fetchUsers() {\n\t\t\tthis.loadingEnrolledStudents = true;\n\t\t\ttry {\n\t\t\t\tawait Promise.all([\n\t\t\t\t\tthis.mainStore.getCourseEnrolledUsers({ courseId: this.courseId }),\n\t\t\t\t\tthis.mainStore.getCourseActiveUsers({ courseId: this.courseId }),\n\t\t\t\t]);\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t} finally {\n\t\t\t\tthis.loadingEnrolledStudents = false;\n\t\t\t}\n\t\t},\n\t\tasync fetchExams() {\n\t\t\tthis.loadingExams = true;\n\t\t\ttry {\n\t\t\t\tawait this.mainStore.getEvents({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\tfilters: {\n\t\t\t\t\t\tevent_type: EventType.EXAM,\n\t\t\t\t\t} as EventSearchFilter,\n\t\t\t\t});\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t} finally {\n\t\t\t\tthis.loadingExams = false;\n\t\t\t}\n\t\t},\n\t\tasync onEnrollUsers() {\n\t\t\tthis.showBlockingDialog = true;\n\t\t\tconst choice = await this.getBlockingBinaryDialogChoice();\n\t\t\tif (!choice) {\n\t\t\t\tthis.showBlockingDialog = false;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tthis.enrollingUsers = true;\n\t\t\t\tawait this.mainStore.enrollUsersInCourse({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\tuserIds: this.usersToEnroll.ids,\n\t\t\t\t\temails: this.usersToEnroll.emails,\n\t\t\t\t});\n\t\t\t\t// re-fetch enrolled users to include new ones\n\t\t\t\tawait this.mainStore.getCourseEnrolledUsers({ courseId: this.courseId });\n\t\t\t\t// cleanup\n\t\t\t\tthis.metaStore.showSuccessFeedback();\n\t\t\t\tthis.usersToEnroll = {\n\t\t\t\t\tids: [],\n\t\t\t\t\temails: [],\n\t\t\t\t};\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t} finally {\n\t\t\t\tthis.enrollingUsers = false;\n\t\t\t\tthis.showBlockingDialog = false;\n\t\t\t}\n\t\t},\n\t\tdownloadReport() {\n\t\t\tthis.downloadingReport = true;\n\t\t\ttry {\n\t\t\t\tconst filteredSortedUsers = this.tableData.map((row: ExamsTableRow) => ({\n\t\t\t\t\t...row.user,\n\t\t\t\t\tscore_average: row.scoreAverage,\n\t\t\t\t}));\n\t\t\t\tconst content = getCourseExamParticipationsReportAsCsv(\n\t\t\t\t\tthis.participations,\n\t\t\t\t\tfilteredSortedUsers,\n\t\t\t\t\tthis.selectedExams,\n\t\t\t\t).replace(/(\\\\r)?\\\\n/g, \"\\n\");\n\t\t\t\tforceFileDownload(\n\t\t\t\t\t{\n\t\t\t\t\t\tdata: content,\n\t\t\t\t\t},\n\t\t\t\t\tthis.currentCourse.name + \"_report.csv\",\n\t\t\t\t);\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t} finally {\n\t\t\t\tsetTimeout(() => (this.downloadingReport = false), 150);\n\t\t\t}\n\t\t},\n\t\t// exams view sorting & filtering\n\t\tsetSortingOption(index: number) {\n\t\t\tthis.examsViewSelectedSortingOption = index;\n\t\t\tthis.examsViewSortingOptionsExpanded = false;\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore, useMetaStore, useGoogleIntegrationsStore),\n\t\t// bookkeeping\n\t\tclassroomIntegrationActive() {\n\t\t\treturn this.googleClassroomCourseTwin !== null;\n\t\t},\n\t\tviewModesAsOptions(): SelectableOption[] {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tvalue: \"students\",\n\t\t\t\t\ticons: [\"people\"],\n\t\t\t\t\tcontent: _(\"course_insights.enrolled_students\"),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tvalue: \"exams\",\n\t\t\t\t\ticons: [\"table_chart\"],\n\t\t\t\t\tcontent: _(\"course_insights.exams_stats\"),\n\t\t\t\t},\n\t\t\t];\n\t\t},\n\t\t// users view & enrollment\n\t\tfilteredEnrolledUsers() {\n\t\t\tconst enrolledUsers = this.mainStore.enrolledUsers;\n\t\t\treturn enrolledUsers.filter(u => {\n\t\t\t\treturn userMatchesSearch(this.usersViewSearchText, u);\n\t\t\t});\n\t\t},\n\t\tusersToEnrollCount() {\n\t\t\treturn this.usersToEnroll.emails.length + this.usersToEnroll.ids.length;\n\t\t},\n\t\tusersAsOptions(): SelectableOption[] {\n\t\t\treturn this.mainStore.paginatedUsers.data.map(u => ({\n\t\t\t\tvalue: u.id,\n\t\t\t\tcontent: u.full_name,\n\t\t\t\tdata: u,\n\t\t\t}));\n\t\t},\n\t\t// exams view data, sorting & filtering\n\t\texamViewFilteringOptions(): SelectableOption[] {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tvalue: \"no_filter\",\n\t\t\t\t\tcontent: _(\"course_insights.no_filter\"),\n\t\t\t\t\tdata: () => true,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tvalue: \"average_greater_than\",\n\t\t\t\t\tcontent: _(\"course_insights.filter_average_greater_than\"),\n\t\t\t\t\tdata: (row: ExamsTableRow) =>\n\t\t\t\t\t\trow.scoreAverage >= (this.examsViewAverageGradeFilterValue ?? 0),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tvalue: \"average_less_than\",\n\t\t\t\t\tcontent: _(\"course_insights.filter_average_less_than\"),\n\t\t\t\t\tdata: (row: ExamsTableRow) =>\n\t\t\t\t\t\trow.scoreAverage <= (this.examsViewAverageGradeFilterValue ?? 0),\n\t\t\t\t},\n\t\t\t];\n\t\t},\n\t\texamsViewSortingOptions() {\n\t\t\tconst options: {\n\t\t\t\tlabel: string;\n\t\t\t\tsortFn: (r1: ExamsTableRow, r2: ExamsTableRow) => number;\n\t\t\t}[] = [\n\t\t\t\t{\n\t\t\t\t\tlabel: _(\"event_monitor.sort_options.alphabetical\"),\n\t\t\t\t\tsortFn: (r1, r2) => {\n\t\t\t\t\t\tconst lastName1 = r1.user.last_name;\n\t\t\t\t\t\tconst lastName2 = r2.user.last_name;\n\t\t\t\t\t\tif (lastName1 > lastName2) {\n\t\t\t\t\t\t\treturn 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (lastName1 < lastName2) {\n\t\t\t\t\t\t\treturn -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: _(\"event_monitor.sort_options.alphabetical_reverse\"),\n\t\t\t\t\tsortFn: (r1, r2) => {\n\t\t\t\t\t\tconst lastName1 = r1.user.last_name;\n\t\t\t\t\t\tconst lastName2 = r2.user.last_name;\n\t\t\t\t\t\tif (lastName1 > lastName2) {\n\t\t\t\t\t\t\treturn -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (lastName1 < lastName2) {\n\t\t\t\t\t\t\treturn 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: _(\"event_monitor.sort_options.average_increasing\"),\n\t\t\t\t\tsortFn: (r1, r2) => {\n\t\t\t\t\t\tconst average1 = r1.scoreAverage;\n\t\t\t\t\t\tconst average2 = r2.scoreAverage;\n\t\t\t\t\t\tif (average1 > average2) {\n\t\t\t\t\t\t\treturn 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (average1 < average2) {\n\t\t\t\t\t\t\treturn -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: _(\"event_monitor.sort_options.average_decreasing\"),\n\t\t\t\t\tsortFn: (r1, r2) => {\n\t\t\t\t\t\tconst average1 = r1.scoreAverage;\n\t\t\t\t\t\tconst average2 = r2.scoreAverage;\n\t\t\t\t\t\tif (average1 > average2) {\n\t\t\t\t\t\t\treturn -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (average1 < average2) {\n\t\t\t\t\t\t\treturn 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t];\n\t\t\treturn options;\n\t\t},\n\t\trawTableData() {\n\t\t\tif (this.loading) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst filteredUsers = this.activeUsersForSelectedExams;\n\t\t\tconst exams = this.mainStore.exams;\n\n\t\t\tconst getScoreSumFn = (u: User) =>\n\t\t\t\tMath.round(\n\t\t\t\t\tObject.entries(this.participations)\n\t\t\t\t\t\t.filter(([eventId]) =>\n\t\t\t\t\t\t\tthis.selectedExamsIds.map(i => String(i)).includes(String(eventId)),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.map(([, participations]) => participations)\n\t\t\t\t\t\t.flat()\n\t\t\t\t\t\t.filter(p => p.user == u.id)\n\t\t\t\t\t\t.map(p => parseFloat(p.score ?? \"0\"))\n\t\t\t\t\t\t.reduce((a, b) => a + b, 0) * 100,\n\t\t\t\t) / 100;\n\n\t\t\treturn filteredUsers.map(u => ({\n\t\t\t\tuser: u, // this isn't used directly by the table, but it's useful for filtering & sorting\n\t\t\t\tid: u.id,\n\t\t\t\temail: u.email,\n\t\t\t\tfullName: u.full_name,\n\t\t\t\tstudent: u,\n\t\t\t\tmat: u.mat,\n\t\t\t\tcourse: u.course,\n\t\t\t\t...exams.reduce((acc, e) => {\n\t\t\t\t\tconst participation = this.participations[e.id]?.find(p => p.user == u.id);\n\t\t\t\t\tconst score = normalizeOptionalStringContainingNumber(participation?.score);\n\t\t\t\t\tacc[\"exam_\" + e.id] = {\n\t\t\t\t\t\tid: participation?.id,\n\t\t\t\t\t\texamId: e.id,\n\t\t\t\t\t\tscore,\n\t\t\t\t\t};\n\t\t\t\t\treturn acc;\n\t\t\t\t}, {} as any),\n\t\t\t\tscore_sum: getScoreSumFn(u),\n\t\t\t\tscoreAverage: roundToTwoDecimals(\n\t\t\t\t\tgetScoreSumFn(u) /\n\t\t\t\t\t\tthis.selectedExams.filter(\n\t\t\t\t\t\t\t// only consider exams the user has participated in\n\t\t\t\t\t\t\te =>\n\t\t\t\t\t\t\t\t(this.participations[e.id] ?? []).findIndex(p => p.user == u.id) !== -1,\n\t\t\t\t\t\t).length,\n\t\t\t\t),\n\t\t\t}));\n\t\t},\n\t\ttableData() {\n\t\t\treturn this.rawTableData\n\t\t\t\t.filter(\n\t\t\t\t\trow =>\n\t\t\t\t\t\t// if search text is provided, only show users that match it\n\t\t\t\t\t\t(!this.examsViewSearchText.trim() ||\n\t\t\t\t\t\t\tuserMatchesSearch(this.examsViewSearchText, row.user)) &&\n\t\t\t\t\t\t// if filter is provided, only show users that match it\n\t\t\t\t\t\tthis.examViewFilteringOptions\n\t\t\t\t\t\t\t.find(o => o.value === this.examsViewSelectedFilterOption)!\n\t\t\t\t\t\t\t// the filter function is stored in the `data` property of the filtering option\n\t\t\t\t\t\t\t.data(row),\n\t\t\t\t)\n\t\t\t\t.sort(this.examsViewSortingOptions[this.examsViewSelectedSortingOption].sortFn);\n\t\t},\n\t\texamsAsSelectableOptions(): SelectableOption[] {\n\t\t\treturn (\n\t\t\t\t[...this.mainStore.exams]\n\t\t\t\t\t// TODO use moment\n\t\t\t\t\t.sort((a, b) =>\n\t\t\t\t\t\tnew Date(b.begin_timestamp ?? \"\") < new Date(a.begin_timestamp ?? \"\")\n\t\t\t\t\t\t\t? 1\n\t\t\t\t\t\t\t: -1,\n\t\t\t\t\t)\n\t\t\t\t\t.map(e => ({\n\t\t\t\t\t\tvalue: e.id,\n\t\t\t\t\t\tcontent:\n\t\t\t\t\t\t\te.name.trim().length > 0 ? e.name.trim() : _(\"event_preview.unnamed_event\"),\n\t\t\t\t\t}))\n\t\t\t);\n\t\t},\n\t\tactiveUsersForSelectedExams() {\n\t\t\tif (this.loading) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst users = this.mainStore.activeUsers;\n\t\t\treturn users.filter(u =>\n\t\t\t\tthis.selectedExams.some(\n\t\t\t\t\te =>\n\t\t\t\t\t\ttypeof (this.participations[e.id] ?? []).find(p => p.user == u.id) !==\n\t\t\t\t\t\t\"undefined\",\n\t\t\t\t),\n\t\t\t);\n\t\t},\n\t\tclosedExamIds() {\n\t\t\treturn this.mainStore.exams\n\t\t\t\t.filter(e => e.state === EventState.CLOSED)\n\t\t\t\t.map(e => e.id);\n\t\t},\n\t\tselectedExams(): Event[] {\n\t\t\treturn this.mainStore.exams.filter(e =>\n\t\t\t\tthis.selectedExamsIds.map(i => String(i)).includes(String(e.id)),\n\t\t\t);\n\t\t},\n\t\ttableHeaders() {\n\t\t\t// TODO sort exams by increasing begin timestamp\n\t\t\t// TODO add ability to select which exams to show\n\t\t\treturn getCourseInsightsHeaders(this.selectedExams, this.examsColors);\n\t\t},\n\t\texamsColors(): Record {\n\t\t\treturn this.mainStore.exams.reduce((acc, e) => {\n\t\t\t\tacc[e.id] = getColorFromString(e.name);\n\t\t\t\treturn acc;\n\t\t\t}, {} as Record);\n\t\t},\n\t},\n});\n","import { render } from \"./CourseInsights.vue?vue&type=template&id=3b3afe76&ts=true\"\nimport script from \"./CourseInsights.vue?vue&type=script&lang=ts\"\nexport * from \"./CourseInsights.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_GoogleClassroomIntegrationSettings = _resolveComponent(\"GoogleClassroomIntegrationSettings\")!\n\n return (_openBlock(), _createBlock(_component_GoogleClassroomIntegrationSettings))\n}","import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createBlock as _createBlock } from \"vue\"\nimport _imports_0 from '@/assets/evo_classroom.png'\n\n\nconst _hoisted_1 = {\n key: 0,\n class: \"mb-12 card bg-light\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-full flex\" }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n src: _imports_0,\n style: {\"height\":\"50px\"},\n class: \"mx-auto mb-8\"\n })\n], -1)\nconst _hoisted_3 = { class: \"text-lg mb-4\" }\nconst _hoisted_4 = { class: \"ml-2\" }\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons text-success\" }, \"check_circle\", -1)\nconst _hoisted_6 = {\n key: 1,\n class: \"mt-4\"\n}\nconst _hoisted_7 = {\n key: 0,\n class: \"mt-12 flex flex-col space-y-4\"\n}\nconst _hoisted_8 = { class: \"flex flex-col items-center mb-4 mt-4\" }\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"img\", {\n src: _imports_0,\n style: {\"height\":\"40px\"}\n}, null, -1)\nconst _hoisted_10 = { class: \"font-normal mt-2\" }\nconst _hoisted_11 = { class: \"mt-8 flex items-center space-x-2 banner banner-light\" }\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-yellow-400 material-icons-outlined\" }, \" lightbulb \", -1)\nconst _hoisted_13 = { class: \"mb-2\" }\nconst _hoisted_14 = { class: \"banner banner-danger my-4\" }\nconst _hoisted_15 = { class: \"flex space-x-1 items-center\" }\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined\" }, \" error_outline \", -1)\nconst _hoisted_17 = { class: \"flex flex-col space-y-2\" }\nconst _hoisted_18 = {\n key: 1,\n class: \"\"\n}\nconst _hoisted_19 = {\n key: 0,\n class: \"flex flex-col items-center mt-2 mb-auto\"\n}\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"span\", {\n class: \"mb-4 opacity-50 material-icons-outlined\",\n style: {\"font-size\":\"5rem\"}\n}, \"error_outline\", -1)\nconst _hoisted_21 = { class: \"mb-4 select-none opacity-70\" }\nconst _hoisted_22 = { key: 1 }\nconst _hoisted_23 = {\n key: 0,\n class: \"text-muted\"\n}\nconst _hoisted_24 = { key: 1 }\nconst _hoisted_25 = { class: \"grid md:grid-cols-3 2xl:grid-cols-4 gap-4 mt-8\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_GoogleScopeChecker = _resolveComponent(\"GoogleScopeChecker\")!\n const _component_Toggle = _resolveComponent(\"Toggle\")!\n const _component_GoogleClassroomCourseItem = _resolveComponent(\"GoogleClassroomCourseItem\")!\n const _component_ArticleHandle = _resolveComponent(\"ArticleHandle\")!\n const _component_TextInput = _resolveComponent(\"TextInput\")!\n const _component_Dialog = _resolveComponent(\"Dialog\")!\n const _component_Spinner = _resolveComponent(\"Spinner\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n\n return (_openBlock(), _createElementBlock(\"div\", null, [\n (!_ctx.integrationEnabled && !_ctx.firstLoading)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _hoisted_2,\n _createElementVNode(\"p\", _hoisted_3, _toDisplayString(_ctx.$t(\"integrations.classroom.introduction\")), 1),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"ul\", null, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(['exams', 'material', 'roster', 'exam_participations'], (feature) => {\n return _createElementVNode(\"li\", {\n class: \"flex items-start space-x-2 my-2\",\n key: feature\n }, [\n _hoisted_5,\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t(\"integrations.classroom.feature_\" + feature)), 1)\n ])\n }), 64))\n ])\n ])\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_GoogleScopeChecker, {\n class: \"flex flex-col items-center mt-4\",\n role: 'teacher',\n onScopesOk: _cache[0] || (_cache[0] = ($event: any) => (_ctx.scopesVerified = true))\n }),\n (_ctx.scopesVerified)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _createVNode(_component_Toggle, {\n labelOnLeft: true,\n modelValue: _ctx.integrationEnabled,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((_ctx.integrationEnabled) = $event))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"integrations.classroom.enable\")), 1)\n ]),\n _: 1\n }, 8, [\"modelValue\"]),\n (_ctx.integrationEnabled)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [\n _createElementVNode(\"div\", _hoisted_8, [\n _hoisted_9,\n _createElementVNode(\"h4\", _hoisted_10, _toDisplayString(_ctx.currentCourse.name) + \" \" + _toDisplayString(_ctx.$t(\"integrations.classroom.is_paired_with\")) + \": \", 1),\n _createVNode(_component_GoogleClassroomCourseItem, {\n course: _ctx.twinCourse.data,\n class: \"mt-4\"\n }, null, 8, [\"course\"])\n ]),\n _createElementVNode(\"div\", _hoisted_11, [\n _hoisted_12,\n _createVNode(_component_ArticleHandle, {\n articleId: '',\n text: _ctx.$t('integrations.classroom.find_out_features')\n }, null, 8, [\"text\"])\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_Dialog, {\n onNo: _cache[3] || (_cache[3] = ($event: any) => (_ctx.showDisableIntegrationDialog = false)),\n onYes: _cache[4] || (_cache[4] = ($event: any) => (_ctx.onIntegrationDisable())),\n dismissible: true,\n showDialog: _ctx.showDisableIntegrationDialog,\n warning: true,\n yesText: _ctx.disablingIntegration ? _ctx.$t('misc.wait') : _ctx.$t('misc.disable'),\n noText: _ctx.$t('integrations.classroom.keep_active'),\n disableOk: _ctx.disablingIntegration || !_ctx.disableConfirmCheckSuccess\n }, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"integrations.classroom.disable_title\")), 1)\n ]),\n body: _withCtx(() => [\n _createElementVNode(\"p\", _hoisted_13, _toDisplayString(_ctx.$t(\"integrations.classroom.disable_body\")), 1),\n _createElementVNode(\"ul\", null, [\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(['exams', 'material', 'roster', 'exam_participations'], (feature) => {\n return _createElementVNode(\"li\", {\n class: \"list-disc list-inside\",\n key: feature\n }, _toDisplayString(_ctx.$t(\"integrations.classroom.feature_\" + feature)), 1)\n }), 64))\n ]),\n _createElementVNode(\"div\", _hoisted_14, [\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"div\", _hoisted_15, [\n _hoisted_16,\n _createElementVNode(\"h5\", null, _toDisplayString(_ctx.$t(\"misc.warning\")), 1)\n ]),\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t(\"integrations.classroom.disable_warning\")), 1)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_17, [\n _createElementVNode(\"p\", null, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"integrations.classroom.type_course_name_to_disable_integration\")) + \" “\", 1),\n _createElementVNode(\"strong\", null, _toDisplayString(_ctx.currentCourse.name), 1),\n _createTextVNode(\"”: \")\n ]),\n _createVNode(_component_TextInput, {\n modelValue: _ctx.disableConfirmText,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((_ctx.disableConfirmText) = $event))\n }, null, 8, [\"modelValue\"])\n ])\n ]),\n _: 1\n }, 8, [\"showDialog\", \"yesText\", \"noText\", \"disableOk\"]),\n _createVNode(_component_Dialog, {\n showDialog: _ctx.showBlockingDialog,\n onYes: _cache[6] || (_cache[6] = ($event: any) => (_ctx.resolveBlockingDialog(!(_ctx.classroomCourses.length === 0)))),\n onNo: _cache[7] || (_cache[7] = ($event: any) => (_ctx.resolveBlockingDialog(false))),\n yesText: \n\t\t\t\t_ctx.creatingCourseTwin\n\t\t\t\t\t? _ctx.$t('misc.wait')\n\t\t\t\t\t: _ctx.classroomCourses.length === 0\n\t\t\t\t\t? _ctx.$t('dialog.default_ok_text')\n\t\t\t\t\t: _ctx.$t('integrations.classroom.pair_course')\n\t\t\t,\n noText: _ctx.$t('dialog.default_cancel_text'),\n confirmOnly: _ctx.classroomCourses.length === 0,\n disableOk: \n\t\t\t\t(_ctx.classroomCourses.length > 0 && _ctx.selectedClassroomCourseId === null) ||\n\t\t\t\t_ctx.creatingCourseTwin\n\t\t\t,\n large: true\n }, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"integrations.classroom.pair_a_classroom_course\")), 1)\n ]),\n body: _withCtx(() => [\n (_ctx.fetchingClassroomCourses)\n ? (_openBlock(), _createBlock(_component_Spinner, {\n key: 0,\n class: \"mt-4\",\n size: 'xl'\n }))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_18, [\n (_ctx.errorWhileFetchingClassroomCourses)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_19, [\n _hoisted_20,\n _createElementVNode(\"p\", _hoisted_21, _toDisplayString(_ctx.$t(\"misc.an_error_occurred\")), 1),\n _createVNode(_component_Btn, {\n class: \"\",\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.fetchClassroomCourses()))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"misc.try_again\")), 1)\n ]),\n _: 1\n })\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_22, [\n (_ctx.classroomCourses.length > 0)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_23, _toDisplayString(_ctx.$t(\"integrations.classroom.select_course_to_pair\")) + \" \" + _toDisplayString(_ctx.currentCourse.name) + \". \", 1))\n : (_openBlock(), _createElementBlock(\"p\", _hoisted_24, _toDisplayString(_ctx.$t(\"integrations.classroom.you_dont_teach_any_courses\")), 1)),\n _createElementVNode(\"div\", _hoisted_25, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.classroomCourses, (course) => {\n return (_openBlock(), _createBlock(_component_GoogleClassroomCourseItem, {\n tabindex: \"0\",\n selected: _ctx.selectedClassroomCourseId === course.id,\n onCourseSelected: ($event: any) => (_ctx.selectedClassroomCourseId = course.id),\n course: course,\n key: course.id,\n selectable: true,\n hoverable: true\n }, null, 8, [\"selected\", \"onCourseSelected\", \"course\"]))\n }), 128))\n ])\n ]))\n ]))\n ]),\n _: 1\n }, 8, [\"showDialog\", \"yesText\", \"noText\", \"confirmOnly\", \"disableOk\"])\n ]))\n}","import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, normalizeClass as _normalizeClass, withCtx as _withCtx, createVNode as _createVNode } from \"vue\"\nimport _imports_0 from '@/assets/classroom.png'\n\n\nconst _hoisted_1 = { class: \"flex items-center space-x-2 mb-6\" }\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"img\", {\n src: _imports_0,\n style: {\"width\":\"25px\"}\n}, null, -1)\nconst _hoisted_3 = { class: \"\" }\nconst _hoisted_4 = {\n key: 0,\n style: {\"display\":\"-webkit-box\",\"-webkit-line-clamp\":\"2\",\"-webkit-box-orient\":\"vertical\",\"overflow\":\"hidden\"},\n class: \"mb-2 -mt-4\"\n}\nconst _hoisted_5 = { class: \"overflow-hidden overflow-ellipsis mb-4\" }\nconst _hoisted_6 = [\"href\"]\nconst _hoisted_7 = {\n key: 1,\n class: \"flex w-full mt-auto\"\n}\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg material-icons-outlined\" }, \" done \", -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([{\n\t\t\t'outline-success outline-4 border-transparent': _ctx.selected,\n\t\t\t'hover:border-transparent hover-shadow-elevation hover:bg-light': _ctx.hoverable,\n\t\t}, \"card card-border card-hoverable duration-75 ease-in-out transition-all flex flex-col\"])\n }, [\n _createElementVNode(\"div\", _hoisted_1, [\n _hoisted_2,\n _createElementVNode(\"h4\", _hoisted_3, _toDisplayString(_ctx.course.name), 1)\n ]),\n (_ctx.course.description)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_4, _toDisplayString(_ctx.course.description), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"p\", _hoisted_5, [\n _createElementVNode(\"a\", {\n href: _ctx.course.alternateLink,\n target: \"_blank\"\n }, _toDisplayString(_ctx.course.alternateLink), 9, _hoisted_6)\n ]),\n (_ctx.selectable)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [\n _createVNode(_component_Btn, {\n class: _normalizeClass([\"ml-auto -mr-1 -mb-1\", { 'icon-btn-success': _ctx.selected }]),\n variant: 'icon',\n outline: true,\n tooltip: _ctx.$t('misc.select'),\n forceActive: _ctx.selected,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('courseSelected')))\n }, {\n default: _withCtx(() => [\n _hoisted_8\n ]),\n _: 1\n }, 8, [\"tooltip\", \"forceActive\", \"class\"])\n ]))\n : _createCommentVNode(\"\", true)\n ], 2))\n}","\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport { GoogleClassroomCourseData } from \"@/integrations/classroom/interfaces\";\nimport Btn from \"@/components/ui/Btn.vue\";\nexport default defineComponent({\n\tname: \"GoogleClassroomCourseItem\",\n\tprops: {\n\t\tcourse: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\tselected: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tselectable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\thoverable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tmethods: {},\n\tcomputed: {},\n\tcomponents: { Btn },\n});\n","import { render } from \"./GoogleClassroomCourseItem.vue?vue&type=template&id=bed427d4&ts=true\"\nimport script from \"./GoogleClassroomCourseItem.vue?vue&type=script&lang=ts\"\nexport * from \"./GoogleClassroomCourseItem.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport GoogleScopeChecker from \"@/integrations/components/GoogleScopeChecker.vue\";\nimport { blockingDialogMixin, courseIdMixin, loadingMixin } from \"@/mixins\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport { CLASSROOM_TEACHER_SCOPES } from \"@/integrations/classroom/const\";\nimport Toggle from \"@/components/ui/Toggle.vue\";\nimport GoogleClassroomCourseItem from \"@/integrations/classroom/components/GoogleClassroomCourseItem.vue\";\nimport { mapStores } from \"pinia\";\nimport { useGoogleIntegrationsStore } from \"@/integrations/stores/googleIntegrationsStore\";\nimport { GoogleClassroomCourseData } from \"@/integrations/classroom/interfaces\";\nimport { setErrorNotification } from \"@/utils\";\nimport Dialog from \"@/components/ui/Dialog.vue\";\nimport Spinner from \"@/components/ui/Spinner.vue\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport { useMetaStore } from \"@/stores/metaStore\";\nimport ArticleHandle from \"@/components/shared/HelpCenter/ArticleHandle.vue\";\nimport TextInput from \"@/components/ui/TextInput.vue\";\nexport default defineComponent({\n\tname: \"GoogleClassroomIntegrationSettings\",\n\tprops: {},\n\tmixins: [courseIdMixin, blockingDialogMixin, loadingMixin],\n\tasync created() {\n\t\tconsole.log(this.googleIntegrationStore.createCourseTwin);\n\t\tawait this.withFirstLoading(\n\t\t\tasync () => await this.googleIntegrationStore.getCourseTwin(this.courseId),\n\t\t);\n\t},\n\twatch: {\n\t\tshowDisableIntegrationDialog(newVal) {\n\t\t\tif (!newVal) {\n\t\t\t\t// reset confirm text when dialog gets closed\n\t\t\t\tthis.disableConfirmText = \"\";\n\t\t\t}\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tscopesVerified: false,\n\t\t\tclassroomScopes: CLASSROOM_TEACHER_SCOPES,\n\t\t\tselectedClassroomCourseId: null as string | null,\n\t\t\tfetchingClassroomCourses: false,\n\t\t\tcreatingCourseTwin: false,\n\t\t\tdisablingIntegration: false,\n\t\t\tclassroomCourses: [] as GoogleClassroomCourseData[],\n\t\t\terrorWhileFetchingClassroomCourses: false,\n\t\t\tshowDisableIntegrationDialog: false,\n\t\t\tdisableConfirmText: \"\",\n\t\t};\n\t},\n\tmethods: {\n\t\tasync onIntegrationEnable() {\n\t\t\tthis.fetchClassroomCourses();\n\t\t\tconst choice = await this.getBlockingBinaryDialogChoice();\n\t\t\tif (!choice) {\n\t\t\t\tthis.selectedClassroomCourseId = null;\n\t\t\t\tthis.showBlockingDialog = false;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tthis.creatingCourseTwin = true;\n\t\t\t\tawait this.googleIntegrationStore.createCourseTwin(\n\t\t\t\t\tthis.courseId,\n\t\t\t\t\tthis.selectedClassroomCourseId as string,\n\t\t\t\t);\n\t\t\t\tthis.metaStore.showSuccessFeedback();\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t} finally {\n\t\t\t\tthis.creatingCourseTwin = false;\n\t\t\t\tthis.showBlockingDialog = false;\n\t\t\t}\n\t\t},\n\t\tasync fetchClassroomCourses() {\n\t\t\tthis.classroomCourses = [];\n\t\t\tthis.errorWhileFetchingClassroomCourses = false;\n\t\t\tthis.fetchingClassroomCourses = true;\n\t\t\ttry {\n\t\t\t\tthis.classroomCourses =\n\t\t\t\t\tawait this.googleIntegrationStore.getGoogleClassroomCoursesTaughtByCurrentUser();\n\t\t\t} catch (e) {\n\t\t\t\tthis.errorWhileFetchingClassroomCourses = true;\n\t\t\t} finally {\n\t\t\t\tthis.fetchingClassroomCourses = false;\n\t\t\t}\n\t\t},\n\t\tasync onIntegrationDisable() {\n\t\t\ttry {\n\t\t\t\tawait this.googleIntegrationStore.partialUpdateCourseTwin(this.courseId, {\n\t\t\t\t\tenabled: false,\n\t\t\t\t});\n\t\t\t\tthis.showDisableIntegrationDialog = false;\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t} finally {\n\t\t\t\tthis.disablingIntegration = false;\n\t\t\t}\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useGoogleIntegrationsStore, useMetaStore),\n\t\tintegrationEnabled: {\n\t\t\tget() {\n\t\t\t\treturn this.googleIntegrationStore.courseTwins[this.courseId]?.enabled ?? false;\n\t\t\t},\n\t\t\tasync set(val: boolean) {\n\t\t\t\tif (val) {\n\t\t\t\t\tawait this.onIntegrationEnable();\n\t\t\t\t} else {\n\t\t\t\t\tthis.showDisableIntegrationDialog = true;\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\ttwinCourse() {\n\t\t\treturn this.googleIntegrationStore.courseTwins[this.courseId];\n\t\t},\n\t\tdisableConfirmCheckSuccess() {\n\t\t\tconst normalize = (text: string) => text.trim().toLocaleLowerCase();\n\t\t\treturn normalize(this.currentCourse.name) === normalize(this.disableConfirmText);\n\t\t},\n\t},\n\tcomponents: {\n\t\tGoogleScopeChecker,\n\t\tToggle,\n\t\tDialog,\n\t\tSpinner,\n\t\tGoogleClassroomCourseItem,\n\t\tBtn,\n\t\tArticleHandle,\n\t\tTextInput,\n\t},\n});\n","import { render } from \"./GoogleClassroomIntegrationSettings.vue?vue&type=template&id=4609ae28&ts=true\"\nimport script from \"./GoogleClassroomIntegrationSettings.vue?vue&type=script&lang=ts\"\nexport * from \"./GoogleClassroomIntegrationSettings.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport GoogleClassroomIntegrationSettings from \"@/integrations/classroom/views/GoogleClassroomIntegrationSettings.vue\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nexport default defineComponent({\n\tname: \"CourseIntegrations\",\n\tprops: {},\n\tmethods: {},\n\tcomputed: {},\n\tcomponents: { GoogleClassroomIntegrationSettings },\n});\n","import { render } from \"./CourseIntegrations.vue?vue&type=template&id=469eb70d&ts=true\"\nimport script from \"./CourseIntegrations.vue?vue&type=script&lang=ts\"\nexport * from \"./CourseIntegrations.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, withCtx as _withCtx, renderList as _renderList, Fragment as _Fragment, createBlock as _createBlock, createTextVNode as _createTextVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"h-full\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"flex items-center space-x-2 mt-4 mb-12\"\n}\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined icon-light\" }, \"person_add\", -1)\nconst _hoisted_4 = { class: \"flex items-center space-x-4\" }\nconst _hoisted_5 = { class: \"flex flex-col\" }\nconst _hoisted_6 = [\"innerHTML\"]\nconst _hoisted_7 = [\"innerHTML\"]\nconst _hoisted_8 = {\n key: 0,\n class: \"flex flex-col items-center my-4 mx-2\"\n}\nconst _hoisted_9 = { class: \"text-lg\" }\nconst _hoisted_10 = { class: \"text-sm text-muted\" }\nconst _hoisted_11 = {\n key: 1,\n class: \"flex flex-col items-center my-4 mx-12\"\n}\nconst _hoisted_12 = { class: \"flex items-center space-x-4 mr-8\" }\nconst _hoisted_13 = { class: \"mt-6\" }\nconst _hoisted_14 = { class: \"mb-1\" }\nconst _hoisted_15 = { class: \"flex lg:flex-row flex-col lg:space-y-0 space-y-4 lg:items-center card w-full\" }\nconst _hoisted_16 = { class: \"flex items-center space-x-3 lg:w-1/3\" }\nconst _hoisted_17 = { class: \"ml-2 mr-4 flex flex-col -space-y-1\" }\nconst _hoisted_18 = { class: \"flex items-center space-x-1\" }\nconst _hoisted_19 = { class: \"text-lg\" }\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons ml-1 inline-icon text-muted\" }, \" shield \", -1)\nconst _hoisted_21 = {\n key: 0,\n class: \"flex items-center space-x-1\"\n}\nconst _hoisted_22 = { class: \"text-sm text-muted\" }\nconst _hoisted_23 = [\"href\"]\nconst _hoisted_24 = /*#__PURE__*/_createElementVNode(\"span\", {\n style: {\"font-size\":\"14px !important\"},\n class: \"material-icons-outlined icon-light\"\n}, \" email \", -1)\nconst _hoisted_25 = { class: \"flex flex-wrap w-full\" }\nconst _hoisted_26 = { class: \"text-darkText\" }\nconst _hoisted_27 = {\n key: 0,\n style: {\"font-size\":\"1.3rem\"},\n class: \"ml-1 mr-2 material-icons-outlined\"\n}\nconst _hoisted_28 = { class: \"ml-1 mt-0.5 text-sm text-muted\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Avatar = _resolveComponent(\"Avatar\")!\n const _component_Spinner = _resolveComponent(\"Spinner\")!\n const _component_Combobox = _resolveComponent(\"Combobox\")!\n const _component_Tooltip = _resolveComponent(\"Tooltip\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_Chipset = _resolveComponent(\"Chipset\")!\n const _component_CheckboxGroup = _resolveComponent(\"CheckboxGroup\")!\n const _component_Dialog = _resolveComponent(\"Dialog\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_ctx.canManagePermissions)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _hoisted_3,\n _createVNode(_component_Combobox, {\n class: \"lg:w-3/5 w-full\",\n items: _ctx.usersAsOptions,\n placeholder: '',\n loading: _ctx.loadingUsers,\n label: _ctx.$t('course_permissions.search_user'),\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => (_ctx.onShowUserPermissionsDialog($event, null))),\n onCreateOption: _cache[1] || (_cache[1] = ($event: any) => (_ctx.onShowUserPermissionsDialog(null, $event))),\n onUpdateSearchText: _cache[2] || (_cache[2] = ($event: any) => (_ctx.onUserSearch($event))),\n hint: _ctx.$t('course_permissions.search_user_hint'),\n isCreatableFunction: _ctx.isValidEmailAddress,\n filterFunction: _ctx.filterUser\n }, {\n default: _withCtx(({ item, searchText }) => [\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(_component_Avatar, {\n user: item.data\n }, null, 8, [\"user\"]),\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"p\", {\n innerHTML: _ctx.highlightMatchingText(searchText, item.data.full_name)\n }, null, 8, _hoisted_6),\n _createElementVNode(\"p\", {\n innerHTML: _ctx.highlightMatchingText(searchText, item.data.email),\n class: \"text-muted text-sm -mt-1\"\n }, null, 8, _hoisted_7)\n ])\n ])\n ]),\n noResults: _withCtx(() => [\n (!_ctx.loadingUsers)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _createElementVNode(\"p\", _hoisted_9, _toDisplayString(_ctx.$t(\"course_permissions.search_cant_find_user\")), 1),\n _createElementVNode(\"p\", _hoisted_10, _toDisplayString(_ctx.$t(\"course_permissions.try_with_email_hint\")), 1)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [\n _createVNode(_component_Spinner)\n ]))\n ]),\n createOption: _withCtx(({ searchText }) => [\n _createElementVNode(\"div\", _hoisted_12, [\n _createVNode(_component_Avatar, {\n user: { full_name: searchText }\n }, null, 8, [\"user\"]),\n _createElementVNode(\"p\", null, _toDisplayString(searchText), 1)\n ])\n ]),\n _: 1\n }, 8, [\"items\", \"loading\", \"label\", \"hint\", \"isCreatableFunction\", \"filterFunction\"])\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_13, [\n _createElementVNode(\"h3\", _hoisted_14, _toDisplayString(_ctx.$t(\"course_permissions.users_with_privileges\")), 1),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.privilegedUsers, (user) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: user.id,\n class: \"py-2 hover:bg-light hover:bg-opacity-60 transition-colors duration-100\"\n }, [\n _createElementVNode(\"div\", _hoisted_15, [\n _createElementVNode(\"div\", _hoisted_16, [\n _createVNode(_component_Avatar, {\n size: 'lg',\n user: user\n }, null, 8, [\"user\"]),\n _createElementVNode(\"div\", _hoisted_17, [\n _createElementVNode(\"div\", _hoisted_18, [\n _createElementVNode(\"p\", _hoisted_19, _toDisplayString(user.full_name), 1),\n (_ctx.isCourseCreator(user))\n ? (_openBlock(), _createBlock(_component_Tooltip, {\n key: 0,\n textValue: _ctx.$t('course_permissions.course_creator'),\n placement: 'bottom',\n noArrow: true\n }, {\n default: _withCtx(() => [\n _hoisted_20\n ]),\n _: 1\n }, 8, [\"textValue\"]))\n : _createCommentVNode(\"\", true)\n ]),\n (user.email !== user.full_name)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_21, [\n _createElementVNode(\"p\", _hoisted_22, _toDisplayString(user.email), 1),\n _createElementVNode(\"a\", {\n style: {\"margin-bottom\":\"-4.85px\"},\n href: 'mailto:' + user.email\n }, [\n _createVNode(_component_Btn, {\n size: 'xs',\n variant: 'icon',\n outline: true\n }, {\n default: _withCtx(() => [\n _hoisted_24\n ]),\n _: 1\n })\n ], 8, _hoisted_23)\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_25, [\n _createVNode(_component_Chipset, {\n showAddChip: _ctx.canManagePermissions,\n disabled: \n\t\t\t\t\t\t\t\t!_ctx.canManagePermissions || _ctx.isCourseCreator(user) || user.id == _ctx.currentUserId\n\t\t\t\t\t\t\t,\n deletable: true,\n modelValue: [],\n options: _ctx.getUserPermissionsAsOptions(user),\n onDeleteChip: ($event: any) => (_ctx.onRemoveUserPrivilege(user, $event)),\n onAddChip: ($event: any) => (_ctx.onShowUserPermissionsDialog(user.id, null)),\n addChipTooltip: _ctx.$t('course_permissions.add_permissions_tooltip')\n }, null, 8, [\"showAddChip\", \"disabled\", \"options\", \"onDeleteChip\", \"onAddChip\", \"addChipTooltip\"])\n ])\n ])\n ]))\n }), 128))\n ]),\n _createVNode(_component_Dialog, {\n showDialog: _ctx.showDialog,\n confirmOnly: true,\n onYes: _cache[4] || (_cache[4] = ($event: any) => (_ctx.hideDialog()))\n }, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"course_privileges_page.edit_permissions_title\")) + \" \" + _toDisplayString(_ctx.editingUser?.full_name), 1)\n ]),\n body: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_26, [\n _createVNode(_component_CheckboxGroup, {\n options: _ctx.privilegesAsOptions,\n modelValue: _ctx.editingUserPrivileges,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((_ctx.editingUserPrivileges) = $event)),\n labelClass: 'text-xl flex-grow',\n optionClass: 'my-4',\n useToggles: true\n }, {\n default: _withCtx(({ icons }) => [\n (icons?.length > 0)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_27, _toDisplayString(icons[0]), 1))\n : _createCommentVNode(\"\", true)\n ]),\n item: _withCtx(({ description }) => [\n _createElementVNode(\"p\", _hoisted_28, _toDisplayString(description), 1)\n ]),\n _: 1\n }, 8, [\"options\", \"modelValue\"])\n ])\n ]),\n _: 1\n }, 8, [\"showDialog\"])\n ]))\n}","import { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, renderSlot as _renderSlot, resolveDirective as _resolveDirective, withDirectives as _withDirectives } from \"vue\"\n\nconst _hoisted_1 = { class: \"combo-box\" }\nconst _hoisted_2 = { class: \"relative\" }\nconst _hoisted_3 = {\n key: 0,\n style: {\"font-size\":\"12.5px\"},\n class: \"absolute -bottom-5 left-0 text-muted\"\n}\nconst _hoisted_4 = { class: \"\" }\nconst _hoisted_5 = [\"for\"]\nconst _hoisted_6 = { class: \"flex py-3 hover:bg-light cursor-pointer -mx-5 pl-5 pr-8\" }\nconst _hoisted_7 = [\"onInput\", \"onClick\", \"id\", \"value\", \"checked\"]\nconst _hoisted_8 = { key: 0 }\nconst _hoisted_9 = { key: 1 }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_TextInput = _resolveComponent(\"TextInput\")!\n const _component_DropdownMenu = _resolveComponent(\"DropdownMenu\")!\n const _directive_wave = _resolveDirective(\"wave\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_DropdownMenu, {\n expanded: _ctx.expanded,\n onToggleExpanded: _cache[2] || (_cache[2] = ($event: any) => (_ctx.onToggleExpanded())),\n loading: _ctx.shouldShowLoading\n }, {\n activator: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_TextInput, {\n leftIcon: _ctx.leftIcon,\n modelValue: _ctx.searchText,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.searchText) = $event)),\n placeholder: _ctx.placeholder || undefined\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.label), 1)\n ]),\n _: 1\n }, 8, [\"leftIcon\", \"modelValue\", \"placeholder\"]),\n (_ctx.hint)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_3, _toDisplayString(_ctx.hint), 1))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_4, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.filteredItems, (item, index) => {\n return (_openBlock(), _createElementBlock(\"label\", {\n for: _ctx.id + '-input-' + index,\n key: item[_ctx.itemId]\n }, [\n _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _createElementVNode(\"input\", {\n onInput: ($event: any) => (_ctx.onInput(item.value, $event)),\n onClick: ($event: any) => (item.value == _ctx.modelValue ? (_ctx.expanded = false) : null),\n class: \"w-0 h-0 opacity-0\",\n type: \"radio\",\n id: _ctx.id + '-input-' + index,\n value: item.value,\n checked: item.value == _ctx.modelValue\n }, null, 40, _hoisted_7),\n _renderSlot(_ctx.$slots, \"default\", {\n item: item,\n searchText: _ctx.searchText\n })\n ])), [\n [_directive_wave]\n ])\n ], 8, _hoisted_5))\n }), 128)),\n (_ctx.filteredItems.length === 0 && !_ctx.isCreatableFunction(_ctx.searchText))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _renderSlot(_ctx.$slots, \"noResults\", { searchText: _ctx.searchText })\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.filteredItems.length === 0 && _ctx.isCreatableFunction(_ctx.searchText))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [\n _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n class: \"flex py-2 hover:bg-light cursor-pointer -mx-5 px-5\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.onCreateOption()))\n }, [\n _renderSlot(_ctx.$slots, \"createOption\", { searchText: _ctx.searchText })\n ])), [\n [_directive_wave]\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _: 3\n }, 8, [\"expanded\", \"loading\"])\n ]))\n}","\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport TextInput from \"./TextInput.vue\";\nimport DropdownMenu from \"./DropdownMenu.vue\";\nimport { SelectableOption } from \"@/interfaces\";\nimport { v4 as uuid4 } from \"uuid\";\n\nexport default defineComponent({\n\tname: \"Combobox\",\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: Array as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\titems: {\n\t\t\ttype: Array as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\tallowCreate: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tallowMultiple: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\titemId: {\n\t\t\ttype: String,\n\t\t\tdefault: \"id\",\n\t\t},\n\t\tplaceholder: {\n\t\t\ttype: String,\n\t\t\tdefault: \"\",\n\t\t},\n\t\tlabel: {\n\t\t\ttype: String,\n\t\t\tdefault: \"\",\n\t\t},\n\t\tleftIcon: {\n\t\t\ttype: String,\n\t\t\tdefault: \"\",\n\t\t},\n\t\thint: {\n\t\t\ttype: String,\n\t\t\tdefault: \"\",\n\t\t},\n\t\tfilterFunction: {\n\t\t\ttype: Function as PropType<(search: string, option: SelectableOption) => boolean>,\n\t\t\t// by default, no filtering is performed and it is up\n\t\t\t// to the parent component to handle search\n\t\t\tdefault: () => true,\n\t\t},\n\t\tisCreatableFunction: {\n\t\t\t// a function that takes in the search text and returns whether that's a valid\n\t\t\t// payload for creating a new item\n\t\t\ttype: Function as PropType<(search: string) => boolean>,\n\t\t\tdefault: () => false,\n\t\t},\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\twatch: {\n\t\tsearchText(newVal) {\n\t\t\tthis.expanded = newVal.length > 0;\n\t\t\tthis.$emit(\"updateSearchText\", newVal);\n\t\t},\n\t\tloading(newVal) {\n\t\t\t// only show progress when combobox has been loading for a while\n\t\t\tif (!newVal) {\n\t\t\t\tthis.shouldShowLoading = false;\n\t\t\t} else {\n\t\t\t\tsetTimeout(() => (this.shouldShowLoading = this.loading), 1500);\n\t\t\t}\n\t\t},\n\t},\n\tcreated() {\n\t\tthis.id = uuid4();\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tsearchText: \"\",\n\t\t\texpanded: false,\n\t\t\tid: \"\",\n\t\t\tshouldShowLoading: false,\n\t\t};\n\t},\n\tmethods: {\n\t\tonToggleExpanded() {\n\t\t\tif (this.expanded) {\n\t\t\t\tthis.expanded = false;\n\t\t\t} else {\n\t\t\t\tthis.expanded = this.searchText.length > 0 || this.items.length > 0;\n\t\t\t}\n\t\t},\n\t\tonInput(value: string, inputEvent: Event) {\n\t\t\t(inputEvent.target as unknown as { checked: boolean }).checked = false;\n\t\t\tinputEvent.preventDefault();\n\t\t\tthis.$emit(\"update:modelValue\", value);\n\t\t\tthis.expanded = false;\n\t\t\tthis.searchText = \"\";\n\t\t},\n\t\tonCreateOption() {\n\t\t\tthis.$emit(\"createOption\", this.searchText);\n\t\t\tthis.searchText = \"\";\n\t\t},\n\t},\n\tcomputed: {\n\t\tfilteredItems() {\n\t\t\treturn this.items.filter(i => this.filterFunction(this.searchText, i));\n\t\t},\n\t},\n\tcomponents: { TextInput, DropdownMenu },\n});\n","import { render } from \"./Combobox.vue?vue&type=template&id=a816e6e8&ts=true\"\nimport script from \"./Combobox.vue?vue&type=script&lang=ts\"\nexport * from \"./Combobox.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n// TODO have a way to add permissions to users that haven't logged in for the first time yet\nimport { courseIdMixin, coursePrivilegeMixin, loadingMixin, savingMixin } from \"@/mixins\";\nimport { defineComponent } from \"@vue/runtime-core\";\n\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport { CoursePrivilege, getBlankUser, User, userMatchesSearch } from \"@/models\";\nimport { icons as coursePrivilegeIcons } from \"@/assets/coursePrivilegeIcons\";\nimport Dialog from \"@/components/ui/Dialog.vue\";\nimport CheckboxGroup from \"@/components/ui/CheckboxGroup.vue\";\nimport { SelectableOption } from \"@/interfaces\";\nimport { mapStores } from \"pinia\";\nimport { useMetaStore } from \"@/stores/metaStore\";\nimport { useMainStore } from \"@/stores/mainStore\";\nimport {\n\tgetCurrentUserId,\n\thighlightMatchingText,\n\tsetErrorNotification,\n\tsetPageWideError,\n\tisValidEmailAddress,\n} from \"@/utils\";\nimport Combobox from \"@/components/ui/Combobox.vue\";\nimport Avatar from \"@/components/ui/Avatar.vue\";\nimport Tooltip from \"@/components/ui/Tooltip.vue\";\nimport Chipset from \"@/components/ui/Chipset.vue\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport { throttle } from \"lodash\";\nimport Spinner from \"@/components/ui/Spinner.vue\";\n\nexport default defineComponent({\n\tname: \"CoursePermissions\",\n\tcomponents: {\n\t\tDialog,\n\t\tCheckboxGroup,\n\t\tCombobox,\n\t\tAvatar,\n\t\tTooltip,\n\t\tChipset,\n\t\tBtn,\n\t\tSpinner,\n\t},\n\tmixins: [courseIdMixin, loadingMixin, savingMixin, coursePrivilegeMixin],\n\tasync created() {\n\t\tawait this.withLoading(async () => {\n\t\t\t// get all users with privileges\n\t\t\tawait this.mainStore.getPrivilegedUsersForCourse({ courseId: this.courseId });\n\t\t\t// initially, fetch teachers to give some data\n\t\t\t// to start with when searching users\n\t\t\tawait this.mainStore.getUsersForCourse({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\tteachersOnly: true,\n\t\t\t});\n\t\t}, setPageWideError);\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tshowDialog: false,\n\t\t\teditingUserId: null as string | null,\n\t\t\t// used when editing privileges for a user that doesn't exist yet\n\t\t\teditingUserEmail: null as string | null,\n\t\t\tcoursePrivilegeIcons,\n\t\t\tloadingUsers: false,\n\t\t};\n\t},\n\tmethods: {\n\t\thideDialog() {\n\t\t\tthis.showDialog = false;\n\t\t\tthis.editingUserId = null;\n\t\t\tthis.editingUserEmail = null;\n\t\t},\n\t\tonShowUserPermissionsDialog(userId: string | null, email: string | null) {\n\t\t\tthis.editingUserId = userId;\n\t\t\tthis.editingUserEmail = email;\n\t\t\tthis.showDialog = true;\n\t\t},\n\t\tisCourseCreator(user: User) {\n\t\t\treturn this.currentCourse?.creator?.id == user.id;\n\t\t},\n\t\tgetUserPermissionsAsOptions(user: User) {\n\t\t\treturn (user.course_privileges ?? []).map(key => ({\n\t\t\t\tvalue: key,\n\t\t\t\tcontent: _(\"course_privileges_short.\" + key),\n\t\t\t\ticons: coursePrivilegeIcons[key],\n\t\t\t}));\n\t\t},\n\t\tasync onSetUserPrivileges(\n\t\t\tuserId: string | null,\n\t\t\temail: string | null,\n\t\t\tprivileges: CoursePrivilege[],\n\t\t) {\n\t\t\tawait this.withLoading(async () => {\n\t\t\t\tconst updatedUser = await this.mainStore.updateUserCoursePrivileges({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\tuserId,\n\t\t\t\t\temail,\n\t\t\t\t\tprivileges,\n\t\t\t\t});\n\t\t\t\tif (email !== null) {\n\t\t\t\t\t// user was just created using provided email address, now switch to editing\n\t\t\t\t\t// the newly created user instead of using the email address only\n\t\t\t\t\tthis.editingUserId = updatedUser.id;\n\t\t\t\t\tthis.editingUserEmail = null;\n\t\t\t\t}\n\t\t\t}, setErrorNotification);\n\t\t},\n\t\tasync onRemoveUserPrivilege(user: User, privilege: CoursePrivilege) {\n\t\t\tawait this.onSetUserPrivileges(\n\t\t\t\tuser.id,\n\t\t\t\tnull,\n\t\t\t\t(user.course_privileges ?? []).filter(p => p != privilege),\n\t\t\t);\n\t\t},\n\t\t// for combobox\n\t\tfilterUser(search: string, userOption: SelectableOption) {\n\t\t\tconst user = this.mainStore.getUserById(userOption.value) as User;\n\t\t\treturn userMatchesSearch(search, user);\n\t\t},\n\t\tisValidEmailAddress,\n\n\t\thighlightMatchingText,\n\t\tasync onUserSearch(search: string) {\n\t\t\tthis.loadingUsers = true;\n\t\t\tawait this.throttledGetUsers(search);\n\t\t},\n\t\tthrottledGetUsers: throttle(async function (this: any, search) {\n\t\t\ttry {\n\t\t\t\tawait this.mainStore.getUsersForCourse({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\tteachersOnly: false,\n\t\t\t\t\tsearch,\n\t\t\t\t});\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t} finally {\n\t\t\t\tthis.loadingUsers = false;\n\t\t\t}\n\t\t}, 500),\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore, useMetaStore),\n\t\teditingUser(): User | undefined {\n\t\t\tif (this.editingUserId !== null) {\n\t\t\t\t// an actual user is being edited\n\t\t\t\treturn this.mainStore.getUserById(this.editingUserId);\n\t\t\t}\n\t\t\tif (this.editingUserEmail !== null) {\n\t\t\t\t// a nonexistent user is being edited - the backend will create its account\n\t\t\t\t// as soon as the first request is issued using the email address\n\t\t\t\treturn {\n\t\t\t\t\t...getBlankUser(),\n\t\t\t\t\tfull_name: this.editingUserEmail,\n\t\t\t\t\tcourse_privileges: [],\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\t\teditingUserPrivileges: {\n\t\t\tget() {\n\t\t\t\treturn this.editingUser?.course_privileges ?? [];\n\t\t\t},\n\t\t\tasync set(val: CoursePrivilege[]) {\n\t\t\t\tawait this.onSetUserPrivileges(this.editingUserId, this.editingUserEmail, val);\n\t\t\t},\n\t\t},\n\t\tprivilegedUsers() {\n\t\t\treturn [\n\t\t\t\t...this.mainStore.privilegedUsers.filter(u => this.isCourseCreator(u)),\n\t\t\t\t...this.mainStore.privilegedUsers\n\t\t\t\t\t.filter(u => !this.isCourseCreator(u) && (u.course_privileges ?? []).length > 0)\n\t\t\t\t\t.sort(\n\t\t\t\t\t\t(a, b) =>\n\t\t\t\t\t\t\t(b.course_privileges ?? []).length - (a.course_privileges ?? []).length,\n\t\t\t\t\t),\n\t\t\t];\n\t\t},\n\t\tusersAsOptions(): SelectableOption[] {\n\t\t\treturn this.mainStore.paginatedUsers.data.map(u => ({\n\t\t\t\tvalue: u.id,\n\t\t\t\tcontent: u.full_name,\n\t\t\t\tdata: u,\n\t\t\t}));\n\t\t},\n\t\tprivilegesAsOptions(): SelectableOption[] {\n\t\t\treturn Object.values(CoursePrivilege).map(key => ({\n\t\t\t\tvalue: key,\n\t\t\t\tcontent: _(\"course_privileges_short.\" + key),\n\t\t\t\ticons: coursePrivilegeIcons[key],\n\t\t\t\tdescription: _(\"course_privileges.\" + key),\n\t\t\t}));\n\t\t},\n\t\tcanManagePermissions() {\n\t\t\treturn this.hasPrivileges([CoursePrivilege.UPDATE_COURSE]);\n\t\t},\n\t\tcurrentUserId() {\n\t\t\treturn getCurrentUserId();\n\t\t},\n\t},\n});\n","import { render } from \"./CoursePermissions.vue?vue&type=template&id=be3c80cc&ts=true\"\nimport script from \"./CoursePermissions.vue?vue&type=script&lang=ts\"\nexport * from \"./CoursePermissions.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, vShow as _vShow, withDirectives as _withDirectives, Transition as _Transition, withCtx as _withCtx, createVNode as _createVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"\" }\nconst _hoisted_2 = {\n style: {\"z-index\":\"49\"},\n class: \"fixed top-0 left-0 flex items-center justify-center w-full h-full\"\n}\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"div\", {\n style: {\"width\":\"100% !important\",\"height\":\"100% !important\"},\n class: \"absolute z-10 w-full h-full transition-none bg-gray-900 opacity-50\"\n}, null, -1)\nconst _hoisted_4 = { class: \"fixed z-50 w-full px-6 py-4 text-center transform -translate-x-1/2 -translate-y-1/2 rounded md:w-max top-1/2 left-1/2 md:ml-14\" }\nconst _hoisted_5 = {\n style: {\"font-size\":\"10rem\"},\n class: \"opacity-50 material-icons-outlined text-lightText\"\n}\nconst _hoisted_6 = { class: \"flex w-full\" }\nconst _hoisted_7 = { class: \"mb-0\" }\nconst _hoisted_8 = { class: \"flex flex-col\" }\nconst _hoisted_9 = { class: \"flex flex-col mb-12\" }\nconst _hoisted_10 = { class: \"ml-2\" }\nconst _hoisted_11 = {\n key: 0,\n class: \"text-lg text-muted\"\n}\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons\" }, \"edit\", -1)\nconst _hoisted_13 = { key: 1 }\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons\" }, \"done\", -1)\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons\" }, \"close\", -1)\nconst _hoisted_16 = {\n key: 1,\n class: \"mt-8 banner banner-light\"\n}\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-yellow-400 material-icons-outlined\" }, \" lightbulb \", -1)\nconst _hoisted_18 = { class: \"flex flex-col w-full space-y-2 md:items-center md:space-y-0 md:flex-row\" }\nconst _hoisted_19 = { class: \"mr-2 lg:mr-0\" }\nconst _hoisted_20 = { key: 0 }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_CloudSaveStatus = _resolveComponent(\"CloudSaveStatus\")!\n const _component_EventMetaEditor = _resolveComponent(\"EventMetaEditor\")!\n const _component_NumberInput = _resolveComponent(\"NumberInput\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_EventTemplateEditor = _resolveComponent(\"EventTemplateEditor\")!\n const _component_Toggle = _resolveComponent(\"Toggle\")!\n const _component_EventInstancesPreview = _resolveComponent(\"EventInstancesPreview\")!\n const _component_EventStateEditor = _resolveComponent(\"EventStateEditor\")!\n const _component_Dialog = _resolveComponent(\"Dialog\")!\n const _component_AnnouncementNodeEditor = _resolveComponent(\"AnnouncementNodeEditor\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_Transition, { name: \"fade-delay\" }, {\n default: _withCtx(() => [\n _withDirectives(_createElementVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"p\", _hoisted_5, _toDisplayString(_ctx.examLocked ? \"lock\" : \"lock_open\"), 1),\n _createElementVNode(\"h3\", {\n class: _normalizeClass([[!_ctx.examLocked ? 'opacity-0' : 'opacity-100'], \"pt-1 mx-auto rounded-t md:bg-transparent text-lightText md:px-2\"]),\n style: {\"text-shadow\":\"0.5px 0.5px 4px rgb(0 0 0 / 50%)\"}\n }, _toDisplayString(_ctx.$t(\"event_editor.currently_locked_by\")) + \" \" + _toDisplayString(_ctx.modelValue?.locked_by?.full_name), 3),\n _createElementVNode(\"p\", {\n class: _normalizeClass([[!_ctx.examLocked ? 'opacity-0' : 'opacity-100'], \"pb-1 rounded-b md:bg-transparent text-lightText md:mx-2 md:px-2\"]),\n style: {\"text-shadow\":\"0.5px 0.5px 4px rgb(0 0 0 / 50%)\"}\n }, _toDisplayString(_ctx.$t(\"event_editor.lock_stand_by\")), 3)\n ])\n ], 512), [\n [_vShow, !_ctx.loading && _ctx.examLocked]\n ])\n ]),\n _: 1\n }),\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"h2\", _hoisted_7, _toDisplayString(_ctx.$t(\"event_editor.editor_title\")), 1),\n _createVNode(_component_CloudSaveStatus, {\n class: \"ml-auto\",\n saving: _ctx.saving,\n hadError: _ctx.savingError\n }, null, 8, [\"saving\", \"hadError\"])\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n _createVNode(_component_EventMetaEditor, {\n modelValue: _ctx.modelValue,\n class: \"mb-12\",\n onUpdateEvent: _cache[0] || (_cache[0] = ($event: any) => (_ctx.onChange($event.field, $event.value))),\n onBlur: _cache[1] || (_cache[1] = ($event: any) => (_ctx.onBlur()))\n }, null, 8, [\"modelValue\"]),\n _createElementVNode(\"div\", _hoisted_9, [\n (!_ctx.loading)\n ? (_openBlock(), _createBlock(_component_EventTemplateEditor, {\n key: 0,\n class: \"\",\n randomRuleOrder: _ctx.modelValue.randomize_rule_order,\n modelValue: _ctx.modelValueTemplate,\n showEditWarning: \n\t\t\t\t\t\t_ctx.modelValue.state === _ctx.EventState.OPEN ||\n\t\t\t\t\t\t_ctx.modelValue.state === _ctx.EventState.RESTRICTED\n\t\t\t\t\t,\n onTemplateChanged: _cache[4] || (_cache[4] = ($event: any) => (_ctx.invalidateExamples())),\n onSaving: _cache[5] || (_cache[5] = ($event: any) => (_ctx.saving = true)),\n onDoneSaving: _cache[6] || (_cache[6] = ($event: any) => (_ctx.saving = false))\n }, {\n afterRules: _withCtx(() => [\n _createElementVNode(\"h4\", null, _toDisplayString(_ctx.$t(\"event_editor.max_grade\")), 1),\n _createElementVNode(\"div\", _hoisted_10, [\n (!_ctx.editingMaxScore)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_11, _toDisplayString(_ctx.computedMaxScore), 1))\n : (_openBlock(), _createBlock(_component_NumberInput, {\n key: 1,\n modelValue: _ctx.dirtyMaxScore,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((_ctx.dirtyMaxScore) = $event))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_editor.max_grade\")), 1)\n ]),\n _: 1\n }, 8, [\"modelValue\"]))\n ]),\n (!_ctx.editingMaxScore)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 0,\n variant: 'icon',\n outline: true,\n class: \"hidden ml-2\",\n onClick: _ctx.onEditMaxScore\n }, {\n default: _withCtx(() => [\n _hoisted_12\n ]),\n _: 1\n }, 8, [\"onClick\"]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [\n _createVNode(_component_Btn, {\n variant: 'icon',\n outline: true,\n class: \"ml-2\",\n onClick: _ctx.onSaveMaxScore\n }, {\n default: _withCtx(() => [\n _hoisted_14\n ]),\n _: 1\n }, 8, [\"onClick\"]),\n _createVNode(_component_Btn, {\n variant: 'icon',\n outline: true,\n class: \"\",\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.editingMaxScore = false))\n }, {\n default: _withCtx(() => [\n _hoisted_15\n ]),\n _: 1\n })\n ]))\n ]),\n _: 1\n }, 8, [\"randomRuleOrder\", \"modelValue\", \"showEditWarning\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_Toggle, {\n class: \"mt-3 md:ml-auto md:-mt-7.5\",\n \"label-on-left\": true,\n modelValue: _ctx.modelValue.randomize_rule_order,\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = ($event: any) => (_ctx.onChange('randomize_rule_order', $event)))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_template_editor.randomize_rule_order\")), 1)\n ]),\n _: 1\n }, 8, [\"modelValue\"]),\n (_ctx.usedRandomization)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_16, [\n _hoisted_17,\n _createElementVNode(\"div\", _hoisted_18, [\n _createElementVNode(\"p\", _hoisted_19, _toDisplayString(_ctx.$t(\"event_editor.tip_you_used_randomization\")), 1),\n _createVNode(_component_Btn, {\n class: \"w-full md:w-1/2 -mr-3 lg:-mr-2 lg:w-max md:ml-auto\",\n outline: true,\n onClick: _ctx.getInstances,\n disabled: _ctx.loadingExamples\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.loadingExamples\n\t\t\t\t\t\t\t\t\t? _ctx.$t(\"event_editor.generating_examples\")\n\t\t\t\t\t\t\t\t\t: _ctx.$t(\"event_editor.generate_examples\")), 1)\n ]),\n _: 1\n }, 8, [\"onClick\", \"disabled\"])\n ]),\n _createVNode(_component_EventInstancesPreview, {\n onHide: _cache[8] || (_cache[8] = ($event: any) => (_ctx.showInstancesDialog = false)),\n show: _ctx.showInstancesDialog,\n instances: _ctx.instances\n }, null, 8, [\"show\", \"instances\"])\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _createVNode(_component_EventStateEditor, {\n loading: _ctx.updatingState,\n class: \"pb-10\",\n modelValue: _ctx.modelValue,\n \"onUpdate:modelValue\": _cache[9] || (_cache[9] = ($event: any) => (_ctx.onStateUpdate($event.value, $event.fireIntegrationEvent)))\n }, null, 8, [\"loading\", \"modelValue\"])\n ]),\n _createVNode(_component_Dialog, {\n yesText: _ctx.$t('misc.edit'),\n noText: _ctx.$t('dialog.default_cancel_text'),\n showDialog: _ctx.showConfirmationDialog,\n warning: true,\n onYes: _cache[10] || (_cache[10] = ($event: any) => (_ctx.showConfirmationDialog = false)),\n onNo: _cache[11] || (_cache[11] = ($event: any) => (_ctx.$router.push({ name: 'CourseExams', params: { courseId: _ctx.courseId } })))\n }, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_editor.editing_open_event_title\")), 1)\n ]),\n body: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_editor.editing_open_event_body\")), 1)\n ]),\n _: 1\n }, 8, [\"yesText\", \"noText\", \"showDialog\"]),\n _createVNode(_component_Dialog, {\n class: \"transition-all duration-100 ease\",\n showDialog: _ctx.showBlockingDialog,\n onNo: _cache[16] || (_cache[16] = ($event: any) => (_ctx.resolveBlockingDialog(false))),\n onYes: _cache[17] || (_cache[17] = ($event: any) => {\n\t\t\t\t_ctx.bounceDialog = true;\n\t\t\t\t_ctx.showAnnouncementEditor = true;\n\t\t\t}),\n large: _ctx.showAnnouncementEditor,\n showActions: !_ctx.showAnnouncementEditor,\n loading: _ctx.publishingAnnouncement,\n dialogBoxClasses: _ctx.bounceDialog ? 'bounce-big-enter-active' : '',\n onAnimationend: _cache[18] || (_cache[18] = ($event: any) => (_ctx.bounceDialog = false))\n }, {\n body: _withCtx(() => [\n _createVNode(_Transition, { name: \"fade-quick\" }, {\n default: _withCtx(() => [\n (_ctx.showAnnouncementEditor)\n ? (_openBlock(), _createBlock(_component_AnnouncementNodeEditor, {\n key: 0,\n modelValue: _ctx.announcement,\n onPatchNode: _cache[12] || (_cache[12] = ($event: any) => (_ctx.onAnnouncementNodeChange($event.key, $event.value, !!$event.save))),\n onSave: _cache[13] || (_cache[13] = ($event: any) => (_ctx.resolveBlockingDialog(true))),\n onCloseEditor: _cache[14] || (_cache[14] = ($event: any) => (_ctx.resolveBlockingDialog(false))),\n isExistingNode: false,\n publishOnly: false\n }, null, 8, [\"modelValue\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }),\n (!_ctx.showAnnouncementEditor)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_20, _toDisplayString(_ctx.$t(\"event_editor.publish_announcement_prompt\")), 1))\n : _createCommentVNode(\"\", true)\n ]),\n footerButtons: _withCtx(() => [\n _createVNode(_component_Btn, {\n class: \"ml-2\",\n onClick: _cache[15] || (_cache[15] = ($event: any) => (_ctx.rejectBlockingDialog())),\n variant: 'primary-borderless'\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"dialog.default_cancel_text\")), 1)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"showDialog\", \"large\", \"showActions\", \"loading\", \"dialogBoxClasses\"])\n ]))\n}","import { toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createSlots as _createSlots, createVNode as _createVNode, normalizeClass as _normalizeClass, vShow as _vShow, withDirectives as _withDirectives, createCommentVNode as _createCommentVNode } from \"vue\"\nimport _imports_0 from '../../../../public/valutami.png'\n\n\nconst _hoisted_1 = { class: \"error-msg\" }\nconst _hoisted_2 = { class: \"error-msg\" }\nconst _hoisted_3 = { class: \"error-msg\" }\nconst _hoisted_4 = { class: \"flex flex-col mt-10\" }\nconst _hoisted_5 = { class: \"mb-3\" }\nconst _hoisted_6 = { class: \"mb-2\" }\nconst _hoisted_7 = { class: \"flex flex-col mt-10\" }\nconst _hoisted_8 = { class: \"mb-3\" }\nconst _hoisted_9 = { class: \"flex md:flex-row flex-col md:space-y-0 space-y-2 md:items-center -ml-0.5\" }\nconst _hoisted_10 = { class: \"flex items-center\" }\nconst _hoisted_11 = { class: \"mr-2 text-xl material-icons text-primary\" }\nconst _hoisted_12 = { class: \"text-muted\" }\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mr-2 material-icons\" }, \" people \", -1)\nconst _hoisted_14 = { class: \"flex flex-col mt-10\" }\nconst _hoisted_15 = { class: \"mb-3\" }\nconst _hoisted_16 = { class: \"flex flex-col mb-2 -mt-2 space-y-4 lg:flex-row lg:space-x-8 lg:space-y-0\" }\nconst _hoisted_17 = { class: \"flex items-center space-x-1\" }\nconst _hoisted_18 = { class: \"text-sm select-none text-muted\" }\nconst _hoisted_19 = { class: \"mr-2 text-sm\" }\nconst _hoisted_20 = {\n style: {\"width\":\"20px\",\"height\":\"20px\"},\n viewBox: \"0 0 24 24\"\n}\nconst _hoisted_21 = /*#__PURE__*/_createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M13 14H11V8H13V14M15 1H9V3H15V1M5 13C5 9.13 8.13 6 12 6C15.29 6 18.05 8.28 18.79 11.34L19.39 10.74C19.71 10.42 20.1 10.21 20.5 10.1C20.18 9.11 19.67 8.19 19.03 7.39L20.45 5.97C20 5.46 19.55 5 19.04 4.56L17.62 6C16.07 4.74 14.12 4 12 4C7.03 4 3 8.03 3 13C3 17.63 6.5 21.44 11 21.94V19.92C7.61 19.43 5 16.53 5 13M13 19.96V22H15.04L21.17 15.88L19.13 13.83L13 19.96M22.85 13.47L21.53 12.15C21.33 11.95 21 11.95 20.81 12.15L19.83 13.13L21.87 15.17L22.85 14.19C23.05 14 23.05 13.67 22.85 13.47Z\"\n}, null, -1)\nconst _hoisted_22 = [\n _hoisted_21\n]\nconst _hoisted_23 = { class: \"text-muted\" }\nconst _hoisted_24 = { class: \"flex flex-col mt-3 space-y-2\" }\nconst _hoisted_25 = {\n key: 0,\n class: \"flex flex-col mt-12 space-y-4\"\n}\nconst _hoisted_26 = { class: \"text-darkText\" }\nconst _hoisted_27 = { class: \"flex flex-col items-start space-y-2 md:space-y-0 md:space-x-2 md:flex-row md:space-x-6\" }\nconst _hoisted_28 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"mlw-32 mt-1.5 overflow-hidden rounded-sm shadow-elevation\" }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"w-32\",\n src: _imports_0\n })\n], -1)\nconst _hoisted_29 = { class: \"flex flex-col space-y-2\" }\nconst _hoisted_30 = { class: \"mt-8\" }\nconst _hoisted_31 = { class: \"flex items-center w-1/2 space-x-1\" }\nconst _hoisted_32 = { class: \"text-sm select-none text-muted\" }\nconst _hoisted_33 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-base material-icons\" }, \" delete \", -1)\nconst _hoisted_34 = {\n key: 0,\n class: \"-mt-4 mb-8 text-muted\"\n}\nconst _hoisted_35 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mr-1 text-base material-icons-outlined\" }, \" add \", -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_TextInput = _resolveComponent(\"TextInput\")!\n const _component_CalendarInput = _resolveComponent(\"CalendarInput\")!\n const _component_TextEditor = _resolveComponent(\"TextEditor\")!\n const _component_RadioGroup = _resolveComponent(\"RadioGroup\")!\n const _component_Toggle = _resolveComponent(\"Toggle\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_NumberInput = _resolveComponent(\"NumberInput\")!\n const _component_TagInput = _resolveComponent(\"TagInput\")!\n const _component_Dialog = _resolveComponent(\"Dialog\")!\n\n return (_openBlock(), _createElementBlock(\"div\", null, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"flex flex-col mt-6 space-y-4 md:space-x-4 md:flex-row md:space-y-0\", [\n\t\t\t\t_ctx.v$.modelValue.name.$errors.length > 0 ||\n\t\t\t\t_ctx.v$.modelValue.begin_timestamp.$errors.length > 0 ||\n\t\t\t\t_ctx.v$.modelValue.end_timestamp.$errors.length > 0\n\t\t\t\t\t? 'mb-1'\n\t\t\t\t\t: 'mb-6',\n\t\t\t]])\n }, [\n _createVNode(_component_TextInput, {\n onBlur: _cache[0] || (_cache[0] = ($event: any) => (_ctx.emitBlur())),\n class: \"w-full md:mr-auto\",\n modelValue: _ctx.modelValue.name,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => (_ctx.emitUpdate('name', $event)))\n }, _createSlots({\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_editor.name\")) + \" \", 1)\n ]),\n _: 2\n }, [\n (_ctx.v$.modelValue.name.$errors.length > 0)\n ? {\n name: \"errors\",\n fn: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.v$.modelValue.name.$errors, (error) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"input-errors\",\n key: error.$uid\n }, [\n _createElementVNode(\"div\", _hoisted_1, _toDisplayString(_ctx.$t(\"validation_errors.event.\" + error.$uid)), 1)\n ]))\n }), 128))\n ]),\n key: \"0\"\n }\n : undefined\n ]), 1032, [\"modelValue\"]),\n _createVNode(_component_CalendarInput, {\n class: \"\",\n modelValue: _ctx.modelValue.begin_timestamp,\n ref: \"beginTimestampElement\",\n onOpen: _cache[2] || (_cache[2] = ($event: any) => (_ctx.onBeginTimestampOpen())),\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => (_ctx.isDraft ? _ctx.emitUpdate('begin_timestamp', $event) : () => null))\n }, _createSlots({\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_editor.begin_timestamp\")) + \" \", 1)\n ]),\n _: 2\n }, [\n (_ctx.v$.modelValue.begin_timestamp.$errors.length > 0)\n ? {\n name: \"errors\",\n fn: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.v$.modelValue.begin_timestamp.$errors, (error) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"input-errors\",\n key: error.$uid\n }, [\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(_ctx.$t(\"validation_errors.event.\" + error.$uid)), 1)\n ]))\n }), 128))\n ]),\n key: \"0\"\n }\n : undefined\n ]), 1032, [\"modelValue\"]),\n _createVNode(_component_CalendarInput, {\n class: \"\",\n modelValue: _ctx.modelValue.end_timestamp,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = ($event: any) => (_ctx.emitUpdate('end_timestamp', $event)))\n }, _createSlots({\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_editor.end_timestamp\")) + \" \", 1)\n ]),\n _: 2\n }, [\n (_ctx.v$.modelValue.end_timestamp.$errors.length > 0)\n ? {\n name: \"errors\",\n fn: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.v$.modelValue.end_timestamp.$errors, (error) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"input-errors\",\n key: error.$uid\n }, [\n _createElementVNode(\"div\", _hoisted_3, _toDisplayString(_ctx.$t(\"validation_errors.event.\" + error.$uid)), 1)\n ]))\n }), 128))\n ]),\n key: \"0\"\n }\n : undefined\n ]), 1032, [\"modelValue\"])\n ], 2),\n _createVNode(_component_TextEditor, {\n onBlur: _cache[5] || (_cache[5] = ($event: any) => (_ctx.emitBlur())),\n modelValue: _ctx.modelValue.instructions,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = ($event: any) => (_ctx.emitUpdate('instructions', $event)))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_editor.instructions\")), 1)\n ]),\n _: 1\n }, 8, [\"modelValue\"]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"h4\", _hoisted_5, _toDisplayString(_ctx.$t(\"event_editor.flow_rules\")), 1),\n _createElementVNode(\"div\", _hoisted_6, [\n _createVNode(_component_RadioGroup, {\n class: \"-ml-1.5\",\n modelValue: _ctx.modelValue.exercises_shown_at_a_time,\n options: _ctx.exercisesShownAtOnceOptions,\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = ($event: any) => (_ctx.emitUpdate('exercises_shown_at_a_time', $event)))\n }, null, 8, [\"modelValue\", \"options\"])\n ]),\n _withDirectives(_createVNode(_component_Toggle, {\n labelOnLeft: true,\n style: {\"max-width\":\"95%\"},\n modelValue: _ctx.modelValue.allow_going_back,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = ($event: any) => (_ctx.emitUpdate('allow_going_back', $event)))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_editor.allow_going_back_label\")), 1)\n ]),\n _: 1\n }, 8, [\"modelValue\"]), [\n [_vShow, _ctx.modelValue.exercises_shown_at_a_time == 1]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_7, [\n _createElementVNode(\"h4\", _hoisted_8, _toDisplayString(_ctx.$t(\"event_editor.access_rules\")), 1),\n _createVNode(_component_RadioGroup, {\n class: \"-ml-1.5 mb-2\",\n modelValue: _ctx.modelValue.access_rule,\n options: _ctx.accessRulesOptions,\n \"onUpdate:modelValue\": _cache[9] || (_cache[9] = ($event: any) => (_ctx.onAccessRuleChange($event)))\n }, null, 8, [\"modelValue\", \"options\"]),\n _createElementVNode(\"div\", _hoisted_9, [\n _createElementVNode(\"div\", _hoisted_10, [\n _createElementVNode(\"span\", _hoisted_11, _toDisplayString(_ctx.modelValue.access_rule === _ctx.EventAccessRule.ALLOW_ACCESS ? \"public\" : \"lock\"), 1),\n _createElementVNode(\"p\", _hoisted_12, _toDisplayString(_ctx.modelValue.access_rule === _ctx.EventAccessRule.ALLOW_ACCESS\n\t\t\t\t\t\t\t\t? _ctx.$t(\"event_editor.allow_access_description\")\n\t\t\t\t\t\t\t\t: _ctx.$t(\"event_editor.deny_access_description\")), 1)\n ]),\n _createVNode(_component_Btn, {\n onClick: _cache[10] || (_cache[10] = ($event: any) => (_ctx.showAccessRuleDialog = true)),\n class: _normalizeClass([\n\t\t\t\t\t\t_ctx.modelValue.access_rule === _ctx.EventAccessRule.DENY_ACCESS\n\t\t\t\t\t\t\t? 'visible'\n\t\t\t\t\t\t\t: 'hidden md:block invisible',\n\t\t\t\t\t\t'md:ml-8',\n\t\t\t\t\t]),\n size: 'sm',\n variant: 'secondary'\n }, {\n default: _withCtx(() => [\n _hoisted_13,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t(\"event_editor.choose_allowed\")), 1)\n ]),\n _: 1\n }, 8, [\"class\"]),\n _createElementVNode(\"p\", {\n class: _normalizeClass([\n\t\t\t\t\t\t_ctx.modelValue.access_rule === _ctx.EventAccessRule.DENY_ACCESS\n\t\t\t\t\t\t\t? 'visible'\n\t\t\t\t\t\t\t: 'hidden md:block invisible',\n\t\t\t\t\t\t'md:ml-4',\n\t\t\t\t\t])\n }, [\n _createElementVNode(\"strong\", null, _toDisplayString(_ctx.modelValue.access_rule_exceptions?.length ?? 0), 1),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t(\"event_editor.allowed_students\")), 1)\n ], 2)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_14, [\n _createElementVNode(\"h4\", _hoisted_15, _toDisplayString(_ctx.$t(\"event_editor.time_limit_rules\")), 1),\n _createElementVNode(\"div\", _hoisted_16, [\n _createVNode(_component_Toggle, {\n labelOnLeft: true,\n modelValue: _ctx.timeLimitRuleProxy,\n \"onUpdate:modelValue\": _cache[11] || (_cache[11] = ($event: any) => ((_ctx.timeLimitRuleProxy) = $event))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_editor.time_limit_label\")), 1)\n ]),\n _: 1\n }, 8, [\"modelValue\"]),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"flex flex-col space-y-2 md:items-center md:flex-row md:space-y-0\", {\n\t\t\t\t\t\t'opacity-0 hidden lg:flex':\n\t\t\t\t\t\t\t_ctx.modelValue.time_limit_rule !== _ctx.EventTimeLimitRule.TIME_LIMIT,\n\t\t\t\t\t}])\n }, [\n _createElementVNode(\"div\", _hoisted_17, [\n _createVNode(_component_NumberInput, {\n disabled: _ctx.modelValue.time_limit_rule !== _ctx.EventTimeLimitRule.TIME_LIMIT,\n class: \"w-full\",\n small: false,\n modelValue: _ctx.timeLimitProxy,\n \"onUpdate:modelValue\": _cache[12] || (_cache[12] = ($event: any) => ((_ctx.timeLimitProxy) = $event)),\n leftIcon: 'timer'\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"misc.time_limit\")), 1)\n ]),\n _: 1\n }, 8, [\"disabled\", \"modelValue\"]),\n _createElementVNode(\"p\", _hoisted_18, _toDisplayString(_ctx.$t(\"misc.minutes\")), 1)\n ]),\n _createVNode(_component_Btn, {\n onClick: _cache[13] || (_cache[13] = ($event: any) => (_ctx.showTimeLimitDialog = true)),\n class: \"md:ml-10\",\n size: 'sm',\n variant: 'secondary'\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", _hoisted_19, [\n (_openBlock(), _createElementBlock(\"svg\", _hoisted_20, _hoisted_22))\n ]),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t(\"event_editor.manage_time_limit_exceptions\")), 1)\n ]),\n _: 1\n }),\n _createElementVNode(\"p\", {\n class: _normalizeClass([\n\t\t\t\t\t\t\t_ctx.modelValue.time_limit_rule === _ctx.EventTimeLimitRule.TIME_LIMIT\n\t\t\t\t\t\t\t\t? 'visible'\n\t\t\t\t\t\t\t\t: 'invisible',\n\t\t\t\t\t\t\t'md:ml-4',\n\t\t\t\t\t\t])\n }, [\n _createElementVNode(\"strong\", null, _toDisplayString(_ctx.modelValue.time_limit_exceptions?.length ?? 0), 1),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t(\"event_editor.time_limit_exceptions\")), 1)\n ], 2)\n ], 2)\n ]),\n _createElementVNode(\"p\", _hoisted_23, _toDisplayString(_ctx.modelValue.time_limit_rule === _ctx.EventTimeLimitRule.TIME_LIMIT\n\t\t\t\t\t\t? _ctx.$t(\"event_editor.time_limit_description\")\n\t\t\t\t\t\t: _ctx.$t(\"event_editor.no_time_limit_description\")), 1)\n ]),\n _createVNode(_component_Dialog, {\n showDialog: _ctx.showAccessRuleDialog,\n onYes: _cache[17] || (_cache[17] = ($event: any) => (_ctx.showAccessRuleDialog = false)),\n confirmOnly: true,\n fullWidth: true\n }, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_editor.choose_allowed\")), 1)\n ]),\n body: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_24, [\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t(\"event_editor.manage_allowed_description\")), 1),\n _createVNode(_component_TagInput, {\n modelValue: _ctx.allowedAccessAsTags,\n allowAutocomplete: false,\n onAddTag: _cache[14] || (_cache[14] = ($event: any) => (_ctx.onAddAllowedAccess($event))),\n onRemoveTag: _cache[15] || (_cache[15] = ($event: any) => (_ctx.onRemoveAllowedAccess($event))),\n placeholder: _ctx.$t('event_editor.student_email')\n }, null, 8, [\"modelValue\", \"placeholder\"])\n ]),\n (!_ctx.isDemoMode)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_25, [\n _createElementVNode(\"h3\", _hoisted_26, _toDisplayString(_ctx.$t(\"event_editor.import_from_valutami\")), 1),\n _createElementVNode(\"div\", _hoisted_27, [\n _hoisted_28,\n _createElementVNode(\"div\", _hoisted_29, [\n _createElementVNode(\"p\", null, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_editor.manage_allowed_import_from_valutami_1\")) + \" \", 1),\n _createElementVNode(\"strong\", null, _toDisplayString(_ctx.$t(\"event_editor.manage_allowed_import_from_valutami_2\")), 1),\n _createTextVNode(\". \" + _toDisplayString(_ctx.$t(\"event_editor.manage_allowed_import_from_valutami_3\")), 1)\n ]),\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"input\", {\n type: \"file\",\n onChange: _cache[16] || (_cache[16] = \n//@ts-ignore\n(...args) => (_ctx.onFileInputChange && _ctx.onFileInputChange(...args)))\n }, null, 32)\n ])\n ])\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }, 8, [\"showDialog\"]),\n _createVNode(_component_Dialog, {\n onYes: _cache[19] || (_cache[19] = ($event: any) => (_ctx.showTimeLimitDialog = false)),\n showDialog: _ctx.showTimeLimitDialog,\n confirmOnly: true,\n fullWidth: true\n }, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_editor.exceptions_to_time_limit\")), 1)\n ]),\n body: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_30, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.modelValue.time_limit_exceptions, (exception, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: _ctx.modelValue.id + '-time-limit-exc-' + index,\n class: \"flex my-6 lg:w-1/2\"\n }, [\n _createVNode(_component_TextInput, {\n class: \"w-full mr-2 md:mr-4\",\n modelValue: exception[0],\n \"onUpdate:modelValue\": ($event: any) => ((exception[0]) = $event)\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_editor.student_email\")), 1)\n ]),\n _: 2\n }, 1032, [\"modelValue\", \"onUpdate:modelValue\"]),\n _createElementVNode(\"div\", _hoisted_31, [\n _createVNode(_component_NumberInput, {\n class: \"w-full\",\n small: false,\n modelValue: parseFloat(exception[1]) / 60,\n \"onUpdate:modelValue\": ($event: any) => (exception[1] = parseFloat($event || 0) * 60),\n leftIcon: 'timer'\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.mediaQueryMdMatches ? _ctx.$t(\"misc.time_limit\") : _ctx.$t(\"misc.limit\")), 1)\n ]),\n _: 2\n }, 1032, [\"modelValue\", \"onUpdate:modelValue\"]),\n _createElementVNode(\"p\", _hoisted_32, _toDisplayString(_ctx.$t(\"misc.minutes\")), 1)\n ]),\n _createVNode(_component_Btn, {\n class: \"transition-opacity duration-100 opacity-50 md:ml-4 hover:opacity-100\",\n outline: true,\n variant: 'icon',\n tooltip: _ctx.$t('event_editor.delete_exception'),\n onClick: ($event: any) => (_ctx.onRemoveTimeLimitException(index))\n }, {\n default: _withCtx(() => [\n _hoisted_33\n ]),\n _: 2\n }, 1032, [\"tooltip\", \"onClick\"])\n ]))\n }), 128)),\n ((_ctx.modelValue.time_limit_exceptions ?? []).length === 0)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_34, _toDisplayString(_ctx.$t(\"event_editor.no_time_limit_exception\")), 1))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_Btn, {\n class: \"mb-4\",\n onClick: _cache[18] || (_cache[18] = ($event: any) => (_ctx.onAddTimeLimitException()))\n }, {\n default: _withCtx(() => [\n _hoisted_35,\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_editor.add_exception\")), 1)\n ]),\n _: 1\n })\n ])\n ]),\n _: 1\n }, 8, [\"showDialog\"]),\n _createVNode(_component_Dialog, {\n onYes: _cache[20] || (_cache[20] = ($event: any) => (_ctx.showDialog = false)),\n showDialog: _ctx.showDialog,\n confirmOnly: true\n }, {\n body: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_editor.cannot_change_timestamp\")), 1)\n ]),\n _: 1\n }, 8, [\"showDialog\"])\n ]))\n}","\n/* eslint-disable @typescript-eslint/no-extra-semi */\n\nimport CalendarInput from \"@/components/ui/CalendarInput.vue\";\nimport TextInput from \"@/components/ui/TextInput.vue\";\nimport TextEditor from \"@/components/ui/TextEditor.vue\";\nimport { defineComponent, inject } from \"@vue/runtime-core\";\nimport { Event, EventAccessRule, EventState, EventTimeLimitRule, Tag } from \"@/models\";\nimport Toggle from \"@/components/ui/Toggle.vue\";\n//import NumberInput from '@/components/ui/NumberInput.vue'\nimport { PropType } from \"vue\";\n//import Btn from '@/components/ui/Btn.vue'\nimport RadioGroup from \"@/components/ui/RadioGroup.vue\";\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport Dialog from \"@/components/ui/Dialog.vue\";\nimport { SelectableOption } from \"@/interfaces\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport TagInput from \"@/components/ui/TagInput.vue\";\nimport { ChangeEvent } from \"ag-grid-community/dist/lib/widgets/agCheckbox\";\nimport { csvToArray, getFileContent, setErrorNotification } from \"@/utils\";\nimport NumberInput from \"@/components/ui/NumberInput.vue\";\nimport { mediaQueryMixin } from \"@/mixins\";\nimport { isDemoMode } from \"@/utils\";\nimport { mapStores } from \"pinia\";\nimport { useMetaStore } from \"@/stores/metaStore\";\n\nexport default defineComponent({\n\tname: \"EventMetaEditor\",\n\tcomponents: {\n\t\tCalendarInput,\n\t\tTextInput,\n\t\tTextEditor,\n\t\tToggle,\n\t\tRadioGroup,\n\t\tDialog,\n\t\tBtn,\n\t\tTagInput,\n\t\tNumberInput,\n\t},\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tmixins: [mediaQueryMixin],\n\tsetup() {\n\t\treturn {\n\t\t\tv$: inject(\"v$\"),\n\t\t};\n\t},\n\twatch: {\n\t\ttimeLimitExceptionsSerialized(_newVal) {\n\t\t\tthis.emitUpdate(\"time_limit_exceptions\", JSON.parse(_newVal));\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tevent: {} as Event,\n\t\t\tsaving: false,\n\t\t\tshowDialog: false,\n\t\t\tshowAccessRuleDialog: false,\n\t\t\tshowTimeLimitDialog: false,\n\t\t\tEventAccessRule,\n\t\t\tEventTimeLimitRule,\n\t\t};\n\t},\n\tmethods: {\n\t\temitUpdate(key: keyof Event, value: unknown) {\n\t\t\tthis.$emit(\"updateEvent\", { field: key, value });\n\t\t},\n\t\temitBlur() {\n\t\t\tthis.$emit(\"blur\");\n\t\t},\n\t\tonBeginTimestampOpen() {\n\t\t\tif (this.modelValue.state != EventState.DRAFT) {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\t(this.$refs.beginTimestampElement as any).close();\n\t\t\t\tthis.showDialog = true;\n\t\t\t}\n\t\t},\n\t\tonAddTimeLimitException() {\n\t\t\t//this.modelValue.time_limit_exceptions?.push([\"\", 0]);\n\t\t\tthis.emitUpdate(\"time_limit_exceptions\", [\n\t\t\t\t...(this.modelValue.time_limit_exceptions ?? []),\n\t\t\t\t[\"\", this.modelValue.time_limit_seconds ?? 0],\n\t\t\t]);\n\t\t},\n\t\tonRemoveTimeLimitException(index: number) {\n\t\t\tif (confirm(_(\"event_editor.remove_time_limit_exception_confirmation\"))) {\n\t\t\t\tthis.emitUpdate(\n\t\t\t\t\t\"time_limit_exceptions\",\n\t\t\t\t\tthis.modelValue.time_limit_exceptions?.filter((_, i) => i !== index),\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\tonAccessRuleChange(newVal: EventAccessRule) {\n\t\t\tthis.emitUpdate(\"access_rule\", newVal);\n\t\t\tif (newVal === EventAccessRule.ALLOW_ACCESS) {\n\t\t\t\tthis.emitUpdate(\"access_rule_exceptions\", []);\n\t\t\t}\n\t\t},\n\t\tonAddAllowedAccess(value: string) {\n\t\t\t// TODO investigate\n\t\t\tsetTimeout(\n\t\t\t\t// have to delay in order to prevent issues with tag input component, which uses nextTick\n\t\t\t\t() =>\n\t\t\t\t\tthis.emitUpdate(\"access_rule_exceptions\", [\n\t\t\t\t\t\t...(this.modelValue.access_rule_exceptions ?? []),\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t]),\n\t\t\t\t10,\n\t\t\t);\n\t\t},\n\t\tonRemoveAllowedAccess(value: string) {\n\t\t\tthis.emitUpdate(\n\t\t\t\t\"access_rule_exceptions\",\n\t\t\t\tthis.modelValue.access_rule_exceptions?.filter(\n\t\t\t\t\te => e.toLowerCase() !== value.toLowerCase(),\n\t\t\t\t) ?? [],\n\t\t\t);\n\t\t},\n\t\tasync onFileInputChange(event: { target: HTMLInputElement }) {\n\t\t\tif (event.target.files === null || event.target.files.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst file = event.target.files[0];\n\n\t\t\t\tconst fileContents = await getFileContent(file);\n\n\t\t\t\tconst FIRST_HEADER_NAME = _(\"reports.csv_headers.user.mat\");\n\t\t\t\tconst EMAIL_HEADER_NAME = _(\"reports.csv_headers.user.email\");\n\n\t\t\t\tconst csvElements = csvToArray(fileContents, FIRST_HEADER_NAME);\n\n\t\t\t\tconst validCsvRecords = csvElements.filter(e => e[EMAIL_HEADER_NAME]);\n\t\t\t\tif (validCsvRecords.length === 0) {\n\t\t\t\t\tthrow new Error();\n\t\t\t\t}\n\t\t\t\tthis.emitUpdate(\n\t\t\t\t\t\"access_rule_exceptions\",\n\t\t\t\t\tvalidCsvRecords.map(\n\t\t\t\t\t\te => e[EMAIL_HEADER_NAME]?.slice(1, -1) ?? \"\", // remove quotes\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tthis.metaStore.showSuccessFeedback();\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(_(\"misc.wrong_file_format\"), true);\n\t\t\t\tthrow e;\n\t\t\t} finally {\n\t\t\t\tevent.target.value = \"\";\n\t\t\t}\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMetaStore),\n\t\tisDemoMode() {\n\t\t\treturn isDemoMode();\n\t\t},\n\t\tisDraft() {\n\t\t\treturn this.modelValue.state == EventState.DRAFT;\n\t\t},\n\t\ttimeLimitExceptionsSerialized(): string {\n\t\t\treturn JSON.stringify(this.modelValue.time_limit_exceptions ?? \"\");\n\t\t},\n\t\ttimeLimitProxy: {\n\t\t\t// handles conversion between seconds and minutes\n\t\t\tget() {\n\t\t\t\treturn (this.modelValue.time_limit_seconds ?? 0) / 60;\n\t\t\t},\n\t\t\tset(val: any) {\n\t\t\t\tthis.emitUpdate(\"time_limit_seconds\", (val ?? 0) * 60);\n\t\t\t},\n\t\t},\n\t\ttimeLimitRuleProxy: {\n\t\t\tget() {\n\t\t\t\treturn this.modelValue.time_limit_rule === EventTimeLimitRule.TIME_LIMIT;\n\t\t\t},\n\t\t\tset(val: boolean) {\n\t\t\t\tthis.emitUpdate(\n\t\t\t\t\t\"time_limit_rule\",\n\t\t\t\t\tval ? EventTimeLimitRule.TIME_LIMIT : EventTimeLimitRule.NO_TIME_LIMIT,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\tallowedAccessAsTags(): Tag[] {\n\t\t\treturn (\n\t\t\t\tthis.modelValue.access_rule_exceptions?.map(e => ({\n\t\t\t\t\tid: \"\",\n\t\t\t\t\tname: e,\n\t\t\t\t})) ?? []\n\t\t\t);\n\t\t},\n\t\t// TODO extract\n\t\taccessRulesOptions(): SelectableOption[] {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tvalue: EventAccessRule.ALLOW_ACCESS,\n\t\t\t\t\tcontent: _(\"event_editor.allow_everyone_access_label\"),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tvalue: EventAccessRule.DENY_ACCESS,\n\t\t\t\t\tcontent: _(\"event_editor.deny_access_by_default_label\"),\n\t\t\t\t},\n\t\t\t];\n\t\t},\n\t\texercisesShownAtOnceOptions(): SelectableOption[] {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tvalue: null,\n\t\t\t\t\tcontent: _(\"event_editor.show_all_exercises_at_once\"),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tvalue: 1,\n\t\t\t\t\tcontent: _(\"event_editor.show_one_exercise_at_once\"),\n\t\t\t\t},\n\t\t\t];\n\t\t},\n\t},\n});\n","import { render } from \"./EventMetaEditor.vue?vue&type=template&id=10ab7850&ts=true\"\nimport script from \"./EventMetaEditor.vue?vue&type=script&lang=ts\"\nexport * from \"./EventMetaEditor.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, normalizeClass as _normalizeClass, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"\" }\nconst _hoisted_2 = { class: \"mb-3\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"my-4 banner banner-light\"\n}\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"ml-px text-yellow-900 material-icons-outlined\" }, \" error_outline \", -1)\nconst _hoisted_5 = { class: \"\" }\nconst _hoisted_6 = {\n key: 1,\n class: \"my-4 banner banner-success\"\n}\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"ml-px text-success material-icons-outlined\" }, \" check_circle_outline \", -1)\nconst _hoisted_8 = { class: \"\" }\nconst _hoisted_9 = { class: \"\" }\nconst _hoisted_10 = { class: \"font-semibold\" }\nconst _hoisted_11 = { class: \"mt-2 list-disc list-inside\" }\nconst _hoisted_12 = { class: \"flex flex-col mt-2 md:mt-10 space-y-2 md:items-center md:flex-row md:space-y-0 md:space-x-4\" }\nconst _hoisted_13 = {\n key: 0,\n class: \"text-lg\"\n}\nconst _hoisted_14 = {\n key: 1,\n class: \"text-lg\"\n}\nconst _hoisted_15 = { key: 2 }\nconst _hoisted_16 = {\n key: 3,\n class: \"flex md:space-x-12 md:flex-row flex-col md:space-y-0 space-y-4\"\n}\nconst _hoisted_17 = {\n key: 1,\n class: \"mt-10 text-muted\"\n}\nconst _hoisted_18 = {\n key: 2,\n class: \"flex flex-col items-stretch mt-2 space-y-2\"\n}\nconst _hoisted_19 = { class: \"text-muted\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_IntegrationSwitch = _resolveComponent(\"IntegrationSwitch\")!\n const _component_PublishedOnClassroom = _resolveComponent(\"PublishedOnClassroom\")!\n const _component_Timestamp = _resolveComponent(\"Timestamp\")!\n const _component_CopyToClipboard = _resolveComponent(\"CopyToClipboard\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"h4\", _hoisted_2, _toDisplayString(_ctx.$t(\"event_editor.state_editor_title\")), 1),\n (_ctx.isDraft)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _hoisted_4,\n _createElementVNode(\"p\", _hoisted_5, _toDisplayString(_ctx.currentEventStateDescription), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.isPlanned)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _hoisted_7,\n _createElementVNode(\"p\", _hoisted_8, _toDisplayString(_ctx.currentEventStateDescription), 1)\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_9, [\n (_ctx.relevantErrors.length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: _normalizeClass([{ shake: _ctx.shakeErrorBanner }, \"mb-12 banner banner-danger\"]),\n onAnimationend: _cache[0] || (_cache[0] = ($event: any) => (_ctx.shakeErrorBanner = false))\n }, [\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"p\", _hoisted_10, _toDisplayString(_ctx.$t(\"event_editor.correct_errors_to_publish\")), 1),\n _createElementVNode(\"ul\", _hoisted_11, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.relevantErrors, (error, index) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n class: \"text-muted text-danger-dark\",\n key: 'err-' + index\n }, _toDisplayString(_ctx.$t(\"validation_errors.event.\" + error.$uid)), 1))\n }), 128))\n ])\n ])\n ], 34))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_12, [\n (_ctx.isDraft)\n ? (_openBlock(), _createElementBlock(\"h5\", _hoisted_13, _toDisplayString(_ctx.$t(\"event_editor.current_state_is_draft\")) + \". \", 1))\n : (_ctx.isPlanned)\n ? (_openBlock(), _createElementBlock(\"h5\", _hoisted_14, _toDisplayString(_ctx.$t(\"event_editor.current_state_is_planned\")) + \". \", 1))\n : (_openBlock(), _createElementBlock(\"h5\", _hoisted_15, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_editor.state_is\")) + \" \", 1),\n _createElementVNode(\"strong\", null, _toDisplayString(_ctx.currentEventStateName), 1),\n _createTextVNode(\". \")\n ])),\n (_ctx.isDraft || _ctx.isPlanned)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_16, [\n _createVNode(_component_Btn, {\n class: \"\",\n variant: 'primary',\n loading: _ctx.loading,\n disabled: false && _ctx.isDraft && _ctx.v$.$invalid && _ctx.v$.$dirty,\n onClick: _cache[1] || (_cache[1] = ($event: any) => (\n\t\t\t\t\t\t\t_ctx.isDraft\n\t\t\t\t\t\t\t\t? _ctx.v$.$invalid\n\t\t\t\t\t\t\t\t\t? _ctx.onInvalidSubmission()\n\t\t\t\t\t\t\t\t\t: _ctx.publish()\n\t\t\t\t\t\t\t\t: _ctx.revertToDraft()\n\t\t\t\t\t\t))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.isDraft ? _ctx.$t(\"event_editor.publish\") : _ctx.$t(\"event_editor.revert_to_draft\")), 1)\n ]),\n _: 1\n }, 8, [\"loading\", \"disabled\"]),\n (_ctx.isDraft && _ctx.showClassroomIntegrationSwitch && !_ctx.hasGoogleClassroomTwin)\n ? (_openBlock(), _createBlock(_component_IntegrationSwitch, {\n key: 0,\n class: \"md:ml-auto bg-light pl-3 pr-2 rounded md:py-0 py-2\",\n modelValue: _ctx.publishToClassroom,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((_ctx.publishToClassroom) = $event))\n }, null, 8, [\"modelValue\"]))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.hasGoogleClassroomTwin)\n ? (_openBlock(), _createBlock(_component_PublishedOnClassroom, {\n key: 4,\n \"remote-object-url\": \n\t\t\t\t\t\t_ctx.googleClassroomCourseWorkTwin.data.alternateLink ||\n\t\t\t\t\t\t(_ctx.googleClassroomCourseTwin\n\t\t\t\t\t\t\t? _ctx.googleClassroomCourseTwin.data.alternateLink\n\t\t\t\t\t\t\t: '')\n\t\t\t\t\t,\n class: \"banner-success pl-3 pr-2 rounded md:py-0\"\n }, null, 8, [\"remote-object-url\"]))\n : _createCommentVNode(\"\", true)\n ]),\n (_ctx.isPlanned)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_17, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_editor.event_planned_help_text\")) + \" \", 1),\n _createElementVNode(\"strong\", null, [\n _createVNode(_component_Timestamp, {\n value: _ctx.modelValue.begin_timestamp\n }, null, 8, [\"value\"])\n ]),\n _createTextVNode(\". \")\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.isPlanned || _ctx.isOpen)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_18, [\n _createElementVNode(\"p\", _hoisted_19, _toDisplayString(_ctx.$t(\"event_editor.this_is_the_link_to_the_event\")), 1),\n _createVNode(_component_CopyToClipboard, { value: _ctx.permalink }, null, 8, [\"value\"])\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}","\nimport { Event, EventState } from \"@/models\";\nimport { defineComponent, inject, PropType } from \"@vue/runtime-core\";\nimport { icons as eventStateIcons } from \"@/assets/eventStateIcons\";\nimport { getTranslatedString as _ } from \"@/i18n\";\n//import Card from \"@/components/ui/Card.vue\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport { getExamPermalink, getFormattedTimestamp } from \"@/utils\";\nimport Timestamp from \"@/components/ui/Timestamp.vue\";\nimport CopyToClipboard from \"@/components/ui/CopyToClipboard.vue\";\nimport { courseIdMixin, eventIdMixin, loadingMixin } from \"@/mixins\";\nimport IntegrationSwitch from \"@/integrations/classroom/components/IntegrationSwitch.vue\";\nimport { mapStores } from \"pinia\";\nimport { useGoogleIntegrationsStore } from \"@/integrations/stores/googleIntegrationsStore\";\nimport PublishedOnClassroom from \"@/integrations/classroom/components/PublishedOnClassroom.vue\";\nimport { GoogleClassroomCourseWorkTwin } from \"@/integrations/classroom/interfaces\";\n\nexport default defineComponent({\n\tcomponents: {\n\t\tBtn,\n\t\tTimestamp,\n\t\tCopyToClipboard,\n\t\tIntegrationSwitch,\n\t\tPublishedOnClassroom,\n\t},\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tmixins: [courseIdMixin, eventIdMixin],\n\tsetup() {\n\t\treturn {\n\t\t\tv$: inject(\"v$\"),\n\t\t};\n\t},\n\tname: \"EventStateEditor\",\n\tasync created() {\n\t\tthis.showClassroomIntegrationSwitch =\n\t\t\tawait this.googleIntegrationStore.isGoogleClassroomIntegrationActive(this.courseId);\n\t\tawait this.checkForCourseworkTwin();\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tshakeErrorBanner: false,\n\t\t\tpublishToClassroom: true,\n\t\t\tshowClassroomIntegrationSwitch: false,\n\t\t\tgoogleClassroomCourseWorkTwin: null as null | GoogleClassroomCourseWorkTwin,\n\t\t};\n\t},\n\tmethods: {\n\t\tasync checkForCourseworkTwin() {\n\t\t\tthis.googleClassroomCourseWorkTwin =\n\t\t\t\tawait this.googleIntegrationStore.getGoogleClassroomCourseWorkTwin(this.eventId);\n\t\t},\n\t\temitUpdate(value: EventState) {\n\t\t\tthis.$emit(\"update:modelValue\", {\n\t\t\t\tvalue,\n\t\t\t\tfireIntegrationEvent: this.publishToClassroom,\n\t\t\t});\n\t\t\t// if we're changing the exam to PLANNED and there's an active integration\n\t\t\t// with Classroom, check whether the twin coursework was created successfully\n\t\t\tif (\n\t\t\t\tthis.publishToClassroom &&\n\t\t\t\tthis.showClassroomIntegrationSwitch &&\n\t\t\t\tvalue === EventState.PLANNED\n\t\t\t) {\n\t\t\t\tconst handle = setInterval(async () => {\n\t\t\t\t\tawait this.checkForCourseworkTwin();\n\t\t\t\t\tif (this.hasGoogleClassroomTwin) {\n\t\t\t\t\t\tclearInterval(handle);\n\t\t\t\t\t}\n\t\t\t\t}, 1000);\n\t\t\t}\n\t\t},\n\t\tonInvalidSubmission() {\n\t\t\t// make errors visible\n\t\t\t(this.v$ as any).$touch();\n\n\t\t\twindow.scrollTo(\n\t\t\t\t0,\n\t\t\t\tdocument.body.scrollHeight || document.documentElement.scrollHeight,\n\t\t\t);\n\t\t\t// scroll to bottom of page to account for error messages appearing\n\t\t\t// in order to keep error banner in view\n\t\t\tthis.$nextTick(() =>\n\t\t\t\twindow.scrollTo(\n\t\t\t\t\t0,\n\t\t\t\t\tdocument.body.scrollHeight || document.documentElement.scrollHeight,\n\t\t\t\t),\n\t\t\t);\n\t\t\tthis.shakeErrorBanner = true;\n\t\t},\n\t\tpublish() {\n\t\t\tthis.emitUpdate(EventState.PLANNED);\n\t\t},\n\t\trevertToDraft() {\n\t\t\tthis.emitUpdate(EventState.DRAFT);\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useGoogleIntegrationsStore),\n\t\teventStateOptions() {\n\t\t\treturn (Object.keys(EventState) as unknown[] as EventState[])\n\t\t\t\t.filter((key: string | number) => parseInt(key as string) == key) //(ExerciseType[key] as unknown) == 'number')\n\t\t\t\t.map(key => ({\n\t\t\t\t\ticons: eventStateIcons[key],\n\t\t\t\t\tvalue: key,\n\t\t\t\t\tcontent: _(\"event_states.\" + key),\n\t\t\t\t\tdescription: _(\"event_states_descriptions.\" + key),\n\t\t\t\t}));\n\t\t},\n\t\thasGoogleClassroomTwin() {\n\t\t\treturn this.googleClassroomCourseWorkTwin !== null;\n\t\t},\n\t\tisDraft() {\n\t\t\treturn this.modelValue.state == EventState.DRAFT;\n\t\t},\n\t\tisPlanned() {\n\t\t\treturn this.modelValue.state == EventState.PLANNED;\n\t\t},\n\t\tisOpen() {\n\t\t\treturn this.modelValue.state == EventState.OPEN;\n\t\t},\n\t\tgoogleClassroomCourseTwin() {\n\t\t\treturn this.googleIntegrationStore.courseTwins[this.courseId];\n\t\t},\n\t\tcurrentEventStateName() {\n\t\t\treturn this.eventStateOptions[this.modelValue?.state]?.content?.toLowerCase();\n\t\t},\n\t\tcurrentEventStateDescription() {\n\t\t\treturn this.eventStateOptions[this.modelValue?.state]?.description;\n\t\t},\n\t\tformattedTimestamp() {\n\t\t\treturn getFormattedTimestamp(this.modelValue.begin_timestamp ?? \"\");\n\t\t},\n\t\tpermalink(): string {\n\t\t\treturn getExamPermalink(this.modelValue);\n\t\t},\n\t\trelevantErrors() {\n\t\t\t// remove the errors that are relative to event template rules as those\n\t\t\t// are displayed in the rule editor component\n\t\t\treturn (\n\t\t\t\t(this.v$ as any).$errors\n\t\t\t\t\t// TODO find a less hacky way\n\t\t\t\t\t.filter(\n\t\t\t\t\t\t(e: { $uid: string }) =>\n\t\t\t\t\t\t\t![\n\t\t\t\t\t\t\t\t\"rule_type-ruleTypeSet\",\n\t\t\t\t\t\t\t\t\"exercises-idBasedRulePopulated\",\n\t\t\t\t\t\t\t\t\"clauses-tagBasedRulePopulated\",\n\t\t\t\t\t\t\t\t\"satisfying-tagBasedRuleSatisfied\",\n\t\t\t\t\t\t\t].includes(e.$uid.slice(\"modelValue\".length + 1)),\n\t\t\t\t\t)\n\t\t\t);\n\t\t},\n\t},\n});\n","import { render } from \"./EventStateEditor.vue?vue&type=template&id=1c56653f&ts=true\"\nimport script from \"./EventStateEditor.vue?vue&type=script&lang=ts\"\nexport * from \"./EventStateEditor.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, createTextVNode as _createTextVNode, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, withCtx as _withCtx, renderSlot as _renderSlot } from \"vue\"\n\nconst _hoisted_1 = { class: \"\" }\nconst _hoisted_2 = { class: \"flex items-center mb-2\" }\nconst _hoisted_3 = { class: \"mb-6\" }\nconst _hoisted_4 = {\n key: 0,\n class: \"mb-8 text-muted\"\n}\nconst _hoisted_5 = {\n key: 1,\n class: \"banner banner-danger\"\n}\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined\" }, \" error_outline \", -1)\nconst _hoisted_7 = { class: \"\" }\nconst _hoisted_8 = { class: \"\" }\nconst _hoisted_9 = {\n key: 2,\n class: \"flex flex-col items-center opacity-70 card card-filled\"\n}\nconst _hoisted_10 = { class: \"text-muted select-none\" }\nconst _hoisted_11 = { class: \"flex items-center mb-4 -mt-2\" }\nconst _hoisted_12 = { class: \"flex items-center mt-auto\" }\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mr-1 text-base material-icons-outlined\" }, \" add \", -1)\nconst _hoisted_14 = { class: \"w-max\" }\nconst _hoisted_15 = { class: \"flex flex-col w-full space-y-2 md:space-y-0 md:items-center md:flex-row\" }\nconst _hoisted_16 = { class: \"flex items-center\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_SegmentedControls = _resolveComponent(\"SegmentedControls\")!\n const _component_ArticleHandle = _resolveComponent(\"ArticleHandle\")!\n const _component_EventTemplateRuleEditor = _resolveComponent(\"EventTemplateRuleEditor\")!\n const _component_draggable = _resolveComponent(\"draggable\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_NumberInput = _resolveComponent(\"NumberInput\")!\n const _component_DropdownMenu = _resolveComponent(\"DropdownMenu\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"h4\", null, _toDisplayString(_ctx.$t(\"event_template_editor.editor_title\")), 1),\n (_ctx.modelValue.rules.length > 0)\n ? (_openBlock(), _createBlock(_component_SegmentedControls, {\n key: 0,\n small: true,\n class: \"hidden ml-auto md:block\",\n options: _ctx.viewModesAsOptions,\n modelValue: _ctx.viewMode,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.viewMode) = $event))\n }, null, 8, [\"options\", \"modelValue\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_3, [\n (!_ctx.showEditWarning)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_4, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_template_editor.introduction_text\")) + \" \", 1),\n _createVNode(_component_ArticleHandle, { articleId: 'whats_exam_template' }),\n _createTextVNode(\". \")\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _hoisted_6,\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"h4\", _hoisted_7, _toDisplayString(_ctx.$t(\"misc.warning\")), 1),\n _createElementVNode(\"p\", _hoisted_8, _toDisplayString(_ctx.$t(\"event_editor.edit_template_in_progress_warning\")), 1)\n ])\n ])),\n _createVNode(_component_draggable, {\n animation: \"100\",\n class: _normalizeClass({\n\t\t\t\t\t'grid grid-cols-2 2xl:grid-cols-3 gap-4 mb-10': _ctx.viewMode === 'grid',\n\t\t\t\t}),\n \"ghost-class\": \"drag-ghost\",\n \"drag-class\": \"dragging-element\",\n handle: \".drag-handle\",\n \"item-key\": \"id\",\n modelValue: _ctx.modelValue.rules,\n onEnd: _cache[1] || (_cache[1] = ($event: any) => (_ctx.onRuleDragEnd($event)))\n }, {\n item: _withCtx(({ element, index }) => [\n _createVNode(_component_EventTemplateRuleEditor, {\n class: _normalizeClass([_ctx.viewMode === 'list' && index % 2 ? 'card-filled' : 'bg-white']),\n randomOrder: _ctx.randomRuleOrder,\n globallySelectedExercises: _ctx.selectedExercises,\n modelValue: element,\n lockRuleType: element.amount > 1,\n ordering: _ctx.getActualSlotOrdering(index),\n reduced: _ctx.viewMode === 'grid' || _ctx.viewMode === 'compact_list',\n onUpdateRule: ($event: any) => {\n\t\t\t\t\t\t\t_ctx.onRuleUpdate(element, $event.field, $event.value);\n\t\t\t\t\t\t\t_ctx.$emit('templateChanged');\n\t\t\t\t\t\t},\n onAddClause: ($event: any) => {\n\t\t\t\t\t\t\t_ctx.onRuleAddClause(element);\n\t\t\t\t\t\t\t_ctx.$emit('templateChanged');\n\t\t\t\t\t\t},\n onUpdateClause: ($event: any) => {\n\t\t\t\t\t\t\t_ctx.onRuleUpdateClause(element, $event);\n\t\t\t\t\t\t\t_ctx.$emit('templateChanged');\n\t\t\t\t\t\t},\n onDeleteClause: ($event: any) => {\n\t\t\t\t\t\t\t_ctx.onRuleDeleteClause(element, $event);\n\t\t\t\t\t\t\t_ctx.$emit('templateChanged');\n\t\t\t\t\t\t},\n onDeleteRule: ($event: any) => {\n\t\t\t\t\t\t\t_ctx.onRuleDelete(element);\n\t\t\t\t\t\t\t_ctx.$emit('templateChanged');\n\t\t\t\t\t\t}\n }, null, 8, [\"class\", \"randomOrder\", \"globallySelectedExercises\", \"modelValue\", \"lockRuleType\", \"ordering\", \"reduced\", \"onUpdateRule\", \"onAddClause\", \"onUpdateClause\", \"onDeleteClause\", \"onDeleteRule\"])\n ]),\n _: 1\n }, 8, [\"class\", \"modelValue\"]),\n ((_ctx.modelValue.rules?.length ?? 0) === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [\n _createElementVNode(\"p\", _hoisted_10, _toDisplayString(_ctx.$t(\"event_template_editor.no_rules\")), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_11, [\n _renderSlot(_ctx.$slots, \"afterRules\")\n ]),\n _createElementVNode(\"div\", _hoisted_12, [\n _createVNode(_component_Btn, {\n class: \"w-full md:w-max\",\n onClick: _cache[2] || (_cache[2] = ($event: any) => {\n\t\t\t\t\t_ctx.onAddRule();\n\t\t\t\t\t_ctx.$emit('templateChanged');\n\t\t\t\t}),\n loading: _ctx.localLoading\n }, {\n default: _withCtx(() => [\n _hoisted_13,\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_template_editor.add_rule\")), 1)\n ]),\n _: 1\n }, 8, [\"loading\"]),\n _createVNode(_component_DropdownMenu, {\n expanded: _ctx.addMultipleRulesExpanded,\n onToggleExpanded: _cache[5] || (_cache[5] = ($event: any) => (_ctx.addMultipleRulesExpanded = !_ctx.addMultipleRulesExpanded)),\n class: \"ml-0.5\",\n placement: _ctx.mediaQueryMdMatches ? 'left' : 'right',\n tooltip: _ctx.$t('event_template_editor.add_more_rules')\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_14, [\n _createElementVNode(\"div\", _hoisted_15, [\n _createElementVNode(\"div\", _hoisted_16, [\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t(\"misc.add\")), 1),\n _createVNode(_component_NumberInput, {\n modelValue: _ctx.addRuleAmount,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((_ctx.addRuleAmount) = $event)),\n class: \"w-16 mx-2\",\n min: 2\n }, null, 8, [\"modelValue\"]),\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t(\"misc.slots\")), 1)\n ]),\n _createVNode(_component_Btn, {\n size: 'sm',\n class: \"md:ml-12\",\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.onAddRule(_ctx.addRuleAmount)))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"misc.add\")), 1)\n ]),\n _: 1\n })\n ])\n ])\n ]),\n _: 1\n }, 8, [\"expanded\", \"placement\", \"tooltip\"])\n ])\n ]))\n}","import { openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, createBlock as _createBlock, createSlots as _createSlots } from \"vue\"\n\nconst _hoisted_1 = { class: \"h-full py-6 my-3 transition-shadow duration-75 ease-in-out card shadow-elevation hover-shadow-elevation-2\" }\nconst _hoisted_2 = { class: \"flex flex-col w-full md:items-center md:flex-row\" }\nconst _hoisted_3 = { class: \"flex md:w-1/3 md:mr-auto\" }\nconst _hoisted_4 = {\n key: 0,\n class: \"my-auto mr-2 text-lg cursor-move drag-handle material-icons-outlined opacity-70\"\n}\nconst _hoisted_5 = {\n key: 0,\n class: \"ml-2 text-muted\"\n}\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"span\", {\n style: {\"font-size\":\"17px\"},\n class: \"material-icons\"\n}, \" delete \", -1)\nconst _hoisted_7 = { class: \"flex flex-col w-full my-auto md:space-x-2 md:items-center md:flex-row md:ml-auto\" }\nconst _hoisted_8 = { class: \"flex space-x-1\" }\nconst _hoisted_9 = { class: \"flex items-center space-x-2\" }\nconst _hoisted_10 = { class: \"flex items-center\" }\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons mr-1.5\" }, \" settings \", -1)\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"span\", {\n style: {\"font-size\":\"17px\"},\n class: \"material-icons\"\n}, \" delete \", -1)\nconst _hoisted_13 = {\n key: 0,\n class: \"mt-4\"\n}\nconst _hoisted_14 = { class: \"mb-2 text-muted\" }\nconst _hoisted_15 = {\n key: 0,\n class: \"mb-2 text-muted\"\n}\nconst _hoisted_16 = {\n key: 1,\n class: \"mb-2 text-muted\"\n}\nconst _hoisted_17 = { class: \"flex xl:flex-row flex-col xl:space-x-3\" }\nconst _hoisted_18 = {\n key: 0,\n class: \"mr-2\"\n}\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-xl text-muted\" }, \"(\", -1)\nconst _hoisted_20 = {\n key: 1,\n class: \"text-xl text-muted\"\n}\nconst _hoisted_21 = { key: 2 }\nconst _hoisted_22 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined\" }, \" restart_alt \", -1)\nconst _hoisted_23 = { key: 0 }\nconst _hoisted_24 = { class: \"grid grid-cols-1 mt-6 md:grid-cols-3\" }\nconst _hoisted_25 = { class: \"flex items-center justify-center space-x-3\" }\nconst _hoisted_26 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"opacity-50 material-icons\" }, \" topic \", -1)\nconst _hoisted_27 = { class: \"\" }\nconst _hoisted_28 = {\n style: {\"letter-spacing\":\"0.25px\"},\n class: \"font-normal\"\n}\nconst _hoisted_29 = { class: \"flex items-center justify-center space-x-3\" }\nconst _hoisted_30 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"opacity-50 material-icons-outlined\" }, \" shuffle \", -1)\nconst _hoisted_31 = { class: \"\" }\nconst _hoisted_32 = {\n style: {\"letter-spacing\":\"0.25px\"},\n class: \"font-normal\"\n}\nconst _hoisted_33 = { class: \"flex items-center justify-center space-x-3\" }\nconst _hoisted_34 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"opacity-50 material-icons\" }, \" label \", -1)\nconst _hoisted_35 = { class: \"\" }\nconst _hoisted_36 = {\n style: {\"letter-spacing\":\"0.25px\"},\n class: \"font-normal\"\n}\nconst _hoisted_37 = { key: 1 }\nconst _hoisted_38 = { class: \"text-dark\" }\nconst _hoisted_39 = {\n class: \"mt-4\",\n style: {\"height\":\"calc(100vh - 224px)\"}\n}\nconst _hoisted_40 = { key: 2 }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_Tooltip = _resolveComponent(\"Tooltip\")!\n const _component_NumberInput = _resolveComponent(\"NumberInput\")!\n const _component_MinimalExercisePreview = _resolveComponent(\"MinimalExercisePreview\")!\n const _component_SkeletonCard = _resolveComponent(\"SkeletonCard\")!\n const _component_Tag = _resolveComponent(\"Tag\")!\n const _component_ExercisePicker = _resolveComponent(\"ExercisePicker\")!\n const _component_TagBasedEventTemplateRuleEditor = _resolveComponent(\"TagBasedEventTemplateRuleEditor\")!\n const _component_Dialog = _resolveComponent(\"Dialog\")!\n\n return (_openBlock(), _createElementBlock(\"div\", null, [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n (!_ctx.randomOrder)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_4, \" drag_indicator \"))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"h4\", {\n class: _normalizeClass([{ 'text-danger-dark': _ctx.v$.$errors.length > 0 }, \"\"])\n }, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_template_rule_editor.exercise_number\")) + \" \" + _toDisplayString(_ctx.displayedOrdering) + \" \", 1),\n (_ctx.modelValue.amount > 1)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_5, \"(\" + _toDisplayString(_ctx.modelValue.amount + \" \" + _ctx.$t(\"misc.slots\")) + \")\", 1))\n : _createCommentVNode(\"\", true)\n ], 2),\n _createVNode(_component_Btn, {\n tooltip: _ctx.$t('misc.delete'),\n variant: 'icon',\n outline: true,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('deleteRule'))),\n class: \"ml-auto -mt-2 -mr-3 transition-opacity duration-100 opacity-50 md:hidden hover:opacity-100\"\n }, {\n default: _withCtx(() => [\n _hoisted_6\n ]),\n _: 1\n }, 8, [\"tooltip\"])\n ]),\n _createElementVNode(\"div\", _hoisted_7, [\n _createVNode(_component_NumberInput, {\n min: 0,\n class: _normalizeClass([\"my-4 md:ml-auto md:my-0\", { 'md:w-1/4': !_ctx.reduced, 'md:w-1/3': _ctx.reduced }]),\n modelValue: _ctx.modelValue.weight ?? 0,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => (_ctx.emitUpdate('weight', $event)))\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_8, [\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t(\"event_template_rule_editor.weight\")), 1),\n _createVNode(_component_Tooltip, {\n placement: 'top',\n class: \"transform scale-125\",\n \"text-code\": 'event_template_rule_editor.weight'\n }, null, 8, [\"text-code\"])\n ])\n ]),\n _: 1\n }, 8, [\"class\", \"modelValue\"]),\n _createElementVNode(\"div\", _hoisted_9, [\n _createVNode(_component_Btn, {\n variant: 'secondary',\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.showRuleDialog())),\n size: 'sm',\n class: \"w-full\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_10, [\n _hoisted_11,\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_template_rule_editor.choose_exercise\")), 1)\n ])\n ]),\n _: 1\n }),\n _createVNode(_component_Btn, {\n tooltip: _ctx.$t('misc.delete'),\n variant: 'icon',\n outline: true,\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.$emit('deleteRule'))),\n class: \"hidden transition-opacity duration-100 opacity-50 md:block hover:opacity-100\"\n }, {\n default: _withCtx(() => [\n _hoisted_12\n ]),\n _: 1\n }, 8, [\"tooltip\"])\n ])\n ])\n ]),\n (_ctx.isSlotPopulated && _ctx.modelValue.rule_type == _ctx.EventTemplateRuleType.ID_BASED)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [\n _createElementVNode(\"p\", _hoisted_14, _toDisplayString(_ctx.ruleExercises.length == 1\n\t\t\t\t\t\t\t? _ctx.$t(\"event_template_rule_editor.same_exercise_for_everyone_description\")\n\t\t\t\t\t\t\t: _ctx.$t(\"event_template_rule_editor.one_exercise_from_set_description\")), 1),\n _createElementVNode(\"div\", null, [\n (!_ctx.loadingPreview)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: _normalizeClass([\n\t\t\t\t\t\t\t_ctx.ruleExercises.length > 1\n\t\t\t\t\t\t\t\t? _ctx.reduced\n\t\t\t\t\t\t\t\t\t? 'flex flex-wrap'\n\t\t\t\t\t\t\t\t\t: 'grid md:grid-cols-2 gap-2'\n\t\t\t\t\t\t\t\t: '',\n\t\t\t\t\t\t\t'overflow-x-auto md:overflow-visible',\n\t\t\t\t\t\t])\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.ruleExercises, (exercise) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: 'r-' + _ctx.modelValue.id + '-e-' + exercise.id\n }, [\n _createVNode(_component_MinimalExercisePreview, {\n reduced: _ctx.reduced,\n exercise: exercise,\n selectable: false,\n showEdit: false,\n class: _normalizeClass({ 'mr-6': _ctx.reduced }),\n onEdit: ($event: any) => (\n\t\t\t\t\t\t\t\t\t_ctx.$router.push({\n\t\t\t\t\t\t\t\t\t\tname: 'CourseExercises',\n\t\t\t\t\t\t\t\t\t\thash: '#editor-' + exercise.id,\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t)\n }, null, 8, [\"reduced\", \"exercise\", \"class\", \"onEdit\"])\n ]))\n }), 128))\n ], 2))\n : (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: _normalizeClass([\n\t\t\t\t\t\t\t_ctx.ruleExercises.length > 1 ? 'grid md:grid-cols-2 gap-2' : '',\n\t\t\t\t\t\t\t'overflow-x-auto md:overflow-visible',\n\t\t\t\t\t\t])\n }, [\n _createVNode(_component_SkeletonCard, { short: true }),\n (_ctx.ruleExercises.length > 1)\n ? (_openBlock(), _createBlock(_component_SkeletonCard, {\n key: 0,\n short: true\n }))\n : _createCommentVNode(\"\", true)\n ], 2))\n ])\n ]))\n : (\n\t\t\t\t\t_ctx.isSlotPopulated && _ctx.modelValue.rule_type == _ctx.EventTemplateRuleType.TAG_BASED\n\t\t\t\t)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: _normalizeClass([\"mt-4\", { 'opacity-40': _ctx.v$.$errors.length > 0 }])\n }, [\n (_ctx.modelValue.amount === 1)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_15, _toDisplayString(_ctx.$t(\"event_template_rule_editor.tag_based_description\")), 1))\n : (_openBlock(), _createElementBlock(\"p\", _hoisted_16, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_template_rule_editor.tag_based_description_multiple_1\") + \" \"), 1),\n _createElementVNode(\"strong\", null, _toDisplayString(_ctx.modelValue.amount), 1),\n _createTextVNode(\" \" + _toDisplayString(\" \" + _ctx.$t(\"event_template_rule_editor.tag_based_description_multiple_2\")), 1)\n ])),\n _createElementVNode(\"div\", _hoisted_17, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.modelValue.clauses, (clause, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: 'clause-preview-' + clause.id,\n class: \"flex items-center mb-2 flex-wrap\"\n }, [\n (clause.tags.length > 1)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_18, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_template_rule_editor.tag_based_at_least_one\")) + \" \" + _toDisplayString(_ctx.$t(\"misc.among\")) + \" \", 1),\n _hoisted_19\n ]))\n : _createCommentVNode(\"\", true),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(clause.tags, (tag, index) => {\n return (_openBlock(), _createBlock(_component_Tag, {\n class: _normalizeClass([\"mx-0.5\", { '-ml-1.5': index === 0 }]),\n key: 'clause-' + clause.id + '-tag-' + tag.id,\n tag: tag\n }, null, 8, [\"class\", \"tag\"]))\n }), 128)),\n (clause.tags.length > 1)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_20, \")\"))\n : _createCommentVNode(\"\", true),\n (index !== _ctx.modelValue.clauses.length - 1)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_21, \",\"))\n : _createCommentVNode(\"\", true)\n ]))\n }), 128))\n ])\n ], 2))\n : _createCommentVNode(\"\", true),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.v$.$errors, (error) => {\n return (_openBlock(), _createElementBlock(\"p\", {\n class: \"text-danger-dark\",\n key: _ctx.modelValue.id + '-' + error.$uid\n }, _toDisplayString(_ctx.$t(\"validation_errors.eventTemplateRule.\" + error.$uid)), 1))\n }), 128))\n ]),\n _createVNode(_component_Dialog, {\n showDialog: _ctx.showDialog,\n fullWidth: true,\n fullHeight: _ctx.modelValue.rule_type === _ctx.EventTemplateRuleType.ID_BASED,\n headerBorder: _ctx.modelValue.rule_type === _ctx.EventTemplateRuleType.ID_BASED,\n stickyHeader: _ctx.modelValue.rule_type === _ctx.EventTemplateRuleType.ID_BASED,\n footerBorder: true,\n confirmOnly: true,\n onYes: _cache[13] || (_cache[13] = ($event: any) => (_ctx.onCloseDialog()))\n }, _createSlots({\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString((_ctx.modelValue.amount === 1\n\t\t\t\t\t\t? _ctx.$t(\"event_template_rule_editor.populate_slot_singular_title\")\n\t\t\t\t\t\t: _ctx.$t(\"event_template_rule_editor.populate_slot_plural_title\")) +\n\t\t\t\t\t\" \" +\n\t\t\t\t\t_ctx.displayedOrdering), 1)\n ]),\n body: _withCtx(() => [\n (_ctx.modelValue.rule_type == null)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_23, [\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t(\"event_template_rule_editor.mode_selection_text\")), 1),\n _createElementVNode(\"div\", _hoisted_24, [\n _createVNode(_component_Btn, {\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.setRuleMode(_ctx.EventTemplateRuleType.ID_BASED, true))),\n variant: 'transparent',\n class: \"pb-4 border-b md:py-5 md:pl-4 md:border-r md:border-b-0\"\n }, {\n content: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_25, [\n _hoisted_26,\n _createElementVNode(\"h4\", _hoisted_27, _toDisplayString(_ctx.$t(\"event_template_rule_editor.pick_single_exercise\")), 1)\n ]),\n _createElementVNode(\"p\", _hoisted_28, _toDisplayString(_ctx.$t(\"event_template_rule_editor.pick_single_exercise_help_text\")), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_Btn, {\n onClick: _cache[6] || (_cache[6] = ($event: any) => (_ctx.setRuleMode(_ctx.EventTemplateRuleType.ID_BASED, false))),\n variant: 'transparent',\n class: \"py-4 border-b md:pl-4 md:pr-3 md:py-0 md:border-r md:border-b-0\"\n }, {\n content: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_29, [\n _hoisted_30,\n _createElementVNode(\"h4\", _hoisted_31, _toDisplayString(_ctx.$t(\"event_template_rule_editor.pick_exercise_from_pool\")), 1)\n ]),\n _createElementVNode(\"p\", _hoisted_32, _toDisplayString(_ctx.$t(\"event_template_rule_editor.pick_exercise_from_pool_help_text\")), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_Btn, {\n onClick: _cache[7] || (_cache[7] = ($event: any) => (_ctx.setRuleMode(_ctx.EventTemplateRuleType.TAG_BASED))),\n variant: 'transparent',\n class: \"pt-4 md:pl-8 md:pt-0 md:pr-6\"\n }, {\n content: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_33, [\n _hoisted_34,\n _createElementVNode(\"h4\", _hoisted_35, _toDisplayString(_ctx.$t(\"event_template_rule_editor.pick_exercise_tag_based\")), 1)\n ]),\n _createElementVNode(\"p\", _hoisted_36, _toDisplayString(_ctx.$t(\"event_template_rule_editor.pick_exercise_tag_based_help_text\")), 1)\n ]),\n _: 1\n })\n ])\n ]))\n : (_ctx.modelValue.rule_type == _ctx.EventTemplateRuleType.ID_BASED)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_37, [\n _createElementVNode(\"h3\", _hoisted_38, _toDisplayString(_ctx.pickOneExerciseOnly\n\t\t\t\t\t\t\t\t? _ctx.$t(\"event_template_rule_editor.pick_single_exercise\")\n\t\t\t\t\t\t\t\t: _ctx.$t(\"event_template_rule_editor.pick_exercise_from_pool\")), 1),\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.pickOneExerciseOnly\n\t\t\t\t\t\t\t\t? _ctx.$t(\"event_template_rule_editor.pick_single_exercise_help_text\")\n\t\t\t\t\t\t\t\t: _ctx.$t(\"event_template_rule_editor.pick_exercise_from_pool_help_text\")), 1),\n _createElementVNode(\"div\", _hoisted_39, [\n _createVNode(_component_ExercisePicker, {\n modelValue: _ctx.modelValue.exercises,\n alreadySelected: _ctx.globallySelectedExercises,\n onAddExercise: _cache[8] || (_cache[8] = ($event: any) => (_ctx.onAddExercise($event))),\n onRemoveExercise: _cache[9] || (_cache[9] = ($event: any) => (_ctx.onRemoveExercise($event)))\n }, null, 8, [\"modelValue\", \"alreadySelected\"])\n ])\n ]))\n : (_ctx.modelValue.rule_type == _ctx.EventTemplateRuleType.TAG_BASED)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_40, [\n _createVNode(_component_TagBasedEventTemplateRuleEditor, {\n modelValue: _ctx.modelValue.clauses,\n satisfying: _ctx.modelValue.satisfying,\n onAddClause: _cache[10] || (_cache[10] = ($event: any) => (_ctx.$emit('addClause'))),\n onDeleteClause: _cache[11] || (_cache[11] = ($event: any) => (_ctx.$emit('deleteClause', $event))),\n onUpdateClause: _cache[12] || (_cache[12] = ($event: any) => (_ctx.$emit('updateClause', $event)))\n }, null, 8, [\"modelValue\", \"satisfying\"])\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 2\n }, [\n (_ctx.modelValue.rule_type != null && !_ctx.lockRuleType)\n ? {\n name: \"backButton\",\n fn: _withCtx(() => [\n _createVNode(_component_Btn, {\n variant: 'icon',\n outline: true,\n size: 'lg',\n tooltip: _ctx.$t('event_template_rule_editor.reset_slot_settings'),\n class: \"-ml-3.5 mt-1.25px\",\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.setRuleMode(null)))\n }, {\n default: _withCtx(() => [\n _hoisted_22\n ]),\n _: 1\n }, 8, [\"tooltip\"])\n ]),\n key: \"0\"\n }\n : undefined\n ]), 1032, [\"showDialog\", \"fullHeight\", \"headerBorder\", \"stickyHeader\"])\n ]))\n}","import { resolveComponent as _resolveComponent, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, withCtx as _withCtx } from \"vue\"\n\nconst _hoisted_1 = { class: \"\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"grid gap-5 md:grid-cols-2\"\n}\nconst _hoisted_3 = {\n key: 1,\n class: \"grid gap-5 md:grid-cols-2\"\n}\nconst _hoisted_4 = {\n key: 2,\n class: \"flex flex-col space-y-4\"\n}\nconst _hoisted_5 = { class: \"text-muted\" }\nconst _hoisted_6 = {\n key: 3,\n class: \"flex flex-col space-y-4\"\n}\nconst _hoisted_7 = { class: \"mx-auto text-muted\" }\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-full h-1 mt-4 mb-12 bg-gray-200 rounded-md\" }, null, -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ExerciseSearchFilters = _resolveComponent(\"ExerciseSearchFilters\")!\n const _component_MinimalExercisePreview = _resolveComponent(\"MinimalExercisePreview\")!\n const _component_MinimalExercisePreviewSkeleton = _resolveComponent(\"MinimalExercisePreviewSkeleton\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_Spinner = _resolveComponent(\"Spinner\")!\n const _component_VueEternalLoading = _resolveComponent(\"VueEternalLoading\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_ExerciseSearchFilters, {\n class: \"px-8 pt-6 pb-2 mb-6 -mx-4 md:-mx-8 bg-light\",\n modelValue: _ctx.searchFilter,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.searchFilter) = $event)),\n onResetFilters: _cache[1] || (_cache[1] = ($event: any) => (_ctx.searchFilter = _ctx.getBlankExerciseSearchFilters())),\n full: false\n }, null, 8, [\"modelValue\"]),\n (!_ctx.firstLoading)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.mainStore.exercises, (exercise, index) => {\n return (_openBlock(), _createBlock(_component_MinimalExercisePreview, {\n selectable: true,\n selectionDisabled: \n\t\t\t\t\t_ctx.isExerciseDraft(exercise) || _ctx.isSelectedInAnotherRule(exercise)\n\t\t\t\t,\n selectButtonTitle: \n\t\t\t\t\t_ctx.isExerciseDraft(exercise)\n\t\t\t\t\t\t? _ctx.$t('exercise_picker.cannot_pick_draft')\n\t\t\t\t\t\t: _ctx.isSelectedInAnotherRule(exercise)\n\t\t\t\t\t\t? _ctx.$t('exercise_picker.already_selected')\n\t\t\t\t\t\t: ''\n\t\t\t\t,\n key: 'course-' + _ctx.courseId + '-exercise-' + index,\n exercise: exercise,\n onSelection: ($event: any) => (_ctx.onSelection(exercise)),\n highlighted: _ctx.isSelected(exercise)\n }, null, 8, [\"selectionDisabled\", \"selectButtonTitle\", \"exercise\", \"onSelection\", \"highlighted\"]))\n }), 128))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createVNode(_component_MinimalExercisePreviewSkeleton),\n _createVNode(_component_MinimalExercisePreviewSkeleton),\n _createVNode(_component_MinimalExercisePreviewSkeleton),\n _createVNode(_component_MinimalExercisePreviewSkeleton),\n _createVNode(_component_MinimalExercisePreviewSkeleton),\n _createVNode(_component_MinimalExercisePreviewSkeleton)\n ])),\n (!_ctx.firstLoading && _ctx.mainStore.exercises.length === 0 && _ctx.emptyFilter)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createElementVNode(\"p\", _hoisted_5, _toDisplayString(_ctx.$t(\"exercise_picker.no_available_exercises\")), 1),\n _createVNode(_component_router_link, {\n class: \"mx-auto link\",\n to: { name: 'CourseExercises' }\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Btn, { variant: 'primary-borderless' }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"exercise_picker.go_to_exercises\")), 1)\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]))\n : (!_ctx.firstLoading && _ctx.mainStore.exercises.length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _createElementVNode(\"p\", _hoisted_7, _toDisplayString(_ctx.$t(\"course_exercises.no_matching_exercises\")) + \". \", 1),\n _createVNode(_component_router_link, {\n class: \"mx-auto link\",\n to: { name: 'CourseExercises' }\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Btn, { variant: 'primary-borderless' }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"exercise_picker.go_to_exercises\")), 1)\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_VueEternalLoading, {\n load: _ctx.onLoadMore,\n \"is-initial\": _ctx.isInitialInfiniteLoad,\n \"onUpdate:is-initial\": _cache[2] || (_cache[2] = ($event: any) => ((_ctx.isInitialInfiniteLoad) = $event))\n }, {\n loading: _withCtx(() => [\n _createVNode(_component_Spinner)\n ]),\n \"no-more\": _withCtx(() => [\n _hoisted_8\n ]),\n _: 1\n }, 8, [\"load\", \"is-initial\"])\n ]))\n}","\nimport { VueEternalLoading, LoadAction } from \"@ts-pro/vue-eternal-loading\";\nimport Spinner from \"@/components/ui/Spinner.vue\";\n\nimport { Exercise, ExerciseState, ExerciseType } from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport MinimalExercisePreview from \"@/components/teacher/ExerciseEditor/MinimalExercisePreview.vue\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport ExerciseSearchFilters from \"./ExerciseSearchFilters.vue\";\nimport { ExerciseSearchFilter } from \"@/api/interfaces\";\nimport { getDebouncedForFilter } from \"@/utils\";\nimport { courseIdMixin } from \"@/mixins\";\nimport MinimalExercisePreviewSkeleton from \"../ui/skeletons/MinimalExercisePreviewSkeleton.vue\";\nimport { getBlankExerciseSearchFilters, isEmptyFilter } from \"@/api/utils\";\nimport { mapStores } from \"pinia\";\nimport { useMainStore } from \"@/stores/mainStore\";\nexport default defineComponent({\n\tname: \"ExercisePicker\",\n\tasync created() {\n\t\tthis.onFilterChange = getDebouncedForFilter(this.onFilterChange);\n\n\t\t// this.firstLoading = true;\n\t\t// await this.getExercises({\n\t\t// courseId: this.courseId,\n\t\t// fromFirstPage: true,\n\t\t// });\n\t\t// this.firstLoading = false;\n\t},\n\tmixins: [courseIdMixin],\n\twatch: {\n\t\tsearchFilter: {\n\t\t\tasync handler(val: ExerciseSearchFilter) {\n\t\t\t\tthis.isInitialInfiniteLoad = true;\n\t\t\t\tawait this.onFilterChange();\n\t\t\t},\n\t\t\tdeep: true,\n\t\t},\n\t},\n\tcomponents: {\n\t\tMinimalExercisePreview,\n\t\tVueEternalLoading,\n\t\tSpinner,\n\t\tExerciseSearchFilters,\n\t\tBtn,\n\t\tMinimalExercisePreviewSkeleton,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tfirstLoading: false,\n\t\t\tisInitialInfiniteLoad: false,\n\t\t\tsearchFilter: {\n\t\t\t\tlabel: \"\",\n\t\t\t\ttext: \"\",\n\t\t\t\ttags: [] as string[],\n\t\t\t\texercise_types: [] as ExerciseType[],\n\t\t\t\tstates: [] as ExerciseState[],\n\t\t\t} as ExerciseSearchFilter,\n\t\t};\n\t},\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\tallowPickingDraft: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\talreadySelected: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tmethods: {\n\t\tisExerciseDraft(exercise: Exercise): boolean {\n\t\t\treturn !this.allowPickingDraft && exercise.state == ExerciseState.DRAFT;\n\t\t},\n\t\tisSelectedInAnotherRule(exercise: Exercise): boolean {\n\t\t\treturn this.alreadySelected.includes(exercise.id) && !this.isSelected(exercise);\n\t\t},\n\t\tonSelection(exercise: Exercise) {\n\t\t\tconst index = this.modelValue.findIndex(e => e == exercise.id);\n\t\t\tif (index === -1) {\n\t\t\t\tthis.$emit(\"addExercise\", exercise);\n\t\t\t} else {\n\t\t\t\tthis.$emit(\"removeExercise\", exercise);\n\t\t\t}\n\t\t},\n\t\tisSelected(exercise: Exercise): boolean {\n\t\t\treturn this.modelValue.find(e => e == exercise.id) != null;\n\t\t},\n\t\tasync onLoadMore({ loaded, noMore, error }: LoadAction) {\n\t\t\ttry {\n\t\t\t\tconst moreResults = await this.mainStore.getExercises({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\tfromFirstPage: false,\n\t\t\t\t\tfilters: this.searchFilter,\n\t\t\t\t});\n\t\t\t\tif (!moreResults) {\n\t\t\t\t\tnoMore();\n\t\t\t\t} else {\n\t\t\t\t\tloaded();\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error(\"Error loading more exercises\", e);\n\t\t\t\terror();\n\t\t\t}\n\t\t},\n\t\tasync onFilterChange() {\n\t\t\tawait this.mainStore.getExercises({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\tfromFirstPage: true,\n\t\t\t\tfilters: this.searchFilter,\n\t\t\t});\n\t\t},\n\t\tgetBlankExerciseSearchFilters,\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore),\n\t\temptyFilter() {\n\t\t\treturn isEmptyFilter(this.searchFilter);\n\t\t},\n\t},\n});\n","import { render } from \"./ExercisePicker.vue?vue&type=template&id=4948b65a&ts=true\"\nimport script from \"./ExercisePicker.vue?vue&type=script&lang=ts\"\nexport * from \"./ExercisePicker.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, createBlock as _createBlock, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"mb-6 text-muted\"\n}\nconst _hoisted_2 = {\n key: 1,\n class: \"flex flex-col mb-12\"\n}\nconst _hoisted_3 = { class: \"mb-2 text-muted text-danger-dark\" }\nconst _hoisted_4 = {\n key: 2,\n class: \"flex flex-col\"\n}\nconst _hoisted_5 = { class: \"mb-2 text-muted text-danger-dark\" }\nconst _hoisted_6 = {\n key: 0,\n class: \"flex flex-col w-full\"\n}\nconst _hoisted_7 = {\n key: 0,\n class: \"mb-2\"\n}\nconst _hoisted_8 = { key: 1 }\nconst _hoisted_9 = { class: \"flex items-center space-x-2\" }\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"span\", {\n style: {\"font-size\":\"17px\"},\n class: \"material-icons\"\n}, \" delete \", -1)\nconst _hoisted_11 = { class: \"flex items-center space-x-2\" }\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"span\", {\n style: {\"font-size\":\"17px\"},\n class: \"material-icons\"\n}, \" delete \", -1)\nconst _hoisted_13 = {\n key: 1,\n class: \"relative flex mb-auto card shadow-elevation md:w-9/12 md:ml-16 md:max-h-96 card-filled\"\n}\nconst _hoisted_14 = { class: \"mb-8 text-lg text-muted\" }\nconst _hoisted_15 = {\n key: 0,\n class: \"mt-auto\"\n}\nconst _hoisted_16 = {\n key: 2,\n class: \"flex flex-col items-center mt-2 mb-auto opacity-70\"\n}\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"span\", {\n class: \"mb-4 opacity-50 material-icons-outlined\",\n style: {\"font-size\":\"5rem\"}\n}, \"error_outline\", -1)\nconst _hoisted_18 = { class: \"mb-4 select-none\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_TagInput = _resolveComponent(\"TagInput\")!\n const _component_Spinner = _resolveComponent(\"Spinner\")!\n const _component_MinimalExercisePreview = _resolveComponent(\"MinimalExercisePreview\")!\n\n return (_openBlock(), _createElementBlock(\"div\", null, [\n (_ctx.showTeacherIntroductionText)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_1, _toDisplayString(_ctx.$t(\"event_template_rule_editor.tag_based_introduction\")), 1))\n : _createCommentVNode(\"\", true),\n (_ctx.showTeacherIntroductionText && _ctx.mainStore.tags.length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createElementVNode(\"p\", _hoisted_3, _toDisplayString(_ctx.$t(\"event_template_rule_editor.no_tags\")), 1),\n _createVNode(_component_router_link, {\n class: \"mx-auto link\",\n to: { name: 'CourseExercises' }\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Btn, { variant: 'primary-borderless' }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"exercise_picker.go_to_exercises\")), 1)\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]))\n : _createCommentVNode(\"\", true),\n (!_ctx.showTeacherIntroductionText && _ctx.mainStore.tags.length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createElementVNode(\"p\", _hoisted_5, _toDisplayString(_ctx.$t(\"event_template_rule_editor.no_tags_student\")), 1)\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", {\n class: _normalizeClass([{\n\t\t\t\t'opacity-50 cursor-not-allowed pointer-events-none': _ctx.mainStore.tags.length === 0,\n\t\t\t}, \"flex flex-col items-start space-y-4 md:flex-row md:space-y-0\"])\n }, [\n (_ctx.showTeacherIntroductionText || _ctx.mainStore.tags.length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.modelValue, (clause, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: 'clause-' + clause.id,\n class: \"my-2\"\n }, [\n (index === 0)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_7, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_template_rule_editor.tag_based_select_exercises\")) + \" \", 1),\n _createElementVNode(\"strong\", null, _toDisplayString(_ctx.$t(\"event_template_rule_editor.tag_based_at_least_one\")), 1),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t(\"event_template_rule_editor.tag_based_among\")), 1)\n ]))\n : (_openBlock(), _createElementBlock(\"p\", _hoisted_8, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_template_rule_editor.tag_based_and\")) + \" \", 1),\n _createElementVNode(\"strong\", null, _toDisplayString(_ctx.$t(\"event_template_rule_editor.tag_based_at_least_one\")), 1),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t(\"event_template_rule_editor.tag_based_among\")), 1)\n ])),\n _createElementVNode(\"div\", _hoisted_9, [\n _createVNode(_component_TagInput, {\n placeholder: _ctx.$t('misc.tags'),\n modelValue: clause.tags,\n alwaysShowAutocomplete: !_ctx.allowCreateMoreClauses,\n onAddTag: ($event: any) => (_ctx.onAddTag(clause, $event)),\n onRemoveTag: ($event: any) => (_ctx.onRemoveTag(clause, $event)),\n choices: _ctx.mainStore.tags,\n existingOnly: true,\n class: \"w-full\"\n }, null, 8, [\"placeholder\", \"modelValue\", \"alwaysShowAutocomplete\", \"onAddTag\", \"onRemoveTag\", \"choices\"]),\n _createVNode(_component_Btn, {\n tooltip: _ctx.$t('misc.delete'),\n variant: 'icon',\n outline: true,\n onClick: ($event: any) => (_ctx.$emit('deleteClause', clause.id)),\n class: \"transition-opacity duration-100 opacity-50 hover:opacity-100\"\n }, {\n default: _withCtx(() => [\n _hoisted_10\n ]),\n _: 2\n }, 1032, [\"tooltip\", \"onClick\"])\n ])\n ]))\n }), 128)),\n (_ctx.allowCreateMoreClauses)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n onClick: _cache[0] || (_cache[0] = \n//@ts-ignore\n(...args) => (_ctx.onAddClause && _ctx.onAddClause(...args))),\n class: \"mt-2 transition-opacity duration-75 opacity-50 cursor-pointer hover:opacity-100\"\n }, [\n _createElementVNode(\"p\", null, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_template_rule_editor.tag_based_and\")) + \" \", 1),\n _createElementVNode(\"strong\", null, _toDisplayString(_ctx.$t(\"event_template_rule_editor.tag_based_at_least_one\")), 1),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t(\"event_template_rule_editor.tag_based_among\")), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_11, [\n _createVNode(_component_TagInput, {\n disabled: true,\n class: \"w-full cursor-pointer\",\n placeholder: _ctx.$t('exercise_editor.exercise_tags'),\n modelValue: []\n }, null, 8, [\"placeholder\"]),\n _createVNode(_component_Btn, {\n variant: 'icon',\n outline: true,\n class: \"invisible\"\n }, {\n default: _withCtx(() => [\n _hoisted_12\n ]),\n _: 1\n })\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.showPreview)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [\n (_ctx.localLoading)\n ? (_openBlock(), _createBlock(_component_Spinner, {\n key: 0,\n size: 'xl',\n fast: true,\n class: \"absolute transform -translate-x-1/2 -translate-y-1/2 top-1/2 left-1/2\"\n }))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"flex flex-col flex-grow\", { 'opacity-50 pointer-events-none': _ctx.localLoading }])\n }, [\n _createElementVNode(\"p\", _hoisted_14, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_template_rule_editor.eligible_exercises\")) + \" \", 1),\n _createElementVNode(\"strong\", null, _toDisplayString(_ctx.satisfying.count), 1)\n ]),\n (!!_ctx.satisfying.example)\n ? (_openBlock(), _createElementBlock(\"h4\", _hoisted_15, _toDisplayString(_ctx.$t(\"misc.example\")), 1))\n : _createCommentVNode(\"\", true),\n (!!_ctx.satisfying.example)\n ? (_openBlock(), _createBlock(_component_MinimalExercisePreview, {\n key: 1,\n selectable: false,\n previewable: false,\n showTags: true,\n exercise: _ctx.satisfying.example\n }, null, 8, [\"exercise\"]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_16, [\n _hoisted_17,\n _createElementVNode(\"p\", _hoisted_18, _toDisplayString(_ctx.$t(\"event_template_rule_editor.unsatisfiable_tag_rule\")), 1)\n ]))\n ], 2)\n ]))\n : _createCommentVNode(\"\", true)\n ], 2)\n ]))\n}","\nimport { tagNamesToTags } from \"@/api/utils\";\nimport TagInput from \"@/components/ui/TagInput.vue\";\nimport { courseIdMixin, eventIdMixin, loadingMixin } from \"@/mixins\";\nimport { EventTemplateRuleClause, Exercise, Tag } from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\n\nimport MinimalExercisePreview from \"../ExerciseEditor/MinimalExercisePreview.vue\";\nimport Spinner from \"@/components/ui/Spinner.vue\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport { mapStores } from \"pinia\";\nimport { useMainStore } from \"@/stores/mainStore\";\n\nexport default defineComponent({\n\tcomponents: { TagInput, MinimalExercisePreview, Spinner, Btn },\n\tname: \"TagBasedEventTemplateRuleEditor\",\n\tasync created() {\n\t\tif (this.modelValue.length === 0) {\n\t\t\tthis.onAddClause();\n\t\t}\n\t},\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: Array as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\tsatisfying: {\n\t\t\ttype: Object as PropType<{ count: number; example?: Exercise }>,\n\t\t\tdefault: () => ({\n\t\t\t\tcount: 0,\n\t\t\t}),\n\t\t},\n\t\tshowTeacherIntroductionText: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tallowCreateMoreClauses: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tshowPreview: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t},\n\tmixins: [courseIdMixin, eventIdMixin, loadingMixin],\n\tmethods: {\n\t\tonAddClause() {\n\t\t\tthis.$emit(\"addClause\");\n\t\t},\n\t\tonAddTag(clause: EventTemplateRuleClause, newTagName: string) {\n\t\t\tconst newTag = tagNamesToTags([newTagName])[0];\n\t\t\tthis.$emit(\"updateClause\", {\n\t\t\t\t...clause,\n\t\t\t\ttags: [...clause.tags, newTag],\n\t\t\t} as EventTemplateRuleClause);\n\t\t},\n\t\tonRemoveTag(clause: EventTemplateRuleClause, removedTagName: string) {\n\t\t\tconst removedTag = tagNamesToTags([removedTagName])[0];\n\t\t\tthis.$emit(\"updateClause\", {\n\t\t\t\t...clause,\n\t\t\t\ttags: clause.tags.filter(t => t.id != removedTag.id),\n\t\t\t} as EventTemplateRuleClause);\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore),\n\t},\n});\n","import { render } from \"./TagBasedEventTemplateRuleEditor.vue?vue&type=template&id=1109aa7c&ts=true\"\nimport script from \"./TagBasedEventTemplateRuleEditor.vue?vue&type=script&lang=ts\"\nexport * from \"./TagBasedEventTemplateRuleEditor.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport Dialog from \"@/components/ui/Dialog.vue\";\nimport { EventTemplateRule, EventTemplateRuleType, Exercise } from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport ExercisePicker from \"@/components/teacher/ExercisePicker.vue\";\nimport MinimalExercisePreview from \"../ExerciseEditor/MinimalExercisePreview.vue\";\nimport { getExercisesById } from \"@/api/exercises\";\nimport SkeletonCard from \"@/components/ui/SkeletonCard.vue\";\nimport { courseIdMixin, loadingMixin } from \"@/mixins\";\nimport TagBasedEventTemplateRuleEditor from \"./TagBasedEventTemplateRuleEditor.vue\";\nimport Tag from \"@/components/ui/Tag.vue\";\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport useVuelidate from \"@vuelidate/core\";\nimport { eventTemplateRuleValidation } from \"@/validation/models\";\nimport NumberInput from \"@/components/ui/NumberInput.vue\";\nimport Tooltip from \"@/components/ui/Tooltip.vue\";\nimport { setErrorNotification } from \"@/utils\";\n\nexport default defineComponent({\n\tcomponents: {\n\t\tDialog,\n\t\tBtn,\n\t\tExercisePicker,\n\t\tMinimalExercisePreview,\n\t\tSkeletonCard,\n\t\tTagBasedEventTemplateRuleEditor,\n\t\tTag,\n\t\tNumberInput,\n\t\tTooltip,\n\t},\n\tname: \"EventTemplateRuleEditor\",\n\tsetup() {\n\t\treturn {\n\t\t\tv$: useVuelidate(),\n\t\t};\n\t},\n\tvalidations() {\n\t\treturn { modelValue: eventTemplateRuleValidation };\n\t},\n\twatch: {\n\t\t\"modelValue.exercises\": {\n\t\t\tdeep: true,\n\t\t\tasync handler(newVal: string[]) {\n\t\t\t\tconsole.log(\"Changed\", newVal);\n\t\t\t\t// keep local exercises synced with rule's exercises\n\t\t\t\tconst strNewVal = newVal.map(i => String(i));\n\t\t\t\tconst localExercisesIds = this.previewExercises.map(e => String(e.id));\n\n\t\t\t\tconst toFetch = strNewVal.filter(i => !localExercisesIds.includes(i));\n\t\t\t\tconst toRemove = localExercisesIds.filter(i => !strNewVal.includes(i));\n\n\t\t\t\ttry {\n\t\t\t\t\tthis.loadingPreview = true;\n\t\t\t\t\tif (toFetch.length > 0) {\n\t\t\t\t\t\tconst fetched = await getExercisesById(this.courseId, toFetch);\n\t\t\t\t\t\tthis.previewExercises.push(...fetched);\n\t\t\t\t\t}\n\t\t\t\t\tthis.loadingPreview = false;\n\t\t\t\t} catch (e) {\n\t\t\t\t\tsetErrorNotification(e);\n\t\t\t\t}\n\n\t\t\t\tthis.previewExercises = this.previewExercises.filter(\n\t\t\t\t\te => !toRemove.includes(String(e.id)),\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t},\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\tgloballySelectedExercises: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\trandomOrder: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tordering: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t\tlockRuleType: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\texpanded: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\treduced: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tmixins: [courseIdMixin, loadingMixin],\n\t// async created() {\n\t// \t// fetch exercises related to this rule\n\t// \tif (\n\t// \t\tthis.modelValue.rule_type == EventTemplateRuleType.ID_BASED &&\n\t// \t\t(this.modelValue.exercises?.length ?? 0) > 0\n\t// \t) {\n\t// \t\tthis.loadingPreview = true;\n\t// \t\ttry {\n\t// \t\t\tthis.previewExercises = await getExercisesById(\n\t// \t\t\t\tthis.courseId,\n\t// \t\t\t\tthis.modelValue.exercises as string[],\n\t// \t\t\t);\n\t// \t\t} catch (e) {\n\t// \t\t\tthis.setErrorNotification(e);\n\t// \t\t} finally {\n\t// \t\t\tthis.loadingPreview = false;\n\t// \t\t}\n\t// \t}\n\t// },\n\tdata() {\n\t\treturn {\n\t\t\tshowDialog: false,\n\t\t\t// rule is ID-based and only one exercise is allowed (same for everyone)\n\t\t\tpickOneExerciseOnly: null as boolean | null,\n\t\t\tpreviewExercises: [] as Exercise[],\n\t\t\tEventTemplateRuleType,\n\t\t\tloadingPreview: false,\n\t\t};\n\t},\n\tmethods: {\n\t\tonCloseDialog() {\n\t\t\tthis.showDialog = false;\n\t\t\tthis.$emit(\"ruleDialogClose\");\n\t\t\tthis.v$.$touch();\n\t\t},\n\t\temitUpdate(key: keyof EventTemplateRule, value: unknown) {\n\t\t\tthis.$emit(\"updateRule\", {\n\t\t\t\tfield: key,\n\t\t\t\tvalue,\n\t\t\t});\n\t\t},\n\t\tasync onAddExercise(exercise: Exercise) {\n\t\t\tif (this.pickOneExerciseOnly) {\n\t\t\t\tthis.emitUpdate(\"exercises\", [exercise.id]);\n\t\t\t} else {\n\t\t\t\tthis.emitUpdate(\"exercises\", [\n\t\t\t\t\texercise.id,\n\t\t\t\t\t...(this.modelValue.exercises as string[]),\n\t\t\t\t]);\n\t\t\t}\n\t\t\t// fetch exercise from server and add to local array for preview\n\t\t\t// const preview = await getExercisesById(this.courseId, [exercise.id]);\n\t\t\t// this.previewExercises.push(...preview);\n\t\t},\n\t\tonRemoveExercise(exercise: Exercise) {\n\t\t\t// emit modelValue update of new exercise list without removed one\n\t\t\tthis.emitUpdate(\n\t\t\t\t\"exercises\",\n\t\t\t\tthis.modelValue?.exercises?.filter(e => e != exercise.id),\n\t\t\t);\n\t\t\t// remove exercise from local array of exercises for preview\n\t\t\t//this.previewExercises = this.previewExercises.filter(e => e.id != exercise.id);\n\t\t},\n\t\tshowRuleDialog() {\n\t\t\tthis.showDialog = true;\n\t\t},\n\t\tsetRuleMode(ruleType: EventTemplateRuleType, pickOne = false) {\n\t\t\tif (\n\t\t\t\truleType === null &&\n\t\t\t\t!confirm(_(\"event_template_rule_editor.unset_rule_type_confirmation\"))\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// TODO if ruleType === null reset slot (clear exercises and clauses)\n\t\t\tthis.emitUpdate(\"rule_type\", ruleType);\n\t\t\tthis.pickOneExerciseOnly = pickOne;\n\t\t},\n\t},\n\tcomputed: {\n\t\tdisplayedOrdering(): String {\n\t\t\t/**\n\t\t\t * Returns the appropriate slot order text for the rule: if all\n\t\t\t * rules have amount === 1, it's simply the target slot number,\n\t\t\t * otherwise it takes into account the actual amount of exercises\n\t\t\t * that precede this rule (sum of amounts of preceding rules) and\n\t\t\t * the amount of this rule\n\t\t\t */\n\t\t\tconst baseOrdering = this.ordering + 1;\n\t\t\tif (this.modelValue.amount === 1) {\n\t\t\t\treturn String(baseOrdering);\n\t\t\t}\n\t\t\treturn (\n\t\t\t\t_(\"misc.from\") +\n\t\t\t\t\" \" +\n\t\t\t\tbaseOrdering +\n\t\t\t\t\" \" +\n\t\t\t\t_(\"misc.to\") +\n\t\t\t\t\" \" +\n\t\t\t\t// make sure we're dealing with numbers\n\t\t\t\t(parseInt(String(baseOrdering)) + parseInt(String(this.modelValue.amount)) - 1)\n\t\t\t);\n\t\t},\n\t\truleExercises(): Exercise[] {\n\t\t\tif (this.modelValue.rule_type != EventTemplateRuleType.ID_BASED) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\treturn this.previewExercises;\n\t\t},\n\t\tisSlotPopulated() {\n\t\t\tif (this.modelValue.rule_type == EventTemplateRuleType.ID_BASED) {\n\t\t\t\treturn (this.modelValue.exercises?.length ?? 0) > 0;\n\t\t\t}\n\t\t\tif (this.modelValue.rule_type == EventTemplateRuleType.TAG_BASED) {\n\t\t\t\t// there's at least a non-empty clause\n\t\t\t\treturn (\n\t\t\t\t\t(this.modelValue.clauses?.length ?? 0) > 0 &&\n\t\t\t\t\tthis.modelValue.clauses?.some(c => c.tags.length > 0)\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t},\n});\n","import { render } from \"./EventTemplateRuleEditor.vue?vue&type=template&id=575456ac&ts=true\"\nimport script from \"./EventTemplateRuleEditor.vue?vue&type=script&lang=ts\"\nexport * from \"./EventTemplateRuleEditor.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { v4 as uuid4 } from \"uuid\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport { defineComponent, inject, PropType } from \"@vue/runtime-core\";\nimport EventTemplateRuleEditor from \"./EventTemplateRuleEditor.vue\";\nimport {\n\tEventTemplate,\n\tEventTemplateRule,\n\tEventTemplateRuleClause,\n\tEventTemplateRuleType,\n\tgetBlankEventTemplateRule,\n\tgetBlankTagBasedEventTemplateRuleClause,\n} from \"@/models\";\nimport { courseIdMixin, loadingMixin, mediaQueryMixin } from \"@/mixins\";\n\nimport draggable from \"vuedraggable\";\n\nimport { AutoSaveManager } from \"@/autoSave\";\n\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport DropdownMenu from \"@/components/ui/DropdownMenu.vue\";\nimport NumberInput from \"@/components/ui/NumberInput.vue\";\nimport ArticleHandle from \"@/components/shared/HelpCenter/ArticleHandle.vue\";\nimport SegmentedControls from \"@/components/ui/SegmentedControls.vue\";\nimport { SelectableOption } from \"@/interfaces\";\nimport { logAnalyticsEvent, setErrorNotification } from \"@/utils\";\nimport { mapStores } from \"pinia\";\nimport { useMainStore } from \"@/stores/mainStore\";\nexport default defineComponent({\n\tsetup() {\n\t\treturn {\n\t\t\tv$: inject(\"v$\"),\n\t\t\t// v$: useVuelidate()\n\t\t};\n\t},\n\t// validations() {\n\t// return {\n\t// modelValue: eventTemplateValidation,\n\t// };\n\t// },\n\tcomponents: {\n\t\tBtn,\n\t\tEventTemplateRuleEditor,\n\t\tdraggable,\n\t\tDropdownMenu,\n\t\tNumberInput,\n\t\tArticleHandle,\n\t\tSegmentedControls,\n\t},\n\tmixins: [courseIdMixin, loadingMixin, mediaQueryMixin],\n\tname: \"EventTemplateEditor\",\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\tshowEditWarning: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\trandomRuleOrder: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tcreated() {\n\t\tthis.modelValue.rules.forEach(r => {\n\t\t\tthis.instantiateRuleAutoSaveManager(r);\n\t\t\tr.clauses?.forEach(c => this.instantiateRuleClauseAutoSaveManager(r.id, c));\n\t\t});\n\t},\n\twatch: {\n\t\tviewMode(newVal) {\n\t\t\tlogAnalyticsEvent(\"changeEventEditorViewMode\", {\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\tto: newVal,\n\t\t\t\trules: (this.modelValue.rules ?? []).length,\n\t\t\t});\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\telementId: uuid4(),\n\t\t\trulesAutoSaveInstances: {} as Record>,\n\t\t\truleClausesAutoSaveInstances: {} as Record<\n\t\t\t\tstring,\n\t\t\t\tAutoSaveManager\n\t\t\t>,\n\t\t\taddRuleAmount: 2,\n\t\t\taddMultipleRulesExpanded: false,\n\t\t\tviewMode: \"list\" as \"grid\" | \"list\" | \"compact_list\",\n\t\t};\n\t},\n\tmethods: {\n\t\tinstantiateRuleAutoSaveManager(rule: EventTemplateRule) {\n\t\t\tthis.rulesAutoSaveInstances[rule.id] = new AutoSaveManager(\n\t\t\t\trule,\n\t\t\t\tasync changes =>\n\t\t\t\t\tawait this.mainStore.partialUpdateEventTemplateRule({\n\t\t\t\t\t\tchanges,\n\t\t\t\t\t\truleId: rule.id,\n\t\t\t\t\t\ttemplateId: this.modelValue.id,\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\t// re-fetch rules if ordering changed\n\t\t\t\t\t\treFetch: typeof changes._ordering !== \"undefined\",\n\t\t\t\t\t}),\n\t\t\t\tchanges =>\n\t\t\t\t\tthis.mainStore.patchEventTemplateRule({\n\t\t\t\t\t\tpayload: changes,\n\t\t\t\t\t\truleId: rule.id,\n\t\t\t\t\t\ttemplateId: this.modelValue.id,\n\t\t\t\t\t}),\n\t\t\t\t[],\n\t\t\t\t0,\n\t\t\t);\n\t\t},\n\t\tgetActualSlotOrdering(index: number) {\n\t\t\t// returns the amount of exercises that precede the first one\n\t\t\t// targeted by the rule at given index, i.e. the sum of all the values\n\t\t\t// of `amount` of the rules that come before the one at given index\n\t\t\treturn this.modelValue.rules\n\t\t\t\t.filter((_, i) => i < index)\n\t\t\t\t.map(r => r.amount)\n\t\t\t\t.reduce((a, b) => a + b, 0);\n\t\t\t//return this.modelValue.rules[index]._ordering ?? 0;\n\t\t},\n\t\tinstantiateRuleClauseAutoSaveManager(\n\t\t\truleId: string,\n\t\t\tclause: EventTemplateRuleClause,\n\t\t) {\n\t\t\tthis.ruleClausesAutoSaveInstances[clause.id] =\n\t\t\t\tnew AutoSaveManager(\n\t\t\t\t\tclause,\n\t\t\t\t\tasync changes =>\n\t\t\t\t\t\tawait this.mainStore.updateEventTemplateRuleClause({\n\t\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\t\ttemplateId: this.modelValue.id,\n\t\t\t\t\t\t\truleId,\n\t\t\t\t\t\t\tclause: { ...clause, ...changes },\n\t\t\t\t\t\t}),\n\t\t\t\t\tchanges =>\n\t\t\t\t\t\tthis.mainStore.patchEventTemplateRuleClause({\n\t\t\t\t\t\t\truleId,\n\t\t\t\t\t\t\ttemplateId: this.modelValue.id,\n\t\t\t\t\t\t\tclauseId: clause.id,\n\t\t\t\t\t\t\tpayload: changes,\n\t\t\t\t\t\t}),\n\t\t\t\t\t[],\n\t\t\t\t\t0,\n\t\t\t\t\tundefined,\n\t\t\t\t\tsetErrorNotification,\n\t\t\t\t\tundefined,\n\t\t\t\t\ttrue,\n\t\t\t\t\tfalse,\n\t\t\t\t);\n\t\t},\n\n\t\tasync onRuleDragEnd(event: { oldIndex: number; newIndex: number }) {\n\t\t\tlogAnalyticsEvent(\"draggedRule\", { courseId: this.courseId });\n\t\t\tif (event.oldIndex !== event.newIndex) {\n\t\t\t\tconst draggedRule = this.modelValue.rules[event.oldIndex];\n\t\t\t\tawait this.onRuleUpdate(draggedRule, \"_ordering\", event.newIndex);\n\t\t\t}\n\t\t},\n\t\tasync onAddRule(amount = 1) {\n\t\t\tawait this.withLocalLoading(async () => {\n\t\t\t\tconst newRule = await this.mainStore.createEventTemplateRule({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\ttemplateId: this.modelValue.id,\n\t\t\t\t\trule: getBlankEventTemplateRule(\n\t\t\t\t\t\tamount === 1 ? undefined : EventTemplateRuleType.TAG_BASED,\n\t\t\t\t\t\tamount,\n\t\t\t\t\t),\n\t\t\t\t});\n\t\t\t\tthis.instantiateRuleAutoSaveManager(newRule);\n\t\t\t});\n\t\t\tif (amount > 1) {\n\t\t\t\t// multiple slots were added through the dropdown menu\n\t\t\t\t// restore data to defaults\n\t\t\t\tthis.addMultipleRulesExpanded = false;\n\t\t\t\tthis.addRuleAmount = 2;\n\t\t\t}\n\t\t},\n\t\tasync onRuleUpdate(\n\t\t\trule: EventTemplateRule,\n\t\t\tfield: K,\n\t\t\tvalue: EventTemplateRule[K],\n\t\t\treFetch = false,\n\t\t) {\n\t\t\tthis.$emit(\"saving\");\n\t\t\ttry {\n\t\t\t\tawait this.rulesAutoSaveInstances[rule.id].onChange({ [field]: value });\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t} finally {\n\t\t\t\tthis.$emit(\"doneSaving\");\n\t\t\t}\n\t\t},\n\t\tasync onRuleAddClause(rule: EventTemplateRule) {\n\t\t\tawait this.withLocalLoading(async () => {\n\t\t\t\tconst newClause = await this.mainStore.createEventTemplateRuleClause({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\ttemplateId: this.modelValue.id,\n\t\t\t\t\truleId: rule.id,\n\t\t\t\t\tclause: getBlankTagBasedEventTemplateRuleClause(),\n\t\t\t\t});\n\t\t\t\tthis.instantiateRuleClauseAutoSaveManager(rule.id, newClause);\n\n\t\t\t\t// reload rule to change \"satisfying\" preview\n\t\t\t\tawait this.withLocalLoading(\n\t\t\t\t\tasync () =>\n\t\t\t\t\t\tawait this.mainStore.getEventTemplateRule({\n\t\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\t\ttemplateId: this.modelValue.id,\n\t\t\t\t\t\t\truleId: rule.id,\n\t\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t});\n\t\t},\n\t\tasync onRuleDelete(rule: EventTemplateRule) {\n\t\t\tif (confirm(_(\"event_template_editor.confirm_delete_rule\"))) {\n\t\t\t\tawait this.withLocalLoading(async () =>\n\t\t\t\t\tthis.mainStore.deleteEventTemplateRule({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\ttemplateId: this.modelValue.id,\n\t\t\t\t\t\truleId: rule.id,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\tasync onRuleUpdateClause(rule: EventTemplateRule, clause: EventTemplateRuleClause) {\n\t\t\tawait this.ruleClausesAutoSaveInstances[clause.id].onChange({\n\t\t\t\ttags: clause.tags,\n\t\t\t});\n\n\t\t\t// reload rule to update \"satisfying\" preview\n\t\t\tawait this.withLocalLoading(\n\t\t\t\tasync () =>\n\t\t\t\t\tawait this.mainStore.getEventTemplateRule({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\ttemplateId: this.modelValue.id,\n\t\t\t\t\t\truleId: rule.id,\n\t\t\t\t\t}),\n\t\t\t);\n\t\t},\n\t\tasync onRuleDeleteClause(rule: EventTemplateRule, clauseId: string) {\n\t\t\tif (confirm(_(\"event_template_editor.confirm_delete_rule_clause\"))) {\n\t\t\t\tawait this.mainStore.deleteEventTemplateRuleClause({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\ttemplateId: this.modelValue.id,\n\t\t\t\t\truleId: rule.id,\n\t\t\t\t\tclauseId,\n\t\t\t\t});\n\n\t\t\t\t// reload rule to update \"satisfying\" preview\n\t\t\t\tawait this.withLocalLoading(\n\t\t\t\t\tasync () =>\n\t\t\t\t\t\tawait this.mainStore.getEventTemplateRule({\n\t\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\t\ttemplateId: this.modelValue.id,\n\t\t\t\t\t\t\truleId: rule.id,\n\t\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore),\n\t\tselectedExercises(): string[] {\n\t\t\treturn this.modelValue.rules\n\t\t\t\t.filter(r => r.rule_type == EventTemplateRuleType.ID_BASED)\n\t\t\t\t.map(r => r.exercises as string[])\n\t\t\t\t.flat();\n\t\t},\n\t\tviewModesAsOptions(): SelectableOption[] {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tvalue: \"list\",\n\t\t\t\t\ticons: [\"view_list\"],\n\t\t\t\t\tcontent: \"\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tvalue: \"grid\",\n\t\t\t\t\ticons: [\"view_module\"],\n\t\t\t\t\tcontent: \"\",\n\t\t\t\t},\n\t\t\t];\n\t\t},\n\t},\n});\n","import { render } from \"./EventTemplateEditor.vue?vue&type=template&id=4984feba&ts=true\"\nimport script from \"./EventTemplateEditor.vue?vue&type=script&lang=ts\"\nexport * from \"./EventTemplateEditor.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, withCtx as _withCtx, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, vShow as _vShow, withDirectives as _withDirectives } from \"vue\"\n\nconst _hoisted_1 = { class: \"relative\" }\nconst _hoisted_2 = { class: \"sticky top-0 z-50 px-2 pt-4 pb-4 bg-white shadow-sm md:px-8\" }\nconst _hoisted_3 = { class: \"flex items-center w-full\" }\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons\" }, \"save_alt\", -1)\nconst _hoisted_5 = [\"id\"]\nconst _hoisted_6 = { class: \"mb-1\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_SegmentedControls = _resolveComponent(\"SegmentedControls\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_AbstractEventParticipationSlot = _resolveComponent(\"AbstractEventParticipationSlot\")!\n const _component_Dialog = _resolveComponent(\"Dialog\")!\n\n return (_openBlock(), _createElementBlock(\"div\", null, [\n _createVNode(_component_Dialog, {\n footerBorder: true,\n fullHeight: true,\n fullWidth: true,\n noPadding: true,\n onYes: _cache[2] || (_cache[2] = ($event: any) => (_ctx.$emit('hide'))),\n confirmOnly: true,\n showDialog: _ctx.show\n }, {\n body: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_SegmentedControls, {\n options: _ctx.instancesAsSelectableOptions,\n modelValue: _ctx.currentInstance,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.currentInstance) = $event))\n }, null, 8, [\"options\", \"modelValue\"])\n ]),\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_Btn, {\n tooltip: _ctx.$t('misc.download'),\n variant: 'icon',\n outline: true,\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.onPrint())),\n class: \"ml-auto mr-5 -mb-20\",\n loading: _ctx.saving\n }, {\n default: _withCtx(() => [\n _hoisted_4\n ]),\n _: 1\n }, 8, [\"tooltip\", \"loading\"])\n ]),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.instances, (_, instanceIndex) => {\n return _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n class: \"px-8\",\n key: 'instance-' + instanceIndex,\n id: 'printable-preview-' + instanceIndex\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.instances[instanceIndex], (__, slotIndex) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"my-12\",\n style: {\"break-inside\":\"avoid-page\"},\n key: 'instance-' + instanceIndex + '-slot-' + slotIndex\n }, [\n _createElementVNode(\"h4\", _hoisted_6, _toDisplayString(_ctx.$t(\"event_participation_page.exercise\")) + \" \" + _toDisplayString(slotIndex + 1), 1),\n _createVNode(_component_AbstractEventParticipationSlot, {\n \"allow-edit-assessment\": false,\n \"allow-edit-submission\": false,\n modelValue: _ctx.instancesAsSlotArrays[instanceIndex][slotIndex]\n }, null, 8, [\"modelValue\"])\n ]))\n }), 128))\n ], 8, _hoisted_5)), [\n [_vShow, instanceIndex === _ctx.currentInstance]\n ])\n }), 128))\n ])\n ])\n ]),\n _: 1\n }, 8, [\"showDialog\"])\n ]))\n}","\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport Dialog from \"@/components/ui/Dialog.vue\";\nimport {\n\tEventParticipationSlot,\n\tExercise,\n\tgetFakeEventParticipationSlot,\n} from \"@/models\";\nimport { SelectableOption } from \"@/interfaces\";\nimport SegmentedControls from \"@/components/ui/SegmentedControls.vue\";\nimport AbstractEventParticipationSlot from \"@/components/shared/AbstractEventParticipationSlot.vue\";\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport html2pdf from \"html2pdf.js\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport { setErrorNotification } from \"@/utils\";\nimport { eventIdMixin } from \"@/mixins\";\nimport { mapStores } from \"pinia\";\nimport { useMainStore } from \"@/stores/mainStore\";\n\nexport default defineComponent({\n\tname: \"EventInstancesPreview\",\n\tmixins: [eventIdMixin],\n\tcomponents: {\n\t\tDialog,\n\t\tSegmentedControls,\n\t\tAbstractEventParticipationSlot,\n\t\tBtn,\n\t},\n\tprops: {\n\t\tshow: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tinstances: {\n\t\t\ttype: Array as PropType,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tcurrentInstance: 0 as number,\n\t\t\tsaving: false,\n\t\t};\n\t},\n\tmethods: {\n\t\tasync onPrint() {\n\t\t\tconst element = document.getElementById(\n\t\t\t\t\"printable-preview-\" + this.currentInstance,\n\t\t\t);\n\t\t\tconst worker = html2pdf();\n\t\t\tthis.saving = true;\n\t\t\tsetTimeout(async () => {\n\t\t\t\ttry {\n\t\t\t\t\tawait worker\n\t\t\t\t\t\t.set({\n\t\t\t\t\t\t\tfilename: this.eventName + \"_\" + this.currentInstance + \".pdf\",\n\t\t\t\t\t\t\thtml2canvas: {},\n\t\t\t\t\t\t\tjsPDF: {\n\t\t\t\t\t\t\t\torientation: \"p\",\n\t\t\t\t\t\t\t\tunit: \"mm\",\n\t\t\t\t\t\t\t\tformat: \"a3\",\n\t\t\t\t\t\t\t\tputOnlyUsedFonts: true,\n\t\t\t\t\t\t\t\tfloatPrecision: 16, // or \"smart\", default is 16\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.from(element)\n\t\t\t\t\t\t.save();\n\t\t\t\t} catch (e) {\n\t\t\t\t\tsetErrorNotification(e);\n\t\t\t\t} finally {\n\t\t\t\t\tthis.saving = false;\n\t\t\t\t}\n\t\t\t}, 10);\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore),\n\t\teventName(): string {\n\t\t\treturn this.mainStore.getEventById(this.eventId).name;\n\t\t},\n\t\tinstancesAsSlotArrays(): EventParticipationSlot[][] {\n\t\t\treturn this.instances.map(i => i.map(e => getFakeEventParticipationSlot(e)));\n\t\t},\n\t\tinstancesAsSelectableOptions(): SelectableOption[] {\n\t\t\treturn this.instances.map((i, j) => ({\n\t\t\t\tvalue: j,\n\t\t\t\tcontent: _(\"misc.example\") + \" \" + (j + 1),\n\t\t\t}));\n\t\t},\n\t},\n});\n","import { render } from \"./EventInstancesPreview.vue?vue&type=template&id=12922ed4&ts=true\"\nimport script from \"./EventInstancesPreview.vue?vue&type=script&lang=ts\"\nexport * from \"./EventInstancesPreview.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport EventMetaEditor from \"@/components/teacher/EventEditor/EventMetaEditor.vue\";\nimport EventStateEditor from \"@/components/teacher/EventEditor/EventStateEditor.vue\";\nimport EventTemplateEditor from \"@/components/teacher/EventTemplateEditor/EventTemplateEditor.vue\";\nimport CloudSaveStatus from \"@/components/ui/CloudSaveStatus.vue\";\nimport { defineComponent, provide } from \"@vue/runtime-core\";\nimport {\n\tAnnouncementNode,\n\tEvent,\n\tEventState,\n\tEventTemplate,\n\tEventTemplateRuleType,\n\tExercise,\n\tgetBlankAnnouncementNode,\n} from \"@/models\";\nimport {\n\tblockingDialogMixin,\n\tcourseIdMixin,\n\teventIdMixin,\n\tloadingMixin,\n\tsavingMixin,\n} from \"@/mixins\";\nimport Dialog from \"@/components/ui/Dialog.vue\";\nimport { getTranslatedString as _ } from \"@/i18n\";\n\nimport { AutoSaveManager } from \"@/autoSave\";\nimport {\n\tEVENT_AUTO_SAVE_DEBOUNCED_FIELDS,\n\tEVENT_AUTO_SAVE_DEBOUNCE_TIME_MS,\n} from \"@/const\";\n\nimport Toggle from \"@/components/ui/Toggle.vue\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport { getEventInstances, heartbeatEvent, unlockEvent } from \"@/api/events\";\nimport EventInstancesPreview from \"./EventInstancesPreview.vue\";\nimport useVuelidate from \"@vuelidate/core\";\nimport { eventValidation } from \"@/validation/models\";\nimport NumberInput from \"@/components/ui/NumberInput.vue\";\nimport {\n\tgetCurrentUserId,\n\troundToTwoDecimals,\n\tsetErrorNotification,\n\tsetPageWideError,\n} from \"@/utils\";\nimport { mapStores } from \"pinia\";\nimport { useMainStore } from \"@/stores/mainStore\";\nimport { useMetaStore } from \"@/stores/metaStore\";\nimport AnnouncementNodeEditor from \"@/components/course_tree/editors/AnnouncementNodeEditor.vue\";\nimport { examPublishedAnnouncementTemplate } from \"@/assets/announcements\";\n\nexport default defineComponent({\n\tsetup() {\n\t\tconst v = useVuelidate();\n\t\tprovide(\"v$\", v);\n\t\treturn { v$: v };\n\t},\n\tvalidations() {\n\t\treturn {\n\t\t\tmodelValue: eventValidation,\n\t\t};\n\t},\n\tname: \"EventEditor\",\n\tcomponents: {\n\t\tEventMetaEditor,\n\t\tEventTemplateEditor,\n\t\tCloudSaveStatus,\n\t\tEventStateEditor,\n\t\tDialog,\n\t\tToggle,\n\t\tBtn,\n\t\tEventInstancesPreview,\n\t\tNumberInput,\n\t\tAnnouncementNodeEditor,\n\t},\n\tmixins: [courseIdMixin, eventIdMixin, loadingMixin, savingMixin, blockingDialogMixin],\n\tprops: [],\n\tbeforeRouteLeave() {\n\t\tconsole.log(\"route\", this.modelValue);\n\t\tdocument.removeEventListener(\"keydown\", this.doSave);\n\t\tthis.unlockEditingObject();\n\t},\n\tmounted() {\n\t\tdocument.addEventListener(\"keydown\", this.doSave);\n\t},\n\t// beforeUnmount() {\n\t// \tconsole.log(\"unmount\", this.modelValue);\n\n\t// \tdocument.removeEventListener(\"keydown\", this.doSave);\n\t// \tthis.unlockEditingObject();\n\t// },\n\tasync created() {\n\t\tawait this.withLoading(async () => {\n\t\t\tawait this.mainStore.getTags({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\tincludeExerciseCount: false,\n\t\t\t});\n\t\t\tawait this.mainStore.getEvent({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\teventId: this.eventId,\n\t\t\t\tincludeDetails: true,\n\t\t\t});\n\t\t\t// TODO is it necessary?\n\t\t\t// await this.mainStore.getExercises({ courseId: this.courseId, filters: null, fromFirstPage: true });\n\t\t}, setPageWideError);\n\n\t\t// ! this.ws = await subscribeToEventChanges(this.eventId);\n\n\t\tthis.lockEditingObject();\n\n\t\tthis.instantiateAutoSaveManager();\n\n\t\tif (this.modelValue.state == EventState.OPEN) {\n\t\t\tthis.showConfirmationDialog = true;\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tsaving: false,\n\t\t\tsavingError: false,\n\t\t\tstateSaving: false,\n\t\t\tshowConfirmationDialog: false,\n\t\t\tautoSaveManager: null as AutoSaveManager | null,\n\t\t\tws: null as WebSocket | null,\n\t\t\tEventState,\n\t\t\tinstances: [] as Exercise[][],\n\t\t\tshowInstancesDialog: false,\n\t\t\tloadingExamples: false,\n\t\t\teditingMaxScore: false,\n\t\t\tdirtyMaxScore: null as null | number,\n\t\t\tlockPollingHandle: null as null | number,\n\t\t\theartbeatHandle: null as null | number,\n\t\t\tannouncement: getBlankAnnouncementNode(),\n\t\t\tshowAnnouncementEditor: false,\n\t\t\tpublishingAnnouncement: false,\n\t\t\tbounceDialog: false,\n\t\t\tupdatingState: false,\n\t\t};\n\t},\n\tmethods: {\n\t\tinvalidateExamples() {\n\t\t\tthis.instances = [];\n\t\t},\n\t\tonEditMaxScore() {\n\t\t\tthis.dirtyMaxScore = this.modelValue.max_score ?? 0;\n\t\t\tthis.editingMaxScore = true;\n\t\t},\n\t\tasync lockEditingObject() {\n\t\t\tconst LOCK_POLLING_INTERVAL = 5000;\n\t\t\tconst LOCK_HEARTBEAT_INTERVAL = 10000;\n\n\t\t\tconst setUpHeartbeatPollingFn = () =>\n\t\t\t\t(this.heartbeatHandle = setInterval(\n\t\t\t\t\t// TODO defensively handle failures, i.e. lock might've been passed onto someone else\n\t\t\t\t\tasync () => await heartbeatEvent(this.courseId, this.modelValue.id),\n\t\t\t\t\tLOCK_HEARTBEAT_INTERVAL,\n\t\t\t\t));\n\n\t\t\ttry {\n\t\t\t\tawait this.mainStore.lockEvent({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\teventId: this.modelValue.id,\n\t\t\t\t});\n\t\t\t\tsetUpHeartbeatPollingFn();\n\t\t\t} catch (e: any) {\n\t\t\t\tif (e.response?.status === 403) {\n\t\t\t\t\t// if lock can't be acquired at the moment, periodically\n\t\t\t\t\t// poll to see if the object is still locked, stopping\n\t\t\t\t\t// once the lock has been acquired by the requesting user\n\t\t\t\t\tthis.lockPollingHandle = setInterval(async () => {\n\t\t\t\t\t\tawait this.mainStore.getEvent({\n\t\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\t\teventId: this.eventId,\n\t\t\t\t\t\t\tincludeDetails: true,\n\t\t\t\t\t\t});\n\t\t\t\t\t\t// user has finally acquired the lock; stop polling\n\t\t\t\t\t\tif (this.modelValue.locked_by?.id === getCurrentUserId()) {\n\t\t\t\t\t\t\tclearInterval(this.lockPollingHandle as number);\n\t\t\t\t\t\t\tsetUpHeartbeatPollingFn();\n\t\t\t\t\t\t\tthis.lockPollingHandle = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}, LOCK_POLLING_INTERVAL);\n\t\t\t\t} else {\n\t\t\t\t\tsetErrorNotification(e);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tasync unlockEditingObject() {\n\t\t\tconsole.log(\"unlocking...\");\n\t\t\tif (typeof this.heartbeatHandle === \"number\") {\n\t\t\t\tclearInterval(this.heartbeatHandle);\n\t\t\t}\n\t\t\tif (typeof this.lockPollingHandle === \"number\") {\n\t\t\t\tclearInterval(this.lockPollingHandle);\n\t\t\t}\n\t\t\tawait unlockEvent(this.courseId, this.modelValue.id);\n\t\t},\n\t\tinstantiateAutoSaveManager() {\n\t\t\tthis.autoSaveManager = new AutoSaveManager(\n\t\t\t\tthis.modelValue,\n\t\t\t\tasync changes => {\n\t\t\t\t\tawait this.mainStore.partialUpdateEvent({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\teventId: this.modelValue.id,\n\t\t\t\t\t\tchanges,\n\t\t\t\t\t\tmutate: false,\n\t\t\t\t\t});\n\t\t\t\t\tif (changes.state === EventState.PLANNED) {\n\t\t\t\t\t\tthis.metaStore.showSuccessFeedback();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tchanges => {\n\t\t\t\t\tthis.saving = true;\n\t\t\t\t\tthis.savingError = false;\n\t\t\t\t\tthis.mainStore.setEvent({\n\t\t\t\t\t\teventId: this.eventId,\n\t\t\t\t\t\tpayload: { ...this.modelValue, ...changes },\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tEVENT_AUTO_SAVE_DEBOUNCED_FIELDS,\n\t\t\t\tEVENT_AUTO_SAVE_DEBOUNCE_TIME_MS,\n\t\t\t\tundefined,\n\t\t\t\t() => (this.savingError = true),\n\t\t\t\t() => {\n\t\t\t\t\tthis.saving = false;\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t\tasync onSaveMaxScore() {\n\t\t\tawait this.onChange(\"max_score\", this.dirtyMaxScore as number);\n\t\t\tthis.editingMaxScore = false;\n\t\t\t// TODO implement re-setting the rules' max_score\n\t\t},\n\t\tasync onChange(field: K, value: Event[K]) {\n\t\t\tif (field === \"randomize_rule_order\") {\n\t\t\t\tthis.invalidateExamples();\n\t\t\t}\n\t\t\tawait this.autoSaveManager?.onChange({ [field]: value });\n\t\t},\n\t\tasync onAnnouncementNodeChange(\n\t\t\tkey: K,\n\t\t\tvalue: AnnouncementNode[K],\n\t\t\tsave: boolean,\n\t\t) {\n\t\t\t// update local copy of unsaved changes\n\t\t\tthis.announcement = {\n\t\t\t\t...this.announcement,\n\t\t\t\t[key]: value,\n\t\t\t};\n\t\t\tif (save) {\n\t\t\t\tthis.resolveBlockingDialog?.(true);\n\t\t\t}\n\t\t},\n\t\tasync promptForPublishingAnnouncement() {\n\t\t\tthis.showAnnouncementEditor = false;\n\n\t\t\ttry {\n\t\t\t\tthis.announcement = {\n\t\t\t\t\t...getBlankAnnouncementNode(),\n\t\t\t\t\tbody: examPublishedAnnouncementTemplate(this.modelValue),\n\t\t\t\t\tschedule_publish_at: this.modelValue.begin_timestamp,\n\t\t\t\t\tparent_id: await this.mainStore.getCourseRootId({ courseId: this.courseId }),\n\t\t\t\t};\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst choice = await this.getBlockingBinaryDialogChoice();\n\t\t\tif (choice) {\n\t\t\t\tthis.publishingAnnouncement = true;\n\t\t\t\ttry {\n\t\t\t\t\tawait this.mainStore.createCourseTreeNode({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\tnode: this.announcement,\n\t\t\t\t\t});\n\t\t\t\t} catch (e) {\n\t\t\t\t\tsetErrorNotification(e);\n\t\t\t\t} finally {\n\t\t\t\t\tthis.publishingAnnouncement = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.showBlockingDialog = false;\n\t\t},\n\t\tasync onStateUpdate(newState: EventState, fireIntegrationEvent: boolean) {\n\t\t\tif (newState === EventState.PLANNED) {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.promptForPublishingAnnouncement();\n\t\t\t\t} catch (e) {\n\t\t\t\t\tthis.showBlockingDialog = false;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttry {\n\t\t\t\t/**\n\t\t\t\t * Do the update manually instead of calling this.onChange(\"state\", newState)\n\t\t\t\t * in order to first update the remote resource and only then do the\n\t\t\t\t * update locally\n\t\t\t\t */\n\t\t\t\tthis.updatingState = true;\n\t\t\t\tawait this.mainStore.partialUpdateEvent({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\teventId: this.modelValue.id,\n\t\t\t\t\tchanges: { state: newState },\n\t\t\t\t\tmutate: false,\n\t\t\t\t\tfireIntegrationEvent,\n\t\t\t\t});\n\t\t\t\tif (newState === EventState.PLANNED) {\n\t\t\t\t\tthis.metaStore.showSuccessFeedback();\n\t\t\t\t}\n\t\t\t\tthis.mainStore.setEvent({\n\t\t\t\t\teventId: this.eventId,\n\t\t\t\t\tpayload: { ...this.modelValue, state: newState },\n\t\t\t\t});\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t} finally {\n\t\t\t\tthis.updatingState = false;\n\t\t\t}\n\t\t},\n\t\tasync onBlur() {\n\t\t\tawait this.autoSaveManager?.flush();\n\t\t},\n\t\tasync getInstances() {\n\t\t\tif (this.instances.length === 0) {\n\t\t\t\tthis.loadingExamples = true;\n\t\t\t\tconst amount = 5; // TODO implement\n\t\t\t\tthis.instances = await getEventInstances(this.courseId, this.eventId, amount);\n\t\t\t\tthis.loadingExamples = false;\n\t\t\t}\n\t\t\tthis.showInstancesDialog = true;\n\t\t},\n\t\tdoSave(e: KeyboardEvent) {\n\t\t\tif (!(e.keyCode === 83 && (e.ctrlKey || e.metaKey))) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\te.preventDefault();\n\t\t\tif (this.autoSaveManager?.isPending()) {\n\t\t\t\tthis.autoSaveManager.flush();\n\t\t\t} else {\n\t\t\t\t// fake save as a placebo for the user\n\t\t\t\tthis.saving = true;\n\t\t\t\tthis.$nextTick(() => (this.saving = false));\n\t\t\t}\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore, useMetaStore),\n\t\tmodelValue(): Event {\n\t\t\treturn this.mainStore.getEventById(this.eventId);\n\t\t},\n\t\tcomputedMaxScore(): number {\n\t\t\treturn roundToTwoDecimals(\n\t\t\t\t(this.modelValue.template?.rules ?? [])\n\t\t\t\t\t.map(r => r.weight * r.amount)\n\t\t\t\t\t.reduce((a, b) => a + b, 0),\n\t\t\t);\n\t\t},\n\t\tmodelValueTemplate(): EventTemplate {\n\t\t\t// return a blank object until the event has been retrieved\n\t\t\treturn this.modelValue?.template ?? { id: \"\", rules: [] };\n\t\t},\n\t\tusedRandomization(): boolean {\n\t\t\treturn (\n\t\t\t\t((this.modelValue.randomize_rule_order ?? false) ||\n\t\t\t\t\tthis.modelValue.template?.rules.some(\n\t\t\t\t\t\tr =>\n\t\t\t\t\t\t\tr.rule_type === EventTemplateRuleType.TAG_BASED ||\n\t\t\t\t\t\t\t(r.rule_type === EventTemplateRuleType.ID_BASED &&\n\t\t\t\t\t\t\t\t(r.exercises?.length ?? 0) > 1),\n\t\t\t\t\t)) ??\n\t\t\t\tfalse\n\t\t\t);\n\t\t},\n\t\texamLocked(): boolean {\n\t\t\treturn (\n\t\t\t\t!!this.modelValue.locked_by &&\n\t\t\t\tthis.modelValue.locked_by.id != this.metaStore.user.id\n\t\t\t);\n\t\t},\n\t},\n});\n","import { render } from \"./EventEditor.vue?vue&type=template&id=5f75499d&ts=true\"\nimport script from \"./EventEditor.vue?vue&type=script&lang=ts\"\nexport * from \"./EventEditor.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, vShow as _vShow, withDirectives as _withDirectives, Teleport as _Teleport, createBlock as _createBlock, renderList as _renderList, Fragment as _Fragment, createTextVNode as _createTextVNode, withCtx as _withCtx, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex flex-col flex-grow h-full pb-4\" }\nconst _hoisted_2 = {\n key: 0,\n style: {\"z-index\":\"99999\"},\n class: \"fixed top-0 left-0 w-full h-full bg-opacity-50 bg-dark\"\n}\nconst _hoisted_3 = { class: \"fixed z-50 w-full px-6 py-4 text-center transform -translate-x-1/2 -translate-y-1/2 rounded md:w-max top-1/2 left-1/2\" }\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"p\", {\n style: {\"font-size\":\"10rem\"},\n class: \"opacity-50 material-icons-outlined text-lightText\"\n}, \" timer_off \", -1)\nconst _hoisted_5 = {\n class: \"pt-1 mx-auto rounded-t md:bg-transparent text-lightText md:px-2\",\n style: {\"text-shadow\":\"0.5px 0.5px 4px rgb(0 0 0 / 50%)\"}\n}\nconst _hoisted_6 = {\n class: \"pb-1 rounded-b md:bg-transparent text-lightText md:mx-2 md:px-2\",\n style: {\"text-shadow\":\"0.5px 0.5px 4px rgb(0 0 0 / 50%)\"}\n}\nconst _hoisted_7 = { class: \"flex items-start mt-1 space-x-10\" }\nconst _hoisted_8 = {\n key: 2,\n class: \"mt-3\"\n}\nconst _hoisted_9 = {\n key: 0,\n class: \"relative w-full bg-light py-2 mb-8 -mt-10 px-2\"\n}\nconst _hoisted_10 = { class: \"select-none uppercase text-muted text-xs mt-2 mr-2 absolute top-0 right-0\" }\nconst _hoisted_11 = [\"innerHTML\"]\nconst _hoisted_12 = [\"innerHTML\"]\nconst _hoisted_13 = { class: \"mb-0\" }\nconst _hoisted_14 = { key: 0 }\nconst _hoisted_15 = { class: \"flex items-center w-full mt-8\" }\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined mt-0.5 mr-0.5 text-base\" }, \" chevron_left \", -1)\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined mt-0.5 ml-0.5 text-base\" }, \" chevron_right \", -1)\nconst _hoisted_18 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined mt-0.5 text-base mr-1\" }, \" check \", -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_CloudSaveStatus = _resolveComponent(\"CloudSaveStatus\")!\n const _component_Countdown = _resolveComponent(\"Countdown\")!\n const _component_SlotSkeleton = _resolveComponent(\"SlotSkeleton\")!\n const _component_AbstractEventParticipationSlot = _resolveComponent(\"AbstractEventParticipationSlot\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_Dialog = _resolveComponent(\"Dialog\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_ctx.showTimeUpBackdrop)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _hoisted_4,\n _createElementVNode(\"h3\", _hoisted_5, _toDisplayString(_ctx.$t(\"event_participation_page.times_up\")), 1),\n _createElementVNode(\"p\", _hoisted_6, _toDisplayString(_ctx.$t(\"event_participation_page.all_answers_saved\")), 1)\n ])\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.mounted)\n ? (_openBlock(), _createBlock(_Teleport, {\n key: 1,\n to: \"#main-student-header-right\"\n }, [\n _createElementVNode(\"div\", _hoisted_7, [\n _createVNode(_component_CloudSaveStatus, {\n saving: _ctx.saving,\n hadError: _ctx.savingError\n }, null, 8, [\"saving\", \"hadError\"]),\n _withDirectives(_createVNode(_component_Countdown, {\n onTimeUp: _cache[0] || (_cache[0] = ($event: any) => (_ctx.onTimeUp())),\n endTimestamp: _ctx.currentEventParticipation.time_limit_timestamp,\n isInitialized: _ctx.runTimer\n }, null, 8, [\"endTimestamp\", \"isInitialized\"]), [\n [_vShow, _ctx.currentEventParticipation.time_limit_timestamp !== null && _ctx.runTimer]\n ])\n ])\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.firstLoading)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _createVNode(_component_SlotSkeleton, { class: \"mb-24\" }),\n _createVNode(_component_SlotSkeleton, { class: \"mb-24\" }),\n _createVNode(_component_SlotSkeleton, { class: \"mb-24\" }),\n _createVNode(_component_SlotSkeleton)\n ]))\n : (_openBlock(true), _createElementBlock(_Fragment, { key: 3 }, _renderList(_ctx.currentEventParticipation.slots, (slot, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([{\n\t\t\t\t'flex-grow': _ctx.oneExerciseAtATime,\n\t\t\t\t'mb-10 pb-10':\n\t\t\t\t\tindex !== _ctx.currentEventParticipation.slots.length - 1 && !_ctx.oneExerciseAtATime,\n\t\t\t\t'pb-0 border-b-0': index === _ctx.currentEventParticipation.slots.length - 1,\n\t\t\t}, \"\"]),\n key: 'p-' + _ctx.currentEventParticipation.id + '-s-' + slot.id\n }, [\n (\n\t\t\t\t\t_ctx.currentEventParticipation.event.event_type ===\n\t\t\t\t\t\t_ctx.EventType.SELF_SERVICE_PRACTICE && index === 1\n\t\t\t\t)\n ? _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_9, [\n _createElementVNode(\"p\", _hoisted_10, _toDisplayString(_ctx.$t(\"misc.ads\")), 1),\n _withDirectives(_createElementVNode(\"div\", {\n class: \"hidden md:block\",\n innerHTML: _ctx.ads3Code\n }, null, 8, _hoisted_11), [\n [_vShow, _ctx.ads3Code]\n ]),\n _withDirectives(_createElementVNode(\"div\", {\n class: \"md:hidden\",\n innerHTML: _ctx.adsMobileCode\n }, null, 8, _hoisted_12), [\n [_vShow, _ctx.adsMobileCode]\n ])\n ], 512)), [\n [_vShow, _ctx.ads3Code || _ctx.adsMobileCode]\n ])\n : _createCommentVNode(\"\", true),\n _createVNode(_component_AbstractEventParticipationSlot, {\n modelValue: slot,\n onUpdateSelectedChoices: ($event: any) => (_ctx.onChange($event.slot, 'selected_choices', $event.payload)),\n onUpdateSubmission: ($event: any) => (_ctx.onUpdateSubmission($event.slot, $event.payload)),\n onRunCode: _cache[1] || (_cache[1] = ($event: any) => (_ctx.onRunCode($event))),\n onBlur: _cache[2] || (_cache[2] = ($event: any) => (_ctx.onBlur($event))),\n allowEditSubmission: true,\n saving: _ctx.saving,\n showTags: \n\t\t\t\t\t_ctx.currentEventParticipation.event.event_type === _ctx.EventType.SELF_SERVICE_PRACTICE\n\t\t\t\t\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"h4\", _hoisted_13, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_participation_page.exercise\")) + \" \" + _toDisplayString(slot.slot_number + 1) + \" \", 1),\n (_ctx.oneExerciseAtATime)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_14, _toDisplayString(_ctx.$t(\"event_participation_page.of\")) + \" \" + _toDisplayString(_ctx.currentEventParticipation.last_slot_number + 1), 1))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _: 2\n }, 1032, [\"modelValue\", \"onUpdateSelectedChoices\", \"onUpdateSubmission\", \"saving\", \"showTags\"])\n ], 2))\n }), 128)),\n _createElementVNode(\"div\", _hoisted_15, [\n (_ctx.goingBackAllowed)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 0,\n class: \"\",\n onClick: _ctx.onGoBack,\n disabled: \n\t\t\t\t\t!_ctx.canGoBack ||\n\t\t\t\t\t_ctx.goingBack ||\n\t\t\t\t\t_ctx.goingForward ||\n\t\t\t\t\t_ctx.metaStore.loading ||\n\t\t\t\t\t_ctx.schedulingCodeRun\n\t\t\t\t\n }, {\n default: _withCtx(() => [\n _hoisted_16,\n _createTextVNode(\" \" + _toDisplayString(_ctx.goingBack ? _ctx.$t(\"misc.wait\") : _ctx.$t(\"event_participation_page.previous_exercise\")), 1)\n ]),\n _: 1\n }, 8, [\"onClick\", \"disabled\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.canGoForward)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 1,\n class: \"ml-auto\",\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.goingBackAllowed ? _ctx.onGoForward() : _ctx.confirmGoForward())),\n disabled: _ctx.goingForward || _ctx.goingBack || _ctx.metaStore.loading || _ctx.schedulingCodeRun\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.goingForward ? _ctx.$t(\"misc.wait\") : _ctx.$t(\"event_participation_page.next_exercise\")) + \" \", 1),\n _hoisted_17\n ]),\n _: 1\n }, 8, [\"disabled\"]))\n : (_ctx.canTurnIn)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 2,\n class: \"ml-auto\",\n onClick: _ctx.confirmTurnIn,\n variant: 'success',\n disabled: _ctx.metaStore.loading || _ctx.goingBack || _ctx.turningIn\n }, {\n default: _withCtx(() => [\n _hoisted_18,\n _createTextVNode(_toDisplayString(_ctx.turningIn ? _ctx.$t(\"misc.wait\") : _ctx.$t(\"event_participation_page.turn_in\")), 1)\n ]),\n _: 1\n }, 8, [\"onClick\", \"disabled\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createVNode(_component_Dialog, {\n showDialog: _ctx.showConfirmDialog,\n yesText: _ctx.dialogData.yesText,\n noText: _ctx.$t('dialog.default_cancel_text'),\n onYes: _ctx.dialogData.onYes,\n onNo: _cache[4] || (_cache[4] = ($event: any) => (_ctx.showConfirmDialog = false))\n }, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.dialogData.title), 1)\n ]),\n body: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.dialogData.text), 1)\n ]),\n _: 1\n }, 8, [\"showDialog\", \"yesText\", \"noText\", \"onYes\"])\n ]))\n}","import { openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"mr-0.5 material-icons-outlined\"\n}\nconst _hoisted_2 = {\n key: 1,\n class: \"mr-0.5 text-danger-dark -mt-0.5\"\n}\nconst _hoisted_3 = {\n style: {\"width\":\"24px\",\"height\":\"24px\"},\n viewBox: \"0 0 24 24\"\n}\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M9 8H11V14H9V8M13 1H7V3H13V1M17.03 7.39C18.26 8.93 19 10.88 19 13C19 17.97 15 22 10 22C5.03 22 1 17.97 1 13S5.03 4 10 4C12.12 4 14.07 4.74 15.62 6L17.04 4.56C17.55 5 18 5.46 18.45 5.97L17.03 7.39M17 13C17 9.13 13.87 6 10 6S3 9.13 3 13 6.13 20 10 20 17 16.87 17 13M21 7V13H23V7H21M21 17H23V15H21V17Z\"\n}, null, -1)\nconst _hoisted_5 = [\n _hoisted_4\n]\nconst _hoisted_6 = { key: 0 }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"flex items-center w-max text-muted\", {\n\t\t\tshake:\n\t\t\t\t(_ctx.littleTimeRemaining && !_ctx.hasShakenLittleTime) ||\n\t\t\t\t(_ctx.lessThanHalfTimeRemaining && !_ctx.hasShakenHalfTime),\n\t\t\t'opacity-0': !_ctx.isInitialTimeValid,\n\t\t}]),\n onAnimationend: _cache[0] || (_cache[0] = ($event: any) => (_ctx.onShakeEnd()))\n }, [\n (!_ctx.littleTimeRemaining)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_1, \"timer\"))\n : (_openBlock(), _createElementBlock(\"span\", _hoisted_2, [\n (_openBlock(), _createElementBlock(\"svg\", _hoisted_3, _hoisted_5))\n ])),\n _createElementVNode(\"p\", {\n class: _normalizeClass([\"ml-1\", {\n\t\t\t\t'text-danger-dark': _ctx.littleTimeRemaining,\n\t\t\t}])\n }, [\n (_ctx.initialSeconds >= 3600)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_6, _toDisplayString(_ctx.formattedTime.hours) + \":\", 1))\n : _createCommentVNode(\"\", true),\n _createTextVNode(_toDisplayString(_ctx.formattedTime.minutes) + \":\" + _toDisplayString(_ctx.formattedTime.seconds), 1)\n ], 2)\n ], 34))\n}","\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport moment from \"moment\";\n\nexport default defineComponent({\n\tname: \"Countdown\",\n\tprops: {\n\t\tisInitialized: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tendTimestamp: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t},\n\twatch: {\n\t\tisInitialized(newVal) {\n\t\t\tif (newVal) {\n\t\t\t\tthis.startTimer();\n\t\t\t} else {\n\t\t\t\tthis.stopTimer();\n\t\t\t}\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tseconds: 0,\n\t\t\tshake: false,\n\t\t\thandle: null as number | null,\n\t\t\thasShakenHalfTime: false,\n\t\t\thasShakenLittleTime: false,\n\t\t\tinitialSeconds: null as number | null,\n\t\t};\n\t},\n\tmethods: {\n\t\tstartTimer() {\n\t\t\tthis.timerCallback();\n\t\t\tthis.initialSeconds = this.seconds;\n\n\t\t\tthis.handle = setInterval(this.timerCallback, 1000);\n\t\t},\n\t\ttimerCallback() {\n\t\t\tconst now = moment();\n\t\t\tthis.seconds = this.endMoment.diff(now, \"seconds\");\n\n\t\t\tif (this.seconds <= 0) {\n\t\t\t\tthis.stopTimer();\n\t\t\t\tthis.$emit(\"timeUp\");\n\t\t\t}\n\t\t\tif (this.littleTimeRemaining) {\n\t\t\t\tthis.shake = true;\n\t\t\t}\n\t\t},\n\t\tstopTimer() {\n\t\t\tclearInterval(this.handle as number);\n\t\t\tthis.handle = null;\n\t\t\tthis.initialSeconds = null;\n\t\t},\n\t\tonShakeEnd() {\n\t\t\tif (!this.hasShakenHalfTime) {\n\t\t\t\tthis.hasShakenHalfTime = true;\n\t\t\t} else if (!this.hasShakenLittleTime) {\n\t\t\t\tthis.hasShakenLittleTime = true;\n\t\t\t}\n\t\t},\n\t},\n\tcomputed: {\n\t\tformattedTime(): {\n\t\t\thours: string;\n\t\t\tminutes: string;\n\t\t\tseconds: string;\n\t\t} {\n\t\t\tconst hours = Math.floor(this.seconds / 3600);\n\t\t\tconst minutes = Math.floor((this.seconds - hours * 3600) / 60);\n\t\t\tconst seconds = this.seconds - minutes * 60 - hours * 3600;\n\n\t\t\treturn {\n\t\t\t\thours: String(hours).padStart(2, \"0\"),\n\t\t\t\tminutes: String(minutes).padStart(2, \"0\"),\n\t\t\t\tseconds: String(seconds).padStart(2, \"0\"),\n\t\t\t};\n\t\t},\n\t\tlittleTimeRemaining(): boolean {\n\t\t\treturn this.isInitialized && this.seconds < 5 * 60;\n\t\t},\n\t\tlessThanHalfTimeRemaining(): boolean {\n\t\t\tif (this.initialSeconds === null) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn this.isInitialized && this.seconds < Math.floor(this.initialSeconds / 2);\n\t\t},\n\t\tisInitialTimeValid(): boolean {\n\t\t\treturn !isNaN(this.initialSeconds ?? 0);\n\t\t},\n\t\tendMoment() {\n\t\t\treturn moment(new Date(this.endTimestamp));\n\t\t},\n\t},\n});\n","import { render } from \"./Countdown.vue?vue&type=template&id=4a8f7f47&ts=true\"\nimport script from \"./Countdown.vue?vue&type=script&lang=ts\"\nexport * from \"./Countdown.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nconst EXECUTION_RESULTS_POLLING_INTERVAL = 1000;\nimport AbstractEventParticipationSlot from \"@/components/shared/AbstractEventParticipationSlot.vue\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport CloudSaveStatus from \"@/components/ui/CloudSaveStatus.vue\";\nimport Dialog from \"@/components/ui/Dialog.vue\";\nimport {\n\tadComponentMixin,\n\tcourseIdMixin,\n\teventIdMixin,\n\tloadingMixin,\n\tsavingMixin,\n} from \"@/mixins\";\nimport {\n\tEventParticipation,\n\tEventParticipationSlot,\n\tEventParticipationSlotSubmission,\n\tEventParticipationState,\n\tEventType,\n\tExerciseType,\n\tgetBlankEventParticipation,\n\tprogrammingExerciseTypes,\n} from \"@/models\";\nimport { defineComponent } from \"@vue/runtime-core\";\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport { DialogData } from \"@/interfaces\";\n\nimport { AutoSaveManager } from \"@/autoSave\";\nimport {\n\tEVENT_PARTICIPATION_SLOT_DEBOUNCED_FIELDS,\n\tEVENT_PARTICIPATION_SLOT_DEBOUNCE_TIME_MS,\n} from \"@/const\";\nimport {\n\tgetEventParticipationSlotExecutionResults,\n\tpartialUpdateEventParticipationSlot,\n} from \"@/api\";\nimport SlotSkeleton from \"@/components/ui/skeletons/SlotSkeleton.vue\";\nimport Countdown from \"@/components/ui/Countdown.vue\";\nimport {\n\tDEFAULT_SERVER_MESSAGES,\n\tgetParticipationRemainingTime,\n\tsetErrorNotification,\n} from \"@/utils\";\nimport { mapStores } from \"pinia\";\nimport { useMainStore } from \"@/stores/mainStore\";\nimport { useMetaStore } from \"@/stores/metaStore\";\n\nexport default defineComponent({\n\tcomponents: {\n\t\tAbstractEventParticipationSlot,\n\t\tCloudSaveStatus,\n\t\tBtn,\n\t\tDialog,\n\t\tSlotSkeleton,\n\t\tCountdown,\n\t},\n\tname: \"EventParticipationPage\",\n\tmixins: [courseIdMixin, eventIdMixin, savingMixin, loadingMixin, adComponentMixin],\n\twatch: {\n\t\t\"currentEventParticipation.slots\"(newVal: EventParticipationSlot[]) {\n\t\t\t// TODO be more sophisticated to track new slots, old slots leaving etc.\n\t\t\tnewVal.forEach(s => this.instantiateSlotAutoSaveManager(s));\n\t\t},\n\t},\n\tbeforeUnmount() {\n\t\tObject.values(this.executionResultsPollingHandles)\n\t\t\t.filter(h => typeof h === \"number\")\n\t\t\t.forEach(h => clearInterval(h as number));\n\t},\n\tasync created() {\n\t\tawait this.withFirstLoading(\n\t\t\tasync () =>\n\t\t\t\tawait this.mainStore.participateInEvent({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\teventId: this.eventId,\n\t\t\t\t}),\n\t\t);\n\n\t\t// already turned in, redirect to submission review page\n\t\tif (this.currentEventParticipation.state === EventParticipationState.TURNED_IN) {\n\t\t\tthis.$router.push({\n\t\t\t\tname:\n\t\t\t\t\tthis.currentEventParticipation.event.event_type ===\n\t\t\t\t\tEventType.SELF_SERVICE_PRACTICE\n\t\t\t\t\t\t? \"PracticeSummaryPage\"\n\t\t\t\t\t\t: \"SubmissionReviewPage\",\n\t\t\t\tparams: {\n\t\t\t\t\tparticipationId: this.currentEventParticipation.id,\n\t\t\t\t},\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\t// set up timer, if there is a time limit\n\t\tif (typeof this.currentEventParticipation.time_limit_timestamp === \"number\") {\n\t\t\tthis.runTimer = true;\n\t\t}\n\n\t\t// poll for any slots whose execution results is running (for example,\n\t\t// if the user refreshed the page while a programming exercise was running)\n\t\tthis.currentEventParticipation.slots\n\t\t\t.filter(s => s.execution_results && s.execution_results.state === \"running\")\n\t\t\t.forEach(s => this.pollForExecutionResults(s.id));\n\t},\n\tmounted() {\n\t\tthis.mounted = true; // prevent issues with teleported component\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tslotAutoSaveManagers: {} as Record>,\n\t\t\tlastSlotChanged: null as EventParticipationSlot | null,\n\t\t\tsaving: false,\n\t\t\tsavingError: false,\n\t\t\tmounted: false,\n\t\t\tshowConfirmDialog: false,\n\t\t\tschedulingCodeRun: false,\n\t\t\tdialogData: {\n\t\t\t\ttitle: \"\",\n\t\t\t\ttext: \"\",\n\t\t\t\tyesText: \"\",\n\t\t\t\tonYes: () => null,\n\t\t\t} as DialogData,\n\t\t\tEventType,\n\t\t\tshowTimeUpBackdrop: false,\n\t\t\tremainingTime: null as number | null,\n\t\t\trunTimer: false,\n\t\t\tdetectedTimerMisfire: false,\n\t\t\tgoingForward: false,\n\t\t\tgoingBack: false,\n\t\t\tturningIn: false,\n\t\t\texecutionResultsPollingHandles: {} as Record,\n\t\t};\n\t},\n\tmethods: {\n\t\tasync onUpdateSubmission(\n\t\t\tslot: EventParticipationSlot,\n\t\t\tchange: [keyof EventParticipationSlotSubmission, any],\n\t\t) {\n\t\t\tif (change[0] !== \"attachment\") {\n\t\t\t\tawait this.onChange(slot, change[0], change[1]);\n\t\t\t} else {\n\t\t\t\t// handle file uploads separately\n\t\t\t\tconsole.log(\"FILE BLOB\", change[1]);\n\t\t\t\tawait this.onUpdateAttachment(slot, change[1]);\n\t\t\t}\n\t\t},\n\t\tasync onBlur(slot: EventParticipationSlot) {\n\t\t\ttry {\n\t\t\t\tawait this.slotAutoSaveManagers[slot.id].flush();\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t}\n\t\t},\n\t\tasync onRunCode(slot: EventParticipationSlot) {\n\t\t\ttry {\n\t\t\t\t// flush queued changes before scheduling code run\n\t\t\t\tawait this.slotAutoSaveManagers[slot.id].flush();\n\n\t\t\t\t// temporarily block forward/go buttons to prevent issues with setCurrentEventParticipationSlot\n\t\t\t\tthis.schedulingCodeRun = true;\n\t\t\t\t// send request to run code\n\t\t\t\tawait this.mainStore.runCurrentEventParticipationSlotCode({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\tslot,\n\t\t\t\t});\n\t\t\t\t// poll until execution is complete\n\t\t\t\tthis.pollForExecutionResults(slot.id);\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t} finally {\n\t\t\t\tthis.schedulingCodeRun = false;\n\t\t\t}\n\t\t},\n\t\tpollForExecutionResults(slotId: string) {\n\t\t\tconst handle = this.executionResultsPollingHandles[slotId];\n\t\t\tif (typeof handle === \"number\") {\n\t\t\t\tclearInterval(handle);\n\t\t\t}\n\t\t\tthis.executionResultsPollingHandles[slotId] = setInterval(async () => {\n\t\t\t\tconst executionResults = await getEventParticipationSlotExecutionResults(\n\t\t\t\t\tthis.courseId,\n\t\t\t\t\tthis.eventId,\n\t\t\t\t\tthis.currentEventParticipation.id,\n\t\t\t\t\tslotId,\n\t\t\t\t);\n\t\t\t\tif (executionResults.state !== \"running\") {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t// slot might not exist anymore if user has gone forward/back or has turned in\n\t\t\t\t\t\tthis.mainStore.patchCurrentEventParticipationSlot({\n\t\t\t\t\t\t\tslotId,\n\t\t\t\t\t\t\tchanges: { execution_results: executionResults },\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tconsole.warn(\"caught patchCurrentEventParticipationSlot\", e);\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tclearInterval(this.executionResultsPollingHandles[slotId] as number);\n\t\t\t\t\t\tthis.executionResultsPollingHandles[slotId] = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, EXECUTION_RESULTS_POLLING_INTERVAL);\n\t\t},\n\t\tasync onGoForward() {\n\t\t\tthis.showConfirmDialog = false;\n\n\t\t\t// assumption: going forward is only allowed when showing one slot at a time\n\t\t\tconst currentSlot = this.currentEventParticipation.slots[0];\n\t\t\tthis.goingForward = true;\n\t\t\tawait this.withLoading(\n\t\t\t\tasync () => {\n\t\t\t\t\t// flush queued changes before moving on to next slot\n\t\t\t\t\tawait this.slotAutoSaveManagers[currentSlot.id].flush();\n\t\t\t\t\tawait this.mainStore.moveEventParticipationCurrentSlotCursorForward({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\te => setErrorNotification(e),\n\t\t\t);\n\t\t\tthis.goingForward = false;\n\t\t},\n\t\tasync onGoBack() {\n\t\t\t// assumption: going back is only allowed when showing one slot at a time\n\t\t\tconst currentSlot = this.currentEventParticipation.slots[0];\n\t\t\tthis.goingBack = true;\n\t\t\tawait this.withLoading(\n\t\t\t\tasync () => {\n\t\t\t\t\t// flush queued changes before moving on to next slot\n\t\t\t\t\tawait this.slotAutoSaveManagers[currentSlot.id].flush();\n\t\t\t\t\tawait this.mainStore.moveEventParticipationCurrentSlotCursorBack({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\te => setErrorNotification(e),\n\t\t\t);\n\t\t\tthis.goingBack = false;\n\t\t},\n\t\tasync onTimeUp() {\n\t\t\tconst remainingTime = getParticipationRemainingTime(\n\t\t\t\tthis.currentEventParticipation,\n\t\t\t\tthis.currentEventParticipation.event,\n\t\t\t);\n\t\t\tif (typeof remainingTime === \"number\" && remainingTime > 0) {\n\t\t\t\t// sanity check that the timer isn't mis-firing\n\t\t\t\tthis.runTimer = false;\n\t\t\t\tthis.remainingTime = remainingTime;\n\t\t\t\tthis.$nextTick(() => (this.runTimer = true));\n\t\t\t\tif (!this.detectedTimerMisfire) {\n\t\t\t\t\tthis.detectedTimerMisfire = true;\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"onTimeUp called with remaining time = \" +\n\t\t\t\t\t\t\tremainingTime +\n\t\t\t\t\t\t\t\", participation \" +\n\t\t\t\t\t\t\tthis.currentEventParticipation.id,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.showTimeUpBackdrop = true;\n\t\t\tsetTimeout(async () => await this.onTurnIn(), 500);\n\t\t},\n\t\tasync onTurnIn() {\n\t\t\tthis.showConfirmDialog = false;\n\t\t\tthis.turningIn = true;\n\t\t\tawait this.withLoading(async () => {\n\t\t\t\t// stop timer\n\t\t\t\tthis.runTimer = false;\n\t\t\t\t// flush any pending slots to make sure the most recent content is saved\n\t\t\t\tfor (const s of Object.values(this.slotAutoSaveManagers)) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tprogrammingExerciseTypes.includes(\n\t\t\t\t\t\t\ts.instance.exercise.exercise_type as ExerciseType,\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\t// for programming exercises, also run code to ensure the most up-to-date results\n\t\t\t\t\t\t// TODO investigate https://sentry.io/organizations/samuele/issues/3612164391/?project=6265941&query=is%3Aunresolved\n\t\t\t\t\t\tawait this.onRunCode(s.instance);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tawait s.flush();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tawait this.mainStore.partialUpdateCurrentEventParticipation({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\tchanges: {\n\t\t\t\t\t\t\tstate: EventParticipationState.TURNED_IN,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\tthis.$router.push({\n\t\t\t\t\t\tname:\n\t\t\t\t\t\t\tthis.currentEventParticipation.event.event_type ===\n\t\t\t\t\t\t\tEventType.SELF_SERVICE_PRACTICE\n\t\t\t\t\t\t\t\t? \"PracticeSummaryPage\"\n\t\t\t\t\t\t\t\t: \"SubmissionReviewPage\",\n\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\tparticipationId: this.currentEventParticipation.id,\n\t\t\t\t\t\t\tshowSubmissionConfirmationMessage: 1, // should be `true`, but TS complains about type\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\tthis.metaStore.showSuccessFeedback();\n\t\t\t\t} catch (e) {\n\t\t\t\t\tsetErrorNotification(e);\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.turningIn = false;\n\t\t},\n\t\tconfirmGoForward() {\n\t\t\tthis.dialogData = {\n\t\t\t\ttitle: _(\"event_participation_page.next_dialog_title\"),\n\t\t\t\ttext: _(\"event_participation_page.next_dialog_text\"),\n\t\t\t\tyesText: _(\"event_participation_page.next_dialog_confirm_button\"),\n\t\t\t\tonYes: this.onGoForward,\n\t\t\t};\n\t\t\tthis.showConfirmDialog = true;\n\t\t},\n\t\tconfirmTurnIn() {\n\t\t\tthis.dialogData = {\n\t\t\t\ttitle: _(\"event_participation_page.turn_in_dialog_title\"),\n\t\t\t\ttext: _(\"event_participation_page.turn_in_dialog_text\"),\n\t\t\t\tyesText: _(\"event_participation_page.turn_in_confirm_button\"),\n\t\t\t\tonYes: this.onTurnIn,\n\t\t\t};\n\t\t\tthis.showConfirmDialog = true;\n\t\t},\n\t\tasync onUpdateAttachment(slot: EventParticipationSlot, attachment: Blob) {\n\t\t\t// TODO refactor and use the generic onChange\n\t\t\tlet formData = new FormData();\n\t\t\tformData.append(\"attachment\", attachment);\n\n\t\t\tawait partialUpdateEventParticipationSlot(\n\t\t\t\tthis.courseId,\n\t\t\t\tthis.eventId,\n\t\t\t\tthis.currentEventParticipation.id,\n\t\t\t\tslot.id,\n\t\t\t\tformData as any,\n\t\t\t\ttrue,\n\t\t\t);\n\t\t\t//await this.onChange(slot, \"attachment\", formData);\n\t\t},\n\t\tasync onChange(\n\t\t\tslot: EventParticipationSlot,\n\t\t\tfield: K,\n\t\t\tvalue: EventParticipationSlot[K],\n\t\t) {\n\t\t\t// !! [this might cause the bug with missing slot]\n\t\t\t// if a new slot has been changed, flush any pending slots\n\t\t\tif (this.lastSlotChanged != null && this.lastSlotChanged.id != slot.id) {\n\t\t\t\tfor (const s of Object.values(this.slotAutoSaveManagers)) {\n\t\t\t\t\tawait s.flush();\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.lastSlotChanged = slot;\n\t\t\tawait this.slotAutoSaveManagers[slot.id].onChange({ [field]: value });\n\t\t},\n\t\tinstantiateSlotAutoSaveManager(slot: EventParticipationSlot) {\n\t\t\tthis.slotAutoSaveManagers[slot.id] = new AutoSaveManager(\n\t\t\t\tslot,\n\t\t\t\tasync changes => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.mainStore.partialUpdateCurrentEventParticipationSlotSubmission({\n\t\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\t\tslotId: slot.id,\n\t\t\t\t\t\t\tchanges,\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t// investigate https://sentry.io/organizations/samuele/issues/3683654671/?project=6265941\n\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t\"partialUpdateCurrentEventParticipationSlotSubmission failed when called with args\",\n\t\t\t\t\t\t\tslot.id,\n\t\t\t\t\t\t\tJSON.stringify(changes),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t!DEFAULT_SERVER_MESSAGES.includes((e as any).response?.data?.detail ?? \"\")\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tsetErrorNotification(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t(changes, reverting) => {\n\t\t\t\t\tif (!reverting) {\n\t\t\t\t\t\t// TODO find a way not to block multiple choice questions while open answer exercises are saving\n\t\t\t\t\t\tthis.saving = true;\n\t\t\t\t\t\tthis.savingError = false;\n\t\t\t\t\t\tthis.metaStore.localLoading = true;\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.mainStore.setCurrentEventParticipationSlot({ ...slot, ...changes });\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t// investigating https://sentry.io/organizations/samuele/issues/3603878793\n\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t\"setCurrentEventParticipationSlot failed\",\n\t\t\t\t\t\t\t\"slot id was\",\n\t\t\t\t\t\t\tslot.id,\n\t\t\t\t\t\t\tJSON.stringify(changes),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tEVENT_PARTICIPATION_SLOT_DEBOUNCED_FIELDS,\n\t\t\t\tEVENT_PARTICIPATION_SLOT_DEBOUNCE_TIME_MS,\n\t\t\t\tundefined,\n\t\t\t\t() => (this.savingError = true),\n\t\t\t\t() => {\n\t\t\t\t\tthis.metaStore.localLoading = false;\n\t\t\t\t\tthis.saving = false;\n\t\t\t\t},\n\t\t\t\ttrue,\n\t\t\t);\n\t\t\tslot.sub_slots.forEach(s => this.instantiateSlotAutoSaveManager(s));\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore, useMetaStore),\n\t\tcurrentEventParticipation() {\n\t\t\treturn this.mainStore.currentEventParticipation ?? getBlankEventParticipation();\n\t\t},\n\t\toneExerciseAtATime(): boolean {\n\t\t\t// TODO this assumes the participation contains Event\n\t\t\treturn (this.currentEventParticipation.event?.exercises_shown_at_a_time ?? 0) === 1;\n\t\t},\n\t\tcanGoForward(): boolean {\n\t\t\treturn (\n\t\t\t\tthis.oneExerciseAtATime &&\n\t\t\t\tthis.currentEventParticipation.slots.length > 0 &&\n\t\t\t\t!this.currentEventParticipation.slots[0]?.is_last\n\t\t\t);\n\t\t},\n\t\tcanGoBack(): boolean {\n\t\t\treturn (\n\t\t\t\tthis.oneExerciseAtATime &&\n\t\t\t\t(this.currentEventParticipation.slots?.length ?? 0) > 0 &&\n\t\t\t\t!this.currentEventParticipation.slots[0].is_first\n\t\t\t);\n\t\t},\n\t\tcanTurnIn(): boolean {\n\t\t\treturn (\n\t\t\t\t!this.firstLoading &&\n\t\t\t\t(!this.oneExerciseAtATime ||\n\t\t\t\t\t(this.currentEventParticipation.slots.length > 0 &&\n\t\t\t\t\t\t(this.currentEventParticipation.slots[0]?.is_last ?? false))) &&\n\t\t\t\tthis.currentEventParticipation.state !== EventParticipationState.TURNED_IN\n\t\t\t);\n\t\t},\n\t\tgoingBackAllowed(): boolean {\n\t\t\treturn (\n\t\t\t\t// TODO this assumes the participation contains Event\n\t\t\t\tthis.oneExerciseAtATime && this.currentEventParticipation.event.allow_going_back\n\t\t\t);\n\t\t},\n\t},\n});\n","import { render } from \"./EventParticipationPage.vue?vue&type=template&id=0c3084dd&ts=true\"\nimport script from \"./EventParticipationPage.vue?vue&type=script&lang=ts\"\nexport * from \"./EventParticipationPage.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createBlock as _createBlock, createVNode as _createVNode, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass, renderList as _renderList, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"banner banner-success\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined\" }, \" check \", -1)\nconst _hoisted_3 = { class: \"\" }\nconst _hoisted_4 = {\n key: 1,\n class: \"mb-4 items-center flex space-x-0.5 md:space-x-2\"\n}\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined\" }, \"arrow_back\", -1)\nconst _hoisted_6 = { class: \"mb-0.5 pl-2\" }\nconst _hoisted_7 = {\n key: 2,\n class: \"px-2 py-6\"\n}\nconst _hoisted_8 = { class: \"flex flex-col mb-6 space-y-8\" }\nconst _hoisted_9 = { class: \"text-sm\" }\nconst _hoisted_10 = { class: \"flex space-x-1\" }\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"my-auto text-sm material-icons-outlined\" }, \" timer \", -1)\nconst _hoisted_12 = { class: \"\" }\nconst _hoisted_13 = {\n key: 0,\n class: \"flex space-x-1\"\n}\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"my-auto text-sm material-icons-outlined\" }, \" assignment_turned_in \", -1)\nconst _hoisted_15 = { class: \"\" }\nconst _hoisted_16 = { class: \"flex flex-col space-y-2\" }\nconst _hoisted_17 = {\n key: 0,\n class: \"flex flex-col items-center mb-2 space-y-2 md:flex-row md:space-x-8 md:space-y-0\"\n}\nconst _hoisted_18 = { class: \"card card-filled shadow-elevation md:w-5/12\" }\nconst _hoisted_19 = { class: \"flex items-center\" }\nconst _hoisted_20 = { class: \"\" }\nconst _hoisted_21 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg icon-light material-icons\" }, \"edit\", -1)\nconst _hoisted_22 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg text-gray-600 material-icons-outlined\" }, \"undo\", -1)\nconst _hoisted_23 = { class: \"my-4 text-muted\" }\nconst _hoisted_24 = { class: \"flex\" }\nconst _hoisted_25 = {\n key: 1,\n class: \"banner banner-light\"\n}\nconst _hoisted_26 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined icon-light\" }, \"info\", -1)\nconst _hoisted_27 = { class: \"text-muted\" }\nconst _hoisted_28 = {\n key: 2,\n class: \"banner banner-light\"\n}\nconst _hoisted_29 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined icon-light\" }, \"sync_disabled\", -1)\nconst _hoisted_30 = { class: \"text-muted\" }\nconst _hoisted_31 = {\n key: 3,\n class: \"banner banner-danger\"\n}\nconst _hoisted_32 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mr-1 text-base text-2xl text-yellow-900 material-icons-outlined\" }, \"pending_actions\", -1)\nconst _hoisted_33 = { class: \"text-muted text-danger-dark\" }\nconst _hoisted_34 = { class: \"mb-1\" }\nconst _hoisted_35 = { key: 0 }\nconst _hoisted_36 = {\n key: 3,\n class: \"py-6\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_Timestamp = _resolveComponent(\"Timestamp\")!\n const _component_TextInput = _resolveComponent(\"TextInput\")!\n const _component_AbstractEventParticipationSlot = _resolveComponent(\"AbstractEventParticipationSlot\")!\n const _component_ExerciseSolutionContainer = _resolveComponent(\"ExerciseSolutionContainer\")!\n const _component_SlotSkeleton = _resolveComponent(\"SlotSkeleton\")!\n\n return (_openBlock(), _createElementBlock(\"div\", null, [\n (_ctx.$route.params.showSubmissionConfirmationMessage)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _hoisted_2,\n _createElementVNode(\"p\", _hoisted_3, _toDisplayString(_ctx.$t(\"event_participation_page.turned_in_text\")), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (!_ctx.firstLoading && _ctx.mainStore.currentEventParticipation && _ctx.allowEditAssessment)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n false\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 0,\n onClick: _ctx.onGoBack,\n outline: true,\n variant: 'icon'\n }, {\n default: _withCtx(() => [\n _hoisted_5\n ]),\n _: 1\n }, 8, [\"onClick\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"h3\", _hoisted_6, _toDisplayString(_ctx.mainStore.currentEventParticipation.event.event_type === _ctx.EventType.EXAM\n\t\t\t\t\t\t? _ctx.$t(\"event_assessment.viewing_participation_of\")\n\t\t\t\t\t\t: _ctx.$t(\"event_assessment.viewing_practice_of\")) + \" \" + _toDisplayString(_ctx.mainStore.currentEventParticipation.user.full_name), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (!_ctx.firstLoading && _ctx.mainStore.currentEventParticipation)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [\n _createElementVNode(\"div\", _hoisted_8, [\n _createElementVNode(\"div\", _hoisted_9, [\n _createElementVNode(\"div\", _hoisted_10, [\n _hoisted_11,\n _createElementVNode(\"p\", _hoisted_12, _toDisplayString(_ctx.$t(\"event_participation_page.begin_timestamp\")) + \":\", 1),\n _createVNode(_component_Timestamp, {\n value: _ctx.mainStore.currentEventParticipation.begin_timestamp,\n class: \"text-muted\"\n }, null, 8, [\"value\"])\n ]),\n (_ctx.mainStore.currentEventParticipation.end_timestamp)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [\n _hoisted_14,\n _createElementVNode(\"p\", _hoisted_15, _toDisplayString(_ctx.$t(\"event_participation_page.turn_in_timestamp\")) + \":\", 1),\n _createVNode(_component_Timestamp, {\n class: \"text-muted\",\n value: _ctx.mainStore.currentEventParticipation.end_timestamp\n }, null, 8, [\"value\"])\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_16, [\n (_ctx.showAssessmentCard && !_ctx.firstLoading)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [\n _createElementVNode(\"div\", _hoisted_18, [\n _createElementVNode(\"div\", _hoisted_19, [\n _createElementVNode(\"h4\", _hoisted_20, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_assessment.overall_score\")) + \": \", 1),\n _createElementVNode(\"strong\", null, _toDisplayString(_ctx.mainStore.currentEventParticipation.score), 1)\n ]),\n (_ctx.allowEditAssessment)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 0,\n outline: true,\n variant: 'icon',\n disabled: _ctx.showEditScore,\n class: \"ml-1\",\n tooltip: _ctx.showEditScore ? '' : _ctx.$t('help_texts.edit_overall_grade'),\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.onShowEditScore()))\n }, {\n default: _withCtx(() => [\n _hoisted_21\n ]),\n _: 1\n }, 8, [\"disabled\", \"tooltip\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.mainStore.currentEventParticipation.score_edited)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 1,\n outline: true,\n class: \"ml-auto\",\n variant: 'icon',\n disabled: _ctx.showEditScore,\n tooltip: _ctx.$t('event_assessment.undo_score_edit_tooltip'),\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.onUndoScoreEdit()))\n }, {\n default: _withCtx(() => [\n _hoisted_22\n ]),\n _: 1\n }, 8, [\"disabled\", \"tooltip\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", {\n class: _normalizeClass([{\n\t\t\t\t\t\t\t\t\t'max-h-0': !_ctx.showEditScore,\n\t\t\t\t\t\t\t\t\t'max-h-96': _ctx.showEditScore,\n\t\t\t\t\t\t\t\t}, \"flex flex-col max-w-md space-y-4 overflow-y-hidden duration-200 ease-in-out lg:max-w-lg transition-max-height\"])\n }, [\n _createElementVNode(\"p\", _hoisted_23, _toDisplayString(_ctx.$t(\"event_assessment.overall_score_instructions\")), 1),\n _createVNode(_component_TextInput, {\n modelValue: _ctx.dirtyScore,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((_ctx.dirtyScore) = $event))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_assessment.overall_score\")), 1)\n ]),\n _: 1\n }, 8, [\"modelValue\"]),\n _createElementVNode(\"div\", _hoisted_24, [\n _createVNode(_component_Btn, {\n class: \"ml-auto mr-2\",\n outline: false,\n variant: 'primary',\n loading: _ctx.assessmentLoading,\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.onHideEditScore()))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_assessment.confirm_assessment\")), 1)\n ]),\n _: 1\n }, 8, [\"loading\"]),\n _createVNode(_component_Btn, {\n outline: true,\n disabled: _ctx.assessmentLoading,\n variant: 'primary',\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.onHideEditScore(true)))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"dialog.default_cancel_text\")), 1)\n ]),\n _: 1\n }, 8, [\"disabled\"])\n ])\n ], 2)\n ])\n ]))\n : _createCommentVNode(\"\", true),\n (\n\t\t\t\t\t\t\t_ctx.allowEditAssessment && !_ctx.mainStore.currentEventParticipation.score_edited\n\t\t\t\t\t\t)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_25, [\n _hoisted_26,\n _createElementVNode(\"p\", _hoisted_27, _toDisplayString(_ctx.$t(\"event_assessment.default_score\")), 1)\n ]))\n : (\n\t\t\t\t\t\t\t_ctx.allowEditAssessment && _ctx.mainStore.currentEventParticipation.score_edited\n\t\t\t\t\t\t)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_28, [\n _hoisted_29,\n _createElementVNode(\"span\", _hoisted_30, _toDisplayString(_ctx.$t(\"event_assessment.you_overrode_score\")), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (\n\t\t\t\t\t\t\t_ctx.allowEditAssessment &&\n\t\t\t\t\t\t\t_ctx.someSlotsPending &&\n\t\t\t\t\t\t\t!_ctx.mainStore.currentEventParticipation.score_edited\n\t\t\t\t\t\t)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_31, [\n _hoisted_32,\n _createElementVNode(\"span\", _hoisted_33, _toDisplayString(_ctx.$t(\"event_assessment.some_slots_pending\")), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.mainStore.currentEventParticipation.slots, (slot, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([{\n\t\t\t\t\t'mt-0': index === 0,\n\t\t\t\t\t'mb-5': index === _ctx.mainStore.currentEventParticipation.slots.length - 1,\n\t\t\t\t\t'mb-10': index !== _ctx.mainStore.currentEventParticipation.slots.length - 1,\n\t\t\t\t}, \"\"]),\n key: 'p-' + _ctx.mainStore.currentEventParticipation.id + '-s-' + slot.id\n }, [\n _createVNode(_component_AbstractEventParticipationSlot, {\n modelValue: slot,\n onSaveAssessment: ($event: any) => (_ctx.onSlotSaveAssessment($event.slot, $event.changes)),\n allowEditAssessment: _ctx.allowEditAssessment,\n showSolutionAndScores: _ctx.showSolutionAndScores,\n showAssessmentCard: _ctx.showAssessmentCard,\n assessmentControlsVisibility: _ctx.slotsAssessmentControlsVisibility,\n onSetAssessmentExpanded: ($event: any) => (\n\t\t\t\t\t\t_ctx.slotsAssessmentControlsVisibility[$event.slot.id] = $event.payload\n\t\t\t\t\t),\n assessmentLoading: _ctx.slotsAssessmentLoading[slot.id] ?? false\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"h3\", _hoisted_34, _toDisplayString(_ctx.$t(\"event_participation_page.exercise\")) + \" \" + _toDisplayString(slot.slot_number + 1), 1)\n ]),\n _: 2\n }, 1032, [\"modelValue\", \"onSaveAssessment\", \"allowEditAssessment\", \"showSolutionAndScores\", \"showAssessmentCard\", \"assessmentControlsVisibility\", \"onSetAssessmentExpanded\", \"assessmentLoading\"]),\n (\n\t\t\t\t\t\t_ctx.showSolutionAndScores &&\n\t\t\t\t\t\t!_ctx.allowEditAssessment &&\n\t\t\t\t\t\t!_ctx.slotsLoadingSolution[slot.id]\n\t\t\t\t\t)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_35, [\n _createVNode(_component_ExerciseSolutionContainer, {\n exercise: slot.exercise,\n solutions: _ctx.getSolutionsForExercise(slot.exercise),\n class: \"mt-4\",\n showExerciseThreadLink: true,\n allowShowMore: false,\n initialEditorContent: slot.answer_text\n }, null, 8, [\"exercise\", \"solutions\", \"initialEditorContent\"])\n ]))\n : (_ctx.slotsLoadingSolution[slot.id])\n ? (_openBlock(), _createBlock(_component_SlotSkeleton, {\n key: 1,\n class: \"mt-2\"\n }))\n : _createCommentVNode(\"\", true)\n ], 2))\n }), 128))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_36, [\n _createVNode(_component_SlotSkeleton),\n _createVNode(_component_SlotSkeleton),\n _createVNode(_component_SlotSkeleton),\n _createVNode(_component_SlotSkeleton)\n ]))\n ]))\n}","\nimport { courseIdMixin, eventIdMixin, loadingMixin } from \"@/mixins\";\nimport { defineComponent } from \"@vue/runtime-core\";\nimport AbstractEventParticipationSlot from \"@/components/shared/AbstractEventParticipationSlot.vue\";\n\nimport {\n\tEventParticipation,\n\tEventParticipationSlot,\n\tEventParticipationSlotAssessment,\n\tEventParticipationState,\n\tEventState,\n\tEventType,\n\tExercise,\n} from \"@/models\";\nimport Timestamp from \"@/components/ui/Timestamp.vue\";\nimport SlotSkeleton from \"@/components/ui/skeletons/SlotSkeleton.vue\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport TextInput from \"@/components/ui/TextInput.vue\";\nimport { getTranslatedString } from \"@/i18n\";\nimport ExerciseSolutionContainer from \"@/components/shared/ExerciseSolution/ExerciseSolutionContainer.vue\";\nimport { mapStores } from \"pinia\";\nimport { useMainStore } from \"@/stores/mainStore\";\nimport { setErrorNotification } from \"@/utils\";\n\nexport default defineComponent({\n\tname: \"EventParticipationFull\",\n\tmixins: [eventIdMixin, courseIdMixin, loadingMixin],\n\tprops: {\n\t\tshowSolutionAndScores: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tallowEditAssessment: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tshowAssessmentCard: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tcomponents: {\n\t\tAbstractEventParticipationSlot,\n\t\tTimestamp,\n\t\tSlotSkeleton,\n\t\tBtn,\n\t\tTextInput,\n\t\tExerciseSolutionContainer,\n\t},\n\tasync created() {\n\t\tawait this.withFirstLoading(async () => {\n\t\t\tawait this.mainStore.getCurrentEventParticipation({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\teventId: this.eventId,\n\t\t\t\tparticipationId: this.participationId,\n\t\t\t});\n\t\t});\n\n\t\t// participation is still in progress and exam is\n\t\t// still open, redirect to participation page\n\t\tif (\n\t\t\t!this.allowEditAssessment && // not in teacher mode\n\t\t\tthis.mainStore.currentEventParticipation?.state !==\n\t\t\t\tEventParticipationState.TURNED_IN &&\n\t\t\t// TODO assumes that currentEventParticipation contains Event\n\t\t\tthis.mainStore.currentEventParticipation?.event.state === EventState.OPEN\n\t\t) {\n\t\t\tthis.$router.push({\n\t\t\t\tname: \"ExamParticipationPage\",\n\t\t\t\tparams: {\n\t\t\t\t\texamId: this.eventId,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\tif (this.showSolutionAndScores) {\n\t\t\t// TODO load solutions for exercises as they become visible\n\t\t\t(this.mainStore.currentEventParticipation?.slots ?? []).forEach(async s => {\n\t\t\t\tthis.slotsLoadingSolution[s.id] = true;\n\t\t\t\ttry {\n\t\t\t\t\tawait this.mainStore.getSolutionsByExercise({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\texerciseId: s.exercise.id,\n\t\t\t\t\t\tfilter: null,\n\t\t\t\t\t\tfromFirstPage: true,\n\t\t\t\t\t});\n\t\t\t\t} catch (e) {\n\t\t\t\t\tsetErrorNotification(e);\n\t\t\t\t} finally {\n\t\t\t\t\tthis.slotsLoadingSolution[s.id] = false;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tslotsLoadingSolution: {} as Record,\n\t\t\tslotsAssessmentControlsVisibility: {} as Record,\n\t\t\tslotsAssessmentLoading: {} as Record,\n\t\t\tshowEditScore: false,\n\t\t\tdirtyScore: undefined as string | null | undefined,\n\t\t\tEventType,\n\t\t\tassessmentLoading: false,\n\t\t};\n\t},\n\tmethods: {\n\t\tonGoBack() {\n\t\t\tif (window.history.length > 1) {\n\t\t\t\tthis.$router.back();\n\t\t\t} else {\n\t\t\t\t// default \"back\" location\n\t\t\t\tthis.$router.push({\n\t\t\t\t\tname: \"ExamProgress\",\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tgetSolutionsForExercise(exercise: Exercise) {\n\t\t\treturn this.mainStore.getPaginatedSolutionsByExerciseId(exercise.id).data;\n\t\t},\n\t\tonShowEditScore() {\n\t\t\tthis.dirtyScore = this.mainStore.currentEventParticipation?.score;\n\t\t\tthis.showEditScore = true;\n\t\t},\n\t\tasync onUndoScoreEdit() {\n\t\t\tif (confirm(getTranslatedString(\"event_assessment.undo_overall_score_edit\"))) {\n\t\t\t\tthis.dirtyScore = null;\n\t\t\t\tawait this.onHideEditScore();\n\t\t\t}\n\t\t},\n\t\tasync onHideEditScore(discard = false) {\n\t\t\tif (discard) {\n\t\t\t\tthis.showEditScore = false;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.assessmentLoading = true;\n\t\t\tawait this.withLocalLoading(\n\t\t\t\tasync () =>\n\t\t\t\t\tawait this.mainStore.partialUpdateCurrentEventParticipation({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\tchanges: {\n\t\t\t\t\t\t\tscore: this.dirtyScore,\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t);\n\t\t\tthis.assessmentLoading = false;\n\t\t\tthis.showEditScore = false;\n\t\t},\n\t\tasync onSlotSaveAssessment(\n\t\t\tslot: EventParticipationSlot,\n\t\t\tchanges: { score: number | null; comment: string },\n\t\t) {\n\t\t\tthis.slotsAssessmentLoading[slot.id] = true;\n\t\t\ttry {\n\t\t\t\tawait this.mainStore.partialUpdateCurrentEventParticipationSlot({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\tslotId: slot.id,\n\t\t\t\t\tchanges,\n\t\t\t\t\tmutate: false,\n\t\t\t\t\tforceStudent: false, // update performed as a teacher\n\t\t\t\t});\n\t\t\t\t// re-fetch participation to register any updates (e.g. the score property)\n\t\t\t\tawait this.mainStore.getCurrentEventParticipation({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\teventId: this.eventId,\n\t\t\t\t\tparticipationId: this.participationId,\n\t\t\t\t});\n\t\t\t\tthis.slotsAssessmentControlsVisibility[slot.id] = false;\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t} finally {\n\t\t\t\tthis.slotsAssessmentLoading[slot.id] = false;\n\t\t\t}\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore),\n\t\tparticipationId(): string {\n\t\t\treturn this.$router.currentRoute.value.params.participationId as string;\n\t\t},\n\t\tsomeSlotsPending(): boolean {\n\t\t\treturn (\n\t\t\t\tthis.mainStore.currentEventParticipation?.slots.some(\n\t\t\t\t\ts => s.score === null || s.sub_slots.some(r => r.score === null),\n\t\t\t\t) ?? true\n\t\t\t);\n\t\t},\n\t},\n});\n","import { render } from \"./EventParticipationFull.vue?vue&type=template&id=f7157c72&ts=true\"\nimport script from \"./EventParticipationFull.vue?vue&type=script&lang=ts\"\nexport * from \"./EventParticipationFull.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, createBlock as _createBlock, withCtx as _withCtx } from \"vue\"\n\nconst _hoisted_1 = { class: \"h-full pb-4\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"mt-4\"\n}\nconst _hoisted_3 = {\n key: 1,\n class: \"flex flex-col h-full\"\n}\nconst _hoisted_4 = [\"innerHTML\"]\nconst _hoisted_5 = { class: \"mt-1 mb-4\" }\nconst _hoisted_6 = {\n key: 0,\n class: \"flex space-x-1 mb-1\"\n}\nconst _hoisted_7 = { class: \"text-muted\" }\nconst _hoisted_8 = {\n key: 1,\n class: \"flex space-x-1\"\n}\nconst _hoisted_9 = { class: \"text-muted\" }\nconst _hoisted_10 = {\n key: 2,\n class: \"banner banner-light mt-4\"\n}\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined icon-light\" }, \"timer\", -1)\nconst _hoisted_12 = { class: \"mt-auto\" }\nconst _hoisted_13 = {\n key: 1,\n class: \"w-full mb-4 banner banner-danger\"\n}\nconst _hoisted_14 = { class: \"w-full\" }\nconst _hoisted_15 = { class: \"flex items-center space-x-3\" }\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined text-danger-dark\" }, \" school \", -1)\nconst _hoisted_17 = { class: \"font-semibold text-danger-dark\" }\nconst _hoisted_18 = { key: 0 }\nconst _hoisted_19 = { key: 1 }\nconst _hoisted_20 = { key: 2 }\nconst _hoisted_21 = { class: \"text-danger-dark\" }\nconst _hoisted_22 = { class: \"flex items-center mt-8 space-x-3\" }\nconst _hoisted_23 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"opacity-0 material-icons-outlined\" }, \" school \", -1)\nconst _hoisted_24 = { class: \"flex flex-col w-full\" }\nconst _hoisted_25 = {\n key: 2,\n class: \"mb-1 mr-auto text-muted text-danger-dark\"\n}\nconst _hoisted_26 = {\n key: 3,\n class: \"mb-1 mr-auto text-muted text-danger-dark\"\n}\nconst _hoisted_27 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mr-2 text-xl material-icons-outlined\" }, \" login \", -1)\nconst _hoisted_28 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mr-2 text-xl material-icons-outlined\" }, \" login \", -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_SlotSkeleton = _resolveComponent(\"SlotSkeleton\")!\n const _component_Timestamp = _resolveComponent(\"Timestamp\")!\n const _component_StudentScopesBanner = _resolveComponent(\"StudentScopesBanner\")!\n const _component_NumberInput = _resolveComponent(\"NumberInput\")!\n const _component_RadioGroup = _resolveComponent(\"RadioGroup\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_ctx.metaStore.firstLoading)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createVNode(_component_SlotSkeleton),\n _createVNode(_component_SlotSkeleton)\n ]))\n : (_ctx.mainStore.previewingEvent)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createElementVNode(\"h2\", null, _toDisplayString(_ctx.mainStore.previewingEvent.name), 1),\n (_ctx.mainStore.previewingEvent.instructions.length > 0)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"mb-4 overflow-hidden overflow-ellipsis\",\n innerHTML: _ctx.mainStore.previewingEvent.instructions\n }, null, 8, _hoisted_4))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_5, [\n (_ctx.mainStore.previewingEvent.begin_timestamp)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _createElementVNode(\"p\", _hoisted_7, _toDisplayString(_ctx.$t(\"event_editor.begin_timestamp\")) + \":\", 1),\n _createVNode(_component_Timestamp, {\n value: _ctx.mainStore.previewingEvent.begin_timestamp\n }, null, 8, [\"value\"])\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.mainStore.previewingEvent.end_timestamp)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _createElementVNode(\"p\", _hoisted_9, _toDisplayString(_ctx.$t(\"event_editor.end_timestamp\")) + \":\", 1),\n _createVNode(_component_Timestamp, {\n value: _ctx.mainStore.previewingEvent.end_timestamp\n }, null, 8, [\"value\"])\n ]))\n : _createCommentVNode(\"\", true),\n (\n\t\t\t\t\t\t_ctx.mainStore.previewingEvent.time_limit_rule === _ctx.EventTimeLimitRule.TIME_LIMIT\n\t\t\t\t\t)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_10, [\n _hoisted_11,\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"p\", null, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_participation_page.exam_has_time_limit_warning_1\")) + \" \", 1),\n _createElementVNode(\"strong\", null, _toDisplayString(_ctx.timeLimitMinutes) + \" \" + _toDisplayString(_ctx.$t(\"misc.minutes\")), 1),\n _createTextVNode(\", \" + _toDisplayString(_ctx.$t(\"event_participation_page.exam_has_time_limit_warning_2\")), 1)\n ]),\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t(\"event_participation_page.exam_has_time_limit_warning_3\")), 1)\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_12, [\n (!_ctx.metaStore.user.is_teacher)\n ? (_openBlock(), _createBlock(_component_StudentScopesBanner, { key: 0 }))\n : _createCommentVNode(\"\", true),\n (\n\t\t\t\t\t\t!_ctx.metaStore.user.is_teacher &&\n\t\t\t\t\t\t!_ctx.isDemoMode &&\n\t\t\t\t\t\t(!_ctx.metaStore.user.mat || !_ctx.metaStore.user.course)\n\t\t\t\t\t)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [\n _createElementVNode(\"div\", _hoisted_14, [\n _createElementVNode(\"div\", _hoisted_15, [\n _hoisted_16,\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"p\", _hoisted_17, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"student_data.you_havent_yet\")) + \" \", 1),\n (!_ctx.metaStore.user.mat)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_18, _toDisplayString(_ctx.$t(\"student_data.missing_mat\")), 1))\n : _createCommentVNode(\"\", true),\n (!_ctx.metaStore.user.mat && !_ctx.metaStore.user.course)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_19, \" \" + _toDisplayString(_ctx.$t(\"student_data.and\")) + \" \", 1))\n : _createCommentVNode(\"\", true),\n (!_ctx.metaStore.user.course)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_20, _toDisplayString(_ctx.$t(\"student_data.missing_course\")), 1))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"p\", _hoisted_21, _toDisplayString(_ctx.$t(\"student_data.insert_mat_and_course\")), 1)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_22, [\n _hoisted_23,\n _createElementVNode(\"div\", _hoisted_24, [\n _createVNode(_component_NumberInput, {\n class: \"mb-8 w-96 text-darkText\",\n modelValue: _ctx.dirtyMat,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.dirtyMat) = $event))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"student_data.your_mat\")), 1)\n ]),\n _: 1\n }, 8, [\"modelValue\"]),\n _createVNode(_component_RadioGroup, {\n options: _ctx.courseSelectionOptions,\n modelValue: _ctx.dirtyCourse,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((_ctx.dirtyCourse) = $event)),\n class: \"text-darkText\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"student_data.your_course\")), 1)\n ]),\n _: 1\n }, 8, [\"options\", \"modelValue\"]),\n _createVNode(_component_Btn, {\n variant: 'primary',\n loading: _ctx.localLoading,\n disabled: String(_ctx.dirtyMat).length === 0 || _ctx.dirtyCourse.length === 0,\n onClick: _ctx.onSaveStudentData,\n class: \"ml-auto\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"misc.save_and_close\")), 1)\n ]),\n _: 1\n }, 8, [\"loading\", \"disabled\", \"onClick\"])\n ])\n ])\n ])\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.mainStore.previewingEvent.state === _ctx.EventState.PLANNED)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_25, _toDisplayString(_ctx.$t(\"event_participation_page.exam_not_yet_begun\")), 1))\n : (_ctx.mainStore.previewingEvent.state === _ctx.EventState.CLOSED)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_26, _toDisplayString(_ctx.$t(\"event_participation_page.exam_is_over\")), 1))\n : _createCommentVNode(\"\", true),\n (\n\t\t\t\t\t\t_ctx.canParticipate &&\n\t\t\t\t\t\t(_ctx.metaStore.user.is_teacher ||\n\t\t\t\t\t\t\t_ctx.isDemoMode ||\n\t\t\t\t\t\t\t(_ctx.metaStore.user.mat && _ctx.metaStore.user.course))\n\t\t\t\t\t)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 4,\n to: {\n\t\t\t\t\t\tname: 'ExamParticipationPage',\n\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\texamId: _ctx.eventId,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Btn, {\n size: 'lg',\n class: \"mr-auto\"\n }, {\n default: _withCtx(() => [\n _hoisted_27,\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_participation_page.participate\")), 1)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"to\"]))\n : (_openBlock(), _createBlock(_component_Btn, {\n key: 5,\n size: 'lg',\n disabled: true\n }, {\n default: _withCtx(() => [\n _hoisted_28,\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_participation_page.participate\")), 1)\n ]),\n _: 1\n }))\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}","\nimport Btn from \"@/components/ui/Btn.vue\";\nimport Timestamp from \"@/components/ui/Timestamp.vue\";\nimport { courseIdMixin, eventIdMixin, loadingMixin } from \"@/mixins\";\nimport { Event, EventState, EventTimeLimitRule } from \"@/models\";\nimport { defineComponent } from \"@vue/runtime-core\";\n\nimport SlotSkeleton from \"@/components/ui/skeletons/SlotSkeleton.vue\";\nimport NumberInput from \"@/components/ui/NumberInput.vue\";\nimport { courseSelectionOptions } from \"@/const\";\nimport RadioGroup from \"@/components/ui/RadioGroup.vue\";\nimport { isDemoMode } from \"@/utils\";\nimport { mapStores } from \"pinia\";\nimport { useMainStore } from \"@/stores/mainStore\";\nimport { useMetaStore } from \"@/stores/metaStore\";\nimport StudentScopesBanner from \"../../integrations/classroom/components/StudentScopesBanner.vue\";\nexport default defineComponent({\n\tname: \"ExamPreview\",\n\tmixins: [courseIdMixin, eventIdMixin, loadingMixin],\n\tcomponents: {\n\t\tTimestamp,\n\t\tBtn,\n\t\tSlotSkeleton,\n\t\tNumberInput,\n\t\tRadioGroup,\n\t\tStudentScopesBanner,\n\t},\n\tasync created() {\n\t\tawait this.withFirstLoading(async () => {\n\t\t\tawait this.mainStore.getCourses(); // TODO is this necessary?\n\t\t\tawait this.mainStore.getEventPreview({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\teventId: this.eventId,\n\t\t\t});\n\t\t});\n\n\t\tthis.dirtyCourse = this.metaStore.user.course;\n\t\tthis.dirtyMat = this.metaStore.user.mat;\n\n\t\tif (this.mainStore.previewingEvent?.participation_exists) {\n\t\t\tthis.$router.push({\n\t\t\t\tname: \"ExamParticipationPage\",\n\t\t\t\tparams: {\n\t\t\t\t\texamId: this.eventId,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tEventState,\n\t\t\tEventTimeLimitRule,\n\t\t\tdirtyMat: \"\",\n\t\t\tdirtyCourse: \"\",\n\t\t\tcourseSelectionOptions,\n\t\t};\n\t},\n\tmethods: {\n\t\tasync onSaveStudentData() {\n\t\t\tawait this.withLocalLoading(async () =>\n\t\t\t\tthis.metaStore.patchUser({\n\t\t\t\t\tuserId: this.metaStore.user.id,\n\t\t\t\t\tchanges: { mat: this.dirtyMat, course: this.dirtyCourse },\n\t\t\t\t}),\n\t\t\t);\n\t\t\tthis.metaStore.showSuccessFeedback();\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore, useMetaStore),\n\t\ttimeLimitMinutes() {\n\t\t\treturn (\n\t\t\t\tMath.floor(\n\t\t\t\t\t((this.mainStore.previewingEvent?.time_limit_seconds ?? 0) / 60) * 10,\n\t\t\t\t) / 10\n\t\t\t);\n\t\t},\n\t\tisDemoMode() {\n\t\t\treturn isDemoMode();\n\t\t},\n\t\tcanParticipate() {\n\t\t\treturn (\n\t\t\t\tthis.mainStore.previewingEvent?.state !== EventState.PLANNED &&\n\t\t\t\tthis.mainStore.previewingEvent?.state !== EventState.CLOSED\n\t\t\t);\n\t\t},\n\t},\n});\n","import { render } from \"./ExamPreview.vue?vue&type=template&id=ef6b771a&ts=true\"\nimport script from \"./ExamPreview.vue?vue&type=script&lang=ts\"\nexport * from \"./ExamPreview.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"mt-4\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_FullExercise = _resolveComponent(\"FullExercise\")!\n const _component_ExerciseSolutionContainer = _resolveComponent(\"ExerciseSolutionContainer\")!\n const _component_SkeletonCard = _resolveComponent(\"SkeletonCard\")!\n\n return (!_ctx.firstLoading)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_FullExercise, { exercise: _ctx.exercise }, null, 8, [\"exercise\"]),\n _createVNode(_component_ExerciseSolutionContainer, {\n class: \"mt-8\",\n exercise: _ctx.exercise,\n solutions: _ctx.exerciseSolutions,\n showFirst: _ctx.solutionId ? [_ctx.solutionId] : [],\n standalone: true,\n onLoadMore: _cache[0] || (_cache[0] = ($event: any) => (_ctx.loadMore())),\n canLoadMore: !_ctx.paginatedExerciseSolutions.isLastPage\n }, null, 8, [\"exercise\", \"solutions\", \"showFirst\", \"canLoadMore\"])\n ]))\n : (_openBlock(), _createBlock(_component_SkeletonCard, { key: 1 }))\n}","\nimport { getFakeEventParticipationSlot } from \"@/models\";\nimport { defineComponent } from \"@vue/runtime-core\";\nimport { courseIdMixin, loadingMixin } from \"@/mixins\";\nimport ExerciseSolutionContainer from \"@/components/shared/ExerciseSolution/ExerciseSolutionContainer.vue\";\nimport SkeletonCard from \"@/components/ui/SkeletonCard.vue\";\nimport FullExercise from \"@/components/shared/FullExercise.vue\";\nimport { mapStores } from \"pinia\";\nimport { useMainStore } from \"@/stores/mainStore\";\nexport default defineComponent({\n\tname: \"ExerciseSolutionThread\",\n\tprops: {},\n\tmixins: [courseIdMixin, loadingMixin],\n\tasync created() {\n\t\tawait this.withFirstLoading(async () => {\n\t\t\tawait this.mainStore.getExercisesById({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\texerciseIds: [this.exerciseId],\n\t\t\t\treplace: true,\n\t\t\t});\n\t\t\tawait this.mainStore.getSolutionsByExercise({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\texerciseId: this.exerciseId,\n\t\t\t\tfromFirstPage: true,\n\t\t\t\tfilter: null,\n\t\t\t});\n\t\t});\n\t},\n\tmethods: {\n\t\tasync loadMore() {\n\t\t\tawait this.withLoading(\n\t\t\t\tasync () =>\n\t\t\t\t\tawait this.mainStore.getSolutionsByExercise({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\texerciseId: this.exerciseId,\n\t\t\t\t\t\tfromFirstPage: false,\n\t\t\t\t\t\tfilter: null,\n\t\t\t\t\t}),\n\t\t\t);\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore),\n\t\texercise() {\n\t\t\treturn this.mainStore.getExerciseById(this.exerciseId);\n\t\t},\n\t\tpaginatedExerciseSolutions() {\n\t\t\treturn this.mainStore.getPaginatedSolutionsByExerciseId(this.exerciseId);\n\t\t},\n\t\texerciseSolutions() {\n\t\t\treturn this.paginatedExerciseSolutions.data;\n\t\t},\n\t\tsolutionId() {\n\t\t\treturn this.$route.params.solutionId as string;\n\t\t},\n\t\texerciseId() {\n\t\t\treturn this.$route.params.exerciseId as string;\n\t\t},\n\t\tslot() {\n\t\t\treturn getFakeEventParticipationSlot(this.exercise);\n\t\t},\n\t},\n\tcomponents: {\n\t\tExerciseSolutionContainer,\n\t\tSkeletonCard,\n\t\tFullExercise,\n\t},\n});\n","import { render } from \"./ExerciseSolutionThread.vue?vue&type=template&id=0e9380d5&ts=true\"\nimport script from \"./ExerciseSolutionThread.vue?vue&type=script&lang=ts\"\nexport * from \"./ExerciseSolutionThread.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, renderList as _renderList, Fragment as _Fragment, createTextVNode as _createTextVNode, createBlock as _createBlock, normalizeClass as _normalizeClass, createSlots as _createSlots } from \"vue\"\nimport _imports_0 from '@/assets/classroom_sync.png'\n\n\nconst _hoisted_1 = { class: \"relative flex flex-col flex-grow\" }\nconst _hoisted_2 = { class: \"flex items-center pb-4 pt-1.5 mb-2\" }\nconst _hoisted_3 = { class: \"overflow-hidden mr-4\" }\nconst _hoisted_4 = {\n class: \"mb-0\",\n style: {\"line-height\":\"0.95\",\"white-space\":\"nowrap\",\"overflow\":\"hidden\",\"text-overflow\":\"ellipsis\"}\n}\nconst _hoisted_5 = {\n key: 0,\n class: \"flex items-center\"\n}\nconst _hoisted_6 = { class: \"chip chip-primary mb-0\" }\nconst _hoisted_7 = { class: \"flex items-center mx-auto\" }\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mr-1 material-icons text-primary\" }, \"people\", -1)\nconst _hoisted_9 = { class: \"text-primary\" }\nconst _hoisted_10 = { class: \"ml-1 text-sm text-muted text-primary\" }\nconst _hoisted_11 = { class: \"chip chip-success mb-0\" }\nconst _hoisted_12 = { class: \"flex items-center mx-auto\" }\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mr-1 material-icons-outlined text-success\" }, \"assignment_turned_in\", -1)\nconst _hoisted_14 = { class: \"text-success\" }\nconst _hoisted_15 = { class: \"ml-1 text-sm text-muted text-success\" }\nconst _hoisted_16 = { class: \"chip bg-light border-none mb-0\" }\nconst _hoisted_17 = { class: \"flex items-center mx-auto\" }\nconst _hoisted_18 = /*#__PURE__*/_createElementVNode(\"p\", null, \"%\", -1)\nconst _hoisted_19 = { class: \"ml-1 text-sm text-center text-muted\" }\nconst _hoisted_20 = { class: \"flex items-center mb-1\" }\nconst _hoisted_21 = { class: \"flex items-center space-x-2 w-1/3 mr-auto\" }\nconst _hoisted_22 = {\n style: {\"width\":\"22px\",\"height\":\"22px\"},\n class: \"opacity-70\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\"\n}\nconst _hoisted_23 = /*#__PURE__*/_createElementVNode(\"title\", null, \"sort\", -1)\nconst _hoisted_24 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"M18 21L14 17H17V7H14L18 3L22 7H19V17H22M2 19V17H12V19M2 13V11H9V13M2 7V5H6V7H2Z\" }, null, -1)\nconst _hoisted_25 = [\n _hoisted_23,\n _hoisted_24\n]\nconst _hoisted_26 = { class: \"-mx-5 -my-2.5 w-max\" }\nconst _hoisted_27 = {\n key: 0,\n class: \"material-icons mr-2 text-primary\"\n}\nconst _hoisted_28 = { class: \"flex items-center align-top\" }\nconst _hoisted_29 = {\n key: 0,\n class: \"flex mr-2\"\n}\nconst _hoisted_30 = /*#__PURE__*/_createElementVNode(\"img\", {\n src: _imports_0,\n style: {\"width\":\"28px\"}\n}, null, -1)\nconst _hoisted_31 = /*#__PURE__*/_createElementVNode(\"span\", {\n id: \"insights-btn\",\n class: \"transition-opacity duration-75 rounded-full material-icons-outlined\"\n}, \"insights\", -1)\nconst _hoisted_32 = {\n key: 1,\n class: \"flex mr-2 items-center\"\n}\nconst _hoisted_33 = { class: \"text-muted mr-1\" }\nconst _hoisted_34 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mr-1 text-base material-icons-outlined\" }, \" block \", -1)\nconst _hoisted_35 = { key: 0 }\nconst _hoisted_36 = { class: \"w-full mb-4 banner banner-danger\" }\nconst _hoisted_37 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-yellow-900 material-icons-outlined\" }, \" error_outline \", -1)\nconst _hoisted_38 = /*#__PURE__*/_createElementVNode(\"span\", {\n class: \"material-icons-outlined\",\n style: {\"font-size\":\"17px !important\",\"margin-right\":\"0 !important\"}\n}, \"close\", -1)\nconst _hoisted_39 = { key: 1 }\nconst _hoisted_40 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"ml-px text-yellow-900 material-icons-outlined\" }, \" pending_actions \", -1)\nconst _hoisted_41 = { class: \"\" }\nconst _hoisted_42 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-base text-yellow-900 inline-icon material-icons-outlined\" }, \"pending_actions\", -1)\nconst _hoisted_43 = /*#__PURE__*/_createElementVNode(\"span\", {\n class: \"material-icons-outlined\",\n style: {\"font-size\":\"17px !important\",\"margin-right\":\"3px !important\"}\n}, \"close\", -1)\nconst _hoisted_44 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"ml-px material-icons-outlined text-success\" }, \" task \", -1)\nconst _hoisted_45 = /*#__PURE__*/_createElementVNode(\"span\", {\n class: \"material-icons-outlined\",\n style: {\"font-size\":\"17px !important\",\"margin-right\":\"0 !important\"}\n}, \"close\", -1)\nconst _hoisted_46 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-xl material-icons-outlined\" }, \" done \", -1)\nconst _hoisted_47 = { class: \"\" }\nconst _hoisted_48 = /*#__PURE__*/_createElementVNode(\"span\", {\n class: \"material-icons-outlined\",\n style: {\"font-size\":\"17px !important\",\"margin-right\":\"0 !important\"}\n}, \"close\", -1)\nconst _hoisted_49 = { class: \"flex-grow\" }\nconst _hoisted_50 = {\n key: 0,\n class: \"text-darkText\"\n}\nconst _hoisted_51 = { key: 1 }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_TextInput = _resolveComponent(\"TextInput\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_DropdownMenu = _resolveComponent(\"DropdownMenu\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_CsvParticipationDownloader = _resolveComponent(\"CsvParticipationDownloader\")!\n const _component_DataTable = _resolveComponent(\"DataTable\")!\n const _component_IntegrationSwitch = _resolveComponent(\"IntegrationSwitch\")!\n const _component_Dialog = _resolveComponent(\"Dialog\")!\n const _component_AbstractEventParticipationSlot = _resolveComponent(\"AbstractEventParticipationSlot\")!\n const _component_SkeletonCard = _resolveComponent(\"SkeletonCard\")!\n const _component_Spinner = _resolveComponent(\"Spinner\")!\n const _component_v_tour = _resolveComponent(\"v-tour\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"h4\", _hoisted_4, _toDisplayString(_ctx.event.name), 1)\n ]),\n (!_ctx.firstLoading)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"div\", _hoisted_7, [\n _hoisted_8,\n _createElementVNode(\"p\", _hoisted_9, _toDisplayString(_ctx.participantCount), 1),\n _createElementVNode(\"p\", _hoisted_10, _toDisplayString(_ctx.$t(\"event_monitor.stats_participants\")), 1)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_11, [\n _createElementVNode(\"div\", _hoisted_12, [\n _hoisted_13,\n _createElementVNode(\"p\", _hoisted_14, _toDisplayString(_ctx.turnedInCount), 1),\n _createElementVNode(\"p\", _hoisted_15, _toDisplayString(_ctx.$t(\"event_monitor.stats_turned_in\")), 1)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_16, [\n _createElementVNode(\"div\", _hoisted_17, [\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.averageProgress), 1),\n _hoisted_18,\n _createElementVNode(\"p\", _hoisted_19, _toDisplayString(_ctx.$t(\"event_monitor.stats_average_progress\")), 1)\n ])\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_20, [\n _createElementVNode(\"div\", _hoisted_21, [\n _createVNode(_component_TextInput, {\n searchBar: true,\n modelValue: _ctx.searchText,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.searchText) = $event)),\n leftIcon: 'search',\n class: \"w-full\",\n placeholder: _ctx.$t('event_monitor.search_students')\n }, null, 8, [\"modelValue\", \"placeholder\"]),\n _createVNode(_component_DropdownMenu, {\n expanded: _ctx.sortingOptionsExpanded,\n onToggleExpanded: _cache[1] || (_cache[1] = ($event: any) => (_ctx.sortingOptionsExpanded = !_ctx.sortingOptionsExpanded))\n }, {\n activator: _withCtx(() => [\n _createVNode(_component_Btn, {\n variant: 'icon',\n outline: true,\n class: \"\"\n }, {\n default: _withCtx(() => [\n (_openBlock(), _createElementBlock(\"svg\", _hoisted_22, _hoisted_25))\n ]),\n _: 1\n })\n ]),\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_26, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.sortingOptions, (option, index) => {\n return (_openBlock(), _createElementBlock(\"div\", { key: index }, [\n _createVNode(_component_Btn, {\n outline: true,\n class: \"px-8 pt-2 pb-2 w-full\",\n variant: 'transparent',\n onClick: ($event: any) => (_ctx.setSortingOption(index))\n }, {\n default: _withCtx(() => [\n (index === _ctx.selectedSortingOption)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_27, \"done\"))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_28, _toDisplayString(option.label), 1)\n ]),\n _: 2\n }, 1032, [\"onClick\"])\n ]))\n }), 128))\n ])\n ]),\n _: 1\n }, 8, [\"expanded\"])\n ]),\n (!_ctx.firstLoading && _ctx.resultsMode)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_29, [\n _createVNode(_component_Btn, {\n class: \"no-elevate mr-2\",\n onClick: _ctx.onPublishResults,\n disabled: _ctx.selectedParticipationsIds.length == 0\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_results.publish_results\")), 1)\n ]),\n _: 1\n }, 8, [\"onClick\", \"disabled\"]),\n (_ctx.googleClassroomCourseWorkTwin !== null)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 0,\n variant: 'icon',\n outline: true,\n tooltip: _ctx.$t('integrations.classroom.sync_grades_with_classroom'),\n onClick: _ctx.onSyncGradesWithClassroom\n }, {\n default: _withCtx(() => [\n _hoisted_30\n ]),\n _: 1\n }, 8, [\"tooltip\", \"onClick\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_router_link, {\n class: \"z-50\",\n to: { name: 'ExamStats' }\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Btn, {\n outline: true,\n tooltip: _ctx.$t('help_texts.stats'),\n variant: 'icon',\n class: \"transition-transform duration-200 transform icon-btn-primary\"\n }, {\n default: _withCtx(() => [\n _hoisted_31\n ]),\n _: 1\n }, 8, [\"tooltip\"])\n ]),\n _: 1\n }),\n _createVNode(_component_CsvParticipationDownloader, { class: \"ml-auto\" })\n ]))\n : (!_ctx.firstLoading)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_32, [\n _createElementVNode(\"p\", _hoisted_33, _toDisplayString(_ctx.$t(\"event_monitor.if_selected\")) + \":\", 1),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(Object.entries(_ctx.bulkActions), ([name, action]) => {\n return (_openBlock(), _createElementBlock(\"div\", { key: name }, [\n _createVNode(_component_Btn, {\n onClick: ($event: any) => (action.method()),\n class: \"no-elevate mx-1\",\n variant: 'secondary',\n disabled: !_ctx.selectedParticipations.some(p => action.applicable(p))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(action.label), 1)\n ]),\n _: 2\n }, 1032, [\"onClick\", \"disabled\"])\n ]))\n }), 128)),\n _createVNode(_component_Btn, {\n outline: true,\n size: 'sm',\n variant: 'danger',\n onClick: _ctx.onCloseExam,\n class: \"ml-4 mr-1\"\n }, {\n default: _withCtx(() => [\n _hoisted_34,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t(\"event_preview.close\")), 1)\n ]),\n _: 1\n }, 8, [\"onClick\"])\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n false\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_35, [\n (_ctx.event.state === _ctx.EventState.RESTRICTED)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: _normalizeClass([\"flex w-full transition-all duration-200\", {\n\t\t\t\t\t'opacity-0 max-h-0 mb-0': !_ctx.showRestrictedModeBanner,\n\t\t\t\t\t'opacity-100 max-h-96 mb-3': _ctx.showRestrictedModeBanner,\n\t\t\t\t}])\n }, [\n _createElementVNode(\"div\", _hoisted_36, [\n _hoisted_37,\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t(\"event_monitor.some_exams_still_open\")), 1),\n _createVNode(_component_Btn, {\n outline: true,\n size: 'xs',\n variant: 'icon',\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.showRestrictedModeBanner = false))\n }, {\n default: _withCtx(() => [\n _hoisted_38\n ]),\n _: 1\n })\n ])\n ], 2))\n : _createCommentVNode(\"\", true),\n (!_ctx.firstLoading && _ctx.resultsMode)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_39, [\n (!_ctx.areAllParticipationsFullyAssessed(_ctx.mainStore.eventParticipations))\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: _normalizeClass([\"flex transition-all duration-200 banner banner-danger\", {\n\t\t\t\t\t\t'opacity-0 max-h-0 mb-0 py-0': !_ctx.showThereArePendingAssessmentsBanner,\n\t\t\t\t\t\t'opacity-100 max-h-96 mb-3': _ctx.showThereArePendingAssessmentsBanner,\n\t\t\t\t\t}])\n }, [\n _hoisted_40,\n _createElementVNode(\"p\", _hoisted_41, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_assessment.some_exams_require_manual_assessment\")) + \" \" + _toDisplayString(_ctx.$t(\"event_assessment.exams_awaiting_assessment_are_marked\")) + \" \", 1),\n _hoisted_42,\n _createTextVNode(\". \")\n ]),\n _createVNode(_component_Btn, {\n outline: true,\n size: 'xs',\n variant: 'icon',\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.showThereArePendingAssessmentsBanner = false))\n }, {\n default: _withCtx(() => [\n _hoisted_43\n ]),\n _: 1\n })\n ], 2))\n : (_ctx.thereAreUnpublishedAssessments)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: _normalizeClass([\"flex transition-all duration-200 banner banner-light\", {\n\t\t\t\t\t\t'opacity-0 max-h-0 mb-0 py-0': !_ctx.showThereAreUnpublishedResultsBanner,\n\t\t\t\t\t\t'opacity-100 max-h-96 mb-3': _ctx.showThereAreUnpublishedResultsBanner,\n\t\t\t\t\t}])\n }, [\n _hoisted_44,\n _createElementVNode(\"p\", null, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_assessment.ready_to_publish_1\")) + \" \", 1),\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t(\"event_results.publish_results\")), 1),\n _createTextVNode(\". \" + _toDisplayString(_ctx.$t(\"event_assessment.ready_to_publish_2\")), 1)\n ]),\n _createVNode(_component_Btn, {\n outline: true,\n size: 'xs',\n variant: 'icon',\n style: {\"margin-left\":\"auto !important\"},\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.showThereAreUnpublishedResultsBanner = false))\n }, {\n default: _withCtx(() => [\n _hoisted_45\n ]),\n _: 1\n })\n ], 2))\n : (_openBlock(), _createElementBlock(\"div\", {\n key: 2,\n class: _normalizeClass([\"flex transition-all duration-200 banner banner-success\", {\n\t\t\t\t\t\t'opacity-0 max-h-0 mb-0 py-0': !_ctx.showAllAssessmentsPublishedBanner,\n\t\t\t\t\t\t'opacity-100 max-h-96 mb-3': _ctx.showAllAssessmentsPublishedBanner,\n\t\t\t\t\t}])\n }, [\n _hoisted_46,\n _createElementVNode(\"p\", _hoisted_47, _toDisplayString(_ctx.$t(\"event_assessment.all_published\")), 1),\n _createVNode(_component_Btn, {\n outline: true,\n size: 'xs',\n variant: 'icon',\n style: {\"margin-left\":\"auto !important\"},\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.showAllAssessmentsPublishedBanner = false))\n }, {\n default: _withCtx(() => [\n _hoisted_48\n ]),\n _: 1\n })\n ], 2))\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_49, [\n _createVNode(_component_DataTable, {\n class: _normalizeClass({\n\t\t\t\t\t'opacity-50': _ctx.filteredParticipationsData.length === 0 || _ctx.firstLoading,\n\t\t\t\t}),\n columnDefs: _ctx.participationPreviewColumns,\n rowData: _ctx.firstLoading ? [] : _ctx.filteredParticipationsData,\n isRowSelectable: _ctx.isRowSelectable,\n rowClassRules: _ctx.getRowClassRules(),\n getRowId: _ctx.getRowId,\n onCellClicked: _ctx.onCellClicked,\n onGridReady: _cache[6] || (_cache[6] = ($event: any) => {\n\t\t\t\t\t_ctx.gridApi = $event.api;\n\t\t\t\t\t_ctx.columnApi = $event.columnApi;\n\t\t\t\t\t_ctx.columnApi.autoSizeAllColumns(false);\n\t\t\t\t}),\n onSelectionChanged: _ctx.onSelectionChanged\n }, null, 8, [\"class\", \"columnDefs\", \"rowData\", \"isRowSelectable\", \"rowClassRules\", \"getRowId\", \"onCellClicked\", \"onSelectionChanged\"])\n ]),\n (_ctx.blockingDialogData)\n ? (_openBlock(), _createBlock(_component_Dialog, {\n key: 1,\n showDialog: _ctx.showBlockingDialog,\n onNo: _cache[8] || (_cache[8] = ($event: any) => (_ctx.resolveBlockingDialog(false))),\n onYes: _cache[9] || (_cache[9] = ($event: any) => (_ctx.resolveBlockingDialog(true))),\n noText: _ctx.blockingDialogData.noText,\n yesText: _ctx.dispatchingCall ? _ctx.$t('misc.wait') : _ctx.blockingDialogData.yesText,\n dismissible: true,\n disableOk: _ctx.blockingDialogData.disableOk || _ctx.dispatchingCall\n }, _createSlots({\n body: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.blockingDialogData.text), 1)\n ]),\n footerButtons: _withCtx(() => [\n (_ctx.showClassroomIntegrationSwitch)\n ? (_openBlock(), _createBlock(_component_IntegrationSwitch, {\n key: 0,\n class: \"ml-7.5 mb-1\",\n modelValue: _ctx.publishToClassroom,\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = ($event: any) => ((_ctx.publishToClassroom) = $event))\n }, null, 8, [\"modelValue\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 2\n }, [\n (_ctx.blockingDialogData.title)\n ? {\n name: \"title\",\n fn: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.blockingDialogData.title), 1)\n ]),\n key: \"0\"\n }\n : undefined\n ]), 1032, [\"showDialog\", \"noText\", \"yesText\", \"disableOk\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_Dialog, {\n warning: !_ctx.resultsMode && !_ctx.editingSlot,\n fullWidth: !!_ctx.editingSlot,\n showDialog: _ctx.showAssessmentEditorDialog,\n onNo: _cache[12] || (_cache[12] = ($event: any) => (_ctx.showAssessmentEditorDialog = false)),\n onYes: _cache[13] || (_cache[13] = ($event: any) => (_ctx.dispatchAssessmentUpdate())),\n noText: _ctx.dialogData.noText,\n yesText: \n\t\t\t\t_ctx.dispatchingCall ? _ctx.$t('misc.wait') : _ctx.$t('event_assessment.confirm_assessment')\n\t\t\t,\n dismissible: false,\n footerBorder: true,\n disableOk: \n\t\t\t\t_ctx.dispatchingCall ||\n\t\t\t\t(_ctx.editingSlotDirty &&\n\t\t\t\t\t(_ctx.editingSlotDirty.score == null || _ctx.editingSlotDirty.score.length == 0))\n\t\t\t\n }, _createSlots({\n body: _withCtx(() => [\n (_ctx.editingSlot)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_50, [\n (!_ctx.localLoading && _ctx.editingSlotDirty)\n ? (_openBlock(), _createBlock(_component_AbstractEventParticipationSlot, {\n key: 0,\n allowEditAssessment: true,\n showAssessmentCard: true,\n assessmentWriteOnly: true,\n modelValue: _ctx.editingSlotDirty,\n onOpenFull: _cache[10] || (_cache[10] = ($event: any) => (\n\t\t\t\t\t\t\t_ctx.$router.push({\n\t\t\t\t\t\t\t\tname: 'ExamParticipationFull',\n\t\t\t\t\t\t\t\tparams: { participationId: _ctx.editingParticipationId },\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)),\n onUpdateAssessment: _cache[11] || (_cache[11] = ($event: any) => (_ctx.onUpdateSlotAssessment($event)))\n }, null, 8, [\"modelValue\"]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_51, [\n _createVNode(_component_SkeletonCard, { borderLess: true }),\n _createVNode(_component_SkeletonCard, { borderLess: true })\n ]))\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 2\n }, [\n (_ctx.editingSlot)\n ? {\n name: \"title\",\n fn: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_assessment.assess\")) + \" \" + _toDisplayString(_ctx.$t(\"event_assessment.exercise\")) + \" \" + _toDisplayString((_ctx.editingSlot?.slot_number ?? 0) + 1) + \" \" + _toDisplayString(_ctx.$t(\"misc.for\")) + \" \" + _toDisplayString(_ctx.editingFullName), 1)\n ]),\n key: \"0\"\n }\n : (_ctx.dialogData.title?.length > 0)\n ? {\n name: \"title\",\n fn: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.dialogData.title), 1)\n ]),\n key: \"1\"\n }\n : undefined\n ]), 1032, [\"warning\", \"fullWidth\", \"showDialog\", \"noText\", \"yesText\", \"disableOk\"]),\n (_ctx.firstLoading)\n ? (_openBlock(), _createBlock(_component_Spinner, {\n key: 2,\n style: {\"z-index\":\"99999999\"},\n variant: 'dark',\n fast: true,\n size: 'xl',\n class: \"absolute transform -translate-x-1/2 -translate-y-1/2 top-1/2 left-1/2\"\n }))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_v_tour, {\n name: \"examInsightsTour\",\n steps: _ctx.examInsightsPageTourSteps,\n options: _ctx.tourOptions\n }, null, 8, [\"steps\", \"options\"])\n ]))\n}","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined\" }, \" file_download \", -1)\nconst _hoisted_2 = { class: \"text-darkText\" }\nconst _hoisted_3 = { class: \"mb-4 text-muted\" }\nconst _hoisted_4 = { class: \"flex items-center mb-2 space-x-2\" }\nconst _hoisted_5 = { class: \"text-sm text-muted\" }\nconst _hoisted_6 = { class: \"flex items-center mt-12 ml-1.5 space-x-2 w-44 hidden\" }\nconst _hoisted_7 = { key: 0 }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_RadioGroup = _resolveComponent(\"RadioGroup\")!\n const _component_CheckboxGroup = _resolveComponent(\"CheckboxGroup\")!\n const _component_SegmentedControls = _resolveComponent(\"SegmentedControls\")!\n const _component_Dialog = _resolveComponent(\"Dialog\")!\n\n return (_openBlock(), _createElementBlock(\"div\", null, [\n _createVNode(_component_Btn, {\n tooltip: _ctx.$t('misc.download_results'),\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.showDialog = true)),\n outline: true,\n variant: 'icon',\n disabled: (_ctx.mainStore.eventParticipations?.length ?? 0) === 0\n }, {\n default: _withCtx(() => [\n _hoisted_1\n ]),\n _: 1\n }, 8, [\"tooltip\", \"disabled\"]),\n _createVNode(_component_Dialog, {\n showDialog: _ctx.showDialog,\n yesText: _ctx.loadingReport ? _ctx.$t('misc.downloading') : _ctx.$t('misc.download'),\n noText: _ctx.$t('dialog.default_cancel_text'),\n disableOk: _ctx.loadingReport,\n onNo: _cache[4] || (_cache[4] = ($event: any) => (_ctx.showDialog = false)),\n onYes: _cache[5] || (_cache[5] = ($event: any) => (_ctx.onDownload())),\n fullWidth: true\n }, {\n title: _withCtx(() => [\n _createElementVNode(\"h3\", null, _toDisplayString(_ctx.$t(\"participation_downloader.download_results\")), 1)\n ]),\n body: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"p\", _hoisted_3, _toDisplayString(_ctx.$t(\"participation_downloader.introduction\")), 1),\n _createVNode(_component_RadioGroup, {\n modelValue: _ctx.selectedDownloadPreset,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((_ctx.selectedDownloadPreset) = $event)),\n options: _ctx.presetsAsOptions\n }, {\n item: _withCtx(({ description }) => [\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"p\", _hoisted_5, _toDisplayString(description), 1)\n ])\n ]),\n _: 1\n }, 8, [\"modelValue\", \"options\"]),\n _createElementVNode(\"div\", {\n class: _normalizeClass([{\n\t\t\t\t\t\t\t'opacity-40': _ctx.selectedDownloadPreset !== _ctx.ReportSettingsPreset.CUSTOM,\n\t\t\t\t\t\t}, \"mb-12 ml-7\"])\n }, [\n _createVNode(_component_CheckboxGroup, {\n disabled: _ctx.selectedDownloadPreset !== _ctx.ReportSettingsPreset.CUSTOM,\n options: _ctx.fieldsAsOptions,\n class: \"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-y-2\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => (\n\t\t\t\t\t\t\t\t_ctx.downloadSettingsProxy = {\n\t\t\t\t\t\t\t\t\t..._ctx.downloadSettingsProxy,\n\t\t\t\t\t\t\t\t\tfields: $event,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)),\n modelValue: _ctx.availablePresets[_ctx.ReportSettingsPreset.CUSTOM].fields\n }, null, 8, [\"disabled\", \"options\", \"modelValue\"])\n ], 2),\n _createElementVNode(\"div\", _hoisted_6, [\n _createVNode(_component_SegmentedControls, {\n class: \"w-full\",\n options: _ctx.formatsAsOptions,\n modelValue: _ctx.reportType,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((_ctx.reportType) = $event))\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t(\"participation_downloader.report_type\")), 1)\n ]),\n _: 1\n }, 8, [\"options\", \"modelValue\"])\n ]),\n (_ctx.downloadSettings)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _: 1\n }, 8, [\"showDialog\", \"yesText\", \"noText\", \"disableOk\"])\n ]))\n}","import {\n\tEventParticipation,\n\tExercise,\n\tEventParticipationSlot,\n\tExerciseChoice,\n\tCodeExecutionResults,\n\tExerciseTestCase,\n} from \"@/models\";\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport { DataFrequency } from \"@/reports/misc\";\n\n// returns an array of pairs where s is a score and f is the\n// frequency with which that score appears among the given participations\nexport const getScoreFrequencyFromParticipations = (\n\tparticipations: EventParticipation[],\n): DataFrequency[] =>\n\t(\n\t\tparticipations\n\t\t\t.filter(p => typeof p.score !== \"undefined\" && p.score !== null)\n\t\t\t.map(p => p.score) as string[]\n\t)\n\t\t.reduce((a, s) => {\n\t\t\tconst normalizedDatum = String(isNaN(parseFloat(s)) ? s : parseFloat(s));\n\t\t\tconst record = a.find(r => r.datum == normalizedDatum);\n\t\t\tif (record) {\n\t\t\t\trecord.frequency++;\n\t\t\t} else {\n\t\t\t\ta.push({ datum: normalizedDatum, frequency: 1 });\n\t\t\t}\n\t\t\treturn a;\n\t\t}, [] as DataFrequency[])\n\t\t// put numbers first, in ascending order; then non-numeric\n\t\t// values in ascending lexicographical order\n\t\t.sort((a, b) =>\n\t\t\tisNaN(parseFloat(a.datum))\n\t\t\t\t? isNaN(parseFloat(b.datum))\n\t\t\t\t\t? a.datum < b.datum\n\t\t\t\t\t\t? -1\n\t\t\t\t\t\t: 1\n\t\t\t\t\t: -1\n\t\t\t\t: isNaN(parseFloat(b.datum))\n\t\t\t\t? isNaN(parseFloat(a.datum))\n\t\t\t\t\t? a.datum < b.datum\n\t\t\t\t\t\t? -1\n\t\t\t\t\t\t: 1\n\t\t\t\t\t: -1\n\t\t\t\t: parseFloat(a.datum) < parseFloat(b.datum)\n\t\t\t\t? -1\n\t\t\t\t: 1,\n\t\t);\n\nexport const getTestCasePassingFrequencyFor = (\n\texercise: Exercise,\n\tslots: EventParticipationSlot[],\n): {\n\tscoreFrequency: DataFrequency[];\n\ttestCasePassingRate: Record;\n} => ({\n\tscoreFrequency: slots\n\t\t.flatMap(s => s.execution_results ?? ({ state: \"completed\" } as CodeExecutionResults))\n\t\t.reduce((a, e) => {\n\t\t\tconst testCasesDetails = e.tests ?? [];\n\t\t\tconst passedTestCases = testCasesDetails.filter(t => t.passed).length;\n\t\t\tconst record = a.find(r => r.datum === passedTestCases);\n\t\t\tif (record) {\n\t\t\t\trecord.frequency++;\n\t\t\t} else {\n\t\t\t\ta.push({ datum: passedTestCases, frequency: 1 });\n\t\t\t}\n\t\t\treturn a;\n\t\t}, [] as DataFrequency[])\n\t\t.sort((a, b) => (a.datum < b.datum ? -1 : 1)),\n\ttestCasePassingRate: (exercise.testcases as ExerciseTestCase[]).reduce((d, t) => {\n\t\t// for each test case in the exercise, get slots\n\t\t// whose submission passed the test case\n\t\td[t.id] = slots.filter(s => {\n\t\t\tconst testCaseResults = (s.execution_results?.tests ?? []).find(\n\t\t\t\trt => String(rt.id) === String(t.id),\n\t\t\t);\n\t\t\treturn testCaseResults && testCaseResults.passed;\n\t\t}).length;\n\t\treturn d;\n\t}, {} as Record),\n});\n\n// returns an array of pairs where c is an ExerciseChoice and\n// f is the frequency with which it's been selected in the given slots\nexport const getChoiceSelectionFrequencyFor = (\n\texercise: Exercise,\n\tslots: EventParticipationSlot[],\n): DataFrequency[] => {\n\tconst selectedChoicesIds = new Set();\n\n\tconst selectedChoicesFrequency = slots\n\t\t.flatMap(s => s.selected_choices)\n\t\t.reduce((a, c) => {\n\t\t\tconst choice = (exercise.choices ?? []).find(ch => ch.id == c) as ExerciseChoice;\n\t\t\tconst record = a.find(r => r.datum.id == c);\n\t\t\tif (record) {\n\t\t\t\trecord.frequency++;\n\t\t\t} else {\n\t\t\t\ta.push({ datum: choice, frequency: 1 });\n\t\t\t}\n\t\t\tselectedChoicesIds.add(String(c));\n\t\t\treturn a;\n\t\t}, [] as DataFrequency[])\n\t\t.sort((a, b) => (String(a.datum.id) < String(b.datum.id) ? -1 : 1));\n\n\treturn [\n\t\t...selectedChoicesFrequency,\n\t\t// include choices that weren't selected with frequency 0\n\t\t...(exercise.choices ?? [])\n\t\t\t.filter(c => !selectedChoicesIds.has(String(c.id)))\n\t\t\t.map(c => ({\n\t\t\t\tdatum: c,\n\t\t\t\tfrequency: 0,\n\t\t\t})),\n\t];\n};\n","import { getTranslatedString as _ } from \"@/i18n\";\n\nexport const scoreChartOptions = {\n\tresponsive: true,\n\tmaintainAspectRatio: true,\n\tplugins: {\n\t\tlegend: {\n\t\t\tdisplay: false,\n\t\t},\n\t},\n\tscales: {\n\t\tx: {\n\t\t\tdisplay: true,\n\t\t\tgrid: { display: false },\n\t\t\ttitle: {\n\t\t\t\tdisplay: true,\n\t\t\t\ttext: _(\"event_participation_headings.grade\"),\n\t\t\t},\n\t\t},\n\t\ty: {\n\t\t\tdisplay: true,\n\t\t\tgrid: { display: true },\n\t\t\tticks: { stepSize: 2, beginAtZero: true },\n\t\t},\n\t},\n};\n\nexport const passedTestCasesBarChartOptions = {\n\t...scoreChartOptions,\n\tscales: {\n\t\t...scoreChartOptions.scales,\n\t\tx: {\n\t\t\t...scoreChartOptions.scales.x,\n\t\t\ttitle: {\n\t\t\t\tdisplay: true,\n\t\t\t\ttext: _(\"misc.passed_tests\"),\n\t\t\t},\n\t\t},\n\t},\n};\n\nexport const exerciseChoicesBarChartOptions = {\n\tindexAxis: \"y\",\n\tresponsive: true,\n\tmaintainAspectRatio: true,\n\tplugins: {\n\t\tlegend: {\n\t\t\tdisplay: false,\n\t\t},\n\t},\n\tscales: {\n\t\tx: {\n\t\t\tdisplay: true,\n\t\t\tgrid: { display: false },\n\t\t\tticks: { stepSize: 2, beginAtZero: true },\n\t\t\ttitle: {\n\t\t\t\tdisplay: true,\n\t\t\t\ttext: _(\"event_stats.selections\"),\n\t\t\t},\n\t\t},\n\t\ty: {\n\t\t\tdisplay: true,\n\t\t\tgrid: { display: false },\n\t\t\t//ticks: { font: { size: 22 } },\n\t\t},\n\t},\n};\n\nexport const scoreChartDatasetSettings = {\n\tbackgroundColor: \"#6a16f099\",\n\tmaxBarThickness: 100,\n};\n\nexport const exerciseChoiceDatasetSettings = {\n\tbackgroundColor: \"#10B981b3\",\n\tmaxBarThickness: 40,\n};\n","import { ReportField, ReportSettings } from \"./types\";\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport { EventParticipation, ExerciseType, ExerciseTestCase } from \"@/models\";\nimport { get } from \"lodash\";\nimport { isNumeric } from \"@/api/utils\";\n\n/**\n * Returns a list of headers to be used when generating the CSV report.\n * The list is constructed by using the given settings and only including\n * the fields which are enabled in the settings.\n */\nconst getEventParticipationHeaders = (\n\tparticipations: EventParticipation[],\n\treportSettings: ReportSettings,\n): string[] => [\n\t...(reportSettings.fields.includes(ReportField.STUDENT_EMAIL) ? [\"user.email\"] : []),\n\t...(reportSettings.fields.includes(ReportField.STUDENT_MAT) ? [\"user.mat\"] : []),\n\t...(reportSettings.fields.includes(ReportField.STUDENT_COURSE) ? [\"user.course\"] : []),\n\t...(reportSettings.fields.includes(ReportField.STUDENT_FULL_NAME)\n\t\t? [\"user.last_name\", \"user.first_name\"]\n\t\t: []),\n\t// TODO explicit condition for timestamp fields\n\t...(reportSettings.fields.includes(ReportField.EXERCISES_ANSWER) ||\n\treportSettings.fields.includes(ReportField.EXERCISES_SCORE) ||\n\treportSettings.fields.includes(ReportField.EXERCISES_LABEL)\n\t\t? [\"begin_timestamp\", \"end_timestamp\"]\n\t\t: []),\n\t...(reportSettings.fields.includes(ReportField.EXERCISES_ANSWER) ||\n\treportSettings.fields.includes(ReportField.EXERCISES_SCORE) ||\n\treportSettings.fields.includes(ReportField.EXERCISES_LABEL)\n\t\t? participations[0].slots.map((__, i) => {\n\t\t\t\tconst ret: string[] = reportSettings.fields.includes(ReportField.EXERCISES_LABEL)\n\t\t\t\t\t? [`slots[${i}].exercise.label`]\n\t\t\t\t\t: []; // TODO! if exercise has no label, put text instead\n\t\t\t\t// for each exercise type, check if any participation has that type in the\n\t\t\t\t// slot with current number, in which case add relevant headers\n\t\t\t\tconst samePositionSlotTypes = participations.map(\n\t\t\t\t\tp => p.slots[i].exercise.exercise_type,\n\t\t\t\t);\n\t\t\t\tconst samePositionExercises = participations.map(p => p.slots[i].exercise);\n\t\t\t\tif (\n\t\t\t\t\treportSettings.fields.includes(ReportField.EXERCISES_ANSWER) &&\n\t\t\t\t\tsamePositionSlotTypes.some(t =>\n\t\t\t\t\t\t[ExerciseType.OPEN_ANSWER, ExerciseType.JS, ExerciseType.C].includes(\n\t\t\t\t\t\t\tt as ExerciseType,\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tret.push(`slots[${i}].answer_text`);\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\treportSettings.fields.includes(ReportField.EXERCISES_ANSWER) &&\n\t\t\t\t\tsamePositionSlotTypes.some(t =>\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tExerciseType.MULTIPLE_CHOICE_MULTIPLE_POSSIBLE,\n\t\t\t\t\t\t\tExerciseType.MULTIPLE_CHOICE_SINGLE_POSSIBLE,\n\t\t\t\t\t\t].includes(t as ExerciseType),\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tret.push(`slots[${i}].selected_choices`);\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\treportSettings.fields.includes(ReportField.EXERCISES_SCORE) &&\n\t\t\t\t\tsamePositionSlotTypes.some(t =>\n\t\t\t\t\t\t[ExerciseType.JS, ExerciseType.C].includes(t as ExerciseType),\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tconst otherProgrammingExercises = samePositionExercises.filter(e =>\n\t\t\t\t\t\t[ExerciseType.JS, ExerciseType.C].includes(e.exercise_type as ExerciseType),\n\t\t\t\t\t);\n\t\t\t\t\t// add as many \"testcase i passed\" columns as the highest number\n\t\t\t\t\t// of testcases in the exercises of the same slot\n\t\t\t\t\tconst maxTestcases = Math.max(\n\t\t\t\t\t\t...otherProgrammingExercises.map(e => e.testcases?.length ?? 0),\n\t\t\t\t\t);\n\t\t\t\t\t[...Array(maxTestcases)].forEach((_, j) =>\n\t\t\t\t\t\tret.push(`slots[${i}].passed_testcase_${j}`),\n\t\t\t\t\t);\n\n\t\t\t\t\tret.push(`slots[${i}].passed_testcases`, `slots[${i}].failed_testcases`);\n\t\t\t\t} else if (reportSettings.fields.includes(ReportField.EXERCISES_SCORE)) {\n\t\t\t\t\tret.push(`slots[${i}].score`);\n\t\t\t\t}\n\t\t\t\t// TODO! handle upload exercises and aggregated exercises\n\t\t\t\treturn ret;\n\t\t })\n\t\t: []\n\t).flat(),\n\t...(reportSettings.fields.includes(ReportField.SCORE) ? [\"score\"] : []),\n];\n\n/**\n * Takes in a header and returns its trnslated version\n */\nconst getHeaderString = (header: string) => {\n\tconst tokens = header.split(\".\");\n\tlet i = 0;\n\tfor (const t of tokens) {\n\t\t// if the string is in the form \"reports.csv_headers.slot[n].something\"\n\t\t// get the slot number and return the string corresponding to the translation\n\t\t// of \"report.csv_headers.slot\" + n + \"reports.csv_headers.slots.something\"\n\t\tconst match = t.match(/slots\\[(\\d+)\\]/);\n\t\tif (match != null) {\n\t\t\tconst slotNumber = parseInt(match[1]) + 1; // get slot number\n\t\t\treturn (\n\t\t\t\t_(\"reports.csv_headers.slot\") +\n\t\t\t\t\" \" +\n\t\t\t\tslotNumber +\n\t\t\t\t\" \" +\n\t\t\t\t_(\"reports.csv_headers.slots.\" + tokens.filter((t, j) => j > i).join(\".\"))\n\t\t\t);\n\t\t}\n\t\ti++;\n\t}\n\treturn _(\"reports.csv_headers.\" + header);\n};\n\n/**\n * Takes in a participation and the name of a field of the CSV report.\n * Returns the value of the field on the participation, performing nested\n * lookups as needed. The exact nature of the performed lookup depends\n * on the field accessed.\n */\nconst getCellValue = (participation: EventParticipation, field: string) => {\n\t// for fields that don't actually exist on the participation,\n\t// or need additional processing, manually set the value\n\tconst matchPassedTestCases = field.match(/slots\\[(\\d+)\\].passed_testcases/);\n\tconst matchPassedTestCase = field.match(/slots\\[(\\d+)\\].passed_testcase_(\\d+)/);\n\tconst matchFailedTestCases = field.match(/slots\\[(\\d+)\\].failed_testcases/);\n\tconst matchSelectedChoices = field.match(/slots\\[(\\d+)\\].selected_choices/);\n\n\tif (matchSelectedChoices !== null) {\n\t\t// take the id of the selected choices and map them to the texts of\n\t\t// the corresponding choices\n\t\tconst slot = participation.slots[parseInt(matchSelectedChoices[1])];\n\t\treturn slot.selected_choices\n\t\t\t.map(cId => slot.exercise.choices?.find(c => c.id === cId)?.text) // TODO strip off html from text - write a general function that does that from any text and use for answers etc.\n\t\t\t.join(\" --- \");\n\t} else if (matchFailedTestCases !== null || matchPassedTestCases !== null) {\n\t\tconst slot =\n\t\t\tparticipation.slots[\n\t\t\t\tparseInt(((matchFailedTestCases ?? matchPassedTestCases) as RegExpMatchArray)[1])\n\t\t\t];\n\t\tconst results = slot.execution_results ?? { tests: [] };\n\t\tconst passedTests =\n\t\t\tresults.tests?.filter((t: { passed: boolean }) => t.passed).length ?? 0;\n\t\treturn matchPassedTestCases !== null\n\t\t\t? passedTests\n\t\t\t: (slot.exercise.testcases as ExerciseTestCase[]).length - passedTests;\n\t} else if (matchPassedTestCase !== null) {\n\t\tconst slot = participation.slots[parseInt(matchPassedTestCase[1])];\n\t\tconst testcaseIndex = parseInt(matchPassedTestCase[2]);\n\t\tconst testcase = slot.exercise.testcases?.[testcaseIndex] as ExerciseTestCase;\n\n\t\tconst executionResults = slot.execution_results ?? { tests: [] };\n\n\t\treturn executionResults.tests?.find(t => t.id == testcase?.id)?.passed ?? false;\n\t}\n\n\t// otherwise, simply access the field on the participation or its children objects\n\treturn get(participation, field);\n};\n\n/**\n * Takes in an array of participations and a settings object, and returns\n * a string which is a valid CSV containing the report of those participations.\n */\nexport const getParticipationsAsCsv = (\n\tparticipations: EventParticipation[],\n\treportSettings: ReportSettings,\n): string => {\n\tconst headers = getEventParticipationHeaders(participations, reportSettings);\n\tconst replacer = (key: string, value: string) => {\n\t\tif (value === null) {\n\t\t\treturn null;\n\t\t}\n\t\tif (isNumeric(value)) {\n\t\t\t// ! TODO keep an eye on this, locale problems\n\t\t\treturn String(parseFloat(value)).replace(\".\", \",\");\n\t\t}\n\n\t\tif (typeof value === \"string\") {\n\t\t\treturn value\n\t\t\t\t.replace(/\\\\n/g, \"\\n\")\n\t\t\t\t.replace(/ getHeaderString(h)).join(\",\"),\n\t\t...participations.map(p =>\n\t\t\theaders\n\t\t\t\t.map(field =>\n\t\t\t\t\tJSON.stringify(getCellValue(p, field), replacer).replace(/\\\\\"/g, '\"'),\n\t\t\t\t)\n\t\t\t\t.join(\",\"),\n\t\t),\n\t].join(\"\\r\\n\");\n\treturn ret;\n};\n","import {\n\tReportField,\n\tReportSettings,\n\tReportSettingsPreset,\n\tReportType,\n} from \"@/reports/examParticipations\";\nimport {\n\tEventParticipation,\n\tParticipationAssessmentProgress,\n\tEventTemplateRule,\n\tEventParticipationState,\n\tExercise,\n\tEvent,\n} from \"@/models\";\n\nexport const areAllParticipationsFullyAssessed = (participations: EventParticipation[]) =>\n\tparticipations.every(\n\t\t(p: EventParticipation) =>\n\t\t\tp.assessment_progress === ParticipationAssessmentProgress.FULLY_ASSESSED,\n\t);\n\nexport const getParticipationsAverageProgress = (\n\tparticipations: EventParticipation[],\n\tevent: Event,\n) => {\n\tif (!participations?.length) {\n\t\treturn 0;\n\t}\n\tconst divisor =\n\t\t(event.template?.rules as EventTemplateRule[])\n\t\t\t.map(r => r.amount)\n\t\t\t.reduce((a, b) => a + b, 0) * participations.length;\n\n\tconst perc =\n\t\t(100 *\n\t\t\tparticipations\n\t\t\t\t.map(p =>\n\t\t\t\t\tp.state === EventParticipationState.TURNED_IN\n\t\t\t\t\t\t? p.slots.length\n\t\t\t\t\t\t: // TODO use slots that have answers\n\t\t\t\t\t\t p.current_slot_cursor ?? 0,\n\t\t\t\t)\n\t\t\t\t.reduce((a, b) => a + b)) /\n\t\tdivisor;\n\treturn Math.round(perc * 100) / 100;\n};\n\n// given an array of participations to an event, returns an array of exercises\n// where each member has been assigned to a slot in at least one participation\nexport const getExerciseListFromParticipations = (\n\tparticipations: EventParticipation[],\n): Exercise[] =>\n\tparticipations\n\t\t.flatMap(p => p.slots)\n\t\t.map(s => s.exercise)\n\t\t.filter((e, i, a) => a.findIndex(o => o?.id == e?.id) === i); // eliminate duplicates\n\nexport const getPresets = (): Record => ({\n\t[ReportSettingsPreset.ALL_FIELDS]: getAllFieldsReportPreset(),\n\t[ReportSettingsPreset.MAT_AND_SCORES]: getMatAndScoreReportPreset(),\n\t[ReportSettingsPreset.FULL_NAME_AND_SCORES]: getFullNameAndScoreReportPreset(),\n\t[ReportSettingsPreset.CUSTOM]: getCustomReportPreset(),\n});\n\nexport const getCustomReportPreset = (): ReportSettings => ({\n\tfields: [],\n\t// reportType: ReportType.CSV,\n});\n\nexport const getMatAndScoreReportPreset = (): ReportSettings => ({\n\tfields: [ReportField.STUDENT_MAT, ReportField.SCORE],\n\t// reportType: ReportType.CSV,\n});\n\nexport const getFullNameAndScoreReportPreset = (): ReportSettings => ({\n\tfields: [ReportField.STUDENT_FULL_NAME, ReportField.SCORE],\n\t// reportType: ReportType.CSV,\n});\n\nexport const getAllFieldsReportPreset = (): ReportSettings => ({\n\tfields: [\n\t\tReportField.STUDENT_EMAIL,\n\t\tReportField.STUDENT_FULL_NAME,\n\t\tReportField.STUDENT_MAT,\n\t\tReportField.STUDENT_COURSE,\n\t\tReportField.EXERCISES_LABEL,\n\t\tReportField.EXERCISES_ANSWER,\n\t\tReportField.EXERCISES_SCORE,\n\t\tReportField.SCORE,\n\t],\n\t// reportType: ReportType.CSV,\n});\n","\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport { SelectableOption } from \"@/interfaces\";\nimport { courseIdMixin, eventIdMixin, loadingMixin } from \"@/mixins\";\nimport {\n\tgetPresets,\n\tReportField,\n\tReportSettings,\n\tReportSettingsPreset,\n\tReportType,\n} from \"@/reports/examParticipations\";\nimport { getParticipationsAsCsv } from \"@/reports/examParticipations\";\nimport { forceFileDownload, setErrorNotification } from \"@/utils\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport Btn from \"../ui/Btn.vue\";\nimport Dialog from \"../ui/Dialog.vue\";\nimport RadioGroup from \"../ui/RadioGroup.vue\";\nimport SegmentedControls from \"../ui/SegmentedControls.vue\";\nimport CheckboxGroup from \"../ui/CheckboxGroup.vue\";\nimport { EventParticipation } from \"@/models\";\nimport { mapStores } from \"pinia\";\nimport { useMainStore } from \"@/stores/mainStore\";\n\nconst LOCAL_STORAGE_SETTINGS_KEY = \"report_settings\";\nconst CUSTOM_SETTINGS_KEY = \"custom_settings\";\nexport default defineComponent({\n\tname: \"CsvParticipationDownloader\",\n\tprops: {},\n\tmixins: [loadingMixin, courseIdMixin, eventIdMixin],\n\tcomponents: { Btn, Dialog, RadioGroup, SegmentedControls, CheckboxGroup },\n\twatch: {\n\t\tsettingsAsJson(newVal, _oldVal) {\n\t\t\tconst oldVal = JSON.parse(_oldVal);\n\t\t\tif (_oldVal) {\n\t\t\t\tlocalStorage.setItem(LOCAL_STORAGE_SETTINGS_KEY, newVal);\n\t\t\t}\n\t\t},\n\t\t// TODO ! find a way to keep in-sync (the one below re-fetches too often)\n\t\t// eventParticipations: {\n\t\t// \tdeep: true,\n\t\t// \thandler() {\n\t\t// \t\t// re-fetch report data if participations' data changes\n\t\t// \t\tthis.apiCallPromise = (async () =>\n\t\t// \t\t\t(this.participations = await this.getReportData()))();\n\t\t// \t},\n\t\t// },\n\t},\n\tcreated() {\n\t\t// restore last used settings\n\t\tif (LOCAL_STORAGE_SETTINGS_KEY in localStorage) {\n\t\t\tconst settings = JSON.parse(\n\t\t\t\tlocalStorage.getItem(LOCAL_STORAGE_SETTINGS_KEY) as string,\n\t\t\t);\n\t\t\tthis.reportType = settings.reportType ?? ReportType.CSV;\n\t\t\tthis.selectedDownloadPreset =\n\t\t\t\tsettings.selectedDownloadPreset ?? ReportSettingsPreset.MAT_AND_SCORES;\n\t\t\tif (CUSTOM_SETTINGS_KEY in settings) {\n\t\t\t\tObject.assign(this.availablePresets[ReportSettingsPreset.CUSTOM], {\n\t\t\t\t\t...this.availablePresets[ReportSettingsPreset.CUSTOM],\n\t\t\t\t\t...settings[CUSTOM_SETTINGS_KEY],\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// pre-fetch data and save returned Promise so it can be awaited\n\t\t// when user actually tries to download participations\n\t\tthis.apiCallPromise = (async () =>\n\t\t\t(this.participations = await this.getReportData()))();\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tloadingReport: false,\n\t\t\tshowDialog: false,\n\t\t\tdownloadSettings: null as ReportSettings | null,\n\t\t\tselectedDownloadPreset: ReportSettingsPreset.MAT_AND_SCORES,\n\t\t\tavailablePresets: getPresets(),\n\t\t\treportType: ReportType.CSV,\n\t\t\tReportSettingsPreset,\n\t\t\tapiCallPromise: null as Promise | null,\n\t\t\tparticipations: [] as EventParticipation[],\n\t\t};\n\t},\n\tmethods: {\n\t\tasync onDownload() {\n\t\t\tthis.loadingReport = true;\n\t\t\ttry {\n\t\t\t\tconst participations = await this.apiCallPromise;\n\t\t\t\tconst fileContents = this.formatDataForReportType(participations);\n\t\t\t\tthis.downloadReportFile(\n\t\t\t\t\tfileContents,\n\t\t\t\t\tthis.mainStore.getEventById(this.eventId).name +\n\t\t\t\t\t\t(this.reportType === ReportType.CSV ? \".csv\" : \".pdf\"),\n\t\t\t\t);\n\t\t\t} finally {\n\t\t\t\tsetTimeout(() => (this.loadingReport = false), 1500);\n\t\t\t}\n\t\t},\n\t\tasync getReportData() {\n\t\t\ttry {\n\t\t\t\tconst participations = await this.mainStore.getEventParticipations({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\teventId: this.eventId,\n\t\t\t\t\tincludeDetails: true,\n\t\t\t\t\tforCsv: this.reportType === ReportType.CSV,\n\t\t\t\t\tmutate: false,\n\t\t\t\t});\n\t\t\t\treturn participations;\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t\treturn [];\n\t\t\t}\n\t\t},\n\t\tformatDataForReportType(data: any) {\n\t\t\tif (this.reportType === ReportType.CSV) {\n\t\t\t\treturn getParticipationsAsCsv(data, this.downloadSettingsProxy).replace(\n\t\t\t\t\t/(\\\\r)?\\\\n/g,\n\t\t\t\t\t\"\\n\",\n\t\t\t\t);\n\t\t\t}\n\t\t\t// TODO implement PDF\n\t\t\tthrow new Error(\"pdf unimplemented\");\n\t\t},\n\t\tdownloadReportFile(data: any, filename: string) {\n\t\t\tforceFileDownload(\n\t\t\t\t{\n\t\t\t\t\tdata,\n\t\t\t\t},\n\t\t\t\tfilename,\n\t\t\t);\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore),\n\t\tsettingsAsJson(): string {\n\t\t\treturn JSON.stringify({\n\t\t\t\treportType: this.reportType,\n\t\t\t\tselectedDownloadPreset: this.selectedDownloadPreset,\n\t\t\t\t[CUSTOM_SETTINGS_KEY]: this.availablePresets[ReportSettingsPreset.CUSTOM],\n\t\t\t});\n\t\t},\n\t\tdownloadSettingsProxy: {\n\t\t\tget() {\n\t\t\t\treturn this.availablePresets[this.selectedDownloadPreset];\n\t\t\t},\n\t\t\tset(val: ReportSettings) {\n\t\t\t\tObject.assign(this.downloadSettingsProxy, val);\n\t\t\t},\n\t\t},\n\t\tformatsAsOptions(): SelectableOption[] {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tvalue: ReportType.CSV,\n\t\t\t\t\tcontent: _(\"misc.csv\"),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tvalue: ReportType.PDF,\n\t\t\t\t\tcontent: _(\"misc.pdf\"),\n\t\t\t\t},\n\t\t\t];\n\t\t},\n\t\tpresetsAsOptions(): SelectableOption[] {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tvalue: ReportSettingsPreset.MAT_AND_SCORES,\n\t\t\t\t\tcontent: _(\"participation_downloader.mat_and_scores_title\"),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tvalue: ReportSettingsPreset.FULL_NAME_AND_SCORES,\n\t\t\t\t\tcontent: _(\"participation_downloader.full_name_and_scores_title\"),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tvalue: ReportSettingsPreset.ALL_FIELDS,\n\t\t\t\t\tcontent: _(\"participation_downloader.all_fields_title\"),\n\t\t\t\t\tdescription: _(\"participation_downloader.all_fields_description\"),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tvalue: ReportSettingsPreset.CUSTOM,\n\t\t\t\t\tcontent: _(\"participation_downloader.custom_title\"),\n\t\t\t\t\tdescription: _(\"participation_downloader.custom_description\"),\n\t\t\t\t},\n\t\t\t];\n\t\t},\n\t\tfieldsAsOptions(): SelectableOption[] {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tvalue: ReportField.STUDENT_MAT,\n\t\t\t\t\tcontent: _(\"report_fields.\" + ReportField.STUDENT_MAT),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tvalue: ReportField.STUDENT_FULL_NAME,\n\t\t\t\t\tcontent: _(\"report_fields.\" + ReportField.STUDENT_FULL_NAME),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tvalue: ReportField.STUDENT_EMAIL,\n\t\t\t\t\tcontent: _(\"report_fields.\" + ReportField.STUDENT_EMAIL),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tvalue: ReportField.STUDENT_COURSE,\n\t\t\t\t\tcontent: _(\"report_fields.\" + ReportField.STUDENT_COURSE),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tvalue: ReportField.SCORE,\n\t\t\t\t\tcontent: _(\"report_fields.\" + ReportField.SCORE),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tvalue: ReportField.EXERCISES_LABEL,\n\t\t\t\t\tcontent: _(\"report_fields.\" + ReportField.EXERCISES_LABEL),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tvalue: ReportField.EXERCISES_ANSWER,\n\t\t\t\t\tcontent: _(\"report_fields.\" + ReportField.EXERCISES_ANSWER),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tvalue: ReportField.EXERCISES_SCORE,\n\t\t\t\t\tcontent: _(\"report_fields.\" + ReportField.EXERCISES_SCORE),\n\t\t\t\t},\n\t\t\t];\n\t\t},\n\t},\n});\n","import { render } from \"./CsvParticipationDownloader.vue?vue&type=template&id=4303b628&ts=true\"\nimport script from \"./CsvParticipationDownloader.vue?vue&type=script&lang=ts\"\nexport * from \"./CsvParticipationDownloader.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, normalizeClass as _normalizeClass, withCtx as _withCtx, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex items-center\" }\nconst _hoisted_2 = { class: \"m-auto transform translate-x-1/3\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"text-muted mt-1\"\n}\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"span\", {\n style: {\"font-size\":\"20px !important\"},\n class: \"material-icons-outlined animate-spin\"\n}, \" sync \", -1)\nconst _hoisted_5 = [\n _hoisted_4\n]\nconst _hoisted_6 = { class: \"\" }\nconst _hoisted_7 = {\n key: 0,\n class: \"text-yellow-900 material-icons-outlined mx-auto\",\n style: {\"font-size\":\"20px !important\",\"padding-top\":\"3.5px !important\"}\n}\nconst _hoisted_8 = {\n key: 1,\n class: \"mx-auto\",\n style: {\"padding-top\":\"-5px !important\"}\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (\n\t\t\t\t\t_ctx.params.value.execution_results &&\n\t\t\t\t\t_ctx.params.value.execution_results.state === 'running'\n\t\t\t\t)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, _hoisted_5))\n : (_openBlock(), _createBlock(_component_Btn, {\n key: 1,\n variant: 'icon',\n outline: true,\n style: {\"margin-top\":\"7.5px !important\",\"line-height\":\"1 !important\"},\n class: _normalizeClass({\n\t\t\t\t\t'transition-opacity duration-75 hover:opacity-100 opacity-70': _ctx.hasNullishScore,\n\t\t\t\t})\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_6, [\n (_ctx.hasNullishScore)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_7, \" pending_actions \"))\n : (_openBlock(), _createElementBlock(\"span\", _hoisted_8, _toDisplayString(_ctx.params.value.score), 1))\n ])\n ]),\n _: 1\n }, 8, [\"class\"]))\n ])\n ]))\n}","\nimport { EventParticipationSlot } from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport Btn from \"@/components/ui/Btn.vue\";\nexport default defineComponent({\n\tname: \"EventParticipationSlotScoreRenderer\",\n\tprops: {\n\t\tparams: {\n\t\t\ttype: Object as PropType<{\n\t\t\t\tvalue: Pick;\n\t\t\t}>,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tmethods: {},\n\tcomputed: {\n\t\thasNullishScore() {\n\t\t\treturn (\n\t\t\t\tthis.params.value.score === null || typeof this.params.value.score === \"undefined\"\n\t\t\t);\n\t\t},\n\t},\n\tcomponents: { Btn },\n});\n","import { render } from \"./EventParticipationSlotScoreRenderer.vue?vue&type=template&id=e8347530&ts=true\"\nimport script from \"./EventParticipationSlotScoreRenderer.vue?vue&type=script&lang=ts\"\nexport * from \"./EventParticipationSlotScoreRenderer.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex items-center\" }\nconst _hoisted_2 = { class: \"\" }\nconst _hoisted_3 = {\n class: \"material-icons text-lg mx-auto\",\n style: {\"font-size\":\"20px !important\",\"padding-top\":\"12.5px !important\"}\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([_ctx.hasAnswer ? 'text-success opacity-80' : 'text-muted opacity-50'])\n }, [\n _createElementVNode(\"span\", _hoisted_3, _toDisplayString(_ctx.hasAnswer ? \"done\" : \"remove\"), 1)\n ], 2)\n ])\n ]))\n}","\nimport { EventParticipationSlot } from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nexport default defineComponent({\n\tname: \"EventParticipationSlotScoreRenderer\",\n\tprops: {\n\t\tparams: {\n\t\t\ttype: Object as PropType<{ value: Pick }>,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tmethods: {},\n\tcomputed: {\n\t\thasAnswer() {\n\t\t\treturn (\n\t\t\t\t// TODO add has_answer to interface\n\t\t\t\t(this.params.value as any).has_answer\n\t\t\t);\n\t\t},\n\t},\n\tcomponents: {},\n});\n","import { render } from \"./EventParticipationSlotCompletionRenderer.vue?vue&type=template&id=52d1d9bf&ts=true\"\nimport script from \"./EventParticipationSlotCompletionRenderer.vue?vue&type=script&lang=ts\"\nexport * from \"./EventParticipationSlotCompletionRenderer.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex items-center\" }\nconst _hoisted_2 = {\n class: \"flex flex-col space-y-0.5 ml-3 mr-1.5\",\n style: {\"line-height\":\"1 !important\"}\n}\nconst _hoisted_3 = { class: \"text-xs text-muted\" }\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"span\", {\n class: \"material-icons-outlined\",\n style: {\"font-size\":\"15px !important\"}\n}, \"launch\", -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Avatar = _resolveComponent(\"Avatar\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_Avatar, {\n style: {\"line-height\":\"1 !important\"},\n user: _ctx.params.data.user\n }, null, 8, [\"user\"]),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.params.data.user.full_name), 1),\n _createElementVNode(\"p\", _hoisted_3, _toDisplayString(_ctx.params.data.user.email), 1)\n ]),\n _createVNode(_component_router_link, {\n to: {\n\t\t\t\tname: 'ExamParticipationFull',\n\t\t\t\tparams: {\n\t\t\t\t\tparticipationId: _ctx.params.data.id,\n\t\t\t\t\texamId: _ctx.eventId ?? '-1', // prevent 'missing required param' bugs\n\t\t\t\t\tcourseId: _ctx.courseId ?? '-1',\n\t\t\t\t},\n\t\t\t},\n target: \"_blank\",\n class: \"mt-1.5\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Btn, {\n variant: 'icon',\n outline: true,\n class: \"p-1\",\n size: 'sm'\n }, {\n default: _withCtx(() => [\n _hoisted_4\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"to\"])\n ]))\n}","\nimport { courseIdMixin, eventIdMixin } from \"@/mixins\";\nimport { EventParticipation } from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport Avatar from \"../ui/Avatar.vue\";\nimport Btn from \"../ui/Btn.vue\";\nexport default defineComponent({\n\tname: \"EventParticipationEmailRenderer\",\n\tprops: {\n\t\tparams: {\n\t\t\ttype: Object as PropType<{\n\t\t\t\tdata: EventParticipation;\n\t\t\t\tvalue: string;\n\t\t\t}>,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tmixins: [eventIdMixin, courseIdMixin],\n\tmethods: {},\n\tcomputed: {},\n\tcomponents: { Btn, Avatar },\n});\n","import { render } from \"./EventParticipationEmailRenderer.vue?vue&type=template&id=7bbbb932&ts=true\"\nimport script from \"./EventParticipationEmailRenderer.vue?vue&type=script&lang=ts\"\nexport * from \"./EventParticipationEmailRenderer.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = [\"title\"]\nconst _hoisted_2 = {\n key: 0,\n class: \"focus-within:text-lg material-icons-outlined text-muted -mb-2 pt-2.5\",\n style: {\"margin-left\":\"13px\"}\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", {\n title: _ctx.$t('event_participation_states.' + _ctx.params.value),\n class: _normalizeClass([_ctx.params.value === _ctx.EventParticipationState.IN_PROGRESS ? 'mt-1' : 'mt-1.5'])\n }, [\n (_ctx.params.value !== _ctx.EventParticipationState.CLOSED_BY_TEACHER)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_2, _toDisplayString(_ctx.participationStateIcons[_ctx.params.value as EventParticipationState][0]), 1))\n : _createCommentVNode(\"\", true)\n ], 10, _hoisted_1))\n}","\nimport { EventParticipationState } from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport { icons as participationStateIcons } from \"@/assets/participationStateIcons\";\nimport Btn from \"../ui/Btn.vue\";\nimport Tooltip from \"../ui/Tooltip.vue\";\nexport default defineComponent({\n\tname: \"EventParticipationStateRenderer\",\n\tprops: {\n\t\tparams: {\n\t\t\ttype: Object as PropType<{\n\t\t\t\tvalue: EventParticipationState;\n\t\t\t}>,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tEventParticipationState,\n\t\t\tparticipationStateIcons,\n\t\t};\n\t},\n\tmethods: {},\n\tcomputed: {},\n\t//components: { Btn, Tooltip },\n});\n","import { render } from \"./EventParticipationStateRenderer.vue?vue&type=template&id=09a819d1&ts=true\"\nimport script from \"./EventParticipationStateRenderer.vue?vue&type=script&lang=ts\"\nexport * from \"./EventParticipationStateRenderer.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"span\", {\n class: _normalizeClass([\n\t\t\t_ctx.params.value == _ctx.ParticipationAssessmentProgress.PARTIALLY_ASSESSED\n\t\t\t\t? 'text-yellow-900'\n\t\t\t\t: 'text-success',\n\t\t\t'pt-3.5 ml-1 text-lg material-icons-outlined',\n\t\t])\n }, _toDisplayString(_ctx.assessmentStateIcons[_ctx.params.value][0]), 3))\n}","\nimport { ParticipationAssessmentProgress } from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport { icons as assessmentStateIcons } from \"@/assets/assessmentStateIcons\";\n\nexport default defineComponent({\n\tname: \"EventParticipationAssessmentStateRenderer\",\n\tprops: {\n\t\tparams: {\n\t\t\ttype: Object as PropType<{ value: ParticipationAssessmentProgress }>,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tParticipationAssessmentProgress,\n\t\t\tassessmentStateIcons,\n\t\t};\n\t},\n\tmethods: {},\n\tcomputed: {},\n});\n","import { render } from \"./EventParticipationAssessmentStateRenderer.vue?vue&type=template&id=060e0df2&ts=true\"\nimport script from \"./EventParticipationAssessmentStateRenderer.vue?vue&type=script&lang=ts\"\nexport * from \"./EventParticipationAssessmentStateRenderer.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex items-center h-full\" }\nconst _hoisted_2 = {\n class: \"m-auto\",\n style: {\"padding-bottom\":\"3px\",\"line-height\":\"1 !important\"}\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"p\", _hoisted_2, _toDisplayString(_ctx.params.value), 1)\n ]))\n}","\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\n\nexport default defineComponent({\n\tname: \"EventParticipationScoreRenderer\",\n\tprops: {\n\t\tparams: {\n\t\t\ttype: Object as PropType<{ value: number | string }>,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tmethods: {},\n\tcomputed: {},\n});\n","import { render } from \"./EventParticipationScoreRenderer.vue?vue&type=template&id=62a1e52d&ts=true\"\nimport script from \"./EventParticipationScoreRenderer.vue?vue&type=script&lang=ts\"\nexport * from \"./EventParticipationScoreRenderer.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nconst VISITED_INSIGHTS_TOUR_KEY = \"VISITED_INSIGHTS_TOUR_KEY\";\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport DataTable from \"@/components/ui/DataTable.vue\";\nimport { blockingDialogMixin, courseIdMixin, eventIdMixin, loadingMixin } from \"@/mixins\";\nimport {\n\tAssessmentVisibility,\n\tEvent,\n\tEventParticipation,\n\tEventParticipationSlot,\n\tEventParticipationSlotAssessment,\n\tEventParticipationState,\n\tEventState,\n\tEventTemplateRule,\n\tParticipationAssessmentProgress,\n\tUser,\n\tuserMatchesSearch,\n} from \"@/models\";\nimport { defineComponent } from \"@vue/runtime-core\";\n\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport { CellClickedEvent, ColDef, RowClassParams, RowNode } from \"ag-grid-community\";\nimport { icons as assessmentStateIcons } from \"@/assets/assessmentStateIcons\";\nimport { icons as participationStateIcons } from \"@/assets/participationStateIcons\";\nimport Dialog from \"@/components/ui/Dialog.vue\";\nimport AbstractEventParticipationSlot from \"@/components/shared/AbstractEventParticipationSlot.vue\";\nimport { DialogData } from \"@/interfaces\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport CsvParticipationDownloader from \"@/components/teacher/CsvParticipationDownloader.vue\";\nimport SkeletonCard from \"@/components/ui/SkeletonCard.vue\";\nimport {\n\texamInsightsPageTourSteps,\n\tgetEventParticipationMonitorHeaders,\n\ttourOptions,\n} from \"@/const\";\n\nimport Spinner from \"@/components/ui/Spinner.vue\";\nimport {\n\tareAllParticipationsFullyAssessed,\n\tgetParticipationsAverageProgress,\n} from \"@/reports\";\n\nimport EventParticipationSlotScoreRenderer from \"@/components/datatable/EventParticipationSlotScoreRenderer.vue\";\nimport EventParticipationSlotCompletionRenderer from \"@/components/datatable/EventParticipationSlotCompletionRenderer.vue\";\nimport EventParticipationEmailRenderer from \"@/components/datatable/EventParticipationEmailRenderer.vue\";\nimport EventParticipationStateRenderer from \"@/components/datatable/EventParticipationStateRenderer.vue\";\nimport EventParticipationAssessmentStateRenderer from \"@/components/datatable/EventParticipationAssessmentStateRenderer.vue\";\nimport EventParticipationScoreRenderer from \"@/components/datatable/EventParticipationScoreRenderer.vue\";\nimport { mapStores } from \"pinia\";\nimport { useMainStore } from \"@/stores/mainStore\";\nimport { useMetaStore } from \"@/stores/metaStore\";\nimport { setErrorNotification } from \"@/utils\";\nimport IntegrationSwitch from \"@/integrations/classroom/components/IntegrationSwitch.vue\";\nimport { GoogleClassroomCourseWorkTwin } from \"@/integrations/classroom/interfaces\";\nimport { useGoogleIntegrationsStore } from \"@/integrations/stores/googleIntegrationsStore\";\nimport TextInput from \"@/components/ui/TextInput.vue\";\nimport DropdownMenu from \"@/components/ui/DropdownMenu.vue\";\n\nexport default defineComponent({\n\tcomponents: {\n\t\tDataTable,\n\t\tDialog,\n\t\tAbstractEventParticipationSlot,\n\t\tBtn,\n\t\tCsvParticipationDownloader,\n\t\tSkeletonCard,\n\t\tSpinner,\n\t\t/** Cell renderers required by Ag-grid */\n\t\t// eslint-disable-next-line vue/no-unused-components\n\t\tEventParticipationSlotScoreRenderer,\n\t\t// eslint-disable-next-line vue/no-unused-components\n\t\tEventParticipationSlotCompletionRenderer,\n\t\t// eslint-disable-next-line vue/no-unused-components\n\t\tEventParticipationEmailRenderer,\n\t\t// eslint-disable-next-line vue/no-unused-components\n\t\tEventParticipationStateRenderer,\n\t\t// eslint-disable-next-line vue/no-unused-components\n\t\tEventParticipationAssessmentStateRenderer,\n\t\t// eslint-disable-next-line vue/no-unused-components\n\t\tEventParticipationScoreRenderer,\n\t\tIntegrationSwitch,\n\t\tTextInput,\n\t\tDropdownMenu,\n\t},\n\tname: \"EventParticipationsMonitor\",\n\tprops: {\n\t\trefreshData: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tallowEditParticipations: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tmixins: [courseIdMixin, eventIdMixin, loadingMixin, blockingDialogMixin],\n\tasync created() {\n\t\tawait this.withFirstLoading(async () => {\n\t\t\tawait this.mainStore.getEventParticipations({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\teventId: this.eventId,\n\t\t\t\tmutate: true,\n\t\t\t});\n\t\t\t// TODO gridApi could be null (doesn't really happen in production) - what did this line solve?\n\t\t\t//this.gridApi.refreshCells({ force: true });\n\t\t\tawait this.mainStore.getEvent({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\teventId: this.eventId,\n\t\t\t\tincludeDetails: false,\n\t\t\t});\n\t\t});\n\n\t\tif (this.resultsMode) {\n\t\t\tawait this.checkForCourseworkTwin();\n\t\t}\n\n\t\tif (this.resultsMode && !(VISITED_INSIGHTS_TOUR_KEY in localStorage)) {\n\t\t\tsetTimeout(() => (this.$tours as any)[\"examInsightsTour\"].start(), 200);\n\t\t\tlocalStorage.setItem(VISITED_INSIGHTS_TOUR_KEY, \"true\");\n\t\t}\n\n\t\tif (this.refreshData) {\n\t\t\t// TODO improve this to avoid repeated calls before the last one completes, and possibly adjusting for network speed\n\t\t\tthis.setDataRefreshInterval(10000);\n\t\t}\n\n\t\tconst runningSlotsCheckFn = () =>\n\t\t\tthis.mainStore.eventParticipations\n\t\t\t\t.flatMap(p => p.slots)\n\t\t\t\t.some(s => s.execution_results && s.execution_results.state === \"running\");\n\n\t\t// if the exam is closed but there are participation slots with\n\t\t// code still running, periodically refetch data until all slots\n\t\t// are settled down\n\t\tif (this.resultsMode && runningSlotsCheckFn()) {\n\t\t\tthis.setDataRefreshInterval(2000, () => {\n\t\t\t\tif (!runningSlotsCheckFn()) {\n\t\t\t\t\tclearInterval(this.refreshHandle as number);\n\t\t\t\t\tthis.refreshHandle = null;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t// setTimeout(() => this.columnApi.autoSizeAllColumns(false), 5000);\n\t},\n\n\tbeforeRouteLeave() {\n\t\tif (this.refreshHandle != null) {\n\t\t\tclearInterval(this.refreshHandle);\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\trefreshHandle: null as number | null,\n\t\t\tEventState,\n\t\t\teditingSlot: null as EventParticipationSlot | null,\n\t\t\teditingSlotDirty: null as EventParticipationSlot | null,\n\t\t\teditingFullName: \"\",\n\t\t\teditingParticipationId: \"\",\n\t\t\tgridApi: null as any,\n\t\t\tcolumnApi: null as any,\n\t\t\tselectedParticipationsIds: [] as string[],\n\t\t\tdispatchingCall: false,\n\t\t\tsearchText: \"\",\n\n\t\t\t// dialog functions\n\t\t\tshowAssessmentEditorDialog: false,\n\n\t\t\t// show banners\n\t\t\tshowThereAreUnpublishedResultsBanner: true,\n\t\t\tshowRestrictedModeBanner: true,\n\t\t\tshowThereArePendingAssessmentsBanner: true,\n\t\t\tshowAllAssessmentsPublishedBanner: true,\n\n\t\t\t//tour\n\t\t\ttourOptions,\n\t\t\texamInsightsPageTourSteps,\n\n\t\t\tEventParticipationState,\n\t\t\tparticipationStateIcons,\n\n\t\t\tgoogleClassroomCourseWorkTwin: null as null | GoogleClassroomCourseWorkTwin,\n\t\t\tpublishToClassroom: true,\n\t\t\tsortingOptionsExpanded: false,\n\n\t\t\tselectedSortingOption: 0,\n\t\t};\n\t},\n\tmethods: {\n\t\tareAllParticipationsFullyAssessed,\n\t\tasync checkForCourseworkTwin() {\n\t\t\tthis.googleClassroomCourseWorkTwin =\n\t\t\t\tawait this.googleIntegrationStore.getGoogleClassroomCourseWorkTwin(this.eventId);\n\t\t},\n\t\tsetDataRefreshInterval(interval: number, callback?: any) {\n\t\t\tthis.refreshHandle = setInterval(async () => {\n\t\t\t\tawait this.mainStore.getEventParticipations({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\teventId: this.eventId,\n\t\t\t\t\tmutate: true,\n\t\t\t\t});\n\t\t\t\tif (typeof callback === \"function\") {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}, interval);\n\t\t},\n\n\t\tonUpdateSlotAssessment(event: {\n\t\t\tslot: EventParticipationSlot;\n\t\t\tpayload: [keyof EventParticipationSlotAssessment, any];\n\t\t}) {\n\t\t\tif (this.editingSlotDirty) {\n\t\t\t\tthis.editingSlotDirty[event.payload[0]] = event.payload[1];\n\t\t\t}\n\t\t},\n\t\tisRowSelectable(row: RowNode) {\n\t\t\t/**\n\t\t\t * Used by ag grid to determine whether the row is selectable\n\t\t\t */\n\t\t\tif (this.resultsMode) {\n\t\t\t\treturn (\n\t\t\t\t\trow.data.state == ParticipationAssessmentProgress.FULLY_ASSESSED &&\n\t\t\t\t\trow.data.visibility != AssessmentVisibility.PUBLISHED\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\tgetRowId(data: any) {\n\t\t\treturn data.id;\n\t\t},\n\t\tgetRowClassRules() {\n\t\t\treturn {\n\t\t\t\t\"bg-success-important hover:bg-success-important\": (params: RowNode) =>\n\t\t\t\t\tthis.resultsMode && params.data.visibility === AssessmentVisibility.PUBLISHED,\n\t\t\t\t\"bg-danger-important hover:bg-danger-important\": (params: RowNode) =>\n\t\t\t\t\t!this.resultsMode &&\n\t\t\t\t\tthis.mainStore.getEventParticipationById(params.data.id)?.state ===\n\t\t\t\t\t\tEventParticipationState.CLOSED_BY_TEACHER,\n\t\t\t};\n\t\t},\n\t\tonSelectionChanged() {\n\t\t\t// copy the id's of the selected participations\n\t\t\tthis.selectedParticipationsIds = this.gridApi\n\t\t\t\t?.getSelectedNodes()\n\t\t\t\t.map((n: any) => n.data.id);\n\t\t},\n\t\tdeselectAllRows() {\n\t\t\tthis.gridApi.deselectAll();\n\t\t\tthis.selectedParticipationsIds = [];\n\t\t},\n\t\tasync onCellClicked(event: CellClickedEvent) {\n\t\t\tif (event.colDef.field?.startsWith(\"slot\") && this.resultsMode) {\n\t\t\t\tthis.onOpenAssessmentEditorDialog(event.data.id, event.value);\n\t\t\t}\n\t\t},\n\t\tasync onOpenAssessmentEditorDialog(\n\t\t\tparticipationId: string,\n\t\t\tslot: EventParticipationSlot,\n\t\t) {\n\t\t\tthis.editingSlot = slot;\n\t\t\tthis.editingParticipationId = participationId;\n\t\t\tthis.showAssessmentEditorDialog = true;\n\n\t\t\t// fetch slot that is being edited to have the full details\n\t\t\tawait this.withLocalLoading(\n\t\t\t\tasync () =>\n\t\t\t\t\tawait this.mainStore.getEventParticipationSlot({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\tslotId: (this.editingSlot as EventParticipationSlot).id,\n\t\t\t\t\t\tparticipationId,\n\t\t\t\t\t\teventId: this.eventId,\n\t\t\t\t\t}),\n\t\t\t);\n\t\t\t// deep copy slot to prevent affecting the original one while editing\n\t\t\tthis.editingSlotDirty = JSON.parse(JSON.stringify(this.editingSlot));\n\t\t\tthis.editingFullName = (\n\t\t\t\tthis.mainStore.getEventParticipationById(participationId) as EventParticipation\n\t\t\t).user.full_name;\n\t\t},\n\t\tasync dispatchAssessmentUpdate() {\n\t\t\tthis.dispatchingCall = true;\n\t\t\ttry {\n\t\t\t\tawait this.mainStore.partialUpdateEventParticipationSlot({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\teventId: this.eventId,\n\t\t\t\t\tparticipationId: this.editingParticipationId,\n\t\t\t\t\tslotId: (this.editingSlot as EventParticipationSlot).id,\n\t\t\t\t\tchanges: {\n\t\t\t\t\t\tscore: this.editingSlotDirty?.score,\n\t\t\t\t\t\tcomment: this.editingSlotDirty?.comment,\n\t\t\t\t\t},\n\t\t\t\t\tmutate: true,\n\t\t\t\t});\n\t\t\t\tawait this.mainStore.getEventParticipation({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\teventId: this.eventId,\n\t\t\t\t\tparticipationId: this.editingParticipationId,\n\t\t\t\t});\n\t\t\t\tthis.hideDialog();\n\t\t\t\tthis.metaStore.showSuccessFeedback();\n\t\t\t\tthis.gridApi.refreshCells({ force: true });\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t} finally {\n\t\t\t\tthis.dispatchingCall = false;\n\t\t\t}\n\t\t},\n\t\tasync onCloseExam() {\n\t\t\tconst dialogData: DialogData = {\n\t\t\t\ttitle: _(\"course_events.close_exam_for_everyone_title\"),\n\t\t\t\ttext:\n\t\t\t\t\t_(\"course_events.close_exam_for_everyone_body_1_alt\") +\n\t\t\t\t\t\" \" +\n\t\t\t\t\tthis.event.name +\n\t\t\t\t\t\" \" +\n\t\t\t\t\t_(\"course_events.close_exam_for_everyone_body_2\") +\n\t\t\t\t\t\"?\",\n\t\t\t\tyesText: _(\"course_events.close_for_everyone\"),\n\t\t\t\tnoText: _(\"dialog.default_cancel_text\"),\n\t\t\t};\n\t\t\tthis.blockingDialogData = dialogData;\n\n\t\t\tconst choice = await this.getBlockingBinaryDialogChoice();\n\n\t\t\tif (!choice) {\n\t\t\t\tthis.showBlockingDialog = false;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tawait this.withLoading(\n\t\t\t\tasync () =>\n\t\t\t\t\tawait this.mainStore.partialUpdateEvent({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\teventId: this.event.id,\n\t\t\t\t\t\tmutate: true,\n\t\t\t\t\t\tchanges: {\n\t\t\t\t\t\t\tstate: EventState.CLOSED,\n\t\t\t\t\t\t\tusers_allowed_past_closure: [],\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\tsetErrorNotification,\n\t\t\t\t() => this.metaStore.showSuccessFeedback(),\n\t\t\t);\n\t\t\tthis.showBlockingDialog = false;\n\t\t},\n\t\tasync onCloseSelectedExams() {\n\t\t\tconst applicableParticipationsIds = this.selectedParticipations\n\t\t\t\t.filter(p => this.bulkActions.close.applicable(p))\n\t\t\t\t.map(p => p.id);\n\n\t\t\tconst dialogData: DialogData = {\n\t\t\t\ttitle: _(\"event_monitor.close_for_selected\"),\n\t\t\t\tyesText:\n\t\t\t\t\t_(\"misc.close\") +\n\t\t\t\t\t\" \" +\n\t\t\t\t\tapplicableParticipationsIds.length +\n\t\t\t\t\t\" \" +\n\t\t\t\t\t_(\"misc.exam\", applicableParticipationsIds.length),\n\t\t\t\tnoText: _(\"dialog.default_cancel_text\"),\n\t\t\t\ttext:\n\t\t\t\t\t_(\"event_monitor.close_for_selected_text_1\") +\n\t\t\t\t\t\" \" +\n\t\t\t\t\tapplicableParticipationsIds.length +\n\t\t\t\t\t\" \" +\n\t\t\t\t\t_(\"misc.participant\", applicableParticipationsIds.length) +\n\t\t\t\t\t\".\",\n\t\t\t};\n\n\t\t\tthis.blockingDialogData = dialogData;\n\t\t\tconst choice = await this.getBlockingBinaryDialogChoice();\n\n\t\t\tif (!choice) {\n\t\t\t\tthis.showBlockingDialog = false;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tawait this.dispatchParticipationsUpdate(applicableParticipationsIds, {\n\t\t\t\tstate: EventParticipationState.CLOSED_BY_TEACHER,\n\t\t\t});\n\n\t\t\t// TODO extract\n\t\t\tif (this.resultsMode && !(VISITED_INSIGHTS_TOUR_KEY in localStorage)) {\n\t\t\t\tsetTimeout(() => (this.$tours as any)[\"examInsightsTour\"].start(), 1000);\n\t\t\t\tlocalStorage.setItem(VISITED_INSIGHTS_TOUR_KEY, \"true\");\n\t\t\t}\n\t\t},\n\t\tasync onOpenSelectedExams() {\n\t\t\tconst applicableParticipationsIds = this.selectedParticipations\n\t\t\t\t.filter(p => this.bulkActions.reOpen.applicable(p))\n\t\t\t\t.map(p => p.id);\n\n\t\t\tconst dialogData: DialogData = {\n\t\t\t\ttitle: _(\"event_monitor.open_for_selected\"),\n\t\t\t\tyesText:\n\t\t\t\t\t_(\"misc.reopen\") +\n\t\t\t\t\t\" \" +\n\t\t\t\t\tapplicableParticipationsIds.length +\n\t\t\t\t\t\" \" +\n\t\t\t\t\t_(\"misc.exam\", applicableParticipationsIds.length),\n\t\t\t\tnoText: _(\"dialog.default_cancel_text\"),\n\t\t\t\tonYes: this.openExams,\n\t\t\t\ttext:\n\t\t\t\t\t_(\"event_monitor.open_for_selected_text\") +\n\t\t\t\t\t\" \" +\n\t\t\t\t\tapplicableParticipationsIds.length +\n\t\t\t\t\t\" \" +\n\t\t\t\t\t_(\"misc.participant\", applicableParticipationsIds.length) +\n\t\t\t\t\t\".\",\n\t\t\t};\n\n\t\t\tthis.blockingDialogData = dialogData;\n\t\t\tconst choice = await this.getBlockingBinaryDialogChoice();\n\n\t\t\tif (!choice) {\n\t\t\t\tthis.showBlockingDialog = false;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tawait this.dispatchParticipationsUpdate(applicableParticipationsIds, {\n\t\t\t\tstate: EventParticipationState.IN_PROGRESS,\n\t\t\t});\n\t\t},\n\t\tasync dispatchParticipationsUpdate(\n\t\t\tparticipationIds: string[],\n\t\t\tchanges: Partial,\n\t\t\tfireIntegrationEvent?: boolean,\n\t\t) {\n\t\t\t/**\n\t\t\t * Generic method to update multiple participations\n\t\t\t * at once and show feedback/error\n\t\t\t */\n\t\t\tthis.dispatchingCall = true;\n\n\t\t\ttry {\n\t\t\t\tawait this.mainStore.bulkPartialUpdateEventParticipation({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\teventId: this.eventId,\n\t\t\t\t\tparticipationIds,\n\t\t\t\t\tchanges,\n\t\t\t\t\tfireIntegrationEvent,\n\t\t\t\t});\n\t\t\t\tthis.showBlockingDialog = false;\n\t\t\t\tthis.metaStore.showSuccessFeedback();\n\t\t\t\tthis.deselectAllRows();\n\t\t\t\tthis.gridApi.refreshCells({ force: true });\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t\tthrow e;\n\t\t\t} finally {\n\t\t\t\tthis.dispatchingCall = false;\n\t\t\t}\n\t\t},\n\t\tasync onPublishResults() {\n\t\t\tconst dialogData: DialogData = {\n\t\t\t\t//onYes: this.publishResults,\n\t\t\t\tyesText: _(\"event_results.publish\"),\n\t\t\t\tnoText: _(\"dialog.default_cancel_text\"),\n\t\t\t\ttext: _(\"event_results.publish_confirm_text\"),\n\t\t\t};\n\n\t\t\tthis.blockingDialogData = dialogData;\n\t\t\tconst choice = await this.getBlockingBinaryDialogChoice();\n\n\t\t\tif (!choice) {\n\t\t\t\tthis.showBlockingDialog = false;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// TODO handle blocking dialog\n\t\t\ttry {\n\t\t\t\tawait this.dispatchParticipationsUpdate(\n\t\t\t\t\t// TODO if you select all you might mistakenly publish results for unassessed participations\n\t\t\t\t\tthis.selectedParticipationsIds,\n\t\t\t\t\t{\n\t\t\t\t\t\tvisibility: AssessmentVisibility.PUBLISHED,\n\t\t\t\t\t},\n\t\t\t\t\tthis.publishToClassroom,\n\t\t\t\t);\n\t\t\t} catch {\n\t\t\t\t// ! this is a hack to make the dialog keep working - without this it wouldn't work because the promise has already been resolved\n\t\t\t\tawait this.onPublishResults();\n\t\t\t}\n\t\t},\n\t\tasync onUndoParticipationTurnIn() {\n\t\t\tconst applicableParticipationsIds = this.selectedParticipations\n\t\t\t\t.filter(p => this.bulkActions.undoTurnIn.applicable(p))\n\t\t\t\t.map(p => p.id);\n\t\t\tconst dialogData: DialogData = {\n\t\t\t\ttitle: \"\",\n\t\t\t\ttext:\n\t\t\t\t\t_(\"event_monitor.un_turn_in_text\", applicableParticipationsIds.length) +\n\t\t\t\t\t(this.event.exercises_shown_at_a_time === 1\n\t\t\t\t\t\t? \" \" +\n\t\t\t\t\t\t _(\n\t\t\t\t\t\t\t\t\"event_monitor.student_will_be_brought_back_to_first_slot\",\n\t\t\t\t\t\t\t\tapplicableParticipationsIds.length,\n\t\t\t\t\t\t )\n\t\t\t\t\t\t: \"\"),\n\t\t\t\twarning: false,\n\t\t\t\tnoText: _(\"dialog.default_no_text\"),\n\t\t\t\tyesText: _(\"dialog.default_yes_text\"),\n\t\t\t};\n\n\t\t\tthis.blockingDialogData = dialogData;\n\t\t\tconst choice = await this.getBlockingBinaryDialogChoice();\n\n\t\t\tif (!choice) {\n\t\t\t\tthis.showBlockingDialog = false;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tawait this.dispatchParticipationsUpdate(applicableParticipationsIds, {\n\t\t\t\tstate: EventParticipationState.IN_PROGRESS,\n\t\t\t\tcurrent_slot_cursor: 0,\n\t\t\t});\n\t\t},\n\t\tasync onSyncGradesWithClassroom() {\n\t\t\tconst dialogData: DialogData = {\n\t\t\t\ttitle: _(\"integrations.classroom.sync_grades_with_classroom\"),\n\t\t\t\ttext: _(\"integrations.classroom.sync_grades_with_classroom_description\"),\n\t\t\t\twarning: false,\n\t\t\t\tnoText: _(\"dialog.default_cancel_text\"),\n\t\t\t\tyesText: _(\"integrations.classroom.sync\"),\n\t\t\t};\n\n\t\t\tthis.blockingDialogData = dialogData;\n\t\t\tconst choice = await this.getBlockingBinaryDialogChoice();\n\n\t\t\tif (!choice) {\n\t\t\t\tthis.showBlockingDialog = false;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tthis.dispatchingCall = true;\n\t\t\t\tawait this.googleIntegrationStore.syncExamGrades(this.eventId);\n\t\t\t\tthis.showBlockingDialog = false;\n\t\t\t\tthis.metaStore.showSuccessFeedback();\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t} finally {\n\t\t\t\tthis.dispatchingCall = false;\n\t\t\t}\n\t\t},\n\n\t\tsetSortingOption(index: number) {\n\t\t\tthis.selectedSortingOption = index;\n\t\t\tthis.sortingOptionsExpanded = false;\n\t\t},\n\n\t\thideDialog() {\n\t\t\tthis.editingSlot = null;\n\t\t\tthis.editingSlotDirty = null;\n\t\t\tthis.editingFullName = \"\";\n\t\t\tthis.editingParticipationId = \"\";\n\t\t\tthis.selectedParticipationsIds = [];\n\t\t\tthis.showAssessmentEditorDialog = false;\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore, useMetaStore, useGoogleIntegrationsStore),\n\t\tselectedParticipations() {\n\t\t\treturn this.mainStore.eventParticipations.filter(p =>\n\t\t\t\tthis.selectedParticipationsIds.includes(p.id),\n\t\t\t);\n\t\t},\n\t\tsortingOptions() {\n\t\t\tconst options: {\n\t\t\t\tlabel: string;\n\t\t\t\tsortFn: (p1: EventParticipation, p2: EventParticipation) => number;\n\t\t\t}[] = [\n\t\t\t\t{\n\t\t\t\t\tlabel: _(\"event_monitor.sort_options.alphabetical\"),\n\t\t\t\t\tsortFn: (p1, p2) => {\n\t\t\t\t\t\tconst lastName1 = p1.user.last_name;\n\t\t\t\t\t\tconst lastName2 = p2.user.last_name;\n\t\t\t\t\t\tconsole.log({ lastName1, lastName2 });\n\t\t\t\t\t\tif (lastName1 > lastName2) {\n\t\t\t\t\t\t\treturn 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (lastName1 < lastName2) {\n\t\t\t\t\t\t\treturn -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: _(\"event_monitor.sort_options.alphabetical_reverse\"),\n\t\t\t\t\tsortFn: (p1, p2) => {\n\t\t\t\t\t\tconst lastName1 = p1.user.last_name;\n\t\t\t\t\t\tconst lastName2 = p2.user.last_name;\n\t\t\t\t\t\tif (lastName1 > lastName2) {\n\t\t\t\t\t\t\treturn -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (lastName1 < lastName2) {\n\t\t\t\t\t\t\treturn 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: _(\"event_monitor.sort_options.begin_timestamp\"),\n\t\t\t\t\tsortFn: (p1, p2) => {\n\t\t\t\t\t\tconst begin1 = p1.begin_timestamp;\n\t\t\t\t\t\tconst begin2 = p2.begin_timestamp;\n\t\t\t\t\t\treturn new Date(begin1).getTime() - new Date(begin2).getTime();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: _(\"event_monitor.sort_options.begin_timestamp_reverse\"),\n\t\t\t\t\tsortFn: (p1, p2) => {\n\t\t\t\t\t\tconst begin1 = p1.begin_timestamp;\n\t\t\t\t\t\tconst begin2 = p2.begin_timestamp;\n\t\t\t\t\t\treturn new Date(begin2).getTime() - new Date(begin1).getTime();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t// { label: _(\"event_monitor.sort_options.progress\") },\n\t\t\t\t// { label: _(\"event_monitor.sort_options.progress_inverse\") },\n\t\t\t];\n\t\t\treturn options;\n\t\t},\n\t\tbulkActions() {\n\t\t\tconst actions = {\n\t\t\t\tundoTurnIn: {\n\t\t\t\t\tapplicable: (p: EventParticipation) =>\n\t\t\t\t\t\tp.state === EventParticipationState.TURNED_IN,\n\t\t\t\t\tmethod: this.onUndoParticipationTurnIn,\n\t\t\t\t\tlabel: _(\"event_monitor.undo_turn_in\"),\n\t\t\t\t},\n\t\t\t\tclose: {\n\t\t\t\t\tapplicable: (p: EventParticipation) =>\n\t\t\t\t\t\tp.state === EventParticipationState.IN_PROGRESS,\n\t\t\t\t\tmethod: this.onCloseSelectedExams,\n\t\t\t\t\tlabel: _(\"event_monitor.close_for_selected\"),\n\t\t\t\t},\n\t\t\t\treOpen: {\n\t\t\t\t\tapplicable: (p: EventParticipation) =>\n\t\t\t\t\t\tp.state === EventParticipationState.CLOSED_BY_TEACHER,\n\t\t\t\t\tmethod: this.onOpenSelectedExams,\n\t\t\t\t\tlabel: _(\"event_monitor.reopen_for_selected\"),\n\t\t\t\t},\n\t\t\t};\n\n\t\t\treturn actions;\n\t\t},\n\t\tshowClassroomIntegrationSwitch() {\n\t\t\t// TODO refactor\n\t\t\treturn (\n\t\t\t\tthis.googleClassroomCourseWorkTwin !== null &&\n\t\t\t\t(this.blockingDialogData?.text ?? \"\") === _(\"event_results.publish_confirm_text\")\n\t\t\t);\n\t\t},\n\t\tdialogData(): DialogData {\n\t\t\tlet ret = {} as DialogData;\n\t\t\tconst defaultData = {\n\t\t\t\tonNo: this.hideDialog,\n\t\t\t\tnoText: _(\"dialog.default_cancel_text\"),\n\t\t\t} as DialogData;\n\n\t\t\t// TODO handle this\n\t\t\tif (this.dispatchingCall) {\n\t\t\t\tret.disableOk = true;\n\t\t\t\tret.yesText = _(\"misc.wait\");\n\t\t\t}\n\n\t\t\treturn { ...defaultData, ...ret };\n\t\t},\n\t\tevent() {\n\t\t\treturn this.mainStore.getEventById(this.eventId);\n\t\t},\n\t\tresultsMode() {\n\t\t\treturn this.event.state === EventState.CLOSED;\n\t\t},\n\t\tparticipantCount() {\n\t\t\treturn this.mainStore.eventParticipations.length;\n\t\t},\n\t\tturnedInCount() {\n\t\t\treturn this.mainStore.eventParticipations.filter(\n\t\t\t\t(p: EventParticipation) => p.state === EventParticipationState.TURNED_IN,\n\t\t\t).length;\n\t\t},\n\t\taverageProgress() {\n\t\t\treturn getParticipationsAverageProgress(\n\t\t\t\tthis.mainStore.eventParticipations,\n\t\t\t\tthis.event,\n\t\t\t);\n\t\t},\n\t\tthereAreUnpublishedAssessments() {\n\t\t\treturn this.mainStore.eventParticipations.some(\n\t\t\t\tp => p.visibility != AssessmentVisibility.PUBLISHED,\n\t\t\t);\n\t\t},\n\t\tparticipationPreviewColumns() {\n\t\t\treturn getEventParticipationMonitorHeaders(\n\t\t\t\tthis.resultsMode,\n\t\t\t\tthis.mainStore.eventParticipations,\n\t\t\t);\n\t\t},\n\t\tfilteredParticipationsData() {\n\t\t\tconst data = this.participationsData as any as EventParticipation[]; // TODO refactor\n\t\t\treturn data\n\t\t\t\t.filter(d => userMatchesSearch(this.searchText, d.user))\n\t\t\t\t.sort(this.sortingOptions[this.selectedSortingOption].sortFn);\n\t\t},\n\t\tparticipationsData() {\n\t\t\treturn this.mainStore.eventParticipations.map((p: EventParticipation) => {\n\t\t\t\tconst ret = {\n\t\t\t\t\tid: p.id,\n\t\t\t\t\temail: p.user?.email,\n\t\t\t\t\tmat: p.user?.mat,\n\t\t\t\t\tcurrentSlotCursor: p.current_slot_cursor,\n\t\t\t\t\tcourse: p.user?.course,\n\t\t\t\t\tfullName: p.user?.full_name,\n\t\t\t\t\tstate: this.resultsMode ? p.assessment_progress : p.state,\n\t\t\t\t\tvisibility: p.visibility,\n\t\t\t\t\tscore: p.score ?? \"\",\n\t\t\t\t\tuser: p.user,\n\t\t\t\t\tbegin_timestamp: p.begin_timestamp,\n\t\t\t\t} as Record;\n\t\t\t\tp.slots.forEach(\n\t\t\t\t\ts => (ret[\"slot-\" + ((s.slot_number as number) + 1)] = s), //s.score ?? '-')\n\t\t\t\t);\n\t\t\t\treturn ret;\n\t\t\t});\n\t\t},\n\t},\n});\n","import { render } from \"./EventParticipationsMonitor.vue?vue&type=template&id=0c3e04fc&ts=true\"\nimport script from \"./EventParticipationsMonitor.vue?vue&type=script&lang=ts\"\nexport * from \"./EventParticipationsMonitor.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, resolveComponent as _resolveComponent, createVNode as _createVNode, vShow as _vShow, withDirectives as _withDirectives, createBlock as _createBlock, withCtx as _withCtx, TransitionGroup as _TransitionGroup } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-muted\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"banner banner-light my-4\"\n}\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined icon-light\" }, \" info \", -1)\nconst _hoisted_4 = { key: 1 }\nconst _hoisted_5 = { key: 2 }\nconst _hoisted_6 = {\n key: 2,\n class: \"flex-col flex space-y-4 mt-4\"\n}\nconst _hoisted_7 = {\n key: 3,\n class: \"flex flex-col w-full mt-12 mb-12 text-center select-none\"\n}\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"p\", {\n style: {\"font-size\":\"10rem\"},\n class: \"material-icons-outlined opacity-10\"\n}, \"inventory\", -1)\nconst _hoisted_9 = { class: \"opacity-40\" }\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-full h-1 bg-gray-200 rounded-md\" }, null, -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_FullExercise = _resolveComponent(\"FullExercise\")!\n const _component_ExerciseSolutionContainer = _resolveComponent(\"ExerciseSolutionContainer\")!\n const _component_SlotSkeleton = _resolveComponent(\"SlotSkeleton\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_MinimalExercisePreviewSkeleton = _resolveComponent(\"MinimalExercisePreviewSkeleton\")!\n const _component_ExerciseEditorWrapperSkeleton = _resolveComponent(\"ExerciseEditorWrapperSkeleton\")!\n const _component_Spinner = _resolveComponent(\"Spinner\")!\n const _component_VueEternalLoading = _resolveComponent(\"VueEternalLoading\")!\n\n return (_openBlock(), _createElementBlock(\"div\", null, [\n _createElementVNode(\"p\", _hoisted_1, _toDisplayString(_ctx.$t(\"exercise_solution_thread.teacher_description\")), 1),\n (_ctx.remainingCount > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _hoisted_3,\n _createElementVNode(\"p\", null, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"exercise_solution.there_are_pending_solutions_1\")) + \" \", 1),\n _createElementVNode(\"strong\", null, _toDisplayString(_ctx.remainingCount), 1),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t(\"exercise_solution.there_are_pending_solutions_2\")), 1)\n ])\n ]))\n : _createCommentVNode(\"\", true),\n (!_ctx.firstLoading)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createVNode(_TransitionGroup, { name: \"quick-bounce\" }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.processedExercises, ({ exercise, highlightedSolutionIds }) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"my-8\",\n key: 'thread-e-' + exercise.id\n }, [\n _createElementVNode(\"h4\", null, _toDisplayString(_ctx.getExerciseTitle(exercise)), 1),\n _createVNode(_component_FullExercise, { exercise: exercise }, null, 8, [\"exercise\"]),\n (!_ctx.loadingSolutionsByExercise[exercise.id])\n ? _withDirectives((_openBlock(), _createBlock(_component_ExerciseSolutionContainer, {\n key: 0,\n class: \"\",\n showTitle: false,\n allowAddSolution: false,\n showTeacherControls: true,\n exercise: exercise,\n solutions: _ctx.getSolutionsForExercise(exercise),\n showFirst: highlightedSolutionIds,\n canLoadMore: \n\t\t\t\t\t\t\t!(_ctx.mainStore.paginatedSolutionsByExerciseId[exercise.id]?.isLastPage ?? true)\n\t\t\t\t\t\t,\n onLoadMore: ($event: any) => (_ctx.loadMore(exercise))\n }, null, 8, [\"exercise\", \"solutions\", \"showFirst\", \"canLoadMore\", \"onLoadMore\"])), [\n [_vShow, _ctx.showSolutionsByExercise[exercise.id]]\n ])\n : (_openBlock(), _createBlock(_component_SlotSkeleton, {\n key: 1,\n class: \"mt-4\"\n })),\n (\n\t\t\t\t\t\t\t!_ctx.loadingSolutionsByExercise[exercise.id] &&\n\t\t\t\t\t\t\t!_ctx.showSolutionsByExercise[exercise.id]\n\t\t\t\t\t\t)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createVNode(_component_Btn, {\n onClick: ($event: any) => (_ctx.showSolutionsByExercise[exercise.id] = true),\n size: 'sm',\n class: \"mt-2 -ml-4\",\n variant: 'primary-borderless'\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"exercise_solution.reveal_solutions_1\")) + \" \" + _toDisplayString(_ctx.getSolutionCountForExercise(exercise)) + \" \" + _toDisplayString(_ctx.getSolutionCountForExercise(exercise) === 1\n\t\t\t\t\t\t\t\t\t? _ctx.$t(\"exercise_solution.reveal_solutions_2_singular\")\n\t\t\t\t\t\t\t\t\t: _ctx.$t(\"exercise_solution.reveal_solutions_2_plural\")), 1)\n ]),\n _: 2\n }, 1032, [\"onClick\"])\n ]))\n : _createCommentVNode(\"\", true),\n false\n ? (_openBlock(), _createBlock(_component_MinimalExercisePreviewSkeleton, { key: 3 }))\n : _createCommentVNode(\"\", true)\n ]))\n }), 128))\n ]),\n _: 1\n })\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _createVNode(_component_ExerciseEditorWrapperSkeleton),\n _createVNode(_component_ExerciseEditorWrapperSkeleton),\n _createVNode(_component_ExerciseEditorWrapperSkeleton),\n _createVNode(_component_ExerciseEditorWrapperSkeleton)\n ])),\n (!_ctx.firstLoading && _ctx.mainStore.exercises.length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [\n _hoisted_8,\n _createElementVNode(\"h2\", _hoisted_9, _toDisplayString(_ctx.$t(\"exercise_solution.no_solutions_to_review\")), 1)\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_VueEternalLoading, {\n load: _ctx.onLoadMore,\n \"is-initial\": _ctx.isInitialInfiniteLoad,\n \"onUpdate:is-initial\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.isInitialInfiniteLoad) = $event))\n }, {\n loading: _withCtx(() => [\n _createVNode(_component_Spinner)\n ]),\n \"no-more\": _withCtx(() => [\n _hoisted_10\n ]),\n _: 1\n }, 8, [\"load\", \"is-initial\"])\n ]))\n}","\nimport { courseIdMixin, loadingMixin } from \"@/mixins\";\nimport { Exercise, ExerciseSolution, ExerciseSolutionState } from \"@/models\";\nimport { defineComponent } from \"@vue/runtime-core\";\nimport ExerciseSolutionContainer from \"@/components/shared/ExerciseSolution/ExerciseSolutionContainer.vue\";\nimport { getTranslatedString as _ } from \"@/i18n\";\n\nimport { VueEternalLoading, LoadAction } from \"@ts-pro/vue-eternal-loading\";\nimport Spinner from \"@/components/ui/Spinner.vue\";\nimport ExerciseEditorWrapperSkeleton from \"@/components/ui/skeletons/ExerciseEditorWrapperSkeleton.vue\";\nimport { ExerciseSearchFilter, ExerciseSolutionSearchFilter } from \"@/api/interfaces\";\nimport MinimalExercisePreviewSkeleton from \"@/components/ui/skeletons/MinimalExercisePreviewSkeleton.vue\";\nimport SlotSkeleton from \"@/components/ui/skeletons/SlotSkeleton.vue\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport FullExercise from \"@/components/shared/FullExercise.vue\";\nimport { logAnalyticsEvent, setErrorNotification } from \"@/utils\";\nimport { mapStores } from \"pinia\";\nimport { useMainStore } from \"@/stores/mainStore\";\nexport default defineComponent({\n\tname: \"CourseExerciseSolutionThreads\",\n\tmixins: [loadingMixin, courseIdMixin],\n\tprops: {},\n\tasync created() {\n\t\tthis.withFirstLoading(async () => {\n\t\t\tawait this.mainStore.getExercises({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\tfromFirstPage: true,\n\t\t\t\tfilters: { with_submitted_solutions: true } as ExerciseSearchFilter,\n\t\t\t});\n\t\t\tthis.fetchSolutionsForNewExercises();\n\t\t\tlogAnalyticsEvent(\"viewedCourseExerciseSolutions\", { courseId: this.courseId });\n\t\t});\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tisInitialInfiniteLoad: false,\n\t\t\tloadingSolutionsByExercise: {} as Record,\n\t\t\tshowSolutionsByExercise: {} as Record,\n\t\t};\n\t},\n\tmethods: {\n\t\tgetSolutionsForExercise(exercise: Exercise): ExerciseSolution[] {\n\t\t\treturn this.mainStore.getPaginatedSolutionsByExerciseId(exercise.id).data;\n\t\t},\n\t\tgetSolutionCountForExercise(exercise: Exercise): number {\n\t\t\treturn this.mainStore.paginatedSolutionsByExerciseId[exercise.id]?.count ?? 0;\n\t\t},\n\t\tasync loadMore(exercise: Exercise) {\n\t\t\tawait this.withLoading(\n\t\t\t\tasync () =>\n\t\t\t\t\tawait this.mainStore.getSolutionsByExercise({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\texerciseId: exercise.id,\n\t\t\t\t\t\tfromFirstPage: false,\n\t\t\t\t\t\tfilter: {\n\t\t\t\t\t\t\tstates: [ExerciseSolutionState.SUBMITTED],\n\t\t\t\t\t\t} as ExerciseSolutionSearchFilter,\n\t\t\t\t\t}),\n\t\t\t);\n\t\t},\n\t\tgetExerciseTitle(exercise: Exercise): string {\n\t\t\treturn (exercise?.label ?? \"\").trim().length > 0\n\t\t\t\t? (exercise.label as string)\n\t\t\t\t: _(\"exercise_preview.unnamed_exercise\");\n\t\t},\n\t\tfetchSolutionsForNewExercises() {\n\t\t\tthis.mainStore.exercises\n\t\t\t\t.filter(\n\t\t\t\t\te => typeof this.mainStore.paginatedSolutionsByExerciseId[e.id] === \"undefined\",\n\t\t\t\t)\n\t\t\t\t.forEach(async e => {\n\t\t\t\t\tthis.loadingSolutionsByExercise[e.id] = true;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.mainStore.getSolutionsByExercise({\n\t\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\t\texerciseId: e.id,\n\t\t\t\t\t\t\tfromFirstPage: true,\n\t\t\t\t\t\t\tfilter: {\n\t\t\t\t\t\t\t\tstates: [ExerciseSolutionState.SUBMITTED],\n\t\t\t\t\t\t\t} as ExerciseSolutionSearchFilter,\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tsetErrorNotification(e);\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tthis.loadingSolutionsByExercise[e.id] = false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t},\n\t\tasync onLoadMore({ loaded, noMore, error }: LoadAction) {\n\t\t\ttry {\n\t\t\t\tconst moreResults = await this.mainStore.getExercises({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\tfromFirstPage: false,\n\t\t\t\t\tfilters: { with_submitted_solutions: true } as ExerciseSearchFilter,\n\t\t\t\t});\n\t\t\t\tif (!moreResults) {\n\t\t\t\t\tnoMore();\n\t\t\t\t} else {\n\t\t\t\t\tloaded();\n\t\t\t\t}\n\t\t\t\tthis.fetchSolutionsForNewExercises();\n\t\t\t} catch {\n\t\t\t\terror();\n\t\t\t}\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore),\n\t\tprocessedExercises(): {\n\t\t\texercise: Exercise;\n\t\t\thighlightedSolutionIds: string[];\n\t\t}[] {\n\t\t\t// TODO return exercises with the most important solutions shown\n\t\t\treturn this.mainStore.exercises.map((exercise: Exercise) => ({\n\t\t\t\texercise,\n\t\t\t\thighlightedSolutionIds: [],\n\t\t\t}));\n\t\t},\n\t\tremainingCount() {\n\t\t\treturn this.mainStore.paginatedExercises.count;\n\t\t},\n\t},\n\tcomponents: {\n\t\tExerciseSolutionContainer,\n\t\t//AbstractEventParticipationSlot,\n\t\tVueEternalLoading,\n\t\tSpinner,\n\t\tExerciseEditorWrapperSkeleton,\n\t\tMinimalExercisePreviewSkeleton,\n\t\tSlotSkeleton,\n\t\tBtn,\n\t\tFullExercise,\n\t},\n});\n","import { render } from \"./CourseExerciseSolutionThreads.vue?vue&type=template&id=0b3dca18&ts=true\"\nimport script from \"./CourseExerciseSolutionThreads.vue?vue&type=script&lang=ts\"\nexport * from \"./CourseExerciseSolutionThreads.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = { key: 0 }\nconst _hoisted_2 = { key: 1 }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_MinimalExercisePreviewSkeleton = _resolveComponent(\"MinimalExercisePreviewSkeleton\")!\n const _component_FullExercise = _resolveComponent(\"FullExercise\")!\n const _component_ExerciseSolutionContainer = _resolveComponent(\"ExerciseSolutionContainer\")!\n\n return (_openBlock(), _createElementBlock(\"div\", null, [\n (_ctx.firstLoading)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_MinimalExercisePreviewSkeleton)\n ]))\n : (_ctx.exercise)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createVNode(_component_FullExercise, { exercise: _ctx.exercise }, null, 8, [\"exercise\"]),\n _createVNode(_component_ExerciseSolutionContainer, {\n exercise: _ctx.exercise,\n solutions: _ctx.exerciseSolutions,\n showFirst: _ctx.solutionId ? [_ctx.solutionId] : [],\n forceShowAll: true,\n showTeacherControls: true,\n allowAddSolution: false,\n showTitle: false,\n canLoadMore: !_ctx.exercisePaginatedSolutions.isLastPage,\n onLoadMore: _cache[0] || (_cache[0] = ($event: any) => (_ctx.loadMore()))\n }, null, 8, [\"exercise\", \"solutions\", \"showFirst\", \"canLoadMore\"])\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}","\nimport { ExerciseSolution } from \"@/models\";\nimport { defineComponent } from \"@vue/runtime-core\";\nimport ExerciseSolutionContainer from \"@/components/shared/ExerciseSolution/ExerciseSolutionContainer.vue\";\nimport { courseIdMixin, loadingMixin } from \"@/mixins\";\nimport MinimalExercisePreviewSkeleton from \"@/components/ui/skeletons/MinimalExercisePreviewSkeleton.vue\";\nimport { PaginatedData } from \"@/api\";\nimport { mapStores } from \"pinia\";\nimport { useMainStore } from \"@/stores/mainStore\";\nexport default defineComponent({\n\tname: \"DetailExerciseSolutionThreads\",\n\tprops: {},\n\tmixins: [courseIdMixin, loadingMixin],\n\tasync created() {\n\t\tawait this.withFirstLoading(async () => {\n\t\t\tawait this.mainStore.getExercisesById({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\texerciseIds: [this.exerciseId],\n\t\t\t\treplace: true,\n\t\t\t});\n\t\t\tawait this.mainStore.getSolutionsByExercise({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\texerciseId: this.exerciseId,\n\t\t\t\tfromFirstPage: true,\n\t\t\t\tfilter: null,\n\t\t\t});\n\t\t});\n\t},\n\tmethods: {\n\t\tasync loadMore() {\n\t\t\tawait this.withLoading(\n\t\t\t\tasync () =>\n\t\t\t\t\tawait this.mainStore.getSolutionsByExercise({\n\t\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\t\texerciseId: this.exerciseId,\n\t\t\t\t\t\tfromFirstPage: false,\n\t\t\t\t\t\tfilter: null,\n\t\t\t\t\t}),\n\t\t\t);\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore),\n\t\texercise() {\n\t\t\treturn this.mainStore.exercises.find(e => e.id == this.exerciseId);\n\t\t},\n\t\texercisePaginatedSolutions(): PaginatedData {\n\t\t\treturn this.mainStore.getPaginatedSolutionsByExerciseId(this.exerciseId);\n\t\t},\n\t\texerciseSolutions(): ExerciseSolution[] {\n\t\t\treturn this.exercisePaginatedSolutions.data;\n\t\t},\n\t\texerciseId() {\n\t\t\treturn this.$route.params.exerciseId as string;\n\t\t},\n\t\tsolutionId() {\n\t\t\treturn this.$route.params.solutionId;\n\t\t},\n\t},\n\tcomponents: {\n\t\tExerciseSolutionContainer,\n\t\tMinimalExercisePreviewSkeleton,\n\t},\n});\n","import { render } from \"./DetailExerciseSolutionThreads.vue?vue&type=template&id=06f36b8e&ts=true\"\nimport script from \"./DetailExerciseSolutionThreads.vue?vue&type=script&lang=ts\"\nexport * from \"./DetailExerciseSolutionThreads.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, resolveComponent as _resolveComponent, createVNode as _createVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"\"\n}\nconst _hoisted_2 = {\n key: 0,\n class: \"flex flex-col h-full\"\n}\nconst _hoisted_3 = { class: \"\" }\nconst _hoisted_4 = {\n style: {\"width\":\"34px\",\"height\":\"34px\"},\n class: \"relative\"\n}\nconst _hoisted_5 = {\n key: 0,\n style: {\"width\":\"34px\",\"height\":\"34px\"},\n viewBox: \"0 0 24 24\"\n}\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M5 16L3 5L8.5 10L12 4L15.5 10L21 5L19 16H5M19 19C19 19.6 18.6 20 18 20H6C5.4 20 5 19.6 5 19V18H19V19Z\"\n}, null, -1)\nconst _hoisted_7 = [\n _hoisted_6\n]\nconst _hoisted_8 = { class: \"text-lg mr-4\" }\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"p\", { class: \"ml-auto material-icons text-primary text-base mr-1\" }, \"auto_awesome\", -1)\nconst _hoisted_10 = { class: \"font-semibold\" }\nconst _hoisted_11 = {\n key: 0,\n class: \"flex items-center space-x-1 mt-4 flex-wrap\"\n}\nconst _hoisted_12 = {\n key: 1,\n class: \"opacity-60 text-primary-light font-medium text-lg px-1\"\n}\nconst _hoisted_13 = {\n key: 1,\n class: \"flex flex-col items-center w-full mx-auto mt-32\"\n}\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"p\", {\n style: {\"font-size\":\"10rem\"},\n class: \"material-icons-outlined opacity-10\"\n}, \" leaderboard \", -1)\nconst _hoisted_15 = { class: \"opacity-40\" }\nconst _hoisted_16 = { key: 1 }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Avatar = _resolveComponent(\"Avatar\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_SlotSkeleton = _resolveComponent(\"SlotSkeleton\")!\n\n return (!_ctx.firstLoading)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n ((_ctx.paginatedUsers?.count ?? 0) > 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.paginatedUsers?.data, (user, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([{ 'bg-gray-50': index % 2, 'opacity-60': _ctx.loading }, \"py-3 px-3 w-full flex items-center h-full\"]),\n key: 'leaderboard-user-' + index\n }, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"mr-2\", {\n\t\t\t\t\t\t\t'text-yellow-400': _ctx.pageNumber === 1 && index === 0,\n\t\t\t\t\t\t\t'text-gray-400': _ctx.pageNumber === 1 && index === 1,\n\t\t\t\t\t\t\t'text-bronze': _ctx.pageNumber === 1 && index === 2,\n\t\t\t\t\t\t\t'opacity-0': _ctx.loading,\n\t\t\t\t\t\t}])\n }, [\n _createElementVNode(\"div\", _hoisted_4, [\n (_ctx.pageNumber === 1 && index < 3)\n ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_5, _hoisted_7))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"p\", {\n class: _normalizeClass([{\n\t\t\t\t\t\t\t\t\t'font-medium opacity-90 text-sm drop-shadow-lg filter':\n\t\t\t\t\t\t\t\t\t\t_ctx.pageNumber === 1 && index < 3,\n\t\t\t\t\t\t\t\t\t'text-yellow-800': _ctx.pageNumber === 1 && index === 0,\n\t\t\t\t\t\t\t\t\t'text-gray-900': _ctx.pageNumber === 1 && index === 1,\n\t\t\t\t\t\t\t\t\t'text-yellow-900': _ctx.pageNumber === 1 && index === 2,\n\t\t\t\t\t\t\t\t}, \"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 transform text-muted opacity-50\"])\n }, _toDisplayString(_ctx.getUserPosition(user.id)), 3)\n ])\n ], 2),\n _createVNode(_component_Avatar, {\n size: 'lg',\n class: \"mr-4 ml-4\",\n user: user\n }, null, 8, [\"user\"]),\n _createElementVNode(\"p\", _hoisted_8, _toDisplayString(user.full_name), 1),\n _hoisted_9,\n _createElementVNode(\"p\", _hoisted_10, _toDisplayString(user.reputation), 1)\n ], 2))\n }), 128))\n ]),\n (_ctx.lastPageNumber > 1)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.pageNumbers, (page) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: 'page-btn-' + page\n }, [\n (page !== _ctx.pageNumber)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 0,\n size: 'xs',\n onClick: ($event: any) => (_ctx.pageNumber = page),\n variant: 'primary-borderless'\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(page), 1)\n ]),\n _: 2\n }, 1032, [\"onClick\"]))\n : (_openBlock(), _createElementBlock(\"p\", _hoisted_12, _toDisplayString(page), 1))\n ]))\n }), 128))\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [\n _hoisted_14,\n _createElementVNode(\"h2\", _hoisted_15, _toDisplayString(_ctx.$t(\"gamification.no_leaderboard\")), 1)\n ]))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_16, [\n _createVNode(_component_SlotSkeleton),\n _createVNode(_component_SlotSkeleton),\n _createVNode(_component_SlotSkeleton)\n ]))\n}","\n// TODO test this component after migrating to pinia\nimport { getCourseLeaderboard, PaginatedData } from \"@/api\";\nimport { courseIdMixin, loadingMixin } from \"@/mixins\";\nimport { GamificationUser } from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport SlotSkeleton from \"@/components/ui/skeletons/SlotSkeleton.vue\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport { logAnalyticsEvent } from \"@/utils\";\nimport { mapStores } from \"pinia\";\nimport { useMetaStore } from \"@/stores/metaStore\";\nimport { useMainStore } from \"@/stores/mainStore\";\nimport Avatar from \"@/components/ui/Avatar.vue\";\n\nexport default defineComponent({\n\tname: \"GamificationLeaderboard\",\n\tprops: {},\n\tmixins: [loadingMixin, courseIdMixin],\n\tasync created() {\n\t\tawait this.withFirstLoading(async () => {\n\t\t\tawait this.mainStore.getCourseGamificationContext({ courseId: this.courseId });\n\t\t\tif (this.mainStore.gamificationContext) {\n\t\t\t\tthis.paginatedUsers = await getCourseLeaderboard(\n\t\t\t\t\tthis.mainStore.gamificationContext.id,\n\t\t\t\t\tthis.pageNumber,\n\t\t\t\t);\n\t\t\t\tthis.pageSize = this.paginatedUsers.data.length;\n\t\t\t}\n\t\t\tlogAnalyticsEvent(\"viewedLeaderboard\", { courseId: this.courseId });\n\t\t});\n\t},\n\twatch: {\n\t\tasync pageNumber() {\n\t\t\tawait this.withLoading(async () => {\n\t\t\t\tawait this.mainStore.getCourseGamificationContext({ courseId: this.courseId });\n\t\t\t\tthis.paginatedUsers = await getCourseLeaderboard(\n\t\t\t\t\tthis.mainStore.gamificationContext?.id ?? \"\",\n\t\t\t\t\tthis.pageNumber,\n\t\t\t\t);\n\t\t\t});\n\t\t},\n\t},\n\tmethods: {\n\t\tgetUserPosition(userId: string) {\n\t\t\treturn (\n\t\t\t\tthis.pageSize * (this.pageNumber - 1) +\n\t\t\t\t(this.paginatedUsers?.data ?? []).findIndex(u => u.id == userId) +\n\t\t\t\t1\n\t\t\t);\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tpaginatedUsers: null as PaginatedData | null,\n\t\t\tpageNumber: 1,\n\t\t\tpageSize: 1,\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore, useMetaStore),\n\t\tlastPageNumber() {\n\t\t\treturn Math.ceil((this.paginatedUsers?.count ?? 0) / this.pageSize);\n\t\t},\n\t\tpageNumbers() {\n\t\t\treturn [...Array(this.lastPageNumber).keys()].map(p => p + 1);\n\t\t},\n\t},\n\tcomponents: { SlotSkeleton, Btn, Avatar },\n});\n","import { render } from \"./GamificationLeaderboard.vue?vue&type=template&id=5bce28fa&ts=true\"\nimport script from \"./GamificationLeaderboard.vue?vue&type=script&lang=ts\"\nexport * from \"./GamificationLeaderboard.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, vShow as _vShow, withDirectives as _withDirectives, renderList as _renderList, Fragment as _Fragment, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"\" }\nconst _hoisted_2 = { class: \"flex items-center mb-4 space-x-2\" }\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined\" }, \"arrow_back\", -1)\nconst _hoisted_4 = { class: \"mb-0.5\" }\nconst _hoisted_5 = { key: 0 }\nconst _hoisted_6 = { class: \"flex mt-8 mb-12\" }\nconst _hoisted_7 = { class: \"flex flex-col items-center w-1/3 mr-4 card shadow-elevation\" }\nconst _hoisted_8 = { class: \"flex space-x-0.5 text-2xl items-center\" }\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-3xl material-icons icon-light\" }, \"people\", -1)\nconst _hoisted_10 = { class: \"text-sm text-muted\" }\nconst _hoisted_11 = { class: \"flex flex-col items-center w-1/3 mr-4 card shadow-elevation\" }\nconst _hoisted_12 = { class: \"flex space-x-0.5 text-2xl items-center\" }\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-3xl material-icons-two-tone two-tone-success\" }, \"assignment_turned_in\", -1)\nconst _hoisted_14 = { class: \"text-sm text-muted\" }\nconst _hoisted_15 = { class: \"flex flex-col items-center w-1/3 card shadow-elevation\" }\nconst _hoisted_16 = { class: \"flex space-x-0.5 text-2xl items-center\" }\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"p\", null, \"%\", -1)\nconst _hoisted_18 = { class: \"text-sm text-center text-muted\" }\nconst _hoisted_19 = { class: \"hidden md:ml-auto banner banner-light\" }\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined icon-light\" }, \" assignment_returned \", -1)\nconst _hoisted_21 = { class: \"text-lg inline-icon text-success material-icons-outlined\" }\nconst _hoisted_22 = { style: {\"margin-left\":\"-1px\"} }\nconst _hoisted_23 = {\n key: 0,\n class: \"flex my-4 transition-all duration-200 banner banner-danger\"\n}\nconst _hoisted_24 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"ml-px text-yellow-900 material-icons-outlined\" }, \" pending_actions \", -1)\nconst _hoisted_25 = { class: \"\" }\nconst _hoisted_26 = { class: \"w-full h-96\" }\nconst _hoisted_27 = { key: 1 }\nconst _hoisted_28 = {\n key: 2,\n class: \"flex flex-col space-y-8\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_Tabs = _resolveComponent(\"Tabs\")!\n const _component_Bar = _resolveComponent(\"Bar\")!\n const _component_ExerciseWithStats = _resolveComponent(\"ExerciseWithStats\")!\n const _component_MinimalExercisePreviewSkeleton = _resolveComponent(\"MinimalExercisePreviewSkeleton\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_router_link, {\n class: \"\",\n to: { name: 'ExamResults' }\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Btn, {\n outline: true,\n variant: 'icon',\n tooltip: _ctx.$t('event_stats.back_to_results')\n }, {\n default: _withCtx(() => [\n _hoisted_3\n ]),\n _: 1\n }, 8, [\"tooltip\"])\n ]),\n _: 1\n }),\n _createElementVNode(\"h3\", _hoisted_4, _toDisplayString(_ctx.$t(\"event_stats.event_stats\")) + \" \" + _toDisplayString(_ctx.mainStore.getEventById(_ctx.eventId).name), 1)\n ]),\n _createVNode(_component_Tabs, {\n class: \"mb-8\",\n options: _ctx.tabsAsSelectableOptions,\n modelValue: _ctx.currentTab,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.currentTab) = $event))\n }, null, 8, [\"options\", \"modelValue\"]),\n _createElementVNode(\"div\", null, [\n (!_ctx.loading)\n ? _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"div\", _hoisted_7, [\n _createElementVNode(\"div\", _hoisted_8, [\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.participantCount), 1),\n _hoisted_9\n ]),\n _createElementVNode(\"p\", _hoisted_10, _toDisplayString(_ctx.$t(\"event_monitor.stats_participants\")), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_11, [\n _createElementVNode(\"div\", _hoisted_12, [\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.turnedInCount), 1),\n _hoisted_13\n ]),\n _createElementVNode(\"p\", _hoisted_14, _toDisplayString(_ctx.$t(\"event_monitor.stats_turned_in\")), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_15, [\n _createElementVNode(\"div\", _hoisted_16, [\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.averageProgress), 1),\n _hoisted_17\n ]),\n _createElementVNode(\"p\", _hoisted_18, _toDisplayString(_ctx.$t(\"event_monitor.stats_average_progress\")), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_19, [\n _hoisted_20,\n _createElementVNode(\"p\", null, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_monitor.un_turn_in_instructions\")) + \" \", 1),\n _createElementVNode(\"span\", _hoisted_21, _toDisplayString(_ctx.participationStateIcons[_ctx.EventParticipationState.TURNED_IN][0]), 1),\n _createElementVNode(\"span\", _hoisted_22, _toDisplayString(_ctx.$t(\"event_monitor.in_column_state\")), 1)\n ])\n ])\n ]),\n _createElementVNode(\"h2\", null, _toDisplayString(_ctx.$t(\"event_stats.score_distribution\")), 1),\n (!_ctx.areAllParticipationsFullyAssessed(_ctx.mainStore.eventParticipations))\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_23, [\n _hoisted_24,\n _createElementVNode(\"p\", _hoisted_25, _toDisplayString(_ctx.$t(\"event_stats.incomplete_scores\")) + \".\", 1)\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_26, [\n _createVNode(_component_Bar, {\n \"chart-data\": _ctx.scoreFrequencyChartData,\n \"chart-options\": _ctx.scoreChartOptions,\n height: _ctx.mediaQueryMdMatches ? 100 : 300\n }, null, 8, [\"chart-data\", \"chart-options\", \"height\"])\n ])\n ], 512)), [\n [_vShow, _ctx.currentTab === _ctx.ExamStatsTabs.OVERALL]\n ])\n : _createCommentVNode(\"\", true),\n (!_ctx.localLoading)\n ? _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_27, [\n _createElementVNode(\"h2\", null, _toDisplayString(_ctx.$t(\"event_stats.per_exercise_stats\")), 1),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.exercises, (exercise, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: 'e-stats-' + exercise?.id + '-' + index,\n class: \"my-8\"\n }, [\n exercise\n ? (_openBlock(), _createBlock(_component_ExerciseWithStats, {\n key: 0,\n exercise: exercise,\n slots: _ctx.getSlotsContaining(exercise)\n }, null, 8, [\"exercise\", \"slots\"]))\n : _createCommentVNode(\"\", true)\n ]))\n }), 128))\n ], 512)), [\n [_vShow, _ctx.currentTab === _ctx.ExamStatsTabs.EXERCISES]\n ])\n : _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_28, [\n _createVNode(_component_MinimalExercisePreviewSkeleton),\n _createVNode(_component_MinimalExercisePreviewSkeleton),\n _createVNode(_component_MinimalExercisePreviewSkeleton),\n _createVNode(_component_MinimalExercisePreviewSkeleton)\n ], 512)), [\n [_vShow, _ctx.currentTab === _ctx.ExamStatsTabs.EXERCISES]\n ])\n ])\n ]))\n}","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = { class: \"card shadow-elevation hover-shadow-elevation-2\" }\nconst _hoisted_2 = { class: \"mb-4 user-content\" }\nconst _hoisted_3 = { key: 0 }\nconst _hoisted_4 = { key: 1 }\nconst _hoisted_5 = { class: \"w-1/2 text-lg text-muted\" }\nconst _hoisted_6 = { class: \"ml-4\" }\nconst _hoisted_7 = { key: 2 }\nconst _hoisted_8 = { class: \"flex card card-border\" }\nconst _hoisted_9 = { class: \"w-10/12 overflow-auto max-h-36\" }\nconst _hoisted_10 = { class: \"w-2/12 ml-auto text-right\" }\nconst _hoisted_11 = { key: 0 }\nconst _hoisted_12 = {\n key: 3,\n class: \"grid grid-cols-1 md:grid-cols-2 md:gap-18\"\n}\nconst _hoisted_13 = { class: \"ml-1\" }\nconst _hoisted_14 = { key: 4 }\nconst _hoisted_15 = { class: \"text-muted\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ProcessedTextFragment = _resolveComponent(\"ProcessedTextFragment\")!\n const _component_Bar = _resolveComponent(\"Bar\")!\n const _component_ExerciseTestCase = _resolveComponent(\"ExerciseTestCase\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_ProcessedTextFragment, {\n value: _ctx.exercise.text\n }, null, 8, [\"value\"])\n ]),\n (_ctx.isMultipleChoice)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createVNode(_component_Bar, {\n \"chart-data\": _ctx.selectedChoicesFrequencyChartData,\n \"chart-options\": _ctx.exerciseChoicesBarChartOptions,\n height: _ctx.mediaQueryMdMatches ? 30 : 100,\n width: 100\n }, null, 8, [\"chart-data\", \"chart-options\", \"height\"])\n ]))\n : (_ctx.isProgrammingExercise)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createVNode(_component_Bar, {\n \"chart-data\": _ctx.programmingExerciseScoreFrequencyChartData,\n \"chart-options\": _ctx.passedTestCasesBarChartOptions,\n height: _ctx.mediaQueryMdMatches ? 30 : 100,\n width: 100\n }, null, 8, [\"chart-data\", \"chart-options\", \"height\"]),\n _createElementVNode(\"div\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(Object.entries(\n\t\t\t\t\t\t_ctx.programmingExerciseScoresFrequency.testCasePassingRate,\n\t\t\t\t\t), (record) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: record[0] + '-passed-data',\n class: \"flex items-center my-6 space-x-12\"\n }, [\n _createVNode(_component_ExerciseTestCase, {\n class: \"w-full\",\n showDescription: false,\n small: true,\n testCase: _ctx.exercise.testcases?.find(t => t.id == record[0])\n }, null, 8, [\"testCase\"]),\n _createElementVNode(\"div\", _hoisted_5, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"event_stats.testcase_passed_in\")) + \" \", 1),\n _createElementVNode(\"strong\", null, _toDisplayString(record[1]), 1),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t(\"event_stats.submissions\")) + \" \" + _toDisplayString(_ctx.$t(\"misc.out_of\")) + \" \" + _toDisplayString(_ctx.slots.length) + \" \", 1),\n _createElementVNode(\"strong\", _hoisted_6, \"(\" + _toDisplayString(Math.floor((record[1] / _ctx.slots.length) * 1000) / 10) + \"%)\", 1)\n ])\n ]))\n }), 128))\n ])\n ]))\n : (_ctx.isOpenAnswerExercise)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [\n _createElementVNode(\"h3\", null, _toDisplayString(_ctx.$t(\"event_stats.answers\")), 1),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.slots, (slot) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"my-4\",\n key: 'stats-slot-' + slot.id\n }, [\n _createElementVNode(\"div\", _hoisted_8, [\n _createElementVNode(\"div\", _hoisted_9, [\n _createVNode(_component_ProcessedTextFragment, {\n value: slot.answer_text,\n defaultValue: _ctx.$t('misc.no_answer')\n }, null, 8, [\"value\", \"defaultValue\"])\n ]),\n _createElementVNode(\"div\", _hoisted_10, [\n _createElementVNode(\"p\", {\n class: _normalizeClass({ 'text-muted': slot.score === null })\n }, [\n _createTextVNode(_toDisplayString(slot.score !== null ? slot.score : _ctx.$t(\"event_stats.not_yet_assessed\")) + \" \", 1),\n (slot.score !== null)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_11, _toDisplayString(slot.score === 1 ? _ctx.$t(\"misc.scored_singular\") : _ctx.$t(\"misc.scored_plural\")), 1))\n : _createCommentVNode(\"\", true)\n ], 2)\n ])\n ])\n ]))\n }), 128))\n ]))\n : (_ctx.isClozeExercise)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_12, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.clozeSubExercisesChoicesFrequencyChartData, (subExerciseData, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: 'cloze-' + index + 'data'\n }, [\n _createElementVNode(\"h5\", _hoisted_13, _toDisplayString(_ctx.$t(\"event_stats.cloze_stats_title\")) + \" \" + _toDisplayString(index + 1), 1),\n _createVNode(_component_Bar, {\n \"chart-data\": subExerciseData,\n \"chart-options\": _ctx.exerciseChoicesBarChartOptions,\n height: _ctx.mediaQueryMdMatches ? 30 : 100,\n width: 100\n }, null, 8, [\"chart-data\", \"chart-options\", \"height\"])\n ]))\n }), 128))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_14, [\n _createElementVNode(\"p\", _hoisted_15, _toDisplayString(_ctx.$t(\"event_stats.no_stats_available_for_exercise\")), 1)\n ]))\n ]))\n}","\nimport {\n\tEventParticipationSlot,\n\tExercise,\n\tExerciseChoice,\n\tExerciseType,\n\tmultipleChoiceExerciseTypes,\n\tprogrammingExerciseTypes,\n} from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport ProcessedTextFragment from \"../ui/ProcessedTextFragment.vue\";\n\nimport { Bar } from \"vue-chartjs\";\nimport { TChartData } from \"vue-chartjs/dist/types\";\nimport {\n\tChart as ChartJS,\n\tTitle,\n\tTooltip,\n\tLegend,\n\tBarElement,\n\tCategoryScale,\n\tLinearScale,\n\tCoreChartOptions,\n\tDatasetChartOptions,\n\tElementChartOptions,\n\tPluginChartOptions,\n\tScaleChartOptions,\n\tBarControllerChartOptions,\n} from \"chart.js\";\nimport { _DeepPartialObject } from \"chart.js/types/utils\";\nimport { getTranslatedString as _ } from \"@/i18n\";\n\nimport { SelectableOption } from \"@/interfaces\";\n\nimport {\n\tgetTestCasePassingFrequencyFor,\n\tgetChoiceSelectionFrequencyFor,\n\tpassedTestCasesBarChartOptions,\n\texerciseChoicesBarChartOptions,\n\tscoreChartDatasetSettings,\n\texerciseChoiceDatasetSettings,\n} from \"@/reports/examParticipations\";\nimport { makeLabelText, DataFrequency } from \"@/reports/misc\";\nimport ExerciseTestCase from \"../shared/ExerciseTestCase.vue\";\nimport { mediaQueryMixin } from \"@/mixins\";\nimport { getCorrectChoices } from \"../shared/Exercise/utils\";\n\nChartJS.register(Title, Tooltip, Legend, BarElement, CategoryScale, LinearScale);\n\nexport default defineComponent({\n\tname: \"ExerciseWithStats\",\n\tcomponents: { Bar, ProcessedTextFragment, ExerciseTestCase },\n\tprops: {\n\t\texercise: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\tslots: {\n\t\t\ttype: Array as PropType,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tmixins: [mediaQueryMixin],\n\tdata() {\n\t\treturn {\n\t\t\texerciseChoicesBarChartOptions,\n\t\t\tpassedTestCasesBarChartOptions,\n\t\t};\n\t},\n\tmethods: {\n\t\tgetCorrectChoices(exercise: Exercise): string[] {\n\t\t\treturn getCorrectChoices(exercise);\n\t\t},\n\t},\n\tcomputed: {\n\t\t// TODO import and use the functions in utils\n\t\tisMultipleChoice(): boolean {\n\t\t\treturn multipleChoiceExerciseTypes.includes(\n\t\t\t\tthis.exercise.exercise_type as ExerciseType,\n\t\t\t);\n\t\t},\n\t\tisProgrammingExercise(): boolean {\n\t\t\treturn programmingExerciseTypes.includes(\n\t\t\t\tthis.exercise.exercise_type as ExerciseType,\n\t\t\t);\n\t\t},\n\t\tisOpenAnswerExercise(): boolean {\n\t\t\treturn this.exercise.exercise_type === ExerciseType.OPEN_ANSWER;\n\t\t},\n\t\tisClozeExercise(): boolean {\n\t\t\treturn this.exercise.exercise_type === ExerciseType.COMPLETION;\n\t\t},\n\t\tselectedChoicesFrequency(): DataFrequency[] {\n\t\t\tif ((this.exercise.choices?.length ?? 0) === 0) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\treturn getChoiceSelectionFrequencyFor(this.exercise, this.slots);\n\t\t},\n\t\tprogrammingExerciseScoresFrequency(): {\n\t\t\tscoreFrequency: DataFrequency[];\n\t\t\ttestCasePassingRate: Record;\n\t\t} {\n\t\t\tif ((this.exercise.testcases?.length ?? 0) === 0) {\n\t\t\t\treturn { scoreFrequency: [], testCasePassingRate: {} };\n\t\t\t}\n\t\t\treturn getTestCasePassingFrequencyFor(this.exercise, this.slots);\n\t\t},\n\t\tclozeSubExercisesChoicesFrequencyChartData(): TChartData<\"bar\", number[], unknown>[] {\n\t\t\treturn (this.exercise.sub_exercises ?? []).map(e => {\n\t\t\t\tconst subExerciseChoiceFrequency = getChoiceSelectionFrequencyFor(\n\t\t\t\t\te,\n\t\t\t\t\tthis.slots.flatMap(s => s.sub_slots).filter(s => s.exercise.id == e.id),\n\t\t\t\t);\n\t\t\t\treturn {\n\t\t\t\t\tlabels: subExerciseChoiceFrequency.map(r =>\n\t\t\t\t\t\tmakeLabelText(r.datum.text).slice(0, 100),\n\t\t\t\t\t),\n\t\t\t\t\tdatasets: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdata: subExerciseChoiceFrequency.map(r => r.frequency),\n\t\t\t\t\t\t\t...exerciseChoiceDatasetSettings,\n\t\t\t\t\t\t\tbackgroundColor: subExerciseChoiceFrequency.map(r =>\n\t\t\t\t\t\t\t\tthis.getCorrectChoices(e).includes(r.datum.id)\n\t\t\t\t\t\t\t\t\t? \"#10B981b3\"\n\t\t\t\t\t\t\t\t\t: \"#e5e7ebb3\",\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t\tselectedChoicesFrequencyChartData(): TChartData<\"bar\", number[], unknown> {\n\t\t\treturn {\n\t\t\t\tlabels: this.selectedChoicesFrequency.map(r =>\n\t\t\t\t\tmakeLabelText(r.datum.text).slice(0, 100),\n\t\t\t\t),\n\t\t\t\tdatasets: [\n\t\t\t\t\t{\n\t\t\t\t\t\tdata: this.selectedChoicesFrequency.map(r => r.frequency),\n\t\t\t\t\t\t...exerciseChoiceDatasetSettings,\n\t\t\t\t\t\tbackgroundColor: this.selectedChoicesFrequency.map(r =>\n\t\t\t\t\t\t\tthis.getCorrectChoices(this.exercise).includes(r.datum.id)\n\t\t\t\t\t\t\t\t? \"#10B981b3\"\n\t\t\t\t\t\t\t\t: \"#e5e7ebb3\",\n\t\t\t\t\t\t),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t},\n\t\tprogrammingExerciseScoreFrequencyChartData(): TChartData<\"bar\", number[], unknown> {\n\t\t\treturn {\n\t\t\t\tlabels: this.programmingExerciseScoresFrequency.scoreFrequency.map(r => r.datum),\n\t\t\t\tdatasets: [\n\t\t\t\t\t{\n\t\t\t\t\t\tdata: this.programmingExerciseScoresFrequency.scoreFrequency.map(\n\t\t\t\t\t\t\tr => r.frequency,\n\t\t\t\t\t\t),\n\t\t\t\t\t\t...scoreChartDatasetSettings,\n\t\t\t\t\t\tmaxBarThickness: 100,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t},\n\t},\n});\n","import { render } from \"./ExerciseWithStats.vue?vue&type=template&id=f3abd832&ts=true\"\nimport script from \"./ExerciseWithStats.vue?vue&type=script&lang=ts\"\nexport * from \"./ExerciseWithStats.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { courseIdMixin, eventIdMixin, loadingMixin, mediaQueryMixin } from \"@/mixins\";\nimport {\n\tEvent,\n\tEventParticipation,\n\tEventParticipationState,\n\tEventTemplateRule,\n\tExercise,\n} from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport { icons as participationStateIcons } from \"@/assets/participationStateIcons\";\n\nimport { Bar } from \"vue-chartjs\";\nimport { TChartData } from \"vue-chartjs/dist/types\";\nimport {\n\tChart as ChartJS,\n\tTitle,\n\tTooltip,\n\tLegend,\n\tBarElement,\n\tCategoryScale,\n\tLinearScale,\n} from \"chart.js\";\nimport { _DeepPartialObject } from \"chart.js/types/utils\";\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport Tabs from \"@/components/ui/Tabs.vue\";\nimport { SelectableOption } from \"@/interfaces\";\nimport ExerciseWithStats from \"@/components/teacher/ExerciseWithStats.vue\";\nimport MinimalExercisePreviewSkeleton from \"@/components/ui/skeletons/MinimalExercisePreviewSkeleton.vue\";\n\nimport { DataFrequency } from \"@/reports/misc\";\nimport {\n\tgetScoreFrequencyFromParticipations,\n\tscoreChartOptions,\n\tscoreChartDatasetSettings,\n\tareAllParticipationsFullyAssessed,\n\tgetExerciseListFromParticipations,\n} from \"@/reports/examParticipations\";\nimport { roundToTwoDecimals } from \"@/utils\";\nimport { mapStores } from \"pinia\";\nimport { useMainStore } from \"@/stores/mainStore\";\nChartJS.register(Title, Tooltip, Legend, BarElement, CategoryScale, LinearScale);\n\nenum ExamStatsTabs {\n\tOVERALL,\n\tEXERCISES,\n}\n\nexport default defineComponent({\n\tname: \"EventStats\",\n\tprops: {},\n\tcomponents: {\n\t\tBar,\n\t\tBtn,\n\t\tTabs,\n\t\tExerciseWithStats,\n\t\tMinimalExercisePreviewSkeleton,\n\t},\n\tmixins: [courseIdMixin, eventIdMixin, loadingMixin, mediaQueryMixin],\n\tasync created() {\n\t\tawait this.withLoading(async () => {\n\t\t\t// make a first request without the heavy fields in order\n\t\t\t// to quickly show the first chart...\n\t\t\tawait this.mainStore.getEventParticipations({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\teventId: this.eventId,\n\t\t\t\tmutate: true,\n\t\t\t\tincludeDetails: false,\n\t\t\t});\n\t\t\tawait this.mainStore.getEvent({\n\t\t\t\tcourseId: this.courseId,\n\t\t\t\teventId: this.eventId,\n\t\t\t\tincludeDetails: false, // event template isn't needed\n\t\t\t});\n\t\t});\n\t\t// ... then make the heavy request, whose data is to be shown\n\t\t// in a tab that's not yet visible to the user\n\t\tawait this.withLocalLoading(\n\t\t\tasync () =>\n\t\t\t\tawait this.mainStore.getEventParticipations({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\teventId: this.eventId,\n\t\t\t\t\tmutate: true,\n\t\t\t\t\tincludeDetails: true, // needed to get slots' exercises and answer texts\n\t\t\t\t}),\n\t\t);\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tcurrentTab: ExamStatsTabs.OVERALL,\n\t\t\tExamStatsTabs,\n\t\t\tscoreChartOptions,\n\t\t\tparticipationStateIcons,\n\t\t\tEventParticipationState,\n\t\t};\n\t},\n\tmethods: {\n\t\tgetSlotsContaining(exercise: Exercise) {\n\t\t\tif (exercise) {\n\t\t\t\treturn this.mainStore.eventParticipations\n\t\t\t\t\t.flatMap(p => p.slots)\n\t\t\t\t\t.filter(s => s.exercise?.id == exercise.id);\n\t\t\t}\n\t\t\treturn [];\n\t\t},\n\t\tareAllParticipationsFullyAssessed,\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore),\n\t\ttabsAsSelectableOptions(): SelectableOption[] {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tvalue: ExamStatsTabs.OVERALL,\n\t\t\t\t\tcontent: _(\"event_stats.overall\"),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tvalue: ExamStatsTabs.EXERCISES,\n\t\t\t\t\tcontent: _(\"event_stats.exercises\"),\n\t\t\t\t},\n\t\t\t];\n\t\t},\n\t\texercises(): Exercise[] {\n\t\t\treturn getExerciseListFromParticipations(this.mainStore.eventParticipations);\n\t\t},\n\t\tscoreFrequency(): DataFrequency[] {\n\t\t\treturn getScoreFrequencyFromParticipations(this.mainStore.eventParticipations);\n\t\t},\n\t\tscoreFrequencyChartData(): TChartData<\"bar\", number[], unknown> {\n\t\t\treturn {\n\t\t\t\tlabels: this.scoreFrequency.map(r => r.datum),\n\t\t\t\tdatasets: [\n\t\t\t\t\t{\n\t\t\t\t\t\tdata: this.scoreFrequency.map(r => r.frequency),\n\t\t\t\t\t\t...scoreChartDatasetSettings,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t},\n\t\t// overall stats\n\t\tparticipantCount() {\n\t\t\treturn this.mainStore.eventParticipations.length;\n\t\t},\n\t\tturnedInCount() {\n\t\t\treturn this.mainStore.eventParticipations.filter(\n\t\t\t\tp => p.state === EventParticipationState.TURNED_IN,\n\t\t\t).length;\n\t\t},\n\t\taverageProgress() {\n\t\t\t// TODO use method in utils (like in monitor view)\n\t\t\tconst participations = this.mainStore.eventParticipations;\n\t\t\tif (!participations.length) {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tconst divisor =\n\t\t\t\t(this.mainStore\n\t\t\t\t\t.getEventById(this.eventId)\n\t\t\t\t\t.template?.rules?.map(r => r.amount)\n\t\t\t\t\t?.reduce((a, b) => a + b, 0) ?? 0) * participations.length;\n\n\t\t\tconst perc =\n\t\t\t\t(100 *\n\t\t\t\t\tparticipations\n\t\t\t\t\t\t.map(p =>\n\t\t\t\t\t\t\tp.state === EventParticipationState.TURNED_IN\n\t\t\t\t\t\t\t\t? p.slots.length\n\t\t\t\t\t\t\t\t: p.current_slot_cursor ?? 0,\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.reduce((a, b) => a + b)) /\n\t\t\t\tdivisor;\n\t\t\treturn roundToTwoDecimals(perc);\n\t\t},\n\t},\n});\n","import { render } from \"./EventStats.vue?vue&type=template&id=3d360931&ts=true\"\nimport script from \"./EventStats.vue?vue&type=script&lang=ts\"\nexport * from \"./EventStats.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, normalizeClass as _normalizeClass, createStaticVNode as _createStaticVNode } from \"vue\"\nimport _imports_0 from '@/assets/logo.png'\nimport _imports_1 from '@/assets/unipi.png'\n\n\nconst _hoisted_1 = { class: \"md:flex h-full md:h-screen md:w-screen md:-mx-6 lg:-mx-10 -my-2 md:-my-4\" }\nconst _hoisted_2 = { class: \"flex relative md:w-11/12 flex-col items-center h-full md:shadow-elevation-2\" }\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"img\", {\n src: _imports_0,\n class: \"mt-4 md:w-7/12 w-10/12\"\n}, null, -1)\nconst _hoisted_4 = { class: \"w-11/12 absolute top-1/2 transform -translate-x-1/2 -translate-y-1/2 left-1/2 flex items-center flex-col\" }\nconst _hoisted_5 = { class: \"mx-auto mb-8 text-5xl text-center\" }\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"div\", {\n style: {\"width\":\"150px\",\"height\":\"150px\"},\n class: \"mx-auto flex bg-opacity-100 rounded-full bg-primary shadow-elevation-2\"\n}, [\n /*#__PURE__*/_createElementVNode(\"span\", {\n style: {\"font-size\":\"145px\"},\n class: \"opacity-100 material-icons m-auto text-light\"\n }, \" person \")\n], -1)\nconst _hoisted_7 = {\n key: 0,\n class: \"mx-4 w-full px-4 space-x-3 banner banner-danger mt-6\"\n}\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"div\", {\n style: {\"width\":\"40px\",\"height\":\"40px\",\"padding-left\":\"2.5px\"},\n class: \"flex items-start rounded-full\"\n}, [\n /*#__PURE__*/_createElementVNode(\"span\", {\n class: \"m-auto material-icons\",\n style: {\"font-size\":\"35px\"}\n }, \"remove_circle_outline\")\n], -1)\nconst _hoisted_9 = { class: \"text-danger-dark\" }\nconst _hoisted_10 = { class: \"mt-8 text-center\" }\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"mr-2.5\",\n style: {\"width\":\"30px\"},\n src: _imports_1\n}, null, -1)\nconst _hoisted_12 = { class: \"mb-1 mt-auto mr-auto ml-2 md:ml-4 opacity-0\" }\nconst _hoisted_13 = { class: \"text-xs text-muted\" }\nconst _hoisted_14 = { class: \"text-primary hover:underline cursor-pointer\" }\nconst _hoisted_15 = /*#__PURE__*/_createStaticVNode(\"\", 1)\nconst _hoisted_16 = { class: \"w-full relative hidden md:flex h-full px-2 md:px-6 lg:px-10 py-4 hero-bg\" }\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"span\", {\n style: {\"font-size\":\"72px !important\"},\n class: \"material-icons\"\n}, \"code\", -1)\nconst _hoisted_18 = [\n _hoisted_17\n]\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"span\", {\n style: {\"font-size\":\"72px !important\"},\n class: \"material-icons\"\n}, \"assignment_turned_in\", -1)\nconst _hoisted_20 = [\n _hoisted_19\n]\nconst _hoisted_21 = /*#__PURE__*/_createElementVNode(\"span\", {\n style: {\"font-size\":\"72px !important\"},\n class: \"material-icons\"\n}, \"book\", -1)\nconst _hoisted_22 = [\n _hoisted_21\n]\nconst _hoisted_23 = /*#__PURE__*/_createElementVNode(\"span\", {\n style: {\"font-size\":\"72px !important\"},\n class: \"material-icons\"\n}, \"bar_chart\", -1)\nconst _hoisted_24 = [\n _hoisted_23\n]\nconst _hoisted_25 = /*#__PURE__*/_createElementVNode(\"span\", {\n style: {\"font-size\":\"72px !important\"},\n class: \"material-icons\"\n}, \"school\", -1)\nconst _hoisted_26 = [\n _hoisted_25\n]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_GoogleLogin = _resolveComponent(\"GoogleLogin\")!\n const _component_v_tour = _resolveComponent(\"v-tour\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"h1\", _hoisted_5, _toDisplayString(_ctx.$t(\"headings.login\")), 1),\n _hoisted_6,\n (_ctx.loginAttemptWithUnauthorizedEmailAddress)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [\n _hoisted_8,\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"p\", null, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"login_screen.unauthorized_email_1\")) + \" \", 1),\n _createElementVNode(\"strong\", _hoisted_9, _toDisplayString(_ctx.$t(\"login_screen.unauthorized_email_2\")), 1),\n _createTextVNode(\". \")\n ])\n ])\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_10, [\n _createVNode(_component_GoogleLogin, {\n \"popup-type\": 'TOKEN',\n callback: _ctx.onLogin\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Btn, {\n id: \"login-btn\",\n variant: 'secondary',\n size: 'lg',\n class: \"md:w-max\",\n style: {\"background\":\"white !important\"},\n disabled: _ctx.localLoading || _ctx.disableLogin,\n loading: _ctx.localLoading\n }, {\n default: _withCtx(() => [\n _hoisted_11,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t(\"login_screen.login\")), 1)\n ]),\n _: 1\n }, 8, [\"disabled\", \"loading\"])\n ]),\n _: 1\n }, 8, [\"callback\"])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_12, [\n _createElementVNode(\"p\", _hoisted_13, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"login_screen.entering_you_agree_to\")) + \" \", 1),\n _createElementVNode(\"span\", _hoisted_14, _toDisplayString(_ctx.$t(\"misc.terms_and_conditions\")), 1),\n _createTextVNode(\". \")\n ])\n ]),\n _hoisted_15\n ]),\n _createElementVNode(\"div\", _hoisted_16, [\n _createElementVNode(\"div\", {\n style: {\"top\":\"10%\",\"left\":\"70%\"},\n class: _normalizeClass([\"hero-icon\", { 'hero-hidden': !_ctx.showIcons }])\n }, _hoisted_18, 2),\n _createElementVNode(\"div\", {\n style: {\"bottom\":\"10%\",\"right\":\"70%\"},\n class: _normalizeClass([\"hero-icon\", { 'hero-hidden': !_ctx.showIcons }])\n }, _hoisted_20, 2),\n _createElementVNode(\"div\", {\n style: {\"bottom\":\"30%\",\"right\":\"10%\"},\n class: _normalizeClass([\"hero-icon\", { 'hero-hidden': !_ctx.showIcons }])\n }, _hoisted_22, 2),\n _createElementVNode(\"div\", {\n style: {\"top\":\"32.5%\",\"left\":\"10%\"},\n class: _normalizeClass([\"hero-icon\", { 'hero-hidden': !_ctx.showIcons }])\n }, _hoisted_24, 2),\n _createElementVNode(\"div\", {\n style: {\"position\":\"relative !important\"},\n class: _normalizeClass([\"hero-icon m-auto\", { 'hero-hidden': !_ctx.showIcons }])\n }, _hoisted_26, 2)\n ]),\n _createVNode(_component_v_tour, {\n name: \"demoTour\",\n steps: _ctx.demoLoginTourSteps,\n options: _ctx.tourOptions,\n callbacks: { onFinish: _ctx.onTourFinish }\n }, null, 8, [\"steps\", \"options\", \"callbacks\"])\n ]))\n}","\n/* eslint-disable */\nimport Btn from \"@/components/ui/Btn.vue\";\nimport { inject, toRefs } from \"vue\";\nimport { defineComponent } from \"@vue/runtime-core\";\nimport { loadingMixin } from \"@/mixins\";\nimport {\n\tisDemoMode,\n\tlogAnalyticsEvent,\n\tredirectToMainView,\n\tsetErrorNotification,\n} from \"@/utils\";\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport { demoLoginTourSteps, tourOptions } from \"@/const\";\nimport { mapStores } from \"pinia\";\nimport { useMetaStore } from \"@/stores/metaStore\";\n\nimport type { CallbackTypes } from \"vue3-google-login\";\n\nconst DEMO_TOUR_KEY = \"demo_tour_taken\";\n\nexport default defineComponent({\n\tname: \"Login\",\n\tcomponents: {\n\t\tBtn,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tloadingLogin: true,\n\t\t\tdisableLogin: false,\n\t\t\tdemoLoginTourSteps,\n\t\t\ttourOptions,\n\t\t\tshowIcons: false,\n\t\t\tloginAttemptWithUnauthorizedEmailAddress: false,\n\t\t};\n\t},\n\tmixins: [loadingMixin],\n\tmethods: {\n\t\tonTourFinish() {\n\t\t\tthis.disableLogin = false;\n\t\t\tlocalStorage.setItem(DEMO_TOUR_KEY, \"true\");\n\t\t},\n\t\tasync onLogin(response: Parameters[0]) {\n\t\t\tawait this.withLocalLoading(async () => {\n\t\t\t\tconst token = response.access_token;\n\t\t\t\tawait this.metaStore.convertToken(token);\n\t\t\t\tawait this.metaStore.getUserData();\n\t\t\t\tredirectToMainView();\n\t\t\t}, setErrorNotification);\n\t\t},\n\t\tonLoginAttemptWithUnauthorizedEmailAddress() {\n\t\t\tlogAnalyticsEvent(\"unauth_login_attempt\", {});\n\t\t\tthis.loginAttemptWithUnauthorizedEmailAddress = true;\n\t\t},\n\t\tredirectToDemoPage() {\n\t\t\tlogAnalyticsEvent(\"loginFailedRedirectToDemo\", {});\n\t\t\tconst redirectUrl =\n\t\t\t\tprocess.env.VUE_APP_DEMO_REDIRECT_URL ?? \"http://localhost:8081\";\n\t\t\twindow.location.href = redirectUrl;\n\t\t},\n\t},\n\tsetup() {\n\t\tconst Vue3GoogleOauth = inject(\"Vue3GoogleOauth\");\n\t\treturn {\n\t\t\tVue3GoogleOauth,\n\t\t};\n\t},\n\tcreated() {\n\t\tif (this.metaStore.isAuthenticated) {\n\t\t\tredirectToMainView();\n\t\t}\n\t},\n\tmounted() {\n\t\tsetTimeout(() => (this.showIcons = true), 10);\n\t},\n\tcomputed: {\n\t\t...mapStores(useMetaStore),\n\t},\n});\n","import { render } from \"./Login.vue?vue&type=template&id=365d94ae&ts=true\"\nimport script from \"./Login.vue?vue&type=script&lang=ts\"\nexport * from \"./Login.vue?vue&type=script&lang=ts\"\n\nimport \"./Login.vue?vue&type=style&index=0&id=365d94ae&lang=css\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex flex-col items-center w-full mx-auto mt-16\" }\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"p\", {\n style: {\"font-size\":\"10rem\"},\n class: \"material-icons-outlined opacity-10\"\n}, \" error_outline \", -1)\nconst _hoisted_3 = { class: \"opacity-40\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _hoisted_2,\n _createElementVNode(\"h2\", _hoisted_3, _toDisplayString(_ctx.$t(\"errors.404\")), 1),\n _createVNode(_component_Btn, {\n class: \"mt-2\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.go(-1)))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"errors.back\")), 1)\n ]),\n _: 1\n })\n ]))\n}","\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport Btn from \"@/components/ui/Btn.vue\";\nexport default defineComponent({\n\tname: \"PageNotFound\",\n\tprops: {},\n\tmethods: {},\n\tcomputed: {},\n\tcomponents: { Btn },\n});\n","import { render } from \"./PageNotFound.vue?vue&type=template&id=aea9a254&ts=true\"\nimport script from \"./PageNotFound.vue?vue&type=script&lang=ts\"\nexport * from \"./PageNotFound.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createSlots as _createSlots, createVNode as _createVNode, createCommentVNode as _createCommentVNode, createBlock as _createBlock, withModifiers as _withModifiers } from \"vue\"\n\nconst _hoisted_1 = { class: \"\" }\nconst _hoisted_2 = { class: \"flex flex-col h-full space-y-8\" }\nconst _hoisted_3 = { class: \"flex flex-col space-y-4.5\" }\nconst _hoisted_4 = { class: \"error-msg\" }\nconst _hoisted_5 = { class: \"flex flex-col space-y-1\" }\nconst _hoisted_6 = {\n key: 0,\n class: \"text-muted\"\n}\nconst _hoisted_7 = {\n key: 1,\n class: \"text-muted\"\n}\nconst _hoisted_8 = { class: \"flex flex-col flex-grow mb-8 space-y-2\" }\nconst _hoisted_9 = { class: \"text-muted\" }\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"mr-1 text-base material-icons-outlined\" }, \"done\", -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_TextInput = _resolveComponent(\"TextInput\")!\n const _component_TextEditor = _resolveComponent(\"TextEditor\")!\n const _component_Toggle = _resolveComponent(\"Toggle\")!\n const _component_FileUpload = _resolveComponent(\"FileUpload\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_TextInput, {\n modelValue: _ctx.course.name,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.course.name) = $event))\n }, _createSlots({\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"course_creation_form.course_name\")) + \" \", 1)\n ]),\n _: 2\n }, [\n (_ctx.v$.course.name.$errors.length > 0)\n ? {\n name: \"errors\",\n fn: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.v$.course.name.$errors, (error) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"input-errors\",\n key: error.$uid\n }, [\n _createElementVNode(\"div\", _hoisted_4, _toDisplayString(_ctx.$t(\"validation_errors.\" + error.$uid)), 1)\n ]))\n }), 128))\n ]),\n key: \"0\"\n }\n : undefined\n ]), 1032, [\"modelValue\"]),\n _createVNode(_component_TextEditor, {\n modelValue: _ctx.course.description,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((_ctx.course.description) = $event))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"course_creation_form.course_description\")), 1)\n ]),\n _: 1\n }, 8, [\"modelValue\"])\n ]),\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"h4\", null, _toDisplayString(_ctx.$t(\"course_creation_form.course_visibility\")), 1),\n _createVNode(_component_Toggle, {\n modelValue: _ctx.course.hidden,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((_ctx.course.hidden) = $event))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"course_creation_form.hide_course\")), 1)\n ]),\n _: 1\n }, 8, [\"modelValue\"]),\n (_ctx.course.hidden)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_6, _toDisplayString(_ctx.$t(\"course_creation_form.hidden_description\")), 1))\n : (_openBlock(), _createElementBlock(\"p\", _hoisted_7, _toDisplayString(_ctx.$t(\"course_creation_form.public_description\")), 1))\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n _createElementVNode(\"h4\", null, _toDisplayString(_ctx.$t(\"course_creation_form.import_exercises\")), 1),\n _createElementVNode(\"p\", _hoisted_9, _toDisplayString(_ctx.$t(\"course_creation_form.import_exercises_description\")), 1),\n false\n ? (_openBlock(), _createBlock(_component_FileUpload, { key: 0 }))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"input\", {\n type: \"file\",\n onClick: _cache[3] || (_cache[3] = _withModifiers(($event: any) => (_ctx.onFileUploadClick()), [\"prevent\"]))\n })\n ]),\n _createVNode(_component_Btn, {\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.v$.$invalid ? _ctx.v$.$touch() : _ctx.onCreate())),\n class: \"mt-auto mr-auto\",\n variant: 'success',\n loading: _ctx.localLoading\n }, {\n default: _withCtx(() => [\n _hoisted_10,\n _createTextVNode(_toDisplayString(_ctx.$t(\"course_creation_form.create\")), 1)\n ]),\n _: 1\n }, 8, [\"loading\"])\n ])\n ]))\n}","\nimport { defineComponent } from \"@vue/runtime-core\";\nimport TextInput from \"@/components/ui/TextInput.vue\";\nimport TextEditor from \"@/components/ui/TextEditor.vue\";\nimport { getBlankCourse } from \"@/models\";\nimport Toggle from \"@/components/ui/Toggle.vue\";\nimport FileUpload from \"../../components/ui/FileUpload.vue\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport useVuelidate from \"@vuelidate/core\";\n\nimport { loadingMixin } from \"@/mixins\";\nimport { courseValidation } from \"@/validation/models\";\nimport { mapStores } from \"pinia\";\nimport { useMainStore } from \"@/stores/mainStore\";\nimport { useMetaStore } from \"@/stores/metaStore\";\n\nexport default defineComponent({\n\tname: \"CourseCreationForm\",\n\tcomponents: { TextInput, TextEditor, Toggle, FileUpload, Btn },\n\tsetup() {\n\t\treturn { v$: useVuelidate() };\n\t},\n\tmixins: [loadingMixin],\n\tdata() {\n\t\treturn {\n\t\t\tcourse: getBlankCourse(),\n\t\t};\n\t},\n\tvalidations() {\n\t\treturn {\n\t\t\tcourse: courseValidation,\n\t\t};\n\t},\n\tmethods: {\n\t\tonFileUploadClick() {\n\t\t\talert(\"Questa funzionalità non è ancora disponibile\");\n\t\t},\n\t\tasync onCreate() {\n\t\t\tawait this.withLocalLoading(async () => {\n\t\t\t\tconst course = await this.mainStore.createCourse(this.course);\n\t\t\t\tawait this.mainStore.getCourses();\n\t\t\t\tthis.$router.push({\n\t\t\t\t\tname: \"TeacherCourseDashboard\",\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tcourseId: course.id,\n\t\t\t\t\t\tshowTour: 1,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t});\n\t\t\tthis.metaStore.showSuccessFeedback();\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore, useMetaStore),\n\t},\n});\n","import { render } from \"./CourseCreationForm.vue?vue&type=template&id=22de4f50&ts=true\"\nimport script from \"./CourseCreationForm.vue?vue&type=script&lang=ts\"\nexport * from \"./CourseCreationForm.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { getTranslatedString as _ } from \"@/i18n\";\n\nexport interface BreadCrumb {\n\ttitle: string;\n\trouteName?: string;\n\trouteParams?: Record;\n}\n\nconst courseListBreadCrumb: BreadCrumb = {\n\ttitle: _(\"breadcrumbs.course_list\"),\n\trouteName: \"StudentCourseList\",\n\trouteParams: {\n\t\tcourseId: -1, // !\n\t},\n};\n\nconst courseDashBoardBreadCrumb: BreadCrumb = {\n\ttitle: _(\"breadcrumbs.course_dashboard\"),\n\trouteName: \"StudentCourseDashboard\",\n\t// routeParams: [\"courseId\"],\n};\n\nexport const courseListBreadCrumbs: BreadCrumb[] = [courseListBreadCrumb];\n\nexport const courseDashBoardBreadCrumbs: BreadCrumb[] = [\n\tcourseListBreadCrumb,\n\tcourseDashBoardBreadCrumb,\n];\n\nexport const examsListBreadCrumbs: BreadCrumb[] = [\n\tcourseListBreadCrumb,\n\tcourseDashBoardBreadCrumb,\n\t{\n\t\ttitle: _(\"student_dashboard_options.my_exams\"),\n\t},\n];\n\nexport const practicesListBreadCrumbs: BreadCrumb[] = [\n\tcourseListBreadCrumb,\n\tcourseDashBoardBreadCrumb,\n\t{\n\t\ttitle: _(\"student_dashboard_options.my_practice_sessions\"),\n\t},\n];\n\nexport const examParticipationBreadCrumbs: BreadCrumb[] = [\n\tcourseListBreadCrumb,\n\tcourseDashBoardBreadCrumb,\n\t{\n\t\ttitle: _(\"breadcrumbs.exam_participation_page\"),\n\t},\n];\n\nexport const courseTreeBreadCrumbs: BreadCrumb[] = [\n\tcourseListBreadCrumb,\n\tcourseDashBoardBreadCrumb,\n\t{\n\t\trouteName: \"CourseTreeDispatcher\",\n\t\ttitle: _(\"breadcrumbs.course_tree\"),\n\t},\n];\n\nexport const courseTreeNodeBreadCrumbs: BreadCrumb[] = [\n\t...courseTreeBreadCrumbs,\n\t{\n\t\ttitle: _(\"breadcrumbs.course_tree_node\"),\n\t},\n];\n\nexport const practiceParticipationBreadCrumbs: BreadCrumb[] = [\n\tcourseListBreadCrumb,\n\tcourseDashBoardBreadCrumb,\n\t{\n\t\ttitle: _(\"breadcrumbs.practice_participation_page\"),\n\t\trouteName: \"PracticeParticipationPage\",\n\t},\n];\n\nexport const submissionReviewBreadCrumbs: BreadCrumb[] = [\n\tcourseListBreadCrumb,\n\tcourseDashBoardBreadCrumb,\n\t{\n\t\ttitle: _(\"breadcrumbs.submission_review\"),\n\t\trouteName: \"SubmissionReviewPage\",\n\t},\n];\n\nexport const practiceReviewBreadCrumbs: BreadCrumb[] = [\n\tcourseListBreadCrumb,\n\tcourseDashBoardBreadCrumb,\n\t{\n\t\ttitle: _(\"breadcrumbs.practice_review\"),\n\t\trouteName: \"PracticeSummaryPage\",\n\t},\n];\n\nexport const examAssessmentBreadCrumbs: BreadCrumb[] = [\n\tcourseListBreadCrumb,\n\tcourseDashBoardBreadCrumb,\n\t{\n\t\ttitle: _(\"breadcrumbs.exam_assessment\"),\n\t\trouteName: \"AssessmentReviewPage\",\n\t},\n];\n\nexport const exerciseThreadsBreadCrumbs: BreadCrumb[] = [\n\tcourseListBreadCrumb,\n\tcourseDashBoardBreadCrumb,\n\t{\n\t\ttitle: _(\"breadcrumbs.exercise_solution_threads\"),\n\t\trouteName: \"CourseDashBoardExerciseThreadList\",\n\t},\n];\n\nexport const leaderboardBreadCrumbs: BreadCrumb[] = [\n\tcourseListBreadCrumb,\n\tcourseDashBoardBreadCrumb,\n\t{\n\t\ttitle: _(\"breadcrumbs.student_course_leaderboard\"),\n\t\trouteName: \"StudentCourseLeaderboard\",\n\t},\n];\n\nexport const studentFavoritesBreadCrumbs: BreadCrumb[] = [\n\tcourseListBreadCrumb,\n\tcourseDashBoardBreadCrumb,\n\t{\n\t\ttitle: _(\"breadcrumbs.student_favorites\"),\n\t\trouteName: \"StudentFavorites\",\n\t},\n];\n\nexport const exerciseSolutionThreadBreadCrumbs: BreadCrumb[] = [\n\t...exerciseThreadsBreadCrumbs,\n\t{\n\t\ttitle: _(\"breadcrumbs.exercise_solution_thread\"),\n\t\trouteName: \"ExerciseSolutionThread\",\n\t},\n];\n","import { getMe } from \"@/api\";\nimport { getCourse } from \"@/api/courses\";\nimport { NavigationGuardNext, RouteLocationNormalized } from \"vue-router\";\n\nasync function hasPrivilegesOverRouteCourse(route: RouteLocationNormalized) {\n\tconst params = route.params;\n\tconst course = await getCourse(params.courseId as string);\n\tconst privileges = course.privileges ?? [];\n\treturn privileges.length > 0;\n}\n\nasync function isTeacher() {\n\tconst user = await getMe();\n\treturn user.is_teacher;\n}\n\n/**\n * A function that takes the name of a privileged route and the name of an unprivileged\n * route and returns a function that can be used as a \"before\" route guard, which checks\n * if the user has any permissions over the course in the route and conditionally redirects\n * to either the privileged or the unprivileged route based on that\n */\nconst privilegedRouteWithRedirectBeforeGuard =\n\t(privilegedRouteName: string, unprivilegedRouteName: string) =>\n\tasync (\n\t\tto: RouteLocationNormalized,\n\t\t_: RouteLocationNormalized,\n\t\tnext: NavigationGuardNext,\n\t) => {\n\t\tconst params = to.params;\n\t\tif (await hasPrivilegesOverRouteCourse(to)) {\n\t\t\tnext({ name: privilegedRouteName, params });\n\t\t} else {\n\t\t\tnext({ name: unprivilegedRouteName, params });\n\t\t}\n\t};\n\n/**\n * Same as above but checks that the user is a teacher instead of checking\n * course-specific permissions\n */\nconst teacherRouteWithRedirectBeforeGuard =\n\t(privilegedRouteName: string, unprivilegedRouteName: string) =>\n\tasync (\n\t\tto: RouteLocationNormalized,\n\t\t_: RouteLocationNormalized,\n\t\tnext: NavigationGuardNext,\n\t) => {\n\t\tconst params = to.params;\n\t\tif (await isTeacher()) {\n\t\t\tnext({ name: privilegedRouteName, params });\n\t\t} else {\n\t\t\tnext({ name: unprivilegedRouteName, params });\n\t\t}\n\t};\n\nexport const courseListBeforeGuard = teacherRouteWithRedirectBeforeGuard(\n\t\"TeacherCourseList\",\n\t\"StudentCourseList\",\n);\n\nexport const exerciseSolutionThreadBeforeGuard = privilegedRouteWithRedirectBeforeGuard(\n\t\"TeacherDetailExerciseSolutionThreads\",\n\t\"ExerciseSolutionThread\",\n);\n\nexport const courseTreeNodeDetailBeforeGuard = privilegedRouteWithRedirectBeforeGuard(\n\t\"TeacherNodeDetail\",\n\t\"StudentNodeDetail\",\n);\n\nexport const courseTreeBeforeGuard = privilegedRouteWithRedirectBeforeGuard(\n\t\"TeacherCourseTree\",\n\t\"StudentCourseTree\",\n);\n\nexport const courseBeforeGuard = privilegedRouteWithRedirectBeforeGuard(\n\t\"TeacherCourseDashboard\",\n\t\"StudentCourseDashboard\",\n);\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { createRouter, createWebHistory, RouteRecordRaw } from \"vue-router\";\nimport MainTeacher from \"../views/teacher/MainTeacher.vue\";\nimport MainStudent from \"../views/student/MainStudent.vue\";\nimport CourseEnrollment from \"../views/student/CourseEnrollment.vue\";\nimport CourseList from \"../views/shared/CourseList.vue\";\nimport TeacherCourseDashboard from \"../views/teacher/CourseDashboard.vue\";\nimport StudentCourseDashboard from \"../views/student/CourseDashboard/Main.vue\";\nimport CourseDashBoardExamList from \"../views/student/CourseDashboard/ExamsList.vue\";\nimport CourseDashBoardPublicExamList from \"../views/student/CourseDashboard/PublicExamsList.vue\";\nimport CourseDashBoardPracticeSessionList from \"../views/student/CourseDashboard/PracticeList.vue\";\nimport CourseDashBoardExerciseThreadList from \"../views/student/CourseDashboard/ExerciseThreadList.vue\";\nimport FavoriteContentsList from \"../views/student/CourseDashboard/FavoriteContentsList.vue\";\n//import StudentCourseDashboard from \"../views/student/CourseDashboard.vue\";\nimport CourseExercises from \"../views/teacher/CourseExercises.vue\";\nimport CourseTree from \"../views/course_tree/CourseTree.vue\";\nimport NodeDetail from \"../views/course_tree/NodeDetail.vue\";\nimport CourseExams from \"../views/teacher/CourseExams.vue\";\nimport CourseInsights from \"../views/teacher/CourseInsights.vue\";\nimport CourseIntegrations from \"../views/teacher/CourseIntegrations.vue\";\nimport CoursePermissions from \"../views/teacher/CoursePermissions.vue\";\nimport EventEditor from \"../components/teacher/EventEditor/EventEditor.vue\";\nimport EventParticipationPage from \"../views/student/EventParticipationPage.vue\";\nimport EventParticipationFull from \"../views/shared/EventParticipationFull.vue\";\nimport ExamPreview from \"../views/student/ExamPreview.vue\";\nimport ExerciseSolutionThread from \"../views/student/ExerciseSolutionThread.vue\";\nimport EventParticipationsMonitor from \"../views/teacher/EventParticipationsMonitor.vue\";\nimport CourseExerciseSolutionThreads from \"../views/teacher/CourseExerciseSolutionThreads.vue\";\nimport DetailExerciseSolutionThreads from \"../views/teacher/DetailExerciseSolutionThreads.vue\";\nimport GamificationLeaderboard from \"../views/shared/GamificationLeaderboard.vue\";\nimport EventStats from \"../views/teacher/EventStats.vue\";\nimport Login from \"../views/Login.vue\";\nimport PageNotFound from \"../views/shared/PageNotFound.vue\";\nimport CourseCreationForm from \"../views/teacher/CourseCreationForm.vue\";\nimport {\n\tcourseDashboardSidebarOptions,\n\tcourseListSidebarOptions,\n\tstudentCourseListSidebarOptions,\n\tstudentDashboardSidebarOptions,\n} from \"@/navigation/sidebar\";\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport {\n\tcourseDashBoardBreadCrumbs,\n\tcourseTreeBreadCrumbs,\n\tcourseTreeNodeBreadCrumbs,\n\texamAssessmentBreadCrumbs,\n\texamParticipationBreadCrumbs,\n\texamsListBreadCrumbs,\n\texerciseSolutionThreadBreadCrumbs,\n\texerciseThreadsBreadCrumbs,\n\tleaderboardBreadCrumbs,\n\tpracticeParticipationBreadCrumbs,\n\tpracticeReviewBreadCrumbs,\n\tpracticesListBreadCrumbs,\n\tstudentFavoritesBreadCrumbs,\n\tsubmissionReviewBreadCrumbs,\n} from \"@/navigation/breadcrumbs\";\nimport {\n\texerciseSolutionThreadBeforeGuard,\n\tcourseTreeNodeDetailBeforeGuard,\n\tcourseTreeBeforeGuard,\n\tcourseBeforeGuard,\n\tcourseListBeforeGuard,\n} from \"./guards\";\nimport { useMetaStore } from \"@/stores/metaStore\";\n\nconst routes: Array = [\n\t{\n\t\tpath: \"/\",\n\t\tname: \"Main\",\n\t\tcomponent: MainStudent,\n\t\tredirect: { name: \"Login\" },\n\t\tmeta: {\n\t\t\trouteTitle: _(\"headings.login\"),\n\t\t\thideBreadcrumbs: true,\n\t\t},\n\t\tchildren: [\n\t\t\t{\n\t\t\t\tpath: \"/login\",\n\t\t\t\tname: \"Login\",\n\t\t\t\tcomponent: Login,\n\t\t\t},\n\t\t\t// TODO move CourseList here\n\t\t],\n\t},\n\t{\n\t\tpath: \"/threads/:courseId/:exerciseId/:solutionId\",\n\t\tname: \"ExerciseSolutionThreadDispatcher\",\n\t\tcomponent: MainStudent,\n\t\tbeforeEnter: exerciseSolutionThreadBeforeGuard,\n\t},\n\t{\n\t\tpath: \"/courses\",\n\t\tname: \"CourseListDispatcher\",\n\t\tcomponent: MainStudent,\n\t\tbeforeEnter: courseListBeforeGuard,\n\t},\n\t{\n\t\tpath: \"/courses/:courseId\",\n\t\tname: \"CourseDispatcher\",\n\t\tcomponent: MainStudent,\n\t\tbeforeEnter: courseBeforeGuard,\n\t},\n\t{\n\t\tpath: \"/courses/:courseId/material/:nodeId\",\n\t\tname: \"CourseTreeNodeDetailDispatcher\",\n\t\tcomponent: MainStudent,\n\t\tbeforeEnter: courseTreeNodeDetailBeforeGuard,\n\t},\n\t{\n\t\tpath: \"/courses/:courseId/material/\",\n\t\tname: \"CourseTreeDispatcher\",\n\t\tcomponent: MainStudent,\n\t\tbeforeEnter: courseTreeBeforeGuard,\n\t},\n\t{\n\t\tpath: \"/courses/:courseId/enrollment/\",\n\t\tname: \"CourseEnrollment\",\n\t\tcomponent: CourseEnrollment,\n\t},\n\t{\n\t\tpath: \"/teacher\",\n\t\tname: \"MainTeacher\",\n\t\tcomponent: MainTeacher,\n\t\tmeta: {\n\t\t\tteacherRoute: true,\n\t\t},\n\t\tredirect: { name: \"TeacherCourseList\" },\n\t\tchildren: [\n\t\t\t{\n\t\t\t\tpath: \"courses\",\n\t\t\t\tname: \"TeacherCourseList\",\n\t\t\t\tcomponent: CourseList,\n\t\t\t\tmeta: {\n\t\t\t\t\trequireTeacher: true,\n\t\t\t\t\trouteTitle: _(\"headings.course_list\"),\n\t\t\t\t\tsidebarOptions: courseListSidebarOptions,\n\t\t\t\t\ttags: [\"general\"],\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tpath: \"courses/create\",\n\t\t\t\tname: \"CourseCreationForm\",\n\t\t\t\tcomponent: CourseCreationForm,\n\t\t\t\tmeta: {\n\t\t\t\t\trequireTeacher: true,\n\t\t\t\t\trouteTitle: _(\"headings.new_course\"),\n\t\t\t\t\tsidebarOptions: courseListSidebarOptions,\n\t\t\t\t\ttags: [\"general\"],\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tpath: \"courses/:courseId\",\n\t\t\t\tname: \"TeacherCourseDashboard\",\n\t\t\t\tcomponent: TeacherCourseDashboard,\n\t\t\t\tmeta: {\n\t\t\t\t\trouteTitle: _(\"headings.course_dashboard\"),\n\t\t\t\t\tsidebarOptions: courseDashboardSidebarOptions,\n\t\t\t\t\ttags: [\"general\"],\n\t\t\t\t\tunprivilegedRedirect: \"StudentCourseDashboard\",\n\t\t\t\t},\n\t\t\t\tprops: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tpath: \"courses/:courseId/material\",\n\t\t\t\tname: \"TeacherCourseTree\",\n\t\t\t\tcomponent: CourseTree,\n\t\t\t\tmeta: {\n\t\t\t\t\trouteTitle: _(\"headings.course_tree\"),\n\t\t\t\t\tsidebarOptions: courseDashboardSidebarOptions,\n\t\t\t\t\ttags: [\"permissions\"],\n\t\t\t\t\t// redirect to student version of the route if an\n\t\t\t\t\t// unprivileged user tries to access this route\n\t\t\t\t\tunprivilegedRedirect: \"StudentCourseTree\",\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tpath: \"courses/:courseId/material/:nodeId\",\n\t\t\t\tname: \"TeacherNodeDetail\",\n\t\t\t\tcomponent: NodeDetail,\n\t\t\t\tmeta: {\n\t\t\t\t\t//routeTitle: _(\"headings.course_tree_node\"),\n\t\t\t\t\tsidebarOptions: courseDashboardSidebarOptions,\n\t\t\t\t\ttags: [\"permissions\"],\n\t\t\t\t\t// redirect to student version of the route if an\n\t\t\t\t\t// unprivileged user tries to access this route\n\t\t\t\t\tunprivilegedRedirect: \"StudentNodeDetail\",\n\t\t\t\t},\n\t\t\t},\n\t\t\t/* end course_tree */\n\t\t\t{\n\t\t\t\tpath: \"courses/:courseId/permissions\",\n\t\t\t\tname: \"CoursePermissions\",\n\t\t\t\tcomponent: CoursePermissions,\n\t\t\t\tmeta: {\n\t\t\t\t\trouteTitle: _(\"headings.course_permissions\"),\n\t\t\t\t\tsidebarOptions: courseDashboardSidebarOptions,\n\t\t\t\t\ttags: [\"permissions\"],\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tpath: \"courses/:courseId/insights\",\n\t\t\t\tname: \"CourseInsights\",\n\t\t\t\tcomponent: CourseInsights,\n\t\t\t\tmeta: {\n\t\t\t\t\trouteTitle: _(\"headings.course_insights\"),\n\t\t\t\t\tsidebarOptions: courseDashboardSidebarOptions,\n\t\t\t\t\ttags: [\"general\"],\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tpath: \"courses/:courseId/integrations\",\n\t\t\t\tname: \"CourseIntegrations\",\n\t\t\t\tcomponent: CourseIntegrations,\n\t\t\t\tmeta: {\n\t\t\t\t\trouteTitle: _(\"headings.course_integrations\"),\n\t\t\t\t\tsidebarOptions: courseDashboardSidebarOptions,\n\t\t\t\t\ttags: [\"general\"],\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tpath: \"courses/:courseId/exercises\",\n\t\t\t\tname: \"CourseExercises\",\n\t\t\t\tcomponent: CourseExercises,\n\t\t\t\tmeta: {\n\t\t\t\t\trouteTitle: _(\"headings.course_exercises\"),\n\t\t\t\t\tsidebarOptions: courseDashboardSidebarOptions,\n\t\t\t\t\ttags: [\"exercises\"],\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tpath: \"courses/:courseId/exams\",\n\t\t\t\tname: \"CourseExams\",\n\t\t\t\tcomponent: CourseExams,\n\t\t\t\tmeta: {\n\t\t\t\t\trouteTitle: _(\"headings.course_exams\"),\n\t\t\t\t\tsidebarOptions: courseDashboardSidebarOptions,\n\t\t\t\t\ttags: [\"exams\"],\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tpath: \"courses/:courseId/exams/:examId\",\n\t\t\t\tcomponent: EventEditor,\n\t\t\t\tname: \"ExamEditor\",\n\t\t\t\tmeta: {\n\t\t\t\t\tsidebarOptions: courseDashboardSidebarOptions,\n\t\t\t\t\ttags: [\"exams\", \"exercises\", \"editor\"],\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tpath: \"courses/:courseId/exams/:examId/progress\",\n\t\t\t\tcomponent: EventParticipationsMonitor,\n\t\t\t\tname: \"ExamProgress\",\n\t\t\t\tmeta: {\n\t\t\t\t\tsidebarOptions: courseDashboardSidebarOptions,\n\t\t\t\t\t//routeTitle: _(\"headings.exam_progress\"),\n\t\t\t\t\ttags: [\"exams\", \"participations\"],\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tpath: \"courses/:courseId/exams/:examId/results\",\n\t\t\t\tcomponent: EventParticipationsMonitor,\n\t\t\t\tname: \"ExamResults\",\n\t\t\t\tprops: {\n\t\t\t\t\trefreshData: false,\n\t\t\t\t\tallowEdit: true,\n\t\t\t\t},\n\t\t\t\tmeta: {\n\t\t\t\t\tsidebarOptions: courseDashboardSidebarOptions,\n\t\t\t\t\t// routeTitle: _(\"headings.exam_results\"),\n\t\t\t\t\ttags: [\"exams\", \"participations\"],\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tpath: \"courses/:courseId/exams/:examId/stats\",\n\t\t\t\tcomponent: EventStats,\n\t\t\t\tname: \"ExamStats\",\n\t\t\t\tmeta: {\n\t\t\t\t\tsidebarOptions: courseDashboardSidebarOptions,\n\t\t\t\t\t//routeTitle: _(\"headings.exam_results\"),\n\t\t\t\t\ttags: [\"exams\", \"participations\"],\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tpath: \"courses/:courseId/exams/:examId/participations/:participationId\",\n\t\t\t\tcomponent: EventParticipationFull,\n\t\t\t\tname: \"ExamParticipationFull\",\n\t\t\t\tmeta: {\n\t\t\t\t\t//routeTitle: _(\"headings.practice_summary\"),\n\t\t\t\t\tsidebarOptions: courseDashboardSidebarOptions,\n\t\t\t\t\ttags: [\"exams\", \"exercises\"],\n\t\t\t\t},\n\t\t\t\tprops: {\n\t\t\t\t\tshowAssessmentCard: true,\n\t\t\t\t\tallowEditAssessment: true,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tpath: \"courses/:courseId/threads/\",\n\t\t\t\tcomponent: CourseExerciseSolutionThreads,\n\t\t\t\tname: \"TeacherCourseExerciseSolutionThreads\",\n\t\t\t\tmeta: {\n\t\t\t\t\tsidebarOptions: courseDashboardSidebarOptions,\n\t\t\t\t\trouteTitle: _(\"headings.exercise_solution_threads\"),\n\t\t\t\t\ttags: [\"exercises\", \"threads\", \"solutions\"],\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tpath: \"courses/:courseId/threads/:exerciseId/:solutionId?\",\n\t\t\t\tcomponent: DetailExerciseSolutionThreads,\n\t\t\t\tname: \"TeacherDetailExerciseSolutionThreads\",\n\t\t\t\tmeta: {\n\t\t\t\t\tsidebarOptions: courseDashboardSidebarOptions,\n\t\t\t\t\trouteTitle: _(\"headings.exercise_solution_thread_detail\"),\n\t\t\t\t\ttags: [\"exercises\", \"threads\", \"solutions\"],\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\tpath: \"/student\",\n\t\tname: \"MainStudent\",\n\t\tcomponent: MainStudent,\n\t\tredirect: { name: \"StudentCourseList\" },\n\t\tchildren: [\n\t\t\t{\n\t\t\t\tpath: \"courses\",\n\t\t\t\tname: \"StudentCourseList\",\n\t\t\t\tcomponent: CourseList,\n\t\t\t\tmeta: {\n\t\t\t\t\trouteTitle: _(\"headings.course_list\"),\n\t\t\t\t\thideBreadcrumbs: true,\n\t\t\t\t\tsidebarOptions: studentCourseListSidebarOptions,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tpath: \"courses/:courseId\",\n\t\t\t\tname: \"StudentCourseDashboard\",\n\t\t\t\tcomponent: StudentCourseDashboard,\n\t\t\t\tmeta: {\n\t\t\t\t\trouteTitle: _(\"headings.course_title\"),\n\t\t\t\t\tbreadcrumbs: courseDashBoardBreadCrumbs,\n\t\t\t\t\thideUserInfoFromNav: true,\n\t\t\t\t\tsidebarOptions: studentDashboardSidebarOptions,\n\t\t\t\t},\n\t\t\t\tredirect: { name: \"CourseDashBoardPracticeSessionList\" },\n\t\t\t\tchildren: [\n\t\t\t\t\t{\n\t\t\t\t\t\tpath: \"exams\",\n\t\t\t\t\t\tname: \"CourseDashBoardExamList\",\n\t\t\t\t\t\tcomponent: CourseDashBoardExamList,\n\t\t\t\t\t\tmeta: {\n\t\t\t\t\t\t\trouteTitle: _(\"student_course_dashboard.exams_you_participated_in\"),\n\t\t\t\t\t\t\tbreadcrumbs: examsListBreadCrumbs,\n\t\t\t\t\t\t\tsidebarOptions: studentDashboardSidebarOptions,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t// TODO add public exams & rename the above route to My Exams\n\t\t\t\t\t{\n\t\t\t\t\t\t// TODO make path name configurable\n\t\t\t\t\t\tpath: \"public_exams\",\n\t\t\t\t\t\tname: \"PublicExamsList\",\n\t\t\t\t\t\tcomponent: CourseDashBoardPublicExamList,\n\t\t\t\t\t\tmeta: {\n\t\t\t\t\t\t\trouteTitle: _(\"student_course_dashboard.public_exams\"),\n\t\t\t\t\t\t\tbreadcrumbs: examsListBreadCrumbs,\n\t\t\t\t\t\t\tsidebarOptions: studentDashboardSidebarOptions,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tpath: \"practices\",\n\t\t\t\t\t\tname: \"CourseDashBoardPracticeSessionList\",\n\t\t\t\t\t\tcomponent: CourseDashBoardPracticeSessionList,\n\t\t\t\t\t\tmeta: {\n\t\t\t\t\t\t\trouteTitle: _(\"student_course_dashboard.your_practice_events\"),\n\t\t\t\t\t\t\tbreadcrumbs: practicesListBreadCrumbs,\n\t\t\t\t\t\t\tsidebarOptions: studentDashboardSidebarOptions,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tpath: \"threads\",\n\t\t\t\t\t\tname: \"CourseDashBoardExerciseThreadList\",\n\t\t\t\t\t\tcomponent: CourseDashBoardExerciseThreadList,\n\t\t\t\t\t\tmeta: {\n\t\t\t\t\t\t\trouteTitle: _(\"headings.student_exercise_solution_threads\"),\n\t\t\t\t\t\t\tbreadcrumbs: exerciseThreadsBreadCrumbs,\n\t\t\t\t\t\t\tsidebarOptions: studentDashboardSidebarOptions,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tpath: \"leaderboard\",\n\t\t\t\t\t\tname: \"StudentCourseLeaderboard\",\n\t\t\t\t\t\tcomponent: GamificationLeaderboard,\n\t\t\t\t\t\tmeta: {\n\t\t\t\t\t\t\trouteTitle: _(\"headings.student_course_leaderboard\"),\n\t\t\t\t\t\t\tbreadcrumbs: leaderboardBreadCrumbs,\n\t\t\t\t\t\t\tsidebarOptions: studentDashboardSidebarOptions,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tpath: \"favorites\",\n\t\t\t\t\t\tname: \"StudentFavorites\",\n\t\t\t\t\t\tcomponent: FavoriteContentsList,\n\t\t\t\t\t\tmeta: {\n\t\t\t\t\t\t\trouteTitle: _(\"headings.student_favorites\"),\n\t\t\t\t\t\t\tbreadcrumbs: studentFavoritesBreadCrumbs,\n\t\t\t\t\t\t\tsidebarOptions: studentDashboardSidebarOptions,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tpath: \"material\",\n\t\t\t\t\t\tname: \"StudentCourseTree\",\n\t\t\t\t\t\tcomponent: CourseTree,\n\t\t\t\t\t\tmeta: {\n\t\t\t\t\t\t\t// routeTitle: _(\"headings.student_favorites\"),\n\t\t\t\t\t\t\tbreadcrumbs: courseTreeBreadCrumbs,\n\t\t\t\t\t\t\tsidebarOptions: studentDashboardSidebarOptions,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tpath: \"material/:nodeId\",\n\t\t\t\t\t\tname: \"StudentNodeDetail\",\n\t\t\t\t\t\tcomponent: NodeDetail,\n\t\t\t\t\t\tmeta: {\n\t\t\t\t\t\t\t// routeTitle: _(\"headings.student_favorites\"),\n\t\t\t\t\t\t\tbreadcrumbs: courseTreeNodeBreadCrumbs,\n\t\t\t\t\t\t\tsidebarOptions: studentDashboardSidebarOptions,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tpath: \"threads/:exerciseId/:solutionId?\",\n\t\t\t\t\t\tname: \"ExerciseSolutionThread\",\n\t\t\t\t\t\tcomponent: ExerciseSolutionThread,\n\t\t\t\t\t\tmeta: {\n\t\t\t\t\t\t\trouteTitle: _(\"headings.student_exercise_solution_thread\"),\n\t\t\t\t\t\t\tbreadcrumbs: exerciseSolutionThreadBreadCrumbs,\n\t\t\t\t\t\t\tsidebarOptions: studentDashboardSidebarOptions,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tpath: \"courses/:courseId/exams/:examId\",\n\t\t\t\tcomponent: ExamPreview,\n\t\t\t\tname: \"ExamParticipationPreview\",\n\t\t\t\tmeta: {\n\t\t\t\t\trouteTitle: _(\"headings.exam_preview\"),\n\t\t\t\t\tbreadcrumbs: examParticipationBreadCrumbs,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tpath: \"courses/:courseId/exams/:examId/participate\",\n\t\t\t\tcomponent: EventParticipationPage,\n\t\t\t\tname: \"ExamParticipationPage\",\n\t\t\t\tmeta: {\n\t\t\t\t\trouteTitle: _(\"headings.ongoing_exam\"),\n\t\t\t\t\tbreadcrumbs: examParticipationBreadCrumbs,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tpath: \"courses/:courseId/practice/:examId\",\n\t\t\t\tcomponent: EventParticipationPage,\n\t\t\t\tname: \"PracticeParticipationPage\",\n\t\t\t\tmeta: {\n\t\t\t\t\trouteTitle: _(\"headings.ongoing_practice\"),\n\t\t\t\t\tbreadcrumbs: practiceParticipationBreadCrumbs,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tpath: \"courses/:courseId/exams/:examId/review/:participationId/:showSubmissionConfirmationMessage?\",\n\t\t\t\tcomponent: EventParticipationFull,\n\t\t\t\tname: \"SubmissionReviewPage\",\n\t\t\t\tmeta: {\n\t\t\t\t\trouteTitle: _(\"headings.review_submission\"),\n\t\t\t\t\tbreadcrumbs: submissionReviewBreadCrumbs,\n\t\t\t\t},\n\t\t\t\tprops: {\n\t\t\t\t\tshowSolutionAndScores: false,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tpath: \"courses/:courseId/exams/:examId/assessment/:participationId\",\n\t\t\t\tcomponent: EventParticipationFull,\n\t\t\t\tname: \"AssessmentReviewPage\",\n\t\t\t\tmeta: {\n\t\t\t\t\trouteTitle: _(\"headings.review_assessment\"),\n\t\t\t\t\tbreadcrumbs: examAssessmentBreadCrumbs,\n\t\t\t\t},\n\t\t\t\tprops: {\n\t\t\t\t\tshowAssessmentCard: true,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tpath: \"courses/:courseId/practice/:examId/summary/:participationId\",\n\t\t\t\tcomponent: EventParticipationFull,\n\t\t\t\tname: \"PracticeSummaryPage\",\n\t\t\t\tmeta: {\n\t\t\t\t\trouteTitle: _(\"headings.practice_summary\"),\n\t\t\t\t\tbreadcrumbs: practiceReviewBreadCrumbs,\n\t\t\t\t},\n\t\t\t\tprops: {\n\t\t\t\t\tshowAssessmentCard: true,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tpath: \"/:catchAll(.*)\",\n\t\t\t\tcomponent: PageNotFound,\n\t\t\t},\n\t\t],\n\t},\n];\n\nconst router = createRouter({\n\tscrollBehavior(to, from, savedPosition) {\n\t\t// always scroll to top\n\t\treturn { top: 0 };\n\t},\n\thistory: createWebHistory(process.env.BASE_URL),\n\troutes,\n});\n\n// router.beforeEach((to, from, next) => {\n// \tconsole.log({ to, from });\n// \tnext();\n// });\n\nrouter.beforeEach((to, from, next) => {\n\tconst metaStore = useMetaStore();\n\tif (metaStore.unsavedChanges) {\n\t\tif (!confirm(_(\"misc.confirm_exiting_unsaved_changes\"))) {\n\t\t\treturn false;\n\t\t} else {\n\t\t\tmetaStore.saving = false;\n\t\t\tmetaStore.savingError = false;\n\t\t}\n\t}\n\tif (!metaStore.isAuthenticated && to.name !== \"Login\") {\n\t\tnext({ name: \"Login\", query: { redirect: to.fullPath } });\n\t} else if (to.meta.requireTeacher && !metaStore.user.is_teacher) {\n\t\tconst DEFAULT_UNPRIVILEGED_REDIRECT_ROUTE = \"StudentCourseList\";\n\t\tconst redirectRoute = to.meta.unprivilegedRedirect as string | undefined;\n\t\tnext({ name: redirectRoute ?? DEFAULT_UNPRIVILEGED_REDIRECT_ROUTE });\n\t} else {\n\t\tnext();\n\t}\n});\n\nrouter.afterEach(() => {\n\tconst metaStore = useMetaStore();\n\tmetaStore.pageWideErrorData = null;\n});\n\nexport default router;\n","import { mapStores } from \"pinia\";\nimport { downloadFileNode } from \"./api\";\nimport { getCourseTreeNodeRoute } from \"./components/shared/ExerciseSolution/utils\";\nimport { getTranslatedString as _ } from \"./i18n\";\nimport { DialogData } from \"./interfaces\";\nimport { Course, CourseFeature, CoursePrivilege, getBlankCourse } from \"./models\";\nimport router from \"./router\";\nimport { useMainStore } from \"./stores/mainStore\";\nimport { useMetaStore } from \"./stores/metaStore\";\nimport { arraybufferToBase64, setErrorNotification, setPageWideError } from \"./utils\";\nimport { v4 as uuid4 } from \"uuid\";\nimport { debounce } from \"lodash\";\n\nexport const courseIdMixin = {\n\tcomputed: {\n\t\tcourseId(): string {\n\t\t\treturn router.currentRoute.value.params.courseId as string;\n\t\t},\n\t\tcurrentCourse(): Course {\n\t\t\tconst mainStore = useMainStore();\n\t\t\treturn mainStore.getCourseById(this.courseId as any as string) ?? getBlankCourse();\n\t\t},\n\t},\n};\n\nexport const nodeMixin = {\n\tcomputed: {\n\t\tpermalink() {\n\t\t\treturn (\n\t\t\t\twindow.location.origin +\n\t\t\t\trouter.resolve(\n\t\t\t\t\tgetCourseTreeNodeRoute((this as any).courseId, (this as any).node.id),\n\t\t\t\t).fullPath\n\t\t\t);\n\t\t},\n\t},\n};\n\nexport const fileViewerMixin = {\n\tdata() {\n\t\treturn {\n\t\t\tdownloading: false,\n\t\t\tsource: \"\",\n\t\t\tarrayBufferSource: null as null | ArrayBuffer,\n\t\t};\n\t},\n\tmethods: {\n\t\tasync downloadNodeFile() {\n\t\t\tconst self = this as any;\n\t\t\tself.downloading = true;\n\t\t\tconst fileArrayBuffer = await downloadFileNode(self.url, e =>\n\t\t\t\tself.onDownloadProgress?.(e),\n\t\t\t);\n\t\t\tself.source = arraybufferToBase64(fileArrayBuffer);\n\t\t\tself.arrayBufferSource = fileArrayBuffer;\n\t\t\tself.downloading = false;\n\t\t},\n\t},\n};\n\nexport const nodeIdMixin = {\n\tcomputed: {\n\t\tnodeId(): string {\n\t\t\treturn router.currentRoute.value.params.nodeId as string;\n\t\t},\n\t},\n};\n\nexport const eventIdMixin = {\n\tcomputed: {\n\t\t...mapStores(useMainStore),\n\t\teventId(): string {\n\t\t\treturn router.currentRoute.value.params.examId as string;\n\t\t},\n\t\tcurrentEvent(): string {\n\t\t\treturn (this.mainStore as any).currentEventParticipation?.event?.name ?? \"\";\n\t\t},\n\t\tpreviewingEvent(): string {\n\t\t\treturn (this.mainStore as any).previewingEvent?.name ?? \"\";\n\t\t},\n\t},\n};\n\nexport const texMixin = {\n\tmethods: {\n\t\ttriggerTexRender() {\n\t\t\tconst metaStore = useMetaStore();\n\t\t\tmetaStore.dirtyTex = true;\n\t\t},\n\t},\n};\n\nexport const blockingDialogMixin = {\n\tdata() {\n\t\treturn {\n\t\t\tblockingDialogData: null as null | DialogData,\n\t\t\tshowBlockingDialog: false,\n\t\t\tblockingDialogPromise: null as null | Promise,\n\t\t\tresolveBlockingDialog: null as null | ((boolean) => void),\n\t\t\trejectBlockingDialog: null as null | ((e: any) => void),\n\t\t};\n\t},\n\tmethods: {\n\t\tasync getBlockingBinaryDialogChoice(): Promise {\n\t\t\tconst self = this as any; // temporary workaround to prevent type errors\n\n\t\t\tself.showBlockingDialog = true;\n\n\t\t\tself.blockingDialogPromise = new Promise((resolve, reject) => {\n\t\t\t\tself.resolveBlockingDialog = resolve;\n\t\t\t\tself.rejectBlockingDialog = reject;\n\t\t\t});\n\t\t\tconst choice = await self.blockingDialogPromise;\n\n\t\t\t//self.showBlockingDialog = false;\n\t\t\treturn choice;\n\t\t},\n\t},\n};\n\nexport const mediaQueryMixin = {\n\tcomputed: {\n\t\tmediaQueryMdMatches(): boolean {\n\t\t\tconst mq = window.matchMedia(\"(min-width: 768px)\");\n\t\t\treturn mq.matches;\n\t\t},\n\t},\n};\n\nexport const adComponentMixin = {\n\tdata() {\n\t\treturn {\n\t\t\tads1Code: \"\",\n\t\t\tads2Code: \"\",\n\t\t\tads3Code: \"\",\n\t\t\tadsMobileCode: \"\",\n\t\t};\n\t},\n\t// mounted() {\n\t// \tconst includeAds = JSON.parse(process.env.VUE_APP_ENABLE_ADS ?? \"true\");\n\t// \tif (!includeAds) {\n\t// \t\treturn;\n\t// \t}\n\t// \t// ugly trick to get rid of type errors\n\t// \tconst self = this as any;\n\t// \tself.ads1Code = document.getElementById(\"ads-div-hidden-1\")?.innerHTML ?? \"\";\n\t// \tself.ads2Code = document.getElementById(\"ads-div-hidden-2\")?.innerHTML ?? \"\";\n\t// \tself.ads3Code = document.getElementById(\"ads-div-hidden-3\")?.innerHTML ?? \"\";\n\t// \tself.adsMobileCode =\n\t// \t\tdocument.getElementById(\"ads-div-hidden-mobile\")?.innerHTML ?? \"\";\n\t// },\n};\n\nexport const loadingMixin = {\n\tmethods: {\n\t\tasync withLoading(\n\t\t\tcallback: () => unknown,\n\t\t\tonError?: (e?: unknown) => unknown,\n\t\t\tonSuccess?: () => void,\n\t\t) {\n\t\t\t(this as any).metaStore.loading = true;\n\t\t\ttry {\n\t\t\t\tconst ret = await callback();\n\t\t\t\t(this as any).metaStore.dirtyTex = true; // trigger tex rendering\n\t\t\t\tonSuccess?.();\n\t\t\t\treturn ret;\n\t\t\t} catch (e) {\n\t\t\t\tonError?.(e);\n\t\t\t} finally {\n\t\t\t\t(this as any).metaStore.loading = false;\n\t\t\t}\n\t\t},\n\t\tasync withFirstLoading(callback: () => unknown, onError = setPageWideError) {\n\t\t\t(this as any).metaStore.firstLoading = true;\n\n\t\t\ttry {\n\t\t\t\tconst ret = await callback();\n\t\t\t\t(this as any).metaStore.dirtyTex = true; // trigger tex rendering\n\t\t\t\treturn ret;\n\t\t\t} catch (e: any) {\n\t\t\t\tonError?.(e);\n\t\t\t} finally {\n\t\t\t\t(this as any).metaStore.firstLoading = false;\n\t\t\t}\n\t\t},\n\t\tasync withLocalLoading(callback: () => unknown, onError = setErrorNotification) {\n\t\t\t(this as any).metaStore.localLoading = true;\n\t\t\ttry {\n\t\t\t\tconst ret = await callback();\n\t\t\t\t(this as any).metaStore.dirtyTex = true; // trigger tex rendering\n\t\t\t\treturn ret;\n\t\t\t} catch (e: any) {\n\t\t\t\tonError?.(e);\n\t\t\t} finally {\n\t\t\t\t(this as any).metaStore.localLoading = false;\n\t\t\t}\n\t\t},\n\t\t// setPageWideError,\n\t\t// setErrorNotification,\n\t},\n\tcomputed: {\n\t\t...mapStores(useMetaStore),\n\t\tloading() {\n\t\t\treturn (this.metaStore as any).loading;\n\t\t},\n\t\tlocalLoading() {\n\t\t\treturn (this.metaStore as any).localLoading;\n\t\t},\n\t\tfirstLoading() {\n\t\t\treturn (this.metaStore as any).firstLoading;\n\t\t},\n\t},\n};\n\nexport const savingMixin = {\n\twatch: {\n\t\tsaving(newVal: boolean) {\n\t\t\t/* TODO this will give problems with multiple saving components\n\t\t\tat the same time: use a counter instead; increment it when newVal\n\t\t\tis true, decrement it when it's false\n\t\t\t*/\n\t\t\tuseMetaStore().saving = newVal;\n\t\t},\n\t\tsavingError(newVal: boolean) {\n\t\t\tuseMetaStore().savingError = newVal;\n\t\t},\n\t},\n};\n\nexport const scrollMixin = {\n\tmounted() {\n\t\tconst self = this as any;\n\t\tself.element = document.getElementById(self.scrollableElementId);\n\t\t// debounce(self.onScroll, 30)\n\t\tself.element?.addEventListener(\n\t\t\t\"scroll\",\n\t\t\tdebounce(self.onScroll, 50, {\n\t\t\t\tmaxWait: 70,\n\t\t\t\tleading: true,\n\t\t\t}),\n\t\t\t{\n\t\t\t\tpassive: true,\n\t\t\t},\n\t\t);\n\t\tself.onScroll();\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tfromTop: 0,\n\t\t\tscrollableElementId: uuid4(),\n\t\t\telement: null as null | HTMLElement,\n\t\t};\n\t},\n\tmethods: {\n\t\tonScroll() {\n\t\t\tconst self = this as any;\n\t\t\tconst el = self.element as HTMLElement;\n\t\t\t// self.isScrollable =\n\t\t\t// \tel.scrollHeight > el.clientHeight &&\n\t\t\t// \t[\"scroll\", \"auto\"].indexOf(getComputedStyle(el).overflowX) >= 0;\n\t\t\t// self.atEndX =\n\t\t\t// \t!self.isScrollable || -(el.scrollLeft + el.clientWidth) + el.scrollWidth <= 1;\n\t\t\t// self.atBeginX = el.scrollLeft === 0;\n\t\t\tself.fromTop = el.scrollTop;\n\t\t\t//console.log(\"FROM TOP\", self.fromTop)\n\t\t},\n\t},\n\tcomputed: {\n\t\tisAtTop() {\n\t\t\tconst self = this as any;\n\t\t\treturn self.fromTop === 0;\n\t\t},\n\t\tfromBottom() {\n\t\t\tconst self = this as any;\n\t\t\tconst el = self.element as HTMLElement;\n\t\t\treturn el.scrollHeight - self.fromTop;\n\t\t},\n\t},\n};\n\nexport const courseFeatureMixin = {\n\tmethods: {\n\t\thasFeatures(features: CourseFeature[] | undefined) {\n\t\t\tconst self = this as any;\n\t\t\tif (!self.currentCourse) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn (features ?? []).every(f => (self.currentCourse.features ?? {})[f]);\n\t\t},\n\t},\n};\n\nexport const coursePrivilegeMixin = {\n\tmethods: {\n\t\thasPrivileges(requiredPrivilegesList: CoursePrivilege[]) {\n\t\t\t/**\n\t\t\t * Given a list of required privileges, returns true iff the current\n\t\t\t * user has such privileges for the current course\n\t\t\t */\n\t\t\tconst myPrivileges = (this as any).userCoursePrivileges;\n\t\t\treturn requiredPrivilegesList.every(p => myPrivileges.includes(p));\n\t\t},\n\t\thasAnyPrivileges() {\n\t\t\tconst myPrivileges = (this as any).userCoursePrivileges;\n\t\t\treturn myPrivileges.length > 0;\n\t\t},\n\t},\n\tcomputed: {\n\t\tuserCoursePrivileges() {\n\t\t\treturn (\n\t\t\t\tuseMainStore().getCourseById(router.currentRoute.value.params.courseId as string)\n\t\t\t\t\t?.privileges ?? []\n\t\t\t);\n\t\t},\n\t},\n};\n","import { normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, renderSlot as _renderSlot, normalizeStyle as _normalizeStyle, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = [\"id\"]\nconst _hoisted_2 = { class: \"flex items-center w-full px-4 pt-3\" }\nconst _hoisted_3 = { class: \"mb-0\" }\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined\" }, \"close\", -1)\nconst _hoisted_5 = { class: \"px-4 pb-4\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n ref: \"draggableContainer\",\n id: _ctx.containerId + '-draggable-container',\n style: _normalizeStyle(\n\t\t\t'box-shadow: 0 1px 3px 0 rgb(60 64 67 / 30%), 0 4px 8px 3px rgb(60 64 67 / 15%);top: ' +\n\t\t\t_ctx.initialTop +\n\t\t\t'px;left: ' +\n\t\t\t_ctx.initialLeft +\n\t\t\t'%;z-index: ' +\n\t\t\t(_ctx.inForeground ? '99999' : '200')\n\t\t),\n class: _normalizeClass([\"fixed w-11/12 p-2 overflow-y-auto transition-opacity duration-75 card hover:opacity-100\", {\n\t\t\t'opacity-80': !_ctx.opaque,\n\t\t\t'bg-light': !_ctx.whiteBg,\n\t\t\t'bg-white': _ctx.whiteBg,\n\t\t\t'md:w-2/5': !_ctx.large,\n\t\t\t'md:w-3/5': _ctx.large,\n\t\t\tresize: _ctx.resizable,\n\t\t}])\n }, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"absolute w-full cursor-move\", [_ctx.dragOnTitleOnly ? 'h-18' : 'h-full']]),\n onMousedown: _cache[0] || (_cache[0] = \n//@ts-ignore\n(...args) => (_ctx.dragMouseDown && _ctx.dragMouseDown(...args)))\n }, null, 34),\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"h2\", _hoisted_3, _toDisplayString(_ctx.title), 1),\n _createVNode(_component_Btn, {\n tooltip: _ctx.$t('misc.close'),\n variant: 'icon',\n outline: true,\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$emit('close'))),\n class: \"z-30 ml-auto\"\n }, {\n default: _withCtx(() => [\n _hoisted_4\n ]),\n _: 1\n }, 8, [\"tooltip\"])\n ]),\n _createElementVNode(\"div\", _hoisted_5, [\n _renderSlot(_ctx.$slots, \"default\")\n ])\n ], 14, _hoisted_1))\n}","\nimport { texMixin } from \"@/mixins\";\nimport { v4 as uuid4 } from \"uuid\";\nimport { defineComponent } from \"vue\";\nimport Btn from \"./Btn.vue\";\n\nexport default defineComponent({\n\tname: \"DraggablePopup\",\n\tprops: {\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\tdefault: \"\",\n\t\t},\n\t\twhiteBg: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tdragOnTitleOnly: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tinitialTop: {\n\t\t\ttype: Number,\n\t\t\tdefault: -30,\n\t\t},\n\t\tinitialLeft: {\n\t\t\ttype: Number,\n\t\t\tdefault: 63,\n\t\t},\n\t\tinForeground: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\topaque: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tresizable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tlarge: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tmounted() {\n\t\t// keep draggable area in sync with actual scroll width and height of the popup\n\t\tsetInterval(() => {\n\t\t\tconst container = document.getElementById(\n\t\t\t\tthis.containerId + \"-draggable-container\",\n\t\t\t);\n\t\t\tif (container) {\n\t\t\t\tthis.overlayHeight = container.scrollHeight - 10;\n\t\t\t\tthis.overlayWidth = container.scrollWidth - 10;\n\t\t\t}\n\t\t}, 10000);\n\t},\n\tdata() {\n\t\treturn {\n\t\t\toverlayHeight: 0,\n\t\t\toverlayWidth: 0,\n\t\t\tpositions: {\n\t\t\t\tclientX: 0,\n\t\t\t\tclientY: 0,\n\t\t\t\tmovementX: 0,\n\t\t\t\tmovementY: 0,\n\t\t\t},\n\t\t\tcontainerId: uuid4(),\n\t\t};\n\t},\n\tmethods: {\n\t\tdragMouseDown: function (event: any) {\n\t\t\tevent.preventDefault();\n\t\t\t// get the mouse cursor position at startup:\n\t\t\tthis.positions.clientX = event.clientX;\n\t\t\tthis.positions.clientY = event.clientY;\n\t\t\tdocument.onmousemove = this.elementDrag;\n\t\t\tdocument.onmouseup = this.closeDragElement;\n\t\t},\n\t\telementDrag: function (event: any) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.positions.movementX = (this.positions?.clientX ?? 0) - event.clientX;\n\t\t\tthis.positions.movementY = (this.positions?.clientY ?? 0) - event.clientY;\n\t\t\tthis.positions.clientX = event.clientX;\n\t\t\tthis.positions.clientY = event.clientY;\n\t\t\tconst maxX = window.innerWidth;\n\t\t\tconst maxY = window.innerHeight;\n\t\t\t// prevent scrolling past the top or left of the parent element\n\t\t\tconst resX = Math.max(\n\t\t\t\t(this.$refs.draggableContainer as any).offsetLeft - this.positions.movementX,\n\t\t\t\t-100,\n\t\t\t);\n\t\t\tconst resY = Math.max(\n\t\t\t\t(this.$refs.draggableContainer as any).offsetTop - this.positions.movementY,\n\t\t\t\t-200,\n\t\t\t);\n\t\t\tconst popup = document.getElementById(this.containerId + \"-draggable-container\");\n\t\t\tconst popupW = popup?.offsetWidth ?? 0;\n\t\t\tconst popupH = popup?.offsetHeight ?? 0;\n\t\t\t// set the element's new position:\n\t\t\t// prevent scrolling out of page from the right or bottom\n\t\t\t(this.$refs.draggableContainer as any).style.top =\n\t\t\t\t// (true || resY < maxY - popupH ? resY : maxY - popupH)\n\t\t\t\tresY + \"px\";\n\t\t\t(this.$refs.draggableContainer as any).style.left =\n\t\t\t\t//(true || resX < maxX - popupW ? resX : maxX - popupW)\n\t\t\t\tresX + \"px\";\n\t\t},\n\t\tcloseDragElement() {\n\t\t\tdocument.onmouseup = null;\n\t\t\tdocument.onmousemove = null;\n\t\t},\n\t\tresize() {\n\t\t\tconsole.log(\"resizing\");\n\t\t},\n\t},\n\tcomputed: {\n\t\toverlayStyle() {\n\t\t\treturn `width: ${this.overlayWidth}px; height: ${this.overlayHeight}px;`;\n\t\t},\n\t},\n\tcomponents: { Btn },\n});\n","import { render } from \"./DraggablePopup.vue?vue&type=template&id=15686088&ts=true\"\nimport script from \"./DraggablePopup.vue?vue&type=script&lang=ts\"\nexport * from \"./DraggablePopup.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","module.exports = \"data:image/png;base64,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\"","import {\n\taggregateExerciseSolutionThreads,\n\tconvertPaginatedResponseToLocalPaginatedData,\n\tnormalizeIncomingExercise,\n\tnormalizeIncomingExerciseChoice,\n} from \"./converters\";\n/* eslint-disable no-constant-condition */\nimport {\n\tCodeExecutionResults,\n\tExercise,\n\tExerciseChoice,\n\tExerciseSolutionComment,\n\tVoteType,\n\tExerciseSolution,\n\tExerciseTestCase,\n\tExerciseSolutionVote,\n\tExerciseSolutionState,\n\tExerciseTestCaseAttachment,\n} from \"@/models\";\nimport axios from \"axios\";\nimport {\n\tBackendPaginatedResponse,\n\tExerciseSearchFilter,\n\tExerciseSolutionSearchFilter,\n\tPaginatedData,\n} from \"./interfaces\";\nimport { getExerciseSolutionUrlQueryParams, getExerciseUrlQueryParams } from \"./utils\";\n\n// export async function getExercises(\n// courseId: string\n// ): Promise {\n// const response = await axios.get(`/courses/${courseId}/exercises/`);\n// return response.data;\n// }\n\nexport async function getExercises(\n\tcourseId: string,\n\tpageNumber: number,\n\tfilter: ExerciseSearchFilter | null,\n\tsize?: number,\n): Promise> {\n\tconst filterUrlQuery = getExerciseUrlQueryParams(filter);\n\tconst response = await axios.get(\n\t\t`/courses/${courseId}/exercises/?page=${pageNumber}${\n\t\t\tsize ? `&size=${size}` : \"\"\n\t\t}${filterUrlQuery}`,\n\t);\n\tconst normalizedResponseData = {\n\t\t...(response.data as BackendPaginatedResponse),\n\t\tresults: (response.data.results as Exercise[]).map(e => normalizeIncomingExercise(e)),\n\t};\n\n\treturn convertPaginatedResponseToLocalPaginatedData(normalizedResponseData, pageNumber);\n}\n\nexport async function exportCourseExercises(\n\tcourseId: string,\n): Promise> {\n\tconst response = await axios.get(\n\t\t`/courses/${courseId}/exercises/export/?page=1&size=9999999999`,\n\t);\n\tconst normalizedResponseData = {\n\t\t...(response.data as BackendPaginatedResponse),\n\t\tresults: (response.data.results as Exercise[]).map(e => normalizeIncomingExercise(e)),\n\t};\n\n\treturn convertPaginatedResponseToLocalPaginatedData(normalizedResponseData, 1);\n}\n\nexport async function lockExercise(\n\tcourseId: string,\n\texerciseId: string,\n): Promise {\n\tconst response = await axios.post(`/courses/${courseId}/exercises/${exerciseId}/lock/`);\n\treturn normalizeIncomingExercise(response.data);\n}\n\nexport async function unlockExercise(\n\tcourseId: string,\n\texerciseId: string,\n): Promise {\n\tconst response = await axios.post(\n\t\t`/courses/${courseId}/exercises/${exerciseId}/unlock/`,\n\t);\n\treturn response.data;\n}\n\nexport async function heartbeatExercise(\n\tcourseId: string,\n\texerciseId: string,\n): Promise {\n\tconst response = await axios.post(\n\t\t`/courses/${courseId}/exercises/${exerciseId}/heartbeat/`,\n\t);\n\treturn response.data;\n}\n\nexport async function getExercisesById(\n\tcourseId: string,\n\texerciseIds: string[],\n): Promise {\n\tconst url = `/courses/${courseId}/exercises/bulk_get/?ids=${exerciseIds.join(\",\")}`;\n\tconst response = await axios.get(url);\n\treturn response.data.map((e: Exercise) => normalizeIncomingExercise(e));\n}\n\nexport async function addTagToExercise(\n\tcourseId: string,\n\texerciseId: string,\n\ttag: string,\n\tisPublic: boolean,\n): Promise {\n\tawait axios.put(`/courses/${courseId}/exercises/${exerciseId}/tags/`, {\n\t\ttag,\n\t\tpublic: isPublic,\n\t});\n}\n\nexport async function removeTagFromExercise(\n\tcourseId: string,\n\texerciseId: string,\n\ttag: string,\n\tisPublic: boolean,\n): Promise {\n\tawait axios.delete(`/courses/${courseId}/exercises/${exerciseId}/tags/`, {\n\t\tdata: { tag, public: isPublic },\n\t});\n}\n\nexport async function createExercise(\n\tcourseId: string,\n\texercise: Exercise,\n): Promise {\n\tconst response = await axios.post(`courses/${courseId}/exercises/`, exercise);\n\treturn normalizeIncomingExercise(response.data);\n}\n\nexport async function bulkCreateExercises(\n\tcourseId: string,\n\texercises: Exercise[],\n): Promise {\n\tconst response = await axios.post(`courses/${courseId}/exercises/`, exercises);\n\treturn response.data.map((e: Exercise) => normalizeIncomingExercise(e));\n}\n\nexport async function updateExercise(\n\tcourseId: string,\n\texerciseId: string,\n\texercise: Exercise,\n): Promise {\n\tconst response = await axios.put(\n\t\t`courses/${courseId}/exercises/${exerciseId}/`,\n\t\texercise,\n\t);\n\treturn normalizeIncomingExercise(response.data);\n}\n\nexport async function testProgrammingExerciseSolution(\n\tcourseId: string,\n\texerciseId: string,\n): Promise> {\n\tconst response = await axios.post(\n\t\t`courses/${courseId}/exercises/${exerciseId}/solution_execution_results/`,\n\t);\n\treturn response.data;\n}\n\nexport async function deleteExercise(\n\tcourseId: string,\n\texerciseId: string,\n): Promise {\n\tconst response = await axios.delete(`/courses/${courseId}/exercises/${exerciseId}/`);\n\treturn response.data;\n}\n\nexport async function getExerciseChoices(\n\tcourseId: string,\n\texerciseId: string,\n): Promise {\n\tconst response = await axios.get(\n\t\t`/courses/${courseId}/exercises/${exerciseId}/choices/`,\n\t);\n\treturn response.data.map((c: ExerciseChoice) => normalizeIncomingExerciseChoice(c));\n}\n\nexport async function createExerciseChoice(\n\tcourseId: string,\n\texerciseId: string,\n\tchoice: ExerciseChoice,\n): Promise {\n\tconst response = await axios.post(\n\t\t`/courses/${courseId}/exercises/${exerciseId}/choices/`,\n\t\tchoice,\n\t);\n\treturn normalizeIncomingExerciseChoice(response.data);\n}\n\nexport async function updateExerciseChoice(\n\tcourseId: string,\n\texerciseId: string,\n\tchoiceId: string,\n\tchoice: ExerciseChoice,\n): Promise {\n\tconst response = await axios.put(\n\t\t`/courses/${courseId}/exercises/${exerciseId}/choices/${choiceId}/`,\n\t\tchoice,\n\t);\n\treturn normalizeIncomingExerciseChoice(response.data);\n}\n\nexport async function deleteExerciseChoice(\n\tcourseId: string,\n\texerciseId: string,\n\tchoiceId: string,\n): Promise {\n\tconst response = await axios.delete(\n\t\t`/courses/${courseId}/exercises/${exerciseId}/choices/${choiceId}/`,\n\t);\n\treturn response.data;\n}\n\nexport async function deleteExerciseTestCase(\n\tcourseId: string,\n\texerciseId: string,\n\ttestcaseId: string,\n): Promise {\n\tconst response = await axios.delete(\n\t\t`/courses/${courseId}/exercises/${exerciseId}/testcases/${testcaseId}/`,\n\t);\n\treturn response.data;\n}\n\nexport async function getExerciseTestCaseAttachments(\n\tcourseId: string,\n\texerciseId: string,\n\ttestcaseId: string,\n): Promise {\n\tconst response = await axios.get(\n\t\t`/courses/${courseId}/exercises/${exerciseId}/testcases/${testcaseId}/attachments/`,\n\t);\n\treturn response.data;\n}\n\nexport async function createExerciseTestCaseAttachment(\n\tcourseId: string,\n\texerciseId: string,\n\ttestcaseId: string,\n\tattachment: Blob,\n): Promise {\n\tconst formData = new FormData();\n\tformData.append(\"attachment\", attachment as Blob);\n\n\tconst response = await axios.post(\n\t\t`/courses/${courseId}/exercises/${exerciseId}/testcases/${testcaseId}/attachments/`,\n\t\tformData,\n\t);\n\treturn response.data;\n}\n\nexport async function deleteExerciseTestCaseAttachment(\n\tcourseId: string,\n\texerciseId: string,\n\ttestcaseId: string,\n\tattachmentId: string,\n): Promise {\n\tconst response = await axios.delete(\n\t\t`/courses/${courseId}/exercises/${exerciseId}/testcases/${testcaseId}/attachments/${attachmentId}/`,\n\t);\n\treturn response.data;\n}\n\nexport async function downloadExerciseTestCaseAttachment(\n\tcourseId: string,\n\texerciseId: string,\n\ttestcaseId: string,\n\tattachmentId: string,\n): Promise {\n\tconst response = await axios.get(\n\t\t`/courses/${courseId}/exercises/${exerciseId}/testcases/${testcaseId}/attachments/${attachmentId}/`,\n\t\t{ responseType: \"arraybuffer\" },\n\t);\n\treturn response.data;\n}\n\nexport async function getExerciseSubExercises(\n\tcourseId: string,\n\texerciseId: string,\n): Promise {\n\tconst response = await axios.get(\n\t\t`/courses/${courseId}/exercises/${exerciseId}/sub_exercises/`,\n\t);\n\treturn response.data.map((e: Exercise) => normalizeIncomingExercise(e));\n}\n\nexport async function createExerciseSubExercise(\n\tcourseId: string,\n\texerciseId: string,\n\tsubExercise: Exercise,\n): Promise {\n\tconst response = await axios.post(\n\t\t`/courses/${courseId}/exercises/${exerciseId}/sub_exercises/`,\n\t\tsubExercise,\n\t);\n\treturn normalizeIncomingExercise(response.data);\n}\n\nexport async function updateExerciseSubExercise(\n\tcourseId: string,\n\texerciseId: string,\n\tsubExerciseId: string,\n\tsubExercise: Exercise,\n): Promise {\n\tconst response = await axios.put(\n\t\t`/courses/${courseId}/exercises/${exerciseId}/sub_exercises/${subExerciseId}/`,\n\t\tsubExercise,\n\t);\n\treturn normalizeIncomingExercise(response.data);\n}\n\nexport async function deleteExerciseSubExercise(\n\tcourseId: string,\n\texerciseId: string,\n\tsubExerciseId: string,\n): Promise {\n\tconst response = await axios.delete(\n\t\t`/courses/${courseId}/exercises/${exerciseId}/sub_exercises/${subExerciseId}/`,\n\t);\n\treturn response.data;\n}\n\nexport async function createExerciseTestCase(\n\tcourseId: string,\n\texerciseId: string,\n\ttestcase: ExerciseTestCase,\n): Promise {\n\tconst response = await axios.post(\n\t\t`/courses/${courseId}/exercises/${exerciseId}/testcases/`,\n\t\ttestcase,\n\t);\n\treturn response.data;\n}\n\nexport async function updateExerciseTestCase(\n\tcourseId: string,\n\texerciseId: string,\n\ttestcaseId: string,\n\ttestcase: ExerciseTestCase,\n): Promise {\n\tconst response = await axios.put(\n\t\t`/courses/${courseId}/exercises/${exerciseId}/testcases/${testcaseId}/`,\n\t\ttestcase,\n\t);\n\treturn response.data;\n}\n\nexport async function getExerciseSolutionsByExercise(\n\tcourseId: string,\n\texerciseId: string,\n\tpageNumber: number,\n\tfilter: ExerciseSolutionSearchFilter | null,\n): Promise> {\n\tconst filterUrlQuery = getExerciseSolutionUrlQueryParams(filter);\n\n\tconst response = await axios.get(\n\t\t`/courses/${courseId}/exercises/${exerciseId}/solutions/?page=${pageNumber}${filterUrlQuery}`,\n\t);\n\treturn convertPaginatedResponseToLocalPaginatedData(\n\t\tresponse.data as BackendPaginatedResponse,\n\t\tpageNumber,\n\t);\n}\n\nexport async function createExerciseSolution(\n\tcourseId: string,\n\texerciseId: string,\n\tsolution: ExerciseSolution,\n): Promise {\n\tconst response = await axios.post(\n\t\t`/courses/${courseId}/exercises/${exerciseId}/solutions/`,\n\t\tsolution,\n\t);\n\treturn response.data;\n}\n\nexport async function updateExerciseSolution(\n\tcourseId: string,\n\texerciseId: string,\n\tsolutionId: string,\n\tsolution: ExerciseSolution,\n): Promise {\n\tconst response = await axios.patch(\n\t\t`/courses/${courseId}/exercises/${exerciseId}/solutions/${solutionId}/`,\n\t\tsolution,\n\t);\n\treturn response.data;\n}\n\nexport async function deleteExerciseSolution(\n\tcourseId: string,\n\texerciseId: string,\n\tsolutionId: string,\n): Promise {\n\tconst response = await axios.delete(\n\t\t`/courses/${courseId}/exercises/${exerciseId}/solutions/${solutionId}/`,\n\t);\n\treturn response.data;\n}\n\nexport async function createExerciseSolutionComment(\n\tcourseId: string,\n\texerciseId: string,\n\tsolutionId: string,\n\tcomment: ExerciseSolutionComment,\n): Promise {\n\tconst response = await axios.post(\n\t\t`/courses/${courseId}/exercises/${exerciseId}/solutions/${solutionId}/comments/`,\n\t\tcomment,\n\t);\n\treturn response.data;\n}\n\nexport async function voteExerciseSolution(\n\tcourseId: string,\n\texerciseId: string,\n\tsolutionId: string,\n\tvote: ExerciseSolutionVote | undefined,\n): Promise {\n\tconst url = `/courses/${courseId}/exercises/${exerciseId}/solutions/${solutionId}/vote/`;\n\tif (vote) {\n\t\tconst response = await axios.put(url, vote);\n\t\treturn response.data;\n\t}\n\t// if no vote is spefied, remove existing vote\n\tconst response = await axios.delete(url);\n\treturn response.data;\n}\n\nexport async function setExerciseSolutionBookmark(\n\tcourseId: string,\n\texerciseId: string,\n\tsolutionId: string,\n\tbookmarked: boolean,\n): Promise {\n\tconst url = `/courses/${courseId}/exercises/${exerciseId}/solutions/${solutionId}/bookmark/`;\n\tif (bookmarked) {\n\t\tconst response = await axios.put(url);\n\t\treturn response.data;\n\t}\n\tconst response = await axios.delete(url);\n\treturn response.data;\n}\n\nexport async function getPopularExerciseSolutionThreads(\n\tcourseId: string,\n\tpageNumber: number,\n): Promise> {\n\tconst response = await axios.get(`/courses/${courseId}/solutions/?by_popularity=1`);\n\tconst threads = response.data as BackendPaginatedResponse<\n\t\tExerciseSolution & { exercise: Exercise }\n\t>;\n\tconst aggregatedThreads = aggregateExerciseSolutionThreads(threads.results);\n\treturn convertPaginatedResponseToLocalPaginatedData(\n\t\t{\n\t\t\t...response.data,\n\t\t\tdata: aggregatedThreads,\n\t\t},\n\t\tpageNumber,\n\t);\n}\n\n// export async function getSubmittedExerciseSolutionThreads(\n// \tcourseId: string,\n// \tpageNumber: number,\n// ): Promise> {\n// \tconst response = await axios.get(\n// \t\t`/courses/${courseId}/solutions/?page=${pageNumber}&state=${ExerciseSolutionState.SUBMITTED}`,\n// \t);\n// \tconst threads = response.data as BackendPaginatedResponse<\n// \t\tExerciseSolution & { exercise: Exercise }\n// \t>;\n// \tconst aggregatedThreads = aggregateExerciseSolutionThreads(threads.results);\n// \treturn convertPaginatedResponseToLocalPaginatedData(\n// \t\t{\n// \t\t\t...response.data,\n// \t\t\tresults: aggregatedThreads,\n// \t\t},\n// \t\tpageNumber,\n// \t);\n// }\n","module.exports = __webpack_public_path__ + \"img/unipi.c73bf956.png\";","import { resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock, Transition as _Transition, withCtx as _withCtx, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createSlots as _createSlots, normalizeStyle as _normalizeStyle, createTextVNode as _createTextVNode, createStaticVNode as _createStaticVNode } from \"vue\"\nimport _imports_0 from '../public/telegram.jpg'\n\n\nconst _hoisted_1 = { class: \"h-full flex flex-col\" }\nconst _hoisted_2 = {\n key: 0,\n style: {\"z-index\":\"999\"},\n class: \"fixed transform -translate-x-1/2 -translate-y-1/2 top-1/2 left-1/2\"\n}\nconst _hoisted_3 = { class: \"flex flex-col flex-grow\" }\nconst _hoisted_4 = {\n class: \"sticky top-0\",\n style: {\"z-index\":\"1000\"}\n}\nconst _hoisted_5 = {\n key: 1,\n style: {\"min-height\":\"1.75rem\"},\n class: \"shadow-elevation mb-4 bg-gray-100 flex items-center\"\n}\nconst _hoisted_6 = { class: \"flex w-full px-4 mx-auto md:items-center sm:px-6 lg:px-8\" }\nconst _hoisted_7 = { class: \"md:items-center md:flex-row\" }\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"flex ml-auto md:w-80\" }, [\n /*#__PURE__*/_createElementVNode(\"div\", {\n class: \"ml-auto\",\n id: \"main-student-header-right\"\n })\n], -1)\nconst _hoisted_9 = { class: \"flex relative flex-grow\" }\nconst _hoisted_10 = { class: \"\" }\nconst _hoisted_11 = {\n key: 0,\n class: \"relative flex items-center mt-0.5 -ml-0.5\"\n}\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"p\", { class: \"material-icons mr-1.5 text-primary text-base\" }, \"auto_awesome\", -1)\nconst _hoisted_13 = { class: \"font-semibold\" }\nconst _hoisted_14 = {\n key: 0,\n class: \"flex items-center space-x-1\"\n}\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"p\", { class: \"ml-3 material-icons-outlined text-primary text-base\" }, \" leaderboard \", -1)\nconst _hoisted_16 = { class: \"\" }\nconst _hoisted_17 = {\n style: {\"width\":\"18px\",\"height\":\"18px\"},\n viewBox: \"0 0 24 24\"\n}\nconst _hoisted_18 = /*#__PURE__*/_createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M5 16L3 5L8.5 10L12 4L15.5 10L21 5L19 16H5M19 19C19 19.6 18.6 20 18 20H6C5.4 20 5 19.6 5 19V18H19V19Z\"\n}, null, -1)\nconst _hoisted_19 = [\n _hoisted_18\n]\nconst _hoisted_20 = { class: \"mt-4 -mx-2 flex flex-col space-y-1 items-center vsm--footer bg-primary-light bg-opacity-5 px-3 py-4\" }\nconst _hoisted_21 = { class: \"mx-auto text-muted text-sm text-center\" }\nconst _hoisted_22 = { class: \"text-base md:text-xs xl:text-base 2xl:text-lg\" }\nconst _hoisted_23 = {\n key: 1,\n class: \"flex items-center w-full h-12 md:px-6 px-3 py-3 mt-auto text-sm text-darkText bg-light border-t border-gray-200 border-opacity-50 z-50\"\n}\nconst _hoisted_24 = /*#__PURE__*/_createStaticVNode(\"

©Evo Learning

·

Crafted with ❤️ by Samuele Bonini

\", 3)\nconst _hoisted_27 = {\n target: \"_blank\",\n id: \"terms-and-conditions\",\n class: \"ml-auto text-primary hover:underline opacity-0 hidden md:block\"\n}\nconst _hoisted_28 = /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://t.me/sai_evo\",\n target: \"_blank\"\n}, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"w-5 h-5 transition-opacity duration-75 opacity-70 hover:opacity-100\",\n src: _imports_0\n })\n], -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Spinner = _resolveComponent(\"Spinner\")!\n const _component_Notification = _resolveComponent(\"Notification\")!\n const _component_AppBar = _resolveComponent(\"AppBar\")!\n const _component_BreadCrumbs = _resolveComponent(\"BreadCrumbs\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_GamificationContextPanel = _resolveComponent(\"GamificationContextPanel\")!\n const _component_DraggablePopup = _resolveComponent(\"DraggablePopup\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_SideBar = _resolveComponent(\"SideBar\")!\n const _component_ErrorView = _resolveComponent(\"ErrorView\")!\n const _component_router_view = _resolveComponent(\"router-view\")!\n const _component_SnackBar = _resolveComponent(\"SnackBar\")!\n const _component_Tooltip = _resolveComponent(\"Tooltip\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_ctx.metaStore.loading)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createVNode(_component_Spinner, {\n size: 'xl',\n variant: 'dark',\n fast: true\n })\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(_Transition, { name: \"fade\" }, {\n default: _withCtx(() => [\n (_ctx.metaStore._showSuccessFeedback)\n ? (_openBlock(), _createBlock(_component_Notification, {\n key: 0,\n text: _ctx.metaStore.customSuccessFeedbackMessage\n }, null, 8, [\"text\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }),\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n (_ctx.showAppBar)\n ? (_openBlock(), _createBlock(_component_AppBar, {\n key: 0,\n showCollapseSideBarButton: _ctx.showSidebar,\n showMobileSidebarButton: _ctx.showSidebar,\n onToggleSidebarCollapsed: _cache[0] || (_cache[0] = ($event: any) => (_ctx.onToggleCollapseSidebar())),\n onToggleMobileSidebar: _cache[1] || (_cache[1] = ($event: any) => (_ctx.onToggleMobileSidebar())),\n showHelpCenterButton: _ctx.showHelpCenterButton,\n showLocaleSelector: _ctx.showLocaleSelector,\n sidebarCollapsed: _ctx.sidebarCollapsed,\n onLogout: _cache[2] || (_cache[2] = ($event: any) => (_ctx.logOut())),\n sticky: false\n }, null, 8, [\"showCollapseSideBarButton\", \"showMobileSidebarButton\", \"showHelpCenterButton\", \"showLocaleSelector\", \"sidebarCollapsed\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.showSecondaryHeader)\n ? (_openBlock(), _createElementBlock(\"header\", _hoisted_5, [\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"div\", _hoisted_7, [\n (_ctx.$route.meta?.breadcrumbs && !_ctx.$route.meta?.hideBreadcrumbs)\n ? (_openBlock(), _createBlock(_component_BreadCrumbs, {\n key: 0,\n route: _ctx.$route,\n class: \"mt-1 md:ml-0\"\n }, null, 8, [\"route\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _hoisted_8\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n (_ctx.showSidebar)\n ? (_openBlock(), _createBlock(_component_SideBar, {\n key: 0,\n header: _ctx.currentCourseName,\n sidebarOptions: _ctx.sidebarOptions,\n collapsed: _ctx.sidebarCollapsed,\n showMobileSidebar: _ctx.showMobileSidebar,\n initializing: _ctx.initializingSidebar\n }, _createSlots({ _: 2 }, [\n (!_ctx.isTeacherRoute)\n ? {\n name: \"header\",\n fn: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_10, [\n (_ctx.mainStore.gamificationContext)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [\n _hoisted_12,\n _createElementVNode(\"p\", _hoisted_13, _toDisplayString(_ctx.mainStore.gamificationContext?.reputation ?? 0), 1),\n (\n\t\t\t\t\t\t\t\t\t\t_ctx.mainStore.gamificationContext &&\n\t\t\t\t\t\t\t\t\t\t_ctx.mainStore.gamificationContext.leaderboard_position !== null\n\t\t\t\t\t\t\t\t\t)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_14, [\n _hoisted_15,\n _createElementVNode(\"p\", _hoisted_16, _toDisplayString(_ctx.mainStore.gamificationContext.leaderboard_position), 1),\n (_ctx.mainStore.gamificationContext.leaderboard_position <= 3)\n ? (_openBlock(), _createElementBlock(\"p\", {\n key: 0,\n class: _normalizeClass({\n\t\t\t\t\t\t\t\t\t\t\t'text-yellow-400':\n\t\t\t\t\t\t\t\t\t\t\t\t_ctx.mainStore.gamificationContext.leaderboard_position === 1,\n\t\t\t\t\t\t\t\t\t\t\t'text-gray-400':\n\t\t\t\t\t\t\t\t\t\t\t\t_ctx.mainStore.gamificationContext.leaderboard_position === 2,\n\t\t\t\t\t\t\t\t\t\t\t'text-yellow-900':\n\t\t\t\t\t\t\t\t\t\t\t\t_ctx.mainStore.gamificationContext.leaderboard_position === 3,\n\t\t\t\t\t\t\t\t\t\t})\n }, [\n (_openBlock(), _createElementBlock(\"svg\", _hoisted_17, _hoisted_19))\n ], 2))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_Btn, {\n tooltip: _ctx.showGamificationPanel ? '' : _ctx.$t('gamification.show_panel'),\n variant: 'icon',\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.showGamificationPanel = !_ctx.showGamificationPanel)),\n outline: true\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n style: {\"font-size\":\"20px !important\"},\n class: _normalizeClass({\n\t\t\t\t\t\t\t\t\t\t\t'material-icons-outlined': !_ctx.showGamificationPanel,\n\t\t\t\t\t\t\t\t\t\t\t'material-icons': _ctx.showGamificationPanel,\n\t\t\t\t\t\t\t\t\t\t})\n }, \"visibility\", 2)\n ]),\n _: 1\n }, 8, [\"tooltip\"]),\n (_ctx.showGamificationPanel)\n ? (_openBlock(), _createBlock(_component_DraggablePopup, {\n key: 1,\n title: '',\n onClose: _cache[4] || (_cache[4] = ($event: any) => (_ctx.showGamificationPanel = false)),\n initialTop: 160,\n initialLeft: 1,\n opaque: true,\n resizable: false,\n fullWidth: true\n }, {\n default: _withCtx(() => [\n (_ctx.showGamificationPanel)\n ? (_openBlock(), _createBlock(_component_GamificationContextPanel, {\n key: 0,\n style: {\"margin-top\":\"-34px\"},\n class: \"w-full\"\n }))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n key: \"0\"\n }\n : undefined,\n (\n\t\t\t\t\t\t\t_ctx.hasAnyPrivilegesOrIsTeacher && !_ctx.isTeacherRoute && _ctx.$route.params.courseId\n\t\t\t\t\t\t)\n ? {\n name: \"footer\",\n fn: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_20, [\n _createElementVNode(\"p\", _hoisted_21, _toDisplayString(_ctx.$t(\"student_course_dashboard.you_are_in_student_mode\")), 1),\n _createVNode(_component_router_link, {\n class: \"w-full\",\n to: {\n\t\t\t\t\t\t\t\t\tname: 'TeacherCourseDashboard',\n\t\t\t\t\t\t\t\t\tparams: { courseId: _ctx.currentCourse?.id ?? '-1' },\n\t\t\t\t\t\t\t\t}\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Btn, {\n variant: 'primary-borderless',\n class: \"w-full\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", _hoisted_22, _toDisplayString(_ctx.$t(\"courses.course_panel\")), 1)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"to\"])\n ])\n ]),\n key: \"1\"\n }\n : undefined\n ]), 1032, [\"header\", \"sidebarOptions\", \"collapsed\", \"showMobileSidebar\", \"initializing\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.metaStore.pageWideErrorData)\n ? (_openBlock(), _createBlock(_component_ErrorView, {\n key: 1,\n data: _ctx.metaStore.pageWideErrorData\n }, null, 8, [\"data\"]))\n : (_openBlock(), _createBlock(_component_router_view, {\n key: 2,\n style: _normalizeStyle(\n\t\t\t\t\t\t_ctx.showSidebar\n\t\t\t\t\t\t\t? _ctx.sidebarCollapsed && _ctx.mediaQueryMd\n\t\t\t\t\t\t\t\t? 'width: 100%; padding-left: ' +\n\t\t\t\t\t\t\t\t Math.max(_ctx.routerViewPaddingLeft + 30, 100) +\n\t\t\t\t\t\t\t\t 'px; padding-right: 30px'\n\t\t\t\t\t\t\t\t: (!_ctx.sidebarCollapsed && _ctx.mediaQueryMd\n\t\t\t\t\t\t\t\t\t\t? 'padding-left: calc(16.66667% + 30px); width: 100%; padding-right: 30px'\n\t\t\t\t\t\t\t\t\t\t: '') +\n\t\t\t\t\t\t\t\t (!_ctx.mediaQueryMd\n\t\t\t\t\t\t\t\t\t\t? 'width: 100%; padding-left: 12px; padding-right: 12px'\n\t\t\t\t\t\t\t\t\t\t: '')\n\t\t\t\t\t\t\t: ''\n\t\t\t\t\t),\n class: \"px-2 md:px-6 lg:px-10 py-4\"\n }, null, 8, [\"style\"])),\n _createVNode(_Transition, { name: \"quick-bounce\" }, {\n default: _withCtx(() => [\n (_ctx.metaStore.errorNotificationData)\n ? (_openBlock(), _createBlock(_component_SnackBar, {\n key: 0,\n class: \"w-full px-4 pb-10\",\n icon: _ctx.metaStore.errorNotificationData.icon,\n message: _ctx.metaStore.errorNotificationData.title\n }, null, 8, [\"icon\", \"message\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n })\n ])\n ]),\n (_ctx.showFooter)\n ? (_openBlock(), _createElementBlock(\"footer\", _hoisted_23, [\n _hoisted_24,\n _createElementVNode(\"a\", _hoisted_27, _toDisplayString(_ctx.$t(\"misc.terms_and_conditions\")), 1),\n (!_ctx.isDemoMode)\n ? (_openBlock(), _createBlock(_component_Tooltip, {\n key: 0,\n placement: 'left',\n class: \"ml-auto md:ml-4\",\n textCode: 'telegram'\n }, {\n default: _withCtx(() => [\n _hoisted_28\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n style: {\"z-index\":\"999999\"},\n class: \"fixed w-10/12 transform -translate-x-1/2 -translate-y-1/2 bg-gray-200 border rounded-md shadow-2xl bg-opacity-90 top-1/2 left-1/2 md:w-max md:ml-0\"\n}\nconst _hoisted_2 = { class: \"flex items-center w-full px-6 py-8 space-x-4\" }\nconst _hoisted_3 = { key: 1 }\nconst _hoisted_4 = { class: \"text-yellow-900 bg-yellow-500 icon-surrounding\" }\nconst _hoisted_5 = { class: \"ml-px material-icons-outlined\" }\nconst _hoisted_6 = { class: \"mb-0\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_AnimatedIcon = _resolveComponent(\"AnimatedIcon\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (!_ctx.icon)\n ? (_openBlock(), _createBlock(_component_AnimatedIcon, { key: 0 }))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"span\", _hoisted_5, _toDisplayString(_ctx.icon), 1)\n ])\n ])),\n _createElementVNode(\"h3\", _hoisted_6, _toDisplayString(_ctx.text || _ctx.$t(\"misc.success\")), 1)\n ])\n ]))\n}","\nimport { defineComponent } from \"@vue/runtime-core\";\nimport AnimatedIcon from \"./AnimatedIcon.vue\";\n\nexport default defineComponent({\n\tcomponents: { AnimatedIcon },\n\tname: \"Notification\",\n\tprops: {\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\tdefault: \"\",\n\t\t},\n\t\ttext: {\n\t\t\ttype: String,\n\t\t\tdefault: \"\",\n\t\t},\n\t},\n});\n","import { render } from \"./Notification.vue?vue&type=template&id=3a45ed28&ts=true\"\nimport script from \"./Notification.vue?vue&type=script&lang=ts\"\nexport * from \"./Notification.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderSlot as _renderSlot, renderList as _renderList, Fragment as _Fragment, normalizeClass as _normalizeClass, vShow as _vShow, withDirectives as _withDirectives, Transition as _Transition, withCtx as _withCtx, createVNode as _createVNode, resolveComponent as _resolveComponent, resolveDirective as _resolveDirective, createBlock as _createBlock, normalizeStyle as _normalizeStyle, createTextVNode as _createTextVNode } from \"vue\"\n\nconst _hoisted_1 = {\n class: \"fixed h-full pr-2\",\n style: {\"width\":\"inherit\",\"z-index\":\"100\"}\n}\nconst _hoisted_2 = {\n key: 0,\n class: \"mx-5 mt-6 overflow-hidden\"\n}\nconst _hoisted_3 = [\"title\"]\nconst _hoisted_4 = {\n key: 1,\n class: \"mx-5 mt-6 overflow-hidden\"\n}\nconst _hoisted_5 = [\"id\"]\nconst _hoisted_6 = { class: \"flex items-center space-x-2.5\" }\nconst _hoisted_7 = {\n key: 0,\n class: \"mt-6 ml-2 overflow-visible\"\n}\nconst _hoisted_8 = { class: \"w-full h-full px-2\" }\nconst _hoisted_9 = { class: \"mobile-sidebar-header mt-4 rounded\" }\nconst _hoisted_10 = { class: \"mx-auto flex space-x-2 items-center\" }\nconst _hoisted_11 = { class: \"flex flex-col\" }\nconst _hoisted_12 = { class: \"text-sm mb-0\" }\nconst _hoisted_13 = {\n key: 0,\n class: \"mt-3 ml-1.5 overflow-hidden\"\n}\nconst _hoisted_14 = { class: \"flex flex-col w-full mt-6 -ml-4\" }\nconst _hoisted_15 = [\"id\"]\nconst _hoisted_16 = { class: \"flex items-center space-x-2.5\" }\nconst _hoisted_17 = { class: \"ml-4 md:inline\" }\nconst _hoisted_18 = {\n key: 1,\n class: \"mt-6 ml-2 overflow-visible\"\n}\nconst _hoisted_19 = { class: \"flex w-full mt-6\" }\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg material-icons-outlined mr-2\" }, \" logout \", -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_Avatar = _resolveComponent(\"Avatar\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _directive_wave = _resolveDirective(\"wave\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _createElementVNode(\"div\", {\n style: _normalizeStyle(\n\t\t\t'' +\n\t\t\t(_ctx.hovering && !!_ctx.collapsed\n\t\t\t\t? 'box-shadow: 2px 5px 5px rgba(0, 0, 0, 0.3); z-index: 50'\n\t\t\t\t: '')\n\t\t),\n class: _normalizeClass([\"flex-col hidden h-full md:block bg-light\", {\n\t\t\t'absolute top-0': true || !!_ctx.collapsed,\n\t\t\t'w-18': !_ctx.hovering && !!_ctx.collapsed,\n\t\t\t'lg:w-2/12 w-4/12 hovering-sidebar': _ctx.hovering || !_ctx.collapsed,\n\t\t\t'transition-width duration-200 ease-in-out': !_ctx.initializing,\n\t\t}]),\n id: \"desktop-nav\"\n }, [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: \"h-full\",\n onMouseover: _cache[0] || (_cache[0] = ($event: any) => (_ctx.onSideBarHover($event))),\n onMouseleave: _cache[1] || (_cache[1] = ($event: any) => (_ctx.onSideBarLeave()))\n }, [\n (_ctx.header)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createElementVNode(\"h5\", {\n title: _ctx.header,\n style: {\"text-overflow\":\"ellipsis\",\"white-space\":\"nowrap\",\"max-width\":\"500px\"},\n class: \"mb-0 overflow-hidden\"\n }, _toDisplayString(_ctx.header), 9, _hoisted_3)\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.$slots.header?.())\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _renderSlot(_ctx.$slots, \"header\")\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"ul\", {\n class: _normalizeClass([\"flex flex-col w-full mt-6\", { 'h-full': !_ctx.$slots.footer?.() }])\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.sidebarOptions, (option, index) => {\n return _withDirectives((_openBlock(), _createBlock(_component_router_link, {\n class: _normalizeClass([\"relative overflow-hidden rounded-r-full\", {\n\t\t\t\t\t\t\t'mt-auto mb-44': false && index == _ctx.sidebarOptions.length - 1,\n\t\t\t\t\t\t\t'pl-1.25px': true || (!_ctx.hovering && !!_ctx.collapsed),\n\t\t\t\t\t\t}]),\n key: 'sidebar-' + option.label,\n to: { name: option.routeName }\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"li\", {\n id: 'sidebar-option-' + index,\n style: {\"padding-top\":\"11px\",\"padding-bottom\":\"11px\"},\n class: _normalizeClass([\"flex items-center justify-between px-4 cursor-pointer sidebar-link-container hover:transition-colors text-darkText hover:bg-primary-light hover:bg-opacity-10 hover:duration-100\", {\n\t\t\t\t\t\t\t\t'md:w-full': true || !!_ctx.collapsed,\n\t\t\t\t\t\t\t\t'md:w-11/12': false && !_ctx.collapsed,\n\t\t\t\t\t\t\t\t'rounded-r-full pl-5 -ml-1.25px': _ctx.hovering || !_ctx.collapsed,\n\t\t\t\t\t\t\t\t'rounded-full ml-1': !_ctx.hovering && !!_ctx.collapsed,\n\t\t\t\t\t\t\t\t'bg-primary-light bg-opacity-20 pointer-events-none':\n\t\t\t\t\t\t\t\t\t_ctx.isRouteActive(option),\n\t\t\t\t\t\t\t}])\n }, [\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"span\", {\n class: _normalizeClass([\n\t\t\t\t\t\t\t\t\t\t'text-2xl material-icons-outlined',\n\t\t\t\t\t\t\t\t\t\t_ctx.isRouteActive(option) ? 'text-primary' : 'opacity-60 text-darkText',\n\t\t\t\t\t\t\t\t\t])\n }, _toDisplayString(option.icon), 3),\n _createVNode(_Transition, { name: \"fade-quick\" }, {\n default: _withCtx(() => [\n _withDirectives(_createElementVNode(\"span\", {\n class: _normalizeClass([\"ml-4 whitespace-pre sidebar-link-label\", {\n\t\t\t\t\t\t\t\t\t\t\t'delay-0': _ctx.hovering,\n\t\t\t\t\t\t\t\t\t\t\t'text-primary font-semibold': _ctx.isRouteActive(option),\n\t\t\t\t\t\t\t\t\t\t\t'opacity-80': !_ctx.isRouteActive(option),\n\t\t\t\t\t\t\t\t\t\t}])\n }, _toDisplayString(option.label), 3), [\n [_vShow, _ctx.hovering || !_ctx.collapsed]\n ])\n ]),\n _: 2\n }, 1024)\n ])\n ], 10, _hoisted_5)\n ]),\n _: 2\n }, 1032, [\"to\", \"class\"])), [\n [_directive_wave, {\n\t\t\t\t\t\t\tcolor: '#6a16f0',\n\t\t\t\t\t\t}]\n ])\n }), 128))\n ], 2),\n _createVNode(_Transition, { name: \"fade\" }, {\n default: _withCtx(() => [\n ((_ctx.hovering || !_ctx.collapsed) && _ctx.$slots.footer?.())\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [\n _renderSlot(_ctx.$slots, \"footer\")\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 3\n })\n ], 32)\n ])\n ], 6),\n _createElementVNode(\"div\", {\n style: {\"z-index\":\"9999999\"},\n class: _normalizeClass([\"fixed flex-col justify-between block w-9/12 h-full overflow-y-auto transition-transform duration-300 ease-in-out transform md:hidden bg-light\", {\n\t\t\t'-translate-x-full': !_ctx.showMobileSidebar,\n\t\t\t'translate-x-0 shadow-all-around': _ctx.showMobileSidebar,\n\t\t}]),\n id: \"mobile-nav\"\n }, [\n _createElementVNode(\"div\", _hoisted_8, [\n _createElementVNode(\"div\", _hoisted_9, [\n _createElementVNode(\"div\", _hoisted_10, [\n _createVNode(_component_Avatar, {\n user: _ctx.metaStore.user,\n size: 'lg'\n }, null, 8, [\"user\"]),\n _createElementVNode(\"div\", _hoisted_11, [\n _createElementVNode(\"p\", _hoisted_12, _toDisplayString(_ctx.metaStore.email), 1)\n ])\n ])\n ]),\n (_ctx.$slots.header?.())\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [\n _renderSlot(_ctx.$slots, \"header\")\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"ul\", _hoisted_14, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.sidebarOptions, (option, index) => {\n return (_openBlock(), _createBlock(_component_router_link, {\n class: _normalizeClass([\"relative my-1 overflow-hidden w-full\", {\n\t\t\t\t\t\t'mt-auto mb-44': false && index == _ctx.sidebarOptions.length - 1,\n\t\t\t\t\t}]),\n key: 'sidebar-' + option.label,\n to: { name: option.routeName }\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"li\", {\n id: 'sidebar-option-' + index,\n class: _normalizeClass([\"flex items-center justify-between w-full pl-5 py-2.5 rounded-r-full cursor-pointer hover:transition-colors vsm--link vsm--item\", {\n\t\t\t\t\t\t\t'bg-primary-light bg-opacity-20 text-primary shadow-none pointer-events-none':\n\t\t\t\t\t\t\t\t_ctx.isRouteActive(option),\n\t\t\t\t\t\t}])\n }, [\n _createElementVNode(\"div\", _hoisted_16, [\n _createElementVNode(\"span\", {\n class: _normalizeClass([\"text-2xl material-icons-outlined\", { 'text-primary': _ctx.isRouteActive(option) }])\n }, _toDisplayString(option.icon), 3),\n _createElementVNode(\"span\", _hoisted_17, _toDisplayString(option.label), 1)\n ])\n ], 10, _hoisted_15)\n ]),\n _: 2\n }, 1032, [\"to\", \"class\"]))\n }), 128))\n ]),\n (_ctx.$slots.footer?.())\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_18, [\n _renderSlot(_ctx.$slots, \"footer\")\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_19, [\n _createVNode(_component_Btn, {\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.$emit('logout'))),\n variant: 'primary',\n size: 'sm',\n outline: true,\n class: \"\"\n }, {\n default: _withCtx(() => [\n _hoisted_20,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t(\"misc.logout\")), 1)\n ]),\n _: 1\n })\n ])\n ])\n ], 2),\n _createVNode(_Transition, { name: \"fade\" }, {\n default: _withCtx(() => [\n (_ctx.showMobileSidebar)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.$emit('toggleMobileSidebar'))),\n class: \"absolute z-50 w-full h-full opacity-50 bg-dark\",\n style: {}\n }))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n })\n ], 64))\n}","\nconst DESKTOP_SIDEBAR_WIDTH_EXPANDED = \"270px\";\n\nimport { SidebarOption } from \"@/navigation/sidebar\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport Avatar from \"./Avatar.vue\";\nimport Btn from \"./Btn.vue\";\n\nexport default defineComponent({\n\tname: \"SideBar\",\n\tprops: {\n\t\theader: {\n\t\t\ttype: String,\n\t\t\tdefault: \"\",\n\t\t},\n\t\tsidebarOptions: {\n\t\t\ttype: Array as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\tshowMobileSidebar: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tcollapsed: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tinitializing: {\n\t\t\ttype: Boolean,\n\t\t\trequired: false,\n\t\t},\n\t},\n\tsetup() {\n\t\t// TODO temporary workaround for a werid issue: if use import like this:\n\t\t//import { useMainStore } from \"./stores/mainStore\";\n\t\t// the app won't render as useMainStore will be undefined in other components; investigate\n\t\tconst useMetaStore = require(\"../../stores/metaStore\").useMetaStore;\n\t\tconst metaStore = useMetaStore();\n\t\treturn {\n\t\t\tmetaStore,\n\t\t};\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tdesktopSidebarWidth: DESKTOP_SIDEBAR_WIDTH_EXPANDED,\n\t\t\thovering: false,\n\t\t\thoverHandle: null as null | number,\n\t\t};\n\t},\n\tmethods: {\n\t\tonSideBarHover(event: MouseEvent) {\n\t\t\tif (\n\t\t\t\tthis.hoverHandle == null &&\n\t\t\t\t!(event.target as any).className.split(\" \").includes(\"no-hover-sidebar\")\n\t\t\t) {\n\t\t\t\tthis.hoverHandle = setTimeout(() => (this.hovering = true), 300);\n\t\t\t}\n\t\t},\n\t\tonSideBarLeave() {\n\t\t\tif (this.hoverHandle != null) {\n\t\t\t\tclearTimeout(this.hoverHandle);\n\t\t\t\tthis.hoverHandle = null;\n\t\t\t}\n\t\t\tthis.hovering = false;\n\t\t},\n\t\tisRouteActive(option: SidebarOption) {\n\t\t\treturn (\n\t\t\t\toption.routeName === this.$route.name ||\n\t\t\t\toption.children?.includes(this.$route.name as string)\n\t\t\t);\n\t\t},\n\t},\n\n\tcomponents: {\n\t\tBtn,\n\t\tAvatar,\n\t},\n});\n","import { render } from \"./SideBar.vue?vue&type=template&id=aeaebb1c&ts=true\"\nimport script from \"./SideBar.vue?vue&type=script&lang=ts\"\nexport * from \"./SideBar.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex items-center h-14 z-999\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"items-center mt-4 mb-4 hidden md:block -ml-4.5 mr-8\"\n}\nconst _hoisted_3 = { class: \"material-icons-outlined\" }\nconst _hoisted_4 = { class: \"flex items-center mr-auto\" }\nconst _hoisted_5 = [\"src\"]\nconst _hoisted_6 = { class: \"\" }\nconst _hoisted_7 = {\n key: 0,\n class: \"flex items-center ml-4 md:ml-6\"\n}\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined text-lightText\" }, \"volunteer_activism\", -1)\nconst _hoisted_9 = { class: \"w-72 text-center\" }\nconst _hoisted_10 = { class: \"mb-4\" }\nconst _hoisted_11 = { href: \"https://paypal.me/bsamusp00?country.x=IT&locale.x=it_IT\" }\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg material-icons-outlined\" }, \" help_outline \", -1)\nconst _hoisted_13 = { class: \"py-4 px-2\" }\nconst _hoisted_14 = { class: \"items-center flex\" }\nconst _hoisted_15 = { class: \"flex flex-col -space-y-1.5\" }\nconst _hoisted_16 = { class: \"text-muted text-sm\" }\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg material-icons-outlined\" }, \" logout \", -1)\nconst _hoisted_18 = {\n key: 1,\n class: \"md:hidden\"\n}\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined text-darkText\" }, \" menu \", -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_LocaleSelector = _resolveComponent(\"LocaleSelector\")!\n const _component_DropdownMenu = _resolveComponent(\"DropdownMenu\")!\n const _component_Avatar = _resolveComponent(\"Avatar\")!\n\n return (_openBlock(), _createElementBlock(\"nav\", {\n style: {\"z-index\":\"1000\"},\n class: _normalizeClass([{ sticky: _ctx.sticky }, \"top-0 py-0.5 md:px-12 text-gray-700 bg-white px-2 shadow-elevation mx-auto sm:px-6 lg:px-8 w-full\"])\n }, [\n _createElementVNode(\"div\", _hoisted_1, [\n (_ctx.showCollapseSideBarButton)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createVNode(_component_Btn, {\n id: \"toggle-sidebar\",\n tooltip: !_ctx.sidebarCollapsed ? _ctx.$t('misc.unfix_sidebar') : _ctx.$t('misc.fix_sidebar'),\n variant: 'icon',\n outline: true,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('toggleSidebarCollapsed'))),\n class: \"hidden md:block\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", _hoisted_3, _toDisplayString(!_ctx.sidebarCollapsed ? \"menu_open\" : \"menu\"), 1)\n ]),\n _: 1\n }, 8, [\"tooltip\"])\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"img\", {\n class: \"lg:w-60 3xl:w-70 w-52 md:-ml-1\",\n src: _ctx.logoUrl\n }, null, 8, _hoisted_5)\n ]),\n _createElementVNode(\"div\", _hoisted_6, [\n (_ctx.metaStore.isAuthenticated)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [\n (false && _ctx.showLocaleSelector)\n ? (_openBlock(), _createBlock(_component_LocaleSelector, {\n key: 0,\n class: \"md:mr-0 -mr-2\"\n }))\n : _createCommentVNode(\"\", true),\n (_ctx.isDemoMode)\n ? (_openBlock(), _createBlock(_component_DropdownMenu, {\n key: 1,\n placement: 'left',\n class: \"text-lightText\",\n expanded: _ctx.donateExpanded,\n onToggleExpanded: _cache[1] || (_cache[1] = ($event: any) => (_ctx.onToggleDonate()))\n }, {\n icon: _withCtx(() => [\n _hoisted_8\n ]),\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_9, [\n _createElementVNode(\"h3\", null, _toDisplayString(_ctx.$t(\"donate.donate_title\")), 1),\n _createElementVNode(\"p\", _hoisted_10, _toDisplayString(_ctx.$t(\"donate.donate_content\")), 1),\n _createElementVNode(\"a\", _hoisted_11, [\n _createVNode(_component_Btn, null, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"donate.donate_now\")), 1)\n ]),\n _: 1\n })\n ])\n ])\n ]),\n _: 1\n }, 8, [\"expanded\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.showHelpCenterButton)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 2,\n tooltip: _ctx.$t('help.help_guide_label'),\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.metaStore.setHelpCenterVisibility(true))),\n id: \"help-center\",\n variant: 'icon',\n outline: true\n }, {\n default: _withCtx(() => [\n _hoisted_12\n ]),\n _: 1\n }, 8, [\"tooltip\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_DropdownMenu, {\n placement: 'right',\n expanded: _ctx.donateExpanded,\n onToggleExpanded: _cache[4] || (_cache[4] = ($event: any) => (_ctx.onToggleDonate()))\n }, {\n activator: _withCtx(() => [\n _createVNode(_component_Avatar, {\n style: {\"box-sizing\":\"content-box\"},\n class: \"darken-on-hover cursor-pointer md:ml-4 mr-1 md:mr-2 border-transparent border-4 hover:border-gray-300 hover:border-opacity-60\",\n user: _ctx.metaStore.user\n }, null, 8, [\"user\"])\n ]),\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_13, [\n _createElementVNode(\"div\", _hoisted_14, [\n _createVNode(_component_Avatar, {\n size: 'xl',\n class: \"mr-4\",\n user: _ctx.metaStore.user\n }, null, 8, [\"user\"]),\n _createElementVNode(\"div\", _hoisted_15, [\n _createElementVNode(\"h4\", null, _toDisplayString(_ctx.metaStore.user.full_name), 1),\n _createElementVNode(\"p\", _hoisted_16, _toDisplayString(_ctx.metaStore.user.email), 1)\n ]),\n _createVNode(_component_Btn, {\n class: \"ml-6\",\n tooltip: _ctx.$t('misc.logout'),\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.$emit('logout'))),\n variant: 'icon',\n outline: true\n }, {\n default: _withCtx(() => [\n _hoisted_17\n ]),\n _: 1\n }, 8, [\"tooltip\"])\n ])\n ])\n ]),\n _: 1\n }, 8, [\"expanded\"])\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n (_ctx.showMobileSidebarButton)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_18, [\n _createVNode(_component_Btn, {\n variant: 'icon',\n outline: true,\n class: \"md:hidden\",\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.$emit('toggleMobileSidebar')))\n }, {\n default: _withCtx(() => [\n _hoisted_19\n ]),\n _: 1\n })\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ], 2))\n}","import { createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass, resolveDirective as _resolveDirective, withDirectives as _withDirectives, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg material-icons-outlined\" }, \"language\", -1)\nconst _hoisted_2 = { class: \"-mx-5 -my-3\" }\nconst _hoisted_3 = { class: \"\" }\nconst _hoisted_4 = [\"onClick\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_DropdownMenu = _resolveComponent(\"DropdownMenu\")!\n const _directive_wave = _resolveDirective(\"wave\")!\n\n return (_openBlock(), _createElementBlock(\"div\", null, [\n _createVNode(_component_DropdownMenu, {\n expanded: _ctx.expanded,\n onToggleExpanded: _cache[0] || (_cache[0] = ($event: any) => (_ctx.expanded = !_ctx.expanded))\n }, {\n icon: _withCtx(() => [\n _hoisted_1\n ]),\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"ul\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.$i18n.availableLocales, (locale) => {\n return _withDirectives((_openBlock(), _createElementBlock(\"li\", {\n tabindex: \"0\",\n class: _normalizeClass([[\n\t\t\t\t\t\t\tlocale === _ctx.$i18n.locale\n\t\t\t\t\t\t\t\t? 'bg-primary bg-opacity-20 text-primary font-semibold'\n\t\t\t\t\t\t\t\t: 'hover:bg-light',\n\t\t\t\t\t\t], \"flex px-8 py-2 transition-colors cursor-pointer items-top duration75\"]),\n key: 'locale-' + locale,\n onClick: ($event: any) => (_ctx.onLocaleChange(locale))\n }, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"locales.\" + locale)), 1)\n ], 10, _hoisted_4)), [\n [_directive_wave]\n ])\n }), 128))\n ])\n ])\n ]),\n _: 1\n }, 8, [\"expanded\"])\n ]))\n}","\nconst SELECTED_LOCALE_KEY = \"locale\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport Btn from \"./Btn.vue\";\nimport DropdownMenu from \"./DropdownMenu.vue\";\nexport default defineComponent({\n\tname: \"LocaleSelector\",\n\tprops: {},\n\tcreated() {\n\t\tif (SELECTED_LOCALE_KEY in localStorage) {\n\t\t\tthis.$i18n.locale = localStorage.getItem(SELECTED_LOCALE_KEY) as string;\n\t\t}\n\t},\n\tmethods: {\n\t\tonLocaleChange(locale: string) {\n\t\t\tthis.$i18n.locale = locale;\n\t\t\tlocalStorage.setItem(SELECTED_LOCALE_KEY, locale);\n\t\t\tthis.expanded = false;\n\t\t},\n\t},\n\tcomputed: {},\n\tcomponents: { DropdownMenu },\n\tdata() {\n\t\treturn {\n\t\t\texpanded: false,\n\t\t};\n\t},\n});\n","import { render } from \"./LocaleSelector.vue?vue&type=template&id=61ec6ef9&ts=true\"\nimport script from \"./LocaleSelector.vue?vue&type=script&lang=ts\"\nexport * from \"./LocaleSelector.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n//import { useMetaStore } from \"@/stores/metaStore\";\nimport { isDemoMode, logAnalyticsEvent } from \"@/utils\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport Avatar from \"./Avatar.vue\";\n//import { mapStores } from \"pinia\";\nimport Btn from \"./Btn.vue\";\nimport DropdownMenu from \"./DropdownMenu.vue\";\nimport LocaleSelector from \"./LocaleSelector.vue\";\n// import Tooltip from \"./Tooltip.vue\";\nexport default defineComponent({\n\tname: \"AppBar\",\n\tprops: {\n\t\tsticky: {\n\t\t\ttype: Boolean,\n\t\t\tdeafault: true,\n\t\t},\n\t\tmoreHorizontalPadding: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tsidebarCollapsed: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tshowCollapseSideBarButton: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tshowHelpCenterButton: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tshowLocaleSelector: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tshowMobileSidebarButton: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tsetup() {\n\t\t// TODO temporary workaround for a werid issue: if use import like this:\n\t\t//import { useMainStore } from \"./stores/mainStore\";\n\t\t// the app won't render as useMainStore will be undefined in other components; investigate\n\t\tconst useMetaStore = require(\"../../stores/metaStore\").useMetaStore;\n\t\tconst metaStore = useMetaStore();\n\t\treturn {\n\t\t\tmetaStore,\n\t\t};\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tdonateExpanded: false,\n\t\t};\n\t},\n\tmethods: {\n\t\tonToggleDonate() {\n\t\t\tif (!this.donateExpanded) {\n\t\t\t\tlogAnalyticsEvent(\"toggledDonate\", {});\n\t\t\t}\n\t\t\tthis.donateExpanded = !this.donateExpanded;\n\t\t},\n\t},\n\tcomputed: {\n\t\t//...mapStores(useMetaStore),\n\t\tisDemoMode() {\n\t\t\treturn isDemoMode();\n\t\t},\n\t\tlogoUrl() {\n\t\t\treturn require(\"../../assets/logo.png\");\n\t\t},\n\t},\n\tcomponents: {\n\t\tBtn,\n\t\tDropdownMenu,\n\t\tLocaleSelector,\n\t\tAvatar,\n\t\t//\tTooltip\n\t},\n});\n","import { render } from \"./AppBar.vue?vue&type=template&id=2db1f5f0&ts=true\"\nimport script from \"./AppBar.vue?vue&type=script&lang=ts\"\nexport * from \"./AppBar.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n style: {\"z-index\":\"9999\"},\n class: \"fixed bottom-3 left-0\"\n}\nconst _hoisted_2 = {\n class: \"w-full px-4 py-3 rounded opacity-100 shadow-popup text-lightText bg-dark bg-opacity-95 border-danger-dark\",\n role: \"alert\"\n}\nconst _hoisted_3 = { class: \"flex items-center space-x-2\" }\nconst _hoisted_4 = { class: \"material-icons-outlined\" }\nconst _hoisted_5 = { class: \"\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, _toDisplayString(_ctx.icon), 1),\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"p\", _hoisted_5, _toDisplayString(_ctx.message), 1)\n ])\n ])\n ])\n ]))\n}","\nimport { defineComponent } from \"@vue/runtime-core\";\n\nexport default defineComponent({\n\tname: \"SnackBar\",\n\tprops: {\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\tdefault: \"\",\n\t\t},\n\t\tmessage: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n});\n","import { render } from \"./SnackBar.vue?vue&type=template&id=813ae698&ts=true\"\nimport script from \"./SnackBar.vue?vue&type=script&lang=ts\"\nexport * from \"./SnackBar.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex flex-col items-center w-full mx-auto mt-16\" }\nconst _hoisted_2 = {\n style: {\"font-size\":\"10rem\"},\n class: \"material-icons-outlined opacity-10\"\n}\nconst _hoisted_3 = {\n key: 0,\n class: \"mt-2 mb-4 text-muted text-lg\"\n}\nconst _hoisted_4 = {\n key: 1,\n class: \"opacity-40\"\n}\nconst _hoisted_5 = {\n key: 2,\n class: \"mt-2 mb-4 text-muted text-lg\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"p\", _hoisted_2, _toDisplayString(_ctx.isMaintenanceMode ? \"engineering\" : _ctx.data.icon), 1),\n (_ctx.isMaintenanceMode)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_3, _toDisplayString(_ctx.$t(\"misc.maintenance_mode\")), 1))\n : (!_ctx.hasCustomMessage)\n ? (_openBlock(), _createElementBlock(\"h2\", _hoisted_4, _toDisplayString(_ctx.data.title), 1))\n : (_openBlock(), _createElementBlock(\"p\", _hoisted_5, _toDisplayString(_ctx.$t(\"server_messages.error.\" + _ctx.data.content)), 1)),\n _createVNode(_component_Btn, {\n class: \"mt-2\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$router.go(0)))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"errors.retry\")), 1)\n ]),\n _: 1\n })\n ]))\n}","\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport Btn from \"@/components/ui/Btn.vue\";\nimport { isMaintenanceMode, DEFAULT_SERVER_MESSAGES } from \"@/utils\";\nimport { ErrorMessage } from \"@/interfaces\";\n\nexport default defineComponent({\n\tname: \"ErrorView\",\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object as PropType,\n\t\t},\n\t},\n\tcomputed: {\n\t\tisMaintenanceMode() {\n\t\t\treturn isMaintenanceMode();\n\t\t},\n\t\thasCustomMessage() {\n\t\t\treturn (\n\t\t\t\t(this.data?.content ?? \"\").length > 0 &&\n\t\t\t\t!DEFAULT_SERVER_MESSAGES.includes(this.data?.content ?? \"\")\n\t\t\t);\n\t\t},\n\t},\n\tmethods: {},\n\tcomponents: { Btn },\n});\n","import { render } from \"./ErrorView.vue?vue&type=template&id=2ef80b8d&ts=true\"\nimport script from \"./ErrorView.vue?vue&type=script&lang=ts\"\nexport * from \"./ErrorView.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, createCommentVNode as _createCommentVNode, withCtx as _withCtx, createVNode as _createVNode, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = { class: \"mt-2\" }\nconst _hoisted_2 = { class: \"mb-4\" }\nconst _hoisted_3 = { class: \"flex items-center space-x-2\" }\nconst _hoisted_4 = { class: \"text-lg font-medium\" }\nconst _hoisted_5 = { class: \"text-sm text-muted -mb-1.25px\" }\nconst _hoisted_6 = { class: \"mb-1\" }\nconst _hoisted_7 = { class: \"grid grid-cols-3 gap-x-6\" }\nconst _hoisted_8 = { class: \"text-muted text-xs text-center\" }\nconst _hoisted_9 = {\n key: 0,\n class: \"flex flex-col -mt-12\"\n}\nconst _hoisted_10 = {\n style: {\"font-size\":\"10rem\"},\n class: \"opacity-10 mx-auto\"\n}\nconst _hoisted_11 = {\n style: {\"width\":\"10rem\",\"height\":\"10rem\"},\n viewBox: \"0 0 24 24\"\n}\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12C22,10.84 21.79,9.69 21.39,8.61L19.79,10.21C19.93,10.8 20,11.4 20,12A8,8 0 0,1 12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4C12.6,4 13.2,4.07 13.79,4.21L15.4,2.6C14.31,2.21 13.16,2 12,2M19,2L15,6V7.5L12.45,10.05C12.3,10 12.15,10 12,10A2,2 0 0,0 10,12A2,2 0 0,0 12,14A2,2 0 0,0 14,12C14,11.85 14,11.7 13.95,11.55L16.5,9H18L22,5H19V2M12,6A6,6 0 0,0 6,12A6,6 0 0,0 12,18A6,6 0 0,0 18,12H16A4,4 0 0,1 12,16A4,4 0 0,1 8,12A4,4 0 0,1 12,8V6Z\"\n}, null, -1)\nconst _hoisted_13 = [\n _hoisted_12\n]\nconst _hoisted_14 = { class: \"mx-auto opacity-40 -mt-4\" }\nconst _hoisted_15 = { class: \"flex items-center ml-1 mt-6 pt-6 border-t border-gray-200 space-x-4\" }\nconst _hoisted_16 = { class: \"flex items-center space-x-1\" }\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"p\", { class: \"material-icons mr-1.5 text-primary\" }, \"auto_awesome\", -1)\nconst _hoisted_18 = { class: \"font-semibold text-lg\" }\nconst _hoisted_19 = { class: \"flex items-center space-x-1\" }\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"p\", { class: \"material-icons-outlined text-primary\" }, \"leaderboard\", -1)\nconst _hoisted_21 = { class: \"text-lg\" }\nconst _hoisted_22 = {\n style: {\"width\":\"24px\",\"height\":\"24px\"},\n viewBox: \"0 0 24 24\"\n}\nconst _hoisted_23 = /*#__PURE__*/_createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M5 16L3 5L8.5 10L12 4L15.5 10L21 5L19 16H5M19 19C19 19.6 18.6 20 18 20H6C5.4 20 5 19.6 5 19V18H19V19Z\"\n}, null, -1)\nconst _hoisted_24 = [\n _hoisted_23\n]\nconst _hoisted_25 = {\n key: 1,\n class: \"ml-4 flex items-center flex-wrap space-x-0.5\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_CircularProgress = _resolveComponent(\"CircularProgress\")!\n const _component_Spinner = _resolveComponent(\"Spinner\")!\n const _component_Tooltip = _resolveComponent(\"Tooltip\")!\n const _component_GamificationBadge = _resolveComponent(\"GamificationBadge\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"h3\", _hoisted_2, _toDisplayString(_ctx.$t(\"gamification.goals\")), 1),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.sortedGoals, (goal) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"mb-6\",\n key: 'goal-' + goal.id\n }, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"h5\", _hoisted_4, _toDisplayString(goal.name), 1),\n _createElementVNode(\"p\", _hoisted_5, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"gamification.current_level\")) + \": \", 1),\n _createElementVNode(\"strong\", null, _toDisplayString(_ctx.mainStore.progressByGoalId[goal.id]?.current_level ?? 0), 1)\n ])\n ]),\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"p\", _hoisted_6, _toDisplayString(_ctx.$t(\"gamification.to_reach_next_level\")) + \":\", 1),\n _createElementVNode(\"div\", _hoisted_7, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.getNextLevel(goal)?.requirements ?? [], (requirement, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"flex flex-col items-center whitespace-normal space-y-1\",\n key: 'goal-' + goal.id + '-req-' + index\n }, [\n (!_ctx.loadingProgressByGoalId[goal.id])\n ? (_openBlock(), _createBlock(_component_CircularProgress, {\n key: 0,\n size: 'sm',\n value: _ctx.getActionCount(goal, requirement.action),\n total: requirement.amount\n }, null, 8, [\"value\", \"total\"]))\n : (_openBlock(), _createBlock(_component_Spinner, {\n key: 1,\n size: 'lg'\n })),\n _createElementVNode(\"p\", _hoisted_8, _toDisplayString(_ctx.$t(\"gamification.actions.\" + requirement.action)) + \" \", 1)\n ]))\n }), 128))\n ])\n ])\n ]))\n }), 128)),\n (_ctx.sortedGoals.length === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [\n _createElementVNode(\"p\", _hoisted_10, [\n (_openBlock(), _createElementBlock(\"svg\", _hoisted_11, _hoisted_13))\n ]),\n _createElementVNode(\"h4\", _hoisted_14, _toDisplayString(_ctx.$t(\"gamification.no_goals\")), 1)\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_15, [\n _createVNode(_component_Tooltip, {\n placement: 'top',\n textValue: _ctx.$t('gamification.your_reputation')\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_16, [\n _hoisted_17,\n _createElementVNode(\"p\", _hoisted_18, _toDisplayString(_ctx.mainStore.gamificationContext?.reputation ?? 0), 1)\n ])\n ]),\n _: 1\n }, 8, [\"textValue\"]),\n (\n\t\t\t\t\t_ctx.mainStore.gamificationContext &&\n\t\t\t\t\t_ctx.mainStore.gamificationContext.leaderboard_position !== null\n\t\t\t\t)\n ? (_openBlock(), _createBlock(_component_Tooltip, {\n key: 0,\n placement: 'top',\n textValue: _ctx.$t('gamification.your_leaderboard_position')\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_19, [\n _hoisted_20,\n _createElementVNode(\"p\", _hoisted_21, _toDisplayString(_ctx.mainStore.gamificationContext.leaderboard_position), 1),\n (_ctx.mainStore.gamificationContext.leaderboard_position <= 3)\n ? (_openBlock(), _createElementBlock(\"p\", {\n key: 0,\n class: _normalizeClass({\n\t\t\t\t\t\t\t'text-yellow-400': _ctx.mainStore.gamificationContext.leaderboard_position === 1,\n\t\t\t\t\t\t\t'text-gray-400': _ctx.mainStore.gamificationContext.leaderboard_position === 2,\n\t\t\t\t\t\t\t'text-yellow-900': _ctx.mainStore.gamificationContext.leaderboard_position === 3,\n\t\t\t\t\t\t})\n }, [\n (_openBlock(), _createElementBlock(\"svg\", _hoisted_22, _hoisted_24))\n ], 2))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _: 1\n }, 8, [\"textValue\"]))\n : _createCommentVNode(\"\", true),\n true\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_25, [\n _createVNode(_component_GamificationBadge, { class: \"text-primary\" }),\n _createVNode(_component_GamificationBadge, { class: \"text-primary\" }),\n _createVNode(_component_GamificationBadge, { class: \"text-primary-light\" }),\n _createVNode(_component_GamificationBadge, { class: \"text-primary-dark\" }),\n _createVNode(_component_GamificationBadge, { class: \"text-gray-500\" }),\n _createVNode(_component_GamificationBadge, { class: \"text-success\" })\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n}","import { toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = [\"aria-valuenow\"]\nconst _hoisted_2 = { key: 0 }\nconst _hoisted_3 = { key: 1 }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", null, [\n _createElementVNode(\"div\", {\n role: \"progressbar\",\n \"aria-valuenow\": _ctx.percentage,\n \"aria-valuemin\": \"0\",\n \"aria-valuemax\": \"100\",\n style: _normalizeStyle(_ctx.style)\n }, [\n (_ctx.displayType === 'fraction')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, _toDisplayString(_ctx.value) + \" / \" + _toDisplayString(_ctx.total), 1))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, _toDisplayString(_ctx.percentage), 1))\n ], 12, _hoisted_1)\n ]))\n}","\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nexport default defineComponent({\n\tname: \"CircularProgress\",\n\tprops: {\n\t\tvalue: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t\ttotal: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t\tdisplayType: {\n\t\t\ttype: String as PropType<\"percentage\" | \"fraction\">,\n\t\t\tdefault: \"fraction\",\n\t\t},\n\t\tsize: {\n\t\t\ttype: String as PropType<\"sm\" | \"md\" | \"lg\">,\n\t\t\tdefault: \"md\",\n\t\t},\n\t},\n\tmethods: {},\n\tcomputed: {\n\t\tpercentage() {\n\t\t\treturn Math.floor((this.value / this.total) * 100);\n\t\t},\n\t\tsideLength() {\n\t\t\treturn this.size === \"sm\" ? 3.5 : this.size === \"md\" ? 7 : 10;\n\t\t},\n\t\tstyle() {\n\t\t\treturn {\n\t\t\t\twidth: this.sideLength + \"rem\",\n\t\t\t\theight: this.sideLength + \"rem\",\n\t\t\t\t\"font-size\": this.sideLength / 4.25 + \"rem\",\n\t\t\t\t\"--value\": this.percentage,\n\t\t\t};\n\t\t},\n\t},\n});\n","import { render } from \"./CircularProgress.vue?vue&type=template&id=5ed4a758&ts=true\"\nimport script from \"./CircularProgress.vue?vue&type=script&lang=ts\"\nexport * from \"./CircularProgress.vue?vue&type=script&lang=ts\"\n\nimport \"./CircularProgress.vue?vue&type=style&index=0&id=5ed4a758&lang=css\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n style: {\"width\":\"24px\",\"height\":\"24px\"},\n viewBox: \"0 0 24 24\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M20.39,19.37L16.38,18L15,22L11.92,16L9,22L7.62,18L3.61,19.37L6.53,13.37C5.57,12.17 5,10.65 5,9A7,7 0 0,1 12,2A7,7 0 0,1 19,9C19,10.65 18.43,12.17 17.47,13.37L20.39,19.37M7,9L9.69,10.34L9.5,13.34L12,11.68L14.5,13.33L14.33,10.34L17,9L14.32,7.65L14.5,4.67L12,6.31L9.5,4.65L9.67,7.66L7,9Z\"\n}, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", null, [\n (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n ]))\n}","\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nexport default defineComponent({\n\tname: \"GamificationBadge\",\n\tprops: {},\n\tmethods: {},\n\tcomputed: {},\n});\n","import { render } from \"./GamificationBadge.vue?vue&type=template&id=b679ca90&ts=true\"\nimport script from \"./GamificationBadge.vue?vue&type=script&lang=ts\"\nexport * from \"./GamificationBadge.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport {\n\tActionCount,\n\tGamificationAction,\n\tGoal,\n\tGoalLevel,\n\tGoalProgress,\n} from \"@/gamification\";\nimport { defineComponent } from \"@vue/runtime-core\";\nimport CircularProgress from \"../ui/CircularProgress.vue\";\nimport Spinner from \"../ui/Spinner.vue\";\nimport GamificationBadge from \"../ui/GamificationBadge.vue\";\nimport Tooltip from \"../ui/Tooltip.vue\";\nimport { mapStores } from \"pinia\";\nimport { useMainStore } from \"@/stores/mainStore\";\nexport default defineComponent({\n\tname: \"GamificationContextPanel\",\n\tprops: {},\n\tasync created() {\n\t\tthis.mainStore.gamificationContextGoals.forEach(async (g: Goal) => {\n\t\t\tthis.loadingProgressByGoalId[g.id] = true;\n\t\t\tawait this.mainStore.getGamificationGoalProgress({\n\t\t\t\tcontextId: this.mainStore.gamificationContext?.id ?? \"\",\n\t\t\t\tgoalId: g.id,\n\t\t\t});\n\t\t\tthis.loadingProgressByGoalId[g.id] = false;\n\t\t});\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tloadingProgressByGoalId: {} as Record,\n\t\t};\n\t},\n\tmethods: {\n\t\tgetNextLevel(goal: Goal): GoalLevel | undefined {\n\t\t\treturn goal.levels.find(\n\t\t\t\tl =>\n\t\t\t\t\tl.level_value ===\n\t\t\t\t\t(this.mainStore.progressByGoalId[goal.id]?.current_level ?? 0) + 1,\n\t\t\t);\n\t\t},\n\t\tgetActionCount(goal: Goal, action: GamificationAction) {\n\t\t\tconst progress = this.mainStore.progressByGoalId[goal.id] as\n\t\t\t\t| GoalProgress\n\t\t\t\t| undefined;\n\t\t\tif (!progress) {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\treturn progress.action_counts.find(c => c.action === action)?.amount ?? 0;\n\t\t},\n\t\tgetPercentageRequirementProgress(goal: Goal, requirement: ActionCount): number {\n\t\t\tconst count = this.getActionCount(goal, requirement.action);\n\t\t\treturn (count / requirement.amount) * 100;\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore),\n\t\tsortedGoals(): Goal[] {\n\t\t\treturn this.mainStore.gamificationContextGoals;\n\t\t},\n\t},\n\tcomponents: { CircularProgress, Spinner, GamificationBadge, Tooltip },\n});\n","import { render } from \"./GamificationContextPanel.vue?vue&type=template&id=50845bcf&ts=true\"\nimport script from \"./GamificationContextPanel.vue?vue&type=script&lang=ts\"\nexport * from \"./GamificationContextPanel.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { defineComponent, Ref, ref } from \"@vue/runtime-core\";\nimport Spinner from \"./components/ui/Spinner.vue\";\nimport Notification from \"./components/ui/Notification.vue\";\nimport { getTranslatedString as _ } from \"./i18n\";\n\nimport { debounce } from \"lodash\";\nimport { Course, CoursePrivilege } from \"./models\";\nimport Tooltip from \"./components/ui/Tooltip.vue\";\nimport SideBar from \"./components/ui/SideBar.vue\";\nimport { RouterView } from \"vue-router\";\nimport { SidebarOption } from \"./navigation/sidebar\";\nimport { metaStore } from \"./store/meta\";\nimport { isDemoMode } from \"./utils\";\nimport AppBar from \"./components/ui/AppBar.vue\";\nimport SnackBar from \"./components/ui/SnackBar.vue\";\nimport ErrorView from \"./views/shared/ErrorView.vue\";\nimport Btn from \"./components/ui/Btn.vue\";\nimport { Breadcrumbs } from \"@sentry/browser/dist/integrations\";\nimport BreadCrumbs from \"./components/ui/BreadCrumbs.vue\";\nimport DraggablePopup from \"./components/ui/DraggablePopup.vue\";\nimport GamificationContextPanel from \"./components/student/GamificationContextPanel.vue\";\nimport { courseFeatureMixin, coursePrivilegeMixin } from \"./mixins\";\n\n//import { typesetTex } from \"./utils\";\nconst SIDEBAR_COLLASPED_LOCALSTORAGE = \"sidebar_collapsed\";\nexport default defineComponent({\n\tsetup() {\n\t\t// TODO temporary workaround for a werid issue: if use import like this:\n\t\t//import { useMainStore } from \"./stores/mainStore\";\n\t\t// the app won't render as useMainStore will be undefined in other components; investigate\n\t\tconst useMainStore = require(\"./stores/mainStore\").useMainStore;\n\t\tconst useMetaStore = require(\"./stores/metaStore\").useMetaStore;\n\t\tconst mainStore = useMainStore();\n\t\tconst metaStore = useMetaStore();\n\t\tconst logOut = require(\"./utils\").logOut;\n\n\t\treturn {\n\t\t\tmainStore,\n\t\t\tmetaStore,\n\t\t\tlogOut,\n\t\t};\n\t},\n\tbeforeCreate(): void {\n\t\tthis.metaStore.initStore();\n\t},\n\tmixins: [coursePrivilegeMixin, courseFeatureMixin],\n\tmounted() {\n\t\t// TODO refactor\n\t\tsetTimeout(() => {\n\t\t\tthis.routerViewPaddingLeft =\n\t\t\t\tdocument.getElementById(\"desktop-nav\")?.clientWidth ?? 0;\n\n\t\t\tconst sidebarCollapsedLocalStorage =\n\t\t\t\tlocalStorage.getItem(SIDEBAR_COLLASPED_LOCALSTORAGE) ?? \"false\";\n\n\t\t\tlet sidebarCollapsed;\n\t\t\ttry {\n\t\t\t\tsidebarCollapsed = JSON.parse(sidebarCollapsedLocalStorage);\n\t\t\t} catch {\n\t\t\t\tsidebarCollapsed = false;\n\t\t\t}\n\n\t\t\tthis.initializingSidebar = true;\n\t\t\tthis.sidebarCollapsed = sidebarCollapsed;\n\t\t\t// TODO use on animation end trigger\n\t\t\tsetTimeout(() => (this.initializingSidebar = false), 50);\n\t\t}, 1);\n\t\t// adjust router view padding and width according to screen size breakpoint\n\t\tconst mq = window.matchMedia(\"(min-width: 768px)\");\n\t\tmq.addEventListener(\"change\", event => (this.mediaQueryMd = mq.matches));\n\t\tthis.mediaQueryMd = mq.matches;\n\t},\n\tbeforeUnmount() {\n\t\twindow.removeEventListener(\"beforeunload\", this.beforeWindowUnload);\n\t},\n\tcomponents: {\n\t\tSpinner,\n\t\tNotification,\n\t\tTooltip,\n\t\tSideBar,\n\t\tAppBar,\n\t\tSnackBar,\n\t\tErrorView,\n\t\tBtn,\n\t\tBreadCrumbs,\n\t\tDraggablePopup,\n\t\tGamificationContextPanel,\n\t},\n\tasync created() {\n\t\tif (this.metaStore.isAuthenticated) {\n\t\t\t// TODO export to router - this is its concern\n\t\t\ttry {\n\t\t\t\tawait this.mainStore.getCourses();\n\t\t\t\t// redirect to student view if attempting to access a teacher view unprivileged,\n\t\t\t\t// or to unprivileged route specified in route meta\n\t\t\t\tif (!this.hasAnyPrivilegesOrIsTeacher && this.isTeacherRoute) {\n\t\t\t\t\tconst redirectTo = this.$route.meta.unprivilegedRedirect as string | undefined;\n\t\t\t\t\tthis.$router.push({\n\t\t\t\t\t\tname:\n\t\t\t\t\t\t\tredirectTo ??\n\t\t\t\t\t\t\t(this.metaStore.user?.is_teacher\n\t\t\t\t\t\t\t\t? \"TeacherCourseList\"\n\t\t\t\t\t\t\t\t: \"StudentCourseList\"),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tconsole.log(\"Caught\", e);\n\t\t\t}\n\t\t}\n\t\twindow.addEventListener(\"beforeunload\", this.beforeWindowUnload);\n\n\t\tthis.typesetTex = debounce(this.typesetTex, 100);\n\t},\n\twatch: {\n\t\tdirtyTex(newVal) {\n\t\t\tif (newVal) {\n\t\t\t\tthis.typesetTex();\n\t\t\t\tthis.metaStore.dirtyTex = false;\n\t\t\t}\n\t\t},\n\t\t$route(newVal) {\n\t\t\tif (this.showMobileSidebar) {\n\t\t\t\tthis.onToggleMobileSidebar();\n\t\t\t}\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tshowUnsavedChangesNotification: false,\n\t\t\tshowGamificationPanel: false,\n\t\t\tshowMobileSidebar: false,\n\t\t\trouterViewPaddingLeft: 0,\n\t\t\tmediaQueryMd: false,\n\t\t\tinitializingSidebar: false,\n\t\t\tsidebarCollapsed: true,\n\t\t};\n\t},\n\tmethods: {\n\t\t//logOut,\n\t\tonToggleCollapseSidebar() {\n\t\t\tthis.sidebarCollapsed = !this.sidebarCollapsed;\n\t\t\tlocalStorage.setItem(\n\t\t\t\tSIDEBAR_COLLASPED_LOCALSTORAGE,\n\t\t\t\tJSON.stringify(this.sidebarCollapsed),\n\t\t\t);\n\t\t},\n\t\tonToggleMobileSidebar() {\n\t\t\tthis.showMobileSidebar = !this.showMobileSidebar;\n\t\t},\n\t\ttypesetTex() {\n\t\t\t(window as any).MathJax?.typeset?.();\n\t\t},\n\t\tbeforeWindowUnload(e: { preventDefault: () => void; returnValue: string }) {\n\t\t\tif (\n\t\t\t\tthis.metaStore.unsavedChanges &&\n\t\t\t\t!window.confirm(_(\"misc.confirm_exiting_unsaved_changes\"))\n\t\t\t) {\n\t\t\t\t// Cancel the event\n\t\t\t\te.preventDefault();\n\t\t\t\t// Chrome requires returnValue to be set\n\t\t\t\te.returnValue = \"\";\n\t\t\t}\n\t\t},\n\t},\n\tcomputed: {\n\t\tshowAppBar() {\n\t\t\treturn this.$route.name !== \"Login\";\n\t\t},\n\t\tshowFooter() {\n\t\t\treturn this.$route.name !== \"Login\";\n\t\t},\n\t\tcurrentCourse() {\n\t\t\treturn this.mainStore.getCourseById(\n\t\t\t\tthis.$router.currentRoute.value.params.courseId as any as string,\n\t\t\t);\n\t\t},\n\t\tcurrentCourseName() {\n\t\t\treturn this.currentCourse?.name ?? \"\";\n\t\t},\n\t\tsidebarOptions(): SidebarOption[] {\n\t\t\tconst sidebarOptions = (this.$route.meta?.sidebarOptions ?? []) as SidebarOption[];\n\n\t\t\t// override path for course list for teachers so it goes to /teacher/courses\n\t\t\t// instead of /student/courses\n\t\t\tconst courseListRoute = sidebarOptions.find(\n\t\t\t\tr => r.routeName === \"StudentCourseList\",\n\t\t\t);\n\t\t\tif (courseListRoute && this.metaStore.user?.is_teacher) {\n\t\t\t\tcourseListRoute.routeName = \"TeacherCourseList\";\n\t\t\t}\n\n\t\t\treturn [\n\t\t\t\t...sidebarOptions.filter(\n\t\t\t\t\tr =>\n\t\t\t\t\t\tr.routeName !== \"StudentCourseList\" && // treat course list separately\n\t\t\t\t\t\tthis.hasPrivileges(r.requiredPrivileges) &&\n\t\t\t\t\t\tthis.hasFeatures(r.requiredFeatures),\n\t\t\t\t),\n\t\t\t\t...(courseListRoute ? [courseListRoute] : []),\n\t\t\t];\n\t\t},\n\t\tshowSidebar() {\n\t\t\treturn ((this.$route.meta?.sidebarOptions ?? []) as SidebarOption[]).length > 0;\n\t\t},\n\t\tdirtyTex() {\n\t\t\treturn this.metaStore.dirtyTex;\n\t\t},\n\t\tisDemoMode() {\n\t\t\treturn JSON.parse(process.env.VUE_APP_DEMO_MODE ?? \"false\");\n\t\t},\n\t\thasAnyPrivilegesOrIsTeacher(): boolean {\n\t\t\tif (this.$router.currentRoute.value.params.courseId) {\n\t\t\t\t// check user has privileges for course currrently visited\n\t\t\t\tconst myPrivileges: CoursePrivilege[] =\n\t\t\t\t\tthis.mainStore.courses.find(\n\t\t\t\t\t\t(c: Course) =>\n\t\t\t\t\t\t\tc.id == (this.$router.currentRoute.value.params.courseId ?? \"\"),\n\t\t\t\t\t)?.privileges ?? [];\n\t\t\t\treturn myPrivileges.length > 0;\n\t\t\t}\n\n\t\t\t// check user has any privileges at all if not visiting a\n\t\t\t// course (i.e. in course list) or that the user is a teacher\n\t\t\treturn (\n\t\t\t\tthis.metaStore.user?.is_teacher ||\n\t\t\t\t(this.mainStore.courses as Course[])\n\t\t\t\t\t.map(c => c.privileges ?? [])\n\t\t\t\t\t.some(p => p.length > 0)\n\t\t\t);\n\t\t},\n\t\tisTeacherRoute(): boolean {\n\t\t\treturn !!this.$route.meta.teacherRoute;\n\t\t},\n\t\tshowHelpCenterButton() {\n\t\t\treturn this.isTeacherRoute;\n\t\t},\n\t\tshowLocaleSelector() {\n\t\t\treturn true;\n\t\t},\n\t\tshowSecondaryHeader(): boolean {\n\t\t\t// hide header in routes that have a sidebar\n\t\t\treturn (\n\t\t\t\t!this.$route.matched.map(m => m.name).includes(\"StudentCourseDashboard\") &&\n\t\t\t\t!this.isTeacherRoute &&\n\t\t\t\tthis.$route.name !== \"StudentCourseList\" &&\n\t\t\t\tthis.$route.name !== \"Login\"\n\t\t\t);\n\t\t},\n\t},\n});\n","import { render } from \"./App.vue?vue&type=template&id=456359d0&ts=true\"\nimport script from \"./App.vue?vue&type=script&lang=ts\"\nexport * from \"./App.vue?vue&type=script&lang=ts\"\n\nimport \"./App.vue?vue&type=style&index=0&id=456359d0&lang=css\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","/* eslint-disable */\nimport { createApp } from \"vue\";\nimport App from \"./App.vue\";\nimport router from \"./router\";\nimport axios from \"axios\";\nimport VueAxios from \"vue-axios\";\nimport { i18n } from \"./i18n\";\n\nimport \"./index.css\";\nimport VueClipboard from \"vue3-clipboard\";\n\nimport Vue3Tour from \"vue3-tour\";\n\nimport * as Sentry from \"@sentry/vue\";\nimport { BrowserTracing } from \"@sentry/tracing\";\n\nimport \"vue3-tour/dist/vue3-tour.css\";\nimport { clickOutsideDirective, logOut, redirectToCourseEnrollment } from \"./utils\";\n\nimport Vue3Sanitize from \"vue-3-sanitize\";\n\nimport VWave from \"v-wave\";\nimport { sanitizeOptions } from \"./const\";\n\nimport VueGtag from \"vue-gtag\";\nimport { createPinia } from \"pinia\";\n\nimport vue3GoogleLogin from \"vue3-google-login\";\n\nconst dev = process.env.NODE_ENV !== \"production\";\n\naxios.defaults.baseURL = dev\n\t? process.env.VUE_APP_AXIOS_BASE ?? \"http://127.0.0.1:8000\"\n\t: process.env.VUE_APP_AXIOS_BASE;\n\naxios.interceptors.response.use(\n\tresponse => {\n\t\treturn response;\n\t},\n\terror => {\n\t\t/* \n\t\tTODO if this happens when calling a dispatcher url such as `courses/.../material/...`, it'll\n\t\tredirect to login?redirect=/ instead of redirecting to the original url. fix this\n\t\t*/\n\t\tif (\n\t\t\terror?.response?.status === 401 &&\n\t\t\t(router.currentRoute.value.name?.toString().toLowerCase() ?? \"\") !== \"login\"\n\t\t) {\n\t\t\tlogOut(false, router.currentRoute.value.fullPath);\n\t\t} else if (\n\t\t\terror?.response?.status === 403 &&\n\t\t\terror.response.data?.detail === \"NOT_ENROLLED\" &&\n\t\t\t!(\"redirect\" in router.currentRoute.value.query ?? {})\n\t\t) {\n\t\t\tredirectToCourseEnrollment(router.currentRoute.value.fullPath);\n\t\t}\n\t\tthrow error;\n\t},\n);\n\nconst app = createApp(App);\n\napp\n\t.directive(\"click-outside\", clickOutsideDirective)\n\t.use(createPinia())\n\t.use(vue3GoogleLogin, {\n\t\tclientId: process.env.VUE_APP_GOOGLE_CLIENT_ID,\n\t})\n\t.use(VWave, {\n\t\tduration: 0.3,\n\t})\n\t.use(router)\n\t.use(VueAxios, axios)\n\t.use(i18n)\n\t.use(VueClipboard, {\n\t\tautoSetContainer: true,\n\t\tappendToBody: true,\n\t})\n\t.use(Vue3Tour)\n\t.use(Vue3Sanitize, sanitizeOptions)\n\t.use(VueGtag, {\n\t\tconfig: { id: process.env.VUE_APP_GTAG_ID },\n\t})\n\t.mount(\"#app\");\n\nif (!dev && process.env.VUE_APP_SENTRY_URL) {\n\tSentry.init({\n\t\tapp,\n\t\tdsn: process.env.VUE_APP_SENTRY_URL,\n\t\tintegrations: [\n\t\t\tnew BrowserTracing({\n\t\t\t\troutingInstrumentation: Sentry.vueRouterInstrumentation(router),\n\t\t\t\ttracingOrigins: [\"localhost\", \"my-site-url.com\", /^\\//],\n\t\t\t}),\n\t\t],\n\t\ttracesSampleRate: 0.5,\n\t\tlogErrors: true,\n\t\tbeforeSend(event) {\n\t\t\tconst IGNORED_MESSAGES = [\n\t\t\t\t\"Request failed with status code 401\",\n\t\t\t\t\"Request failed with status code 403\",\n\t\t\t\t\"Request failed with status code 404\",\n\t\t\t];\n\t\t\tif (IGNORED_MESSAGES.includes(event.exception?.values?.[0]?.value ?? \"\")) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn event;\n\t\t},\n\t});\n}\n","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"img/logo.d7a8dea0.png\";","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, normalizeClass as _normalizeClass, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"relative\" }\nconst _hoisted_2 = { class: \"flex items-center absolute top-0 right-0 z-20 semi-transparent\" }\nconst _hoisted_3 = {\n style: {\"font-size\":\"18.5px !important\"},\n class: \"material-icons\"\n}\nconst _hoisted_4 = { class: \"absolute bottom-0 right-0 z-20 semi-transparent\" }\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined text-lightText\" }, \"expand_more\", -1)\nconst _hoisted_6 = { class: \"rounded-sm overflow-hidden\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_CopyToClipboard = _resolveComponent(\"CopyToClipboard\")!\n const _component_highlightjs = _resolveComponent(\"highlightjs\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_Btn, {\n variant: 'icon',\n outline: true,\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.setDark(!_ctx.dark))),\n class: _normalizeClass({ 'text-lightText': _ctx.dark })\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", _hoisted_3, _toDisplayString(_ctx.dark ? \"light_mode\" : \"dark_mode\"), 1)\n ]),\n _: 1\n }, 8, [\"class\"]),\n (!_ctx.useDefault)\n ? (_openBlock(), _createBlock(_component_CopyToClipboard, {\n key: 0,\n class: _normalizeClass({ 'text-lightText': _ctx.dark }),\n \"icon-only\": true,\n value: _ctx.value,\n tooltip: _ctx.$t('misc.copy')\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", {\n class: _normalizeClass([{ 'text-lightText': _ctx.dark }, \"material-icons-outlined\"]),\n style: {\"font-size\":\"16px !important\"}\n }, \" content_copy \", 2)\n ]),\n _: 1\n }, 8, [\"class\", \"value\", \"tooltip\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n (_ctx.collapsible && _ctx.isTruncated)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 0,\n variant: 'icon',\n outline: true,\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.expanded = true))\n }, {\n default: _withCtx(() => [\n _hoisted_5\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_6, [\n _createVNode(_component_highlightjs, {\n autodetect: \"\",\n code: _ctx.useDefault ? _ctx.defaultValue : _ctx.processedValue\n }, null, 8, [\"code\"])\n ])\n ]))\n}","\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\n//import SshPre from \"simple-syntax-highlighter\";\nimport \"simple-syntax-highlighter/dist/sshpre.css\";\nimport CopyToClipboard from \"./CopyToClipboard.vue\";\nimport Btn from \"./Btn.vue\";\n\nimport hljsVuePlugin from \"@highlightjs/vue-plugin\";\n// import \"highlight.js/styles/github-dark.css\";\n\n// TODO light theme import \"highlight.js/styles/base16/material-lighter.css\";\n// import \"highlight.js/styles/base16/material-darker.css\";\n\nimport hljs from \"highlight.js/lib/core\";\nimport javascript from \"highlight.js/lib/languages/javascript\";\nimport typescript from \"highlight.js/lib/languages/typescript\";\nimport python from \"highlight.js/lib/languages/python\";\nimport c from \"highlight.js/lib/languages/c\";\nimport cpp from \"highlight.js/lib/languages/cpp\";\nimport json from \"highlight.js/lib/languages/json\";\nimport css from \"highlight.js/lib/languages/css\";\nimport xml from \"highlight.js/lib/languages/xml\";\nimport rust from \"highlight.js/lib/languages/rust\";\nimport java from \"highlight.js/lib/languages/java\";\nimport latex from \"highlight.js/lib/languages/latex\";\nimport go from \"highlight.js/lib/languages/go\";\nimport csharp from \"highlight.js/lib/languages/csharp\";\nimport dockerfile from \"highlight.js/lib/languages/dockerfile\";\nimport haskell from \"highlight.js/lib/languages/haskell\";\nimport ocaml from \"highlight.js/lib/languages/ocaml\";\nimport php from \"highlight.js/lib/languages/php\";\nimport plaintext from \"highlight.js/lib/languages/plaintext\";\nimport r from \"highlight.js/lib/languages/r\";\nimport ruby from \"highlight.js/lib/languages/ruby\";\nimport scala from \"highlight.js/lib/languages/scala\";\nimport sql from \"highlight.js/lib/languages/sql\";\nimport verilog from \"highlight.js/lib/languages/verilog\";\nimport yaml from \"highlight.js/lib/languages/yaml\";\n\nhljs.registerLanguage(\"javascript\", javascript);\nhljs.registerLanguage(\"typescript\", typescript);\nhljs.registerLanguage(\"python\", python);\nhljs.registerLanguage(\"c\", c);\nhljs.registerLanguage(\"cpp\", cpp);\nhljs.registerLanguage(\"json\", json);\nhljs.registerLanguage(\"css\", css);\nhljs.registerLanguage(\"xml\", xml);\nhljs.registerLanguage(\"rust\", rust);\nhljs.registerLanguage(\"java\", java);\nhljs.registerLanguage(\"latex\", latex);\nhljs.registerLanguage(\"go\", go);\nhljs.registerLanguage(\"csharp\", csharp);\nhljs.registerLanguage(\"dockerfile\", dockerfile);\nhljs.registerLanguage(\"haskell\", haskell);\nhljs.registerLanguage(\"ocaml\", ocaml);\nhljs.registerLanguage(\"php\", php);\nhljs.registerLanguage(\"plaintext\", plaintext);\nhljs.registerLanguage(\"r\", r);\nhljs.registerLanguage(\"ruby\", ruby);\nhljs.registerLanguage(\"scala\", scala);\nhljs.registerLanguage(\"sql\", sql);\nhljs.registerLanguage(\"verilog\", verilog);\nhljs.registerLanguage(\"yaml\", yaml);\n\nconst MAX_COLLAPSED_LENGTH = 500;\nconst MAX_EXPANDED_LENGTH = 5000;\nconst MAX_COLLAPSED_LINES = 20;\n\nconst LOCALSTORAGE_DARK_THEME_KEY = \"highlightjs-code-dark\";\n\nexport default defineComponent({\n\tname: \"CodeFragment\",\n\tcomponents: {\n\t\t//SshPre,\n\t\thighlightjs: hljsVuePlugin.component,\n\t\tCopyToClipboard,\n\t\tBtn,\n\t},\n\tprops: {\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tsmall: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tlanguage: {\n\t\t\ttype: String as PropType<\"javascript\" | \"typescript\" | \"c\" | \"python\">,\n\t\t\tdefault: \"typescript\",\n\t\t},\n\t\tdefaultValue: {\n\t\t\ttype: String,\n\t\t\tdefault: \"\",\n\t\t},\n\t\tcollapsible: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tmounted() {\n\t\twindow.addEventListener(\n\t\t\t`${LOCALSTORAGE_DARK_THEME_KEY}-localstorage-changed`,\n\t\t\t(event: any) => {\n\t\t\t\t//console.log(\"ev\", event.detail);\n\t\t\t\tthis.updateDark(event.detail.storage);\n\t\t\t},\n\t\t);\n\t\ttry {\n\t\t\tconst isDark = JSON.parse(\n\t\t\t\tlocalStorage.getItem(LOCALSTORAGE_DARK_THEME_KEY) ?? \"true\",\n\t\t\t);\n\t\t\tthis.updateDark(isDark);\n\t\t} catch {\n\t\t\tthis.setDark(true);\n\t\t}\n\t},\n\twatch: {\n\t\t// value() {\n\t\t// \t// tear down and re-build component as it doesn't update on its own...\n\t\t// \tthis.show = false;\n\t\t// \tthis.$nextTick(() => (this.show = true));\n\t\t// },\n\t\t// processedValue() {\n\t\t// \t// tear down and re-build component as it doesn't update on its own...\n\t\t// \tthis.show = false;\n\t\t// \tthis.$nextTick(() => (this.show = true));\n\t\t// },\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tshow: true,\n\t\t\texpanded: false,\n\t\t\tdark: false, // can't directly watch localStorage, so use a support variable\n\t\t};\n\t},\n\tmethods: {\n\t\tsetDark(value: boolean) {\n\t\t\tlocalStorage.setItem(LOCALSTORAGE_DARK_THEME_KEY, JSON.stringify(value));\n\t\t\twindow.dispatchEvent(\n\t\t\t\tnew CustomEvent(`${LOCALSTORAGE_DARK_THEME_KEY}-localstorage-changed`, {\n\t\t\t\t\tdetail: {\n\t\t\t\t\t\tstorage: value,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t);\n\t\t\tthis.updateDark(value);\n\t\t},\n\t\tupdateDark(value: boolean) {\n\t\t\tconst themeTitles = [\"dark-highlightjs-theme\", \"light-highlightjs-theme\"];\n\t\t\tconst activeTheme = value ? themeTitles[0] : themeTitles[1];\n\t\t\tconst removeTheme = value ? themeTitles[1] : themeTitles[0];\n\t\t\tthis.dark = value;\n\n\t\t\t// console.log(\n\t\t\t// \tdocument.querySelector(`link[title=\"${activeTheme}\"]`),\n\t\t\t// \tdocument.querySelector(`link[title=\"${removeTheme}\"]`),\n\t\t\t// );\n\n\t\t\t// TODO have some transition\n\t\t\tdocument.querySelector(`link[title=\"${activeTheme}\"]`)?.removeAttribute(\"disabled\");\n\t\t\tdocument\n\t\t\t\t.querySelector(`link[title=\"${removeTheme}\"]`)\n\t\t\t\t?.setAttribute(\"disabled\", \"disabled\");\n\n\t\t\t// this.show = false;\n\t\t\t// this.$nextTick(() => (this.show = true));\n\t\t},\n\t},\n\tcomputed: {\n\t\tuseDefault() {\n\t\t\treturn this.value.trim().length === 0;\n\t\t},\n\t\tisTruncated() {\n\t\t\treturn (\n\t\t\t\tthis.collapsible &&\n\t\t\t\t!this.expanded &&\n\t\t\t\t(this.value.length > MAX_COLLAPSED_LENGTH ||\n\t\t\t\t\tthis.processedValueLinesHeight > MAX_COLLAPSED_LINES)\n\t\t\t);\n\t\t},\n\t\tprocessedValue(): string {\n\t\t\tif (this.useDefault) {\n\t\t\t\treturn this.defaultValue;\n\t\t\t}\n\t\t\tif (this.expanded || !this.collapsible) {\n\t\t\t\treturn (\n\t\t\t\t\tthis.value.substring(0, MAX_EXPANDED_LENGTH) +\n\t\t\t\t\t(this.value.length > MAX_EXPANDED_LENGTH ? \"...\" : \"\")\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst firstLines = this.value.split(\"\\n\").slice(0, MAX_COLLAPSED_LINES).join(\"\\n\");\n\t\t\treturn (\n\t\t\t\tfirstLines.substring(0, MAX_COLLAPSED_LENGTH) + (this.isTruncated ? \"...\" : \"\")\n\t\t\t);\n\t\t},\n\t\tprocessedValueLinesHeight() {\n\t\t\treturn this.value.split(\"\\n\").length;\n\t\t},\n\t},\n});\n","import { render } from \"./CodeFragment.vue?vue&type=template&id=198d0464&ts=true\"\nimport script from \"./CodeFragment.vue?vue&type=script&lang=ts\"\nexport * from \"./CodeFragment.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { ParticipationAssessmentProgress } from \"@/models\";\n\nexport const icons = {\n\t[ParticipationAssessmentProgress.NOT_ASSESSED]: [\"warning\"],\n\t[ParticipationAssessmentProgress.PARTIALLY_ASSESSED]: [\"pending_actions\"],\n\t[ParticipationAssessmentProgress.FULLY_ASSESSED]: [\"check\"],\n};\n","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex items-center max-w-xs overflow-x-auto text-xs md:max-w-max text-muted\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"font-semibold opacity-80 breadcrumb-item\"\n}\nconst _hoisted_3 = { class: \"\" }\nconst _hoisted_4 = {\n key: 2,\n class: \"mx-2 opacity-60\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.breadcrumbs, (breadcrumb, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: 'breadcrumb-' + index,\n class: \"flex items-center bg-black bg-opacity-0\"\n }, [\n (breadcrumb.routeName === _ctx.$route.name)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_2, _toDisplayString(breadcrumb.title), 1))\n : (_openBlock(), _createBlock(_component_router_link, {\n key: 1,\n to: {\n\t\t\t\t\tname: breadcrumb.routeName,\n\t\t\t\t\tparams: breadcrumb.routeParams ?? {},\n\t\t\t\t},\n class: \"link breadcrumb-item\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", _hoisted_3, _toDisplayString(breadcrumb.title), 1)\n ]),\n _: 2\n }, 1032, [\"to\"])),\n (index !== _ctx.breadcrumbs.length - 1)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_4, \"/\"))\n : _createCommentVNode(\"\", true)\n ]))\n }), 128))\n ]))\n}","\nimport { courseIdMixin, eventIdMixin, nodeIdMixin } from \"@/mixins\";\nimport { BreadCrumb } from \"@/navigation/breadcrumbs\";\nimport {\n\tROUTE_TITLE_COURSE_NAME_TOKEN,\n\tROUTE_TITLE_EVENT_NAME_TOKEN,\n\tROUTE_TITLE_NODE_NAME_TOKEN,\n} from \"@/navigation/const\";\nimport { useMainStore } from \"@/stores/mainStore\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport { mapStores } from \"pinia\";\nimport { RouteLocationNormalizedLoaded } from \"vue-router\";\nimport { getCourseTreeNodeTitle } from \"@/models\";\n\nexport default defineComponent({\n\tname: \"BreadCrumbs\",\n\tmixins: [courseIdMixin, eventIdMixin, nodeIdMixin],\n\tprops: {\n\t\troute: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tmethods: {\n\t\treplaceTitleTokens(str: string) {\n\t\t\tconst currentNode = this.mainStore.getCourseTreeNodeById(this.nodeId);\n\t\t\treturn str\n\t\t\t\t?.replace(ROUTE_TITLE_COURSE_NAME_TOKEN, this.currentCourse.name)\n\t\t\t\t?.replace(ROUTE_TITLE_EVENT_NAME_TOKEN, this.currentEvent || this.previewingEvent)\n\t\t\t\t?.replace(\n\t\t\t\t\tROUTE_TITLE_NODE_NAME_TOKEN,\n\t\t\t\t\tcurrentNode ? getCourseTreeNodeTitle(currentNode) : \"\",\n\t\t\t\t);\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore),\n\t\tbreadcrumbs(): BreadCrumb[] {\n\t\t\treturn ((this.route.meta.breadcrumbs as BreadCrumb[]) ?? []).map(b => ({\n\t\t\t\t...b,\n\t\t\t\ttitle: this.replaceTitleTokens(b.title),\n\t\t\t}));\n\t\t},\n\t},\n});\n","import { render } from \"./BreadCrumbs.vue?vue&type=template&id=79a57964&ts=true\"\nimport script from \"./BreadCrumbs.vue?vue&type=script&lang=ts\"\nexport * from \"./BreadCrumbs.vue?vue&type=script&lang=ts\"\n\nimport \"./BreadCrumbs.vue?vue&type=style&index=0&id=79a57964&lang=css\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./CalendarInput.vue?vue&type=style&index=0&id=3823f0b3&lang=css\"","import { openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeStyle as _normalizeStyle } from \"vue\"\n\nconst _hoisted_1 = { class: \"linear-activity\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"indeterminate\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_ctx.indeterminate)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2))\n : (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: \"determinate\",\n style: _normalizeStyle({ width: _ctx.progress + '%' })\n }, null, 4))\n ]))\n}","\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nexport default defineComponent({\n\tname: \"LinearProgress\",\n\tprops: {\n\t\tprogress: {\n\t\t\ttype: Number,\n\t\t\trequired: false,\n\t\t\tvalidator: (v: number) => v >= 0 && v <= 100,\n\t\t},\n\t},\n\tmethods: {},\n\tcomputed: {\n\t\tindeterminate() {\n\t\t\treturn typeof this.progress === \"undefined\";\n\t\t},\n\t},\n});\n","import { render } from \"./LinearProgress.vue?vue&type=template&id=30840ab4&ts=true\"\nimport script from \"./LinearProgress.vue?vue&type=script&lang=ts\"\nexport * from \"./LinearProgress.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","module.exports = __webpack_public_path__ + \"img/evo_logo.644f8152.png\";","import { ExerciseType } from \"@/models\";\n\nexport const icons = {\n\t[ExerciseType.MULTIPLE_CHOICE_SINGLE_POSSIBLE]: [\n\t\t\"radio_button_checked\",\n\t\t// \"radio_button_unchecked\",\n\t],\n\t[ExerciseType.MULTIPLE_CHOICE_MULTIPLE_POSSIBLE]: [\n\t\t\"check_box\",\n\t\t// \"check_box_outline_blank\",\n\t],\n\t[ExerciseType.OPEN_ANSWER]: [\"notes\"],\n\t[ExerciseType.JS]: [\"code\"],\n\t[ExerciseType.C]: [\"code\"], // raw-c.svg\n\t[ExerciseType.COMPLETION]: [\n\t\t\"expand_circle_down\",\n\t\t// \"horizontal_rule\",\n\t\t// \"horizontal_rule\",\n\t],\n\t[ExerciseType.ATTACHMENT]: [\"cloud_upload\"],\n\t[ExerciseType.AGGREGATED]: [\n\t\t\"category\",\n\t\t// \"radio_button_checked\", \"check_box\"\n\t],\n\t[ExerciseType.PYTHON]: [\"code\"],\n};\n","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAACWCAYAAAA8AXHiAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAABgAAAAYADwa0LPAAAEqElEQVR42u3bT4hVZRjH8d9z7ugmG2fUe2c0yVvSImtXO9sILlz1Z9FOqAh0/ohECC21JCiqRcj8wahVrSToD9EqImgRuqhFtCqzsGzuWDNX2zQ652khBomOvOec556Z6/ezf8687/DlPeM5HgkAAAAAAAAAAAAAAAAAAAAAAAAAAAAowaq+4NjoQrvhejJ322emHXJtl7Sh7o3exLk88z2zfwyfq3sh/aiysCa3LuzIl3XcZPurvG7w5n/NpT0znaGzda+l31QSwGSze9jN35S0ru4NFcDJFaBUWEfl2XyrOy3pYN0bKYm4KpaVGZ5vdl/R2o9KktqN3L4aby3eX/dC+kXhE2uytfCUyz4sc41ViJOrIoVOrKd3+fpc9ob6KyqJk6syhcJqzl86YNLOuhcfwaV7TfpibHShXfda1rJif2OZ76974cE4uUpKvpUd2jK/Lc/WnS8yu9bwnKu45BMrbzQe0R0QlXTttphJX3JypUu/FXq2re5F9xJxFTOQOmBmTXeve909df0P+vHm4mzda6mCZb7kyuYknb04N3jmlGy56p+RHJZ7PnCH3Alv1DbTa3UvohJuMl07HJqt7p8T6n6a2/Jbs3Obvq/qR5R68o6+sFnyZzPPvpscWXzv+e3dTVVclLBwXcNdz61f8tMHRy/vKnsxwsL/mLSzkS9/PbH18oNlrkNYuJlhLS9/dmDrpS1FL0BYuJX7BvL89aLDhIVbcz0zNvLXw0VGCQsraTSUvVhkkLCwInc9flSe/LyTsHA7mzsjlx5NHSIs3FYmtQvMACtzz+9JnUm+dyKFvzzdGT6WMjHRWlyNb/jvTh3gxEIIwkIIwkIIwkIIwkIIwkIIwkIIwkIIwkIIwkIIwkII3hWGst3jzcWXkiakpP8OnMsfM9nuund6I8KKtddMe1MGpjpDSV8DT7QWjkladWFxK0QIwkIIwkIIwkIIwkIIwkIIwkIIwkIIwkIIwkIIwkII3hWG6psPVpNxYiEEYSEEYSEEYSEEYSEEYSEEYSEEYSEEYSEEYSEEYSEE7wpD8cEqYvDBKlAlwkIIwkIIwkIIwkIIwkIIwkIIwkIIwkIIwkIIwkII3hWG4oNVoFKEhRCEhRCEhRCEhRCEhRCEhRCEhRCEhRCEhRCEhRDJ7wrNsqvuffE6qwfSP1hdjcyyq6kzyWHl7p2kLyrvbMkfrK5GLp9LnUm+FWaW/V73RtFblttvqTPJYQ14dkZSXvdm0TP5FR/4NnUoOay3OxvmJJ2ue7foFf/m5MW7LqROFfpXobu9X/d20SvZB4WmigxdbA6+49JPdW8Z4X5uDA6+W2SwUFinfrAlyY9I4rlD/3I3f+HEj/ZPkeHCD0hnOsMfufurde8eMUx+fGZu+JPi86W4TbS605LG6v5FoFKz052NE5IVviOVfKVjPt0ZGne3wyYt1f3bQDkmLbnboenO0HiZqKSK3hXOzG88caWRP2DSSfGMay1ySafc7aGZ+Y1TVVyw8rczY6ML7cz1hNz2ydSWa7ukDb3+TWFFf8t0Xq5z5va5BvKPpy4M/1L3ogAAAAAAAAAAAAAAAAAAAAAAAAAAAID//AuncC+mGj2M6wAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMi0xMi0yN1QyMDoyMzo1NSswMDowMFI3HdsAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjItMTItMjdUMjA6MjM6NTUrMDA6MDAjaqVnAAAAAElFTkSuQmCC\"","import { normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderSlot as _renderSlot, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, Transition as _Transition, withCtx as _withCtx, createBlock as _createBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", null, [\n _createElementVNode(\"div\", {\n class: \"tooltip w-max\",\n onMouseover: _cache[4] || (_cache[4] = ($event: any) => (_ctx.allowHoverOnText ? _ctx.showText() : null)),\n onMouseleave: _cache[5] || (_cache[5] = ($event: any) => (_ctx.allowHoverOnText ? _ctx.hideText() : null))\n }, [\n (!_ctx.$slots.default)\n ? (_openBlock(), _createElementBlock(\"span\", {\n key: 0,\n onMouseover: _cache[0] || (_cache[0] = ($event: any) => (!_ctx.allowHoverOnText ? _ctx.showText() : null)),\n onMouseleave: _cache[1] || (_cache[1] = ($event: any) => (!_ctx.allowHoverOnText ? _ctx.hideText() : null)),\n class: _normalizeClass([{\n\t\t\t\t\t'hover:bg-gray-200 hover:bg-opacity-80 rounded-md px-1.5 transition-colors duration-100 tooltip-handle': true,\n\t\t\t\t}, \"text-base cursor-default select-none opacity-80 material-icons-outlined hover:text-primary-dark\"])\n }, \" help_outline \", 34))\n : (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n onMouseover: _cache[2] || (_cache[2] = ($event: any) => (!_ctx.allowHoverOnText ? _ctx.showText() : null)),\n onMouseleave: _cache[3] || (_cache[3] = ($event: any) => (!_ctx.allowHoverOnText ? _ctx.hideText() : null)),\n class: \"tooltip-handle\"\n }, [\n _renderSlot(_ctx.$slots, \"default\")\n ], 32)),\n (_ctx.textCode || _ctx.textValue)\n ? (_openBlock(), _createBlock(_Transition, {\n key: 2,\n name: _ctx.noArrow ? 'tooltip-fade-bounce' : 'tooltip-fade'\n }, {\n default: _withCtx(() => [\n (_ctx.show)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: _normalizeClass([\"z-20 max-w-xs md:max-w-max tooltip-text\", {\n\t\t\t\t\t\t'tooltip-right': _ctx.placement === 'right',\n\t\t\t\t\t\t'tooltip-bottom': _ctx.placement === 'bottom',\n\t\t\t\t\t\t'tooltip-top': _ctx.placement === 'top',\n\t\t\t\t\t\t'tooltip-left': _ctx.placement === 'left',\n\t\t\t\t\t\t'tooltip-no-arrow tooltip': _ctx.noArrow,\n\t\t\t\t\t}])\n }, [\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.helpText), 1),\n _renderSlot(_ctx.$slots, \"body\")\n ], 2))\n : _createCommentVNode(\"\", true)\n ]),\n _: 3\n }, 8, [\"name\"]))\n : _createCommentVNode(\"\", true)\n ], 32)\n ]))\n}","\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nexport default defineComponent({\n\tname: \"Tooltip\",\n\tprops: {\n\t\ttextCode: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t},\n\t\ttextValue: {\n\t\t\ttype: String,\n\t\t\tdefault: \"\",\n\t\t\trequired: false,\n\t\t},\n\t\tplacement: {\n\t\t\ttype: String as PropType<\"right\" | \"left\" | \"top\" | \"bottom\">,\n\t\t\tdefault: \"right\",\n\t\t},\n\t\tnoArrow: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tallowHoverOnText: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tshow: false,\n\t\t\tshowHandle: null as null | number,\n\t\t};\n\t},\n\tmethods: {\n\t\tsetShow(val: boolean) {\n\t\t\tthis.show = val;\n\t\t},\n\t\tshowText() {\n\t\t\tif (!this.showHandle) {\n\t\t\t\tthis.showHandle = setTimeout(() => this.setShow(true), this.noArrow ? 200 : 0);\n\t\t\t}\n\t\t},\n\t\thideText() {\n\t\t\tif (this.showHandle) {\n\t\t\t\tclearTimeout(this.showHandle);\n\t\t\t\tthis.showHandle = null;\n\t\t\t}\n\t\t\tthis.setShow(false);\n\t\t},\n\t},\n\tcomputed: {\n\t\thelpText(): string {\n\t\t\treturn this.textValue || _(\"help_texts.\" + this.textCode);\n\t\t},\n\t},\n});\n","import { render } from \"./Tooltip.vue?vue&type=template&id=1b7a9b59&ts=true\"\nimport script from \"./Tooltip.vue?vue&type=script&lang=ts\"\nexport * from \"./Tooltip.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { defineStore } from \"pinia\";\nimport { User } from \"@/models\";\nimport axios from \"axios\";\nimport { ErrorMessage } from \"@/interfaces\";\nimport { getMe, updateUser } from \"@/api\";\n\nexport const useMetaStore = defineStore(\"meta\", {\n\tstate: () => ({\n\t\tuser: {} as User,\n\t\ttoken: \"\",\n\t\trefreshToken: \"\",\n\t\tloading: false,\n\t\tfirstLoading: false,\n\t\tlocalLoading: false,\n\t\tpageWideErrorData: null as ErrorMessage | null,\n\t\terrorNotificationData: null as ErrorMessage | null,\n\t\tsaving: false,\n\t\tsavingError: false,\n\t\t_showSuccessFeedback: false,\n\t\tcustomSuccessFeedbackMessage: \"\",\n\t\tdirtyTex: false,\n\t\thelpCenterOpen: false,\n\t\thelpCenterSelectedArticleId: null as string | null,\n\t}),\n\tgetters: {\n\t\temail: state => state.user.email,\n\t\tisAuthenticated: state => !!state.token,\n\t\tunsavedChanges: state => state.saving || state.savingError,\n\t},\n\tactions: {\n\t\tinitStore() {\n\t\t\tconst token = localStorage.getItem(\"token\");\n\t\t\tconst refreshToken = localStorage.getItem(\"refreshToken\");\n\t\t\tconst user = localStorage.getItem(\"user\");\n\n\t\t\tif (token) {\n\t\t\t\tconsole.log(\"restoring token\");\n\t\t\t\tthis.token = token;\n\t\t\t\taxios.defaults.headers.common[\"Authorization\"] = \"Bearer \" + this.token;\n\t\t\t}\n\t\t\tif (refreshToken) {\n\t\t\t\tthis.refreshToken = refreshToken;\n\t\t\t}\n\t\t\tif (user) {\n\t\t\t\tthis.user = JSON.parse(user);\n\t\t\t}\n\t\t},\n\t\tshowSuccessFeedback(message?: string, hideTimeout = 2000) {\n\t\t\tthis._showSuccessFeedback = true;\n\t\t\tif (message) {\n\t\t\t\tthis.customSuccessFeedbackMessage = message;\n\t\t\t}\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis._showSuccessFeedback = false;\n\t\t\t\tthis.customSuccessFeedbackMessage = \"\";\n\t\t\t}, hideTimeout);\n\t\t},\n\t\tsetUser(user: User) {\n\t\t\tObject.assign(this.user, user);\n\t\t\t// TODO use plugin\n\t\t\tlocalStorage.setItem(\"user\", JSON.stringify(user));\n\t\t},\n\t\tsetToken(token: string) {\n\t\t\tthis.token = token;\n\t\t\tlocalStorage.setItem(\"token\", token);\n\t\t\taxios.defaults.headers.common[\"Authorization\"] = \"Bearer \" + token;\n\t\t},\n\t\tresetToken() {\n\t\t\tthis.token = \"\";\n\t\t\tlocalStorage.removeItem(\"token\");\n\t\t\taxios.defaults.headers.common[\"Authorization\"] = \"\";\n\t\t},\n\t\tsetRefreshToken(token: string) {\n\t\t\tthis.refreshToken = token;\n\t\t\tlocalStorage.setItem(\"refreshToken\", token);\n\t\t},\n\t\tsetHelpCenterVisibility(visibility: boolean) {\n\t\t\tthis.helpCenterOpen = visibility;\n\t\t\tif (!visibility) {\n\t\t\t\tthis.helpCenterSelectedArticleId = null;\n\t\t\t}\n\t\t},\n\t\tsetHelpCenterArticleId(articleId: string | null) {\n\t\t\tthis.helpCenterSelectedArticleId = articleId;\n\t\t},\n\t\tsetErrorNotificationData({\n\t\t\tdata,\n\t\t\thideTimeout = 4000,\n\t\t}: {\n\t\t\tdata: ErrorMessage | null;\n\t\t\thideTimeout: number;\n\t\t}) {\n\t\t\tthis.errorNotificationData = data;\n\t\t\tif (data) {\n\t\t\t\tsetTimeout(() => (this.errorNotificationData = null), hideTimeout);\n\t\t\t}\n\t\t},\n\t\t// previous vuex actions\n\t\tasync convertToken(token: string) {\n\t\t\tconst response = await axios.post(\"/users/auth/convert-token/\", {\n\t\t\t\ttoken,\n\t\t\t\tgrant_type: \"convert_token\",\n\t\t\t\tclient_id: process.env.VUE_APP_GOOGLE_OAUTH_CLIENT_ID,\n\t\t\t\tclient_secret: process.env.VUE_APP_GOOGLE_OAUTH_CLIENT_SECRET,\n\t\t\t\tbackend: \"google-oauth2\",\n\t\t\t});\n\n\t\t\tthis.setToken(response.data.access_token);\n\t\t\tthis.setRefreshToken(response.data.refresh_token);\n\t\t},\n\t\tasync convertAuthorizationCode(code: string) {\n\t\t\tconst response = await axios.post(\"/users/auth/convert-token/\", {\n\t\t\t\tcode,\n\t\t\t\tgrant_type: \"convert_token\",\n\t\t\t\tclient_id: process.env.VUE_APP_GOOGLE_OAUTH_CLIENT_ID,\n\t\t\t\tclient_secret: process.env.VUE_APP_GOOGLE_OAUTH_CLIENT_SECRET,\n\t\t\t\tbackend: \"google-oauth2\",\n\t\t\t});\n\n\t\t\tthis.setToken(response.data.access_token);\n\t\t\tthis.setRefreshToken(response.data.refresh_token);\n\t\t},\n\t\tasync getUserData() {\n\t\t\tconst response = await getMe();\n\t\t\tthis.setUser(response);\n\t\t},\n\t\tasync patchUser({ userId, changes }: { userId: string; changes: Partial }) {\n\t\t\tconst response = await updateUser(userId, changes);\n\t\t\tthis.setUser(response);\n\t\t},\n\t},\n});\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Login.vue?vue&type=style&index=0&id=365d94ae&lang=css\"","import { CourseTreeNodeType } from \"@/models\";\n\nexport const icons = {\n\t[CourseTreeNodeType.LessonNode]: [\"book\"],\n\t[CourseTreeNodeType.FileNode]: [\"file_present\"],\n\t[CourseTreeNodeType.TopicNode]: [\"splitscreen\"],\n\t[CourseTreeNodeType.AnnouncementNode]: [\"campaign\"],\n\t[CourseTreeNodeType.PollNode]: [\"poll\"],\n};\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./CircularProgress.vue?vue&type=style&index=0&id=5ed4a758&lang=css\"","module.exports = \"data:image/png;base64,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\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./TextEditor.vue?vue&type=style&index=0&id=92cd09fc&lang=css\"","import { createElementVNode as _createElementVNode, createStaticVNode as _createStaticVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"mb-10\" }\nconst _hoisted_2 = /*#__PURE__*/_createStaticVNode(\"
\", 1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, _hoisted_3))\n}","\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nexport default defineComponent({\n\tname: \"SlotSkeleton\",\n\tprops: {},\n\tmethods: {},\n\tcomputed: {},\n});\n","import { render } from \"./SlotSkeleton.vue?vue&type=template&id=f9f8a73a&ts=true\"\nimport script from \"./SlotSkeleton.vue?vue&type=script&lang=ts\"\nexport * from \"./SlotSkeleton.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = [\"innerHTML\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", {\n innerHTML: _ctx.sanitizedFormattedValue,\n class: _normalizeClass({\n\t\t\t'text-muted font-light': _ctx.useDefault && _ctx.defaultValue.length > 0,\n\t\t})\n }, null, 10, _hoisted_1))\n}","\nimport { defineComponent } from \"@vue/runtime-core\";\nimport { formatExerciseText, stripHtmlFromLaTexBlocks } from \"@/utils\";\n\nexport default defineComponent({\n\tname: \"ProcessedTextFragment\",\n\tprops: {\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdefaultValue: {\n\t\t\ttype: String,\n\t\t\tdefault: \"\",\n\t\t},\n\t},\n\tmethods: {},\n\tcomputed: {\n\t\tuseDefault(): boolean {\n\t\t\treturn this.value.trim().length === 0;\n\t\t},\n\t\tformattedValue(): string {\n\t\t\tif (this.useDefault) {\n\t\t\t\treturn this.defaultValue;\n\t\t\t}\n\t\t\treturn formatExerciseText(this.value);\n\t\t},\n\t\tsanitizedFormattedValue(): string {\n\t\t\treturn this.$sanitize(stripHtmlFromLaTexBlocks(this.formattedValue));\n\t\t},\n\t},\n});\n","import { render } from \"./ProcessedTextFragment.vue?vue&type=template&id=66d3054a&ts=true\"\nimport script from \"./ProcessedTextFragment.vue?vue&type=script&lang=ts\"\nexport * from \"./ProcessedTextFragment.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_FileViewer = _resolveComponent(\"FileViewer\")!\n\n return (_openBlock(), _createElementBlock(\"div\", null, [\n _createVNode(_component_FileViewer, {\n onViewerClose: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('viewerClose'))),\n filename: _ctx.node.file.name,\n onFileDownload: _cache[1] || (_cache[1] = ($event: any) => (_ctx.onDownload())),\n url: _ctx.fileUrl,\n mimeType: _ctx.node.mime_type,\n id: _ctx.node.id + '-viewer',\n downloading: _ctx.downloading,\n size: _ctx.node.file.size\n }, null, 8, [\"filename\", \"url\", \"mimeType\", \"id\", \"downloading\", \"size\"])\n ]))\n}","import { resolveDynamicComponent as _resolveDynamicComponent, mergeProps as _mergeProps, openBlock as _openBlock, createBlock as _createBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", null, [\n (_openBlock(), _createBlock(_resolveDynamicComponent(_ctx.viewerComponentName), _mergeProps(_ctx.$props, {\n onViewerClose: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('viewerClose'))),\n onDownload: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$emit('fileDownload')))\n }), null, 16))\n ]))\n}","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, normalizeStyle as _normalizeStyle, createElementBlock as _createElementBlock, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = {\n style: {\"z-index\":\"1002\"},\n class: \"flex items-center bg-dark fixed top-0 left-0 w-full h-14 shadow-elevation bg-opacity-90 px-2\"\n}\nconst _hoisted_2 = { class: \"mr-auto\" }\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined text-lightText\" }, \"close\", -1)\nconst _hoisted_4 = { class: \"text-lightText flex items-center space-x-4\" }\nconst _hoisted_5 = { class: \"\" }\nconst _hoisted_6 = { class: \"ml-auto\" }\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined text-lightText\" }, \"file_download\", -1)\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined text-lightText\" }, \"zoom_in\", -1)\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined text-lightText\" }, \"zoom_out\", -1)\nconst _hoisted_10 = {\n style: {\"z-index\":\"1001\"},\n class: \"mt-14 fixed top-1/2 transform -translate-y-2/3 -translate-x-1/2 left-1/2\"\n}\nconst _hoisted_11 = { class: \"relative w-max\" }\nconst _hoisted_12 = [\"src\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_Spinner = _resolveComponent(\"Spinner\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _createElementVNode(\"div\", {\n class: \"fixed h-screen w-screen top-0 left-0 bg-dark bg-opacity-60\",\n style: {\"z-index\":\"1000\"},\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('viewerClose')))\n }),\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_Btn, {\n class: \"mr-2\",\n variant: 'icon',\n outline: true,\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$emit('viewerClose')))\n }, {\n default: _withCtx(() => [\n _hoisted_3\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"h3\", _hoisted_5, _toDisplayString(_ctx.filename), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_6, [\n _createVNode(_component_Btn, {\n class: \"mr-2\",\n loading: _ctx.downloading,\n variant: 'icon',\n outline: true,\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.$emit('download')))\n }, {\n default: _withCtx(() => [\n _hoisted_7\n ]),\n _: 1\n }, 8, [\"loading\"]),\n _createVNode(_component_Btn, {\n class: \"\",\n variant: 'icon',\n outline: true,\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.onZoom(1)))\n }, {\n default: _withCtx(() => [\n _hoisted_8\n ]),\n _: 1\n }),\n _createVNode(_component_Btn, {\n variant: 'icon',\n outline: true,\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.onZoom(-1)))\n }, {\n default: _withCtx(() => [\n _hoisted_9\n ]),\n _: 1\n })\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_10, [\n _createElementVNode(\"div\", _hoisted_11, [\n (_ctx.isLoading || _ctx.downloading)\n ? (_openBlock(), _createBlock(_component_Spinner, {\n key: 0,\n variant: 'primary',\n size: 'xl'\n }))\n : (_openBlock(), _createElementBlock(\"img\", {\n key: 1,\n class: \"m-auto\",\n style: _normalizeStyle({ width: _ctx.width + '%', 'max-width': '300% !important' }),\n src: _ctx.base64Source\n }, null, 12, _hoisted_12))\n ])\n ])\n ], 64))\n}","export const fileViewerProps = {\n\t// base64 source of the file\n\t// source: {\n\t// \ttype: String, //Object as PropType,\n\t// \tdefault: \"\" as const,\n\t// },\n\n\t// url to fetch the file\n\turl: {\n\t\ttype: String,\n\t\tdefault: \"\" as const,\n\t},\n\tfilename: {\n\t\ttype: String,\n\t\trequired: true as const,\n\t},\n\tsize: {\n\t\ttype: Number,\n\t\trequired: true as const,\n\t},\n\tmimeType: {\n\t\ttype: String,\n\t\tdefault: \"\" as const,\n\t},\n\tdownloading: {\n\t\ttype: Boolean,\n\t\tdefault: false as const,\n\t},\n\tid: {\n\t\ttype: String,\n\t\tdefault: \"\" as const,\n\t},\n};\n","\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport Btn from \"../ui/Btn.vue\";\nimport { fileViewerProps } from \"./shared\";\nimport { arraybufferToBase64, setErrorNotification } from \"@/utils\";\nimport { downloadFileNode } from \"@/api\";\nimport { fileViewerMixin } from \"@/mixins\";\nimport Spinner from \"../ui/Spinner.vue\";\nexport default defineComponent({\n\tname: \"ImageViewer\",\n\tprops: {\n\t\t...fileViewerProps,\n\t},\n\tcomponents: {\n\t\tBtn,\n\t\tSpinner,\n\t},\n\tmixins: [fileViewerMixin],\n\tasync mounted() {\n\t\tthis.isLoading = true;\n\t\ttry {\n\t\t\tawait this.downloadNodeFile();\n\t\t\tawait this.setInitialWidth();\n\t\t} catch (e) {\n\t\t\tsetErrorNotification(e);\n\t\t} finally {\n\t\t\tthis.isLoading = false;\n\t\t}\n\t\tconst bodyContainsOverflowHidden =\n\t\t\tdocument.body.classList.contains(\"overflow-y-hidden\");\n\t\tif (!bodyContainsOverflowHidden) {\n\t\t\tdocument.body.classList.add(\"overflow-y-hidden\");\n\t\t}\n\t},\n\tbeforeUnmount() {\n\t\tconst bodyContainsOverflowHidden =\n\t\t\tdocument.body.classList.contains(\"overflow-y-hidden\");\n\t\tif (bodyContainsOverflowHidden) {\n\t\t\tdocument.body.classList.remove(\"overflow-y-hidden\");\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\t//downloading: true,\n\t\t\tisLoading: true,\n\t\t\twidth: 100,\n\t\t\tinitialWidth: 100,\n\t\t\t//source: \"\",\n\t\t};\n\t},\n\tmethods: {\n\t\t// async downloadNodeFile() {\n\t\t// \tconst fileBlob = await downloadFileNode(this.url);\n\t\t// \tconsole.log(\"BLOB\", fileBlob);\n\t\t// \tthis.source = arraybufferToBase64(fileBlob);\n\t\t// \tthis.downloading = false;\n\t\t// },\n\t\tasync setInitialWidth() {\n\t\t\tconst MAX_INITIAL_WIDTH_RATIO = 0.7;\n\t\t\tconst windowWidth = window.innerWidth;\n\t\t\tconst imageWidth: number = await new Promise(resolve => {\n\t\t\t\tconst image = new Image();\n\t\t\t\timage.onload = () => resolve(image.naturalWidth);\n\t\t\t\timage.src = this.base64Source;\n\t\t\t});\n\t\t\tif (imageWidth <= windowWidth * MAX_INITIAL_WIDTH_RATIO) {\n\t\t\t\tthis.initialWidth = 100;\n\t\t\t} else {\n\t\t\t\tthis.initialWidth = ((MAX_INITIAL_WIDTH_RATIO * windowWidth) / imageWidth) * 100;\n\t\t\t}\n\t\t\tthis.width = this.initialWidth;\n\t\t},\n\t\tonZoom(multiplier: number) {\n\t\t\tconst MIN_WIDTH = this.initialWidth / 3;\n\t\t\tconst MAX_WIDTH = this.initialWidth * 3;\n\t\t\tconst FACTOR = this.initialWidth / 5;\n\t\t\tif (multiplier > 0) {\n\t\t\t\tthis.width = Math.min(MAX_WIDTH, this.width + FACTOR);\n\t\t\t} else {\n\t\t\t\tthis.width = Math.max(MIN_WIDTH, this.width - FACTOR);\n\t\t\t}\n\t\t},\n\t},\n\tcomputed: {\n\t\tbase64Source() {\n\t\t\treturn `data:image;base64,${this.source}`;\n\t\t},\n\t},\n});\n","import { render } from \"./ImageViewer.vue?vue&type=template&id=a30025d0&ts=true\"\nimport script from \"./ImageViewer.vue?vue&type=script&lang=ts\"\nexport * from \"./ImageViewer.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock, Transition as _Transition, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = {\n style: {\"z-index\":\"1002\"},\n class: \"flex md:flex-row flex-col items-center bg-dark fixed top-0 left-0 w-full md:h-14 shadow-elevation bg-opacity-90 px-2\"\n}\nconst _hoisted_2 = { class: \"flex items-center w-full\" }\nconst _hoisted_3 = { class: \"\" }\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined text-lightText\" }, \"close\", -1)\nconst _hoisted_5 = {\n class: \"text-lightText flex md:flex-row flex-col items-center space-x-4 md:ml-4 overflow-hidden\",\n style: {\"text-overflow\":\"ellipsis\"}\n}\nconst _hoisted_6 = { class: \"hidden md:block\" }\nconst _hoisted_7 = {\n class: \"md:hidden w-full overflow-hidden\",\n style: {\"text-overflow\":\"ellipsis\"}\n}\nconst _hoisted_8 = {\n key: 0,\n class: \"text-sm opacity-70 hidden md:block\"\n}\nconst _hoisted_9 = { class: \"md:ml-auto md:mt-0 -mt-3 flex items-center text-lightText\" }\nconst _hoisted_10 = {\n key: 0,\n class: \"text-sm opacity-70 md:hidden\"\n}\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined text-lightText\" }, \"file_download\", -1)\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined text-lightText\" }, \"zoom_in\", -1)\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined text-lightText\" }, \"zoom_out\", -1)\nconst _hoisted_14 = {\n style: {\"z-index\":\"1001\"},\n class: \"mt-14 fixed top-1/2 transform -translate-y-1/2 -translate-x-1/2 left-1/2 overflow-y-auto h-screen\"\n}\nconst _hoisted_15 = { class: \"relative\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_LinearProgress = _resolveComponent(\"LinearProgress\")!\n const _component_vue_pdf_embed = _resolveComponent(\"vue-pdf-embed\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _createElementVNode(\"div\", {\n class: \"fixed h-screen w-screen top-0 left-0 bg-dark bg-opacity-60\",\n style: {\"z-index\":\"1000\"},\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('viewerClose')))\n }),\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_Btn, {\n class: \"md:mr-2\",\n variant: 'icon',\n outline: true,\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$emit('viewerClose')))\n }, {\n default: _withCtx(() => [\n _hoisted_4\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"h3\", _hoisted_6, _toDisplayString(_ctx.filename), 1),\n _createElementVNode(\"p\", _hoisted_7, _toDisplayString(_ctx.filename), 1),\n (_ctx.pageCount !== null)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_8, _toDisplayString(_ctx.pageCount) + \" \" + _toDisplayString(_ctx.pageCount === 1 ? _ctx.$t(\"misc.page\") : _ctx.$t(\"misc.pages\")), 1))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n (_ctx.pageCount !== null)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_10, _toDisplayString(_ctx.pageCount) + \" \" + _toDisplayString(_ctx.pageCount === 1 ? _ctx.$t(\"misc.page\") : _ctx.$t(\"misc.pages\")), 1))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_Btn, {\n class: \"md:mr-2\",\n loading: _ctx.downloading,\n variant: 'icon',\n outline: true,\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.$emit('download')))\n }, {\n default: _withCtx(() => [\n _hoisted_11\n ]),\n _: 1\n }, 8, [\"loading\"]),\n _createVNode(_component_Btn, {\n class: \"\",\n variant: 'icon',\n outline: true,\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.onZoom(100)))\n }, {\n default: _withCtx(() => [\n _hoisted_12\n ]),\n _: 1\n }),\n _createVNode(_component_Btn, {\n variant: 'icon',\n outline: true,\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.onZoom(-100)))\n }, {\n default: _withCtx(() => [\n _hoisted_13\n ]),\n _: 1\n })\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_14, [\n _createElementVNode(\"div\", _hoisted_15, [\n _createVNode(_Transition, { name: \"fade\" }, {\n default: _withCtx(() => [\n (_ctx.isLoading || _ctx.downloading)\n ? (_openBlock(), _createBlock(_component_LinearProgress, {\n key: 0,\n class: \"z-50 absolute top-0\"\n }))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }),\n _createVNode(_component_vue_pdf_embed, {\n id: _ctx.id,\n width: _ctx.width,\n ref: \"pdfRef\",\n source: _ctx.base64Source,\n page: _ctx.page,\n onProgress: _cache[5] || (_cache[5] = ($event: any) => (_ctx.onProgress($event))),\n onRendered: _ctx.handleDocumentRender\n }, null, 8, [\"id\", \"width\", \"source\", \"page\", \"onRendered\"])\n ])\n ])\n ], 64))\n}","\nimport VuePdfEmbed from \"vue-pdf-embed\";\n\nimport { defineComponent } from \"@vue/runtime-core\";\nimport Btn from \"../ui/Btn.vue\";\nimport LinearProgress from \"../ui/LinearProgress.vue\";\nimport { fileViewerProps } from \"./shared\";\nimport { fileViewerMixin, mediaQueryMixin } from \"@/mixins\";\nexport default defineComponent({\n\tname: \"PdfViewer\",\n\tprops: {\n\t\t...fileViewerProps,\n\t},\n\tcomponents: {\n\t\tVuePdfEmbed,\n\t\tBtn,\n\t\tLinearProgress,\n\t},\n\tmixins: [fileViewerMixin, mediaQueryMixin],\n\tmounted() {\n\t\tthis.downloadNodeFile();\n\t\tconst bodyContainsOverflowHidden =\n\t\t\tdocument.body.classList.contains(\"overflow-y-hidden\");\n\t\tif (!bodyContainsOverflowHidden) {\n\t\t\tdocument.body.classList.add(\"overflow-y-hidden\");\n\t\t}\n\t\tif (!this.mediaQueryMdMatches) {\n\t\t\tthis.width = window.screen.availWidth - 10;\n\t\t}\n\t},\n\tbeforeUnmount() {\n\t\tconst bodyContainsOverflowHidden =\n\t\t\tdocument.body.classList.contains(\"overflow-y-hidden\");\n\t\tif (bodyContainsOverflowHidden) {\n\t\t\tdocument.body.classList.remove(\"overflow-y-hidden\");\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\t//downloading: true,\n\t\t\tisLoading: true,\n\t\t\treRendering: false,\n\t\t\tpage: null,\n\t\t\tpageCount: null as null | number,\n\t\t\tshowAllPages: true,\n\t\t\twidth: 800,\n\t\t\t//source: \"\",\n\t\t};\n\t},\n\tmethods: {\n\t\t// async downloadNodeFile() {\n\t\t// \tconst fileBlob = await downloadFileNode(this.url);\n\t\t// \tconsole.log(\"BLOB\", fileBlob);\n\t\t// \tthis.source = arraybufferToBase64(fileBlob);\n\t\t// \tthis.downloading = false;\n\t\t// },\n\t\tonZoom(amount: number) {\n\t\t\tif (this.reRendering) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.reRendering = true;\n\t\t\tconst lastWidth = this.width;\n\t\t\tconst MIN_WIDTH = this.mediaQueryMdMatches ? 400 : window.screen.availWidth / 2;\n\t\t\tconst MAX_WIDTH = this.mediaQueryMdMatches ? 1800 : window.screen.availWidth * 2;\n\t\t\tif (amount > 0) {\n\t\t\t\tthis.width = Math.min(MAX_WIDTH, this.width + amount);\n\t\t\t} else {\n\t\t\t\tthis.width = Math.max(MIN_WIDTH, this.width + amount);\n\t\t\t}\n\t\t\tif (lastWidth === this.width) {\n\t\t\t\t// width didn't change - call re-rendering off\n\t\t\t\tthis.reRendering = false;\n\t\t\t}\n\t\t},\n\t\tonProgress(evt: any) {\n\t\t\tconsole.log(\"prog\", evt);\n\t\t},\n\t\thandleDocumentRender() {\n\t\t\tthis.isLoading = false;\n\t\t\tthis.reRendering = false;\n\t\t\tthis.pageCount = (this.$refs as any).pdfRef.pageCount;\n\t\t},\n\t},\n\tcomputed: {\n\t\tbase64Source() {\n\t\t\treturn `data:application/pdf;base64,${this.source}`;\n\t\t},\n\t},\n});\n","import { render } from \"./PdfViewer.vue?vue&type=template&id=d8b7fb62&ts=true\"\nimport script from \"./PdfViewer.vue?vue&type=script&lang=ts\"\nexport * from \"./PdfViewer.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n style: {\"z-index\":\"1002\"},\n class: \"flex items-center bg-dark fixed top-0 left-0 w-full h-14 shadow-elevation bg-opacity-90 px-2\"\n}\nconst _hoisted_2 = { class: \"mr-auto\" }\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined text-lightText\" }, \"close\", -1)\nconst _hoisted_4 = { class: \"text-lightText flex items-center space-x-4\" }\nconst _hoisted_5 = { class: \"\" }\nconst _hoisted_6 = { class: \"ml-auto\" }\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined text-lightText\" }, \"file_download\", -1)\nconst _hoisted_8 = {\n style: {\"z-index\":\"1001\"},\n class: \"mt-14 fixed top-1/2 transform -translate-y-1/2 -translate-x-1/2 left-1/2 overflow-y-auto h-screen w-4/5\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_CodeFragment = _resolveComponent(\"CodeFragment\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _createElementVNode(\"div\", {\n class: \"fixed h-screen w-screen top-0 left-0 bg-dark bg-opacity-60\",\n style: {\"z-index\":\"1000\"},\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('viewerClose')))\n }),\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_Btn, {\n class: \"mr-2\",\n variant: 'icon',\n outline: true,\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$emit('viewerClose')))\n }, {\n default: _withCtx(() => [\n _hoisted_3\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"h3\", _hoisted_5, _toDisplayString(_ctx.filename), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_6, [\n _createVNode(_component_Btn, {\n class: \"mr-2\",\n loading: _ctx.downloading,\n variant: 'icon',\n outline: true,\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.$emit('download')))\n }, {\n default: _withCtx(() => [\n _hoisted_7\n ]),\n _: 1\n }, 8, [\"loading\"])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n (!_ctx.downloading)\n ? (_openBlock(), _createBlock(_component_CodeFragment, {\n key: 0,\n value: _ctx.sourceAsText\n }, null, 8, [\"value\"]))\n : _createCommentVNode(\"\", true)\n ])\n ], 64))\n}","\nimport { fileViewerMixin } from \"@/mixins\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport Btn from \"../ui/Btn.vue\";\nimport CodeFragment from \"../ui/CodeFragment.vue\";\nimport { fileViewerProps } from \"./shared\";\nexport default defineComponent({\n\tname: \"SourceCodeViewer\",\n\tprops: {\n\t\t...fileViewerProps,\n\t},\n\tmixins: [fileViewerMixin],\n\tmounted() {\n\t\tthis.downloadNodeFile();\n\t},\n\tmethods: {},\n\tcomputed: {\n\t\tsourceAsText() {\n\t\t\t// source is in base64; convert back to string\n\t\t\treturn atob(this.source);\n\t\t},\n\t},\n\tcomponents: { CodeFragment, Btn },\n});\n","import { render } from \"./SourceCodeViewer.vue?vue&type=template&id=5443c40c&ts=true\"\nimport script from \"./SourceCodeViewer.vue?vue&type=script&lang=ts\"\nexport * from \"./SourceCodeViewer.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = {\n style: {\"z-index\":\"1002\"},\n class: \"flex items-center bg-dark fixed top-0 left-0 w-full h-14 shadow-elevation bg-opacity-90 px-2\"\n}\nconst _hoisted_2 = { class: \"mr-auto\" }\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined text-lightText\" }, \"close\", -1)\nconst _hoisted_4 = { class: \"text-lightText flex items-center space-x-4\" }\nconst _hoisted_5 = { class: \"\" }\nconst _hoisted_6 = { class: \"ml-auto\" }\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined text-lightText\" }, \"file_download\", -1)\nconst _hoisted_8 = {\n style: {\"z-index\":\"1001\"},\n class: \"fixed top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 shadow-all-around\"\n}\nconst _hoisted_9 = {\n key: 0,\n controls: \"\"\n}\nconst _hoisted_10 = [\"src\"]\nconst _hoisted_11 = {\n key: 1,\n class: \"relative\"\n}\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"div\", {\n style: {\"width\":\"650px\",\"height\":\"350px\"},\n class: \"bg-gray-600 rounded-sm\"\n}, null, -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_LinearProgress = _resolveComponent(\"LinearProgress\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _createElementVNode(\"div\", {\n class: \"fixed h-screen w-screen top-0 left-0 bg-dark bg-opacity-60\",\n style: {\"z-index\":\"1000\"},\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('viewerClose')))\n }),\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_Btn, {\n class: \"mr-2\",\n variant: 'icon',\n outline: true,\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$emit('viewerClose')))\n }, {\n default: _withCtx(() => [\n _hoisted_3\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"h3\", _hoisted_5, _toDisplayString(_ctx.filename), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_6, [\n _createVNode(_component_Btn, {\n class: \"mr-2\",\n loading: _ctx.downloading,\n variant: 'icon',\n outline: true,\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.$emit('download')))\n }, {\n default: _withCtx(() => [\n _hoisted_7\n ]),\n _: 1\n }, 8, [\"loading\"])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n (_ctx.videoSrc)\n ? (_openBlock(), _createElementBlock(\"video\", _hoisted_9, [\n _createElementVNode(\"source\", { src: _ctx.videoSrc }, null, 8, _hoisted_10),\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t(\"misc.no_native_video_support\")), 1)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [\n _createVNode(_component_LinearProgress, {\n progress: _ctx.downloadProgress,\n class: \"absolute top-0 rounded-t-sm\"\n }, null, 8, [\"progress\"]),\n _hoisted_12\n ]))\n ])\n ], 64))\n}","\nimport { fileViewerProps } from \"./shared\";\n\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport Btn from \"../ui/Btn.vue\";\nimport { fileViewerMixin } from \"@/mixins\";\nimport LinearProgress from \"../ui/LinearProgress.vue\";\nexport default defineComponent({\n\tname: \"VideoViewer\",\n\tprops: {\n\t\t...fileViewerProps,\n\t},\n\tmixins: [fileViewerMixin],\n\tasync created() {\n\t\tawait this.downloadNodeFile();\n\t\tthis.videoSrc = (window.URL || window.webkitURL).createObjectURL(\n\t\t\tnew Blob([this.arrayBufferSource as ArrayBuffer]),\n\t\t);\n\t},\n\tmounted() {\n\t\tconst bodyContainsOverflowHidden =\n\t\t\tdocument.body.classList.contains(\"overflow-y-hidden\");\n\t\tif (!bodyContainsOverflowHidden) {\n\t\t\tdocument.body.classList.add(\"overflow-y-hidden\");\n\t\t}\n\t},\n\tbeforeUnmount() {\n\t\tconst bodyContainsOverflowHidden =\n\t\t\tdocument.body.classList.contains(\"overflow-y-hidden\");\n\t\tif (bodyContainsOverflowHidden) {\n\t\t\tdocument.body.classList.remove(\"overflow-y-hidden\");\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tvideoSrc: null as string | null,\n\t\t\tdownloadProgress: undefined as undefined | number,\n\t\t};\n\t},\n\tmethods: {\n\t\tonDownloadProgress(e: { loaded: number }) {\n\t\t\tconst downloaded = e.loaded;\n\t\t\tthis.downloadProgress = (downloaded / this.size) * 100;\n\t\t\tconsole.log({ e, p: this.downloadProgress });\n\t\t},\n\t},\n\tcomponents: {\n\t\tBtn,\n\t\tLinearProgress,\n\t},\n});\n","import { render } from \"./VideoViewer.vue?vue&type=template&id=f3cf58a4&ts=true\"\nimport script from \"./VideoViewer.vue?vue&type=script&lang=ts\"\nexport * from \"./VideoViewer.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveDirective as _resolveDirective, openBlock as _openBlock, createElementBlock as _createElementBlock, withDirectives as _withDirectives, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = {\n style: {\"z-index\":\"1002\"},\n class: \"flex items-center bg-dark fixed top-0 left-0 w-full h-14 shadow-elevation bg-opacity-90 px-2\"\n}\nconst _hoisted_2 = { class: \"mr-auto\" }\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined text-lightText\" }, \"close\", -1)\nconst _hoisted_4 = { class: \"text-lightText flex items-center space-x-4\" }\nconst _hoisted_5 = { class: \"\" }\nconst _hoisted_6 = { class: \"ml-auto\" }\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined text-lightText\" }, \"file_download\", -1)\nconst _hoisted_8 = {\n style: {\"z-index\":\"1001\"},\n class: \"mt-14 fixed top-1/2 transform -translate-y-1/2 -translate-x-1/2 left-1/2 overflow-y-auto h-screen w-max flex\"\n}\nconst _hoisted_9 = { class: \"m-auto flex flex-col items-center\" }\nconst _hoisted_10 = { class: \"-mt-40 text-lightText\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_Tooltip = _resolveComponent(\"Tooltip\")!\n const _directive_wave = _resolveDirective(\"wave\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _createElementVNode(\"div\", {\n class: \"fixed h-screen w-screen top-0 left-0 bg-dark bg-opacity-60\",\n style: {\"z-index\":\"1000\"},\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('viewerClose')))\n }),\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_Btn, {\n class: \"mr-2\",\n variant: 'icon',\n outline: true,\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$emit('viewerClose')))\n }, {\n default: _withCtx(() => [\n _hoisted_3\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"h3\", _hoisted_5, _toDisplayString(_ctx.filename), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_6, [\n _createVNode(_component_Btn, {\n class: \"mr-2\",\n loading: _ctx.downloading,\n variant: 'icon',\n outline: true,\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.$emit('download')))\n }, {\n default: _withCtx(() => [\n _hoisted_7\n ]),\n _: 1\n }, 8, [\"loading\"])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n _createElementVNode(\"div\", _hoisted_9, [\n _createElementVNode(\"h1\", _hoisted_10, _toDisplayString(_ctx.$t(\"misc.download\")) + \" \" + _toDisplayString(_ctx.filename), 1),\n _createVNode(_component_Tooltip, {\n placement: 'bottom',\n noArrow: true,\n textValue: _ctx.$t('misc.download')\n }, {\n default: _withCtx(() => [\n _withDirectives((_openBlock(), _createElementBlock(\"span\", {\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.$emit('download'))),\n style: {\"font-size\":\"10rem !important\"},\n class: \"mb-1 filter drop-shadow-lg cursor-pointer opacity-70 rounded-full material-icons-outlined text-lightText hover:opacity-90 transition-opacity duration-100 ease-in-out p-4\"\n }, [\n _createTextVNode(\"cloud_download\")\n ])), [\n [_directive_wave]\n ])\n ]),\n _: 1\n }, 8, [\"textValue\"])\n ])\n ])\n ], 64))\n}","\nimport { fileViewerMixin } from \"@/mixins\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport Btn from \"../ui/Btn.vue\";\nimport CodeFragment from \"../ui/CodeFragment.vue\";\nimport Tooltip from \"../ui/Tooltip.vue\";\nimport { fileViewerProps } from \"./shared\";\nexport default defineComponent({\n\tname: \"FallBackFileViewer\",\n\tprops: {\n\t\t...fileViewerProps,\n\t},\n\tmixins: [fileViewerMixin],\n\tmounted() {\n\t\t//this.downloadNodeFile();\n\t},\n\tmethods: {},\n\tcomputed: {\n\t\t// sourceAsText() {\n\t\t// \t// source is in base64; convert back to string\n\t\t// \treturn atob(this.source);\n\t\t// },\n\t},\n\tcomponents: { Btn, Tooltip },\n});\n","import { render } from \"./FallbackFileViewer.vue?vue&type=template&id=7cde7d78&ts=true\"\nimport script from \"./FallbackFileViewer.vue?vue&type=script&lang=ts\"\nexport * from \"./FallbackFileViewer.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport ImageViewer from \"./ImageViewer.vue\";\nimport PdfViewer from \"./PdfViewer.vue\";\nimport { fileViewerProps } from \"./shared\";\nimport SourceCodeViewer from \"./SourceCodeViewer.vue\";\nimport VideoViewer from \"./VideoViewer.vue\";\nimport FallbackFileViewer from \"./FallbackFileViewer.vue\";\nexport default defineComponent({\n\tname: \"FileViewer\",\n\tprops: {\n\t\t...fileViewerProps,\n\t},\n\tmethods: {},\n\tcomputed: {\n\t\tviewerComponentName() {\n\t\t\tconst mimeTypePrefix = this.mimeType.split(\"/\")[0];\n\t\t\tconst mimeTypeSuffix = this.mimeType.split(\"/\")[1];\n\t\t\tif (mimeTypePrefix === \"text\" || this.mimeType === \"application/json\") {\n\t\t\t\treturn \"SourceCodeViewer\";\n\t\t\t}\n\t\t\tif (mimeTypePrefix === \"video\" && [\"mp4\", \"mov\"].includes(mimeTypeSuffix)) {\n\t\t\t\treturn \"VideoViewer\";\n\t\t\t}\n\t\t\tif (this.mimeType === \"application/pdf\") {\n\t\t\t\treturn \"PdfViewer\";\n\t\t\t}\n\t\t\tif (mimeTypePrefix === \"image\") {\n\t\t\t\treturn \"ImageViewer\";\n\t\t\t}\n\t\t\treturn \"FallbackFileViewer\";\n\t\t},\n\t},\n\tcomponents: {\n\t\tPdfViewer,\n\t\tVideoViewer,\n\t\tSourceCodeViewer,\n\t\tImageViewer,\n\t\tFallbackFileViewer,\n\t},\n});\n","import { render } from \"./FileViewer.vue?vue&type=template&id=6d3e9c26&ts=true\"\nimport script from \"./FileViewer.vue?vue&type=script&lang=ts\"\nexport * from \"./FileViewer.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { FileNode } from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport { nodeEmits, nodeProps } from \"../shared\";\nimport FileViewer from \"@/components/file_viewers/FileViewer.vue\";\nimport { downloadFileNode, downloadFileNodeAsAttachment, getFileNodeUrl } from \"@/api\";\nimport { courseIdMixin } from \"@/mixins\";\nimport { arraybufferToBase64, setErrorNotification } from \"@/utils\";\n\nexport default defineComponent({\n\tname: \"FileNodeDetail\",\n\tprops: {\n\t\tnode: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\t...nodeProps,\n\t},\n\temits: {\n\t\t...nodeEmits,\n\t},\n\tmixins: [courseIdMixin],\n\tcomponents: {\n\t\tFileViewer,\n\t},\n\tasync created() {\n\t\t//await this.downloadNodeFile();\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tdownloading: false,\n\t\t};\n\t},\n\tmethods: {\n\t\tasync onDownload() {\n\t\t\tthis.downloading = true;\n\t\t\ttry {\n\t\t\t\tawait downloadFileNodeAsAttachment(this.courseId, this.node.id);\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t} finally {\n\t\t\t\tthis.downloading = false;\n\t\t\t}\n\t\t},\n\t},\n\tcomputed: {\n\t\tfileUrl() {\n\t\t\treturn getFileNodeUrl(this.courseId, this.node.id);\n\t\t},\n\t},\n});\n","import { render } from \"./FileNodeDetail.vue?vue&type=template&id=23e528fa&ts=true\"\nimport script from \"./FileNodeDetail.vue?vue&type=script&lang=ts\"\nexport * from \"./FileNodeDetail.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__"],"sourceRoot":""}