@tinyweb_dev/oe-exam-sdk 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (485) hide show
  1. package/dist/api/exam-create.js +1 -179
  2. package/dist/api/exam-create.types.js +1 -1
  3. package/dist/api/exam-questions.js +1 -98
  4. package/dist/api/exam-questions.types.js +1 -1
  5. package/dist/api/exam-taking.js +1 -73
  6. package/dist/api/exam-taking.types.js +1 -1
  7. package/dist/api/index.js +1 -6
  8. package/dist/api/result-review.js +1 -50
  9. package/dist/api/result-review.types.js +1 -1
  10. package/dist/components/CueCardEditor.js +1 -58
  11. package/dist/components/common/ResolvedImage.js +1 -15
  12. package/dist/components/exams/CreateExamInfoForm.js +1 -35
  13. package/dist/components/exams/CreateExamPageContainer.js +1 -103
  14. package/dist/components/exams/ExamCreator.js +1 -89
  15. package/dist/components/exams/ExamPartTabs.js +1 -40
  16. package/dist/components/exams/ExamQuestionGrid.js +1 -18
  17. package/dist/components/exams/ExamQuestionsPageContainer.js +1 -90
  18. package/dist/components/exams/PartAudioUploader.js +1 -9
  19. package/dist/components/exams/TemplateSelector.js +1 -66
  20. package/dist/components/exams/api.js +1 -3
  21. package/dist/components/exams/create-exam.validation.js +1 -18
  22. package/dist/components/exams/exam-template.utils.js +1 -18
  23. package/dist/components/exams/index.js +1 -10
  24. package/dist/components/exams/take/ExamTakingPageContainer.js +1 -153
  25. package/dist/components/exams/take/GenericQuestionRenderer.js +1 -14
  26. package/dist/components/exams/take/exam-taking.utils.js +1 -88
  27. package/dist/components/exams/take/hooks/useSpeakingRecorder.js +1 -24
  28. package/dist/components/exams/take/index.js +1 -2
  29. package/dist/components/exams/take/types.js +1 -1
  30. package/dist/components/index.js +1 -42
  31. package/dist/components/questions/_shared/config/question-types.config.js +1 -333
  32. package/dist/components/questions/_shared/constants/color-palette.js +1 -21
  33. package/dist/components/questions/_shared/hooks/useAnswerGroupQuestionGroup.js +1 -105
  34. package/dist/components/questions/_shared/hooks/useBasicQuestionGroup.js +1 -222
  35. package/dist/components/questions/_shared/hooks/useCompareImagesGroup.js +1 -140
  36. package/dist/components/questions/_shared/hooks/useImageQuestionGroup.js +1 -123
  37. package/dist/components/questions/_shared/hooks/useInfoExchangeGroup.js +1 -50
  38. package/dist/components/questions/_shared/hooks/useQuestionFormState.js +1 -54
  39. package/dist/components/questions/_shared/hooks/useQuestionInitialization.js +1 -123
  40. package/dist/components/questions/_shared/hooks/useQuestionListGroup.js +1 -121
  41. package/dist/components/questions/_shared/hooks/useQuestionOnChange.js +1 -70
  42. package/dist/components/questions/_shared/hooks/useSceneQuestionGroup.js +1 -194
  43. package/dist/components/questions/_shared/index.js +1 -7
  44. package/dist/components/questions/_shared/types/answer-the-question.type.js +1 -1
  45. package/dist/components/questions/_shared/types/arrange-letters-into-words.type.js +1 -1
  46. package/dist/components/questions/_shared/types/choose-correct-adjective.type.js +1 -3
  47. package/dist/components/questions/_shared/types/color-region.config.js +1 -1
  48. package/dist/components/questions/_shared/types/fill-in-blank.type.js +1 -1
  49. package/dist/components/questions/_shared/types/fill-missing-words-in-grid.type.js +1 -1
  50. package/dist/components/questions/_shared/types/gn-speaking-interview.type.js +1 -1
  51. package/dist/components/questions/_shared/types/index.js +1 -12
  52. package/dist/components/questions/_shared/types/label-the-picture.type.js +1 -1
  53. package/dist/components/questions/_shared/types/listen-and-choose-from-answer-group.type.js +1 -1
  54. package/dist/components/questions/_shared/types/listen-and-choose-objects-in-scene.type.js +1 -1
  55. package/dist/components/questions/_shared/types/listen-and-drag-objects-into-scene.type.js +1 -1
  56. package/dist/components/questions/_shared/types/listen-and-speak-answer.type.js +1 -1
  57. package/dist/components/questions/_shared/types/listen-and-speak-compare-images.type.js +1 -1
  58. package/dist/components/questions/_shared/types/listen-and-speak-image-group.type.js +1 -1
  59. package/dist/components/questions/_shared/types/listen-and-speak-info-exchange.type.js +1 -1
  60. package/dist/components/questions/_shared/types/listen-and-speak-odd-one-out.type.js +1 -3
  61. package/dist/components/questions/_shared/types/listen-and-speak-question-list.type.js +1 -1
  62. package/dist/components/questions/_shared/types/listen-and-speak-with-story-images.type.js +1 -3
  63. package/dist/components/questions/_shared/types/listen-and-tick-answer.type.js +1 -1
  64. package/dist/components/questions/_shared/types/listening-drawline.type.js +1 -1
  65. package/dist/components/questions/_shared/types/look-and-choose-answer.type.js +1 -1
  66. package/dist/components/questions/_shared/types/look-picture-fill-word-hint.type.js +1 -1
  67. package/dist/components/questions/_shared/types/match-by-writing-answer.type.js +1 -1
  68. package/dist/components/questions/_shared/types/multiple-choice.type.js +1 -1
  69. package/dist/components/questions/_shared/types/question-group.type.js +1 -11
  70. package/dist/components/questions/_shared/types/read-and-color-objects.type.js +1 -1
  71. package/dist/components/questions/_shared/types/read-displayed-content.type.js +1 -1
  72. package/dist/components/questions/_shared/types/read-passage-and-answer-questions.type.js +1 -1
  73. package/dist/components/questions/_shared/types/speaking-describe-image.type.js +1 -1
  74. package/dist/components/questions/_shared/types/spontaneous-qa.type.js +1 -1
  75. package/dist/components/questions/_shared/types/word-fill-paragraph-with-options.type.js +1 -1
  76. package/dist/components/questions/_shared/types/word-fill-paragraph.type.js +1 -1
  77. package/dist/components/questions/_shared/types/word-fill-structured-form.type.js +1 -1
  78. package/dist/components/questions/_shared/types/word-ordering.type.js +1 -1
  79. package/dist/components/questions/_shared/types/write-a-short-letter.type.js +1 -1
  80. package/dist/components/questions/_shared/types/write-correct-verb-form.type.js +1 -3
  81. package/dist/components/questions/_shared/types/write-sentences.type.js +1 -1
  82. package/dist/components/questions/_shared/types/write-short-paragraph.type.js +1 -1
  83. package/dist/components/questions/_shared/utils/answer-builder.js +1 -79
  84. package/dist/components/questions/_shared/utils/createColorRegionRegistration.js +1 -39
  85. package/dist/components/questions/_shared/utils/id-generator.js +1 -3
  86. package/dist/components/questions/_shared/utils/question-validation.js +1 -21
  87. package/dist/components/questions/components/ColorNode.js +1 -85
  88. package/dist/components/questions/components/ColorRegionClient.js +1 -545
  89. package/dist/components/questions/components/ColorRegionCreator.js +1 -420
  90. package/dist/components/questions/components/ColorRegionNode.js +1 -59
  91. package/dist/components/questions/components/CreatorGuide.js +1 -103
  92. package/dist/components/questions/components/NameNode.js +1 -26
  93. package/dist/components/questions/components/QuestionBankOption.js +1 -46
  94. package/dist/components/questions/components/QuestionBasicInfoForm.js +1 -9
  95. package/dist/components/questions/components/QuestionCommonFields.js +1 -33
  96. package/dist/components/questions/components/QuestionSearchDropdown.js +1 -258
  97. package/dist/components/questions/components/QuestionTypeSelector.js +1 -32
  98. package/dist/components/questions/components/QuestionTypeSpecificForms.js +1 -6
  99. package/dist/components/questions/components/RegionNode.js +1 -94
  100. package/dist/components/questions/components/index.js +1 -14
  101. package/dist/components/questions/creator/QuestionCreator.js +1 -90
  102. package/dist/components/questions/creator/QuestionGroupCreator.js +1 -119
  103. package/dist/components/questions/creator/dedicated-component-router.js +1 -79
  104. package/dist/components/questions/creator/index.js +1 -3
  105. package/dist/components/questions/creator/question-type-registry.js +1 -80
  106. package/dist/components/questions/groups/ArticlesGroupCard.js +1 -121
  107. package/dist/components/questions/groups/BasicQuestionGroupCard.js +1 -50
  108. package/dist/components/questions/groups/DocumentGroupCard.js +1 -114
  109. package/dist/components/questions/groups/MatchAnswerGroupCard.js +1 -25
  110. package/dist/components/questions/index.js +1 -10
  111. package/dist/components/questions/types/answer-the-question/AnswerTheQuestionClient.js +1 -37
  112. package/dist/components/questions/types/answer-the-question/AnswerTheQuestionCreator.js +1 -351
  113. package/dist/components/questions/types/answer-the-question/register.js +1 -67
  114. package/dist/components/questions/types/answer-the-question/transform.js +1 -36
  115. package/dist/components/questions/types/arrange-letters-into-words/ArrangeLettersIntoWordsClient.js +1 -141
  116. package/dist/components/questions/types/arrange-letters-into-words/ArrangeLettersIntoWordsCreator.js +1 -118
  117. package/dist/components/questions/types/arrange-letters-into-words/index.js +1 -2
  118. package/dist/components/questions/types/arrange-letters-into-words/register.js +1 -4
  119. package/dist/components/questions/types/arrange-letters-into-words/transform.js +1 -24
  120. package/dist/components/questions/types/choose-correct-adjective/ChooseCorrectAdjectiveClient.js +1 -64
  121. package/dist/components/questions/types/choose-correct-adjective/ChooseCorrectAdjectiveCreator.js +1 -169
  122. package/dist/components/questions/types/choose-correct-adjective/index.js +1 -2
  123. package/dist/components/questions/types/choose-correct-adjective/register.js +1 -55
  124. package/dist/components/questions/types/choose-correct-adjective/transform.js +1 -16
  125. package/dist/components/questions/types/choose-the-correct-answer/ChooseTheCorrectAnswerClient.js +1 -131
  126. package/dist/components/questions/types/choose-the-correct-answer/ChooseTheCorrectAnswerCreator.js +1 -581
  127. package/dist/components/questions/types/choose-the-correct-answer/index.js +1 -2
  128. package/dist/components/questions/types/choose-the-correct-answer/register.js +1 -101
  129. package/dist/components/questions/types/choose-the-correct-answer/transform.js +1 -43
  130. package/dist/components/questions/types/fill-in-blank/FillInBlankClient.js +1 -275
  131. package/dist/components/questions/types/fill-in-blank/FillInBlankCreator.js +1 -448
  132. package/dist/components/questions/types/fill-in-blank/index.js +1 -2
  133. package/dist/components/questions/types/fill-in-blank/register.js +1 -138
  134. package/dist/components/questions/types/fill-in-blank/transform.js +1 -59
  135. package/dist/components/questions/types/fill-missing-words-in-grid/FillMissingWordsInGridClient.js +1 -117
  136. package/dist/components/questions/types/fill-missing-words-in-grid/FillMissingWordsInGridCreator.js +1 -671
  137. package/dist/components/questions/types/fill-missing-words-in-grid/index.js +1 -2
  138. package/dist/components/questions/types/fill-missing-words-in-grid/register.js +1 -37
  139. package/dist/components/questions/types/fill-missing-words-in-grid/transform.js +1 -15
  140. package/dist/components/questions/types/gn-speaking-interview/GNSpeakingInterviewCreator.js +1 -262
  141. package/dist/components/questions/types/gn-speaking-interview/register.js +1 -121
  142. package/dist/components/questions/types/gn-speaking-interview/transform.js +1 -48
  143. package/dist/components/questions/types/image-object-matching/ImageObjectMatchingClient.js +1 -16
  144. package/dist/components/questions/types/image-object-matching/ImageObjectMatchingCreator.js +1 -27
  145. package/dist/components/questions/types/image-object-matching/index.js +1 -2
  146. package/dist/components/questions/types/image-object-matching/register.js +1 -3
  147. package/dist/components/questions/types/image-object-matching/transform.js +1 -2
  148. package/dist/components/questions/types/label-the-picture/LabelThePictureClient.js +1 -102
  149. package/dist/components/questions/types/label-the-picture/LabelThePictureCreator.js +1 -344
  150. package/dist/components/questions/types/label-the-picture/index.js +1 -2
  151. package/dist/components/questions/types/label-the-picture/register.js +1 -54
  152. package/dist/components/questions/types/label-the-picture/transform.js +1 -28
  153. package/dist/components/questions/types/listen-and-choose-from-answer-group/ListenAndChooseFromAnswerGroupClient.js +1 -78
  154. package/dist/components/questions/types/listen-and-choose-from-answer-group/ListenAndChooseFromAnswerGroupCreator.js +1 -232
  155. package/dist/components/questions/types/listen-and-choose-from-answer-group/index.js +1 -2
  156. package/dist/components/questions/types/listen-and-choose-from-answer-group/register.js +1 -82
  157. package/dist/components/questions/types/listen-and-choose-from-answer-group/transform.js +1 -27
  158. package/dist/components/questions/types/listen-and-choose-objects-in-scene/ListenAndChooseObjectsInSceneClient.js +1 -70
  159. package/dist/components/questions/types/listen-and-choose-objects-in-scene/ListenAndChooseObjectsInSceneCreator.js +1 -386
  160. package/dist/components/questions/types/listen-and-choose-objects-in-scene/index.js +1 -2
  161. package/dist/components/questions/types/listen-and-choose-objects-in-scene/register.js +1 -100
  162. package/dist/components/questions/types/listen-and-choose-objects-in-scene/transform.js +1 -33
  163. package/dist/components/questions/types/listen-and-drag-objects-into-scene/ListenAndDragObjectsIntoSceneClient.js +1 -106
  164. package/dist/components/questions/types/listen-and-drag-objects-into-scene/ListenAndDragObjectsIntoSceneCreator.js +1 -457
  165. package/dist/components/questions/types/listen-and-drag-objects-into-scene/index.js +1 -2
  166. package/dist/components/questions/types/listen-and-drag-objects-into-scene/register.js +1 -110
  167. package/dist/components/questions/types/listen-and-drag-objects-into-scene/transform.js +1 -35
  168. package/dist/components/questions/types/listen-and-speak-answer/ArrowIndicator.js +1 -8
  169. package/dist/components/questions/types/listen-and-speak-answer/ListenAndSpeakAnswerClient.js +1 -22
  170. package/dist/components/questions/types/listen-and-speak-answer/ListenAndSpeakAnswerCreator.js +1 -291
  171. package/dist/components/questions/types/listen-and-speak-answer/index.js +1 -2
  172. package/dist/components/questions/types/listen-and-speak-answer/register.js +1 -84
  173. package/dist/components/questions/types/listen-and-speak-answer/transform.js +1 -27
  174. package/dist/components/questions/types/listen-and-speak-compare-images/ListenAndSpeakCompareImagesClient.js +1 -32
  175. package/dist/components/questions/types/listen-and-speak-compare-images/ListenAndSpeakCompareImagesCreator.js +1 -295
  176. package/dist/components/questions/types/listen-and-speak-compare-images/register.js +1 -79
  177. package/dist/components/questions/types/listen-and-speak-compare-images/transform.js +1 -27
  178. package/dist/components/questions/types/listen-and-speak-image-group/ListenAndSpeakImageGroupClient.js +1 -34
  179. package/dist/components/questions/types/listen-and-speak-image-group/ListenAndSpeakImageGroupCreator.js +1 -285
  180. package/dist/components/questions/types/listen-and-speak-image-group/register.js +1 -81
  181. package/dist/components/questions/types/listen-and-speak-image-group/transform.js +1 -26
  182. package/dist/components/questions/types/listen-and-speak-info-exchange/ListenAndSpeakInfoExchangeClient.js +1 -38
  183. package/dist/components/questions/types/listen-and-speak-info-exchange/ListenAndSpeakInfoExchangeCreator.js +1 -385
  184. package/dist/components/questions/types/listen-and-speak-info-exchange/register.js +1 -87
  185. package/dist/components/questions/types/listen-and-speak-info-exchange/transform.js +1 -32
  186. package/dist/components/questions/types/listen-and-speak-odd-one-out/ListenAndSpeakOddOneOutClient.js +1 -26
  187. package/dist/components/questions/types/listen-and-speak-odd-one-out/ListenAndSpeakOddOneOutCreator.js +1 -247
  188. package/dist/components/questions/types/listen-and-speak-odd-one-out/register.js +1 -59
  189. package/dist/components/questions/types/listen-and-speak-odd-one-out/transform.js +1 -18
  190. package/dist/components/questions/types/listen-and-speak-question-list/ListenAndSpeakQuestionListClient.js +1 -26
  191. package/dist/components/questions/types/listen-and-speak-question-list/ListenAndSpeakQuestionListCreator.js +1 -256
  192. package/dist/components/questions/types/listen-and-speak-question-list/register.js +1 -81
  193. package/dist/components/questions/types/listen-and-speak-question-list/transform.js +1 -26
  194. package/dist/components/questions/types/listen-and-speak-with-story-images/ListenAndSpeakWithStoryImagesClient.js +1 -26
  195. package/dist/components/questions/types/listen-and-speak-with-story-images/ListenAndSpeakWithStoryImagesCreator.js +1 -230
  196. package/dist/components/questions/types/listen-and-speak-with-story-images/register.js +1 -56
  197. package/dist/components/questions/types/listen-and-speak-with-story-images/transform.js +1 -16
  198. package/dist/components/questions/types/look-picture-choose-correct-answer/LookPictureChooseCorrectAnswerClient.js +1 -72
  199. package/dist/components/questions/types/look-picture-choose-correct-answer/LookPictureChooseCorrectAnswerCreator.js +1 -230
  200. package/dist/components/questions/types/look-picture-choose-correct-answer/index.js +1 -1
  201. package/dist/components/questions/types/look-picture-choose-correct-answer/register.js +1 -66
  202. package/dist/components/questions/types/look-picture-choose-correct-answer/transform.js +1 -42
  203. package/dist/components/questions/types/look-picture-fill-blank-choose-answer/LookPictureFillBlankChooseAnswerClient.js +1 -96
  204. package/dist/components/questions/types/look-picture-fill-blank-choose-answer/LookPictureFillBlankChooseAnswerCreator.js +1 -238
  205. package/dist/components/questions/types/look-picture-fill-blank-choose-answer/index.js +1 -2
  206. package/dist/components/questions/types/look-picture-fill-blank-choose-answer/register.js +1 -76
  207. package/dist/components/questions/types/look-picture-fill-blank-choose-answer/transform.js +1 -19
  208. package/dist/components/questions/types/look-picture-fill-word-hint/LookPictureFillWordHintClient.js +1 -134
  209. package/dist/components/questions/types/look-picture-fill-word-hint/LookPictureFillWordHintCreator.js +1 -617
  210. package/dist/components/questions/types/look-picture-fill-word-hint/index.js +1 -2
  211. package/dist/components/questions/types/look-picture-fill-word-hint/register.js +1 -82
  212. package/dist/components/questions/types/look-picture-fill-word-hint/transform.js +1 -29
  213. package/dist/components/questions/types/match-by-writing-answer/MatchByWritingAnswerClient.js +1 -38
  214. package/dist/components/questions/types/match-by-writing-answer/MatchByWritingAnswerCreator.js +1 -359
  215. package/dist/components/questions/types/match-by-writing-answer/index.js +1 -3
  216. package/dist/components/questions/types/match-by-writing-answer/register.js +1 -58
  217. package/dist/components/questions/types/match-by-writing-answer/transform.js +1 -61
  218. package/dist/components/questions/types/read-and-color-objects/ReadAndColorObjectsClient.js +1 -16
  219. package/dist/components/questions/types/read-and-color-objects/ReadAndColorObjectsCreator.js +1 -23
  220. package/dist/components/questions/types/read-and-color-objects/index.js +1 -2
  221. package/dist/components/questions/types/read-and-color-objects/register.js +1 -3
  222. package/dist/components/questions/types/read-and-color-objects/transform.js +1 -36
  223. package/dist/components/questions/types/read-displayed-content/ReadDisplayedContentCreator.js +1 -125
  224. package/dist/components/questions/types/read-displayed-content/register.js +1 -64
  225. package/dist/components/questions/types/read-displayed-content/transform.js +1 -12
  226. package/dist/components/questions/types/read-passage-and-answer-questions/ReadPassageAndAnswerQuestionsClient.js +1 -64
  227. package/dist/components/questions/types/read-passage-and-answer-questions/ReadPassageAndAnswerQuestionsCreator.js +1 -511
  228. package/dist/components/questions/types/read-passage-and-answer-questions/index.js +1 -2
  229. package/dist/components/questions/types/read-passage-and-answer-questions/register.js +1 -58
  230. package/dist/components/questions/types/read-passage-and-answer-questions/transform.js +1 -28
  231. package/dist/components/questions/types/speaking-conversation/SpeakingConversationCreator.js +1 -373
  232. package/dist/components/questions/types/speaking-conversation/SpeakingConversationPreviewClient.js +1 -41
  233. package/dist/components/questions/types/speaking-conversation/register.js +1 -110
  234. package/dist/components/questions/types/speaking-conversation/transform.js +1 -34
  235. package/dist/components/questions/types/speaking-cue-card/SpeakingCueCardCreator.js +1 -74
  236. package/dist/components/questions/types/speaking-cue-card/register.js +1 -52
  237. package/dist/components/questions/types/speaking-cue-card/transform.js +1 -12
  238. package/dist/components/questions/types/speaking-describe-image/SpeakingDescribeImageClient.js +1 -10
  239. package/dist/components/questions/types/speaking-describe-image/SpeakingDescribeImageCreator.js +1 -161
  240. package/dist/components/questions/types/speaking-describe-image/index.js +1 -2
  241. package/dist/components/questions/types/speaking-describe-image/register.js +1 -69
  242. package/dist/components/questions/types/speaking-describe-image/transform.js +1 -16
  243. package/dist/components/questions/types/spontaneous-qa/SpontaneousQACreator.js +1 -234
  244. package/dist/components/questions/types/spontaneous-qa/register.js +1 -93
  245. package/dist/components/questions/types/spontaneous-qa/transform.js +1 -34
  246. package/dist/components/questions/types/true-false/TrueFalseClient.js +1 -75
  247. package/dist/components/questions/types/true-false/TrueFalseCreator.js +1 -244
  248. package/dist/components/questions/types/true-false/index.js +1 -2
  249. package/dist/components/questions/types/true-false/register.js +1 -77
  250. package/dist/components/questions/types/true-false/transform.js +1 -32
  251. package/dist/components/questions/types/word-fill-paragraph/WordFillParagraphClient.js +1 -233
  252. package/dist/components/questions/types/word-fill-paragraph/WordFillParagraphCreator.js +1 -631
  253. package/dist/components/questions/types/word-fill-paragraph/WordFillParagraphWrapper.js +1 -28
  254. package/dist/components/questions/types/word-fill-paragraph/index.js +1 -2
  255. package/dist/components/questions/types/word-fill-paragraph/register.js +1 -136
  256. package/dist/components/questions/types/word-fill-paragraph/transform.js +1 -56
  257. package/dist/components/questions/types/word-fill-structured-form/WordFillStructuredFormClient.js +1 -138
  258. package/dist/components/questions/types/word-fill-structured-form/WordFillStructuredFormCreator.js +1 -261
  259. package/dist/components/questions/types/word-fill-structured-form/index.js +1 -2
  260. package/dist/components/questions/types/word-fill-structured-form/register.js +1 -67
  261. package/dist/components/questions/types/word-fill-structured-form/transform.js +1 -40
  262. package/dist/components/questions/types/word-ordering/WordOrderingClient.js +1 -84
  263. package/dist/components/questions/types/word-ordering/WordOrderingCreator.js +1 -192
  264. package/dist/components/questions/types/word-ordering/index.js +1 -2
  265. package/dist/components/questions/types/word-ordering/register.js +1 -46
  266. package/dist/components/questions/types/word-ordering/transform.js +1 -24
  267. package/dist/components/questions/types/write-a-short-letter/WriteAShortLetterClient.js +1 -98
  268. package/dist/components/questions/types/write-a-short-letter/WriteAShortLetterCreator.js +1 -320
  269. package/dist/components/questions/types/write-a-short-letter/index.js +1 -2
  270. package/dist/components/questions/types/write-a-short-letter/register.js +1 -68
  271. package/dist/components/questions/types/write-a-short-letter/transform.js +1 -25
  272. package/dist/components/questions/types/write-correct-verb-form/WriteCorrectVerbFormClient.js +1 -61
  273. package/dist/components/questions/types/write-correct-verb-form/WriteCorrectVerbFormCreator.js +1 -196
  274. package/dist/components/questions/types/write-correct-verb-form/index.js +1 -2
  275. package/dist/components/questions/types/write-correct-verb-form/register.js +1 -62
  276. package/dist/components/questions/types/write-correct-verb-form/transform.js +1 -17
  277. package/dist/components/questions/types/write-sentences/WriteSentencesClient.js +1 -22
  278. package/dist/components/questions/types/write-sentences/WriteSentencesCreator.js +1 -174
  279. package/dist/components/questions/types/write-sentences/index.js +1 -2
  280. package/dist/components/questions/types/write-sentences/register.js +1 -58
  281. package/dist/components/questions/types/write-sentences/transform.js +1 -28
  282. package/dist/components/questions/types/write-short-paragraph/WriteShortParagraphClient.js +1 -96
  283. package/dist/components/questions/types/write-short-paragraph/WriteShortParagraphCreator.js +1 -161
  284. package/dist/components/questions/types/write-short-paragraph/index.js +1 -2
  285. package/dist/components/questions/types/write-short-paragraph/register.js +1 -4
  286. package/dist/components/questions/types/write-short-paragraph/transform.js +1 -21
  287. package/dist/components/questions/viewer/QuestionGroupViewer.js +1 -36
  288. package/dist/components/questions/viewer/QuestionViewer.js +1 -446
  289. package/dist/components/questions/viewer/index.js +1 -2
  290. package/dist/components/results/ResultReviewPageContainer.js +1 -98
  291. package/dist/components/results/ReviewQuestionRenderer.js +1 -72
  292. package/dist/components/results/index.js +1 -2
  293. package/dist/components/results/result-review.utils.js +1 -6
  294. package/dist/components/results/review-data.js +1 -150
  295. package/dist/components/results/review-renderer.utils.js +1 -97
  296. package/dist/components/results/review-types.js +1 -1
  297. package/dist/components/themes/cambridge-yle/CambridgeYleAudioPlayer.js +1 -138
  298. package/dist/components/themes/cambridge-yle/CambridgeYleBottomNav.js +1 -12
  299. package/dist/components/themes/cambridge-yle/CambridgeYleExamLayout.js +1 -18
  300. package/dist/components/themes/cambridge-yle/CambridgeYleExampleText.js +1 -11
  301. package/dist/components/themes/cambridge-yle/CambridgeYleHeader.js +1 -11
  302. package/dist/components/themes/cambridge-yle/CambridgeYleInstructionBanner.js +1 -9
  303. package/dist/components/themes/cambridge-yle/CambridgeYleNavButton.js +1 -13
  304. package/dist/components/themes/cambridge-yle/CambridgeYlePartBanner.js +1 -8
  305. package/dist/components/themes/cambridge-yle/CambridgeYleProgressBar.js +1 -6
  306. package/dist/components/themes/cambridge-yle/CambridgeYleQuestionCard.js +1 -5
  307. package/dist/components/themes/cambridge-yle/CambridgeYleQuestionCardFullWidth.js +1 -9
  308. package/dist/components/themes/cambridge-yle/CambridgeYleSidebar.js +1 -41
  309. package/dist/components/themes/cambridge-yle/CambridgeYleTimer.js +1 -25
  310. package/dist/components/themes/cambridge-yle/index.js +1 -13
  311. package/dist/components/themes/english-certification/EcAnswerTheQuestion.js +1 -24
  312. package/dist/components/themes/english-certification/EcMatchByWritingAnswer.js +1 -88
  313. package/dist/components/themes/english-certification/EcWordFillParagraph.js +1 -55
  314. package/dist/components/themes/english-certification/EcWordFillStructuredForm.js +1 -156
  315. package/dist/components/themes/english-certification/EcWritingTask.js +1 -34
  316. package/dist/components/themes/english-certification/EnglishCertificationAudioPlayer.js +1 -114
  317. package/dist/components/themes/english-certification/EnglishCertificationBrand.js +1 -11
  318. package/dist/components/themes/english-certification/EnglishCertificationExamLayout.js +1 -21
  319. package/dist/components/themes/english-certification/EnglishCertificationFlagButton.js +1 -15
  320. package/dist/components/themes/english-certification/EnglishCertificationFooterBar.js +1 -19
  321. package/dist/components/themes/english-certification/EnglishCertificationGroupedQuestion.js +1 -148
  322. package/dist/components/themes/english-certification/EnglishCertificationHeader.js +1 -31
  323. package/dist/components/themes/english-certification/EnglishCertificationNavigationPanel.js +1 -71
  324. package/dist/components/themes/english-certification/EnglishCertificationOptionSelector.js +1 -33
  325. package/dist/components/themes/english-certification/EnglishCertificationPassagePanel.js +1 -16
  326. package/dist/components/themes/english-certification/EnglishCertificationQuestionCard.js +1 -22
  327. package/dist/components/themes/english-certification/EnglishCertificationQuestionItem.js +1 -37
  328. package/dist/components/themes/english-certification/EnglishCertificationQuestionRenderer.js +1 -72
  329. package/dist/components/themes/english-certification/EnglishCertificationReadingSection.js +1 -90
  330. package/dist/components/themes/english-certification/EnglishCertificationSingleQuestion.js +1 -18
  331. package/dist/components/themes/english-certification/EnglishCertificationSingleQuestionList.js +1 -29
  332. package/dist/components/themes/english-certification/english-certification-theme.js +1 -58
  333. package/dist/components/themes/english-certification/grouped-question-utils.js +1 -218
  334. package/dist/components/themes/english-certification/index.js +1 -21
  335. package/dist/components/themes/index.js +1 -6
  336. package/dist/components/themes/summer-sky/SummerSkyAudioPlayer.js +1 -170
  337. package/dist/components/themes/summer-sky/SummerSkyLayout.js +1 -221
  338. package/dist/components/themes/summer-sky/SummerSkySubmitModal.js +1 -18
  339. package/dist/components/themes/summer-sky/SummerSkyWaitingRoom.js +1 -194
  340. package/dist/components/themes/types.js +1 -1
  341. package/dist/components/ui/alert-dialog.js +1 -26
  342. package/dist/components/ui/alert.js +1 -22
  343. package/dist/components/ui/avatar.js +1 -12
  344. package/dist/components/ui/badge.js +1 -38
  345. package/dist/components/ui/button.js +1 -35
  346. package/dist/components/ui/calendar.js +1 -76
  347. package/dist/components/ui/card.js +1 -16
  348. package/dist/components/ui/carousel.js +1 -91
  349. package/dist/components/ui/checkbox.js +1 -9
  350. package/dist/components/ui/collapsible.js +1 -13
  351. package/dist/components/ui/command.js +1 -34
  352. package/dist/components/ui/confirm-dialog.js +1 -49
  353. package/dist/components/ui/dialog.js +1 -23
  354. package/dist/components/ui/drawer.js +1 -35
  355. package/dist/components/ui/dropdown-menu.js +1 -33
  356. package/dist/components/ui/file-upload.js +1 -155
  357. package/dist/components/ui/form.js +1 -62
  358. package/dist/components/ui/hover-card.js +1 -10
  359. package/dist/components/ui/image-preview.js +1 -29
  360. package/dist/components/ui/input.js +1 -8
  361. package/dist/components/ui/label.js +1 -9
  362. package/dist/components/ui/language-switcher.js +1 -15
  363. package/dist/components/ui/multi-select.js +1 -90
  364. package/dist/components/ui/points-input.js +1 -33
  365. package/dist/components/ui/popover.js +1 -26
  366. package/dist/components/ui/progress.js +1 -16
  367. package/dist/components/ui/radio-group.js +1 -12
  368. package/dist/components/ui/scroll-area.js +1 -11
  369. package/dist/components/ui/select.js +1 -38
  370. package/dist/components/ui/separator.js +1 -8
  371. package/dist/components/ui/sheet.js +1 -40
  372. package/dist/components/ui/single-select.js +1 -76
  373. package/dist/components/ui/skeleton.js +1 -6
  374. package/dist/components/ui/switch.js +1 -8
  375. package/dist/components/ui/table.js +1 -20
  376. package/dist/components/ui/tabs.js +1 -17
  377. package/dist/components/ui/textarea.js +1 -8
  378. package/dist/components/ui/tooltip.js +1 -11
  379. package/dist/index.js +1 -19
  380. package/dist/mcp/config.js +1 -32
  381. package/dist/mcp/http-client.js +1 -48
  382. package/dist/mcp/index.js +1 -29
  383. package/dist/mcp/tools/_helpers.js +1 -25
  384. package/dist/mcp/tools/exams.js +1 -439
  385. package/dist/mcp/tools/index.js +1 -6
  386. package/dist/mcp/tools/results.js +1 -19
  387. package/dist/shared/constants/ApiConstant.js +1 -276
  388. package/dist/shared/constants/QueryKeyConstant.js +1 -112
  389. package/dist/shared/constants/exam-level.enum.js +1 -41
  390. package/dist/shared/constants/landings/placement-test.constants.js +1 -431
  391. package/dist/shared/constants/question-skills.js +1 -267
  392. package/dist/shared/constants/routes.js +1 -81
  393. package/dist/shared/index.js +1 -7
  394. package/dist/shared/lib/hooks/index.js +1 -10
  395. package/dist/shared/lib/hooks/useAlertDialog.js +1 -57
  396. package/dist/shared/lib/hooks/useAudioPlayCounter.js +1 -30
  397. package/dist/shared/lib/hooks/useAudioPreview.js +1 -81
  398. package/dist/shared/lib/hooks/useAudioUpload.js +1 -24
  399. package/dist/shared/lib/hooks/useConfirmDialog.js +1 -89
  400. package/dist/shared/lib/hooks/useDebouncedCallback.js +1 -32
  401. package/dist/shared/lib/hooks/useDelayedAutoPlay.js +1 -12
  402. package/dist/shared/lib/hooks/useFileUpload.js +1 -24
  403. package/dist/shared/lib/hooks/useImageUrl.js +1 -5
  404. package/dist/shared/lib/hooks/usePresignedFileUrl.js +1 -10
  405. package/dist/shared/lib/hooks/useReactHookForm.js +1 -31
  406. package/dist/shared/lib/hooks/useToast.js +1 -62
  407. package/dist/shared/lib/i18n/index.js +1 -54
  408. package/dist/shared/lib/i18n/messages/en/admin.js +1 -2104
  409. package/dist/shared/lib/i18n/messages/en/auth.js +1 -86
  410. package/dist/shared/lib/i18n/messages/en/common.js +1 -140
  411. package/dist/shared/lib/i18n/messages/en/file-upload.js +1 -18
  412. package/dist/shared/lib/i18n/messages/en/student.js +1 -133
  413. package/dist/shared/lib/i18n/messages/en/terms.js +1 -37
  414. package/dist/shared/lib/i18n/messages/en.js +1 -15
  415. package/dist/shared/lib/i18n/messages/vi/admin.js +1 -2104
  416. package/dist/shared/lib/i18n/messages/vi/auth.js +1 -86
  417. package/dist/shared/lib/i18n/messages/vi/common.js +1 -140
  418. package/dist/shared/lib/i18n/messages/vi/file-upload.js +1 -18
  419. package/dist/shared/lib/i18n/messages/vi/student.js +1 -133
  420. package/dist/shared/lib/i18n/messages/vi/terms.js +1 -37
  421. package/dist/shared/lib/i18n/messages/vi.js +1 -15
  422. package/dist/shared/lib/i18n/types.js +1 -1
  423. package/dist/shared/lib/stores/examQuestionStore.js +1 -212
  424. package/dist/shared/lib/stores/localeStore.js +1 -10
  425. package/dist/shared/lib/utils/public-page.js +1 -44
  426. package/dist/shared/lib/utils/question-transform-types.js +1 -1
  427. package/dist/shared/lib/utils/question-transform.js +1 -174
  428. package/dist/shared/lib/utils.js +1 -168
  429. package/dist/shared/lib/validation/choose-correct-answer.validation.js +1 -111
  430. package/dist/shared/lib/validation/label-the-picture.validation.js +1 -19
  431. package/dist/shared/lib/validation/listen-and-choose-from-answer-group.validation.js +1 -46
  432. package/dist/shared/lib/validation/listen-and-choose-objects-in-scene.validation.js +1 -21
  433. package/dist/shared/lib/validation/listen-and-drag-objects-into-scene.validation.js +1 -34
  434. package/dist/shared/lib/validation/listen-and-speak-answer.validation.js +1 -40
  435. package/dist/shared/lib/validation/listen-and-speak-compare-images.validation.js +1 -45
  436. package/dist/shared/lib/validation/listen-and-speak-image-group.validation.js +1 -19
  437. package/dist/shared/lib/validation/listen-and-speak-info-exchange.validation.js +1 -39
  438. package/dist/shared/lib/validation/listen-and-speak-odd-one-out.validation.js +1 -32
  439. package/dist/shared/lib/validation/listen-and-speak-question-list.validation.js +1 -19
  440. package/dist/shared/lib/validation/listen-and-speak-with-story-images.validation.js +1 -28
  441. package/dist/shared/lib/validation/look-picture-choose-correct-answer.validation.js +1 -12
  442. package/dist/shared/lib/validation/look-picture-fill-blank-choose-answer.validation.js +1 -47
  443. package/dist/shared/lib/validation/read-and-color-objects.validation.js +1 -29
  444. package/dist/shared/lib/validation/read-displayed-content.validation.js +1 -28
  445. package/dist/shared/lib/validation/speaking-conversation.validation.js +1 -75
  446. package/dist/shared/lib/validation/speaking-describe-image.validation.js +1 -31
  447. package/dist/shared/lib/validation/spontaneous-qa.validation.js +1 -48
  448. package/dist/shared/lib/validation/word-fill-paragraph-default.validation.js +1 -38
  449. package/dist/shared/lib/validation/word-fill-paragraph-with-options.validation.js +1 -39
  450. package/dist/shared/lib/validation/word-fill-paragraph.validation.js +1 -43
  451. package/dist/shared/lib/validation/word-ordering.validation.js +1 -33
  452. package/dist/shared/types/branch.types.js +1 -6
  453. package/dist/shared/types/common.types.js +1 -50
  454. package/dist/shared/types/entities/exam-schedule.types.js +1 -5
  455. package/dist/shared/types/entities/exam.types.js +1 -1
  456. package/dist/shared/types/entities/question.types.js +1 -4
  457. package/dist/shared/types/entities/result.types.js +1 -4
  458. package/dist/shared/types/entities/user.types.js +1 -4
  459. package/dist/shared/types/exam-taking.types.js +1 -2
  460. package/dist/shared/types/history.types.js +1 -34
  461. package/dist/shared/types/index.js +1 -1
  462. package/dist/shared/types/questions/choose-correct-adjective.js +1 -4
  463. package/dist/shared/types/questions/choose-the-correct-answer.js +1 -9
  464. package/dist/shared/types/questions/fill-missing-words-in-grid.js +1 -11
  465. package/dist/shared/types/questions/index.js +1 -40
  466. package/dist/shared/types/questions/listen-and-speak-answer.js +1 -1
  467. package/dist/shared/types/questions/listen-and-speak-compare-images.js +1 -1
  468. package/dist/shared/types/questions/listen-and-speak-image-group.js +1 -1
  469. package/dist/shared/types/questions/listen-and-speak-info-exchange.js +1 -3
  470. package/dist/shared/types/questions/listen-and-speak-odd-one-out.js +1 -3
  471. package/dist/shared/types/questions/listen-and-speak-question-list.js +1 -1
  472. package/dist/shared/types/questions/listen-and-speak-with-story-images.js +1 -3
  473. package/dist/shared/types/questions/look-picture-choose-correct-answer.js +1 -5
  474. package/dist/shared/types/questions/look-picture-fill-blank-choose-answer.js +1 -9
  475. package/dist/shared/types/questions/look-picture-fill-word-hint.js +1 -7
  476. package/dist/shared/types/questions/read-displayed-content.js +1 -1
  477. package/dist/shared/types/questions/speaking-conversation.js +1 -7
  478. package/dist/shared/types/questions/speaking-describe-image.js +1 -1
  479. package/dist/shared/types/questions/spontaneous-qa.js +1 -1
  480. package/dist/shared/types/questions/write-correct-verb-form.js +1 -12
  481. package/dist/shared/types/role.types.js +1 -1
  482. package/dist/shared/types/structure-management.js +1 -28
  483. package/dist/shared/types/student.types.js +1 -54
  484. package/dist/shared/types/teacher-dashboard-rooms.js +1 -2
  485. package/package.json +4 -2
