{"version":3,"sources":["serviceWorker.js","assets/svg/dw-logo.svg","assets/icons/DwLogo.js","assets/svg/dw-claim.svg","assets/icons/DwClaim.js","components/Logo/Logo.js","components/Header/DesktopBanner.js","assets/svg/dw-logo-tablet.svg","assets/svg/dw-logo-mobile.svg","context/rtlContext.js","hooks/useRtl.js","components/I18n/I18nText.js","components/Header/MobileBanner.js","hooks/useToggle.js","assets/svg/icon-user-navi.svg","assets/svg/icon-language-world-w.svg","assets/svg/tick.svg","constants/userUrl.js","constants/feedback.js","utils/mappers/langMapper.js","config.js","utils/url/url.js","utils/mappers/placementTestCourseIds.js","utils/url/urlFactory.js","hooks/useLocalStorage.js","constants/menuLanguageCodes.js","hooks/useTimeout.js","hooks/useScripts.js","hooks/useChineseSimpleTraditionalSwitch.js","components/NavMenu/LanguageSelectionButton/LanguageSelectionButton.js","state/common/apiActions.js","constants/services.js","utils/url/urlUtils.js","utils/userUtils.js","services/userService.js","state/progress/utils.js","state/progress/serverDataFilterUtils.js","state/progress/learnProgress.js","services/learnProgressService.js","state/progress/learnProgressDuck.js","state/user/userDuck.js","state/user/userSelectors.js","context/GlobalsContext.js","components/NavMenu/NavMenu.js","assets/svg/nav-cross-black-md.svg","assets/svg/nav-cross-black-lg.svg","assets/svg/nav-cross-xs.svg","assets/svg/nav-cross-lg.svg","components/IconBar/IconBar.js","components/BurgerButton/BurgerButton.js","components/Header/NavigationContainer/OnlyDesktopBrand.js","components/Header/ChineseVariantSwitch.js","components/Header/NavigationContainer/NavigationContainer.js","components/Header/Header.js","components/RichText/RichText.js","utils/imgUtils.js","hooks/useFrontendConfig.js","components/Picture/Picture.js","components/DwPicture/DwPicture.js","utils/replacers/replaceCommons.js","utils/replacers/imageReplacer.js","utils/replacers/useImagePlaceholderReplacementEffect.js","components/ContentContainer/ContentHeadline/ContentHeadline.js","components/LegalNotice/LegalNotice.js","components/Footer/Footer.js","components/commons/LoadingMessage.js","components/commons/ErrorMessage.js","components/WithGraphQLQueryHandling/WithGraphQLQueryHandling.js","hooks/useMetadata.js","components/I18n/I18nConfigLoader.js","components/GdprLayer/BrowserOnly.js","components/GdprLayer/GdprLayer.js","constants/pageTypes.js","utils/pageMetadata.js","components/Page/PageMetaData.js","hooks/useMetaTitle.js","hooks/useMetaDescription.js","hooks/useMetaKeywords.js","utils/url/feedbackHelpers.js","hooks/useValidateTicketAndLoginUser.js","hooks/useRedirectAfterLogOut.js","components/Page/PageLayout.js","hooks/useCheckSessionTimeout.js","utils/mappers/rtlLanguages.js","state/progress/learnProgressSelectors.js","assets/images/bg-dw-desktop.jpg","assets/fonts/dw-theAntiquaB-W7Bold-web/DWTheAntiquaB-W7Bold.woff","assets/fonts/dw-theAntiquaB-W7Bold-web/DWTheAntiquaB-W7Bold.woff2","assets/fonts/dw-theAntiquaB-W5Plain-web/dwtheantiquab-w5plain.woff","assets/fonts/dw-theAntiquaB-W5Plain-web/dwtheantiquab-w5plain.woff2","assets/fonts/dw-theAntiquaB-W5PlainItalic-web/DWTheAntiquaB-W5PlainItalic.woff","assets/fonts/dw-theAntiquaB-W5PlainItalic-web/DWTheAntiquaB-W5PlainItalic.woff2","pages/MainPage.js","hooks/useLocationGetter.js","hooks/useSyncLessonProgress.js","components/GoogleTagManager/GtmLoadScript.js","components/GoogleTagManager/GtmNoScriptFallback.js","hooks/useLocationQueryParam.js","components/GoogleTagManager/hooks/useStaticInfoForGtm.js","components/GoogleTagManager/TrackingUtils.js","hooks/useCourseData.js","components/GoogleTagManager/GtmDataLayer.js","components/GoogleTagManager/GtmScriptWithDataLayer.js","components/GoogleTagManager/index.js","components/Page/PageContainer.js","pages/Default404Page.js","constants/isLtrContentOnly.js","components/HeroTemplate/HeroTemplate.js","components/Course/CourseHeroImage/CourseHeroImage.js","assets/svg/toggleableArrow.svg","assets/icons/ToggleableArrowIcon.js","components/ToggleableArrow/ToggleableArrow.js","components/Course/CourseList/CourseHeader/CourseHeader.js","components/Course/CourseList/LessionItem/LessonScore.js","components/Course/Progress/ProgressResetButton.js","components/ProgressIcon/progressIconColors.js","components/ProgressIcon/ProgressIcon.js","services/certificateService.js","utils/certificateUtils.js","assets/svg/icon-course-cert-gray.svg","components/ProgressIcon/CertificateIcon.js","assets/svg/star-white.svg","assets/svg/star-gray.svg","components/ProgressIcon/ProgressIconStar.js","components/LearnProgressIcon/LearnProgressIcon.js","components/Course/CourseList/LessionItem/LessonItem.js","components/Course/CourseList/LessonList/LessonList.js","components/Course/CourseList/CourseAccordion/CourseAccordion.js","components/Course/CourseList/CourseList.js","components/Modal/DisableScrollingStyles.js","components/Modal/ModalIntegration.js","components/StandardButton/StandardButton.js","components/Modal/Modal.js","components/Modal/ResetModal.js","components/Course/Progress/CourseProgress.js","utils/learningLevelUtils.js","components/Course/CourseOverview.js","components/ImageOGMetaData/ImageOGMetaData.js","pages/CoursePage.js","utils/replacers/htmlReplacer.js","components/WithRenderDelay/WithRenderDelay.js","components/Modal/KnowledgeModal/KnowledgeModal.js","components/Modal/KnowledgeModal/Knowledge.js","utils/replacers/knowledgeReplacer.js","components/Lesson/LessonKnowledge/LessonKnowledge.js","components/Modal/KnowledgeModal/useKnowledgePlaceholderReplacementEffect.js","components/GrammarItem/GrammarItem.js","pages/GrammarPage.js","assets/images/landing/course_landing-1200x675.jpg","assets/images/landing/course_landing-992x558.jpg","assets/images/landing/course_landing-768x432.jpg","assets/images/landing/course_landing-480x270.jpg","components/MainHeroImage/MainHeroImage.js","components/Dashboard/Tiles/Tile/Tile.js","components/Dashboard/Tiles/Tile/BlankTile.js","components/Dashboard/Tiles/Tile/MoreCoursesTile.js","constants/tileColors.js","utils/htmlUtils.js","components/Dashboard/Tiles/Tiles.js","components/Dashboard/Dashboard.js","pages/DashboardPage.js","components/GrammarOverview/GrammarOverviewHeader.js","components/Accordion/AccordionItem/AccordionItem.js","constants/grammarOverviewColors.js","components/Accordion/Accordion.js","components/GrammarOverview/GrammarOverview.js","pages/GrammarOverviewPage.js","utils/url/pathAnalyser.js","components/Lesson/LessonMenu/LessonMenuItem/LessonMenuItem.js","components/Lesson/LessonMenu/LessonTitleAndBurgerButton/LessonTitle.js","components/Lesson/LessonMenu/LessonTitleAndBurgerButton/LessonBurgerButton.js","constants/lessonParts.js","utils/lessonUtils.js","components/Lesson/LessonMenu/LessonMenu.js","assets/svg/icon-hint-circle-orange.svg","components/Lesson/LessonContentDescription/LessonContentDescription.js","utils/mappers/subtitlesLabel.js","video/videoTypeMatcher.js","video/videoPlugins.js","video/audioPlugins.js","video/videojs.js","video/api.js","video/useVideoPlayerEffect.js","components/GoogleTagManager/hooks/useMediaTracking.js","components/GoogleTagManager/hooks/useAddEmbeddingsToGtm.js","components/MediaInput/MediaInputVideo/MediaInputVideo.js","components/MediaInput/MediaInputImage/MediaInputImage.js","components/MediaInput/MediaInputAudio/MediaInputAudio.js","components/Lesson/MediaInputChooser/MediaInputChooser.js","components/Lesson/LessonInformation/LessonInformation.js","components/Lesson/LessonExercise/workflow/ExerciseProgress.js","components/Lesson/LessonExercise/LessonExerciseStats/LessonExerciseStats.js","components/ContentContainer/ContentNavTitle/ContentNavTitle.js","components/Lesson/LessonExercise/LessonExerciseHeadline/LessonExerciseHeadline.js","components/Lesson/LessonExercise/LessonExerciseHiddenAudio/LessonExerciseHiddenAudio.js","components/Lesson/LessonExercise/LessonExerciseHiddenAudio/LessonExerciseSoundFailureHiddenAudio.js","components/Lesson/LessonExercise/LessonExerciseHiddenAudio/LessonExerciseSoundSuccessHiddenAudio.js","context/AudioContext.js","components/Lesson/LessonExercise/LessonExerciseTextInput/LessonExerciseTextInput.js","hooks/useAudio.js","components/Lesson/LessonExercise/LessonExerciseQuestion/QuestionTypes/LessonExerciseQuestionAudio.js","components/Lesson/LessonExercise/LessonExerciseQuestion/QuestionTypes/LessonExerciseQuestionText.js","components/Lesson/LessonExercise/LessonExerciseQuestion/QuestionTypes/LessonExerciseQuestionImage.js","components/Lesson/LessonExercise/LessonExerciseQuestion/QuestionTypes/LessonExerciseQuestionVideo.js","utils/audioUtils.js","components/Lesson/LessonExercise/LessonExerciseQuestion/QuestionTypes/questionTypes.js","components/Lesson/LessonExercise/LessonExerciseQuestion/LessonExerciseQuestion.js","components/SolveCheckButton/ButtonTemplate.js","components/SolveCheckButton/SolveButton.js","components/SolveCheckButton/CheckButton.js","components/SolveCheckButton/SolveCheckButton.js","components/Lesson/LessonExercise/ClozeExercise/clozeExerciseUtils.js","components/Lesson/LessonExercise/workflow/inquiryState.js","components/Lesson/LessonExercise/ClozeExercise/ClozePulldown.js","components/Lesson/LessonExercise/ClozeExercise/usePlaceholderReplacementEffect.js","utils/replacers/exerciseReplacer.js","components/Lesson/LessonExercise/ClozeExercise/ExerciseRichText.js","components/Lesson/LessonExercise/ClozeExercise/AnswerTypes/PulldownAnswer.js","assets/svg/icon-hint.svg","components/Lesson/LessonExercise/LessonExerciseHint/LessonExerciseHint.js","components/Lesson/LessonExercise/ClozeExercise/AnswerTypes/ContainerTextContent.js","components/Lesson/LessonExercise/utils/exerciseUtils.js","components/Lesson/LessonExercise/ClozeExercise/AnswerTypes/ChooseAnswer.js","assets/svg/keyboard.svg","components/Lesson/LessonExercise/Keyboard/KeyboardIcon.js","components/Input/TextAreaInput/TextAreaInput.js","components/Lesson/LessonExercise/Keyboard/KeyboardWrapper.js","components/Lesson/LessonExercise/ClozeExercise/ClozeInput.js","components/Lesson/LessonExercise/ClozeExercise/AnswerTypes/WritingAnswer.js","components/Lesson/LessonExercise/workflow/useInquiryHandling.js","components/Lesson/LessonExercise/ClozeExercise/ClozeExerciseRow.js","components/Lesson/LessonExercise/ClozeExercise/ClozeExercise.js","components/Lesson/LessonExercise/DictationExercise/DictationExerciseRow.js","components/Lesson/LessonExercise/DictationExercise/DictationExercise.js","constants/inquiryMediaTypes.js","components/Lesson/LessonExercise/ManyToManyExercise/ManyToManyAnswer/ManyToManyAnswer.js","components/Lesson/LessonExercise/ManyToManyExercise/ManyToManyQuestionRow/manyToManyQuestionRowReducer.js","components/Lesson/LessonExercise/ManyToManyExercise/ManyToManyQuestionRow/ManyToManyQuestionRow.js","components/Lesson/LessonExercise/ManyToManyExercise/ManyToManyExercise.js","components/Lesson/LessonExercise/LessonExerciseAnswer/answerState.js","components/Lesson/LessonExercise/LessonExerciseAnswer/LessonExerciseTextAnswer/LessonExerciseTextAnswer.js","components/Lesson/LessonExercise/LessonExerciseAnswer/LessonExerciseImageAnswer/LessonExerciseImageAnswer.js","components/Lesson/LessonExercise/LessonExerciseAnswer/ExerciseAnswer.js","hooks/useIsMountedRef.js","components/Lesson/LessonExercise/MultiSelectionExercise/MultiSelectionQuestionRow.js","components/Lesson/LessonExercise/MultiSelectionExercise/MultiSelectionExercise.js","components/Lesson/LessonExercise/RepeatExercise/SelfAssessment/SelfAssessmentAnswer.js","components/Lesson/LessonExercise/RepeatExercise/SelfAssessment/SelfAssessmentQuestion.js","components/Lesson/LessonExercise/RepeatExercise/SelfAssessment/SelfAssessment.js","components/Lesson/LessonExercise/RepeatExercise/RepeatExerciseRow.js","components/Lesson/LessonExercise/RepeatExercise/RepeatExercise.js","components/Lesson/LessonExercise/SingleSelectionExercise/SingleSelectionQuestionRow/SingleSelectionQuestionRow.js","components/Lesson/LessonExercise/SingleSelectionExercise/SingleSelectionExercise.js","components/Lesson/LessonExercise/SortingExercise/SortingExerciseRow.js","components/Lesson/LessonExercise/SortingExercise/SortingExercise.js","components/Lesson/LessonExercise/LessonExerciseItem/ExerciseLeavingPrompt.js","components/ContentContainer/ContentContainer.js","components/ContentContainer/ContentBottomLine/ContentBottomLine.js","components/ContentContainer/AccordionContainer.js","components/Manuscript/Manuscript.js","components/Lesson/LessonExercise/LessonExerciseItem/LessonExerciseItem.js","state/mode/lessonExerciseModeDuck.js","state/mode/lessonExerciseModeSelectors.js","hooks/useExerciseManager.js","components/Lesson/LessonExercise/LessonExerciseNavigation/LessonExerciseNavigation.js","hooks/useScrollToTop.js","components/Lesson/LessonVocabulary/VocabularyRow/VocabularyRow.js","components/Lesson/LessonVocabulary/LessonVocabulary.js","utils/mappers/lessonPartToTranslationCode.js","components/Lesson/LessonKnowledgeNavigation/NavigationRow/NavigationRow.js","components/Lesson/LessonKnowledgeNavigation/LessonKnowledgeNavigation.js","pages/ManuscriptPage.js","components/ContentContainer/ContentSection/ContentSection.js","components/Lesson/LessonExtras/Links/ArticleLinks.js","components/Lesson/LessonExtras/Links/AudioLinks.js","components/Lesson/LessonExtras/Links/DownloadLinks.js","components/Lesson/LessonExtras/Links/VideoLinks.js","components/Lesson/LessonExtras/LessonExtras.js","pages/LessonExtrasPage.js","components/Lesson/LessonExercise/LessonExerciseResult/ExerciseAction.js","constants/marks.js","components/Lesson/LessonExercise/LessonExerciseResult/Summary.js","components/Lesson/LessonExercise/LessonExerciseResult/LessonExerciseResult.js","components/Lesson/LessonSummary/LessonSummary.js","pages/LessonSummaryPage.js","components/Lesson/Lesson.js","pages/LessonPage.js","components/RestrictedRoute/RestrictedRoute.js","components/user/ConfirmUserRegistrationContainer.js","utils/errorClassAssigner.js","utils/validation/validationMessages.js","components/Input/Input.js","components/Select/Select.js","components/Checkbox/Checkbox.js","components/Input/BirthDateInput/BirthDateInput.js","utils/validation/validators.js","components/ReCaptcha/ReCaptcha.js","constants/countries.js","constants/userInputOptions.js","components/user/Registration.js","services/passwordService.js","utils/mappers/passwordReset.js","components/Input/NewPassword/NewPasswordInputs.js","components/user/PasswordChange.js","components/user/PasswordReset.js","components/StatusFeedback/StatusFeedback.js","components/Modal/DeleteAccountModal/DeleteAccountModal.js","components/user/UserProfile.js","components/user/SetNewPassword.js","components/PlacementTest/PlacementTest.js","pages/PlacementTestPage.js","components/VocabularyTrainer/VocabularyTrainerStart.js","components/VocabularyTrainer/VocabularyTrainerStatus.js","components/VocabularyTrainer/BubbleContainer.js","components/VocabularyTrainer/VocabularyTrainerItem.js","assets/svg/smiley-positive.svg","assets/svg/smiley-negative.svg","assets/icons/Smiley.js","components/VocabularyTrainer/VocabularyTrainerSmileys.js","hooks/useTransition.js","components/VocabularyTrainer/VocabularyTrainerExercise.js","components/Vocabulary/VocabularyQuery.js","components/VocabularyTrainer/VocabularyTrainer.js","components/PlacementResult/PlacementAndFinalTestResult.js","pages/PlacementAndFinalTestResultPage.js","components/Help/Help.js","pages/HelpPage.js","pages/LegalPage.js","components/Vocabulary/VocabularySearch/duck/vocabularySearchDuck.js","hooks/vocabularySearchHooks.js","components/Vocabulary/VocabularySearch/VocabularySearch.js","hooks/useDebounce.js","components/Vocabulary/VocabularyMoreButton/VocabularyMoreButton.js","components/Vocabulary/VocabularyItem.js","components/Vocabulary/Vocabulary.js","pages/VocabularyPage.js","components/App.js","state/rootReducers.js","state/store.js","state/middlewares/apiMiddleware.js","index.js","utils/apolloClient.js","hooks/useTranslation.js","utils/globals.js","utils/commons.js","utils/ssr.js","utils/css.js","context/I18nContext.js","components/Text/Text.js","constants/keyCodes.js","utils/jsonPath.js","utils/i18n.js"],"names":["Boolean","window","location","hostname","match","_extends","Object","assign","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","this","_objectWithoutProperties","excluded","sourceKeys","keys","indexOf","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","className","fillRule","d","id","SvgDwLogo","_ref","svgRef","title","titleId","props","viewBox","xmlns","ref","ForwardRef","StyledLogo","styled","SvgDwClaim","style","StyledClaimLogo","url","href","aria-label","rel","colors","DW_DARK_BLUE","resolutions","min","tablet","desktop","DW_LIGHT_BLUE","StyledDesktopBanner","max","RtlContext","createContext","useRtlContext","useContext","I18nText","translation","isA","restProps","isRtl","label","useTranslation","Text","StyledMobileBanner","LG_TRANSPARENT_WHITE_15","LG_TRANSPARENT_BLACK_075","LG_WHITE","LG_GRAY_14","dwLogoMobile","LG_GRAY_15","LG_TRANSPARENT_WHITE_25","dwLogoTablet","LG_BLUE_5","useToggle","initialState","useState","isEnabled","setEnabled","toggleOnClick","useCallback","toggleOnKeyPress","e","stroke","strokeWidth","fill","opacity","transform","SvgIconUserNavi","width","height","xmlnsXlink","undefined","SvgIconLanguageWorldW","xmlSpace","clipRule","strokeLinejoin","strokeMiterlimit","SvgTick","domainWithProtocol","isServer","origin","USER","AS_URL","AS_URL_WITH_DOMAIN","PS_URL","LOGGED_USER_RESOURCE","TICKET_PARAM_NAME","FEEDBACK_TYPES","OTHER","LOGIN","LOGIN_ERROR","LOGIN_FB","LOGOUT","SESSION_TIMEOUT","PROFILE_SERVICE_UNAVAILABLE","MISSING_USER_PROFILE","FORCED_LOGOUT","PASSWORD_CHANGED","MAIL_CHANGED","MAIL_CHANGE_REQUEST","EMAIL_ALREADY_EXISTS","REGISTERED","REGISTRATION_CONFIRMED","DELETED","INVALID_TOKEN","PASSWORD_RESET_REQUESTED","PASSWORD_RESET_SET","PASSWORD_CHANGE_WRONG_PASSWORD","PROFILE_UPDATED","PASSWORD_CHANGE","INVALID_CERTIFICATE","VOCABULARY_TRAINER_UNAVAILABLE","VOCABULARY_TRAINER_NO_VOCABULARIES","CERTIFICATE_NO_TRANSCRIPTION","MISSING_TRANSCRIPTION","USER_ALREADY_EXISTS","USER_ALREADY_CONFIRMED","TYPES_WITH_PROFILE_PAGE_AS_TARGET","COMMON_FEEDBACK_TRANSLATION_KEYS","LANG_CODES","freeze","NEUTRAL","GERMAN","ENGLISH","RUSSIAN","CHINESE","PORTUGUESE_BRAZIL","ALBANIAN","AMHARIC","ARABIC","BENGALI","BOSNIAN","BULGARIAN","DARI","FRENCH","GREEK","HAUSA","HINDI","INDONESIAN","KISWAHILI","CROATIAN","MACEDONIAN","PASHTO","PERSIAN","POLISH","PORTUGUESE_AFRICA","ROMANIAN","SERBIAN","SPANISH","TURKISH","UKRANIAN","URDU","codeToLang","invert","toLangCode","lang","toUpperCase","toLang","code","toLowerCase","config","graphQL","baseUrl","process","dw","mobileUrl","reCaptcha","siteKey","download","videoBaseUrl","audioBaseUrl","typeToUrlPrefixMap","COURSE","GRAMMAR","LESSON","PLACEMENT","FINAL","urlPrefixToTypeMap","onlySpecialCharactersRegex","RegExp","values","general","numbers","whiteSpaces","allowedSpecial","arabic","cyrillic","greek_and_coptic","chinese","devanagari","bengali","ethiopian","join","normalizeUrlName","name","replace","encodeUrlNamePart","encodeURIComponent","getVideoDownloadUrl","videoUrl","getAudioDownloadUrl","audioUrl","getDownloadUrl","staticBaseHost","downloadId","filename","getArticleUrl","articleId","getDWStructureUrl","langCode","PLACEMENT_TEST_COURSE_IDS","getPlacementTestIdForLangCode","isPlacementTestCourse","courseId","includes","PAGE_OVERVIEW","PAGE_REGISTRATION","PAGE_PROFILE","PAGE_PASSWORD_CHANGE","PAGE_PASSWORD_RESET","PAGE_VOCABULARY_TRAINER","PAGE_VOCABULARY_TRAINER_START","STATUS_FEEDBACK","PAGE_GRAMMAR","PAGE_VOCABULARY","PAGE_LEGAL","PAGE_PLACEMENT_TEST","LESSON_VOCABULARY_URL_SUFFIX","ALPHABETICAL_ORDER_URL_SUFFIX","URL_SEARCH_PARAM_TARGET_PATH","getErrorCode","errorResponse","errorCode","getPrefixedLanguageUrl","getDashboardUrl","getGrammarUrl","getVocabularyPageUrl","getPlacementDashboardUrl","getLessonExerciseUrl","languageCode","lessonId","normalizedUrlName","lessonPartId","getLessonUrl","getUserProfileUrl","getPasswordChangeUrl","getCourseUrl","normalizedUrlCourseName","normalizedUrlLessonName","getFirstGrammarUrl","lessonUrl","firstGrammarId","getVocabularyUrl","getAlphabeticalOrderUrl","getFirstRegionalStudiesUrl","firstRegionalStudiesId","getExtrasUrl","getSummaryUrl","transformUrlContentPrefix","lessonPath","type","createLinkToResultPage","isFinalTest","getHelpUrl","getLegalUrl","getVocabularyTrainerStartPage","getFeedbackUrl","getLoginPage","targetPath","callbackUrl","getLoginRedirectUrl","withDomain","urlSearchParams","getLoginUrlSearchParamsString","substring","getCasLanguageParam","getContentUrl","language","__typename","langUrlPart","nameUrlPart","typeName","slice","typeToUrlPrefix","getFooterLinkForNamedUrl","namedUrl","getDwUrlWithLang","CUSTOM_LS_EVENT_NAME","readValue","JSON","parse","globals","localStorage","getItem","useLocalStorage","storedValue","setStoredValue","useEffect","handleStorageChange","addEventListener","removeEventListener","value","setItem","stringify","dispatchEvent","Event","CHINESE_SIMP_TRANSLATION_KEY","CHINESE_TRAD_TRANSLATION_KEY","MENU_LANGUAGES","translationKey","useTimeout","callback","delay","conditional","triggers","savedCallback","useRef","current","handleId","setTimeout","clearTimeout","loadScript","Promise","resolve","reject","tag","document","createElement","async","src","appendChild","once","tongwenScripts","TRADITIONAL_CHIN_LOCAL_STORAGE_KEY","URL_GET_PARAM_NAME","URL_GET_PARAM_SIMPLIFIED","URL_GET_PARAM_TRADITIONAL","useChineseSimpleTraditionalSwitch","toggleButtonId","isChineseLangCode","scripts","isScriptsLoaded","setScriptsLoaded","isTranslatedFirstTime","setTranslatedFirstTime","scriptUrls","cb","a","querySelectorForAllScriptTags","map","scriptUrl","querySelectorAll","all","body","then","useScripts","isTraditionalChin","setIsTraditionalChin","search","useLocation","setToggleButtonTextContent","content","getElementById","textContent","cleanedSearch","chineseVersionRequestParam","URLSearchParams","get","TongWen","trans2Trad","trans2Simp","trans2Simple","trans2Traditional","isLanguageSelected","languageTranslationKey","currentLanguage","getDashBoardUrlForLanguage","dashboardBaseUrl","LanguageSelectionButton","i18n","useI18nContext","StyledLanguageSelectionButton","role","t","classnames","hidden","LG_BLUE_4","API_CALL","apiAction","method","data","onSuccess","onFailure","headersOverride","payload","BASIC_JSON_CONTENT_TYPE_HEADER","headers","buildParamRegex","paramName","getFromUrl","regexBuilder","matchArray","exec","decodeURIComponent","removeSearchParam","paramRegex","rawWiththoutParam","getTicketFromUrlParam","getSearchParam","createDateOfBirth","year","dateOfBirth","LOGOUT_SUFFIX","PROFILE_SUFFIX","PS_PREFIX","NOT_LOGGED_USER_RESOURCE","CONFIRMATION_RESOURCE","registerUser","formattedData","userData","captchaToken","sex","firstName","lastName","email","password","country","teacher","newsletter","recaptcha","contactLanguage","formatRegistrationUserData","fetch","dataType","deleteUser","catch","msg","console","error","updateUserProfile","formatUserProfileData","response","ok","json","sumScore","contentsWithScore","scoreFieldName","reduce","acc","nextContentWithScore","filterLessonFields","filterExerciseFields","filterInquiryFields","filterDataFromService","filteredLessonData","removeObjectAttributes","exerciseProgresses","filteredExerciseProgresses","filterExerciseData","exerciseProgress","filteredExerciseProgress","inquiryProgresses","filteredInquiryProgresses","filterInquiryData","inquiryProgress","sourceObject","attributesToRemoveArray","targetObject","forEach","field","scoreFragment","fragment","addLearningMetaInfo","handicap","targetHandicap","gql","getLearningMetaInfoFragment","initializeLessonLearnProgressWithDataFromServer","lessonProgresses","lessons","lessonProgress","initializeCourseLearnProgressWithDataFromServer","courseProgresses","courses","updateLessonProgressFromService","filteredLessonProgress","findExistingLesson","otherLessons","filter","lesson","cosLessonId","deleteLessonProgressById","findExistingLessonById","deleteLessonProgressesByCourseId","cosCourseId","deleteCourseProgressById","findExistingCourseById","otherCourses","course","addCourseProgressData","courseProgress","find","generateLessonProgress","existingLesson","updateExistingLessonMetaData","createNewLessonMetaData","newExerciseProgresses","existingExercise","exercise","cosExerciseId","otherExercises","updateExerciseMetaData","createNewExerciseMetaData","updateExerciseMetaDataForExistingLesson","newDoneExerciseCount","updatedLesson","doneExerciseCount","resultPoints","allExerciseCount","maxPointsForAllExercises","newLesson","maxPoints","exerciseAchievableScore","cleanedExistingInquiryProgresses","some","newInquiryProgress","inquiryId","PROTECTED_URL","LESSON_TYPE","COURSE_TYPE","handleError","status","getProgress","contentType","text","getProgresses","ids","getLastEditedLessonsIds","numberOfLessons","ADD_LESSON_PROGRESS","READ_LESSON_PROGRESS","READ_LESSON_PROGRESSES","DELETE_LESSON_PROGRESS","READ_COURSE_PROGRESS","READ_COURSE_PROGRESSES","DELETE_COURSE_PROGRESS","DELETE_LESSON_PROGRESSES","REMOVE_LEARN_PROGRESS","LESSON_PROGRESS_SYNC_NEEDED","deleteLessonProgress","dispatch","deleteLProgress","deleteProgressOnServer","readLessonProgress","getState","user","isLoggedIn","progress","readProgress","readCourseProgress","addCourseProgress","initCourse","initialCourseData","initialCourseProgressData","setLessonProgressSyncNeeded","isSyncNeeded","syncLessonProgress","lessonProgressesData","learnProgress","readCProgresses","addProgress","readProgresses","deleteLessonProgresses","deleteCProgress","saveProgressOnServer","lessonProgressData","contentId","deleteLearnProgress","isSyncRequired","SET_USER","REMOVE_USER","API_ERROR","LOGOUT_REQUEST_CALLED_FLAG","removeUserData","removeUser","setUser","setApiError","hasLogOutRequestBeenCalled","apiErrorHasOccurred","userSelector","state","userDataSelector","GlobalsContext","useGlobalsContext","StyledNavMenu","isNavMenuOpen","toggleIsNavMenuOpen","isLanguageSubMenuOpen","setIsLanguageSubMenuOpen","useParams","useSelector","isLoggedInClass","useDispatch","handleLogoutClicked","preventDefault","aria-expanded","maxHeight","StyledNavigationList","to","onClick","StyledNavMenuIcon","data-toggle","data-parent","data-target","event","transition","visibility","borderBottom","onKeyUp","LG_BLUE_1","LG_TRANSPARENT_BLACK_40","LG_BLACK","LG_TRANSPARENT_BLACK_25","clearfix","StyledIconBar","LG_BLUE_6","defaultHoverStyles","navCrossXs","IconBar","mediaHoverDeviceDetection","StyledBurgerButton","aria-haspopup","aria-controls","mobile","navCrossBlackLg","navCrossLg","navCrossBlackMd","StyledOnlyDesktopBrand","StyledLink","Link","StyledChineseVariantSwitch","transFunction","StyledNavigationContainer","LG_TRANSPARENT_WHITE_10","StyledHeader","headerTitleKey","RichtextGlobalStyles","createGlobalStyle","RichText","isContainer","dangerouslySetInnerHTML","__html","ratioToPercentage","widthProportion","heightProportion","ASPECT_RATIO","landscape","landscape_legacy","portrait","square","imgWithFormatFn","imageId","imageBasePath","format","legacy","aspectRatio","free","sm","sm_richtext","md","md_richtext","lg","lg_richtext","full","frontendConfig","getFrontendConfig","FrontendConfigContext","useFrontendConfig","Picture","sources","fallbackUrl","alt","sourceAttributes","index","DwPicture","inProps","imgWithFormat","defaultProps","media","srcSet","tabletLandscape","replaceWithComponent","selector","componentFn","node","param","elementType","matchedElem","renderContainer","placeholderClassNames","setAttribute","trim","parentNode","replaceChild","componentToRender","ReactDOM","render","mapImgPlaceholderToPicComponent","rawImageFormat","getAttribute","isLegacy","isFree","imageAspectRatio","imagePropsText","imagePropsLegacy","imagePropsFree","paddingBottom","imageProps","replacePlaceholderImagesWithResponsivePictures","useImagePlaceholderReplacementEffect","trigger","ContentHeadline","children","isStandalone","standalone","legalFragment","StyledLegalNotice","legal","shortTitle","footerFragment","footerData","parameters","first","Date","getFullYear","aria","footer","policy","accessibility","StyledFooter","rtlClass","footerObject","LG_BLUE_7","StyledLoadingMessage","StyledErrorMessage","WithGraphQLQueryHandling","query","queryVariables","useQuery","variables","loading","refetch","message","item","hasData","metadata","FrontendMetadataContext","getMetadata","i18nConfigQuery","I18nConfigLoader","i18nQueryVariables","inFrontendConfig","inMetadata","setTranslations","iso639ByLang","BrowserOnly","GdprLayer","hasAcceptedGdpr","setHasAcceptedGdpr","left","PAGE_TYPES","HELP","VOCABULARY","ALPHABETICAL_ORDER","LEGAL","OVERVIEW","EXERCISE","LESSON_EXERCISE_RESULT","LESSON_SUMMARY","GRAMMAR_DETAIL","GRAMMAR_OVERVIEW","VOCABULARY_OVERVIEW","REGIONAL_STUDIES","PLACEMENT_TEST","FINAL_TEST","MANUSCRIPT","USER_PROFILE","PASSWORD_RESET","PASSWORD_SET","REGISTER_USER","FEEDBACK_STATUS","EXTRAS","PLACEMENT_DASHBOARD","VOCABULARY_TRAINER","NOT_FOUND_PAGE","GTM_NO_CONTENT_PAGE_IDS","LESSON_MENU_VOCABULARY_KEY","LESSON_EXERCISE_RESULT_TITLE_KEY","LESSON_MENU_GRAMMAR_KEY","LESSON_MENU_REGIONAL_STUDIES_KEY","LESSON_MANUSCRIPT_KEY","LESSON_MENU_EXTRAS_KEY","LESSON_EXERCISES_RESULT_GENERAL_KEY","PAGE_TYPE_TO_TITLE_TRANSLATION_KEYS","PAGE_TYPE_TO_DESCRIPTION_TRANSLATION_KEYS","PAGE_TYPE_TO_KEYWORDS_TRANSLATION_KEYS","createTitle","titleParts","createKeywords","keywords","html2text","html","metaDataFragment","PageMetaData","pageType","parentContentName","translationFirst","useOnlyCmsKeywords","useTeaserAsDescription","useDescriptionTranslation","addKeywordsAndDescription","contentName","keywordStrings","description","teaser","siteName","iso639Lang","pageTitleTranslationKeys","pageTitleTranslations","useMetaTitle","descriptionMeta","descriptionTranslation","useMetaDescription","keywordsString","defaultKeywords","additionalKeyword","useMetaKeywords","contentFullUrl","showDescription","property","feedbackHelper","getForErrorCode","getForPasswordChangeErrorCode","errorPasswordChange","forLogin","redirectUrl","forLogout","forUserDelete","forInvalidToken","forProfileServiceUnavailable","forSessionTimeout","forMissingUserProfile","forForcedLogout","forPasswordChanged","forMailChanged","forMailChangeRequest","forRegistered","forRegistrationConfirm","forPasswordResetRequest","forSetPassword","forProfileUpdated","forVocabularyTrainerUnavailable","forVocabularyTrainerNoVocabularies","forCertificateMissingTranscription","forInvalidCertificate","forGeneralError","getFeedbackContentKey","feedbackType","typeWithoutUnderline","s","useValidateTicketAndLoginUser","ticket","history","useHistory","ticketDomain","pathname","getTicketDomain","VALIDATE_TICKET_URL","validateUserTicket","Error","push","useRedirectAfterLogOut","userState","StyledPageLayout","useCheckSessionTimeout","rtlLanguages","isRtlByLangCode","findLessonLearnProgressSelector","findInquiryLearnProgressSelector","exerciseId","currentExerciseProgress","findInquiryProgress","findCourseLearnProgressSelector","isLessonProgressSyncRequiredSelector","GlobalStyles","bgDWDesktop","LG_GRAY_3","DWTheAntiquaBBoldWoff","DWTheAntiquaBBoldWoff2","DWTheAntiquaBSPlainWoff","DWTheAntiquaBSPlainWoff2","DWTheAntiquaBSPlainItalicWoff","DWTheAntiquaBSPlainItalicWoff2","MainPage","setLocation","setLangCode","locationFromWindow","pathnameFragments","split","langCodeFromLocation","useLocationGetter","isLessonProgressSyncRequired","useSyncLearnProgress","stylisPlugins","stylisRTLPlugin","GtmLoadScript","gtmId","GtmNoScriptFallback","obj","dataLayer","toString","display","useLocationQueryParam","from","getQueryParamValueFrom","useStaticInfoForGtm","pageUrl","macaParam","gtmLevel1Id","contentTitle","fullName","pickCategoryName","navs","gtmDataLayerPartial","partial","generateContentGtmInfo","list","level1Id","noContentPageId","navigations","navsToRoot","alignedNavs","nav","addCurrentNavToRootList","categoryLevel1","categoryLevel2","categoryLevel3","contentLanguage","gtmLanguageCode","pageOID","gtmContentType","date","gtmContentDate","subject","subjects","topicIds","topics","topic","originId","pageSID","departmentName","departments","categoryType","displayForm","level1ID","TrackingUtils","initDataLayerScript","datalayer","initialDataLayer","generateDataLayer","pageData","embeddings","pushToGoogleTagManager","datalayerObj","withReset","resetDataLayer","reset","CourseDataContext","gtmDataLayerFragment","GtmDataLayer","GtmScriptWithDataLayer","isGtmAlreadyInitialized","memo","NotMemoGtmScriptWithDataLayer","PageContainer","withPageContainerAndMetadata","TargetComponent","component","addDescriptionAndKeywordsMeta","Default404Page","NOT_FOUND","MONOLINGUAL_COURSES_IDS","isMonolingualCourse","StyledHeroTemplate","determineImage","StyledCourseHeroImage","HeroTemplate","points","SvgToggleableArrow","StyledToggleableArrowIcon","StyledToggleableArrow","isUp","classNames","up","StyledCourseHeader","groupNameTranslationKey","isOpen","onKeyPress","tabIndex","LG_GRAY_13","LG_GRAY_TRANSPARENT_1","StyledLessonScore","resultInPercentage","calculatePercentage","resultPointsClassName","LG_RED_SCORE","LG_GRAY_11","LG_GREEN_SCORE","StyledProgressResetButton","onClickReset","LG_GRAY_2","StyledSmallProgressResetButton","progressIconColors","progressState","EMPTY","HALF","FULL","translationKeyPrefix","StyledProgressIcon","color","getTitleTranslationKey","CERTIFICATE_URL","getCertificate","err","handleCertificateGeneration","blob","URL","createObjectURL","downloadLink","click","StyledCertificateIcon","handleOnCertificateClick","CertificateGray","starsMapping","StarGrey","StarWhite","StyledProgressIconStar","LearnProgressIcon","finalLessonId","finalTestPassed","getProgressIcon","StyledLessonItem","learningTargetHeadline","grammarDescription","LG_GRAY_8","LG_GRAY_9","StyledLessonList","groupedLessons","collapsed","CourseAccordion","isOnDesktop","innerWidth","StyledCourseList","onClickResetLesson","groupName","DisableScrollingStyles","ModalIntegration","componentToCreate","createPortal","StyledStandardButton","titleKey","handleClick","rtl","LG_GRAY_10","StyledModal","fadeIn","descriptionKey","leftButtonKey","rightButtonKey","onConfirmClicked","onCancelClicked","faded","classNameString","LeftButton","RightButton","LG_TRANSPARENT_BLACK_50","LG_TRANSPARENT_BLACK_20","LG_GRAY_4","StandardButton","ResetModal","StyledCourseProgress","onClickResetCourse","learningLevelMapper","0","2","4","8","16","sortByLearningLevel","coursesToSort","sort","b","dkLearningLevel","LTRContentCourseOverviewStyle","CourseOverview","isMonoLingualCourse","lessonContentLinks","contentLinks","mainContentImageLink","learningMetaInfo","achievableScore","exerciseCount","filteredContentLinks","removeContentLinksWithEmptyTarget","contentLink","isFinalTestPredicate","allLessonIds","groupBy","isResetModalOpen","setResetModalOpen","lessonIdToDelete","setLessonIdToDelete","lessonIds","progresses","data-course-id","targetId","imageOGMetaDataFragment","hasCorrectImageFormat","imageFormats","ImageOGMetaData","image","createImageSharingData","coursePageQuery","addMetaInfo","TABLE_WITH_ATTRIBUTES","OPEN_TABLE_TAG","CLOSE_TABLE_TAG","wrapTablesWithDiv","htmlString","removeAttributesFromTables","WithRenderDelay","delayTime","timeoutHandle","actionToBeDelayed","setState","prevState","Component","KnowledgeModal","knowledgeType","imageName","audioFile","subTitle","onClose","audioRef","closeModalRef","closeBackdropRef","initialSound","closeModal","classList","remove","closeButton","data-dismiss","aria-hidden","audioLink","linkTitle","play","playAudio","in","Knowledge","knowledge","wrapper","vocals","classMap","KnowledgeModalContainer","handleKeyPress","mainContentImage","audios","mp3Src","placeholderToKnowledgeComponent","matchedElement","knowledges","element","parseInt","dataset","replacePlaceholderMarkupWithKnowledges","knowledgesFragment","lessonKnowledgeQuery","LessonKnowledge","lessonName","lessonKeywordStrings","lessonKnowledgeQueryVariables","knowledgeId","lessonLang","knowledgeContent","dir","useKnowledgePlaceholderReplacementEffect","ignore","GrammarItem","markup","grammarPageQuery","StyledMainHeroImage","landingImgFull","LG_ORANGE_DARK","landingImgMobile","landingImgTablet","landingImgTabletLandscape","tileFragment","LinkWrapper","linkData","StyledTile","backgroundColor","LG_TRANSPARENT_WHITE_50","StyledBlankTile","StyledMoreCoursesTile","tileColors","LG_ORANGE","LG_PINK","LG_RED","LG_GREEN_LIGHT","LG_GREEN","scrollIntoViewCenter","htmlElement","scrollIntoView","behavior","block","inline","StyledTiles","tileData","tileElement","Math","random","substr","Dashboard","courseIds","readCourseProgresses","dashboardPageQuery","DashboardPage","dashboardPageQueryVariables","courseLang","amount","contentsByLang","contentsInGerman","StyledGrammarOverviewHeader","StyledAccordionItem","contents","scrollHeight","AccordionItemContent","LG_BAHAMA_BLUE","div","LG_GRAY_12","grammarOverviewColors","LG_GREEN_YELLOW","LG_RED_DARK","StyledAccordion","accordionData","headline","grammars","removeEmptyGrammars","grammarOverview","Array","isArray","GrammarOverview","grammarOverviewPageFragment","grammarOverviewPageQuery","GrammarOverviewPage","grammarPageQueryVariables","pathPartials","langCodeRegex","titlePathRegex","contentIdRegex","contentTypeRegex","knowledgeTypeRegex","knowledgeWithContentIdTypeRegex","feedbackTypes","LessonMenuItem","ariaLabel","StyledLessonMenuItem","LG_ORANGE1","LessonTitle","StyledLessonTitle","LessonBurgerButton","isMenuCollapsed","setIsMenuCollapsed","StyledLessonBurgerButton","buttonStyle","LESSON_PARTS","VOCABULARY_GLOSSARY","PHONEMIC_CHART","DOWNLOAD","hasLessonPart","lessonOverviewParts","lessonPart","part","getFirstIdOfLessonPart","targetOverviewPart","filterLessonExerciseOverviewItems","isFinalTestLesson","lessonContentLinksFromCourse","currentLessonId","finalTestLessonContentLink","assembleOverviewInfos","hasInfo","LessonMenu","courseName","isFromPlacementCourse","firstExercisePath","grammarAria","vocabularyAria","getFirstOfTypeId","hasExercisesReset","StyledLessonMenu","boxShadow","progressIconClass","SvgIconHintCircleOrange","lessonContentDescriptionFragment","LessonContentDescription","isHintHidden","lessonid","learningTargetDescription","subtitlesLabels","hasVideoPlayer","test","hasVideoPlaceholdersInRichText","hasAudioPlayer","hasAudioPlaceholdersInRichText","hasVideosOnly","hasAudiosOnly","importVideoPlugins","importAudioPlugins","importVideoJs","videojsModule","videojs","default","commonOptions","bigPlayButton","videoOptions","audioOptions","controlBar","pictureInPictureToggle","fullscreenToggle","playbackRates","importAllPlugins","importPlayerPlugins","getPlayerWithPlugins","initPluginsForPlayer","player","isAudio","seekButtons","forward","back","initAudio","hlsQualitySelector","initVideo","loadVideoJsApi","playerLib","init","renderVideoJsPlayers","durationBarComponentName","videoPlayButtonComponentName","playerNode","add","videoNode","tagName","addChild","useMediaTracking","dictionary","useAddEmbeddingsToGtm","mediaInputVideoFragment","MediaInputVideo","didCancel","loadedApi","convertVideoJsNodes","videos","subtitles","posterImageUrl","hlsVideoSrc","formattedDuration","preload","controls","poster","data-duration","subtitle","subtitleUrl","srcLang","srcLanguage","trackId","mediaInputImageFragment","MediaInputImage","mediaInputAudioFragment","MediaInputAudio","contentDate","audioResourceLinks","duration","size","cursor","xttype","xtrefresh","xtstream","xtlocation","xtmode","xtextension","xtplayer","content-date","xtrichname","xtduration","xtsize","mediaInputChooserFragment","MediaInputChooser","lessonInput","lessonInformationQuery","LessonInformation","isContentDescriptionHintVisible","ogImage","lessonInformationQueryVariables","EXERCISE_PROGRESS_ACTION_TYPES","ADD_DONE_INQUIRY","RESET","exerciseProgressReducer","action","score","maxScore","numberOfDoneInquiries","currentExerciseScore","ExerciseProgressContext","ExerciseProgressProvider","useReducer","exerciseStats","Provider","useExerciseProgress","addDoneInquiry","resetProgress","outOfText","numberOfPointsEarnedText","numberOfExercisesSolvedText","LessonExerciseStats","amountOfInquiries","isRtlLang","numberOfDoneInquiriesSpan","amountOfInquiriesSpan","scoreSpan","ltrStats","rtlStats","ContentNavTitle","top","bottom","direction","lessonExerciseHeadlineFragment","LessonExerciseHeadline","LessonExerciseHiddenAudio","forwardRef","LessonExerciseSoundFailureHiddenAudio","_","LessonExerciseSoundSuccessHiddenAudio","AudioContext","AudioProvider","questionAudiosRefArray","setQuestionAudiosRefArray","wrongAnswerAudioRef","correctAnswerAudioRef","LessonExerciseTextInput","inputText","useAudio","audiosRefArray","setAudiosRefArray","currentAudio","audio","pause","currentTime","stopOtherAudios","addRef","playWrongDefaultAudioFeedBack","playCorrectDefaultAudioFeedBack","LessonExerciseQuestionAudioGlobalStyles","LessonExerciseQuestionAudio","inquiryText","isPlaying","setIsPlaying","hasEnded","setHasEnded","playAudioLabel","audioLabel","onPlaying","onEnded","onPause","LessonExerciseQuestionTextGlobalStyles","LessonExerciseQuestionText","LessonExerciseQuestionImage","LessonExerciseQuestionVideo","findQuestionAudio","mainContent","findFeedbackAudio","isSolutionAudioFallbackMode","QUESTION_TYPES","TEXT","IMAGE","AUDIO","VIDEO","lessonExerciseQuestionFragment","exerciseQuestionTypeSelector","inquiry","LessonExerciseQuestion","useSubInquiryTextAsLabel","subInquiries","questionType","labelText","subInquiryText","questionAudio","StyledButtonTemplate","btnClass","disabled","fullWidth","aria-disabled","grayActiveFocus","LG_GRAY_1","StyledSolveButton","isDisabled","StyledCheckButton","StyledSolveCheckButton","isSolveButtonDisabled","isCheckButtonDisabled","handleSolveClicked","handleCheckClicked","placeholderConfig","placeholder","maxLength","createSingleSentenceAnswerContent","arrayJoinString","subInquiry","cleanupAndAddPlaceholderComponents","answertext","answerWithReplacePlaceholders","INQUIRY_STATE","INITIAL","WRONG","CORRECT","SOLVED","ClozePulldown","pulldownData","inquiryState","checkEntry","onHandleItemSelected","isToggled","setIsToggled","getInputClassName","selectedValue","alternatives","alternative","altIndex","data-answer-select","data-exercise-answer-id","data-index","alternativeText","usePlaceholderReplacementEffect","createComponent","scopeClassName","replacePlaceholderWithAnswerComponent","ExerciseRichText","update","StyledPulldownAnswer","onChange","clozeLayoutType","initialClozePulldownData","entry","isCorrect","clozePulldownData","setClozePulldownData","answer","newClozeData","createPulldown","partialComponent","answerContent","selectedClozeLayoutConfig","CONTINUOUS_TEXT","cmp","SINGLE_SENTENCE","SvgIconHint","LessonExerciseHintGlobalStyles","LessonExerciseHint","isSimpleIconHint","hintSVG","Tag","StyledContainerTextContent","MULTIPLE_WHITESPACES_REGEX","MINUS_CHARACTERS_REGEX","SPECIAL_CHARACTERS","WHITESPACE_BEFORE_SPECIAL_REGEX","WHITESPACE_AFTER_SPECIAL_REGEX","normalizeText","str","isNormalizedTextEqual","str1","str2","ChooseAnswerGlobalStyles","ChooseAnswer","initialClozeChooseData","selectedAnswer","initialSelectableAnswers","clozeChooseData","setClozeChooseData","selectableAnswers","setSelectableAnswers","handleAnswerClicked","answerText","answerId","isSelectedAnswer","clozeData","removeSelectedAnswer","newSelectableAnswers","addSelectableAnswer","updated","setSelectedAnswer","selectableAnswer","removeSelectableAnswer","answers","shuffle","EmptyPlaceholder","FilledPlaceholder","answerLink","PlaceHolder","createPlaceholder","getAnswerClasses","defaultClasses","aria-selected","aria-multiselectable","x","y","_ref11","SvgKeyboard","StyledKeyboardIcon","KeyboardIcon","TextAreaInput","input","isPlaceholderDisabled","translatedPlaceholder","StyledVerticalTextArea","aria-autocomplete","rows","borderColor","getBorderColor","textarea","css","layout","shift","KeyboardWrapper","inputMaxLength","inputValue","inputClassName","isTextArea","isKeyboardVisible","setKeyboardVisible","layoutName","setLayoutName","keyboardRef","inputRef","textAreaRef","setInput","focus","toggleKeyboard","onInputKeyPress","charCode","handleShift","onChangeInput","onChangeLocalInput","r","pressedKey","StyledKeyboardBackdrop","ClozeInput","handleOnInputChange","fieldNameId","userAnswer","setValue","setIsCorrect","handleChange","baseInputClassName","aria-required","autoComplete","WritingAnswerGlobalStyles","WritingAnswer","initialClozeWritingData","clozeWritingData","setClozeWritingData","newData","checkAnswer","innerText","useInquiryHandling","setSolveButtonDisabled","setCheckButtonDisabled","isMarkedAsDone","setMarkedAsDone","wrongAnswerCount","setWrongAnswerCount","setInquiryState","disableAllButtons","checkAndMarkAsDone","handleCorrectAnswer","handleWrongAnswer","correctSubInquiries","handleSolved","ClozeExerciseRow","initiallyCorrectInquiries","inquiryDescription","clozeType","setCorrectSubInquiries","feedbackAudioUrl","feedbackAudioRef","changeResult","playCorrectAudioFeedBack","answerComponent","getAnswerComponent","lessonExerciseHintPartial","data-type","data-exercise-id","clozeExerciseFragment","ClozeExercise","inquiries","DictationExerciseRow","solutionText","aria-atomic","newInput","DictationExercise","INQUIRY_MEDIA_TYPE","ManyToManyAnswerGlobalStyles","ManyToManyAnswer","answersBlocked","mediaType","isLeftAnswer","isMatched","onAnswerClicked","isImage","basicClass","isCorrectlyMatched","isSolved","checkedStatus","assignMatchedAnswerClass","isSelected","currentSideAnswersBlocked","assignAnswerClass","images","SHUFFLE_RIGHT_ANSWERS","MATCH_ANSWERS_PAIR","BLOCK_ANSWERS","RESET_MATCHED_ANSWERS_PAIR","CHECK_ANSWERS","SOLVE_ANSWERS","reducer","selectedId","isLeft","selectedIndex","initialLeftAnswers","shuffledRightAnswers","rightAnswers","leftMatchedAnswer","leftAnswers","rightMatchedAnswer","leftMatchedAnswers","rightMatchedAnswers","isLeftAnswerBlocked","isRightAnswerBlocked","updatedAnswers","isIdEqual","matchedAnswer","updatedLeftMatchedAnswers","updatedRightMatchedAnswers","isAllMatchedCorrectly","every","solvedWrongCounter","solvedMatchedAnswers","isSolvedCorrect","ManyToManyQuetsionRowGlobalStyles","ManyToManyQuestionRow","onMatchedAnswerClicked","onSolveClicked","onCheckClicked","ManyToManyExercise","ANSWER_STATE","SELECTED","LessonExerciseTextAnswerGlobalStyles","LessonExerciseTextAnswer","answerState","assignAnswerAriaLabel","getAnswerClass","LessonExerciseImageAnswer","lessonExerciseAnswerFragment","ExerciseAnswer","answerMediaType","useIsMountedRef","isMountedRef","setMounted","isMounted","MultiSelectionQuestionRow","correctAnswerAudioUrl","answersRefArray","answersFrozen","setAnswersFrozen","setAnswers","answersRef","updateAnswers","answersToUpdate","answerStateEvalFn","skipAnswerConditionalFn","playSuccessAudio","chosenAnswerIndex","blur","newAnswerState","selectOrUnselectAnswer","checkedAnswers","isSolvedCorrectly","MultiSelectionExercise","SelfAssessmentAnswer","answerLabel","SelfAssessmentQuestion","howWasItWithOnlyFeedbackAudio","howWasItLabel","feedbackAudio","lessonExerciseQuestionAudio","SelfAssessment","setSelected","updateSelected","RepeatExerciseRowGlobalStyles","RepeatExerciseRow","subInquiryDescription","RepeatExercise","SingleSelectionQuestionRow","getAnswerState","selectCurrentAnswer","SingleSelectionExercise","sortingExerciseFragment","SortingExerciseRowAnswerGlobalStyles","SortingExerciseRow","answerType","choosenAnswers","setChoosenAnswers","order","isCorrectOrder","isDuplicatedValue","playCorrectAudio","getAnswerLink","answerID","isInquiryMediaTypeText","classType","updateSelection","currentSelectableAnswers","currentChoosenAnswers","getFeedbackClass","sortObjectsByProp","SortingExercise","ExerciseLeavingPrompt","useBeforeunload","leaveMessage","ContentContainer","ContentBottomLine","AccordionContainerContent","StyledAccordionContainer","titleTranslation","manuscriptFragment","ManuscriptGlobalStyles","Manuscript","manuscript","ContainerComponent","AccordionContainer","lessonExerciseItemFragment","getExerciseComponentByType","inquiryType","selectionType","getExerciseComponentBySelectionType","LessonExerciseItem","exerciseCounter","manuscriptContent","contentComponent","mediaInputComponent","inputType","getExerciseMediaInputComponentByType","SET_IMPROVE_MODE_FOR_LESSON","REMOVE_IMPROVE_MODE_FOR_LESSON","LESSON_EXERCISE_MODE","IMPROVE","addLessonMode","mode","removeLessonMode","isLessonInImproveModeSelector","lessonExerciseMode","useExerciseManager","lessonExerciseOverviewItems","isLessonInImproveMode","generateNextExercisePath","nextItem","exerciseName","mapToFlatLessonExercises","lessonExerciseItems","filterExercisesWithNoFullScore","lessonExercises","lessonExercise","existingProgress","getCurrentIndex","currentExerciseItem","firstExerciseLink","isImproveMode","firstExerciseItem","exerciseIdsWithProgress","getFirstExercisePath","nextExerciseLink","remainingLessonExercises","splice","remainingExercisesWithNoFullScore","getNextExercisePath","isFullScoreAchieved","currentExerciseCount","filterExerciseDataIfInImproveMode","remainingInquiries","filterExercises","lessonExerciseQuery","LessonExerciseNavigation","lessonAchievableScore","scrollTo","useScrollToTop","lessonIdNumber","exerciseIdNumber","unlisten","listen","lessonExerciseNavQueryVariables","handleNextButtonClick","progressMetaData","createLearnProgressData","nextPath","filteredData","VocabularyRow","audioSource","isValidImage","lessonVocabularyQuery","LessonVocabularyGlobalStyles","LessonVocabulary","lessonVocabularyQueryVariables","vocabularies","vocabularyItem","LESSON_PART_TRANSLATION_CODES","getArrowAriaLabel","NavigationRow","position","currentItem","previousItem","moveTo","LESSON_PARTS_SUFFIX","LessonKnowledgeNavigation","lessonKnowledgeOverviewItems","currentItemIndex","normalizedName","getLessonGrammarUrl","getLessonRegionalStudiesUrl","getLessonPhonemicChartUrl","getLessonVocabularyUrl","getCurrentComponent","ManuscriptQuery","ManuscriptPage","ManuscriptPageQueryVariables","ContentSection","ArticleLinks","targetName","AudioLinks","getAudioLinkTitle","variant","getMediaFileSizeInKBorMB","capitalize","DownloadLinks","videoResourceLinksFragment","VideoLinks","concat","video","videoResourceLinks","videoLink","techFormat","getVideoLinksByFormat","link","getVideoLinkTitle","lessonExtrasFragment","filterContentByType","targetType","LessonExtras","downloads","articles","hasDownloads","hasVideos","hasAudios","hasArticles","LessonExtrasQuery","LessonExtrasPage","LessonExtraPageQueryVariables","EXERCISE_ACTION_TYPES","CONTINUE","SAVE","ExerciseAction","actionType","onClickAction","actionKey","translationPrefix","generateActionKey","MARKS","GOOD","MEDIUM","BAD","Summary","showFeedback","showTitle","percentile","randomNumber","generateRandomNumber","getFeedBackText","LessonResultAndSummaryGlobalStyles","LessonExerciseResult","assembledInfos","info","filteredAssembledInfos","showImproveButton","resultPrefix","infos","exerciseInfos","generateExerciseInfos","nextUrl","hintKey","loginLink","firstExerciseLinkInImproveMode","LessonSummary","currentLessonLink","currentLessonIndex","nextLessonContentLink","redirectMessage","generateRedirectInfos","lessonSummaryPageQuery","LessonSummaryPage","LessonSummaryQueryVariables","lessonOverviewPartsFragment","scope","handicapArg","LtrContentLessonStyle","Lesson","overviewParts","lessonMainImage","filterLessonKnowledgeOverviewItems","path","useRouteMatch","lessonIdString","contentsByType","courseMainImage","exact","lessonPageQuery","LessonPage","RestrictedRoute","params","ConfirmUserRegistrationContainer","confirmationId","confirmUserRegistration","hasErrorClassAssigner","CUSTOM_ERROR_TRANSLATION_KEYS","buildKey","suffix","getTranslatedValidationMessage","validationErrorTranslationKey","validationType","customErrorTranslationKey","Input","titleTranslationKey","placeholderTranslationKey","register","validationError","isLabelVisible","aria-live","Select","defaultOptionKey","options","option","optionName","ariaKey","Checkbox","BirthDateInput","errors","initialDateOfBirth","initYear","datePartials","month","day","deconstructDateOfBirth","hasErrors","placeholderLabel","aria-labelledby","defaultValue","emailPattern","transcriptionPattern","namePattern","passwordValid","numberOfFulfilledConditions","pattern","passwordRetypeValid","passwordRetype","passwordDiffersFromEmail","subString","template","captcha","captchaError","isCaptchaPassed","ReCaptcha","onExpired","hl","sitekey","token","countries","contactLanguageOptions","profileEditKeyPath","professionKeyPath","sexOptions","professionOptions","languageLevelKeyPath","languageLevelOptions","writingReadingLevelKeyPath","writingReadingLevelOptions","handicapKeyPath","handicapOptions","learningTypeKeyPath","learningTypeOptions","Registration","captchaRef","useForm","reValidateMode","handleSubmit","getValues","formState","captchaMessage","captchaValidationMessage","createLink","createPrivacyPolicyLink","createAgbLink","checkboxes","labelTextFunc","dataPrivacyPolicy","conditionsOfParticipation","required","gdpr","onSubmit","responseJson","data-id","validate","differsFromEmail","checkbox","cancelRegistration","PASSWORD_RESOURCE_PUBLIC_RESET","PASSWORD_RESOURCE_PUBLIC_RESET_REQUEST","PASSWORD_RESOURCE_PROTECTED","requestResetPassword","formatPasswordResetUserData","NewPasswordInputs","passwordTitleKey","passwordPlaceholderKey","passwordRepeatTitleKey","passwordRepeatPlaceholderKey","PasswordChange","oldPassword","oldUserPassword","userPassword","newPassword","changePasswordResponse","jsonResponse","PasswordReset","textAlign","StatusFeedback","feedbackContentKey","targetPageUrl","getTargetPageUrl","DeleteAccountModal","confirmDeleteLabel","UserProfile","isDeleteModalOpen","setDeleteModalOpen","additionalSelectInputs","translationKeySuffix","removeEmptySelectValues","cleanedData","selectInputName","updatedData","toggleDeleteAccountModal","firstNameTranscription","lastNameTranscription","streetName","postalCode","city","defaultChecked","SetNewPassword","setEmail","res","log","getUserByConfirmationId","userEmailResponse","passwordResetToken","PlacementTile","level","PlacementTestGlobalStyles","PlacementTest","placementTestPageQuery","PlacementTestPage","placementTestPageQueryVariables","SCOPE","LAST_LESSON","LAST_THREE_LESSONS","LAST_TEN_LESSONS","ALL_LESSONS","scopeToTranslationKeyMapping","VocabularyTrainerStart","setLastLessonsIds","setNumberOfVocabularies","handleExerciseStart","setNumberOfLessons","handleChangeScope","lastEditedLessonIds","onBlur","StyledVocabularyTrainerStatus","number","total","rtlText","data-value","ltrText","BubbleContainer","VocabularyTrainerItemGlobalStyles","StyledVocabularyTrainerItem","vocabulary","onSolved","isHidden","setSolved","audioStatus","setAudioStatus","setDisabled","autoPlay","SvgSmileyPositive","cx","cy","SvgSmileyNegative","StyledSmileyPositive","SmileyPositive","StyledSmileyNegative","SmileyNegative","StyledVocabularyTrainerSmileys","setAnswerState","TRANSITION_STATUS","BUSY","READY","StyledVocabularyTrainerExercise","handleExerciseEnd","correctAnswers","setCorrectAnswers","trainerVocabularies","setTrainerVocabularies","nextVocabulary","newTrainerVocabularies","slicedTrainerVocabularies","setTransition","onTransitionEnd","transitionStatus","startTransition","newTransition","useTransition","operator","getCondition","searchQuery","getQueryVariables","offset","originalCondition","translationCondition","vocabularyFragment","searchResultFragment","searchQueryPart","vocabularySearchQuery","vocabularyTrainerQuery","makeQueryVariables","VocabularyTrainer","lastLessonsIds","numberOfVocabularies","isStarted","setStarted","getVocabularyTrainerPage","getRandomVocabularies","flat","uniqueVocabularies","Set","placementResultFragment","PlacementAndFinalTestResult","allDkCourses","dkCourses","courseDkLearningLevel","result","learningLevel","targetCourse","getFirstCourseOfEachLevel","dwLinks","lessonDkLearningLevel","finalTest","nextLevel","levelValues","currentIndex","nextLevelRecommendation","nextCourseUrl","nextCourse","dkCourse","getRecommendedCourseURL","showCertificateButton","PageMetaDataComponent","placementResultPageQuery","PlacementAndFinalTestResultPage","placementResultPageQueryVariables","dkCoursesInGerman","currentCourse","helpFragment","StyledHelp","help","helpPageQuery","HelpPage","helpPageQueryVariables","legalPageQuery","LegalPage","TYPE_SET_INPUT","TYPE_GET_CACHED_RESULTS","TYPE_SET_HINTS_DATA","TYPE_SET_HINTS_OPENED","TYPE_SET_HINTS_CLOSED","TYPE_SET_CURSOR_ARROW_UP","TYPE_SET_CURSOR_ARROW_DOWN","TYPE_KEY_ESCAPE_CLICKED","TYPE_KEY_BACKSPACE_CLICKED","TYPE_ANY_CHARACTER_TYPED","TYPE_ITEM_CLICKED","TYPE_KEY_ENTER_CLICKED","vocabularyItems","recentlySearched","isOpened","isEscapeClicked","isEnterClicked","set","cursorUp","cursorDown","combineVocabularyData","mergedVocabularyData","original","hits","idSet","has","specialCharactersRegex","StyledVocabularySearch","onItemSelected","Map","vocabularyOverviewPlaceholder","vocabularyOverviewAria","debouncedSearchQuery","debouncedValue","setDebouncedValue","handler","useDebounce","useGetCachedHintsResponse","useGetHintsResponseAndCacheIt","searchInput","cleanSearchQuery","wordsRegex","suggestions","vocabularyText","matches","distinctSuggestions","keyCode","KEY_ARROW_UP","KEY_ARROW_DOWN","KEY_ENTER","conditionalSearchQuery","KEY_ESCAPE","KEY_BACKSPACE","onFocus","suggestion","onMouseDown","m","VocabularyMoreButton","VocabularyItem","Vocabulary","startValue","setStartValue","vocabularyData","setVocabularyData","isNotEmptyResp","setIsNotEmptyResp","setSearchQuery","findAdditionalData","shouldConcat","resp","combinedVocabularyData","newSearchQuery","VocabularyPage","vocabularyPageQueryVariables","typeToPage","coursePageQueryVariables","ContentPage","typeId","pageDef","App","rootReducer","combineReducers","storage","engine","createEngine","storageMiddleware","store","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","applyMiddleware","next","dataOrParams","thunk","composeEnhancers","createStore","createStoreWithMiddleware","load","cache","InMemoryCache","possibleTypes","ModelAspect","DeliveryAspect","NamedAspect","AssociationsAspect","TextualAspect","ContactAspect","MetadataAspect","DkMetadataAspect","GeographicLocationAspect","TreeAspect","DeletionAspect","PlaybackResourceAspect","BinaryDataAspect","SocialMediaAspect","FooterAspect","BetaLayerAspect","UrlAspect","PersonRelatedContent","Content","addTypename","createPersistedQueryLink","sha256","useGETForHashedQueries","createHttpLink","uri","client","ApolloClient","ssrForceFetchDelay","restore","__APOLLO_STATE__","hydrate","navigator","serviceWorker","ready","registration","unregister","isPlainKey","normalizeTranslation","global","noop","inMap","entries","array","additionalInformation","charAt","fileSizeInBytes","floor","j","fraction","round","prop","module","exports","zero","Number","MAX_SAFE_INTEGER","wrapInMedia","sizes","mediaMin","wrapInHoverPointerMedia","hover","pointer","mediaDevice","mouse","touch","DW_BLUE","LG_BLUE_2","LG_BLUE_3","LG_GRAY_5","LG_GRAY_6","LG_GRAY_7","LIGHT_KHAKI","LG_GRAY_TRANSPARENT_15","LG_TRANSPARENT_BLACK_30","composition","even","odd","_369","_258","_4710","notFirst","notLast","topElements","numberOfElements","justNElements","clearTranslations","hasTranslations","I18nContext","StyledText","StyledTextGray12","keyCodes","TAB","ENTER","SPACEBAR","ARROW_LEFT","ARROW_RIGHT","ESCAPE","accessPathByArr","keysArr","objPartial","accessPath","pathStr","translations","inTranslations","retrieveLabel","nextVar","varNameRegex","replaceInPattern"],"mappings":"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","file":"static/js/main.6c5fc115.chunk.js","sourcesContent":["// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/),\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA',\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.',\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log('No internet connection found. App is running in offline mode.');\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n className: \"logoBox\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n className: \"logoLogo\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.5929091,3.39736364 C22.287,3.39736364 27.714,8.82381818 27.714,15.5184545 C27.714,22.2125455 22.287,27.6392727 15.5929091,27.6392727 C8.89881818,27.6392727 3.47181818,22.2125455 3.47181818,15.5184545 C3.47181818,8.82381818 8.89881818,3.39736364 15.5929091,3.39736364 L15.5929091,3.39736364 Z M26.9959091,5.16463636 C29.8276364,1.99527273 33.9458182,0 38.5303636,0 C47.0694545,0 53.9920909,6.92236364 53.9920909,15.4617273 C53.9920909,24.0010909 47.0694545,30.9234545 38.5303636,30.9234545 C33.9458182,30.9234545 29.8276364,28.9281818 26.9959091,25.7585455 C24.1644545,28.9281818 20.046,30.9234545 15.4614545,30.9234545 C6.92209091,30.9234545 0,24.0010909 0,15.4617273 C0,6.92236364 6.92209091,1.93784382e-15 15.4614545,1.93784382e-15 C20.046,1.93784382e-15 24.1644545,1.99527273 26.9959091,5.16463636 L26.9959091,5.16463636 Z M15.9913636,13.0819091 L12.6553636,13.0819091 L12.6553636,18.0845455 L15.9913636,18.0845455 C18.4150909,18.0845455 19.2714545,17.0787273 19.2714545,15.5833636 C19.2714545,14.088 18.4085455,13.0819091 15.9913636,13.0819091 L15.9913636,13.0819091 Z M16.4511818,9.59536364 C19.8250909,9.59536364 23.2835455,11.292 23.2835455,15.5828182 C23.2835455,19.8739091 19.8250909,21.5705455 16.4511818,21.5705455 L8.886,21.5705455 L8.886,9.59536364 L16.4511818,9.59536364 L16.4511818,9.59536364 Z M35.4119983,15.9318147 L37.5403715,10.1204985 L40.4334297,10.1204985 L42.5618029,15.9318147 L44.2678615,10.1204985 L48.0692727,10.1204985 L44.4908946,21.3263197 L41.2676315,21.3263197 L38.9674938,15.9016908 L36.7070387,21.3263197 L33.483486,21.3263197 L29.9048182,10.1204985 L33.7062294,10.1204985 L35.4119983,15.9318147 L35.4119983,15.9318147 Z\",\n id: \"Shape\"\n})));\n\nfunction SvgDwLogo(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, [\"title\", \"titleId\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 54 31\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _ref2);\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgDwLogo);\nexport default __webpack_public_path__ + \"static/media/dw-logo.ff9012af.svg\";\nexport { ForwardRef as ReactComponent };","import styled from 'styled-components';\nimport { ReactComponent as Logo } from '../svg/dw-logo.svg';\n\nexport const StyledLogo = styled(props => )``;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgDwClaim(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, [\"title\", \"titleId\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"225 40 330 35\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"g\", {\n className: \"claimBox\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n className: \"claimClaim\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M268.479,73.127l0,-1.301c-0.655,-0.522 -1.526,-1.045 -2.443,-1.435l-3.042,-23.86c1.13,-0.305 2.35,-0.913 3.31,-1.478l0,-1.305l-8.012,0l-8.704,23.028l-8.882,-23.028l-8.007,0l0,1.305c0.999,0.523 2.222,1.131 3.348,1.478l-2.999,23.948c-0.743,0.263 -1.614,0.785 -2.354,1.347l0,1.301l8.793,0l0,-1.301c-0.824,-0.522 -1.741,-0.996 -3.046,-1.347l1.568,-21.769l0.043,0l9.4,24.417l2.481,0l9.184,-24.68l0.046,0l2.438,21.901c-1.134,0.305 -2.311,0.916 -3.224,1.478l0,1.301l10.102,0ZM290.589,69.346c-1.305,0.391 -2.35,0.478 -2.35,0.478c0,0 -0.352,-0.867 -0.352,-2.7l0,-9.88c0,-4.354 -2.733,-6.181 -7.478,-6.181c-2.832,0 -5.142,0.519 -7.186,1.304l0,5.659l1.525,0c0,0 0.956,-1.529 1.564,-3.967c0,0 1.265,-0.913 3.18,-0.913c2.922,0 4.312,1.919 4.312,4.88l0,2.438c-7.666,-0.04 -12.102,3.61 -12.102,7.14c0,3.44 2.392,5.918 5.917,5.918c2.701,0 5.402,-1.739 6.618,-4.041l0.046,0c0,0 0.043,2.259 1.173,4.132c3.174,-0.919 5.697,-2.871 5.697,-2.871l-0.564,-1.396ZM283.804,65.821c0,2.871 -2.439,4.79 -4.49,4.79c-1.954,0 -3.44,-1.568 -3.44,-3.789c0,-2.224 1.614,-4.447 7.93,-4.315l0,3.314ZM316.618,71.35c-1.78,-0.306 -3.042,-0.785 -3.042,-0.785l0,-29.467c-4.264,-0.093 -7.399,0.56 -7.399,0.56l0,1.348c2.001,0.348 3.312,0.781 3.312,0.781l0,7.581c0,0 -1.83,-0.213 -3.75,-0.213c-6.528,0 -11.49,4 -11.49,12.187c0,6.092 3.085,10.18 8.182,10.18c3.657,0 6.315,-2.303 7.36,-4.873l0.046,0.043c0,-0.004 -0.305,1.869 -0.263,4.566c3.956,0.132 7.044,-0.525 7.044,-0.525l0,-1.383ZM309.489,63.514c0,4.004 -2.445,7.139 -5.356,7.139c-3.617,0 -5.622,-3.355 -5.622,-8.231c0,-6.01 2.398,-9.144 6.443,-9.144c1.876,0 3.355,0.433 4.535,1.222l0,9.014ZM337.997,60.162c0,-5.488 -2.695,-9.099 -8.487,-9.099c-6.27,0 -9.792,4.741 -9.792,11.576c0,7.098 3.522,10.84 9.71,10.84c3.265,0 6.262,-1.219 8.569,-3l-0.74,-1.699c-1.567,1.083 -4.13,1.873 -6.27,1.873c-4.399,0 -6.966,-2.744 -6.966,-8.278l0,-0.607l13.976,0l0,-1.606ZM333.649,59.81l-9.539,0c0.306,-3.743 1.912,-6.664 4.962,-6.664c3.096,0 4.616,2.882 4.577,6.664ZM367.076,47.274l0,-5.793c-1.222,-0.298 -2.654,-0.476 -4.048,-0.476c-5.487,0 -8.049,2.957 -8.049,7.705l0,2.744l-4.18,0l0,2.087l4.18,0l0,16.985c-2.087,0.521 -3.527,1.3 -3.527,1.3l0,1.301l11.225,0l0,-1.301c0,0 -1.522,-0.736 -3.615,-1.3l0,-16.985l5.747,0l0,-2.087l-5.747,0l0,-3.219c0,-3.356 0.696,-5.229 3.398,-5.229c0.568,0 1.172,0.085 1.698,0.26c0.345,2.047 1.39,4.008 1.39,4.008l1.528,0ZM387.793,61.776c0,-6.842 -3.824,-10.713 -9.966,-10.713c-6.269,0 -11.529,4.134 -11.529,11.707c0,6.881 3.82,10.752 9.966,10.752c6.269,0 11.529,-4.173 11.529,-11.746ZM383.446,62.553c0,5.666 -2.263,8.576 -5.967,8.576c-4.396,0 -6.834,-3.699 -6.834,-9.141c0,-5.666 2.263,-8.576 5.92,-8.576c4.397,0 6.881,3.739 6.881,9.141ZM407.337,51.543c-0.824,-0.305 -1.954,-0.522 -3.088,-0.522c-2.741,0 -4.443,2.128 -5.616,5.476l-0.132,0c0.264,-1.691 0.349,-3.39 0.349,-5.171c-2.385,-0.088 -5.349,0.128 -7.265,0.522l0,1.344c1.088,0.171 2.311,0.476 3.309,0.824l0,16.51c-1.215,0.304 -2.26,0.738 -3.309,1.3l0,1.301l10.837,0l0,-1.301c-1.088,-0.522 -2.222,-0.957 -3.441,-1.3l0,-8.407c0,-3.746 1.483,-7.313 4.4,-7.313c1.305,0 2.389,0.432 3.394,0.909l0.562,-4.172ZM457.531,73.127l0,-1.301c0,0 -1.35,-0.824 -2.957,-1.3c0,0 0.175,-4.052 0.175,-9.799c0,-6.536 -2.307,-9.664 -6.874,-9.664c-3.664,0 -6.493,2.083 -7.581,4.869l-0.046,0c-0.437,-2.569 -2.389,-4.869 -6.525,-4.869c-3.441,0 -6.273,2.129 -7.361,4.788l-0.086,0c0,0 0.303,-1.835 0.303,-4.525c-4.169,-0.131 -7.35,0.522 -7.35,0.522l0,1.344c1.956,0.349 3.309,0.824 3.309,0.824l0,16.51c-1.788,0.429 -3.309,1.3 -3.309,1.3l0,1.301l10.186,0l0,-1.255c0,0 -1.4,-0.782 -2.793,-1.307l0,-9.535c0,-3.391 2.093,-7.231 5.622,-7.231c3.526,0 4.265,2.965 4.265,5.752l0,11.014c-1.087,0.437 -2.093,0.959 -2.786,1.307l0,1.255l9.663,0l0,-1.255c-0.697,-0.301 -1.741,-0.87 -2.786,-1.307l0,-9.535c0,-3.391 2.047,-7.231 5.705,-7.231c3.308,0 4.353,3.139 4.353,8.016c0,4.918 -0.171,8.75 -0.171,8.75c-1.528,0.525 -2.79,1.307 -2.79,1.307l0,1.255l9.834,0ZM468.72,44.573c0,-1.563 -1.13,-2.741 -2.741,-2.741c-1.567,0 -2.74,1.178 -2.74,2.741c0,1.525 1.173,2.698 2.74,2.698c1.611,0 2.741,-1.173 2.741,-2.698ZM471.072,73.127l0,-1.301c0,0 -1.396,-0.824 -3.052,-1.3l0,-19.2c-4.254,-0.131 -7.393,0.522 -7.393,0.522l0,1.344c1.916,0.349 3.306,0.824 3.306,0.824l0,16.51c-1.739,0.429 -3.306,1.3 -3.306,1.3l0,1.301l10.445,0ZM498.628,73.127l0,-1.301c0,0 -1.355,-0.824 -2.965,-1.3c0,0 0.221,-4.098 0.221,-9.799c0,-6.536 -2.26,-9.664 -7.009,-9.664c-3.831,0 -6.532,2.218 -7.577,4.788l-0.085,0c0,0 0.302,-1.835 0.302,-4.525c-4.173,-0.131 -7.354,0.522 -7.354,0.522l0,1.344c1.966,0.349 3.313,0.824 3.313,0.824l0,16.51c-1.83,0.476 -3.313,1.3 -3.313,1.3l0,1.301l10.321,0l0,-1.255c0,0 -1.353,-0.782 -2.921,-1.307l0,-9.535c0,-3.438 2.089,-7.231 5.793,-7.231c3.441,0 4.4,3.139 4.4,8.016c0,4.918 -0.178,8.75 -0.178,8.75c-1.567,0.525 -2.918,1.307 -2.918,1.307l0,1.255l9.97,0ZM524.395,71.35c-1.781,-0.306 -3.046,-0.785 -3.046,-0.785l0,-29.467c-4.258,-0.093 -7.396,0.56 -7.396,0.56l0,1.348c2,0.348 3.313,0.781 3.313,0.781l0,7.581c0,0 -1.834,-0.213 -3.75,-0.213c-6.533,0 -11.491,4 -11.491,12.187c0,6.092 3.089,10.18 8.185,10.18c3.654,0 6.316,-2.303 7.353,-4.873l0.047,0.043c0,-0.004 -0.305,1.869 -0.263,4.566c3.955,0.132 7.048,-0.525 7.048,-0.525l0,-1.383ZM517.266,63.514c0,4.004 -2.446,7.139 -5.357,7.139c-3.618,0 -5.622,-3.355 -5.622,-8.231c0,-6.01 2.395,-9.144 6.445,-9.144c1.875,0 3.353,0.433 4.534,1.222l0,9.014ZM542.812,66.949c0,-7.228 -10.406,-5.483 -10.406,-11.013c0,-1.653 1.049,-2.698 2.917,-2.698c1.266,0 2.401,0.303 3.05,0.647c0.31,1.27 0.742,2.57 1.305,3.572l1.563,0l0,-5.829c-1.304,-0.348 -3.128,-0.565 -5.001,-0.565c-4.662,0 -7.837,2.605 -7.837,5.961c0,7.445 10.319,5.576 10.319,11.017c0,2.09 -1.309,2.961 -3.227,2.961c-1.607,0 -3,-0.437 -4.045,-0.871c-0.26,-1.174 -0.821,-2.488 -1.308,-3.572l-1.603,0l0,6.223c1.734,0.437 3.604,0.654 5.829,0.654c4.401,0 8.444,-2.694 8.444,-6.487ZM552.995,70.781c0,-1.567 -1.174,-2.693 -2.698,-2.693c-1.564,0 -2.74,1.126 -2.74,2.693c0,1.565 1.176,2.741 2.74,2.741c1.524,0 2.698,-1.176 2.698,-2.741Z\",\n style: {\n fillRule: \"nonzero\"\n }\n }))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgDwClaim);\nexport default __webpack_public_path__ + \"static/media/dw-claim.dad03c02.svg\";\nexport { ForwardRef as ReactComponent };","import styled from 'styled-components';\nimport { ReactComponent as ClaimLogo } from '../svg/dw-claim.svg';\n\nexport const StyledClaimLogo = styled(props => )``;\n","import styled from 'styled-components';\nimport { StyledLogo as LogoIcon } from '../../assets/icons/DwLogo';\nimport { StyledClaimLogo as ClaimIcon } from '../../assets/icons/DwClaim';\nimport { colors, resolutions } from '../../utils/css';\n\nexport const Logo = ({ className, url = 'https://dw.com' }) => {\n return (\n \n \n \n \n );\n};\n\nexport const StyledLogo = styled(Logo)`\n display: inline-block;\n margin: 0 20px;\n direction: ltr;\n\n svg.logo {\n width: 40px;\n height: 23px;\n fill: ${colors.DW_DARK_BLUE};\n transition: fill 80ms cubic-bezier(0.43, 0, 0.09, 1) 67ms;\n }\n\n svg.claim {\n display: none;\n }\n\n @media (min-width: ${resolutions.min.tablet}px) {\n svg.logo {\n width: 54px;\n height: 31px;\n }\n\n svg.claim {\n display: none;\n }\n }\n\n @media (min-width: ${resolutions.min.desktop}px) {\n svg.logo {\n width: 88px;\n height: 50px;\n }\n\n svg.claim {\n display: inline-block;\n margin: 0 12px;\n width: 140px;\n height: 50px;\n fill: ${colors.DW_LIGHT_BLUE};\n transition: fill 80ms cubic-bezier(0.43, 0, 0.09, 1) 67ms;\n }\n }\n`;\n","import styled from 'styled-components';\nimport { resolutions } from '../../utils/css';\nimport { StyledLogo as Logo } from '../Logo/Logo';\n\nexport const DesktopBanner = ({ className }) => {\n return (\n \n );\n};\n\nexport const StyledDesktopBanner = styled(DesktopBanner)`\n display: grid;\n height: 110px;\n margin-left: -20px;\n margin-right: -20px;\n padding: 26px 15px;\n width: 100%;\n\n @media (max-width: ${resolutions.max.tablet}px) {\n display: none !important;\n }\n`;\n","export default __webpack_public_path__ + \"static/media/dw-logo-tablet.ac032dbb.svg\";","export default __webpack_public_path__ + \"static/media/dw-logo-mobile.7e6e58ec.svg\";","import { createContext, useState } from 'react';\n\n/**\n * @deprecated since we use StylisRTLPlugin in MainPage we should not need to distinguish between\n * ltr/rtl in components because it's managed globally. This context still exists for old copy&paste\n * components because it has not been removed yet. The isRtl result of this provider is now always\n * undefined because the value is not set anymore.\n */\nexport const RtlContext = createContext({});\n\nexport const RtlProvider = props => {\n const { initialIsRtl = false, children } = props;\n\n const [isRtl, setIsRtlValue] = useState(initialIsRtl);\n const setIsRtl = isRtlValue => setIsRtlValue(isRtlValue);\n\n const isRtlContext = {\n isRtl,\n setIsRtl,\n };\n\n return {children};\n};\n","import { useContext } from 'react';\nimport { RtlContext } from '../context/rtlContext';\n\n/**\n * @deprecated since we use StylisRTLPlugin in MainPage we should not need to distinguish between\n * ltr/rtl in components because it's managed globally. This context still exists for old copy&paste\n * components because it has not been removed yet. The isRtl result of this provider is now always\n * undefined because the value is not set anymore.\n */\nexport const useRtlContext = () => useContext(RtlContext);\n","import { StyledText as Text } from '../Text/Text';\nimport { useTranslation } from '../../hooks/useTranslation';\nimport { useRtlContext } from '../../hooks/useRtl';\n\nexport const I18nText = ({ translation, isA, className, ...restProps }) => {\n const { isRtl } = useRtlContext();\n const label = useTranslation(translation);\n\n return {label};\n};\n","import styled from 'styled-components';\nimport { colors, resolutions } from '../../utils/css';\nimport dwLogoTablet from '../../assets/svg/dw-logo-tablet.svg';\nimport dwLogoMobile from '../../assets/svg/dw-logo-mobile.svg';\nimport { I18nText } from '../I18n/I18nText';\n\nexport const MobileBanner = ({ className, title }) => {\n return (\n \n );\n};\n\nexport const StyledMobileBanner = styled(MobileBanner)`\n border-width: 0 0 1px;\n box-shadow: inset 0 1px 0 ${colors.LG_TRANSPARENT_WHITE_15},\n 0 1px 5px ${colors.LG_TRANSPARENT_BLACK_075};\n line-height: 23px;\n position: fixed;\n left: 0px;\n right: 0px;\n top: 0px;\n z-index: 1030;\n\n @media (min-width: ${resolutions.min.tablet}px) {\n border-radius: 0px;\n height: 80px;\n }\n\n @media (min-width: ${resolutions.min.desktop}px) {\n display: none !important;\n }\n\n .mobile-banner {\n background: ${colors.LG_WHITE};\n border-bottom: 1px solid ${colors.LG_GRAY_14};\n height: 60px;\n margin-bottom: 0px;\n min-height: 50px;\n position: relative;\n width: 100%;\n z-index: 100;\n\n &:before,\n &:after {\n display: table;\n content: ' ';\n }\n\n @media (min-width: ${resolutions.min.tablet}px) {\n height: 80px;\n }\n }\n\n .mobile-banner-logo {\n background: url(${dwLogoMobile});\n color: ${colors.LG_GRAY_15};\n display: inline-block;\n /*! @noflip */\n float: left;\n font-size: 18px;\n font-weight: 400;\n height: 23px;\n line-height: 20px;\n margin: 17px 15px 0 15px;\n padding: 0;\n text-shadow: 0 1px 0 ${colors.LG_TRANSPARENT_WHITE_25};\n width: 40px;\n\n @media (min-width: ${resolutions.min.tablet}px) and (max-width: ${resolutions.max.tablet}px) {\n background: url(${dwLogoTablet});\n height: 31px;\n margin-top: 24px;\n width: 54px;\n }\n }\n\n .mobile-banner-brand {\n color: ${colors.LG_BLUE_5};\n font-size: 17px;\n margin: 19px auto 0 auto;\n position: relative;\n text-align: center;\n text-transform: uppercase;\n width: auto;\n\n @media (min-width: ${resolutions.min.tablet}px) and (max-width: ${resolutions.max.tablet}px) {\n font-size: 27px;\n margin: 23px auto 0 auto;\n padding-top: 8px;\n width: 300px;\n }\n }\n`;\n","/* eslint-disable no-shadow */\nimport { useCallback, useState } from 'react';\n\nexport const useToggle = ({ initialState = false, key = 'Enter' } = {}) => {\n const [isEnabled, setEnabled] = useState(initialState);\n const toggleOnClick = useCallback(() => {\n setEnabled(isEnabled => !isEnabled);\n }, []);\n\n const toggleOnKeyPress = useCallback(\n e => {\n if (e.key === key) {\n setEnabled(isEnabled => !isEnabled);\n }\n },\n [key],\n );\n\n return [isEnabled, { toggleOnClick, toggleOnKeyPress }];\n};\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"desc\", null, \"Person Icon\");\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Seiten\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\",\n opacity: 1\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"06-desk-lektionsinfo+burger\",\n transform: \"translate(-1146.000000, -501.000000)\",\n fill: \"#FFFFFF\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"burgernavi-d\",\n transform: \"translate(920.000000, 170.000000)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M241.86087,345.655072 C239.603853,344.603859 238.150728,344.078261 237.501449,344.078261 L233.976812,345.284058 L230.35942,344.078261 C230.081158,344.078261 229.578748,344.209661 228.852174,344.472464 C228.1256,344.735267 227.468602,344.990337 226.881159,345.237681 L226,345.655072 L226,347 L241.86087,347 L241.86087,345.655072 Z M229.988406,340.507246 C231.008701,342.64059 232.338156,343.707246 233.976812,343.707246 C235.584549,343.707246 236.898546,342.64059 237.918841,340.507246 C238.289857,340.383574 238.591303,339.997105 238.823188,339.347826 C239.055074,338.698547 239.155556,338.072467 239.124638,337.469565 C239.09372,336.866664 238.954591,336.565217 238.707246,336.565217 C239.047345,335.606758 239.047345,334.802902 238.707246,334.153623 C238.676328,334.060869 238.629952,333.944928 238.568116,333.805797 C238.50628,333.666666 238.343963,333.419325 238.081159,333.063768 C237.818356,332.708211 237.524639,332.391306 237.2,332.113043 C236.875361,331.834781 236.427056,331.579711 235.855072,331.347826 C235.283089,331.115941 234.657008,331 233.976812,331 C232.925599,331 231.998072,331.262799 231.194203,331.788406 C230.390334,332.314012 229.849277,332.839611 229.571014,333.365217 L229.2,334.153623 L229.153623,334.292754 C229.122705,334.35459 229.099517,334.455072 229.084058,334.594203 C229.068599,334.733334 229.05314,334.887922 229.037681,335.057971 C229.022222,335.22802 229.029952,335.444443 229.06087,335.707246 C229.091788,335.97005 229.138164,336.256037 229.2,336.565217 C228.952656,336.565217 228.813527,336.866664 228.782609,337.469565 C228.751691,338.072467 228.852173,338.698547 229.084058,339.347826 C229.315943,339.997105 229.617389,340.383574 229.988406,340.507246 L229.988406,340.507246 Z M230.127536,335.776812 C230.127536,335.684058 230.166183,335.591305 230.243478,335.498551 C230.320773,335.405797 230.552655,335.282126 230.93913,335.127536 C231.325606,334.972946 231.889851,335.05024 232.631884,335.35942 C233.373917,335.637683 234.085021,335.714976 234.765217,335.591304 C235.445414,335.467632 235.971013,335.313044 236.342029,335.127536 C236.713045,334.942028 236.991303,334.756523 237.176812,334.571014 C237.331402,334.571014 237.462801,334.764249 237.571014,335.150725 C237.679228,335.5372 237.733333,335.869564 237.733333,336.147826 L237.733333,337.353623 C237.918842,337.353623 238.042512,337.369082 238.104348,337.4 C238.166184,337.430918 238.197101,337.570047 238.197101,337.817391 C238.197101,338.064736 238.135266,338.435746 238.011594,338.930435 C237.733332,339.456041 237.455074,339.718841 237.176812,339.718841 C237.084058,339.966185 236.952658,340.259902 236.782609,340.6 C236.61256,340.940098 236.257008,341.403862 235.715942,341.991304 C235.174877,342.578747 234.595172,342.872464 233.976812,342.872464 C233.358451,342.872464 232.786476,342.609664 232.26087,342.084058 C231.735263,341.558451 231.364252,341.032853 231.147826,340.507246 L230.823188,339.718841 C230.699516,339.718841 230.560387,339.649276 230.405797,339.510145 C230.251207,339.371014 230.127537,339.239614 230.034783,339.115942 L229.895652,338.930435 C229.61739,337.879222 229.694684,337.353623 230.127536,337.353623 L230.127536,335.776812 Z\",\n id: \"Shape\"\n}))));\n\nfunction SvgIconUserNavi(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, [\"title\", \"titleId\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"16px\",\n height: \"16px\",\n viewBox: \"0 0 16 16\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title === undefined ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, \"Avatar\") : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _ref2, _ref3);\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgIconUserNavi);\nexport default __webpack_public_path__ + \"static/media/icon-user-navi.68643217.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgIconLanguageWorldW(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, [\"title\", \"titleId\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"16px\",\n height: \"16px\",\n viewBox: \"0 0 16 16\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n xmlSpace: \"preserve\",\n style: {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n strokeLinejoin: \"round\",\n strokeMiterlimit: 1.41421\n },\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M7.976,0.026c-1.443,0 -2.784,0.36 -4.021,1.082c-1.208,0.707 -2.165,1.665 -2.872,2.873c-0.722,1.252 -1.083,2.599 -1.083,4.043c0,1.443 0.361,2.784 1.083,4.021c0.707,1.208 1.664,2.165 2.872,2.872c1.237,0.722 2.578,1.083 4.021,1.083c1.444,0 2.784,-0.361 4.021,-1.083c1.208,-0.707 2.166,-1.664 2.873,-2.872c0.736,-1.237 1.104,-2.578 1.104,-4.021c0,-1.444 -0.36,-2.784 -1.082,-4.021c-0.707,-1.208 -1.665,-2.166 -2.873,-2.873c-1.252,-0.736 -2.599,-1.104 -4.043,-1.104Zm3.005,6.451c1.208,-0.25 2.268,-0.641 3.182,-1.171c0.383,0.855 0.574,1.76 0.574,2.718c0,1.149 -0.272,2.209 -0.817,3.181c-0.973,-0.486 -1.974,-0.832 -3.005,-1.038c0.088,-0.692 0.132,-1.407 0.132,-2.143c0,-0.53 -0.022,-1.046 -0.066,-1.547Zm2.629,-2.165c-0.942,0.398 -1.878,0.677 -2.806,0.84c-0.25,-1.429 -0.648,-2.659 -1.193,-3.69c0.825,0.206 1.584,0.556 2.276,1.049c0.692,0.494 1.267,1.094 1.723,1.801Zm-3.734,3.712c0,0.781 -0.037,1.429 -0.11,1.944c-0.634,-0.073 -1.23,-0.11 -1.79,-0.11c-0.56,0 -1.156,0.037 -1.789,0.11c-0.074,-0.692 -0.111,-1.34 -0.111,-1.944c0,-0.309 0.015,-0.759 0.044,-1.348c0.516,0.074 1.138,0.111 1.867,0.111c0.729,0 1.344,-0.037 1.845,-0.111c0.03,0.589 0.044,1.039 0.044,1.348Zm-1.414,-6.739c0.589,1.178 0.995,2.526 1.215,4.043c-0.736,0.059 -1.303,0.089 -1.701,0.089c-0.398,0 -0.965,-0.03 -1.701,-0.089c0.236,-1.517 0.641,-2.865 1.215,-4.043c0.103,-0.015 0.265,-0.022 0.486,-0.022c0.221,0 0.383,0.007 0.486,0.022Zm-2.121,0.177c-0.56,1.09 -0.957,2.32 -1.193,3.69c-0.972,-0.192 -1.907,-0.472 -2.806,-0.84c0.471,-0.707 1.05,-1.307 1.734,-1.801c0.685,-0.493 1.44,-0.843 2.265,-1.049Zm-4.551,3.844c0.942,0.53 2.003,0.921 3.181,1.171c-0.044,0.501 -0.066,1.017 -0.066,1.547c0,0.736 0.044,1.451 0.133,2.143c-1.032,0.206 -2.033,0.552 -3.005,1.038c-0.531,-0.986 -0.796,-2.047 -0.796,-3.181c0,-0.943 0.184,-1.849 0.553,-2.718Zm0.906,6.894c0.824,-0.324 1.679,-0.56 2.563,-0.707c0.235,1.119 0.596,2.143 1.082,3.071c-0.722,-0.192 -1.395,-0.49 -2.021,-0.895c-0.627,-0.405 -1.168,-0.895 -1.624,-1.469Zm4.794,2.541c-0.486,-0.973 -0.854,-2.114 -1.105,-3.425c0.531,-0.044 1.068,-0.066 1.613,-0.066c0.545,0 1.068,0.022 1.569,0.066c-0.25,1.311 -0.619,2.452 -1.105,3.425c-0.103,0.014 -0.265,0.022 -0.486,0.022c-0.221,0 -0.383,-0.008 -0.486,-0.022Zm2.121,-0.177c0.486,-0.928 0.847,-1.952 1.083,-3.071c0.898,0.147 1.76,0.383 2.585,0.707c-0.471,0.589 -1.02,1.086 -1.646,1.491c-0.626,0.405 -1.3,0.696 -2.022,0.873Z\",\n style: {\n fill: \"#fff\",\n fillRule: \"nonzero\"\n }\n }));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgIconLanguageWorldW);\nexport default __webpack_public_path__ + \"static/media/icon-language-world-w.bb8502bb.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M-2.5-2.5h17v17h-17z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFF\",\n d: \"M12.906 1.219C7.434 4.9 5.47 10.25 5.47 10.25H4.406S2.581 7.472.688 6.531l.53-1.062c2.089.469 3.72 1.593 3.72 1.593s1.78-3.61 7.437-6.906l.531 1.063z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M-4 16h20V-4H-4z\"\n}));\n\nfunction SvgTick(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, [\"title\", \"titleId\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 13,\n height: 11,\n viewBox: \"0 0 13 11\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _ref2);\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgTick);\nexport default __webpack_public_path__ + \"static/media/tick.adf0c598.svg\";\nexport { ForwardRef as ReactComponent };","import { isServer } from '../utils/ssr';\n\nconst domainWithProtocol = isServer() ? '' : window.location.origin;\n\nexport const USER = {\n AS_URL: '/auth/',\n AS_URL_WITH_DOMAIN: `${domainWithProtocol}/auth/`,\n PS_URL: `${domainWithProtocol}/profiles/`,\n LOGGED_USER_RESOURCE: `${domainWithProtocol}/profiles/protected/user`,\n TICKET_PARAM_NAME: 'ticket',\n};\n","export const FEEDBACK_TYPES = {\n OTHER: 'OTHER',\n LOGIN: 'LOGIN',\n LOGIN_ERROR: 'LOGIN_ERROR',\n LOGIN_FB: 'LOGIN_FB',\n LOGOUT: 'LOGOUT',\n SESSION_TIMEOUT: 'SESSION_TIMEOUT',\n PROFILE_SERVICE_UNAVAILABLE: 'PROFILE_SERVICE_UNAVAILABLE',\n MISSING_USER_PROFILE: 'MISSING_USER_PROFILE',\n FORCED_LOGOUT: 'FORCED_LOGOUT',\n PASSWORD_CHANGED: 'PASSWORD_CHANGED',\n MAIL_CHANGED: 'MAIL_CHANGED',\n MAIL_CHANGE_REQUEST: 'MAIL_CHANGE_REQUEST',\n EMAIL_ALREADY_EXISTS: 'EMAIL_ALREADY_EXISTS',\n REGISTERED: 'REGISTERED',\n REGISTRATION_CONFIRMED: 'REGISTRATION_CONFIRMED',\n DELETED: 'DELETED',\n INVALID_TOKEN: 'INVALID_TOKEN',\n PASSWORD_RESET_REQUESTED: 'PASSWORD_RESET_REQUESTED',\n PASSWORD_RESET_SET: 'PASSWORD_RESET_SET',\n PASSWORD_CHANGE_WRONG_PASSWORD: 'PASSWORD_CHANGE_WRONG_PASSWORD',\n PROFILE_UPDATED: 'PROFILE_UPDATED',\n PASSWORD_CHANGE: 'PASSWORD_CHANGE_',\n INVALID_CERTIFICATE: 'INVALID_CERTIFICATE',\n VOCABULARY_TRAINER_UNAVAILABLE: 'VOCABULARY_TRAINER_UNAVAILABLE',\n VOCABULARY_TRAINER_NO_VOCABULARIES: 'VOCABULARY_TRAINER_NO_VOCABULARIES',\n CERTIFICATE_NO_TRANSCRIPTION: 'CERTIFICATE_NO_TRANSCRIPTION',\n MISSING_TRANSCRIPTION: 'MISSING_TRANSCRIPTION',\n USER_ALREADY_EXISTS: 'USER_ALREADY_EXISTS',\n USER_ALREADY_CONFIRMED: 'USER_ALREADY_CONFIRMED',\n};\n\nexport const TYPES_WITH_PROFILE_PAGE_AS_TARGET = [\n FEEDBACK_TYPES.PASSWORD_CHANGE_WRONG_PASSWORD,\n FEEDBACK_TYPES.PASSWORD_CHANGED,\n FEEDBACK_TYPES.EMAIL_ALREADY_EXISTS,\n FEEDBACK_TYPES.PROFILE_UPDATED,\n FEEDBACK_TYPES.CERTIFICATE_NO_TRANSCRIPTION,\n];\n\nexport const TYPES_WITH_HOME_PAGE_AS_TARGET = [\n FEEDBACK_TYPES.OTHER,\n FEEDBACK_TYPES.MAIL_CHANGED,\n FEEDBACK_TYPES.MAIL_CHANGE_REQUEST,\n FEEDBACK_TYPES.REGISTERED,\n FEEDBACK_TYPES.REGISTRATION_CONFIRMED,\n FEEDBACK_TYPES.PASSWORD_RESET_REQUESTED,\n FEEDBACK_TYPES.PASSWORD_RESET_SET,\n FEEDBACK_TYPES.USER_ALREADY_EXISTS,\n];\n\nexport const COMMON_FEEDBACK_TRANSLATION_KEYS = {\n TITLE: 'common.feedback',\n OK_BUTTON: 'common.ok',\n};\n","import { invert } from '../commons';\n\nexport const LANG_CODES = Object.freeze({\n NEUTRAL: '',\n GERMAN: 'de',\n ENGLISH: 'en',\n RUSSIAN: 'ru',\n CHINESE: 'zh',\n PORTUGUESE_BRAZIL: 'pt-br',\n ALBANIAN: 'sq',\n AMHARIC: 'am',\n ARABIC: 'ar',\n BENGALI: 'bn',\n BOSNIAN: 'bs',\n BULGARIAN: 'bg',\n DARI: 'fa-af',\n FRENCH: 'fr',\n GREEK: 'el',\n HAUSA: 'ha',\n HINDI: 'hi',\n INDONESIAN: 'id',\n KISWAHILI: 'sw',\n CROATIAN: 'hr',\n MACEDONIAN: 'mk',\n PASHTO: 'ps',\n PERSIAN: 'fa-ir',\n POLISH: 'pl',\n PORTUGUESE_AFRICA: 'pt-002',\n ROMANIAN: 'ro',\n SERBIAN: 'sr',\n SPANISH: 'es',\n TURKISH: 'tr',\n UKRANIAN: 'uk',\n URDU: 'ur',\n});\n\nconst codeToLang = invert(LANG_CODES);\n\nexport const toLangCode = lang => lang && LANG_CODES[lang.toUpperCase()];\nexport const toLang = code => code && codeToLang[code.toLowerCase()];\n","const config = {\n graphQL: {\n baseUrl: process.env.REACT_APP_GRAPHQL_BASE_URL || '/graphql',\n },\n dw: {\n baseUrl: 'https://www.dw.com',\n mobileUrl: 'https://m.dw.com',\n },\n reCaptcha: {\n siteKey: process.env.REACT_APP_RECAPTCHA_SITEKEY || '6Ld5YwUTAAAAAJnUx8sjEIS5VSJ94AdGcC0BfDXV',\n },\n // static urls used on download page. Will be replaced with webapi based solution (LG-719).\n download: {\n videoBaseUrl: 'https://tvdownloaddw-a.akamaihd.net/downloads/Events/mp4/',\n audioBaseUrl: 'https://radiodownloaddw-a.akamaihd.net/downloads/Events/dwelle/',\n },\n};\n\nexport default config;\n","import { invert } from '../commons';\nimport { isServer } from '../ssr';\nimport globals from '../globals';\nimport config from '../../config';\n\nconst typeToUrlPrefixMap = {\n COURSE: 'c',\n GRAMMAR: 'gr',\n LESSON: 'l',\n PLACEMENT: 'placement',\n FINAL: 'final',\n};\nconst urlPrefixToTypeMap = invert(typeToUrlPrefixMap);\n\nexport const typeToUrlPrefix = type => {\n const typeName = type\n .replace(/([A-Z])/g, '_$1')\n .slice(1)\n .toUpperCase();\n return typeToUrlPrefixMap[type] || typeToUrlPrefixMap[typeName] || type.toLowerCase();\n};\n\nexport const urlPrefixToType = typeId => urlPrefixToTypeMap[typeId] || typeId.toUpperCase();\n\n// If it gets too complex here, then maybe better to avoid negative match\n// and list special characters. But then watch out for very special characters ◕◡◕ 😛\nconst allowedUrlCharactersRegexParts = {\n general: 'a-zA-Z',\n numbers: '0-9',\n whiteSpaces: ' ',\n allowedSpecial: '\\\\-äöüÄÖÜß',\n arabic: '\\\\u0600-\\\\u06FF',\n cyrillic: '\\\\u0400-\\\\u04FF',\n greek_and_coptic: '\\\\u0370-\\\\u03FF',\n chinese: '\\\\u4E00-\\\\u9FFF',\n devanagari: '\\\\u0900-\\\\u097F',\n bengali: '\\\\u0980-\\\\u09FF',\n ethiopian: '\\\\u1200-\\\\u137F',\n};\nconst onlySpecialCharactersRegex = new RegExp(\n `[^${Object.values(allowedUrlCharactersRegexParts).join('')}]`,\n 'g',\n);\n\nexport const normalizeUrlName = name =>\n name.replace(onlySpecialCharactersRegex, '').replace(/\\s/g, '-').toLowerCase();\n\nexport const encodeUrlNamePart = name => encodeURIComponent(normalizeUrlName(name));\n\nexport const urlForNav = ({ id }) => `/s-${id}`;\n\nexport const urlHostNameFromString = ({ url }) => {\n try {\n return new URL(url).hostname;\n } catch (e) {\n console.log(`error parsing url : ${url}\\n`, e);\n return false;\n }\n};\n\nexport const mainContentFullUrl = () => (isServer() ? null : globals.window.location.href);\n\nexport const getVideoDownloadUrl = ({ videoUrl }) => `${config.download.videoBaseUrl}${videoUrl}`;\n\nexport const getAudioDownloadUrl = ({ audioUrl }) => `${config.download.audioBaseUrl}${audioUrl}`;\n\nexport const getDownloadUrl = ({ staticBaseHost, downloadId, filename }) =>\n `${staticBaseHost}/downloads/${downloadId}/${filename.toLowerCase()}`;\n\nexport const getArticleUrl = ({ articleId, name }) =>\n `${config.dw.baseUrl}/de/${normalizeUrlName(name)}/a-${articleId}`;\n\nexport const getDWStructureUrl = ({ id, name, langCode }) =>\n `${config.dw.baseUrl}/${langCode}/${normalizeUrlName(name)}/s-${id}`;\n\nexport const getQueryParamValueFrom = ({ from = globals.window.location.search, value }) =>\n new URLSearchParams(from).get(value);\nexport const objectToQueryParams = obj => new URLSearchParams(obj).toString();\n","import { LANG_CODES } from './langMapper';\n\nconst PLACEMENT_TEST_COURSE_IDS = Object.freeze({\n [LANG_CODES.ENGLISH]: 36519788,\n [LANG_CODES.GERMAN]: 36519653,\n [LANG_CODES.ARABIC]: 36519905,\n [LANG_CODES.PERSIAN]: 45477054,\n [LANG_CODES.PORTUGUESE_BRAZIL]: 45476784,\n [LANG_CODES.RUSSIAN]: 45476947,\n [LANG_CODES.SPANISH]: 47994050,\n [LANG_CODES.FRENCH]: 47994032,\n [LANG_CODES.CHINESE]: 47993840,\n [LANG_CODES.POLISH]: 50080753,\n});\n\nexport const getPlacementTestIdForLangCode = langCode => PLACEMENT_TEST_COURSE_IDS[langCode];\n\nexport const isPlacementTestCourse = courseId => {\n const allIds = Object.values(PLACEMENT_TEST_COURSE_IDS);\n return allIds.includes(courseId);\n};\n","import { USER } from '../../constants/userUrl';\nimport { FEEDBACK_TYPES, TYPES_WITH_PROFILE_PAGE_AS_TARGET } from '../../constants/feedback';\nimport { toLangCode } from '../mappers/langMapper';\nimport { encodeUrlNamePart, typeToUrlPrefix } from './url';\nimport {\n getPlacementTestIdForLangCode,\n isPlacementTestCourse,\n} from '../mappers/placementTestCourseIds';\nimport config from '../../config';\n\nexport const PAGE_OVERVIEW = '/overview';\nexport const PAGE_REGISTRATION = '/user/register';\nexport const PAGE_PROFILE = '/user/profile';\nexport const PAGE_PASSWORD_CHANGE = '/user/password/change';\nexport const PAGE_PASSWORD_RESET = '/user/password/reset';\nexport const PAGE_VOCABULARY_TRAINER = '/user/vocabularyTrainer';\nexport const PAGE_VOCABULARY_TRAINER_START = '/user/vocabularyTrainerStart';\nexport const STATUS_FEEDBACK = '/user/feedback/status';\nexport const PAGE_GRAMMAR = '/grammar';\nconst PAGE_HELP = '/help';\nexport const PAGE_VOCABULARY = '/vocabulary';\nexport const PAGE_LEGAL = '/legal';\nexport const PAGE_PLACEMENT_TEST = '/placementDashboard';\nexport const EXERCISES_RESULT_URL_SUFFIX = 'ler';\nconst COURSE_PREFIX = 'c-';\nconst LESSON_PREFIX = 'l-';\nconst EXERCISE_PREFIX = 'e-';\nconst LESSON_GRAMMAR_URL_SUFFIX = 'gr-';\nexport const LESSON_VOCABULARY_URL_SUFFIX = 'lv';\nconst LESSON_REGIONAL_STUDIES_SUFFIX = 'rs-';\nexport const ALPHABETICAL_ORDER_URL_SUFFIX = 'la';\nexport const LESSON_MANUSCRIPT_SUFFIX = 'lm';\nexport const LESSON_EXTRAS_SUFFIX = 'le';\nexport const LESSON_EXERCISE_RESULT_SUFFIX = 'ler';\nexport const LESSON_SUMMARY_SUFFIX = 'sum';\nconst SUMMARY_URL_SUFFIX = 'sum';\nexport const URL_SEARCH_PARAM_TARGET_PATH = 'target';\n\nexport const getErrorCode = errorResponse => errorResponse && errorResponse.errorCode;\n\nexport const getPrefixedLanguageUrl = (url, langCode) => `/${langCode}${url}`;\nexport const getCasLanguageParam = langCode => {\n if (!langCode) {\n return null;\n }\n return langCode.includes('-') ? langCode.substring(0, langCode.indexOf('-')) : langCode;\n};\n\nexport const getDashboardUrl = langCode => getPrefixedLanguageUrl(PAGE_OVERVIEW, langCode);\n\nexport const getGrammarUrl = langCode => getPrefixedLanguageUrl(PAGE_GRAMMAR, langCode);\n\nexport const getVocabularyPageUrl = langCode => getPrefixedLanguageUrl(PAGE_VOCABULARY, langCode);\n\nexport const getPlacementDashboardUrl = langCode =>\n getPrefixedLanguageUrl(PAGE_PLACEMENT_TEST, langCode);\n\nexport const getLessonExerciseUrl = (languageCode, lessonId, normalizedUrlName, lessonPartId) =>\n `${getLessonUrl(lessonId, languageCode, normalizedUrlName)}/${EXERCISE_PREFIX}${lessonPartId}`;\n\nexport const getLessonGrammarUrl = (languageCode, lessonId, normalizedUrlName, lessonPartId) =>\n `${getLessonUrl(\n lessonId,\n languageCode,\n normalizedUrlName,\n )}/${LESSON_GRAMMAR_URL_SUFFIX}${lessonPartId}`;\n\nexport const getLessonPhonemicChartUrl = (languageCode, lessonId, normalizedUrlName) =>\n `${getLessonUrl(lessonId, languageCode, normalizedUrlName)}/${ALPHABETICAL_ORDER_URL_SUFFIX}`;\n\nexport const getLessonVocabularyUrl = (languageCode, lessonId, normalizedUrlName) =>\n `${getLessonUrl(lessonId, languageCode, normalizedUrlName)}/${LESSON_VOCABULARY_URL_SUFFIX}`;\n\nexport const getLessonRegionalStudiesUrl = (\n languageCode,\n lessonId,\n normalizedUrlName,\n lessonPartId,\n) =>\n `${getLessonUrl(\n lessonId,\n languageCode,\n normalizedUrlName,\n )}/${LESSON_REGIONAL_STUDIES_SUFFIX}${lessonPartId}`;\n\nexport const getRegisterUrl = langCode => getPrefixedLanguageUrl(PAGE_REGISTRATION, langCode);\n\nexport const getUserProfileUrl = langCode => getPrefixedLanguageUrl(PAGE_PROFILE, langCode);\n\nexport const getPasswordChangeUrl = langCode =>\n getPrefixedLanguageUrl(PAGE_PASSWORD_CHANGE, langCode);\n\nexport const getPasswordResetUrl = langCode =>\n getPrefixedLanguageUrl(PAGE_PASSWORD_RESET, langCode);\n\nexport const getCourseUrl = (courseId, langCode, normalizedUrlCourseName) =>\n getPrefixedLanguageUrl(`/${normalizedUrlCourseName}/${COURSE_PREFIX}${courseId}`, langCode);\n\nexport const getLessonUrl = (lessonId, languageCode, normalizedUrlLessonName) =>\n getPrefixedLanguageUrl(`/${normalizedUrlLessonName}/${LESSON_PREFIX}${lessonId}`, languageCode);\n\nexport const getLessonExercisesResultUrl = lessonUrl =>\n `${lessonUrl}/${EXERCISES_RESULT_URL_SUFFIX}`;\n\nexport const getFirstGrammarUrl = (lessonUrl, firstGrammarId) =>\n `${lessonUrl}/gr-${firstGrammarId}`;\n\nexport const getVocabularyUrl = lessonUrl => `${lessonUrl}/${LESSON_VOCABULARY_URL_SUFFIX}`;\n\nexport const getAlphabeticalOrderUrl = lessonUrl => `${lessonUrl}/${ALPHABETICAL_ORDER_URL_SUFFIX}`;\n\nexport const getFirstRegionalStudiesUrl = (lessonUrl, firstRegionalStudiesId) =>\n `${lessonUrl}/${LESSON_REGIONAL_STUDIES_SUFFIX}${firstRegionalStudiesId}`;\n\nexport const getManuscriptUrl = lessonUrl => `${lessonUrl}/${LESSON_MANUSCRIPT_SUFFIX}`;\n\nexport const getExtrasUrl = lessonUrl => `${lessonUrl}/${LESSON_EXTRAS_SUFFIX}`;\n\nexport const getSummaryUrl = lessonUrl => `${lessonUrl}/${SUMMARY_URL_SUFFIX}`;\n\nexport const getPlacementTestResultUrl = ({ langCode, id, name }) =>\n getPrefixedLanguageUrl(`/${name}/placement-${id}`, langCode);\n\nexport const transformUrlContentPrefix = (lessonPath, type) =>\n lessonPath.replace('/l-', `/${type}-`);\n\nexport const createLinkToResultPage = ({ courseId, isFinalTest, lessonPath }) => {\n if (isFinalTest) return transformUrlContentPrefix(lessonPath, 'final');\n\n if (isPlacementTestCourse(courseId)) return transformUrlContentPrefix(lessonPath, 'placement');\n\n return getLessonExercisesResultUrl(lessonPath);\n};\n\nexport const getHelpUrl = langCode => getPrefixedLanguageUrl(PAGE_HELP, langCode);\nexport const getLegalUrl = langCode => getPrefixedLanguageUrl(PAGE_LEGAL, langCode);\n\nexport const getCourseCertificateUrl = paramUrl =>\n getPrefixedLanguageUrl(`/certificate/${paramUrl}`);\n\nexport const getVocabularyTrainerStartPage = langCode =>\n getPrefixedLanguageUrl(PAGE_VOCABULARY_TRAINER_START, langCode);\n\nexport const getVocabularyTrainerPage = langCode =>\n getPrefixedLanguageUrl(PAGE_VOCABULARY_TRAINER, langCode);\n\nexport const getTargetPageUrl = (type, langCode) => {\n return TYPES_WITH_PROFILE_PAGE_AS_TARGET.includes(type)\n ? getPrefixedLanguageUrl(PAGE_PROFILE, langCode)\n : getDashboardUrl(langCode);\n};\n\nexport const getFeedbackUrl = (type, langCode) =>\n getPrefixedLanguageUrl(`${STATUS_FEEDBACK}/${type}`, langCode);\n\nexport const getLoginPage = (origin, langCode, targetPath) => {\n const callbackUrl = origin + getFeedbackUrl(FEEDBACK_TYPES.LOGIN, langCode);\n return getLoginRedirectUrl(callbackUrl, langCode, false, targetPath);\n};\n\nconst getLoginUrlSearchParamsString = (langCode, targetPath) => {\n return targetPath ? `?${URL_SEARCH_PARAM_TARGET_PATH}=${encodeURIComponent(targetPath)}` : '';\n};\n\nexport const getLoginRedirectUrl = (callbackUrl, langCode, withDomain, targetPath) => {\n const urlSearchParams = getLoginUrlSearchParamsString(langCode, targetPath);\n const AUTH_SERVICE_PREFIX = withDomain ? USER.AS_URL_WITH_DOMAIN : USER.AS_URL;\n return `${AUTH_SERVICE_PREFIX}login?service=${encodeURIComponent(\n `${callbackUrl}${urlSearchParams}`,\n )}&locale=${getCasLanguageParam(langCode)}`;\n};\n\nexport const getContentUrl = ({ id, name, language, __typename }) => {\n const langCode = toLangCode(language);\n const langUrlPart = language ? `/${langCode}` : '';\n\n if (id === getPlacementTestIdForLangCode(langCode)) {\n return getPlacementDashboardUrl(langCode);\n }\n\n const nameUrlPart = name ? `/${encodeUrlNamePart(name)}` : '';\n return `${langUrlPart}${nameUrlPart}/${typeToUrlPrefix(__typename)}-${id}`;\n};\n\nexport const getFooterLinkForNamedUrl = ({ namedUrl }) => `${config.dw.mobileUrl}${namedUrl}`;\n\nexport const getDwUrlWithLang = ({ langCode }) => `${config.dw.baseUrl}/${langCode}`;\n\nexport const getDwContactUrl = () => `${config.dw.mobileUrl}/contact`;\n","import { useState, useEffect } from 'react';\nimport globals from '../utils/globals';\nimport { isServer } from '../utils/ssr';\n\nconst CUSTOM_LS_EVENT_NAME = 'local-storage';\n\nconst readValue = key => {\n if (isServer()) {\n return null;\n }\n return JSON.parse(globals.localStorage.getItem(key));\n};\n\nexport const useLocalStorage = key => {\n const [storedValue, setStoredValue] = useState(readValue(key));\n\n const setValue = value => {\n if (!isServer()) {\n globals.localStorage.setItem(key, JSON.stringify(value));\n setStoredValue(value);\n\n // We dispatch a custom event so every useLocalStorage hook are notified\n globals.window.dispatchEvent(new Event(CUSTOM_LS_EVENT_NAME));\n }\n };\n\n useEffect(() => {\n const handleStorageChange = () => {\n setStoredValue(readValue(key));\n };\n\n // this only works for other documents, not the current one\n globals.window.addEventListener('storage', handleStorageChange);\n // this is a custom event, triggered in writeValueToLocalStorage\n globals.window.addEventListener(CUSTOM_LS_EVENT_NAME, handleStorageChange);\n\n return () => {\n globals.window.removeEventListener('storage', handleStorageChange);\n globals.window.removeEventListener(CUSTOM_LS_EVENT_NAME, handleStorageChange);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return [storedValue, setValue];\n};\n","import { LANG_CODES } from '../utils/mappers/langMapper';\n\nconst CHINESE_SIMP_POSTFIX = '_simp';\nconst CHINESE_TRAD_POSTFIX = '_trad';\n\nexport const CHINESE_SIMP_TRANSLATION_KEY = `${LANG_CODES.CHINESE}${CHINESE_SIMP_POSTFIX}`;\nexport const CHINESE_TRAD_TRANSLATION_KEY = `${LANG_CODES.CHINESE}${CHINESE_TRAD_POSTFIX}`;\n\nexport const MENU_LANGUAGES = [\n { translationKey: LANG_CODES.GERMAN, langCode: LANG_CODES.GERMAN },\n { translationKey: LANG_CODES.ENGLISH, langCode: LANG_CODES.ENGLISH },\n { translationKey: LANG_CODES.ARABIC, langCode: LANG_CODES.ARABIC },\n { translationKey: LANG_CODES.RUSSIAN, langCode: LANG_CODES.RUSSIAN },\n { translationKey: LANG_CODES.PERSIAN, langCode: LANG_CODES.PERSIAN },\n { translationKey: LANG_CODES.SPANISH, langCode: LANG_CODES.SPANISH },\n { translationKey: LANG_CODES.PORTUGUESE_BRAZIL, langCode: LANG_CODES.PORTUGUESE_BRAZIL },\n { translationKey: LANG_CODES.POLISH, langCode: LANG_CODES.POLISH },\n { translationKey: LANG_CODES.FRENCH, langCode: LANG_CODES.FRENCH },\n { translationKey: CHINESE_SIMP_TRANSLATION_KEY, langCode: LANG_CODES.CHINESE },\n { translationKey: CHINESE_TRAD_TRANSLATION_KEY, langCode: LANG_CODES.CHINESE },\n { translationKey: LANG_CODES.TURKISH, langCode: LANG_CODES.TURKISH },\n];\n","import { useEffect, useRef } from 'react';\nimport { isServer } from '../utils/ssr';\nimport globals from '../utils/globals';\n\nexport const useTimeout = ({ callback, delay = 100, conditional = true }, triggers = []) => {\n const savedCallback = useRef();\n\n useEffect(() => {\n // eslint-disable-next-line fp/no-mutation\n savedCallback.current = callback;\n }, [callback]);\n\n useEffect(() => {\n const tick = () => savedCallback.current();\n if (isServer() || !conditional) {\n return undefined;\n }\n const handleId = globals.window.setTimeout(tick, delay);\n return () => globals.window.clearTimeout(handleId);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [delay, conditional, ...triggers]);\n};\n","/* eslint-disable fp/no-mutation, react-hooks/exhaustive-deps */\nimport { useEffect } from 'react';\nimport globals from '../utils/globals';\n\nconst loadScript = (url, target) =>\n new Promise((resolve, reject) => {\n const tag = globals.document.createElement('script');\n tag.async = false;\n tag.src = url;\n target.appendChild(tag);\n tag.addEventListener('load', resolve, {\n once: true,\n });\n tag.addEventListener('error', reject, {\n once: true,\n });\n });\n\nexport const useScripts = (scriptUrls = [], cb) => {\n useEffect(async () => {\n if (scriptUrls.length > 0) {\n const querySelectorForAllScriptTags = scriptUrls.map(\n scriptUrl => `script[src=\"${scriptUrl}\"]`,\n );\n const existingScriptTags = globals.document.querySelectorAll(querySelectorForAllScriptTags);\n if (existingScriptTags.length !== scriptUrls.length) {\n Promise.all(scriptUrls.map(url => loadScript(url, globals.document.body))).then(cb);\n } else {\n cb();\n }\n }\n }, [scriptUrls]);\n};\n","/* eslint-disable no-undef, react-hooks/exhaustive-deps */\nimport { useEffect, useState } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport { useLocalStorage } from './useLocalStorage';\nimport { useTimeout } from './useTimeout';\nimport globals from '../utils/globals';\nimport { useScripts } from './useScripts';\nimport { LANG_CODES } from '../utils/mappers/langMapper';\n\n// located in public folder\n// @VisibleForTesting\nexport const tongwenScripts = [\n '/tongwen/tongwen_core.min.js',\n '/tongwen/tongwen_table_s2t.min.js',\n '/tongwen/tongwen_table_t2s.min.js',\n '/tongwen/tongwen_table_ps2t.min.js',\n '/tongwen/tongwen_table_pt2s.min.js',\n];\n\nexport const TRADITIONAL_CHIN_LOCAL_STORAGE_KEY = 'isTraditionalChin';\nexport const URL_GET_PARAM_NAME = 'zhongwen';\nexport const URL_GET_PARAM_SIMPLIFIED = 'simp';\nexport const URL_GET_PARAM_TRADITIONAL = 'trad';\n\nconst TOGGLE_BUTTON_SIMPLE_TEXT_CONTENT = '简';\nconst TOGGLE_BUTTON_TRADITIONAL_TEXT_CONTENT = '繁';\n\nexport const useChineseSimpleTraditionalSwitch = (langCode, toggleButtonId) => {\n const isChineseLangCode = langCode === LANG_CODES.CHINESE;\n const scripts = isChineseLangCode ? tongwenScripts : [];\n const [isScriptsLoaded, setScriptsLoaded] = useState(false);\n const [isTranslatedFirstTime, setTranslatedFirstTime] = useState(false);\n useScripts(scripts, () => setScriptsLoaded(true));\n\n const [isTraditionalChin, setIsTraditionalChin] = useLocalStorage(\n TRADITIONAL_CHIN_LOCAL_STORAGE_KEY,\n );\n const { search } = useLocation();\n\n const setToggleButtonTextContent = content => {\n // eslint-disable-next-line fp/no-mutation\n globals.document.getElementById(toggleButtonId).textContent = content;\n };\n\n // used to consider url request param if available\n useEffect(() => {\n if (search) {\n const cleanedSearch = search.replace('?', '');\n const urlParams = new URLSearchParams(cleanedSearch);\n const chineseVersionRequestParam = urlParams.get(URL_GET_PARAM_NAME);\n if (chineseVersionRequestParam === URL_GET_PARAM_SIMPLIFIED) {\n setIsTraditionalChin(false);\n } else if (chineseVersionRequestParam === URL_GET_PARAM_TRADITIONAL) {\n setIsTraditionalChin(true);\n }\n }\n }, []);\n\n // translate content on first load related to current local storage value\n useTimeout({\n callback: () => {\n if (isChineseLangCode && isScriptsLoaded) {\n isTraditionalChin\n ? TongWen.trans2Trad(globals.document)\n : TongWen.trans2Simp(globals.document);\n setTranslatedFirstTime(true);\n }\n },\n delay: 300,\n });\n\n // if translated initially or later with toggling button - we need to set button content again\n // because the simple one is also translated into the traditional one.\n useTimeout(\n {\n callback: () => {\n if (isTraditionalChin) {\n setToggleButtonTextContent(TOGGLE_BUTTON_SIMPLE_TEXT_CONTENT);\n } else {\n setToggleButtonTextContent(TOGGLE_BUTTON_TRADITIONAL_TEXT_CONTENT);\n }\n },\n delay: 300,\n },\n [isTraditionalChin, isTranslatedFirstTime],\n );\n\n const trans2Simple = () => {\n if (isScriptsLoaded) {\n TongWen.trans2Simp(globals.document);\n setIsTraditionalChin(false);\n }\n };\n\n const trans2Traditional = () => {\n if (isScriptsLoaded) {\n TongWen.trans2Trad(globals.document);\n setIsTraditionalChin(true);\n }\n };\n\n return { isTraditionalChin, trans2Simple, trans2Traditional };\n};\n","import classnames from 'classnames';\nimport styled from 'styled-components';\nimport { ReactComponent as TickImg } from '../../../assets/svg/tick.svg';\nimport { getDashboardUrl } from '../../../utils/url/urlFactory';\nimport { useI18nContext } from '../../../context/I18nContext';\nimport { useLocalStorage } from '../../../hooks/useLocalStorage';\nimport { LANG_CODES } from '../../../utils/mappers/langMapper';\nimport {\n CHINESE_SIMP_TRANSLATION_KEY,\n CHINESE_TRAD_TRANSLATION_KEY,\n} from '../../../constants/menuLanguageCodes';\nimport {\n TRADITIONAL_CHIN_LOCAL_STORAGE_KEY,\n URL_GET_PARAM_NAME,\n URL_GET_PARAM_SIMPLIFIED,\n URL_GET_PARAM_TRADITIONAL,\n} from '../../../hooks/useChineseSimpleTraditionalSwitch';\nimport { colors, resolutions } from '../../../utils/css';\n\nconst isLanguageSelected = ({ languageTranslationKey, currentLanguage, isTraditionalChin }) => {\n const isCurrentLanguageChinese = currentLanguage === LANG_CODES.CHINESE;\n if (isCurrentLanguageChinese) {\n return (\n (isTraditionalChin && languageTranslationKey === CHINESE_TRAD_TRANSLATION_KEY) ||\n (!isTraditionalChin && languageTranslationKey === CHINESE_SIMP_TRANSLATION_KEY)\n );\n }\n return languageTranslationKey === currentLanguage;\n};\n\nconst getDashBoardUrlForLanguage = ({ languageTranslationKey, language }) => {\n const dashboardBaseUrl = getDashboardUrl(language);\n if (languageTranslationKey === CHINESE_SIMP_TRANSLATION_KEY) {\n return `${dashboardBaseUrl}?${URL_GET_PARAM_NAME}=${URL_GET_PARAM_SIMPLIFIED}`;\n }\n if (languageTranslationKey === CHINESE_TRAD_TRANSLATION_KEY) {\n return `${dashboardBaseUrl}?${URL_GET_PARAM_NAME}=${URL_GET_PARAM_TRADITIONAL}`;\n }\n return dashboardBaseUrl;\n};\n\nexport const LanguageSelectionButton = ({\n language,\n translationKey: languageTranslationKey,\n langCode: currentLanguage,\n}) => {\n const { i18n } = useI18nContext();\n const [isTraditionalChin] = useLocalStorage(TRADITIONAL_CHIN_LOCAL_STORAGE_KEY);\n\n return (\n \n \n \n {`${i18n.t(`header.menu.language.${languageTranslationKey}`)} - ${i18n.t(\n `header.menu.language.native.${languageTranslationKey}`,\n )}`}\n \n \n \n \n \n \n \n \n );\n};\n\nexport const StyledLanguageSelectionButton = styled('li')`\n border-bottom: 1px solid ${colors.LG_BLUE_4};\n display: block;\n float: left;\n width: 100%;\n\n &:first-child {\n border-top: 1px solid ${colors.LG_BLUE_4};\n }\n\n span {\n padding: 0 10px;\n }\n\n .lang-nav {\n display: inline-block;\n padding: 20px 25px;\n width: 100%;\n\n @media (min-width: ${resolutions.min.tablet}px) {\n padding: 20px;\n }\n }\n`;\n","export const API_CALL = 'API_CALL';\n\nexport const apiAction = ({\n url = '',\n method = 'GET',\n data = null,\n onSuccess = () => {},\n onFailure = () => {},\n headersOverride = null,\n}) => ({\n type: API_CALL,\n payload: {\n url,\n method,\n data,\n onSuccess,\n onFailure,\n headersOverride,\n },\n});\n","export const JSON_CONTENT_TYPE = 'application/json';\n\nexport const BASIC_JSON_CONTENT_TYPE_HEADER = {\n headers: {\n 'Content-Type': JSON_CONTENT_TYPE,\n },\n};\n","export const buildParamRegex = paramName =>\n new RegExp(`[?&]${encodeURIComponent(paramName)}=([^&]*)`);\n\n// eslint-disable-next-line consistent-return\nexport const getFromUrl = (url, name, regexBuilder) => {\n const paramRegex = regexBuilder(name);\n const matchArray = paramRegex.exec(url);\n if (matchArray) {\n return decodeURIComponent(matchArray[1]);\n }\n};\n\nexport const getSearchParam = (location, name) =>\n getFromUrl(location.search, name, buildParamRegex);\n\nexport const removeSearchParam = (location, name) => {\n const paramRegex = buildParamRegex(name);\n const rawWiththoutParam = location.search ? location.search.replace(paramRegex, '') : '';\n if (rawWiththoutParam && rawWiththoutParam[0] !== '?') {\n return `?${rawWiththoutParam.substring(1)}`;\n }\n return rawWiththoutParam;\n};\n\nexport const containsSearchParam = (location, name) => {\n const paramRegex = buildParamRegex(name);\n return paramRegex.test(location.search);\n};\n\nexport const getPathVariable = (location, name) =>\n getFromUrl(location.pathname, name, buildPathVariableRegex);\n\nconst buildPathVariableRegex = pathVariablePrefix =>\n new RegExp(`${encodeURIComponent(pathVariablePrefix)}-(\\\\d*)`);\n\nexport const isPathInExerciseNavigationWhiteList = pathname => {\n const permittedNavigationPathsRegexp = new RegExp(\n /(\\/e-[0-9]+|\\/ler|\\/placement-[0-9]+|\\/final-[0-9]+)$/,\n 'g',\n );\n return permittedNavigationPathsRegexp.test(pathname);\n};\n","import { getSearchParam, removeSearchParam } from './url/urlUtils';\nimport { USER } from '../constants/userUrl';\n\nexport const getTicketFromUrlParam = location => getSearchParam(location, USER.TICKET_PARAM_NAME);\n\nexport const getTicketDomain = (origin, location) =>\n encodeURIComponent(\n origin + location.pathname + removeSearchParam(location, USER.TICKET_PARAM_NAME),\n );\n\nexport const formatRegistrationUserData = ({ userData, captchaToken, langCode }) => {\n const {\n sex,\n firstName,\n lastName,\n email,\n password,\n country,\n teacher,\n newsletter,\n year,\n } = userData;\n\n return {\n sex,\n firstName,\n lastName,\n email,\n password,\n country,\n 'g-recaptcha-response': captchaToken,\n teacher,\n newsletter,\n recaptcha: captchaToken,\n contactLanguage: langCode,\n ...(year && createDateOfBirth({ year })),\n };\n};\n\nexport const formatUserProfileData = ({ data }) => {\n const { year, ...restProps } = data;\n\n return {\n ...restProps,\n ...(year && createDateOfBirth({ year })),\n };\n};\n\nconst createDateOfBirth = ({ year }) => ({\n dateOfBirth: `${year}-01-01`,\n});\n\nexport const deconstructDateOfBirth = dateOfBirth => {\n if (!dateOfBirth) return {};\n\n const datePartials = dateOfBirth.split('-');\n\n return {\n year: datePartials[0],\n month: datePartials[1],\n day: datePartials[2],\n };\n};\n","import { USER } from '../constants/userUrl';\nimport { BASIC_JSON_CONTENT_TYPE_HEADER } from '../constants/services';\nimport { formatRegistrationUserData, formatUserProfileData } from '../utils/userUtils';\n\nexport const LOGOUT_SUFFIX = 'public/logout';\nconst NOT_LOGGED_USER_SUFFIX = 'public/user';\nconst LOGGED_USER_SUFFIX = 'protected/user';\nexport const PROFILE_SUFFIX = 'profile';\nconst REGISTRATION_SUFFIX = 'registration';\nexport const PS_PREFIX = USER.PS_URL;\nconst NOT_LOGGED_USER_RESOURCE = `${PS_PREFIX}${NOT_LOGGED_USER_SUFFIX}`;\nexport const LOGGED_USER_RESOURCE = `${PS_PREFIX}${LOGGED_USER_SUFFIX}`;\nexport const CONFIRMATION_RESOURCE = `${PS_PREFIX}public/registration/confirmation`;\n\nexport const registerUser = ({ userData, captchaToken, langCode }) => {\n const formattedData = formatRegistrationUserData({ userData, captchaToken, langCode });\n return fetch(`${NOT_LOGGED_USER_RESOURCE}/${REGISTRATION_SUFFIX}`, {\n method: 'POST',\n body: JSON.stringify(formattedData),\n dataType: 'json',\n ...BASIC_JSON_CONTENT_TYPE_HEADER,\n });\n};\n\nexport const deleteUser = () =>\n fetch(LOGGED_USER_RESOURCE, {\n method: 'DELETE',\n }).catch(msg => {\n console.error(`Something went wrong: ${JSON.stringify(msg)}`);\n });\n\nexport const checkUserProfile = () =>\n fetch(`${LOGGED_USER_RESOURCE}/${PROFILE_SUFFIX}`, {\n ...BASIC_JSON_CONTENT_TYPE_HEADER,\n }).catch(response => {\n console.error(`Unable to retrieve user:${JSON.stringify(response)}`);\n });\n\nexport const getUserProfile = () =>\n fetch(`${LOGGED_USER_RESOURCE}/${PROFILE_SUFFIX}`, {\n ...BASIC_JSON_CONTENT_TYPE_HEADER,\n })\n .then(response => response.json())\n .catch(response => {\n console.error(`Unable to retrieve user:${JSON.stringify(response)}`);\n });\n\nexport const updateUserProfile = data => {\n const userData = formatUserProfileData({ data });\n return fetch(`${LOGGED_USER_RESOURCE}/${PROFILE_SUFFIX}`, {\n ...BASIC_JSON_CONTENT_TYPE_HEADER,\n method: 'POST',\n body: JSON.stringify(userData),\n }).then(response => (response.ok ? response.json() : Promise.reject(response)));\n};\n\nexport const validateUserTicket = (ticket, ticketDomain) => {\n const VALIDATE_TICKET_URL = `${PS_PREFIX}public/login?ticket=${ticket}&ticketDomain=${ticketDomain}`;\n\n return fetch(VALIDATE_TICKET_URL);\n};\n\nexport const getUserByToken = token => fetch(`${NOT_LOGGED_USER_RESOURCE}/mail?token=${token}`);\n\nexport const confirmUserRegistration = confirmationId => {\n return fetch(`${CONFIRMATION_RESOURCE}?confirmationId=${confirmationId}`, {\n ...BASIC_JSON_CONTENT_TYPE_HEADER,\n method: 'POST',\n });\n};\n\nexport const userService = {\n deleteUser,\n updateUserProfile,\n};\n","export const sumScore = (contentsWithScore, scoreFieldName) =>\n contentsWithScore.reduce(\n (acc, nextContentWithScore) => acc + nextContentWithScore[scoreFieldName],\n 0,\n );\n","const filterLessonFields = ['userId', 'lastModifiedDate', 'cosLessonVersion'];\nconst filterExerciseFields = ['cosExerciseVersion'];\nconst filterInquiryFields = ['minCorrectScore'];\n\n/**\n * Function which is responsible for removing currently not needed/wanted attributes from\n * server response on all hierarchy levels (lesson->exercise->inquiry). Those attributes\n * are provided from the server due to the current data model.\n *\n * @param payload - the server response with lesson progress data\n * @returns {*&{exerciseProgresses}}\n */\nexport const filterDataFromService = payload => {\n const filteredLessonData = removeObjectAttributes(payload, filterLessonFields);\n const { exerciseProgresses } = filteredLessonData;\n const filteredExerciseProgresses = filterExerciseData(exerciseProgresses);\n\n return { ...filteredLessonData, exerciseProgresses: filteredExerciseProgresses };\n};\n\nconst filterExerciseData = exerciseProgresses => {\n return exerciseProgresses.map(exerciseProgress => {\n const filteredExerciseProgress = removeObjectAttributes(exerciseProgress, filterExerciseFields);\n const { inquiryProgresses } = filteredExerciseProgress;\n const filteredInquiryProgresses = filterInquiryData(inquiryProgresses);\n\n return { ...filteredExerciseProgress, inquiryProgresses: filteredInquiryProgresses };\n });\n};\n\nconst filterInquiryData = inquiryProgresses => {\n return inquiryProgresses.map(inquiryProgress =>\n removeObjectAttributes(inquiryProgress, filterInquiryFields),\n );\n};\n\nconst removeObjectAttributes = (sourceObject, attributesToRemoveArray) => {\n const targetObject = { ...sourceObject };\n attributesToRemoveArray.forEach(field => {\n if (field in targetObject) {\n // eslint-disable-next-line fp/no-delete\n delete targetObject[field];\n }\n });\n return targetObject;\n};\n","import gql from 'graphql-tag';\nimport { sumScore } from './utils';\nimport { filterDataFromService } from './serverDataFilterUtils';\n\n/**\n * the following data structure is generated here as lesson progress state for the global state\n{\n cosLessonId: 37250531,\n cosCourseId: 36519789,\n doneExerciseCount: 1,\n allExerciseCount: 12,\n maxPointsForAllExercises: 35,\n resultPoints: 1,\n exerciseProgresses: [\n {\n cosExerciseId: 42382962,\n resultPoints: 1,\n maxPoints: 2,\n inquiryProgresses: [\n {\n inquiryId: 42382995,\n score: 1,\n maxScore: 1,\n },\n {\n inquiryId: 42382999,\n score: 0,\n maxScore: 1,\n }\n ]\n }],\n}\n */\n\nconst getLearningMetaInfoFragment = (name, type, handicap) => {\n const targetHandicap = handicap ? `(handicap: ${handicap})` : '';\n\n return gql`fragment ${type}${name}${handicap || ''} on ${type} {\n learningMetaInfo${targetHandicap} {\n achievableScore\n exerciseCount\n }\n }\n `;\n};\n\nexport const scoreFragment = {\n name: 'Score',\n fragment({ type, addLearningMetaInfo = true, handicap }) {\n return addLearningMetaInfo\n ? getLearningMetaInfoFragment(this.name, type, handicap)\n : gql`fragment ${type}${this.name}${handicap || ''} on ${type} {\n id\n }\n `;\n },\n};\n\nexport const createInquiryProgressMetaData = ({ inquiryId, score, achievableScore }) => {\n return { inquiryId, score, maxScore: achievableScore };\n};\n\nexport const createLearnProgressData = ({\n langCode,\n lessonId,\n courseId,\n lessonAchievableScore,\n exerciseId,\n allExerciseCount,\n exerciseProgress,\n exerciseAchievableScore,\n}) => {\n return {\n language: langCode,\n cosLessonId: lessonId,\n cosCourseId: courseId,\n maxPointsForAllExercises: lessonAchievableScore,\n cosExerciseId: exerciseId,\n allExerciseCount,\n exerciseProgress,\n exerciseAchievableScore,\n };\n};\n\nexport const initializeLessonLearnProgressWithDataFromServer = ({ lessonProgresses = [] }) => {\n const filteredLessonProgresses = lessonProgresses.map(lessonProgress =>\n filterDataFromService(lessonProgress),\n );\n return { lessons: filteredLessonProgresses };\n};\n\nexport const initializeCourseLearnProgressWithDataFromServer = ({ courseProgresses = [] }) => {\n return { courses: courseProgresses };\n};\n\nexport const updateLessonProgressFromService = ({ lessons, lessonProgress }) => {\n const filteredLessonProgress = filterDataFromService(lessonProgress);\n const existingLesson = findExistingLesson({ lessons, lessonProgress: filteredLessonProgress });\n if (existingLesson) {\n const otherLessons = lessons.filter(\n lesson => lesson.cosLessonId !== filteredLessonProgress.cosLessonId,\n );\n return { lessons: [...otherLessons, filteredLessonProgress] };\n }\n return {\n lessons: [...lessons, filteredLessonProgress],\n };\n};\n\nexport const deleteLessonProgressById = ({ lessons, lessonId }) => {\n const lessonProgressToDelete = findExistingLessonById({ lessons, lessonId });\n if (!lessonProgressToDelete) {\n return { lessons };\n }\n const otherLessons = lessons.filter(lesson => lesson.cosLessonId !== lessonId);\n return { lessons: [...otherLessons] };\n};\n\nexport const deleteLessonProgressesByCourseId = ({ lessons, courseId }) => {\n return { lessons: lessons.filter(lesson => lesson.cosCourseId !== courseId) };\n};\n\nexport const deleteCourseProgressById = ({ courses, courseId }) => {\n const courseProgressToDelete = findExistingCourseById({ courses, courseId });\n if (!courseProgressToDelete) {\n return { courses };\n }\n const otherCourses = courses.filter(course => course.cosCourseId !== courseId);\n return { courses: [...otherCourses] };\n};\n\nexport const addCourseProgressData = ({ courses, courseProgress }) => {\n const existingCourseProgress = findExistingCourseById({\n courses,\n courseId: courseProgress.cosCourseId,\n });\n\n if (existingCourseProgress) {\n const otherCourses = courses.filter(\n course => course.cosCourseId !== courseProgress.cosCourseId,\n );\n return {\n courses: [...otherCourses, courseProgress],\n };\n }\n\n return { courses: [...courses, courseProgress] };\n};\n\nexport const findExistingLessonById = ({ lessons, lessonId }) => {\n return lessons.find(lesson => lesson.cosLessonId === lessonId);\n};\n\nexport const findExistingCourseById = ({ courses, courseId }) => {\n return courses.find(course => course.cosCourseId === courseId);\n};\n\nexport const findExistingLesson = ({ lessons, lessonProgress }) => {\n return lessons.find(lesson => lesson.cosLessonId === lessonProgress.cosLessonId);\n};\n\nexport const findInquiryProgress = ({ lessons, lessonId, exerciseId }) => {\n const lesson = findExistingLessonById({ lessons, lessonId });\n if (!lesson) {\n return [];\n }\n const { exerciseProgresses } = lesson;\n\n const currentExerciseProgress = exerciseProgresses.find(\n exerciseProgress => exerciseProgress.cosExerciseId === exerciseId,\n );\n\n if (!currentExerciseProgress) {\n return [];\n }\n const { inquiryProgresses = [] } = currentExerciseProgress;\n return inquiryProgresses;\n};\n\nexport const generateLessonProgress = ({ lessons, lessonProgress }) => {\n const { exerciseProgress } = lessonProgress;\n if (exerciseProgress.inquiryProgresses.length === 0) {\n return { lessons };\n }\n const existingLesson = findExistingLesson({ lessons, lessonProgress });\n if (existingLesson) {\n const otherLessons = lessons.filter(\n lesson => lesson.cosLessonId !== lessonProgress.cosLessonId,\n );\n return {\n lessons: [...otherLessons, updateExistingLessonMetaData(existingLesson, lessonProgress)],\n };\n }\n return {\n lessons: [...lessons, createNewLessonMetaData(lessonProgress)],\n };\n};\n\nconst updateExerciseMetaDataForExistingLesson = (existingLesson, lessonProgress) => {\n const { exerciseProgresses } = existingLesson;\n const existingExercise = exerciseProgresses.find(\n exercise => exercise.cosExerciseId === lessonProgress.cosExerciseId,\n );\n if (existingExercise) {\n const otherExercises = exerciseProgresses.filter(\n exercise => exercise.cosExerciseId !== lessonProgress.cosExerciseId,\n );\n return [...otherExercises, updateExerciseMetaData(existingExercise, lessonProgress)];\n }\n return [...exerciseProgresses, createNewExerciseMetaData(lessonProgress)];\n};\n\nconst updateExistingLessonMetaData = (existingLesson, lessonProgress) => {\n const newExerciseProgresses = [\n ...updateExerciseMetaDataForExistingLesson(existingLesson, lessonProgress),\n ];\n const newDoneExerciseCount = newExerciseProgresses.length;\n\n const updatedLesson = {\n ...existingLesson,\n doneExerciseCount: newDoneExerciseCount,\n exerciseProgresses: newExerciseProgresses,\n };\n return {\n ...updatedLesson,\n resultPoints: sumScore(updatedLesson.exerciseProgresses, 'resultPoints'),\n };\n};\n\nconst createNewLessonMetaData = lessonProgress => {\n const exerciseProgresses = [createNewExerciseMetaData(lessonProgress)];\n const {\n cosLessonId,\n cosCourseId,\n allExerciseCount,\n maxPointsForAllExercises,\n language,\n } = lessonProgress;\n const newLesson = {\n language,\n cosLessonId,\n cosCourseId,\n allExerciseCount,\n doneExerciseCount: exerciseProgresses.length,\n maxPointsForAllExercises,\n exerciseProgresses,\n };\n\n return { ...newLesson, resultPoints: sumScore(newLesson.exerciseProgresses, 'resultPoints') };\n};\n\nconst createNewExerciseMetaData = lessonProgress => {\n const { cosExerciseId, exerciseProgress, exerciseAchievableScore } = lessonProgress;\n return {\n cosExerciseId,\n maxPoints: exerciseAchievableScore,\n resultPoints: sumScore(exerciseProgress.inquiryProgresses, 'score'),\n inquiryProgresses: exerciseProgress.inquiryProgresses,\n };\n};\n\nconst updateExerciseMetaData = (existingExercise, lessonProgress) => {\n const { cosExerciseId, exerciseProgress, exerciseAchievableScore } = lessonProgress;\n\n const cleanedExistingInquiryProgresses = existingExercise.inquiryProgresses.filter(\n inquiryProgress =>\n !exerciseProgress.inquiryProgresses.some(\n newInquiryProgress => newInquiryProgress.inquiryId === inquiryProgress.inquiryId,\n ),\n );\n\n const inquiryProgresses = [\n ...cleanedExistingInquiryProgresses,\n ...exerciseProgress.inquiryProgresses,\n ];\n\n return {\n cosExerciseId,\n maxPoints: exerciseAchievableScore,\n resultPoints: sumScore(inquiryProgresses, 'score'),\n inquiryProgresses,\n };\n};\n","import { BASIC_JSON_CONTENT_TYPE_HEADER } from '../constants/services';\nimport { USER } from '../constants/userUrl';\n\nconst COURSE_PROGRESS = 'course/progress';\nconst LESSON_PROGRESS = 'lesson/progress';\nconst LESSON_PROGRESSES = 'lesson/progresses';\nconst PROTECTED_URL = `${USER.PS_URL}protected`;\n\nexport const LESSON_TYPE = 'lesson';\nexport const COURSE_TYPE = 'course';\n\nconst handleError = response =>\n console.error(\n `Something went wrong on service call: ${response.url}, status code: ${response.status}`,\n );\n\nexport const getProgress = (id, type) => {\n const contentType = type.toLowerCase();\n return fetch(`${PROTECTED_URL}/${contentType}/progress/${id}`, {\n ...BASIC_JSON_CONTENT_TYPE_HEADER,\n })\n .then(response => (response.ok ? response.text() : Promise.reject(response)))\n .then(text => (text ? JSON.parse(text) : null))\n .catch(handleError);\n};\n\nexport const getProgresses = (ids, type) => {\n const contentType = type.toLowerCase();\n return fetch(`${PROTECTED_URL}/${contentType}/progress`, {\n method: 'POST',\n body: JSON.stringify({ ids }),\n ...BASIC_JSON_CONTENT_TYPE_HEADER,\n })\n .then(response => response.json())\n .catch(handleError);\n};\n\nexport const deleteLearnProgress = (id, type) => {\n const contentType = type.toLowerCase();\n return fetch(`${PROTECTED_URL}/${contentType}/progress/reset/${id}`, {\n method: 'DELETE',\n }).catch(handleError);\n};\n\nexport const saveLessonProgress = lessonProgressData => {\n return fetch(`${PROTECTED_URL}/${LESSON_PROGRESS}/save`, {\n method: 'POST',\n body: JSON.stringify(lessonProgressData),\n dataType: 'json',\n ...BASIC_JSON_CONTENT_TYPE_HEADER,\n }).catch(handleError);\n};\n\nexport const saveLessonProgresses = lessonProgressesData => {\n return fetch(`${PROTECTED_URL}/${LESSON_PROGRESSES}/save`, {\n method: 'POST',\n body: JSON.stringify(lessonProgressesData),\n dataType: 'json',\n ...BASIC_JSON_CONTENT_TYPE_HEADER,\n }).catch(handleError);\n};\n\nexport const getLastEditedLessonsIds = (numberOfLessons, language) => {\n return fetch(`${PROTECTED_URL}/lesson?last=${numberOfLessons}&lang=${language}`, {\n ...BASIC_JSON_CONTENT_TYPE_HEADER,\n })\n .then(response => response.json())\n .catch(handleError);\n};\n\nexport const initCourseProgress = initialCourseProgressData => {\n return fetch(`${PROTECTED_URL}/${COURSE_PROGRESS}/init`, {\n method: 'POST',\n body: JSON.stringify(initialCourseProgressData),\n ...BASIC_JSON_CONTENT_TYPE_HEADER,\n })\n .then(response => response.json())\n .catch(handleError);\n};\n","import {\n addCourseProgressData,\n deleteCourseProgressById,\n deleteLessonProgressById,\n deleteLessonProgressesByCourseId,\n findExistingLesson,\n generateLessonProgress,\n initializeCourseLearnProgressWithDataFromServer,\n initializeLessonLearnProgressWithDataFromServer,\n updateLessonProgressFromService,\n} from './learnProgress';\nimport {\n COURSE_TYPE,\n deleteLearnProgress,\n getProgress,\n getProgresses,\n initCourseProgress,\n LESSON_TYPE,\n saveLessonProgress,\n saveLessonProgresses,\n} from '../../services/learnProgressService';\n\nexport const ADD_LESSON_PROGRESS = 'ADD_LESSON_PROGRESS';\nexport const READ_LESSON_PROGRESS = 'READ_LESSON_PROGRESS';\nexport const READ_LESSON_PROGRESSES = 'READ_LESSON_PROGRESSES';\nexport const DELETE_LESSON_PROGRESS = 'DELETE_LESSON_PROGRESS';\nexport const READ_COURSE_PROGRESS = 'ADD_COURSE_PROGRESS';\nexport const READ_COURSE_PROGRESSES = 'READ_COURSE_PROGRESSES';\nexport const DELETE_COURSE_PROGRESS = 'DELETE_COURSE_PROGRESS';\nexport const DELETE_LESSON_PROGRESSES = 'DELETE_LESSON_PROGRESSES';\nexport const REMOVE_LEARN_PROGRESS = 'REMOVE_LEARN_PROGRESS';\nexport const LESSON_PROGRESS_SYNC_NEEDED = 'LESSON_PROGRESS_SYNC_NEEDED';\n\n// external used actions\nexport const addLessonProgress = lessonProgress => {\n return dispatch => {\n dispatch(addProgress(lessonProgress));\n dispatch(saveProgressOnServer(lessonProgress));\n };\n};\n\nexport const deleteLessonProgress = lessonId => {\n return dispatch => {\n dispatch(deleteLProgress(lessonId));\n dispatch(deleteProgressOnServer(lessonId, LESSON_TYPE));\n };\n};\n\nexport const readLessonProgress = lessonId => {\n return (dispatch, getState) => {\n const { user } = getState();\n if (user.isLoggedIn) {\n getProgress(lessonId, LESSON_TYPE).then(progress => dispatch(readProgress(progress)));\n }\n };\n};\n\nexport const readLessonProgresses = lessonIds => {\n return (dispatch, getState) => {\n const { user } = getState();\n if (user.isLoggedIn) {\n getProgresses(lessonIds, LESSON_TYPE).then(progresses =>\n dispatch(readProgresses(progresses)),\n );\n }\n };\n};\n\nexport const readCourseProgress = courseId => {\n return (dispatch, getState) => {\n const { user } = getState();\n if (user.isLoggedIn) {\n getProgress(courseId, COURSE_TYPE).then(courseProgress => {\n if (courseProgress) {\n dispatch(addCourseProgress(courseProgress));\n }\n });\n }\n };\n};\n\nexport const readCourseProgresses = courseIds => {\n return (dispatch, getState) => {\n const { user } = getState();\n if (user.isLoggedIn) {\n getProgresses(courseIds, COURSE_TYPE).then(courseProgresses => {\n if (courseProgresses) {\n dispatch(readCProgresses(courseProgresses));\n }\n });\n }\n };\n};\n\nexport const initCourse = initialCourseData => {\n return (dispatch, getState) => {\n const { user } = getState();\n if (user.isLoggedIn) {\n initCourseProgress(initialCourseData).then(courseProgress =>\n dispatch(readCourseProgress(courseProgress.cosCourseId)),\n );\n }\n };\n};\n\nexport const deleteCourseProgress = courseId => {\n return dispatch => {\n dispatch(deleteCProgress(+courseId));\n dispatch(deleteProgressOnServer(courseId, COURSE_TYPE));\n dispatch(deleteLessonProgresses(+courseId));\n };\n};\n\nexport const removeProgress = () => ({\n type: REMOVE_LEARN_PROGRESS,\n});\n\nexport const setLessonProgressSyncNeeded = isSyncNeeded => ({\n type: LESSON_PROGRESS_SYNC_NEEDED,\n payload: isSyncNeeded,\n});\n\nexport const syncLessonProgress = () => {\n return (dispatch, getState) => {\n const { learnProgress } = getState();\n const { lessons } = learnProgress;\n return saveLessonProgresses(lessons).then(() => dispatch(setLessonProgressSyncNeeded(false)));\n };\n};\n\n// internal actions\n\nconst addCourseProgress = courseProgress => ({\n type: READ_COURSE_PROGRESS,\n payload: courseProgress,\n});\n\nconst readCProgresses = courseProgresses => ({\n type: READ_COURSE_PROGRESSES,\n payload: courseProgresses,\n});\n\nconst addProgress = lessonProgress => ({\n type: ADD_LESSON_PROGRESS,\n payload: lessonProgress,\n});\n\nconst readProgress = lessonProgress => ({\n type: READ_LESSON_PROGRESS,\n payload: lessonProgress,\n});\n\nconst readProgresses = lessonProgresses => ({\n type: READ_LESSON_PROGRESSES,\n payload: lessonProgresses,\n});\n\nconst deleteLessonProgresses = courseId => ({\n type: DELETE_LESSON_PROGRESSES,\n payload: courseId,\n});\n\nconst deleteLProgress = lessonId => ({\n type: DELETE_LESSON_PROGRESS,\n payload: lessonId,\n});\n\nconst deleteCProgress = courseId => ({\n type: DELETE_COURSE_PROGRESS,\n payload: courseId,\n});\n\n// @VisibleForTesting\nexport const saveProgressOnServer = lessonProgress => {\n return (dispatch, getState) => {\n const {\n user,\n learnProgress: { lessons },\n } = getState();\n if (user.isLoggedIn) {\n const progress = findExistingLesson({ lessons, lessonProgress });\n return progress ? saveLessonProgress(progress) : Promise.resolve('no progress available');\n }\n return Promise.resolve('nothing to do');\n };\n};\n\n// @VisibleForTesting\nexport const deleteProgressOnServer = (contentId, type) => {\n return (dispatch, getState) => {\n const { user } = getState();\n if (user.isLoggedIn) {\n return deleteLearnProgress(contentId, type);\n }\n return Promise.resolve('nothing to do');\n };\n};\n\nconst initialState = { lessons: [], courses: [], isSyncRequired: false };\n\nexport const learnProgressReducer = (state = initialState, action) => {\n switch (action.type) {\n case ADD_LESSON_PROGRESS:\n // eslint-disable-next-line no-case-declarations\n const lessonProgress = generateLessonProgress({\n lessons: state.lessons,\n lessonProgress: action.payload,\n }) || { lessons: [] };\n return {\n ...state,\n ...lessonProgress,\n };\n case READ_LESSON_PROGRESS:\n if (!action.payload) {\n return state;\n }\n return {\n ...state,\n ...updateLessonProgressFromService({\n lessons: state.lessons,\n lessonProgress: action.payload,\n }),\n };\n case READ_LESSON_PROGRESSES:\n return {\n ...state,\n ...initializeLessonLearnProgressWithDataFromServer({\n lessonProgresses: action.payload,\n }),\n };\n case DELETE_LESSON_PROGRESS:\n return {\n ...state,\n ...deleteLessonProgressById({\n lessons: state.lessons,\n lessonId: action.payload,\n }),\n };\n case READ_COURSE_PROGRESS:\n return {\n ...state,\n ...addCourseProgressData({ courses: state.courses, courseProgress: action.payload }),\n };\n case READ_COURSE_PROGRESSES:\n return {\n ...state,\n ...initializeCourseLearnProgressWithDataFromServer({\n courseProgresses: action.payload,\n }),\n };\n case DELETE_COURSE_PROGRESS:\n return {\n ...state,\n ...deleteCourseProgressById({\n courses: state.courses,\n courseId: action.payload,\n }),\n };\n case DELETE_LESSON_PROGRESSES:\n return {\n ...state,\n ...deleteLessonProgressesByCourseId({ lessons: state.lessons, courseId: action.payload }),\n };\n case LESSON_PROGRESS_SYNC_NEEDED:\n return {\n ...state,\n isSyncRequired: action.payload,\n };\n case REMOVE_LEARN_PROGRESS:\n return initialState;\n default:\n return state;\n }\n};\n","import { apiAction } from '../common/apiActions';\nimport {\n LOGGED_USER_RESOURCE,\n LOGOUT_SUFFIX,\n PROFILE_SUFFIX,\n PS_PREFIX,\n} from '../../services/userService';\nimport { BASIC_JSON_CONTENT_TYPE_HEADER } from '../../constants/services';\nimport { removeProgress } from '../progress/learnProgressDuck';\n\nexport const SET_USER = 'SET_USER';\nexport const REMOVE_USER = 'REMOVE_USER';\nexport const API_ERROR = 'API_ERROR';\nconst LOGOUT_REQUEST_CALLED_FLAG = 'LOGOUT_REQUEST_CALLED_FLAG';\nconst SESSION_TIMEOUT = 'SESSION_TIMEOUT';\n\nexport const logInUser = () =>\n apiAction({\n url: `${LOGGED_USER_RESOURCE}/${PROFILE_SUFFIX}`,\n onSuccess: setUser,\n onFailure: setApiError,\n headersOverride: { ...BASIC_JSON_CONTENT_TYPE_HEADER },\n });\n\nexport const logOutUser = () =>\n apiAction({\n url: `${PS_PREFIX}${LOGOUT_SUFFIX}`,\n onSuccess: removeUserData,\n onFailure: setApiError,\n });\n\nexport const deleteUserAccount = () =>\n apiAction({\n url: `${PS_PREFIX}${LOGOUT_SUFFIX}`,\n onSuccess: removeUserData,\n onFailure: setApiError,\n });\n\nexport const removeUserData = () => {\n return dispatch => {\n dispatch(removeUser());\n dispatch(removeProgress());\n };\n};\n\nexport const setUser = data => ({\n type: SET_USER,\n payload: data,\n});\n\nexport const removeUser = () => ({\n type: REMOVE_USER,\n});\n\nexport const setApiError = () => ({\n type: API_ERROR,\n});\n\nexport const setHasLogOutRequestBeenCalled = hasBeenCalled => ({\n type: LOGOUT_REQUEST_CALLED_FLAG,\n payload: hasBeenCalled,\n});\n\nexport const loginTimeout = () => ({\n type: SESSION_TIMEOUT,\n});\n\nconst initialState = {\n userData: null,\n isLoggedIn: false,\n hasLogOutRequestBeenCalled: false,\n apiErrorHasOccurred: false,\n};\n\nexport const userReducer = (state = initialState, action) => {\n switch (action.type) {\n case SET_USER:\n return {\n userData: action.payload,\n isLoggedIn: true,\n apiErrorHasOccurred: false,\n };\n case REMOVE_USER:\n return {\n ...initialState,\n hasLogOutRequestBeenCalled: true,\n };\n case API_ERROR:\n return {\n ...state,\n apiErrorHasOccurred: true,\n };\n case LOGOUT_REQUEST_CALLED_FLAG:\n return {\n ...state,\n hasLogOutRequestBeenCalled: action.payload,\n };\n case SESSION_TIMEOUT:\n return initialState;\n default:\n return state;\n }\n};\n","export const userSelector = state => state.user;\nexport const userDataSelector = state => state.user.userData;\n","import { createContext, useContext } from 'react';\nimport globals from '../utils/globals';\n\nexport const GlobalsContext = createContext(globals);\n\nexport const useGlobalsContext = () => useContext(GlobalsContext);\n","/* eslint-disable jsx-a11y/anchor-is-valid,jsx-a11y/no-static-element-interactions */\nimport { Link } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useParams } from 'react-router';\nimport styled from 'styled-components';\nimport { colors, resolutions, clearfix } from '../../utils/css';\nimport { ReactComponent as IconUserNavi } from '../../assets/svg/icon-user-navi.svg';\nimport { ReactComponent as IconLanguageWorldW } from '../../assets/svg/icon-language-world-w.svg';\nimport { I18nText } from '../I18n/I18nText';\nimport { LanguageSelectionButton } from './LanguageSelectionButton/LanguageSelectionButton';\nimport { MENU_LANGUAGES } from '../../constants/menuLanguageCodes';\nimport {\n getDashboardUrl,\n getGrammarUrl,\n getHelpUrl,\n getLoginPage,\n getUserProfileUrl,\n getVocabularyPageUrl,\n getVocabularyTrainerStartPage,\n} from '../../utils/url/urlFactory';\nimport { logOutUser } from '../../state/user/userDuck';\nimport { userSelector } from '../../state/user/userSelectors';\nimport { useGlobalsContext } from '../../context/GlobalsContext';\n\nexport const NavMenu = ({\n isNavMenuOpen,\n toggleIsNavMenuOpen,\n isLanguageSubMenuOpen,\n setIsLanguageSubMenuOpen,\n className,\n}) => {\n const { origin } = useGlobalsContext().window.location;\n const { langCode } = useParams();\n const { isLoggedIn } = useSelector(userSelector);\n const isLoggedInClass = !isLoggedIn ? 'hidden' : undefined;\n const dispatch = useDispatch();\n\n const handleLogoutClicked = e => {\n e.preventDefault();\n dispatch(logOutUser());\n };\n\n return (\n \n \n
  • \n \n \n \n
  • \n
  • \n \n \n \n
  • \n
  • \n \n \n \n
  • \n
  • \n \n \n \n
  • \n
  • \n \n \n \n \n \n \n \n \n
  • \n
  • \n \n \n \n
  • \n
  • \n \n
  • \n \n \n \n \n \n \n \n \n \n \n
  • \n \n \n \n
  • \n
    \n \n );\n};\n\nexport const StyledNavMenu = styled(NavMenu)`\n background-color: ${colors.LG_BLUE_1};\n border-top: 1px solid ${colors.LG_BLUE_4};\n box-shadow: ${props =>\n props.isNavMenuOpen ? `0 9px 10px ${colors.LG_TRANSPARENT_BLACK_40}` : 'hidden'};\n display: block;\n visibility: ${props => (props.isNavMenuOpen ? 'visible' : 'hidden')};\n overflow: hidden;\n position: relative;\n right: 0;\n transition: all 0.3s linear;\n z-index: 100;\n\n @media (min-width: ${resolutions.min.tablet}px) {\n top: -5px;\n }\n @media (min-width: ${resolutions.min.desktop}px) {\n position: absolute;\n /*! @noflip */\n right: 0;\n top: 85px;\n width: 400px;\n }\n\n .course-nav {\n display: inline-block;\n padding: 20px;\n width: 100%;\n }\n\n #languageMenu {\n padding: 0;\n &:hover {\n background: ${colors.LG_BLACK};\n }\n }\n`;\n\nexport const StyledNavigationList = styled('ul')`\n box-shadow: 1px 10px 20px 0 ${colors.LG_TRANSPARENT_BLACK_25};\n float: left;\n margin: 0;\n padding: 0;\n text-align: left;\n width: 100%;\n\n ${clearfix}\n\n > li {\n border-bottom: 1px solid ${colors.LG_BLUE_4};\n display: block;\n padding: 0;\n width: 100%;\n }\n\n a {\n background-color: ${colors.LG_BLUE_1};\n color: ${colors.LG_WHITE};\n display: block;\n font-size: 18px;\n font-weight: 700;\n line-height: 23px;\n padding: 20px;\n text-decoration: none;\n text-transform: uppercase;\n\n &:hover,\n &:active {\n background-color: ${colors.LG_BLACK};\n }\n\n @media (min-width: ${resolutions.min.tablet}px) {\n font-size: 22px;\n line-height: 43px;\n }\n\n @media (min-width: ${resolutions.min.desktop}px) {\n font-size: 18px;\n line-height: 23px;\n }\n }\n\n #navbar-lang {\n padding: 0;\n\n ul {\n margin-top: 0;\n padding-left: 0;\n }\n }\n\n .collapse.in {\n overflow: hidden;\n display: block;\n }\n`;\n\nexport const StyledNavMenuIcon = styled('span')`\n margin-left: 10px;\n margin-top: -1px;\n opacity: 0.7;\n position: absolute;\n`;\n","export default __webpack_public_path__ + \"static/media/nav-cross-black-md.f5825c8f.svg\";","export default __webpack_public_path__ + \"static/media/nav-cross-black-lg.4c2e3c0d.svg\";","export default __webpack_public_path__ + \"static/media/nav-cross-xs.fec778ad.svg\";","export default __webpack_public_path__ + \"static/media/nav-cross-lg.a759f43e.svg\";","import styled from 'styled-components';\nimport { colors, resolutions } from '../../utils/css';\n\nexport const StyledIconBar = styled('span')`\n margin-top: 4px;\n display: block;\n border-radius: 0;\n background-color: ${colors.LG_WHITE};\n width: 21px;\n height: 3px;\n\n @media (max-width: ${resolutions.max.tablet}px) {\n width: 14px;\n height: 2px;\n background-color: ${colors.LG_BLUE_6};\n }\n\n @media (min-width: ${resolutions.min.tablet}px) and (max-width: ${resolutions.max.tablet}px) {\n margin-top: 5px;\n width: 21px;\n height: 3px;\n background-color: ${colors.LG_BLUE_6};\n }\n`;\n","import styled from 'styled-components';\nimport { colors, resolutions } from '../../utils/css';\nimport navCrossBlackMd from '../../assets/svg/nav-cross-black-md.svg';\nimport navCrossBlackLg from '../../assets/svg/nav-cross-black-lg.svg';\nimport navCrossXs from '../../assets/svg/nav-cross-xs.svg';\nimport navCrossLg from '../../assets/svg/nav-cross-lg.svg';\nimport { StyledIconBar as IconBar } from '../IconBar/IconBar';\n\nexport const BurgerButton = ({\n isNavMenuOpen,\n toggleIsNavMenuOpen,\n setIsLanguageSubMenuOpen,\n className,\n}) => (\n {\n toggleIsNavMenuOpen();\n setIsLanguageSubMenuOpen(false);\n }}\n type=\"button\"\n className={className}\n data-toggle=\"collapse\"\n data-target=\"#nav-user-menu\"\n aria-haspopup=\"true\"\n aria-controls=\"navbar\"\n aria-expanded={isNavMenuOpen}\n >\n {isNavMenuOpen && }\n Toggle navigation\n\n {!isNavMenuOpen && (\n <>\n \n \n \n \n )}\n \n);\n\nconst defaultHoverStyles = `\n &:hover {\n .close-menu {\n background: url(${navCrossXs});\n background-size: cover;\n }\n }\n &:hover {\n ${IconBar} {\n background-color: ${colors.LG_BLACK};\n }\n }\n`;\n\n/*\n CSS parsed by a string helper function to return css string with styling blocks as arguments,\n could not be tested with jest-styled-components.\n It reads the media option correctly (media: (hover:hover)). But it throws an unknown error.\n While using string templates passes with known media option.\n*/\nconst mediaHoverDeviceDetection = `\n @media (hover: hover) and (pointer: fine) {\n ${defaultHoverStyles}\n }\n @media (hover: none) and (pointer: coarse) {\n ${defaultHoverStyles}\n }\n`;\n\nconst closeMenuMobile = `\n height: 12px;\n width: 13px;\n`;\n\nconst closeMenuTablet = `\n height: 21px;\n width: 22px;\n`;\n\nexport const StyledBurgerButton = styled(BurgerButton)`\n z-index: 3000;\n display: block;\n position: fixed;\n background-color: transparent;\n background-image: none;\n padding: 0;\n /*! @noflip */\n right: 20px;\n top: 13px;\n\n border: none;\n border-radius: 0;\n\n -webkit-appearance: button;\n cursor: pointer;\n\n @media (max-width: ${resolutions.max.mobile}px) {\n top: 20px;\n &:hover {\n .close-menu {\n ${closeMenuMobile}\n }\n }\n }\n\n @media (min-width: ${resolutions.min.tablet}px) and (max-width: ${resolutions.max.tablet}px) {\n top: 28px;\n &:hover {\n .close-menu {\n ${closeMenuTablet}\n }\n }\n }\n\n @media (min-width: ${resolutions.min.desktop}px) {\n margin-top: 32px;\n z-index: 1;\n position: absolute;\n top: 0;\n /*! @noflip */\n right: 30px;\n }\n\n ${mediaHoverDeviceDetection}\n\n &:focus {\n outline: 0;\n .close-menu {\n background: url(${navCrossBlackLg});\n background-size: cover;\n }\n }\n\n .close-menu {\n background: url(${navCrossLg});\n display: block;\n height: 21px;\n margin-top: 5px;\n /*! @noflip */\n right: 15px;\n width: 22px;\n\n @media (max-width: ${resolutions.min.desktop}px) {\n background: url(${navCrossXs});\n height: 12px;\n width: 13px;\n }\n\n @media (min-width: ${resolutions.min.tablet}px) and (max-width: ${resolutions.max.tablet}px) {\n background: url(${navCrossBlackMd});\n height: 21px;\n margin-top: 5px;\n width: 22px;\n }\n\n @media (min-width: ${resolutions.min.desktop}px) {\n background: url(${navCrossBlackMd});\n height: 21px;\n margin-top: 0px;\n position: absolute;\n /*! @noflip */\n right: 0px;\n width: 22px;\n }\n }\n\n .screen-reader-only {\n border: none;\n clip: rect(0, 0, 0, 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n }\n`;\n","import { Link } from 'react-router-dom';\nimport styled from 'styled-components';\nimport { colors, resolutions } from '../../../utils/css';\nimport { getDashboardUrl } from '../../../utils/url/urlFactory';\nimport { I18nText } from '../../I18n/I18nText';\n\nexport const OnlyDesktopBrand = ({ langCode, title, className }) => {\n return (\n
    \n \n \n \n
    \n );\n};\n\nconst makeRoomForRtl = '85px';\n\nexport const StyledOnlyDesktopBrand = styled(OnlyDesktopBrand)`\n align-items: center;\n display: flex;\n height: 85px;\n justify-content: flex-start;\n /*! @noflip */\n padding-left: 5px;\n /*! @noflip */\n padding-right: ${makeRoomForRtl};\n\n @media (max-width: ${resolutions.max.mobile}px) {\n display: none;\n }\n`;\n\nexport const StyledLink = styled(Link)`\n color: ${colors.LG_WHITE};\n font-family: Arial;\n font-size: 23px;\n font-weight: 600;\n opacity: 1;\n text-decoration: none;\n text-transform: uppercase;\n padding: 15px;\n\n &:hover,\n &:focus,\n &:active {\n color: ${colors.LG_WHITE};\n text-decoration: none;\n }\n`;\n","import styled from 'styled-components';\nimport { useChineseSimpleTraditionalSwitch } from '../../hooks/useChineseSimpleTraditionalSwitch';\nimport { colors } from '../../utils/css';\n\n// @VisibleForTesting\nexport const toggleButtonId = 'zh-convert';\n\nexport const ChineseVariantSwitch = ({ className, langCode }) => {\n const { isTraditionalChin, trans2Simple, trans2Traditional } = useChineseSimpleTraditionalSwitch(\n langCode,\n toggleButtonId,\n );\n\n const transFunction = isTraditionalChin ? trans2Simple : trans2Traditional;\n\n return \n );\n};\n\nexport const StyledProgressResetButton = styled(ProgressResetButton)`\n background-color: ${colors.LG_GRAY_2};\n border: 1px solid transparent;\n color: ${colors.LG_WHITE};\n font-size: 12px;\n min-height: 31px;\n padding: 3px 10px;\n`;\n\nexport const StyledSmallProgressResetButton = styled(StyledProgressResetButton)`\n min-height: 27px;\n padding: 1px 7px;\n`;\n","export const progressIconColors = {\n GRAY: 'gray',\n WHITE: 'white',\n};\n","import styled from 'styled-components';\nimport classnames from 'classnames';\nimport { colors } from '../../utils/css';\nimport { progressIconColors } from './progressIconColors';\nimport { useTranslation } from '../../hooks/useTranslation';\n\nexport const progressState = Object.freeze({\n EMPTY: 'empty',\n HALF: 'half',\n FULL: 'full',\n});\n\nconst translationKeyPrefix = 'common.progress';\n\nconst getTitleTranslationKey = progress => {\n switch (progress) {\n case progressState.EMPTY:\n return `${translationKeyPrefix}.none`;\n case progressState.HALF:\n return `${translationKeyPrefix}.half`;\n case progressState.FULL:\n return `${translationKeyPrefix}.full`;\n default:\n return `${translationKeyPrefix}.none`;\n }\n};\n\nconst ProgressIcon = ({ className, progress, color = progressIconColors.GRAY }) => {\n const title = useTranslation(getTitleTranslationKey(progress));\n\n return (\n
    \n
    \n
    \n
    \n
    \n );\n};\n\nexport const StyledProgressIcon = styled(ProgressIcon)`\n width: 16px;\n height: 16px;\n margin: 0;\n text-align: right;\n\n div {\n margin: 0;\n }\n\n .background.white {\n border: 2px solid ${colors.LG_WHITE};\n }\n\n .background.gray {\n border: 2px solid ${colors.LG_GRAY_2};\n }\n\n .background {\n height: 100%;\n width: 100%;\n border-radius: 50%;\n box-sizing: border-box;\n\n .icon {\n height: 100%;\n }\n\n .icon.white {\n background: ${colors.LG_WHITE};\n }\n\n .icon.gray {\n background: ${colors.LG_GRAY_2};\n }\n\n .icon.full {\n width: 100%;\n }\n\n .icon.half {\n width: 50%;\n }\n\n .icon.empty {\n width: 0;\n }\n }\n`;\n","import { USER } from '../constants/userUrl';\n\nexport const PS_PREFIX = USER.PS_URL;\nexport const CERTIFICATE_URL = `${PS_PREFIX}protected/certificate/`;\n\nexport const getCertificate = id => {\n return fetch(`${CERTIFICATE_URL}${id}`, {\n headers: {\n 'Content-Type': 'application/pdf',\n },\n }).then(response => (response.ok ? response : response.json().then(err => Promise.reject(err))));\n};\n","import { getCertificate } from '../services/certificateService';\nimport { FEEDBACK_TYPES } from '../constants/feedback';\nimport { feedbackHelper } from './url/feedbackHelpers';\n\nexport const handleCertificateGeneration = async ({ id, langCode, history }) => {\n if (!id) {\n history.push(feedbackHelper.forInvalidCertificate(langCode));\n }\n\n try {\n const response = await getCertificate(id);\n response.blob().then(blob => {\n const headerFilename = response.headers.get('Content-Disposition').split('filename=')[1];\n const filename = headerFilename.replace('?', '–');\n const url = window.URL.createObjectURL(blob);\n const downloadLink = document.createElement('a');\n // eslint-disable-next-line fp/no-mutation\n downloadLink.href = url;\n // eslint-disable-next-line fp/no-mutation\n downloadLink.download = decodeURIComponent(filename);\n downloadLink.click();\n });\n } catch (error) {\n error.errorCode === FEEDBACK_TYPES.MISSING_TRANSCRIPTION\n ? history.push(feedbackHelper.forCertificateMissingTranscription(langCode))\n : history.push(feedbackHelper.forInvalidCertificate(langCode));\n }\n};\n","export default __webpack_public_path__ + \"static/media/icon-course-cert-gray.0fdcab0c.svg\";","import styled from 'styled-components';\nimport { useHistory } from 'react-router-dom';\nimport { useParams } from 'react-router';\nimport { useTranslation } from '../../hooks/useTranslation';\nimport { handleCertificateGeneration } from '../../utils/certificateUtils';\nimport CertificateGray from '../../assets/svg/icon-course-cert-gray.svg';\n\nexport const CertificateIcon = ({ className, id }) => {\n const history = useHistory();\n const { langCode } = useParams();\n const title = useTranslation('common.progress.cert');\n\n const handleOnCertificateClick = async () => {\n if (id) {\n await handleCertificateGeneration({ id, langCode, history });\n }\n };\n\n return (\n
    \n \"progress-icon\n
    \n );\n};\n\nexport const StyledCertificateIcon = styled(CertificateIcon)`\n width: 16px;\n height: 24px;\n cursor: pointer;\n`;\n","export default __webpack_public_path__ + \"static/media/star-white.d32dc96a.svg\";","export default __webpack_public_path__ + \"static/media/star-gray.84ad33dd.svg\";","import styled from 'styled-components';\nimport StarWhite from '../../assets/svg/star-white.svg';\nimport StarGrey from '../../assets/svg/star-gray.svg';\nimport { progressIconColors } from './progressIconColors';\nimport { useTranslation } from '../../hooks/useTranslation';\n\nconst starsMapping = {\n [progressIconColors.GRAY]: StarGrey,\n [progressIconColors.WHITE]: StarWhite,\n};\n\nexport const ProgressIconStar = ({ className, color }) => {\n const title = useTranslation('common.progress.good');\n\n return (\n \"Progress\n );\n};\n\nexport const StyledProgressIconStar = styled(ProgressIconStar)`\n width: 16px;\n height: 16px;\n`;\n","import { progressState, StyledProgressIcon as ProgressIcon } from '../ProgressIcon/ProgressIcon';\nimport { calculatePercentage } from '../../utils/commons';\nimport { StyledCertificateIcon } from '../ProgressIcon/CertificateIcon';\nimport { StyledProgressIconStar } from '../ProgressIcon/ProgressIconStar';\nimport { progressIconColors } from '../ProgressIcon/progressIconColors';\n\nexport const LearnProgressIcon = ({\n learnProgress,\n color = progressIconColors.GRAY,\n finalLessonId,\n}) => {\n const getProgressIcon = () => {\n if (!learnProgress) {\n return ;\n }\n\n const {\n resultPoints,\n maxPointsForAllExercises,\n doneExerciseCount,\n allExerciseCount,\n finalTestPassed,\n } = learnProgress;\n\n if (doneExerciseCount === 0) {\n return ;\n }\n if (finalTestPassed) {\n return ;\n }\n if (doneExerciseCount < allExerciseCount) {\n return ;\n }\n if (doneExerciseCount === allExerciseCount) {\n const resultInPercentage = calculatePercentage(resultPoints, maxPointsForAllExercises);\n if (resultInPercentage >= 80) {\n return ;\n }\n return ;\n }\n\n return ;\n };\n\n return getProgressIcon();\n};\n","import styled from 'styled-components';\nimport { Link } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\nimport { StyledText as Text } from '../../../Text/Text';\nimport { colors } from '../../../../utils/css';\nimport { getContentUrl } from '../../../../utils/url/urlFactory';\nimport { StyledLessonScore as LessonScore } from './LessonScore';\nimport { StyledSmallProgressResetButton as ProgressResetButton } from '../../Progress/ProgressResetButton';\nimport { LearnProgressIcon } from '../../../LearnProgressIcon/LearnProgressIcon';\nimport { findLessonLearnProgressSelector } from '../../../../state/progress/learnProgressSelectors';\n\nexport const LessonItem = ({ lesson, className, onClickReset }) => {\n const lessonId = lesson.id;\n const lessonProgress = useSelector(findLessonLearnProgressSelector(lessonId));\n\n const onHandleResetClick = e => {\n onClickReset(e, lessonId);\n };\n\n return (\n <>\n \n \n {lesson.shortTitle}\n \n
    \n \n
    \n \n {lesson.learningTargetHeadline}\n \n {lessonProgress && (\n <>\n \n \n \n )}\n \n {lesson.grammarDescription}\n \n \n \n );\n};\n\nconst alignProgressData = '5px';\n\nexport const StyledLessonItem = styled(LessonItem)`\n border-top: 1px solid ${colors.LG_GRAY_TRANSPARENT_1};\n color: ${colors.LG_GRAY_8};\n display: grid;\n font-size: 14px;\n grid-template-columns: 1fr auto;\n grid-template-rows: repeat(3, 1fr);\n height: 102px;\n padding: 10px 20px;\n overflow-y: hidden;\n text-decoration: none;\n\n &:hover {\n color: ${colors.LG_GRAY_8};\n text-decoration: none;\n }\n\n .title {\n color: ${colors.LG_GRAY_9};\n font-family: DWTheAntiquaBBold, Georgia-Bold, serif;\n font-size: 17px;\n line-height: 24px;\n margin: 0;\n overflow-x: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .learningTarget,\n .categories {\n font-family: DWTheAntiquaB, Georgia, serif;\n overflow-x: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .categories {\n grid-column: 1 / 2;\n }\n\n .tile-progress {\n display: flex;\n justify-content: flex-end;\n padding: 5px 0 0 0;\n padding-right: ${alignProgressData};\n }\n\n .lessonScore {\n grid-column-start: 2;\n justify-self: flex-end;\n padding-right: ${alignProgressData};\n }\n\n .resetButton {\n grid-column-start: 2;\n grid-row-start: 3;\n justify-self: center;\n }\n`;\n","import styled from 'styled-components';\nimport classnames from 'classnames';\nimport { colors, resolutions } from '../../../../utils/css';\nimport { StyledLessonItem as LessonItem } from '../LessionItem/LessonItem';\n\nexport const LessonList = ({ className, groupedLessons, onClickReset, isOpen = true }) => (\n // eslint-disable-next-line jsx-a11y/role-supports-aria-props\n \n {groupedLessons.map(lesson => (\n
  • \n \n
  • \n ))}\n \n);\n\nexport const StyledLessonList = styled(LessonList)`\n transition: max-height 0.3s linear;\n overflow-y: hidden;\n visibility: visible;\n max-height: ${props => props.groupedLessons.length * 102}px;\n list-style-type: none;\n margin: 0;\n padding: 0;\n\n @media (max-width: ${resolutions.max.tablet}px) {\n background-color: ${colors.LG_GRAY_3};\n\n &:last-child {\n border-bottom: 0;\n }\n\n &.collapsed {\n visibility: hidden;\n max-height: 0;\n }\n }\n`;\n","import { resolutions } from '../../../../utils/css';\nimport { useToggle } from '../../../../hooks/useToggle';\nimport { StyledCourseHeader as CourseHeader } from '../CourseHeader/CourseHeader';\nimport { StyledLessonList as LessonList } from '../LessonList/LessonList';\nimport globals from '../../../../utils/globals';\n\nexport const CourseAccordion = ({ groupNameTranslationKey, groupedLessons, onClickReset }) => {\n const isOnDesktop = globals.window.innerWidth >= resolutions.min.desktop;\n const [isOpen, { toggleOnClick, toggleOnKeyPress }] = useToggle({ initialState: isOnDesktop });\n\n return (\n
    \n \n \n
    \n );\n};\n","import styled from 'styled-components';\nimport { colors, resolutions } from '../../../utils/css';\nimport { CourseAccordion } from './CourseAccordion/CourseAccordion';\n\nexport const CourseList = ({ className, groupedLessons, onClickResetLesson }) => (\n
      \n {Object.keys(groupedLessons).map(key => (\n // group lessons by their group names\n
    • \n \n
    • \n ))}\n
    \n);\n\nexport const StyledCourseList = styled(CourseList)`\n * {\n box-sizing: border-box;\n }\n\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n width: 100%;\n list-style-type: none;\n margin: 0;\n padding: 0;\n\n .course {\n display: inline-block;\n background: ${colors.LG_WHITE};\n\n &:nth-child(odd) {\n .accordion .lesson-list {\n background-color: ${colors.LG_GRAY_3};\n }\n }\n }\n\n @media (max-width: ${resolutions.max.tablet}px) {\n grid-template-columns: 100%;\n }\n`;\n","import { createGlobalStyle } from 'styled-components';\n\nexport const DisableScrollingStyles = createGlobalStyle`\n body {\n overflow: hidden;\n padding-right: 17px;\n }\n`;\n","import ReactDOM from 'react-dom';\nimport { DisableScrollingStyles } from './DisableScrollingStyles';\n\nexport const ModalIntegration = ({ isOpen, children }) => {\n if (!isOpen) return null;\n const componentToCreate = (\n <>\n \n {children}\n \n );\n return ReactDOM.createPortal(componentToCreate, document.body);\n};\n","import styled from 'styled-components';\nimport classnames from 'classnames';\nimport { colors } from '../../utils/css';\nimport { useTranslation } from '../../hooks/useTranslation';\nimport { useRtlContext } from '../../hooks/useRtl';\n\nconst StandardButton = ({ titleKey, className, handleClick }) => {\n const { isRtl } = useRtlContext();\n const label = useTranslation(titleKey);\n\n return (\n \n {label}\n \n );\n};\n\nexport const StyledStandardButton = styled(StandardButton)`\n display: inline-block;\n width: 100%;\n background: ${colors.LG_BLUE_1};\n box-sizing: border-box;\n border: none;\n height: 50px;\n text-decoration: none;\n justify-content: center;\n align-items: center;\n line-height: 33px;\n color: ${colors.LG_WHITE};\n font: 400 17px Helvetica, Arial, sans-serif;\n text-align: center;\n :active,\n :hover,\n :focus {\n transition: all 0.1s linear;\n background-color: ${colors.LG_GRAY_10};\n color: ${colors.LG_WHITE};\n }\n\n .rtl {\n direction: rtl;\n }\n`;\n","import styled from 'styled-components';\nimport { StyledStandardButton as StandardButton } from '../StandardButton/StandardButton';\nimport { colors, resolutions } from '../../utils/css';\nimport { I18nText } from '../I18n/I18nText';\nimport { useRtlContext } from '../../hooks/useRtl';\n\nexport const Modal = ({\n className,\n fadeIn,\n descriptionKey,\n leftButtonKey,\n rightButtonKey,\n onConfirmClicked,\n onCancelClicked,\n}) => {\n const { isRtl } = useRtlContext();\n\n const faded = fadeIn ? 'in' : '';\n const classNameString = `${className} fade ${faded}`;\n return (\n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n );\n};\n\nexport const StyledModal = styled(Modal)`\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 10040;\n\n .modal-background {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: ${colors.LG_BLACK};\n opacity: 0.5;\n font-family: Helvetica, Arial, sans-serif;\n font-weight: 400;\n font-size: 15px;\n }\n .modal-dialogue {\n position: relative;\n background-color: ${colors.LG_WHITE};\n width: 900px;\n margin: 30px auto;\n\n .modal-content {\n position: relative;\n background-color: ${colors.LG_WHITE};\n background-clip: padding-box;\n border-radius: 0;\n outline: 0;\n box-shadow: 0 3px 9px ${colors.LG_TRANSPARENT_BLACK_50};\n border: 1px solid ${colors.LG_TRANSPARENT_BLACK_20};\n\n .modal-body {\n position: relative;\n padding: 15px;\n font-size: 15px;\n\n p {\n margin: 0 0 10px;\n }\n }\n }\n\n .modal-footer {\n padding: 35px 10px;\n text-align: right;\n border-top: 1px solid ${colors.LG_GRAY_4};\n display: flex;\n flex-flow: row;\n justify-content: space-evenly;\n\n button {\n position: relative;\n margin: 0 7px;\n width: 100%;\n }\n }\n }\n\n &.fade {\n opacity: 0;\n -webkit-transition: opacity 0.15s linear;\n -o-transition: opacity 0.15s linear;\n transition: opacity 0.15s linear;\n }\n\n &.fade.in {\n opacity: 1;\n }\n\n &.rtl {\n direction: rtl;\n }\n\n @media (max-width: ${resolutions.max.tablet}px) {\n .modal-dialogue {\n width: 600px;\n .modal-footer {\n flex-flow: column;\n button {\n margin: 15px 0;\n }\n }\n }\n }\n\n @media (max-width: ${resolutions.max.mobile}px) {\n .modal-dialogue {\n width: auto;\n margin: 10px;\n .modal-footer {\n flex-flow: column;\n button {\n margin: 15px 0;\n }\n }\n }\n }\n`;\n\nexport const RightButton = styled(StandardButton)`\n background: ${colors.LG_WHITE};\n color: ${colors.LG_BLUE_1};\n border: 1px solid ${colors.LG_BLUE_1};\n box-sizing: border-box;\n\n :hover {\n border-color: ${colors.LG_BLACK};\n }\n`;\n\nexport const LeftButton = StandardButton;\n","import { StyledModal as Modal } from './Modal';\n\nexport const ResetModal = ({ fadeIn, onConfirmClicked, onCancelClicked }) => {\n const descriptionKey = 'lesson.modal.confirm';\n const leftButtonKey = 'lesson.modal.reset';\n const rightButtonKey = 'lesson.modal.cancel';\n return (\n \n );\n};\n","import styled from 'styled-components';\nimport { useSelector } from 'react-redux';\nimport { StyledProgressResetButton as ProgressResetButton } from './ProgressResetButton';\nimport { LearnProgressIcon } from '../../LearnProgressIcon/LearnProgressIcon';\nimport { findCourseLearnProgressSelector } from '../../../state/progress/learnProgressSelectors';\n\nexport const CourseProgress = ({ className, courseId, finalLessonId, onClickResetCourse }) => {\n const { courseProgress } = useSelector(findCourseLearnProgressSelector(courseId));\n\n return (\n
    \n \n \n
    \n );\n};\n\nexport const StyledCourseProgress = styled(CourseProgress)`\n display: flex;\n justify-content: flex-end;\n align-items: center;\n padding-right: 25px;\n\n > * {\n margin: 14px;\n }\n`;\n","// converts dkLearningLevel value to string learning levels\nexport const learningLevelMapper = {\n 0: '',\n 2: 'A1',\n 4: 'A2',\n 8: 'B1',\n 16: 'B2',\n};\n\nexport const sortByLearningLevel = coursesToSort =>\n // eslint-disable-next-line fp/no-mutating-methods\n [...coursesToSort].sort((a, b) => {\n if (a.dkLearningLevel === 0 && b.dkLearningLevel === 0) return 0;\n return a.dkLearningLevel - b.dkLearningLevel || a.id - b.id;\n });\n","import { useEffect, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { createGlobalStyle } from 'styled-components';\nimport {\n groupBy,\n isFinalTestPredicate,\n removeContentLinksWithEmptyTarget,\n} from '../../utils/commons';\nimport { useFrontendConfig } from '../../hooks/useFrontendConfig';\nimport {\n deleteCourseProgress,\n deleteLessonProgress,\n initCourse,\n readCourseProgress,\n readLessonProgresses,\n} from '../../state/progress/learnProgressDuck';\nimport { isMonolingualCourse } from '../../constants/isLtrContentOnly';\nimport { StyledCourseHeroImage as CoursePageHeroImage } from './CourseHeroImage/CourseHeroImage';\nimport { I18nText } from '../I18n/I18nText';\nimport { StyledCourseList as CourseList } from './CourseList/CourseList';\nimport { ModalIntegration } from '../Modal/ModalIntegration';\nimport { ResetModal } from '../Modal/ResetModal';\nimport { StyledCourseProgress as CourseProgress } from './Progress/CourseProgress';\nimport { learningLevelMapper } from '../../utils/learningLevelUtils';\n\nexport const LTRContentCourseOverviewStyle = createGlobalStyle`\n #courses {\n .title,\n span[aria-label*=\"lesson\"] {\n /* @noflip */\n direction: ltr;\n }\n .content .title {\n /* @noflip */\n text-align: left;\n }\n }\n`;\n\nexport const CourseOverview = ({ data, contentId }) => {\n const isMonoLingualCourse = isMonolingualCourse(contentId);\n\n const {\n name,\n dkLearningLevel,\n contentLinks: lessonContentLinks,\n mainContentImageLink,\n learningMetaInfo: { achievableScore, exerciseCount } = {},\n } = data.content;\n const filteredContentLinks = removeContentLinksWithEmptyTarget(lessonContentLinks);\n const finalLessonId = filteredContentLinks\n .filter(contentLink => isFinalTestPredicate(contentLink))\n .map(contentLink => contentLink.target.id);\n const allLessonIds = filteredContentLinks.map(contentLink => contentLink.target.id);\n const groupedLessons = groupBy('groupName', filteredContentLinks);\n const { imageBasePath } = useFrontendConfig();\n const [isResetModalOpen, setResetModalOpen] = useState(false);\n const [lessonIdToDelete, setLessonIdToDelete] = useState(null);\n\n const dispatch = useDispatch();\n\n useEffect(() => {\n dispatch(\n initCourse({\n allExerciseCount: exerciseCount,\n maxPointsForAllExercises: achievableScore,\n cosCourseId: contentId,\n }),\n );\n dispatch(readLessonProgresses(allLessonIds));\n dispatch(readCourseProgress(contentId));\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n const onClickResetCourse = () => {\n setResetModalOpen(true);\n };\n\n const onClickResetLesson = (e, lessonId) => {\n e.preventDefault();\n setLessonIdToDelete(lessonId);\n setResetModalOpen(true);\n };\n\n const onConfirmResetProgress = () => {\n if (lessonIdToDelete) {\n dispatch(deleteLessonProgress(lessonIdToDelete));\n setLessonIdToDelete(null);\n } else {\n dispatch(deleteCourseProgress(contentId));\n }\n setResetModalOpen(false);\n };\n\n const onCancelResetModal = () => {\n setLessonIdToDelete(null);\n setResetModalOpen(false);\n };\n\n return (\n
    \n {isMonoLingualCourse && }\n
    \n
    \n
    \n \n

    \n \n \n

    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n \n \n \n
    \n );\n};\n","import gql from 'graphql-tag';\nimport { Helmet } from 'react-helmet-async';\nimport { useFrontendConfig } from '../../hooks/useFrontendConfig';\n\nexport const imageOGMetaDataFragment = {\n name: 'ImageOGMetaData',\n fragment({ type }) {\n return gql`fragment ${type}${this.name} on ${type} {\n mainContentImage {\n id\n imageFormats\n }\n }\n `;\n },\n};\n\nexport const hasCorrectImageFormat = imageFormats =>\n imageFormats.find(format => format.includes('MASTER_LANDSCAPE'));\n\nconst createImageSharingData = ({ id, imageFormats, imageBasePath }) => {\n if (hasCorrectImageFormat(imageFormats)) {\n return {\n url: `${imageBasePath}/${id}_401.jpg`,\n width: 700,\n height: 394,\n };\n }\n return undefined;\n};\n\nexport const ImageOGMetaData = ({ image }) => {\n const { imageBasePath } = useFrontendConfig();\n\n if (!image) {\n return null;\n }\n\n const { url, width, height } = createImageSharingData({ ...image, imageBasePath }) || {};\n\n if (!url) {\n return null;\n }\n\n return (\n \n \n \n \n \n \n );\n};\n","import gql from 'graphql-tag';\nimport { useSelector } from 'react-redux';\nimport { toLang } from '../utils/mappers/langMapper';\nimport { PageContainer } from '../components/Page/PageContainer';\nimport { WithGraphQLQueryHandling } from '../components/WithGraphQLQueryHandling/WithGraphQLQueryHandling';\nimport { CourseOverview } from '../components/Course/CourseOverview';\nimport { scoreFragment } from '../state/progress/learnProgress';\nimport { userDataSelector, userSelector } from '../state/user/userSelectors';\nimport { metaDataFragment, PageMetaData } from '../components/Page/PageMetaData';\nimport { PAGE_TYPES } from '../constants/pageTypes';\nimport {\n ImageOGMetaData,\n imageOGMetaDataFragment,\n} from '../components/ImageOGMetaData/ImageOGMetaData';\nimport {\n gtmDataLayerFragment,\n GtmScriptWithDataLayer,\n} from '../components/GoogleTagManager/GtmScriptWithDataLayer';\nimport { CourseDataContext } from '../hooks/useCourseData';\n\nexport const coursePageQuery = ({ addMetaInfo, handicap }) => gql`\n query CoursePage($id: Int!, $lang: Language!) {\n content(id: $id, lang: $lang) {\n ... on Course {\n name\n dkLearningLevel\n mainContentImageLink {\n description\n targetId\n }\n contentLinks(targetTypes: LESSON) {\n id\n additionalInformation\n groupName\n target {\n ... on Lesson {\n id\n language\n shortTitle\n learningTargetHeadline\n grammarDescription\n }\n }\n }\n ...CourseImageOGMetaData\n ...${`CourseScore${handicap || ''}`}\n ...${metaDataFragment.name}\n ${gtmDataLayerFragment.partial()}\n }\n }\n }\n ${scoreFragment.fragment({ type: 'Course', addLearningMetaInfo: addMetaInfo, handicap })}\n ${imageOGMetaDataFragment.fragment({ type: 'Course' })}\n ${metaDataFragment.fragment({ type: 'Course' })}\n`;\n\nexport const CoursePage = ({ contentId, langCode }) => {\n const { isLoggedIn } = useSelector(userSelector);\n const { handicap } = useSelector(userDataSelector) || {};\n\n const coursePageQueryVariables = {\n id: +contentId,\n lang: toLang(langCode),\n };\n\n return (\n \n \n {data => (\n \n \n \n \n \n \n )}\n \n \n );\n};\n","const TABLE_WITH_ATTRIBUTES = '';\nconst OPEN_TABLE_TAG = '';\nconst CLOSE_TABLE_TAG = '
    ';\nconst TABLE_WRAPPER_DIV = '
    ';\nconst DIV_CLOSING = '
    ';\n\nexport const wrapTablesWithDiv = htmlString => {\n const text = removeAttributesFromTables(htmlString);\n const textReplacedOpenings = text.replace(\n new RegExp(TABLE_WITH_ATTRIBUTES, 'g'),\n `${TABLE_WRAPPER_DIV}${OPEN_TABLE_TAG}`,\n );\n const textReplacedClosings = textReplacedOpenings.replace(\n new RegExp(CLOSE_TABLE_TAG, 'g'),\n `${CLOSE_TABLE_TAG}${DIV_CLOSING}`,\n );\n return textReplacedClosings;\n};\n\nconst removeAttributesFromTables = htmlString =>\n htmlString.replace(new RegExp(TABLE_WITH_ATTRIBUTES, 'g'), OPEN_TABLE_TAG);\n","import { Component } from 'react';\n\nexport class WithRenderDelay extends Component {\n state = {};\n\n componentDidMount() {\n const delayTime = this.props.delayTime || 100;\n const timeoutHandle = setTimeout(() => this.props.actionToBeDelayed(), delayTime);\n this.setState((prevState, props) => ({ timeoutHandle }));\n }\n\n componentWillUnmount() {\n clearTimeout(this.state.timeoutHandle);\n }\n\n render() {\n // eslint-disable-next-line no-unused-vars\n const { render, actionToBeDelayed, delayTime, ...restProps } = this.props;\n return render(restProps);\n }\n}\n","import { useRef } from 'react';\nimport styled from 'styled-components';\nimport classnames from 'classnames';\nimport { DwPicture } from '../../DwPicture/DwPicture';\nimport { RichText } from '../../RichText/RichText';\n\nconst KnowledgeModalContainer = ({\n className,\n fadeIn,\n knowledgeType,\n imageId,\n imageName,\n audioFile,\n title,\n shortTitle,\n name,\n text,\n subTitle,\n onClose,\n isRtl,\n}) => {\n const audioRef = useRef();\n const closeModalRef = useRef();\n const closeBackdropRef = useRef();\n const faded = fadeIn ? 'in' : '';\n const initialSound = knowledgeType === 'INITIAL_SOUND';\n\n const playAudio = e => {\n e.preventDefault();\n audioRef.current.play();\n };\n\n const closeModal = () => {\n closeModalRef.current.classList.remove('in');\n closeBackdropRef.current.classList.remove('in');\n if (onClose) {\n onClose();\n }\n };\n\n const closeButton = (\n \n \n \n );\n\n const audioLink = linkTitle => (\n playAudio(e)}\n role=\"button\"\n tabIndex={0}\n >\n

    \n {linkTitle}\n

    \n {/* eslint-disable-next-line jsx-a11y/media-has-caption */}\n \n \n );\n\n return (\n <>\n \n
    \n
    \n {initialSound && (\n
    \n {closeButton}\n

    \n {shortTitle}\n

    \n
    \n )}\n\n {!initialSound && (\n
    \n {closeButton}\n {audioLink(title)}\n {subTitle && (\n
    \n {subTitle}\n
    \n )}\n
    \n )}\n\n {initialSound && (\n
    \n \n {audioLink(name)}\n \n
    \n )}\n {!initialSound && (\n
    \n {imageId && }\n \n
    \n )}\n
    \n
    \n
    \n \n \n );\n};\n\nexport const KnowledgeModal = styled(KnowledgeModalContainer)`\n display: block;\n &.modal {\n pointer-events: none;\n }\n .modal-dialog-glossar {\n pointer-events: all;\n }\n &.modal-backdrop {\n cursor: default;\n }\n div.modal-body {\n div.richText {\n margin: 0;\n p {\n margin: 0 0 10px;\n }\n }\n }\n .audio-example {\n background-image: inherit;\n padding-left: 0px;\n padding-right: 0px;\n margin-right: 0px;\n }\n`;\n","import { useEffect, useRef } from 'react';\nimport ReactDOM from 'react-dom';\nimport { useToggle } from '../../../hooks/useToggle';\nimport { KnowledgeModal } from './KnowledgeModal';\n\nexport const Knowledge = ({ children, knowledge, isRtl }) => {\n const [isOpen, { toggleOnClick, toggleOnKeyPress }] = useToggle();\n const wrapper = useRef(null);\n const vocals = 'A, a;Ä, ä;E, e;I, i;O, o;Ö, ö;U, u;Ü, ü;Eu, eu;Au, au;ie;Ei, ei'.split(';');\n const classMap = {\n consonants: 'anlaut-modal consonants',\n vocals: 'anlaut-modal vocals',\n glossary: 'glossar-modal custom-modal',\n };\n const getClassName = () => {\n if (knowledge.knowledgeType === 'VOCABULARY') {\n return classMap.glossary;\n }\n if (vocals.includes(knowledge.shortTitle)) {\n return classMap.vocals;\n }\n return classMap.consonants;\n };\n\n const KnowledgeModalContainer = () => {\n return (\n <>\n {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}\n handleClick(e)}\n onKeyPress={e => handleKeyPress(e)}\n >\n {children}\n {' '}\n {isOpen && (\n {\n toggleOnClick();\n }}\n isRtl={isRtl}\n />\n )}\n \n );\n };\n\n useEffect(() => {\n ReactDOM.render(, wrapper.current);\n }, [isOpen]);\n\n const handleClick = e => {\n e.preventDefault();\n toggleOnClick();\n };\n\n const handleKeyPress = e => {\n e.preventDefault();\n toggleOnKeyPress(e);\n };\n\n return ;\n};\n","import { Knowledge } from '../../components/Modal/KnowledgeModal/Knowledge';\nimport { replaceWithComponent } from './replaceCommons';\n\nexport const placeholderToKnowledgeComponent = (matchedElement, { knowledges, isRtl }) => {\n return (\n element.id === parseInt(matchedElement.dataset.id, 10))}\n isRtl={isRtl}\n >\n {matchedElement.textContent}\n \n );\n};\n\nexport const replacePlaceholderMarkupWithKnowledges = param => {\n replaceWithComponent({\n selector: '.placeholder.editable',\n node: document,\n componentFn: placeholderToKnowledgeComponent,\n param,\n });\n};\n","import gql from 'graphql-tag';\nimport { useParams } from 'react-router';\nimport { wrapTablesWithDiv } from '../../../utils/replacers/htmlReplacer';\nimport { replacePlaceholderImagesWithResponsivePictures } from '../../../utils/replacers/imageReplacer';\nimport { WithRenderDelay } from '../../WithRenderDelay/WithRenderDelay';\nimport { RichText } from '../../RichText/RichText';\nimport { toLang } from '../../../utils/mappers/langMapper';\nimport { WithGraphQLQueryHandling } from '../../WithGraphQLQueryHandling/WithGraphQLQueryHandling';\nimport { replacePlaceholderMarkupWithKnowledges } from '../../../utils/replacers/knowledgeReplacer';\nimport { ContentHeadline } from '../../ContentContainer/ContentHeadline/ContentHeadline';\nimport { useRtlContext } from '../../../hooks/useRtl';\nimport { PageMetaData } from '../../Page/PageMetaData';\nimport { gtmDataLayerFragment } from '../../GoogleTagManager';\nimport { GtmScriptWithDataLayer } from '../../GoogleTagManager/GtmScriptWithDataLayer';\n\nexport const knowledgesFragment = {\n name: 'Knowledges',\n fragment({ type }) {\n return gql`fragment ${type}${this.name} on ${type} {\n knowledges {\n id\n text\n knowledgeType\n shortTitle\n subTitle\n name\n mainContentImage {\n id\n name\n }\n audios {\n mp3Src\n }\n }\n }\n `;\n },\n};\nexport const lessonKnowledgeQuery = gql`\n query LessonKnowledge($knowledgeId: Int!, $lessonLang: Language!) {\n content(id: $knowledgeId, lang: $lessonLang) {\n ... on Knowledge {\n name\n text\n }\n ...KnowledgeKnowledges\n ${gtmDataLayerFragment.partial()}\n }\n }\n ${knowledgesFragment.fragment({ type: 'Knowledge' })}\n`;\n\nexport const LessonKnowledge = ({ pageType, lessonName, lessonKeywordStrings }) => {\n const { langCode, contentId } = useParams();\n const { isRtl } = useRtlContext();\n const lessonKnowledgeQueryVariables = {\n knowledgeId: +contentId,\n lessonLang: toLang(langCode),\n };\n\n return (\n \n {data => {\n const { content } = data;\n const { name, text, knowledges } = content;\n const knowledgeContent = wrapTablesWithDiv(text);\n\n return (\n <>\n \n \n \n

    {name}

    \n
    \n
    \n
    \n {\n replacePlaceholderImagesWithResponsivePictures();\n replacePlaceholderMarkupWithKnowledges({ knowledges, isRtl });\n }}\n delayTime={10}\n render={() => }\n />\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n );\n }}\n \n );\n};\n","import { useTimeout } from '../../../hooks/useTimeout';\nimport { replacePlaceholderMarkupWithKnowledges } from '../../../utils/replacers/knowledgeReplacer';\nimport { useRtlContext } from '../../../hooks/useRtl';\n\nexport const useKnowledgePlaceholderReplacementEffect = ({\n trigger,\n knowledges,\n ignore = false,\n}) => {\n const { isRtl } = useRtlContext();\n useTimeout(\n {\n callback: () => {\n if (!ignore) {\n replacePlaceholderMarkupWithKnowledges({ knowledges, isRtl });\n }\n },\n delay: 10,\n },\n [trigger],\n );\n};\n","import { wrapTablesWithDiv } from '../../utils/replacers/htmlReplacer';\nimport { useKnowledgePlaceholderReplacementEffect } from '../Modal/KnowledgeModal/useKnowledgePlaceholderReplacementEffect';\nimport { WithRenderDelay } from '../WithRenderDelay/WithRenderDelay';\nimport { replacePlaceholderImagesWithResponsivePictures } from '../../utils/replacers/imageReplacer';\nimport { RichText } from '../RichText/RichText';\nimport { ContentHeadline } from '../ContentContainer/ContentHeadline/ContentHeadline';\n\nexport const GrammarItem = ({ data }) => {\n const { name, text, knowledges } = data.content;\n const markup = wrapTablesWithDiv(text);\n\n useKnowledgePlaceholderReplacementEffect({ knowledges });\n\n return (\n
    \n \n

    {name}

    \n
    \n
    \n
    \n }\n />\n
    \n
    \n
    \n );\n};\n","import gql from 'graphql-tag';\nimport { toLang } from '../utils/mappers/langMapper';\nimport { PageContainer } from '../components/Page/PageContainer';\nimport { WithGraphQLQueryHandling } from '../components/WithGraphQLQueryHandling/WithGraphQLQueryHandling';\nimport { knowledgesFragment } from '../components/Lesson/LessonKnowledge/LessonKnowledge';\nimport { GrammarItem } from '../components/GrammarItem/GrammarItem';\nimport { PageMetaData } from '../components/Page/PageMetaData';\nimport { PAGE_TYPES } from '../constants/pageTypes';\nimport {\n gtmDataLayerFragment,\n GtmScriptWithDataLayer,\n} from '../components/GoogleTagManager/GtmScriptWithDataLayer';\n\nexport const grammarPageQuery = gql`\n query GrammarPage($id: Int!, $lang: Language!) {\n content(id: $id, lang: $lang) {\n ... on Knowledge {\n name\n text\n }\n ...KnowledgeKnowledges\n ${gtmDataLayerFragment.partial()}\n }\n }\n ${knowledgesFragment.fragment({ type: 'Knowledge' })}\n`;\n\nexport const GrammarPage = ({ contentId, langCode }) => {\n const grammarPageQueryVariables = {\n id: +contentId,\n lang: toLang(langCode),\n };\n\n return (\n \n \n {data => (\n <>\n \n \n \n \n )}\n \n \n );\n};\n","export default __webpack_public_path__ + \"static/media/course_landing-1200x675.f68dc5b5.jpg\";","export default __webpack_public_path__ + \"static/media/course_landing-992x558.4309e861.jpg\";","export default __webpack_public_path__ + \"static/media/course_landing-768x432.d54bc099.jpg\";","export default __webpack_public_path__ + \"static/media/course_landing-480x270.5a82869e.jpg\";","import styled from 'styled-components';\nimport { colors, resolutions } from '../../utils/css';\nimport { StyledHeroTemplate } from '../HeroTemplate/HeroTemplate';\nimport landingImgFull from '../../assets/images/landing/course_landing-1200x675.jpg';\nimport landingImgTabletLandscape from '../../assets/images/landing/course_landing-992x558.jpg';\nimport landingImgTablet from '../../assets/images/landing/course_landing-768x432.jpg';\nimport landingImgMobile from '../../assets/images/landing/course_landing-480x270.jpg';\n\nexport const StyledMainHeroImage = styled(StyledHeroTemplate)`\n height: 400px;\n background-size: 100%;\n text-align: center;\n justify-content: center;\n background: url(${landingImgFull}) center/cover no-repeat;\n\n .content {\n position: static;\n display: flex;\n flex-flow: column;\n\n .title {\n color: ${colors.LG_ORANGE_DARK};\n font-family: DWTheAntiquaB, Georgia, serif;\n font-size: 54px;\n font-weight: 400;\n height: 60px;\n line-height: 50px;\n margin: 0 0 30px 0;\n opacity: 1;\n width: 100%;\n }\n\n .description {\n font: 400 23px/27.6px DWTheAntiquaB, Georgia, serif;\n margin: 0 0 10px;\n font-size: 23px;\n color: ${colors.LG_ORANGE_DARK};\n width: 100%;\n }\n }\n\n @media (max-width: ${resolutions.max.mobile}px) {\n .content {\n .title {\n font-size: 28px;\n margin-bottom: -20px;\n }\n\n .description {\n font-size: 16px;\n }\n }\n }\n\n @media (min-width: ${resolutions.min.mobile}px) {\n background: url(${landingImgMobile}) center/cover no-repeat;\n }\n\n @media (min-width: ${resolutions.min.tablet}px) {\n background: url(${landingImgTablet}) center/cover no-repeat;\n .title {\n margin-bottom: 0;\n }\n }\n\n @media (min-width: ${resolutions.min.tabletLandscape}px) {\n background: url(${landingImgTabletLandscape}) center/cover no-repeat;\n }\n\n @media (min-width: ${resolutions.min.full}px) {\n background: url(${landingImgFull}) center/cover no-repeat;\n }\n`;\n","import styled from 'styled-components';\nimport gql from 'graphql-tag';\nimport { Link } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\nimport { colors, resolutions } from '../../../../utils/css';\nimport { I18nText } from '../../../I18n/I18nText';\nimport { learningLevelMapper } from '../../../../utils/learningLevelUtils';\nimport { getContentUrl } from '../../../../utils/url/urlFactory';\nimport { LearnProgressIcon } from '../../../LearnProgressIcon/LearnProgressIcon';\nimport { findCourseLearnProgressSelector } from '../../../../state/progress/learnProgressSelectors';\nimport { userSelector } from '../../../../state/user/userSelectors';\nimport { progressIconColors } from '../../../ProgressIcon/progressIconColors';\n\nexport const tileFragment = gql`\n fragment Tile on Course {\n id\n name\n language\n subTitle\n dkLearningLevel\n }\n`;\n\nexport const Tile = ({ className, data }) => {\n const { dkLearningLevel, name, subTitle, id } = data;\n const { courseProgress } = useSelector(findCourseLearnProgressSelector(id));\n const { isLoggedIn } = useSelector(userSelector);\n\n return (\n \n {isLoggedIn && (\n
    \n \n
    \n )}\n

    {learningLevelMapper[dkLearningLevel]}

    \n \n \n
    \n );\n};\n\nconst LinkWrapper = ({ children, linkData, className }) => {\n return linkData.href ? (\n \n {children}\n \n ) : (\n \n {children}\n \n );\n};\n\nexport const StyledTile = styled(Tile)`\n --absElemOffset: 84px;\n padding: var(--absElemOffset) 20px 20px 20px;\n display: flex;\n flex-direction: column;\n width: 300px;\n height: 250px;\n box-sizing: border-box;\n position: relative;\n border-color: ${colors.LG_WHITE};\n border-style: solid;\n border-width: 1px 1px 0 0;\n background-color: ${({ backgroundColor }) => backgroundColor};\n color: ${colors.LG_WHITE};\n\n &:nth-child(4n) {\n border-right-width: 0;\n }\n\n &.tile-container {\n text-decoration: none;\n :hover,\n :active,\n :focus {\n color: ${colors.LG_TRANSPARENT_WHITE_50};\n }\n }\n\n .tile-learningLevel {\n font: 400 70px / var(--absElemOffset) Helvetica, Arial, sans-serif;\n height: var(--absElemOffset);\n text-align: start;\n margin: 0;\n padding: 0;\n position: absolute;\n top: 0;\n }\n\n .tile-name {\n font: 400 23px/25px DWTheAntiquaBBold, Georgia, serif;\n margin: 0 0 7px;\n width: 100%;\n }\n\n .tile-subTitle {\n font: 400 16px/25px DWTheAntiquaB, Georgia, serif;\n max-height: 60%;\n opacity: 0.9;\n max-width: 95%;\n }\n\n .tile-progress {\n position: absolute;\n top: 0;\n padding-top: 20px;\n width: calc(100% - 40px);\n height: var(--absElemOffset);\n display: flex;\n justify-content: flex-end;\n }\n\n @media (max-width: ${resolutions.max.tablet}px) {\n --absElemOffset: 64px;\n height: 180px;\n width: 100%;\n border-width: 1px 1px 0 0;\n\n &:nth-child(2n) {\n border-right-width: 0;\n }\n\n .tile-learningLevel {\n font: 400 54px/64px Helvetica, Arial, sans-serif;\n height: var(--absElemOffset);\n }\n\n .tile-name {\n font-size: 22px;\n }\n\n .tile-subTitle {\n font-size: 15px;\n }\n\n .tile-progress {\n height: var(--absElemOffset);\n padding-top: 15px;\n }\n }\n\n @media (max-width: ${resolutions.max.mobile}px) {\n height: 90px;\n padding: 10px;\n border-width: 1px 0 0 0;\n justify-content: center;\n\n .tile-learningLevel {\n line-height: 90px;\n font-size: 36px;\n width: 58px;\n height: 90px;\n margin: 0 0 0 6px;\n }\n\n .tile-name {\n position: relative;\n font-size: 17px;\n line-height: 19px;\n font-weight: 400;\n margin: 0 25px 3px 64px;\n width: calc(100% - 89px);\n }\n\n .tile-subTitle {\n font-size: 14px;\n font-weight: 400;\n line-height: 19px;\n flex-direction: row;\n margin: 0 25px 0 64px;\n width: calc(100% - 89px);\n }\n\n .tile-progress {\n width: calc(100% - 20px);\n }\n }\n`;\n","import styled from 'styled-components';\nimport { colors, resolutions } from '../../../../utils/css';\nimport { useRtlContext } from '../../../../hooks/useRtl';\n\nconst BlankTile = ({ className }) => {\n const { isRtl } = useRtlContext();\n return
    ;\n};\n\nexport const StyledBlankTile = styled(BlankTile)`\n border-top: 1px solid ${colors.LG_WHITE};\n border-right: 1px solid ${colors.LG_WHITE};\n background: ${colors.DW_LIGHT_BLUE};\n text-decoration: none;\n\n @media (max-width: ${resolutions.max.tablet}px) {\n height: 180px;\n width: 100%;\n\n &.rtl {\n border-right-width: 0;\n }\n }\n\n @media (max-width: ${resolutions.max.mobile}px) {\n display: none;\n }\n`;\n","import styled from 'styled-components';\nimport { StyledTile as Tile } from './Tile';\n\nexport const MoreCoursesTile = ({ className, backgroundColor }) => (\n \n);\n\nexport const StyledMoreCoursesTile = styled(MoreCoursesTile)`\n .tile-progress {\n display: none;\n }\n`;\n","import { colors } from '../utils/css';\n\nexport const tileColors = [\n `${colors.LG_ORANGE}`,\n `${colors.LG_ORANGE_DARK}`,\n `${colors.LG_PINK}`,\n `${colors.LG_RED}`,\n `${colors.LG_GREEN_LIGHT}`,\n `${colors.LG_GREEN}`,\n `${colors.DW_LIGHT_BLUE}`,\n `${colors.LG_BLUE_5}`,\n];\n","export const scrollIntoViewCenter = htmlElement => {\n htmlElement.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'nearest',\n });\n};\n\n// Creates a string that can be used for dynamic id and key attributes\nexport const uniqueId = () => `id-${Math.random().toString(36).substr(2, 16)}`;\n","import { Fragment } from 'react';\nimport styled from 'styled-components';\nimport { colors, resolutions } from '../../../utils/css';\nimport { StyledTile as Tile } from './Tile/Tile';\nimport { StyledBlankTile as BlankTile } from './Tile/BlankTile';\nimport { StyledMoreCoursesTile as MoreCoursesTile } from './Tile/MoreCoursesTile';\nimport { tileColors } from '../../../constants/tileColors';\nimport { uniqueId } from '../../../utils/htmlUtils';\n\nexport const Tiles = ({ className, data }) => {\n return (\n \n );\n};\n\nexport const StyledTiles = styled(Tiles)`\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n width: 100%;\n min-height: 500px;\n border-bottom: 1px solid ${colors.LG_WHITE};\n\n @media (min-width: ${resolutions.min.desktop}px) {\n width: 1200px;\n }\n\n @media (max-width: ${resolutions.max.tablet}px) {\n grid-template-columns: repeat(2, 1fr);\n }\n\n @media (max-width: ${resolutions.max.mobile}px) {\n grid-template-columns: 1fr;\n width: 100%;\n }\n`;\n","import { useEffect } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { StyledMainHeroImage } from '../MainHeroImage/MainHeroImage';\nimport { StyledTiles } from './Tiles/Tiles';\nimport { I18nText } from '../I18n/I18nText';\nimport { readCourseProgresses } from '../../state/progress/learnProgressDuck';\n\nexport const Dashboard = ({ data }) => {\n const dispatch = useDispatch();\n\n useEffect(() => {\n const courseIds = data.map(course => course.id);\n dispatch(readCourseProgresses(courseIds));\n }, [data, dispatch]);\n\n return (\n
    \n \n \n \n \n \n
    \n );\n};\n","import gql from 'graphql-tag';\nimport { useParams } from 'react-router';\nimport { Dashboard } from '../components/Dashboard/Dashboard';\nimport { tileFragment } from '../components/Dashboard/Tiles/Tile/Tile';\nimport { sortByLearningLevel } from '../utils/learningLevelUtils';\nimport { toLang } from '../utils/mappers/langMapper';\nimport { PageContainer } from '../components/Page/PageContainer';\nimport { WithGraphQLQueryHandling } from '../components/WithGraphQLQueryHandling/WithGraphQLQueryHandling';\nimport { PageMetaData } from '../components/Page/PageMetaData';\nimport { GTM_NO_CONTENT_PAGE_IDS, PAGE_TYPES } from '../constants/pageTypes';\nimport {\n gtmDataLayerFragment,\n GtmScriptWithDataLayer,\n} from '../components/GoogleTagManager/GtmScriptWithDataLayer';\n\nexport const dashboardPageQuery = gql`\n query DashboardPage($type: ModelType!, $courseLang: Language!, $amount: Int!) {\n # Get courses in the selected language till A2 level\n contentsByLang: contentsByType(\n type: $type\n lang: $courseLang\n amount: $amount\n filters: { field: \"dkLearningLevel\", value: [\"0\", \"2\", \"4\"] }\n ) {\n ...Tile\n ... on Course {\n ${gtmDataLayerFragment.partial()}\n }\n }\n # Get B1 courses in German\n contentsInGerman: contentsByType(\n type: $type\n lang: GERMAN\n amount: $amount\n filters: { field: \"dkLearningLevel\", value: [\"8\", \"16\"] }\n ) {\n ...Tile\n }\n }\n ${tileFragment}\n`;\n\nexport const DashboardPage = () => {\n const { langCode } = useParams();\n\n const dashboardPageQueryVariables = {\n type: 'COURSE',\n courseLang: toLang(langCode),\n amount: 10,\n };\n\n return (\n \n \n {data => (\n <>\n \n \n \n \n )}\n \n \n );\n};\n","import styled from 'styled-components';\nimport { I18nText } from '../I18n/I18nText';\nimport { colors, resolutions } from '../../utils/css';\n\nexport const GrammarOverviewHeader = ({ className }) => {\n return (\n
    \n
    \n \n \n
    \n
    \n );\n};\n\nexport const StyledGrammarOverviewHeader = styled(GrammarOverviewHeader)`\n display: block;\n width: 100%;\n background-color: ${colors.LG_GRAY_3};\n color: ${colors.LG_GRAY_9};\n\n .grammarOverviewHeader-wrapper {\n height: 320px;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n\n h1 {\n padding: 125px 20px 0 20px;\n margin: 20px 0 10px;\n }\n\n p {\n padding: 0 20px 10px;\n margin: 0 0 10px;\n }\n }\n\n @media (min-width: ${resolutions.min.desktop}px) {\n margin-bottom: 20px;\n }\n\n @media (max-width: ${resolutions.max.mobile}px) {\n .grammarOverviewHeader-wrapper {\n height: 240px;\n\n h1 {\n padding: 78px 20px 0 20px;\n }\n }\n }\n`;\n","import { useRef } from 'react';\nimport styled from 'styled-components';\nimport { Link } from 'react-router-dom';\nimport { useToggle } from '../../../hooks/useToggle';\nimport { colors, resolutions } from '../../../utils/css';\nimport { StyledToggleableArrow as ToggleableArrow } from '../../ToggleableArrow/ToggleableArrow';\nimport { I18nText } from '../../I18n/I18nText';\nimport { getContentUrl } from '../../../utils/url/urlFactory';\n\nexport const AccordionItem = ({ title, contents, className }) => {\n const element = useRef(null);\n const [isOpen, { toggleOnClick }] = useToggle();\n const height = element.current ? element.current.scrollHeight : '0';\n return (\n
    \n \n \n {contents.map(content => (\n
    \n \n {content.shortTitle}\n \n
    \n ))}\n
    \n
    \n );\n};\n\nexport const StyledAccordionItem = styled(AccordionItem)`\n font-family: DWTheAntiquaB, Georgia, serif;\n font-weight: 400;\n font-size: 18px;\n line-height: 25px;\n text-align: left;\n\n display: flex;\n flex-direction: column;\n margin: 0px;\n\n .accordionItem-btn {\n display: flex;\n position: relative;\n width: 100%;\n padding: 20px;\n background-color: ${({ backgroundColor }) => backgroundColor};\n color: ${colors.LG_WHITE};\n cursor: pointer;\n align-items: center;\n border: none;\n :hover {\n background-color: ${colors.LG_GRAY_9};\n }\n :focus {\n color: ${colors.LG_BAHAMA_BLUE};\n text-decoration: underline;\n }\n }\n\n .toggleable-arrow {\n right: 18px;\n }\n`;\n\nexport const AccordionItemContent = styled.div`\n max-height: ${({ isOpen, height }) => (isOpen ? height : '1')}px;\n overflow: hidden;\n background-color: ${colors.LG_WHITE};\n transition: max-height 0.7s;\n\n .accordionItem-text {\n font-size: 18px;\n line-height: 25px;\n border-bottom-width: 1px;\n border-bottom-style: solid;\n border-bottom-color: ${colors.LG_GRAY_12};\n\n a {\n color: ${colors.LG_GRAY_9};\n text-decoration: none;\n padding: 20px;\n display: block;\n &:hover {\n color: ${colors.LG_WHITE};\n background-color: ${colors.LG_GRAY_9};\n }\n }\n\n @media (max-width: ${resolutions.max.mobile}px) {\n font-size: 15px;\n line-height: 20px;\n }\n }\n`;\n","import { colors } from '../utils/css';\n\nexport const grammarOverviewColors = [\n `${colors.LG_GREEN_YELLOW}`,\n `${colors.DW_LIGHT_BLUE}`,\n `${colors.LG_ORANGE}`,\n `${colors.LG_RED}`,\n `${colors.LG_GREEN_YELLOW}`,\n `${colors.LG_PINK}`,\n `${colors.LG_ORANGE_DARK}`,\n `${colors.LG_ORANGE}`,\n `${colors.LG_RED_DARK}`,\n `${colors.DW_LIGHT_BLUE}`,\n `${colors.LG_GREEN}`,\n `${colors.LG_ORANGE}`,\n];\n","import styled from 'styled-components';\nimport { StyledAccordionItem as AccordionItem } from './AccordionItem/AccordionItem';\nimport { grammarOverviewColors } from '../../constants/grammarOverviewColors';\n\nexport const Accordion = ({ className, data }) => {\n return (\n
    \n {data.map((accordionData, index) => (\n \n ))}\n
    \n );\n};\n\nexport const StyledAccordion = styled(Accordion)`\n display: block;\n`;\n","import { StyledGrammarOverviewHeader as GrammarOverviewHeader } from './GrammarOverviewHeader';\nimport { StyledAccordion as Accordion } from '../Accordion/Accordion';\n\nconst removeEmptyGrammars = data =>\n Object.values(data.grammarOverview).filter(\n item => Array.isArray(item.grammars) && item.grammars.length,\n );\n\nexport const GrammarOverview = data => (\n <>\n \n \n \n);\n","import gql from 'graphql-tag';\nimport { useParams } from 'react-router';\nimport { toLang } from '../utils/mappers/langMapper';\nimport { WithGraphQLQueryHandling } from '../components/WithGraphQLQueryHandling/WithGraphQLQueryHandling';\nimport { PageContainer } from '../components/Page/PageContainer';\nimport { GrammarOverview } from '../components/GrammarOverview/GrammarOverview';\nimport { PageMetaData } from '../components/Page/PageMetaData';\nimport { GTM_NO_CONTENT_PAGE_IDS, PAGE_TYPES } from '../constants/pageTypes';\nimport { GtmScriptWithDataLayer } from '../components/GoogleTagManager/GtmScriptWithDataLayer';\n\nexport const grammarOverviewPageFragment = gql`\n fragment GrammarOverviewItems on GrammarOverviewCategory {\n id\n headline\n grammars {\n id\n shortTitle\n language\n knowledgeType\n }\n }\n`;\n\nexport const grammarOverviewPageQuery = gql`\n query GrammarOverviewPage($lang: Language!) {\n grammarOverview(lang: $lang) {\n verbs {\n ...GrammarOverviewItems\n }\n tenses {\n ...GrammarOverviewItems\n }\n nounsAndArticles {\n ...GrammarOverviewItems\n }\n declination {\n ...GrammarOverviewItems\n }\n negation {\n ...GrammarOverviewItems\n }\n pronoun {\n ...GrammarOverviewItems\n }\n prepositions {\n ...GrammarOverviewItems\n }\n adjectivesAndAdverbs {\n ...GrammarOverviewItems\n }\n sentenceStructure {\n ...GrammarOverviewItems\n }\n numbers {\n ...GrammarOverviewItems\n }\n spellingOrthography {\n ...GrammarOverviewItems\n }\n others {\n ...GrammarOverviewItems\n }\n }\n }\n ${grammarOverviewPageFragment}\n`;\n\nexport const GrammarOverviewPage = () => {\n const { langCode } = useParams();\n\n const grammarPageQueryVariables = { lang: toLang(langCode) };\n\n return (\n \n \n {data => (\n <>\n \n \n \n \n )}\n \n \n );\n};\n","import { toLangCode } from '../mappers/langMapper';\nimport { encodeUrlNamePart, normalizeUrlName } from './url';\nimport { FEEDBACK_TYPES } from '../../constants/feedback';\n\nexport const pathPartials = {\n // IMPORTANT: Avoid groups in regex, always check here: https://pshrmn.github.io/route-tester/\n langCodeRegex: '[a-z]{2}-?0?0?2?[briaf]{0,2}',\n titlePathRegex: '.*',\n contentIdRegex: '\\\\d+',\n contentTypeRegex: '[a-z_]{1,15}',\n knowledgeTypeRegex: 'lv|la',\n knowledgeWithContentIdTypeRegex: 'gr|rs',\n feedbackTypes: Object.values(FEEDBACK_TYPES).join('|'),\n};\n\nexport const alignTitleRedirect = ({ title, language }) => ({ params, url }) => {\n const { typeId, contentId, title: titleFromPath } = params;\n if (titleFromPath !== normalizeUrlName(title.replace(/\\//g, ''))) {\n return {\n redirect: true,\n path: `/${toLangCode(language)}/${encodeUrlNamePart(title)}/${typeId}-${contentId}`,\n };\n }\n\n return {\n redirect: false,\n path: url,\n };\n};\n\nexport const notFoundRedirect = statement => ({ params, url }) => {\n const { langCode } = params;\n if (statement) {\n const langFromUrl = langCode ? `/${langCode}` : '/en';\n return {\n redirect: true,\n path: `${langFromUrl}/404?from=${url}`,\n };\n }\n return {\n redirect: false,\n path: url,\n };\n};\n\nexport const checkRedirects = ({ fns = [], match }) =>\n fns.reduce(\n (initial, fn) => {\n if (!initial.redirect) {\n const result = fn()(match) || {};\n return result.redirect ? result : initial;\n }\n return initial;\n },\n {\n redirect: false,\n path: match.url,\n },\n );\n","import { Link } from 'react-router-dom';\nimport styled from 'styled-components';\nimport { colors, resolutions } from '../../../../utils/css';\nimport { useTranslation } from '../../../../hooks/useTranslation';\n\nexport const LessonMenuItem = ({\n to,\n translationKey,\n id,\n ariaLabel,\n target,\n rel,\n onClick,\n onKeyPress,\n}) => {\n const label = useTranslation(translationKey);\n return (\n \n \n {label}\n \n \n );\n};\n\nexport const StyledLessonMenuItem = styled('li')`\n padding: 0;\n text-align: center;\n width: 100%;\n\n @media (min-width: ${resolutions.min.tablet}px) {\n border-bottom: 1px solid ${colors.LG_WHITE};\n }\n\n .lesson-menu-link {\n color: ${colors.LG_WHITE};\n font-family: Helvetica, Arial, sans-serif;\n font-size: 17px;\n font-weight: 700;\n display: inline-block;\n padding: 20px;\n text-decoration: none;\n width: 100%;\n\n // mouse, touch pad\n @media (hover: hover) and (pointer: fine) {\n &:hover {\n background-color: ${colors.LG_ORANGE1};\n }\n }\n // smartphones, touchscreens\n @media (hover: none) and (pointer: coarse) {\n &:hover {\n background-color: ${colors.LG_ORANGE1};\n }\n }\n &:active {\n background-color: ${colors.LG_ORANGE1};\n }\n &:focus {\n background-color: ${colors.LG_BLACK};\n }\n\n @media (min-width: ${resolutions.min.tablet}px) {\n font-size: 21px;\n }\n }\n`;\n","import styled from 'styled-components';\nimport { colors, resolutions } from '../../../../utils/css';\n\nexport const LessonTitle = ({ lessonName }) => (\n \n

    {lessonName}

    \n
    \n);\n\nexport const StyledLessonTitle = styled('div')`\n align-items: center;\n display: flex;\n justify-content: center;\n min-height: 60px;\n\n .title {\n color: ${colors.LG_WHITE};\n font-size: 18px;\n line-height: 1.3;\n margin: 15px 0;\n padding: 0 50px;\n text-align: center;\n }\n\n @media (min-width: ${resolutions.min.tablet}px) {\n min-height: 85px;\n\n .title {\n font-size: 25px;\n padding: 0 65px;\n }\n }\n\n @media (min-width: ${resolutions.min.desktop}px) {\n .title {\n font-size: 34px;\n }\n }\n`;\n","import styled from 'styled-components';\nimport { colors, resolutions } from '../../../../utils/css';\nimport navCrossBlackLg from '../../../../assets/svg/nav-cross-black-lg.svg';\nimport navCrossLg from '../../../../assets/svg/nav-cross-lg.svg';\nimport { StyledIconBar as IconBar } from '../../../IconBar/IconBar';\nimport { I18nText } from '../../../I18n/I18nText';\n\nexport const LessonBurgerButton = ({ isMenuCollapsed, setIsMenuCollapsed }) => (\n \n setIsMenuCollapsed(!isMenuCollapsed)}\n type=\"button\"\n className={isMenuCollapsed ? 'icon-toggle collapsed' : 'icon-toggle collapse'}\n data-toggle={isMenuCollapsed ? 'collapsed' : 'collapse'}\n data-target=\"#lecture-nav-user-menu\"\n aria-expanded={isMenuCollapsed}\n aria-controls=\"navbar\"\n >\n \n \n \n
    \n \n \n \n {!isMenuCollapsed && }\n\n {isMenuCollapsed && (\n <>\n \n \n \n )}\n
    \n \n
    \n);\n\nconst buttonStyle = `\n background-color: transparent;\n background-image: none;\n border: 0;\n border-radius: 0;\n margin: 0;\n padding: 0;\n`;\n\nconst defaultHoverStyles = `\n &:hover ${IconBar} {\n background-color: ${colors.LG_BLACK};\n }\n &:hover .close-menu {\n background: url(${navCrossBlackLg});\n background-size: cover;\n } \n`;\n// mouse, touch pad, smartphones, touchscreens\nconst mediaHoverDeviceDetection = `\n @media (hover: hover) and (pointer: fine) {\n ${defaultHoverStyles}\n }\n @media (hover: none) and (pointer: coarse) {\n ${defaultHoverStyles}\n }\n`;\n\nexport const StyledLessonBurgerButton = styled('div')`\n position: absolute;\n /*! @noflip */\n right: 20px;\n top: calc(50% - 10px);\n\n @media (min-width: ${resolutions.min.desktop}px) {\n /*! @noflip */\n right: 30px;\n }\n\n .title {\n display: none;\n }\n\n ${IconBar} {\n background-color: ${colors.LG_WHITE};\n padding: 0;\n }\n\n .close-menu {\n background: url(${navCrossLg});\n background-size: cover;\n display: block;\n height: 15px;\n margin-top: 6px;\n /*! @noflip */\n right: 15px;\n width: 15px;\n\n @media (min-width: ${resolutions.min.tablet}px) {\n height: 21px;\n margin-top: 2px;\n width: 22px;\n }\n }\n\n .collapse {\n display: block;\n ${buttonStyle}\n }\n\n .collapsed {\n ${buttonStyle}\n }\n\n .burger-menu-toggle-container {\n margin: 0;\n position: relative;\n }\n\n .icon-toggle {\n ${mediaHoverDeviceDetection}\n\n &:active ${IconBar}, \n &:focus ${IconBar} {\n background-color: ${colors.LG_BLACK};\n }\n\n &:focus .close-menu,\n &:active .close-menu {\n background: url(${navCrossBlackLg});\n background-size: cover;\n }\n }\n`;\n","export const LESSON_PARTS = Object.freeze({\n EXERCISE: 'EXERCISE',\n GRAMMAR: 'GRAMMAR',\n VOCABULARY_GLOSSARY: 'VOCABULARY_GLOSSARY',\n REGIONAL_STUDIES: 'REGIONAL_STUDIES',\n PHONEMIC_CHART: 'PHONEMIC_CHART',\n MANUSCRIPT: 'MANUSCRIPT',\n DOWNLOAD: 'DOWNLOAD',\n});\n","import { LESSON_PARTS } from '../constants/lessonParts';\nimport { isFinalTestPredicate } from './commons';\nimport {\n getAlphabeticalOrderUrl,\n getFirstGrammarUrl,\n getFirstRegionalStudiesUrl,\n getVocabularyUrl,\n} from './url/urlFactory';\n\nexport const hasLessonPart = (lessonOverviewParts, lessonPart) => {\n return lessonOverviewParts.some(part => part.lessonPart === lessonPart);\n};\n\nexport const getFirstIdOfLessonPart = (lessonOverviewParts, lessonPart) => {\n const targetOverviewPart = lessonOverviewParts.find(part => part.lessonPart === lessonPart);\n return targetOverviewPart ? targetOverviewPart.targetId : null;\n};\n\nexport const filterLessonKnowledgeOverviewItems = lessonOverviewParts =>\n lessonOverviewParts.filter(part =>\n [\n LESSON_PARTS.GRAMMAR,\n LESSON_PARTS.VOCABULARY_GLOSSARY,\n LESSON_PARTS.REGIONAL_STUDIES,\n ].includes(part.lessonPart),\n );\n\nexport const filterLessonExerciseOverviewItems = lessonOverviewParts =>\n lessonOverviewParts.filter(part => part.lessonPart === LESSON_PARTS.EXERCISE);\n\nexport const isFinalTestLesson = ({ lessonContentLinksFromCourse, currentLessonId }) => {\n const finalTestLessonContentLink = lessonContentLinksFromCourse.find(\n contentLink => contentLink.targetId === +currentLessonId && isFinalTestPredicate(contentLink),\n );\n return Boolean(finalTestLessonContentLink);\n};\n\nexport const filteredAssembledInfos = ({ lessonOverviewParts, lessonPath }) => {\n return assembleOverviewInfos({ lessonOverviewParts, lessonPath }).filter(info => info.hasInfo);\n};\n\nexport const assembleOverviewInfos = ({ lessonOverviewParts, lessonPath }) => {\n const firstGrammarId = getFirstIdOfLessonPart(lessonOverviewParts, LESSON_PARTS.GRAMMAR);\n const firstRegionalStudiesId = getFirstIdOfLessonPart(\n lessonOverviewParts,\n LESSON_PARTS.REGIONAL_STUDIES,\n );\n\n return [\n {\n name: 'grammar',\n hasInfo: hasLessonPart(lessonOverviewParts, LESSON_PARTS.GRAMMAR),\n url: getFirstGrammarUrl(lessonPath, firstGrammarId),\n },\n {\n name: 'alphabeticalOrder',\n hasInfo: hasLessonPart(lessonOverviewParts, LESSON_PARTS.PHONEMIC_CHART),\n url: getAlphabeticalOrderUrl(lessonPath),\n },\n {\n name: 'vocabulary',\n hasInfo: hasLessonPart(lessonOverviewParts, LESSON_PARTS.VOCABULARY_GLOSSARY),\n url: getVocabularyUrl(lessonPath),\n },\n {\n name: 'regionalStudies',\n hasInfo: hasLessonPart(lessonOverviewParts, LESSON_PARTS.REGIONAL_STUDIES),\n url: getFirstRegionalStudiesUrl(lessonPath, firstRegionalStudiesId),\n },\n ];\n};\n","import styled from 'styled-components';\nimport { useState } from 'react';\nimport { useParams } from 'react-router';\nimport { useDispatch } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\nimport { colors, resolutions, clearfix } from '../../../utils/css';\nimport { LessonMenuItem } from './LessonMenuItem/LessonMenuItem';\nimport { LessonTitle } from './LessonTitleAndBurgerButton/LessonTitle';\nimport { LessonBurgerButton } from './LessonTitleAndBurgerButton/LessonBurgerButton';\nimport { LESSON_PARTS } from '../../../constants/lessonParts';\nimport {\n getAlphabeticalOrderUrl,\n getCourseUrl,\n getExtrasUrl,\n getFirstGrammarUrl,\n getFirstRegionalStudiesUrl,\n getLessonUrl,\n getManuscriptUrl,\n getPlacementDashboardUrl,\n getVocabularyUrl,\n} from '../../../utils/url/urlFactory';\nimport { normalizeUrlName } from '../../../utils/url/url';\nimport { hasLessonPart } from '../../../utils/lessonUtils';\nimport { ModalIntegration } from '../../Modal/ModalIntegration';\nimport { ResetModal } from '../../Modal/ResetModal';\nimport { deleteLessonProgress } from '../../../state/progress/learnProgressDuck';\nimport { useTranslation } from '../../../hooks/useTranslation';\n\nexport const LessonMenu = ({\n lessonId,\n lessonName,\n lessonOverviewParts,\n courseId,\n courseName,\n isFromPlacementCourse,\n isFinalTest,\n firstExercisePath,\n}) => {\n const { langCode } = useParams();\n const [isMenuCollapsed, setIsMenuCollapsed] = useState(true);\n const [isResetModalOpen, setResetModalOpen] = useState(false);\n\n const dispatch = useDispatch();\n const history = useHistory();\n\n const grammarAria = useTranslation('lesson.menu.grammar_aria');\n const vocabularyAria = useTranslation('lesson.menu.vocabulary_aria');\n\n const onConfirmResetLessonProgress = () => {\n dispatch(deleteLessonProgress(+lessonId));\n setResetModalOpen(false);\n history.push(getLessonUrl(lessonId, langCode, normalizeUrlName(lessonName)));\n };\n\n const onCancelResetLessonProgress = () => {\n setResetModalOpen(false);\n };\n\n const getFirstOfTypeId = lessonPart =>\n hasLessonPart(lessonOverviewParts, lessonPart) &&\n lessonOverviewParts.find(part => part.lessonPart === lessonPart).targetId;\n\n const firstGrammarId = getFirstOfTypeId(LESSON_PARTS.GRAMMAR);\n const firstRegionalStudiesId = getFirstOfTypeId(LESSON_PARTS.REGIONAL_STUDIES);\n\n const lessonPath = getLessonUrl(lessonId, langCode, normalizeUrlName(lessonName));\n\n const hasExercisesReset =\n hasLessonPart(lessonOverviewParts, LESSON_PARTS.EXERCISE) &&\n !isFromPlacementCourse &&\n !isFinalTest;\n\n return (\n \n
    \n
    \n \n \n
    \n
    \n \n
      \n setIsMenuCollapsed(!isMenuCollapsed)}\n to={lessonPath}\n translationKey=\"lesson.menu.description\"\n progressIconClass=\"half\"\n />\n {hasLessonPart(lessonOverviewParts, LESSON_PARTS.EXERCISE) && (\n {\n if (isFinalTest) {\n dispatch(deleteLessonProgress(+lessonId));\n }\n setIsMenuCollapsed(!isMenuCollapsed);\n }}\n to={firstExercisePath}\n id=\"exercise-list\"\n translationKey=\"lesson.menu.exercises\"\n progressIconClass=\"full\"\n />\n )}\n {hasLessonPart(lessonOverviewParts, LESSON_PARTS.GRAMMAR) && (\n setIsMenuCollapsed(!isMenuCollapsed)}\n to={getFirstGrammarUrl(lessonPath, firstGrammarId)}\n id=\"grammar\"\n translationKey=\"lesson.menu.grammar\"\n progressIconClass=\"none\"\n ariaLabel={grammarAria}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n />\n )}\n {hasLessonPart(lessonOverviewParts, LESSON_PARTS.PHONEMIC_CHART) && (\n setIsMenuCollapsed(!isMenuCollapsed)}\n to={getAlphabeticalOrderUrl(lessonPath)}\n id=\"alphabetical-order\"\n translationKey=\"lesson.menu.alphabeticalOrder\"\n progressIconClass=\"full\"\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n />\n )}\n {hasLessonPart(lessonOverviewParts, LESSON_PARTS.VOCABULARY_GLOSSARY) && (\n setIsMenuCollapsed(!isMenuCollapsed)}\n to={getVocabularyUrl(lessonPath)}\n id=\"vocabulary\"\n translationKey=\"lesson.menu.vocabulary\"\n progressIconClass=\"full\"\n ariaLabel={vocabularyAria}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n />\n )}\n {hasLessonPart(lessonOverviewParts, LESSON_PARTS.REGIONAL_STUDIES) && (\n setIsMenuCollapsed(!isMenuCollapsed)}\n to={getFirstRegionalStudiesUrl(lessonPath, firstRegionalStudiesId)}\n id=\"regional-studies\"\n translationKey=\"lesson.menu.regionalStudies\"\n progressIconClass=\"none\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n />\n )}\n {hasLessonPart(lessonOverviewParts, LESSON_PARTS.MANUSCRIPT) && (\n setIsMenuCollapsed(!isMenuCollapsed)}\n to={getManuscriptUrl(lessonPath)}\n id=\"manuscript\"\n translationKey=\"lesson.menu.manuscript\"\n progressIconClass=\"none\"\n />\n )}\n {hasLessonPart(lessonOverviewParts, LESSON_PARTS.DOWNLOAD) && (\n setIsMenuCollapsed(!isMenuCollapsed)}\n to={getExtrasUrl(lessonPath)}\n id=\"extras\"\n translationKey=\"lesson.menu.extras\"\n progressIconClass=\"none\"\n />\n )}\n {hasExercisesReset && (\n <>\n {\n setIsMenuCollapsed(!isMenuCollapsed);\n setResetModalOpen(true);\n }}\n to=\"#\"\n id=\"reset\"\n translationKey=\"lesson.menu.reset\"\n />\n \n \n \n \n )}\n {courseId && !isFromPlacementCourse && (\n setIsMenuCollapsed(!isMenuCollapsed)}\n to={getCourseUrl(courseId, langCode, normalizeUrlName(courseName))}\n id=\"course-overview\"\n translationKey=\"lesson.menu.courseOverview\"\n />\n )}\n {isFromPlacementCourse && (\n setIsMenuCollapsed(!isMenuCollapsed)}\n to={getPlacementDashboardUrl(langCode)}\n id=\"placement-dashboard\"\n translationKey=\"lesson.menu.placementDashboard\"\n />\n )}\n
    \n
    \n
    \n
    \n \n );\n};\n\nexport const StyledLessonMenu = styled('nav')`\n display: grid;\n\n @media (min-width: ${resolutions.min.desktop}px) {\n margin-bottom: 20px;\n }\n\n .lesson-nav-layout-wrapper {\n background-color: ${colors.LG_ORANGE};\n position: relative;\n top: 0;\n width: 100%;\n z-index: 3;\n }\n\n .lesson-title-button-container-wrapper {\n display: grid;\n }\n\n .lesson-nav-menu-container-wrapper {\n position: absolute;\n width: 100%;\n }\n\n .lesson-nav-menu-wrapper {\n border-top: 1px solid ${colors.LG_WHITE};\n box-shadow: 1px 10px 20px 0 ${colors.LG_TRANSPARENT_BLACK_25};\n margin: 0;\n padding: 0;\n width: 100%;\n\n @media (min-width: ${resolutions.min.desktop}px) {\n box-shadow: none;\n }\n }\n\n .lesson-nav-menu {\n background-color: ${colors.LG_ORANGE};\n list-style-type: none;\n margin: 0;\n padding: 0;\n width: 100%;\n\n ${clearfix}\n\n @media (min-width: ${resolutions.min.desktop}px) {\n /* @noflip */\n float: right;\n width: 400px;\n }\n }\n`;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgIconHintCircleOrange(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, [\"title\", \"titleId\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"18px\",\n height: \"18px\",\n viewBox: \"0 0 18 18\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n xmlSpace: \"preserve\",\n style: {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n strokeLinejoin: \"round\",\n strokeMiterlimit: 1.41421\n },\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9,0C13.967,0 18,4.033 18,9C18,13.967 13.967,18 9,18C4.033,18 0,13.967 0,9C0,4.033 4.033,0 9,0ZM12.189,14.994L12.189,14.343L10.027,13.623L10.027,6.966C8.269,6.966 7.525,7.069 6.206,7.289L6.206,7.903C7.113,8.041 7.538,8.144 7.977,8.337L7.977,13.657C7.181,13.849 6.502,14.013 5.87,14.343L5.87,14.994L12.189,14.994ZM8.984,5.417C8.544,5.417 8.31,5.322 8.007,5.02C7.705,4.718 7.61,4.484 7.61,4.044C7.61,3.605 7.705,3.37 8.007,3.068C8.31,2.765 8.544,2.67 8.984,2.67C9.424,2.67 9.657,2.765 9.96,3.068C10.262,3.37 10.357,3.605 10.357,4.044C10.357,4.484 10.262,4.718 9.96,5.02C9.657,5.322 9.424,5.417 8.984,5.417Z\",\n style: {\n fill: \"#f08c00\"\n }\n }));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgIconHintCircleOrange);\nexport default __webpack_public_path__ + \"static/media/icon-hint-circle-orange.764164ab.svg\";\nexport { ForwardRef as ReactComponent };","import { Link } from 'react-router-dom';\nimport gql from 'graphql-tag';\nimport { useDispatch } from 'react-redux';\nimport { I18nText } from '../../I18n/I18nText';\nimport { ReactComponent as IconHintCircleOrange } from '../../../assets/svg/icon-hint-circle-orange.svg';\nimport { Text } from '../../Text/Text';\nimport { useKnowledgePlaceholderReplacementEffect } from '../../Modal/KnowledgeModal/useKnowledgePlaceholderReplacementEffect';\nimport { deleteLessonProgress } from '../../../state/progress/learnProgressDuck';\n\nexport const lessonContentDescriptionFragment = gql`\n fragment LessonContentDescription on Lesson {\n id\n description\n learningTargetHeadline\n learningTargetDescription\n }\n`;\n\nexport const LessonContentDescription = ({\n content,\n firstExercisePath,\n isFinalTest,\n isHintHidden,\n}) => {\n const {\n id: lessonid,\n description,\n learningTargetHeadline,\n learningTargetDescription,\n knowledges,\n } = content;\n\n useKnowledgePlaceholderReplacementEffect({ knowledges });\n const dispatch = useDispatch();\n\n const deleteProgressIfFinalTest = () => {\n if (isFinalTest) {\n dispatch(deleteLessonProgress(lessonid));\n }\n };\n\n return (\n
    \n
    \n
    \n
    \n \n \n \n
    \n
    \n

    {learningTargetHeadline}

    \n

    \n \n

    \n

    \n
    \n
    \n
    \n \n \n \n \n
    \n
    \n
    \n
    \n \n \n \n
    \n
    \n
    \n
    \n );\n};\n","export const subtitlesLabels = Object.freeze({\n GERMAN: 'Deutsch/Deutsch',\n ENGLISH: 'English',\n RUSSIAN: 'Русский',\n CHINESE: '中文',\n PORTUGUESE_BRAZIL: 'Português',\n ALBANIAN: 'Shqip',\n AMHARIC: 'አማርኛ',\n ARABIC: 'عربي',\n BENGALI: 'বাংলা',\n BOSNIAN: 'Bosanski',\n BULGARIAN: 'Български',\n DARI: 'دری',\n FRENCH: 'Français',\n GREEK: 'Ελληνικά',\n HAUSA: 'Hausa',\n HINDI: 'हिन्दी',\n INDONESIAN: 'Bahasa Indonesia',\n KISWAHILI: 'Kiswahili',\n CROATIAN: 'Hrvatski',\n MACEDONIAN: 'Македонски',\n PASHTO: 'پښتو',\n PERSIAN: 'فارسی',\n POLISH: 'Polski',\n ROMANIAN: 'Română',\n SERBIAN: 'Srpski',\n SPANISH: 'Español',\n TURKISH: 'Türkçe',\n UKRANIAN: 'Українська мова',\n URDU: 'اردو',\n});\n","const hasVideoPlaceholdersInRichText = ({ text = '' }) =>\n /]*video-js vjs-fluid[^>]*>/g.test(text);\nconst hasAudioPlaceholdersInRichText = ({ text = '' }) =>\n /]*video-js vjs-fluid[^>]*>/g.test(text);\n\nconst hasVideoPlayer = ({ __typename, text = '' }) =>\n __typename === 'Video' || hasVideoPlaceholdersInRichText({ text });\nconst hasAudioPlayer = ({ __typename, text = '' }) =>\n __typename === 'Audio' || hasAudioPlaceholdersInRichText({ text });\n\nexport const hasVideosOnly = content => hasVideoPlayer(content) && !hasAudioPlayer(content);\nexport const hasAudiosOnly = content => hasAudioPlayer(content) && !hasVideoPlayer(content);\n\nexport const hasPlayer = content => hasVideoPlayer(content) || hasAudioPlayer(content);\n","export const importVideoPlugins = async () =>\n Promise.all([\n import(/* webpackChunkName: 'playerPlugins-video' */ 'videojs-contrib-quality-levels'),\n import(/* webpackChunkName: 'playerPlugins-video' */ 'videojs-hls-quality-selector'),\n import(\n /* webpackChunkName: 'playerPlugins-video' */ 'videojs-hls-quality-selector/dist/videojs-hls-quality-selector.css'\n ),\n ]);\n","export const importAudioPlugins = async () =>\n Promise.all([\n import(/* webpackChunkName: 'playerPlugins-audio' */ 'videojs-seek-buttons'),\n import(\n /* webpackChunkName: 'playerPlugins-audio' */ 'videojs-seek-buttons/dist/videojs-seek-buttons.css'\n ),\n ]);\n","export const importVideoJs = async () => {\n const [videojsModule] = await Promise.all([\n import('video.js'),\n import('video.js/dist/video-js.min.css'),\n ]);\n return { videojs: videojsModule.default };\n};\n","import globals from '../utils/globals';\nimport { hasVideosOnly, hasAudiosOnly } from './videoTypeMatcher';\nimport { importVideoPlugins } from './videoPlugins';\nimport { importAudioPlugins } from './audioPlugins';\nimport { importVideoJs } from './videojs';\n\nconst commonOptions = {\n bigPlayButton: false,\n};\n\nconst videoOptions = {\n ...commonOptions,\n};\n\nconst audioOptions = {\n ...commonOptions,\n controlBar: {\n pictureInPictureToggle: false,\n fullscreenToggle: false,\n },\n playbackRates: [1, 1.3, 1.5],\n};\n\nexport const getOptions = videoNode => {\n if (videoNode.tagName === 'AUDIO') {\n return audioOptions;\n }\n if (videoNode.tagName === 'VIDEO') {\n return videoOptions;\n }\n return undefined;\n};\n\nconst importAllPlugins = async () => Promise.all([importVideoPlugins(), importAudioPlugins()]);\n\nconst importPlayerPlugins = async content => {\n if (hasVideosOnly(content)) {\n return importVideoPlugins();\n }\n if (hasAudiosOnly(content)) {\n return importAudioPlugins();\n }\n\n return importAllPlugins();\n};\n\nconst getPlayerWithPlugins = async content => {\n const { videojs } = await importVideoJs();\n await importPlayerPlugins(content);\n return videojs;\n};\n\nconst initAudio = player => {\n player.seekButtons({\n forward: 30,\n back: 10,\n });\n};\n\n// eslint-disable-next-line no-unused-vars\nconst initVideo = player => {\n player.hlsQualitySelector();\n};\n\nconst initPluginsForPlayer = player => {\n if (player.isAudio()) {\n initAudio(player);\n } else {\n initVideo(player);\n }\n};\n\nexport const loadVideoJsApi = async content => {\n const playerLib = await getPlayerWithPlugins(content);\n return {\n playerLib,\n document: globals.window.document,\n init: initPluginsForPlayer,\n };\n};\n","/* eslint-disable max-len */\nimport { useEffect } from 'react';\n\nimport { loadVideoJsApi, getOptions } from './api';\nimport { isServer } from '../utils/ssr';\n\nconst renderVideoJsPlayers = async ({ playerLib, document, init }) => {\n const { durationBarComponentName } = await import(\n /* webpackChunkName: 'player-custom' */ '../components/MediaInput/MediaInputVideo/CustomPlayerComponents/InfoBar/VjsDurationInfoBar'\n );\n // const { videoMediaTagComponentName } = await import(/* webpackChunkName: 'player-custom' */'./components/VjsMediaTag');\n const { videoPlayButtonComponentName } = await import(\n /* webpackChunkName: 'player-custom' */ '../components/MediaInput/MediaInputVideo/CustomPlayerComponents/PlayButton/VjsPlayButton'\n );\n\n const videoPlaceholderNodes = [...document.querySelectorAll('.video-js:not(.rendered)')];\n videoPlaceholderNodes.forEach(playerNode => {\n playerNode.classList.add('rendered');\n const player = playerLib(playerNode, getOptions(playerNode));\n\n player.addChild(durationBarComponentName);\n // player.addChild(videoMediaTagComponentName);\n player.addChild(videoPlayButtonComponentName);\n init(player);\n });\n};\n\nexport const useVideoPlayerEffect = content => {\n useEffect(() => {\n let didCancel = false; // eslint-disable-line fp/no-let\n\n async function convertVideoJsNodes() {\n const loadedApi = await loadVideoJsApi(content);\n if (!didCancel) {\n await renderVideoJsPlayers(loadedApi);\n }\n }\n\n if (!isServer()) {\n convertVideoJsNodes();\n }\n return () => {\n didCancel = true; // eslint-disable-line fp/no-mutation\n };\n }, [content]);\n};\n","import { useStaticInfoForGtm } from './useStaticInfoForGtm';\nimport { generateContentGtmInfo } from '../TrackingUtils';\nimport { useAddEmbeddingsToGtm } from './useAddEmbeddingsToGtm';\n\nexport const useMediaTracking = content => {\n const { level1Id, macaParam, pageUrl } = useStaticInfoForGtm();\n const contentDictionary = {\n [content.id]: generateContentGtmInfo({\n content,\n level1Id,\n macaParam,\n pageUrl,\n }),\n };\n\n useAddEmbeddingsToGtm({ dictionary: contentDictionary });\n};\n","import { useEffect } from 'react';\nimport { TrackingUtils } from '../TrackingUtils';\n\nconst eventName = 'addEmbeddings';\n\nexport const useAddEmbeddingsToGtm = ({ dictionary }) => {\n useEffect(() => {\n TrackingUtils.pushToGoogleTagManager({\n datalayerObj: {\n event: eventName,\n pageData: {\n embeddings: dictionary,\n },\n },\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n};\n","import gql from 'graphql-tag';\nimport { subtitlesLabels } from '../../../utils/mappers/subtitlesLabel';\nimport { useVideoPlayerEffect } from '../../../video/useVideoPlayerEffect';\nimport { useMediaTracking } from '../../GoogleTagManager/hooks/useMediaTracking';\nimport { gtmDataLayerFragment } from '../../GoogleTagManager';\n\nexport const mediaInputVideoFragment = {\n name: 'MediaInputVideo',\n fragment({ type }) {\n return gql`fragment ${type}${this.name} on ${type} {\n videos {\n name\n contentDate\n language \n posterImageUrl\n hlsVideoSrc\n formattedDuration\n subtitles {\n trackId: targetId\n srcLanguage\n language\n subtitleUrl\n }\n ${gtmDataLayerFragment.partial()}\n }\n }\n `;\n },\n};\n\nexport const MediaInputVideo = ({ data }) => {\n useVideoPlayerEffect(data.content);\n useMediaTracking(data.content.videos[0]);\n const {\n type = 'application/x-mpegURL',\n subtitles,\n posterImageUrl,\n hlsVideoSrc,\n formattedDuration,\n } = data.content.videos[0];\n\n return (\n // eslint-disable-next-line jsx-a11y/media-has-caption\n \n \n {subtitles.map(subtitle => (\n \n ))}\n

    \n To view this video please enable JavaScript, and consider upgrading to a web browser that{' '}\n \n supports HTML5 video\n \n

    \n \n );\n};\n","import gql from 'graphql-tag';\nimport { DwPicture } from '../../DwPicture/DwPicture';\n\nexport const mediaInputImageFragment = {\n name: 'MediaInputImage',\n fragment({ type }) {\n return gql`fragment ${type}${this.name} on ${type} {\n mainContentImage {\n imageId: id\n imageName: name\n }\n }\n `;\n },\n};\n\nexport const MediaInputImage = ({ data }) => {\n const { imageId, imageName } = data.content.mainContentImage || {};\n\n return imageId ? : null;\n};\n","/* eslint-disable jsx-a11y/media-has-caption */\nimport { useRef } from 'react';\nimport gql from 'graphql-tag';\nimport { DwPicture } from '../../DwPicture/DwPicture';\nimport { I18nText } from '../../I18n/I18nText';\nimport { useMediaTracking } from '../../GoogleTagManager/hooks/useMediaTracking';\nimport { gtmDataLayerFragment } from '../../GoogleTagManager';\n\nexport const mediaInputAudioFragment = {\n name: 'MediaInputAudio',\n fragment({ type }) {\n return gql`fragment ${type}${this.name} on ${type} {\n audios {\n id\n name\n contentDate\n mainContentImage {\n imageId: id\n imageName: name\n }\n mp3Src\n audioResourceLinks {\n url\n duration\n size\n }\n ${gtmDataLayerFragment.partial()}\n }\n }\n `;\n },\n};\n\nexport const MediaInputAudio = ({ data }) => {\n const audioRef = useRef();\n useMediaTracking(data.content.audios[0]);\n\n if (!data.content.audios[0]) return null;\n const { id, name, contentDate, mainContentImage, mp3Src } = data.content.audios[0];\n const { imageId, imageName } = mainContentImage || data.content.mainContentImage || {};\n const { duration, size } = data.content.audios[0].audioResourceLinks[0];\n\n const playAudio = e => {\n e.preventDefault();\n audioRef.current.play();\n };\n\n return (\n
    \n {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events */}\n {imageId && (\n playAudio(e)}\n style={{ cursor: 'pointer' }}\n role=\"button\"\n tabIndex={0}\n >\n \n \n )}\n \n \n \n \n
    \n );\n};\n","/* eslint-disable no-nested-ternary */\nimport gql from 'graphql-tag';\nimport {\n MediaInputVideo,\n mediaInputVideoFragment,\n} from '../../MediaInput/MediaInputVideo/MediaInputVideo';\nimport {\n MediaInputImage,\n mediaInputImageFragment,\n} from '../../MediaInput/MediaInputImage/MediaInputImage';\nimport {\n MediaInputAudio,\n mediaInputAudioFragment,\n} from '../../MediaInput/MediaInputAudio/MediaInputAudio';\n\nexport const mediaInputChooserFragment = {\n name: 'MediaInputChooser',\n fragment({ type }) {\n return gql`fragment ${type}${this.name} on ${type} {\n ...${type}MediaInputImage\n ...${type}MediaInputAudio\n ...${type}MediaInputVideo\n }\n ${mediaInputImageFragment.fragment({ type })}\n ${mediaInputAudioFragment.fragment({ type })}\n ${mediaInputVideoFragment.fragment({ type })}\n `;\n },\n};\n\nexport const MediaInputChooser = ({ data }) => {\n const { videos, audios } = data.content;\n\n const lessonInput =\n videos.length > 0 ? (\n \n ) : audios.length > 0 ? (\n \n ) : data.content.mainContentImage ? (\n
    \n \n
    \n ) : null;\n\n return (\n
    \n
    \n
    {lessonInput}
    \n
    \n
    \n );\n};\n","import { useParams } from 'react-router';\nimport gql from 'graphql-tag';\nimport {\n LessonContentDescription,\n lessonContentDescriptionFragment,\n} from '../LessonContentDescription/LessonContentDescription';\nimport {\n MediaInputChooser,\n mediaInputChooserFragment,\n} from '../MediaInputChooser/MediaInputChooser';\nimport { ImageOGMetaData } from '../../ImageOGMetaData/ImageOGMetaData';\nimport { knowledgesFragment } from '../LessonKnowledge/LessonKnowledge';\nimport { WithGraphQLQueryHandling } from '../../WithGraphQLQueryHandling/WithGraphQLQueryHandling';\nimport { metaDataFragment, PageMetaData } from '../../Page/PageMetaData';\nimport { PAGE_TYPES } from '../../../constants/pageTypes';\nimport {\n gtmDataLayerFragment,\n GtmScriptWithDataLayer,\n} from '../../GoogleTagManager/GtmScriptWithDataLayer';\n\nexport const lessonInformationQuery = gql`\n query LessonInformation($lessonId: Int!, $lang: Language!) {\n content(id: $lessonId, lang: $lang) {\n ... on Lesson {\n ...LessonMediaInputChooser\n ...LessonContentDescription\n ...LessonKnowledges\n ...${metaDataFragment.name}\n ${gtmDataLayerFragment.partial()}\n }\n }\n }\n ${mediaInputChooserFragment.fragment({ type: 'Lesson' })}\n ${lessonContentDescriptionFragment}\n ${knowledgesFragment.fragment({ type: 'Lesson' })}\n ${metaDataFragment.fragment({ type: 'Lesson' })}\n`;\n\nexport const LessonInformation = ({\n lessonLang,\n firstExercisePath,\n isFinalTest,\n courseName,\n isContentDescriptionHintVisible = false,\n ogImage,\n}) => {\n const { lessonId } = useParams();\n\n const lessonInformationQueryVariables = {\n lessonId: +lessonId,\n lang: lessonLang,\n };\n\n return (\n \n {data => (\n <>\n \n \n \n \n \n \n )}\n \n );\n};\n","import { createContext, useContext, useReducer } from 'react';\nimport { createInquiryProgressMetaData } from '../../../../state/progress/learnProgress';\n\n// Actions\nexport const EXERCISE_PROGRESS_ACTION_TYPES = Object.freeze({\n ADD_DONE_INQUIRY: 'ADD_DONE_INQUIRY',\n RESET: 'RESET',\n});\n\n// Reducer\nconst exerciseProgressReducer = (state, action) => {\n switch (action.type) {\n case EXERCISE_PROGRESS_ACTION_TYPES.ADD_DONE_INQUIRY:\n return {\n ...state,\n inquiryProgresses: [\n ...state.inquiryProgresses,\n createInquiryProgressMetaData({\n inquiryId: action.inquiryId,\n score: action.score,\n achievableScore: action.achievableScore,\n }),\n ],\n numberOfDoneInquiries: state.numberOfDoneInquiries + 1,\n currentExerciseScore: state.currentExerciseScore + action.score,\n };\n case EXERCISE_PROGRESS_ACTION_TYPES.RESET:\n return initialState;\n default:\n // eslint-disable-next-line fp/no-throw\n throw new Error('unexpected action type');\n }\n};\n\nconst initialState = {\n inquiryProgresses: [],\n numberOfDoneInquiries: 0,\n currentExerciseScore: 0,\n};\n\nexport const ExerciseProgressContext = createContext(null);\n\nexport const ExerciseProgressProvider = ({ isFromPlacementCourse, children }) => {\n const [exerciseStats, dispatch] = useReducer(exerciseProgressReducer, initialState);\n\n return (\n \n {children}\n \n );\n};\n\n// usage hook with \"action creators\"\nexport const useExerciseProgress = () => {\n const [exerciseProgress, dispatch] = useContext(ExerciseProgressContext);\n\n const addDoneInquiry = ({ inquiryId, score, achievableScore }) => {\n dispatch({\n type: EXERCISE_PROGRESS_ACTION_TYPES.ADD_DONE_INQUIRY,\n inquiryId,\n score,\n achievableScore,\n });\n };\n\n const resetProgress = () => {\n dispatch({ type: EXERCISE_PROGRESS_ACTION_TYPES.RESET });\n };\n\n return { exerciseProgress, addDoneInquiry, resetProgress };\n};\n","import { useParams } from 'react-router';\nimport { I18nText } from '../../../I18n/I18nText';\nimport { useExerciseProgress } from '../workflow/ExerciseProgress';\nimport { isRtlByLangCode } from '../../../../utils/mappers/rtlLanguages';\n\nconst outOfText = ;\nconst numberOfPointsEarnedText = (\n \n);\nconst numberOfExercisesSolvedText = (\n \n);\n\nexport const LessonExerciseStats = ({ amountOfInquiries }) => {\n const { exerciseProgress } = useExerciseProgress();\n const { langCode } = useParams();\n const isRtlLang = isRtlByLangCode(langCode);\n\n const numberOfDoneInquiriesSpan = (\n {exerciseProgress.numberOfDoneInquiries}\n );\n const amountOfInquiriesSpan = {amountOfInquiries};\n const scoreSpan = (\n {exerciseProgress.currentExerciseScore}\n );\n\n const ltrStats = (\n <>\n {numberOfDoneInquiriesSpan}\n  \n {outOfText}\n  \n {amountOfInquiriesSpan}\n  \n {numberOfExercisesSolvedText}. \n {scoreSpan}\n  \n {numberOfPointsEarnedText}.\n \n );\n\n const rtlStats = (\n <>\n {numberOfDoneInquiriesSpan}\n  \n {outOfText}\n  \n {numberOfExercisesSolvedText}\n  \n {amountOfInquiriesSpan}\n  \n {numberOfPointsEarnedText}\n  \n {scoreSpan}\n \n );\n\n return (\n
    \n

    {isRtlLang ? rtlStats : ltrStats}

    \n
    \n );\n};\n","import classnames from 'classnames';\nimport { I18nText } from '../../I18n/I18nText';\n\nexport const ContentNavTitle = ({ title, top, bottom }) => (\n
    \n
    \n \n \n
    \n
    \n
    \n);\n","import gql from 'graphql-tag';\nimport { ContentHeadline } from '../../../ContentContainer/ContentHeadline/ContentHeadline';\n\nexport const lessonExerciseHeadlineFragment = {\n name: 'LessonExerciseHeadline',\n fragment() {\n return gql`fragment ${this.name} on Exercise {\n name\n description\n }\n `;\n },\n};\n\nexport const LessonExerciseHeadline = ({ data }) => {\n const { name, description } = data.content;\n return (\n \n

    {name}

    \n \n
    \n );\n};\n","/* eslint-disable jsx-a11y/media-has-caption */\nimport { forwardRef } from 'react';\n\nexport const LessonExerciseHiddenAudio = forwardRef(({ src }, ref) => (\n
    \n \n \n \n
    \n));\n","import { forwardRef } from 'react';\nimport { LessonExerciseHiddenAudio } from './LessonExerciseHiddenAudio';\n\nexport const LessonExerciseSoundFailureHiddenAudio = forwardRef((_, ref) => (\n \n));\n","import { forwardRef } from 'react';\nimport { LessonExerciseHiddenAudio } from './LessonExerciseHiddenAudio';\n\nexport const LessonExerciseSoundSuccessHiddenAudio = forwardRef((_, ref) => (\n \n));\n","import { createContext, useRef, useState } from 'react';\nimport { LessonExerciseSoundFailureHiddenAudio } from '../components/Lesson/LessonExercise/LessonExerciseHiddenAudio/LessonExerciseSoundFailureHiddenAudio';\nimport { LessonExerciseSoundSuccessHiddenAudio } from '../components/Lesson/LessonExercise/LessonExerciseHiddenAudio/LessonExerciseSoundSuccessHiddenAudio';\n\nexport const AudioContext = createContext([{}, () => {}, {}, {}]);\n\nexport const AudioProvider = props => {\n const [questionAudiosRefArray, setQuestionAudiosRefArray] = useState([]);\n const wrongAnswerAudioRef = useRef();\n const correctAnswerAudioRef = useRef();\n\n return (\n \n \n \n {props.children}\n \n );\n};\n","import { RichText } from '../../../RichText/RichText';\n\nexport const LessonExerciseTextInput = ({ inputText }) =>\n inputText && (\n
    \n
    \n
    \n \n
    \n
    \n
    \n );\n","import { useContext } from 'react';\nimport { AudioContext } from '../context/AudioContext';\n\nexport const useAudio = () => {\n const [\n audiosRefArray,\n setAudiosRefArray,\n wrongAnswerAudioRef,\n correctAnswerAudioRef,\n ] = useContext(AudioContext);\n\n const stopOtherAudios = index => {\n const currentAudio = audiosRefArray[index];\n audiosRefArray.forEach(audio => {\n if (audio !== currentAudio) {\n audio.current.pause();\n // eslint-disable-next-line fp/no-mutation,no-param-reassign\n audio.current.currentTime = 0;\n }\n });\n };\n const playAudio = (e, ref) => {\n e.preventDefault();\n const index = audiosRefArray.indexOf(ref);\n stopOtherAudios(index);\n audiosRefArray[index].current.play();\n };\n\n const addRef = ref => {\n // eslint-disable-next-line fp/no-mutating-methods\n audiosRefArray.push(ref);\n setAudiosRefArray(audiosRefArray);\n };\n\n const playWrongDefaultAudioFeedBack = () => {\n wrongAnswerAudioRef.current.play();\n };\n\n const playCorrectDefaultAudioFeedBack = () => {\n correctAnswerAudioRef.current.play();\n };\n\n return {\n playAudio,\n addRef,\n playWrongDefaultAudioFeedBack,\n playCorrectDefaultAudioFeedBack,\n };\n};\n","/* eslint-disable jsx-a11y/role-supports-aria-props */\nimport { useEffect, useRef, useState } from 'react';\nimport { createGlobalStyle } from 'styled-components';\nimport { useAudio } from '../../../../../hooks/useAudio';\nimport { useTranslation } from '../../../../../hooks/useTranslation';\nimport { useFrontendConfig } from '../../../../../hooks/useFrontendConfig';\n\nconst LessonExerciseQuestionAudioGlobalStyles = createGlobalStyle` \n /* @noflip */\n .alwaysLtr {\n text-align: left;\n direction: ltr;\n }\n`;\n\nexport const LessonExerciseQuestionAudio = ({ audio, inquiryText }) => {\n const [isPlaying, setIsPlaying] = useState(false);\n const [hasEnded, setHasEnded] = useState(false);\n\n const playAudioLabel = useTranslation('exercise.playAudio');\n const { target: answerAudio } = audio || {};\n const { mp3Src: audioUrl, mainContentImage } = answerAudio || {};\n\n const audioRef = useRef();\n const { addRef, playAudio } = useAudio();\n\n const { imageBasePath } = useFrontendConfig();\n\n useEffect(() => {\n addRef(audioRef);\n }, [addRef]);\n\n const handleOnPlaying = () => {\n setIsPlaying(true);\n };\n\n const handleOnEnded = () => {\n setIsPlaying(false);\n setHasEnded(true);\n };\n\n const handleOnPaused = () => {\n setIsPlaying(false);\n };\n\n const getBubbleAudioLabel = () => {\n if (isPlaying) return 'playing';\n\n if (hasEnded) return 'ending';\n\n return '';\n };\n\n const audioLabel = inquiryText || playAudioLabel;\n return (\n <>\n playAudio(e, audioRef)}\n >\n \n {/* eslint-disable-next-line jsx-a11y/media-has-caption */}\n \n \n \n
    {audioLabel}
    \n
    \n \n {mainContentImage && (\n
    \n \n
    \n )}\n \n );\n};\n","import { createGlobalStyle } from 'styled-components';\n\nexport const LessonExerciseQuestionTextGlobalStyles = createGlobalStyle` \n /* @noflip */\n .alwaysLtr {\n text-align: left;\n direction: ltr;\n }\n`;\n\nexport const LessonExerciseQuestionText = ({ inquiryText }) => (\n <>\n \n
    {inquiryText}
    \n \n);\n","import { LessonExerciseQuestionText } from './LessonExerciseQuestionText';\nimport { useFrontendConfig } from '../../../../../hooks/useFrontendConfig';\n\nexport const LessonExerciseQuestionImage = ({ inquiryText, mainContentImage }) => {\n const { id, name } = mainContentImage;\n const { imageBasePath } = useFrontendConfig();\n return (\n <>\n \n
    \n {name}\n
    \n \n );\n};\n","import { LessonExerciseQuestionText } from './LessonExerciseQuestionText';\nimport { MediaInputVideo } from '../../../../MediaInput/MediaInputVideo/MediaInputVideo';\n\nexport const LessonExerciseQuestionVideo = ({ inquiryText, videos }) => (\n <>\n \n
    \n \n
    \n \n);\n","export const findQuestionAudio = audios => audios.find(audio => audio.mainContent);\n\nexport const findFeedbackAudio = (isSolutionAudioFallbackMode, audios) => {\n const feedbackAudio = audios.find(audio => !audio.mainContent);\n return feedbackAudio || (isSolutionAudioFallbackMode ? findQuestionAudio(audios) : undefined);\n};\n","export const QUESTION_TYPES = Object.freeze({\n TEXT: 'TEXT',\n IMAGE: 'IMAGE',\n AUDIO: 'AUDIO',\n VIDEO: 'VIDEO',\n});\n","import gql from 'graphql-tag';\nimport { LessonExerciseQuestionAudio } from './QuestionTypes/LessonExerciseQuestionAudio';\nimport { LessonExerciseQuestionImage } from './QuestionTypes/LessonExerciseQuestionImage';\nimport { LessonExerciseQuestionText } from './QuestionTypes/LessonExerciseQuestionText';\nimport { LessonExerciseQuestionVideo } from './QuestionTypes/LessonExerciseQuestionVideo';\nimport { findQuestionAudio } from '../../../../utils/audioUtils';\nimport { QUESTION_TYPES } from './QuestionTypes/questionTypes';\nimport { mediaInputVideoFragment } from '../../../MediaInput/MediaInputVideo/MediaInputVideo';\n\nexport const lessonExerciseQuestionFragment = {\n name: 'LessonExerciseQuestion',\n fragment() {\n return gql`fragment ${this.name} on Inquiry {\n inquiryText\n mainContentImage {\n id\n name\n }\n audios: contentLinks(targetTypes: [AUDIO]) {\n id\n mainContent\n target {\n ...on Audio {\n mp3Src\n mainContentImage {\n imageId: id\n imageName: name\n }\n }\n }\n }\n ...Inquiry${mediaInputVideoFragment.name}\n } \n ${mediaInputVideoFragment.fragment({ type: 'Inquiry' })}\n `;\n },\n};\n\nexport const exerciseQuestionTypeSelector = ({ inquiry }) => {\n const { videos, audios, mainContentImage } = inquiry;\n if (mainContentImage) {\n return QUESTION_TYPES.IMAGE;\n }\n if (videos.length > 0) {\n return QUESTION_TYPES.VIDEO;\n }\n if (findQuestionAudio(audios)) {\n return QUESTION_TYPES.AUDIO;\n }\n return QUESTION_TYPES.TEXT;\n};\n\nexport const LessonExerciseQuestion = ({ inquiry, useSubInquiryTextAsLabel = false }) => {\n const { inquiryText, videos, audios, mainContentImage, subInquiries } = inquiry;\n const questionType = exerciseQuestionTypeSelector({ inquiry });\n\n const getLabelText = () => {\n if (inquiryText) return inquiryText;\n if (subInquiries && useSubInquiryTextAsLabel) return subInquiries[0].subInquiryText;\n return '';\n };\n\n const labelText = getLabelText(inquiryText, subInquiries);\n const questionAudio = findQuestionAudio(audios);\n\n switch (questionType) {\n case QUESTION_TYPES.IMAGE:\n return ;\n case QUESTION_TYPES.VIDEO:\n return ;\n case QUESTION_TYPES.AUDIO:\n return ;\n case QUESTION_TYPES.TEXT:\n return ;\n default:\n return null;\n }\n};\n","import styled from 'styled-components';\nimport { colors } from '../../utils/css';\nimport { Text } from '../Text/Text';\n\n// eslint-disable-next-line no-unused-vars\nconst ButtonTemplate = ({ className, btnClass, children, disabled, fullWidth, ...restProps }) => (\n
    \n \n
    \n);\nexport const StyledButtonTemplate = styled(ButtonTemplate)`\n width: ${props => (props.fullWidth ? '100%' : '40%')};\n\n button {\n border-radius: 25px;\n width: 100%;\n height: 38px;\n background: ${colors.LG_WHITE};\n color: ${colors.LG_BLUE_1};\n border: 1px solid ${colors.LG_BLUE_1};\n transition: 0.2s;\n outline: none;\n }\n`;\n","import styled from 'styled-components';\nimport { StyledButtonTemplate } from './ButtonTemplate';\nimport { colors } from '../../utils/css';\n\nexport const SolveButton = ({ className, isDisabled, handleClick, fullWidth, children }) => (\n \n {children}\n \n);\n\nconst grayActiveFocus = `\n background: ${colors.LG_WHITE};\n color: ${colors.LG_GRAY_1};\n border: 1px solid ${colors.LG_GRAY_1};\n opacity: 0.65;\n`;\n\nexport const StyledSolveButton = styled(SolveButton)`\n .solve-button-gray {\n ${grayActiveFocus}\n }\n\n button.solve-button-blue {\n &:hover {\n background: ${props => (props.fullWidth ? colors.DW_LIGHT_BLUE : colors.LG_GRAY_10)};\n color: ${colors.LG_WHITE};\n border: 1px solid ${props => (props.fullWidth ? colors.DW_LIGHT_BLUE : colors.LG_GRAY_1)};\n }\n\n &:active,\n &:focus {\n ${grayActiveFocus}\n }\n }\n`;\n","import styled from 'styled-components';\nimport { StyledButtonTemplate } from './ButtonTemplate';\nimport { colors } from '../../utils/css';\n\nexport const CheckButton = ({ className, handleClick, isDisabled, children }) => (\n \n {children}\n \n);\n\nexport const StyledCheckButton = styled(CheckButton)`\n .check-button-blue {\n &:hover {\n color: ${colors.LG_WHITE};\n background: ${colors.LG_BLUE_1};\n }\n }\n\n .check-button-gray {\n background: ${colors.LG_WHITE};\n color: ${colors.LG_GRAY_1};\n border-color: ${colors.LG_GRAY_1};\n opacity: 0.65;\n }\n`;\n","import styled from 'styled-components';\nimport { StyledSolveButton } from './SolveButton';\nimport { StyledCheckButton } from './CheckButton';\nimport { I18nText } from '../I18n/I18nText';\nimport { resolutions } from '../../utils/css';\n\nexport const SolveCheckButton = ({\n className,\n isSolveButtonDisabled,\n isCheckButtonDisabled,\n handleSolveClicked,\n handleCheckClicked,\n}) => (\n
    \n \n \n \n \n \n \n
    \n);\n\nexport const StyledSolveCheckButton = styled(SolveCheckButton)`\n /* @noflip */\n direction: ltr;\n display: flex;\n margin: auto;\n justify-content: space-between;\n padding: 20px 0;\n margin-bottom: 50px;\n width: 770px;\n > * {\n width: 376px;\n }\n\n @media (max-width: ${resolutions.max.tablet}px) {\n width: 79.825%;\n padding: 20px 20px;\n > * {\n width: 48%;\n }\n }\n\n @media (max-width: ${resolutions.max.mobile}px) {\n width: 97%;\n }\n`;\n","export const placeholderConfig = [\n { placeholder: '#p#', size: 'medium', maxLength: 15 },\n { placeholder: '#ps#', size: 'small', maxLength: 7 },\n { placeholder: '#pm#', size: 'medium', maxLength: 15 },\n { placeholder: '#pl#', size: 'full', maxLength: null },\n];\n\nexport const createSingleSentenceAnswerContent = (subInquiries, arrayJoinString) => {\n const sentences = subInquiries.map(subInquiry => subInquiry.subInquiryText);\n return sentences.join(arrayJoinString);\n};\n\nexport const cleanupAndAddPlaceholderComponents = answertext => {\n // eslint-disable-next-line fp/no-let\n let answerWithReplacePlaceholders = answertext;\n\n const replaceInString = config => {\n // eslint-disable-next-line fp/no-mutation\n answerWithReplacePlaceholders = answerWithReplacePlaceholders.replace(\n new RegExp(config.placeholder, 'g'),\n `${config.size}`,\n );\n };\n\n placeholderConfig.forEach(replaceInString);\n return answerWithReplacePlaceholders;\n};\n","export const INQUIRY_STATE = Object.freeze({\n INITIAL: 'INITIAL',\n WRONG: 'WRONG',\n CORRECT: 'CORRECT',\n SOLVED: 'SOLVED',\n});\n","/* eslint-disable jsx-a11y/anchor-is-valid,jsx-a11y/aria-role,comma-dangle */\nimport { useState } from 'react';\nimport classnames from 'classnames';\nimport { INQUIRY_STATE } from '../workflow/inquiryState';\n\nexport const ClozePulldown = ({\n index,\n pulldownData,\n inquiryState,\n checkEntry,\n onHandleItemSelected,\n isDisabled,\n}) => {\n const [isToggled, setIsToggled] = useState(false);\n const getInputClassName = () => {\n switch (inquiryState) {\n case INQUIRY_STATE.CORRECT:\n case INQUIRY_STATE.WRONG:\n return checkEntry(pulldownData) ? 'correct-input' : 'wrong-input';\n case INQUIRY_STATE.SOLVED:\n return 'solved-input';\n default:\n return '';\n }\n };\n\n const onPulldownClicked = () => {\n if (!isDisabled) {\n setIsToggled(!isToggled);\n }\n };\n\n return (\n \n \n {pulldownData.selectedValue}{' '}\n {pulldownData.selectedValue === '...' ? : null}\n \n
      \n {pulldownData.alternatives.map((alternative, altIndex) => (\n
    • \n {\n onHandleItemSelected(e, index, alternative.alternativeText);\n setIsToggled(false);\n }}\n >\n {alternative.alternativeText}\n \n
    • \n ))}\n
    \n
    \n );\n};\n","import globals from '../../../../utils/globals';\nimport { replacePlaceholderWithAnswerComponent } from '../../../../utils/replacers/exerciseReplacer';\nimport { useTimeout } from '../../../../hooks/useTimeout';\n\nexport const usePlaceholderReplacementEffect = ({\n selector,\n createComponent,\n trigger = 'staticTrigger',\n scopeClassName,\n node,\n}) => {\n useTimeout(\n {\n callback: () => {\n replacePlaceholderWithAnswerComponent({\n selector,\n createComponent,\n scopeClassName,\n node: node ? node.current : globals.window.document,\n });\n },\n delay: 10,\n },\n [trigger],\n );\n};\n","import { replaceWithComponent } from './replaceCommons';\n\nexport const replacePlaceholderWithAnswerComponent = ({\n selector,\n createComponent,\n scopeClassName,\n node,\n}) => {\n replaceWithComponent({\n selector: scopeClassName\n ? `.${scopeClassName} ${selector || '.placeholder-cloze'}`\n : selector || '.placeholder-cloze',\n node,\n componentFn: (matchedElem, index) => createComponent(index, matchedElem),\n });\n};\n","import { usePlaceholderReplacementEffect } from './usePlaceholderReplacementEffect';\nimport { Text } from '../../../Text/Text';\n\nexport const ExerciseRichText = ({\n content,\n createComponent,\n trigger,\n scopeClassName,\n className,\n isA = 'div',\n update = false,\n node,\n}) => {\n usePlaceholderReplacementEffect({ createComponent, trigger, scopeClassName, node });\n return (\n \n );\n};\n","import { useState, useEffect, useRef } from 'react';\nimport classnames from 'classnames';\nimport styled from 'styled-components';\nimport {\n cleanupAndAddPlaceholderComponents,\n createSingleSentenceAnswerContent,\n} from '../clozeExerciseUtils';\nimport { INQUIRY_STATE } from '../../workflow/inquiryState';\nimport { ClozePulldown } from '../ClozePulldown';\nimport { ExerciseRichText } from '../ExerciseRichText';\n\nexport const PulldownAnswer = ({ className, inquiry, onChange, inquiryState, isDisabled }) => {\n const { subInquiries, clozeLayoutType } = inquiry;\n const initialClozePulldownData = subInquiries.map(subInquiry => {\n return {\n ...subInquiry,\n selectedValue: '...',\n };\n });\n\n const checkEntry = entry =>\n entry.alternatives.some(\n alternative => entry.selectedValue === alternative.alternativeText && alternative.isCorrect,\n );\n const checkAnswer = () => clozePulldownData.filter(data => checkEntry(data)).length;\n\n const [clozePulldownData, setClozePulldownData] = useState(initialClozePulldownData);\n const node = useRef(null);\n\n const onHandleItemSelected = (e, index, answer) => {\n e.preventDefault();\n const newClozeData = [...clozePulldownData];\n // eslint-disable-next-line fp/no-mutation\n newClozeData[index].selectedValue = answer;\n setClozePulldownData(newClozeData);\n onChange(checkAnswer());\n };\n\n useEffect(() => {\n if (inquiryState === INQUIRY_STATE.SOLVED) {\n setClozePulldownData(pulldownData => {\n const newClozeData = [...pulldownData];\n pulldownData.forEach((value, index) => {\n // eslint-disable-next-line fp/no-mutation\n newClozeData[index].selectedValue = value.alternatives.find(\n alternative => alternative.isCorrect,\n ).alternativeText;\n });\n return newClozeData;\n });\n }\n }, [inquiryState]);\n\n const createPulldown = index => (\n \n );\n\n const partialComponent = (inline = false) => answerContent => (\n \n \n \n );\n\n const clozeLayoutTypeConfig = {\n CONTINUOUS_TEXT: {\n cmp: partialComponent(true),\n answerContent: () => cleanupAndAddPlaceholderComponents(inquiry.text),\n },\n SINGLE_SENTENCE: {\n cmp: partialComponent(false),\n answerContent: () =>\n cleanupAndAddPlaceholderComponents(\n createSingleSentenceAnswerContent(subInquiries, '

    '),\n ),\n },\n };\n\n const selectedClozeLayoutConfig = clozeLayoutTypeConfig[clozeLayoutType];\n\n if (selectedClozeLayoutConfig == null) {\n return null;\n }\n\n return selectedClozeLayoutConfig.cmp(selectedClozeLayoutConfig.answerContent());\n};\n\nexport const StyledPulldownAnswer = styled(PulldownAnswer)`\n &.exercise-cloze-text-big div.form-group p {\n display: block;\n }\n\n /* @noflip */\n text-align: left;\n /* @noflip */\n direction: ltr;\n`;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgIconHint(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, [\"title\", \"titleId\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"10px\",\n height: \"18px\",\n viewBox: \"0 0 10 18\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n style: {\n fillRule: \"evenodd\"\n },\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M369.101562,1457.80899 L369.101562,1456.85041 C369.918135,1456.42437 370.841202,1456.08709 371.870793,1455.83857 L371.870793,1448.22319 C371.302743,1447.97467 370.432929,1447.76165 369.261326,1447.58413 L369.261326,1446.67881 C370.965476,1446.39478 372.953622,1446.25277 375.225823,1446.25277 L375.225823,1455.83857 L378.101562,1456.85041 L378.101562,1457.80899 L369.101562,1457.80899 Z M373.308663,1444.17585 C372.740613,1444.17585 372.261328,1443.98059 371.870793,1443.59005 C371.480259,1443.19952 371.284994,1442.72023 371.284994,1442.15218 C371.284994,1441.58413 371.480259,1441.10485 371.870793,1440.71431 C372.261328,1440.32378 372.740613,1440.12851 373.308663,1440.12851 C373.876713,1440.12851 374.355998,1440.32378 374.746533,1440.71431 C375.137067,1441.10485 375.332332,1441.58413 375.332332,1442.15218 C375.332332,1442.72023 375.137067,1443.19952 374.746533,1443.59005 C374.355998,1443.98059 373.876713,1444.17585 373.308663,1444.17585 L373.308663,1444.17585 Z\",\n style: {\n fill: \"#f08c00\"\n },\n transform: \"translate(-369.000000, -1440.000000)\"\n }));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgIconHint);\nexport default __webpack_public_path__ + \"static/media/icon-hint.484f8f25.svg\";\nexport { ForwardRef as ReactComponent };","import { createGlobalStyle } from 'styled-components';\nimport { ReactComponent as IconHintSimple } from '../../../../assets/svg/icon-hint.svg';\nimport { ReactComponent as IconHintCircleOrange } from '../../../../assets/svg/icon-hint-circle-orange.svg';\n\nexport const LessonExerciseHintGlobalStyles = createGlobalStyle`\n /* @noflip */\n .exercise-container .exercise-hint span.hint {\n right: 0\n }\n \n @media (min-width: 768px) {\n .exercise-container .exercise-hint p {\n text-align: left;\n }\n }\n`;\n\nexport const LessonExerciseHint = ({ description, isSimpleIconHint = false, isA = 'div' }) => {\n const hintSVG = isSimpleIconHint ? : ;\n const Tag = isA;\n\n return (\n description && (\n
    \n \n {hintSVG}\n \n
    \n )\n );\n};\n","import styled from 'styled-components';\n\nexport const StyledContainerTextContent = styled('div')`\n display: grid;\n\n br {\n content: '';\n display: block;\n height: 10px;\n }\n`;\n","const MULTIPLE_WHITESPACES_REGEX = /\\s\\s+/g;\nconst MINUS_CHARACTERS_REGEX = /[\\u002D\\u2010\\u2027\\u2011\\u2013\\u2014\\u2212]/g;\nconst SPECIAL_CHARACTERS = ',\\\\.!\\\\?:;\\\\-';\nconst WHITESPACE_BEFORE_SPECIAL_REGEX = new RegExp(` ([${SPECIAL_CHARACTERS}])`, 'g');\nconst WHITESPACE_AFTER_SPECIAL_REGEX = new RegExp(`([${SPECIAL_CHARACTERS}]) `, 'g');\n\nexport const normalizeText = str => {\n if (!str) {\n return str;\n }\n return str\n .trim()\n .replace(MULTIPLE_WHITESPACES_REGEX, ' ')\n .replace(MINUS_CHARACTERS_REGEX, '-')\n .replace(WHITESPACE_BEFORE_SPECIAL_REGEX, '$1')\n .replace(WHITESPACE_AFTER_SPECIAL_REGEX, '$1');\n};\n\nexport const isNormalizedTextEqual = (str1, str2) => {\n return normalizeText(str1) === normalizeText(str2);\n};\n","/* eslint-disable jsx-a11y/anchor-is-valid,jsx-a11y/aria-role */\nimport { useState, useEffect } from 'react';\nimport classnames from 'classnames';\nimport { createGlobalStyle } from 'styled-components';\nimport {\n cleanupAndAddPlaceholderComponents,\n createSingleSentenceAnswerContent,\n} from '../clozeExerciseUtils';\nimport { ExerciseRichText } from '../ExerciseRichText';\nimport { StyledContainerTextContent } from './ContainerTextContent';\nimport { INQUIRY_STATE } from '../../workflow/inquiryState';\nimport { shuffle } from '../../../../../utils/commons';\nimport { isNormalizedTextEqual } from '../../utils/exerciseUtils';\n\nconst ChooseAnswerGlobalStyles = createGlobalStyle` \n /* @noflip */\n .alwaysLtr {\n text-align: left;\n direction: ltr;\n }\n`;\n\nexport const ChooseAnswer = ({ inquiry, onChange, inquiryState, isDisabled }) => {\n const { subInquiries, clozeLayoutType, id } = inquiry;\n\n const scopeClassName = `inquiry_${id}`;\n\n const initialClozeChooseData = subInquiries.map(subInquiry => {\n return {\n ...subInquiry,\n selectedAnswer: undefined,\n };\n });\n const initialSelectableAnswers = subInquiries.map(subInquiry => ({\n text: subInquiry.alternatives[0].alternativeText,\n id: subInquiry.alternatives[0].id,\n }));\n\n const [clozeChooseData, setClozeChooseData] = useState(initialClozeChooseData);\n const [selectableAnswers, setSelectableAnswers] = useState(initialSelectableAnswers);\n\n const setSelectedAnswer = answer => {\n // eslint-disable-next-line fp/no-let\n let updated = false;\n const newClozeData = clozeChooseData.map(clozeData => {\n if (!clozeData.selectedAnswer && !updated) {\n // eslint-disable-next-line fp/no-mutation\n updated = true;\n return { ...clozeData, selectedAnswer: answer };\n }\n return { ...clozeData };\n });\n setClozeChooseData(newClozeData);\n };\n\n const removeSelectedAnswer = answer => {\n const newClozeData = clozeChooseData.map(clozeData => {\n if (clozeData.selectedAnswer && clozeData.selectedAnswer.id === answer.id) {\n return { ...clozeData, selectedAnswer: undefined };\n }\n return { ...clozeData };\n });\n setClozeChooseData(newClozeData);\n };\n\n const removeSelectableAnswer = answer => {\n const newSelectableAnswers = selectableAnswers.filter(\n selectableAnswer => selectableAnswer.id !== answer.id,\n );\n setSelectableAnswers(newSelectableAnswers);\n };\n\n const addSelectableAnswer = answer => {\n const newSelectableAnswers = [answer, ...selectableAnswers];\n setSelectableAnswers(newSelectableAnswers);\n };\n\n const handleAnswerClicked = (e, answerText, answerId, isSelectedAnswer) => {\n const answer = { text: answerText, id: +answerId };\n e.preventDefault();\n if (!isDisabled) {\n if (isSelectedAnswer) {\n removeSelectedAnswer(answer);\n addSelectableAnswer(answer);\n } else {\n setSelectedAnswer(answer);\n removeSelectableAnswer(answer);\n }\n }\n };\n\n const checkEntry = (answerText, index) => {\n return clozeChooseData[index].alternatives.some(\n alternative =>\n isNormalizedTextEqual(answerText, alternative.alternativeText) && alternative.isCorrect,\n );\n };\n useEffect(() => {\n if (inquiryState === INQUIRY_STATE.SOLVED) {\n setClozeChooseData(\n subInquiries.map(subInquiry => ({\n ...subInquiry,\n selectedAnswer: {\n text: subInquiry.alternatives[0].alternativeText,\n id: subInquiry.alternatives[0].id,\n },\n })),\n );\n setSelectableAnswers([]);\n }\n }, [inquiryState, subInquiries]);\n useEffect(() => {\n if (inquiryState !== INQUIRY_STATE.SOLVED) {\n onChange(\n clozeChooseData.filter((data, index) =>\n clozeChooseData[index].alternatives.some(\n alternative =>\n data.selectedAnswer &&\n isNormalizedTextEqual(data.selectedAnswer.text, alternative.alternativeText) &&\n alternative.isCorrect,\n ),\n ).length,\n );\n }\n }, [inquiryState, onChange, clozeChooseData]);\n useEffect(() => {\n setSelectableAnswers(answers =>\n shuffle(answers.slice(0)).map(answer => {\n return {\n ...answer,\n };\n }),\n );\n }, []);\n\n const EmptyPlaceholder = () =>
    ;\n const FilledPlaceholder = ({ selectedAnswer, index }) => (\n
    {answerLink(selectedAnswer, index, true)}
    \n );\n\n const PlaceHolder = ({ clozeData, index }) => {\n const { selectedAnswer } = clozeData;\n return (\n <>\n {selectedAnswer ? (\n \n ) : (\n \n )}\n \n );\n };\n\n const createPlaceholder = index => {\n const clozeData = clozeChooseData[index];\n return ;\n };\n\n const continuousTextPartialComponent = answerContent => (\n
    \n \n

    \n \n \n

    \n );\n\n const singleLinePartialComponent = answerContent => (\n
    \n \n \n \n
    \n );\n const getAnswerClasses = (answerText, index, isSelectedAnswer) => {\n const defaultClasses = 'btn answer-sorting-btn alwaysLtr';\n if (!isSelectedAnswer) {\n return defaultClasses;\n }\n return classnames(\n defaultClasses,\n (inquiryState === INQUIRY_STATE.CORRECT || inquiryState === INQUIRY_STATE.WRONG) &&\n checkEntry(answerText, index)\n ? 'correct-input'\n : '',\n inquiryState === INQUIRY_STATE.WRONG && !checkEntry(answerText, index) ? 'wrong-input' : '',\n inquiryState === INQUIRY_STATE.SOLVED ? 'solved-input' : '',\n );\n };\n const answerLink = (selectableAnswer, index, isSelectedAnswer) => (\n \n handleAnswerClicked(e, selectableAnswer.text, selectableAnswer.id, isSelectedAnswer)\n }\n >\n {selectableAnswer.text}\n \n );\n\n const clozeLayoutTypeConfig = {\n CONTINUOUS_TEXT: {\n cmp: continuousTextPartialComponent,\n answerContent: () => cleanupAndAddPlaceholderComponents(inquiry.text),\n },\n SINGLE_SENTENCE: {\n cmp: singleLinePartialComponent,\n answerContent: () =>\n cleanupAndAddPlaceholderComponents(createSingleSentenceAnswerContent(subInquiries, '
    ')),\n },\n };\n\n const selectedClozeLayoutConfig = clozeLayoutTypeConfig[clozeLayoutType];\n\n if (selectedClozeLayoutConfig == null) {\n return null;\n }\n\n return (\n <>\n \n
    \n {selectedClozeLayoutConfig.cmp(selectedClozeLayoutConfig.answerContent())}\n
    \n
    \n {selectableAnswers.map((selectableAnswer, index) =>\n answerLink(selectableAnswer, index, false, false),\n )}\n
    \n \n );\n};\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"rect\", {\n width: 2,\n height: 2,\n x: 2,\n y: 6\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"rect\", {\n width: 2,\n height: 2,\n x: 5,\n y: 6\n});\n\nvar _ref4 = /*#__PURE__*/React.createElement(\"rect\", {\n width: 2,\n height: 2,\n x: 8,\n y: 6\n});\n\nvar _ref5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m 11,6 3,0 0,5 -2,0 0,-3 -1,0 z\"\n});\n\nvar _ref6 = /*#__PURE__*/React.createElement(\"rect\", {\n width: 2,\n height: 2,\n x: 12,\n y: 12\n});\n\nvar _ref7 = /*#__PURE__*/React.createElement(\"rect\", {\n width: 6,\n height: 2,\n x: 5,\n y: 12\n});\n\nvar _ref8 = /*#__PURE__*/React.createElement(\"rect\", {\n width: 2,\n height: 2,\n x: 9,\n y: 9\n});\n\nvar _ref9 = /*#__PURE__*/React.createElement(\"rect\", {\n width: 2,\n height: 2,\n x: 6,\n y: 9\n});\n\nvar _ref10 = /*#__PURE__*/React.createElement(\"rect\", {\n width: 2,\n height: 2,\n x: 2,\n y: 12\n});\n\nvar _ref11 = /*#__PURE__*/React.createElement(\"rect\", {\n width: 3,\n height: 2,\n x: 2,\n y: 9\n});\n\nfunction SvgKeyboard(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, [\"title\", \"titleId\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 16,\n height: 16,\n style: {\n fill: \"#888\"\n },\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n style: {\n fill: \"none\",\n stroke: \"#888\"\n },\n d: \"M 0.5,4.5 15.5,4.5 15.5,15.5 0.5,15.5 Z\"\n }), _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9, _ref10, _ref11));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgKeyboard);\nexport default __webpack_public_path__ + \"static/media/keyboard.3a060932.svg\";\nexport { ForwardRef as ReactComponent };","import styled from 'styled-components';\nimport { ReactComponent as KeyboardIcon } from '../../../../assets/svg/keyboard.svg';\nimport { resolutions } from '../../../../utils/css';\n\nexport const StyledKeyboardIcon = styled(KeyboardIcon)`\n display: none;\n\n @media (min-width: ${resolutions.max.tabletLandscape}px) {\n display: block;\n .placeholder-cloze > & {\n display: inline-block;\n }\n }\n`;\n","import styled, { css } from 'styled-components';\nimport { forwardRef } from 'react';\nimport { INQUIRY_STATE } from '../../Lesson/LessonExercise/workflow/inquiryState';\nimport { useTranslation } from '../../../hooks/useTranslation';\n\nexport const TextAreaInput = forwardRef(\n (\n { inquiryState, input, isDisabled, onChange, onKeyPress, isPlaceholderDisabled = false },\n ref,\n ) => {\n const translatedPlaceholder = useTranslation('exercise.typeHere');\n\n const getBorderColor = () => {\n switch (inquiryState) {\n case INQUIRY_STATE.WRONG:\n return '#be232d';\n case INQUIRY_STATE.CORRECT:\n return '#82b905';\n case INQUIRY_STATE.SOLVED:\n case INQUIRY_STATE.INITIAL:\n default:\n return '#d1c9c2';\n }\n };\n\n const onTextAreaKeyPress = e => {\n if (onKeyPress) {\n onKeyPress(e);\n }\n };\n\n return (\n \n );\n },\n);\n\nconst StyledVerticalTextArea = styled.textarea`\n padding: 5px 10px;\n border: 2px solid ${({ borderColor }) => borderColor};\n resize: vertical;\n height: 8em;\n overflow: auto;\n /* @noflip */\n text-align: left;\n width: 95%;\n\n ${({ isDisabled }) =>\n isDisabled &&\n css`\n cursor: not-allowed;\n opacity: 1;\n background-color: #eee;\n `}\n\n &:empty:not(:focus):before {\n content: attr(placeholder);\n color: grey;\n }\n\n &:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n }\n`;\n","/* eslint-disable fp/no-mutation,no-param-reassign,no-return-assign,react-hooks/exhaustive-deps */\nimport styled from 'styled-components';\nimport classnames from 'classnames';\nimport { useEffect, useRef, useState } from 'react';\nimport './index.css'; // copied file from module path react-simple-keyboard/build/css/index.css due to SSR issues\nimport Keyboard from 'react-simple-keyboard';\nimport { StyledKeyboardIcon as KeyboardIcon } from './KeyboardIcon';\nimport { TextAreaInput } from '../../../Input/TextAreaInput/TextAreaInput';\n\n// copy&pasted from simple-keyboard-layouts module because it was not usable in unit tests\n// import layout from 'simple-keyboard-layouts/build/layouts/german';\nconst layout = {\n layout: {\n default: [\n '^ 1 2 3 4 5 6 7 8 9 0 \\u00DF \\u00B4 {bksp}',\n '{tab} q w e r t z u i o p \\u00FC +',\n '{lock} a s d f g h j k l \\u00F6 \\u00E4 # {enter}',\n '{shift} < y x c v b n m , . - {shift}',\n '.com @ {space}',\n ],\n shift: [\n '\\u00B0 ! \" \\u00A7 $ % & / ( ) = ? ` {bksp}',\n '{tab} Q W E R T Z U I O P \\u00DC *',\n \"{lock} A S D F G H J K L \\u00D6 \\u00C4 ' {enter}\",\n '{shift} > Y X C V B N M ; : _ {shift}',\n '.com @ {space}',\n ],\n },\n};\n\nexport const KeyboardWrapper = ({\n inputMaxLength,\n onChange,\n inputValue,\n inputClassName = '',\n isTextArea = false,\n}) => {\n const [isKeyboardVisible, setKeyboardVisible] = useState(false);\n const [layoutName, setLayoutName] = useState('default');\n const keyboardRef = useRef();\n const inputRef = useRef();\n const textAreaRef = useRef();\n\n useEffect(() => {\n if (isKeyboardVisible) {\n keyboardRef.current.setInput(inputValue);\n }\n if (inputRef.current) {\n inputRef.current.focus();\n }\n if (textAreaRef.current) {\n textAreaRef.current.focus();\n }\n }, [isKeyboardVisible]);\n\n const toggleKeyboard = () => {\n setKeyboardVisible(!isKeyboardVisible);\n };\n\n const handleKeyPress = pressedKey => {\n if (pressedKey === '{enter}') toggleKeyboard();\n if (pressedKey === '{shift}' || pressedKey === '{lock}') handleShift();\n };\n\n const onInputKeyPress = e => {\n if (e.charCode === 13) {\n toggleKeyboard();\n }\n };\n\n const handleShift = () => {\n const newLayoutName = layoutName === 'default' ? 'shift' : 'default';\n setLayoutName(newLayoutName);\n };\n\n const onChangeInput = input => {\n keyboardRef.current.setInput(input);\n onChange(input);\n };\n\n const onChangeLocalInput = e => {\n onChangeInput(e.target.value);\n };\n\n return (\n <>\n \n {isKeyboardVisible && (\n <>\n \n
    \n \n {!isTextArea && (\n \n )}\n {isTextArea && (\n false,\n onKeyPress: onInputKeyPress,\n isPlaceholderDisabled: true,\n ref: textAreaRef,\n }}\n />\n )}\n
    \n (keyboardRef.current = r)}\n className=\"keyboard\"\n {...{\n onChange: onChangeInput,\n onKeyPress: handleKeyPress,\n layoutName,\n ...layout,\n }}\n />\n
    \n \n \n )}\n \n );\n};\n\nexport const StyledKeyboardBackdrop = styled.div`\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 990;\n`;\n","import { useState } from 'react';\nimport classnames from 'classnames';\nimport { INQUIRY_STATE } from '../workflow/inquiryState';\nimport { isNormalizedTextEqual } from '../utils/exerciseUtils';\nimport { KeyboardWrapper } from '../Keyboard/KeyboardWrapper';\n\nexport const ClozeInput = ({\n inquiryState,\n index,\n clozeData,\n config,\n handleOnInputChange,\n isDisabled,\n}) => {\n const fieldNameId = clozeData.id;\n const [value, setValue] = useState(\n inquiryState === INQUIRY_STATE.SOLVED\n ? clozeData.alternatives[0].alternativeText\n : clozeData.userAnswer,\n );\n\n const [isCorrect, setIsCorrect] = useState(\n isNormalizedTextEqual(clozeData.alternatives[0].alternativeText, clozeData.userAnswer),\n );\n\n const handleOnChange = e => {\n handleChange(e.target.value);\n };\n\n const handleKeyboardChange = input => {\n handleChange(input);\n };\n\n const handleChange = input => {\n if (!isDisabled) {\n setValue(input);\n setIsCorrect(handleOnInputChange(index, input));\n }\n };\n\n const getInputClassName = () => {\n switch (inquiryState) {\n case INQUIRY_STATE.CORRECT:\n case INQUIRY_STATE.WRONG:\n return isCorrect ? 'correct-input' : 'wrong-input';\n case INQUIRY_STATE.SOLVED:\n return 'solved-input';\n default:\n return '';\n }\n };\n\n const baseInputClassName = `answer-input-cloze-${config.size} cloze-${clozeData.id} answer-input-cloze-element form-control onscreen-kb input-sm`;\n\n return (\n <>\n \n {!isDisabled && (\n \n )}\n \n );\n};\n","import { useEffect, useState } from 'react';\nimport { createGlobalStyle } from 'styled-components';\nimport {\n cleanupAndAddPlaceholderComponents,\n createSingleSentenceAnswerContent,\n placeholderConfig,\n} from '../clozeExerciseUtils';\nimport { ExerciseRichText } from '../ExerciseRichText';\nimport { INQUIRY_STATE } from '../../workflow/inquiryState';\nimport { isNormalizedTextEqual } from '../../utils/exerciseUtils';\nimport { ClozeInput } from '../ClozeInput';\n\nconst WritingAnswerGlobalStyles = createGlobalStyle` \n /* @noflip */\n .alwaysLtr {\n text-align: left;\n direction: ltr;\n }\n`;\n\nexport const WritingAnswer = ({ inquiry, onChange, inquiryState, isDisabled }) => {\n const { subInquiries, clozeLayoutType, id } = inquiry;\n const scopeClassName = `inquiry_${id}`;\n\n const initialClozeWritingData = subInquiries.map(subInquiry => {\n return {\n ...subInquiry,\n userAnswer: '',\n };\n });\n\n const [clozeWritingData, setClozeWritingData] = useState(initialClozeWritingData);\n\n useEffect(() => {\n if (inquiryState === INQUIRY_STATE.SOLVED) {\n setClozeWritingData(\n subInquiries.map(subInquiry => ({\n ...subInquiry,\n userAnswer: subInquiry.alternatives[0].alternativeText,\n })),\n );\n }\n }, [inquiryState, subInquiries]);\n\n const handleOnInputChange = (index, value) => {\n const newData = [...clozeWritingData];\n // eslint-disable-next-line fp/no-mutation\n newData[index].userAnswer = value;\n setClozeWritingData(newData);\n onChange(\n newData.filter(answer =>\n isNormalizedTextEqual(answer.userAnswer, answer.alternatives[0].alternativeText),\n ).length,\n );\n\n return checkAnswer(index, value);\n };\n\n const checkAnswer = (index, value) =>\n isNormalizedTextEqual(value, clozeWritingData[index].alternatives[0].alternativeText);\n\n const createPlaceholder = (index, matchedElement) => {\n const clozeData = clozeWritingData[index];\n const config = placeholderConfig.find(entry => entry.size === matchedElement.innerText);\n return (\n \n );\n };\n\n const clozeLayoutTypeConfig = {\n CONTINUOUS_TEXT: {\n answerContent: () => cleanupAndAddPlaceholderComponents(inquiry.text),\n },\n SINGLE_SENTENCE: {\n answerContent: () =>\n cleanupAndAddPlaceholderComponents(\n createSingleSentenceAnswerContent(subInquiries, '

    '),\n ),\n },\n };\n\n const selectedClozeLayoutConfig = clozeLayoutTypeConfig[clozeLayoutType];\n\n if (selectedClozeLayoutConfig == null) {\n return null;\n }\n\n const answerContent = selectedClozeLayoutConfig.answerContent();\n\n return (\n
    \n \n
    \n
    \n \n
    \n
    \n
    \n );\n};\n","import { useState } from 'react';\nimport { INQUIRY_STATE } from './inquiryState';\nimport { useExerciseProgress } from './ExerciseProgress';\n\nexport const useInquiryHandling = ({ inquiryId, achievableScore, subInquiries = 1 }) => {\n const [isSolveButtonDisabled, setSolveButtonDisabled] = useState(true);\n const [isCheckButtonDisabled, setCheckButtonDisabled] = useState(false);\n const [isMarkedAsDone, setMarkedAsDone] = useState(false);\n const [wrongAnswerCount, setWrongAnswerCount] = useState(0);\n const [inquiryState, setInquiryState] = useState(INQUIRY_STATE.INITIAL);\n\n const { addDoneInquiry, exerciseProgress } = useExerciseProgress();\n const { isFromPlacementCourse } = exerciseProgress;\n\n const isDisabled = () => {\n return (\n inquiryState === INQUIRY_STATE.CORRECT ||\n inquiryState === INQUIRY_STATE.SOLVED ||\n (inquiryState === INQUIRY_STATE.WRONG && isFromPlacementCourse)\n );\n };\n\n const disableAllButtons = () => {\n setCheckButtonDisabled(true);\n setSolveButtonDisabled(true);\n };\n\n const checkAndMarkAsDone = ({ score = 0 }) => {\n if (!isMarkedAsDone) {\n addDoneInquiry({ inquiryId, achievableScore, score });\n setMarkedAsDone(true);\n }\n };\n\n const handleCorrectAnswer = () => {\n setInquiryState(INQUIRY_STATE.CORRECT);\n checkAndMarkAsDone({ score: achievableScore });\n disableAllButtons();\n };\n\n const handleWrongAnswer = (correctSubInquiries = 0) => {\n setInquiryState(INQUIRY_STATE.WRONG);\n checkAndMarkAsDone({ score: (achievableScore * correctSubInquiries) / subInquiries });\n setWrongAnswerCount(wrongAnswerCount + 1);\n if (isFromPlacementCourse) setCheckButtonDisabled(true);\n setSolveButtonDisabled(false);\n };\n\n const handleSolved = () => {\n setInquiryState(INQUIRY_STATE.SOLVED);\n checkAndMarkAsDone({});\n disableAllButtons();\n };\n\n return {\n isSolveButtonDisabled,\n isCheckButtonDisabled,\n inquiryState,\n isDisabled,\n isFromPlacementCourse,\n handleCorrectAnswer,\n handleWrongAnswer,\n handleSolved,\n };\n};\n","import { useRef, useState } from 'react';\nimport { useParams } from 'react-router';\nimport {\n exerciseQuestionTypeSelector,\n LessonExerciseQuestion,\n} from '../LessonExerciseQuestion/LessonExerciseQuestion';\nimport { StyledSolveCheckButton } from '../../../SolveCheckButton/SolveCheckButton';\nimport { StyledPulldownAnswer } from './AnswerTypes/PulldownAnswer';\nimport { QUESTION_TYPES } from '../LessonExerciseQuestion/QuestionTypes/questionTypes';\nimport { LessonExerciseHint } from '../LessonExerciseHint/LessonExerciseHint';\nimport { ChooseAnswer } from './AnswerTypes/ChooseAnswer';\nimport { WritingAnswer } from './AnswerTypes/WritingAnswer';\nimport { useAudio } from '../../../../hooks/useAudio';\nimport { useInquiryHandling } from '../workflow/useInquiryHandling';\nimport { findFeedbackAudio } from '../../../../utils/audioUtils';\nimport { LessonExerciseHiddenAudio } from '../LessonExerciseHiddenAudio/LessonExerciseHiddenAudio';\n\nexport const ClozeExerciseRow = ({ inquiry, initiallyCorrectInquiries = 0 }) => {\n const { exerciseId } = useParams();\n const {\n audios,\n inquiryDescription,\n id: inquiryId,\n learningMetaInfo: { achievableScore },\n mainContentImage,\n } = inquiry;\n const { clozeType } = inquiry.subInquiries[0];\n\n const [correctSubInquiries, setCorrectSubInquiries] = useState(initiallyCorrectInquiries);\n const { playWrongDefaultAudioFeedBack, playCorrectDefaultAudioFeedBack } = useAudio();\n const isSolutionAudioFallbackMode = Boolean(mainContentImage);\n const feedbackAudio = findFeedbackAudio(isSolutionAudioFallbackMode, audios);\n const { target: answerAudio } = feedbackAudio || {};\n const { mp3Src: feedbackAudioUrl } = answerAudio || {};\n const feedbackAudioRef = useRef();\n\n const {\n isSolveButtonDisabled,\n isCheckButtonDisabled,\n handleCorrectAnswer,\n handleWrongAnswer,\n handleSolved,\n inquiryState,\n isDisabled,\n } = useInquiryHandling({ inquiryId, achievableScore, subInquiries: inquiry.subInquiries.length });\n\n const onChange = changeResult => {\n setCorrectSubInquiries(changeResult);\n };\n\n const onHandleSolveButtonClicked = () => {\n handleSolved();\n playCorrectAudioFeedBack();\n };\n\n const onHandleCheckButtonClicked = () => {\n if (correctSubInquiries === inquiry.subInquiries.length) {\n handleCorrectAnswer();\n playCorrectAudioFeedBack();\n } else {\n handleWrongAnswer(correctSubInquiries);\n playWrongDefaultAudioFeedBack();\n }\n };\n const playCorrectAudioFeedBack = () => {\n if (feedbackAudioUrl) {\n feedbackAudioRef.current.play();\n } else {\n playCorrectDefaultAudioFeedBack();\n }\n };\n const getAnswerComponent = () => {\n switch (clozeType) {\n case 'PULLDOWN':\n return (\n \n );\n case 'CHOOSE':\n return ;\n case 'WRITING':\n return ;\n default:\n return null;\n }\n };\n\n const questionType = exerciseQuestionTypeSelector({ inquiry });\n const answerComponent = getAnswerComponent();\n\n const lessonExerciseHintPartial = (\n
    \n
    \n \n
    \n
    \n );\n\n return (\n
    \n
    \n {questionType === QUESTION_TYPES.TEXT && clozeType !== 'CHOOSE' ? (\n <>\n
    \n \n \n {answerComponent}\n
    \n {lessonExerciseHintPartial}\n \n ) : (\n <>\n
    \n \n \n
    \n
    {answerComponent}
    \n {lessonExerciseHintPartial}\n \n )}\n
    \n
    \n \n
    \n
    \n );\n};\n","import gql from 'graphql-tag';\nimport { AudioProvider } from '../../../../context/AudioContext';\nimport { LessonExerciseTextInput } from '../LessonExerciseTextInput/LessonExerciseTextInput';\nimport { ClozeExerciseRow } from './ClozeExerciseRow';\n\nexport const clozeExerciseFragment = {\n name: 'clozeExercise',\n fragment() {\n return gql`fragment ${this.name} on Inquiry {\n text\n clozeLayoutType\n subInquiries {\n clozeType\n }\n } \n `;\n },\n};\n\nexport const ClozeExercise = ({ data }) => {\n const { inputText, inquiries } = data.content;\n\n return (\n \n \n {inquiries.map(inquiry => (\n \n ))}\n \n );\n};\n","import { useState } from 'react';\nimport { useInquiryHandling } from '../workflow/useInquiryHandling';\nimport { KeyboardWrapper } from '../Keyboard/KeyboardWrapper';\nimport { TextAreaInput } from '../../../Input/TextAreaInput/TextAreaInput';\nimport { LessonExerciseQuestionAudio } from '../LessonExerciseQuestion/QuestionTypes/LessonExerciseQuestionAudio';\nimport { LessonExerciseHint } from '../LessonExerciseHint/LessonExerciseHint';\nimport { StyledSolveCheckButton } from '../../../SolveCheckButton/SolveCheckButton';\nimport { findQuestionAudio } from '../../../../utils/audioUtils';\nimport { useAudio } from '../../../../hooks/useAudio';\nimport { isNormalizedTextEqual } from '../utils/exerciseUtils';\n\nexport const DictationExerciseRow = ({ inquiry }) => {\n const [input, setInput] = useState('');\n\n const {\n inquiryDescription,\n audios,\n text: solutionText,\n learningMetaInfo: { achievableScore },\n id: inquiryId,\n } = inquiry;\n const questionAudio = findQuestionAudio(audios);\n\n const {\n isSolveButtonDisabled,\n isCheckButtonDisabled,\n inquiryState,\n handleCorrectAnswer,\n handleWrongAnswer,\n handleSolved,\n isDisabled,\n } = useInquiryHandling({ inquiryId, achievableScore });\n const { playWrongDefaultAudioFeedBack, playCorrectDefaultAudioFeedBack } = useAudio();\n\n const onSolveClicked = () => {\n setInput(solutionText);\n handleSolved();\n };\n const onCheckClicked = () => {\n if (isNormalizedTextEqual(solutionText, input)) {\n handleCorrectAnswer();\n playCorrectDefaultAudioFeedBack();\n } else {\n handleWrongAnswer();\n playWrongDefaultAudioFeedBack();\n }\n };\n\n const onChange = event => {\n const newInput = event.target.value;\n setInput(newInput);\n };\n\n return (\n
    \n
    \n
    \n \n
    \n
    \n \n {!isDisabled() && (\n \n )}\n
    \n
    \n \n
    \n
    \n onCheckClicked()}\n handleSolveClicked={() => onSolveClicked()}\n isSolveButtonDisabled={isSolveButtonDisabled}\n isCheckButtonDisabled={isCheckButtonDisabled}\n />\n
    \n );\n};\n","import { DictationExerciseRow } from './DictationExerciseRow';\nimport { AudioProvider } from '../../../../context/AudioContext';\n\nexport const DictationExercise = ({ data }) => {\n const { inquiries } = data.content;\n\n return (\n \n {inquiries.map(inquiry => (\n \n ))}\n \n );\n};\n","export const INQUIRY_MEDIA_TYPE = Object.freeze({\n TEXT: 'TEXT',\n IMAGE: 'IMAGE',\n AUDIO: 'AUDIO',\n VIDEO: 'VIDEO',\n});\n","import { createGlobalStyle } from 'styled-components';\nimport classnames from 'classnames';\nimport { INQUIRY_MEDIA_TYPE } from '../../../../../constants/inquiryMediaTypes';\nimport { useFrontendConfig } from '../../../../../hooks/useFrontendConfig';\n\nconst ManyToManyAnswerGlobalStyles = createGlobalStyle` \n /* @noflip */\n .alwaysLtr {\n text-align: left;\n direction: ltr;\n }\n \n .pair-select-container .pairsToUse .left .btn {\n /* @noflip */\n float: left;\n /* @noflip */\n clear: left;\n }\n`;\n\nexport const ManyToManyAnswer = ({\n answer,\n answersBlocked,\n mediaType,\n isLeftAnswer = false,\n isMatched = false,\n onAnswerClicked,\n}) => {\n const answerText = isLeftAnswer ? answer.subInquiryText : answer.alternatives[0].alternativeText;\n const isImage = mediaType === INQUIRY_MEDIA_TYPE.IMAGE;\n const imagePairClass = isLeftAnswer ? 'image-pair-left ' : 'image-pair-right ';\n const basicClass = `btn ${isImage ? imagePairClass : ''}removeHover`;\n\n const { imageBasePath } = useFrontendConfig();\n const assignAnswerClass = (isSelected, currentSideAnswersBlocked) => {\n const isBlocked = currentSideAnswersBlocked ? 'waiting inactive' : '';\n const status = isSelected ? 'tapped' : isBlocked;\n return `${basicClass} ${status}`;\n };\n\n const assignMatchedAnswerClass = (isCorrectlyMatched, isSolved) => {\n if (isSolved) {\n return `${basicClass} solved`;\n }\n if (isCorrectlyMatched === null) {\n return basicClass;\n }\n const checkedStatus = isCorrectlyMatched ? 'correct solved' : 'wrong';\n return `${basicClass} ${checkedStatus}`;\n };\n\n return (\n \n \n {!isLeftAnswer && isImage ? (\n \n ) : (\n answerText\n )}\n \n );\n};\n","export const SHUFFLE_RIGHT_ANSWERS = 'SHUFFLE_RIGHT_ANSWERS';\nexport const MATCH_ANSWERS_PAIR = 'MATCH_ANSWERS_PAIR';\nexport const BLOCK_ANSWERS = 'BLOCK_ANSWERS';\nexport const RESET_MATCHED_ANSWERS_PAIR = 'RESET_MATCHED_ANSWERS_PAIR';\nexport const CHECK_ANSWERS = 'CHECK_ANSWERS';\nexport const SOLVE_ANSWERS = 'SOLVE_ANSWERS';\n\nexport const reducer = (state, action) => {\n const { selectedId, isLeft, selectedIndex, subInquiries, initialLeftAnswers } =\n action.payload || {};\n\n switch (action.type) {\n case SHUFFLE_RIGHT_ANSWERS: {\n // eslint-disable-next-line fp/no-mutating-methods\n const shuffledRightAnswers = [...state.rightAnswers].sort(() => 0.25 - Math.random());\n return {\n ...state,\n rightAnswers: shuffledRightAnswers,\n };\n }\n case MATCH_ANSWERS_PAIR: {\n const leftMatchedAnswer = state.leftAnswers.find(answer =>\n isLeft ? answer.id === selectedId : answer.isSelected,\n );\n const rightMatchedAnswer = state.rightAnswers.find(answer =>\n isLeft ? answer.isSelected : answer.alternatives[0].id === selectedId,\n );\n\n return {\n ...state,\n leftMatchedAnswers: [\n ...state.leftMatchedAnswers,\n {\n ...leftMatchedAnswer,\n isSelected: false,\n },\n ],\n rightMatchedAnswers: [\n ...state.rightMatchedAnswers,\n {\n ...rightMatchedAnswer,\n isSelected: false,\n },\n ],\n leftAnswers: state.leftAnswers.filter(answer => answer !== leftMatchedAnswer),\n rightAnswers: state.rightAnswers.filter(answer => answer !== rightMatchedAnswer),\n isLeftAnswerBlocked: false,\n isRightAnswerBlocked: false,\n };\n }\n case BLOCK_ANSWERS: {\n const answers = isLeft ? state.leftAnswers : state.rightAnswers;\n const updatedAnswers = answers.map(answer => {\n const isIdEqual = isLeft\n ? answer.id === selectedId\n : answer.alternatives[0].id === selectedId;\n return {\n ...answer,\n isSelected: isIdEqual && !answer.isSelected,\n };\n });\n\n return {\n ...state,\n leftAnswers: isLeft ? updatedAnswers : state.leftAnswers,\n rightAnswers: isLeft ? state.rightAnswers : updatedAnswers,\n isLeftAnswerBlocked: isLeft\n ? updatedAnswers.some(answer => answer.isSelected)\n : state.isLeftAnswerBlocked,\n isRightAnswerBlocked: isLeft\n ? state.isRightAnswerBlocked\n : updatedAnswers.some(answer => answer.isSelected),\n };\n }\n case RESET_MATCHED_ANSWERS_PAIR: {\n const leftMatchedAnswer = state.leftMatchedAnswers[selectedIndex];\n const rightMatchedAnswer = state.rightMatchedAnswers[selectedIndex];\n\n return {\n ...state,\n leftMatchedAnswers: state.leftMatchedAnswers.filter(\n matchedAnswer => matchedAnswer !== leftMatchedAnswer,\n ),\n rightMatchedAnswers: state.rightMatchedAnswers.filter(\n matchedAnswer => matchedAnswer !== rightMatchedAnswer,\n ),\n leftAnswers: [\n ...state.leftAnswers,\n {\n ...leftMatchedAnswer,\n isCorrectlyMatched: null,\n },\n ],\n rightAnswers: [\n ...state.rightAnswers,\n {\n ...rightMatchedAnswer,\n isCorrectlyMatched: null,\n },\n ],\n };\n }\n case CHECK_ANSWERS: {\n const updatedLeftMatchedAnswers = state.leftMatchedAnswers.map((matchedAnswer, index) => {\n return {\n ...matchedAnswer,\n isCorrectlyMatched: matchedAnswer.id === state.rightMatchedAnswers[index].id,\n };\n });\n\n const updatedRightMatchedAnswers = state.rightMatchedAnswers.map((matchedAnswer, index) => {\n return {\n ...matchedAnswer,\n isCorrectlyMatched: matchedAnswer.id === state.leftMatchedAnswers[index].id,\n };\n });\n\n const isAllMatchedCorrectly =\n updatedLeftMatchedAnswers.length === subInquiries.length &&\n updatedLeftMatchedAnswers.every(matchedAnswer => matchedAnswer.isCorrectlyMatched);\n\n return {\n ...state,\n leftMatchedAnswers: updatedLeftMatchedAnswers,\n rightMatchedAnswers: updatedRightMatchedAnswers,\n solvedWrongCounter: isAllMatchedCorrectly ? 0 : state.solvedWrongCounter + 1,\n isAllMatchedCorrectly,\n };\n }\n case SOLVE_ANSWERS: {\n const solvedMatchedAnswers = initialLeftAnswers.map(answer => {\n return {\n ...answer,\n isSolved: true,\n };\n });\n\n return {\n ...state,\n leftAnswers: [],\n rightAnswers: [],\n leftMatchedAnswers: solvedMatchedAnswers,\n rightMatchedAnswers: solvedMatchedAnswers,\n isSolvedCorrect: true,\n };\n }\n default:\n return state;\n }\n};\n","import { useEffect, useReducer } from 'react';\nimport { createGlobalStyle } from 'styled-components';\nimport { ManyToManyAnswer } from '../ManyToManyAnswer/ManyToManyAnswer';\nimport { I18nText } from '../../../../I18n/I18nText';\nimport {\n BLOCK_ANSWERS,\n CHECK_ANSWERS,\n SHUFFLE_RIGHT_ANSWERS,\n MATCH_ANSWERS_PAIR,\n reducer,\n RESET_MATCHED_ANSWERS_PAIR,\n SOLVE_ANSWERS,\n} from './manyToManyQuestionRowReducer';\nimport { LessonExerciseHint } from '../../LessonExerciseHint/LessonExerciseHint';\nimport { StyledSolveCheckButton } from '../../../../SolveCheckButton/SolveCheckButton';\nimport { useInquiryHandling } from '../../workflow/useInquiryHandling';\nimport { useAudio } from '../../../../../hooks/useAudio';\n\nconst ManyToManyQuetsionRowGlobalStyles = createGlobalStyle` \n /* @noflip */\n .alwaysLtr {\n text-align: left;\n direction: ltr;\n }\n \n /* @noflip */\n .pair-select-container .pairsToUse.used .right .btn {\n float: left;\n clear: left;\n }\n`;\n\nexport const ManyToManyQuestionRow = ({ inquiry }) => {\n const {\n id: inquiryId,\n inquiryText,\n inquiryDescription,\n subInquiries,\n mediaType,\n learningMetaInfo: { achievableScore },\n } = inquiry;\n const initialLeftAnswers = subInquiries.map(subInquiry => {\n return {\n ...subInquiry,\n isSelected: false,\n isCorrectlyMatched: null,\n isSolved: false,\n };\n });\n\n const [state, dispatch] = useReducer(reducer, {\n isLeftAnswerBlocked: false,\n isRightAnswerBlocked: false,\n leftAnswers: initialLeftAnswers,\n rightAnswers: initialLeftAnswers,\n leftMatchedAnswers: [],\n rightMatchedAnswers: [],\n isAllMatchedCorrectly: false,\n solvedWrongCounter: 0,\n isSolvedCorrect: false,\n });\n\n const {\n isSolveButtonDisabled,\n isCheckButtonDisabled,\n handleCorrectAnswer,\n handleWrongAnswer,\n handleSolved,\n isFromPlacementCourse,\n } = useInquiryHandling({\n inquiryId,\n achievableScore,\n });\n const { playWrongDefaultAudioFeedBack, playCorrectDefaultAudioFeedBack } = useAudio();\n\n useEffect(() => {\n if (state.isAllMatchedCorrectly) {\n handleCorrectAnswer();\n playCorrectDefaultAudioFeedBack();\n }\n if (state.isSolvedCorrect) {\n handleSolved();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.isAllMatchedCorrectly, state.isSolvedCorrect]);\n\n useEffect(() => {\n if (state.solvedWrongCounter > 0) {\n handleWrongAnswer();\n playWrongDefaultAudioFeedBack();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.solvedWrongCounter]);\n\n useEffect(() => {\n dispatch({\n type: SHUFFLE_RIGHT_ANSWERS,\n });\n }, []);\n\n const onAnswerClicked = (e, selectedId, isLeft) => {\n e.preventDefault();\n const isAnswerBlocked = isLeft ? state.isRightAnswerBlocked : state.isLeftAnswerBlocked;\n if (isAnswerBlocked || (state.solvedWrongCounter > 0 && isFromPlacementCourse)) {\n dispatch({\n type: MATCH_ANSWERS_PAIR,\n payload: {\n selectedId,\n isLeft,\n },\n });\n } else {\n dispatch({\n type: BLOCK_ANSWERS,\n payload: {\n selectedId,\n isLeft,\n },\n });\n }\n };\n\n const onMatchedAnswerClicked = (e, selectedIndex) => {\n e.preventDefault();\n if (\n state.leftMatchedAnswers[selectedIndex].isCorrectlyMatched ||\n state.leftMatchedAnswers[selectedIndex].isSolved ||\n (state.solvedWrongCounter > 0 && isFromPlacementCourse)\n ) {\n return;\n }\n\n dispatch({\n type: RESET_MATCHED_ANSWERS_PAIR,\n payload: {\n selectedIndex,\n },\n });\n };\n\n const onCheckClicked = e => {\n e.preventDefault();\n dispatch({\n type: CHECK_ANSWERS,\n payload: {\n subInquiries,\n },\n });\n };\n\n const onSolveClicked = e => {\n e.preventDefault();\n dispatch({\n type: SOLVE_ANSWERS,\n payload: {\n initialLeftAnswers,\n },\n });\n };\n\n return (\n
    \n
    \n \n
    {inquiryText}
    \n
    \n
    \n
    \n {state.leftAnswers.map(answer => (\n onAnswerClicked(e, answer.id, true)}\n />\n ))}\n
    \n
    \n {state.rightAnswers.map(answer => (\n onAnswerClicked(e, answer.alternatives[0].id, false)}\n />\n ))}\n
    \n
    \n \n
    \n
    \n {state.leftMatchedAnswers.map((matchedAnswer, index) => (\n onMatchedAnswerClicked(e, index)}\n />\n ))}\n
    \n
    \n {state.rightMatchedAnswers.map((matchedAnswer, index) => (\n onMatchedAnswerClicked(e, index)}\n />\n ))}\n
    \n
    \n
    \n
    \n {inquiryDescription && (\n
    \n \n
    \n )}\n onSolveClicked(e)}\n handleCheckClicked={e => onCheckClicked(e)}\n />\n
    \n );\n};\n","/* eslint-disable jsx-a11y/media-has-caption */\nimport { useParams } from 'react-router';\nimport { ManyToManyQuestionRow } from './ManyToManyQuestionRow/ManyToManyQuestionRow';\nimport { LessonExerciseTextInput } from '../LessonExerciseTextInput/LessonExerciseTextInput';\nimport { AudioProvider } from '../../../../context/AudioContext';\n\nexport const ManyToManyExercise = ({ data }) => {\n const { exerciseId } = useParams();\n const { inputText, inquiries } = data.content;\n\n return (\n \n \n
    \n {inquiries.map(inquiry => (\n \n ))}\n
    \n
    \n );\n};\n","export const ANSWER_STATE = Object.freeze({\n INITIAL: 'initial',\n SELECTED: 'selected',\n WRONG: 'wrong',\n CORRECT: 'correct',\n SOLVED: 'solved',\n});\n","/* eslint-disable jsx-a11y/role-supports-aria-props */\nimport { forwardRef } from 'react';\nimport { createGlobalStyle } from 'styled-components';\nimport { ANSWER_STATE } from '../answerState';\n\nconst LessonExerciseTextAnswerGlobalStyles = createGlobalStyle` \n /* @noflip */\n .alwaysLtr {\n text-align: left;\n direction: ltr;\n }\n`;\n\nexport const LessonExerciseTextAnswer = forwardRef(({ answer, handleAnswerClicked }, ref) => {\n const assignAnswerAriaLabel = ({ answerState }) => {\n switch (answerState) {\n case ANSWER_STATE.INITIAL:\n return 'Not selected';\n case ANSWER_STATE.SOLVED:\n case ANSWER_STATE.SELECTED:\n return 'Selected';\n case ANSWER_STATE.CORRECT:\n return 'Correct';\n case ANSWER_STATE.WRONG:\n return 'Wrong';\n default:\n // eslint-disable-next-line fp/no-throw\n throw new Error('invalid answerState');\n }\n };\n\n const getAnswerClass = ({ answerState }) => {\n switch (answerState) {\n case ANSWER_STATE.INITIAL:\n return '';\n case ANSWER_STATE.SELECTED:\n return 'selected';\n case ANSWER_STATE.CORRECT:\n return 'correct';\n case ANSWER_STATE.WRONG:\n return 'wrong';\n case ANSWER_STATE.SOLVED:\n return 'solved';\n default:\n // eslint-disable-next-line fp/no-throw\n throw new Error('invalid answerState');\n }\n };\n\n return (\n \n \n
    \n {answer.alternativeText}\n
    \n \n );\n});\n","/* eslint-disable jsx-a11y/role-supports-aria-props */\nimport { forwardRef } from 'react';\nimport { ANSWER_STATE } from '../answerState';\nimport { useFrontendConfig } from '../../../../../hooks/useFrontendConfig';\n\nexport const LessonExerciseImageAnswer = forwardRef(({ answer, handleAnswerClicked }, ref) => {\n const { imageBasePath } = useFrontendConfig();\n\n const assignAnswerClass = ({ answerState }) => {\n switch (answerState) {\n case ANSWER_STATE.INITIAL:\n return '';\n case ANSWER_STATE.SELECTED:\n return 'selected-image';\n case ANSWER_STATE.CORRECT:\n return 'correct-image';\n case ANSWER_STATE.WRONG:\n return 'wrong-image';\n case ANSWER_STATE.SOLVED:\n return 'solved-image';\n default:\n // eslint-disable-next-line fp/no-throw\n throw new Error('invalid answerState');\n }\n };\n\n return (\n \n \n \n );\n});\n","import gql from 'graphql-tag';\nimport { INQUIRY_MEDIA_TYPE } from '../../../../constants/inquiryMediaTypes';\nimport { LessonExerciseTextAnswer } from './LessonExerciseTextAnswer/LessonExerciseTextAnswer';\nimport { LessonExerciseImageAnswer } from './LessonExerciseImageAnswer/LessonExerciseImageAnswer';\n\nexport const lessonExerciseAnswerFragment = {\n name: 'LessonExerciseAnswer',\n fragment() {\n return gql`fragment ${this.name} on Inquiry {\n subInquiries {\n id\n subInquiryText: inquiryText\n subInquiryDescription: inquiryDescription\n images {\n id\n }\n alternatives {\n id\n alternativeText\n isCorrect\n images {\n id\n }\n }\n }\n } \n `;\n },\n};\n\nexport const ExerciseAnswer = ({ answerMediaType, answer, index, onAnswerClicked, addRef }) => {\n const Component =\n answerMediaType === INQUIRY_MEDIA_TYPE.TEXT.toLowerCase()\n ? LessonExerciseTextAnswer\n : LessonExerciseImageAnswer;\n return (\n onAnswerClicked(e, index)}\n ref={ref => {\n addRef(index, ref);\n }}\n />\n );\n};\n","import { useEffect, useRef } from 'react';\n\nexport const useIsMountedRef = () => {\n const isMountedRef = useRef(false);\n\n const setMounted = isMounted => {\n // eslint-disable-next-line fp/no-mutation\n isMountedRef.current = isMounted;\n };\n\n useEffect(() => {\n setMounted(true);\n return () => setMounted(false);\n });\n\n return isMountedRef;\n};\n","import { useEffect, useRef, useState } from 'react';\nimport { LessonExerciseHint } from '../LessonExerciseHint/LessonExerciseHint';\nimport { LessonExerciseQuestion } from '../LessonExerciseQuestion/LessonExerciseQuestion';\nimport { StyledSolveCheckButton } from '../../../SolveCheckButton/SolveCheckButton';\nimport { useInquiryHandling } from '../workflow/useInquiryHandling';\nimport { ANSWER_STATE } from '../LessonExerciseAnswer/answerState';\nimport { useAudio } from '../../../../hooks/useAudio';\nimport { findFeedbackAudio } from '../../../../utils/audioUtils';\nimport { LessonExerciseHiddenAudio } from '../LessonExerciseHiddenAudio/LessonExerciseHiddenAudio';\nimport { ExerciseAnswer } from '../LessonExerciseAnswer/ExerciseAnswer';\nimport { useIsMountedRef } from '../../../../hooks/useIsMountedRef';\n\nexport const MultiSelectionQuestionRow = ({ inquiry, exerciseId }) => {\n const {\n id: inquiryId,\n inquiryDescription,\n audios,\n subInquiries,\n mediaType,\n mainContentImage,\n learningMetaInfo: { achievableScore },\n } = inquiry;\n const isSolutionAudioFallbackMode = Boolean(mainContentImage);\n const correctAnswerAudio = findFeedbackAudio(isSolutionAudioFallbackMode, audios);\n const { target: answerAudio } = correctAnswerAudio || {};\n const { mp3Src: correctAnswerAudioUrl } = answerAudio || {};\n const { alternatives } = subInquiries[0];\n const answersRefArray = [];\n const answerMediaType = mediaType.toLowerCase();\n\n const [answersFrozen, setAnswersFrozen] = useState(false);\n const [answers, setAnswers] = useState(\n alternatives.map(alternative => {\n return {\n ...alternative,\n answerState: ANSWER_STATE.INITIAL,\n };\n }),\n );\n const {\n isSolveButtonDisabled,\n isCheckButtonDisabled,\n handleCorrectAnswer,\n handleWrongAnswer,\n handleSolved,\n isFromPlacementCourse,\n } = useInquiryHandling({\n inquiryId,\n achievableScore,\n });\n\n const { playWrongDefaultAudioFeedBack, playCorrectDefaultAudioFeedBack } = useAudio();\n const correctAnswerAudioRef = useRef();\n const answersRef = useRef(answers);\n const isMountedRef = useIsMountedRef();\n\n useEffect(() => {\n // eslint-disable-next-line fp/no-mutation\n answersRef.current = answers;\n });\n\n const selectOrUnselectAnswer = chosenAnswerIndex => {\n const updatedAnswers = answers.map((answer, index) => {\n if (index !== chosenAnswerIndex) {\n return answer;\n }\n const newAnswerState =\n answer.answerState === ANSWER_STATE.SELECTED ? ANSWER_STATE.INITIAL : ANSWER_STATE.SELECTED;\n return {\n ...answer,\n answerState: newAnswerState,\n };\n });\n setAnswers(updatedAnswers);\n };\n\n const isSolvedCorrectly = checkedAnswers => {\n const unsolvedOrWrongAnswers = checkedAnswers.filter(answer => {\n const { answerState, isCorrect } = answer;\n return (\n answerState === ANSWER_STATE.WRONG || (answerState === ANSWER_STATE.INITIAL && isCorrect)\n );\n });\n return unsolvedOrWrongAnswers.length === 0;\n };\n\n const updateAnswers = (answersToUpdate, answerStateEvalFn, skipAnswerConditionalFn) => {\n const updatedAnswers = answersToUpdate.map(answer => {\n if (skipAnswerConditionalFn && skipAnswerConditionalFn(answer) === true) {\n return answer;\n }\n return {\n ...answer,\n answerState: answerStateEvalFn(answer),\n };\n });\n setAnswers(updatedAnswers);\n return updatedAnswers;\n };\n\n const playSuccessAudio = () => {\n if (correctAnswerAudioUrl) {\n correctAnswerAudioRef.current.play();\n } else {\n playCorrectDefaultAudioFeedBack();\n }\n };\n\n const addRef = (index, ref) => {\n // eslint-disable-next-line fp/no-mutation\n answersRefArray[index] = ref;\n };\n\n const onAnswerClicked = (e, chosenAnswerIndex) => {\n e.preventDefault();\n if (answersFrozen) {\n return;\n }\n answersRefArray[chosenAnswerIndex].blur();\n selectOrUnselectAnswer(chosenAnswerIndex);\n };\n\n const onHandleSolveButtonClicked = () => {\n handleSolved();\n playSuccessAudio();\n updateAnswers(answers, answer =>\n answer.isCorrect ? ANSWER_STATE.SOLVED : ANSWER_STATE.INITIAL,\n );\n setAnswersFrozen(true);\n };\n\n const onHandleCheckButtonClicked = () => {\n const checkedAnswers = updateAnswers(\n answers,\n answer => (answer.isCorrect ? ANSWER_STATE.CORRECT : ANSWER_STATE.WRONG),\n answer => answer.answerState !== ANSWER_STATE.SELECTED,\n );\n\n if (isSolvedCorrectly(checkedAnswers)) {\n handleCorrectAnswer();\n playSuccessAudio();\n setAnswersFrozen(true);\n } else {\n handleWrongAnswer();\n if (isFromPlacementCourse) setAnswersFrozen(true);\n playWrongDefaultAudioFeedBack();\n setTimeout(() => {\n if (isMountedRef.current) {\n updateAnswers(answersRef.current, answer =>\n answer.answerState === ANSWER_STATE.WRONG && !isFromPlacementCourse\n ? ANSWER_STATE.INITIAL\n : answer.answerState,\n );\n }\n }, 3000);\n }\n };\n\n return (\n \n
    \n
    \n \n
    \n
    \n
    \n {answers.map((answer, index) => (\n \n ))}\n
    \n
    \n
    \n
    \n \n
    \n \n {correctAnswerAudioUrl && (\n \n )}\n \n );\n};\n","import { LessonExerciseTextInput } from '../LessonExerciseTextInput/LessonExerciseTextInput';\nimport { MultiSelectionQuestionRow } from './MultiSelectionQuestionRow';\nimport { AudioProvider } from '../../../../context/AudioContext';\n\nexport const MultiSelectionExercise = ({ data }) => {\n const { id, inputText, inquiries } = data.content;\n\n return (\n \n \n {inquiries.map(inquiry => (\n \n ))}\n \n );\n};\n","/* eslint-disable jsx-a11y/aria-role */\nimport { useTranslation } from '../../../../../hooks/useTranslation';\n\nexport const SelfAssessmentAnswer = ({ answer, handleAnswerClicked }) => {\n const { index, isSelected, label } = answer;\n const answerLabel = useTranslation(label);\n\n return (\n <>\n \n
    {answerLabel}
    \n \n \n );\n};\n","import { I18nText } from '../../../../I18n/I18nText';\nimport { LessonExerciseQuestionAudio } from '../../LessonExerciseQuestion/QuestionTypes/LessonExerciseQuestionAudio';\nimport { findFeedbackAudio } from '../../../../../utils/audioUtils';\nimport { useTranslation } from '../../../../../hooks/useTranslation';\nimport { useRtlContext } from '../../../../../hooks/useRtl';\n\nexport const SelfAssessmentQuestion = ({ audios, mainContentImage }) => {\n const { isRtl } = useRtlContext();\n\n const howWasItWithOnlyFeedbackAudio = useTranslation('exercise.howWasItWithOnlyFeedbackAudio');\n const howWasItLabel = useTranslation('exercise.howWasIt');\n\n const isSolutionAudioFallbackMode = Boolean(mainContentImage);\n const feedbackAudio = findFeedbackAudio(isSolutionAudioFallbackMode, audios);\n\n const feedbackAudioUrl = feedbackAudio ? feedbackAudio.target.mp3Src : null;\n\n const lessonExerciseQuestionAudio = () => {\n const hasOnlyFeedbackAudio =\n feedbackAudioUrl.includes('Loesungsaudio.mp3') && audios.length === 1;\n const audioLabel = hasOnlyFeedbackAudio ? howWasItWithOnlyFeedbackAudio : howWasItLabel;\n return ;\n };\n\n return (\n
    \n {feedbackAudioUrl ? (\n lessonExerciseQuestionAudio()\n ) : (\n
    \n \n
    \n )}\n
    \n );\n};\n","import { useState } from 'react';\nimport { SelfAssessmentAnswer } from './SelfAssessmentAnswer';\nimport { SelfAssessmentQuestion } from './SelfAssessmentQuestion';\nimport { useInquiryHandling } from '../../workflow/useInquiryHandling';\n\nexport const SelfAssessment = ({ inquiry }) => {\n const {\n audios,\n mainContentImage,\n learningMetaInfo: { achievableScore },\n id: inquiryId,\n } = inquiry;\n const fixedAnswers = [\n { label: 'exercise.02', index: 1, isSelected: false },\n { label: 'exercise.01', index: 0, isSelected: false },\n ];\n\n const { handleCorrectAnswer, handleWrongAnswer } = useInquiryHandling({\n inquiryId,\n achievableScore,\n });\n\n const [answersFrozen, setAnswersFrozen] = useState(false);\n const [answers, setSelected] = useState(fixedAnswers);\n\n const updateSelected = selectedIndex => {\n const updatedAnswers = answers.map((answer, index) => {\n return {\n ...answer,\n isSelected: index === selectedIndex ? true : answer.isSelected,\n };\n });\n\n setSelected(updatedAnswers);\n };\n\n const evaluateAnswer = selectedIndex => {\n if (selectedIndex === 0) {\n handleCorrectAnswer();\n } else {\n handleWrongAnswer();\n }\n };\n\n const onAnswerClicked = (e, index) => {\n e.preventDefault();\n\n if (answersFrozen) {\n return;\n }\n\n evaluateAnswer(index);\n updateSelected(index);\n setAnswersFrozen(true);\n };\n\n return (\n \n
    \n \n
    \n
    \n {answers.map((answer, index) => (\n onAnswerClicked(e, index)}\n />\n ))}\n
    \n
    \n
    \n \n );\n};\n","import { createGlobalStyle } from 'styled-components';\nimport { LessonExerciseHint } from '../LessonExerciseHint/LessonExerciseHint';\nimport { LessonExerciseQuestion } from '../LessonExerciseQuestion/LessonExerciseQuestion';\nimport { SelfAssessment } from './SelfAssessment/SelfAssessment';\n\nexport const RepeatExerciseRowGlobalStyles = createGlobalStyle`\n /* @noflip */\n .answer {\n direction: ltr;\n text-align: left;\n }\n`;\n\nexport const RepeatExerciseRow = ({ inquiry }) => {\n const { inquiryDescription, subInquiries } = inquiry;\n const { subInquiryDescription } = subInquiries[0];\n\n return (\n <>\n
    \n
    \n
    \n \n
    \n
    \n \n {subInquiryDescription &&
    {subInquiryDescription}
    }\n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n \n );\n};\n","import { AudioProvider } from '../../../../context/AudioContext';\nimport { LessonExerciseTextInput } from '../LessonExerciseTextInput/LessonExerciseTextInput';\nimport { RepeatExerciseRow } from './RepeatExerciseRow';\n\nexport const RepeatExercise = ({ data }) => {\n const { inputText, inquiries } = data.content;\n return (\n \n \n {inquiries.map(inquiry => (\n \n ))}\n \n );\n};\n","import { useEffect, useRef, useState } from 'react';\nimport { LessonExerciseHiddenAudio } from '../../LessonExerciseHiddenAudio/LessonExerciseHiddenAudio';\nimport { LessonExerciseHint } from '../../LessonExerciseHint/LessonExerciseHint';\nimport { LessonExerciseQuestion } from '../../LessonExerciseQuestion/LessonExerciseQuestion';\nimport { findFeedbackAudio } from '../../../../../utils/audioUtils';\nimport { useAudio } from '../../../../../hooks/useAudio';\nimport { useInquiryHandling } from '../../workflow/useInquiryHandling';\nimport { ANSWER_STATE } from '../../LessonExerciseAnswer/answerState';\nimport { ExerciseAnswer } from '../../LessonExerciseAnswer/ExerciseAnswer';\nimport { useIsMountedRef } from '../../../../../hooks/useIsMountedRef';\n\nexport const SingleSelectionQuestionRow = ({ exerciseId, inquiry }) => {\n const {\n id: inquiryId,\n inquiryDescription,\n audios,\n subInquiries,\n mainContentImage,\n learningMetaInfo: { achievableScore },\n } = inquiry;\n const isSolutionAudioFallbackMode = Boolean(mainContentImage);\n const correctAnswerAudio = findFeedbackAudio(isSolutionAudioFallbackMode, audios);\n const { target: answerAudio } = correctAnswerAudio || {};\n const { mp3Src: correctAnswerAudioUrl } = answerAudio || {};\n const { alternatives } = subInquiries[0];\n const answerMediaType = inquiry.mediaType.toLowerCase();\n const answersRefArray = [];\n\n const [answersFrozen, setAnswersFrozen] = useState(false);\n const [answers, setAnswers] = useState(\n alternatives.map(alternative => {\n return {\n ...alternative,\n answerState: ANSWER_STATE.INITIAL,\n };\n }),\n );\n const { playWrongDefaultAudioFeedBack, playCorrectDefaultAudioFeedBack } = useAudio();\n const correctAnswerAudioRef = useRef();\n const answersRef = useRef(answers);\n const { handleCorrectAnswer, handleWrongAnswer, isFromPlacementCourse } = useInquiryHandling({\n inquiryId,\n achievableScore,\n });\n const isMountedRef = useIsMountedRef();\n\n useEffect(() => {\n // eslint-disable-next-line fp/no-mutation\n answersRef.current = answers;\n });\n\n const getAnswerState = ({ index, chosenAnswerIndex, selectCurrentAnswer, answer }) => {\n const { answerState, isCorrect } = answer;\n if (index === chosenAnswerIndex) {\n if (selectCurrentAnswer) {\n return isCorrect ? ANSWER_STATE.CORRECT : ANSWER_STATE.WRONG;\n }\n return ANSWER_STATE.INITIAL;\n }\n return answerState;\n };\n\n const updateAnswers = (chosenAnswerIndex, selectCurrentAnswer) => {\n const answersCopy = selectCurrentAnswer ? [...answers] : [...answersRef.current];\n const updatedAnswers = answersCopy.map((answer, index) => {\n return {\n ...answer,\n answerState: getAnswerState({ index, chosenAnswerIndex, selectCurrentAnswer, answer }),\n };\n });\n setAnswers(updatedAnswers);\n };\n\n const addRef = (index, ref) => {\n // eslint-disable-next-line fp/no-mutation\n answersRefArray[index] = ref;\n };\n\n const onAnswerClicked = (e, chosenAnswerIndex) => {\n e.preventDefault();\n answersRefArray[chosenAnswerIndex].blur();\n if (answersFrozen) {\n return;\n }\n updateAnswers(chosenAnswerIndex, true);\n\n if (answers[chosenAnswerIndex].isCorrect) {\n handleCorrectAnswer();\n setAnswersFrozen(true);\n if (correctAnswerAudioUrl) {\n correctAnswerAudioRef.current.play();\n } else {\n playCorrectDefaultAudioFeedBack();\n }\n } else {\n handleWrongAnswer();\n if (isFromPlacementCourse) setAnswersFrozen(true);\n playWrongDefaultAudioFeedBack();\n setTimeout(() => {\n if (isMountedRef.current) {\n updateAnswers(chosenAnswerIndex, isFromPlacementCourse);\n }\n }, 3000);\n }\n };\n\n return (\n \n
    \n
    \n \n
    \n
    \n
    \n {answers.map((answer, index) => (\n \n ))}\n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n {correctAnswerAudioUrl && (\n \n )}\n \n );\n};\n","import { SingleSelectionQuestionRow } from './SingleSelectionQuestionRow/SingleSelectionQuestionRow';\nimport { LessonExerciseTextInput } from '../LessonExerciseTextInput/LessonExerciseTextInput';\nimport { AudioProvider } from '../../../../context/AudioContext';\n\nexport const SingleSelectionExercise = ({ data }) => {\n const { id, inputText, inquiries } = data.content;\n\n return (\n \n \n {inquiries.map(inquiry => (\n \n ))}\n \n );\n};\n","/* eslint-disable jsx-a11y/anchor-is-valid,jsx-a11y/aria-role */\nimport gql from 'graphql-tag';\nimport { useRef, useState, useEffect } from 'react';\nimport { createGlobalStyle } from 'styled-components';\nimport { useFrontendConfig } from '../../../../hooks/useFrontendConfig';\nimport { LessonExerciseQuestion } from '../LessonExerciseQuestion/LessonExerciseQuestion';\nimport { LessonExerciseHint } from '../LessonExerciseHint/LessonExerciseHint';\nimport { LessonExerciseHiddenAudio } from '../LessonExerciseHiddenAudio/LessonExerciseHiddenAudio';\nimport { StyledSolveCheckButton } from '../../../SolveCheckButton/SolveCheckButton';\nimport { INQUIRY_MEDIA_TYPE } from '../../../../constants/inquiryMediaTypes';\nimport { findFeedbackAudio } from '../../../../utils/audioUtils';\nimport { shuffle, sortObjectsByProp } from '../../../../utils/commons';\nimport { useInquiryHandling } from '../workflow/useInquiryHandling';\nimport { useAudio } from '../../../../hooks/useAudio';\nimport { INQUIRY_STATE } from '../workflow/inquiryState';\n\nexport const sortingExerciseFragment = {\n name: 'SortingExercise',\n fragment() {\n return gql`fragment ${this.name} on Inquiry {\n alternatives {\n id \n order\n alternativeText\n contentLinks {\n targetId\n }\n }\n } \n `;\n },\n};\n\nconst SortingExerciseRowAnswerGlobalStyles = createGlobalStyle` \n /* @noflip */\n .dotted-outline {\n text-align: left;\n direction: ltr;\n }\n`;\n\nexport const SortingExerciseRow = ({ inquiry }) => {\n const {\n alternatives,\n audios,\n id: inquiryId,\n inquiryDescription,\n mainContentImage,\n learningMetaInfo: { achievableScore },\n } = inquiry;\n const answerType = inquiry.mediaType.toLowerCase();\n\n const isSolutionAudioFallbackMode = Boolean(mainContentImage);\n const feedbackAudio = findFeedbackAudio(isSolutionAudioFallbackMode, audios);\n const { target: answerAudio } = feedbackAudio || {};\n const { mp3Src: feedbackAudioUrl } = answerAudio || {};\n const { imageBasePath } = useFrontendConfig();\n\n const feedbackAudioRef = useRef();\n const { playWrongDefaultAudioFeedBack, playCorrectDefaultAudioFeedBack } = useAudio();\n\n const {\n isSolveButtonDisabled,\n isCheckButtonDisabled,\n handleCorrectAnswer,\n handleWrongAnswer,\n handleSolved,\n inquiryState,\n isDisabled,\n } = useInquiryHandling({ inquiryId, achievableScore });\n\n const [choosenAnswers, setChoosenAnswers] = useState([]);\n const [selectableAnswers, setSelectableAnswers] = useState(alternatives);\n\n useEffect(() => {\n setSelectableAnswers(answers =>\n shuffle(answers.slice(0)).map(alternative => {\n return {\n ...alternative,\n isSelected: false,\n };\n }),\n );\n }, []);\n\n const isCorrectOrder = (value, index) => value.order === index + 1;\n\n const isDuplicatedValue = (value, index) =>\n value.alternativeText === alternatives[index].alternativeText;\n\n const isCorrect =\n choosenAnswers.length &&\n choosenAnswers.every(\n (value, index) => isCorrectOrder(value, index) || isDuplicatedValue(value, index),\n );\n\n const playCorrectAudio = () =>\n feedbackAudioUrl ? feedbackAudioRef.current.play() : playCorrectDefaultAudioFeedBack();\n\n const onHandleSolveButtonClicked = () => {\n setChoosenAnswers(sortObjectsByProp(alternatives, 'order'));\n setSelectableAnswers([]);\n playCorrectAudio();\n handleSolved();\n };\n\n const onHandleCheckButtonClicked = () => {\n if (isCorrect) {\n handleCorrectAnswer();\n playCorrectAudio();\n } else {\n handleWrongAnswer();\n playWrongDefaultAudioFeedBack();\n }\n };\n\n const onAnswerClicked = (e, selectedAnswer) => {\n e.preventDefault();\n if (isDisabled()) {\n return;\n }\n\n const updateSelection = {\n ...selectedAnswer,\n isSelected: !selectedAnswer.isSelected,\n };\n\n if (selectedAnswer.isSelected) {\n setSelectableAnswers(currentSelectableAnswers => [\n updateSelection,\n ...currentSelectableAnswers,\n ]);\n setChoosenAnswers(choosenAnswers.filter(answer => answer.id !== updateSelection.id));\n } else {\n setChoosenAnswers(currentChoosenAnswers => [...currentChoosenAnswers, updateSelection]);\n setSelectableAnswers(selectableAnswers.filter(answer => answer.id !== updateSelection.id));\n }\n };\n\n const getAnswerLink = (type, answer) => {\n const { alternativeText, contentLinks } = answer;\n const answerID = answer.id;\n const isInquiryMediaTypeText = type === INQUIRY_MEDIA_TYPE.TEXT.toLowerCase();\n const classType = isInquiryMediaTypeText ? 'btn' : 'image';\n const answerContent = isInquiryMediaTypeText ? (\n alternativeText\n ) : (\n \n );\n\n return (\n onAnswerClicked(e, answer)}\n href=\"#\"\n className={`btn answer-sorting-${classType} alwaysLtr`}\n aria-selected={answer.isSelected}\n data-exercise-answer-id={answerID}\n >\n \n {answerContent}\n \n );\n };\n\n function getFeedbackClass() {\n switch (inquiryState) {\n case INQUIRY_STATE.WRONG:\n return 'wrong-outline';\n case INQUIRY_STATE.CORRECT:\n return 'correct-outline';\n case INQUIRY_STATE.SOLVED:\n case INQUIRY_STATE.INITIAL:\n default:\n return '';\n }\n }\n return (\n <>\n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n {choosenAnswers.map(answer => getAnswerLink(answerType, answer))}\n
    \n
    \n
    \n {selectableAnswers.map(answer => getAnswerLink(answerType, answer))}\n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n \n );\n};\n","import { AudioProvider } from '../../../../context/AudioContext';\nimport { LessonExerciseTextInput } from '../LessonExerciseTextInput/LessonExerciseTextInput';\nimport { SortingExerciseRow } from './SortingExerciseRow';\n\nexport const SortingExercise = ({ data }) => {\n const { inputText, inquiries } = data.content;\n return (\n \n \n {inquiries.map(inquiry => (\n \n ))}\n \n );\n};\n","import { Prompt } from 'react-router-dom';\nimport { useBeforeunload } from 'react-beforeunload';\nimport { useTranslation } from '../../../../hooks/useTranslation';\nimport { isPathInExerciseNavigationWhiteList } from '../../../../utils/url/urlUtils';\n\nexport const ExerciseLeavingPrompt = () => {\n useBeforeunload(event => {\n event.preventDefault();\n });\n\n const leaveMessage = useTranslation('client.exercise.interrupt');\n return (\n {\n if (action === 'POP') {\n return leaveMessage;\n }\n return isPathInExerciseNavigationWhiteList(location.pathname) ? true : leaveMessage;\n }}\n />\n );\n};\n","import { ContentNavTitle } from './ContentNavTitle/ContentNavTitle';\n\nexport const ContentContainer = ({ title, children }) => (\n
    \n \n {children}\n \n
    \n);\n","export const ContentBottomLine = () => (\n
    \n
    \n
    \n);\n","import styled from 'styled-components';\nimport { useRef } from 'react';\nimport { useToggle } from '../../hooks/useToggle';\nimport { StyledToggleableArrow as ToggleableArrow } from '../ToggleableArrow/ToggleableArrow';\nimport { colors } from '../../utils/css';\nimport { useTranslation } from '../../hooks/useTranslation';\n\nexport const AccordionContainer = ({ title, children, className }) => {\n const element = useRef(null);\n const [isOpen, { toggleOnClick }] = useToggle();\n const height = element.current ? element.current.scrollHeight : '0';\n const titleTranslation = useTranslation(title);\n\n return (\n
    \n
    \n
    \n \n
    \n
    \n \n {children}\n \n
    \n );\n};\n\nexport const AccordionContainerContent = styled.div`\n max-height: ${({ isOpen, height }) => (isOpen ? height : '1')}px;\n overflow: hidden;\n background-color: ${colors.LG_WHITE};\n transition: max-height 0.7s;\n margin-bottom: 20px;\n`;\n\nexport const StyledAccordionContainer = styled(AccordionContainer)`\n button {\n outline: none;\n padding: 0;\n display: flex;\n position: relative;\n cursor: pointer;\n border: none;\n background-color: ${colors.LG_WHITE};\n width: 10em;\n }\n .toggleable-arrow {\n position: relative;\n top: 0.1em;\n margin-left: 0.2em;\n width: 20px;\n height: 17px;\n }\n`;\n","import gql from 'graphql-tag';\nimport { createGlobalStyle } from 'styled-components';\nimport { RichText } from '../RichText/RichText';\nimport { useKnowledgePlaceholderReplacementEffect } from '../Modal/KnowledgeModal/useKnowledgePlaceholderReplacementEffect';\nimport { ContentContainer } from '../ContentContainer/ContentContainer';\nimport { ContentBottomLine } from '../ContentContainer/ContentBottomLine/ContentBottomLine';\nimport { StyledAccordionContainer as AccordionContainer } from '../ContentContainer/AccordionContainer';\n\nexport const manuscriptFragment = gql`\n fragment LessonManuscript on Lesson {\n id\n manuscript\n }\n`;\n\nconst ManuscriptGlobalStyles = createGlobalStyle`\n /* @noflip */\n .alwaysLtr {\n text-align: left;\n }\n`;\n\nexport const Manuscript = ({ content, isStandalone = true }) => {\n const { knowledges, manuscript } = content;\n const ContainerComponent = isStandalone ? ContentContainer : AccordionContainer;\n\n useKnowledgePlaceholderReplacementEffect({ knowledges, ignore: !isStandalone });\n\n return (\n \n \n
    \n
    \n \n
    \n
    \n \n
    \n );\n};\n","import gql from 'graphql-tag';\nimport { ContentNavTitle } from '../../../ContentContainer/ContentNavTitle/ContentNavTitle';\nimport { LessonExerciseHeadline } from '../LessonExerciseHeadline/LessonExerciseHeadline';\nimport { ClozeExercise, clozeExerciseFragment } from '../ClozeExercise/ClozeExercise';\nimport { DictationExercise } from '../DictationExercise/DictationExercise';\nimport { ManyToManyExercise } from '../ManyToManyExercise/ManyToManyExercise';\nimport { MediaInputVideo } from '../../../MediaInput/MediaInputVideo/MediaInputVideo';\nimport { MediaInputImage } from '../../../MediaInput/MediaInputImage/MediaInputImage';\nimport { MediaInputAudio } from '../../../MediaInput/MediaInputAudio/MediaInputAudio';\nimport { MultiSelectionExercise } from '../MultiSelectionExercise/MultiSelectionExercise';\nimport { RepeatExercise } from '../RepeatExercise/RepeatExercise';\nimport { SingleSelectionExercise } from '../SingleSelectionExercise/SingleSelectionExercise';\nimport { SortingExercise } from '../SortingExercise/SortingExercise';\nimport { useKnowledgePlaceholderReplacementEffect } from '../../../Modal/KnowledgeModal/useKnowledgePlaceholderReplacementEffect';\nimport { lessonExerciseAnswerFragment } from '../LessonExerciseAnswer/ExerciseAnswer';\nimport { lessonExerciseQuestionFragment } from '../LessonExerciseQuestion/LessonExerciseQuestion';\nimport { sortingExerciseFragment } from '../SortingExercise/SortingExerciseRow';\nimport { ExerciseLeavingPrompt } from './ExerciseLeavingPrompt';\nimport { Manuscript } from '../../../Manuscript/Manuscript';\n\nexport const lessonExerciseItemFragment = {\n name: 'LessonExerciseItem',\n fragment() {\n return gql`fragment ${this.name} on Inquiry {\n id\n inquiryDescription\n inquiryType\n selectionType\n sortingType\n mediaType\n learningMetaInfo {\n achievableScore\n }\n ...${lessonExerciseAnswerFragment.name}\n ...${lessonExerciseQuestionFragment.name}\n ...${sortingExerciseFragment.name}\n ...${clozeExerciseFragment.name}\n }\n \n ${lessonExerciseQuestionFragment.fragment()}\n ${lessonExerciseAnswerFragment.fragment()}\n ${sortingExerciseFragment.fragment()}\n ${clozeExerciseFragment.fragment()} \n `;\n },\n};\n\nexport const getExerciseComponentBySelectionType = (selectionType, data) => {\n switch (selectionType) {\n case 'SINGLE':\n return ;\n case 'DIRECT':\n return ;\n case 'MULTIPLE':\n return ;\n default:\n return null;\n }\n};\n\nexport const getExerciseComponentByType = data => {\n const { inquiryType, selectionType } = data.content.inquiries[0];\n switch (inquiryType) {\n case 'ASSOCIATION':\n return getExerciseComponentBySelectionType(selectionType, data);\n case 'DICTATION':\n return ;\n case 'REPEAT':\n return ;\n case 'CLOZE':\n return ;\n case 'SORTING':\n return ;\n default:\n return 'OTHER EXERCISE TYPE PLACEHOLDER';\n }\n};\n\nexport const getExerciseMediaInputComponentByType = data => {\n const { inputType } = data.content;\n switch (inputType) {\n case 'NONE':\n return null;\n case 'TEXT':\n return null;\n case 'IMAGE':\n return ;\n case 'AUDIO':\n return (\n
    \n \n
    \n );\n case 'VIDEO':\n return (\n
    \n \n
    \n );\n default:\n return null;\n }\n};\n\nexport const LessonExerciseItem = ({ data, exerciseCounter, manuscriptContent }) => {\n const contentComponent = getExerciseComponentByType(data);\n const mediaInputComponent = getExerciseMediaInputComponentByType(data);\n\n useKnowledgePlaceholderReplacementEffect({\n knowledges: [...data.content.knowledges, ...manuscriptContent.knowledges],\n });\n\n return (\n <>\n \n {mediaInputComponent && (\n
    \n
    {mediaInputComponent}
    \n
    \n )}\n \n \n {manuscriptContent.manuscript && (\n \n )}\n {contentComponent}\n \n );\n};\n","export const SET_IMPROVE_MODE_FOR_LESSON = 'SET_IMPROVE_MODE_FOR_LESSON';\nexport const REMOVE_IMPROVE_MODE_FOR_LESSON = 'REMOVE_IMPROVE_MODE_FOR_LESSON';\n\nexport const LESSON_EXERCISE_MODE = Object.freeze({\n IMPROVE: 'IMPROVE',\n});\n\n// actions\nexport const setImproveMode = cosLessonId => ({\n type: SET_IMPROVE_MODE_FOR_LESSON,\n payload: cosLessonId,\n});\n\nexport const removeImproveMode = cosLessonId => ({\n type: REMOVE_IMPROVE_MODE_FOR_LESSON,\n payload: cosLessonId,\n});\n\n// helpers\nconst findExistingLesson = ({ cosLessonId, lessons }) => {\n return lessons.find(lesson => lesson.cosLessonId === cosLessonId);\n};\n\nconst addLessonMode = ({ cosLessonId, lessons }) => {\n const existingLesson = findExistingLesson({ cosLessonId, lessons });\n if (existingLesson) {\n const otherLessons = lessons.filter(lesson => lesson.cosLessonId !== cosLessonId);\n return [...otherLessons, { cosLessonId, mode: LESSON_EXERCISE_MODE.IMPROVE }];\n }\n return [...lessons, { cosLessonId, mode: LESSON_EXERCISE_MODE.IMPROVE }];\n};\n\nconst removeLessonMode = ({ cosLessonId, lessons }) => {\n const existingLesson = findExistingLesson({ cosLessonId, lessons });\n if (existingLesson) {\n const otherLessons = lessons.filter(lesson => lesson.cosLessonId !== cosLessonId);\n return [...otherLessons];\n }\n return [...lessons];\n};\n\n// state\nconst initialState = [];\n\n// reducer\nexport const lessonExerciseModeReducer = (state = initialState, action) => {\n switch (action.type) {\n case SET_IMPROVE_MODE_FOR_LESSON:\n return addLessonMode({ cosLessonId: action.payload, lessons: state });\n case REMOVE_IMPROVE_MODE_FOR_LESSON:\n return removeLessonMode({ cosLessonId: action.payload, lessons: state });\n default:\n return state;\n }\n};\n","import { LESSON_EXERCISE_MODE } from './lessonExerciseModeDuck';\n\nexport const isLessonInImproveModeSelector = lessonId => state => {\n return state.lessonExerciseMode.some(\n item => item.cosLessonId === lessonId && item.mode === LESSON_EXERCISE_MODE.IMPROVE,\n );\n};\n","import { useSelector } from 'react-redux';\nimport { useParams } from 'react-router';\nimport {\n findInquiryLearnProgressSelector,\n findLessonLearnProgressSelector,\n} from '../state/progress/learnProgressSelectors';\nimport {\n createLinkToResultPage,\n getLessonExerciseUrl,\n getLessonUrl,\n} from '../utils/url/urlFactory';\nimport { normalizeUrlName } from '../utils/url/url';\nimport { isLessonInImproveModeSelector } from '../state/mode/lessonExerciseModeSelectors';\n\nexport const useExerciseManager = ({\n lessonName,\n lessonExerciseOverviewItems,\n courseId,\n isFinalTest,\n}) => {\n const { langCode, lessonId, exerciseId } = useParams();\n const lessonProgress = useSelector(findLessonLearnProgressSelector(+lessonId));\n const isLessonInImproveMode = useSelector(isLessonInImproveModeSelector(+lessonId));\n const inquiryProgresses = useSelector(findInquiryLearnProgressSelector(+lessonId, +exerciseId));\n\n const generateNextExercisePath = nextItem => {\n if (!nextItem) {\n return undefined;\n }\n\n return getLessonExerciseUrl(\n langCode,\n lessonId,\n normalizeUrlName(nextItem.exerciseName),\n nextItem.exerciseId,\n );\n };\n\n const mapToFlatLessonExercises = lessonExerciseItems => {\n return lessonExerciseItems.map(item => ({\n exerciseId: item.targetId,\n exerciseName: item.target.name,\n }));\n };\n\n const filterExercisesWithNoFullScore = lessonExercises => {\n return lessonExercises.filter(lessonExercise => {\n const existingProgress = lessonProgress.exerciseProgresses.find(\n exerciseProgress => exerciseProgress.cosExerciseId === lessonExercise.exerciseId,\n );\n if (!existingProgress) {\n return true;\n }\n return existingProgress.maxPoints !== existingProgress.resultPoints;\n });\n };\n\n const getFirstExercisePath = isImproveMode => {\n const lessonExercises = mapToFlatLessonExercises(lessonExerciseOverviewItems);\n\n if (!lessonProgress || isFinalTest) {\n return getLessonExerciseUrl(\n langCode,\n lessonId,\n normalizeUrlName(lessonExercises[0].exerciseName),\n lessonExercises[0].exerciseId,\n );\n }\n\n // eslint-disable-next-line fp/no-let\n let firstExerciseItem;\n if (isLessonInImproveMode || isImproveMode) {\n const exercisesWithNoFullScore = filterExercisesWithNoFullScore(lessonExercises);\n // eslint-disable-next-line fp/no-mutation,prefer-destructuring\n firstExerciseItem = exercisesWithNoFullScore[0];\n } else {\n const exerciseIdsWithProgress = lessonProgress.exerciseProgresses.map(\n exerciseProgress => exerciseProgress.cosExerciseId,\n );\n // eslint-disable-next-line fp/no-mutation\n firstExerciseItem = lessonExercises.find(\n exercise => !exerciseIdsWithProgress.includes(exercise.exerciseId),\n );\n }\n\n if (firstExerciseItem) {\n return getLessonExerciseUrl(\n langCode,\n lessonId,\n normalizeUrlName(firstExerciseItem.exerciseName),\n firstExerciseItem.exerciseId,\n );\n }\n\n const lessonPath = getLessonUrl(lessonId, langCode, normalizeUrlName(lessonName));\n return createLinkToResultPage({ courseId, isFinalTest, lessonPath });\n };\n\n const getCurrentIndex = () => {\n const currentExerciseItem = lessonExerciseOverviewItems.find(\n item => item.targetId === +exerciseId,\n );\n return lessonExerciseOverviewItems.indexOf(currentExerciseItem);\n };\n\n const getNextExercisePath = () => {\n const lessonExercises = mapToFlatLessonExercises(lessonExerciseOverviewItems);\n\n if (isLessonInImproveMode) {\n // eslint-disable-next-line fp/no-mutating-methods\n const remainingLessonExercises = [...lessonExercises].splice(getCurrentIndex() + 1);\n const remainingExercisesWithNoFullScore = filterExercisesWithNoFullScore(\n remainingLessonExercises,\n );\n const [nextItem] = remainingExercisesWithNoFullScore;\n return generateNextExercisePath(nextItem);\n }\n const nextItem = lessonExercises[getCurrentIndex() + 1];\n return generateNextExercisePath(nextItem);\n };\n\n const getFullScoreAchieved = () => {\n if (!lessonProgress) {\n return false;\n }\n return lessonProgress.maxPointsForAllExercises === lessonProgress.resultPoints;\n };\n\n const filterExercises = data => {\n if (!isLessonInImproveMode) {\n return data;\n }\n\n const {\n content,\n content: { inquiries = [] },\n } = data;\n\n const remainingInquiries = inquiries.filter(inquiry => {\n const existingProgress = inquiryProgresses.find(\n inquiryProgress => inquiryProgress.inquiryId === inquiry.id,\n );\n return !existingProgress || existingProgress.score !== existingProgress.maxScore;\n });\n\n return { content: { ...content, inquiries: remainingInquiries } };\n };\n\n return {\n firstExerciseLink: isImproveMode => getFirstExercisePath(isImproveMode),\n nextExerciseLink: () => getNextExercisePath(),\n isFullScoreAchieved: () => getFullScoreAchieved(),\n currentExerciseCount: getCurrentIndex() + 1,\n allExerciseCount: lessonExerciseOverviewItems.length,\n filterExerciseDataIfInImproveMode: data => filterExercises(data),\n };\n};\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { useEffect } from 'react';\nimport gql from 'graphql-tag';\nimport { useHistory, useParams } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { LessonExerciseStats } from '../LessonExerciseStats/LessonExerciseStats';\nimport { useScrollToTop } from '../../../../hooks/useScrollToTop';\nimport { ContentNavTitle } from '../../../ContentContainer/ContentNavTitle/ContentNavTitle';\nimport { StyledStandardButton } from '../../../StandardButton/StandardButton';\nimport { knowledgesFragment } from '../../LessonKnowledge/LessonKnowledge';\nimport {\n LessonExerciseItem,\n lessonExerciseItemFragment,\n} from '../LessonExerciseItem/LessonExerciseItem';\nimport { normalizeUrlName } from '../../../../utils/url/url';\nimport { createLinkToResultPage, getLessonUrl } from '../../../../utils/url/urlFactory';\nimport { WithGraphQLQueryHandling } from '../../../WithGraphQLQueryHandling/WithGraphQLQueryHandling';\nimport { lessonExerciseHeadlineFragment } from '../LessonExerciseHeadline/LessonExerciseHeadline';\nimport { useExerciseProgress } from '../workflow/ExerciseProgress';\nimport {\n addLessonProgress,\n readLessonProgress,\n} from '../../../../state/progress/learnProgressDuck';\nimport { createLearnProgressData, scoreFragment } from '../../../../state/progress/learnProgress';\nimport { mediaInputChooserFragment } from '../../MediaInputChooser/MediaInputChooser';\nimport { useExerciseManager } from '../../../../hooks/useExerciseManager';\nimport { isLessonInImproveModeSelector } from '../../../../state/mode/lessonExerciseModeSelectors';\nimport { userDataSelector } from '../../../../state/user/userSelectors';\nimport { metaDataFragment, PageMetaData } from '../../../Page/PageMetaData';\nimport { PAGE_TYPES } from '../../../../constants/pageTypes';\nimport {\n gtmDataLayerFragment,\n GtmScriptWithDataLayer,\n} from '../../../GoogleTagManager/GtmScriptWithDataLayer';\n\nexport const lessonExerciseQuery = ({ handicap }) => gql`\n query LessonExercise($exerciseId: Int!, $lessonLang: Language!) {\n content(id: $exerciseId, lang: $lessonLang) {\n ... on Exercise {\n id\n name\n inputType\n inputText\n images {\n id\n }\n inquiries {\n ...${lessonExerciseItemFragment.name}\n }\n ...${lessonExerciseHeadlineFragment.name}\n ...ExerciseMediaInputChooser\n ...${`ExerciseScore${handicap || ''}`}\n ...ExerciseKnowledges\n ...${metaDataFragment.name}\n ${gtmDataLayerFragment.partial()}\n }\n }\n }\n ${lessonExerciseHeadlineFragment.fragment()}\n ${lessonExerciseItemFragment.fragment()}\n ${mediaInputChooserFragment.fragment({ type: 'Exercise' })}\n ${scoreFragment.fragment({ type: 'Exercise', handicap })}\n ${knowledgesFragment.fragment({ type: 'Exercise' })}\n ${metaDataFragment.fragment({ type: 'Exercise' })}\n`;\n\nexport const LessonExerciseNavigation = ({\n lessonExerciseOverviewItems,\n lessonLang,\n lessonName,\n lessonAchievableScore,\n courseId,\n manuscriptContent,\n isFinalTest,\n}) => {\n useScrollToTop();\n const history = useHistory();\n const { langCode, lessonId, exerciseId } = useParams();\n const { exerciseProgress, resetProgress } = useExerciseProgress();\n const { handicap } = useSelector(userDataSelector) || {};\n const dispatch = useDispatch();\n const lessonIdNumber = +lessonId;\n const exerciseIdNumber = +exerciseId;\n\n const isLessonInImproveMode = useSelector(isLessonInImproveModeSelector(lessonIdNumber));\n\n const {\n nextExerciseLink,\n currentExerciseCount,\n allExerciseCount,\n filterExerciseDataIfInImproveMode,\n } = useExerciseManager({\n lessonName,\n lessonExerciseOverviewItems,\n courseId,\n isFinalTest,\n });\n\n useEffect(() => {\n // reset local progress state in case of browser back and forward buttons have been used\n const unlisten = history.listen((location, action) => {\n if (action === 'POP') {\n resetProgress();\n if (isLessonInImproveMode) {\n history.push(createLinkToResultPage({ courseId, lessonName, lessonPath }));\n }\n }\n });\n return () => unlisten();\n }, [history]);\n\n useEffect(() => {\n dispatch(readLessonProgress(lessonIdNumber));\n }, [lessonIdNumber]);\n\n const lessonPath = getLessonUrl(lessonId, langCode, normalizeUrlName(lessonName));\n const lessonExerciseNavQueryVariables = {\n exerciseId: exerciseIdNumber,\n lessonLang,\n };\n\n const exerciseCounter = `${currentExerciseCount} / ${allExerciseCount}`;\n\n const handleNextButtonClick = ({ exerciseAchievableScore }) => {\n const progressMetaData = createLearnProgressData({\n langCode,\n lessonId: lessonIdNumber,\n courseId,\n lessonAchievableScore,\n exerciseId: exerciseIdNumber,\n allExerciseCount,\n exerciseProgress,\n exerciseAchievableScore,\n });\n dispatch(addLessonProgress(progressMetaData));\n resetProgress();\n const nextPath =\n nextExerciseLink() || createLinkToResultPage({ courseId, isFinalTest, lessonPath });\n history.push(nextPath);\n };\n\n return (\n \n {data => {\n const { content } = data;\n const {\n learningMetaInfo: { achievableScore: exerciseAchievableScore },\n } = content;\n\n const filteredData = filterExerciseDataIfInImproveMode(data);\n const amountOfInquiries = filteredData.content.inquiries.length;\n\n return (\n <>\n \n \n
    \n \n
    \n \n
    \n
    \n \n handleNextButtonClick({\n exerciseAchievableScore,\n })\n }\n />\n
    \n
    \n
    \n \n
    \n \n );\n }}\n \n );\n};\n","import { useEffect } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport { isServer } from '../utils/ssr';\nimport globals from '../utils/globals';\n\nexport const useScrollToTop = () => {\n const { pathname } = useLocation();\n\n useEffect(() => {\n !isServer() && globals.window.scrollTo(0, 0);\n }, [pathname]);\n};\n","import { useRef } from 'react';\nimport { DwPicture } from '../../../DwPicture/DwPicture';\n\nexport const VocabularyRow = ({ data }) => {\n const { name, subTitle, audios, text } = data;\n const audio = audios[0];\n const audioSource = audio ? audio.mp3Src : '';\n const isValidImage = audio && audio.mainContentImageLink;\n\n const audioRef = useRef();\n\n const playAudio = e => {\n e.preventDefault();\n audioRef.current.play();\n };\n\n return (\n
    \n
    \n
    \n

    \n playAudio(e)}\n role=\"button\"\n >\n \n {name}\n \n {/* eslint-disable-next-line jsx-a11y/media-has-caption */}\n \n \n \n \n
    \n {subTitle && {subTitle}}\n

    \n
    \n
    \n
    \n {isValidImage && (\n
    \n \n
    \n )}\n
    \n
    \n
    \n
    \n
    \n );\n};\n","import { gql } from '@apollo/client';\nimport { useParams } from 'react-router';\nimport { createGlobalStyle } from 'styled-components';\nimport { VocabularyRow } from './VocabularyRow/VocabularyRow';\nimport { toLang } from '../../../utils/mappers/langMapper';\nimport { WithGraphQLQueryHandling } from '../../WithGraphQLQueryHandling/WithGraphQLQueryHandling';\nimport { isRtlByLangCode } from '../../../utils/mappers/rtlLanguages';\nimport { metaDataFragment, PageMetaData } from '../../Page/PageMetaData';\nimport { PAGE_TYPES } from '../../../constants/pageTypes';\nimport {\n gtmDataLayerFragment,\n GtmScriptWithDataLayer,\n} from '../../GoogleTagManager/GtmScriptWithDataLayer';\n\nexport const lessonVocabularyQuery = gql`\n query LessonVocabulary($lessonId: Int!, $lessonLang: Language!) {\n content(id: $lessonId, lang: $lessonLang) {\n ... on Lesson {\n vocabularies {\n id\n name\n subTitle\n text\n audios {\n mp3Src\n mainContentImageLink {\n targetId\n }\n }\n }\n ...${metaDataFragment.name}\n ${gtmDataLayerFragment.partial()}\n }\n }\n }\n ${metaDataFragment.fragment({ type: 'Lesson' })}\n`;\n\nconst LessonVocabularyGlobalStyles = createGlobalStyle`\n /* @noflip */\n .override-ltr {\n text-align: left;\n }\n \n @media (min-width: 768px) { \n /* @noflip */\n .col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9 {\n float:right\n } \n \n /* @noflip */\n div.row.vocabulary div.col-sm-4 p {\n margin-right: auto;\n margin-left: 20px\n }\n \n /* @noflip */\n .col-sm-offset-1 {\n margin-right: 8.33333333%;\n margin-left: 0;\n }\n }\n\n @media (min-width: 1200px) {\n /* @noflip */\n .col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9 {\n float:right\n } \n \n /* @noflip */\n .col-lg-offset-2 {\n margin-right: 16.66666667%;\n margin-left: 0\n }\n }\n`;\n\nexport const LessonVocabulary = () => {\n const { langCode, lessonId } = useParams();\n\n const lessonVocabularyQueryVariables = {\n lessonId: +lessonId,\n lessonLang: toLang(langCode),\n };\n\n // TODO: this is only temporary here because the old styles need this distinction\n const isRtl = isRtlByLangCode(langCode);\n\n return (\n \n {data => {\n const { content } = data;\n const { vocabularies } = content;\n\n return (\n <>\n {isRtl && }\n \n \n {vocabularies.map(vocabularyItem => (\n \n ))}\n \n );\n }}\n \n );\n};\n","import { LESSON_PARTS } from '../../constants/lessonParts';\n\nconst LESSON_PART_TRANSLATION_CODES = Object.freeze({\n [LESSON_PARTS.PHONEMIC_CHART]: '',\n [LESSON_PARTS.EXERCISE]: '',\n [LESSON_PARTS.GRAMMAR]: 'lesson.menu.grammar',\n [LESSON_PARTS.VOCABULARY_GLOSSARY]: 'lesson.menu.vocabulary',\n [LESSON_PARTS.REGIONAL_STUDIES]: 'lesson.menu.regionalStudies',\n [LESSON_PARTS.MANUSCRIPT]: '',\n [LESSON_PARTS.DOWNLOAD]: '',\n});\n\nexport const getTranslationCodeForLessonPart = lessonPart =>\n LESSON_PART_TRANSLATION_CODES[lessonPart];\n","import { Link } from 'react-router-dom';\nimport { getTranslationCodeForLessonPart } from '../../../../utils/mappers/lessonPartToTranslationCode';\nimport { LESSON_PARTS } from '../../../../constants/lessonParts';\nimport { useI18nContext } from '../../../../context/I18nContext';\n\nconst getArrowAriaLabel = (item, t) => {\n if (item && item.lessonPart === LESSON_PARTS.GRAMMAR) {\n return item.target.name;\n }\n if (item && item.lessonPart === LESSON_PARTS.VOCABULARY_GLOSSARY) {\n return t('lesson.aria.vocabulary');\n }\n return '';\n};\n\nexport const NavigationRow = ({ position, currentItem, previousItem, nextItem, moveTo }) => {\n const { i18n } = useI18nContext();\n\n return (\n
    \n
    \n
    \n
    \n {currentItem && i18n.t(getTranslationCodeForLessonPart(currentItem.lessonPart))}\n
    \n {previousItem && (\n \n )}\n {nextItem && (\n \n )}\n
    \n
    \n
    \n );\n};\n","import { useHistory, useParams } from 'react-router';\nimport { LessonVocabulary } from '../LessonVocabulary/LessonVocabulary';\nimport { StyledStandardButton as StandardButton } from '../../StandardButton/StandardButton';\nimport { NavigationRow } from './NavigationRow/NavigationRow';\nimport { normalizeUrlName } from '../../../utils/url/url';\nimport {\n ALPHABETICAL_ORDER_URL_SUFFIX,\n LESSON_VOCABULARY_URL_SUFFIX,\n getLessonGrammarUrl,\n getLessonPhonemicChartUrl,\n getLessonRegionalStudiesUrl,\n getLessonVocabularyUrl,\n getSummaryUrl,\n getLessonUrl,\n} from '../../../utils/url/urlFactory';\nimport { LessonKnowledge } from '../LessonKnowledge/LessonKnowledge';\nimport { LESSON_PARTS } from '../../../constants/lessonParts';\nimport { ContentBottomLine } from '../../ContentContainer/ContentBottomLine/ContentBottomLine';\nimport { PAGE_TYPES } from '../../../constants/pageTypes';\nimport { PageMetaData } from '../../Page/PageMetaData';\n\nconst LESSON_PARTS_SUFFIX = {\n [LESSON_VOCABULARY_URL_SUFFIX]: LESSON_PARTS.VOCABULARY_GLOSSARY,\n [ALPHABETICAL_ORDER_URL_SUFFIX]: LESSON_PARTS.PHONEMIC_CHART,\n};\n\nexport const LessonKnowledgeNavigation = ({\n lessonName,\n lessonKeywordStrings,\n lessonKnowledgeOverviewItems,\n}) => {\n const history = useHistory();\n const { langCode, lessonId, knowledgeType, contentId } = useParams();\n const lessonPath = getLessonUrl(lessonId, langCode, normalizeUrlName(lessonName));\n\n const getCurrentItem = () => {\n if (contentId) {\n return lessonKnowledgeOverviewItems.find(item => item.targetId.toString() === contentId);\n }\n return lessonKnowledgeOverviewItems.find(\n item => item.lessonPart === LESSON_PARTS_SUFFIX[knowledgeType],\n );\n };\n\n const currentItem = getCurrentItem();\n const currentItemIndex = lessonKnowledgeOverviewItems.indexOf(currentItem);\n const previousItem = lessonKnowledgeOverviewItems[currentItemIndex - 1];\n const nextItem = lessonKnowledgeOverviewItems[currentItemIndex + 1];\n\n const moveTo = item => {\n const normalizedName = normalizeUrlName(item.target.name);\n if (item.lessonPart === LESSON_PARTS.GRAMMAR) {\n return getLessonGrammarUrl(langCode, lessonId, normalizedName, item.targetId);\n }\n if (item.lessonPart === LESSON_PARTS.REGIONAL_STUDIES) {\n return getLessonRegionalStudiesUrl(langCode, lessonId, normalizedName, item.targetId);\n }\n if (item.lessonPart === LESSON_PARTS.PHONEMIC_CHART) {\n return getLessonPhonemicChartUrl(langCode, lessonId, normalizedName);\n }\n return getLessonVocabularyUrl(langCode, lessonId, normalizedName);\n };\n\n const getCurrentComponent = () => {\n if ([LESSON_PARTS.GRAMMAR, LESSON_PARTS.REGIONAL_STUDIES].includes(currentItem.lessonPart)) {\n const pageType =\n currentItem.lessonPart === LESSON_PARTS.GRAMMAR\n ? PAGE_TYPES.GRAMMAR\n : PAGE_TYPES.REGIONAL_STUDIES;\n return (\n \n );\n }\n\n if (currentItem.lessonPart === LESSON_PARTS.PHONEMIC_CHART) {\n // TODO - create Phonemic Chart component and keep PageMetaData (but extend with content)\n return (\n <>\n \n

    Phonemic Chart component

    \n \n );\n }\n return ;\n };\n\n const goNextWithButton = () => {\n const nextPath = nextItem ? moveTo(nextItem) : getSummaryUrl(lessonPath);\n history.push(nextPath);\n };\n\n return (\n
    \n \n {currentItem && getCurrentComponent()}\n \n
    \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n );\n};\n","import gql from 'graphql-tag';\nimport { WithGraphQLQueryHandling } from '../components/WithGraphQLQueryHandling/WithGraphQLQueryHandling';\nimport { manuscriptFragment, Manuscript } from '../components/Manuscript/Manuscript';\nimport { knowledgesFragment } from '../components/Lesson/LessonKnowledge/LessonKnowledge';\nimport {\n MediaInputChooser,\n mediaInputChooserFragment,\n} from '../components/Lesson/MediaInputChooser/MediaInputChooser';\nimport { metaDataFragment, PageMetaData } from '../components/Page/PageMetaData';\nimport { PAGE_TYPES } from '../constants/pageTypes';\nimport {\n gtmDataLayerFragment,\n GtmScriptWithDataLayer,\n} from '../components/GoogleTagManager/GtmScriptWithDataLayer';\n\nexport const ManuscriptQuery = gql`\n query ManuscriptPage($id: Int!, $lang: Language!) {\n content(id: $id, lang: $lang) {\n ...LessonMediaInputChooser\n ...LessonManuscript\n ...LessonKnowledges\n ...${metaDataFragment.name}\n ${gtmDataLayerFragment.partial()}\n }\n }\n ${mediaInputChooserFragment.fragment({ type: 'Lesson' })}\n ${manuscriptFragment}\n ${knowledgesFragment.fragment({ type: 'Lesson' })}\n ${metaDataFragment.fragment({ type: 'Lesson' })}\n`;\n\nexport const ManuscriptPage = ({ contentId, language }) => {\n const ManuscriptPageQueryVariables = {\n id: +contentId,\n lang: language,\n };\n\n return (\n \n {data => (\n <>\n \n \n \n \n \n )}\n \n );\n};\n","import { I18nText } from '../../I18n/I18nText';\n\nexport const ContentSection = ({ title, children }) => (\n <>\n
    \n
    \n \n
    \n
    \n
    \n
    \n
    {children}
    \n
    \n
    \n \n);\n","import { getArticleUrl } from '../../../../utils/url/url';\n\nexport const ArticleLinks = ({ data }) => {\n return data.map(({ targetId, target: { name: targetName }, name }) => (\n
    \n

    \n {name}\n

    \n
    \n ));\n};\n","import { capitalize, getMediaFileSizeInKBorMB } from '../../../../utils/commons';\nimport { getAudioDownloadUrl } from '../../../../utils/url/url';\n\nexport const AudioLinks = ({ data }) => {\n const getAudioLinkTitle = (name, format, size, variant) =>\n `${name} | ${format} | ${getMediaFileSizeInKBorMB(size)} (${capitalize(variant)})`;\n\n return data.map(audioLink =>\n audioLink.target.audioResourceLinks.map(({ id, url, format, size, variant }) => (\n \n )),\n );\n};\n","import { getDownloadUrl } from '../../../../utils/url/url';\nimport { useFrontendConfig } from '../../../../hooks/useFrontendConfig';\n\nexport const DownloadLinks = ({ data }) => {\n const { staticBaseHost } = useFrontendConfig();\n\n return data.map(({ targetId, target: { filename }, name }) => (\n
    \n

    \n {name}\n

    \n
    \n ));\n};\n","import gql from 'graphql-tag';\nimport { getMediaFileSizeInKBorMB } from '../../../../utils/commons';\nimport { getVideoDownloadUrl } from '../../../../utils/url/url';\n\nexport const videoResourceLinksFragment = {\n name: 'VideoResourceLinks',\n fragment() {\n return gql`fragment ${this.name} on Video {\n id\n name\n videoResourceLinks {\n id\n url\n techFormat\n size\n format\n }\n } \n `;\n },\n};\n\nexport const VideoLinks = ({ data }) => {\n const getVideoLinksByFormat = video =>\n video.videoResourceLinks.filter(videoLink => videoLink.techFormat.includes('PODCAST'));\n\n const videos = [].concat(\n ...data.map(video =>\n getVideoLinksByFormat(video.target).map(link => ({ ...link, name: video.name })),\n ),\n );\n\n const getVideoLinkTitle = (name, format, size, techFormat) =>\n `${name} | ${format} | ${getMediaFileSizeInKBorMB(size)} (${techFormat.slice(-2)})`;\n\n return videos.map(({ id, url, name, format, size, techFormat }) => (\n

    \n \n {getVideoLinkTitle(name, format, size, techFormat)}\n \n

    \n ));\n};\n","import gql from 'graphql-tag';\nimport { ContentContainer } from '../../ContentContainer/ContentContainer';\nimport { ContentHeadline } from '../../ContentContainer/ContentHeadline/ContentHeadline';\nimport { ContentBottomLine } from '../../ContentContainer/ContentBottomLine/ContentBottomLine';\nimport { ContentSection } from '../../ContentContainer/ContentSection/ContentSection';\nimport { ArticleLinks } from './Links/ArticleLinks';\nimport { AudioLinks } from './Links/AudioLinks';\nimport { DownloadLinks } from './Links/DownloadLinks';\nimport { VideoLinks, videoResourceLinksFragment } from './Links/VideoLinks';\nimport { I18nText } from '../../I18n/I18nText';\n\nexport const lessonExtrasFragment = gql`\n fragment LessonExtras on Lesson {\n id\n contentLinks(targetTypes: [ARTICLE, DOWNLOAD, AUDIO, VIDEO]) {\n id\n name\n targetId\n targetType\n target {\n ... on Download {\n filename\n }\n ... on Article {\n name\n }\n ... on Audio {\n id\n name\n audioResourceLinks {\n id\n url\n size\n format\n variant\n }\n }\n ...${videoResourceLinksFragment.name}\n }\n }\n }\n ${videoResourceLinksFragment.fragment()}\n`;\n\nconst filterContentByType = type => contentLink => contentLink.targetType === type;\n\nexport const LessonExtras = ({ content = {} }) => {\n const { contentLinks = [] } = content;\n const downloads = contentLinks.filter(filterContentByType('DOWNLOAD'));\n const articles = contentLinks.filter(filterContentByType('ARTICLE'));\n const audios = contentLinks.filter(filterContentByType('AUDIO'));\n const videos = contentLinks.filter(filterContentByType('VIDEO'));\n const [hasDownloads, hasVideos, hasAudios, hasArticles] = [\n !!downloads.length,\n !!videos.length,\n !!audios.length,\n !!articles.length,\n ];\n\n return (\n \n \n \n \n {hasDownloads && (\n \n \n \n )}\n {(hasVideos || hasAudios) && (\n \n {hasVideos && }\n {hasAudios && }\n \n )}\n {hasArticles && (\n \n \n \n )}\n \n \n );\n};\n","import gql from 'graphql-tag';\nimport { WithGraphQLQueryHandling } from '../components/WithGraphQLQueryHandling/WithGraphQLQueryHandling';\nimport { lessonExtrasFragment, LessonExtras } from '../components/Lesson/LessonExtras/LessonExtras';\nimport { metaDataFragment, PageMetaData } from '../components/Page/PageMetaData';\nimport { PAGE_TYPES } from '../constants/pageTypes';\nimport {\n gtmDataLayerFragment,\n GtmScriptWithDataLayer,\n} from '../components/GoogleTagManager/GtmScriptWithDataLayer';\n\nexport const LessonExtrasQuery = gql`\n query LessonExtrasPage($id: Int!, $lang: Language!) {\n content(id: $id, lang: $lang) {\n ...LessonExtras\n ...${metaDataFragment.name}\n ${gtmDataLayerFragment.partial()}\n }\n }\n ${lessonExtrasFragment}\n ${metaDataFragment.fragment({ type: 'Lesson' })}\n`;\n\nexport const LessonExtrasPage = ({ contentId, language }) => {\n const LessonExtraPageQueryVariables = {\n id: +contentId,\n lang: language,\n };\n\n return (\n \n {({ content }) => (\n <>\n \n \n \n \n )}\n \n );\n};\n","import { useSelector } from 'react-redux';\nimport { I18nText } from '../../../I18n/I18nText';\nimport { userSelector } from '../../../../state/user/userSelectors';\n\nexport const EXERCISE_ACTION_TYPES = Object.freeze({\n CONTINUE: 'CONTINUE',\n IMPROVE: 'IMPROVE',\n SAVE: 'SAVE',\n});\n\nconst generateActionKey = (actionType, isLoggedIn) => {\n const translationPrefix = 'lesson.exercises.result';\n\n switch (actionType) {\n case EXERCISE_ACTION_TYPES.CONTINUE:\n return `${translationPrefix}.notSave`;\n case EXERCISE_ACTION_TYPES.IMPROVE:\n return isLoggedIn ? `${translationPrefix}.correct` : `${translationPrefix}.loginFixErrors`;\n case EXERCISE_ACTION_TYPES.SAVE:\n return isLoggedIn ? `${translationPrefix}.save` : `${translationPrefix}.loginSave`;\n default:\n // eslint-disable-next-line fp/no-throw\n throw new Error('invalid action');\n }\n};\n\nexport const ExerciseAction = ({ name, actionType, onClickAction, href }) => {\n const { isLoggedIn } = useSelector(userSelector);\n const actionKey = generateActionKey(actionType, isLoggedIn);\n\n return (\n \n );\n};\n","export const MARKS = Object.freeze({\n GOOD: 80,\n MEDIUM: 60,\n BAD: 40,\n});\n","import { useSelector } from 'react-redux';\nimport { MARKS } from '../../../../constants/marks';\nimport { I18nText } from '../../../I18n/I18nText';\nimport { calculatePercentage, generateRandomNumber } from '../../../../utils/commons';\nimport { findLessonLearnProgressSelector } from '../../../../state/progress/learnProgressSelectors';\n\nexport const Summary = ({ lessonId, showFeedback = false, showTitle = true }) => {\n const lesson = useSelector(findLessonLearnProgressSelector(lessonId));\n\n const {\n allExerciseCount = 0,\n doneExerciseCount = 0,\n maxPointsForAllExercises = 0,\n resultPoints = 0,\n } = lesson || {};\n\n const percentile = calculatePercentage(resultPoints, maxPointsForAllExercises);\n\n const getFeedBackText = () => {\n const randomNumber = generateRandomNumber(1, 3);\n\n if (percentile >= MARKS.GOOD) return `good${randomNumber}`;\n if (percentile >= MARKS.MEDIUM) return `mid${randomNumber}`;\n\n return `bad${randomNumber}`;\n };\n\n return (\n <>\n {showTitle && (\n
    \n
    \n \n
    \n
    \n )}\n {showFeedback && (\n
    \n
    \n \n
    \n
    \n )}\n
    \n
    \n
    \n

    \n
    \n {percentile}%\n
    \n

    \n

    \n \n : {`${doneExerciseCount}/${allExerciseCount}`}\n

    \n
    \n
    \n
    \n \n );\n};\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useEffect } from 'react';\nimport { useHistory, useParams } from 'react-router-dom';\nimport { createGlobalStyle } from 'styled-components';\nimport { EXERCISE_ACTION_TYPES, ExerciseAction } from './ExerciseAction';\nimport { LessonExerciseHint } from '../LessonExerciseHint/LessonExerciseHint';\nimport { Summary } from './Summary';\nimport {\n filteredAssembledInfos,\n filterLessonExerciseOverviewItems,\n} from '../../../../utils/lessonUtils';\nimport { userSelector } from '../../../../state/user/userSelectors';\nimport { useI18nContext } from '../../../../context/I18nContext';\nimport { removeImproveMode, setImproveMode } from '../../../../state/mode/lessonExerciseModeDuck';\nimport { useExerciseManager } from '../../../../hooks/useExerciseManager';\nimport { getLessonUrl, getLoginPage, getSummaryUrl } from '../../../../utils/url/urlFactory';\nimport { useGlobalsContext } from '../../../../context/GlobalsContext';\nimport { normalizeUrlName } from '../../../../utils/url/url';\nimport { setLessonProgressSyncNeeded } from '../../../../state/progress/learnProgressDuck';\nimport { PageMetaData } from '../../../Page/PageMetaData';\nimport { PAGE_TYPES } from '../../../../constants/pageTypes';\nimport { GtmScriptWithDataLayer } from '../../../GoogleTagManager/GtmScriptWithDataLayer';\n\nexport const LessonResultAndSummaryGlobalStyles = createGlobalStyle`\n @media (min-width: 1200px) {\n /* @noflip */\n .col-lg-push-1 {\n right: 8.33333333%;\n left: 0;\n }\n }\n @media (min-width: 1200px) {\n /* @noflip */\n .col-lg-pull-1 {\n left: 8.33333333%;\n right: auto;\n }\n }\n /* @noflip */\n .col-lg-1, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-md-1, .col-md-10, .col-md-11, .col-md-12, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-sm-1, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-xs-1, .col-xs-10, .col-xs-11, .col-xs-12, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9 {\n position: relative;\n min-height: 1px;\n padding-left: 20px;\n padding-right: 20px;\n }\n`;\n\nexport const LessonExerciseResult = ({\n lessonOverviewParts,\n lessonId,\n lessonName,\n courseId,\n isFinalTest,\n lessonKeywordStrings,\n data,\n}) => {\n const { isLoggedIn } = useSelector(userSelector);\n const { i18n } = useI18nContext();\n const { langCode } = useParams();\n const { location } = useGlobalsContext().window;\n const dispatch = useDispatch();\n const history = useHistory();\n\n const lessonExerciseOverviewItems = filterLessonExerciseOverviewItems(lessonOverviewParts);\n const { firstExerciseLink, isFullScoreAchieved } = useExerciseManager({\n lessonName,\n lessonExerciseOverviewItems,\n courseId,\n isFinalTest,\n });\n\n useEffect(() => {\n dispatch(removeImproveMode(lessonId));\n }, []);\n\n const lessonPath = getLessonUrl(lessonId, langCode, normalizeUrlName(lessonName));\n const assembledInfos = filteredAssembledInfos({ lessonOverviewParts, lessonPath });\n const showImproveButton = !isLoggedIn || (isLoggedIn && !isFullScoreAchieved());\n const resultPrefix = 'lesson.exercises.result';\n\n const generateNextUrl = () => {\n return assembledInfos[0] ? assembledInfos[0].url : getSummaryUrl(lessonPath);\n };\n\n const generateExerciseInfos = t => {\n const exerciseInfos = assembledInfos.map(info => t(`${resultPrefix}.${info.name}`)).join(', ');\n\n return (\n exerciseInfos && (\n

    \n {t(`${resultPrefix}.whatsNext`)} {exerciseInfos}.\n

    \n )\n );\n };\n\n const infos = generateExerciseInfos(i18n.t);\n const nextUrl = generateNextUrl();\n const hintKey = i18n.t(`${resultPrefix}.hint`);\n\n const handleImproveClicked = () => {\n if (isLoggedIn) {\n dispatch(setImproveMode(lessonId));\n const firstExerciseLinkInImproveMode = firstExerciseLink(true);\n history.push(firstExerciseLinkInImproveMode);\n } else {\n dispatch(setLessonProgressSyncNeeded(true));\n }\n };\n\n const handleSaveClicked = () => {\n if (isLoggedIn) {\n history.push(nextUrl);\n } else {\n dispatch(setLessonProgressSyncNeeded(true));\n }\n };\n\n const handleContinueClicked = () => {\n history.push(nextUrl);\n };\n\n const loginLink = isLoggedIn\n ? undefined\n : getLoginPage(location.origin, langCode, location.pathname);\n\n return (\n <>\n \n \n \n
    \n
    \n \n
    \n
    \n
    {infos}
    \n {!isLoggedIn && (\n \n )}\n
    \n
    \n
    \n
    \n
    \n
    \n {showImproveButton && (\n
    \n \n
    \n )}\n
    \n {!isLoggedIn && (\n \n )}\n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n );\n};\n","import { Link } from 'react-router-dom';\nimport { Summary } from '../LessonExercise/LessonExerciseResult/Summary';\nimport { getContentUrl, getDashboardUrl } from '../../../utils/url/urlFactory';\nimport { I18nText } from '../../I18n/I18nText';\nimport { toLangCode } from '../../../utils/mappers/langMapper';\nimport { isFinalTestPredicate } from '../../../utils/commons';\nimport { LessonResultAndSummaryGlobalStyles } from '../LessonExercise/LessonExerciseResult/LessonExerciseResult';\n\nexport const LessonSummary = ({ data, lessonId, language }) => {\n const { content } = data;\n const { contentLinks } = content;\n const currentLessonLink = contentLinks.find(link => link.targetId === lessonId);\n const currentLessonIndex = contentLinks.indexOf(currentLessonLink);\n\n const generateRedirectInfos = () => {\n const nextLessonContentLink = contentLinks[currentLessonIndex + 1] || {};\n const { lesson } = nextLessonContentLink;\n\n if (!lesson) {\n return {\n url: getDashboardUrl(toLangCode(language)),\n redirectMessage: 'lesson.exercises.result.toDashboard',\n };\n }\n\n const { shortTitle, id } = lesson;\n\n const url = getContentUrl({\n id,\n name: shortTitle,\n language,\n __typename: 'Lesson',\n });\n\n const isFinalTest = isFinalTestPredicate(nextLessonContentLink);\n\n const redirectMessage = isFinalTest\n ? 'lesson.exercises.result.toFinalTest'\n : 'lesson.exercises.result.nextLesson';\n\n return { url, redirectMessage };\n };\n\n const { url, redirectMessage } = generateRedirectInfos();\n\n return (\n <>\n \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n );\n};\n","import gql from 'graphql-tag';\nimport { LessonSummary } from '../components/Lesson/LessonSummary/LessonSummary';\nimport { WithGraphQLQueryHandling } from '../components/WithGraphQLQueryHandling/WithGraphQLQueryHandling';\nimport { PageMetaData } from '../components/Page/PageMetaData';\nimport { PAGE_TYPES } from '../constants/pageTypes';\nimport { gtmDataLayerFragment } from '../components/GoogleTagManager';\nimport { GtmScriptWithDataLayer } from '../components/GoogleTagManager/GtmScriptWithDataLayer';\n\nexport const lessonSummaryPageQuery = gql`\n query LessonSummaryPage($id: Int!, $lang: Language!) {\n content(id: $id, lang: $lang) {\n ... on Course {\n id\n contentLinks(targetTypes: LESSON) {\n additionalInformation\n targetId\n lesson: target {\n ... on Lesson {\n id\n shortTitle\n }\n }\n }\n ${gtmDataLayerFragment.partial()}\n }\n }\n }\n`;\n\nexport const LessonSummaryPage = ({\n courseId,\n lessonId,\n language,\n lessonName,\n lessonKeywordStrings,\n}) => {\n const LessonSummaryQueryVariables = {\n id: +courseId,\n lang: language,\n };\n\n return (\n \n {data => (\n <>\n \n \n \n \n )}\n \n );\n};\n","import { Route, useParams, useRouteMatch } from 'react-router';\nimport gql from 'graphql-tag';\nimport { createGlobalStyle } from 'styled-components';\nimport { isMonolingualCourse } from '../../constants/isLtrContentOnly';\nimport { LessonMenu } from './LessonMenu/LessonMenu';\nimport { LessonInformation } from './LessonInformation/LessonInformation';\nimport { pathPartials } from '../../utils/url/pathAnalyser';\nimport { ExerciseProgressProvider } from './LessonExercise/workflow/ExerciseProgress';\nimport { LessonExerciseNavigation } from './LessonExercise/LessonExerciseNavigation/LessonExerciseNavigation';\nimport { LessonKnowledgeNavigation } from './LessonKnowledgeNavigation/LessonKnowledgeNavigation';\nimport {\n LESSON_EXERCISE_RESULT_SUFFIX,\n LESSON_EXTRAS_SUFFIX,\n LESSON_MANUSCRIPT_SUFFIX,\n LESSON_SUMMARY_SUFFIX,\n} from '../../utils/url/urlFactory';\nimport { ManuscriptPage } from '../../pages/ManuscriptPage';\nimport { LessonExtrasPage } from '../../pages/LessonExtrasPage';\nimport { LessonExerciseResult } from './LessonExercise/LessonExerciseResult/LessonExerciseResult';\nimport { LessonSummaryPage } from '../../pages/LessonSummaryPage';\nimport { useExerciseManager } from '../../hooks/useExerciseManager';\nimport {\n filterLessonExerciseOverviewItems,\n filterLessonKnowledgeOverviewItems,\n isFinalTestLesson,\n} from '../../utils/lessonUtils';\nimport { isPlacementTestCourse } from '../../utils/mappers/placementTestCourseIds';\nimport { hasCorrectImageFormat } from '../ImageOGMetaData/ImageOGMetaData';\nimport { gtmDataLayerFragment } from '../GoogleTagManager';\nimport { CourseDataContext } from '../../hooks/useCourseData';\n\nexport const lessonOverviewPartsFragment = {\n fragment({ scope, handicap }) {\n const handicapArg = handicap ? `(handicap: ${handicap})` : '';\n return gql`\n fragment ${scope}OverviewParts${handicap || ''} on Lesson {\n overviewParts${handicapArg} {\n targetId\n lessonPart\n target {\n ... on Exercise {\n name\n ${gtmDataLayerFragment.partial()}\n }\n ... on Knowledge {\n name\n }\n }\n }\n }\n `;\n },\n};\n\nexport const LtrContentLessonStyle = createGlobalStyle`\n #lesson {\n .title,\n .main-info-content,\n .exercise-container,\n .input-header-container {\n /* @noflip */\n direction: ltr;\n /* @noflip */\n text-align: left;\n }\n }\n`;\n\nexport const Lesson = ({ data }) => {\n const { content } = data;\n const {\n name: lessonName,\n language,\n overviewParts: lessonOverviewParts,\n learningMetaInfo: { achievableScore },\n manuscript,\n knowledges,\n mainContentImage: lessonMainImage,\n keywordStrings: lessonKeywordStrings,\n } = content;\n const lessonKnowledgeOverviewItems = filterLessonKnowledgeOverviewItems(lessonOverviewParts);\n const lessonExerciseOverviewItems = filterLessonExerciseOverviewItems(lessonOverviewParts);\n\n const manuscriptContent = { manuscript, knowledges };\n const { path } = useRouteMatch();\n const { lessonId: lessonIdString } = useParams();\n const lessonId = +lessonIdString;\n\n const {\n id: courseId,\n name: courseName,\n contentLinks: lessonContentLinksFromCourse,\n mainContentImage: courseMainImage,\n } = data.contentsByType[0];\n\n const isFromPlacementCourse = isPlacementTestCourse(courseId);\n const isFinalTest = isFinalTestLesson({\n lessonContentLinksFromCourse,\n currentLessonId: lessonId,\n });\n\n const ogImage =\n lessonMainImage && hasCorrectImageFormat(lessonMainImage.imageFormats)\n ? lessonMainImage\n : courseMainImage;\n\n const { firstExerciseLink } = useExerciseManager({\n lessonName,\n lessonExerciseOverviewItems,\n courseId,\n isFinalTest,\n });\n\n const firstExercisePath = firstExerciseLink();\n\n return (\n \n
    \n {isMonolingualCourse(courseId.toString()) && }\n \n (\n \n )}\n />\n (\n \n \n \n )}\n />\n (\n \n )}\n />\n }\n />\n }\n />\n (\n \n )}\n />\n (\n \n )}\n />\n
    \n
    \n );\n};\n","import gql from 'graphql-tag';\nimport { useParams } from 'react-router';\nimport { useSelector } from 'react-redux';\nimport { PageContainer } from '../components/Page/PageContainer';\nimport { LANG_CODES, toLang } from '../utils/mappers/langMapper';\nimport { WithGraphQLQueryHandling } from '../components/WithGraphQLQueryHandling/WithGraphQLQueryHandling';\nimport { scoreFragment } from '../state/progress/learnProgress';\nimport { Lesson, lessonOverviewPartsFragment } from '../components/Lesson/Lesson';\nimport { userDataSelector } from '../state/user/userSelectors';\nimport { manuscriptFragment } from '../components/Manuscript/Manuscript';\nimport { knowledgesFragment } from '../components/Lesson/LessonKnowledge/LessonKnowledge';\nimport { metaDataFragment } from '../components/Page/PageMetaData';\nimport { imageOGMetaDataFragment } from '../components/ImageOGMetaData/ImageOGMetaData';\nimport { gtmDataLayerFragment } from '../components/GoogleTagManager';\n\nexport const lessonPageQuery = ({ handicap }) => gql`\n query LessonPage($lessonId: Int!, $lessonIdString: String!, $lang: Language!) {\n content(id: $lessonId, lang: $lang) {\n ... on Lesson {\n id\n name\n language\n ...${`LessonOverviewParts${handicap || ''}`}\n ...${`LessonScore${handicap || ''}`}\n ...${metaDataFragment.name}\n }\n ...LessonManuscript\n ...LessonKnowledges\n ...LessonImageOGMetaData\n ${gtmDataLayerFragment.partial()}\n }\n contentsByType(\n lang: $lang\n type: COURSE\n amount: 1\n filters: { field: \"contentLinks.targetId\", value: [$lessonIdString] }\n ) {\n ... on Course {\n id\n name\n contentLinks(targetTypes: LESSON) {\n targetId\n additionalInformation\n }\n }\n ...CourseImageOGMetaData\n }\n }\n ${lessonOverviewPartsFragment.fragment({ scope: 'Lesson', handicap })}\n ${scoreFragment.fragment({ type: 'Lesson', handicap })}\n ${manuscriptFragment}\n ${knowledgesFragment.fragment({ type: 'Lesson' })}\n ${imageOGMetaDataFragment.fragment({ type: 'Lesson' })}\n ${imageOGMetaDataFragment.fragment({ type: 'Course' })}\n ${metaDataFragment.fragment({ type: 'Lesson' })}\n`;\n\nexport const LessonPage = () => {\n const { langCode, lessonId } = useParams();\n const { handicap } = useSelector(userDataSelector) || {};\n\n const queryVariables = {\n lessonId: +lessonId,\n lessonIdString: lessonId,\n lang: toLang(langCode),\n };\n\n return (\n \n \n {(data, refetch) => {\n if (!data.content) {\n refetch({\n ...queryVariables,\n lang: toLang(LANG_CODES.GERMAN),\n });\n return null;\n }\n return ;\n }}\n \n \n );\n};\n","import { useSelector } from 'react-redux';\nimport { Redirect, Route } from 'react-router-dom';\nimport { getFeedbackUrl } from '../../utils/url/urlFactory';\nimport { userSelector } from '../../state/user/userSelectors';\n\nexport const RestrictedRoute = ({ path, component, render, feedbackType }) => {\n const { isLoggedIn } = useSelector(userSelector);\n const TargetComponent = component;\n\n return (\n {\n // eslint-disable-next-line no-nested-ternary\n return isLoggedIn ? (\n TargetComponent ? (\n \n ) : (\n render()\n )\n ) : (\n \n );\n }}\n />\n );\n};\n","import { useEffect } from 'react';\nimport { useHistory, useParams } from 'react-router';\nimport { confirmUserRegistration } from '../../services/userService';\nimport { feedbackHelper } from '../../utils/url/feedbackHelpers';\nimport { StyledLoadingMessage as LoadingMessage } from '../commons/LoadingMessage';\n\nexport const ConfirmUserRegistrationContainer = ({ confirmationId }) => {\n const { langCode } = useParams();\n const history = useHistory();\n\n useEffect(() => {\n confirmUserRegistration(confirmationId)\n .then(async response => {\n if (response.ok) {\n history.push(feedbackHelper.forRegistrationConfirm(langCode));\n } else {\n const errorResponse = await response.json();\n history.push(feedbackHelper.getForErrorCode(errorResponse, langCode));\n }\n })\n .catch(e => {\n history.push(feedbackHelper.getForErrorCode(e, langCode));\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return ;\n};\n","export const hasErrorClassAssigner = (className, error) =>\n error ? `${className} has-error` : className;\n\nexport const hasNestedErrorsClassAssigner = (className, error) =>\n error ? `${className} has-nested-errors` : className;\n","export const CUSTOM_ERROR_TRANSLATION_KEYS = {\n SAFE_MONGO_CHARACTERS_ONLY: 'safeMongoCharactersOnly',\n TRANSCRIPTION: 'transcription',\n};\n\nconst buildKey = suffix => `client.validator.${suffix}`;\n\nexport const getTranslatedValidationMessage = ({\n name,\n validationErrorTranslationKey,\n validationType,\n customErrorTranslationKey,\n t,\n}) => {\n const title = t(validationErrorTranslationKey);\n switch (validationType) {\n case 'required':\n return t(buildKey('required'), { first: title });\n case 'pattern':\n return t(customErrorTranslationKey ? buildKey(customErrorTranslationKey) : buildKey(name), {\n first: title,\n });\n case 'differsFromEmail':\n return t(buildKey('differFromEmail'));\n case 'passwordRetype':\n return t(buildKey('equalTo'));\n default:\n return '';\n }\n};\n","import { hasErrorClassAssigner } from '../../utils/errorClassAssigner';\nimport { getTranslatedValidationMessage } from '../../utils/validation/validationMessages';\nimport { I18nText } from '../I18n/I18nText';\nimport { useI18nContext } from '../../context/I18nContext';\n\nexport const Input = ({\n titleTranslationKey,\n placeholderTranslationKey = titleTranslationKey,\n name,\n type,\n register,\n validationError,\n isLabelVisible = false,\n customErrorTranslationKey,\n ...restProps\n}) => {\n const { i18n } = useI18nContext();\n return (\n
    \n \n \n {validationError && (\n \n {getTranslatedValidationMessage({\n name,\n validationErrorTranslationKey: titleTranslationKey,\n validationType: validationError.type,\n customErrorTranslationKey,\n t: i18n.t,\n })}\n \n )}\n
    \n );\n};\n","import { hasErrorClassAssigner } from '../../utils/errorClassAssigner';\nimport { getTranslatedValidationMessage } from '../../utils/validation/validationMessages';\nimport { useI18nContext } from '../../context/I18nContext';\n\nexport const Select = ({\n name,\n defaultOptionKey,\n options,\n validationError,\n register,\n ...restProps\n}) => {\n const { i18n } = useI18nContext();\n\n return (\n
    \n \n {validationError && (\n \n {getTranslatedValidationMessage({\n name,\n validationErrorTranslationKey: defaultOptionKey,\n validationType: validationError.type,\n t: i18n.t,\n })}\n \n )}\n
    \n );\n};\n","import { hasErrorClassAssigner } from '../../utils/errorClassAssigner';\nimport { getTranslatedValidationMessage } from '../../utils/validation/validationMessages';\nimport { useI18nContext } from '../../context/I18nContext';\n\nexport const Checkbox = ({\n name,\n labelText,\n validationErrorTranslationKey,\n register,\n validationError,\n ...restProps\n}) => {\n const { i18n } = useI18nContext();\n\n return (\n
    \n
    \n
    \n \n \n \n \n
    \n {validationError && (\n \n {getTranslatedValidationMessage({\n name,\n validationErrorTranslationKey,\n validationType: validationError.type,\n t: i18n.t,\n })}\n \n )}\n
    \n
    \n );\n};\n","import {\n hasErrorClassAssigner,\n hasNestedErrorsClassAssigner,\n} from '../../../utils/errorClassAssigner';\nimport { I18nText } from '../../I18n/I18nText';\nimport { deconstructDateOfBirth } from '../../../utils/userUtils';\nimport { useTranslation } from '../../../hooks/useTranslation';\n\nexport const BirthDateInput = ({\n register,\n errors,\n initialDateOfBirth,\n translationPrefix = 'profile.register',\n}) => {\n const { year: initYear } = deconstructDateOfBirth(initialDateOfBirth);\n const hasErrors = errors.year;\n const placeholderLabel = useTranslation(`${translationPrefix}.placeholder.yearOfBirth`);\n\n return (\n
    \n
    \n \n
    \n \n
    \n
    \n {hasErrors && (\n \n \n \n )}\n
    \n );\n};\n","export const emailPattern = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\nexport const transcriptionPattern = /^[\\sa-zA-ZäöüÄÖÜß-]*$/;\nexport const namePattern = /^[^\\u0027\\u0022;{}<>&:\\\\]+$/;\n\nexport const passwordValid = password => {\n if (!password) {\n return false;\n }\n\n const minLength = 8;\n // eslint-disable-next-line\n let numberOfFulfilledConditions = 0;\n const minNumberOfFulfilledConditions = 3;\n const regexPatterns = [/[0-9]/, /[^A-Za-z_0-9]/, /[A-Z]/, /[a-z]/];\n\n regexPatterns.forEach(pattern => {\n if (password.match(pattern) !== null) {\n // eslint-disable-next-line\n numberOfFulfilledConditions += 1;\n }\n });\n\n return !!(\n password.length >= minLength && numberOfFulfilledConditions >= minNumberOfFulfilledConditions\n );\n};\n\nexport const passwordRetypeValid = (passwordRetype, password) =>\n !!(password && password === passwordRetype);\n\nexport const passwordDiffersFromEmail = (password, email) => {\n const repeatedCharsLimit = 4;\n const template = email;\n const { length } = template;\n // eslint-disable-next-line\n let subString;\n\n // eslint-disable-next-line\n for (let i = 0; i < length - repeatedCharsLimit; i++) {\n // eslint-disable-next-line\n subString = template.substring(i, i + repeatedCharsLimit);\n if (password.indexOf(subString) !== -1) {\n return false;\n }\n }\n return true;\n};\n\nconst validateCaptcha = (state, setState) => {\n setState({ ...state, captchaError: !state.isCaptchaPassed });\n return state.isCaptchaPassed;\n};\n\nexport const captcha = {\n validateCaptcha,\n};\n","import ReCAPTCHA from 'react-google-recaptcha';\nimport config from '../../config';\n\nexport const ReCaptcha = ({ languageCode, onSuccess, onExpired }) => {\n const checkForReCaptchaToken = token => {\n if (token) {\n onSuccess(token);\n }\n };\n\n return (\n \n );\n};\n","export const countries = [\n { value: 'AF', name: 'Afghanistan' },\n { value: 'AL', name: 'Albania' },\n { value: 'DZ', name: 'Algeria' },\n { value: 'AS', name: 'American Samoa' },\n { value: 'AD', name: 'Andorra' },\n { value: 'AO', name: 'Angola' },\n { value: 'AI', name: 'Anguilla' },\n { value: 'AQ', name: 'Antarctica' },\n { value: 'AG', name: 'Antigua and Barbuda' },\n { value: 'AR', name: 'Argentina' },\n { value: 'AM', name: 'Armenia' },\n { value: 'AW', name: 'Aruba' },\n { value: 'AU', name: 'Australia' },\n { value: 'AT', name: 'Austria' },\n { value: 'AZ', name: 'Azerbaijan' },\n { value: 'BS', name: 'Bahamas' },\n { value: 'BH', name: 'Bahrain' },\n { value: 'BD', name: 'Bangladesh' },\n { value: 'BB', name: 'Barbados' },\n { value: 'BY', name: 'Belarus' },\n { value: 'BE', name: 'Belgium' },\n { value: 'BZ', name: 'Belize' },\n { value: 'BJ', name: 'Benin' },\n { value: 'BM', name: 'Bermuda' },\n { value: 'BT', name: 'Bhutan' },\n { value: 'BO', name: 'Bolivia' },\n { value: 'BA', name: 'Bosnia and Herzegovina' },\n { value: 'BW', name: 'Botswana' },\n { value: 'BV', name: 'Bouvet Island' },\n { value: 'BR', name: 'Brazil' },\n { value: 'IO', name: 'British Indian Ocean Territory' },\n { value: 'BN', name: 'Brunei Darussalam' },\n { value: 'BG', name: 'Bulgaria' },\n { value: 'BF', name: 'Burkina Faso' },\n { value: 'BI', name: 'Burundi' },\n { value: 'CI', name: \"Côte d'Ivoire\" },\n { value: 'CV', name: 'Cabo Verde' },\n { value: 'KH', name: 'Cambodia' },\n { value: 'CM', name: 'Cameroon' },\n { value: 'CA', name: 'Canada' },\n { value: 'KY', name: 'Cayman Islands' },\n { value: 'CF', name: 'Central African Republic' },\n { value: 'TD', name: 'Chad' },\n { value: 'CL', name: 'Chile' },\n { value: 'CN', name: 'China' },\n { value: 'CX', name: 'Christmas Island' },\n { value: 'CC', name: 'Cocos Islands' },\n { value: 'CO', name: 'Colombia' },\n { value: 'KM', name: 'Comoros' },\n { value: 'CG', name: 'Congo' },\n { value: 'CK', name: 'Cook Islands' },\n { value: 'CR', name: 'Costa Rica' },\n { value: 'HR', name: 'Croatia' },\n { value: 'CU', name: 'Cuba' },\n { value: 'CY', name: 'Cyprus' },\n { value: 'CZ', name: 'Czech Republic' },\n { value: 'CD', name: 'Dem. Rep. of Congo' },\n { value: 'DK', name: 'Denmark' },\n { value: 'DJ', name: 'Djibouti' },\n { value: 'DM', name: 'Dominica' },\n { value: 'DO', name: 'Dominican Republic' },\n { value: 'EC', name: 'Ecuador' },\n { value: 'EG', name: 'Egypt' },\n { value: 'SV', name: 'El Salvador' },\n { value: 'GQ', name: 'Equatorial Guinea' },\n { value: 'ER', name: 'Eritrea' },\n { value: 'EE', name: 'Estonia' },\n { value: 'ET', name: 'Ethiopia' },\n { value: 'FK', name: 'Falkland Islands' },\n { value: 'FO', name: 'Faroe Islands' },\n { value: 'FJ', name: 'Fiji' },\n { value: 'FI', name: 'Finland' },\n { value: 'FR', name: 'France' },\n { value: 'GF', name: 'French Guyana' },\n { value: 'PF', name: 'French Polynesia' },\n { value: 'TF', name: 'French Southern and Antarctic Territories' },\n { value: 'GA', name: 'Gabon' },\n { value: 'GM', name: 'Gambia' },\n { value: 'GE', name: 'Georgia' },\n { value: 'DE', name: 'Germany' },\n { value: 'GH', name: 'Ghana' },\n { value: 'GI', name: 'Gibraltar' },\n { value: 'GB', name: 'Great Britain' },\n { value: 'GR', name: 'Greece' },\n { value: 'GL', name: 'Greenland' },\n { value: 'GD', name: 'Grenada' },\n { value: 'GP', name: 'Guadeloupe' },\n { value: 'GU', name: 'Guam' },\n { value: 'GT', name: 'Guatemala' },\n { value: 'GN', name: 'Guinea' },\n { value: 'GW', name: 'Guinea-Bissau' },\n { value: 'GY', name: 'Guyana' },\n { value: 'HT', name: 'Haiti' },\n { value: 'HM', name: 'Heard and the McDonald Islands' },\n { value: 'HN', name: 'Honduras' },\n { value: 'HK', name: 'Hong Kong' },\n { value: 'HU', name: 'Hungary' },\n { value: 'IS', name: 'Iceland' },\n { value: 'IN', name: 'India' },\n { value: 'ID', name: 'Indonesia' },\n { value: 'IR', name: 'Iran' },\n { value: 'IQ', name: 'Iraq' },\n { value: 'IE', name: 'Ireland' },\n { value: 'IL', name: 'Israel' },\n { value: 'IT', name: 'Italy' },\n { value: 'JM', name: 'Jamaica' },\n { value: 'JP', name: 'Japan' },\n { value: 'JO', name: 'Jordan' },\n { value: 'KZ', name: 'Kazakhstan' },\n { value: 'KE', name: 'Kenya' },\n { value: 'KI', name: 'Kiribati' },\n { value: 'KP', name: \"Korea (Democratic People's Republic of)\" },\n { value: 'KR', name: 'Korea (Republic)' },\n { value: 'KO', name: 'Kosovo' },\n { value: 'KW', name: 'Kuwait' },\n { value: 'KG', name: 'Kyrgyzstan' },\n { value: 'LA', name: 'Lao' },\n { value: 'LV', name: 'Latvia' },\n { value: 'LB', name: 'Lebanon' },\n { value: 'LS', name: 'Lesotho' },\n { value: 'LR', name: 'Liberia' },\n { value: 'LY', name: 'Libya' },\n { value: 'LI', name: 'Liechtenstein' },\n { value: 'LT', name: 'Lithuania' },\n { value: 'LU', name: 'Luxembourg' },\n { value: 'MO', name: 'Macau' },\n { value: 'MK', name: 'Macedonia' },\n { value: 'MG', name: 'Madagascar' },\n { value: 'MW', name: 'Malawi' },\n { value: 'MY', name: 'Malaysia' },\n { value: 'MV', name: 'Maldivian' },\n { value: 'ML', name: 'Mali' },\n { value: 'MT', name: 'Malta' },\n { value: 'MH', name: 'Marshall Islands' },\n { value: 'MQ', name: 'Martinique' },\n { value: 'MR', name: 'Mauritania' },\n { value: 'MU', name: 'Mauritius' },\n { value: 'YT', name: 'Mayotte' },\n { value: 'MX', name: 'Mexico' },\n { value: 'FM', name: 'Micronesia' },\n { value: 'MD', name: 'Moldova' },\n { value: 'MC', name: 'Monaco' },\n { value: 'MN', name: 'Mongolia' },\n { value: 'ME', name: 'Montenegro' },\n { value: 'MS', name: 'Montserrat' },\n { value: 'MA', name: 'Morocco' },\n { value: 'MZ', name: 'Mozambique' },\n { value: 'MM', name: 'Myanmar' },\n { value: 'NA', name: 'Namibia' },\n { value: 'NR', name: 'Nauru' },\n { value: 'NP', name: 'Nepal' },\n { value: 'NL', name: 'Netherlands' },\n { value: 'AN', name: 'Netherlands Antilles' },\n { value: 'NC', name: 'New Caledonia' },\n { value: 'NZ', name: 'New Zealand' },\n { value: 'NI', name: 'Nicaragua' },\n { value: 'NE', name: 'Niger' },\n { value: 'NG', name: 'Nigeria' },\n { value: 'NU', name: 'Niue' },\n { value: 'NF', name: 'Norfolk Island' },\n { value: 'MP', name: 'Northern Mariana Islands' },\n { value: 'NO', name: 'Norway' },\n { value: 'OM', name: 'Oman' },\n { value: 'PK', name: 'Pakistan' },\n { value: 'PW', name: 'Palau' },\n { value: 'PS', name: 'Palestine' },\n { value: 'PA', name: 'Panama' },\n { value: 'PG', name: 'Papua New Guinea' },\n { value: 'PY', name: 'Paraguay' },\n { value: 'PE', name: 'Peru' },\n { value: 'PH', name: 'Philippines' },\n { value: 'PN', name: 'Pitcairn' },\n { value: 'PL', name: 'Poland' },\n { value: 'PT', name: 'Portugal' },\n { value: 'PR', name: 'Puerto Rico' },\n { value: 'QA', name: 'Qatar' },\n { value: 'RE', name: 'Réunion' },\n { value: 'SS', name: 'Republic of South Sudan' },\n { value: 'RO', name: 'Romania' },\n { value: 'RU', name: 'Russia' },\n { value: 'RW', name: 'Rwanda' },\n { value: 'SH', name: 'Saint Helena' },\n { value: 'KN', name: 'Saint Kitts and Nevis' },\n { value: 'LC', name: 'Saint Lucia' },\n { value: 'VC', name: 'Saint Vincent & the Grenadines' },\n { value: 'WS', name: 'Samoa' },\n { value: 'SM', name: 'San Marino' },\n { value: 'ST', name: 'Sao Tomé and Principe' },\n { value: 'SA', name: 'Saudi Arabia' },\n { value: 'SN', name: 'Senegal' },\n { value: 'RS', name: 'Serbia' },\n { value: 'SC', name: 'Seychelles' },\n { value: 'SL', name: 'Sierra Leone' },\n { value: 'SG', name: 'Singapore' },\n { value: 'SK', name: 'Slovakia' },\n { value: 'SI', name: 'Slovenia' },\n { value: 'SB', name: 'Solomon Islands' },\n { value: 'SO', name: 'Somalia' },\n { value: 'ZA', name: 'South Africa' },\n { value: 'GS', name: 'South Georgia and the South Sandwich Islands' },\n { value: 'ES', name: 'Spain' },\n { value: 'LK', name: 'Sri Lanka' },\n { value: 'PM', name: 'St. Pierre and Miquelon' },\n { value: 'SD', name: 'Sudan' },\n { value: 'SR', name: 'Suriname' },\n { value: 'SJ', name: 'Svalbard and Jan Mayen' },\n { value: 'SZ', name: 'Swaziland' },\n { value: 'SE', name: 'Sweden' },\n { value: 'CH', name: 'Switzerland' },\n { value: 'SY', name: 'Syrian Arab Republic' },\n { value: 'TW', name: 'Taiwan, R.O.C.' },\n { value: 'TJ', name: 'Tajikistan' },\n { value: 'TZ', name: 'Tanzania' },\n { value: 'TH', name: 'Thailand' },\n { value: 'TL', name: 'Timor-Leste' },\n { value: 'TG', name: 'Togo' },\n { value: 'TK', name: 'Tokelau' },\n { value: 'TO', name: 'Tonga' },\n { value: 'TT', name: 'Trinidad & Tobago' },\n { value: 'TN', name: 'Tunisia' },\n { value: 'TR', name: 'Turkey' },\n { value: 'TM', name: 'Turkmenistan' },\n { value: 'TC', name: 'Turks and Caicos Islands' },\n { value: 'TV', name: 'Tuvalu' },\n { value: 'UG', name: 'Uganda' },\n { value: 'UA', name: 'Ukraine' },\n { value: 'AE', name: 'United Arab Emirates' },\n { value: 'UM', name: 'United States Minor Outlying Islands' },\n { value: 'US', name: 'United States of America' },\n { value: 'UY', name: 'Uruguay' },\n { value: 'UZ', name: 'Uzbekistan' },\n { value: 'VU', name: 'Vanuatu' },\n { value: 'VA', name: 'Vatican City' },\n { value: 'VE', name: 'Venezuela' },\n { value: 'VN', name: 'Viet Nam' },\n { value: 'VI', name: 'Virgin Islands' },\n { value: 'VG', name: 'Virgin Islands (brit.)' },\n { value: 'WF', name: 'Wallis and Futuna' },\n { value: 'EH', name: 'Western Sahara' },\n { value: 'YE', name: 'Yemen' },\n { value: 'ZM', name: 'Zambia' },\n { value: 'ZW', name: 'Zimbabwe' },\n];\nObject.freeze(countries);\n","import { LANG_CODES } from '../utils/mappers/langMapper';\n\nexport const contactLanguageOptions = Object.freeze([\n { value: LANG_CODES.GERMAN, name: 'German' },\n { value: LANG_CODES.ENGLISH, name: 'English' },\n { value: LANG_CODES.ARABIC, name: 'Arabic' },\n { value: LANG_CODES.RUSSIAN, name: 'Russian' },\n { value: 'fa', name: 'Persian' },\n { value: LANG_CODES.SPANISH, name: 'Spanish' },\n]);\n\nconst profileEditKeyPath = 'profile.edit';\nconst professionKeyPath = `${profileEditKeyPath}.profession`;\nexport const sexOptions = Object.freeze([\n { value: 'FEMALE', key: `${profileEditKeyPath}.sex.female` },\n { value: 'MALE', key: `${profileEditKeyPath}.sex.male` },\n { value: 'OTHER', key: `${profileEditKeyPath}.sex.other` },\n]);\n\nexport const professionOptions = Object.freeze([\n { value: 'ZFA_TEACHER', key: `${professionKeyPath}.zfa_teacher` },\n { value: 'PRIVATE_TEACHER', key: `${professionKeyPath}.private_teacher` },\n { value: 'INSTITUTE_MANAGER', key: `${professionKeyPath}.institute_manager` },\n { value: 'INSTITUTE_EMPLOYEE', key: `${professionKeyPath}.institute_employee` },\n { value: 'OTHER', key: `${professionKeyPath}.other` },\n]);\n\nconst languageLevelKeyPath = `${profileEditKeyPath}.languageLevel`;\nexport const languageLevelOptions = Object.freeze([\n { value: 'ZERO', key: `${languageLevelKeyPath}.zero` },\n { value: 'BEGINNER', key: `${languageLevelKeyPath}.beginner` },\n { value: 'INTERMEDIATE', key: `${languageLevelKeyPath}.intermediate` },\n { value: 'EXPERT', key: `${languageLevelKeyPath}.expert` },\n]);\n\nconst writingReadingLevelKeyPath = `${profileEditKeyPath}.writingReadingLevel`;\nexport const writingReadingLevelOptions = Object.freeze([\n { value: 'ZERO', key: `${writingReadingLevelKeyPath}.zero` },\n { value: 'NOT_LATIN', key: `${writingReadingLevelKeyPath}.not_latin` },\n { value: 'UNCERTAIN', key: `${writingReadingLevelKeyPath}.uncertain` },\n { value: 'CAN', key: `${writingReadingLevelKeyPath}.can` },\n]);\n\nconst handicapKeyPath = `${profileEditKeyPath}.handicap`;\nexport const handicapOptions = Object.freeze([\n {\n value: 'BLIND',\n key: `${handicapKeyPath}.blind.title`,\n ariaKey: `${handicapKeyPath}.blind.aria`,\n },\n {\n value: 'POOR_EYESIGHT',\n key: `${handicapKeyPath}.poor_eyesight.title`,\n ariaKey: `${handicapKeyPath}.blind.aria`,\n },\n {\n value: 'WEAK_HEARING',\n key: `${handicapKeyPath}.weak_hearing.title`,\n ariaKey: `${handicapKeyPath}.blind.aria`,\n },\n {\n value: 'MOUSE_USAGE',\n key: `${handicapKeyPath}.mouse_usage.title`,\n ariaKey: `${handicapKeyPath}.blind.aria`,\n },\n]);\n\nconst learningTypeKeyPath = `${profileEditKeyPath}.learningType`;\nexport const learningTypeOptions = Object.freeze([\n { value: 'MUSIC', key: `${learningTypeKeyPath}.music` },\n { value: 'AUDIO', key: `${learningTypeKeyPath}.audio` },\n { value: 'AUTHENTIC_TEXT', key: `${learningTypeKeyPath}.authentic_text` },\n]);\n","import { useRef, useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useHistory, useParams } from 'react-router-dom';\nimport { Input } from '../Input/Input';\nimport { Select } from '../Select/Select';\nimport { Checkbox } from '../Checkbox/Checkbox';\nimport { I18nText } from '../I18n/I18nText';\nimport { StyledStandardButton as StandardButton } from '../StandardButton/StandardButton';\nimport { BirthDateInput } from '../Input/BirthDateInput/BirthDateInput';\nimport {\n emailPattern,\n namePattern,\n passwordDiffersFromEmail,\n passwordRetypeValid,\n passwordValid,\n captcha,\n} from '../../utils/validation/validators';\nimport { ReCaptcha } from '../ReCaptcha/ReCaptcha';\nimport { scrollIntoViewCenter } from '../../utils/htmlUtils';\nimport { hasErrorClassAssigner } from '../../utils/errorClassAssigner';\nimport { Text } from '../Text/Text';\nimport { getDashboardUrl } from '../../utils/url/urlFactory';\nimport { countries } from '../../constants/countries';\nimport { registerUser } from '../../services/userService';\nimport { sexOptions } from '../../constants/userInputOptions';\nimport { CUSTOM_ERROR_TRANSLATION_KEYS } from '../../utils/validation/validationMessages';\nimport { feedbackHelper } from '../../utils/url/feedbackHelpers';\nimport { useI18nContext } from '../../context/I18nContext';\nimport { useTranslation } from '../../hooks/useTranslation';\n\nexport const Registration = () => {\n const { i18n } = useI18nContext();\n\n const [state, setState] = useState({\n isCaptchaPassed: false,\n captchaError: false,\n captchaToken: null,\n });\n\n const captchaRef = useRef();\n const { langCode } = useParams();\n const history = useHistory();\n\n const {\n register,\n handleSubmit,\n getValues,\n formState: { errors },\n } = useForm({\n mode: 'onSubmit',\n reValidateMode: 'onSubmit',\n });\n\n const captchaMessage = useTranslation('client.recaptcha');\n const captchaValidationMessage = useTranslation({\n key: 'client.validator.required',\n parameters: { first: captchaMessage },\n });\n\n const createLink = (href, text) => `\n ${text}\n `;\n\n const createPrivacyPolicyLink = t =>\n createLink('https://p.dw.com/p/1Edck', t('profile.register.privacyPolicy'));\n\n const createAgbLink = t => createLink('https://p.dw.com/p/16hIr', t('profile.register.agb'));\n\n const fullGdpr = t => {\n const label = t('profile.register.agbAndPrivacyPolicyFormat', {\n dataPrivacyPolicy: createPrivacyPolicyLink(t),\n conditionsOfParticipation: createAgbLink(t),\n });\n return (\n <>\n \n  \n \n  \n \n \n );\n };\n\n const checkboxes = [\n {\n name: 'gdpr',\n labelTextFunc: fullGdpr,\n validationErrorTranslationKey: 'client.acceptTermsConditions',\n register: register('gdpr', { required: true }),\n validationError: errors.gdpr,\n },\n {\n name: 'teacher',\n labelText: ,\n register: register('teacher'),\n },\n {\n name: 'newsletter',\n labelText: ,\n register: register('newsletter'),\n },\n ];\n\n const onSubmit = async userData => {\n if (captcha.validateCaptcha(state, setState)) {\n try {\n const response = await registerUser({\n userData,\n captchaToken: state.captchaToken,\n langCode,\n });\n if (response.ok) {\n history.push(feedbackHelper.forRegistered(langCode));\n } else {\n const responseJson = await response.json();\n history.push(feedbackHelper.getForErrorCode(responseJson, langCode));\n }\n } catch (err) {\n history.push(feedbackHelper.getForErrorCode(err, langCode));\n }\n } else {\n scrollIntoViewCenter(captchaRef.current);\n }\n };\n\n const onCaptchaSuccess = token => {\n setState({ ...state, isCaptchaPassed: true, captchaToken: token });\n };\n\n const onCaptchaExpired = () => {\n setState({ ...state, isCaptchaPassed: false, captchaToken: null });\n };\n\n const cancelRegistration = e => {\n e.preventDefault();\n history.push(getDashboardUrl(langCode));\n };\n\n return (\n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n \n \n \n
    \n \n passwordValid(value, getValues().email),\n differsFromEmail: value => passwordDiffersFromEmail(value, getValues().email),\n },\n })}\n validationError={errors.password}\n />\n passwordRetypeValid(value, getValues().password),\n },\n })}\n validationError={errors.passwordRetype}\n />\n \n \n {checkboxes.map(checkbox => (\n \n ))}\n
    \n
    \n
    \n \n {state.captchaError && (\n {captchaValidationMessage}\n )}\n
    \n
    \n
    \n \n cancelRegistration(e)}\n />\n \n
    \n
    \n
    \n
    \n );\n};\n","import { USER } from '../constants/userUrl';\nimport { BASIC_JSON_CONTENT_TYPE_HEADER } from '../constants/services';\nimport { formatPasswordResetUserData } from '../utils/mappers/passwordReset';\n\nconst PS_PREFIX = USER.PS_URL;\nconst PASSWORD_RESOURCE_PUBLIC_RESET = `${PS_PREFIX}public/user/password/reset`;\nexport const PASSWORD_RESOURCE_PUBLIC_RESET_REQUEST = `${PS_PREFIX}public/user/password/reset-request`;\nconst PASSWORD_RESOURCE_PROTECTED = `${PS_PREFIX}protected/user/password`;\n\nexport const changePassword = (oldUserPassword, userPassword) =>\n fetch(`${PASSWORD_RESOURCE_PROTECTED}/change`, {\n method: 'POST',\n body: JSON.stringify({\n oldPassword: oldUserPassword,\n newPassword: userPassword,\n }),\n ...BASIC_JSON_CONTENT_TYPE_HEADER,\n });\n\nexport const requestResetPassword = ({ userData, captchaToken }) => {\n const formattedData = formatPasswordResetUserData({ userData, captchaToken });\n return fetch(PASSWORD_RESOURCE_PUBLIC_RESET_REQUEST, {\n method: 'POST',\n body: JSON.stringify(formattedData),\n ...BASIC_JSON_CONTENT_TYPE_HEADER,\n }).then(response => (response.ok ? Promise.resolve(response) : Promise.reject(response)));\n};\n\nexport const setPasswordByToken = (newPassword, token) =>\n fetch(PASSWORD_RESOURCE_PUBLIC_RESET, {\n method: 'POST',\n body: JSON.stringify({\n newPassword,\n passwordResetToken: token,\n }),\n ...BASIC_JSON_CONTENT_TYPE_HEADER,\n }).then(response => (response.ok ? Promise.resolve(response) : Promise.reject(response)));\n\nexport const getUserByConfirmationId = confirmationId =>\n fetch(`${PS_PREFIX}public/user/mail?token=${confirmationId}`)\n .then(res => res.text())\n .catch(e => console.log(e));\n","export const formatPasswordResetUserData = ({ userData, captchaToken }) => ({\n email: userData.email,\n recaptcha: captchaToken,\n});\n","import { Input } from '../Input';\nimport {\n passwordDiffersFromEmail,\n passwordRetypeValid,\n passwordValid,\n} from '../../../utils/validation/validators';\n\nexport const NewPasswordInputs = ({\n passwordTitleKey,\n passwordPlaceholderKey,\n passwordRepeatTitleKey,\n passwordRepeatPlaceholderKey,\n email,\n register,\n errors,\n getValues,\n}) => {\n return (\n <>\n passwordValid(value),\n differsFromEmail: value => passwordDiffersFromEmail(value, email),\n },\n })}\n validationError={errors.password}\n />\n passwordRetypeValid(value, getValues().password),\n },\n })}\n validationError={errors.passwordRetype}\n />\n \n );\n};\n","import { useForm } from 'react-hook-form';\nimport { useHistory, useParams } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\nimport { I18nText } from '../I18n/I18nText';\nimport { Input } from '../Input/Input';\nimport { StyledStandardButton as StandardButton } from '../StandardButton/StandardButton';\nimport { changePassword } from '../../services/passwordService';\nimport { feedbackHelper } from '../../utils/url/feedbackHelpers';\nimport { NewPasswordInputs } from '../Input/NewPassword/NewPasswordInputs';\nimport { userDataSelector } from '../../state/user/userSelectors';\n\nexport const PasswordChange = () => {\n const { langCode } = useParams();\n const history = useHistory();\n\n const {\n register,\n handleSubmit,\n getValues,\n formState: { errors },\n } = useForm({\n mode: 'onSubmit',\n reValidateMode: 'onSubmit',\n });\n\n const { email } = useSelector(userDataSelector);\n\n const onSubmit = async data => {\n const { oldPassword, password } = data;\n\n try {\n const changePasswordResponse = await changePassword(oldPassword, password);\n\n if (!changePasswordResponse.ok) {\n const jsonResponse = await changePasswordResponse.json();\n history.push(feedbackHelper.getForPasswordChangeErrorCode(jsonResponse, langCode));\n } else {\n history.push(feedbackHelper.forPasswordChanged(langCode));\n }\n } catch (err) {\n history.push(feedbackHelper.forGeneralError(langCode));\n }\n };\n\n return (\n
    \n
    \n
    \n
    \n \n

    \n \n
    \n  \n
    \n  \n

    \n
    \n
    \n
    \n
    \n
    \n \n \n \n \n
    \n
    \n
    \n
    \n );\n};\n","import { useRef, useState } from 'react';\nimport { useHistory, useParams } from 'react-router';\nimport { useForm } from 'react-hook-form';\nimport { I18nText } from '../I18n/I18nText';\nimport { Input } from '../Input/Input';\nimport { captcha, emailPattern } from '../../utils/validation/validators';\nimport { hasErrorClassAssigner } from '../../utils/errorClassAssigner';\nimport { ReCaptcha } from '../ReCaptcha/ReCaptcha';\nimport { StyledStandardButton as StandardButton } from '../StandardButton/StandardButton';\nimport { scrollIntoViewCenter } from '../../utils/htmlUtils';\nimport { requestResetPassword } from '../../services/passwordService';\nimport { feedbackHelper } from '../../utils/url/feedbackHelpers';\nimport { useTranslation } from '../../hooks/useTranslation';\n\nexport const PasswordReset = () => {\n const [state, setState] = useState({\n isCaptchaPassed: false,\n captchaError: false,\n captchaToken: null,\n });\n const { langCode } = useParams();\n const captchaRef = useRef();\n const history = useHistory();\n\n const {\n register,\n handleSubmit,\n formState: { errors },\n } = useForm({\n mode: 'onSubmit',\n reValidateMode: 'onSubmit',\n });\n\n const captchaMessage = useTranslation('client.recaptcha');\n const captchaValidationMessage = useTranslation({\n key: 'client.validator.required',\n parameters: { first: captchaMessage },\n });\n\n const onSubmit = async data => {\n if (!captcha.validateCaptcha(state, setState)) {\n scrollIntoViewCenter(captchaRef.current);\n return;\n }\n try {\n await requestResetPassword({ userData: data, captchaToken: state.captchaToken });\n history.push(feedbackHelper.forPasswordResetRequest(langCode));\n } catch (err) {\n history.push(feedbackHelper.getForErrorCode(err, langCode));\n }\n };\n\n const onCaptchaSuccess = token => {\n setState({ ...state, isCaptchaPassed: true, captchaToken: token });\n };\n\n const onCaptchaExpired = () => {\n setState({ ...state, isCaptchaPassed: false, captchaToken: null });\n };\n\n return (\n
    \n
    \n
    \n
    \n \n \n
    \n  \n
    \n  \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n {state.captchaError && (\n {captchaValidationMessage}\n )}\n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n );\n};\n","import { Link } from 'react-router-dom';\nimport { useLocation, useParams } from 'react-router';\nimport { I18nText } from '../I18n/I18nText';\nimport { StyledStandardButton } from '../StandardButton/StandardButton';\nimport { feedbackHelper } from '../../utils/url/feedbackHelpers';\nimport { getTargetPageUrl, URL_SEARCH_PARAM_TARGET_PATH } from '../../utils/url/urlFactory';\nimport { COMMON_FEEDBACK_TRANSLATION_KEYS } from '../../constants/feedback';\n\nexport const StatusFeedback = () => {\n const { langCode, feedbackType } = useParams();\n const { search } = useLocation();\n\n const feedbackContentKey = feedbackHelper.getFeedbackContentKey(feedbackType);\n const urlParams = new URLSearchParams(search);\n const targetPath = urlParams.get(URL_SEARCH_PARAM_TARGET_PATH);\n const targetPageUrl = targetPath || getTargetPageUrl(feedbackType, langCode);\n\n return (\n
    \n
    \n
    \n
    \n
    \n \n \n \n \n \n
    \n
    \n
    \n
    \n
    \n );\n};\n","import { useDispatch } from 'react-redux';\nimport { useHistory, useParams } from 'react-router-dom';\nimport { useForm } from 'react-hook-form';\nimport { Checkbox } from '../../Checkbox/Checkbox';\nimport { I18nText } from '../../I18n/I18nText';\nimport { StyledStandardButton } from '../../StandardButton/StandardButton';\nimport { deleteUser } from '../../../services/userService';\nimport { deleteUserAccount } from '../../../state/user/userDuck';\nimport { feedbackHelper } from '../../../utils/url/feedbackHelpers';\nimport { useTranslation } from '../../../hooks/useTranslation';\n\nexport const DeleteAccountModal = ({ onClose }) => {\n const { langCode } = useParams();\n const history = useHistory();\n const dispatch = useDispatch();\n\n const { register, handleSubmit } = useForm({\n mode: 'onSubmit',\n });\n\n const confirmDeleteLabel = useTranslation('profile.edit.modal.confirmDelete');\n\n const onSubmit = async () => {\n try {\n const response = await deleteUser();\n if (response.ok) {\n dispatch(deleteUserAccount());\n history.push(feedbackHelper.forUserDelete(langCode));\n } else {\n const responseJson = await response.json();\n history.push(feedbackHelper.getForErrorCode(responseJson, langCode));\n }\n } catch (err) {\n history.push(feedbackHelper.getForErrorCode(err, langCode));\n }\n };\n\n return (\n <>\n
    \n
    \n
    \n \n
    \n \n \n
    \n
    \n \n
    \n \n \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n );\n};\n","import { useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Link, useHistory } from 'react-router-dom';\nimport { useParams } from 'react-router';\nimport {\n contactLanguageOptions,\n handicapOptions,\n languageLevelOptions,\n learningTypeOptions,\n professionOptions,\n sexOptions,\n writingReadingLevelOptions,\n} from '../../constants/userInputOptions';\nimport { setUser } from '../../state/user/userDuck';\nimport { feedbackHelper } from '../../utils/url/feedbackHelpers';\nimport { updateUserProfile } from '../../services/userService';\nimport { I18nText } from '../I18n/I18nText';\nimport { DeleteAccountModal } from '../Modal/DeleteAccountModal/DeleteAccountModal';\nimport { ModalIntegration } from '../Modal/ModalIntegration';\nimport { StyledStandardButton } from '../StandardButton/StandardButton';\nimport { getPasswordChangeUrl } from '../../utils/url/urlFactory';\nimport { Checkbox } from '../Checkbox/Checkbox';\nimport { Select } from '../Select/Select';\nimport { BirthDateInput } from '../Input/BirthDateInput/BirthDateInput';\nimport { countries } from '../../constants/countries';\nimport { Input } from '../Input/Input';\nimport { emailPattern, namePattern, transcriptionPattern } from '../../utils/validation/validators';\nimport { CUSTOM_ERROR_TRANSLATION_KEYS } from '../../utils/validation/validationMessages';\nimport { userDataSelector } from '../../state/user/userSelectors';\nimport { useI18nContext } from '../../context/I18nContext';\n\nexport const UserProfile = () => {\n const history = useHistory();\n const { langCode } = useParams();\n const dispatch = useDispatch();\n const userData = useSelector(userDataSelector);\n const { i18n } = useI18nContext();\n\n const [isDeleteModalOpen, setDeleteModalOpen] = useState(false);\n\n const {\n register,\n handleSubmit,\n getValues,\n formState: { errors },\n } = useForm({\n mode: 'onSubmit',\n reValidateMode: 'onSubmit',\n });\n\n const additionalSelectInputs = [\n { name: 'contactLanguage', options: contactLanguageOptions, translationKeySuffix: '' },\n { name: 'profession', options: professionOptions },\n { name: 'languageLevel', options: languageLevelOptions },\n { name: 'writingReadingLevel', options: writingReadingLevelOptions },\n { name: 'handicap', options: handicapOptions },\n { name: 'learningType', options: learningTypeOptions },\n ];\n\n const checkboxInputs = [\n { name: 'teacher', translationKeySuffix: '.teacher' },\n { name: 'newsletter', translationKeySuffix: '.newsletter.subscribe' },\n { name: 'signalSoundDisabled', translationKeySuffix: '.signalSoundTurnOff' },\n ];\n\n const removeEmptySelectValues = data => {\n const cleanedData = { ...data };\n additionalSelectInputs.forEach(selectInputName => {\n const value = cleanedData[selectInputName.name];\n if (value === '') {\n // eslint-disable-next-line fp/no-delete\n delete cleanedData[selectInputName.name];\n }\n });\n return cleanedData;\n };\n\n const onSubmit = async data => {\n const cleanedData = removeEmptySelectValues(data);\n try {\n const updatedData = await updateUserProfile(cleanedData);\n dispatch(setUser(updatedData));\n updatedData.email !== getValues().email\n ? history.push(feedbackHelper.forMailChangeRequest(langCode))\n : history.push(feedbackHelper.forProfileUpdated(langCode));\n } catch (err) {\n history.push(feedbackHelper.getForErrorCode(err, langCode));\n }\n };\n\n const toggleDeleteAccountModal = () => {\n setDeleteModalOpen(!isDeleteModalOpen);\n };\n\n return (\n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n \n \n \n \n \n \n
    \n \n \n \n \n \n
    \n {additionalSelectInputs.map(({ name, options, translationKeySuffix = '.title' }) => (\n \n ))}\n {checkboxInputs.map(({ name, translationKeySuffix }) => (\n \n ))}\n \n \n \n \n \n \n \n \n \n
    \n
    \n
    \n
    \n );\n};\n","import { useEffect, useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useHistory, useParams } from 'react-router-dom';\nimport { feedbackHelper } from '../../utils/url/feedbackHelpers';\nimport { getUserByConfirmationId, setPasswordByToken } from '../../services/passwordService';\nimport { I18nText } from '../I18n/I18nText';\nimport { NewPasswordInputs } from '../Input/NewPassword/NewPasswordInputs';\nimport { StyledStandardButton as StandardButton } from '../StandardButton/StandardButton';\nimport { StyledLoadingMessage as LoadingMessage } from '../commons/LoadingMessage';\n\nexport const SetNewPassword = ({ confirmationId }) => {\n const history = useHistory();\n const { langCode } = useParams();\n const [email, setEmail] = useState(null);\n\n useEffect(() => {\n getUserByConfirmationId(confirmationId)\n .then(userEmailResponse => {\n if (!userEmailResponse.includes('@')) {\n history.push(feedbackHelper.forInvalidToken(langCode));\n } else {\n setEmail(userEmailResponse);\n }\n })\n .catch(e => {\n history.push(feedbackHelper.getForErrorCode(e, langCode));\n });\n // eslint-disable-next-line\n }, []);\n\n const {\n register,\n handleSubmit,\n getValues,\n formState: { errors },\n } = useForm({\n mode: 'onSubmit',\n reValidateMode: 'onSubmit',\n });\n\n const onSubmit = async () => {\n try {\n await setPasswordByToken(getValues().password, confirmationId);\n history.push(feedbackHelper.forSetPassword(langCode));\n } catch (err) {\n history.push(feedbackHelper.getForErrorCode(err, langCode));\n }\n };\n\n return email ? (\n
    \n
    \n
    \n
    \n \n

    \n \n
    \n  \n
    \n  \n

    \n
    \n
    \n
    \n
    \n
    \n \n \n \n
    \n
    \n
    \n
    \n ) : (\n \n );\n};\n","/* eslint-disable jsx-a11y/anchor-is-valid,jsx-a11y/aria-role */\nimport { useSelector } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport { createGlobalStyle } from 'styled-components';\nimport { DwPicture } from '../DwPicture/DwPicture';\nimport { I18nText } from '../I18n/I18nText';\nimport { getContentUrl } from '../../utils/url/urlFactory';\nimport { learningLevelMapper } from '../../utils/learningLevelUtils';\nimport { findLessonLearnProgressSelector } from '../../state/progress/learnProgressSelectors';\nimport { LearnProgressIcon } from '../LearnProgressIcon/LearnProgressIcon';\nimport { progressIconColors } from '../ProgressIcon/progressIconColors';\n\nexport const PlacementTile = ({ lesson, index }) => {\n const { dkLearningLevel, id, name, subTitle } = lesson;\n const lessonProgress = useSelector(findLessonLearnProgressSelector(id));\n const level = learningLevelMapper[dkLearningLevel];\n\n return (\n \n
    \n \n \n \n

    {level}

    \n \n \n
    \n \n );\n};\n\nconst PlacementTestGlobalStyles = createGlobalStyle`\n div.allcourses .main-course {\n float: left;\n text-align: left\n }\n\n div.allcourses .main-course h2 {\n float: left;\n margin: 0 6px 0 0\n }\n\n @media (max-width: 767px) {\n div.allcourses .main-course h2 {\n margin: 5px 6px 0 10px\n }\n }\n\n div.allcourses .main-course p.course-title {\n margin: 6px 0 0\n }\n\n div.allcourses .main-course span.progress-icon {\n float: right;\n margin-top: 20px\n }\n\n div.allcourses .main-course span.progress-icon.half {\n margin-left: 8px\n }\n\n @media (min-width: 768px) {\n div.allcourses .main-course p {\n clear: left\n }\n\n div.allcourses .main-course p.course-title {\n margin: 32px 7px 0 16px\n }\n }\n\n @media (min-width: 992px) {\n div.allcourses .main-course span.progress-icon.half {\n margin-left: 10px\n }\n }\n\n @media (max-width: 767px) {\n div.allcourses .main-course[class*=assess] {\n height: 180px\n }\n\n div.allcourses .main-course[class*=assess] span.progress-icon {\n margin-top: 5px\n }\n\n div.allcourses .main-course[class*=assess] h2 {\n font-size: 36px;\n line-height: 40px;\n display: inline;\n float: none;\n width: auto;\n margin: 0\n }\n\n div.allcourses .main-course[class*=assess] p {\n max-width: 100%;\n max-height: 100%;\n overflow: visible;\n opacity: 1;\n margin: 0\n }\n }\n`;\n\nexport const PlacementTest = ({ data }) => {\n const { name, subTitle, mainContentImageLink, lessons } = data.content;\n return (\n
    \n
    \n
    \n
    \n
    \n
    \n

    {name}

    \n
    \n
    \n

    {subTitle}

    \n
    \n
    \n \n
    \n \n
    \n {lessons.map((lesson, index) => (\n \n ))}\n \n
    \n \n
    \n
    \n
    \n
    \n );\n};\n","import gql from 'graphql-tag';\nimport { useParams } from 'react-router';\nimport { toLang } from '../utils/mappers/langMapper';\nimport { PageContainer } from '../components/Page/PageContainer';\nimport { PlacementTest } from '../components/PlacementTest/PlacementTest';\nimport { WithGraphQLQueryHandling } from '../components/WithGraphQLQueryHandling/WithGraphQLQueryHandling';\nimport { getPlacementTestIdForLangCode } from '../utils/mappers/placementTestCourseIds';\nimport { metaDataFragment, PageMetaData } from '../components/Page/PageMetaData';\nimport { PAGE_TYPES } from '../constants/pageTypes';\nimport {\n gtmDataLayerFragment,\n GtmScriptWithDataLayer,\n} from '../components/GoogleTagManager/GtmScriptWithDataLayer';\n\nexport const placementTestPageQuery = gql`\n query PlacementTestPage($id: Int!, $lang: Language!) {\n content(id: $id, lang: $lang) {\n ... on Course {\n id\n name\n subTitle\n mainContentImageLink {\n name\n targetId\n }\n lessons {\n subTitle: teaser\n id\n name\n language\n dkLearningLevel\n }\n ...${metaDataFragment.name}\n ${gtmDataLayerFragment.partial()}\n }\n }\n }\n ${metaDataFragment.fragment({ type: 'Course' })}\n`;\n\nexport const PlacementTestPage = () => {\n const { langCode } = useParams();\n const placementCourseId = getPlacementTestIdForLangCode(langCode);\n\n const placementTestPageQueryVariables = {\n id: placementCourseId,\n lang: toLang(langCode),\n };\n\n return (\n \n \n {data => (\n <>\n \n \n \n \n )}\n \n \n );\n};\n","/* eslint-disable jsx-a11y/aria-role */\nimport { useEffect, useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport { useParams } from 'react-router';\nimport { I18nText } from '../I18n/I18nText';\nimport { getHelpUrl } from '../../utils/url/urlFactory';\nimport { StyledStandardButton } from '../StandardButton/StandardButton';\nimport { useI18nContext } from '../../context/I18nContext';\nimport { getLastEditedLessonsIds } from '../../services/learnProgressService';\n\nconst SCOPE = Object.freeze({\n LAST_LESSON: 1,\n LAST_THREE_LESSONS: 3,\n LAST_TEN_LESSONS: 10,\n ALL_LESSONS: 0,\n});\n\nconst scopeToTranslationKeyMapping = Object.freeze({\n [SCOPE.LAST_LESSON]: 'vocabularyTrainer.last',\n [SCOPE.LAST_THREE_LESSONS]: 'vocabularyTrainer.last3',\n [SCOPE.LAST_TEN_LESSONS]: 'vocabularyTrainer.last10',\n [SCOPE.ALL_LESSONS]: 'vocabularyTrainer.all',\n});\n\nexport const VocabularyTrainerStart = ({\n setLastLessonsIds,\n setNumberOfVocabularies,\n handleExerciseStart,\n}) => {\n const [numberOfLessons, setNumberOfLessons] = useState(SCOPE.LAST_LESSON);\n const { langCode } = useParams();\n const { i18n } = useI18nContext();\n\n const handleChangeScope = async value => {\n const lastEditedLessonIds = await getLastEditedLessonsIds(value, langCode);\n setNumberOfLessons(value);\n setLastLessonsIds && setLastLessonsIds(lastEditedLessonIds);\n };\n\n const handleSubmit = e => {\n e.preventDefault();\n handleExerciseStart && handleExerciseStart();\n };\n\n useEffect(() => {\n handleChangeScope(SCOPE.LAST_LESSON);\n // eslint-disable-next-line\n }, []);\n\n return (\n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n\n
    \n
    \n setNumberOfVocabularies(10)}\n />\n setNumberOfVocabularies(30)}\n />\n setNumberOfVocabularies(50)}\n />\n
    \n
    \n\n
    \n
    \n
    \n

    \n \n

    \n
    \n\n
    \n handleChangeScope(e.target.value)}\n onBlur={e => handleChangeScope(e.target.value)}\n >\n \n \n \n \n \n
    \n\n
    \n \n \n \n
    \n
    \n
    \n
    \n );\n};\n","import classnames from 'classnames';\nimport styled from 'styled-components';\nimport { I18nText } from '../I18n/I18nText';\nimport { useRtlContext } from '../../hooks/useRtl';\n\nexport const VocabularyTrainerStatus = ({ number, total, top, bottom, className }) => {\n const { isRtl } = useRtlContext();\n\n const rtlText = (\n
    \n \n {` ${number} `}\n \n {` ${total}`}\n
    \n );\n\n const ltrText = (\n
    \n {`${number} `}\n \n {` ${total} `}\n \n
    \n );\n\n return (\n
    \n
    \n \n {isRtl ? rtlText : ltrText}\n
    \n
    \n
    \n );\n};\n\nexport const StyledVocabularyTrainerStatus = styled(VocabularyTrainerStatus)`\n & div.exercise-nav div.exercise-nav-title.rtl {\n direction: rtl;\n }\n`;\n","import { RichText } from '../RichText/RichText';\nimport { DwPicture } from '../DwPicture/DwPicture';\n\nexport const BubbleContainer = ({ children, mainContentImage }) => {\n return (\n
    \n {mainContentImage && }\n \n
    \n );\n};\n","import { useRef, useState, useEffect } from 'react';\nimport styled, { createGlobalStyle } from 'styled-components';\nimport classnames from 'classnames';\nimport { BubbleContainer } from './BubbleContainer';\nimport { StyledSolveButton } from '../SolveCheckButton/SolveButton';\nimport { I18nText } from '../I18n/I18nText';\n\nconst VocabularyTrainerItemGlobalStyles = createGlobalStyle` \n /* @noflip */\n .alwaysLtr {\n text-align: left;\n direction: ltr;\n }\n`;\n\nexport const VocabularyTrainerItem = ({\n vocabulary: { text, audios, subTitle, name },\n onSolved,\n isHidden,\n className,\n}) => {\n const audioRef = useRef();\n const { mp3Src, mainContentImage } = audios[0] || {};\n const [isSolved, setSolved] = useState(false);\n const [audioStatus, setAudioStatus] = useState('');\n const [isDisabled, setDisabled] = useState(false);\n\n const onSolveClicked = event => {\n event.preventDefault();\n setSolved(true);\n setDisabled(true);\n if (!mp3Src) {\n setAudioStatus('ending');\n onSolved();\n }\n };\n\n const onAnswerClicked = event => {\n event.preventDefault();\n audioRef.current.play();\n setAudioStatus('playing');\n };\n\n const onAudioEnded = () => {\n setAudioStatus('ending');\n onSolved();\n };\n\n useEffect(() => {\n if (!isHidden) {\n setSolved(false);\n setAudioStatus('');\n setDisabled(false);\n }\n }, [text, isHidden]);\n\n return (\n <>\n
    \n
    \n
    \n {text}\n
    \n
    \n \n {isSolved ? (\n // eslint-disable-next-line jsx-a11y/anchor-is-valid\n \n {/* eslint-disable-next-line jsx-a11y/media-has-caption */}\n \n \n \n\n {name}\n {subTitle && {subTitle}}\n
    \n \n ) : (\n
    \n \n
    ...
    \n
    \n
    \n )}\n
    \n
    \n
    \n {!isHidden && (\n
    \n
    \n \n \n \n
    \n
    \n )}\n \n );\n};\n\nexport const StyledVocabularyTrainerItem = styled(VocabularyTrainerItem)`\n & .answer-multiple-text:hover:after {\n -webkit-transition: all 0.3s linear;\n -moz-transition: all 0.3s linear;\n -o-transition: all 0.3s linear;\n transition: all 0.3s linear;\n border-left-color: #0098ff;\n }\n & .bubble .hint {\n display: block;\n font-size: 80%;\n font-style: italic;\n }\n`;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgSmileyPositive(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, [\"title\", \"titleId\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"100%\",\n height: \"100%\",\n viewBox: \"0 0 55 54\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n xmlSpace: \"preserve\",\n style: {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n strokeLinejoin: \"round\",\n strokeMiterlimit: 1.41421\n },\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"circle\", {\n className: \"dot\",\n cx: 27.5,\n cy: 27,\n r: 27,\n style: {\n fill: \"#A9A094\"\n }\n }), /*#__PURE__*/React.createElement(\"g\", {\n id: \"face\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M26.439,37.092l-11.313,-11.314l-2.829,2.829l11.314,11.313l2.828,-2.828Z\",\n style: {\n fill: \"#fff\"\n }\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M39.874,18l-19.092,19.092l2.829,2.828l19.092,-19.092l-2.829,-2.828Z\",\n style: {\n fill: \"#fff\"\n }\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgSmileyPositive);\nexport default __webpack_public_path__ + \"static/media/smiley-positive.3d91069e.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgSmileyNegative(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, [\"title\", \"titleId\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"100%\",\n height: \"100%\",\n viewBox: \"0 0 55 54\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n xmlSpace: \"preserve\",\n style: {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n strokeLinejoin: \"round\",\n strokeMiterlimit: 1.41421\n },\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"circle\", {\n className: \"dot\",\n cx: 27.5,\n cy: 27,\n r: 27,\n style: {\n fill: \"#A9A094\"\n }\n }), /*#__PURE__*/React.createElement(\"g\", {\n id: \"face\"\n }, /*#__PURE__*/React.createElement(\"circle\", {\n cx: 18.5,\n cy: 18.5,\n r: 3.5,\n style: {\n fill: \"#fff\"\n }\n }), /*#__PURE__*/React.createElement(\"circle\", {\n cx: 36.5,\n cy: 18.5,\n r: 3.5,\n style: {\n fill: \"#fff\"\n }\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M40.902,32.312l-26.41,5.613l0.624,2.935l26.41,-5.614l-0.624,-2.934Z\",\n style: {\n fill: \"#fff\"\n }\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgSmileyNegative);\nexport default __webpack_public_path__ + \"static/media/smiley-negative.6c289ab6.svg\";\nexport { ForwardRef as ReactComponent };","import styled from 'styled-components';\nimport { ReactComponent as SmileyPositive } from '../svg/smiley-positive.svg';\nimport { ReactComponent as SmileyNegative } from '../svg/smiley-negative.svg';\n\nexport const StyledSmileyPositive = styled(SmileyPositive)``;\nexport const StyledSmileyNegative = styled(SmileyNegative)``;\n","import { useState } from 'react';\nimport classnames from 'classnames';\nimport styled from 'styled-components';\nimport {\n StyledSmileyNegative as SmileyNegative,\n StyledSmileyPositive as SmileyPositive,\n} from '../../assets/icons/Smiley';\nimport { useRtlContext } from '../../hooks/useRtl';\n\nexport const VocabularyTrainerSmileys = ({ handleCorrectAnswer, handleWrongAnswer, className }) => {\n const ANSWER_STATE = Object.freeze({\n INITIAL: 'initial',\n WRONG: 'wrong',\n CORRECT: 'correct',\n });\n const { isRtl } = useRtlContext();\n const [answerState, setAnswerState] = useState(ANSWER_STATE.INITIAL);\n\n const onPositiveSmileyClicked = e => {\n e.preventDefault();\n setAnswerState(ANSWER_STATE.CORRECT);\n handleCorrectAnswer();\n };\n\n const onNegativeSmileyClicked = e => {\n e.preventDefault();\n setAnswerState(ANSWER_STATE.WRONG);\n handleWrongAnswer();\n };\n\n return (\n
    \n
    \n {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}\n \n \n \n
    \n
    \n {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}\n \n \n \n
    \n
    \n );\n};\n\nexport const StyledVocabularyTrainerSmileys = styled(VocabularyTrainerSmileys)`\n @media (min-width: 768px) {\n &.isRtl .col-lg-offset-5 {\n margin-right: 0;\n margin-left: 33.3333%;\n }\n }\n`;\n","import { useState } from 'react';\nimport { useTimeout } from './useTimeout';\n\nexport const TRANSITION_STATUS = Object.freeze({\n INITIAL: 'initial',\n BUSY: 'busy',\n READY: 'ready',\n});\n\nexport const useTransition = ({ delay }) => {\n const [transition, setTransition] = useState({ status: TRANSITION_STATUS.INITIAL });\n\n useTimeout(\n {\n callback: () => {\n if (transition.status === TRANSITION_STATUS.BUSY) {\n transition.onTransitionEnd();\n }\n setTransition({ status: TRANSITION_STATUS.READY });\n },\n delay,\n },\n [transition],\n );\n\n const startTransition = newTransition => {\n setTransition({ ...newTransition, status: TRANSITION_STATUS.BUSY });\n };\n\n return { transitionStatus: transition.status, startTransition };\n};\n","import { useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport classnames from 'classnames';\nimport { useHistory, useParams } from 'react-router';\nimport { StyledVocabularyTrainerStatus as VocabularyTrainerStatus } from './VocabularyTrainerStatus';\nimport { StyledVocabularyTrainerItem as VocabularyTrainerItem } from './VocabularyTrainerItem';\nimport { StyledVocabularyTrainerSmileys as VocabularyTrainerSmileys } from './VocabularyTrainerSmileys';\nimport { useTransition } from '../../hooks/useTransition';\nimport { getFeedbackUrl } from '../../utils/url/urlFactory';\nimport { FEEDBACK_TYPES } from '../../constants/feedback';\n\nexport const VocabularyTrainerExercise = ({ vocabularies, handleExerciseEnd, className }) => {\n const [isSolved, setSolved] = useState(false);\n const [correctAnswers, setCorrectAnswers] = useState(0);\n const [trainerVocabularies, setTrainerVocabularies] = useState(vocabularies);\n const history = useHistory();\n const { langCode } = useParams();\n\n const nextVocabulary = newTrainerVocabularies => {\n const slicedTrainerVocabularies = newTrainerVocabularies.slice(1);\n setTrainerVocabularies(slicedTrainerVocabularies);\n setSolved(false);\n if (!slicedTrainerVocabularies.length) {\n handleExerciseEnd();\n }\n };\n\n const { transitionStatus, startTransition } = useTransition({\n delay: 300,\n });\n\n useEffect(() => {\n if (vocabularies.length === 0) {\n history.push(getFeedbackUrl(FEEDBACK_TYPES.VOCABULARY_TRAINER_NO_VOCABULARIES, langCode));\n }\n }, [history, langCode, vocabularies.length]);\n\n const onSolved = () => {\n setSolved(true);\n };\n\n const handleCorrectAnswer = () => {\n startTransition({ onTransitionEnd: () => nextVocabulary(trainerVocabularies) });\n setCorrectAnswers(value => value + 1);\n };\n const handleWrongAnswer = () => {\n const newTrainerVocabularies = [...trainerVocabularies, trainerVocabularies[0]];\n startTransition({ onTransitionEnd: () => nextVocabulary(newTrainerVocabularies) });\n };\n\n if (!trainerVocabularies.length) {\n return null;\n }\n\n return (\n \n \n \n {isSolved && (\n
    \n \n
    \n )}\n \n
    \n );\n};\n\nexport const StyledVocabularyTrainerExercise = styled(VocabularyTrainerExercise)`\n &.busy {\n opacity: 0;\n }\n &.ready {\n opacity: 1;\n }\n & {\n opacity: 0;\n -webkit-transition: opacity 0.3s ease;\n -moz-transition: opacity 0.3s ease;\n -o-transition: opacity 0.3s ease;\n transition: opacity 0.3s ease;\n }\n`;\n","import gql from 'graphql-tag';\nimport { toLang } from '../../utils/mappers/langMapper';\n\nexport const knowledgeType = { field: 'knowledgeType', operator: 'match', value: 'VOCABULARY' };\n\nexport const getCondition = (searchQuery, field) => {\n if (!searchQuery) {\n return [knowledgeType];\n }\n return [knowledgeType, { field, operator: 'match', value: searchQuery }];\n};\n\nexport const getQueryVariables = ({\n langCode,\n offset = 0,\n amount = 12,\n searchQuery,\n sort = true,\n}) => ({\n lang: toLang(langCode),\n offset,\n amount,\n originalCondition: getCondition(searchQuery, 'name_partial'),\n translationCondition: getCondition(searchQuery, 'text_partial'),\n sort: !searchQuery && sort ? [{ field: 'name_not_analyzed', order: 'ASC' }] : [],\n});\n\nexport const vocabularyFragment = {\n name: 'vocabularyFragment',\n fragment() {\n return gql`\n fragment ${this.name} on Knowledge {\n id\n text\n name\n subTitle\n }\n `;\n },\n};\n\nexport const searchResultFragment = {\n name: 'searchResult',\n fragment() {\n return gql`\n fragment ${this.name} on SearchResult {\n totalHits\n amount\n offset\n hits {\n ...vocabularyFragment\n }\n }\n ${vocabularyFragment.fragment()}\n `;\n },\n};\n\nconst searchQueryPart = name => `${name}: findContents(\n lang: $lang\n types: [KNOWLEDGE]\n offset: $offset\n amount: $amount\n must: $${name}Condition\n should: []\n mustNot: []\n sort: $sort\n ) {\n ...searchResult\n }\n `;\n\nexport const vocabularySearchQuery = gql`\n query VocabularySearch(\n $lang: Language!, $offset: Int!\n $amount: Int!\n $originalCondition: [QueryConditionInput!]\n $translationCondition: [QueryConditionInput!] \n $sort: [QuerySortInput!]\n ) {\n ${searchQueryPart('original')}\n ${searchQueryPart('translation')}\n }\n ${searchResultFragment.fragment()}\n `;\n","import { useEffect, useState } from 'react';\nimport gql from 'graphql-tag';\nimport { useHistory, useLocation, useParams } from 'react-router';\nimport { VocabularyTrainerStart } from './VocabularyTrainerStart';\nimport { StyledVocabularyTrainerExercise as VocabularyTrainerExercise } from './VocabularyTrainerExercise';\nimport { WithGraphQLQueryHandling } from '../WithGraphQLQueryHandling/WithGraphQLQueryHandling';\nimport { toLang } from '../../utils/mappers/langMapper';\nimport { shuffle } from '../../utils/commons';\nimport {\n getFeedbackUrl,\n PAGE_VOCABULARY_TRAINER_START,\n getVocabularyTrainerPage,\n} from '../../utils/url/urlFactory';\nimport { FEEDBACK_TYPES } from '../../constants/feedback';\nimport { vocabularyFragment } from '../Vocabulary/VocabularyQuery';\n\nexport const vocabularyTrainerQuery = gql`\n query VocabularyTrainer($keys: [ContentKeyInput]!, $lang: Language!) {\n contents(keys: $keys, lang: $lang) {\n ... on Lesson {\n id\n vocabularies {\n ...vocabularyFragment\n audios {\n mp3Src\n mainContentImage {\n id\n name\n }\n }\n }\n }\n }\n }\n ${vocabularyFragment.fragment()}\n`;\n\nexport const makeQueryVariables = (ids, langCode) => ({\n keys: ids.map(lessonId => ({\n id: lessonId,\n type: 'LESSON',\n })),\n lang: toLang(langCode),\n});\n\nexport const VocabularyTrainer = () => {\n const [lastLessonsIds, setLastLessonsIds] = useState([]);\n const [numberOfVocabularies, setNumberOfVocabularies] = useState(0);\n const [isStarted, setStarted] = useState(false);\n const { langCode } = useParams();\n const location = useLocation();\n const history = useHistory();\n\n const handleExerciseStart = () => {\n setStarted(true);\n };\n\n const handleExerciseEnd = () => {\n setStarted(false);\n };\n\n useEffect(() => {\n if (location.pathname.includes(PAGE_VOCABULARY_TRAINER_START)) {\n setStarted(false);\n setLastLessonsIds([]);\n history.replace(getVocabularyTrainerPage(langCode));\n }\n if (isStarted && !lastLessonsIds.length) {\n history.push(getFeedbackUrl(FEEDBACK_TYPES.VOCABULARY_TRAINER_NO_VOCABULARIES, langCode));\n }\n }, [history, langCode, lastLessonsIds.length, isStarted, location.pathname]);\n\n const getRandomVocabularies = ({ contents }) => {\n const vocabularies = contents.map(content => (content ? content.vocabularies : [])).flat(1);\n const uniqueVocabularies = Array.from(new Set(vocabularies));\n return shuffle(uniqueVocabularies).slice(0, numberOfVocabularies);\n };\n\n if (!isStarted) {\n return (\n \n );\n }\n\n return (\n \n {data => (\n \n )}\n \n );\n};\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport gql from 'graphql-tag';\nimport { useParams } from 'react-router';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Link, useHistory } from 'react-router-dom';\nimport { useEffect } from 'react';\nimport { ContentHeadline } from '../ContentContainer/ContentHeadline/ContentHeadline';\nimport { ContentSection } from '../ContentContainer/ContentSection/ContentSection';\nimport { I18nText } from '../I18n/I18nText';\nimport { LessonMenu } from '../Lesson/LessonMenu/LessonMenu';\nimport { Summary } from '../Lesson/LessonExercise/LessonExerciseResult/Summary';\nimport { calculatePercentage } from '../../utils/commons';\nimport { findLessonLearnProgressSelector } from '../../state/progress/learnProgressSelectors';\nimport { getContentUrl, getLessonExerciseUrl } from '../../utils/url/urlFactory';\nimport { getDWStructureUrl, normalizeUrlName } from '../../utils/url/url';\nimport { isPlacementTestCourse } from '../../utils/mappers/placementTestCourseIds';\nimport { learningLevelMapper } from '../../utils/learningLevelUtils';\nimport { MARKS } from '../../constants/marks';\nimport { userSelector } from '../../state/user/userSelectors';\nimport { handleCertificateGeneration } from '../../utils/certificateUtils';\nimport { readLessonProgress } from '../../state/progress/learnProgressDuck';\nimport { filterLessonExerciseOverviewItems, isFinalTestLesson } from '../../utils/lessonUtils';\nimport { PAGE_TYPES } from '../../constants/pageTypes';\nimport { PageMetaData } from '../Page/PageMetaData';\nimport { GtmScriptWithDataLayer } from '../GoogleTagManager/GtmScriptWithDataLayer';\n\nexport const placementResultFragment = gql`\n fragment PlacementResult on Course {\n id\n name\n language\n dkLearningLevel\n }\n`;\n\nconst getFirstCourseOfEachLevel = allDkCourses => {\n const result = [];\n Object.keys(learningLevelMapper).forEach(learningLevel => {\n const targetCourse = allDkCourses.find(course => course.dkLearningLevel === +learningLevel);\n if (targetCourse) {\n // eslint-disable-next-line fp/no-mutating-methods\n result.push(targetCourse);\n }\n });\n return result;\n};\n\nexport const PlacementAndFinalTestResult = ({ data }) => {\n const { lesson, course, dkCourses: allDkCourses } = data;\n const { dkLearningLevel: courseDkLearningLevel } = course;\n const dkCourses = getFirstCourseOfEachLevel(allDkCourses);\n const {\n dwLinks,\n id: lessonId,\n name,\n overviewParts,\n dkLearningLevel: lessonDkLearningLevel,\n } = lesson;\n const { id: courseId, name: courseName, contentLinks: lessonContentLinksFromCourse } = course;\n const dispatch = useDispatch();\n\n useEffect(() => {\n dispatch(readLessonProgress(lessonId));\n }, []);\n\n const history = useHistory();\n const { isLoggedIn } = useSelector(userSelector);\n const { langCode } = useParams();\n\n const lessonProgress = useSelector(findLessonLearnProgressSelector(lessonId));\n const { maxPointsForAllExercises = 0, resultPoints = 0, finalTest } = lessonProgress || {};\n\n const isFromPlacementCourse = isPlacementTestCourse(courseId);\n const isFinalTest = isFinalTestLesson({\n lessonContentLinksFromCourse,\n currentLessonId: lessonId,\n });\n\n const dkLearningLevel = isFinalTest ? courseDkLearningLevel : lessonDkLearningLevel;\n\n const level = learningLevelMapper[dkLearningLevel] || 'A1';\n const percentile = calculatePercentage(resultPoints, maxPointsForAllExercises);\n\n const calculateCourseNote = () => {\n if (percentile >= MARKS.GOOD) return 'veryGood';\n if (percentile >= MARKS.MEDIUM) return 'good';\n if (percentile >= MARKS.BAD) return 'bad';\n return 'veryBad';\n };\n\n const nextLevelRecommendation = () => {\n if (percentile <= MARKS.MEDIUM) return level;\n\n const levelValues = Object.values(learningLevelMapper);\n const currentIndex = levelValues.indexOf(level);\n const nextLevel = levelValues[currentIndex + 1];\n\n return nextLevel || level;\n };\n\n const nextLevel = nextLevelRecommendation();\n\n const getRecommendedCourseURL = () => {\n const nextCourse = dkCourses.find(\n dkCourse => learningLevelMapper[dkCourse.dkLearningLevel] === nextLevel,\n );\n\n return nextCourse ? getContentUrl(nextCourse) : null;\n };\n\n const handleOnCertificateClick = async () => {\n await handleCertificateGeneration({ id: lessonId, langCode, history });\n };\n\n const nextCourseUrl = getRecommendedCourseURL();\n const showCertificateButton = isLoggedIn && finalTest && percentile >= MARKS.MEDIUM;\n\n const lessonExerciseOverviewItems = filterLessonExerciseOverviewItems(overviewParts);\n const firstExerciseLink = getLessonExerciseUrl(\n langCode,\n lessonId,\n normalizeUrlName(lessonExerciseOverviewItems[0].target.name),\n lessonExerciseOverviewItems[0].targetId,\n );\n\n const PageMetaDataComponent = () => {\n if (isFinalTest) {\n return (\n \n );\n }\n if (isFromPlacementCourse) {\n return ;\n }\n return ;\n };\n\n return (\n <>\n \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n \n \n \n {showCertificateButton && (\n
    \n
    \n \n
    \n
    \n )}\n {nextCourseUrl && (\n <>\n
    \n
    \n
    \n \n

    {nextLevel}

    \n
    \n
    \n
    \n
    \n
    \n \n \n \n
    \n
    \n \n )}\n {dwLinks && dwLinks.length > 0 && (\n \n {dwLinks.map(link => {\n if (!link.name.includes(nextLevel)) return '';\n return (\n
    \n

    \n {link.name}\n

    \n

    {link.description}

    \n
    \n );\n })}\n
    \n )}\n
    \n
    \n
    \n
    \n \n );\n};\n","import gql from 'graphql-tag';\nimport { useParams } from 'react-router';\nimport { useSelector } from 'react-redux';\nimport {\n PlacementAndFinalTestResult,\n placementResultFragment,\n} from '../components/PlacementResult/PlacementAndFinalTestResult';\nimport { PageContainer } from '../components/Page/PageContainer';\nimport { WithGraphQLQueryHandling } from '../components/WithGraphQLQueryHandling/WithGraphQLQueryHandling';\nimport { sortByLearningLevel } from '../utils/learningLevelUtils';\nimport { toLang } from '../utils/mappers/langMapper';\nimport { lessonOverviewPartsFragment } from '../components/Lesson/Lesson';\nimport { userDataSelector } from '../state/user/userSelectors';\nimport { metaDataFragment } from '../components/Page/PageMetaData';\nimport { gtmDataLayerFragment } from '../components/GoogleTagManager';\n\nexport const placementResultPageQuery = ({ handicap }) => gql`\n query PlacementResultPage($id: Int!, $lessonIdString: String!, $amount: Int!, $lang: Language!, $type: ModelType!) {\n lesson: content(id: $id, lang: $lang) {\n ... on Lesson {\n id\n name\n dkLearningLevel\n dwLinks: contentLinks(targetTypes: [NAVIGATION]) {\n id: targetId\n description\n name\n }\n }\n ...${`PlacementOverviewParts${handicap || ''}`}\n ...${metaDataFragment.name}\n ${gtmDataLayerFragment.partial()}\n }\n\n dkCourses: contentsByType(\n type: $type\n lang: $lang\n amount: $amount\n filters: { field: \"dkLearningLevel\", value: [\"2\", \"4\"] }\n ) {\n ...PlacementResult\n }\n\n dkCoursesInGerman: contentsByType(\n type: $type\n lang: GERMAN\n amount: $amount\n filters: { field: \"dkLearningLevel\", value: [\"8\"] }\n ) {\n ...PlacementResult\n }\n \n currentCourse: contentsByType(\n lang: $lang\n type: COURSE\n amount: 1\n filters: { field: \"contentLinks.targetId\", value: [$lessonIdString] }\n ) {\n ... on Course {\n id\n name\n dkLearningLevel\n contentLinks(targetTypes: LESSON) {\n targetId\n additionalInformation\n }\n }\n }\n }\n ${lessonOverviewPartsFragment.fragment({ scope: 'Placement', handicap })}\n ${placementResultFragment}\n ${metaDataFragment.fragment({ type: 'Lesson' })}\n`;\n\nexport const PlacementAndFinalTestResultPage = ({ contentId }) => {\n const { langCode } = useParams();\n const { handicap } = useSelector(userDataSelector) || {};\n\n const placementResultPageQueryVariables = {\n amount: 10,\n id: +contentId,\n lessonIdString: contentId,\n lang: toLang(langCode),\n type: 'COURSE',\n };\n\n return (\n \n \n {data => (\n \n )}\n \n \n );\n};\n","import styled from 'styled-components';\nimport gql from 'graphql-tag';\nimport { RichText } from '../RichText/RichText';\nimport { useImagePlaceholderReplacementEffect } from '../../utils/replacers/useImagePlaceholderReplacementEffect';\n\nexport const helpFragment = {\n name: 'Help',\n fragment() {\n return gql`fragment ${this.name} on Article {\n id\n shortTitle\n text\n }\n `;\n },\n};\n\nexport const Help = ({ className, help }) => {\n useImagePlaceholderReplacementEffect({});\n const { shortTitle, text } = help;\n\n return (\n
    \n
    \n

    {shortTitle}

    \n
    \n \n
    \n );\n};\n\nexport const StyledHelp = styled(Help)`\n .content {\n margin: 10px;\n }\n`;\n","import gql from 'graphql-tag';\nimport { useParams } from 'react-router';\nimport { toLang } from '../utils/mappers/langMapper';\nimport { PageContainer } from '../components/Page/PageContainer';\nimport { WithGraphQLQueryHandling } from '../components/WithGraphQLQueryHandling/WithGraphQLQueryHandling';\nimport { helpFragment, StyledHelp as Help } from '../components/Help/Help';\nimport { PageMetaData } from '../components/Page/PageMetaData';\nimport { PAGE_TYPES } from '../constants/pageTypes';\nimport {\n gtmDataLayerFragment,\n GtmScriptWithDataLayer,\n} from '../components/GoogleTagManager/GtmScriptWithDataLayer';\n\nexport const helpPageQuery = gql`\n query HelpPage($lang: Language!) {\n help(lang: $lang, appName: \"mdl\") {\n ...${helpFragment.name}\n ${gtmDataLayerFragment.partial()}\n }\n }\n ${helpFragment.fragment()}\n`;\n\nexport const HelpPage = () => {\n const { langCode } = useParams();\n\n const helpPageQueryVariables = {\n lang: toLang(langCode),\n };\n\n return (\n \n \n {({ help }) => (\n <>\n \n \n \n \n )}\n \n \n );\n};\n","import gql from 'graphql-tag';\nimport { useParams } from 'react-router';\nimport { toLang } from '../utils/mappers/langMapper';\nimport { PageContainer } from '../components/Page/PageContainer';\nimport { WithGraphQLQueryHandling } from '../components/WithGraphQLQueryHandling/WithGraphQLQueryHandling';\nimport { PageMetaData } from '../components/Page/PageMetaData';\nimport { PAGE_TYPES } from '../constants/pageTypes';\nimport {\n legalFragment,\n StyledLegalNotice as LegalNotice,\n} from '../components/LegalNotice/LegalNotice';\nimport { gtmDataLayerFragment } from '../components/GoogleTagManager';\nimport { GtmScriptWithDataLayer } from '../components/GoogleTagManager/GtmScriptWithDataLayer';\n\nexport const legalPageQuery = gql`\n query footer($lang: Language!) {\n footer(lang: $lang) {\n ${legalFragment.partial()}\n ${gtmDataLayerFragment.partial()}\n }\n }\n`;\n\nexport const LegalPage = () => {\n const { langCode } = useParams();\n\n const helpPageQueryVariables = {\n lang: toLang(langCode),\n };\n\n return (\n \n \n {({ footer }) => (\n <>\n \n \n \n \n )}\n \n \n );\n};\n","export const TYPE_SET_INPUT = 'TYPE_SET_INPUT';\nexport const TYPE_GET_CACHED_RESULTS = 'TYPE_GET_CACHED_RESULTS';\nexport const TYPE_SET_HINTS_DATA = 'TYPE_RESET_CURSOR_AND_SET_HINTS_DATA';\nexport const TYPE_SET_HINTS_OPENED = 'TYPE_SET_HINTS_OPENED';\nexport const TYPE_SET_HINTS_CLOSED = 'TYPE_SET_HINTS_CLOSED';\nexport const TYPE_SET_CURSOR_ARROW_UP = 'TYPE_SET_CURSOR_ARROW_UP';\nexport const TYPE_SET_CURSOR_ARROW_DOWN = 'TYPE_SET_CURSOR_ARROW_DOWN';\nexport const TYPE_KEY_ESCAPE_CLICKED = 'TYPE_KEY_ESCAPE_CLICKED';\nexport const TYPE_KEY_BACKSPACE_CLICKED = 'TYPE_KEY_BACKSPACE_CLICKED';\nexport const TYPE_ANY_CHARACTER_TYPED = 'TYPE_KEY_ANY_CLICKED';\nexport const TYPE_ITEM_CLICKED = 'TYPE_ITEM_CLICKED';\nexport const TYPE_KEY_ENTER_CLICKED = 'TYPE_KEY_ENTER_CLICKED';\n\nexport const reducer = (state, action) => {\n switch (action.type) {\n case TYPE_GET_CACHED_RESULTS:\n return {\n ...state,\n vocabularyItems: state.recentlySearched.get(state.input),\n isOpened:\n !state.isEscapeClicked && !state.isEnterClicked && state.recentlySearched.get(state.input)\n ? state.recentlySearched.get(state.input).length > 0\n : false,\n isEscapeClicked: false,\n isEnterClicked: false,\n };\n case TYPE_SET_HINTS_DATA: {\n const { response, searchQuery } = action.payload;\n return {\n ...state,\n vocabularyItems: response ? response.slice(0, Math.min(8, response.length)) : [],\n recentlySearched: state.recentlySearched.set(searchQuery, response || []),\n cursor: -1,\n isOpened:\n !state.isEnterClicked && !state.isEscapeClicked && response ? response.length > 0 : false,\n };\n }\n case TYPE_SET_HINTS_OPENED:\n return {\n ...state,\n isOpened: true,\n };\n case TYPE_SET_HINTS_CLOSED:\n return {\n ...state,\n isOpened: false,\n };\n case TYPE_SET_INPUT:\n return {\n ...state,\n ...action.payload,\n };\n case TYPE_SET_CURSOR_ARROW_UP: {\n const cursorUp =\n state.cursor === -1\n ? state.vocabularyItems.length - 1\n : (state.cursor - 1) % state.vocabularyItems.length;\n return {\n ...state,\n isOpened: true,\n cursor: cursorUp,\n input: state.vocabularyItems[cursorUp !== -1 ? cursorUp : 0],\n };\n }\n case TYPE_SET_CURSOR_ARROW_DOWN: {\n const cursorDown = (state.cursor + 1) % state.vocabularyItems.length;\n return {\n ...state,\n isOpened: true,\n cursor: cursorDown,\n input: state.vocabularyItems[cursorDown],\n };\n }\n case TYPE_KEY_ESCAPE_CLICKED:\n return {\n ...state,\n cursor: -1,\n input: '',\n isOpened: false,\n isEscapeClicked: true,\n vocabularyItems: [],\n };\n case TYPE_KEY_BACKSPACE_CLICKED:\n return {\n ...state,\n ...action.payload,\n cursor: -1,\n vocabularyItems: action.payload.input === '' ? [] : state.vocabularyItems,\n isEnterClicked: false,\n isEscapeClicked: false,\n };\n case TYPE_ITEM_CLICKED:\n return {\n ...state,\n ...action.payload,\n cursor: -1,\n isOpened: false,\n };\n case TYPE_ANY_CHARACTER_TYPED:\n return {\n ...state,\n ...action.payload,\n cursor: -1,\n isOpened: true,\n };\n case TYPE_KEY_ENTER_CLICKED:\n return {\n ...state,\n ...action.payload,\n cursor: -1,\n isOpened: false,\n isEnterClicked: true,\n };\n default:\n return state;\n }\n};\n","import { useEffect } from 'react';\nimport { useParams } from 'react-router';\nimport {\n TYPE_GET_CACHED_RESULTS,\n TYPE_SET_HINTS_DATA,\n} from '../components/Vocabulary/VocabularySearch/duck/vocabularySearchDuck';\nimport { getQueryVariables } from '../components/Vocabulary/VocabularyQuery';\n\nexport const combineVocabularyData = data => {\n const mergedVocabularyData = [\n ...data.original.hits,\n ...data.translation.hits.map(obj => ({ ...obj, translation: true })),\n ];\n const idSet = new Set();\n return mergedVocabularyData.filter(vocabulary => {\n if (!idSet.has(vocabulary.id)) {\n idSet.add(vocabulary.id);\n return true;\n }\n return false;\n }, idSet);\n};\n\nexport const useGetCachedHintsResponse = (state, dispatch) => {\n useEffect(\n () => {\n if (state.recentlySearched.get(state.input) && state.cursor === -1) {\n dispatch({ type: TYPE_GET_CACHED_RESULTS });\n }\n }, // eslint-disable-next-line\n [state.searchQuery, state.cursor],\n );\n};\n\nexport const useGetHintsResponseAndCacheIt = (debouncedSearchQuery, state, dispatch, refetch) => {\n const { langCode } = useParams();\n useEffect(\n () => {\n if (debouncedSearchQuery) {\n const { searchQuery } = state;\n if (!state.recentlySearched.get(debouncedSearchQuery)) {\n refetch(\n getQueryVariables({\n langCode,\n searchQuery,\n sort: false,\n }),\n ).then(res => {\n return dispatch({\n type: TYPE_SET_HINTS_DATA,\n payload: {\n searchQuery: debouncedSearchQuery,\n response: combineVocabularyData(res.data),\n },\n });\n });\n }\n }\n }, // eslint-disable-next-line\n [debouncedSearchQuery],\n );\n};\n","import { useReducer, useRef } from 'react';\nimport styled from 'styled-components';\nimport classnames from 'classnames';\nimport { useQuery } from '@apollo/client';\nimport { useParams } from 'react-router-dom';\nimport useDebounce from '../../../hooks/useDebounce';\nimport {\n KEY_ARROW_DOWN,\n KEY_ARROW_UP,\n KEY_BACKSPACE,\n KEY_ENTER,\n KEY_ESCAPE,\n} from '../../../constants/keyCodes';\nimport {\n reducer,\n TYPE_ANY_CHARACTER_TYPED,\n TYPE_KEY_BACKSPACE_CLICKED,\n TYPE_KEY_ENTER_CLICKED,\n TYPE_KEY_ESCAPE_CLICKED,\n TYPE_SET_CURSOR_ARROW_DOWN,\n TYPE_SET_CURSOR_ARROW_UP,\n TYPE_SET_HINTS_CLOSED,\n TYPE_SET_HINTS_OPENED,\n TYPE_SET_INPUT,\n TYPE_ITEM_CLICKED,\n} from './duck/vocabularySearchDuck';\nimport {\n useGetCachedHintsResponse,\n useGetHintsResponseAndCacheIt,\n} from '../../../hooks/vocabularySearchHooks';\nimport { useTranslation } from '../../../hooks/useTranslation';\nimport { useRtlContext } from '../../../hooks/useRtl';\nimport { vocabularySearchQuery, getQueryVariables } from '../VocabularyQuery';\n\nconst specialCharactersRegex = new RegExp('[^\\\\p{L} @]', 'gui');\n\nconst VocabularySearch = ({ className, onItemSelected }) => {\n const { langCode } = useParams();\n const { refetch } = useQuery(vocabularySearchQuery, {\n variables: getQueryVariables({\n langCode,\n }),\n });\n const [state, dispatch] = useReducer(reducer, {\n input: '',\n searchQuery: '',\n vocabularyItems: [],\n cursor: -1,\n isOpened: false,\n recentlySearched: new Map(),\n isEscapeClicked: false,\n isEnterClicked: false,\n amount: 6,\n offset: 0,\n });\n\n const { isRtl } = useRtlContext();\n const vocabularyOverviewPlaceholder = useTranslation('vocabularyOverview.placeholder');\n const vocabularyOverviewAria = useTranslation('vocabularyOverview.aria');\n\n const { isOpened, input, cursor, vocabularyItems, searchQuery } = state;\n\n const debouncedSearchQuery = useDebounce(searchQuery, 350);\n\n useGetCachedHintsResponse(state, dispatch);\n useGetHintsResponseAndCacheIt(debouncedSearchQuery, state, dispatch, refetch);\n\n const searchInput = useRef(null);\n\n const handleFocus = () => {\n dispatch({ type: TYPE_SET_HINTS_OPENED });\n };\n\n const handleBlur = () => {\n dispatch({ type: TYPE_SET_HINTS_CLOSED });\n };\n\n const handleClick = e => {\n const target = e.target.tagName === 'STRONG' ? e.target.parentNode : e.target;\n const { textContent } = target;\n dispatch({\n type: TYPE_ITEM_CLICKED,\n payload: {\n input: textContent,\n },\n });\n onItemSelected(textContent);\n };\n\n const handleKeys = e => {\n switch (e.keyCode) {\n case KEY_ARROW_UP:\n dispatch({ type: TYPE_SET_CURSOR_ARROW_UP });\n break;\n\n case KEY_ARROW_DOWN:\n dispatch({ type: TYPE_SET_CURSOR_ARROW_DOWN });\n break;\n\n case KEY_ENTER:\n // eslint-disable-next-line no-case-declarations\n const conditionalSearchQuery = input;\n onItemSelected(conditionalSearchQuery);\n dispatch({\n type: TYPE_KEY_ENTER_CLICKED,\n payload: {\n searchQuery: conditionalSearchQuery,\n },\n });\n break;\n case KEY_ESCAPE:\n dispatch({ type: TYPE_KEY_ESCAPE_CLICKED });\n break;\n\n case KEY_BACKSPACE:\n dispatch({\n type: TYPE_KEY_BACKSPACE_CLICKED,\n payload: {\n input: e.target.value,\n searchQuery: e.target.value,\n },\n });\n break;\n\n default:\n dispatch({\n type: TYPE_ANY_CHARACTER_TYPED,\n payload: {\n input: e.target.value,\n searchQuery: e.target.value,\n },\n });\n }\n };\n const cleanSearchQuery = searchQuery.replace(specialCharactersRegex);\n const wordsRegex = new RegExp(\n `((?:(?:\\\\p{P}|\\\\p{Z} )*)((\\\\p{L}*)${cleanSearchQuery}(\\\\p{L}*))(?:(?:\\\\p{P}|\\\\p{Z} )*))`,\n 'imu',\n );\n const suggestions = vocabularyItems\n .map(item => {\n const vocabularyText = item.translation\n ? item.text.replace(/<[^>]*>?/gm, '').trim()\n : item.name;\n const matches = wordsRegex.exec(vocabularyText);\n return matches ? matches[2] : null;\n })\n .filter(item => !!item);\n const distinctSuggestions = [...new Set(suggestions)];\n\n const addBolding = text =>\n text.replace(\n new RegExp(searchQuery.replace(specialCharactersRegex, ''), 'gi'),\n m => `${m}`,\n );\n\n return (\n
    \n
    \n
    \n \n \n dispatch({\n type: TYPE_SET_INPUT,\n payload: { input: e.target.value },\n })\n }\n onKeyUp={handleKeys}\n onBlur={handleBlur}\n onFocus={handleFocus}\n ref={searchInput}\n />\n
    \n
    \n {distinctSuggestions &&\n distinctSuggestions.length > 0 &&\n distinctSuggestions.map((suggestion, index) => (\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n \n ))}\n
    \n
    \n
    \n
    \n
    \n
    \n );\n};\n\nexport const StyledVocabularySearch = styled(VocabularySearch)`\n .tt-menu {\n visibility: hidden;\n }\n\n .tt-open {\n visibility: visible;\n }\n\n .twitter-typeahead {\n position: relative;\n display: inline-block;\n }\n`;\n","import { useState, useEffect } from 'react';\n\nexport default function useDebounce(value, delay) {\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n return () => {\n clearTimeout(handler);\n };\n }, [delay, value]);\n\n return debouncedValue;\n}\n","import { StyledStandardButton as StandardButton } from '../../StandardButton/StandardButton';\n\nexport const VocabularyMoreButton = ({ handleClick, style }) => (\n
    \n
    \n
    \n \n
    \n
    \n
    \n);\n","export const VocabularyItem = ({ item }) => {\n return (\n
    \n
    \n
    \n

    \n \n {item.name}\n \n
    \n {item.subTitle}\n

    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n );\n};\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { useEffect, useState } from 'react';\nimport { useParams } from 'react-router';\nimport { ReactComponent as IconHintCircleOrange } from '../../assets/svg/icon-hint-circle-orange.svg';\nimport { StyledVocabularySearch } from './VocabularySearch/VocabularySearch';\nimport { VocabularyMoreButton } from './VocabularyMoreButton/VocabularyMoreButton';\nimport { I18nText } from '../I18n/I18nText';\nimport { ContentHeadline } from '../ContentContainer/ContentHeadline/ContentHeadline';\nimport { combineVocabularyData } from '../../hooks/vocabularySearchHooks';\nimport { VocabularyItem } from './VocabularyItem';\nimport { getQueryVariables } from './VocabularyQuery';\n\nexport const Vocabulary = ({ data, refetch }) => {\n const { langCode } = useParams();\n\n const [startValue, setStartValue] = useState(0);\n const [vocabularyData, setVocabularyData] = useState(combineVocabularyData(data));\n const [isNotEmptyResp, setIsNotEmptyResp] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n\n const findAdditionalData = shouldConcat => {\n refetch(\n getQueryVariables({\n langCode,\n offset: startValue,\n searchQuery,\n }),\n ).then(resp => {\n const combinedVocabularyData = combineVocabularyData(resp.data);\n shouldConcat\n ? setVocabularyData(prevState => [...prevState, ...combinedVocabularyData])\n : setVocabularyData(combinedVocabularyData);\n setIsNotEmptyResp(combinedVocabularyData.length > 0);\n if (combinedVocabularyData.length > 0) {\n setStartValue(prevState => prevState + 12);\n }\n });\n };\n\n useEffect(() => {\n findAdditionalData();\n }, [searchQuery]);\n\n return (\n
    \n
    \n
    \n
    \n \n
    \n {\n setStartValue(0);\n setSearchQuery(newSearchQuery);\n }}\n />\n
    \n
    \n
    \n
    \n
    \n {vocabularyData.map(item => (\n \n ))}\n
    \n \n
    \n \n \n \n \n
    \n
    \n findAdditionalData(true)}\n />\n
    \n \n
    \n
    \n
    \n );\n};\n","import { useParams } from 'react-router-dom';\nimport { PageMetaData } from '../components/Page/PageMetaData';\nimport { WithGraphQLQueryHandling } from '../components/WithGraphQLQueryHandling/WithGraphQLQueryHandling';\nimport { GTM_NO_CONTENT_PAGE_IDS, PAGE_TYPES } from '../constants/pageTypes';\nimport { Vocabulary } from '../components/Vocabulary/Vocabulary';\nimport { PageContainer } from '../components/Page/PageContainer';\nimport { getQueryVariables, vocabularySearchQuery } from '../components/Vocabulary/VocabularyQuery';\nimport { GtmScriptWithDataLayer } from '../components/GoogleTagManager/GtmScriptWithDataLayer';\n\nexport const VocabularyPage = () => {\n const { langCode } = useParams();\n\n const vocabularyPageQueryVariables = getQueryVariables({\n langCode,\n });\n\n return (\n \n \n {(data, refetch) => (\n <>\n \n \n \n \n )}\n \n \n );\n};\n","import { Redirect, Route, Switch } from 'react-router-dom';\nimport { useParams } from 'react-router';\nimport { Default404Page } from '../pages/Default404Page';\nimport { urlPrefixToType } from '../utils/url/url';\nimport { CoursePage } from '../pages/CoursePage';\nimport { GrammarPage } from '../pages/GrammarPage';\nimport { DashboardPage } from '../pages/DashboardPage';\nimport { GrammarOverviewPage } from '../pages/GrammarOverviewPage';\nimport { pathPartials } from '../utils/url/pathAnalyser';\nimport { LessonPage } from '../pages/LessonPage';\nimport {\n PAGE_GRAMMAR,\n PAGE_LEGAL,\n PAGE_OVERVIEW,\n PAGE_PASSWORD_CHANGE,\n PAGE_PASSWORD_RESET,\n PAGE_PLACEMENT_TEST,\n PAGE_PROFILE,\n PAGE_REGISTRATION,\n PAGE_VOCABULARY,\n PAGE_VOCABULARY_TRAINER,\n PAGE_VOCABULARY_TRAINER_START,\n STATUS_FEEDBACK,\n} from '../utils/url/urlFactory';\nimport { FEEDBACK_TYPES } from '../constants/feedback';\nimport { RestrictedRoute } from './RestrictedRoute/RestrictedRoute';\nimport { ConfirmUserRegistrationContainer } from './user/ConfirmUserRegistrationContainer';\nimport { Registration } from './user/Registration';\nimport { PasswordChange } from './user/PasswordChange';\nimport { PasswordReset } from './user/PasswordReset';\nimport { StatusFeedback } from './StatusFeedback/StatusFeedback';\nimport { PageContainer, withPageContainerAndMetadata } from './Page/PageContainer';\nimport { UserProfile } from './user/UserProfile';\nimport { SetNewPassword } from './user/SetNewPassword';\nimport { PlacementTestPage } from '../pages/PlacementTestPage';\nimport { VocabularyTrainer } from './VocabularyTrainer/VocabularyTrainer';\nimport { PlacementAndFinalTestResultPage } from '../pages/PlacementAndFinalTestResultPage';\nimport { HelpPage } from '../pages/HelpPage';\nimport { GTM_NO_CONTENT_PAGE_IDS, PAGE_TYPES } from '../constants/pageTypes';\nimport { PageMetaData } from './Page/PageMetaData';\nimport { LegalPage } from '../pages/LegalPage';\nimport { VocabularyPage } from '../pages/VocabularyPage';\nimport { GtmScriptWithDataLayer } from './GoogleTagManager';\n\nconst typeToPage = {\n COURSE: {\n type: 'Course',\n component: CoursePage,\n },\n GRAMMAR: {\n type: 'Grammar',\n component: GrammarPage,\n },\n LESSON: {\n type: 'Lesson',\n component: LessonPage,\n },\n PLACEMENT: {\n type: 'Placement',\n component: PlacementAndFinalTestResultPage,\n },\n FINAL: {\n type: 'Final',\n component: PlacementAndFinalTestResultPage,\n },\n};\n\nexport const ContentPage = () => {\n const params = useParams();\n const pageDef = typeToPage[urlPrefixToType(params.typeId)];\n const Tag = pageDef.component;\n return ;\n};\n\nexport const App = () => (\n \n (\n \n )}\n />\n \n \n \n \n \n \n \n \n withPageContainerAndMetadata({\n component: Registration,\n pageType: PAGE_TYPES.REGISTER_USER,\n useDescriptionTranslation: true,\n })\n }\n />\n (\n \n \n \n \n \n )}\n />\n (\n \n )}\n />\n \n withPageContainerAndMetadata({\n component: UserProfile,\n pageType: PAGE_TYPES.USER_PROFILE,\n addDescriptionAndKeywordsMeta: false,\n })\n }\n feedbackType={FEEDBACK_TYPES.MISSING_USER_PROFILE}\n />\n \n withPageContainerAndMetadata({\n component: PasswordChange,\n pageType: PAGE_TYPES.PASSWORD_CHANGE,\n addDescriptionAndKeywordsMeta: false,\n })\n }\n />\n \n withPageContainerAndMetadata({\n component: VocabularyTrainer,\n pageType: PAGE_TYPES.VOCABULARY_TRAINER,\n addDescriptionAndKeywordsMeta: false,\n })\n }\n />\n \n withPageContainerAndMetadata({\n component: PasswordReset,\n pageType: PAGE_TYPES.PASSWORD_RESET,\n addDescriptionAndKeywordsMeta: false,\n })\n }\n />\n \n withPageContainerAndMetadata({\n component: StatusFeedback,\n pageType: PAGE_TYPES.FEEDBACK_STATUS,\n addDescriptionAndKeywordsMeta: false,\n })\n }\n />\n \n \n \n \n);\n","import { combineReducers } from 'redux';\nimport { userReducer } from './user/userDuck';\nimport { learnProgressReducer } from './progress/learnProgressDuck';\nimport { lessonExerciseModeReducer } from './mode/lessonExerciseModeDuck';\n\nconst rootReducer = combineReducers({\n user: userReducer,\n learnProgress: learnProgressReducer,\n lessonExerciseMode: lessonExerciseModeReducer,\n});\n\nexport default rootReducer;\n","import * as storage from 'redux-storage';\nimport createEngine from 'redux-storage-engine-localstorage';\nimport { createStore, applyMiddleware, compose } from 'redux';\nimport thunk from 'redux-thunk';\nimport rootReducer from './rootReducers';\nimport { apiMiddleware } from './middlewares/apiMiddleware';\nimport globals from '../utils/globals';\nimport { isServer } from '../utils/ssr';\n\nconst reducer = storage.reducer(rootReducer);\nconst engine = createEngine('learngerman');\nconst storageMiddleware = storage.createMiddleware(engine);\n\n// eslint-disable-next-line no-underscore-dangle\nconst composeEnhancers = globals.window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;\n\nconst createStoreWithMiddleware = composeEnhancers(\n applyMiddleware(apiMiddleware, thunk, storageMiddleware),\n)(createStore);\n\nconst store = createStoreWithMiddleware(reducer);\n\nconst load = storage.createLoader(engine);\nif (!isServer()) {\n load(store);\n}\n\nexport default store;\n","import { API_CALL } from '../common/apiActions';\n\nexport const apiMiddleware = ({ dispatch }) => next => action => {\n next(action);\n\n if (action.type !== API_CALL) {\n return;\n }\n\n const { url, method, data, onSuccess, onFailure, headers } = action.payload;\n\n const dataOrParams = ['GET', 'DELETE'].includes(method) ? 'params' : 'data';\n\n fetch(url, {\n method,\n headers,\n [dataOrParams]: data,\n })\n .then(response => {\n const contentType = response.headers.get('content-type');\n return contentType && contentType.indexOf('application/json') !== -1 ? response.json() : {};\n })\n .then(userData => {\n dispatch(onSuccess(userData));\n })\n .catch(error => {\n dispatch(onFailure(error));\n });\n};\n","import ReactDOM from 'react-dom';\nimport { BrowserRouter as Router } from 'react-router-dom';\nimport { HelmetProvider } from 'react-helmet-async';\n\nimport { ApolloProvider, ApolloClient, createHttpLink } from '@apollo/client';\nimport { createPersistedQueryLink } from '@apollo/client/link/persisted-queries';\nimport { sha256 } from 'crypto-hash';\nimport { InMemoryCache } from '@apollo/client/cache';\n\nimport { Provider } from 'react-redux';\nimport * as serviceWorker from './serviceWorker';\nimport { App } from './components/App';\nimport config from './config';\n\nimport { possibleTypes } from './utils/apolloClient';\nimport store from './state/store';\n\nconst cache = new InMemoryCache({\n possibleTypes,\n addTypename: true,\n});\n\nconst link = createPersistedQueryLink({ sha256, useGETForHashedQueries: true }).concat(\n createHttpLink({ uri: config.graphQL.baseUrl }),\n);\n\nconst client = new ApolloClient({\n link,\n ssrForceFetchDelay: 100,\n cache: cache.restore(window.__APOLLO_STATE__), // eslint-disable-line no-underscore-dangle\n});\n\nReactDOM.hydrate(\n \n \n \n \n \n \n \n \n ,\n document.getElementById('root'),\n);\n\nserviceWorker.unregister();\n","/* eslint-disable */\nexport const possibleTypes = {\n ModelAspect: ['Exercise', 'Knowledge', 'Article', 'Category', 'Course', 'Subject', 'GeographicLocation', 'Lesson', 'Navigation', 'Person', 'Image', 'Audio', 'Video', 'Widget', 'Livestream', 'Download', 'Keyword', 'ImageGallery', 'GalleryImage', 'GeographicRegion', 'ExternalLink', 'PhysicalImage', 'ContentComposition', 'InformationSpace', 'CompositionComponent', 'CompositionComponentConfiguration'],\n DeliveryAspect: ['Exercise', 'Knowledge', 'Article', 'Category', 'Course', 'Lesson', 'Navigation', 'Person', 'Image', 'Audio', 'Video', 'Widget', 'ImageGallery', 'GeographicRegion', 'ContentComposition'],\n NamedAspect: ['Exercise', 'Knowledge', 'Article', 'Category', 'Course', 'Subject', 'GeographicLocation', 'Lesson', 'Navigation', 'Person', 'Image', 'Audio', 'Video', 'Widget', 'Livestream', 'Download', 'Keyword', 'ImageGallery', 'GalleryImage', 'GeographicRegion', 'ExternalLink', 'ContentComposition', 'InformationSpace'],\n AssociationsAspect: ['Exercise', 'Knowledge', 'Article', 'Course', 'Lesson', 'Navigation', 'Person', 'Image', 'Audio', 'Video', 'Widget', 'ImageGallery', 'GalleryImage'],\n TextualAspect: ['Article', 'Person', 'Audio', 'Video', 'ImageGallery'],\n ContactAspect: ['Article', 'Person', 'Audio', 'Video', 'ImageGallery'],\n MetadataAspect: ['Article', 'Audio', 'Video', 'ImageGallery'],\n DkMetadataAspect: ['Article'],\n GeographicLocationAspect: ['GeographicLocation'],\n TreeAspect: ['Category', 'Navigation', 'GeographicRegion'],\n DeletionAspect: ['Image', 'Audio', 'Video'],\n PlaybackResourceAspect: ['Audio', 'Video'],\n BinaryDataAspect: ['Download', 'PhysicalImage'],\n SocialMediaAspect: ['Article', 'Audio', 'Video', 'ImageGallery'],\n FooterAspect: ['Article', 'Navigation', 'Person', 'Audio', 'Video', 'ImageGallery'],\n BetaLayerAspect: ['Article', 'Navigation', 'Person', 'Audio', 'Video', 'ImageGallery'],\n UrlAspect: ['Article', 'Navigation', 'Person', 'Audio', 'Video', 'ImageGallery'],\n PersonRelatedContent: ['Article', 'Audio', 'Video', 'Image', 'ImageGallery'],\n Content: ['Article', 'Category', 'Subject', 'GeographicLocation', 'Navigation', 'Person', 'Image', 'Audio', 'Video', 'Widget', 'Livestream', 'Download', 'Keyword', 'ImageGallery', 'GalleryImage', 'GeographicRegion', 'CocoContent'],\n};\n\n// fetch(`http://localhost:4000/graphql`, {\n// method: 'POST',\n// headers: { 'Content-Type': 'application/json' },\n// body: JSON.stringify({\n// variables: {},\n// query: `\n// {\n// __schema {\n// types {\n// kind\n// name\n// possibleTypes {\n// name\n// }\n// }\n// }\n// }\n// `,\n// }),\n// })\n// .then(result => result.json())\n// .then(result => {\n// const possibleTypes = {};\n\n// result.data.__schema.types.forEach(supertype => {\n// if (supertype.possibleTypes) {\n// possibleTypes[supertype.name] =\n// supertype.possibleTypes.map(subtype => subtype.name);\n// }\n// });\n// console.log(JSON.stringify(possibleTypes));\n// });\n","import { useI18nContext } from '../context/I18nContext';\n\nconst isPlainKey = translation => typeof translation === 'string' || !translation;\n\nconst normalizeTranslation = translation =>\n isPlainKey(translation) ? { key: translation, parameters: {} } : translation;\n\nexport const useTranslation = translation => {\n const { i18n } = useI18nContext();\n const { key, parameters } = normalizeTranslation(translation);\n if (!key) {\n return null;\n }\n return i18n.t(key, parameters);\n};\n","import { isServer } from './ssr';\n\nconst globals = {\n window: isServer() ? global.window || {} : window,\n document: isServer() ? {} : document,\n navigator: isServer() ? {} : navigator,\n localStorage: isServer() ? {} : window.localStorage,\n};\n\nexport default globals;\n","export const noop = () => {};\n\nexport const invert = inMap =>\n Object.entries(inMap).reduce((acc, next) => ({ ...acc, [next[1]]: next[0] }), {});\n\nexport const not = predicate => args => !predicate(args);\n\n// eslint-disable-next-line fp/no-rest-parameters\nexport const pipe = (...fns) => fns.reduce((v, f) => (...args) => f(v(...args)));\n\n// a functionality that groups a collection of items together into an object based on a given key\nexport const groupBy = (key, array) =>\n array.reduce(\n // eslint-disable-next-line fp/no-mutating-assign\n (acc, next) => Object.assign(acc, { [next[key]]: (acc[next[key]] || []).concat(next) }),\n {},\n );\n\nexport const removeContentLinksWithEmptyTarget = contentLinks =>\n contentLinks.filter(contentLink => !!contentLink.target);\n\nexport const isFinalTestPredicate = contentLink =>\n contentLink.additionalInformation && contentLink.additionalInformation.includes('final_test');\n\nexport const capitalize = text => text.charAt(0).toUpperCase() + text.slice(1).toLowerCase();\n\nexport const getMediaFileSizeInKBorMB = fileSizeInBytes =>\n fileSizeInBytes > 999999\n ? `${Math.floor(fileSizeInBytes / 1000000)}MB`\n : `${Math.floor(fileSizeInBytes / 1000)}KB`;\n\nexport const shuffle = array => {\n // eslint-disable-next-line\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n // eslint-disable-next-line\n [array[i], array[j]] = [array[j], array[i]];\n }\n return array;\n};\n\nexport const calculatePercentage = (fraction, total) => Math.round((fraction / total) * 100) || 0;\n\nexport const generateRandomNumber = (min, max) => Math.floor(Math.random() * (max - min)) + min;\n\nexport const sortObjectsByProp = (array, prop, order = 1) => {\n // eslint-disable-next-line fp/no-mutating-methods\n return [...array].sort((a, b) => {\n if (a[prop] === b[prop]) {\n return 0;\n }\n return a[prop] < b[prop] ? -order : order;\n });\n};\n","function isServer() {\n return !(typeof window !== 'undefined' && window.document);\n}\n// CommonJS export to be able to use it on server and client\nmodule.exports = {\n isServer,\n};\n","import { css } from 'styled-components';\n\nexport const resolutions = Object.freeze({\n min: Object.freeze({\n zero: 0,\n mobile: 320,\n tablet: 768,\n tabletLandscape: 1024,\n desktop: 1200,\n full: 1280,\n }),\n max: Object.freeze({\n mobile: 767,\n tablet: 1199,\n tabletLandscape: 992,\n desktop: Number.MAX_SAFE_INTEGER,\n }),\n});\n\nconst wrapInMedia = (sizes, type) =>\n Object.keys(sizes).reduce(\n (acc, label) => ({\n ...acc,\n ...{\n // eslint-disable-next-line fp/no-rest-parameters\n [label]: (...args) => css`\n @media (${type}-width: ${sizes[label]}px) {\n ${css(...args)}\n }\n `,\n },\n }),\n {},\n );\n\nexport const mediaMin = wrapInMedia(resolutions.min, 'min');\nexport const mediaMax = wrapInMedia(resolutions.max, 'max');\n\n// eslint-disable-next-line fp/no-rest-parameters\nconst wrapInHoverPointerMedia = (hover, pointer) => (...args) => css`\n @media (hover: ${hover}) and (pointer: ${pointer}) {\n ${css(...args)}\n }\n`;\n\n/* https://medium.com/@ferie/detect-a-touch-device-with-only-css-9f8e30fa1134 */\n/* https://media.kulturbanause.de/2017/05/interaction-type-media-queries.html */\nexport const mediaDevice = {\n mouse: wrapInHoverPointerMedia('hover', 'fine'),\n touch: wrapInHoverPointerMedia('none', 'coarse'),\n};\n\nexport const colors = Object.freeze({\n LG_WHITE: '#FFF',\n LG_BLACK: '#000',\n\n LG_ORANGE: '#F08C00',\n LG_ORANGE_DARK: '#E1500F',\n LG_PINK: '#DC1978',\n LG_RED: '#BE0046',\n LG_RED_SCORE: '#BE232D',\n LG_RED_DARK: '#B20028',\n LG_GREEN_YELLOW: '#CDBE00',\n LG_GREEN_LIGHT: '#91B423',\n LG_GREEN: '#55911E',\n LG_GREEN_SCORE: '#82B905',\n\n DW_BLUE: '#002D5A',\n DW_DARK_BLUE: '#032F59',\n DW_LIGHT_BLUE: '#0098FF',\n\n LG_BLUE_1: '#0098FF',\n LG_BLUE_2: '#0096FA',\n LG_BLUE_3: '#1B9EFD',\n LG_BLUE_4: '#99d7ff',\n LG_BLUE_5: '#1464A5',\n LG_BLUE_6: '#032F59',\n LG_BLUE_7: '#1B9EFD',\n\n LG_BAHAMA_BLUE: '#23527c',\n\n LG_GRAY_1: '#938A7F',\n LG_GRAY_2: '#BBB',\n LG_GRAY_3: '#F5F4F2',\n LG_GRAY_4: '#ddd',\n LG_GRAY_5: '#444',\n LG_GRAY_6: '#ccc',\n LG_GRAY_7: '#eee',\n LG_GRAY_8: '#9B9B9B',\n LG_GRAY_9: '#3e3e3e',\n LG_GRAY_10: '#252629',\n LG_GRAY_11: '#666',\n LG_GRAY_12: '#E6E1DD',\n LG_GRAY_13: '#4a4a4a',\n LG_GRAY_14: '#e7e7e7',\n LG_GRAY_15: '#777777',\n\n LG_ORANGE1: '#bf6f00',\n\n LIGHT_KHAKI: '#f4f3f2',\n\n LG_GRAY_TRANSPARENT_1: 'rgba(128,128,128,.5)',\n LG_GRAY_TRANSPARENT_15: 'rgba(128,128,128,.15)',\n LG_TRANSPARENT_BLACK_075: 'rgba(0,0,0,0.075)',\n LG_TRANSPARENT_BLACK_20: 'rgba(0,0,0,0.2)',\n LG_TRANSPARENT_BLACK_25: 'rgba(0,0,0,0.25)',\n LG_TRANSPARENT_BLACK_30: 'rgba(0,0,0,0.3)',\n LG_TRANSPARENT_BLACK_40: 'rgba(0,0,0,0.4)',\n LG_TRANSPARENT_BLACK_50: 'rgba(0,0,0,0.5)',\n LG_TRANSPARENT_WHITE_10: 'rgba(255,255,255,0.1)',\n LG_TRANSPARENT_WHITE_15: 'rgba(255,255,255,0.15)',\n LG_TRANSPARENT_WHITE_25: 'rgba(255,255,255,0.25)',\n LG_TRANSPARENT_WHITE_50: 'rgba(255,255,255,0.5)',\n});\n\nexport const selector = Object.freeze({\n composition: Object.freeze({\n even: ':first-child:nth-last-child(2n)',\n odd: ':first-child:nth-last-child(2n+1)',\n _369: ':first-child:nth-last-child(3n)',\n _258: ':first-child:nth-last-child(3n+2)',\n _4710: ':first-child:nth-last-child(3n+1)',\n }),\n notFirst: ':not(:first-child)',\n notLast: ':not(:last-child)',\n disabled: '[disabled]:not([disabled=\"false\"])',\n topElements: numberOfElements => `:nth-child(-n+${numberOfElements})`,\n justNElements: numberOfElements => `:first-child:nth-last-child(${numberOfElements})`,\n});\n\nexport const clearfix = `\n &:after {\n display: table;\n content: \"\";\n clear: both;\n }\n `;\n","import { createContext, useContext } from 'react';\nimport { t, clearTranslations, hasTranslations } from '../utils/i18n';\n\nconst i18n = { t, clearTranslations, hasTranslations };\n\nexport const I18nContext = createContext({ i18n });\n\nexport const useI18nContext = () => useContext(I18nContext);\n","import styled from 'styled-components';\nimport { colors } from '../../utils/css';\n\n// eslint-disable-next-line react/prop-types,no-unused-vars\nexport const Text = ({\n isA = 'span',\n children,\n // eslint-disable-next-line no-unused-vars\n isRtl,\n className,\n ...restProps\n}) => {\n const Tag = isA;\n return (\n \n {children}\n \n );\n};\n\nexport const StyledText = styled(Text)`\n direction: ${({ isRtl }) => (isRtl ? 'rtl' : 'ltr')};\n`;\n\nexport const StyledTextGray12 = styled(StyledText)`\n color: ${colors.LG_GRAY_12};\n`;\n","export const KEY_ARROW_UP = 38;\nexport const KEY_ARROW_DOWN = 40;\nexport const KEY_ENTER = 13;\nexport const KEY_ESCAPE = 27;\nexport const KEY_BACKSPACE = 8;\n\nexport const keyCodes = Object.freeze({\n TAB: 'Tab',\n ENTER: 'Enter',\n SPACEBAR: ' ',\n ARROW_LEFT: 'ArrowLeft',\n ARROW_RIGHT: 'ArrowRight',\n ESCAPE: 'Escape',\n});\n","// watch out - arrays not supported ;) Maybe in future\n// we should replace this small function with something more powerful\n// but let us wait till it is really needed.\n\nfunction accessPathByArr(keysArr, obj) {\n if (!obj) {\n return null;\n }\n const objPartial = obj[keysArr[0]];\n\n if (!objPartial) {\n return null;\n }\n if (keysArr.length === 1) {\n return objPartial;\n }\n return accessPathByArr(keysArr.slice(1), objPartial);\n}\n\nexport function accessPath(pathStr, obj) {\n if (!pathStr) {\n return obj;\n }\n return accessPathByArr(pathStr.split('.'), obj);\n}\n","import { accessPath } from './jsonPath';\n\n// eslint-disable-next-line fp/no-let\nlet translations = null;\n\nexport const replaceInPattern = (pattern, options) =>\n Object.keys(options).reduce((acc, nextVar) => {\n const varNameRegex = new RegExp(/\\${/.source + nextVar + /}/.source, 'g'); // ${nextVar}\n return acc.replace(varNameRegex, options[nextVar]);\n }, pattern);\n\nconst retrieveLabel = key => {\n const translation = accessPath(key, translations);\n if (!translation) {\n return key;\n }\n return translation;\n};\n\nexport function hasTranslations() {\n return !!translations;\n}\n\nexport function setTranslations(inTranslations) {\n translations = inTranslations; // eslint-disable-line fp/no-mutation\n}\n\nexport function clearTranslations() {\n translations = null; // eslint-disable-line fp/no-mutation\n}\n\nexport function t(key, options) {\n const label = retrieveLabel(key);\n return options ? replaceInPattern(label, options) : label;\n}\n\nexport function gqlQueryByLang(lang) {\n const langValue = lang || '$lang';\n return `\n i18n: i18nByLang(lang: ${langValue}, appName: \"mdl\"){\n all\n }\n `;\n}\n\nexport function gqlQueryByContent({ id, lang } = {}) {\n const idValue = id || '$id';\n const langValue = lang || '$lang';\n\n return `\n i18n: i18nByContent (id: ${idValue}, lang: ${langValue}){\n all\n }\n `;\n}\n"],"sourceRoot":""}