@tinyweb_dev/oe-exam-sdk 0.1.1 → 0.1.2

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