@@ -1,86 +1 @@
1
- const auth = {
2
- // Register
3
- 'auth.register.success': 'Registration successful! Please log in.',
4
- 'auth.register.loadError': 'Unable to load data. Please try again.',
5
- 'auth.register.title': 'Create Account',
6
- 'auth.register.description': 'Register a student account for Ocean Edu Exam',
7
- 'auth.register.withGoogle': 'Sign up with Google',
8
- 'auth.register.signingUp': 'Signing up...',
9
- 'auth.register.nameLabel': 'Full Name',
10
- 'auth.register.namePlaceholder': 'John Doe',
11
- 'auth.register.branchLabel': 'Branch',
12
- 'auth.register.branchPlaceholder': '-- Select branch --',
13
- 'auth.register.levelLabel': 'Level',
14
- 'auth.register.levelPlaceholder': '-- Select level --',
15
- 'auth.register.phoneLabel': 'Phone Number',
16
- 'auth.register.phonePlaceholder': '0901234567',
17
- 'auth.register.emailLabel': 'Email',
18
- 'auth.register.emailPlaceholder': 'email@example.com',
19
- 'auth.register.identifierLabel': 'Email or Username',
20
- 'auth.register.identifierPlaceholder': 'email@example.com or username',
21
- 'auth.register.usernameLabel': 'Username',
22
- 'auth.register.usernamePlaceholder': 'username',
23
- 'auth.register.passwordLabel': 'Password',
24
- 'auth.register.passwordPlaceholder': '••••••••',
25
- 'auth.register.confirmPasswordLabel': 'Confirm Password',
26
- 'auth.register.confirmPasswordPlaceholder': '••••••••',
27
- 'auth.register.submit': 'Register',
28
- 'auth.register.submitting': 'Registering...',
29
- 'auth.register.failed': 'Registration failed. Please try again.',
30
- 'auth.register.emailExists': 'Email is already in use',
31
- 'auth.register.identifierExists': 'Email or username is already in use',
32
- 'auth.register.phoneExists': 'Phone number is already in use',
33
- 'auth.register.usernameExists': 'Username is already in use',
34
- 'auth.register.loading': 'Loading...',
35
- 'auth.register.hasAccount': 'Already have an account?',
36
- 'auth.register.loginNow': 'Sign in',
37
- // Account upgrade
38
- 'auth.upgrade.success': 'Account updated! Please log in again with your new email and password.',
39
- 'auth.upgrade.clientError': 'An error occurred. Please try again.',
40
- 'auth.upgrade.systemError': 'System error. Please try again later.',
41
- // Landing lead form
42
- 'auth.lead.branchLoadError': 'Unable to load branch list. Please reload the page.',
43
- 'auth.lead.submitSuccess': 'Registration successful! Redirecting...',
44
- // Login dialog
45
- 'auth.login.title': 'Ocean Edu Exam',
46
- 'auth.login.description': 'Sign in to continue using the system',
47
- 'auth.login.withGoogle': 'Sign in with Google',
48
- 'auth.login.loggingIn': 'Signing in...',
49
- 'auth.login.secureNote': 'Secure & Safe',
50
- 'auth.login.termsAgreement': 'By signing in, you agree to our',
51
- 'auth.login.termsOfService': 'Terms of Service',
52
- 'auth.login.emailLabel': 'Email',
53
- 'auth.login.emailPlaceholder': 'your-email@oceanedu.com',
54
- 'auth.login.identifierLabel': 'Email or Username',
55
- 'auth.login.identifierPlaceholder': 'email@oceanedu.com or username',
56
- 'auth.login.passwordLabel': 'Password',
57
- 'auth.login.passwordPlaceholder': '••••••••',
58
- 'auth.login.submit': 'Sign in',
59
- 'auth.login.submitting': 'Signing in...',
60
- 'auth.login.failed': 'Sign in failed',
61
- 'auth.login.or': 'or',
62
- 'auth.login.googleError': 'Google sign in failed. Please try again.',
63
- 'auth.login.noAccount': "Don't have an account?",
64
- 'auth.login.registerNow': 'Register now',
65
- // Complete profile dialog
66
- 'auth.completeProfile.title': 'Complete Your Profile',
67
- 'auth.completeProfile.description': 'Please update your personal information to use the system',
68
- 'auth.completeProfile.nameLabel': 'Full Name',
69
- 'auth.completeProfile.namePlaceholder': 'John Doe',
70
- 'auth.completeProfile.nameRequired': 'Please enter your name',
71
- 'auth.completeProfile.phoneLabel': 'Phone Number',
72
- 'auth.completeProfile.phonePlaceholder': '0901234567',
73
- 'auth.completeProfile.phoneRequired': 'Please enter your phone number',
74
- 'auth.completeProfile.phoneInvalid': 'Invalid phone number (10-11 digits)',
75
- 'auth.completeProfile.levelLabel': 'English Level',
76
- 'auth.completeProfile.levelPlaceholder': '-- Select level --',
77
- 'auth.completeProfile.levelRequired': 'Please select your English level',
78
- 'auth.completeProfile.dateOfBirthLabel': 'Date of Birth',
79
- 'auth.completeProfile.branchLabel': 'Branch',
80
- 'auth.completeProfile.branchPlaceholder': '-- Select branch (optional) --',
81
- 'auth.completeProfile.submit': 'Complete',
82
- 'auth.completeProfile.submitting': 'Updating...',
83
- 'auth.completeProfile.success': 'Profile updated successfully!',
84
- 'auth.completeProfile.failed': 'Update failed. Please try again.',
85
- };
86
- export default auth;
1
+ export default{"auth.register.success":"Registration successful! Please log in.","auth.register.loadError":"Unable to load data. Please try again.","auth.register.title":"Create Account","auth.register.description":"Register a student account for Ocean Edu Exam","auth.register.withGoogle":"Sign up with Google","auth.register.signingUp":"Signing up...","auth.register.nameLabel":"Full Name","auth.register.namePlaceholder":"John Doe","auth.register.branchLabel":"Branch","auth.register.branchPlaceholder":"-- Select branch --","auth.register.levelLabel":"Level","auth.register.levelPlaceholder":"-- Select level --","auth.register.phoneLabel":"Phone Number","auth.register.phonePlaceholder":"0901234567","auth.register.emailLabel":"Email","auth.register.emailPlaceholder":"email@example.com","auth.register.identifierLabel":"Email or Username","auth.register.identifierPlaceholder":"email@example.com or username","auth.register.usernameLabel":"Username","auth.register.usernamePlaceholder":"username","auth.register.passwordLabel":"Password","auth.register.passwordPlaceholder":"••••••••","auth.register.confirmPasswordLabel":"Confirm Password","auth.register.confirmPasswordPlaceholder":"••••••••","auth.register.submit":"Register","auth.register.submitting":"Registering...","auth.register.failed":"Registration failed. Please try again.","auth.register.emailExists":"Email is already in use","auth.register.identifierExists":"Email or username is already in use","auth.register.phoneExists":"Phone number is already in use","auth.register.usernameExists":"Username is already in use","auth.register.loading":"Loading...","auth.register.hasAccount":"Already have an account?","auth.register.loginNow":"Sign in","auth.upgrade.success":"Account updated! Please log in again with your new email and password.","auth.upgrade.clientError":"An error occurred. Please try again.","auth.upgrade.systemError":"System error. Please try again later.","auth.lead.branchLoadError":"Unable to load branch list. Please reload the page.","auth.lead.submitSuccess":"Registration successful! Redirecting...","auth.login.title":"Ocean Edu Exam","auth.login.description":"Sign in to continue using the system","auth.login.withGoogle":"Sign in with Google","auth.login.loggingIn":"Signing in...","auth.login.secureNote":"Secure & Safe","auth.login.termsAgreement":"By signing in, you agree to our","auth.login.termsOfService":"Terms of Service","auth.login.emailLabel":"Email","auth.login.emailPlaceholder":"your-email@oceanedu.com","auth.login.identifierLabel":"Email or Username","auth.login.identifierPlaceholder":"email@oceanedu.com or username","auth.login.passwordLabel":"Password","auth.login.passwordPlaceholder":"••••••••","auth.login.submit":"Sign in","auth.login.submitting":"Signing in...","auth.login.failed":"Sign in failed","auth.login.or":"or","auth.login.googleError":"Google sign in failed. Please try again.","auth.login.noAccount":"Don't have an account?","auth.login.registerNow":"Register now","auth.completeProfile.title":"Complete Your Profile","auth.completeProfile.description":"Please update your personal information to use the system","auth.completeProfile.nameLabel":"Full Name","auth.completeProfile.namePlaceholder":"John Doe","auth.completeProfile.nameRequired":"Please enter your name","auth.completeProfile.phoneLabel":"Phone Number","auth.completeProfile.phonePlaceholder":"0901234567","auth.completeProfile.phoneRequired":"Please enter your phone number","auth.completeProfile.phoneInvalid":"Invalid phone number (10-11 digits)","auth.completeProfile.levelLabel":"English Level","auth.completeProfile.levelPlaceholder":"-- Select level --","auth.completeProfile.levelRequired":"Please select your English level","auth.completeProfile.dateOfBirthLabel":"Date of Birth","auth.completeProfile.branchLabel":"Branch","auth.completeProfile.branchPlaceholder":"-- Select branch (optional) --","auth.completeProfile.submit":"Complete","auth.completeProfile.submitting":"Updating...","auth.completeProfile.success":"Profile updated successfully!","auth.completeProfile.failed":"Update failed. Please try again."};
@@ -1,140 +1 @@
1
- const common = {
2
- // HTTP status errors
3
- 'common.http.400': 'Invalid data. Please check your input!',
4
- 'common.http.403': 'You do not have permission to perform this action!',
5
- 'common.http.404': 'Data not found!',
6
- 'common.http.409': 'Data already exists!',
7
- 'common.http.500': 'Server error. Please try again later!',
8
- 'common.http.generic': 'An error occurred. Please try again!',
9
- // Generic
10
- 'common.cancel': 'Cancel',
11
- 'common.close': 'Close',
12
- 'common.error.system': 'System error. Please try again later.',
13
- 'common.error.loadData': 'Unable to load data. Please try again.',
14
- 'common.form.validationError': 'Please check your input!',
15
- 'common.comingSoon': 'Coming soon',
16
- // Exam creator (shared between admin & teacher)
17
- 'common.examCreator.fillInfoBeforeSave': 'Please fill in all information before saving!',
18
- 'common.examCreator.invalidQuestions': 'Invalid question(s): {errors}',
19
- 'common.examCreator.noValidData': 'No valid question data',
20
- 'common.examCreator.saveError': 'Error saving question {index}',
21
- 'common.examCreator.saveWithBankSuccess': 'Successfully saved question {index} and added to question bank with code "{code}".',
22
- 'common.examCreator.saveSuccess': 'Successfully saved question {index}.',
23
- 'common.examCreator.bankSelected': 'Question selected from bank. Click "Save question" to save.',
24
- 'common.examCreator.saveBeforeExit': 'Please save the current question before exiting.',
25
- 'common.examCreator.previewLoadError': 'Unable to load questions',
26
- // Auto fill questions
27
- 'common.autoFill.loadBankError': 'Unable to load question bank information',
28
- 'common.autoFill.noQuestions': 'No questions to fill',
29
- 'common.autoFill.success': 'Filled {count} questions from bank',
30
- 'common.autoFill.noneApplied': 'No questions were filled',
31
- 'common.autoFill.error': 'An error occurred while auto-filling questions',
32
- // Question creator
33
- 'common.question.create.fillInfo': 'Please fill in all information!',
34
- 'common.question.create.success': 'Question created successfully.',
35
- 'common.questionGroup.create.fillInfo': 'Please fill in all information and select at least 1 question!',
36
- 'common.questionGroup.create.success': 'Question group created successfully!',
37
- // Multiple choice validation
38
- 'common.multipleChoice.minAnswers': 'Minimum 2 answers required!',
39
- 'common.multipleChoice.enterQuestion': 'Please enter the question!',
40
- 'common.multipleChoice.atLeastTwo': 'Must have at least 2 answers!',
41
- 'common.multipleChoice.selectCorrect': 'Please select the correct answer!',
42
- // Question type validations
43
- 'common.questionType.missingAnswer': 'Missing cell #{index} at position ({row}, {col}): Please enter an answer!',
44
- 'common.questionType.addImage': 'Question {index}: Please add an image',
45
- 'common.questionType.enterContent': 'Question {index}: Please enter content',
46
- 'common.questionType.answerTooLong': 'Answer cannot exceed {limit} words',
47
- // Audio
48
- 'common.audio.maxPlayReached': 'You can only listen up to {maxPlay} times!',
49
- // Layout — Sidebar
50
- 'layout.sidebar.admin.dashboard': 'Dashboard',
51
- 'layout.sidebar.admin.users': 'User Management',
52
- 'layout.sidebar.admin.roles': 'Roles',
53
- 'layout.sidebar.admin.classrooms': 'Class Management',
54
- 'layout.sidebar.admin.branches': 'Branch Management',
55
- 'layout.sidebar.admin.contests': 'Contest Management',
56
- 'layout.sidebar.admin.rooms': 'Room Management',
57
- 'layout.sidebar.admin.exams': 'Exam Management',
58
- 'layout.sidebar.admin.questionBanks': 'Question Banks',
59
- 'layout.sidebar.admin.schedules': 'Schedule Management',
60
- 'layout.sidebar.admin.templates': 'Exam Templates',
61
- 'layout.sidebar.admin.testParticipants': 'Test Participants',
62
- 'layout.sidebar.admin.reports': 'Reports',
63
- 'layout.sidebar.admin.settings': 'System Settings',
64
- 'layout.sidebar.student.home': 'Home',
65
- 'layout.sidebar.student.contests': 'Contests',
66
- 'layout.sidebar.student.discoverContests': 'Discover Contests',
67
- 'layout.sidebar.student.myContests': 'My Contests',
68
- 'layout.sidebar.student.mySchedule': 'My Schedule',
69
- 'layout.sidebar.student.examRooms': 'Exam Rooms',
70
- 'layout.sidebar.student.roomList': 'Room List',
71
- 'layout.sidebar.student.joinedRooms': 'Joined Rooms',
72
- 'layout.sidebar.student.results': 'Results',
73
- 'layout.sidebar.student.history': 'Exam History',
74
- 'layout.sidebar.logout': 'Log out',
75
- 'layout.sidebar.loggingOut': 'Logging out...',
76
- 'layout.sidebar.expand': 'Expand menu',
77
- 'layout.sidebar.collapse': 'Collapse menu',
78
- // Layout — Sidebar (System Admin)
79
- 'layout.sidebar.systemAdmin.dashboard': 'Dashboard',
80
- 'layout.sidebar.systemAdmin.users': 'User Management',
81
- // Layout — Topbar
82
- 'layout.topbar.greeting': 'Hello, {name}',
83
- 'layout.topbar.notification': 'Notifications',
84
- 'layout.topbar.userMenu': 'User menu',
85
- 'layout.topbar.profile': 'Profile',
86
- 'layout.topbar.changePassword': 'Change Password',
87
- 'layout.topbar.systemAdmin': 'System Admin',
88
- // Pagination
89
- 'common.pagination.showing': 'Showing {start} - {end} of {total} records',
90
- 'common.pagination.display': 'Show:',
91
- 'common.pagination.first': 'First',
92
- 'common.pagination.previous': 'Previous',
93
- 'common.pagination.next': 'Next',
94
- 'common.pagination.last': 'Last',
95
- // Table
96
- 'common.table.loading': 'Loading data...',
97
- 'common.table.showing': 'Showing {count} of {total} records',
98
- 'common.table.all': 'All',
99
- 'common.table.clearFilters': 'Clear filters',
100
- 'common.table.defaultTitle': 'List',
101
- 'common.table.noData': 'No data',
102
- 'common.table.search': 'Search...',
103
- // Badge — Role
104
- 'common.badge.role.systemAdmin': 'System Admin',
105
- 'common.badge.role.admin': 'Admin',
106
- 'common.badge.role.teacher': 'Teacher',
107
- 'common.badge.role.student': 'Student',
108
- // Badge — Status
109
- 'common.badge.status.active': 'Active',
110
- 'common.badge.status.inactive': 'Inactive',
111
- 'common.badge.status.verified': 'Verified',
112
- 'common.badge.status.pending': 'Pending',
113
- 'common.badge.status.processing': 'Processing',
114
- 'common.badge.status.completed': 'Completed',
115
- 'common.badge.status.approved': 'Approved',
116
- 'common.badge.status.graded': 'Graded',
117
- 'common.badge.status.draft': 'Draft',
118
- 'common.badge.status.rejected': 'Rejected',
119
- 'common.badge.status.cancelled': 'Cancelled',
120
- 'common.badge.status.failed': 'Failed',
121
- 'common.badge.status.error': 'Error',
122
- 'common.badge.status.locked': 'Locked',
123
- 'common.badge.status.open': 'Open',
124
- 'common.badge.status.ready': 'Ready',
125
- 'common.badge.status.inProgress': 'In Progress',
126
- 'common.badge.status.paid': 'Paid',
127
- 'common.badge.status.success': 'Success',
128
- 'common.badge.status.info': 'Info',
129
- 'common.badge.status.unpaid': 'Unpaid',
130
- 'common.badge.status.warning': 'Warning',
131
- 'common.badge.status.overdue': 'Overdue',
132
- 'common.badge.status.disabled': 'Disabled',
133
- 'common.badge.status.archived': 'Archived',
134
- // Badge — Registration Source
135
- 'common.badge.source.selfRegistered': 'Self-registered',
136
- 'common.badge.source.createdByAdmin': 'Created by admin',
137
- 'common.badge.source.createdByTeacher': 'Created by teacher',
138
- 'common.badge.source.createdFromEBM': 'Synced from EBM',
139
- };
140
- export default common;
1
+ export default{"common.http.400":"Invalid data. Please check your input!","common.http.403":"You do not have permission to perform this action!","common.http.404":"Data not found!","common.http.409":"Data already exists!","common.http.500":"Server error. Please try again later!","common.http.generic":"An error occurred. Please try again!","common.cancel":"Cancel","common.close":"Close","common.error.system":"System error. Please try again later.","common.error.loadData":"Unable to load data. Please try again.","common.form.validationError":"Please check your input!","common.comingSoon":"Coming soon","common.examCreator.fillInfoBeforeSave":"Please fill in all information before saving!","common.examCreator.invalidQuestions":"Invalid question(s): {errors}","common.examCreator.noValidData":"No valid question data","common.examCreator.saveError":"Error saving question {index}","common.examCreator.saveWithBankSuccess":'Successfully saved question {index} and added to question bank with code "{code}".',"common.examCreator.saveSuccess":"Successfully saved question {index}.","common.examCreator.bankSelected":'Question selected from bank. Click "Save question" to save.',"common.examCreator.saveBeforeExit":"Please save the current question before exiting.","common.examCreator.previewLoadError":"Unable to load questions","common.autoFill.loadBankError":"Unable to load question bank information","common.autoFill.noQuestions":"No questions to fill","common.autoFill.success":"Filled {count} questions from bank","common.autoFill.noneApplied":"No questions were filled","common.autoFill.error":"An error occurred while auto-filling questions","common.question.create.fillInfo":"Please fill in all information!","common.question.create.success":"Question created successfully.","common.questionGroup.create.fillInfo":"Please fill in all information and select at least 1 question!","common.questionGroup.create.success":"Question group created successfully!","common.multipleChoice.minAnswers":"Minimum 2 answers required!","common.multipleChoice.enterQuestion":"Please enter the question!","common.multipleChoice.atLeastTwo":"Must have at least 2 answers!","common.multipleChoice.selectCorrect":"Please select the correct answer!","common.questionType.missingAnswer":"Missing cell #{index} at position ({row}, {col}): Please enter an answer!","common.questionType.addImage":"Question {index}: Please add an image","common.questionType.enterContent":"Question {index}: Please enter content","common.questionType.answerTooLong":"Answer cannot exceed {limit} words","common.audio.maxPlayReached":"You can only listen up to {maxPlay} times!","layout.sidebar.admin.dashboard":"Dashboard","layout.sidebar.admin.users":"User Management","layout.sidebar.admin.roles":"Roles","layout.sidebar.admin.classrooms":"Class Management","layout.sidebar.admin.branches":"Branch Management","layout.sidebar.admin.contests":"Contest Management","layout.sidebar.admin.rooms":"Room Management","layout.sidebar.admin.exams":"Exam Management","layout.sidebar.admin.questionBanks":"Question Banks","layout.sidebar.admin.schedules":"Schedule Management","layout.sidebar.admin.templates":"Exam Templates","layout.sidebar.admin.testParticipants":"Test Participants","layout.sidebar.admin.reports":"Reports","layout.sidebar.admin.settings":"System Settings","layout.sidebar.student.home":"Home","layout.sidebar.student.contests":"Contests","layout.sidebar.student.discoverContests":"Discover Contests","layout.sidebar.student.myContests":"My Contests","layout.sidebar.student.mySchedule":"My Schedule","layout.sidebar.student.examRooms":"Exam Rooms","layout.sidebar.student.roomList":"Room List","layout.sidebar.student.joinedRooms":"Joined Rooms","layout.sidebar.student.results":"Results","layout.sidebar.student.history":"Exam History","layout.sidebar.logout":"Log out","layout.sidebar.loggingOut":"Logging out...","layout.sidebar.expand":"Expand menu","layout.sidebar.collapse":"Collapse menu","layout.sidebar.systemAdmin.dashboard":"Dashboard","layout.sidebar.systemAdmin.users":"User Management","layout.topbar.greeting":"Hello, {name}","layout.topbar.notification":"Notifications","layout.topbar.userMenu":"User menu","layout.topbar.profile":"Profile","layout.topbar.changePassword":"Change Password","layout.topbar.systemAdmin":"System Admin","common.pagination.showing":"Showing {start} - {end} of {total} records","common.pagination.display":"Show:","common.pagination.first":"First","common.pagination.previous":"Previous","common.pagination.next":"Next","common.pagination.last":"Last","common.table.loading":"Loading data...","common.table.showing":"Showing {count} of {total} records","common.table.all":"All","common.table.clearFilters":"Clear filters","common.table.defaultTitle":"List","common.table.noData":"No data","common.table.search":"Search...","common.badge.role.systemAdmin":"System Admin","common.badge.role.admin":"Admin","common.badge.role.teacher":"Teacher","common.badge.role.student":"Student","common.badge.status.active":"Active","common.badge.status.inactive":"Inactive","common.badge.status.verified":"Verified","common.badge.status.pending":"Pending","common.badge.status.processing":"Processing","common.badge.status.completed":"Completed","common.badge.status.approved":"Approved","common.badge.status.graded":"Graded","common.badge.status.draft":"Draft","common.badge.status.rejected":"Rejected","common.badge.status.cancelled":"Cancelled","common.badge.status.failed":"Failed","common.badge.status.error":"Error","common.badge.status.locked":"Locked","common.badge.status.open":"Open","common.badge.status.ready":"Ready","common.badge.status.inProgress":"In Progress","common.badge.status.paid":"Paid","common.badge.status.success":"Success","common.badge.status.info":"Info","common.badge.status.unpaid":"Unpaid","common.badge.status.warning":"Warning","common.badge.status.overdue":"Overdue","common.badge.status.disabled":"Disabled","common.badge.status.archived":"Archived","common.badge.source.selfRegistered":"Self-registered","common.badge.source.createdByAdmin":"Created by admin","common.badge.source.createdByTeacher":"Created by teacher","common.badge.source.createdFromEBM":"Synced from EBM"};
@@ -1,18 +1 @@
1
- const fileUpload = {
2
- // Generic file upload
3
- 'fileUpload.success': 'File uploaded successfully!',
4
- 'fileUpload.error': 'File upload error: {message}',
5
- 'fileUpload.invalidFormat': 'Invalid file format. Please select a file with format: {accept}',
6
- 'fileUpload.tooLarge': 'File too large! Maximum size: {maxSize}MB',
7
- 'fileUpload.uploaded': 'Uploaded: {name}',
8
- // Audio upload
9
- 'fileUpload.audio.success': 'Audio file uploaded successfully!',
10
- 'fileUpload.audio.missingExamId': 'Missing examId for audio upload',
11
- 'fileUpload.audio.error': 'Unable to upload audio file. Please try again.',
12
- 'fileUpload.audio.timeout': 'Audio upload timed out. Please try again.',
13
- 'fileUpload.audio.networkError': 'Network error. Please check your connection and try again.',
14
- 'fileUpload.audio.tooLarge': 'Audio file exceeds the allowed size. Please select a smaller file.',
15
- 'fileUpload.audio.noUrl': 'No audio URL available to play',
16
- 'fileUpload.audio.playError': 'Unable to play audio file',
17
- };
18
- export default fileUpload;
1
+ export default{"fileUpload.success":"File uploaded successfully!","fileUpload.error":"File upload error: {message}","fileUpload.invalidFormat":"Invalid file format. Please select a file with format: {accept}","fileUpload.tooLarge":"File too large! Maximum size: {maxSize}MB","fileUpload.uploaded":"Uploaded: {name}","fileUpload.audio.success":"Audio file uploaded successfully!","fileUpload.audio.missingExamId":"Missing examId for audio upload","fileUpload.audio.error":"Unable to upload audio file. Please try again.","fileUpload.audio.timeout":"Audio upload timed out. Please try again.","fileUpload.audio.networkError":"Network error. Please check your connection and try again.","fileUpload.audio.tooLarge":"Audio file exceeds the allowed size. Please select a smaller file.","fileUpload.audio.noUrl":"No audio URL available to play","fileUpload.audio.playError":"Unable to play audio file"};
@@ -1,133 +1 @@
1
- const student = {
2
- // Room & joining
3
- 'student.room.join.enterCode': 'Please enter the room code',
4
- 'student.room.join.success': 'Joined exam room successfully!',
5
- 'student.room.join.invalidCode': 'Invalid room code',
6
- 'student.room.join.noAccess': 'You do not have access to this exam room',
7
- 'student.room.join.unavailable': 'Exam room is not available',
8
- 'student.room.join.error': 'Unable to join exam room',
9
- // Exam entry
10
- 'student.exam.entry.loadError': 'Unable to load exam room information',
11
- 'student.exam.entry.notStarted': 'Exam has not started yet',
12
- 'student.exam.entry.expired': 'Exam time has expired',
13
- 'student.exam.entry.startError': 'Unable to start the exam',
14
- 'student.exam.entry.otherRoom': 'You have an ongoing exam in another room. Please complete it first.',
15
- 'student.exam.entry.continue': 'Continuing the exam!',
16
- 'student.exam.entry.restartError': 'Unable to restart the exam',
17
- // Exam taking
18
- 'student.exam.take.noActive': 'No active exam in progress',
19
- 'student.exam.take.otherRoom': 'You have another exam in progress',
20
- 'student.exam.take.submitted': 'Exam has been submitted',
21
- 'student.exam.take.timeExpired': 'Time is up',
22
- 'student.exam.take.loadError': 'Error loading the exam',
23
- 'student.exam.take.autoSubmit': "Time's up! Submitting...",
24
- 'student.exam.take.timeWarning': '5 minutes left! Please finish your exam.',
25
- 'student.exam.take.saved': 'Saved',
26
- 'student.exam.take.saveError': 'Save error',
27
- 'student.exam.take.submitSuccess': 'Exam submitted successfully!',
28
- 'student.exam.take.submittedAIGradingInProgress': 'Submitted! AI is grading your Speaking answers, please wait a moment...',
29
- 'student.exam.take.submitError': 'Unable to submit. Please try again.',
30
- // Schedule
31
- 'student.schedule.exportSuccess': 'Exported exam schedule to Google Calendar',
32
- // Audio
33
- 'student.audio.maxPlayReached': 'You can only listen up to {maxPlayCount} times!',
34
- // Contest pages
35
- 'student.contest.discover.title': 'Discover Contests',
36
- 'student.contest.discover.description': 'Explore and join public contests',
37
- 'student.contest.discover.search': 'Search contests...',
38
- 'student.contest.discover.noContests': 'No contests available at the moment',
39
- 'student.contest.discover.upcoming': 'Upcoming',
40
- 'student.contest.discover.inProgress': 'In Progress',
41
- 'student.contest.discover.completed': 'Completed',
42
- 'student.contest.discover.all': 'All',
43
- 'student.contest.discover.register': 'Register',
44
- 'student.contest.discover.registered': 'Registered',
45
- 'student.contest.discover.viewDetail': 'View Details',
46
- 'student.contest.discover.participants': '{count} participants',
47
- 'student.contest.discover.timeRemaining': '{time} remaining',
48
- 'student.contest.discover.myContestsTitle': 'My Contests',
49
- 'student.contest.discover.myContestsDescription': 'Contests you are currently participating in',
50
- 'student.contest.discover.viewAll': 'View All',
51
- 'student.contest.discover.noMyContests': 'You have not joined any contests yet',
52
- 'student.contest.discover.noDescription': 'No description yet',
53
- 'student.contest.my.title': 'My Contests',
54
- 'student.contest.my.description': 'Contests you are participating in or have participated in',
55
- 'student.contest.my.participating': 'Participating',
56
- 'student.contest.my.completed': 'Completed',
57
- 'student.contest.my.all': 'All',
58
- 'student.contest.my.noContests': 'You have not joined any contests yet',
59
- 'student.contest.my.goDiscover': 'Discover Contests',
60
- 'student.contest.my.enterContest': 'Enter Contest',
61
- 'student.contest.detail.schedules': 'Schedules',
62
- 'student.contest.detail.rooms': 'Exam Rooms',
63
- 'student.contest.detail.results': 'Results',
64
- 'student.contest.detail.history': 'Exam History',
65
- 'student.contest.detail.overview': 'Overview',
66
- 'student.contest.detail.notFound': 'Contest not found',
67
- 'student.contest.detail.backToContests': 'Back to Contests',
68
- // Contest detail - redesign
69
- 'student.contest.detail.registerNow': 'Register Now',
70
- 'student.contest.detail.alreadyRegistered': 'Registered ✓',
71
- 'student.contest.detail.registering': 'Registering...',
72
- 'student.contest.detail.startDate': 'Start',
73
- 'student.contest.detail.endDate': 'End',
74
- 'student.contest.detail.examRooms': 'Exam Rooms',
75
- 'student.contest.detail.participants': 'Participants',
76
- 'student.contest.detail.aboutContest': 'About This Contest',
77
- 'student.contest.detail.examFlow': 'Your Journey',
78
- 'student.contest.detail.flowStep1Title': 'Explore',
79
- 'student.contest.detail.flowStep1Desc': 'Read contest info and rules',
80
- 'student.contest.detail.flowStep2Title': 'Register',
81
- 'student.contest.detail.flowStep2Desc': 'Sign up to participate',
82
- 'student.contest.detail.flowStep3Title': 'Enter Room',
83
- 'student.contest.detail.flowStep3Desc': 'Join your exam room when it\'s time',
84
- 'student.contest.detail.flowStep4Title': 'Take Exam',
85
- 'student.contest.detail.flowStep4Desc': 'Complete the exam within time limit',
86
- 'student.contest.detail.flowStep5Title': 'Get Results',
87
- 'student.contest.detail.flowStep5Desc': 'View your score and ranking',
88
- 'student.contest.detail.statsTitle': 'Contest Statistics',
89
- 'student.contest.detail.avgScore': 'Average Score',
90
- 'student.contest.detail.highestScore': 'Highest Score',
91
- 'student.contest.detail.completionRate': 'Completion Rate',
92
- 'student.contest.detail.countdown.days': 'Days',
93
- 'student.contest.detail.countdown.hours': 'Hours',
94
- 'student.contest.detail.countdown.minutes': 'Mins',
95
- 'student.contest.detail.countdown.seconds': 'Secs',
96
- 'student.contest.detail.countdown.startsIn': 'Contest starts in',
97
- 'student.contest.detail.countdown.endsIn': 'Contest ends in',
98
- 'student.contest.detail.countdown.ended': 'Contest has ended',
99
- 'student.contest.detail.quickActions': 'Quick Actions',
100
- 'student.contest.detail.viewRooms': 'View Rooms',
101
- 'student.contest.detail.viewSchedule': 'View Schedule',
102
- 'student.contest.detail.viewResults': 'View Results',
103
- // Contest visibility
104
- 'student.contest.visibility.internal': 'Internal',
105
- 'student.contest.visibility.internalBadge': 'Internal Contest',
106
- 'student.contest.visibility.registerPendingApproval': 'Registration pending approval',
107
- 'student.contest.visibility.pendingApprovalDesc': 'Your registration request has been submitted and is pending admin/mod approval.',
108
- 'student.contest.visibility.registerRequiresApproval': 'Register (requires approval)',
109
- 'student.contest.visibility.approvalRequired': 'Approval required',
110
- 'student.contest.visibility.approvalRequiredDesc': 'This is an internal contest. After registering, you need admin or mod approval to participate.',
111
- 'student.contest.visibility.privateTitle': 'Private Contest',
112
- 'student.contest.visibility.privateDesc': 'This contest is private. You cannot view details or register. Please contact admin/mod to be added.',
113
- 'student.contest.visibility.accessDenied': 'Access Denied',
114
- 'student.contest.visibility.accessDeniedDesc': 'You do not have permission to view this contest.',
115
- 'student.contest.discover.registerSuccess': 'Successfully registered for the contest!',
116
- 'student.contest.discover.registerPendingSuccess': 'Registration request submitted! Please wait for admin/mod approval.',
117
- 'student.contest.discover.registerError': 'Unable to register for the contest. Please try again.',
118
- 'student.contest.discover.cancelRegistration': 'Cancel Registration',
119
- 'student.contest.discover.cancelRegistrationSuccess': 'Successfully cancelled contest registration!',
120
- 'student.contest.discover.cancelRegistrationError': 'Unable to cancel registration. Please try again.',
121
- 'student.contest.discover.cancelRegistrationExamAttempted': 'Cannot cancel registration because you have already attempted the exam.',
122
- 'student.contest.discover.cancelRegistrationNotFound': 'Contest registration not found.',
123
- 'student.contest.discover.cancelling': 'Cancelling...',
124
- // Registration status
125
- 'student.contest.registration.pending': 'Pending Approval',
126
- 'student.contest.registration.pendingBadge': '⏳ Pending',
127
- 'student.contest.registration.pendingDesc': 'Your registration request has been submitted and is waiting for admin approval.',
128
- 'student.contest.registration.rejected': 'Registration Rejected',
129
- 'student.contest.registration.rejectedBadge': '✗ Rejected',
130
- 'student.contest.registration.rejectedDesc': 'Your registration request has been rejected. Please contact admin for details.',
131
- 'student.contest.registration.approved': 'Approved',
132
- };
133
- export default student;
1
+ export default{"student.room.join.enterCode":"Please enter the room code","student.room.join.success":"Joined exam room successfully!","student.room.join.invalidCode":"Invalid room code","student.room.join.noAccess":"You do not have access to this exam room","student.room.join.unavailable":"Exam room is not available","student.room.join.error":"Unable to join exam room","student.exam.entry.loadError":"Unable to load exam room information","student.exam.entry.notStarted":"Exam has not started yet","student.exam.entry.expired":"Exam time has expired","student.exam.entry.startError":"Unable to start the exam","student.exam.entry.otherRoom":"You have an ongoing exam in another room. Please complete it first.","student.exam.entry.continue":"Continuing the exam!","student.exam.entry.restartError":"Unable to restart the exam","student.exam.take.noActive":"No active exam in progress","student.exam.take.otherRoom":"You have another exam in progress","student.exam.take.submitted":"Exam has been submitted","student.exam.take.timeExpired":"Time is up","student.exam.take.loadError":"Error loading the exam","student.exam.take.autoSubmit":"Time's up! Submitting...","student.exam.take.timeWarning":"5 minutes left! Please finish your exam.","student.exam.take.saved":"Saved","student.exam.take.saveError":"Save error","student.exam.take.submitSuccess":"Exam submitted successfully!","student.exam.take.submittedAIGradingInProgress":"Submitted! AI is grading your Speaking answers, please wait a moment...","student.exam.take.submitError":"Unable to submit. Please try again.","student.schedule.exportSuccess":"Exported exam schedule to Google Calendar","student.audio.maxPlayReached":"You can only listen up to {maxPlayCount} times!","student.contest.discover.title":"Discover Contests","student.contest.discover.description":"Explore and join public contests","student.contest.discover.search":"Search contests...","student.contest.discover.noContests":"No contests available at the moment","student.contest.discover.upcoming":"Upcoming","student.contest.discover.inProgress":"In Progress","student.contest.discover.completed":"Completed","student.contest.discover.all":"All","student.contest.discover.register":"Register","student.contest.discover.registered":"Registered","student.contest.discover.viewDetail":"View Details","student.contest.discover.participants":"{count} participants","student.contest.discover.timeRemaining":"{time} remaining","student.contest.discover.myContestsTitle":"My Contests","student.contest.discover.myContestsDescription":"Contests you are currently participating in","student.contest.discover.viewAll":"View All","student.contest.discover.noMyContests":"You have not joined any contests yet","student.contest.discover.noDescription":"No description yet","student.contest.my.title":"My Contests","student.contest.my.description":"Contests you are participating in or have participated in","student.contest.my.participating":"Participating","student.contest.my.completed":"Completed","student.contest.my.all":"All","student.contest.my.noContests":"You have not joined any contests yet","student.contest.my.goDiscover":"Discover Contests","student.contest.my.enterContest":"Enter Contest","student.contest.detail.schedules":"Schedules","student.contest.detail.rooms":"Exam Rooms","student.contest.detail.results":"Results","student.contest.detail.history":"Exam History","student.contest.detail.overview":"Overview","student.contest.detail.notFound":"Contest not found","student.contest.detail.backToContests":"Back to Contests","student.contest.detail.registerNow":"Register Now","student.contest.detail.alreadyRegistered":"Registered ✓","student.contest.detail.registering":"Registering...","student.contest.detail.startDate":"Start","student.contest.detail.endDate":"End","student.contest.detail.examRooms":"Exam Rooms","student.contest.detail.participants":"Participants","student.contest.detail.aboutContest":"About This Contest","student.contest.detail.examFlow":"Your Journey","student.contest.detail.flowStep1Title":"Explore","student.contest.detail.flowStep1Desc":"Read contest info and rules","student.contest.detail.flowStep2Title":"Register","student.contest.detail.flowStep2Desc":"Sign up to participate","student.contest.detail.flowStep3Title":"Enter Room","student.contest.detail.flowStep3Desc":"Join your exam room when it's time","student.contest.detail.flowStep4Title":"Take Exam","student.contest.detail.flowStep4Desc":"Complete the exam within time limit","student.contest.detail.flowStep5Title":"Get Results","student.contest.detail.flowStep5Desc":"View your score and ranking","student.contest.detail.statsTitle":"Contest Statistics","student.contest.detail.avgScore":"Average Score","student.contest.detail.highestScore":"Highest Score","student.contest.detail.completionRate":"Completion Rate","student.contest.detail.countdown.days":"Days","student.contest.detail.countdown.hours":"Hours","student.contest.detail.countdown.minutes":"Mins","student.contest.detail.countdown.seconds":"Secs","student.contest.detail.countdown.startsIn":"Contest starts in","student.contest.detail.countdown.endsIn":"Contest ends in","student.contest.detail.countdown.ended":"Contest has ended","student.contest.detail.quickActions":"Quick Actions","student.contest.detail.viewRooms":"View Rooms","student.contest.detail.viewSchedule":"View Schedule","student.contest.detail.viewResults":"View Results","student.contest.visibility.internal":"Internal","student.contest.visibility.internalBadge":"Internal Contest","student.contest.visibility.registerPendingApproval":"Registration pending approval","student.contest.visibility.pendingApprovalDesc":"Your registration request has been submitted and is pending admin/mod approval.","student.contest.visibility.registerRequiresApproval":"Register (requires approval)","student.contest.visibility.approvalRequired":"Approval required","student.contest.visibility.approvalRequiredDesc":"This is an internal contest. After registering, you need admin or mod approval to participate.","student.contest.visibility.privateTitle":"Private Contest","student.contest.visibility.privateDesc":"This contest is private. You cannot view details or register. Please contact admin/mod to be added.","student.contest.visibility.accessDenied":"Access Denied","student.contest.visibility.accessDeniedDesc":"You do not have permission to view this contest.","student.contest.discover.registerSuccess":"Successfully registered for the contest!","student.contest.discover.registerPendingSuccess":"Registration request submitted! Please wait for admin/mod approval.","student.contest.discover.registerError":"Unable to register for the contest. Please try again.","student.contest.discover.cancelRegistration":"Cancel Registration","student.contest.discover.cancelRegistrationSuccess":"Successfully cancelled contest registration!","student.contest.discover.cancelRegistrationError":"Unable to cancel registration. Please try again.","student.contest.discover.cancelRegistrationExamAttempted":"Cannot cancel registration because you have already attempted the exam.","student.contest.discover.cancelRegistrationNotFound":"Contest registration not found.","student.contest.discover.cancelling":"Cancelling...","student.contest.registration.pending":"Pending Approval","student.contest.registration.pendingBadge":"⏳ Pending","student.contest.registration.pendingDesc":"Your registration request has been submitted and is waiting for admin approval.","student.contest.registration.rejected":"Registration Rejected","student.contest.registration.rejectedBadge":"✗ Rejected","student.contest.registration.rejectedDesc":"Your registration request has been rejected. Please contact admin for details.","student.contest.registration.approved":"Approved"};
@@ -1,37 +1 @@
1
- const terms = {
2
- // Page
3
- 'terms.page.title': 'Terms of Service',
4
- 'terms.page.lastUpdated': 'Last updated: April 15, 2026',
5
- 'terms.page.backToHome': 'Back to Home',
6
- // Section 1 - Introduction
7
- 'terms.section1.title': '1. Introduction',
8
- 'terms.section1.content': 'Ocean Edu Exam ("Platform") is an online examination system developed and operated by Ocean Edu International English Language System. By accessing and using the Platform, you agree to comply with the terms and conditions set forth in this document. If you do not agree with any of these terms, please stop using the Platform.',
9
- // Section 2 - Terms of Use
10
- 'terms.section2.title': '2. Terms of Use',
11
- 'terms.section2.content': 'To use the Platform, you must meet the following conditions:\n• Be at least 6 years old. Users under 13 years of age require consent and supervision from a parent or legal guardian.\n• Provide accurate and complete registration information.\n• Accept and comply with all of these Terms of Service.\n• Not use the Platform for illegal purposes or in violation of the rights of others.',
12
- // Section 3 - User Account
13
- 'terms.section3.title': '3. User Account',
14
- 'terms.section3.content': 'You are responsible for:\n• Keeping your login credentials (email/username and password) secure.\n• Not sharing your account with others.\n• Notifying us immediately if you discover unauthorized access to your account.\n• Providing accurate personal information and updating it when changes occur.\n\nWe are not responsible for any damages arising from your failure to secure your account.',
15
- // Section 4 - Exam Rules
16
- 'terms.section4.title': '4. Examination Rules',
17
- 'terms.section4.content': 'When participating in exams on the Platform, you agree to:\n• Complete the exam by yourself without assistance from others.\n• Not use reference materials, assistive software, or any form of cheating.\n• Not copy, screenshot, record, or share exam content in any form.\n• Comply with the time limits and specific rules of each examination.\n\nViolation of exam rules may result in exam result cancellation and account suspension.',
18
- // Section 5 - Intellectual Property
19
- 'terms.section5.title': '5. Intellectual Property',
20
- 'terms.section5.content': 'All content on the Platform, including but not limited to: exam papers, questions, images, audio, video, interface, source code, and related materials are the intellectual property of Ocean Edu or its licensed partners.\n\nYou may not:\n• Copy, distribute, modify, or create derivative works from Platform content.\n• Use content for commercial purposes without written consent.\n• Extract system data using automated tools (crawlers, bots, scrapers).',
21
- // Section 6 - Privacy & Security
22
- 'terms.section6.title': '6. Privacy & Security',
23
- 'terms.section6.content': 'We are committed to protecting your personal information:\n• We collect minimal data necessary to provide the service (full name, email, exam results).\n• We do not sell or share personal information with third parties for commercial purposes.\n• We apply technical security measures to protect user data.\n• Exam result data is stored securely and accessible only to the user or authorized administrators.\n\nPlease contact us if you wish to request deletion of your personal data.',
24
- // Section 7 - Limitation of Liability
25
- 'terms.section7.title': '7. Limitation of Liability',
26
- 'terms.section7.content': 'The Platform is provided on an "as-is" basis. We strive to ensure stable system operation but do not guarantee:\n• 100% uninterrupted service availability.\n• Absence of technical errors or system issues.\n• Exam results absolutely and accurately reflecting actual ability.\n\nWe are not liable for indirect damages arising from the use or inability to use the Platform.',
27
- // Section 8 - Account Termination
28
- 'terms.section8.title': '8. Account Termination',
29
- 'terms.section8.content': 'We reserve the right to temporarily suspend or permanently delete your account if:\n• You violate these Terms of Service.\n• Cheating behavior is detected in examinations.\n• The Platform is used to harass, sabotage, or harm other users.\n• False information is provided during registration.\n\nYou may also request account deletion at any time by contacting us.',
30
- // Section 9 - Changes to Terms
31
- 'terms.section9.title': '9. Changes to Terms',
32
- 'terms.section9.content': 'We reserve the right to update or modify these Terms of Service at any time. When significant changes are made:\n• We will notify you on the Platform or via your registered email.\n• The update date will be clearly noted at the top of the page.\n• Your continued use of the Platform after changes take effect constitutes acceptance of the new terms.',
33
- // Section 10 - Contact
34
- 'terms.section10.title': '10. Contact',
35
- 'terms.section10.content': 'If you have any questions or concerns about these Terms of Service, please contact us:\n\n• Email: support@ocean.edu.vn\n• Hotline: 1900 0340\n• Website: https://ocean.edu.vn',
36
- };
37
- export default terms;
1
+ export default{"terms.page.title":"Terms of Service","terms.page.lastUpdated":"Last updated: April 15, 2026","terms.page.backToHome":"Back to Home","terms.section1.title":"1. Introduction","terms.section1.content":'Ocean Edu Exam ("Platform") is an online examination system developed and operated by Ocean Edu International English Language System. By accessing and using the Platform, you agree to comply with the terms and conditions set forth in this document. If you do not agree with any of these terms, please stop using the Platform.',"terms.section2.title":"2. Terms of Use","terms.section2.content":"To use the Platform, you must meet the following conditions:\n• Be at least 6 years old. Users under 13 years of age require consent and supervision from a parent or legal guardian.\n• Provide accurate and complete registration information.\n• Accept and comply with all of these Terms of Service.\n• Not use the Platform for illegal purposes or in violation of the rights of others.","terms.section3.title":"3. User Account","terms.section3.content":"You are responsible for:\n• Keeping your login credentials (email/username and password) secure.\n• Not sharing your account with others.\n• Notifying us immediately if you discover unauthorized access to your account.\n• Providing accurate personal information and updating it when changes occur.\n\nWe are not responsible for any damages arising from your failure to secure your account.","terms.section4.title":"4. Examination Rules","terms.section4.content":"When participating in exams on the Platform, you agree to:\n• Complete the exam by yourself without assistance from others.\n• Not use reference materials, assistive software, or any form of cheating.\n• Not copy, screenshot, record, or share exam content in any form.\n• Comply with the time limits and specific rules of each examination.\n\nViolation of exam rules may result in exam result cancellation and account suspension.","terms.section5.title":"5. Intellectual Property","terms.section5.content":"All content on the Platform, including but not limited to: exam papers, questions, images, audio, video, interface, source code, and related materials are the intellectual property of Ocean Edu or its licensed partners.\n\nYou may not:\n• Copy, distribute, modify, or create derivative works from Platform content.\n• Use content for commercial purposes without written consent.\n• Extract system data using automated tools (crawlers, bots, scrapers).","terms.section6.title":"6. Privacy & Security","terms.section6.content":"We are committed to protecting your personal information:\n• We collect minimal data necessary to provide the service (full name, email, exam results).\n• We do not sell or share personal information with third parties for commercial purposes.\n• We apply technical security measures to protect user data.\n• Exam result data is stored securely and accessible only to the user or authorized administrators.\n\nPlease contact us if you wish to request deletion of your personal data.","terms.section7.title":"7. Limitation of Liability","terms.section7.content":'The Platform is provided on an "as-is" basis. We strive to ensure stable system operation but do not guarantee:\n• 100% uninterrupted service availability.\n• Absence of technical errors or system issues.\n• Exam results absolutely and accurately reflecting actual ability.\n\nWe are not liable for indirect damages arising from the use or inability to use the Platform.',"terms.section8.title":"8. Account Termination","terms.section8.content":"We reserve the right to temporarily suspend or permanently delete your account if:\n• You violate these Terms of Service.\n• Cheating behavior is detected in examinations.\n• The Platform is used to harass, sabotage, or harm other users.\n• False information is provided during registration.\n\nYou may also request account deletion at any time by contacting us.","terms.section9.title":"9. Changes to Terms","terms.section9.content":"We reserve the right to update or modify these Terms of Service at any time. When significant changes are made:\n• We will notify you on the Platform or via your registered email.\n• The update date will be clearly noted at the top of the page.\n• Your continued use of the Platform after changes take effect constitutes acceptance of the new terms.","terms.section10.title":"10. Contact","terms.section10.content":"If you have any questions or concerns about these Terms of Service, please contact us:\n\n• Email: support@ocean.edu.vn\n• Hotline: 1900 0340\n• Website: https://ocean.edu.vn"};
@@ -1,15 +1 @@
1
- import common from './en/common';
2
- import auth from './en/auth';
3
- import admin from './en/admin';
4
- import student from './en/student';
5
- import fileUpload from './en/file-upload';
6
- import terms from './en/terms';
7
- const en = {
8
- ...common,
9
- ...auth,
10
- ...admin,
11
- ...student,
12
- ...fileUpload,
13
- ...terms,
14
- };
15
- export default en;
1
+ import o from"./en/common";import m from"./en/auth";import r from"./en/admin";import t from"./en/student";import e from"./en/file-upload";import n from"./en/terms";const f={...o,...m,...r,...t,...e,...n};export default f;