@tinyweb_dev/oe-exam-sdk 0.1.1 → 0.1.3

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 (514) 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.d.ts +1 -1
  4. package/dist/api/exam-questions.js +1 -98
  5. package/dist/api/exam-questions.types.d.ts +45 -1
  6. package/dist/api/exam-questions.types.js +1 -1
  7. package/dist/api/exam-taking.js +1 -73
  8. package/dist/api/exam-taking.types.js +1 -1
  9. package/dist/api/index.js +1 -6
  10. package/dist/api/result-review.js +1 -50
  11. package/dist/api/result-review.types.js +1 -1
  12. package/dist/components/CueCardEditor.js +1 -58
  13. package/dist/components/common/ResolvedImage.js +1 -15
  14. package/dist/components/exams/CompletionDialog.d.ts +8 -0
  15. package/dist/components/exams/CompletionDialog.js +1 -0
  16. package/dist/components/exams/CreateExamInfoForm.d.ts +4 -1
  17. package/dist/components/exams/CreateExamInfoForm.js +1 -35
  18. package/dist/components/exams/CreateExamPageContainer.d.ts +3 -0
  19. package/dist/components/exams/CreateExamPageContainer.js +1 -103
  20. package/dist/components/exams/ExamCreator.d.ts +9 -3
  21. package/dist/components/exams/ExamCreator.js +1 -89
  22. package/dist/components/exams/ExamPartTabs.d.ts +1 -1
  23. package/dist/components/exams/ExamPartTabs.js +1 -40
  24. package/dist/components/exams/ExamPreviewDialog.d.ts +20 -0
  25. package/dist/components/exams/ExamPreviewDialog.js +1 -0
  26. package/dist/components/exams/ExamQuestionGrid.d.ts +1 -1
  27. package/dist/components/exams/ExamQuestionGrid.js +1 -18
  28. package/dist/components/exams/ExamQuestionsPageContainer.d.ts +3 -0
  29. package/dist/components/exams/ExamQuestionsPageContainer.js +1 -90
  30. package/dist/components/exams/ExamViewDialog.d.ts +24 -0
  31. package/dist/components/exams/ExamViewDialog.js +1 -0
  32. package/dist/components/exams/PartAudioUploader.js +1 -9
  33. package/dist/components/exams/TemplateSelector.js +1 -66
  34. package/dist/components/exams/UnsavedChangesDialog.d.ts +8 -0
  35. package/dist/components/exams/UnsavedChangesDialog.js +1 -0
  36. package/dist/components/exams/api.d.ts +1 -1
  37. package/dist/components/exams/api.js +1 -3
  38. package/dist/components/exams/create-exam.texts.d.ts +58 -0
  39. package/dist/components/exams/create-exam.texts.js +1 -0
  40. package/dist/components/exams/create-exam.validation.js +1 -18
  41. package/dist/components/exams/exam-question-status.d.ts +9 -0
  42. package/dist/components/exams/exam-question-status.js +1 -0
  43. package/dist/components/exams/exam-template.utils.js +1 -18
  44. package/dist/components/exams/index.d.ts +11 -1
  45. package/dist/components/exams/index.js +1 -10
  46. package/dist/components/exams/take/ExamTakingPageContainer.js +1 -153
  47. package/dist/components/exams/take/GenericQuestionRenderer.js +1 -14
  48. package/dist/components/exams/take/exam-taking.utils.js +1 -88
  49. package/dist/components/exams/take/hooks/useSpeakingRecorder.js +1 -24
  50. package/dist/components/exams/take/index.js +1 -2
  51. package/dist/components/exams/take/types.js +1 -1
  52. package/dist/components/index.js +1 -42
  53. package/dist/components/questions/_shared/config/question-types.config.js +1 -333
  54. package/dist/components/questions/_shared/constants/color-palette.js +1 -21
  55. package/dist/components/questions/_shared/hooks/useAnswerGroupQuestionGroup.js +1 -105
  56. package/dist/components/questions/_shared/hooks/useBasicQuestionGroup.js +1 -222
  57. package/dist/components/questions/_shared/hooks/useCompareImagesGroup.js +1 -140
  58. package/dist/components/questions/_shared/hooks/useImageQuestionGroup.js +1 -123
  59. package/dist/components/questions/_shared/hooks/useInfoExchangeGroup.js +1 -50
  60. package/dist/components/questions/_shared/hooks/useQuestionFormState.js +1 -54
  61. package/dist/components/questions/_shared/hooks/useQuestionInitialization.js +1 -123
  62. package/dist/components/questions/_shared/hooks/useQuestionListGroup.js +1 -121
  63. package/dist/components/questions/_shared/hooks/useQuestionOnChange.js +1 -70
  64. package/dist/components/questions/_shared/hooks/useSceneQuestionGroup.js +1 -194
  65. package/dist/components/questions/_shared/index.js +1 -7
  66. package/dist/components/questions/_shared/types/answer-the-question.type.js +1 -1
  67. package/dist/components/questions/_shared/types/arrange-letters-into-words.type.js +1 -1
  68. package/dist/components/questions/_shared/types/choose-correct-adjective.type.js +1 -3
  69. package/dist/components/questions/_shared/types/color-region.config.js +1 -1
  70. package/dist/components/questions/_shared/types/fill-in-blank.type.js +1 -1
  71. package/dist/components/questions/_shared/types/fill-missing-words-in-grid.type.js +1 -1
  72. package/dist/components/questions/_shared/types/gn-speaking-interview.type.js +1 -1
  73. package/dist/components/questions/_shared/types/index.js +1 -12
  74. package/dist/components/questions/_shared/types/label-the-picture.type.js +1 -1
  75. package/dist/components/questions/_shared/types/listen-and-choose-from-answer-group.type.js +1 -1
  76. package/dist/components/questions/_shared/types/listen-and-choose-objects-in-scene.type.js +1 -1
  77. package/dist/components/questions/_shared/types/listen-and-drag-objects-into-scene.type.js +1 -1
  78. package/dist/components/questions/_shared/types/listen-and-speak-answer.type.js +1 -1
  79. package/dist/components/questions/_shared/types/listen-and-speak-compare-images.type.js +1 -1
  80. package/dist/components/questions/_shared/types/listen-and-speak-image-group.type.js +1 -1
  81. package/dist/components/questions/_shared/types/listen-and-speak-info-exchange.type.js +1 -1
  82. package/dist/components/questions/_shared/types/listen-and-speak-odd-one-out.type.js +1 -3
  83. package/dist/components/questions/_shared/types/listen-and-speak-question-list.type.js +1 -1
  84. package/dist/components/questions/_shared/types/listen-and-speak-with-story-images.type.js +1 -3
  85. package/dist/components/questions/_shared/types/listen-and-tick-answer.type.js +1 -1
  86. package/dist/components/questions/_shared/types/listening-drawline.type.js +1 -1
  87. package/dist/components/questions/_shared/types/look-and-choose-answer.type.js +1 -1
  88. package/dist/components/questions/_shared/types/look-picture-fill-word-hint.type.js +1 -1
  89. package/dist/components/questions/_shared/types/match-by-writing-answer.type.js +1 -1
  90. package/dist/components/questions/_shared/types/multiple-choice.type.js +1 -1
  91. package/dist/components/questions/_shared/types/question-group.type.js +1 -11
  92. package/dist/components/questions/_shared/types/read-and-color-objects.type.js +1 -1
  93. package/dist/components/questions/_shared/types/read-displayed-content.type.js +1 -1
  94. package/dist/components/questions/_shared/types/read-passage-and-answer-questions.type.js +1 -1
  95. package/dist/components/questions/_shared/types/speaking-describe-image.type.js +1 -1
  96. package/dist/components/questions/_shared/types/spontaneous-qa.type.js +1 -1
  97. package/dist/components/questions/_shared/types/word-fill-paragraph-with-options.type.js +1 -1
  98. package/dist/components/questions/_shared/types/word-fill-paragraph.type.js +1 -1
  99. package/dist/components/questions/_shared/types/word-fill-structured-form.type.js +1 -1
  100. package/dist/components/questions/_shared/types/word-ordering.type.js +1 -1
  101. package/dist/components/questions/_shared/types/write-a-short-letter.type.js +1 -1
  102. package/dist/components/questions/_shared/types/write-correct-verb-form.type.js +1 -3
  103. package/dist/components/questions/_shared/types/write-sentences.type.js +1 -1
  104. package/dist/components/questions/_shared/types/write-short-paragraph.type.js +1 -1
  105. package/dist/components/questions/_shared/utils/answer-builder.js +1 -79
  106. package/dist/components/questions/_shared/utils/createColorRegionRegistration.js +1 -39
  107. package/dist/components/questions/_shared/utils/id-generator.js +1 -3
  108. package/dist/components/questions/_shared/utils/question-validation.js +1 -21
  109. package/dist/components/questions/components/ColorNode.js +1 -85
  110. package/dist/components/questions/components/ColorRegionClient.js +1 -545
  111. package/dist/components/questions/components/ColorRegionCreator.js +1 -420
  112. package/dist/components/questions/components/ColorRegionNode.js +1 -59
  113. package/dist/components/questions/components/CreatorGuide.js +1 -103
  114. package/dist/components/questions/components/NameNode.js +1 -26
  115. package/dist/components/questions/components/QuestionBankOption.js +1 -46
  116. package/dist/components/questions/components/QuestionBasicInfoForm.js +1 -9
  117. package/dist/components/questions/components/QuestionCommonFields.js +1 -33
  118. package/dist/components/questions/components/QuestionSearchDropdown.js +1 -258
  119. package/dist/components/questions/components/QuestionTypeSelector.js +1 -32
  120. package/dist/components/questions/components/QuestionTypeSpecificForms.js +1 -6
  121. package/dist/components/questions/components/RegionNode.js +1 -94
  122. package/dist/components/questions/components/index.js +1 -14
  123. package/dist/components/questions/creator/QuestionCreator.js +1 -90
  124. package/dist/components/questions/creator/QuestionGroupCreator.js +1 -119
  125. package/dist/components/questions/creator/dedicated-component-router.js +1 -79
  126. package/dist/components/questions/creator/index.js +1 -3
  127. package/dist/components/questions/creator/question-type-registry.js +1 -80
  128. package/dist/components/questions/groups/ArticlesGroupCard.js +1 -121
  129. package/dist/components/questions/groups/BasicQuestionGroupCard.js +1 -50
  130. package/dist/components/questions/groups/DocumentGroupCard.js +1 -114
  131. package/dist/components/questions/groups/MatchAnswerGroupCard.js +1 -25
  132. package/dist/components/questions/index.js +1 -10
  133. package/dist/components/questions/types/answer-the-question/AnswerTheQuestionClient.js +1 -37
  134. package/dist/components/questions/types/answer-the-question/AnswerTheQuestionCreator.js +1 -351
  135. package/dist/components/questions/types/answer-the-question/register.js +1 -67
  136. package/dist/components/questions/types/answer-the-question/transform.js +1 -36
  137. package/dist/components/questions/types/arrange-letters-into-words/ArrangeLettersIntoWordsClient.js +1 -141
  138. package/dist/components/questions/types/arrange-letters-into-words/ArrangeLettersIntoWordsCreator.js +1 -118
  139. package/dist/components/questions/types/arrange-letters-into-words/index.js +1 -2
  140. package/dist/components/questions/types/arrange-letters-into-words/register.js +1 -4
  141. package/dist/components/questions/types/arrange-letters-into-words/transform.js +1 -24
  142. package/dist/components/questions/types/choose-correct-adjective/ChooseCorrectAdjectiveClient.js +1 -64
  143. package/dist/components/questions/types/choose-correct-adjective/ChooseCorrectAdjectiveCreator.js +1 -169
  144. package/dist/components/questions/types/choose-correct-adjective/index.js +1 -2
  145. package/dist/components/questions/types/choose-correct-adjective/register.js +1 -55
  146. package/dist/components/questions/types/choose-correct-adjective/transform.js +1 -16
  147. package/dist/components/questions/types/choose-the-correct-answer/ChooseTheCorrectAnswerClient.js +1 -131
  148. package/dist/components/questions/types/choose-the-correct-answer/ChooseTheCorrectAnswerCreator.js +1 -581
  149. package/dist/components/questions/types/choose-the-correct-answer/index.js +1 -2
  150. package/dist/components/questions/types/choose-the-correct-answer/register.js +1 -101
  151. package/dist/components/questions/types/choose-the-correct-answer/transform.js +1 -43
  152. package/dist/components/questions/types/fill-in-blank/FillInBlankClient.js +1 -275
  153. package/dist/components/questions/types/fill-in-blank/FillInBlankCreator.js +1 -448
  154. package/dist/components/questions/types/fill-in-blank/index.js +1 -2
  155. package/dist/components/questions/types/fill-in-blank/register.js +1 -138
  156. package/dist/components/questions/types/fill-in-blank/transform.js +1 -59
  157. package/dist/components/questions/types/fill-missing-words-in-grid/FillMissingWordsInGridClient.js +1 -117
  158. package/dist/components/questions/types/fill-missing-words-in-grid/FillMissingWordsInGridCreator.js +1 -671
  159. package/dist/components/questions/types/fill-missing-words-in-grid/index.js +1 -2
  160. package/dist/components/questions/types/fill-missing-words-in-grid/register.js +1 -37
  161. package/dist/components/questions/types/fill-missing-words-in-grid/transform.js +1 -15
  162. package/dist/components/questions/types/gn-speaking-interview/GNSpeakingInterviewCreator.js +1 -262
  163. package/dist/components/questions/types/gn-speaking-interview/register.js +1 -121
  164. package/dist/components/questions/types/gn-speaking-interview/transform.js +1 -48
  165. package/dist/components/questions/types/image-object-matching/ImageObjectMatchingClient.js +1 -16
  166. package/dist/components/questions/types/image-object-matching/ImageObjectMatchingCreator.js +1 -27
  167. package/dist/components/questions/types/image-object-matching/index.js +1 -2
  168. package/dist/components/questions/types/image-object-matching/register.js +1 -3
  169. package/dist/components/questions/types/image-object-matching/transform.js +1 -2
  170. package/dist/components/questions/types/label-the-picture/LabelThePictureClient.js +1 -102
  171. package/dist/components/questions/types/label-the-picture/LabelThePictureCreator.js +1 -344
  172. package/dist/components/questions/types/label-the-picture/index.js +1 -2
  173. package/dist/components/questions/types/label-the-picture/register.js +1 -54
  174. package/dist/components/questions/types/label-the-picture/transform.js +1 -28
  175. package/dist/components/questions/types/listen-and-choose-from-answer-group/ListenAndChooseFromAnswerGroupClient.js +1 -78
  176. package/dist/components/questions/types/listen-and-choose-from-answer-group/ListenAndChooseFromAnswerGroupCreator.js +1 -232
  177. package/dist/components/questions/types/listen-and-choose-from-answer-group/index.js +1 -2
  178. package/dist/components/questions/types/listen-and-choose-from-answer-group/register.js +1 -82
  179. package/dist/components/questions/types/listen-and-choose-from-answer-group/transform.js +1 -27
  180. package/dist/components/questions/types/listen-and-choose-objects-in-scene/ListenAndChooseObjectsInSceneClient.js +1 -70
  181. package/dist/components/questions/types/listen-and-choose-objects-in-scene/ListenAndChooseObjectsInSceneCreator.js +1 -386
  182. package/dist/components/questions/types/listen-and-choose-objects-in-scene/index.js +1 -2
  183. package/dist/components/questions/types/listen-and-choose-objects-in-scene/register.js +1 -100
  184. package/dist/components/questions/types/listen-and-choose-objects-in-scene/transform.js +1 -33
  185. package/dist/components/questions/types/listen-and-drag-objects-into-scene/ListenAndDragObjectsIntoSceneClient.js +1 -106
  186. package/dist/components/questions/types/listen-and-drag-objects-into-scene/ListenAndDragObjectsIntoSceneCreator.js +1 -457
  187. package/dist/components/questions/types/listen-and-drag-objects-into-scene/index.js +1 -2
  188. package/dist/components/questions/types/listen-and-drag-objects-into-scene/register.js +1 -110
  189. package/dist/components/questions/types/listen-and-drag-objects-into-scene/transform.js +1 -35
  190. package/dist/components/questions/types/listen-and-speak-answer/ArrowIndicator.js +1 -8
  191. package/dist/components/questions/types/listen-and-speak-answer/ListenAndSpeakAnswerClient.js +1 -22
  192. package/dist/components/questions/types/listen-and-speak-answer/ListenAndSpeakAnswerCreator.js +1 -291
  193. package/dist/components/questions/types/listen-and-speak-answer/index.js +1 -2
  194. package/dist/components/questions/types/listen-and-speak-answer/register.js +1 -84
  195. package/dist/components/questions/types/listen-and-speak-answer/transform.js +1 -27
  196. package/dist/components/questions/types/listen-and-speak-compare-images/ListenAndSpeakCompareImagesClient.js +1 -32
  197. package/dist/components/questions/types/listen-and-speak-compare-images/ListenAndSpeakCompareImagesCreator.js +1 -295
  198. package/dist/components/questions/types/listen-and-speak-compare-images/register.js +1 -79
  199. package/dist/components/questions/types/listen-and-speak-compare-images/transform.js +1 -27
  200. package/dist/components/questions/types/listen-and-speak-image-group/ListenAndSpeakImageGroupClient.js +1 -34
  201. package/dist/components/questions/types/listen-and-speak-image-group/ListenAndSpeakImageGroupCreator.js +1 -285
  202. package/dist/components/questions/types/listen-and-speak-image-group/register.js +1 -81
  203. package/dist/components/questions/types/listen-and-speak-image-group/transform.js +1 -26
  204. package/dist/components/questions/types/listen-and-speak-info-exchange/ListenAndSpeakInfoExchangeClient.js +1 -38
  205. package/dist/components/questions/types/listen-and-speak-info-exchange/ListenAndSpeakInfoExchangeCreator.js +1 -385
  206. package/dist/components/questions/types/listen-and-speak-info-exchange/register.js +1 -87
  207. package/dist/components/questions/types/listen-and-speak-info-exchange/transform.js +1 -32
  208. package/dist/components/questions/types/listen-and-speak-odd-one-out/ListenAndSpeakOddOneOutClient.js +1 -26
  209. package/dist/components/questions/types/listen-and-speak-odd-one-out/ListenAndSpeakOddOneOutCreator.js +1 -247
  210. package/dist/components/questions/types/listen-and-speak-odd-one-out/register.js +1 -59
  211. package/dist/components/questions/types/listen-and-speak-odd-one-out/transform.js +1 -18
  212. package/dist/components/questions/types/listen-and-speak-question-list/ListenAndSpeakQuestionListClient.js +1 -26
  213. package/dist/components/questions/types/listen-and-speak-question-list/ListenAndSpeakQuestionListCreator.js +1 -256
  214. package/dist/components/questions/types/listen-and-speak-question-list/register.js +1 -81
  215. package/dist/components/questions/types/listen-and-speak-question-list/transform.js +1 -26
  216. package/dist/components/questions/types/listen-and-speak-with-story-images/ListenAndSpeakWithStoryImagesClient.js +1 -26
  217. package/dist/components/questions/types/listen-and-speak-with-story-images/ListenAndSpeakWithStoryImagesCreator.js +1 -230
  218. package/dist/components/questions/types/listen-and-speak-with-story-images/register.js +1 -56
  219. package/dist/components/questions/types/listen-and-speak-with-story-images/transform.js +1 -16
  220. package/dist/components/questions/types/look-picture-choose-correct-answer/LookPictureChooseCorrectAnswerClient.js +1 -72
  221. package/dist/components/questions/types/look-picture-choose-correct-answer/LookPictureChooseCorrectAnswerCreator.js +1 -230
  222. package/dist/components/questions/types/look-picture-choose-correct-answer/index.js +1 -1
  223. package/dist/components/questions/types/look-picture-choose-correct-answer/register.js +1 -66
  224. package/dist/components/questions/types/look-picture-choose-correct-answer/transform.js +1 -42
  225. package/dist/components/questions/types/look-picture-fill-blank-choose-answer/LookPictureFillBlankChooseAnswerClient.js +1 -96
  226. package/dist/components/questions/types/look-picture-fill-blank-choose-answer/LookPictureFillBlankChooseAnswerCreator.js +1 -238
  227. package/dist/components/questions/types/look-picture-fill-blank-choose-answer/index.js +1 -2
  228. package/dist/components/questions/types/look-picture-fill-blank-choose-answer/register.js +1 -76
  229. package/dist/components/questions/types/look-picture-fill-blank-choose-answer/transform.js +1 -19
  230. package/dist/components/questions/types/look-picture-fill-word-hint/LookPictureFillWordHintClient.js +1 -134
  231. package/dist/components/questions/types/look-picture-fill-word-hint/LookPictureFillWordHintCreator.js +1 -617
  232. package/dist/components/questions/types/look-picture-fill-word-hint/index.js +1 -2
  233. package/dist/components/questions/types/look-picture-fill-word-hint/register.js +1 -82
  234. package/dist/components/questions/types/look-picture-fill-word-hint/transform.js +1 -29
  235. package/dist/components/questions/types/match-by-writing-answer/MatchByWritingAnswerClient.js +1 -38
  236. package/dist/components/questions/types/match-by-writing-answer/MatchByWritingAnswerCreator.js +1 -359
  237. package/dist/components/questions/types/match-by-writing-answer/index.js +1 -3
  238. package/dist/components/questions/types/match-by-writing-answer/register.js +1 -58
  239. package/dist/components/questions/types/match-by-writing-answer/transform.js +1 -61
  240. package/dist/components/questions/types/read-and-color-objects/ReadAndColorObjectsClient.js +1 -16
  241. package/dist/components/questions/types/read-and-color-objects/ReadAndColorObjectsCreator.js +1 -23
  242. package/dist/components/questions/types/read-and-color-objects/index.js +1 -2
  243. package/dist/components/questions/types/read-and-color-objects/register.js +1 -3
  244. package/dist/components/questions/types/read-and-color-objects/transform.js +1 -36
  245. package/dist/components/questions/types/read-displayed-content/ReadDisplayedContentCreator.js +1 -125
  246. package/dist/components/questions/types/read-displayed-content/register.js +1 -64
  247. package/dist/components/questions/types/read-displayed-content/transform.js +1 -12
  248. package/dist/components/questions/types/read-passage-and-answer-questions/ReadPassageAndAnswerQuestionsClient.js +1 -64
  249. package/dist/components/questions/types/read-passage-and-answer-questions/ReadPassageAndAnswerQuestionsCreator.js +1 -511
  250. package/dist/components/questions/types/read-passage-and-answer-questions/index.js +1 -2
  251. package/dist/components/questions/types/read-passage-and-answer-questions/register.js +1 -58
  252. package/dist/components/questions/types/read-passage-and-answer-questions/transform.js +1 -28
  253. package/dist/components/questions/types/speaking-conversation/SpeakingConversationCreator.js +1 -373
  254. package/dist/components/questions/types/speaking-conversation/SpeakingConversationPreviewClient.js +1 -41
  255. package/dist/components/questions/types/speaking-conversation/register.js +1 -110
  256. package/dist/components/questions/types/speaking-conversation/transform.js +1 -34
  257. package/dist/components/questions/types/speaking-cue-card/SpeakingCueCardCreator.js +1 -74
  258. package/dist/components/questions/types/speaking-cue-card/register.js +1 -52
  259. package/dist/components/questions/types/speaking-cue-card/transform.js +1 -12
  260. package/dist/components/questions/types/speaking-describe-image/SpeakingDescribeImageClient.js +1 -10
  261. package/dist/components/questions/types/speaking-describe-image/SpeakingDescribeImageCreator.js +1 -161
  262. package/dist/components/questions/types/speaking-describe-image/index.js +1 -2
  263. package/dist/components/questions/types/speaking-describe-image/register.js +1 -69
  264. package/dist/components/questions/types/speaking-describe-image/transform.js +1 -16
  265. package/dist/components/questions/types/spontaneous-qa/SpontaneousQACreator.js +1 -234
  266. package/dist/components/questions/types/spontaneous-qa/register.js +1 -93
  267. package/dist/components/questions/types/spontaneous-qa/transform.js +1 -34
  268. package/dist/components/questions/types/true-false/TrueFalseClient.js +1 -75
  269. package/dist/components/questions/types/true-false/TrueFalseCreator.js +1 -244
  270. package/dist/components/questions/types/true-false/index.js +1 -2
  271. package/dist/components/questions/types/true-false/register.js +1 -77
  272. package/dist/components/questions/types/true-false/transform.js +1 -32
  273. package/dist/components/questions/types/word-fill-paragraph/WordFillParagraphClient.js +1 -233
  274. package/dist/components/questions/types/word-fill-paragraph/WordFillParagraphCreator.js +1 -631
  275. package/dist/components/questions/types/word-fill-paragraph/WordFillParagraphWrapper.js +1 -28
  276. package/dist/components/questions/types/word-fill-paragraph/index.js +1 -2
  277. package/dist/components/questions/types/word-fill-paragraph/register.js +1 -136
  278. package/dist/components/questions/types/word-fill-paragraph/transform.js +1 -56
  279. package/dist/components/questions/types/word-fill-structured-form/WordFillStructuredFormClient.js +1 -138
  280. package/dist/components/questions/types/word-fill-structured-form/WordFillStructuredFormCreator.js +1 -261
  281. package/dist/components/questions/types/word-fill-structured-form/index.js +1 -2
  282. package/dist/components/questions/types/word-fill-structured-form/register.js +1 -67
  283. package/dist/components/questions/types/word-fill-structured-form/transform.js +1 -40
  284. package/dist/components/questions/types/word-ordering/WordOrderingClient.js +1 -84
  285. package/dist/components/questions/types/word-ordering/WordOrderingCreator.js +1 -192
  286. package/dist/components/questions/types/word-ordering/index.js +1 -2
  287. package/dist/components/questions/types/word-ordering/register.js +1 -46
  288. package/dist/components/questions/types/word-ordering/transform.js +1 -24
  289. package/dist/components/questions/types/write-a-short-letter/WriteAShortLetterClient.js +1 -98
  290. package/dist/components/questions/types/write-a-short-letter/WriteAShortLetterCreator.js +1 -320
  291. package/dist/components/questions/types/write-a-short-letter/index.js +1 -2
  292. package/dist/components/questions/types/write-a-short-letter/register.js +1 -68
  293. package/dist/components/questions/types/write-a-short-letter/transform.js +1 -25
  294. package/dist/components/questions/types/write-correct-verb-form/WriteCorrectVerbFormClient.js +1 -61
  295. package/dist/components/questions/types/write-correct-verb-form/WriteCorrectVerbFormCreator.js +1 -196
  296. package/dist/components/questions/types/write-correct-verb-form/index.js +1 -2
  297. package/dist/components/questions/types/write-correct-verb-form/register.js +1 -62
  298. package/dist/components/questions/types/write-correct-verb-form/transform.js +1 -17
  299. package/dist/components/questions/types/write-sentences/WriteSentencesClient.js +1 -22
  300. package/dist/components/questions/types/write-sentences/WriteSentencesCreator.js +1 -174
  301. package/dist/components/questions/types/write-sentences/index.js +1 -2
  302. package/dist/components/questions/types/write-sentences/register.js +1 -58
  303. package/dist/components/questions/types/write-sentences/transform.js +1 -28
  304. package/dist/components/questions/types/write-short-paragraph/WriteShortParagraphClient.js +1 -96
  305. package/dist/components/questions/types/write-short-paragraph/WriteShortParagraphCreator.js +1 -161
  306. package/dist/components/questions/types/write-short-paragraph/index.js +1 -2
  307. package/dist/components/questions/types/write-short-paragraph/register.js +1 -4
  308. package/dist/components/questions/types/write-short-paragraph/transform.js +1 -21
  309. package/dist/components/questions/viewer/QuestionGroupViewer.js +1 -36
  310. package/dist/components/questions/viewer/QuestionViewer.js +1 -446
  311. package/dist/components/questions/viewer/index.js +1 -2
  312. package/dist/components/results/ResultReviewPageContainer.js +1 -98
  313. package/dist/components/results/ReviewQuestionRenderer.js +1 -72
  314. package/dist/components/results/index.js +1 -2
  315. package/dist/components/results/result-review.utils.js +1 -6
  316. package/dist/components/results/review-data.js +1 -150
  317. package/dist/components/results/review-renderer.utils.js +1 -97
  318. package/dist/components/results/review-types.js +1 -1
  319. package/dist/components/themes/cambridge-yle/CambridgeYleAudioPlayer.js +1 -138
  320. package/dist/components/themes/cambridge-yle/CambridgeYleBottomNav.js +1 -12
  321. package/dist/components/themes/cambridge-yle/CambridgeYleExamLayout.js +1 -18
  322. package/dist/components/themes/cambridge-yle/CambridgeYleExampleText.js +1 -11
  323. package/dist/components/themes/cambridge-yle/CambridgeYleHeader.js +1 -11
  324. package/dist/components/themes/cambridge-yle/CambridgeYleInstructionBanner.js +1 -9
  325. package/dist/components/themes/cambridge-yle/CambridgeYleNavButton.js +1 -13
  326. package/dist/components/themes/cambridge-yle/CambridgeYlePartBanner.js +1 -8
  327. package/dist/components/themes/cambridge-yle/CambridgeYleProgressBar.js +1 -6
  328. package/dist/components/themes/cambridge-yle/CambridgeYleQuestionCard.js +1 -5
  329. package/dist/components/themes/cambridge-yle/CambridgeYleQuestionCardFullWidth.js +1 -9
  330. package/dist/components/themes/cambridge-yle/CambridgeYleSidebar.js +1 -41
  331. package/dist/components/themes/cambridge-yle/CambridgeYleTimer.js +1 -25
  332. package/dist/components/themes/cambridge-yle/index.js +1 -13
  333. package/dist/components/themes/english-certification/EcAnswerTheQuestion.js +1 -24
  334. package/dist/components/themes/english-certification/EcMatchByWritingAnswer.js +1 -88
  335. package/dist/components/themes/english-certification/EcWordFillParagraph.js +1 -55
  336. package/dist/components/themes/english-certification/EcWordFillStructuredForm.js +1 -156
  337. package/dist/components/themes/english-certification/EcWritingTask.js +1 -34
  338. package/dist/components/themes/english-certification/EnglishCertificationAudioPlayer.js +1 -114
  339. package/dist/components/themes/english-certification/EnglishCertificationBrand.js +1 -11
  340. package/dist/components/themes/english-certification/EnglishCertificationExamLayout.js +1 -21
  341. package/dist/components/themes/english-certification/EnglishCertificationFlagButton.js +1 -15
  342. package/dist/components/themes/english-certification/EnglishCertificationFooterBar.js +1 -19
  343. package/dist/components/themes/english-certification/EnglishCertificationGroupedQuestion.js +1 -148
  344. package/dist/components/themes/english-certification/EnglishCertificationHeader.js +1 -31
  345. package/dist/components/themes/english-certification/EnglishCertificationNavigationPanel.js +1 -71
  346. package/dist/components/themes/english-certification/EnglishCertificationOptionSelector.js +1 -33
  347. package/dist/components/themes/english-certification/EnglishCertificationPassagePanel.js +1 -16
  348. package/dist/components/themes/english-certification/EnglishCertificationQuestionCard.js +1 -22
  349. package/dist/components/themes/english-certification/EnglishCertificationQuestionItem.js +1 -37
  350. package/dist/components/themes/english-certification/EnglishCertificationQuestionRenderer.js +1 -72
  351. package/dist/components/themes/english-certification/EnglishCertificationReadingSection.js +1 -90
  352. package/dist/components/themes/english-certification/EnglishCertificationSingleQuestion.js +1 -18
  353. package/dist/components/themes/english-certification/EnglishCertificationSingleQuestionList.js +1 -29
  354. package/dist/components/themes/english-certification/english-certification-theme.js +1 -58
  355. package/dist/components/themes/english-certification/grouped-question-utils.js +1 -218
  356. package/dist/components/themes/english-certification/index.js +1 -21
  357. package/dist/components/themes/index.js +1 -6
  358. package/dist/components/themes/summer-sky/SummerSkyAudioPlayer.js +1 -170
  359. package/dist/components/themes/summer-sky/SummerSkyLayout.js +1 -221
  360. package/dist/components/themes/summer-sky/SummerSkySubmitModal.js +1 -18
  361. package/dist/components/themes/summer-sky/SummerSkyWaitingRoom.js +1 -194
  362. package/dist/components/themes/types.js +1 -1
  363. package/dist/components/ui/alert-dialog.js +1 -26
  364. package/dist/components/ui/alert.js +1 -22
  365. package/dist/components/ui/avatar.js +1 -12
  366. package/dist/components/ui/badge.js +1 -38
  367. package/dist/components/ui/button.js +1 -35
  368. package/dist/components/ui/calendar.js +1 -76
  369. package/dist/components/ui/card.js +1 -16
  370. package/dist/components/ui/carousel.js +1 -91
  371. package/dist/components/ui/checkbox.js +1 -9
  372. package/dist/components/ui/collapsible.js +1 -13
  373. package/dist/components/ui/command.js +1 -34
  374. package/dist/components/ui/confirm-dialog.js +1 -49
  375. package/dist/components/ui/dialog.js +1 -23
  376. package/dist/components/ui/drawer.js +1 -35
  377. package/dist/components/ui/dropdown-menu.js +1 -33
  378. package/dist/components/ui/file-upload.js +1 -155
  379. package/dist/components/ui/form.js +1 -62
  380. package/dist/components/ui/hover-card.js +1 -10
  381. package/dist/components/ui/image-preview.js +1 -29
  382. package/dist/components/ui/input.js +1 -8
  383. package/dist/components/ui/label.js +1 -9
  384. package/dist/components/ui/language-switcher.js +1 -15
  385. package/dist/components/ui/multi-select.js +1 -90
  386. package/dist/components/ui/points-input.js +1 -33
  387. package/dist/components/ui/popover.js +1 -26
  388. package/dist/components/ui/progress.js +1 -16
  389. package/dist/components/ui/radio-group.js +1 -12
  390. package/dist/components/ui/scroll-area.js +1 -11
  391. package/dist/components/ui/select.js +1 -38
  392. package/dist/components/ui/separator.js +1 -8
  393. package/dist/components/ui/sheet.js +1 -40
  394. package/dist/components/ui/single-select.js +1 -76
  395. package/dist/components/ui/skeleton.js +1 -6
  396. package/dist/components/ui/switch.js +1 -8
  397. package/dist/components/ui/table.js +1 -20
  398. package/dist/components/ui/tabs.js +1 -17
  399. package/dist/components/ui/textarea.js +1 -8
  400. package/dist/components/ui/tooltip.js +1 -11
  401. package/dist/index.d.ts +3 -3
  402. package/dist/index.js +1 -19
  403. package/dist/mcp/config.js +1 -32
  404. package/dist/mcp/http-client.js +1 -48
  405. package/dist/mcp/index.js +1 -29
  406. package/dist/mcp/tools/_helpers.js +1 -25
  407. package/dist/mcp/tools/exams.js +1 -439
  408. package/dist/mcp/tools/index.js +1 -6
  409. package/dist/mcp/tools/results.js +1 -19
  410. package/dist/shared/constants/ApiConstant.js +1 -276
  411. package/dist/shared/constants/QueryKeyConstant.js +1 -112
  412. package/dist/shared/constants/exam-level.enum.js +1 -41
  413. package/dist/shared/constants/landings/placement-test.constants.js +1 -431
  414. package/dist/shared/constants/question-skills.js +1 -267
  415. package/dist/shared/constants/routes.js +1 -81
  416. package/dist/shared/index.d.ts +3 -0
  417. package/dist/shared/index.js +1 -7
  418. package/dist/shared/lib/hooks/index.js +1 -10
  419. package/dist/shared/lib/hooks/useAlertDialog.js +1 -57
  420. package/dist/shared/lib/hooks/useAudioPlayCounter.js +1 -30
  421. package/dist/shared/lib/hooks/useAudioPreview.js +1 -81
  422. package/dist/shared/lib/hooks/useAudioUpload.js +1 -24
  423. package/dist/shared/lib/hooks/useConfirmDialog.js +1 -89
  424. package/dist/shared/lib/hooks/useDebouncedCallback.js +1 -32
  425. package/dist/shared/lib/hooks/useDelayedAutoPlay.js +1 -12
  426. package/dist/shared/lib/hooks/useFileUpload.js +1 -24
  427. package/dist/shared/lib/hooks/useImageUrl.js +1 -5
  428. package/dist/shared/lib/hooks/usePresignedFileUrl.js +1 -10
  429. package/dist/shared/lib/hooks/useReactHookForm.js +1 -31
  430. package/dist/shared/lib/hooks/useToast.js +1 -62
  431. package/dist/shared/lib/i18n/index.js +1 -54
  432. package/dist/shared/lib/i18n/messages/en/admin.js +1 -2104
  433. package/dist/shared/lib/i18n/messages/en/auth.js +1 -86
  434. package/dist/shared/lib/i18n/messages/en/common.js +1 -140
  435. package/dist/shared/lib/i18n/messages/en/file-upload.js +1 -18
  436. package/dist/shared/lib/i18n/messages/en/student.js +1 -133
  437. package/dist/shared/lib/i18n/messages/en/terms.js +1 -37
  438. package/dist/shared/lib/i18n/messages/en.js +1 -15
  439. package/dist/shared/lib/i18n/messages/vi/admin.js +1 -2104
  440. package/dist/shared/lib/i18n/messages/vi/auth.js +1 -86
  441. package/dist/shared/lib/i18n/messages/vi/common.js +1 -140
  442. package/dist/shared/lib/i18n/messages/vi/file-upload.js +1 -18
  443. package/dist/shared/lib/i18n/messages/vi/student.js +1 -133
  444. package/dist/shared/lib/i18n/messages/vi/terms.js +1 -37
  445. package/dist/shared/lib/i18n/messages/vi.js +1 -15
  446. package/dist/shared/lib/i18n/types.js +1 -1
  447. package/dist/shared/lib/stores/examQuestionStore.js +1 -212
  448. package/dist/shared/lib/stores/localeStore.js +1 -10
  449. package/dist/shared/lib/utils/public-page.js +1 -44
  450. package/dist/shared/lib/utils/question-reverse-transform.d.ts +6 -0
  451. package/dist/shared/lib/utils/question-reverse-transform.js +1 -0
  452. package/dist/shared/lib/utils/question-transform-types.js +1 -1
  453. package/dist/shared/lib/utils/question-transform-validation.d.ts +6 -0
  454. package/dist/shared/lib/utils/question-transform-validation.js +1 -0
  455. package/dist/shared/lib/utils/question-transform.d.ts +6 -2
  456. package/dist/shared/lib/utils/question-transform.js +1 -174
  457. package/dist/shared/lib/utils.js +1 -168
  458. package/dist/shared/lib/validation/choose-correct-answer.validation.js +1 -111
  459. package/dist/shared/lib/validation/label-the-picture.validation.js +1 -19
  460. package/dist/shared/lib/validation/listen-and-choose-from-answer-group.validation.js +1 -46
  461. package/dist/shared/lib/validation/listen-and-choose-objects-in-scene.validation.js +1 -21
  462. package/dist/shared/lib/validation/listen-and-drag-objects-into-scene.validation.js +1 -34
  463. package/dist/shared/lib/validation/listen-and-speak-answer.validation.js +1 -40
  464. package/dist/shared/lib/validation/listen-and-speak-compare-images.validation.js +1 -45
  465. package/dist/shared/lib/validation/listen-and-speak-image-group.validation.js +1 -19
  466. package/dist/shared/lib/validation/listen-and-speak-info-exchange.validation.js +1 -39
  467. package/dist/shared/lib/validation/listen-and-speak-odd-one-out.validation.js +1 -32
  468. package/dist/shared/lib/validation/listen-and-speak-question-list.validation.js +1 -19
  469. package/dist/shared/lib/validation/listen-and-speak-with-story-images.validation.js +1 -28
  470. package/dist/shared/lib/validation/look-picture-choose-correct-answer.validation.js +1 -12
  471. package/dist/shared/lib/validation/look-picture-fill-blank-choose-answer.validation.js +1 -47
  472. package/dist/shared/lib/validation/read-and-color-objects.validation.js +1 -29
  473. package/dist/shared/lib/validation/read-displayed-content.validation.js +1 -28
  474. package/dist/shared/lib/validation/speaking-conversation.validation.js +1 -75
  475. package/dist/shared/lib/validation/speaking-describe-image.validation.js +1 -31
  476. package/dist/shared/lib/validation/spontaneous-qa.validation.js +1 -48
  477. package/dist/shared/lib/validation/word-fill-paragraph-default.validation.js +1 -38
  478. package/dist/shared/lib/validation/word-fill-paragraph-with-options.validation.js +1 -39
  479. package/dist/shared/lib/validation/word-fill-paragraph.validation.js +1 -43
  480. package/dist/shared/lib/validation/word-ordering.validation.js +1 -33
  481. package/dist/shared/types/branch.types.js +1 -6
  482. package/dist/shared/types/common.types.js +1 -50
  483. package/dist/shared/types/entities/exam-schedule.types.js +1 -5
  484. package/dist/shared/types/entities/exam.types.js +1 -1
  485. package/dist/shared/types/entities/question.types.js +1 -4
  486. package/dist/shared/types/entities/result.types.js +1 -4
  487. package/dist/shared/types/entities/user.types.js +1 -4
  488. package/dist/shared/types/exam-taking.types.js +1 -2
  489. package/dist/shared/types/history.types.js +1 -34
  490. package/dist/shared/types/index.js +1 -1
  491. package/dist/shared/types/questions/choose-correct-adjective.js +1 -4
  492. package/dist/shared/types/questions/choose-the-correct-answer.js +1 -9
  493. package/dist/shared/types/questions/fill-missing-words-in-grid.js +1 -11
  494. package/dist/shared/types/questions/index.js +1 -40
  495. package/dist/shared/types/questions/listen-and-speak-answer.js +1 -1
  496. package/dist/shared/types/questions/listen-and-speak-compare-images.js +1 -1
  497. package/dist/shared/types/questions/listen-and-speak-image-group.js +1 -1
  498. package/dist/shared/types/questions/listen-and-speak-info-exchange.js +1 -3
  499. package/dist/shared/types/questions/listen-and-speak-odd-one-out.js +1 -3
  500. package/dist/shared/types/questions/listen-and-speak-question-list.js +1 -1
  501. package/dist/shared/types/questions/listen-and-speak-with-story-images.js +1 -3
  502. package/dist/shared/types/questions/look-picture-choose-correct-answer.js +1 -5
  503. package/dist/shared/types/questions/look-picture-fill-blank-choose-answer.js +1 -9
  504. package/dist/shared/types/questions/look-picture-fill-word-hint.js +1 -7
  505. package/dist/shared/types/questions/read-displayed-content.js +1 -1
  506. package/dist/shared/types/questions/speaking-conversation.js +1 -7
  507. package/dist/shared/types/questions/speaking-describe-image.js +1 -1
  508. package/dist/shared/types/questions/spontaneous-qa.js +1 -1
  509. package/dist/shared/types/questions/write-correct-verb-form.js +1 -12
  510. package/dist/shared/types/role.types.js +1 -1
  511. package/dist/shared/types/structure-management.js +1 -28
  512. package/dist/shared/types/student.types.js +1 -54
  513. package/dist/shared/types/teacher-dashboard-rooms.js +1 -2
  514. package/package.json +12 -3
@@ -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;