@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,431 +1 @@
1
- /**
2
- * Static content for /placement-test landing page.
3
- * Centralised here so Section components stay declarative & <500 lines each.
4
- */
5
- export const HOW_IT_WORKS_STEPS = [
6
- {
7
- id: 'step-1',
8
- number: '01',
9
- iconKey: 'form',
10
- image: '/images/landings/placement-test/step1.png',
11
- title: 'Điền thông tin',
12
- description: '30 giây, không cần email, không cần xác minh phức tạp.',
13
- },
14
- {
15
- id: 'step-2',
16
- number: '02',
17
- iconKey: 'headphones',
18
- image: '/images/landings/placement-test/step2.png',
19
- title: 'Làm bài 30 phút',
20
- description: 'Đầy đủ 4 kỹ năng: Nghe – Đọc – Ngữ pháp – Từ vựng.',
21
- },
22
- {
23
- id: 'step-3',
24
- number: '03',
25
- iconKey: 'ai',
26
- image: '/images/landings/placement-test/step3.png',
27
- title: 'AI chấm tự động',
28
- description: 'Công nghệ AI tiên tiến, phân tích chính xác từng kỹ năng.',
29
- },
30
- {
31
- id: 'step-4',
32
- number: '04',
33
- iconKey: 'chart',
34
- image: '/images/landings/placement-test/step4.png',
35
- title: 'Nhận kết quả & lộ trình',
36
- description: 'Quy đổi CEFR + đề xuất lớp học phù hợp ngay lập tức.',
37
- },
38
- ];
39
- export const USP_ITEMS = [
40
- {
41
- id: 'usp-1',
42
- iconKey: 'cambridge',
43
- image: '/images/landings/placement-test/why1-cambridge.png',
44
- tag: 'Đối tác Bạch kim',
45
- title: 'Chuẩn Cambridge YLE / KET / PET',
46
- description: 'Đối tác chính thức của Cambridge Assessment English với hơn 19 năm hợp tác. Đề thi bám sát format quốc tế mới nhất.',
47
- },
48
- {
49
- id: 'usp-2',
50
- iconKey: 'skills',
51
- image: '/images/landings/placement-test/why2-skills.png',
52
- tag: '4/4 Skills',
53
- title: 'Đánh giá 4 kỹ năng đầy đủ',
54
- description: 'Listening, Reading, Vocabulary, Grammar — không bỏ sót kỹ năng nào. Mỗi kỹ năng đều có báo cáo riêng và đề xuất luyện tập.',
55
- },
56
- {
57
- id: 'usp-3',
58
- iconKey: 'report',
59
- image: '/images/landings/placement-test/why3-report.png',
60
- tag: 'Visualized data',
61
- title: 'Báo cáo chi tiết & trực quan',
62
- description: 'Điểm theo từng kỹ năng, biểu đồ radar, heatmap mức độ thành thạo, so sánh với học sinh cùng độ tuổi trên toàn quốc.',
63
- },
64
- {
65
- id: 'usp-4',
66
- iconKey: 'roadmap',
67
- image: '/images/landings/placement-test/why4-roadmap.png',
68
- tag: '200+ chi nhánh',
69
- title: 'Lộ trình cá nhân hoá',
70
- description: 'AI đề xuất khoá học phù hợp tại 200+ chi nhánh Ocean Edu trên toàn quốc, dựa trên kết quả test và độ tuổi của bạn.',
71
- },
72
- ];
73
- /* ────────────────────────────────────────────────────────────────
74
- * SECTION 5 — Sample Report bullets
75
- * ──────────────────────────────────────────────────────────────── */
76
- export const SAMPLE_REPORT_BENEFITS = [
77
- 'Điểm chi tiết theo từng kỹ năng',
78
- 'Quy đổi sang khung CEFR (A1 → C2)',
79
- 'So sánh với học sinh cùng độ tuổi',
80
- 'Đề xuất lộ trình học cá nhân hoá',
81
- ];
82
- export const CEFR_LEVELS = [
83
- {
84
- name: 'Starters',
85
- level: 'PRE A1',
86
- color: '#0fcf9e',
87
- height: 200,
88
- description: 'Dành cho\nhọc sinh lớp 1-3',
89
- },
90
- {
91
- name: 'Movers',
92
- level: 'A1',
93
- color: '#17b28d',
94
- height: 250,
95
- description: 'Dành cho\nhọc sinh lớp 4-5',
96
- },
97
- {
98
- name: 'Flyers',
99
- level: 'A2',
100
- color: '#feb511',
101
- height: 300,
102
- description: 'Dành cho\nhọc sinh lớp 5-6',
103
- },
104
- {
105
- name: 'KET',
106
- level: 'A2 - B1',
107
- color: '#fc850f',
108
- height: 350,
109
- description: 'Dành cho\nhọc sinh THCS',
110
- },
111
- {
112
- name: 'PET',
113
- level: 'B1',
114
- color: '#489df9',
115
- height: 400,
116
- description: 'Dành cho\nhọc sinh THPT',
117
- },
118
- {
119
- name: 'IELTS',
120
- level: 'B2 - C1',
121
- color: '#1e70f6',
122
- height: 450,
123
- description: 'Chuẩn bị du học,\ndi cư',
124
- },
125
- ];
126
- /**
127
- * Ordered TOP → BOTTOM of the staircase, matching the infographic:
128
- * FOCUS (top, narrowest) → CHALLENGE (middle) → DISCOVERY (bottom, widest).
129
- */
130
- export const EQUIV_SCALE_TIERS = [
131
- {
132
- id: 'focus',
133
- label: 'FOCUS',
134
- ageRange: '11 – 18 years old',
135
- cambridge: 'Key for Schools',
136
- booksHeader: 'GENERAL ENGLISH',
137
- color: '#1aa6b7',
138
- colorDark: '#0e6b78',
139
- colorLight: '#42c4d2',
140
- rows: [
141
- {
142
- id: 'f-4',
143
- gse: '58-70',
144
- cefr: 'B1+ to B2',
145
- book: 'FOCUS 2nd Edition Student Book & Workbook Level 4',
146
- },
147
- {
148
- id: 'f-3',
149
- gse: '42-58',
150
- cefr: 'A2+ to B1+',
151
- book: 'FOCUS 2nd Edition Student Book & Workbook Level 3',
152
- },
153
- {
154
- id: 'f-2',
155
- gse: '38-48',
156
- cefr: 'A2+ to B1',
157
- book: 'FOCUS 2nd Edition Student Book & Workbook Level 2',
158
- },
159
- {
160
- id: 'f-1',
161
- gse: '32-40',
162
- cefr: 'A2 to A2+',
163
- book: 'FOCUS 2nd Edition Student Book & Workbook Level 1',
164
- },
165
- ],
166
- },
167
- {
168
- id: 'challenge',
169
- label: 'CHALLENGE',
170
- ageRange: '6 – 11 years old',
171
- cambridge: 'Flyers / Movers / Starters',
172
- booksHeader: '',
173
- color: '#1d8fe1',
174
- colorDark: '#0f5fa4',
175
- colorLight: '#4aacef',
176
- rows: [
177
- {
178
- id: 'c-6',
179
- gse: '37-45',
180
- cefr: 'A2+ to B1',
181
- book: 'English Code Student Book & Workbook Level 5A & 5B',
182
- },
183
- {
184
- id: 'c-5',
185
- gse: '31-40',
186
- cefr: 'A2 to A2+',
187
- book: 'English Code Student Book & Workbook Level 4A & 4B',
188
- },
189
- {
190
- id: 'c-4',
191
- gse: '25-35',
192
- cefr: 'A1 to A2',
193
- book: 'English Code Student Book & Workbook Level 3A & 3B',
194
- },
195
- {
196
- id: 'c-3',
197
- gse: '20-30',
198
- cefr: '<A1 to A2',
199
- book: 'English Code Student Book & Workbook Level 2A & 2B',
200
- },
201
- {
202
- id: 'c-2',
203
- gse: '12-24',
204
- cefr: '<A1 to A1',
205
- book: 'English Code Student Book & Workbook Level 1A & 1B',
206
- },
207
- {
208
- id: 'c-1',
209
- gse: '10-17',
210
- cefr: '<A1',
211
- book: 'English Code Student Book & Workbook Staters A & B',
212
- },
213
- ],
214
- },
215
- {
216
- id: 'discovery',
217
- label: 'DISCOVERY',
218
- ageRange: '3 – 6 years old',
219
- cambridge: 'English for Pre-School',
220
- booksHeader: '',
221
- color: '#e0337a',
222
- colorDark: '#a3215a',
223
- colorLight: '#ef5d97',
224
- rows: [
225
- {
226
- id: 'd-1',
227
- gse: '10-19',
228
- cefr: '<A1',
229
- book: 'My Disney Stars and Friends Student Book and Workbook Level 3A & 3B',
230
- },
231
- {
232
- id: 'd-2',
233
- gse: '10-19',
234
- cefr: '<A1',
235
- book: 'My Disney Stars and Friends Student Book and Workbook Level 2A & 2B',
236
- },
237
- {
238
- id: 'd-3',
239
- gse: '10-19',
240
- cefr: '<A1',
241
- book: 'My Disney Stars and Friends Student Book and Workbook Level 1A & 1B',
242
- },
243
- {
244
- id: 'd-4',
245
- gse: '10-19',
246
- cefr: '<A1',
247
- book: 'My Little Island Student Book and Workbook Level 1A & 1B',
248
- },
249
- {
250
- id: 'd-5',
251
- gse: '10-19',
252
- cefr: '<A1',
253
- book: 'New Big Fun Student Book and Workbook Level 2A & 2B',
254
- },
255
- {
256
- id: 'd-6',
257
- gse: '10-19',
258
- cefr: '<A1',
259
- book: 'New Big Fun Student Book and Workbook Level 1A & 1B',
260
- },
261
- ],
262
- },
263
- ];
264
- export const EQUIV_PODIUMS = [
265
- {
266
- id: 'p-ielts-top',
267
- side: 'left',
268
- tier: 'tall',
269
- lines: ['IELTS 8.0 - 8.5', 'IELTS 7.0 - 7.5'],
270
- },
271
- {
272
- id: 'p-toeic-top',
273
- side: 'right',
274
- tier: 'tall',
275
- lines: ['TOEIC 945 - 965'],
276
- },
277
- {
278
- id: 'p-ielts-bot',
279
- side: 'left',
280
- tier: 'short',
281
- lines: ['IELTS 5.5 - 6.5', 'IELTS 4.5 - 5.0', 'IELTS 4.0', 'PRE-IELTS'],
282
- },
283
- {
284
- id: 'p-toeic-bot',
285
- side: 'right',
286
- tier: 'short',
287
- lines: [
288
- 'TOEIC 785 - 940',
289
- 'TOEIC 550 - 665',
290
- 'TOEIC 225 - 545',
291
- 'TOEIC 120 - 170',
292
- ],
293
- },
294
- ];
295
- export const PT_TESTIMONIALS = [
296
- {
297
- id: 't-1',
298
- name: 'Nguyễn Minh An',
299
- role: 'Học sinh lớp 6',
300
- quote: 'Bài test rất giống đề thi Cambridge thật. Em biết được mình yếu phần nào để tập trung ôn luyện.',
301
- avatar: '/images/landing/testimonials/hoc vien.jpg',
302
- rating: 5,
303
- },
304
- {
305
- id: 't-2',
306
- name: 'Chị Trần Thu Hà',
307
- role: 'Phụ huynh',
308
- quote: 'Báo cáo chi tiết giúp tôi hiểu rõ trình độ của con. Lộ trình đề xuất rất phù hợp với khả năng và lịch học.',
309
- avatar: '/images/landing/testimonials/phu huynh 1.jpg',
310
- rating: 5,
311
- },
312
- {
313
- id: 't-3',
314
- name: 'Cô Phạm Thanh Hương',
315
- role: 'Giáo viên Ocean Edu',
316
- quote: 'Tôi dùng kết quả placement test để chia lớp. AI chấm rất chính xác và khách quan, tiết kiệm thời gian rất nhiều.',
317
- avatar: '/images/landing/testimonials/giao vien.jpg',
318
- rating: 5,
319
- },
320
- ];
321
- /* ────────────────────────────────────────────────────────────────
322
- * Đối tác khảo thí — exam-assessment partners shown on /placement-test
323
- * ──────────────────────────────────────────────────────────────── */
324
- export const PT_PARTNERS = [
325
- { name: 'British Council', logo: '/images/partners/british-council.svg' },
326
- {
327
- name: 'Cambridge Assessment English',
328
- logo: '/images/partners/cambridge-assessment.svg',
329
- },
330
- { name: 'Pearson', logo: '/images/partners/pearson.png' },
331
- { name: 'ETS', logo: '/images/partners/ets.svg' },
332
- ];
333
- export const FAQ_ITEMS = [
334
- {
335
- id: 'faq-1',
336
- question: 'Việc tham gia bài test này có mất phí không?',
337
- answer: 'Bài test được cung cấp hoàn toàn miễn phí nhằm giúp học viên đánh giá năng lực tiếng Anh hiện tại một cách khách quan trước khi lựa chọn lộ trình học phù hợp. Bạn có thể tham gia lại khi cần để theo dõi sự tiến bộ của mình.',
338
- },
339
- {
340
- id: 'faq-2',
341
- question: 'Thời gian hoàn thành bài test là bao lâu?',
342
- answer: 'Thời lượng bài test dao động từ khoảng 30–60 phút tùy theo cấp độ và loại bài thi.\n- Với các bài test dành cho học viên nhỏ tuổi (Kindy), bài kiểm tra chủ yếu tập trung vào phản xạ nghe – nói nên thời gian sẽ ngắn hơn.\n- Từ cấp độ Kids trở lên, bài test sẽ đánh giá đầy đủ các kỹ năng như Listening, Reading, Vocabulary và Grammar.\n- Các bài test học thuật như IELTS sẽ có thời lượng dài hơn để đảm bảo đánh giá chính xác năng lực.',
343
- },
344
- {
345
- id: 'faq-3',
346
- question: 'Tôi có cần đăng ký tài khoản để tham gia bài test không?',
347
- answer: 'Bạn không cần tạo tài khoản theo quy trình phức tạp. Chỉ cần điền một số thông tin cơ bản như họ tên, số điện thoại và chi nhánh mong muốn, hệ thống sẽ tự động ghi nhận thông tin và gửi kết quả bài test đến bạn sau khi hoàn thành.',
348
- },
349
- {
350
- id: 'faq-4',
351
- question: 'Kết quả bài test có đảm bảo độ chính xác không?',
352
- answer: 'Bài test được chấm bằng hệ thống AI đã được hiệu chuẩn dựa trên hơn 500.000 lượt đánh giá năng lực tiếng Anh. Kết quả có độ tương đồng cao với các tiêu chuẩn đánh giá quốc tế, giúp phản ánh tương đối chính xác trình độ hiện tại của học viên.',
353
- },
354
- {
355
- id: 'faq-5',
356
- question: 'Khi hết giờ thì sao?',
357
- answer: 'Khi thời gian làm bài kết thúc, hệ thống sẽ tự động lưu và nộp bài để đảm bảo kết quả của bạn được ghi nhận đầy đủ.',
358
- },
359
- {
360
- id: 'faq-6',
361
- question: 'Thiết bị nào được khuyến khích sử dụng khi làm bài?',
362
- answer: 'Laptop hoặc máy tính được khuyến khích sử dụng để đảm bảo trải nghiệm làm bài ổn định và đầy đủ tính năng hơn, đặc biệt với các phần nghe hoặc bài test có thời lượng dài.',
363
- },
364
- {
365
- id: 'faq-7',
366
- question: 'Kết quả bài test sẽ được cập nhật sau bao lâu?',
367
- answer: 'Kết quả bài test sẽ hiển thị ngay sau khi hoàn thành với phiếu đánh giá kết quả phân tích từng câu, đánh giá tổng quát năng lực hiện tại và tư vấn lộ trình cá nhân hóa phù hợp với từng học viên.',
368
- },
369
- ];
370
- /* ────────────────────────────────────────────────────────────────
371
- * Hero trust badges
372
- * ──────────────────────────────────────────────────────────────── */
373
- /**
374
- * `iconKey` is resolved to a real Lucide SVG icon inside `pt-hero-section.tsx`.
375
- * Using a key (instead of a JSX node) keeps this constants file framework-agnostic.
376
- */
377
- export const HERO_TRUST_BADGES = [
378
- { iconKey: 'clock', text: '30 phút' },
379
- { iconKey: 'target', text: '4 kỹ năng' },
380
- { iconKey: 'bot', text: 'Chấm bằng AI' },
381
- ];
382
- export const EXAM_TYPES = [
383
- {
384
- value: 'starters',
385
- label: 'Cambridge Starters (Pre-A1)',
386
- description: 'Học sinh lớp 1-3',
387
- },
388
- {
389
- value: 'movers',
390
- label: 'Cambridge Movers (A1)',
391
- description: 'Học sinh lớp 4-5',
392
- },
393
- {
394
- value: 'flyers',
395
- label: 'Cambridge Flyers (A2)',
396
- description: 'Học sinh lớp 5-6',
397
- },
398
- {
399
- value: 'ket',
400
- label: 'Cambridge KET (A2-B1)',
401
- description: 'Học sinh THCS',
402
- },
403
- {
404
- value: 'pet',
405
- label: 'Cambridge PET (B1)',
406
- description: 'Học sinh THPT',
407
- },
408
- {
409
- value: 'ielts',
410
- label: 'IELTS (B2-C1)',
411
- description: 'Chuẩn bị du học',
412
- },
413
- ];
414
- /* ────────────────────────────────────────────────────────────────
415
- * Age groups (kept for backward compatibility / legacy usage)
416
- * ──────────────────────────────────────────────────────────────── */
417
- export const AGE_GROUPS = [
418
- { value: '6-10', label: '6-10 tuổi' },
419
- { value: '11-14', label: '11-14 tuổi' },
420
- { value: '15-18', label: '15-18 tuổi' },
421
- { value: '18+', label: 'Trên 18 tuổi' },
422
- ];
423
- /**
424
- * Map age group → suggested CEFR level for backend (compatible with existing LEAD_LEVELS).
425
- */
426
- export const AGE_GROUP_TO_LEVEL = {
427
- '6-10': 'starters',
428
- '11-14': 'flyers',
429
- '15-18': 'pet',
430
- '18+': 'ielts',
431
- };
1
+ export const HOW_IT_WORKS_STEPS=[{id:"step-1",number:"01",iconKey:"form",image:"/images/landings/placement-test/step1.png",title:"Điền thông tin",description:"30 giây, không cần email, không cần xác minh phức tạp."},{id:"step-2",number:"02",iconKey:"headphones",image:"/images/landings/placement-test/step2.png",title:"Làm bài 30 phút",description:"Đầy đủ 4 kỹ năng: Nghe – Đọc – Ngữ pháp – Từ vựng."},{id:"step-3",number:"03",iconKey:"ai",image:"/images/landings/placement-test/step3.png",title:"AI chấm tự động",description:"Công nghệ AI tiên tiến, phân tích chính xác từng kỹ năng."},{id:"step-4",number:"04",iconKey:"chart",image:"/images/landings/placement-test/step4.png",title:"Nhận kết quả & lộ trình",description:"Quy đổi CEFR + đề xuất lớp học phù hợp ngay lập tức."}];export const USP_ITEMS=[{id:"usp-1",iconKey:"cambridge",image:"/images/landings/placement-test/why1-cambridge.png",tag:"Đối tác Bạch kim",title:"Chuẩn Cambridge YLE / KET / PET",description:"Đối tác chính thức của Cambridge Assessment English với hơn 19 năm hợp tác. Đề thi bám sát format quốc tế mới nhất."},{id:"usp-2",iconKey:"skills",image:"/images/landings/placement-test/why2-skills.png",tag:"4/4 Skills",title:"Đánh giá 4 kỹ năng đầy đủ",description:"Listening, Reading, Vocabulary, Grammar — không bỏ sót kỹ năng nào. Mỗi kỹ năng đều có báo cáo riêng và đề xuất luyện tập."},{id:"usp-3",iconKey:"report",image:"/images/landings/placement-test/why3-report.png",tag:"Visualized data",title:"Báo cáo chi tiết & trực quan",description:"Điểm theo từng kỹ năng, biểu đồ radar, heatmap mức độ thành thạo, so sánh với học sinh cùng độ tuổi trên toàn quốc."},{id:"usp-4",iconKey:"roadmap",image:"/images/landings/placement-test/why4-roadmap.png",tag:"200+ chi nhánh",title:"Lộ trình cá nhân hoá",description:"AI đề xuất khoá học phù hợp tại 200+ chi nhánh Ocean Edu trên toàn quốc, dựa trên kết quả test và độ tuổi của bạn."}];export const SAMPLE_REPORT_BENEFITS=["Điểm chi tiết theo từng kỹ năng","Quy đổi sang khung CEFR (A1 → C2)","So sánh với học sinh cùng độ tuổi","Đề xuất lộ trình học cá nhân hoá"];export const CEFR_LEVELS=[{name:"Starters",level:"PRE A1",color:"#0fcf9e",height:200,description:"Dành cho\nhọc sinh lớp 1-3"},{name:"Movers",level:"A1",color:"#17b28d",height:250,description:"Dành cho\nhọc sinh lớp 4-5"},{name:"Flyers",level:"A2",color:"#feb511",height:300,description:"Dành cho\nhọc sinh lớp 5-6"},{name:"KET",level:"A2 - B1",color:"#fc850f",height:350,description:"Dành cho\nhọc sinh THCS"},{name:"PET",level:"B1",color:"#489df9",height:400,description:"Dành cho\nhọc sinh THPT"},{name:"IELTS",level:"B2 - C1",color:"#1e70f6",height:450,description:"Chuẩn bị du học,\ndi cư"}];export const EQUIV_SCALE_TIERS=[{id:"focus",label:"FOCUS",ageRange:"11 – 18 years old",cambridge:"Key for Schools",booksHeader:"GENERAL ENGLISH",color:"#1aa6b7",colorDark:"#0e6b78",colorLight:"#42c4d2",rows:[{id:"f-4",gse:"58-70",cefr:"B1+ to B2",book:"FOCUS 2nd Edition Student Book & Workbook Level 4"},{id:"f-3",gse:"42-58",cefr:"A2+ to B1+",book:"FOCUS 2nd Edition Student Book & Workbook Level 3"},{id:"f-2",gse:"38-48",cefr:"A2+ to B1",book:"FOCUS 2nd Edition Student Book & Workbook Level 2"},{id:"f-1",gse:"32-40",cefr:"A2 to A2+",book:"FOCUS 2nd Edition Student Book & Workbook Level 1"}]},{id:"challenge",label:"CHALLENGE",ageRange:"6 – 11 years old",cambridge:"Flyers / Movers / Starters",booksHeader:"",color:"#1d8fe1",colorDark:"#0f5fa4",colorLight:"#4aacef",rows:[{id:"c-6",gse:"37-45",cefr:"A2+ to B1",book:"English Code Student Book & Workbook Level 5A & 5B"},{id:"c-5",gse:"31-40",cefr:"A2 to A2+",book:"English Code Student Book & Workbook Level 4A & 4B"},{id:"c-4",gse:"25-35",cefr:"A1 to A2",book:"English Code Student Book & Workbook Level 3A & 3B"},{id:"c-3",gse:"20-30",cefr:"<A1 to A2",book:"English Code Student Book & Workbook Level 2A & 2B"},{id:"c-2",gse:"12-24",cefr:"<A1 to A1",book:"English Code Student Book & Workbook Level 1A & 1B"},{id:"c-1",gse:"10-17",cefr:"<A1",book:"English Code Student Book & Workbook Staters A & B"}]},{id:"discovery",label:"DISCOVERY",ageRange:"3 – 6 years old",cambridge:"English for Pre-School",booksHeader:"",color:"#e0337a",colorDark:"#a3215a",colorLight:"#ef5d97",rows:[{id:"d-1",gse:"10-19",cefr:"<A1",book:"My Disney Stars and Friends Student Book and Workbook Level 3A & 3B"},{id:"d-2",gse:"10-19",cefr:"<A1",book:"My Disney Stars and Friends Student Book and Workbook Level 2A & 2B"},{id:"d-3",gse:"10-19",cefr:"<A1",book:"My Disney Stars and Friends Student Book and Workbook Level 1A & 1B"},{id:"d-4",gse:"10-19",cefr:"<A1",book:"My Little Island Student Book and Workbook Level 1A & 1B"},{id:"d-5",gse:"10-19",cefr:"<A1",book:"New Big Fun Student Book and Workbook Level 2A & 2B"},{id:"d-6",gse:"10-19",cefr:"<A1",book:"New Big Fun Student Book and Workbook Level 1A & 1B"}]}];export const EQUIV_PODIUMS=[{id:"p-ielts-top",side:"left",tier:"tall",lines:["IELTS 8.0 - 8.5","IELTS 7.0 - 7.5"]},{id:"p-toeic-top",side:"right",tier:"tall",lines:["TOEIC 945 - 965"]},{id:"p-ielts-bot",side:"left",tier:"short",lines:["IELTS 5.5 - 6.5","IELTS 4.5 - 5.0","IELTS 4.0","PRE-IELTS"]},{id:"p-toeic-bot",side:"right",tier:"short",lines:["TOEIC 785 - 940","TOEIC 550 - 665","TOEIC 225 - 545","TOEIC 120 - 170"]}];export const PT_TESTIMONIALS=[{id:"t-1",name:"Nguyễn Minh An",role:"Học sinh lớp 6",quote:"Bài test rất giống đề thi Cambridge thật. Em biết được mình yếu phần nào để tập trung ôn luyện.",avatar:"/images/landing/testimonials/hoc vien.jpg",rating:5},{id:"t-2",name:"Chị Trần Thu Hà",role:"Phụ huynh",quote:"Báo cáo chi tiết giúp tôi hiểu rõ trình độ của con. Lộ trình đề xuất rất phù hợp với khả năng và lịch học.",avatar:"/images/landing/testimonials/phu huynh 1.jpg",rating:5},{id:"t-3",name:"Cô Phạm Thanh Hương",role:"Giáo viên Ocean Edu",quote:"Tôi dùng kết quả placement test để chia lớp. AI chấm rất chính xác và khách quan, tiết kiệm thời gian rất nhiều.",avatar:"/images/landing/testimonials/giao vien.jpg",rating:5}];export const PT_PARTNERS=[{name:"British Council",logo:"/images/partners/british-council.svg"},{name:"Cambridge Assessment English",logo:"/images/partners/cambridge-assessment.svg"},{name:"Pearson",logo:"/images/partners/pearson.png"},{name:"ETS",logo:"/images/partners/ets.svg"}];export const FAQ_ITEMS=[{id:"faq-1",question:"Việc tham gia bài test này có mất phí không?",answer:"Bài test được cung cấp hoàn toàn miễn phí nhằm giúp học viên đánh giá năng lực tiếng Anh hiện tại một cách khách quan trước khi lựa chọn lộ trình học phù hợp. Bạn có thể tham gia lại khi cần để theo dõi sự tiến bộ của mình."},{id:"faq-2",question:"Thời gian hoàn thành bài test là bao lâu?",answer:"Thời lượng bài test dao động từ khoảng 30–60 phút tùy theo cấp độ và loại bài thi.\n- Với các bài test dành cho học viên nhỏ tuổi (Kindy), bài kiểm tra chủ yếu tập trung vào phản xạ nghe – nói nên thời gian sẽ ngắn hơn.\n- Từ cấp độ Kids trở lên, bài test sẽ đánh giá đầy đủ các kỹ năng như Listening, Reading, Vocabulary và Grammar.\n- Các bài test học thuật như IELTS sẽ có thời lượng dài hơn để đảm bảo đánh giá chính xác năng lực."},{id:"faq-3",question:"Tôi có cần đăng ký tài khoản để tham gia bài test không?",answer:"Bạn không cần tạo tài khoản theo quy trình phức tạp. Chỉ cần điền một số thông tin cơ bản như họ tên, số điện thoại và chi nhánh mong muốn, hệ thống sẽ tự động ghi nhận thông tin và gửi kết quả bài test đến bạn sau khi hoàn thành."},{id:"faq-4",question:"Kết quả bài test có đảm bảo độ chính xác không?",answer:"Bài test được chấm bằng hệ thống AI đã được hiệu chuẩn dựa trên hơn 500.000 lượt đánh giá năng lực tiếng Anh. Kết quả có độ tương đồng cao với các tiêu chuẩn đánh giá quốc tế, giúp phản ánh tương đối chính xác trình độ hiện tại của học viên."},{id:"faq-5",question:"Khi hết giờ thì sao?",answer:"Khi thời gian làm bài kết thúc, hệ thống sẽ tự động lưu và nộp bài để đảm bảo kết quả của bạn được ghi nhận đầy đủ."},{id:"faq-6",question:"Thiết bị nào được khuyến khích sử dụng khi làm bài?",answer:"Laptop hoặc máy tính được khuyến khích sử dụng để đảm bảo trải nghiệm làm bài ổn định và đầy đủ tính năng hơn, đặc biệt với các phần nghe hoặc bài test có thời lượng dài."},{id:"faq-7",question:"Kết quả bài test sẽ được cập nhật sau bao lâu?",answer:"Kết quả bài test sẽ hiển thị ngay sau khi hoàn thành với phiếu đánh giá kết quả phân tích từng câu, đánh giá tổng quát năng lực hiện tại và tư vấn lộ trình cá nhân hóa phù hợp với từng học viên."}];export const HERO_TRUST_BADGES=[{iconKey:"clock",text:"30 phút"},{iconKey:"target",text:"4 kỹ năng"},{iconKey:"bot",text:"Chấm bằng AI"}];export const EXAM_TYPES=[{value:"starters",label:"Cambridge Starters (Pre-A1)",description:"Học sinh lớp 1-3"},{value:"movers",label:"Cambridge Movers (A1)",description:"Học sinh lớp 4-5"},{value:"flyers",label:"Cambridge Flyers (A2)",description:"Học sinh lớp 5-6"},{value:"ket",label:"Cambridge KET (A2-B1)",description:"Học sinh THCS"},{value:"pet",label:"Cambridge PET (B1)",description:"Học sinh THPT"},{value:"ielts",label:"IELTS (B2-C1)",description:"Chuẩn bị du học"}];export const AGE_GROUPS=[{value:"6-10",label:"6-10 tuổi"},{value:"11-14",label:"11-14 tuổi"},{value:"15-18",label:"15-18 tuổi"},{value:"18+",label:"Trên 18 tuổi"}];export const AGE_GROUP_TO_LEVEL={"6-10":"starters","11-14":"flyers","15-18":"pet","18+":"ielts"};