@magmamath/students-features 1.4.6 → 1.5.0-rc.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commonjs/features/endOfAssignment/components/CorrectAnswer/CorrectAnswer.js +1 -6
- package/dist/commonjs/features/endOfAssignment/components/CorrectAnswer/CorrectAnswer.js.map +1 -1
- package/dist/commonjs/features/fluency/components/Fluency.js +6 -12
- package/dist/commonjs/features/fluency/components/Fluency.js.map +1 -1
- package/dist/commonjs/features/fluency/components/select-math-operator/SelectMathOperator.js +5 -13
- package/dist/commonjs/features/fluency/components/select-math-operator/SelectMathOperator.js.map +1 -1
- package/dist/commonjs/features/fluency/model/FluencyModel.js +0 -21
- package/dist/commonjs/features/fluency/model/FluencyModel.js.map +1 -1
- package/dist/commonjs/features/fluency/shared/fluency.constants.js +1 -6
- package/dist/commonjs/features/fluency/shared/fluency.constants.js.map +1 -1
- package/dist/commonjs/features/fluency/shared/fluency.helpers.js +1 -3
- package/dist/commonjs/features/fluency/shared/fluency.helpers.js.map +1 -1
- package/dist/commonjs/features/pmProgress/model/PmProgressModel.js +1 -7
- package/dist/commonjs/features/pmProgress/model/PmProgressModel.js.map +1 -1
- package/dist/commonjs/features/pmProgress/model/PmRecommendationsModel.js +4 -20
- package/dist/commonjs/features/pmProgress/model/PmRecommendationsModel.js.map +1 -1
- package/dist/commonjs/features/pmProgress/shared/pmProgress.helpers.js +1 -22
- package/dist/commonjs/features/pmProgress/shared/pmProgress.helpers.js.map +1 -1
- package/dist/commonjs/features/translation/constants.js +11 -0
- package/dist/commonjs/features/translation/constants.js.map +1 -0
- package/dist/commonjs/features/translation/helpers.js +60 -0
- package/dist/commonjs/features/translation/helpers.js.map +1 -0
- package/dist/commonjs/features/translation/index.js +105 -0
- package/dist/commonjs/features/translation/index.js.map +1 -0
- package/dist/commonjs/features/translation/model/TranslationModel.js +122 -0
- package/dist/commonjs/features/translation/model/TranslationModel.js.map +1 -0
- package/dist/commonjs/features/translation/model/TranslationPreprocessor.js +142 -0
- package/dist/commonjs/features/translation/model/TranslationPreprocessor.js.map +1 -0
- package/dist/commonjs/features/translation/model/TranslationService.js +112 -0
- package/dist/commonjs/features/translation/model/TranslationService.js.map +1 -0
- package/dist/commonjs/features/translation/preserve/wordsToPreserve.js +314 -0
- package/dist/commonjs/features/translation/preserve/wordsToPreserve.js.map +1 -0
- package/dist/commonjs/features/translation/providers/google/GoogleTranslationProvider.js +50 -0
- package/dist/commonjs/features/translation/providers/google/GoogleTranslationProvider.js.map +1 -0
- package/dist/commonjs/features/translation/providers/google/supportedLanguages.js +230 -0
- package/dist/commonjs/features/translation/providers/google/supportedLanguages.js.map +1 -0
- package/dist/commonjs/features/translation/providers/google.types.js +2 -0
- package/dist/commonjs/features/translation/providers/google.types.js.map +1 -0
- package/dist/commonjs/features/translation/providers/translation.interface.js +49 -0
- package/dist/commonjs/features/translation/providers/translation.interface.js.map +1 -0
- package/dist/commonjs/features/translation/types.js +2 -0
- package/dist/commonjs/features/translation/types.js.map +1 -0
- package/dist/commonjs/features/voice/index.js +15 -4
- package/dist/commonjs/features/voice/index.js.map +1 -1
- package/dist/commonjs/features/voice/playing/components/VoiceIcon.js +1 -1
- package/dist/commonjs/features/voice/playing/components/VoiceIcon.js.map +1 -1
- package/dist/commonjs/features/voice/playing/components/VoiceTranscriptContent.js +44 -0
- package/dist/commonjs/features/voice/playing/components/VoiceTranscriptContent.js.map +1 -0
- package/dist/commonjs/features/voice/playing/components/VoiceTranscription.js +107 -0
- package/dist/commonjs/features/voice/playing/components/VoiceTranscription.js.map +1 -0
- package/dist/commonjs/features/voice/playing/components/VoiceTranscriptionCollapsible.js +66 -0
- package/dist/commonjs/features/voice/playing/components/VoiceTranscriptionCollapsible.js.map +1 -0
- package/dist/commonjs/features/voice/playing/components/VoiceTranscriptionHeaderActions.js +58 -0
- package/dist/commonjs/features/voice/playing/components/VoiceTranscriptionHeaderActions.js.map +1 -0
- package/dist/commonjs/features/voice/playing/hooks/{useVoiceTranscriptionsDropdown.js → useDropdownAnimation.js} +8 -7
- package/dist/commonjs/features/voice/playing/hooks/useDropdownAnimation.js.map +1 -0
- package/dist/commonjs/features/voice/playing/hooks/useVoicePlayerLifecycle.js +53 -0
- package/dist/commonjs/features/voice/playing/hooks/useVoicePlayerLifecycle.js.map +1 -0
- package/dist/commonjs/features/voice/playing/hooks/useVoiceTranscriptionController.js +111 -0
- package/dist/commonjs/features/voice/playing/hooks/useVoiceTranscriptionController.js.map +1 -0
- package/dist/commonjs/features/voice/playing/model/{VoiceTranscriptionsDropdown.model.js → Dropdown.model.js} +4 -4
- package/dist/commonjs/features/voice/playing/model/Dropdown.model.js.map +1 -0
- package/dist/commonjs/features/voice/playing/model/PlaybackController.js +192 -0
- package/dist/commonjs/features/voice/playing/model/PlaybackController.js.map +1 -0
- package/dist/commonjs/features/voice/playing/model/Player.model.js +50 -5
- package/dist/commonjs/features/voice/playing/model/Player.model.js.map +1 -1
- package/dist/commonjs/features/voice/playing/model/{VoiceTranscriptionsCollection.js → TranscriptionsCollection.js} +4 -4
- package/dist/commonjs/features/voice/playing/model/TranscriptionsCollection.js.map +1 -0
- package/dist/commonjs/features/voice/playing/model/TranscriptionsDownloader.model.js +83 -0
- package/dist/commonjs/features/voice/playing/model/TranscriptionsDownloader.model.js.map +1 -0
- package/dist/commonjs/features/voice/playing/model/Translation.model.js +62 -0
- package/dist/commonjs/features/voice/playing/model/Translation.model.js.map +1 -0
- package/dist/commonjs/features/voice/playing/model/VoiceFileDownloader.model.js +2 -2
- package/dist/commonjs/features/voice/playing/model/VoiceFileDownloader.model.js.map +1 -1
- package/dist/commonjs/features/voice/playing/model/VoicePlayer.model.js +58 -172
- package/dist/commonjs/features/voice/playing/model/VoicePlayer.model.js.map +1 -1
- package/dist/commonjs/features/voice/recording/components/VoiceRecordDivider.js +1 -1
- package/dist/commonjs/features/voice/recording/components/VoiceRecordDivider.js.map +1 -1
- package/dist/commonjs/features/voice/types.js +12 -1
- package/dist/commonjs/features/voice/types.js.map +1 -1
- package/dist/commonjs/index.js +12 -0
- package/dist/commonjs/index.js.map +1 -1
- package/dist/module/features/endOfAssignment/components/CorrectAnswer/CorrectAnswer.js +2 -7
- package/dist/module/features/endOfAssignment/components/CorrectAnswer/CorrectAnswer.js.map +1 -1
- package/dist/module/features/fluency/components/Fluency.js +8 -14
- package/dist/module/features/fluency/components/Fluency.js.map +1 -1
- package/dist/module/features/fluency/components/select-math-operator/SelectMathOperator.js +5 -13
- package/dist/module/features/fluency/components/select-math-operator/SelectMathOperator.js.map +1 -1
- package/dist/module/features/fluency/model/FluencyModel.js +1 -22
- package/dist/module/features/fluency/model/FluencyModel.js.map +1 -1
- package/dist/module/features/fluency/shared/fluency.constants.js +0 -5
- package/dist/module/features/fluency/shared/fluency.constants.js.map +1 -1
- package/dist/module/features/fluency/shared/fluency.helpers.js +0 -1
- package/dist/module/features/fluency/shared/fluency.helpers.js.map +1 -1
- package/dist/module/features/pmProgress/model/PmProgressModel.js +1 -7
- package/dist/module/features/pmProgress/model/PmProgressModel.js.map +1 -1
- package/dist/module/features/pmProgress/model/PmRecommendationsModel.js +4 -20
- package/dist/module/features/pmProgress/model/PmRecommendationsModel.js.map +1 -1
- package/dist/module/features/pmProgress/shared/pmProgress.helpers.js +0 -20
- package/dist/module/features/pmProgress/shared/pmProgress.helpers.js.map +1 -1
- package/dist/module/features/translation/constants.js +7 -0
- package/dist/module/features/translation/constants.js.map +1 -0
- package/dist/module/features/translation/helpers.js +53 -0
- package/dist/module/features/translation/helpers.js.map +1 -0
- package/dist/module/features/translation/index.js +12 -0
- package/dist/module/features/translation/index.js.map +1 -0
- package/dist/module/features/translation/model/TranslationModel.js +117 -0
- package/dist/module/features/translation/model/TranslationModel.js.map +1 -0
- package/dist/module/features/translation/model/TranslationPreprocessor.js +137 -0
- package/dist/module/features/translation/model/TranslationPreprocessor.js.map +1 -0
- package/dist/module/features/translation/model/TranslationService.js +107 -0
- package/dist/module/features/translation/model/TranslationService.js.map +1 -0
- package/dist/module/features/translation/preserve/wordsToPreserve.js +310 -0
- package/dist/module/features/translation/preserve/wordsToPreserve.js.map +1 -0
- package/dist/module/features/translation/providers/google/GoogleTranslationProvider.js +45 -0
- package/dist/module/features/translation/providers/google/GoogleTranslationProvider.js.map +1 -0
- package/dist/module/features/translation/providers/google/supportedLanguages.js +225 -0
- package/dist/module/features/translation/providers/google/supportedLanguages.js.map +1 -0
- package/dist/module/features/translation/providers/google.types.js +2 -0
- package/dist/module/features/translation/providers/google.types.js.map +1 -0
- package/dist/module/features/translation/providers/translation.interface.js +44 -0
- package/dist/module/features/translation/providers/translation.interface.js.map +1 -0
- package/dist/module/features/translation/types.js +2 -0
- package/dist/module/features/translation/types.js.map +1 -0
- package/dist/module/features/voice/index.js +2 -1
- package/dist/module/features/voice/index.js.map +1 -1
- package/dist/module/features/voice/playing/components/VoiceIcon.js +2 -2
- package/dist/module/features/voice/playing/components/VoiceIcon.js.map +1 -1
- package/dist/module/features/voice/playing/components/VoiceTranscriptContent.js +38 -0
- package/dist/module/features/voice/playing/components/VoiceTranscriptContent.js.map +1 -0
- package/dist/module/features/voice/playing/components/VoiceTranscription.js +101 -0
- package/dist/module/features/voice/playing/components/VoiceTranscription.js.map +1 -0
- package/dist/module/features/voice/playing/components/VoiceTranscriptionCollapsible.js +58 -0
- package/dist/module/features/voice/playing/components/VoiceTranscriptionCollapsible.js.map +1 -0
- package/dist/module/features/voice/playing/components/VoiceTranscriptionHeaderActions.js +52 -0
- package/dist/module/features/voice/playing/components/VoiceTranscriptionHeaderActions.js.map +1 -0
- package/dist/module/features/voice/playing/hooks/{useVoiceTranscriptionsDropdown.js → useDropdownAnimation.js} +6 -5
- package/dist/module/features/voice/playing/hooks/useDropdownAnimation.js.map +1 -0
- package/dist/module/features/voice/playing/hooks/useVoicePlayerLifecycle.js +48 -0
- package/dist/module/features/voice/playing/hooks/useVoicePlayerLifecycle.js.map +1 -0
- package/dist/module/features/voice/playing/hooks/useVoiceTranscriptionController.js +106 -0
- package/dist/module/features/voice/playing/hooks/useVoiceTranscriptionController.js.map +1 -0
- package/dist/module/features/voice/playing/model/{VoiceTranscriptionsDropdown.model.js → Dropdown.model.js} +2 -2
- package/dist/module/features/voice/playing/model/Dropdown.model.js.map +1 -0
- package/dist/module/features/voice/playing/model/PlaybackController.js +187 -0
- package/dist/module/features/voice/playing/model/PlaybackController.js.map +1 -0
- package/dist/module/features/voice/playing/model/Player.model.js +51 -4
- package/dist/module/features/voice/playing/model/Player.model.js.map +1 -1
- package/dist/module/features/voice/playing/model/{VoiceTranscriptionsCollection.js → TranscriptionsCollection.js} +2 -2
- package/dist/module/features/voice/playing/model/TranscriptionsCollection.js.map +1 -0
- package/dist/module/features/voice/playing/model/TranscriptionsDownloader.model.js +78 -0
- package/dist/module/features/voice/playing/model/TranscriptionsDownloader.model.js.map +1 -0
- package/dist/module/features/voice/playing/model/Translation.model.js +57 -0
- package/dist/module/features/voice/playing/model/Translation.model.js.map +1 -0
- package/dist/module/features/voice/playing/model/VoiceFileDownloader.model.js +2 -2
- package/dist/module/features/voice/playing/model/VoiceFileDownloader.model.js.map +1 -1
- package/dist/module/features/voice/playing/model/VoicePlayer.model.js +60 -174
- package/dist/module/features/voice/playing/model/VoicePlayer.model.js.map +1 -1
- package/dist/module/features/voice/recording/components/VoiceRecordDivider.js +2 -2
- package/dist/module/features/voice/recording/components/VoiceRecordDivider.js.map +1 -1
- package/dist/module/features/voice/types.js +11 -0
- package/dist/module/features/voice/types.js.map +1 -1
- package/dist/module/index.js +1 -0
- package/dist/module/index.js.map +1 -1
- package/dist/typescript/commonjs/features/endOfAssignment/components/CorrectAnswer/CorrectAnswer.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/fluency/components/Fluency.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/fluency/components/select-math-operator/SelectMathOperator.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/fluency/model/FluencyModel.d.ts +0 -3
- package/dist/typescript/commonjs/features/fluency/model/FluencyModel.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/fluency/shared/fluency.constants.d.ts +0 -4
- package/dist/typescript/commonjs/features/fluency/shared/fluency.constants.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/fluency/shared/fluency.helpers.d.ts +0 -1
- package/dist/typescript/commonjs/features/fluency/shared/fluency.helpers.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/pmProgress/model/PmProgressModel.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/pmProgress/model/PmRecommendationsModel.d.ts +38 -9
- package/dist/typescript/commonjs/features/pmProgress/model/PmRecommendationsModel.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/pmProgress/shared/pmProgress.helpers.d.ts +0 -1
- package/dist/typescript/commonjs/features/pmProgress/shared/pmProgress.helpers.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/translation/constants.d.ts +5 -0
- package/dist/typescript/commonjs/features/translation/constants.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/translation/helpers.d.ts +9 -0
- package/dist/typescript/commonjs/features/translation/helpers.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/translation/index.d.ts +12 -0
- package/dist/typescript/commonjs/features/translation/index.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/translation/model/TranslationModel.d.ts +33 -0
- package/dist/typescript/commonjs/features/translation/model/TranslationModel.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/translation/model/TranslationPreprocessor.d.ts +34 -0
- package/dist/typescript/commonjs/features/translation/model/TranslationPreprocessor.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/translation/model/TranslationService.d.ts +40 -0
- package/dist/typescript/commonjs/features/translation/model/TranslationService.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/translation/preserve/wordsToPreserve.d.ts +3 -0
- package/dist/typescript/commonjs/features/translation/preserve/wordsToPreserve.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/translation/providers/google/GoogleTranslationProvider.d.ts +17 -0
- package/dist/typescript/commonjs/features/translation/providers/google/GoogleTranslationProvider.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/translation/providers/google/supportedLanguages.d.ts +209 -0
- package/dist/typescript/commonjs/features/translation/providers/google/supportedLanguages.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/translation/providers/google.types.d.ts +15 -0
- package/dist/typescript/commonjs/features/translation/providers/google.types.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/translation/providers/translation.interface.d.ts +30 -0
- package/dist/typescript/commonjs/features/translation/providers/translation.interface.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/translation/types.d.ts +27 -0
- package/dist/typescript/commonjs/features/translation/types.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/voice/index.d.ts +3 -1
- package/dist/typescript/commonjs/features/voice/index.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/voice/playing/components/VoiceTranscriptContent.d.ts +8 -0
- package/dist/typescript/commonjs/features/voice/playing/components/VoiceTranscriptContent.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/voice/playing/components/VoiceTranscription.d.ts +16 -0
- package/dist/typescript/commonjs/features/voice/playing/components/VoiceTranscription.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/voice/playing/components/VoiceTranscriptionCollapsible.d.ts +10 -0
- package/dist/typescript/commonjs/features/voice/playing/components/VoiceTranscriptionCollapsible.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/voice/playing/components/VoiceTranscriptionHeaderActions.d.ts +12 -0
- package/dist/typescript/commonjs/features/voice/playing/components/VoiceTranscriptionHeaderActions.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/voice/playing/hooks/{useVoiceTranscriptionsDropdown.d.ts → useDropdownAnimation.d.ts} +3 -3
- package/dist/typescript/commonjs/features/voice/playing/hooks/useDropdownAnimation.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/voice/playing/hooks/useVoicePlayerLifecycle.d.ts +15 -0
- package/dist/typescript/commonjs/features/voice/playing/hooks/useVoicePlayerLifecycle.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/voice/playing/hooks/useVoiceTranscriptionController.d.ts +30 -0
- package/dist/typescript/commonjs/features/voice/playing/hooks/useVoiceTranscriptionController.d.ts.map +1 -0
- package/dist/typescript/{module/features/voice/playing/model/VoiceTranscriptionsDropdown.model.d.ts → commonjs/features/voice/playing/model/Dropdown.model.d.ts} +2 -2
- package/dist/typescript/commonjs/features/voice/playing/model/Dropdown.model.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/voice/playing/model/PlaybackController.d.ts +28 -0
- package/dist/typescript/commonjs/features/voice/playing/model/PlaybackController.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/voice/playing/model/Player.model.d.ts +4 -0
- package/dist/typescript/commonjs/features/voice/playing/model/Player.model.d.ts.map +1 -1
- package/dist/typescript/{module/features/voice/playing/model/VoiceTranscriptionsCollection.d.ts → commonjs/features/voice/playing/model/TranscriptionsCollection.d.ts} +2 -2
- package/dist/typescript/commonjs/features/voice/playing/model/TranscriptionsCollection.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/voice/playing/model/TranscriptionsDownloader.model.d.ts +19 -0
- package/dist/typescript/commonjs/features/voice/playing/model/TranscriptionsDownloader.model.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/voice/playing/model/Translation.model.d.ts +25 -0
- package/dist/typescript/commonjs/features/voice/playing/model/Translation.model.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/voice/playing/model/VoiceFileDownloader.model.d.ts +2 -2
- package/dist/typescript/commonjs/features/voice/playing/model/VoiceFileDownloader.model.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/voice/playing/model/VoicePlayer.model.d.ts +19 -18
- package/dist/typescript/commonjs/features/voice/playing/model/VoicePlayer.model.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/voice/types.d.ts +14 -2
- package/dist/typescript/commonjs/features/voice/types.d.ts.map +1 -1
- package/dist/typescript/commonjs/index.d.ts +1 -0
- package/dist/typescript/commonjs/index.d.ts.map +1 -1
- package/dist/typescript/module/features/endOfAssignment/components/CorrectAnswer/CorrectAnswer.d.ts.map +1 -1
- package/dist/typescript/module/features/fluency/components/Fluency.d.ts.map +1 -1
- package/dist/typescript/module/features/fluency/components/select-math-operator/SelectMathOperator.d.ts.map +1 -1
- package/dist/typescript/module/features/fluency/model/FluencyModel.d.ts +0 -3
- package/dist/typescript/module/features/fluency/model/FluencyModel.d.ts.map +1 -1
- package/dist/typescript/module/features/fluency/shared/fluency.constants.d.ts +0 -4
- package/dist/typescript/module/features/fluency/shared/fluency.constants.d.ts.map +1 -1
- package/dist/typescript/module/features/fluency/shared/fluency.helpers.d.ts +0 -1
- package/dist/typescript/module/features/fluency/shared/fluency.helpers.d.ts.map +1 -1
- package/dist/typescript/module/features/pmProgress/model/PmProgressModel.d.ts.map +1 -1
- package/dist/typescript/module/features/pmProgress/model/PmRecommendationsModel.d.ts +38 -9
- package/dist/typescript/module/features/pmProgress/model/PmRecommendationsModel.d.ts.map +1 -1
- package/dist/typescript/module/features/pmProgress/shared/pmProgress.helpers.d.ts +0 -1
- package/dist/typescript/module/features/pmProgress/shared/pmProgress.helpers.d.ts.map +1 -1
- package/dist/typescript/module/features/translation/constants.d.ts +5 -0
- package/dist/typescript/module/features/translation/constants.d.ts.map +1 -0
- package/dist/typescript/module/features/translation/helpers.d.ts +9 -0
- package/dist/typescript/module/features/translation/helpers.d.ts.map +1 -0
- package/dist/typescript/module/features/translation/index.d.ts +12 -0
- package/dist/typescript/module/features/translation/index.d.ts.map +1 -0
- package/dist/typescript/module/features/translation/model/TranslationModel.d.ts +33 -0
- package/dist/typescript/module/features/translation/model/TranslationModel.d.ts.map +1 -0
- package/dist/typescript/module/features/translation/model/TranslationPreprocessor.d.ts +34 -0
- package/dist/typescript/module/features/translation/model/TranslationPreprocessor.d.ts.map +1 -0
- package/dist/typescript/module/features/translation/model/TranslationService.d.ts +40 -0
- package/dist/typescript/module/features/translation/model/TranslationService.d.ts.map +1 -0
- package/dist/typescript/module/features/translation/preserve/wordsToPreserve.d.ts +3 -0
- package/dist/typescript/module/features/translation/preserve/wordsToPreserve.d.ts.map +1 -0
- package/dist/typescript/module/features/translation/providers/google/GoogleTranslationProvider.d.ts +17 -0
- package/dist/typescript/module/features/translation/providers/google/GoogleTranslationProvider.d.ts.map +1 -0
- package/dist/typescript/module/features/translation/providers/google/supportedLanguages.d.ts +209 -0
- package/dist/typescript/module/features/translation/providers/google/supportedLanguages.d.ts.map +1 -0
- package/dist/typescript/module/features/translation/providers/google.types.d.ts +15 -0
- package/dist/typescript/module/features/translation/providers/google.types.d.ts.map +1 -0
- package/dist/typescript/module/features/translation/providers/translation.interface.d.ts +30 -0
- package/dist/typescript/module/features/translation/providers/translation.interface.d.ts.map +1 -0
- package/dist/typescript/module/features/translation/types.d.ts +27 -0
- package/dist/typescript/module/features/translation/types.d.ts.map +1 -0
- package/dist/typescript/module/features/voice/index.d.ts +3 -1
- package/dist/typescript/module/features/voice/index.d.ts.map +1 -1
- package/dist/typescript/module/features/voice/playing/components/VoiceTranscriptContent.d.ts +8 -0
- package/dist/typescript/module/features/voice/playing/components/VoiceTranscriptContent.d.ts.map +1 -0
- package/dist/typescript/module/features/voice/playing/components/VoiceTranscription.d.ts +16 -0
- package/dist/typescript/module/features/voice/playing/components/VoiceTranscription.d.ts.map +1 -0
- package/dist/typescript/module/features/voice/playing/components/VoiceTranscriptionCollapsible.d.ts +10 -0
- package/dist/typescript/module/features/voice/playing/components/VoiceTranscriptionCollapsible.d.ts.map +1 -0
- package/dist/typescript/module/features/voice/playing/components/VoiceTranscriptionHeaderActions.d.ts +12 -0
- package/dist/typescript/module/features/voice/playing/components/VoiceTranscriptionHeaderActions.d.ts.map +1 -0
- package/dist/typescript/module/features/voice/playing/hooks/{useVoiceTranscriptionsDropdown.d.ts → useDropdownAnimation.d.ts} +3 -3
- package/dist/typescript/module/features/voice/playing/hooks/useDropdownAnimation.d.ts.map +1 -0
- package/dist/typescript/module/features/voice/playing/hooks/useVoicePlayerLifecycle.d.ts +15 -0
- package/dist/typescript/module/features/voice/playing/hooks/useVoicePlayerLifecycle.d.ts.map +1 -0
- package/dist/typescript/module/features/voice/playing/hooks/useVoiceTranscriptionController.d.ts +30 -0
- package/dist/typescript/module/features/voice/playing/hooks/useVoiceTranscriptionController.d.ts.map +1 -0
- package/dist/typescript/{commonjs/features/voice/playing/model/VoiceTranscriptionsDropdown.model.d.ts → module/features/voice/playing/model/Dropdown.model.d.ts} +2 -2
- package/dist/typescript/module/features/voice/playing/model/Dropdown.model.d.ts.map +1 -0
- package/dist/typescript/module/features/voice/playing/model/PlaybackController.d.ts +28 -0
- package/dist/typescript/module/features/voice/playing/model/PlaybackController.d.ts.map +1 -0
- package/dist/typescript/module/features/voice/playing/model/Player.model.d.ts +4 -0
- package/dist/typescript/module/features/voice/playing/model/Player.model.d.ts.map +1 -1
- package/dist/typescript/{commonjs/features/voice/playing/model/VoiceTranscriptionsCollection.d.ts → module/features/voice/playing/model/TranscriptionsCollection.d.ts} +2 -2
- package/dist/typescript/module/features/voice/playing/model/TranscriptionsCollection.d.ts.map +1 -0
- package/dist/typescript/module/features/voice/playing/model/TranscriptionsDownloader.model.d.ts +19 -0
- package/dist/typescript/module/features/voice/playing/model/TranscriptionsDownloader.model.d.ts.map +1 -0
- package/dist/typescript/module/features/voice/playing/model/Translation.model.d.ts +25 -0
- package/dist/typescript/module/features/voice/playing/model/Translation.model.d.ts.map +1 -0
- package/dist/typescript/module/features/voice/playing/model/VoiceFileDownloader.model.d.ts +2 -2
- package/dist/typescript/module/features/voice/playing/model/VoiceFileDownloader.model.d.ts.map +1 -1
- package/dist/typescript/module/features/voice/playing/model/VoicePlayer.model.d.ts +19 -18
- package/dist/typescript/module/features/voice/playing/model/VoicePlayer.model.d.ts.map +1 -1
- package/dist/typescript/module/features/voice/types.d.ts +14 -2
- package/dist/typescript/module/features/voice/types.d.ts.map +1 -1
- package/dist/typescript/module/index.d.ts +1 -0
- package/dist/typescript/module/index.d.ts.map +1 -1
- package/package.json +37 -10
- package/src/features/endOfAssignment/components/CorrectAnswer/CorrectAnswer.tsx +2 -9
- package/src/features/fluency/components/Fluency.tsx +9 -17
- package/src/features/fluency/components/select-math-operator/SelectMathOperator.tsx +5 -13
- package/src/features/fluency/model/FluencyModel.ts +1 -25
- package/src/features/fluency/shared/fluency.constants.ts +0 -5
- package/src/features/fluency/shared/fluency.helpers.ts +0 -3
- package/src/features/pmProgress/model/PmProgressModel.ts +1 -4
- package/src/features/pmProgress/model/PmRecommendationsModel.ts +6 -22
- package/src/features/pmProgress/shared/pmProgress.helpers.ts +0 -33
- package/src/features/translation/constants.ts +4 -0
- package/src/features/translation/helpers.ts +63 -0
- package/src/features/translation/index.ts +30 -0
- package/src/features/translation/model/TranslationModel.ts +174 -0
- package/src/features/translation/model/TranslationPreprocessor.ts +171 -0
- package/src/features/translation/model/TranslationService.ts +148 -0
- package/src/features/translation/preserve/wordsToPreserve.ts +87 -0
- package/src/features/translation/providers/google/GoogleTranslationProvider.ts +50 -0
- package/src/features/translation/providers/google/supportedLanguages.ts +229 -0
- package/src/features/translation/providers/google.types.ts +16 -0
- package/src/features/translation/providers/translation.interface.ts +63 -0
- package/src/features/translation/types.ts +30 -0
- package/src/features/voice/index.ts +3 -1
- package/src/features/voice/playing/components/VoiceIcon.tsx +2 -2
- package/src/features/voice/playing/components/VoiceTranscriptContent.tsx +44 -0
- package/src/features/voice/playing/components/VoiceTranscription.tsx +117 -0
- package/src/features/voice/playing/components/VoiceTranscriptionCollapsible.tsx +59 -0
- package/src/features/voice/playing/components/VoiceTranscriptionHeaderActions.tsx +61 -0
- package/src/features/voice/playing/hooks/{useVoiceTranscriptionsDropdown.ts → useDropdownAnimation.ts} +5 -5
- package/src/features/voice/playing/hooks/useVoicePlayerLifecycle.ts +64 -0
- package/src/features/voice/playing/hooks/useVoiceTranscriptionController.ts +148 -0
- package/src/features/voice/playing/model/{VoiceTranscriptionsDropdown.model.ts → Dropdown.model.ts} +2 -2
- package/src/features/voice/playing/model/PlaybackController.ts +221 -0
- package/src/features/voice/playing/model/Player.model.ts +52 -4
- package/src/features/voice/playing/model/{VoiceTranscriptionsCollection.ts → TranscriptionsCollection.ts} +1 -1
- package/src/features/voice/playing/model/TranscriptionsDownloader.model.ts +88 -0
- package/src/features/voice/playing/model/Translation.model.ts +75 -0
- package/src/features/voice/playing/model/VoiceFileDownloader.model.ts +2 -2
- package/src/features/voice/playing/model/VoicePlayer.model.ts +68 -192
- package/src/features/voice/recording/components/VoiceRecordDivider.tsx +2 -2
- package/src/features/voice/types.ts +21 -1
- package/src/i18n/.generated/schema.json +3 -7
- package/src/index.ts +1 -0
- package/dist/commonjs/features/fluency/components/FluencyStatusOverlay.js +0 -101
- package/dist/commonjs/features/fluency/components/FluencyStatusOverlay.js.map +0 -1
- package/dist/commonjs/features/voice/playing/components/VoiceTranscriptionsDropdown.js +0 -245
- package/dist/commonjs/features/voice/playing/components/VoiceTranscriptionsDropdown.js.map +0 -1
- package/dist/commonjs/features/voice/playing/components/VoiceTranscriptionsDropdownItem.js +0 -109
- package/dist/commonjs/features/voice/playing/components/VoiceTranscriptionsDropdownItem.js.map +0 -1
- package/dist/commonjs/features/voice/playing/hooks/useVoiceTranscriptionsDropdown.js.map +0 -1
- package/dist/commonjs/features/voice/playing/hooks/useVoiceTranscriptionsDropdownItemAnimation.js +0 -34
- package/dist/commonjs/features/voice/playing/hooks/useVoiceTranscriptionsDropdownItemAnimation.js.map +0 -1
- package/dist/commonjs/features/voice/playing/model/TranscriptionsDownloaderModel.js +0 -66
- package/dist/commonjs/features/voice/playing/model/TranscriptionsDownloaderModel.js.map +0 -1
- package/dist/commonjs/features/voice/playing/model/VoiceTranscriptionsCollection.js.map +0 -1
- package/dist/commonjs/features/voice/playing/model/VoiceTranscriptionsDropdown.model.js.map +0 -1
- package/dist/module/features/fluency/components/FluencyStatusOverlay.js +0 -95
- package/dist/module/features/fluency/components/FluencyStatusOverlay.js.map +0 -1
- package/dist/module/features/voice/playing/components/VoiceTranscriptionsDropdown.js +0 -238
- package/dist/module/features/voice/playing/components/VoiceTranscriptionsDropdown.js.map +0 -1
- package/dist/module/features/voice/playing/components/VoiceTranscriptionsDropdownItem.js +0 -103
- package/dist/module/features/voice/playing/components/VoiceTranscriptionsDropdownItem.js.map +0 -1
- package/dist/module/features/voice/playing/hooks/useVoiceTranscriptionsDropdown.js.map +0 -1
- package/dist/module/features/voice/playing/hooks/useVoiceTranscriptionsDropdownItemAnimation.js +0 -29
- package/dist/module/features/voice/playing/hooks/useVoiceTranscriptionsDropdownItemAnimation.js.map +0 -1
- package/dist/module/features/voice/playing/model/TranscriptionsDownloaderModel.js +0 -61
- package/dist/module/features/voice/playing/model/TranscriptionsDownloaderModel.js.map +0 -1
- package/dist/module/features/voice/playing/model/VoiceTranscriptionsCollection.js.map +0 -1
- package/dist/module/features/voice/playing/model/VoiceTranscriptionsDropdown.model.js.map +0 -1
- package/dist/typescript/commonjs/features/fluency/components/FluencyStatusOverlay.d.ts +0 -8
- package/dist/typescript/commonjs/features/fluency/components/FluencyStatusOverlay.d.ts.map +0 -1
- package/dist/typescript/commonjs/features/voice/playing/components/VoiceTranscriptionsDropdown.d.ts +0 -16
- package/dist/typescript/commonjs/features/voice/playing/components/VoiceTranscriptionsDropdown.d.ts.map +0 -1
- package/dist/typescript/commonjs/features/voice/playing/components/VoiceTranscriptionsDropdownItem.d.ts +0 -12
- package/dist/typescript/commonjs/features/voice/playing/components/VoiceTranscriptionsDropdownItem.d.ts.map +0 -1
- package/dist/typescript/commonjs/features/voice/playing/hooks/useVoiceTranscriptionsDropdown.d.ts.map +0 -1
- package/dist/typescript/commonjs/features/voice/playing/hooks/useVoiceTranscriptionsDropdownItemAnimation.d.ts +0 -11
- package/dist/typescript/commonjs/features/voice/playing/hooks/useVoiceTranscriptionsDropdownItemAnimation.d.ts.map +0 -1
- package/dist/typescript/commonjs/features/voice/playing/model/TranscriptionsDownloaderModel.d.ts +0 -15
- package/dist/typescript/commonjs/features/voice/playing/model/TranscriptionsDownloaderModel.d.ts.map +0 -1
- package/dist/typescript/commonjs/features/voice/playing/model/VoiceTranscriptionsCollection.d.ts.map +0 -1
- package/dist/typescript/commonjs/features/voice/playing/model/VoiceTranscriptionsDropdown.model.d.ts.map +0 -1
- package/dist/typescript/module/features/fluency/components/FluencyStatusOverlay.d.ts +0 -8
- package/dist/typescript/module/features/fluency/components/FluencyStatusOverlay.d.ts.map +0 -1
- package/dist/typescript/module/features/voice/playing/components/VoiceTranscriptionsDropdown.d.ts +0 -16
- package/dist/typescript/module/features/voice/playing/components/VoiceTranscriptionsDropdown.d.ts.map +0 -1
- package/dist/typescript/module/features/voice/playing/components/VoiceTranscriptionsDropdownItem.d.ts +0 -12
- package/dist/typescript/module/features/voice/playing/components/VoiceTranscriptionsDropdownItem.d.ts.map +0 -1
- package/dist/typescript/module/features/voice/playing/hooks/useVoiceTranscriptionsDropdown.d.ts.map +0 -1
- package/dist/typescript/module/features/voice/playing/hooks/useVoiceTranscriptionsDropdownItemAnimation.d.ts +0 -11
- package/dist/typescript/module/features/voice/playing/hooks/useVoiceTranscriptionsDropdownItemAnimation.d.ts.map +0 -1
- package/dist/typescript/module/features/voice/playing/model/TranscriptionsDownloaderModel.d.ts +0 -15
- package/dist/typescript/module/features/voice/playing/model/TranscriptionsDownloaderModel.d.ts.map +0 -1
- package/dist/typescript/module/features/voice/playing/model/VoiceTranscriptionsCollection.d.ts.map +0 -1
- package/dist/typescript/module/features/voice/playing/model/VoiceTranscriptionsDropdown.model.d.ts.map +0 -1
- package/src/features/fluency/components/FluencyStatusOverlay.tsx +0 -101
- package/src/features/voice/playing/components/VoiceTranscriptionsDropdown.tsx +0 -296
- package/src/features/voice/playing/components/VoiceTranscriptionsDropdownItem.tsx +0 -128
- package/src/features/voice/playing/hooks/useVoiceTranscriptionsDropdownItemAnimation.ts +0 -40
- package/src/features/voice/playing/model/TranscriptionsDownloaderModel.ts +0 -80
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
|
-
import { useGate
|
|
2
|
+
import { useGate } from 'effector-react'
|
|
3
3
|
import { View, StyleSheet } from 'react-native'
|
|
4
4
|
import { Typography, HeadingVariants, SPACING, COLORS } from '@magmamath/react-native-ui'
|
|
5
5
|
import { useText } from '../../../i18n/i18n'
|
|
@@ -8,7 +8,6 @@ import { DayStreakCounter } from './day-streak-counter/DayStreakCounter'
|
|
|
8
8
|
import { SelectMathOperator } from './select-math-operator/SelectMathOperator'
|
|
9
9
|
import { FluencyMatrix } from './matrix/FluencyMatrix'
|
|
10
10
|
import { MobileMenu } from './mobile-menu/MobileMenu'
|
|
11
|
-
import { FluencyStatusOverlay } from './FluencyStatusOverlay'
|
|
12
11
|
import { FluencyProvider } from '../context/FluencyContext'
|
|
13
12
|
import type { FluencyModel } from '../model/FluencyModel'
|
|
14
13
|
import type { FluencyMode } from '../shared/fluency.constants'
|
|
@@ -33,7 +32,6 @@ export const Fluency = ({
|
|
|
33
32
|
}: FluencyProps) => {
|
|
34
33
|
useGate(model.gate, { config })
|
|
35
34
|
const t = useText()
|
|
36
|
-
const status = useUnit(model.$status)
|
|
37
35
|
|
|
38
36
|
return (
|
|
39
37
|
<FluencyProvider value={{ model, onStartPress, onPracticePress, onModeSelectPress }}>
|
|
@@ -45,21 +43,15 @@ export const Fluency = ({
|
|
|
45
43
|
</Typography>
|
|
46
44
|
</View>
|
|
47
45
|
|
|
48
|
-
{
|
|
49
|
-
<
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
<View style={styles.header}>
|
|
53
|
-
<StartBanner />
|
|
54
|
-
<DayStreakCounter />
|
|
55
|
-
</View>
|
|
46
|
+
<View style={styles.header}>
|
|
47
|
+
<StartBanner />
|
|
48
|
+
<DayStreakCounter />
|
|
49
|
+
</View>
|
|
56
50
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
</>
|
|
62
|
-
)}
|
|
51
|
+
<View style={styles.matrix}>
|
|
52
|
+
<SelectMathOperator />
|
|
53
|
+
<FluencyMatrix />
|
|
54
|
+
</View>
|
|
63
55
|
</View>
|
|
64
56
|
</FluencyProvider>
|
|
65
57
|
)
|
|
@@ -17,22 +17,14 @@ import { useText } from '../../../../i18n/i18n'
|
|
|
17
17
|
export const SelectMathOperator = () => {
|
|
18
18
|
const t = useText()
|
|
19
19
|
const { model, onModeSelectPress } = useFluency()
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
matrix: model.matrix.$data,
|
|
23
|
-
})
|
|
24
|
-
|
|
25
|
-
const visibleModes = matrix
|
|
26
|
-
? FLUENCY_MODES.filter(
|
|
27
|
-
({ mode }) => Object.keys(matrix.operations?.[mode]?.facts ?? {}).length > 0,
|
|
28
|
-
)
|
|
29
|
-
: FLUENCY_MODES
|
|
20
|
+
const fluencyMode = useUnit(model.matrix.$mode)
|
|
21
|
+
const matrix = useUnit(model.matrix.$data)
|
|
30
22
|
|
|
31
23
|
return (
|
|
32
24
|
<View style={styles.container}>
|
|
33
|
-
{
|
|
25
|
+
{FLUENCY_MODES.map(({ mode, label, symbol, select }, index) => {
|
|
34
26
|
const isSelectedMode = mode === fluencyMode
|
|
35
|
-
const progress = (matrix?.operations
|
|
27
|
+
const progress = (matrix?.operations[mode].completionRate ?? 0) * 100
|
|
36
28
|
|
|
37
29
|
return (
|
|
38
30
|
<MathOperatorRow
|
|
@@ -53,7 +45,7 @@ export const SelectMathOperator = () => {
|
|
|
53
45
|
model.matrix.setMode(mode)
|
|
54
46
|
onModeSelectPress?.(mode)
|
|
55
47
|
}}
|
|
56
|
-
showDivider={index <
|
|
48
|
+
showDivider={index < FLUENCY_MODES.length - 1}
|
|
57
49
|
/>
|
|
58
50
|
)
|
|
59
51
|
})}
|
|
@@ -5,8 +5,7 @@ import { FluencyDaysStreakModel } from './FluencyDaysStreakModel'
|
|
|
5
5
|
import { FluencyMatrixModel } from './FluencyMatrixModel'
|
|
6
6
|
import { FluencyApiModel } from './FluencyApiModel'
|
|
7
7
|
import { FluencySolvingModel } from './FluencySolvingModel'
|
|
8
|
-
import {
|
|
9
|
-
import { allFactsEmpty } from '../shared/fluency.helpers'
|
|
8
|
+
import { MatrixConfig } from '../shared/fluency.constants'
|
|
10
9
|
import type {
|
|
11
10
|
FluencyAttemptPayload,
|
|
12
11
|
FluencyConfig,
|
|
@@ -17,7 +16,6 @@ import type {
|
|
|
17
16
|
export class FluencyModel {
|
|
18
17
|
public readonly gate = createGate<FluencyModelGateProps>()
|
|
19
18
|
public readonly $config = createStore<FluencyConfig | null>(null)
|
|
20
|
-
public readonly $status = createStore<FluencyStatus | null>(null)
|
|
21
19
|
|
|
22
20
|
public readonly api: FluencyApiModel
|
|
23
21
|
public readonly streak: FluencyDaysStreakModel
|
|
@@ -31,7 +29,6 @@ export class FluencyModel {
|
|
|
31
29
|
this.solving = new FluencySolvingModel(this.matrix, this.$config)
|
|
32
30
|
|
|
33
31
|
this.init()
|
|
34
|
-
this.setupStatusTracking()
|
|
35
32
|
}
|
|
36
33
|
|
|
37
34
|
private init() {
|
|
@@ -66,25 +63,4 @@ export class FluencyModel {
|
|
|
66
63
|
target: this.api.postAttemptFx,
|
|
67
64
|
})
|
|
68
65
|
}
|
|
69
|
-
|
|
70
|
-
private setupStatusTracking() {
|
|
71
|
-
sample({
|
|
72
|
-
clock: this.gate.open,
|
|
73
|
-
fn: () => null as FluencyStatus | null,
|
|
74
|
-
target: this.$status,
|
|
75
|
-
})
|
|
76
|
-
|
|
77
|
-
sample({
|
|
78
|
-
clock: [this.api.getMatrixFx.fail, this.api.getWeeklyStatsFx.fail],
|
|
79
|
-
fn: () => FluencyStatus.ERROR,
|
|
80
|
-
target: this.$status,
|
|
81
|
-
})
|
|
82
|
-
|
|
83
|
-
sample({
|
|
84
|
-
clock: this.api.getMatrixFx.doneData,
|
|
85
|
-
filter: allFactsEmpty,
|
|
86
|
-
fn: () => FluencyStatus.EMPTY,
|
|
87
|
-
target: this.$status,
|
|
88
|
-
})
|
|
89
|
-
}
|
|
90
66
|
}
|
|
@@ -117,9 +117,6 @@ export const buildMatrixGrid = (data: GetMatrixResponse, mode: FluencyMode): Mat
|
|
|
117
117
|
return [headerRow, ...dataRows]
|
|
118
118
|
}
|
|
119
119
|
|
|
120
|
-
export const allFactsEmpty = (response: GetMatrixResponse): boolean =>
|
|
121
|
-
Object.values(response.operations).every((op) => Object.keys(op.facts).length === 0)
|
|
122
|
-
|
|
123
120
|
export const generateStreakDates = (stats: GetWeeklyStatsResponse) => {
|
|
124
121
|
const todayMs = new Date().setHours(0, 0, 0, 0)
|
|
125
122
|
const startMs = new Date(stats.weekStart).setHours(0, 0, 0, 0)
|
|
@@ -43,10 +43,7 @@ export class PmProgressModel {
|
|
|
43
43
|
|
|
44
44
|
sample({
|
|
45
45
|
clock: this.tree.initTreeFx.done,
|
|
46
|
-
fn: ({
|
|
47
|
-
tree,
|
|
48
|
-
lockedGrades: user.setting.practiceModeLockedGrades,
|
|
49
|
-
}),
|
|
46
|
+
fn: ({ result: [tree] }) => tree,
|
|
50
47
|
target: this.recommendations.initRecommendationsFx,
|
|
51
48
|
})
|
|
52
49
|
}
|
|
@@ -2,12 +2,6 @@ import { PmProgressApi } from './PmProgressApi'
|
|
|
2
2
|
import { createEffect, createEvent, createStore, sample } from 'effector'
|
|
3
3
|
import { Recommendations, RecsResponse, TreeMappingResponse } from '../shared/pmProgress.types'
|
|
4
4
|
import { RECOMMENDATIONS_LIMIT_PARAM, SolvingFlow } from '../shared/pmProgress.constants'
|
|
5
|
-
import { filterLockedGradeRecs } from '../shared/pmProgress.helpers'
|
|
6
|
-
|
|
7
|
-
type FetchMagmaRecsParams = {
|
|
8
|
-
tree: TreeMappingResponse
|
|
9
|
-
lockedGrades: number[]
|
|
10
|
-
}
|
|
11
5
|
|
|
12
6
|
const EMPTY_RECS: Recommendations = { items: [], offset: 0, limit: 0, total: 0 }
|
|
13
7
|
|
|
@@ -28,24 +22,14 @@ export class PmRecommendationsModel {
|
|
|
28
22
|
),
|
|
29
23
|
)
|
|
30
24
|
|
|
31
|
-
public readonly fetchMagmaRecsFx = createEffect(
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
)
|
|
36
|
-
return {
|
|
37
|
-
...recs,
|
|
38
|
-
items: filterLockedGradeRecs(recs.items, tree.treeMapping, lockedGrades),
|
|
39
|
-
}
|
|
40
|
-
},
|
|
25
|
+
public readonly fetchMagmaRecsFx = createEffect((tree: TreeMappingResponse) =>
|
|
26
|
+
this.fetchRecs(tree, SolvingFlow.MAGMA, () =>
|
|
27
|
+
this.api.getMagmaRecsFx({ limit: RECOMMENDATIONS_LIMIT_PARAM }),
|
|
28
|
+
),
|
|
41
29
|
)
|
|
42
30
|
|
|
43
|
-
public readonly initRecommendationsFx = createEffect(
|
|
44
|
-
(
|
|
45
|
-
Promise.all([
|
|
46
|
-
this.fetchTeacherRecsFx(tree),
|
|
47
|
-
this.fetchMagmaRecsFx({ tree, lockedGrades }),
|
|
48
|
-
]),
|
|
31
|
+
public readonly initRecommendationsFx = createEffect((tree: TreeMappingResponse) =>
|
|
32
|
+
Promise.all([this.fetchTeacherRecsFx(tree), this.fetchMagmaRecsFx(tree)]),
|
|
49
33
|
)
|
|
50
34
|
|
|
51
35
|
private fetchRecs = async (
|
|
@@ -298,39 +298,6 @@ export const formatGradeLabel = (grade: number, customLabelsMap?: GradeLabelsMap
|
|
|
298
298
|
return `${getText('pmProgress.grade')} ${label.name}`
|
|
299
299
|
}
|
|
300
300
|
|
|
301
|
-
const buildSkillGradeMap = (
|
|
302
|
-
treeMapping: TreeMappingResponse['treeMapping'],
|
|
303
|
-
): Map<string, number> => {
|
|
304
|
-
const map = new Map<string, number>()
|
|
305
|
-
|
|
306
|
-
const collectSkills = (nodeId: string, gradeValue: number) => {
|
|
307
|
-
const node = treeMapping[nodeId]
|
|
308
|
-
if (!node) return
|
|
309
|
-
node.skills.forEach((skillId) => map.set(skillId, gradeValue))
|
|
310
|
-
node.children.forEach((childId) => collectSkills(childId, gradeValue))
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
Object.values(treeMapping)
|
|
314
|
-
.filter((node) => node.type === 'grade')
|
|
315
|
-
.forEach((gradeNode) => collectSkills(gradeNode._id, gradeNode.attributes.grade))
|
|
316
|
-
|
|
317
|
-
return map
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
export const filterLockedGradeRecs = (
|
|
321
|
-
skills: Skill[],
|
|
322
|
-
treeMapping: TreeMappingResponse['treeMapping'],
|
|
323
|
-
lockedGrades: number[],
|
|
324
|
-
): Skill[] => {
|
|
325
|
-
if (lockedGrades.length === 0) return skills
|
|
326
|
-
const locked = new Set(lockedGrades)
|
|
327
|
-
const skillGradeMap = buildSkillGradeMap(treeMapping)
|
|
328
|
-
return skills.filter((skill) => {
|
|
329
|
-
const grade = skillGradeMap.get(skill._id)
|
|
330
|
-
return grade === undefined || !locked.has(grade)
|
|
331
|
-
})
|
|
332
|
-
}
|
|
333
|
-
|
|
334
301
|
export const getTreeGrades = (tree: TreeMappingResponse, user: User): Grade[] => {
|
|
335
302
|
const lockedGrades = new Set(user.setting.practiceModeLockedGrades)
|
|
336
303
|
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { MaskSegmentParams } from './types'
|
|
2
|
+
|
|
3
|
+
export function replaceMappedTokens(input: string, map: Record<string, string>): string {
|
|
4
|
+
let result = input
|
|
5
|
+
|
|
6
|
+
for (const [original, override] of Object.entries(map)) {
|
|
7
|
+
const escaped = original.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
|
|
8
|
+
const regex = new RegExp(`\\b${escaped}\\b`, 'gi')
|
|
9
|
+
|
|
10
|
+
result = result.replace(regex, override)
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
return result
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Masks text segments matched by `regex` with a placeholder,
|
|
18
|
+
* while preserving spaces around the original match.
|
|
19
|
+
*/
|
|
20
|
+
export const maskSegment = ({
|
|
21
|
+
text,
|
|
22
|
+
regex,
|
|
23
|
+
placeholder,
|
|
24
|
+
replacements,
|
|
25
|
+
shouldSkip,
|
|
26
|
+
}: MaskSegmentParams): string => {
|
|
27
|
+
return text.replace(regex, (match, ...args) => {
|
|
28
|
+
if (shouldSkip?.(match)) return match
|
|
29
|
+
|
|
30
|
+
const offset = args[args.length - 2] as number
|
|
31
|
+
const input = args[args.length - 1] as string
|
|
32
|
+
|
|
33
|
+
const before = offset > 0 ? input[offset - 1] : ''
|
|
34
|
+
const afterIdx = offset + match.length
|
|
35
|
+
const after = afterIdx < input.length ? input[afterIdx] : ''
|
|
36
|
+
|
|
37
|
+
const leftPad = /\s/.test(before)
|
|
38
|
+
const rightPad = /\s/.test(after)
|
|
39
|
+
|
|
40
|
+
replacements.push({ placeholder, original: match, leftPad, rightPad })
|
|
41
|
+
|
|
42
|
+
return placeholder
|
|
43
|
+
})
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const HTML_NAMED_ENTITIES: Record<string, string> = {
|
|
47
|
+
'&': '&',
|
|
48
|
+
'<': '<',
|
|
49
|
+
'>': '>',
|
|
50
|
+
'"': '"',
|
|
51
|
+
''': "'",
|
|
52
|
+
' ': ' ',
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export const decodeHtmlEntities = (text: string): string => {
|
|
56
|
+
return text
|
|
57
|
+
.replace(/&#(\d+);/g, (_, code: string) => String.fromCharCode(parseInt(code, 10)))
|
|
58
|
+
.replace(/&#x([0-9a-f]+);/gi, (_, code: string) => String.fromCharCode(parseInt(code, 16)))
|
|
59
|
+
.replace(
|
|
60
|
+
/&(amp|lt|gt|quot|apos|nbsp);/g,
|
|
61
|
+
(match) => HTML_NAMED_ENTITIES[match] ?? match,
|
|
62
|
+
)
|
|
63
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export { TranslationModel } from './model/TranslationModel'
|
|
2
|
+
export { TranslationService, type TranslateConfigProps } from './model/TranslationService'
|
|
3
|
+
export { TranslationKatexPreprocessor } from './model/TranslationPreprocessor'
|
|
4
|
+
export { TranslationProvider, type LanguageGlossary } from './providers/translation.interface'
|
|
5
|
+
export { GoogleTranslationProvider } from './providers/google/GoogleTranslationProvider'
|
|
6
|
+
export { GoogleTranslateLanguage } from './providers/google/supportedLanguages'
|
|
7
|
+
export type {
|
|
8
|
+
GoogleTranslateProps,
|
|
9
|
+
GoogleTranslateResponse,
|
|
10
|
+
GoogleTranslation,
|
|
11
|
+
} from './providers/google.types'
|
|
12
|
+
export { wordsToPreserve, preservedWordsReplacers } from './preserve/wordsToPreserve'
|
|
13
|
+
export {
|
|
14
|
+
GBD_TEXT_CACHE_SUFFIX,
|
|
15
|
+
DESCRIPTION_CACHE_KEY_SUFFIX,
|
|
16
|
+
CHOICES_CACHE_KEY_SUFFIX,
|
|
17
|
+
PRACTICE_THEORY_CACHE_KEY_SUFFIX,
|
|
18
|
+
} from './constants'
|
|
19
|
+
export {
|
|
20
|
+
replaceMappedTokens,
|
|
21
|
+
maskSegment,
|
|
22
|
+
decodeHtmlEntities,
|
|
23
|
+
} from './helpers'
|
|
24
|
+
export type {
|
|
25
|
+
TranslatableProblem,
|
|
26
|
+
TranslateAllFxParams,
|
|
27
|
+
TranslateFxParams,
|
|
28
|
+
Replacement,
|
|
29
|
+
MaskSegmentParams,
|
|
30
|
+
} from './types'
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import {
|
|
2
|
+
attach,
|
|
3
|
+
combine,
|
|
4
|
+
createEffect,
|
|
5
|
+
createEvent,
|
|
6
|
+
restore,
|
|
7
|
+
sample,
|
|
8
|
+
split,
|
|
9
|
+
Store,
|
|
10
|
+
Unit,
|
|
11
|
+
} from 'effector'
|
|
12
|
+
import { GoogleTranslationProvider } from '../providers/google/GoogleTranslationProvider'
|
|
13
|
+
import {
|
|
14
|
+
GoogleTranslateProps,
|
|
15
|
+
GoogleTranslateResponse,
|
|
16
|
+
} from '../providers/google.types'
|
|
17
|
+
import { TranslationService } from './TranslationService'
|
|
18
|
+
import {
|
|
19
|
+
preservedWordsReplacers,
|
|
20
|
+
wordsToPreserve,
|
|
21
|
+
} from '../preserve/wordsToPreserve'
|
|
22
|
+
import {
|
|
23
|
+
CHOICES_CACHE_KEY_SUFFIX,
|
|
24
|
+
DESCRIPTION_CACHE_KEY_SUFFIX,
|
|
25
|
+
GBD_TEXT_CACHE_SUFFIX,
|
|
26
|
+
} from '../constants'
|
|
27
|
+
import {
|
|
28
|
+
TranslatableProblem,
|
|
29
|
+
TranslateAllFxParams,
|
|
30
|
+
TranslateFxParams,
|
|
31
|
+
} from '../types'
|
|
32
|
+
|
|
33
|
+
type TranslationModelProps<TProblem extends TranslatableProblem> = {
|
|
34
|
+
$problem: Store<TProblem | null>
|
|
35
|
+
$problemId: Store<string>
|
|
36
|
+
$assignmentId: Store<string>
|
|
37
|
+
$currentProblemIndex: Store<number>
|
|
38
|
+
$translationLanguageCode: Store<string>
|
|
39
|
+
$contentLanguageCode?: Store<string>
|
|
40
|
+
$isTranslationLocked: Store<boolean>
|
|
41
|
+
languageChanged: Unit<unknown>
|
|
42
|
+
api: {
|
|
43
|
+
translateRequest: (payload: GoogleTranslateProps) => Promise<GoogleTranslateResponse>
|
|
44
|
+
}
|
|
45
|
+
getGreatWorkFeedbackText?: () => string
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export class TranslationModel<TProblem extends TranslatableProblem = TranslatableProblem> {
|
|
49
|
+
private readonly service: TranslationService
|
|
50
|
+
|
|
51
|
+
public readonly toggle = createEvent()
|
|
52
|
+
public readonly setTranslated = createEvent<boolean>()
|
|
53
|
+
public readonly reset = createEvent()
|
|
54
|
+
|
|
55
|
+
public readonly $isTranslationActive = restore(this.setTranslated, false).reset(this.reset)
|
|
56
|
+
public readonly $isTranslated = this.$isTranslationActive
|
|
57
|
+
public readonly $isTranslationPending
|
|
58
|
+
|
|
59
|
+
public readonly translateFx
|
|
60
|
+
public readonly translateAllFx
|
|
61
|
+
|
|
62
|
+
constructor({
|
|
63
|
+
$problem,
|
|
64
|
+
$problemId,
|
|
65
|
+
$assignmentId,
|
|
66
|
+
$currentProblemIndex,
|
|
67
|
+
$translationLanguageCode,
|
|
68
|
+
$contentLanguageCode,
|
|
69
|
+
$isTranslationLocked,
|
|
70
|
+
languageChanged,
|
|
71
|
+
api,
|
|
72
|
+
getGreatWorkFeedbackText,
|
|
73
|
+
}: TranslationModelProps<TProblem>) {
|
|
74
|
+
this.service = new TranslationService({
|
|
75
|
+
preserve: {
|
|
76
|
+
map: wordsToPreserve,
|
|
77
|
+
replacers: preservedWordsReplacers,
|
|
78
|
+
},
|
|
79
|
+
providers: [new GoogleTranslationProvider({ api })],
|
|
80
|
+
onError: () => this.reset(),
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
this.service.bindCustomCacheKey(
|
|
84
|
+
$problemId,
|
|
85
|
+
(problemId, { target }) => `${problemId}::${target}`,
|
|
86
|
+
)
|
|
87
|
+
this.service.bindTargetLanguage($translationLanguageCode)
|
|
88
|
+
if ($contentLanguageCode) {
|
|
89
|
+
this.service.bindSourceLanguage($contentLanguageCode)
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
this.translateAllFx = attach({
|
|
93
|
+
source: {
|
|
94
|
+
problem: $problem,
|
|
95
|
+
translationLanguageCode: $translationLanguageCode,
|
|
96
|
+
},
|
|
97
|
+
mapParams: (_: void, source) => source,
|
|
98
|
+
effect: createEffect(({ problem, translationLanguageCode }: TranslateAllFxParams<TProblem>) => {
|
|
99
|
+
if (!problem) return
|
|
100
|
+
|
|
101
|
+
const promises: Promise<unknown>[] = [
|
|
102
|
+
this.service.translate(problem.richDescription || problem.description, {
|
|
103
|
+
cacheKeySuffix: DESCRIPTION_CACHE_KEY_SUFFIX,
|
|
104
|
+
}),
|
|
105
|
+
this.service.translate(problem.answerVariants, {
|
|
106
|
+
cacheKeySuffix: CHOICES_CACHE_KEY_SUFFIX,
|
|
107
|
+
}),
|
|
108
|
+
]
|
|
109
|
+
|
|
110
|
+
if (getGreatWorkFeedbackText) {
|
|
111
|
+
promises.push(
|
|
112
|
+
this.service.translate(getGreatWorkFeedbackText(), {
|
|
113
|
+
cacheKey: `${translationLanguageCode}${GBD_TEXT_CACHE_SUFFIX}`,
|
|
114
|
+
}),
|
|
115
|
+
)
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
return Promise.all(promises)
|
|
119
|
+
}),
|
|
120
|
+
})
|
|
121
|
+
|
|
122
|
+
this.translateFx = createEffect(({ cacheKey, text }: TranslateFxParams) => {
|
|
123
|
+
return this.service.translate(text, { cacheKey })
|
|
124
|
+
})
|
|
125
|
+
|
|
126
|
+
this.$isTranslationActive.on(this.translateAllFx.doneData, () => true)
|
|
127
|
+
this.$isTranslationActive.on(this.translateAllFx.fail, () => false)
|
|
128
|
+
|
|
129
|
+
split({
|
|
130
|
+
source: sample({
|
|
131
|
+
clock: this.toggle,
|
|
132
|
+
source: this.$isTranslationActive,
|
|
133
|
+
}),
|
|
134
|
+
match: {
|
|
135
|
+
on: (isTranslated) => !isTranslated,
|
|
136
|
+
off: (isTranslated) => isTranslated,
|
|
137
|
+
},
|
|
138
|
+
cases: {
|
|
139
|
+
on: this.translateAllFx,
|
|
140
|
+
off: this.reset,
|
|
141
|
+
},
|
|
142
|
+
})
|
|
143
|
+
|
|
144
|
+
sample({
|
|
145
|
+
clock: languageChanged,
|
|
146
|
+
fn: () => false,
|
|
147
|
+
target: this.setTranslated,
|
|
148
|
+
})
|
|
149
|
+
|
|
150
|
+
sample({
|
|
151
|
+
clock: [$currentProblemIndex, $assignmentId, this.$isTranslationActive],
|
|
152
|
+
source: {
|
|
153
|
+
isTranslated: this.$isTranslationActive,
|
|
154
|
+
isLocked: $isTranslationLocked,
|
|
155
|
+
},
|
|
156
|
+
filter: ({ isTranslated, isLocked }) => isLocked || isTranslated,
|
|
157
|
+
target: this.translateAllFx,
|
|
158
|
+
})
|
|
159
|
+
|
|
160
|
+
this.$isTranslationPending = combine(
|
|
161
|
+
this.translateAllFx.pending,
|
|
162
|
+
this.translateFx.pending,
|
|
163
|
+
(isAllPending, isOnePending) => isAllPending || isOnePending,
|
|
164
|
+
)
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
public getTranslated<T extends string | string[]>(key: string): T | undefined {
|
|
168
|
+
return this.service.getCached<T>(key)
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
public clearCache() {
|
|
172
|
+
this.service.reset()
|
|
173
|
+
}
|
|
174
|
+
}
|