@tinyweb_dev/oe-exam-sdk 0.1.0

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 (2020) hide show
  1. package/README.md +254 -0
  2. package/dist/api/exam-create.d.ts +18 -0
  3. package/dist/api/exam-create.d.ts.map +1 -0
  4. package/dist/api/exam-create.js +180 -0
  5. package/dist/api/exam-create.js.map +1 -0
  6. package/dist/api/exam-create.types.d.ts +149 -0
  7. package/dist/api/exam-create.types.d.ts.map +1 -0
  8. package/dist/api/exam-create.types.js +2 -0
  9. package/dist/api/exam-create.types.js.map +1 -0
  10. package/dist/api/exam-questions.d.ts +10 -0
  11. package/dist/api/exam-questions.d.ts.map +1 -0
  12. package/dist/api/exam-questions.js +99 -0
  13. package/dist/api/exam-questions.js.map +1 -0
  14. package/dist/api/exam-questions.types.d.ts +63 -0
  15. package/dist/api/exam-questions.types.d.ts.map +1 -0
  16. package/dist/api/exam-questions.types.js +2 -0
  17. package/dist/api/exam-questions.types.js.map +1 -0
  18. package/dist/api/exam-taking.d.ts +8 -0
  19. package/dist/api/exam-taking.d.ts.map +1 -0
  20. package/dist/api/exam-taking.js +74 -0
  21. package/dist/api/exam-taking.js.map +1 -0
  22. package/dist/api/exam-taking.types.d.ts +148 -0
  23. package/dist/api/exam-taking.types.d.ts.map +1 -0
  24. package/dist/api/exam-taking.types.js +2 -0
  25. package/dist/api/exam-taking.types.js.map +1 -0
  26. package/dist/api/index.d.ts +8 -0
  27. package/dist/api/index.d.ts.map +1 -0
  28. package/dist/api/index.js +7 -0
  29. package/dist/api/index.js.map +1 -0
  30. package/dist/api/result-review.d.ts +8 -0
  31. package/dist/api/result-review.d.ts.map +1 -0
  32. package/dist/api/result-review.js +51 -0
  33. package/dist/api/result-review.js.map +1 -0
  34. package/dist/api/result-review.types.d.ts +86 -0
  35. package/dist/api/result-review.types.d.ts.map +1 -0
  36. package/dist/api/result-review.types.js +2 -0
  37. package/dist/api/result-review.types.js.map +1 -0
  38. package/dist/components/CueCardEditor.d.ts +8 -0
  39. package/dist/components/CueCardEditor.d.ts.map +1 -0
  40. package/dist/components/CueCardEditor.js +59 -0
  41. package/dist/components/CueCardEditor.js.map +1 -0
  42. package/dist/components/common/ResolvedImage.d.ts +9 -0
  43. package/dist/components/common/ResolvedImage.d.ts.map +1 -0
  44. package/dist/components/common/ResolvedImage.js +16 -0
  45. package/dist/components/common/ResolvedImage.js.map +1 -0
  46. package/dist/components/exams/CreateExamInfoForm.d.ts +9 -0
  47. package/dist/components/exams/CreateExamInfoForm.d.ts.map +1 -0
  48. package/dist/components/exams/CreateExamInfoForm.js +36 -0
  49. package/dist/components/exams/CreateExamInfoForm.js.map +1 -0
  50. package/dist/components/exams/CreateExamPageContainer.d.ts +10 -0
  51. package/dist/components/exams/CreateExamPageContainer.d.ts.map +1 -0
  52. package/dist/components/exams/CreateExamPageContainer.js +104 -0
  53. package/dist/components/exams/CreateExamPageContainer.js.map +1 -0
  54. package/dist/components/exams/ExamCreator.d.ts +17 -0
  55. package/dist/components/exams/ExamCreator.d.ts.map +1 -0
  56. package/dist/components/exams/ExamCreator.js +90 -0
  57. package/dist/components/exams/ExamCreator.js.map +1 -0
  58. package/dist/components/exams/ExamPartTabs.d.ts +10 -0
  59. package/dist/components/exams/ExamPartTabs.d.ts.map +1 -0
  60. package/dist/components/exams/ExamPartTabs.js +41 -0
  61. package/dist/components/exams/ExamPartTabs.js.map +1 -0
  62. package/dist/components/exams/ExamQuestionGrid.d.ts +10 -0
  63. package/dist/components/exams/ExamQuestionGrid.d.ts.map +1 -0
  64. package/dist/components/exams/ExamQuestionGrid.js +19 -0
  65. package/dist/components/exams/ExamQuestionGrid.js.map +1 -0
  66. package/dist/components/exams/ExamQuestionsPageContainer.d.ts +11 -0
  67. package/dist/components/exams/ExamQuestionsPageContainer.d.ts.map +1 -0
  68. package/dist/components/exams/ExamQuestionsPageContainer.js +91 -0
  69. package/dist/components/exams/ExamQuestionsPageContainer.js.map +1 -0
  70. package/dist/components/exams/PartAudioUploader.d.ts +10 -0
  71. package/dist/components/exams/PartAudioUploader.d.ts.map +1 -0
  72. package/dist/components/exams/PartAudioUploader.js +10 -0
  73. package/dist/components/exams/PartAudioUploader.js.map +1 -0
  74. package/dist/components/exams/TemplateSelector.d.ts +9 -0
  75. package/dist/components/exams/TemplateSelector.d.ts.map +1 -0
  76. package/dist/components/exams/TemplateSelector.js +67 -0
  77. package/dist/components/exams/TemplateSelector.js.map +1 -0
  78. package/dist/components/exams/api.d.ts +6 -0
  79. package/dist/components/exams/api.d.ts.map +1 -0
  80. package/dist/components/exams/api.js +4 -0
  81. package/dist/components/exams/api.js.map +1 -0
  82. package/dist/components/exams/create-exam.validation.d.ts +11 -0
  83. package/dist/components/exams/create-exam.validation.d.ts.map +1 -0
  84. package/dist/components/exams/create-exam.validation.js +19 -0
  85. package/dist/components/exams/create-exam.validation.js.map +1 -0
  86. package/dist/components/exams/exam-template.utils.d.ts +59 -0
  87. package/dist/components/exams/exam-template.utils.d.ts.map +1 -0
  88. package/dist/components/exams/exam-template.utils.js +19 -0
  89. package/dist/components/exams/exam-template.utils.js.map +1 -0
  90. package/dist/components/exams/index.d.ts +18 -0
  91. package/dist/components/exams/index.d.ts.map +1 -0
  92. package/dist/components/exams/index.js +11 -0
  93. package/dist/components/exams/index.js.map +1 -0
  94. package/dist/components/exams/take/ExamTakingPageContainer.d.ts +10 -0
  95. package/dist/components/exams/take/ExamTakingPageContainer.d.ts.map +1 -0
  96. package/dist/components/exams/take/ExamTakingPageContainer.js +154 -0
  97. package/dist/components/exams/take/ExamTakingPageContainer.js.map +1 -0
  98. package/dist/components/exams/take/GenericQuestionRenderer.d.ts +8 -0
  99. package/dist/components/exams/take/GenericQuestionRenderer.d.ts.map +1 -0
  100. package/dist/components/exams/take/GenericQuestionRenderer.js +15 -0
  101. package/dist/components/exams/take/GenericQuestionRenderer.js.map +1 -0
  102. package/dist/components/exams/take/exam-taking.utils.d.ts +116 -0
  103. package/dist/components/exams/take/exam-taking.utils.d.ts.map +1 -0
  104. package/dist/components/exams/take/exam-taking.utils.js +89 -0
  105. package/dist/components/exams/take/exam-taking.utils.js.map +1 -0
  106. package/dist/components/exams/take/hooks/useSpeakingRecorder.d.ts +9 -0
  107. package/dist/components/exams/take/hooks/useSpeakingRecorder.d.ts.map +1 -0
  108. package/dist/components/exams/take/hooks/useSpeakingRecorder.js +25 -0
  109. package/dist/components/exams/take/hooks/useSpeakingRecorder.js.map +1 -0
  110. package/dist/components/exams/take/index.d.ts +7 -0
  111. package/dist/components/exams/take/index.d.ts.map +1 -0
  112. package/dist/components/exams/take/index.js +3 -0
  113. package/dist/components/exams/take/index.js.map +1 -0
  114. package/dist/components/exams/take/types.d.ts +2 -0
  115. package/dist/components/exams/take/types.d.ts.map +1 -0
  116. package/dist/components/exams/take/types.js +2 -0
  117. package/dist/components/exams/take/types.js.map +1 -0
  118. package/dist/components/index.d.ts +43 -0
  119. package/dist/components/index.d.ts.map +1 -0
  120. package/dist/components/index.js +43 -0
  121. package/dist/components/index.js.map +1 -0
  122. package/dist/components/questions/_shared/config/question-types.config.d.ts +10 -0
  123. package/dist/components/questions/_shared/config/question-types.config.d.ts.map +1 -0
  124. package/dist/components/questions/_shared/config/question-types.config.js +334 -0
  125. package/dist/components/questions/_shared/config/question-types.config.js.map +1 -0
  126. package/dist/components/questions/_shared/constants/color-palette.d.ts +7 -0
  127. package/dist/components/questions/_shared/constants/color-palette.d.ts.map +1 -0
  128. package/dist/components/questions/_shared/constants/color-palette.js +22 -0
  129. package/dist/components/questions/_shared/constants/color-palette.js.map +1 -0
  130. package/dist/components/questions/_shared/hooks/useAnswerGroupQuestionGroup.d.ts +25 -0
  131. package/dist/components/questions/_shared/hooks/useAnswerGroupQuestionGroup.d.ts.map +1 -0
  132. package/dist/components/questions/_shared/hooks/useAnswerGroupQuestionGroup.js +106 -0
  133. package/dist/components/questions/_shared/hooks/useAnswerGroupQuestionGroup.js.map +1 -0
  134. package/dist/components/questions/_shared/hooks/useBasicQuestionGroup.d.ts +57 -0
  135. package/dist/components/questions/_shared/hooks/useBasicQuestionGroup.d.ts.map +1 -0
  136. package/dist/components/questions/_shared/hooks/useBasicQuestionGroup.js +223 -0
  137. package/dist/components/questions/_shared/hooks/useBasicQuestionGroup.js.map +1 -0
  138. package/dist/components/questions/_shared/hooks/useCompareImagesGroup.d.ts +12 -0
  139. package/dist/components/questions/_shared/hooks/useCompareImagesGroup.d.ts.map +1 -0
  140. package/dist/components/questions/_shared/hooks/useCompareImagesGroup.js +141 -0
  141. package/dist/components/questions/_shared/hooks/useCompareImagesGroup.js.map +1 -0
  142. package/dist/components/questions/_shared/hooks/useImageQuestionGroup.d.ts +20 -0
  143. package/dist/components/questions/_shared/hooks/useImageQuestionGroup.d.ts.map +1 -0
  144. package/dist/components/questions/_shared/hooks/useImageQuestionGroup.js +124 -0
  145. package/dist/components/questions/_shared/hooks/useImageQuestionGroup.js.map +1 -0
  146. package/dist/components/questions/_shared/hooks/useInfoExchangeGroup.d.ts +35 -0
  147. package/dist/components/questions/_shared/hooks/useInfoExchangeGroup.d.ts.map +1 -0
  148. package/dist/components/questions/_shared/hooks/useInfoExchangeGroup.js +51 -0
  149. package/dist/components/questions/_shared/hooks/useInfoExchangeGroup.js.map +1 -0
  150. package/dist/components/questions/_shared/hooks/useQuestionFormState.d.ts +90 -0
  151. package/dist/components/questions/_shared/hooks/useQuestionFormState.d.ts.map +1 -0
  152. package/dist/components/questions/_shared/hooks/useQuestionFormState.js +55 -0
  153. package/dist/components/questions/_shared/hooks/useQuestionFormState.js.map +1 -0
  154. package/dist/components/questions/_shared/hooks/useQuestionInitialization.d.ts +13 -0
  155. package/dist/components/questions/_shared/hooks/useQuestionInitialization.d.ts.map +1 -0
  156. package/dist/components/questions/_shared/hooks/useQuestionInitialization.js +124 -0
  157. package/dist/components/questions/_shared/hooks/useQuestionInitialization.js.map +1 -0
  158. package/dist/components/questions/_shared/hooks/useQuestionListGroup.d.ts +20 -0
  159. package/dist/components/questions/_shared/hooks/useQuestionListGroup.d.ts.map +1 -0
  160. package/dist/components/questions/_shared/hooks/useQuestionListGroup.js +122 -0
  161. package/dist/components/questions/_shared/hooks/useQuestionListGroup.js.map +1 -0
  162. package/dist/components/questions/_shared/hooks/useQuestionOnChange.d.ts +13 -0
  163. package/dist/components/questions/_shared/hooks/useQuestionOnChange.d.ts.map +1 -0
  164. package/dist/components/questions/_shared/hooks/useQuestionOnChange.js +71 -0
  165. package/dist/components/questions/_shared/hooks/useQuestionOnChange.js.map +1 -0
  166. package/dist/components/questions/_shared/hooks/useSceneQuestionGroup.d.ts +51 -0
  167. package/dist/components/questions/_shared/hooks/useSceneQuestionGroup.d.ts.map +1 -0
  168. package/dist/components/questions/_shared/hooks/useSceneQuestionGroup.js +195 -0
  169. package/dist/components/questions/_shared/hooks/useSceneQuestionGroup.js.map +1 -0
  170. package/dist/components/questions/_shared/index.d.ts +8 -0
  171. package/dist/components/questions/_shared/index.d.ts.map +1 -0
  172. package/dist/components/questions/_shared/index.js +8 -0
  173. package/dist/components/questions/_shared/index.js.map +1 -0
  174. package/dist/components/questions/_shared/types/answer-the-question.type.d.ts +59 -0
  175. package/dist/components/questions/_shared/types/answer-the-question.type.d.ts.map +1 -0
  176. package/dist/components/questions/_shared/types/answer-the-question.type.js +2 -0
  177. package/dist/components/questions/_shared/types/answer-the-question.type.js.map +1 -0
  178. package/dist/components/questions/_shared/types/arrange-letters-into-words.type.d.ts +24 -0
  179. package/dist/components/questions/_shared/types/arrange-letters-into-words.type.d.ts.map +1 -0
  180. package/dist/components/questions/_shared/types/arrange-letters-into-words.type.js +2 -0
  181. package/dist/components/questions/_shared/types/arrange-letters-into-words.type.js.map +1 -0
  182. package/dist/components/questions/_shared/types/choose-correct-adjective.type.d.ts +22 -0
  183. package/dist/components/questions/_shared/types/choose-correct-adjective.type.d.ts.map +1 -0
  184. package/dist/components/questions/_shared/types/choose-correct-adjective.type.js +4 -0
  185. package/dist/components/questions/_shared/types/choose-correct-adjective.type.js.map +1 -0
  186. package/dist/components/questions/_shared/types/color-region.config.d.ts +34 -0
  187. package/dist/components/questions/_shared/types/color-region.config.d.ts.map +1 -0
  188. package/dist/components/questions/_shared/types/color-region.config.js +2 -0
  189. package/dist/components/questions/_shared/types/color-region.config.js.map +1 -0
  190. package/dist/components/questions/_shared/types/fill-in-blank.type.d.ts +53 -0
  191. package/dist/components/questions/_shared/types/fill-in-blank.type.d.ts.map +1 -0
  192. package/dist/components/questions/_shared/types/fill-in-blank.type.js +2 -0
  193. package/dist/components/questions/_shared/types/fill-in-blank.type.js.map +1 -0
  194. package/dist/components/questions/_shared/types/fill-missing-words-in-grid.type.d.ts +48 -0
  195. package/dist/components/questions/_shared/types/fill-missing-words-in-grid.type.d.ts.map +1 -0
  196. package/dist/components/questions/_shared/types/fill-missing-words-in-grid.type.js +2 -0
  197. package/dist/components/questions/_shared/types/fill-missing-words-in-grid.type.js.map +1 -0
  198. package/dist/components/questions/_shared/types/gn-speaking-interview.type.d.ts +33 -0
  199. package/dist/components/questions/_shared/types/gn-speaking-interview.type.d.ts.map +1 -0
  200. package/dist/components/questions/_shared/types/gn-speaking-interview.type.js +2 -0
  201. package/dist/components/questions/_shared/types/gn-speaking-interview.type.js.map +1 -0
  202. package/dist/components/questions/_shared/types/index.d.ts +13 -0
  203. package/dist/components/questions/_shared/types/index.d.ts.map +1 -0
  204. package/dist/components/questions/_shared/types/index.js +13 -0
  205. package/dist/components/questions/_shared/types/index.js.map +1 -0
  206. package/dist/components/questions/_shared/types/label-the-picture.type.d.ts +33 -0
  207. package/dist/components/questions/_shared/types/label-the-picture.type.d.ts.map +1 -0
  208. package/dist/components/questions/_shared/types/label-the-picture.type.js +2 -0
  209. package/dist/components/questions/_shared/types/label-the-picture.type.js.map +1 -0
  210. package/dist/components/questions/_shared/types/listen-and-choose-from-answer-group.type.d.ts +48 -0
  211. package/dist/components/questions/_shared/types/listen-and-choose-from-answer-group.type.d.ts.map +1 -0
  212. package/dist/components/questions/_shared/types/listen-and-choose-from-answer-group.type.js +2 -0
  213. package/dist/components/questions/_shared/types/listen-and-choose-from-answer-group.type.js.map +1 -0
  214. package/dist/components/questions/_shared/types/listen-and-choose-objects-in-scene.type.d.ts +56 -0
  215. package/dist/components/questions/_shared/types/listen-and-choose-objects-in-scene.type.d.ts.map +1 -0
  216. package/dist/components/questions/_shared/types/listen-and-choose-objects-in-scene.type.js +2 -0
  217. package/dist/components/questions/_shared/types/listen-and-choose-objects-in-scene.type.js.map +1 -0
  218. package/dist/components/questions/_shared/types/listen-and-drag-objects-into-scene.type.d.ts +66 -0
  219. package/dist/components/questions/_shared/types/listen-and-drag-objects-into-scene.type.d.ts.map +1 -0
  220. package/dist/components/questions/_shared/types/listen-and-drag-objects-into-scene.type.js +2 -0
  221. package/dist/components/questions/_shared/types/listen-and-drag-objects-into-scene.type.js.map +1 -0
  222. package/dist/components/questions/_shared/types/listen-and-speak-answer.type.d.ts +32 -0
  223. package/dist/components/questions/_shared/types/listen-and-speak-answer.type.d.ts.map +1 -0
  224. package/dist/components/questions/_shared/types/listen-and-speak-answer.type.js +2 -0
  225. package/dist/components/questions/_shared/types/listen-and-speak-answer.type.js.map +1 -0
  226. package/dist/components/questions/_shared/types/listen-and-speak-compare-images.type.d.ts +35 -0
  227. package/dist/components/questions/_shared/types/listen-and-speak-compare-images.type.d.ts.map +1 -0
  228. package/dist/components/questions/_shared/types/listen-and-speak-compare-images.type.js +2 -0
  229. package/dist/components/questions/_shared/types/listen-and-speak-compare-images.type.js.map +1 -0
  230. package/dist/components/questions/_shared/types/listen-and-speak-image-group.type.d.ts +30 -0
  231. package/dist/components/questions/_shared/types/listen-and-speak-image-group.type.d.ts.map +1 -0
  232. package/dist/components/questions/_shared/types/listen-and-speak-image-group.type.js +2 -0
  233. package/dist/components/questions/_shared/types/listen-and-speak-image-group.type.js.map +1 -0
  234. package/dist/components/questions/_shared/types/listen-and-speak-info-exchange.type.d.ts +39 -0
  235. package/dist/components/questions/_shared/types/listen-and-speak-info-exchange.type.d.ts.map +1 -0
  236. package/dist/components/questions/_shared/types/listen-and-speak-info-exchange.type.js +2 -0
  237. package/dist/components/questions/_shared/types/listen-and-speak-info-exchange.type.js.map +1 -0
  238. package/dist/components/questions/_shared/types/listen-and-speak-odd-one-out.type.d.ts +26 -0
  239. package/dist/components/questions/_shared/types/listen-and-speak-odd-one-out.type.d.ts.map +1 -0
  240. package/dist/components/questions/_shared/types/listen-and-speak-odd-one-out.type.js +4 -0
  241. package/dist/components/questions/_shared/types/listen-and-speak-odd-one-out.type.js.map +1 -0
  242. package/dist/components/questions/_shared/types/listen-and-speak-question-list.type.d.ts +28 -0
  243. package/dist/components/questions/_shared/types/listen-and-speak-question-list.type.d.ts.map +1 -0
  244. package/dist/components/questions/_shared/types/listen-and-speak-question-list.type.js +2 -0
  245. package/dist/components/questions/_shared/types/listen-and-speak-question-list.type.js.map +1 -0
  246. package/dist/components/questions/_shared/types/listen-and-speak-with-story-images.type.d.ts +25 -0
  247. package/dist/components/questions/_shared/types/listen-and-speak-with-story-images.type.d.ts.map +1 -0
  248. package/dist/components/questions/_shared/types/listen-and-speak-with-story-images.type.js +4 -0
  249. package/dist/components/questions/_shared/types/listen-and-speak-with-story-images.type.js.map +1 -0
  250. package/dist/components/questions/_shared/types/listen-and-tick-answer.type.d.ts +33 -0
  251. package/dist/components/questions/_shared/types/listen-and-tick-answer.type.d.ts.map +1 -0
  252. package/dist/components/questions/_shared/types/listen-and-tick-answer.type.js +2 -0
  253. package/dist/components/questions/_shared/types/listen-and-tick-answer.type.js.map +1 -0
  254. package/dist/components/questions/_shared/types/listening-drawline.type.d.ts +40 -0
  255. package/dist/components/questions/_shared/types/listening-drawline.type.d.ts.map +1 -0
  256. package/dist/components/questions/_shared/types/listening-drawline.type.js +2 -0
  257. package/dist/components/questions/_shared/types/listening-drawline.type.js.map +1 -0
  258. package/dist/components/questions/_shared/types/look-and-choose-answer.type.d.ts +64 -0
  259. package/dist/components/questions/_shared/types/look-and-choose-answer.type.d.ts.map +1 -0
  260. package/dist/components/questions/_shared/types/look-and-choose-answer.type.js +2 -0
  261. package/dist/components/questions/_shared/types/look-and-choose-answer.type.js.map +1 -0
  262. package/dist/components/questions/_shared/types/look-picture-fill-word-hint.type.d.ts +48 -0
  263. package/dist/components/questions/_shared/types/look-picture-fill-word-hint.type.d.ts.map +1 -0
  264. package/dist/components/questions/_shared/types/look-picture-fill-word-hint.type.js +2 -0
  265. package/dist/components/questions/_shared/types/look-picture-fill-word-hint.type.js.map +1 -0
  266. package/dist/components/questions/_shared/types/match-by-writing-answer.type.d.ts +52 -0
  267. package/dist/components/questions/_shared/types/match-by-writing-answer.type.d.ts.map +1 -0
  268. package/dist/components/questions/_shared/types/match-by-writing-answer.type.js +2 -0
  269. package/dist/components/questions/_shared/types/match-by-writing-answer.type.js.map +1 -0
  270. package/dist/components/questions/_shared/types/multiple-choice.type.d.ts +39 -0
  271. package/dist/components/questions/_shared/types/multiple-choice.type.d.ts.map +1 -0
  272. package/dist/components/questions/_shared/types/multiple-choice.type.js +2 -0
  273. package/dist/components/questions/_shared/types/multiple-choice.type.js.map +1 -0
  274. package/dist/components/questions/_shared/types/question-group.type.d.ts +45 -0
  275. package/dist/components/questions/_shared/types/question-group.type.d.ts.map +1 -0
  276. package/dist/components/questions/_shared/types/question-group.type.js +12 -0
  277. package/dist/components/questions/_shared/types/question-group.type.js.map +1 -0
  278. package/dist/components/questions/_shared/types/read-and-color-objects.type.d.ts +44 -0
  279. package/dist/components/questions/_shared/types/read-and-color-objects.type.d.ts.map +1 -0
  280. package/dist/components/questions/_shared/types/read-and-color-objects.type.js +2 -0
  281. package/dist/components/questions/_shared/types/read-and-color-objects.type.js.map +1 -0
  282. package/dist/components/questions/_shared/types/read-displayed-content.type.d.ts +19 -0
  283. package/dist/components/questions/_shared/types/read-displayed-content.type.d.ts.map +1 -0
  284. package/dist/components/questions/_shared/types/read-displayed-content.type.js +2 -0
  285. package/dist/components/questions/_shared/types/read-displayed-content.type.js.map +1 -0
  286. package/dist/components/questions/_shared/types/read-passage-and-answer-questions.type.d.ts +46 -0
  287. package/dist/components/questions/_shared/types/read-passage-and-answer-questions.type.d.ts.map +1 -0
  288. package/dist/components/questions/_shared/types/read-passage-and-answer-questions.type.js +2 -0
  289. package/dist/components/questions/_shared/types/read-passage-and-answer-questions.type.js.map +1 -0
  290. package/dist/components/questions/_shared/types/speaking-describe-image.type.d.ts +18 -0
  291. package/dist/components/questions/_shared/types/speaking-describe-image.type.d.ts.map +1 -0
  292. package/dist/components/questions/_shared/types/speaking-describe-image.type.js +2 -0
  293. package/dist/components/questions/_shared/types/speaking-describe-image.type.js.map +1 -0
  294. package/dist/components/questions/_shared/types/spontaneous-qa.type.d.ts +25 -0
  295. package/dist/components/questions/_shared/types/spontaneous-qa.type.d.ts.map +1 -0
  296. package/dist/components/questions/_shared/types/spontaneous-qa.type.js +2 -0
  297. package/dist/components/questions/_shared/types/spontaneous-qa.type.js.map +1 -0
  298. package/dist/components/questions/_shared/types/word-fill-paragraph-with-options.type.d.ts +47 -0
  299. package/dist/components/questions/_shared/types/word-fill-paragraph-with-options.type.d.ts.map +1 -0
  300. package/dist/components/questions/_shared/types/word-fill-paragraph-with-options.type.js +2 -0
  301. package/dist/components/questions/_shared/types/word-fill-paragraph-with-options.type.js.map +1 -0
  302. package/dist/components/questions/_shared/types/word-fill-paragraph.type.d.ts +53 -0
  303. package/dist/components/questions/_shared/types/word-fill-paragraph.type.d.ts.map +1 -0
  304. package/dist/components/questions/_shared/types/word-fill-paragraph.type.js +2 -0
  305. package/dist/components/questions/_shared/types/word-fill-paragraph.type.js.map +1 -0
  306. package/dist/components/questions/_shared/types/word-fill-structured-form.type.d.ts +47 -0
  307. package/dist/components/questions/_shared/types/word-fill-structured-form.type.d.ts.map +1 -0
  308. package/dist/components/questions/_shared/types/word-fill-structured-form.type.js +2 -0
  309. package/dist/components/questions/_shared/types/word-fill-structured-form.type.js.map +1 -0
  310. package/dist/components/questions/_shared/types/word-ordering.type.d.ts +36 -0
  311. package/dist/components/questions/_shared/types/word-ordering.type.d.ts.map +1 -0
  312. package/dist/components/questions/_shared/types/word-ordering.type.js +2 -0
  313. package/dist/components/questions/_shared/types/word-ordering.type.js.map +1 -0
  314. package/dist/components/questions/_shared/types/write-a-short-letter.type.d.ts +36 -0
  315. package/dist/components/questions/_shared/types/write-a-short-letter.type.d.ts.map +1 -0
  316. package/dist/components/questions/_shared/types/write-a-short-letter.type.js +2 -0
  317. package/dist/components/questions/_shared/types/write-a-short-letter.type.js.map +1 -0
  318. package/dist/components/questions/_shared/types/write-correct-verb-form.type.d.ts +29 -0
  319. package/dist/components/questions/_shared/types/write-correct-verb-form.type.d.ts.map +1 -0
  320. package/dist/components/questions/_shared/types/write-correct-verb-form.type.js +4 -0
  321. package/dist/components/questions/_shared/types/write-correct-verb-form.type.js.map +1 -0
  322. package/dist/components/questions/_shared/types/write-sentences.type.d.ts +41 -0
  323. package/dist/components/questions/_shared/types/write-sentences.type.d.ts.map +1 -0
  324. package/dist/components/questions/_shared/types/write-sentences.type.js +2 -0
  325. package/dist/components/questions/_shared/types/write-sentences.type.js.map +1 -0
  326. package/dist/components/questions/_shared/types/write-short-paragraph.type.d.ts +31 -0
  327. package/dist/components/questions/_shared/types/write-short-paragraph.type.d.ts.map +1 -0
  328. package/dist/components/questions/_shared/types/write-short-paragraph.type.js +2 -0
  329. package/dist/components/questions/_shared/types/write-short-paragraph.type.js.map +1 -0
  330. package/dist/components/questions/_shared/utils/answer-builder.d.ts +4 -0
  331. package/dist/components/questions/_shared/utils/answer-builder.d.ts.map +1 -0
  332. package/dist/components/questions/_shared/utils/answer-builder.js +80 -0
  333. package/dist/components/questions/_shared/utils/answer-builder.js.map +1 -0
  334. package/dist/components/questions/_shared/utils/createColorRegionRegistration.d.ts +7 -0
  335. package/dist/components/questions/_shared/utils/createColorRegionRegistration.d.ts.map +1 -0
  336. package/dist/components/questions/_shared/utils/createColorRegionRegistration.js +40 -0
  337. package/dist/components/questions/_shared/utils/createColorRegionRegistration.js.map +1 -0
  338. package/dist/components/questions/_shared/utils/id-generator.d.ts +2 -0
  339. package/dist/components/questions/_shared/utils/id-generator.d.ts.map +1 -0
  340. package/dist/components/questions/_shared/utils/id-generator.js +4 -0
  341. package/dist/components/questions/_shared/utils/id-generator.js.map +1 -0
  342. package/dist/components/questions/_shared/utils/question-validation.d.ts +6 -0
  343. package/dist/components/questions/_shared/utils/question-validation.d.ts.map +1 -0
  344. package/dist/components/questions/_shared/utils/question-validation.js +22 -0
  345. package/dist/components/questions/_shared/utils/question-validation.js.map +1 -0
  346. package/dist/components/questions/components/ColorNode.d.ts +20 -0
  347. package/dist/components/questions/components/ColorNode.d.ts.map +1 -0
  348. package/dist/components/questions/components/ColorNode.js +86 -0
  349. package/dist/components/questions/components/ColorNode.js.map +1 -0
  350. package/dist/components/questions/components/ColorRegionClient.d.ts +12 -0
  351. package/dist/components/questions/components/ColorRegionClient.d.ts.map +1 -0
  352. package/dist/components/questions/components/ColorRegionClient.js +546 -0
  353. package/dist/components/questions/components/ColorRegionClient.js.map +1 -0
  354. package/dist/components/questions/components/ColorRegionCreator.d.ts +8 -0
  355. package/dist/components/questions/components/ColorRegionCreator.d.ts.map +1 -0
  356. package/dist/components/questions/components/ColorRegionCreator.js +421 -0
  357. package/dist/components/questions/components/ColorRegionCreator.js.map +1 -0
  358. package/dist/components/questions/components/ColorRegionNode.d.ts +20 -0
  359. package/dist/components/questions/components/ColorRegionNode.d.ts.map +1 -0
  360. package/dist/components/questions/components/ColorRegionNode.js +60 -0
  361. package/dist/components/questions/components/ColorRegionNode.js.map +1 -0
  362. package/dist/components/questions/components/CreatorGuide.d.ts +103 -0
  363. package/dist/components/questions/components/CreatorGuide.d.ts.map +1 -0
  364. package/dist/components/questions/components/CreatorGuide.js +104 -0
  365. package/dist/components/questions/components/CreatorGuide.js.map +1 -0
  366. package/dist/components/questions/components/NameNode.d.ts +18 -0
  367. package/dist/components/questions/components/NameNode.d.ts.map +1 -0
  368. package/dist/components/questions/components/NameNode.js +27 -0
  369. package/dist/components/questions/components/NameNode.js.map +1 -0
  370. package/dist/components/questions/components/QuestionBankOption.d.ts +33 -0
  371. package/dist/components/questions/components/QuestionBankOption.d.ts.map +1 -0
  372. package/dist/components/questions/components/QuestionBankOption.js +47 -0
  373. package/dist/components/questions/components/QuestionBankOption.js.map +1 -0
  374. package/dist/components/questions/components/QuestionBasicInfoForm.d.ts +20 -0
  375. package/dist/components/questions/components/QuestionBasicInfoForm.d.ts.map +1 -0
  376. package/dist/components/questions/components/QuestionBasicInfoForm.js +10 -0
  377. package/dist/components/questions/components/QuestionBasicInfoForm.js.map +1 -0
  378. package/dist/components/questions/components/QuestionCommonFields.d.ts +23 -0
  379. package/dist/components/questions/components/QuestionCommonFields.d.ts.map +1 -0
  380. package/dist/components/questions/components/QuestionCommonFields.js +34 -0
  381. package/dist/components/questions/components/QuestionCommonFields.js.map +1 -0
  382. package/dist/components/questions/components/QuestionSearchDropdown.d.ts +42 -0
  383. package/dist/components/questions/components/QuestionSearchDropdown.d.ts.map +1 -0
  384. package/dist/components/questions/components/QuestionSearchDropdown.js +259 -0
  385. package/dist/components/questions/components/QuestionSearchDropdown.js.map +1 -0
  386. package/dist/components/questions/components/QuestionTypeSelector.d.ts +9 -0
  387. package/dist/components/questions/components/QuestionTypeSelector.d.ts.map +1 -0
  388. package/dist/components/questions/components/QuestionTypeSelector.js +33 -0
  389. package/dist/components/questions/components/QuestionTypeSelector.js.map +1 -0
  390. package/dist/components/questions/components/QuestionTypeSpecificForms.d.ts +10 -0
  391. package/dist/components/questions/components/QuestionTypeSpecificForms.d.ts.map +1 -0
  392. package/dist/components/questions/components/QuestionTypeSpecificForms.js +7 -0
  393. package/dist/components/questions/components/QuestionTypeSpecificForms.js.map +1 -0
  394. package/dist/components/questions/components/RegionNode.d.ts +20 -0
  395. package/dist/components/questions/components/RegionNode.d.ts.map +1 -0
  396. package/dist/components/questions/components/RegionNode.js +95 -0
  397. package/dist/components/questions/components/RegionNode.js.map +1 -0
  398. package/dist/components/questions/components/index.d.ts +15 -0
  399. package/dist/components/questions/components/index.d.ts.map +1 -0
  400. package/dist/components/questions/components/index.js +15 -0
  401. package/dist/components/questions/components/index.js.map +1 -0
  402. package/dist/components/questions/creator/QuestionCreator.d.ts +35 -0
  403. package/dist/components/questions/creator/QuestionCreator.d.ts.map +1 -0
  404. package/dist/components/questions/creator/QuestionCreator.js +91 -0
  405. package/dist/components/questions/creator/QuestionCreator.js.map +1 -0
  406. package/dist/components/questions/creator/QuestionGroupCreator.d.ts +8 -0
  407. package/dist/components/questions/creator/QuestionGroupCreator.d.ts.map +1 -0
  408. package/dist/components/questions/creator/QuestionGroupCreator.js +120 -0
  409. package/dist/components/questions/creator/QuestionGroupCreator.js.map +1 -0
  410. package/dist/components/questions/creator/dedicated-component-router.d.ts +39 -0
  411. package/dist/components/questions/creator/dedicated-component-router.d.ts.map +1 -0
  412. package/dist/components/questions/creator/dedicated-component-router.js +80 -0
  413. package/dist/components/questions/creator/dedicated-component-router.js.map +1 -0
  414. package/dist/components/questions/creator/index.d.ts +4 -0
  415. package/dist/components/questions/creator/index.d.ts.map +1 -0
  416. package/dist/components/questions/creator/index.js +4 -0
  417. package/dist/components/questions/creator/index.js.map +1 -0
  418. package/dist/components/questions/creator/question-type-registry.d.ts +66 -0
  419. package/dist/components/questions/creator/question-type-registry.d.ts.map +1 -0
  420. package/dist/components/questions/creator/question-type-registry.js +81 -0
  421. package/dist/components/questions/creator/question-type-registry.js.map +1 -0
  422. package/dist/components/questions/groups/ArticlesGroupCard.d.ts +35 -0
  423. package/dist/components/questions/groups/ArticlesGroupCard.d.ts.map +1 -0
  424. package/dist/components/questions/groups/ArticlesGroupCard.js +122 -0
  425. package/dist/components/questions/groups/ArticlesGroupCard.js.map +1 -0
  426. package/dist/components/questions/groups/BasicQuestionGroupCard.d.ts +51 -0
  427. package/dist/components/questions/groups/BasicQuestionGroupCard.d.ts.map +1 -0
  428. package/dist/components/questions/groups/BasicQuestionGroupCard.js +51 -0
  429. package/dist/components/questions/groups/BasicQuestionGroupCard.js.map +1 -0
  430. package/dist/components/questions/groups/DocumentGroupCard.d.ts +35 -0
  431. package/dist/components/questions/groups/DocumentGroupCard.d.ts.map +1 -0
  432. package/dist/components/questions/groups/DocumentGroupCard.js +115 -0
  433. package/dist/components/questions/groups/DocumentGroupCard.js.map +1 -0
  434. package/dist/components/questions/groups/MatchAnswerGroupCard.d.ts +19 -0
  435. package/dist/components/questions/groups/MatchAnswerGroupCard.d.ts.map +1 -0
  436. package/dist/components/questions/groups/MatchAnswerGroupCard.js +26 -0
  437. package/dist/components/questions/groups/MatchAnswerGroupCard.js.map +1 -0
  438. package/dist/components/questions/index.d.ts +11 -0
  439. package/dist/components/questions/index.d.ts.map +1 -0
  440. package/dist/components/questions/index.js +11 -0
  441. package/dist/components/questions/index.js.map +1 -0
  442. package/dist/components/questions/types/answer-the-question/AnswerTheQuestionClient.d.ts +3 -0
  443. package/dist/components/questions/types/answer-the-question/AnswerTheQuestionClient.d.ts.map +1 -0
  444. package/dist/components/questions/types/answer-the-question/AnswerTheQuestionClient.js +38 -0
  445. package/dist/components/questions/types/answer-the-question/AnswerTheQuestionClient.js.map +1 -0
  446. package/dist/components/questions/types/answer-the-question/AnswerTheQuestionCreator.d.ts +3 -0
  447. package/dist/components/questions/types/answer-the-question/AnswerTheQuestionCreator.d.ts.map +1 -0
  448. package/dist/components/questions/types/answer-the-question/AnswerTheQuestionCreator.js +352 -0
  449. package/dist/components/questions/types/answer-the-question/AnswerTheQuestionCreator.js.map +1 -0
  450. package/dist/components/questions/types/answer-the-question/register.d.ts +3 -0
  451. package/dist/components/questions/types/answer-the-question/register.d.ts.map +1 -0
  452. package/dist/components/questions/types/answer-the-question/register.js +68 -0
  453. package/dist/components/questions/types/answer-the-question/register.js.map +1 -0
  454. package/dist/components/questions/types/answer-the-question/transform.d.ts +3 -0
  455. package/dist/components/questions/types/answer-the-question/transform.d.ts.map +1 -0
  456. package/dist/components/questions/types/answer-the-question/transform.js +37 -0
  457. package/dist/components/questions/types/answer-the-question/transform.js.map +1 -0
  458. package/dist/components/questions/types/arrange-letters-into-words/ArrangeLettersIntoWordsClient.d.ts +3 -0
  459. package/dist/components/questions/types/arrange-letters-into-words/ArrangeLettersIntoWordsClient.d.ts.map +1 -0
  460. package/dist/components/questions/types/arrange-letters-into-words/ArrangeLettersIntoWordsClient.js +142 -0
  461. package/dist/components/questions/types/arrange-letters-into-words/ArrangeLettersIntoWordsClient.js.map +1 -0
  462. package/dist/components/questions/types/arrange-letters-into-words/ArrangeLettersIntoWordsCreator.d.ts +3 -0
  463. package/dist/components/questions/types/arrange-letters-into-words/ArrangeLettersIntoWordsCreator.d.ts.map +1 -0
  464. package/dist/components/questions/types/arrange-letters-into-words/ArrangeLettersIntoWordsCreator.js +119 -0
  465. package/dist/components/questions/types/arrange-letters-into-words/ArrangeLettersIntoWordsCreator.js.map +1 -0
  466. package/dist/components/questions/types/arrange-letters-into-words/index.d.ts +3 -0
  467. package/dist/components/questions/types/arrange-letters-into-words/index.d.ts.map +1 -0
  468. package/dist/components/questions/types/arrange-letters-into-words/index.js +3 -0
  469. package/dist/components/questions/types/arrange-letters-into-words/index.js.map +1 -0
  470. package/dist/components/questions/types/arrange-letters-into-words/register.d.ts +3 -0
  471. package/dist/components/questions/types/arrange-letters-into-words/register.d.ts.map +1 -0
  472. package/dist/components/questions/types/arrange-letters-into-words/register.js +5 -0
  473. package/dist/components/questions/types/arrange-letters-into-words/register.js.map +1 -0
  474. package/dist/components/questions/types/arrange-letters-into-words/transform.d.ts +3 -0
  475. package/dist/components/questions/types/arrange-letters-into-words/transform.d.ts.map +1 -0
  476. package/dist/components/questions/types/arrange-letters-into-words/transform.js +25 -0
  477. package/dist/components/questions/types/arrange-letters-into-words/transform.js.map +1 -0
  478. package/dist/components/questions/types/choose-correct-adjective/ChooseCorrectAdjectiveClient.d.ts +3 -0
  479. package/dist/components/questions/types/choose-correct-adjective/ChooseCorrectAdjectiveClient.d.ts.map +1 -0
  480. package/dist/components/questions/types/choose-correct-adjective/ChooseCorrectAdjectiveClient.js +65 -0
  481. package/dist/components/questions/types/choose-correct-adjective/ChooseCorrectAdjectiveClient.js.map +1 -0
  482. package/dist/components/questions/types/choose-correct-adjective/ChooseCorrectAdjectiveCreator.d.ts +3 -0
  483. package/dist/components/questions/types/choose-correct-adjective/ChooseCorrectAdjectiveCreator.d.ts.map +1 -0
  484. package/dist/components/questions/types/choose-correct-adjective/ChooseCorrectAdjectiveCreator.js +170 -0
  485. package/dist/components/questions/types/choose-correct-adjective/ChooseCorrectAdjectiveCreator.js.map +1 -0
  486. package/dist/components/questions/types/choose-correct-adjective/index.d.ts +3 -0
  487. package/dist/components/questions/types/choose-correct-adjective/index.d.ts.map +1 -0
  488. package/dist/components/questions/types/choose-correct-adjective/index.js +3 -0
  489. package/dist/components/questions/types/choose-correct-adjective/index.js.map +1 -0
  490. package/dist/components/questions/types/choose-correct-adjective/register.d.ts +3 -0
  491. package/dist/components/questions/types/choose-correct-adjective/register.d.ts.map +1 -0
  492. package/dist/components/questions/types/choose-correct-adjective/register.js +56 -0
  493. package/dist/components/questions/types/choose-correct-adjective/register.js.map +1 -0
  494. package/dist/components/questions/types/choose-correct-adjective/transform.d.ts +3 -0
  495. package/dist/components/questions/types/choose-correct-adjective/transform.d.ts.map +1 -0
  496. package/dist/components/questions/types/choose-correct-adjective/transform.js +17 -0
  497. package/dist/components/questions/types/choose-correct-adjective/transform.js.map +1 -0
  498. package/dist/components/questions/types/choose-the-correct-answer/ChooseTheCorrectAnswerClient.d.ts +3 -0
  499. package/dist/components/questions/types/choose-the-correct-answer/ChooseTheCorrectAnswerClient.d.ts.map +1 -0
  500. package/dist/components/questions/types/choose-the-correct-answer/ChooseTheCorrectAnswerClient.js +132 -0
  501. package/dist/components/questions/types/choose-the-correct-answer/ChooseTheCorrectAnswerClient.js.map +1 -0
  502. package/dist/components/questions/types/choose-the-correct-answer/ChooseTheCorrectAnswerCreator.d.ts +26 -0
  503. package/dist/components/questions/types/choose-the-correct-answer/ChooseTheCorrectAnswerCreator.d.ts.map +1 -0
  504. package/dist/components/questions/types/choose-the-correct-answer/ChooseTheCorrectAnswerCreator.js +582 -0
  505. package/dist/components/questions/types/choose-the-correct-answer/ChooseTheCorrectAnswerCreator.js.map +1 -0
  506. package/dist/components/questions/types/choose-the-correct-answer/index.d.ts +3 -0
  507. package/dist/components/questions/types/choose-the-correct-answer/index.d.ts.map +1 -0
  508. package/dist/components/questions/types/choose-the-correct-answer/index.js +3 -0
  509. package/dist/components/questions/types/choose-the-correct-answer/index.js.map +1 -0
  510. package/dist/components/questions/types/choose-the-correct-answer/register.d.ts +3 -0
  511. package/dist/components/questions/types/choose-the-correct-answer/register.d.ts.map +1 -0
  512. package/dist/components/questions/types/choose-the-correct-answer/register.js +102 -0
  513. package/dist/components/questions/types/choose-the-correct-answer/register.js.map +1 -0
  514. package/dist/components/questions/types/choose-the-correct-answer/transform.d.ts +3 -0
  515. package/dist/components/questions/types/choose-the-correct-answer/transform.d.ts.map +1 -0
  516. package/dist/components/questions/types/choose-the-correct-answer/transform.js +44 -0
  517. package/dist/components/questions/types/choose-the-correct-answer/transform.js.map +1 -0
  518. package/dist/components/questions/types/fill-in-blank/FillInBlankClient.d.ts +3 -0
  519. package/dist/components/questions/types/fill-in-blank/FillInBlankClient.d.ts.map +1 -0
  520. package/dist/components/questions/types/fill-in-blank/FillInBlankClient.js +276 -0
  521. package/dist/components/questions/types/fill-in-blank/FillInBlankClient.js.map +1 -0
  522. package/dist/components/questions/types/fill-in-blank/FillInBlankCreator.d.ts +3 -0
  523. package/dist/components/questions/types/fill-in-blank/FillInBlankCreator.d.ts.map +1 -0
  524. package/dist/components/questions/types/fill-in-blank/FillInBlankCreator.js +449 -0
  525. package/dist/components/questions/types/fill-in-blank/FillInBlankCreator.js.map +1 -0
  526. package/dist/components/questions/types/fill-in-blank/index.d.ts +3 -0
  527. package/dist/components/questions/types/fill-in-blank/index.d.ts.map +1 -0
  528. package/dist/components/questions/types/fill-in-blank/index.js +3 -0
  529. package/dist/components/questions/types/fill-in-blank/index.js.map +1 -0
  530. package/dist/components/questions/types/fill-in-blank/register.d.ts +3 -0
  531. package/dist/components/questions/types/fill-in-blank/register.d.ts.map +1 -0
  532. package/dist/components/questions/types/fill-in-blank/register.js +139 -0
  533. package/dist/components/questions/types/fill-in-blank/register.js.map +1 -0
  534. package/dist/components/questions/types/fill-in-blank/transform.d.ts +3 -0
  535. package/dist/components/questions/types/fill-in-blank/transform.d.ts.map +1 -0
  536. package/dist/components/questions/types/fill-in-blank/transform.js +60 -0
  537. package/dist/components/questions/types/fill-in-blank/transform.js.map +1 -0
  538. package/dist/components/questions/types/fill-missing-words-in-grid/FillMissingWordsInGridClient.d.ts +8 -0
  539. package/dist/components/questions/types/fill-missing-words-in-grid/FillMissingWordsInGridClient.d.ts.map +1 -0
  540. package/dist/components/questions/types/fill-missing-words-in-grid/FillMissingWordsInGridClient.js +118 -0
  541. package/dist/components/questions/types/fill-missing-words-in-grid/FillMissingWordsInGridClient.js.map +1 -0
  542. package/dist/components/questions/types/fill-missing-words-in-grid/FillMissingWordsInGridCreator.d.ts +4 -0
  543. package/dist/components/questions/types/fill-missing-words-in-grid/FillMissingWordsInGridCreator.d.ts.map +1 -0
  544. package/dist/components/questions/types/fill-missing-words-in-grid/FillMissingWordsInGridCreator.js +672 -0
  545. package/dist/components/questions/types/fill-missing-words-in-grid/FillMissingWordsInGridCreator.js.map +1 -0
  546. package/dist/components/questions/types/fill-missing-words-in-grid/index.d.ts +3 -0
  547. package/dist/components/questions/types/fill-missing-words-in-grid/index.d.ts.map +1 -0
  548. package/dist/components/questions/types/fill-missing-words-in-grid/index.js +3 -0
  549. package/dist/components/questions/types/fill-missing-words-in-grid/index.js.map +1 -0
  550. package/dist/components/questions/types/fill-missing-words-in-grid/register.d.ts +4 -0
  551. package/dist/components/questions/types/fill-missing-words-in-grid/register.d.ts.map +1 -0
  552. package/dist/components/questions/types/fill-missing-words-in-grid/register.js +38 -0
  553. package/dist/components/questions/types/fill-missing-words-in-grid/register.js.map +1 -0
  554. package/dist/components/questions/types/fill-missing-words-in-grid/transform.d.ts +3 -0
  555. package/dist/components/questions/types/fill-missing-words-in-grid/transform.d.ts.map +1 -0
  556. package/dist/components/questions/types/fill-missing-words-in-grid/transform.js +16 -0
  557. package/dist/components/questions/types/fill-missing-words-in-grid/transform.js.map +1 -0
  558. package/dist/components/questions/types/gn-speaking-interview/GNSpeakingInterviewCreator.d.ts +3 -0
  559. package/dist/components/questions/types/gn-speaking-interview/GNSpeakingInterviewCreator.d.ts.map +1 -0
  560. package/dist/components/questions/types/gn-speaking-interview/GNSpeakingInterviewCreator.js +263 -0
  561. package/dist/components/questions/types/gn-speaking-interview/GNSpeakingInterviewCreator.js.map +1 -0
  562. package/dist/components/questions/types/gn-speaking-interview/register.d.ts +3 -0
  563. package/dist/components/questions/types/gn-speaking-interview/register.d.ts.map +1 -0
  564. package/dist/components/questions/types/gn-speaking-interview/register.js +122 -0
  565. package/dist/components/questions/types/gn-speaking-interview/register.js.map +1 -0
  566. package/dist/components/questions/types/gn-speaking-interview/transform.d.ts +3 -0
  567. package/dist/components/questions/types/gn-speaking-interview/transform.d.ts.map +1 -0
  568. package/dist/components/questions/types/gn-speaking-interview/transform.js +49 -0
  569. package/dist/components/questions/types/gn-speaking-interview/transform.js.map +1 -0
  570. package/dist/components/questions/types/image-object-matching/ImageObjectMatchingClient.d.ts +8 -0
  571. package/dist/components/questions/types/image-object-matching/ImageObjectMatchingClient.d.ts.map +1 -0
  572. package/dist/components/questions/types/image-object-matching/ImageObjectMatchingClient.js +17 -0
  573. package/dist/components/questions/types/image-object-matching/ImageObjectMatchingClient.js.map +1 -0
  574. package/dist/components/questions/types/image-object-matching/ImageObjectMatchingCreator.d.ts +3 -0
  575. package/dist/components/questions/types/image-object-matching/ImageObjectMatchingCreator.d.ts.map +1 -0
  576. package/dist/components/questions/types/image-object-matching/ImageObjectMatchingCreator.js +28 -0
  577. package/dist/components/questions/types/image-object-matching/ImageObjectMatchingCreator.js.map +1 -0
  578. package/dist/components/questions/types/image-object-matching/index.d.ts +3 -0
  579. package/dist/components/questions/types/image-object-matching/index.d.ts.map +1 -0
  580. package/dist/components/questions/types/image-object-matching/index.js +3 -0
  581. package/dist/components/questions/types/image-object-matching/index.js.map +1 -0
  582. package/dist/components/questions/types/image-object-matching/register.d.ts +2 -0
  583. package/dist/components/questions/types/image-object-matching/register.d.ts.map +1 -0
  584. package/dist/components/questions/types/image-object-matching/register.js +4 -0
  585. package/dist/components/questions/types/image-object-matching/register.js.map +1 -0
  586. package/dist/components/questions/types/image-object-matching/transform.d.ts +2 -0
  587. package/dist/components/questions/types/image-object-matching/transform.d.ts.map +1 -0
  588. package/dist/components/questions/types/image-object-matching/transform.js +3 -0
  589. package/dist/components/questions/types/image-object-matching/transform.js.map +1 -0
  590. package/dist/components/questions/types/label-the-picture/LabelThePictureClient.d.ts +7 -0
  591. package/dist/components/questions/types/label-the-picture/LabelThePictureClient.d.ts.map +1 -0
  592. package/dist/components/questions/types/label-the-picture/LabelThePictureClient.js +103 -0
  593. package/dist/components/questions/types/label-the-picture/LabelThePictureClient.js.map +1 -0
  594. package/dist/components/questions/types/label-the-picture/LabelThePictureCreator.d.ts +3 -0
  595. package/dist/components/questions/types/label-the-picture/LabelThePictureCreator.d.ts.map +1 -0
  596. package/dist/components/questions/types/label-the-picture/LabelThePictureCreator.js +345 -0
  597. package/dist/components/questions/types/label-the-picture/LabelThePictureCreator.js.map +1 -0
  598. package/dist/components/questions/types/label-the-picture/index.d.ts +3 -0
  599. package/dist/components/questions/types/label-the-picture/index.d.ts.map +1 -0
  600. package/dist/components/questions/types/label-the-picture/index.js +3 -0
  601. package/dist/components/questions/types/label-the-picture/index.js.map +1 -0
  602. package/dist/components/questions/types/label-the-picture/register.d.ts +3 -0
  603. package/dist/components/questions/types/label-the-picture/register.d.ts.map +1 -0
  604. package/dist/components/questions/types/label-the-picture/register.js +55 -0
  605. package/dist/components/questions/types/label-the-picture/register.js.map +1 -0
  606. package/dist/components/questions/types/label-the-picture/transform.d.ts +3 -0
  607. package/dist/components/questions/types/label-the-picture/transform.d.ts.map +1 -0
  608. package/dist/components/questions/types/label-the-picture/transform.js +29 -0
  609. package/dist/components/questions/types/label-the-picture/transform.js.map +1 -0
  610. package/dist/components/questions/types/listen-and-choose-from-answer-group/ListenAndChooseFromAnswerGroupClient.d.ts +3 -0
  611. package/dist/components/questions/types/listen-and-choose-from-answer-group/ListenAndChooseFromAnswerGroupClient.d.ts.map +1 -0
  612. package/dist/components/questions/types/listen-and-choose-from-answer-group/ListenAndChooseFromAnswerGroupClient.js +79 -0
  613. package/dist/components/questions/types/listen-and-choose-from-answer-group/ListenAndChooseFromAnswerGroupClient.js.map +1 -0
  614. package/dist/components/questions/types/listen-and-choose-from-answer-group/ListenAndChooseFromAnswerGroupCreator.d.ts +3 -0
  615. package/dist/components/questions/types/listen-and-choose-from-answer-group/ListenAndChooseFromAnswerGroupCreator.d.ts.map +1 -0
  616. package/dist/components/questions/types/listen-and-choose-from-answer-group/ListenAndChooseFromAnswerGroupCreator.js +233 -0
  617. package/dist/components/questions/types/listen-and-choose-from-answer-group/ListenAndChooseFromAnswerGroupCreator.js.map +1 -0
  618. package/dist/components/questions/types/listen-and-choose-from-answer-group/index.d.ts +3 -0
  619. package/dist/components/questions/types/listen-and-choose-from-answer-group/index.d.ts.map +1 -0
  620. package/dist/components/questions/types/listen-and-choose-from-answer-group/index.js +3 -0
  621. package/dist/components/questions/types/listen-and-choose-from-answer-group/index.js.map +1 -0
  622. package/dist/components/questions/types/listen-and-choose-from-answer-group/register.d.ts +3 -0
  623. package/dist/components/questions/types/listen-and-choose-from-answer-group/register.d.ts.map +1 -0
  624. package/dist/components/questions/types/listen-and-choose-from-answer-group/register.js +83 -0
  625. package/dist/components/questions/types/listen-and-choose-from-answer-group/register.js.map +1 -0
  626. package/dist/components/questions/types/listen-and-choose-from-answer-group/transform.d.ts +3 -0
  627. package/dist/components/questions/types/listen-and-choose-from-answer-group/transform.d.ts.map +1 -0
  628. package/dist/components/questions/types/listen-and-choose-from-answer-group/transform.js +28 -0
  629. package/dist/components/questions/types/listen-and-choose-from-answer-group/transform.js.map +1 -0
  630. package/dist/components/questions/types/listen-and-choose-objects-in-scene/ListenAndChooseObjectsInSceneClient.d.ts +10 -0
  631. package/dist/components/questions/types/listen-and-choose-objects-in-scene/ListenAndChooseObjectsInSceneClient.d.ts.map +1 -0
  632. package/dist/components/questions/types/listen-and-choose-objects-in-scene/ListenAndChooseObjectsInSceneClient.js +71 -0
  633. package/dist/components/questions/types/listen-and-choose-objects-in-scene/ListenAndChooseObjectsInSceneClient.js.map +1 -0
  634. package/dist/components/questions/types/listen-and-choose-objects-in-scene/ListenAndChooseObjectsInSceneCreator.d.ts +12 -0
  635. package/dist/components/questions/types/listen-and-choose-objects-in-scene/ListenAndChooseObjectsInSceneCreator.d.ts.map +1 -0
  636. package/dist/components/questions/types/listen-and-choose-objects-in-scene/ListenAndChooseObjectsInSceneCreator.js +387 -0
  637. package/dist/components/questions/types/listen-and-choose-objects-in-scene/ListenAndChooseObjectsInSceneCreator.js.map +1 -0
  638. package/dist/components/questions/types/listen-and-choose-objects-in-scene/index.d.ts +3 -0
  639. package/dist/components/questions/types/listen-and-choose-objects-in-scene/index.d.ts.map +1 -0
  640. package/dist/components/questions/types/listen-and-choose-objects-in-scene/index.js +3 -0
  641. package/dist/components/questions/types/listen-and-choose-objects-in-scene/index.js.map +1 -0
  642. package/dist/components/questions/types/listen-and-choose-objects-in-scene/register.d.ts +3 -0
  643. package/dist/components/questions/types/listen-and-choose-objects-in-scene/register.d.ts.map +1 -0
  644. package/dist/components/questions/types/listen-and-choose-objects-in-scene/register.js +101 -0
  645. package/dist/components/questions/types/listen-and-choose-objects-in-scene/register.js.map +1 -0
  646. package/dist/components/questions/types/listen-and-choose-objects-in-scene/transform.d.ts +3 -0
  647. package/dist/components/questions/types/listen-and-choose-objects-in-scene/transform.d.ts.map +1 -0
  648. package/dist/components/questions/types/listen-and-choose-objects-in-scene/transform.js +34 -0
  649. package/dist/components/questions/types/listen-and-choose-objects-in-scene/transform.js.map +1 -0
  650. package/dist/components/questions/types/listen-and-drag-objects-into-scene/ListenAndDragObjectsIntoSceneClient.d.ts +10 -0
  651. package/dist/components/questions/types/listen-and-drag-objects-into-scene/ListenAndDragObjectsIntoSceneClient.d.ts.map +1 -0
  652. package/dist/components/questions/types/listen-and-drag-objects-into-scene/ListenAndDragObjectsIntoSceneClient.js +107 -0
  653. package/dist/components/questions/types/listen-and-drag-objects-into-scene/ListenAndDragObjectsIntoSceneClient.js.map +1 -0
  654. package/dist/components/questions/types/listen-and-drag-objects-into-scene/ListenAndDragObjectsIntoSceneCreator.d.ts +12 -0
  655. package/dist/components/questions/types/listen-and-drag-objects-into-scene/ListenAndDragObjectsIntoSceneCreator.d.ts.map +1 -0
  656. package/dist/components/questions/types/listen-and-drag-objects-into-scene/ListenAndDragObjectsIntoSceneCreator.js +458 -0
  657. package/dist/components/questions/types/listen-and-drag-objects-into-scene/ListenAndDragObjectsIntoSceneCreator.js.map +1 -0
  658. package/dist/components/questions/types/listen-and-drag-objects-into-scene/index.d.ts +3 -0
  659. package/dist/components/questions/types/listen-and-drag-objects-into-scene/index.d.ts.map +1 -0
  660. package/dist/components/questions/types/listen-and-drag-objects-into-scene/index.js +3 -0
  661. package/dist/components/questions/types/listen-and-drag-objects-into-scene/index.js.map +1 -0
  662. package/dist/components/questions/types/listen-and-drag-objects-into-scene/register.d.ts +3 -0
  663. package/dist/components/questions/types/listen-and-drag-objects-into-scene/register.d.ts.map +1 -0
  664. package/dist/components/questions/types/listen-and-drag-objects-into-scene/register.js +111 -0
  665. package/dist/components/questions/types/listen-and-drag-objects-into-scene/register.js.map +1 -0
  666. package/dist/components/questions/types/listen-and-drag-objects-into-scene/transform.d.ts +3 -0
  667. package/dist/components/questions/types/listen-and-drag-objects-into-scene/transform.d.ts.map +1 -0
  668. package/dist/components/questions/types/listen-and-drag-objects-into-scene/transform.js +36 -0
  669. package/dist/components/questions/types/listen-and-drag-objects-into-scene/transform.js.map +1 -0
  670. package/dist/components/questions/types/listen-and-speak-answer/ArrowIndicator.d.ts +21 -0
  671. package/dist/components/questions/types/listen-and-speak-answer/ArrowIndicator.d.ts.map +1 -0
  672. package/dist/components/questions/types/listen-and-speak-answer/ArrowIndicator.js +9 -0
  673. package/dist/components/questions/types/listen-and-speak-answer/ArrowIndicator.js.map +1 -0
  674. package/dist/components/questions/types/listen-and-speak-answer/ListenAndSpeakAnswerClient.d.ts +3 -0
  675. package/dist/components/questions/types/listen-and-speak-answer/ListenAndSpeakAnswerClient.d.ts.map +1 -0
  676. package/dist/components/questions/types/listen-and-speak-answer/ListenAndSpeakAnswerClient.js +23 -0
  677. package/dist/components/questions/types/listen-and-speak-answer/ListenAndSpeakAnswerClient.js.map +1 -0
  678. package/dist/components/questions/types/listen-and-speak-answer/ListenAndSpeakAnswerCreator.d.ts +10 -0
  679. package/dist/components/questions/types/listen-and-speak-answer/ListenAndSpeakAnswerCreator.d.ts.map +1 -0
  680. package/dist/components/questions/types/listen-and-speak-answer/ListenAndSpeakAnswerCreator.js +292 -0
  681. package/dist/components/questions/types/listen-and-speak-answer/ListenAndSpeakAnswerCreator.js.map +1 -0
  682. package/dist/components/questions/types/listen-and-speak-answer/index.d.ts +3 -0
  683. package/dist/components/questions/types/listen-and-speak-answer/index.d.ts.map +1 -0
  684. package/dist/components/questions/types/listen-and-speak-answer/index.js +3 -0
  685. package/dist/components/questions/types/listen-and-speak-answer/index.js.map +1 -0
  686. package/dist/components/questions/types/listen-and-speak-answer/register.d.ts +3 -0
  687. package/dist/components/questions/types/listen-and-speak-answer/register.d.ts.map +1 -0
  688. package/dist/components/questions/types/listen-and-speak-answer/register.js +85 -0
  689. package/dist/components/questions/types/listen-and-speak-answer/register.js.map +1 -0
  690. package/dist/components/questions/types/listen-and-speak-answer/transform.d.ts +3 -0
  691. package/dist/components/questions/types/listen-and-speak-answer/transform.d.ts.map +1 -0
  692. package/dist/components/questions/types/listen-and-speak-answer/transform.js +28 -0
  693. package/dist/components/questions/types/listen-and-speak-answer/transform.js.map +1 -0
  694. package/dist/components/questions/types/listen-and-speak-compare-images/ListenAndSpeakCompareImagesClient.d.ts +4 -0
  695. package/dist/components/questions/types/listen-and-speak-compare-images/ListenAndSpeakCompareImagesClient.d.ts.map +1 -0
  696. package/dist/components/questions/types/listen-and-speak-compare-images/ListenAndSpeakCompareImagesClient.js +33 -0
  697. package/dist/components/questions/types/listen-and-speak-compare-images/ListenAndSpeakCompareImagesClient.js.map +1 -0
  698. package/dist/components/questions/types/listen-and-speak-compare-images/ListenAndSpeakCompareImagesCreator.d.ts +11 -0
  699. package/dist/components/questions/types/listen-and-speak-compare-images/ListenAndSpeakCompareImagesCreator.d.ts.map +1 -0
  700. package/dist/components/questions/types/listen-and-speak-compare-images/ListenAndSpeakCompareImagesCreator.js +296 -0
  701. package/dist/components/questions/types/listen-and-speak-compare-images/ListenAndSpeakCompareImagesCreator.js.map +1 -0
  702. package/dist/components/questions/types/listen-and-speak-compare-images/register.d.ts +3 -0
  703. package/dist/components/questions/types/listen-and-speak-compare-images/register.d.ts.map +1 -0
  704. package/dist/components/questions/types/listen-and-speak-compare-images/register.js +80 -0
  705. package/dist/components/questions/types/listen-and-speak-compare-images/register.js.map +1 -0
  706. package/dist/components/questions/types/listen-and-speak-compare-images/transform.d.ts +3 -0
  707. package/dist/components/questions/types/listen-and-speak-compare-images/transform.d.ts.map +1 -0
  708. package/dist/components/questions/types/listen-and-speak-compare-images/transform.js +28 -0
  709. package/dist/components/questions/types/listen-and-speak-compare-images/transform.js.map +1 -0
  710. package/dist/components/questions/types/listen-and-speak-image-group/ListenAndSpeakImageGroupClient.d.ts +4 -0
  711. package/dist/components/questions/types/listen-and-speak-image-group/ListenAndSpeakImageGroupClient.d.ts.map +1 -0
  712. package/dist/components/questions/types/listen-and-speak-image-group/ListenAndSpeakImageGroupClient.js +35 -0
  713. package/dist/components/questions/types/listen-and-speak-image-group/ListenAndSpeakImageGroupClient.js.map +1 -0
  714. package/dist/components/questions/types/listen-and-speak-image-group/ListenAndSpeakImageGroupCreator.d.ts +11 -0
  715. package/dist/components/questions/types/listen-and-speak-image-group/ListenAndSpeakImageGroupCreator.d.ts.map +1 -0
  716. package/dist/components/questions/types/listen-and-speak-image-group/ListenAndSpeakImageGroupCreator.js +286 -0
  717. package/dist/components/questions/types/listen-and-speak-image-group/ListenAndSpeakImageGroupCreator.js.map +1 -0
  718. package/dist/components/questions/types/listen-and-speak-image-group/register.d.ts +3 -0
  719. package/dist/components/questions/types/listen-and-speak-image-group/register.d.ts.map +1 -0
  720. package/dist/components/questions/types/listen-and-speak-image-group/register.js +82 -0
  721. package/dist/components/questions/types/listen-and-speak-image-group/register.js.map +1 -0
  722. package/dist/components/questions/types/listen-and-speak-image-group/transform.d.ts +3 -0
  723. package/dist/components/questions/types/listen-and-speak-image-group/transform.d.ts.map +1 -0
  724. package/dist/components/questions/types/listen-and-speak-image-group/transform.js +27 -0
  725. package/dist/components/questions/types/listen-and-speak-image-group/transform.js.map +1 -0
  726. package/dist/components/questions/types/listen-and-speak-info-exchange/ListenAndSpeakInfoExchangeClient.d.ts +4 -0
  727. package/dist/components/questions/types/listen-and-speak-info-exchange/ListenAndSpeakInfoExchangeClient.d.ts.map +1 -0
  728. package/dist/components/questions/types/listen-and-speak-info-exchange/ListenAndSpeakInfoExchangeClient.js +39 -0
  729. package/dist/components/questions/types/listen-and-speak-info-exchange/ListenAndSpeakInfoExchangeClient.js.map +1 -0
  730. package/dist/components/questions/types/listen-and-speak-info-exchange/ListenAndSpeakInfoExchangeCreator.d.ts +12 -0
  731. package/dist/components/questions/types/listen-and-speak-info-exchange/ListenAndSpeakInfoExchangeCreator.d.ts.map +1 -0
  732. package/dist/components/questions/types/listen-and-speak-info-exchange/ListenAndSpeakInfoExchangeCreator.js +386 -0
  733. package/dist/components/questions/types/listen-and-speak-info-exchange/ListenAndSpeakInfoExchangeCreator.js.map +1 -0
  734. package/dist/components/questions/types/listen-and-speak-info-exchange/register.d.ts +3 -0
  735. package/dist/components/questions/types/listen-and-speak-info-exchange/register.d.ts.map +1 -0
  736. package/dist/components/questions/types/listen-and-speak-info-exchange/register.js +88 -0
  737. package/dist/components/questions/types/listen-and-speak-info-exchange/register.js.map +1 -0
  738. package/dist/components/questions/types/listen-and-speak-info-exchange/transform.d.ts +3 -0
  739. package/dist/components/questions/types/listen-and-speak-info-exchange/transform.d.ts.map +1 -0
  740. package/dist/components/questions/types/listen-and-speak-info-exchange/transform.js +33 -0
  741. package/dist/components/questions/types/listen-and-speak-info-exchange/transform.js.map +1 -0
  742. package/dist/components/questions/types/listen-and-speak-odd-one-out/ListenAndSpeakOddOneOutClient.d.ts +4 -0
  743. package/dist/components/questions/types/listen-and-speak-odd-one-out/ListenAndSpeakOddOneOutClient.d.ts.map +1 -0
  744. package/dist/components/questions/types/listen-and-speak-odd-one-out/ListenAndSpeakOddOneOutClient.js +27 -0
  745. package/dist/components/questions/types/listen-and-speak-odd-one-out/ListenAndSpeakOddOneOutClient.js.map +1 -0
  746. package/dist/components/questions/types/listen-and-speak-odd-one-out/ListenAndSpeakOddOneOutCreator.d.ts +4 -0
  747. package/dist/components/questions/types/listen-and-speak-odd-one-out/ListenAndSpeakOddOneOutCreator.d.ts.map +1 -0
  748. package/dist/components/questions/types/listen-and-speak-odd-one-out/ListenAndSpeakOddOneOutCreator.js +248 -0
  749. package/dist/components/questions/types/listen-and-speak-odd-one-out/ListenAndSpeakOddOneOutCreator.js.map +1 -0
  750. package/dist/components/questions/types/listen-and-speak-odd-one-out/register.d.ts +3 -0
  751. package/dist/components/questions/types/listen-and-speak-odd-one-out/register.d.ts.map +1 -0
  752. package/dist/components/questions/types/listen-and-speak-odd-one-out/register.js +60 -0
  753. package/dist/components/questions/types/listen-and-speak-odd-one-out/register.js.map +1 -0
  754. package/dist/components/questions/types/listen-and-speak-odd-one-out/transform.d.ts +3 -0
  755. package/dist/components/questions/types/listen-and-speak-odd-one-out/transform.d.ts.map +1 -0
  756. package/dist/components/questions/types/listen-and-speak-odd-one-out/transform.js +19 -0
  757. package/dist/components/questions/types/listen-and-speak-odd-one-out/transform.js.map +1 -0
  758. package/dist/components/questions/types/listen-and-speak-question-list/ListenAndSpeakQuestionListClient.d.ts +4 -0
  759. package/dist/components/questions/types/listen-and-speak-question-list/ListenAndSpeakQuestionListClient.d.ts.map +1 -0
  760. package/dist/components/questions/types/listen-and-speak-question-list/ListenAndSpeakQuestionListClient.js +27 -0
  761. package/dist/components/questions/types/listen-and-speak-question-list/ListenAndSpeakQuestionListClient.js.map +1 -0
  762. package/dist/components/questions/types/listen-and-speak-question-list/ListenAndSpeakQuestionListCreator.d.ts +15 -0
  763. package/dist/components/questions/types/listen-and-speak-question-list/ListenAndSpeakQuestionListCreator.d.ts.map +1 -0
  764. package/dist/components/questions/types/listen-and-speak-question-list/ListenAndSpeakQuestionListCreator.js +257 -0
  765. package/dist/components/questions/types/listen-and-speak-question-list/ListenAndSpeakQuestionListCreator.js.map +1 -0
  766. package/dist/components/questions/types/listen-and-speak-question-list/register.d.ts +3 -0
  767. package/dist/components/questions/types/listen-and-speak-question-list/register.d.ts.map +1 -0
  768. package/dist/components/questions/types/listen-and-speak-question-list/register.js +82 -0
  769. package/dist/components/questions/types/listen-and-speak-question-list/register.js.map +1 -0
  770. package/dist/components/questions/types/listen-and-speak-question-list/transform.d.ts +4 -0
  771. package/dist/components/questions/types/listen-and-speak-question-list/transform.d.ts.map +1 -0
  772. package/dist/components/questions/types/listen-and-speak-question-list/transform.js +27 -0
  773. package/dist/components/questions/types/listen-and-speak-question-list/transform.js.map +1 -0
  774. package/dist/components/questions/types/listen-and-speak-with-story-images/ListenAndSpeakWithStoryImagesClient.d.ts +4 -0
  775. package/dist/components/questions/types/listen-and-speak-with-story-images/ListenAndSpeakWithStoryImagesClient.d.ts.map +1 -0
  776. package/dist/components/questions/types/listen-and-speak-with-story-images/ListenAndSpeakWithStoryImagesClient.js +27 -0
  777. package/dist/components/questions/types/listen-and-speak-with-story-images/ListenAndSpeakWithStoryImagesClient.js.map +1 -0
  778. package/dist/components/questions/types/listen-and-speak-with-story-images/ListenAndSpeakWithStoryImagesCreator.d.ts +4 -0
  779. package/dist/components/questions/types/listen-and-speak-with-story-images/ListenAndSpeakWithStoryImagesCreator.d.ts.map +1 -0
  780. package/dist/components/questions/types/listen-and-speak-with-story-images/ListenAndSpeakWithStoryImagesCreator.js +231 -0
  781. package/dist/components/questions/types/listen-and-speak-with-story-images/ListenAndSpeakWithStoryImagesCreator.js.map +1 -0
  782. package/dist/components/questions/types/listen-and-speak-with-story-images/register.d.ts +3 -0
  783. package/dist/components/questions/types/listen-and-speak-with-story-images/register.d.ts.map +1 -0
  784. package/dist/components/questions/types/listen-and-speak-with-story-images/register.js +57 -0
  785. package/dist/components/questions/types/listen-and-speak-with-story-images/register.js.map +1 -0
  786. package/dist/components/questions/types/listen-and-speak-with-story-images/transform.d.ts +3 -0
  787. package/dist/components/questions/types/listen-and-speak-with-story-images/transform.d.ts.map +1 -0
  788. package/dist/components/questions/types/listen-and-speak-with-story-images/transform.js +17 -0
  789. package/dist/components/questions/types/listen-and-speak-with-story-images/transform.js.map +1 -0
  790. package/dist/components/questions/types/look-picture-choose-correct-answer/LookPictureChooseCorrectAnswerClient.d.ts +21 -0
  791. package/dist/components/questions/types/look-picture-choose-correct-answer/LookPictureChooseCorrectAnswerClient.d.ts.map +1 -0
  792. package/dist/components/questions/types/look-picture-choose-correct-answer/LookPictureChooseCorrectAnswerClient.js +73 -0
  793. package/dist/components/questions/types/look-picture-choose-correct-answer/LookPictureChooseCorrectAnswerClient.js.map +1 -0
  794. package/dist/components/questions/types/look-picture-choose-correct-answer/LookPictureChooseCorrectAnswerCreator.d.ts +16 -0
  795. package/dist/components/questions/types/look-picture-choose-correct-answer/LookPictureChooseCorrectAnswerCreator.d.ts.map +1 -0
  796. package/dist/components/questions/types/look-picture-choose-correct-answer/LookPictureChooseCorrectAnswerCreator.js +231 -0
  797. package/dist/components/questions/types/look-picture-choose-correct-answer/LookPictureChooseCorrectAnswerCreator.js.map +1 -0
  798. package/dist/components/questions/types/look-picture-choose-correct-answer/index.d.ts +2 -0
  799. package/dist/components/questions/types/look-picture-choose-correct-answer/index.d.ts.map +1 -0
  800. package/dist/components/questions/types/look-picture-choose-correct-answer/index.js +2 -0
  801. package/dist/components/questions/types/look-picture-choose-correct-answer/index.js.map +1 -0
  802. package/dist/components/questions/types/look-picture-choose-correct-answer/register.d.ts +3 -0
  803. package/dist/components/questions/types/look-picture-choose-correct-answer/register.d.ts.map +1 -0
  804. package/dist/components/questions/types/look-picture-choose-correct-answer/register.js +67 -0
  805. package/dist/components/questions/types/look-picture-choose-correct-answer/register.js.map +1 -0
  806. package/dist/components/questions/types/look-picture-choose-correct-answer/transform.d.ts +3 -0
  807. package/dist/components/questions/types/look-picture-choose-correct-answer/transform.d.ts.map +1 -0
  808. package/dist/components/questions/types/look-picture-choose-correct-answer/transform.js +43 -0
  809. package/dist/components/questions/types/look-picture-choose-correct-answer/transform.js.map +1 -0
  810. package/dist/components/questions/types/look-picture-fill-blank-choose-answer/LookPictureFillBlankChooseAnswerClient.d.ts +7 -0
  811. package/dist/components/questions/types/look-picture-fill-blank-choose-answer/LookPictureFillBlankChooseAnswerClient.d.ts.map +1 -0
  812. package/dist/components/questions/types/look-picture-fill-blank-choose-answer/LookPictureFillBlankChooseAnswerClient.js +97 -0
  813. package/dist/components/questions/types/look-picture-fill-blank-choose-answer/LookPictureFillBlankChooseAnswerClient.js.map +1 -0
  814. package/dist/components/questions/types/look-picture-fill-blank-choose-answer/LookPictureFillBlankChooseAnswerCreator.d.ts +16 -0
  815. package/dist/components/questions/types/look-picture-fill-blank-choose-answer/LookPictureFillBlankChooseAnswerCreator.d.ts.map +1 -0
  816. package/dist/components/questions/types/look-picture-fill-blank-choose-answer/LookPictureFillBlankChooseAnswerCreator.js +239 -0
  817. package/dist/components/questions/types/look-picture-fill-blank-choose-answer/LookPictureFillBlankChooseAnswerCreator.js.map +1 -0
  818. package/dist/components/questions/types/look-picture-fill-blank-choose-answer/index.d.ts +3 -0
  819. package/dist/components/questions/types/look-picture-fill-blank-choose-answer/index.d.ts.map +1 -0
  820. package/dist/components/questions/types/look-picture-fill-blank-choose-answer/index.js +3 -0
  821. package/dist/components/questions/types/look-picture-fill-blank-choose-answer/index.js.map +1 -0
  822. package/dist/components/questions/types/look-picture-fill-blank-choose-answer/register.d.ts +3 -0
  823. package/dist/components/questions/types/look-picture-fill-blank-choose-answer/register.d.ts.map +1 -0
  824. package/dist/components/questions/types/look-picture-fill-blank-choose-answer/register.js +77 -0
  825. package/dist/components/questions/types/look-picture-fill-blank-choose-answer/register.js.map +1 -0
  826. package/dist/components/questions/types/look-picture-fill-blank-choose-answer/transform.d.ts +3 -0
  827. package/dist/components/questions/types/look-picture-fill-blank-choose-answer/transform.d.ts.map +1 -0
  828. package/dist/components/questions/types/look-picture-fill-blank-choose-answer/transform.js +20 -0
  829. package/dist/components/questions/types/look-picture-fill-blank-choose-answer/transform.js.map +1 -0
  830. package/dist/components/questions/types/look-picture-fill-word-hint/LookPictureFillWordHintClient.d.ts +8 -0
  831. package/dist/components/questions/types/look-picture-fill-word-hint/LookPictureFillWordHintClient.d.ts.map +1 -0
  832. package/dist/components/questions/types/look-picture-fill-word-hint/LookPictureFillWordHintClient.js +135 -0
  833. package/dist/components/questions/types/look-picture-fill-word-hint/LookPictureFillWordHintClient.js.map +1 -0
  834. package/dist/components/questions/types/look-picture-fill-word-hint/LookPictureFillWordHintCreator.d.ts +4 -0
  835. package/dist/components/questions/types/look-picture-fill-word-hint/LookPictureFillWordHintCreator.d.ts.map +1 -0
  836. package/dist/components/questions/types/look-picture-fill-word-hint/LookPictureFillWordHintCreator.js +618 -0
  837. package/dist/components/questions/types/look-picture-fill-word-hint/LookPictureFillWordHintCreator.js.map +1 -0
  838. package/dist/components/questions/types/look-picture-fill-word-hint/index.d.ts +3 -0
  839. package/dist/components/questions/types/look-picture-fill-word-hint/index.d.ts.map +1 -0
  840. package/dist/components/questions/types/look-picture-fill-word-hint/index.js +3 -0
  841. package/dist/components/questions/types/look-picture-fill-word-hint/index.js.map +1 -0
  842. package/dist/components/questions/types/look-picture-fill-word-hint/register.d.ts +3 -0
  843. package/dist/components/questions/types/look-picture-fill-word-hint/register.d.ts.map +1 -0
  844. package/dist/components/questions/types/look-picture-fill-word-hint/register.js +83 -0
  845. package/dist/components/questions/types/look-picture-fill-word-hint/register.js.map +1 -0
  846. package/dist/components/questions/types/look-picture-fill-word-hint/transform.d.ts +3 -0
  847. package/dist/components/questions/types/look-picture-fill-word-hint/transform.d.ts.map +1 -0
  848. package/dist/components/questions/types/look-picture-fill-word-hint/transform.js +30 -0
  849. package/dist/components/questions/types/look-picture-fill-word-hint/transform.js.map +1 -0
  850. package/dist/components/questions/types/match-by-writing-answer/MatchByWritingAnswerClient.d.ts +3 -0
  851. package/dist/components/questions/types/match-by-writing-answer/MatchByWritingAnswerClient.d.ts.map +1 -0
  852. package/dist/components/questions/types/match-by-writing-answer/MatchByWritingAnswerClient.js +39 -0
  853. package/dist/components/questions/types/match-by-writing-answer/MatchByWritingAnswerClient.js.map +1 -0
  854. package/dist/components/questions/types/match-by-writing-answer/MatchByWritingAnswerCreator.d.ts +3 -0
  855. package/dist/components/questions/types/match-by-writing-answer/MatchByWritingAnswerCreator.d.ts.map +1 -0
  856. package/dist/components/questions/types/match-by-writing-answer/MatchByWritingAnswerCreator.js +360 -0
  857. package/dist/components/questions/types/match-by-writing-answer/MatchByWritingAnswerCreator.js.map +1 -0
  858. package/dist/components/questions/types/match-by-writing-answer/index.d.ts +4 -0
  859. package/dist/components/questions/types/match-by-writing-answer/index.d.ts.map +1 -0
  860. package/dist/components/questions/types/match-by-writing-answer/index.js +4 -0
  861. package/dist/components/questions/types/match-by-writing-answer/index.js.map +1 -0
  862. package/dist/components/questions/types/match-by-writing-answer/register.d.ts +3 -0
  863. package/dist/components/questions/types/match-by-writing-answer/register.d.ts.map +1 -0
  864. package/dist/components/questions/types/match-by-writing-answer/register.js +59 -0
  865. package/dist/components/questions/types/match-by-writing-answer/register.js.map +1 -0
  866. package/dist/components/questions/types/match-by-writing-answer/transform.d.ts +12 -0
  867. package/dist/components/questions/types/match-by-writing-answer/transform.d.ts.map +1 -0
  868. package/dist/components/questions/types/match-by-writing-answer/transform.js +62 -0
  869. package/dist/components/questions/types/match-by-writing-answer/transform.js.map +1 -0
  870. package/dist/components/questions/types/read-and-color-objects/ReadAndColorObjectsClient.d.ts +8 -0
  871. package/dist/components/questions/types/read-and-color-objects/ReadAndColorObjectsClient.d.ts.map +1 -0
  872. package/dist/components/questions/types/read-and-color-objects/ReadAndColorObjectsClient.js +17 -0
  873. package/dist/components/questions/types/read-and-color-objects/ReadAndColorObjectsClient.js.map +1 -0
  874. package/dist/components/questions/types/read-and-color-objects/ReadAndColorObjectsCreator.d.ts +3 -0
  875. package/dist/components/questions/types/read-and-color-objects/ReadAndColorObjectsCreator.d.ts.map +1 -0
  876. package/dist/components/questions/types/read-and-color-objects/ReadAndColorObjectsCreator.js +24 -0
  877. package/dist/components/questions/types/read-and-color-objects/ReadAndColorObjectsCreator.js.map +1 -0
  878. package/dist/components/questions/types/read-and-color-objects/index.d.ts +3 -0
  879. package/dist/components/questions/types/read-and-color-objects/index.d.ts.map +1 -0
  880. package/dist/components/questions/types/read-and-color-objects/index.js +3 -0
  881. package/dist/components/questions/types/read-and-color-objects/index.js.map +1 -0
  882. package/dist/components/questions/types/read-and-color-objects/register.d.ts +2 -0
  883. package/dist/components/questions/types/read-and-color-objects/register.d.ts.map +1 -0
  884. package/dist/components/questions/types/read-and-color-objects/register.js +4 -0
  885. package/dist/components/questions/types/read-and-color-objects/register.js.map +1 -0
  886. package/dist/components/questions/types/read-and-color-objects/transform.d.ts +3 -0
  887. package/dist/components/questions/types/read-and-color-objects/transform.d.ts.map +1 -0
  888. package/dist/components/questions/types/read-and-color-objects/transform.js +37 -0
  889. package/dist/components/questions/types/read-and-color-objects/transform.js.map +1 -0
  890. package/dist/components/questions/types/read-displayed-content/ReadDisplayedContentCreator.d.ts +3 -0
  891. package/dist/components/questions/types/read-displayed-content/ReadDisplayedContentCreator.d.ts.map +1 -0
  892. package/dist/components/questions/types/read-displayed-content/ReadDisplayedContentCreator.js +126 -0
  893. package/dist/components/questions/types/read-displayed-content/ReadDisplayedContentCreator.js.map +1 -0
  894. package/dist/components/questions/types/read-displayed-content/register.d.ts +3 -0
  895. package/dist/components/questions/types/read-displayed-content/register.d.ts.map +1 -0
  896. package/dist/components/questions/types/read-displayed-content/register.js +65 -0
  897. package/dist/components/questions/types/read-displayed-content/register.js.map +1 -0
  898. package/dist/components/questions/types/read-displayed-content/transform.d.ts +3 -0
  899. package/dist/components/questions/types/read-displayed-content/transform.d.ts.map +1 -0
  900. package/dist/components/questions/types/read-displayed-content/transform.js +13 -0
  901. package/dist/components/questions/types/read-displayed-content/transform.js.map +1 -0
  902. package/dist/components/questions/types/read-passage-and-answer-questions/ReadPassageAndAnswerQuestionsClient.d.ts +3 -0
  903. package/dist/components/questions/types/read-passage-and-answer-questions/ReadPassageAndAnswerQuestionsClient.d.ts.map +1 -0
  904. package/dist/components/questions/types/read-passage-and-answer-questions/ReadPassageAndAnswerQuestionsClient.js +65 -0
  905. package/dist/components/questions/types/read-passage-and-answer-questions/ReadPassageAndAnswerQuestionsClient.js.map +1 -0
  906. package/dist/components/questions/types/read-passage-and-answer-questions/ReadPassageAndAnswerQuestionsCreator.d.ts +3 -0
  907. package/dist/components/questions/types/read-passage-and-answer-questions/ReadPassageAndAnswerQuestionsCreator.d.ts.map +1 -0
  908. package/dist/components/questions/types/read-passage-and-answer-questions/ReadPassageAndAnswerQuestionsCreator.js +512 -0
  909. package/dist/components/questions/types/read-passage-and-answer-questions/ReadPassageAndAnswerQuestionsCreator.js.map +1 -0
  910. package/dist/components/questions/types/read-passage-and-answer-questions/index.d.ts +3 -0
  911. package/dist/components/questions/types/read-passage-and-answer-questions/index.d.ts.map +1 -0
  912. package/dist/components/questions/types/read-passage-and-answer-questions/index.js +3 -0
  913. package/dist/components/questions/types/read-passage-and-answer-questions/index.js.map +1 -0
  914. package/dist/components/questions/types/read-passage-and-answer-questions/register.d.ts +3 -0
  915. package/dist/components/questions/types/read-passage-and-answer-questions/register.d.ts.map +1 -0
  916. package/dist/components/questions/types/read-passage-and-answer-questions/register.js +59 -0
  917. package/dist/components/questions/types/read-passage-and-answer-questions/register.js.map +1 -0
  918. package/dist/components/questions/types/read-passage-and-answer-questions/transform.d.ts +3 -0
  919. package/dist/components/questions/types/read-passage-and-answer-questions/transform.d.ts.map +1 -0
  920. package/dist/components/questions/types/read-passage-and-answer-questions/transform.js +29 -0
  921. package/dist/components/questions/types/read-passage-and-answer-questions/transform.js.map +1 -0
  922. package/dist/components/questions/types/speaking-conversation/SpeakingConversationCreator.d.ts +16 -0
  923. package/dist/components/questions/types/speaking-conversation/SpeakingConversationCreator.d.ts.map +1 -0
  924. package/dist/components/questions/types/speaking-conversation/SpeakingConversationCreator.js +374 -0
  925. package/dist/components/questions/types/speaking-conversation/SpeakingConversationCreator.js.map +1 -0
  926. package/dist/components/questions/types/speaking-conversation/SpeakingConversationPreviewClient.d.ts +22 -0
  927. package/dist/components/questions/types/speaking-conversation/SpeakingConversationPreviewClient.d.ts.map +1 -0
  928. package/dist/components/questions/types/speaking-conversation/SpeakingConversationPreviewClient.js +42 -0
  929. package/dist/components/questions/types/speaking-conversation/SpeakingConversationPreviewClient.js.map +1 -0
  930. package/dist/components/questions/types/speaking-conversation/register.d.ts +3 -0
  931. package/dist/components/questions/types/speaking-conversation/register.d.ts.map +1 -0
  932. package/dist/components/questions/types/speaking-conversation/register.js +111 -0
  933. package/dist/components/questions/types/speaking-conversation/register.js.map +1 -0
  934. package/dist/components/questions/types/speaking-conversation/transform.d.ts +3 -0
  935. package/dist/components/questions/types/speaking-conversation/transform.d.ts.map +1 -0
  936. package/dist/components/questions/types/speaking-conversation/transform.js +35 -0
  937. package/dist/components/questions/types/speaking-conversation/transform.js.map +1 -0
  938. package/dist/components/questions/types/speaking-cue-card/SpeakingCueCardCreator.d.ts +11 -0
  939. package/dist/components/questions/types/speaking-cue-card/SpeakingCueCardCreator.d.ts.map +1 -0
  940. package/dist/components/questions/types/speaking-cue-card/SpeakingCueCardCreator.js +75 -0
  941. package/dist/components/questions/types/speaking-cue-card/SpeakingCueCardCreator.js.map +1 -0
  942. package/dist/components/questions/types/speaking-cue-card/register.d.ts +3 -0
  943. package/dist/components/questions/types/speaking-cue-card/register.d.ts.map +1 -0
  944. package/dist/components/questions/types/speaking-cue-card/register.js +53 -0
  945. package/dist/components/questions/types/speaking-cue-card/register.js.map +1 -0
  946. package/dist/components/questions/types/speaking-cue-card/transform.d.ts +3 -0
  947. package/dist/components/questions/types/speaking-cue-card/transform.d.ts.map +1 -0
  948. package/dist/components/questions/types/speaking-cue-card/transform.js +13 -0
  949. package/dist/components/questions/types/speaking-cue-card/transform.js.map +1 -0
  950. package/dist/components/questions/types/speaking-describe-image/SpeakingDescribeImageClient.d.ts +11 -0
  951. package/dist/components/questions/types/speaking-describe-image/SpeakingDescribeImageClient.d.ts.map +1 -0
  952. package/dist/components/questions/types/speaking-describe-image/SpeakingDescribeImageClient.js +11 -0
  953. package/dist/components/questions/types/speaking-describe-image/SpeakingDescribeImageClient.js.map +1 -0
  954. package/dist/components/questions/types/speaking-describe-image/SpeakingDescribeImageCreator.d.ts +3 -0
  955. package/dist/components/questions/types/speaking-describe-image/SpeakingDescribeImageCreator.d.ts.map +1 -0
  956. package/dist/components/questions/types/speaking-describe-image/SpeakingDescribeImageCreator.js +162 -0
  957. package/dist/components/questions/types/speaking-describe-image/SpeakingDescribeImageCreator.js.map +1 -0
  958. package/dist/components/questions/types/speaking-describe-image/index.d.ts +3 -0
  959. package/dist/components/questions/types/speaking-describe-image/index.d.ts.map +1 -0
  960. package/dist/components/questions/types/speaking-describe-image/index.js +3 -0
  961. package/dist/components/questions/types/speaking-describe-image/index.js.map +1 -0
  962. package/dist/components/questions/types/speaking-describe-image/register.d.ts +3 -0
  963. package/dist/components/questions/types/speaking-describe-image/register.d.ts.map +1 -0
  964. package/dist/components/questions/types/speaking-describe-image/register.js +70 -0
  965. package/dist/components/questions/types/speaking-describe-image/register.js.map +1 -0
  966. package/dist/components/questions/types/speaking-describe-image/transform.d.ts +3 -0
  967. package/dist/components/questions/types/speaking-describe-image/transform.d.ts.map +1 -0
  968. package/dist/components/questions/types/speaking-describe-image/transform.js +17 -0
  969. package/dist/components/questions/types/speaking-describe-image/transform.js.map +1 -0
  970. package/dist/components/questions/types/spontaneous-qa/SpontaneousQACreator.d.ts +3 -0
  971. package/dist/components/questions/types/spontaneous-qa/SpontaneousQACreator.d.ts.map +1 -0
  972. package/dist/components/questions/types/spontaneous-qa/SpontaneousQACreator.js +235 -0
  973. package/dist/components/questions/types/spontaneous-qa/SpontaneousQACreator.js.map +1 -0
  974. package/dist/components/questions/types/spontaneous-qa/register.d.ts +3 -0
  975. package/dist/components/questions/types/spontaneous-qa/register.d.ts.map +1 -0
  976. package/dist/components/questions/types/spontaneous-qa/register.js +94 -0
  977. package/dist/components/questions/types/spontaneous-qa/register.js.map +1 -0
  978. package/dist/components/questions/types/spontaneous-qa/transform.d.ts +3 -0
  979. package/dist/components/questions/types/spontaneous-qa/transform.d.ts.map +1 -0
  980. package/dist/components/questions/types/spontaneous-qa/transform.js +35 -0
  981. package/dist/components/questions/types/spontaneous-qa/transform.js.map +1 -0
  982. package/dist/components/questions/types/true-false/TrueFalseClient.d.ts +15 -0
  983. package/dist/components/questions/types/true-false/TrueFalseClient.d.ts.map +1 -0
  984. package/dist/components/questions/types/true-false/TrueFalseClient.js +76 -0
  985. package/dist/components/questions/types/true-false/TrueFalseClient.js.map +1 -0
  986. package/dist/components/questions/types/true-false/TrueFalseCreator.d.ts +22 -0
  987. package/dist/components/questions/types/true-false/TrueFalseCreator.d.ts.map +1 -0
  988. package/dist/components/questions/types/true-false/TrueFalseCreator.js +245 -0
  989. package/dist/components/questions/types/true-false/TrueFalseCreator.js.map +1 -0
  990. package/dist/components/questions/types/true-false/index.d.ts +3 -0
  991. package/dist/components/questions/types/true-false/index.d.ts.map +1 -0
  992. package/dist/components/questions/types/true-false/index.js +3 -0
  993. package/dist/components/questions/types/true-false/index.js.map +1 -0
  994. package/dist/components/questions/types/true-false/register.d.ts +3 -0
  995. package/dist/components/questions/types/true-false/register.d.ts.map +1 -0
  996. package/dist/components/questions/types/true-false/register.js +78 -0
  997. package/dist/components/questions/types/true-false/register.js.map +1 -0
  998. package/dist/components/questions/types/true-false/transform.d.ts +3 -0
  999. package/dist/components/questions/types/true-false/transform.d.ts.map +1 -0
  1000. package/dist/components/questions/types/true-false/transform.js +33 -0
  1001. package/dist/components/questions/types/true-false/transform.js.map +1 -0
  1002. package/dist/components/questions/types/word-fill-paragraph/WordFillParagraphClient.d.ts +26 -0
  1003. package/dist/components/questions/types/word-fill-paragraph/WordFillParagraphClient.d.ts.map +1 -0
  1004. package/dist/components/questions/types/word-fill-paragraph/WordFillParagraphClient.js +234 -0
  1005. package/dist/components/questions/types/word-fill-paragraph/WordFillParagraphClient.js.map +1 -0
  1006. package/dist/components/questions/types/word-fill-paragraph/WordFillParagraphCreator.d.ts +14 -0
  1007. package/dist/components/questions/types/word-fill-paragraph/WordFillParagraphCreator.d.ts.map +1 -0
  1008. package/dist/components/questions/types/word-fill-paragraph/WordFillParagraphCreator.js +632 -0
  1009. package/dist/components/questions/types/word-fill-paragraph/WordFillParagraphCreator.js.map +1 -0
  1010. package/dist/components/questions/types/word-fill-paragraph/WordFillParagraphWrapper.d.ts +19 -0
  1011. package/dist/components/questions/types/word-fill-paragraph/WordFillParagraphWrapper.d.ts.map +1 -0
  1012. package/dist/components/questions/types/word-fill-paragraph/WordFillParagraphWrapper.js +29 -0
  1013. package/dist/components/questions/types/word-fill-paragraph/WordFillParagraphWrapper.js.map +1 -0
  1014. package/dist/components/questions/types/word-fill-paragraph/index.d.ts +3 -0
  1015. package/dist/components/questions/types/word-fill-paragraph/index.d.ts.map +1 -0
  1016. package/dist/components/questions/types/word-fill-paragraph/index.js +3 -0
  1017. package/dist/components/questions/types/word-fill-paragraph/index.js.map +1 -0
  1018. package/dist/components/questions/types/word-fill-paragraph/register.d.ts +9 -0
  1019. package/dist/components/questions/types/word-fill-paragraph/register.d.ts.map +1 -0
  1020. package/dist/components/questions/types/word-fill-paragraph/register.js +137 -0
  1021. package/dist/components/questions/types/word-fill-paragraph/register.js.map +1 -0
  1022. package/dist/components/questions/types/word-fill-paragraph/transform.d.ts +8 -0
  1023. package/dist/components/questions/types/word-fill-paragraph/transform.d.ts.map +1 -0
  1024. package/dist/components/questions/types/word-fill-paragraph/transform.js +57 -0
  1025. package/dist/components/questions/types/word-fill-paragraph/transform.js.map +1 -0
  1026. package/dist/components/questions/types/word-fill-structured-form/WordFillStructuredFormClient.d.ts +4 -0
  1027. package/dist/components/questions/types/word-fill-structured-form/WordFillStructuredFormClient.d.ts.map +1 -0
  1028. package/dist/components/questions/types/word-fill-structured-form/WordFillStructuredFormClient.js +139 -0
  1029. package/dist/components/questions/types/word-fill-structured-form/WordFillStructuredFormClient.js.map +1 -0
  1030. package/dist/components/questions/types/word-fill-structured-form/WordFillStructuredFormCreator.d.ts +3 -0
  1031. package/dist/components/questions/types/word-fill-structured-form/WordFillStructuredFormCreator.d.ts.map +1 -0
  1032. package/dist/components/questions/types/word-fill-structured-form/WordFillStructuredFormCreator.js +262 -0
  1033. package/dist/components/questions/types/word-fill-structured-form/WordFillStructuredFormCreator.js.map +1 -0
  1034. package/dist/components/questions/types/word-fill-structured-form/index.d.ts +3 -0
  1035. package/dist/components/questions/types/word-fill-structured-form/index.d.ts.map +1 -0
  1036. package/dist/components/questions/types/word-fill-structured-form/index.js +3 -0
  1037. package/dist/components/questions/types/word-fill-structured-form/index.js.map +1 -0
  1038. package/dist/components/questions/types/word-fill-structured-form/register.d.ts +3 -0
  1039. package/dist/components/questions/types/word-fill-structured-form/register.d.ts.map +1 -0
  1040. package/dist/components/questions/types/word-fill-structured-form/register.js +68 -0
  1041. package/dist/components/questions/types/word-fill-structured-form/register.js.map +1 -0
  1042. package/dist/components/questions/types/word-fill-structured-form/transform.d.ts +11 -0
  1043. package/dist/components/questions/types/word-fill-structured-form/transform.d.ts.map +1 -0
  1044. package/dist/components/questions/types/word-fill-structured-form/transform.js +41 -0
  1045. package/dist/components/questions/types/word-fill-structured-form/transform.js.map +1 -0
  1046. package/dist/components/questions/types/word-ordering/WordOrderingClient.d.ts +3 -0
  1047. package/dist/components/questions/types/word-ordering/WordOrderingClient.d.ts.map +1 -0
  1048. package/dist/components/questions/types/word-ordering/WordOrderingClient.js +85 -0
  1049. package/dist/components/questions/types/word-ordering/WordOrderingClient.js.map +1 -0
  1050. package/dist/components/questions/types/word-ordering/WordOrderingCreator.d.ts +12 -0
  1051. package/dist/components/questions/types/word-ordering/WordOrderingCreator.d.ts.map +1 -0
  1052. package/dist/components/questions/types/word-ordering/WordOrderingCreator.js +193 -0
  1053. package/dist/components/questions/types/word-ordering/WordOrderingCreator.js.map +1 -0
  1054. package/dist/components/questions/types/word-ordering/index.d.ts +3 -0
  1055. package/dist/components/questions/types/word-ordering/index.d.ts.map +1 -0
  1056. package/dist/components/questions/types/word-ordering/index.js +3 -0
  1057. package/dist/components/questions/types/word-ordering/index.js.map +1 -0
  1058. package/dist/components/questions/types/word-ordering/register.d.ts +3 -0
  1059. package/dist/components/questions/types/word-ordering/register.d.ts.map +1 -0
  1060. package/dist/components/questions/types/word-ordering/register.js +47 -0
  1061. package/dist/components/questions/types/word-ordering/register.js.map +1 -0
  1062. package/dist/components/questions/types/word-ordering/transform.d.ts +8 -0
  1063. package/dist/components/questions/types/word-ordering/transform.d.ts.map +1 -0
  1064. package/dist/components/questions/types/word-ordering/transform.js +25 -0
  1065. package/dist/components/questions/types/word-ordering/transform.js.map +1 -0
  1066. package/dist/components/questions/types/write-a-short-letter/WriteAShortLetterClient.d.ts +7 -0
  1067. package/dist/components/questions/types/write-a-short-letter/WriteAShortLetterClient.d.ts.map +1 -0
  1068. package/dist/components/questions/types/write-a-short-letter/WriteAShortLetterClient.js +99 -0
  1069. package/dist/components/questions/types/write-a-short-letter/WriteAShortLetterClient.js.map +1 -0
  1070. package/dist/components/questions/types/write-a-short-letter/WriteAShortLetterCreator.d.ts +3 -0
  1071. package/dist/components/questions/types/write-a-short-letter/WriteAShortLetterCreator.d.ts.map +1 -0
  1072. package/dist/components/questions/types/write-a-short-letter/WriteAShortLetterCreator.js +321 -0
  1073. package/dist/components/questions/types/write-a-short-letter/WriteAShortLetterCreator.js.map +1 -0
  1074. package/dist/components/questions/types/write-a-short-letter/index.d.ts +3 -0
  1075. package/dist/components/questions/types/write-a-short-letter/index.d.ts.map +1 -0
  1076. package/dist/components/questions/types/write-a-short-letter/index.js +3 -0
  1077. package/dist/components/questions/types/write-a-short-letter/index.js.map +1 -0
  1078. package/dist/components/questions/types/write-a-short-letter/register.d.ts +3 -0
  1079. package/dist/components/questions/types/write-a-short-letter/register.d.ts.map +1 -0
  1080. package/dist/components/questions/types/write-a-short-letter/register.js +69 -0
  1081. package/dist/components/questions/types/write-a-short-letter/register.js.map +1 -0
  1082. package/dist/components/questions/types/write-a-short-letter/transform.d.ts +3 -0
  1083. package/dist/components/questions/types/write-a-short-letter/transform.d.ts.map +1 -0
  1084. package/dist/components/questions/types/write-a-short-letter/transform.js +26 -0
  1085. package/dist/components/questions/types/write-a-short-letter/transform.js.map +1 -0
  1086. package/dist/components/questions/types/write-correct-verb-form/WriteCorrectVerbFormClient.d.ts +3 -0
  1087. package/dist/components/questions/types/write-correct-verb-form/WriteCorrectVerbFormClient.d.ts.map +1 -0
  1088. package/dist/components/questions/types/write-correct-verb-form/WriteCorrectVerbFormClient.js +62 -0
  1089. package/dist/components/questions/types/write-correct-verb-form/WriteCorrectVerbFormClient.js.map +1 -0
  1090. package/dist/components/questions/types/write-correct-verb-form/WriteCorrectVerbFormCreator.d.ts +3 -0
  1091. package/dist/components/questions/types/write-correct-verb-form/WriteCorrectVerbFormCreator.d.ts.map +1 -0
  1092. package/dist/components/questions/types/write-correct-verb-form/WriteCorrectVerbFormCreator.js +197 -0
  1093. package/dist/components/questions/types/write-correct-verb-form/WriteCorrectVerbFormCreator.js.map +1 -0
  1094. package/dist/components/questions/types/write-correct-verb-form/index.d.ts +3 -0
  1095. package/dist/components/questions/types/write-correct-verb-form/index.d.ts.map +1 -0
  1096. package/dist/components/questions/types/write-correct-verb-form/index.js +3 -0
  1097. package/dist/components/questions/types/write-correct-verb-form/index.js.map +1 -0
  1098. package/dist/components/questions/types/write-correct-verb-form/register.d.ts +3 -0
  1099. package/dist/components/questions/types/write-correct-verb-form/register.d.ts.map +1 -0
  1100. package/dist/components/questions/types/write-correct-verb-form/register.js +63 -0
  1101. package/dist/components/questions/types/write-correct-verb-form/register.js.map +1 -0
  1102. package/dist/components/questions/types/write-correct-verb-form/transform.d.ts +3 -0
  1103. package/dist/components/questions/types/write-correct-verb-form/transform.d.ts.map +1 -0
  1104. package/dist/components/questions/types/write-correct-verb-form/transform.js +18 -0
  1105. package/dist/components/questions/types/write-correct-verb-form/transform.js.map +1 -0
  1106. package/dist/components/questions/types/write-sentences/WriteSentencesClient.d.ts +3 -0
  1107. package/dist/components/questions/types/write-sentences/WriteSentencesClient.d.ts.map +1 -0
  1108. package/dist/components/questions/types/write-sentences/WriteSentencesClient.js +23 -0
  1109. package/dist/components/questions/types/write-sentences/WriteSentencesClient.js.map +1 -0
  1110. package/dist/components/questions/types/write-sentences/WriteSentencesCreator.d.ts +3 -0
  1111. package/dist/components/questions/types/write-sentences/WriteSentencesCreator.d.ts.map +1 -0
  1112. package/dist/components/questions/types/write-sentences/WriteSentencesCreator.js +175 -0
  1113. package/dist/components/questions/types/write-sentences/WriteSentencesCreator.js.map +1 -0
  1114. package/dist/components/questions/types/write-sentences/index.d.ts +3 -0
  1115. package/dist/components/questions/types/write-sentences/index.d.ts.map +1 -0
  1116. package/dist/components/questions/types/write-sentences/index.js +3 -0
  1117. package/dist/components/questions/types/write-sentences/index.js.map +1 -0
  1118. package/dist/components/questions/types/write-sentences/register.d.ts +3 -0
  1119. package/dist/components/questions/types/write-sentences/register.d.ts.map +1 -0
  1120. package/dist/components/questions/types/write-sentences/register.js +59 -0
  1121. package/dist/components/questions/types/write-sentences/register.js.map +1 -0
  1122. package/dist/components/questions/types/write-sentences/transform.d.ts +3 -0
  1123. package/dist/components/questions/types/write-sentences/transform.d.ts.map +1 -0
  1124. package/dist/components/questions/types/write-sentences/transform.js +29 -0
  1125. package/dist/components/questions/types/write-sentences/transform.js.map +1 -0
  1126. package/dist/components/questions/types/write-short-paragraph/WriteShortParagraphClient.d.ts +3 -0
  1127. package/dist/components/questions/types/write-short-paragraph/WriteShortParagraphClient.d.ts.map +1 -0
  1128. package/dist/components/questions/types/write-short-paragraph/WriteShortParagraphClient.js +97 -0
  1129. package/dist/components/questions/types/write-short-paragraph/WriteShortParagraphClient.js.map +1 -0
  1130. package/dist/components/questions/types/write-short-paragraph/WriteShortParagraphCreator.d.ts +3 -0
  1131. package/dist/components/questions/types/write-short-paragraph/WriteShortParagraphCreator.d.ts.map +1 -0
  1132. package/dist/components/questions/types/write-short-paragraph/WriteShortParagraphCreator.js +162 -0
  1133. package/dist/components/questions/types/write-short-paragraph/WriteShortParagraphCreator.js.map +1 -0
  1134. package/dist/components/questions/types/write-short-paragraph/index.d.ts +3 -0
  1135. package/dist/components/questions/types/write-short-paragraph/index.d.ts.map +1 -0
  1136. package/dist/components/questions/types/write-short-paragraph/index.js +3 -0
  1137. package/dist/components/questions/types/write-short-paragraph/index.js.map +1 -0
  1138. package/dist/components/questions/types/write-short-paragraph/register.d.ts +3 -0
  1139. package/dist/components/questions/types/write-short-paragraph/register.d.ts.map +1 -0
  1140. package/dist/components/questions/types/write-short-paragraph/register.js +5 -0
  1141. package/dist/components/questions/types/write-short-paragraph/register.js.map +1 -0
  1142. package/dist/components/questions/types/write-short-paragraph/transform.d.ts +3 -0
  1143. package/dist/components/questions/types/write-short-paragraph/transform.d.ts.map +1 -0
  1144. package/dist/components/questions/types/write-short-paragraph/transform.js +22 -0
  1145. package/dist/components/questions/types/write-short-paragraph/transform.js.map +1 -0
  1146. package/dist/components/questions/viewer/QuestionGroupViewer.d.ts +9 -0
  1147. package/dist/components/questions/viewer/QuestionGroupViewer.d.ts.map +1 -0
  1148. package/dist/components/questions/viewer/QuestionGroupViewer.js +37 -0
  1149. package/dist/components/questions/viewer/QuestionGroupViewer.js.map +1 -0
  1150. package/dist/components/questions/viewer/QuestionViewer.d.ts +10 -0
  1151. package/dist/components/questions/viewer/QuestionViewer.d.ts.map +1 -0
  1152. package/dist/components/questions/viewer/QuestionViewer.js +447 -0
  1153. package/dist/components/questions/viewer/QuestionViewer.js.map +1 -0
  1154. package/dist/components/questions/viewer/index.d.ts +3 -0
  1155. package/dist/components/questions/viewer/index.d.ts.map +1 -0
  1156. package/dist/components/questions/viewer/index.js +3 -0
  1157. package/dist/components/questions/viewer/index.js.map +1 -0
  1158. package/dist/components/results/ResultReviewPageContainer.d.ts +14 -0
  1159. package/dist/components/results/ResultReviewPageContainer.d.ts.map +1 -0
  1160. package/dist/components/results/ResultReviewPageContainer.js +99 -0
  1161. package/dist/components/results/ResultReviewPageContainer.js.map +1 -0
  1162. package/dist/components/results/ReviewQuestionRenderer.d.ts +7 -0
  1163. package/dist/components/results/ReviewQuestionRenderer.d.ts.map +1 -0
  1164. package/dist/components/results/ReviewQuestionRenderer.js +73 -0
  1165. package/dist/components/results/ReviewQuestionRenderer.js.map +1 -0
  1166. package/dist/components/results/index.d.ts +5 -0
  1167. package/dist/components/results/index.d.ts.map +1 -0
  1168. package/dist/components/results/index.js +3 -0
  1169. package/dist/components/results/index.js.map +1 -0
  1170. package/dist/components/results/result-review.utils.d.ts +3 -0
  1171. package/dist/components/results/result-review.utils.d.ts.map +1 -0
  1172. package/dist/components/results/result-review.utils.js +7 -0
  1173. package/dist/components/results/result-review.utils.js.map +1 -0
  1174. package/dist/components/results/review-data.d.ts +3 -0
  1175. package/dist/components/results/review-data.d.ts.map +1 -0
  1176. package/dist/components/results/review-data.js +151 -0
  1177. package/dist/components/results/review-data.js.map +1 -0
  1178. package/dist/components/results/review-renderer.utils.d.ts +68 -0
  1179. package/dist/components/results/review-renderer.utils.d.ts.map +1 -0
  1180. package/dist/components/results/review-renderer.utils.js +98 -0
  1181. package/dist/components/results/review-renderer.utils.js.map +1 -0
  1182. package/dist/components/results/review-types.d.ts +62 -0
  1183. package/dist/components/results/review-types.d.ts.map +1 -0
  1184. package/dist/components/results/review-types.js +2 -0
  1185. package/dist/components/results/review-types.js.map +1 -0
  1186. package/dist/components/themes/cambridge-yle/CambridgeYleAudioPlayer.d.ts +9 -0
  1187. package/dist/components/themes/cambridge-yle/CambridgeYleAudioPlayer.d.ts.map +1 -0
  1188. package/dist/components/themes/cambridge-yle/CambridgeYleAudioPlayer.js +139 -0
  1189. package/dist/components/themes/cambridge-yle/CambridgeYleAudioPlayer.js.map +1 -0
  1190. package/dist/components/themes/cambridge-yle/CambridgeYleBottomNav.d.ts +11 -0
  1191. package/dist/components/themes/cambridge-yle/CambridgeYleBottomNav.d.ts.map +1 -0
  1192. package/dist/components/themes/cambridge-yle/CambridgeYleBottomNav.js +13 -0
  1193. package/dist/components/themes/cambridge-yle/CambridgeYleBottomNav.js.map +1 -0
  1194. package/dist/components/themes/cambridge-yle/CambridgeYleExamLayout.d.ts +3 -0
  1195. package/dist/components/themes/cambridge-yle/CambridgeYleExamLayout.d.ts.map +1 -0
  1196. package/dist/components/themes/cambridge-yle/CambridgeYleExamLayout.js +19 -0
  1197. package/dist/components/themes/cambridge-yle/CambridgeYleExamLayout.js.map +1 -0
  1198. package/dist/components/themes/cambridge-yle/CambridgeYleExampleText.d.ts +7 -0
  1199. package/dist/components/themes/cambridge-yle/CambridgeYleExampleText.d.ts.map +1 -0
  1200. package/dist/components/themes/cambridge-yle/CambridgeYleExampleText.js +12 -0
  1201. package/dist/components/themes/cambridge-yle/CambridgeYleExampleText.js.map +1 -0
  1202. package/dist/components/themes/cambridge-yle/CambridgeYleHeader.d.ts +14 -0
  1203. package/dist/components/themes/cambridge-yle/CambridgeYleHeader.d.ts.map +1 -0
  1204. package/dist/components/themes/cambridge-yle/CambridgeYleHeader.js +12 -0
  1205. package/dist/components/themes/cambridge-yle/CambridgeYleHeader.js.map +1 -0
  1206. package/dist/components/themes/cambridge-yle/CambridgeYleInstructionBanner.d.ts +10 -0
  1207. package/dist/components/themes/cambridge-yle/CambridgeYleInstructionBanner.d.ts.map +1 -0
  1208. package/dist/components/themes/cambridge-yle/CambridgeYleInstructionBanner.js +10 -0
  1209. package/dist/components/themes/cambridge-yle/CambridgeYleInstructionBanner.js.map +1 -0
  1210. package/dist/components/themes/cambridge-yle/CambridgeYleNavButton.d.ts +8 -0
  1211. package/dist/components/themes/cambridge-yle/CambridgeYleNavButton.d.ts.map +1 -0
  1212. package/dist/components/themes/cambridge-yle/CambridgeYleNavButton.js +14 -0
  1213. package/dist/components/themes/cambridge-yle/CambridgeYleNavButton.js.map +1 -0
  1214. package/dist/components/themes/cambridge-yle/CambridgeYlePartBanner.d.ts +9 -0
  1215. package/dist/components/themes/cambridge-yle/CambridgeYlePartBanner.d.ts.map +1 -0
  1216. package/dist/components/themes/cambridge-yle/CambridgeYlePartBanner.js +9 -0
  1217. package/dist/components/themes/cambridge-yle/CambridgeYlePartBanner.js.map +1 -0
  1218. package/dist/components/themes/cambridge-yle/CambridgeYleProgressBar.d.ts +7 -0
  1219. package/dist/components/themes/cambridge-yle/CambridgeYleProgressBar.d.ts.map +1 -0
  1220. package/dist/components/themes/cambridge-yle/CambridgeYleProgressBar.js +7 -0
  1221. package/dist/components/themes/cambridge-yle/CambridgeYleProgressBar.js.map +1 -0
  1222. package/dist/components/themes/cambridge-yle/CambridgeYleQuestionCard.d.ts +8 -0
  1223. package/dist/components/themes/cambridge-yle/CambridgeYleQuestionCard.d.ts.map +1 -0
  1224. package/dist/components/themes/cambridge-yle/CambridgeYleQuestionCard.js +6 -0
  1225. package/dist/components/themes/cambridge-yle/CambridgeYleQuestionCard.js.map +1 -0
  1226. package/dist/components/themes/cambridge-yle/CambridgeYleQuestionCardFullWidth.d.ts +11 -0
  1227. package/dist/components/themes/cambridge-yle/CambridgeYleQuestionCardFullWidth.d.ts.map +1 -0
  1228. package/dist/components/themes/cambridge-yle/CambridgeYleQuestionCardFullWidth.js +10 -0
  1229. package/dist/components/themes/cambridge-yle/CambridgeYleQuestionCardFullWidth.js.map +1 -0
  1230. package/dist/components/themes/cambridge-yle/CambridgeYleSidebar.d.ts +25 -0
  1231. package/dist/components/themes/cambridge-yle/CambridgeYleSidebar.d.ts.map +1 -0
  1232. package/dist/components/themes/cambridge-yle/CambridgeYleSidebar.js +42 -0
  1233. package/dist/components/themes/cambridge-yle/CambridgeYleSidebar.js.map +1 -0
  1234. package/dist/components/themes/cambridge-yle/CambridgeYleTimer.d.ts +8 -0
  1235. package/dist/components/themes/cambridge-yle/CambridgeYleTimer.d.ts.map +1 -0
  1236. package/dist/components/themes/cambridge-yle/CambridgeYleTimer.js +26 -0
  1237. package/dist/components/themes/cambridge-yle/CambridgeYleTimer.js.map +1 -0
  1238. package/dist/components/themes/cambridge-yle/assets/images/background-ocean-edu-2.png +0 -0
  1239. package/dist/components/themes/cambridge-yle/assets/images/background-ocean-edu-neutral.png +0 -0
  1240. package/dist/components/themes/cambridge-yle/assets/images/background-ocean-edu.png +0 -0
  1241. package/dist/components/themes/cambridge-yle/assets/images/bg-gradient.png +0 -0
  1242. package/dist/components/themes/cambridge-yle/assets/images/bg-title-old.png +0 -0
  1243. package/dist/components/themes/cambridge-yle/assets/images/bg-title-part.png +0 -0
  1244. package/dist/components/themes/cambridge-yle/assets/images/bg-title.png +0 -0
  1245. package/dist/components/themes/cambridge-yle/assets/images/bg.jpeg +0 -0
  1246. package/dist/components/themes/cambridge-yle/assets/images/border-2.png +0 -0
  1247. package/dist/components/themes/cambridge-yle/assets/images/border-old.png +0 -0
  1248. package/dist/components/themes/cambridge-yle/assets/images/border.png +0 -0
  1249. package/dist/components/themes/cambridge-yle/assets/images/button_feedback_vi.png +0 -0
  1250. package/dist/components/themes/cambridge-yle/assets/images/button_feedback_vi.webp +0 -0
  1251. package/dist/components/themes/cambridge-yle/assets/images/close.png +0 -0
  1252. package/dist/components/themes/cambridge-yle/assets/images/close_old.png +0 -0
  1253. package/dist/components/themes/cambridge-yle/assets/images/demo-audio.mp3 +0 -0
  1254. package/dist/components/themes/cambridge-yle/assets/images/demo-image.jpeg +0 -0
  1255. package/dist/components/themes/cambridge-yle/assets/images/frame-old.png +0 -0
  1256. package/dist/components/themes/cambridge-yle/assets/images/frame.png +0 -0
  1257. package/dist/components/themes/cambridge-yle/assets/images/ic-pause.png +0 -0
  1258. package/dist/components/themes/cambridge-yle/assets/images/icon-bottom-left.png +0 -0
  1259. package/dist/components/themes/cambridge-yle/assets/images/icon-bottom-right.png +0 -0
  1260. package/dist/components/themes/cambridge-yle/assets/images/new_design.png +0 -0
  1261. package/dist/components/themes/cambridge-yle/assets/images/phao.png +0 -0
  1262. package/dist/components/themes/cambridge-yle/assets/images/question-card-bg-full.png +0 -0
  1263. package/dist/components/themes/cambridge-yle/assets/images/question-card-bg.png +0 -0
  1264. package/dist/components/themes/cambridge-yle/assets/images/rangsanho.png +0 -0
  1265. package/dist/components/themes/cambridge-yle/assets/images/rocket.png +0 -0
  1266. package/dist/components/themes/cambridge-yle/assets/images/sanho.png +0 -0
  1267. package/dist/components/themes/cambridge-yle/assets/images/sao.png +0 -0
  1268. package/dist/components/themes/cambridge-yle/assets/images/vooc.png +0 -0
  1269. package/dist/components/themes/cambridge-yle/index.d.ts +13 -0
  1270. package/dist/components/themes/cambridge-yle/index.d.ts.map +1 -0
  1271. package/dist/components/themes/cambridge-yle/index.js +14 -0
  1272. package/dist/components/themes/cambridge-yle/index.js.map +1 -0
  1273. package/dist/components/themes/english-certification/EcAnswerTheQuestion.d.ts +19 -0
  1274. package/dist/components/themes/english-certification/EcAnswerTheQuestion.d.ts.map +1 -0
  1275. package/dist/components/themes/english-certification/EcAnswerTheQuestion.js +25 -0
  1276. package/dist/components/themes/english-certification/EcAnswerTheQuestion.js.map +1 -0
  1277. package/dist/components/themes/english-certification/EcMatchByWritingAnswer.d.ts +22 -0
  1278. package/dist/components/themes/english-certification/EcMatchByWritingAnswer.d.ts.map +1 -0
  1279. package/dist/components/themes/english-certification/EcMatchByWritingAnswer.js +89 -0
  1280. package/dist/components/themes/english-certification/EcMatchByWritingAnswer.js.map +1 -0
  1281. package/dist/components/themes/english-certification/EcWordFillParagraph.d.ts +20 -0
  1282. package/dist/components/themes/english-certification/EcWordFillParagraph.d.ts.map +1 -0
  1283. package/dist/components/themes/english-certification/EcWordFillParagraph.js +56 -0
  1284. package/dist/components/themes/english-certification/EcWordFillParagraph.js.map +1 -0
  1285. package/dist/components/themes/english-certification/EcWordFillStructuredForm.d.ts +20 -0
  1286. package/dist/components/themes/english-certification/EcWordFillStructuredForm.d.ts.map +1 -0
  1287. package/dist/components/themes/english-certification/EcWordFillStructuredForm.js +157 -0
  1288. package/dist/components/themes/english-certification/EcWordFillStructuredForm.js.map +1 -0
  1289. package/dist/components/themes/english-certification/EcWritingTask.d.ts +19 -0
  1290. package/dist/components/themes/english-certification/EcWritingTask.d.ts.map +1 -0
  1291. package/dist/components/themes/english-certification/EcWritingTask.js +35 -0
  1292. package/dist/components/themes/english-certification/EcWritingTask.js.map +1 -0
  1293. package/dist/components/themes/english-certification/EnglishCertificationAudioPlayer.d.ts +14 -0
  1294. package/dist/components/themes/english-certification/EnglishCertificationAudioPlayer.d.ts.map +1 -0
  1295. package/dist/components/themes/english-certification/EnglishCertificationAudioPlayer.js +115 -0
  1296. package/dist/components/themes/english-certification/EnglishCertificationAudioPlayer.js.map +1 -0
  1297. package/dist/components/themes/english-certification/EnglishCertificationBrand.d.ts +11 -0
  1298. package/dist/components/themes/english-certification/EnglishCertificationBrand.d.ts.map +1 -0
  1299. package/dist/components/themes/english-certification/EnglishCertificationBrand.js +12 -0
  1300. package/dist/components/themes/english-certification/EnglishCertificationBrand.js.map +1 -0
  1301. package/dist/components/themes/english-certification/EnglishCertificationExamLayout.d.ts +20 -0
  1302. package/dist/components/themes/english-certification/EnglishCertificationExamLayout.d.ts.map +1 -0
  1303. package/dist/components/themes/english-certification/EnglishCertificationExamLayout.js +22 -0
  1304. package/dist/components/themes/english-certification/EnglishCertificationExamLayout.js.map +1 -0
  1305. package/dist/components/themes/english-certification/EnglishCertificationFlagButton.d.ts +23 -0
  1306. package/dist/components/themes/english-certification/EnglishCertificationFlagButton.d.ts.map +1 -0
  1307. package/dist/components/themes/english-certification/EnglishCertificationFlagButton.js +16 -0
  1308. package/dist/components/themes/english-certification/EnglishCertificationFlagButton.js.map +1 -0
  1309. package/dist/components/themes/english-certification/EnglishCertificationFooterBar.d.ts +23 -0
  1310. package/dist/components/themes/english-certification/EnglishCertificationFooterBar.d.ts.map +1 -0
  1311. package/dist/components/themes/english-certification/EnglishCertificationFooterBar.js +20 -0
  1312. package/dist/components/themes/english-certification/EnglishCertificationFooterBar.js.map +1 -0
  1313. package/dist/components/themes/english-certification/EnglishCertificationGroupedQuestion.d.ts +25 -0
  1314. package/dist/components/themes/english-certification/EnglishCertificationGroupedQuestion.d.ts.map +1 -0
  1315. package/dist/components/themes/english-certification/EnglishCertificationGroupedQuestion.js +149 -0
  1316. package/dist/components/themes/english-certification/EnglishCertificationGroupedQuestion.js.map +1 -0
  1317. package/dist/components/themes/english-certification/EnglishCertificationHeader.d.ts +25 -0
  1318. package/dist/components/themes/english-certification/EnglishCertificationHeader.d.ts.map +1 -0
  1319. package/dist/components/themes/english-certification/EnglishCertificationHeader.js +32 -0
  1320. package/dist/components/themes/english-certification/EnglishCertificationHeader.js.map +1 -0
  1321. package/dist/components/themes/english-certification/EnglishCertificationNavigationPanel.d.ts +19 -0
  1322. package/dist/components/themes/english-certification/EnglishCertificationNavigationPanel.d.ts.map +1 -0
  1323. package/dist/components/themes/english-certification/EnglishCertificationNavigationPanel.js +72 -0
  1324. package/dist/components/themes/english-certification/EnglishCertificationNavigationPanel.js.map +1 -0
  1325. package/dist/components/themes/english-certification/EnglishCertificationOptionSelector.d.ts +29 -0
  1326. package/dist/components/themes/english-certification/EnglishCertificationOptionSelector.d.ts.map +1 -0
  1327. package/dist/components/themes/english-certification/EnglishCertificationOptionSelector.js +34 -0
  1328. package/dist/components/themes/english-certification/EnglishCertificationOptionSelector.js.map +1 -0
  1329. package/dist/components/themes/english-certification/EnglishCertificationPassagePanel.d.ts +22 -0
  1330. package/dist/components/themes/english-certification/EnglishCertificationPassagePanel.d.ts.map +1 -0
  1331. package/dist/components/themes/english-certification/EnglishCertificationPassagePanel.js +17 -0
  1332. package/dist/components/themes/english-certification/EnglishCertificationPassagePanel.js.map +1 -0
  1333. package/dist/components/themes/english-certification/EnglishCertificationQuestionCard.d.ts +21 -0
  1334. package/dist/components/themes/english-certification/EnglishCertificationQuestionCard.d.ts.map +1 -0
  1335. package/dist/components/themes/english-certification/EnglishCertificationQuestionCard.js +23 -0
  1336. package/dist/components/themes/english-certification/EnglishCertificationQuestionCard.js.map +1 -0
  1337. package/dist/components/themes/english-certification/EnglishCertificationQuestionItem.d.ts +26 -0
  1338. package/dist/components/themes/english-certification/EnglishCertificationQuestionItem.d.ts.map +1 -0
  1339. package/dist/components/themes/english-certification/EnglishCertificationQuestionItem.js +38 -0
  1340. package/dist/components/themes/english-certification/EnglishCertificationQuestionItem.js.map +1 -0
  1341. package/dist/components/themes/english-certification/EnglishCertificationQuestionRenderer.d.ts +25 -0
  1342. package/dist/components/themes/english-certification/EnglishCertificationQuestionRenderer.d.ts.map +1 -0
  1343. package/dist/components/themes/english-certification/EnglishCertificationQuestionRenderer.js +73 -0
  1344. package/dist/components/themes/english-certification/EnglishCertificationQuestionRenderer.js.map +1 -0
  1345. package/dist/components/themes/english-certification/EnglishCertificationReadingSection.d.ts +29 -0
  1346. package/dist/components/themes/english-certification/EnglishCertificationReadingSection.d.ts.map +1 -0
  1347. package/dist/components/themes/english-certification/EnglishCertificationReadingSection.js +91 -0
  1348. package/dist/components/themes/english-certification/EnglishCertificationReadingSection.js.map +1 -0
  1349. package/dist/components/themes/english-certification/EnglishCertificationSingleQuestion.d.ts +32 -0
  1350. package/dist/components/themes/english-certification/EnglishCertificationSingleQuestion.d.ts.map +1 -0
  1351. package/dist/components/themes/english-certification/EnglishCertificationSingleQuestion.js +19 -0
  1352. package/dist/components/themes/english-certification/EnglishCertificationSingleQuestion.js.map +1 -0
  1353. package/dist/components/themes/english-certification/EnglishCertificationSingleQuestionList.d.ts +26 -0
  1354. package/dist/components/themes/english-certification/EnglishCertificationSingleQuestionList.d.ts.map +1 -0
  1355. package/dist/components/themes/english-certification/EnglishCertificationSingleQuestionList.js +30 -0
  1356. package/dist/components/themes/english-certification/EnglishCertificationSingleQuestionList.js.map +1 -0
  1357. package/dist/components/themes/english-certification/english-certification-theme.d.ts +57 -0
  1358. package/dist/components/themes/english-certification/english-certification-theme.d.ts.map +1 -0
  1359. package/dist/components/themes/english-certification/english-certification-theme.js +59 -0
  1360. package/dist/components/themes/english-certification/english-certification-theme.js.map +1 -0
  1361. package/dist/components/themes/english-certification/grouped-question-utils.d.ts +24 -0
  1362. package/dist/components/themes/english-certification/grouped-question-utils.d.ts.map +1 -0
  1363. package/dist/components/themes/english-certification/grouped-question-utils.js +219 -0
  1364. package/dist/components/themes/english-certification/grouped-question-utils.js.map +1 -0
  1365. package/dist/components/themes/english-certification/index.d.ts +23 -0
  1366. package/dist/components/themes/english-certification/index.d.ts.map +1 -0
  1367. package/dist/components/themes/english-certification/index.js +22 -0
  1368. package/dist/components/themes/english-certification/index.js.map +1 -0
  1369. package/dist/components/themes/index.d.ts +8 -0
  1370. package/dist/components/themes/index.d.ts.map +1 -0
  1371. package/dist/components/themes/index.js +7 -0
  1372. package/dist/components/themes/index.js.map +1 -0
  1373. package/dist/components/themes/summer-sky/SummerSkyAudioPlayer.d.ts +10 -0
  1374. package/dist/components/themes/summer-sky/SummerSkyAudioPlayer.d.ts.map +1 -0
  1375. package/dist/components/themes/summer-sky/SummerSkyAudioPlayer.js +171 -0
  1376. package/dist/components/themes/summer-sky/SummerSkyAudioPlayer.js.map +1 -0
  1377. package/dist/components/themes/summer-sky/SummerSkyLayout.d.ts +3 -0
  1378. package/dist/components/themes/summer-sky/SummerSkyLayout.d.ts.map +1 -0
  1379. package/dist/components/themes/summer-sky/SummerSkyLayout.js +222 -0
  1380. package/dist/components/themes/summer-sky/SummerSkyLayout.js.map +1 -0
  1381. package/dist/components/themes/summer-sky/SummerSkySubmitModal.d.ts +9 -0
  1382. package/dist/components/themes/summer-sky/SummerSkySubmitModal.d.ts.map +1 -0
  1383. package/dist/components/themes/summer-sky/SummerSkySubmitModal.js +19 -0
  1384. package/dist/components/themes/summer-sky/SummerSkySubmitModal.js.map +1 -0
  1385. package/dist/components/themes/summer-sky/SummerSkyWaitingRoom.d.ts +10 -0
  1386. package/dist/components/themes/summer-sky/SummerSkyWaitingRoom.d.ts.map +1 -0
  1387. package/dist/components/themes/summer-sky/SummerSkyWaitingRoom.js +195 -0
  1388. package/dist/components/themes/summer-sky/SummerSkyWaitingRoom.js.map +1 -0
  1389. package/dist/components/themes/summer-sky/assets/images/Group_3432849.png +0 -0
  1390. package/dist/components/themes/summer-sky/assets/images/arrow-left.png +0 -0
  1391. package/dist/components/themes/summer-sky/assets/images/audio-icon.png +0 -0
  1392. package/dist/components/themes/summer-sky/assets/images/audio_ver2_icon.png +0 -0
  1393. package/dist/components/themes/summer-sky/assets/images/background-noticesubmit.png +0 -0
  1394. package/dist/components/themes/summer-sky/assets/images/background-question.png +0 -0
  1395. package/dist/components/themes/summer-sky/assets/images/background-v2.png +0 -0
  1396. package/dist/components/themes/summer-sky/assets/images/background_title.png +0 -0
  1397. package/dist/components/themes/summer-sky/assets/images/btn-notisubmid.png +0 -0
  1398. package/dist/components/themes/summer-sky/assets/images/button_feedback_vi.png +0 -0
  1399. package/dist/components/themes/summer-sky/assets/images/check-mic-btn.png +0 -0
  1400. package/dist/components/themes/summer-sky/assets/images/clock.png +0 -0
  1401. package/dist/components/themes/summer-sky/assets/images/has_answered.png +0 -0
  1402. package/dist/components/themes/summer-sky/assets/images/ic-mute-sunset.png +0 -0
  1403. package/dist/components/themes/summer-sky/assets/images/ic-mute.png +0 -0
  1404. package/dist/components/themes/summer-sky/assets/images/ic-play-sunset.png +0 -0
  1405. package/dist/components/themes/summer-sky/assets/images/ic-play-violet.webp +0 -0
  1406. package/dist/components/themes/summer-sky/assets/images/ic-play.webp +0 -0
  1407. package/dist/components/themes/summer-sky/assets/images/instruction-step.png +0 -0
  1408. package/dist/components/themes/summer-sky/assets/images/listen-audio.png +0 -0
  1409. package/dist/components/themes/summer-sky/assets/images/lock_mic_ver2_icon.png +0 -0
  1410. package/dist/components/themes/summer-sky/assets/images/mic-icon.png +0 -0
  1411. package/dist/components/themes/summer-sky/assets/images/mic_ver2_icon.png +0 -0
  1412. package/dist/components/themes/summer-sky/assets/images/next-btn.png +0 -0
  1413. package/dist/components/themes/summer-sky/assets/images/next-question-btn.png +0 -0
  1414. package/dist/components/themes/summer-sky/assets/images/ocean-frame.png +0 -0
  1415. package/dist/components/themes/summer-sky/assets/images/oceanedu-mascot.png +0 -0
  1416. package/dist/components/themes/summer-sky/assets/images/ong.png +0 -0
  1417. package/dist/components/themes/summer-sky/assets/images/pause-audio.png +0 -0
  1418. package/dist/components/themes/summer-sky/assets/images/pause_audio_ver2_icon.png +0 -0
  1419. package/dist/components/themes/summer-sky/assets/images/prev-question-btn.png +0 -0
  1420. package/dist/components/themes/summer-sky/assets/images/question-badge-sunset.png +0 -0
  1421. package/dist/components/themes/summer-sky/assets/images/radio-check.png +0 -0
  1422. package/dist/components/themes/summer-sky/assets/images/red-circle.png +0 -0
  1423. package/dist/components/themes/summer-sky/assets/images/rope.png +0 -0
  1424. package/dist/components/themes/summer-sky/assets/images/rope_2.png +0 -0
  1425. package/dist/components/themes/summer-sky/assets/images/rope_v3.png +0 -0
  1426. package/dist/components/themes/summer-sky/assets/images/start-exam.png +0 -0
  1427. package/dist/components/themes/summer-sky/assets/images/stop-mic.png +0 -0
  1428. package/dist/components/themes/summer-sky/assets/images/stop_audio_ver2_icon.png +0 -0
  1429. package/dist/components/themes/summer-sky/assets/images/student-avatar.png +0 -0
  1430. package/dist/components/themes/summer-sky/assets/images/submit.png +0 -0
  1431. package/dist/components/themes/summer-sky/assets/images/teacher_transparent (1).mp4 +0 -0
  1432. package/dist/components/themes/summer-sky/assets/images/title-logo.png +0 -0
  1433. package/dist/components/themes/summer-sky/assets/images/title-notisubmit.png +0 -0
  1434. package/dist/components/themes/summer-sky/assets/images/title_table.png +0 -0
  1435. package/dist/components/themes/summer-sky/assets/images/traloicauhoi.png +0 -0
  1436. package/dist/components/themes/summer-sky/assets/images/x-noticesubmit.png.png +0 -0
  1437. package/dist/components/themes/summer-sky/assets/styles/SummerSkyLayout.module.css +406 -0
  1438. package/dist/components/themes/summer-sky/assets/styles/SummerSkyWaitingRoom.module.css +419 -0
  1439. package/dist/components/themes/types.d.ts +62 -0
  1440. package/dist/components/themes/types.d.ts.map +1 -0
  1441. package/dist/components/themes/types.js +2 -0
  1442. package/dist/components/themes/types.js.map +1 -0
  1443. package/dist/components/ui/alert-dialog.d.ts +21 -0
  1444. package/dist/components/ui/alert-dialog.d.ts.map +1 -0
  1445. package/dist/components/ui/alert-dialog.js +27 -0
  1446. package/dist/components/ui/alert-dialog.js.map +1 -0
  1447. package/dist/components/ui/alert.d.ts +9 -0
  1448. package/dist/components/ui/alert.d.ts.map +1 -0
  1449. package/dist/components/ui/alert.js +23 -0
  1450. package/dist/components/ui/alert.js.map +1 -0
  1451. package/dist/components/ui/avatar.d.ts +7 -0
  1452. package/dist/components/ui/avatar.d.ts.map +1 -0
  1453. package/dist/components/ui/avatar.js +13 -0
  1454. package/dist/components/ui/avatar.js.map +1 -0
  1455. package/dist/components/ui/badge.d.ts +16 -0
  1456. package/dist/components/ui/badge.d.ts.map +1 -0
  1457. package/dist/components/ui/badge.js +39 -0
  1458. package/dist/components/ui/badge.js.map +1 -0
  1459. package/dist/components/ui/button.d.ts +11 -0
  1460. package/dist/components/ui/button.d.ts.map +1 -0
  1461. package/dist/components/ui/button.js +36 -0
  1462. package/dist/components/ui/button.js.map +1 -0
  1463. package/dist/components/ui/calendar.d.ts +9 -0
  1464. package/dist/components/ui/calendar.d.ts.map +1 -0
  1465. package/dist/components/ui/calendar.js +77 -0
  1466. package/dist/components/ui/calendar.js.map +1 -0
  1467. package/dist/components/ui/card.d.ts +9 -0
  1468. package/dist/components/ui/card.d.ts.map +1 -0
  1469. package/dist/components/ui/card.js +17 -0
  1470. package/dist/components/ui/card.js.map +1 -0
  1471. package/dist/components/ui/carousel.d.ts +20 -0
  1472. package/dist/components/ui/carousel.d.ts.map +1 -0
  1473. package/dist/components/ui/carousel.js +92 -0
  1474. package/dist/components/ui/carousel.js.map +1 -0
  1475. package/dist/components/ui/checkbox.d.ts +5 -0
  1476. package/dist/components/ui/checkbox.d.ts.map +1 -0
  1477. package/dist/components/ui/checkbox.js +10 -0
  1478. package/dist/components/ui/checkbox.js.map +1 -0
  1479. package/dist/components/ui/collapsible.d.ts +6 -0
  1480. package/dist/components/ui/collapsible.d.ts.map +1 -0
  1481. package/dist/components/ui/collapsible.js +14 -0
  1482. package/dist/components/ui/collapsible.js.map +1 -0
  1483. package/dist/components/ui/command.d.ts +19 -0
  1484. package/dist/components/ui/command.d.ts.map +1 -0
  1485. package/dist/components/ui/command.js +35 -0
  1486. package/dist/components/ui/command.js.map +1 -0
  1487. package/dist/components/ui/confirm-dialog.d.ts +24 -0
  1488. package/dist/components/ui/confirm-dialog.d.ts.map +1 -0
  1489. package/dist/components/ui/confirm-dialog.js +50 -0
  1490. package/dist/components/ui/confirm-dialog.js.map +1 -0
  1491. package/dist/components/ui/dialog.d.ts +20 -0
  1492. package/dist/components/ui/dialog.d.ts.map +1 -0
  1493. package/dist/components/ui/dialog.js +24 -0
  1494. package/dist/components/ui/dialog.js.map +1 -0
  1495. package/dist/components/ui/drawer.d.ts +14 -0
  1496. package/dist/components/ui/drawer.d.ts.map +1 -0
  1497. package/dist/components/ui/drawer.js +36 -0
  1498. package/dist/components/ui/drawer.js.map +1 -0
  1499. package/dist/components/ui/dropdown-menu.d.ts +28 -0
  1500. package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
  1501. package/dist/components/ui/dropdown-menu.js +34 -0
  1502. package/dist/components/ui/dropdown-menu.js.map +1 -0
  1503. package/dist/components/ui/file-upload.d.ts +25 -0
  1504. package/dist/components/ui/file-upload.d.ts.map +1 -0
  1505. package/dist/components/ui/file-upload.js +156 -0
  1506. package/dist/components/ui/file-upload.js.map +1 -0
  1507. package/dist/components/ui/form.d.ts +26 -0
  1508. package/dist/components/ui/form.d.ts.map +1 -0
  1509. package/dist/components/ui/form.js +63 -0
  1510. package/dist/components/ui/form.js.map +1 -0
  1511. package/dist/components/ui/hover-card.d.ts +7 -0
  1512. package/dist/components/ui/hover-card.d.ts.map +1 -0
  1513. package/dist/components/ui/hover-card.js +11 -0
  1514. package/dist/components/ui/hover-card.js.map +1 -0
  1515. package/dist/components/ui/image-preview.d.ts +19 -0
  1516. package/dist/components/ui/image-preview.d.ts.map +1 -0
  1517. package/dist/components/ui/image-preview.js +30 -0
  1518. package/dist/components/ui/image-preview.js.map +1 -0
  1519. package/dist/components/ui/input.d.ts +4 -0
  1520. package/dist/components/ui/input.d.ts.map +1 -0
  1521. package/dist/components/ui/input.js +9 -0
  1522. package/dist/components/ui/input.js.map +1 -0
  1523. package/dist/components/ui/label.d.ts +6 -0
  1524. package/dist/components/ui/label.d.ts.map +1 -0
  1525. package/dist/components/ui/label.js +10 -0
  1526. package/dist/components/ui/label.js.map +1 -0
  1527. package/dist/components/ui/language-switcher.d.ts +2 -0
  1528. package/dist/components/ui/language-switcher.d.ts.map +1 -0
  1529. package/dist/components/ui/language-switcher.js +16 -0
  1530. package/dist/components/ui/language-switcher.js.map +1 -0
  1531. package/dist/components/ui/multi-select.d.ts +17 -0
  1532. package/dist/components/ui/multi-select.d.ts.map +1 -0
  1533. package/dist/components/ui/multi-select.js +91 -0
  1534. package/dist/components/ui/multi-select.js.map +1 -0
  1535. package/dist/components/ui/points-input.d.ts +16 -0
  1536. package/dist/components/ui/points-input.d.ts.map +1 -0
  1537. package/dist/components/ui/points-input.js +34 -0
  1538. package/dist/components/ui/points-input.js.map +1 -0
  1539. package/dist/components/ui/popover.d.ts +11 -0
  1540. package/dist/components/ui/popover.d.ts.map +1 -0
  1541. package/dist/components/ui/popover.js +27 -0
  1542. package/dist/components/ui/popover.js.map +1 -0
  1543. package/dist/components/ui/progress.d.ts +5 -0
  1544. package/dist/components/ui/progress.d.ts.map +1 -0
  1545. package/dist/components/ui/progress.js +17 -0
  1546. package/dist/components/ui/progress.js.map +1 -0
  1547. package/dist/components/ui/radio-group.d.ts +6 -0
  1548. package/dist/components/ui/radio-group.d.ts.map +1 -0
  1549. package/dist/components/ui/radio-group.js +13 -0
  1550. package/dist/components/ui/radio-group.js.map +1 -0
  1551. package/dist/components/ui/scroll-area.d.ts +6 -0
  1552. package/dist/components/ui/scroll-area.d.ts.map +1 -0
  1553. package/dist/components/ui/scroll-area.js +12 -0
  1554. package/dist/components/ui/scroll-area.js.map +1 -0
  1555. package/dist/components/ui/select.d.ts +16 -0
  1556. package/dist/components/ui/select.d.ts.map +1 -0
  1557. package/dist/components/ui/select.js +39 -0
  1558. package/dist/components/ui/select.js.map +1 -0
  1559. package/dist/components/ui/separator.d.ts +5 -0
  1560. package/dist/components/ui/separator.d.ts.map +1 -0
  1561. package/dist/components/ui/separator.js +9 -0
  1562. package/dist/components/ui/separator.js.map +1 -0
  1563. package/dist/components/ui/sheet.d.ts +14 -0
  1564. package/dist/components/ui/sheet.d.ts.map +1 -0
  1565. package/dist/components/ui/sheet.js +41 -0
  1566. package/dist/components/ui/sheet.js.map +1 -0
  1567. package/dist/components/ui/single-select.d.ts +18 -0
  1568. package/dist/components/ui/single-select.d.ts.map +1 -0
  1569. package/dist/components/ui/single-select.js +77 -0
  1570. package/dist/components/ui/single-select.js.map +1 -0
  1571. package/dist/components/ui/skeleton.d.ts +3 -0
  1572. package/dist/components/ui/skeleton.d.ts.map +1 -0
  1573. package/dist/components/ui/skeleton.js +7 -0
  1574. package/dist/components/ui/skeleton.js.map +1 -0
  1575. package/dist/components/ui/switch.d.ts +5 -0
  1576. package/dist/components/ui/switch.d.ts.map +1 -0
  1577. package/dist/components/ui/switch.js +9 -0
  1578. package/dist/components/ui/switch.js.map +1 -0
  1579. package/dist/components/ui/table.d.ts +11 -0
  1580. package/dist/components/ui/table.d.ts.map +1 -0
  1581. package/dist/components/ui/table.js +21 -0
  1582. package/dist/components/ui/table.js.map +1 -0
  1583. package/dist/components/ui/tabs.d.ts +8 -0
  1584. package/dist/components/ui/tabs.d.ts.map +1 -0
  1585. package/dist/components/ui/tabs.js +18 -0
  1586. package/dist/components/ui/tabs.js.map +1 -0
  1587. package/dist/components/ui/textarea.d.ts +6 -0
  1588. package/dist/components/ui/textarea.d.ts.map +1 -0
  1589. package/dist/components/ui/textarea.js +9 -0
  1590. package/dist/components/ui/textarea.js.map +1 -0
  1591. package/dist/components/ui/tooltip.d.ts +8 -0
  1592. package/dist/components/ui/tooltip.d.ts.map +1 -0
  1593. package/dist/components/ui/tooltip.js +12 -0
  1594. package/dist/components/ui/tooltip.js.map +1 -0
  1595. package/dist/global.d.ts +46 -0
  1596. package/dist/index.d.ts +28 -0
  1597. package/dist/index.d.ts.map +1 -0
  1598. package/dist/index.js +20 -0
  1599. package/dist/index.js.map +1 -0
  1600. package/dist/mcp/config.d.ts +13 -0
  1601. package/dist/mcp/config.d.ts.map +1 -0
  1602. package/dist/mcp/config.js +33 -0
  1603. package/dist/mcp/config.js.map +1 -0
  1604. package/dist/mcp/http-client.d.ts +7 -0
  1605. package/dist/mcp/http-client.d.ts.map +1 -0
  1606. package/dist/mcp/http-client.js +49 -0
  1607. package/dist/mcp/http-client.js.map +1 -0
  1608. package/dist/mcp/index.d.ts +7 -0
  1609. package/dist/mcp/index.d.ts.map +1 -0
  1610. package/dist/mcp/index.js +31 -0
  1611. package/dist/mcp/index.js.map +1 -0
  1612. package/dist/mcp/tools/_helpers.d.ts +5 -0
  1613. package/dist/mcp/tools/_helpers.d.ts.map +1 -0
  1614. package/dist/mcp/tools/_helpers.js +26 -0
  1615. package/dist/mcp/tools/_helpers.js.map +1 -0
  1616. package/dist/mcp/tools/exams.d.ts +3 -0
  1617. package/dist/mcp/tools/exams.d.ts.map +1 -0
  1618. package/dist/mcp/tools/exams.js +440 -0
  1619. package/dist/mcp/tools/exams.js.map +1 -0
  1620. package/dist/mcp/tools/index.d.ts +3 -0
  1621. package/dist/mcp/tools/index.d.ts.map +1 -0
  1622. package/dist/mcp/tools/index.js +7 -0
  1623. package/dist/mcp/tools/index.js.map +1 -0
  1624. package/dist/mcp/tools/results.d.ts +3 -0
  1625. package/dist/mcp/tools/results.d.ts.map +1 -0
  1626. package/dist/mcp/tools/results.js +20 -0
  1627. package/dist/mcp/tools/results.js.map +1 -0
  1628. package/dist/shared/constants/ApiConstant.d.ts +232 -0
  1629. package/dist/shared/constants/ApiConstant.d.ts.map +1 -0
  1630. package/dist/shared/constants/ApiConstant.js +277 -0
  1631. package/dist/shared/constants/ApiConstant.js.map +1 -0
  1632. package/dist/shared/constants/QueryKeyConstant.d.ts +99 -0
  1633. package/dist/shared/constants/QueryKeyConstant.d.ts.map +1 -0
  1634. package/dist/shared/constants/QueryKeyConstant.js +113 -0
  1635. package/dist/shared/constants/QueryKeyConstant.js.map +1 -0
  1636. package/dist/shared/constants/exam-level.enum.d.ts +33 -0
  1637. package/dist/shared/constants/exam-level.enum.d.ts.map +1 -0
  1638. package/dist/shared/constants/exam-level.enum.js +42 -0
  1639. package/dist/shared/constants/exam-level.enum.js.map +1 -0
  1640. package/dist/shared/constants/landings/placement-test.constants.d.ts +128 -0
  1641. package/dist/shared/constants/landings/placement-test.constants.d.ts.map +1 -0
  1642. package/dist/shared/constants/landings/placement-test.constants.js +432 -0
  1643. package/dist/shared/constants/landings/placement-test.constants.js.map +1 -0
  1644. package/dist/shared/constants/question-skills.d.ts +93 -0
  1645. package/dist/shared/constants/question-skills.d.ts.map +1 -0
  1646. package/dist/shared/constants/question-skills.js +268 -0
  1647. package/dist/shared/constants/question-skills.js.map +1 -0
  1648. package/dist/shared/constants/routes.d.ts +70 -0
  1649. package/dist/shared/constants/routes.d.ts.map +1 -0
  1650. package/dist/shared/constants/routes.js +82 -0
  1651. package/dist/shared/constants/routes.js.map +1 -0
  1652. package/dist/shared/index.d.ts +8 -0
  1653. package/dist/shared/index.d.ts.map +1 -0
  1654. package/dist/shared/index.js +8 -0
  1655. package/dist/shared/index.js.map +1 -0
  1656. package/dist/shared/lib/hooks/index.d.ts +11 -0
  1657. package/dist/shared/lib/hooks/index.d.ts.map +1 -0
  1658. package/dist/shared/lib/hooks/index.js +11 -0
  1659. package/dist/shared/lib/hooks/index.js.map +1 -0
  1660. package/dist/shared/lib/hooks/useAlertDialog.d.ts +36 -0
  1661. package/dist/shared/lib/hooks/useAlertDialog.d.ts.map +1 -0
  1662. package/dist/shared/lib/hooks/useAlertDialog.js +58 -0
  1663. package/dist/shared/lib/hooks/useAlertDialog.js.map +1 -0
  1664. package/dist/shared/lib/hooks/useAudioPlayCounter.d.ts +8 -0
  1665. package/dist/shared/lib/hooks/useAudioPlayCounter.d.ts.map +1 -0
  1666. package/dist/shared/lib/hooks/useAudioPlayCounter.js +31 -0
  1667. package/dist/shared/lib/hooks/useAudioPlayCounter.js.map +1 -0
  1668. package/dist/shared/lib/hooks/useAudioPreview.d.ts +16 -0
  1669. package/dist/shared/lib/hooks/useAudioPreview.d.ts.map +1 -0
  1670. package/dist/shared/lib/hooks/useAudioPreview.js +82 -0
  1671. package/dist/shared/lib/hooks/useAudioPreview.js.map +1 -0
  1672. package/dist/shared/lib/hooks/useAudioUpload.d.ts +18 -0
  1673. package/dist/shared/lib/hooks/useAudioUpload.d.ts.map +1 -0
  1674. package/dist/shared/lib/hooks/useAudioUpload.js +25 -0
  1675. package/dist/shared/lib/hooks/useAudioUpload.js.map +1 -0
  1676. package/dist/shared/lib/hooks/useConfirmDialog.d.ts +44 -0
  1677. package/dist/shared/lib/hooks/useConfirmDialog.d.ts.map +1 -0
  1678. package/dist/shared/lib/hooks/useConfirmDialog.js +90 -0
  1679. package/dist/shared/lib/hooks/useConfirmDialog.js.map +1 -0
  1680. package/dist/shared/lib/hooks/useDebouncedCallback.d.ts +8 -0
  1681. package/dist/shared/lib/hooks/useDebouncedCallback.d.ts.map +1 -0
  1682. package/dist/shared/lib/hooks/useDebouncedCallback.js +33 -0
  1683. package/dist/shared/lib/hooks/useDebouncedCallback.js.map +1 -0
  1684. package/dist/shared/lib/hooks/useDelayedAutoPlay.d.ts +11 -0
  1685. package/dist/shared/lib/hooks/useDelayedAutoPlay.d.ts.map +1 -0
  1686. package/dist/shared/lib/hooks/useDelayedAutoPlay.js +13 -0
  1687. package/dist/shared/lib/hooks/useDelayedAutoPlay.js.map +1 -0
  1688. package/dist/shared/lib/hooks/useFileUpload.d.ts +15 -0
  1689. package/dist/shared/lib/hooks/useFileUpload.d.ts.map +1 -0
  1690. package/dist/shared/lib/hooks/useFileUpload.js +25 -0
  1691. package/dist/shared/lib/hooks/useFileUpload.js.map +1 -0
  1692. package/dist/shared/lib/hooks/useImageUrl.d.ts +2 -0
  1693. package/dist/shared/lib/hooks/useImageUrl.d.ts.map +1 -0
  1694. package/dist/shared/lib/hooks/useImageUrl.js +6 -0
  1695. package/dist/shared/lib/hooks/useImageUrl.js.map +1 -0
  1696. package/dist/shared/lib/hooks/usePresignedFileUrl.d.ts +11 -0
  1697. package/dist/shared/lib/hooks/usePresignedFileUrl.d.ts.map +1 -0
  1698. package/dist/shared/lib/hooks/usePresignedFileUrl.js +11 -0
  1699. package/dist/shared/lib/hooks/usePresignedFileUrl.js.map +1 -0
  1700. package/dist/shared/lib/hooks/useReactHookForm.d.ts +34 -0
  1701. package/dist/shared/lib/hooks/useReactHookForm.d.ts.map +1 -0
  1702. package/dist/shared/lib/hooks/useReactHookForm.js +32 -0
  1703. package/dist/shared/lib/hooks/useReactHookForm.js.map +1 -0
  1704. package/dist/shared/lib/hooks/useToast.d.ts +35 -0
  1705. package/dist/shared/lib/hooks/useToast.d.ts.map +1 -0
  1706. package/dist/shared/lib/hooks/useToast.js +63 -0
  1707. package/dist/shared/lib/hooks/useToast.js.map +1 -0
  1708. package/dist/shared/lib/i18n/index.d.ts +32 -0
  1709. package/dist/shared/lib/i18n/index.d.ts.map +1 -0
  1710. package/dist/shared/lib/i18n/index.js +55 -0
  1711. package/dist/shared/lib/i18n/index.js.map +1 -0
  1712. package/dist/shared/lib/i18n/messages/en/admin.d.ts +1937 -0
  1713. package/dist/shared/lib/i18n/messages/en/admin.d.ts.map +1 -0
  1714. package/dist/shared/lib/i18n/messages/en/admin.js +2105 -0
  1715. package/dist/shared/lib/i18n/messages/en/admin.js.map +1 -0
  1716. package/dist/shared/lib/i18n/messages/en/auth.d.ts +82 -0
  1717. package/dist/shared/lib/i18n/messages/en/auth.d.ts.map +1 -0
  1718. package/dist/shared/lib/i18n/messages/en/auth.js +87 -0
  1719. package/dist/shared/lib/i18n/messages/en/auth.js.map +1 -0
  1720. package/dist/shared/lib/i18n/messages/en/common.d.ts +125 -0
  1721. package/dist/shared/lib/i18n/messages/en/common.d.ts.map +1 -0
  1722. package/dist/shared/lib/i18n/messages/en/common.js +141 -0
  1723. package/dist/shared/lib/i18n/messages/en/common.js.map +1 -0
  1724. package/dist/shared/lib/i18n/messages/en/file-upload.d.ts +17 -0
  1725. package/dist/shared/lib/i18n/messages/en/file-upload.d.ts.map +1 -0
  1726. package/dist/shared/lib/i18n/messages/en/file-upload.js +19 -0
  1727. package/dist/shared/lib/i18n/messages/en/file-upload.js.map +1 -0
  1728. package/dist/shared/lib/i18n/messages/en/student.d.ts +125 -0
  1729. package/dist/shared/lib/i18n/messages/en/student.d.ts.map +1 -0
  1730. package/dist/shared/lib/i18n/messages/en/student.js +134 -0
  1731. package/dist/shared/lib/i18n/messages/en/student.js.map +1 -0
  1732. package/dist/shared/lib/i18n/messages/en/terms.d.ts +27 -0
  1733. package/dist/shared/lib/i18n/messages/en/terms.d.ts.map +1 -0
  1734. package/dist/shared/lib/i18n/messages/en/terms.js +38 -0
  1735. package/dist/shared/lib/i18n/messages/en/terms.js.map +1 -0
  1736. package/dist/shared/lib/i18n/messages/en.d.ts +2293 -0
  1737. package/dist/shared/lib/i18n/messages/en.d.ts.map +1 -0
  1738. package/dist/shared/lib/i18n/messages/en.js +16 -0
  1739. package/dist/shared/lib/i18n/messages/en.js.map +1 -0
  1740. package/dist/shared/lib/i18n/messages/vi/admin.d.ts +1937 -0
  1741. package/dist/shared/lib/i18n/messages/vi/admin.d.ts.map +1 -0
  1742. package/dist/shared/lib/i18n/messages/vi/admin.js +2105 -0
  1743. package/dist/shared/lib/i18n/messages/vi/admin.js.map +1 -0
  1744. package/dist/shared/lib/i18n/messages/vi/auth.d.ts +82 -0
  1745. package/dist/shared/lib/i18n/messages/vi/auth.d.ts.map +1 -0
  1746. package/dist/shared/lib/i18n/messages/vi/auth.js +87 -0
  1747. package/dist/shared/lib/i18n/messages/vi/auth.js.map +1 -0
  1748. package/dist/shared/lib/i18n/messages/vi/common.d.ts +125 -0
  1749. package/dist/shared/lib/i18n/messages/vi/common.d.ts.map +1 -0
  1750. package/dist/shared/lib/i18n/messages/vi/common.js +141 -0
  1751. package/dist/shared/lib/i18n/messages/vi/common.js.map +1 -0
  1752. package/dist/shared/lib/i18n/messages/vi/file-upload.d.ts +17 -0
  1753. package/dist/shared/lib/i18n/messages/vi/file-upload.d.ts.map +1 -0
  1754. package/dist/shared/lib/i18n/messages/vi/file-upload.js +19 -0
  1755. package/dist/shared/lib/i18n/messages/vi/file-upload.js.map +1 -0
  1756. package/dist/shared/lib/i18n/messages/vi/student.d.ts +125 -0
  1757. package/dist/shared/lib/i18n/messages/vi/student.d.ts.map +1 -0
  1758. package/dist/shared/lib/i18n/messages/vi/student.js +134 -0
  1759. package/dist/shared/lib/i18n/messages/vi/student.js.map +1 -0
  1760. package/dist/shared/lib/i18n/messages/vi/terms.d.ts +27 -0
  1761. package/dist/shared/lib/i18n/messages/vi/terms.d.ts.map +1 -0
  1762. package/dist/shared/lib/i18n/messages/vi/terms.js +38 -0
  1763. package/dist/shared/lib/i18n/messages/vi/terms.js.map +1 -0
  1764. package/dist/shared/lib/i18n/messages/vi.d.ts +2293 -0
  1765. package/dist/shared/lib/i18n/messages/vi.d.ts.map +1 -0
  1766. package/dist/shared/lib/i18n/messages/vi.js +16 -0
  1767. package/dist/shared/lib/i18n/messages/vi.js.map +1 -0
  1768. package/dist/shared/lib/i18n/types.d.ts +4 -0
  1769. package/dist/shared/lib/i18n/types.d.ts.map +1 -0
  1770. package/dist/shared/lib/i18n/types.js +2 -0
  1771. package/dist/shared/lib/i18n/types.js.map +1 -0
  1772. package/dist/shared/lib/stores/examQuestionStore.d.ts +95 -0
  1773. package/dist/shared/lib/stores/examQuestionStore.d.ts.map +1 -0
  1774. package/dist/shared/lib/stores/examQuestionStore.js +213 -0
  1775. package/dist/shared/lib/stores/examQuestionStore.js.map +1 -0
  1776. package/dist/shared/lib/stores/localeStore.d.ts +20 -0
  1777. package/dist/shared/lib/stores/localeStore.d.ts.map +1 -0
  1778. package/dist/shared/lib/stores/localeStore.js +11 -0
  1779. package/dist/shared/lib/stores/localeStore.js.map +1 -0
  1780. package/dist/shared/lib/utils/public-page.d.ts +9 -0
  1781. package/dist/shared/lib/utils/public-page.d.ts.map +1 -0
  1782. package/dist/shared/lib/utils/public-page.js +45 -0
  1783. package/dist/shared/lib/utils/public-page.js.map +1 -0
  1784. package/dist/shared/lib/utils/question-transform-types.d.ts +398 -0
  1785. package/dist/shared/lib/utils/question-transform-types.d.ts.map +1 -0
  1786. package/dist/shared/lib/utils/question-transform-types.js +2 -0
  1787. package/dist/shared/lib/utils/question-transform-types.js.map +1 -0
  1788. package/dist/shared/lib/utils/question-transform.d.ts +31 -0
  1789. package/dist/shared/lib/utils/question-transform.d.ts.map +1 -0
  1790. package/dist/shared/lib/utils/question-transform.js +175 -0
  1791. package/dist/shared/lib/utils/question-transform.js.map +1 -0
  1792. package/dist/shared/lib/utils.d.ts +70 -0
  1793. package/dist/shared/lib/utils.d.ts.map +1 -0
  1794. package/dist/shared/lib/utils.js +169 -0
  1795. package/dist/shared/lib/utils.js.map +1 -0
  1796. package/dist/shared/lib/validation/choose-correct-answer.validation.d.ts +19 -0
  1797. package/dist/shared/lib/validation/choose-correct-answer.validation.d.ts.map +1 -0
  1798. package/dist/shared/lib/validation/choose-correct-answer.validation.js +112 -0
  1799. package/dist/shared/lib/validation/choose-correct-answer.validation.js.map +1 -0
  1800. package/dist/shared/lib/validation/label-the-picture.validation.d.ts +13 -0
  1801. package/dist/shared/lib/validation/label-the-picture.validation.d.ts.map +1 -0
  1802. package/dist/shared/lib/validation/label-the-picture.validation.js +20 -0
  1803. package/dist/shared/lib/validation/label-the-picture.validation.js.map +1 -0
  1804. package/dist/shared/lib/validation/listen-and-choose-from-answer-group.validation.d.ts +27 -0
  1805. package/dist/shared/lib/validation/listen-and-choose-from-answer-group.validation.d.ts.map +1 -0
  1806. package/dist/shared/lib/validation/listen-and-choose-from-answer-group.validation.js +47 -0
  1807. package/dist/shared/lib/validation/listen-and-choose-from-answer-group.validation.js.map +1 -0
  1808. package/dist/shared/lib/validation/listen-and-choose-objects-in-scene.validation.d.ts +18 -0
  1809. package/dist/shared/lib/validation/listen-and-choose-objects-in-scene.validation.d.ts.map +1 -0
  1810. package/dist/shared/lib/validation/listen-and-choose-objects-in-scene.validation.js +22 -0
  1811. package/dist/shared/lib/validation/listen-and-choose-objects-in-scene.validation.js.map +1 -0
  1812. package/dist/shared/lib/validation/listen-and-drag-objects-into-scene.validation.d.ts +23 -0
  1813. package/dist/shared/lib/validation/listen-and-drag-objects-into-scene.validation.d.ts.map +1 -0
  1814. package/dist/shared/lib/validation/listen-and-drag-objects-into-scene.validation.js +35 -0
  1815. package/dist/shared/lib/validation/listen-and-drag-objects-into-scene.validation.js.map +1 -0
  1816. package/dist/shared/lib/validation/listen-and-speak-answer.validation.d.ts +17 -0
  1817. package/dist/shared/lib/validation/listen-and-speak-answer.validation.d.ts.map +1 -0
  1818. package/dist/shared/lib/validation/listen-and-speak-answer.validation.js +41 -0
  1819. package/dist/shared/lib/validation/listen-and-speak-answer.validation.js.map +1 -0
  1820. package/dist/shared/lib/validation/listen-and-speak-compare-images.validation.d.ts +16 -0
  1821. package/dist/shared/lib/validation/listen-and-speak-compare-images.validation.d.ts.map +1 -0
  1822. package/dist/shared/lib/validation/listen-and-speak-compare-images.validation.js +46 -0
  1823. package/dist/shared/lib/validation/listen-and-speak-compare-images.validation.js.map +1 -0
  1824. package/dist/shared/lib/validation/listen-and-speak-image-group.validation.d.ts +22 -0
  1825. package/dist/shared/lib/validation/listen-and-speak-image-group.validation.d.ts.map +1 -0
  1826. package/dist/shared/lib/validation/listen-and-speak-image-group.validation.js +20 -0
  1827. package/dist/shared/lib/validation/listen-and-speak-image-group.validation.js.map +1 -0
  1828. package/dist/shared/lib/validation/listen-and-speak-info-exchange.validation.d.ts +27 -0
  1829. package/dist/shared/lib/validation/listen-and-speak-info-exchange.validation.d.ts.map +1 -0
  1830. package/dist/shared/lib/validation/listen-and-speak-info-exchange.validation.js +40 -0
  1831. package/dist/shared/lib/validation/listen-and-speak-info-exchange.validation.js.map +1 -0
  1832. package/dist/shared/lib/validation/listen-and-speak-odd-one-out.validation.d.ts +12 -0
  1833. package/dist/shared/lib/validation/listen-and-speak-odd-one-out.validation.d.ts.map +1 -0
  1834. package/dist/shared/lib/validation/listen-and-speak-odd-one-out.validation.js +33 -0
  1835. package/dist/shared/lib/validation/listen-and-speak-odd-one-out.validation.js.map +1 -0
  1836. package/dist/shared/lib/validation/listen-and-speak-question-list.validation.d.ts +18 -0
  1837. package/dist/shared/lib/validation/listen-and-speak-question-list.validation.d.ts.map +1 -0
  1838. package/dist/shared/lib/validation/listen-and-speak-question-list.validation.js +20 -0
  1839. package/dist/shared/lib/validation/listen-and-speak-question-list.validation.js.map +1 -0
  1840. package/dist/shared/lib/validation/listen-and-speak-with-story-images.validation.d.ts +11 -0
  1841. package/dist/shared/lib/validation/listen-and-speak-with-story-images.validation.d.ts.map +1 -0
  1842. package/dist/shared/lib/validation/listen-and-speak-with-story-images.validation.js +29 -0
  1843. package/dist/shared/lib/validation/listen-and-speak-with-story-images.validation.js.map +1 -0
  1844. package/dist/shared/lib/validation/look-picture-choose-correct-answer.validation.d.ts +10 -0
  1845. package/dist/shared/lib/validation/look-picture-choose-correct-answer.validation.d.ts.map +1 -0
  1846. package/dist/shared/lib/validation/look-picture-choose-correct-answer.validation.js +13 -0
  1847. package/dist/shared/lib/validation/look-picture-choose-correct-answer.validation.js.map +1 -0
  1848. package/dist/shared/lib/validation/look-picture-fill-blank-choose-answer.validation.d.ts +18 -0
  1849. package/dist/shared/lib/validation/look-picture-fill-blank-choose-answer.validation.d.ts.map +1 -0
  1850. package/dist/shared/lib/validation/look-picture-fill-blank-choose-answer.validation.js +48 -0
  1851. package/dist/shared/lib/validation/look-picture-fill-blank-choose-answer.validation.js.map +1 -0
  1852. package/dist/shared/lib/validation/read-and-color-objects.validation.d.ts +21 -0
  1853. package/dist/shared/lib/validation/read-and-color-objects.validation.d.ts.map +1 -0
  1854. package/dist/shared/lib/validation/read-and-color-objects.validation.js +30 -0
  1855. package/dist/shared/lib/validation/read-and-color-objects.validation.js.map +1 -0
  1856. package/dist/shared/lib/validation/read-displayed-content.validation.d.ts +8 -0
  1857. package/dist/shared/lib/validation/read-displayed-content.validation.d.ts.map +1 -0
  1858. package/dist/shared/lib/validation/read-displayed-content.validation.js +29 -0
  1859. package/dist/shared/lib/validation/read-displayed-content.validation.js.map +1 -0
  1860. package/dist/shared/lib/validation/speaking-conversation.validation.d.ts +30 -0
  1861. package/dist/shared/lib/validation/speaking-conversation.validation.d.ts.map +1 -0
  1862. package/dist/shared/lib/validation/speaking-conversation.validation.js +76 -0
  1863. package/dist/shared/lib/validation/speaking-conversation.validation.js.map +1 -0
  1864. package/dist/shared/lib/validation/speaking-describe-image.validation.d.ts +10 -0
  1865. package/dist/shared/lib/validation/speaking-describe-image.validation.d.ts.map +1 -0
  1866. package/dist/shared/lib/validation/speaking-describe-image.validation.js +32 -0
  1867. package/dist/shared/lib/validation/speaking-describe-image.validation.js.map +1 -0
  1868. package/dist/shared/lib/validation/spontaneous-qa.validation.d.ts +14 -0
  1869. package/dist/shared/lib/validation/spontaneous-qa.validation.d.ts.map +1 -0
  1870. package/dist/shared/lib/validation/spontaneous-qa.validation.js +49 -0
  1871. package/dist/shared/lib/validation/spontaneous-qa.validation.js.map +1 -0
  1872. package/dist/shared/lib/validation/word-fill-paragraph-default.validation.d.ts +18 -0
  1873. package/dist/shared/lib/validation/word-fill-paragraph-default.validation.d.ts.map +1 -0
  1874. package/dist/shared/lib/validation/word-fill-paragraph-default.validation.js +39 -0
  1875. package/dist/shared/lib/validation/word-fill-paragraph-default.validation.js.map +1 -0
  1876. package/dist/shared/lib/validation/word-fill-paragraph-with-options.validation.d.ts +16 -0
  1877. package/dist/shared/lib/validation/word-fill-paragraph-with-options.validation.d.ts.map +1 -0
  1878. package/dist/shared/lib/validation/word-fill-paragraph-with-options.validation.js +40 -0
  1879. package/dist/shared/lib/validation/word-fill-paragraph-with-options.validation.js.map +1 -0
  1880. package/dist/shared/lib/validation/word-fill-paragraph.validation.d.ts +20 -0
  1881. package/dist/shared/lib/validation/word-fill-paragraph.validation.d.ts.map +1 -0
  1882. package/dist/shared/lib/validation/word-fill-paragraph.validation.js +44 -0
  1883. package/dist/shared/lib/validation/word-fill-paragraph.validation.js.map +1 -0
  1884. package/dist/shared/lib/validation/word-ordering.validation.d.ts +11 -0
  1885. package/dist/shared/lib/validation/word-ordering.validation.d.ts.map +1 -0
  1886. package/dist/shared/lib/validation/word-ordering.validation.js +34 -0
  1887. package/dist/shared/lib/validation/word-ordering.validation.js.map +1 -0
  1888. package/dist/shared/types/branch.types.d.ts +154 -0
  1889. package/dist/shared/types/branch.types.d.ts.map +1 -0
  1890. package/dist/shared/types/branch.types.js +7 -0
  1891. package/dist/shared/types/branch.types.js.map +1 -0
  1892. package/dist/shared/types/common.types.d.ts +81 -0
  1893. package/dist/shared/types/common.types.d.ts.map +1 -0
  1894. package/dist/shared/types/common.types.js +51 -0
  1895. package/dist/shared/types/common.types.js.map +1 -0
  1896. package/dist/shared/types/entities/exam-schedule.types.d.ts +66 -0
  1897. package/dist/shared/types/entities/exam-schedule.types.d.ts.map +1 -0
  1898. package/dist/shared/types/entities/exam-schedule.types.js +6 -0
  1899. package/dist/shared/types/entities/exam-schedule.types.js.map +1 -0
  1900. package/dist/shared/types/entities/exam.types.d.ts +111 -0
  1901. package/dist/shared/types/entities/exam.types.d.ts.map +1 -0
  1902. package/dist/shared/types/entities/exam.types.js +2 -0
  1903. package/dist/shared/types/entities/exam.types.js.map +1 -0
  1904. package/dist/shared/types/entities/question.types.d.ts +359 -0
  1905. package/dist/shared/types/entities/question.types.d.ts.map +1 -0
  1906. package/dist/shared/types/entities/question.types.js +5 -0
  1907. package/dist/shared/types/entities/question.types.js.map +1 -0
  1908. package/dist/shared/types/entities/result.types.d.ts +41 -0
  1909. package/dist/shared/types/entities/result.types.d.ts.map +1 -0
  1910. package/dist/shared/types/entities/result.types.js +5 -0
  1911. package/dist/shared/types/entities/result.types.js.map +1 -0
  1912. package/dist/shared/types/entities/user.types.d.ts +42 -0
  1913. package/dist/shared/types/entities/user.types.d.ts.map +1 -0
  1914. package/dist/shared/types/entities/user.types.js +5 -0
  1915. package/dist/shared/types/entities/user.types.js.map +1 -0
  1916. package/dist/shared/types/exam-taking.types.d.ts +39 -0
  1917. package/dist/shared/types/exam-taking.types.d.ts.map +1 -0
  1918. package/dist/shared/types/exam-taking.types.js +3 -0
  1919. package/dist/shared/types/exam-taking.types.js.map +1 -0
  1920. package/dist/shared/types/history.types.d.ts +21 -0
  1921. package/dist/shared/types/history.types.d.ts.map +1 -0
  1922. package/dist/shared/types/history.types.js +35 -0
  1923. package/dist/shared/types/history.types.js.map +1 -0
  1924. package/dist/shared/types/index.d.ts +102 -0
  1925. package/dist/shared/types/index.d.ts.map +1 -0
  1926. package/dist/shared/types/index.js +2 -0
  1927. package/dist/shared/types/index.js.map +1 -0
  1928. package/dist/shared/types/questions/choose-correct-adjective.d.ts +38 -0
  1929. package/dist/shared/types/questions/choose-correct-adjective.d.ts.map +1 -0
  1930. package/dist/shared/types/questions/choose-correct-adjective.js +5 -0
  1931. package/dist/shared/types/questions/choose-correct-adjective.js.map +1 -0
  1932. package/dist/shared/types/questions/choose-the-correct-answer.d.ts +73 -0
  1933. package/dist/shared/types/questions/choose-the-correct-answer.d.ts.map +1 -0
  1934. package/dist/shared/types/questions/choose-the-correct-answer.js +10 -0
  1935. package/dist/shared/types/questions/choose-the-correct-answer.js.map +1 -0
  1936. package/dist/shared/types/questions/fill-missing-words-in-grid.d.ts +72 -0
  1937. package/dist/shared/types/questions/fill-missing-words-in-grid.d.ts.map +1 -0
  1938. package/dist/shared/types/questions/fill-missing-words-in-grid.js +12 -0
  1939. package/dist/shared/types/questions/fill-missing-words-in-grid.js.map +1 -0
  1940. package/dist/shared/types/questions/index.d.ts +29 -0
  1941. package/dist/shared/types/questions/index.d.ts.map +1 -0
  1942. package/dist/shared/types/questions/index.js +41 -0
  1943. package/dist/shared/types/questions/index.js.map +1 -0
  1944. package/dist/shared/types/questions/listen-and-speak-answer.d.ts +47 -0
  1945. package/dist/shared/types/questions/listen-and-speak-answer.d.ts.map +1 -0
  1946. package/dist/shared/types/questions/listen-and-speak-answer.js +2 -0
  1947. package/dist/shared/types/questions/listen-and-speak-answer.js.map +1 -0
  1948. package/dist/shared/types/questions/listen-and-speak-compare-images.d.ts +23 -0
  1949. package/dist/shared/types/questions/listen-and-speak-compare-images.d.ts.map +1 -0
  1950. package/dist/shared/types/questions/listen-and-speak-compare-images.js +2 -0
  1951. package/dist/shared/types/questions/listen-and-speak-compare-images.js.map +1 -0
  1952. package/dist/shared/types/questions/listen-and-speak-image-group.d.ts +30 -0
  1953. package/dist/shared/types/questions/listen-and-speak-image-group.d.ts.map +1 -0
  1954. package/dist/shared/types/questions/listen-and-speak-image-group.js +2 -0
  1955. package/dist/shared/types/questions/listen-and-speak-image-group.js.map +1 -0
  1956. package/dist/shared/types/questions/listen-and-speak-info-exchange.d.ts +30 -0
  1957. package/dist/shared/types/questions/listen-and-speak-info-exchange.d.ts.map +1 -0
  1958. package/dist/shared/types/questions/listen-and-speak-info-exchange.js +4 -0
  1959. package/dist/shared/types/questions/listen-and-speak-info-exchange.js.map +1 -0
  1960. package/dist/shared/types/questions/listen-and-speak-odd-one-out.d.ts +14 -0
  1961. package/dist/shared/types/questions/listen-and-speak-odd-one-out.d.ts.map +1 -0
  1962. package/dist/shared/types/questions/listen-and-speak-odd-one-out.js +4 -0
  1963. package/dist/shared/types/questions/listen-and-speak-odd-one-out.js.map +1 -0
  1964. package/dist/shared/types/questions/listen-and-speak-question-list.d.ts +19 -0
  1965. package/dist/shared/types/questions/listen-and-speak-question-list.d.ts.map +1 -0
  1966. package/dist/shared/types/questions/listen-and-speak-question-list.js +2 -0
  1967. package/dist/shared/types/questions/listen-and-speak-question-list.js.map +1 -0
  1968. package/dist/shared/types/questions/listen-and-speak-with-story-images.d.ts +14 -0
  1969. package/dist/shared/types/questions/listen-and-speak-with-story-images.d.ts.map +1 -0
  1970. package/dist/shared/types/questions/listen-and-speak-with-story-images.js +4 -0
  1971. package/dist/shared/types/questions/listen-and-speak-with-story-images.js.map +1 -0
  1972. package/dist/shared/types/questions/look-picture-choose-correct-answer.d.ts +39 -0
  1973. package/dist/shared/types/questions/look-picture-choose-correct-answer.d.ts.map +1 -0
  1974. package/dist/shared/types/questions/look-picture-choose-correct-answer.js +6 -0
  1975. package/dist/shared/types/questions/look-picture-choose-correct-answer.js.map +1 -0
  1976. package/dist/shared/types/questions/look-picture-fill-blank-choose-answer.d.ts +64 -0
  1977. package/dist/shared/types/questions/look-picture-fill-blank-choose-answer.d.ts.map +1 -0
  1978. package/dist/shared/types/questions/look-picture-fill-blank-choose-answer.js +10 -0
  1979. package/dist/shared/types/questions/look-picture-fill-blank-choose-answer.js.map +1 -0
  1980. package/dist/shared/types/questions/look-picture-fill-word-hint.d.ts +58 -0
  1981. package/dist/shared/types/questions/look-picture-fill-word-hint.d.ts.map +1 -0
  1982. package/dist/shared/types/questions/look-picture-fill-word-hint.js +8 -0
  1983. package/dist/shared/types/questions/look-picture-fill-word-hint.js.map +1 -0
  1984. package/dist/shared/types/questions/read-displayed-content.d.ts +68 -0
  1985. package/dist/shared/types/questions/read-displayed-content.d.ts.map +1 -0
  1986. package/dist/shared/types/questions/read-displayed-content.js +2 -0
  1987. package/dist/shared/types/questions/read-displayed-content.js.map +1 -0
  1988. package/dist/shared/types/questions/speaking-conversation.d.ts +51 -0
  1989. package/dist/shared/types/questions/speaking-conversation.d.ts.map +1 -0
  1990. package/dist/shared/types/questions/speaking-conversation.js +8 -0
  1991. package/dist/shared/types/questions/speaking-conversation.js.map +1 -0
  1992. package/dist/shared/types/questions/speaking-describe-image.d.ts +41 -0
  1993. package/dist/shared/types/questions/speaking-describe-image.d.ts.map +1 -0
  1994. package/dist/shared/types/questions/speaking-describe-image.js +2 -0
  1995. package/dist/shared/types/questions/speaking-describe-image.js.map +1 -0
  1996. package/dist/shared/types/questions/spontaneous-qa.d.ts +80 -0
  1997. package/dist/shared/types/questions/spontaneous-qa.d.ts.map +1 -0
  1998. package/dist/shared/types/questions/spontaneous-qa.js +2 -0
  1999. package/dist/shared/types/questions/spontaneous-qa.js.map +1 -0
  2000. package/dist/shared/types/questions/write-correct-verb-form.d.ts +110 -0
  2001. package/dist/shared/types/questions/write-correct-verb-form.d.ts.map +1 -0
  2002. package/dist/shared/types/questions/write-correct-verb-form.js +13 -0
  2003. package/dist/shared/types/questions/write-correct-verb-form.js.map +1 -0
  2004. package/dist/shared/types/role.types.d.ts +61 -0
  2005. package/dist/shared/types/role.types.d.ts.map +1 -0
  2006. package/dist/shared/types/role.types.js +2 -0
  2007. package/dist/shared/types/role.types.js.map +1 -0
  2008. package/dist/shared/types/structure-management.d.ts +218 -0
  2009. package/dist/shared/types/structure-management.d.ts.map +1 -0
  2010. package/dist/shared/types/structure-management.js +29 -0
  2011. package/dist/shared/types/structure-management.js.map +1 -0
  2012. package/dist/shared/types/student.types.d.ts +396 -0
  2013. package/dist/shared/types/student.types.d.ts.map +1 -0
  2014. package/dist/shared/types/student.types.js +55 -0
  2015. package/dist/shared/types/student.types.js.map +1 -0
  2016. package/dist/shared/types/teacher-dashboard-rooms.d.ts +61 -0
  2017. package/dist/shared/types/teacher-dashboard-rooms.d.ts.map +1 -0
  2018. package/dist/shared/types/teacher-dashboard-rooms.js +3 -0
  2019. package/dist/shared/types/teacher-dashboard-rooms.js.map +1 -0
  2020. package/package.json +144 -0
@@ -0,0 +1,2105 @@
1
+ const admin = {
2
+ // User management
3
+ 'admin.user.create.success': 'Tạo người dùng thành công!',
4
+ 'admin.user.update.success': 'Cập nhật người dùng thành công!',
5
+ 'admin.user.update.error': 'Có lỗi xảy ra khi cập nhật người dùng!',
6
+ 'admin.user.delete.success': 'Xóa người dùng thành công!',
7
+ 'admin.user.delete.error': 'Có lỗi xảy ra khi xóa người dùng!',
8
+ // Exam management
9
+ 'admin.exam.create.error': 'Không thể tạo đề thi. Vui lòng thử lại!',
10
+ 'admin.exam.update.error': 'Không thể cập nhật đề thi. Vui lòng thử lại!',
11
+ 'admin.exam.delete.error': 'Không thể xóa đề thi. Vui lòng thử lại!',
12
+ 'admin.exam.template.update.error': 'Không thể cập nhật template. Vui lòng thử lại!',
13
+ 'admin.exam.copy.success': 'Sao chép đề thi thành công: {name} ({count} câu hỏi)',
14
+ 'admin.exam.copy.error': 'Không thể sao chép đề thi. Vui lòng thử lại!',
15
+ 'admin.exam.toggle.activated': 'Đã kích hoạt đề thi "{name}"!',
16
+ 'admin.exam.toggle.deactivated': 'Đã vô hiệu hóa đề thi "{name}"!',
17
+ 'admin.exam.toggle.error': 'Không thể thay đổi trạng thái đề thi. Vui lòng thử lại!',
18
+ 'admin.exam.variants.delete.success': 'Đã xóa {count} đề thi xáo trộn thành công!',
19
+ 'admin.exam.variants.delete.empty': 'Không có đề thi xáo trộn nào để xóa.',
20
+ 'admin.exam.variants.delete.error': 'Không thể xóa đề thi xáo trộn. Vui lòng thử lại!',
21
+ // Question management
22
+ 'admin.question.batchCreate.partial': 'Đã tạo {successCount}/{total} câu hỏi thành công. {errorCount} câu hỏi thất bại.',
23
+ 'admin.question.batchCreate.itemError': 'Câu hỏi {index}: {error}',
24
+ 'admin.question.batchCreate.error': 'Lỗi khi tạo câu hỏi: {message}',
25
+ // Question bank
26
+ 'admin.questionBank.update.success': 'Cập nhật câu hỏi thành công!',
27
+ 'admin.questionBank.update.error': 'Không thể cập nhật câu hỏi. Vui lòng thử lại!',
28
+ 'admin.questionBank.delete.success': 'Đã xóa câu hỏi thành công!',
29
+ 'admin.questionBank.delete.error': 'Không thể xóa câu hỏi. Vui lòng thử lại!',
30
+ 'admin.questionBank.create.missingInfo': 'Thiếu thông tin',
31
+ 'admin.questionBank.create.success': 'Thành công!',
32
+ 'admin.questionBank.create.error': 'Lỗi',
33
+ 'admin.questionBank.create.preview': 'Xem trước',
34
+ // Question bank - Page
35
+ 'admin.questionBank.page.title': 'Ngân hàng câu hỏi',
36
+ 'admin.questionBank.page.subtitle': 'Quản lý và tổ chức câu hỏi cho các đề thi',
37
+ 'admin.questionBank.btn.add': 'Thêm câu hỏi',
38
+ 'admin.questionBank.fetch.error': 'Lỗi',
39
+ 'admin.questionBank.fetch.errorDesc': 'Không thể tải danh sách câu hỏi',
40
+ 'admin.questionBank.delete.successMsg': 'Đã xóa câu hỏi',
41
+ 'admin.questionBank.delete.successDesc': 'Đã xóa câu hỏi {code}',
42
+ 'admin.questionBank.delete.errorMsg': 'Lỗi',
43
+ 'admin.questionBank.delete.errorDesc': 'Không thể xóa câu hỏi',
44
+ 'admin.questionBank.update.successMsg': 'Đã cập nhật',
45
+ 'admin.questionBank.update.successDesc': 'Đã cập nhật câu hỏi {code}!',
46
+ 'admin.questionBank.update.errorMsg': 'Lỗi',
47
+ 'admin.questionBank.update.errorDesc': 'Không thể cập nhật câu hỏi',
48
+ 'admin.questionBank.create.successMsg': 'Đã tạo câu hỏi',
49
+ 'admin.questionBank.create.successDesc': 'Đã tạo câu hỏi {code} thành công!',
50
+ // Question bank - Statistics
51
+ 'admin.questionBank.stats.totalQuestions': 'Tổng câu hỏi',
52
+ 'admin.questionBank.stats.inBank': 'Trong ngân hàng',
53
+ 'admin.questionBank.stats.totalUsage': 'Lượt sử dụng',
54
+ 'admin.questionBank.stats.inExams': 'Trong các đề thi',
55
+ 'admin.questionBank.stats.avgPoints': 'Điểm TB/câu',
56
+ 'admin.questionBank.stats.avgScore': 'Điểm trung bình',
57
+ 'admin.questionBank.stats.difficultyDistribution': 'Phân bố độ khó',
58
+ 'admin.questionBank.stats.questions': 'câu',
59
+ // Question bank - Difficulty
60
+ 'admin.questionBank.difficulty.easy': 'Dễ',
61
+ 'admin.questionBank.difficulty.medium': 'Trung bình',
62
+ 'admin.questionBank.difficulty.hard': 'Khó',
63
+ // Question bank - Table
64
+ 'admin.questionBank.table.title': 'Danh sách câu hỏi',
65
+ 'admin.questionBank.table.loading': 'Đang tải...',
66
+ 'admin.questionBank.table.showing': 'Hiển thị {count} / {total} câu hỏi',
67
+ 'admin.questionBank.table.empty': 'Không tìm thấy câu hỏi nào',
68
+ 'admin.questionBank.table.loadingData': 'Đang tải dữ liệu...',
69
+ 'admin.questionBank.table.created': 'Tạo: {date}',
70
+ 'admin.questionBank.table.pointsUnit': 'đ',
71
+ 'admin.questionBank.table.usageUnit': 'lần',
72
+ // Question bank - Filter
73
+ 'admin.questionBank.filter.searchPlaceholder': 'Tìm kiếm theo nội dung...',
74
+ 'admin.questionBank.filter.typePlaceholder': 'Loại câu hỏi',
75
+ 'admin.questionBank.filter.typeAll': 'Tất cả loại',
76
+ 'admin.questionBank.filter.difficultyPlaceholder': 'Độ khó',
77
+ 'admin.questionBank.filter.difficultyAll': 'Tất cả độ khó',
78
+ 'admin.questionBank.filter.skillPlaceholder': 'Kỹ năng',
79
+ 'admin.questionBank.filter.skillAll': 'Tất cả kỹ năng',
80
+ 'admin.questionBank.filter.clear': 'Xóa bộ lọc',
81
+ // Question bank - Table columns
82
+ 'admin.questionBank.col.code': 'MÃ CÂU HỎI',
83
+ 'admin.questionBank.col.title': 'Tiêu đề',
84
+ 'admin.questionBank.col.type': 'LOẠI',
85
+ 'admin.questionBank.col.difficulty': 'ĐỘ KHÓ',
86
+ 'admin.questionBank.col.skill': 'KỸ NĂNG',
87
+ 'admin.questionBank.col.points': 'ĐIỂM',
88
+ 'admin.questionBank.col.usage': 'SỬ DỤNG',
89
+ 'admin.questionBank.col.actions': 'THAO TÁC',
90
+ // Question bank - Action buttons
91
+ 'admin.questionBank.action.view': 'Xem chi tiết',
92
+ 'admin.questionBank.action.edit': 'Chỉnh sửa',
93
+ 'admin.questionBank.action.delete': 'Xóa',
94
+ // Question bank - Add Dialog
95
+ 'admin.questionBank.dialog.add.title': 'Thêm câu hỏi mới',
96
+ 'admin.questionBank.dialog.add.section1': 'Thông tin cơ bản',
97
+ 'admin.questionBank.dialog.add.section2': 'Loại câu hỏi',
98
+ 'admin.questionBank.dialog.add.section3': 'Nội dung câu hỏi',
99
+ 'admin.questionBank.dialog.add.code': 'Mã câu hỏi',
100
+ 'admin.questionBank.dialog.add.codePlaceholder': 'VD: QB001',
101
+ 'admin.questionBank.dialog.add.titleLabel': 'Tiêu đề',
102
+ 'admin.questionBank.dialog.add.titlePlaceholder': 'Mô tả ngắn gọn về câu hỏi',
103
+ 'admin.questionBank.dialog.add.difficulty': 'Mức độ khó',
104
+ 'admin.questionBank.dialog.add.skill': 'Kỹ năng',
105
+ 'admin.questionBank.dialog.add.typePlaceholder': 'Chọn loại câu hỏi...',
106
+ 'admin.questionBank.dialog.add.typeNoOptions': 'Không có loại câu hỏi cho {skill}',
107
+ 'admin.questionBank.dialog.add.noTypeSelected': 'Chưa chọn loại câu hỏi',
108
+ 'admin.questionBank.dialog.add.selectTypeHint': 'Vui lòng chọn loại câu hỏi ở bước 2',
109
+ 'admin.questionBank.dialog.add.required': 'Bắt buộc',
110
+ 'admin.questionBank.dialog.add.cancel': 'Hủy',
111
+ 'admin.questionBank.dialog.add.saving': 'Đang lưu...',
112
+ 'admin.questionBank.dialog.add.save': 'Thêm câu hỏi',
113
+ 'admin.questionBank.dialog.add.codeError': 'Vui lòng nhập mã câu hỏi',
114
+ 'admin.questionBank.dialog.add.titleError': 'Vui lòng nhập tiêu đề',
115
+ 'admin.questionBank.dialog.add.typeError': 'Vui lòng chọn loại câu hỏi',
116
+ // Question bank - Edit Dialog
117
+ 'admin.questionBank.dialog.edit.title': 'Chỉnh sửa câu hỏi',
118
+ 'admin.questionBank.dialog.edit.section1': 'Thông tin cơ bản',
119
+ 'admin.questionBank.dialog.edit.section2': 'Loại câu hỏi',
120
+ 'admin.questionBank.dialog.edit.section3': 'Nội dung câu hỏi',
121
+ 'admin.questionBank.dialog.edit.code': 'Mã câu hỏi',
122
+ 'admin.questionBank.dialog.edit.codePlaceholder': 'Nhập mã câu hỏi',
123
+ 'admin.questionBank.dialog.edit.titleLabel': 'Tiêu đề',
124
+ 'admin.questionBank.dialog.edit.titlePlaceholder': 'Mô tả ngắn gọn về câu hỏi',
125
+ 'admin.questionBank.dialog.edit.difficulty': 'Mức độ khó',
126
+ 'admin.questionBank.dialog.edit.skill': 'Kỹ năng',
127
+ 'admin.questionBank.dialog.edit.unchangeable': '(Không thể thay đổi)',
128
+ 'admin.questionBank.dialog.edit.required': 'Bắt buộc',
129
+ 'admin.questionBank.dialog.edit.cancel': 'Hủy',
130
+ 'admin.questionBank.dialog.edit.saving': 'Đang lưu...',
131
+ 'admin.questionBank.dialog.edit.save': 'Lưu thay đổi',
132
+ 'admin.questionBank.dialog.edit.codeError': 'Vui lòng nhập mã câu hỏi',
133
+ 'admin.questionBank.dialog.edit.titleError': 'Vui lòng nhập tiêu đề',
134
+ // Question bank - Delete Dialog
135
+ 'admin.questionBank.dialog.delete.title': 'Xác nhận xóa câu hỏi',
136
+ 'admin.questionBank.dialog.delete.message': 'Bạn có chắc chắn muốn xóa câu hỏi',
137
+ 'admin.questionBank.dialog.delete.warning': 'Hành động này không thể hoàn tác.',
138
+ 'admin.questionBank.dialog.delete.cancel': 'Hủy',
139
+ 'admin.questionBank.dialog.delete.deleting': 'Đang xóa...',
140
+ 'admin.questionBank.dialog.delete.confirm': 'Xóa câu hỏi',
141
+ // Question bank - View Dialog
142
+ 'admin.questionBank.dialog.view.title': 'Chi tiết câu hỏi',
143
+ 'admin.questionBank.dialog.view.points': 'điểm',
144
+ 'admin.questionBank.dialog.view.usage': 'Sử dụng {count} lần',
145
+ 'admin.questionBank.dialog.view.preview': 'Xem trước câu hỏi',
146
+ 'admin.questionBank.dialog.view.explanation': 'Giải thích đáp án',
147
+ // Question bank - Create Page
148
+ 'admin.questionBank.createPage.title': 'Tạo câu hỏi mới',
149
+ 'admin.questionBank.createPage.subtitle': 'Thêm câu hỏi vào Ngân hàng để tái sử dụng cho các bộ đề',
150
+ 'admin.questionBank.createPage.breadcrumb.list': 'Ngân hàng câu hỏi',
151
+ 'admin.questionBank.createPage.breadcrumb.create': 'Tạo mới',
152
+ 'admin.questionBank.createPage.infoTitle': 'Đang tạo câu hỏi loại: {type}',
153
+ 'admin.questionBank.createPage.infoDesc': 'Điền đầy đủ thông tin câu hỏi bên dưới. Bạn có thể xem trước câu hỏi trước khi lưu.',
154
+ 'admin.questionBank.createPage.loading': 'Đang tải...',
155
+ 'admin.questionBank.createPage.back': 'Quay lại',
156
+ 'admin.questionBank.createPage.preview': 'Xem trước',
157
+ 'admin.questionBank.createPage.saving': 'Đang lưu...',
158
+ 'admin.questionBank.createPage.save': 'Lưu câu hỏi',
159
+ 'admin.questionBank.createPage.cancelTitle': 'Hủy tạo câu hỏi?',
160
+ 'admin.questionBank.createPage.cancelMessage': 'Bạn có thay đổi chưa được lưu. Nếu hủy, tất cả thông tin sẽ bị mất. Bạn có chắc chắn muốn hủy?',
161
+ 'admin.questionBank.createPage.continueEditing': 'Tiếp tục chỉnh sửa',
162
+ 'admin.questionBank.createPage.cancelAndExit': 'Hủy và thoát',
163
+ 'admin.questionBank.createPage.missingInfoDesc': 'Vui lòng điền đầy đủ thông tin câu hỏi',
164
+ 'admin.questionBank.createPage.savedDesc': 'Đã lưu câu hỏi "{title}" vào ngân hàng',
165
+ 'admin.questionBank.createPage.saveErrorDesc': 'Không thể lưu câu hỏi. Vui lòng thử lại.',
166
+ 'admin.questionBank.createPage.previewDesc': 'Chức năng xem trước đang được phát triển',
167
+ // Schedule management
168
+ 'admin.schedule.update.success': 'Đã cập nhật lịch thi thành công!',
169
+ 'admin.schedule.delete.success': 'Đã xóa lịch thi {id}',
170
+ // Schedule page
171
+ 'admin.schedules.title': 'Quản lý lịch thi',
172
+ 'admin.schedules.subtitle': 'Lên lịch và quản lý thời gian thi cho các kỳ thi',
173
+ 'admin.schedules.viewCalendar': 'Lịch',
174
+ 'admin.schedules.viewList': 'Danh sách',
175
+ // Schedule stats
176
+ 'admin.schedules.stats.totalSchedules': 'Tổng lịch thi',
177
+ 'admin.schedules.stats.totalSchedulesDesc': 'Tất cả các kỳ thi',
178
+ 'admin.schedules.stats.confirmed': 'Đã xác nhận',
179
+ 'admin.schedules.stats.confirmedDesc': 'Lịch thi sẵn sàng',
180
+ 'admin.schedules.stats.totalStudents': 'Tổng thí sinh',
181
+ 'admin.schedules.stats.totalStudentsDesc': 'Đã được phân công',
182
+ // Schedule filters
183
+ 'admin.schedules.filters.searchPlaceholder': 'Tìm kiếm lịch thi...',
184
+ 'admin.schedules.filters.skill': 'Kỹ năng',
185
+ 'admin.schedules.filters.allSkills': 'Tất cả kỹ năng',
186
+ 'admin.schedules.filters.status': 'Trạng thái',
187
+ 'admin.schedules.filters.allStatuses': 'Tất cả trạng thái',
188
+ 'admin.schedules.filters.statusOpen': 'Đang mở',
189
+ 'admin.schedules.filters.statusLocked': 'Đã khóa',
190
+ 'admin.schedules.filters.clear': 'Xóa bộ lọc',
191
+ // Schedule calendar
192
+ 'admin.schedules.calendar.today': 'Hôm nay',
193
+ 'admin.schedules.calendar.daySun': 'CN',
194
+ 'admin.schedules.calendar.dayMon': 'T2',
195
+ 'admin.schedules.calendar.dayTue': 'T3',
196
+ 'admin.schedules.calendar.dayWed': 'T4',
197
+ 'admin.schedules.calendar.dayThu': 'T5',
198
+ 'admin.schedules.calendar.dayFri': 'T6',
199
+ 'admin.schedules.calendar.daySat': 'T7',
200
+ 'admin.schedules.calendar.loading': 'Đang tải lịch thi...',
201
+ 'admin.schedules.calendar.noLimit': 'Không giới hạn',
202
+ // Schedule list
203
+ 'admin.schedules.list.title': 'Danh sách lịch thi',
204
+ 'admin.schedules.list.loading': 'Đang tải...',
205
+ 'admin.schedules.list.loadingList': 'Đang tải danh sách lịch thi...',
206
+ 'admin.schedules.list.showing': 'Hiển thị {current} / {total} lịch thi',
207
+ 'admin.schedules.list.empty': 'Không có lịch thi nào',
208
+ 'admin.schedules.list.locked': 'Đã khóa',
209
+ 'admin.schedules.list.open': 'Đang mở',
210
+ 'admin.schedules.list.contest': 'Kỳ thi:',
211
+ 'admin.schedules.list.exam': 'Đề thi:',
212
+ 'admin.schedules.list.startTime': 'Bắt đầu:',
213
+ 'admin.schedules.list.endTime': 'Kết thúc:',
214
+ 'admin.schedules.list.noLimit': 'Không giới hạn',
215
+ 'admin.schedules.list.locationUnknown': 'Chưa xác định',
216
+ 'admin.schedules.list.noSupervisor': 'Chưa phân công',
217
+ 'admin.schedules.list.participants': '{count} thí sinh',
218
+ 'admin.schedules.list.page': 'Trang {current} / {total}',
219
+ 'admin.schedules.list.prev': 'Trước',
220
+ 'admin.schedules.list.next': 'Sau',
221
+ // Schedule dialogs (calendar & list view)
222
+ 'admin.schedules.dialog.detailTitle': 'Chi tiết phòng thi',
223
+ 'admin.schedules.dialog.room': 'Phòng thi',
224
+ 'admin.schedules.dialog.contest': 'Kỳ thi',
225
+ 'admin.schedules.dialog.exam': 'Đề thi',
226
+ 'admin.schedules.dialog.startTime': 'Thời gian bắt đầu',
227
+ 'admin.schedules.dialog.endTime': 'Thời gian kết thúc',
228
+ 'admin.schedules.dialog.duration': 'Thời lượng',
229
+ 'admin.schedules.dialog.status': 'Trạng thái',
230
+ 'admin.schedules.dialog.participantCount': 'Số thí sinh',
231
+ 'admin.schedules.dialog.participants': '{count} thí sinh',
232
+ 'admin.schedules.dialog.notAssigned': 'Chưa gán',
233
+ 'admin.schedules.dialog.notSet': 'Chưa xác định',
234
+ 'admin.schedules.dialog.noLimit': 'Không giới hạn',
235
+ 'admin.schedules.dialog.locked': 'Đã khóa',
236
+ 'admin.schedules.dialog.open': 'Đang mở',
237
+ 'admin.schedules.dialog.durationMinutes': '{duration} phút',
238
+ 'admin.schedules.dialog.location': 'Địa điểm',
239
+ 'admin.schedules.dialog.supervisor': 'Giám thị',
240
+ 'admin.schedules.dialog.noSupervisor': 'Chưa phân công',
241
+ // Schedule view dialog (ExamSchedule detail)
242
+ 'admin.schedules.view.title': 'Chi tiết lịch thi',
243
+ 'admin.schedules.view.contest': 'Kỳ thi',
244
+ 'admin.schedules.view.skill': 'Kỹ năng',
245
+ 'admin.schedules.view.status': 'Trạng thái',
246
+ 'admin.schedules.view.examDate': 'Ngày thi',
247
+ 'admin.schedules.view.startTime': 'Giờ bắt đầu',
248
+ 'admin.schedules.view.endTime': 'Giờ kết thúc',
249
+ 'admin.schedules.view.location': 'Địa điểm',
250
+ 'admin.schedules.view.supervisor': 'Giám thị',
251
+ 'admin.schedules.view.studentCount': 'Số lượng học sinh',
252
+ 'admin.schedules.view.duration': 'Thời lượng',
253
+ 'admin.schedules.view.durationMinutes': '{duration} phút',
254
+ // Schedule edit dialog
255
+ 'admin.schedules.edit.title': 'Chỉnh sửa lịch thi',
256
+ 'admin.schedules.edit.contest': 'Kỳ thi',
257
+ 'admin.schedules.edit.skill': 'Kỹ năng',
258
+ 'admin.schedules.edit.skillPlaceholder': 'Chọn kỹ năng',
259
+ 'admin.schedules.edit.examDate': 'Ngày thi',
260
+ 'admin.schedules.edit.startTime': 'Giờ bắt đầu',
261
+ 'admin.schedules.edit.endTime': 'Giờ kết thúc',
262
+ 'admin.schedules.edit.room': 'Phòng thi',
263
+ 'admin.schedules.edit.roomPlaceholder': 'Chọn phòng thi',
264
+ 'admin.schedules.edit.invigilator': 'Giám thị',
265
+ 'admin.schedules.edit.invigilatorPlaceholder': 'Chọn giám thị',
266
+ 'admin.schedules.edit.capacity': 'Sức chứa',
267
+ 'admin.schedules.edit.status': 'Trạng thái',
268
+ 'admin.schedules.edit.statusPlaceholder': 'Chọn trạng thái',
269
+ 'admin.schedules.edit.location': 'Địa điểm',
270
+ 'admin.schedules.edit.locationPlaceholder': 'Nhập địa điểm (vd: Tầng 1, Tòa A)',
271
+ 'admin.schedules.edit.notes': 'Ghi chú',
272
+ 'admin.schedules.edit.notesPlaceholder': 'Nhập ghi chú về lịch thi (không bắt buộc)',
273
+ 'admin.schedules.edit.cancel': 'Hủy',
274
+ 'admin.schedules.edit.save': 'Lưu thay đổi',
275
+ // Schedule delete dialog
276
+ 'admin.schedules.delete.title': 'Xác nhận xóa lịch thi',
277
+ 'admin.schedules.delete.message': 'Bạn có chắc chắn muốn xóa lịch thi',
278
+ 'admin.schedules.delete.warning': 'Hành động này không thể hoàn tác.',
279
+ 'admin.schedules.delete.cancel': 'Hủy',
280
+ 'admin.schedules.delete.confirm': 'Xóa lịch thi',
281
+ // Schedule utils
282
+ 'admin.schedules.utils.notSet': 'Chưa đặt',
283
+ 'admin.schedules.utils.noLimit': 'Không giới hạn',
284
+ 'admin.schedules.utils.statusDraft': 'Nháp',
285
+ 'admin.schedules.utils.statusConfirmed': 'Đã xác nhận',
286
+ 'admin.schedules.utils.statusInProgress': 'Đang diễn ra',
287
+ 'admin.schedules.utils.statusCompleted': 'Hoàn thành',
288
+ 'admin.schedules.utils.statusCancelled': 'Đã hủy',
289
+ // Reports
290
+ 'admin.report.exam.loadError': 'Không thể tải dữ liệu báo cáo kỳ thi',
291
+ 'admin.report.exam.exportError': 'Không thể xuất báo cáo',
292
+ 'admin.report.room.loadError': 'Không thể tải dữ liệu báo cáo phòng thi',
293
+ 'admin.report.room.exportSuccess': 'Xuất báo cáo {format} thành công',
294
+ 'admin.report.room.exportError': 'Không thể xuất báo cáo',
295
+ 'admin.report.branch.loadError': 'Không thể tải dữ liệu báo cáo chi nhánh',
296
+ 'admin.report.branch.exportError': 'Không thể xuất báo cáo',
297
+ // User management extras
298
+ 'admin.user.resetPassword.success': 'Đã đặt lại mật khẩu cho {name}!',
299
+ 'admin.user.resetPassword.error': 'Có lỗi xảy ra khi đặt lại mật khẩu!',
300
+ 'admin.user.lock.success': 'Đã khóa tài khoản {name}',
301
+ 'admin.user.unlock.success': 'Đã mở khóa tài khoản {name}',
302
+ 'admin.user.toggleStatus.error': 'Có lỗi xảy ra khi thay đổi trạng thái tài khoản!',
303
+ 'admin.user.export.success': 'Xuất file Excel thành công!',
304
+ 'admin.user.export.error': 'Có lỗi xảy ra khi xuất file Excel!',
305
+ 'admin.user.syncEBM.success': 'Đồng bộ EBM thành công!',
306
+ 'admin.user.syncEBM.error': 'Có lỗi xảy ra khi đồng bộ EBM!',
307
+ // Users page — page header
308
+ 'admin.users.title': 'Quản lý người dùng',
309
+ 'admin.users.subtitle': 'Quản lý tài khoản Admin, Giáo viên và Học sinh',
310
+ // Users page — table
311
+ 'admin.users.table.title': 'Danh sách người dùng',
312
+ 'admin.users.table.loading': 'Đang tải dữ liệu...',
313
+ 'admin.users.table.showing': 'Hiển thị {count} / {total} người dùng',
314
+ 'admin.users.table.empty': 'Không tìm thấy người dùng nào',
315
+ 'admin.users.table.neverLoggedIn': 'Chưa đăng nhập',
316
+ 'admin.users.table.exportExcel': 'Xuất Excel',
317
+ 'admin.users.table.syncEBM': 'Đồng bộ EBM',
318
+ 'admin.users.table.addUser': 'Thêm người dùng',
319
+ // Users page — columns
320
+ 'admin.users.col.userInfo': 'USER INFO',
321
+ 'admin.users.col.branch': 'CHI NHÁNH',
322
+ 'admin.users.col.contact': 'CONTACT',
323
+ 'admin.users.col.role': 'VAI TRÒ',
324
+ 'admin.users.col.source': 'NGUỒN',
325
+ 'admin.users.col.status': 'TRẠNG THÁI',
326
+ 'admin.users.col.lastLogin': 'ĐĂNG NHẬP CUỐI',
327
+ 'admin.users.col.actions': 'ACTIONS',
328
+ // Users page — filters
329
+ 'admin.users.filter.searchPlaceholder': 'Tìm kiếm theo email, username, số điện thoại...',
330
+ 'admin.users.filter.allRoles': 'Tất cả vai trò',
331
+ 'admin.users.filter.allStatuses': 'Tất cả trạng thái',
332
+ 'admin.users.filter.active': 'Hoạt động',
333
+ 'admin.users.filter.inactive': 'Không hoạt động',
334
+ 'admin.users.filter.clearFilters': 'Xóa bộ lọc',
335
+ 'admin.users.filter.searchLabel': 'Tìm kiếm:',
336
+ 'admin.users.filter.roleLabel': 'Vai trò:',
337
+ 'admin.users.filter.statusLabel': 'Trạng thái:',
338
+ // Users page — role labels
339
+ 'admin.users.role.systemAdmin': 'Quản trị hệ thống',
340
+ 'admin.users.role.admin': 'Admin',
341
+ 'admin.users.role.teacher': 'Giáo viên',
342
+ 'admin.users.role.student': 'Học sinh',
343
+ // Users page — row actions
344
+ 'admin.users.action.view': 'Xem chi tiết',
345
+ 'admin.users.action.viewDetail': 'Xem trang chi tiết người dùng',
346
+ 'admin.users.action.edit': 'Chỉnh sửa',
347
+ 'admin.users.action.resetPassword': 'Đặt lại mật khẩu',
348
+ 'admin.users.action.lock': 'Khóa tài khoản',
349
+ 'admin.users.action.unlock': 'Mở khóa tài khoản',
350
+ 'admin.users.action.delete': 'Xóa người dùng',
351
+ // Users page — form fields (shared between Add & Edit)
352
+ 'admin.users.field.branch': 'Chi nhánh',
353
+ 'admin.users.field.branchPlaceholder': 'Tìm và chọn chi nhánh...',
354
+ 'admin.users.field.fullName': 'Họ và tên',
355
+ 'admin.users.field.fullNamePlaceholder': 'Nhập họ và tên...',
356
+ 'admin.users.field.email': 'Email',
357
+ 'admin.users.field.emailPlaceholder': 'Nhập email...',
358
+ 'admin.users.field.phone': 'Số điện thoại',
359
+ 'admin.users.field.phonePlaceholder': 'Nhập số điện thoại...',
360
+ 'admin.users.field.address': 'Địa chỉ',
361
+ 'admin.users.field.addressPlaceholder': 'Nhập địa chỉ...',
362
+ 'admin.users.field.usernamePlaceholder': 'Nhập username...',
363
+ 'admin.users.field.usernameHint': 'Bắt đầu bằng chữ cái, chỉ chứa chữ, số và _',
364
+ 'admin.users.field.password': 'Mật khẩu',
365
+ 'admin.users.field.passwordPlaceholder': 'Nhập mật khẩu...',
366
+ 'admin.users.field.passwordHint': 'Ít nhất 8 ký tự, bao gồm chữ hoa, thường, số và ký tự đặc biệt',
367
+ 'admin.users.field.role': 'Vai trò',
368
+ 'admin.users.field.rolePlaceholder': 'Chọn vai trò...',
369
+ 'admin.users.field.activeStatus': 'Trạng thái hoạt động',
370
+ 'admin.users.field.activeHint': 'Tài khoản sẽ hoạt động ngay sau khi tạo',
371
+ 'admin.users.field.inactiveHint': 'Tài khoản sẽ bị khóa, có thể kích hoạt sau',
372
+ 'admin.users.field.activeStatusDesc': 'Tài khoản đang hoạt động',
373
+ 'admin.users.field.inactiveStatusDesc': 'Tài khoản đang bị khóa',
374
+ 'admin.users.field.registrationSource': 'Nguồn đăng ký',
375
+ 'admin.users.field.createdAt': 'Ngày tạo',
376
+ 'admin.users.field.updatedAt': 'Cập nhật lần cuối',
377
+ 'admin.users.field.status': 'Trạng thái',
378
+ 'admin.users.field.dateOfBirth': 'Ngày sinh',
379
+ 'admin.users.field.dateOfBirthPlaceholder': 'Chọn ngày sinh...',
380
+ // Users page — add dialog
381
+ 'admin.users.add.title': 'Thêm người dùng mới',
382
+ 'admin.users.add.desc': 'Điền thông tin để tạo tài khoản người dùng mới',
383
+ 'admin.users.add.submitting': 'Đang tạo...',
384
+ 'admin.users.add.submit': 'Thêm người dùng',
385
+ // Users page — edit dialog
386
+ 'admin.users.edit.title': 'Chỉnh sửa người dùng',
387
+ 'admin.users.edit.desc': 'Cập nhật thông tin người dùng: {name}',
388
+ 'admin.users.edit.submitting': 'Đang cập nhật...',
389
+ 'admin.users.edit.submit': 'Cập nhật',
390
+ // Users page — delete dialog
391
+ 'admin.users.delete.title': 'Xác nhận xóa người dùng',
392
+ 'admin.users.delete.desc': 'Bạn có chắc chắn muốn xóa người dùng {name}?',
393
+ 'admin.users.delete.warning': 'Hành động này không thể hoàn tác.',
394
+ 'admin.users.delete.confirm': 'Xóa người dùng',
395
+ // Users page — view dialog
396
+ 'admin.users.view.title': 'Thông tin người dùng',
397
+ 'admin.users.view.subtitle': 'Chi tiết thông tin tài khoản',
398
+ 'admin.users.view.close': 'Đóng',
399
+ // Users page — reset password dialog
400
+ 'admin.users.resetPassword.title': 'Đặt lại mật khẩu',
401
+ 'admin.users.resetPassword.desc': 'Nhập mật khẩu mới cho người dùng {name}',
402
+ 'admin.users.resetPassword.label': 'Mật khẩu mới',
403
+ 'admin.users.resetPassword.placeholder': 'Nhập mật khẩu mới...',
404
+ 'admin.users.resetPassword.hint': 'Mật khẩu nên có ít nhất 8 ký tự, bao gồm chữ hoa, chữ thường và số',
405
+ 'admin.users.resetPassword.submit': 'Đặt lại mật khẩu',
406
+ // Users page — lock dialog
407
+ 'admin.users.lock.title': 'Khóa tài khoản',
408
+ 'admin.users.lock.desc': 'Bạn có chắc chắn muốn khóa tài khoản {name}? Người dùng sẽ không thể đăng nhập vào hệ thống.',
409
+ 'admin.users.lock.confirm': 'Khóa tài khoản',
410
+ // Users page — unlock dialog
411
+ 'admin.users.unlock.title': 'Mở khóa tài khoản',
412
+ 'admin.users.unlock.desc': 'Bạn có chắc chắn muốn mở khóa tài khoản {name}? Người dùng sẽ có thể đăng nhập vào hệ thống.',
413
+ 'admin.users.unlock.confirm': 'Mở khóa tài khoản',
414
+ // Reports — UI labels
415
+ 'admin.reports.title': 'Báo cáo',
416
+ 'admin.reports.subtitle': 'Xem tổng quan và phân tích kết quả thi',
417
+ 'admin.reports.viewDetail': 'Xem chi tiết →',
418
+ 'admin.reports.overview.title': 'Báo cáo tổng quan',
419
+ 'admin.reports.overview.desc': 'Thống kê chung toàn hệ thống',
420
+ 'admin.reports.overview.content': 'Xem tổng quan về kết quả thi, số lượng học sinh, điểm trung bình theo thời gian',
421
+ 'admin.reports.class.title': 'Báo cáo theo lớp',
422
+ 'admin.reports.class.desc': 'Chi tiết từng lớp học',
423
+ 'admin.reports.class.content': 'Phân tích kết quả thi, xếp hạng và tiến độ học tập theo từng lớp',
424
+ 'admin.reports.branch.title': 'Báo cáo theo chi nhánh',
425
+ 'admin.reports.branch.desc': 'So sánh giữa các chi nhánh',
426
+ 'admin.reports.branch.content': 'So sánh hiệu suất, kết quả học tập giữa các chi nhánh khác nhau',
427
+ 'admin.reports.exam.title': 'Báo cáo theo kỳ thi',
428
+ 'admin.reports.exam.desc': 'Thống kê theo từng kỳ thi',
429
+ 'admin.reports.exam.content': 'Thống kê kết quả, điểm số và tỷ lệ đạt theo từng kỳ thi',
430
+ 'admin.reports.room.title': 'Báo cáo theo phòng thi',
431
+ 'admin.reports.room.desc': 'Chi tiết từng phòng thi',
432
+ 'admin.reports.room.content': 'Thống kê kết quả thi, điểm số, tỷ lệ đạt theo từng phòng thi',
433
+ 'admin.reports.competency.title': 'Báo cáo năng lực học sinh',
434
+ 'admin.reports.competency.desc': 'Phân tích kỹ năng theo từng học sinh',
435
+ 'admin.reports.competency.content': 'Phân tích điểm số theo 4 kỹ năng: Đọc, Nghe, Viết, Nói cho từng học sinh',
436
+ // Reports — Room report page
437
+ 'admin.reports.room.pageTitle': 'Báo cáo phòng thi',
438
+ 'admin.reports.room.pageSubtitle': 'Thống kê chi tiết về các phòng thi',
439
+ 'admin.reports.room.export': 'Xuất báo cáo',
440
+ 'admin.reports.room.exporting': 'Đang xuất...',
441
+ 'admin.reports.room.exportExcel': 'Xuất Excel (.xlsx)',
442
+ 'admin.reports.room.exportCsv': 'Xuất CSV (.csv)',
443
+ 'admin.reports.room.viewFull': 'Xem báo cáo đầy đủ',
444
+ 'admin.reports.room.totalRooms': 'Tổng phòng thi',
445
+ 'admin.reports.room.totalStudents': 'Tổng thí sinh',
446
+ 'admin.reports.room.totalSubmitted': 'Đã nộp bài',
447
+ 'admin.reports.room.avgScore': 'Điểm TB',
448
+ 'admin.reports.room.passRate': 'Tỷ lệ đạt',
449
+ 'admin.reports.room.avgDuration': 'Thời gian TB',
450
+ 'admin.reports.room.scoreDistribution': 'Phân bố điểm số',
451
+ 'admin.reports.room.topRooms': 'Phòng thi có điểm cao nhất',
452
+ 'admin.reports.room.noData': 'Chưa có dữ liệu',
453
+ 'admin.reports.room.excellent': 'Xuất sắc (9-10)',
454
+ 'admin.reports.room.good': 'Tốt (7-8.9)',
455
+ 'admin.reports.room.average': 'Trung bình (5-6.9)',
456
+ 'admin.reports.room.poor': 'Yếu (<5)',
457
+ 'admin.reports.room.searchPlaceholder': 'Tìm kiếm phòng thi...',
458
+ 'admin.reports.room.statusPlaceholder': 'Trạng thái',
459
+ 'admin.reports.room.statusAll': 'Tất cả trạng thái',
460
+ 'admin.reports.room.statusScheduled': 'Sắp diễn ra',
461
+ 'admin.reports.room.statusInProgress': 'Đang diễn ra',
462
+ 'admin.reports.room.statusCompleted': 'Hoàn thành',
463
+ 'admin.reports.room.clearFilters': 'Xóa bộ lọc',
464
+ 'admin.reports.room.roomList': 'Danh sách phòng thi',
465
+ 'admin.reports.room.colRoom': 'Phòng thi',
466
+ 'admin.reports.room.colContest': 'Kỳ thi',
467
+ 'admin.reports.room.colStatus': 'Trạng thái',
468
+ 'admin.reports.room.colStudents': 'Thí sinh',
469
+ 'admin.reports.room.colAvgScore': 'Điểm TB',
470
+ 'admin.reports.room.colHighLow': 'Cao/Thấp',
471
+ 'admin.reports.room.colPassRate': 'Tỷ lệ đạt',
472
+ 'admin.reports.room.colTeachers': 'Giám thị',
473
+ 'admin.reports.room.empty': 'Không tìm thấy phòng thi nào',
474
+ 'admin.reports.room.loading': 'Đang tải dữ liệu...',
475
+ 'admin.reports.room.dialogTitle': 'Báo cáo theo phòng thi',
476
+ 'admin.reports.room.dialogDesc': 'Thống kê chi tiết kết quả thi theo từng phòng thi',
477
+ // Reports — Common labels (shared across report dialogs)
478
+ 'admin.reports.exporting': 'Đang xuất...',
479
+ 'admin.reports.exportExcel': 'Xuất Excel',
480
+ 'admin.reports.loading': 'Đang tải dữ liệu...',
481
+ 'admin.reports.close': 'Đóng',
482
+ 'admin.reports.common.avgScore': 'Điểm TB',
483
+ 'admin.reports.common.passRate': 'Tỷ lệ đạt',
484
+ 'admin.reports.common.totalStudents': 'Tổng học sinh',
485
+ 'admin.reports.common.students': 'Học sinh',
486
+ 'admin.reports.common.teachers': 'Giáo viên',
487
+ 'admin.reports.common.classes': 'Lớp',
488
+ // Reports — Stats Cards (main page)
489
+ 'admin.reports.stats.totalExams': 'Tổng số bài thi',
490
+ 'admin.reports.stats.totalStudents': 'Học sinh tham gia',
491
+ 'admin.reports.stats.avgScore': 'Điểm trung bình',
492
+ 'admin.reports.stats.passRate': 'Tỷ lệ đạt yêu cầu',
493
+ 'admin.reports.stats.vsLastMonth': 'so với tháng trước',
494
+ // Reports — Overview dialog
495
+ 'admin.reports.overview.dialogTitle': 'Báo cáo tổng quan',
496
+ 'admin.reports.overview.dialogDesc': 'Thống kê chung toàn hệ thống Ocean Edu',
497
+ 'admin.reports.overview.totalExams': 'Tổng đề thi',
498
+ 'admin.reports.overview.totalStudents': 'Học sinh',
499
+ 'admin.reports.overview.avgScore': 'Điểm TB hệ thống',
500
+ 'admin.reports.overview.passRate': 'Tỷ lệ đạt',
501
+ 'admin.reports.overview.vsPrevPeriod': 'so với kỳ trước',
502
+ 'admin.reports.overview.questions': 'Câu hỏi',
503
+ 'admin.reports.overview.classes': 'Lớp học',
504
+ 'admin.reports.overview.examRooms': 'Phòng thi',
505
+ 'admin.reports.overview.activeContests': 'Kỳ thi đang diễn ra',
506
+ 'admin.reports.overview.examsByLevel': 'Thống kê theo cấp độ thi',
507
+ 'admin.reports.overview.examsUnit': 'đề thi',
508
+ 'admin.reports.overview.questionsByType': 'Phân bố loại câu hỏi',
509
+ 'admin.reports.overview.questionsUnit': 'câu',
510
+ 'admin.reports.overview.recentActivity': 'Hoạt động gần đây',
511
+ 'admin.reports.overview.minutesAgo': '{count} phút trước',
512
+ 'admin.reports.overview.hoursAgo': '{count} giờ trước',
513
+ 'admin.reports.overview.daysAgo': '{count} ngày trước',
514
+ // Reports — Class dialog
515
+ 'admin.reports.class.dialogTitle': 'Báo cáo theo lớp học',
516
+ 'admin.reports.class.dialogDesc': 'Thống kê hiệu suất học tập theo từng lớp',
517
+ 'admin.reports.class.gradeAll': 'Tất cả',
518
+ 'admin.reports.class.totalClasses': 'Tổng số lớp',
519
+ 'admin.reports.class.totalStudents': 'Tổng học sinh',
520
+ 'admin.reports.class.avgPassRate': 'Tỷ lệ đạt TB',
521
+ 'admin.reports.class.classList': 'Danh sách lớp học',
522
+ 'admin.reports.class.colClass': 'Lớp',
523
+ 'admin.reports.class.colLevel': 'Cấp độ',
524
+ 'admin.reports.class.colSize': 'Sĩ số',
525
+ 'admin.reports.class.colAvgScore': 'Điểm TB',
526
+ 'admin.reports.class.colPassRate': 'Tỷ lệ đạt',
527
+ 'admin.reports.class.colTeacher': 'Giáo viên',
528
+ 'admin.reports.class.topStudents': 'Top 5 học sinh xuất sắc',
529
+ 'admin.reports.class.totalExams': 'Số bài',
530
+ 'admin.reports.class.searchPlaceholder': 'Tìm theo tên hoặc mã lớp...',
531
+ // Reports — Branch dialog
532
+ 'admin.reports.branch.dialogTitle': 'Báo cáo theo chi nhánh',
533
+ 'admin.reports.branch.dialogDesc': 'So sánh hiệu suất giữa các chi nhánh',
534
+ 'admin.reports.branch.totalBranches': 'Tổng chi nhánh',
535
+ 'admin.reports.branch.totalStudents': 'Tổng học sinh',
536
+ 'admin.reports.branch.totalClasses': 'Tổng lớp',
537
+ 'admin.reports.branch.avgScore': 'Điểm TB chung',
538
+ 'admin.reports.branch.comparison': 'So sánh chi nhánh',
539
+ // Reports — Exam (contest) dialog
540
+ 'admin.reports.exam.dialogTitle': 'Báo cáo theo kỳ thi',
541
+ 'admin.reports.exam.dialogDesc': 'Thống kê kết quả theo từng kỳ thi (contest)',
542
+ 'admin.reports.exam.statusDraft': 'Bản nháp',
543
+ 'admin.reports.exam.statusPublished': 'Đã công bố',
544
+ 'admin.reports.exam.statusActive': 'Đang diễn ra',
545
+ 'admin.reports.exam.statusCompleted': 'Hoàn thành',
546
+ 'admin.reports.exam.totalContests': 'Tổng kỳ thi',
547
+ 'admin.reports.exam.totalStudents': 'Tổng học sinh',
548
+ 'admin.reports.exam.avgScore': 'Điểm TB',
549
+ 'admin.reports.exam.passRate': 'Tỷ lệ đạt',
550
+ 'admin.reports.exam.contestList': 'Danh sách kỳ thi',
551
+ 'admin.reports.exam.code': 'Mã: {code}',
552
+ 'admin.reports.exam.noData': 'Chưa có dữ liệu',
553
+ // Reports — Competency dialog
554
+ 'admin.reports.competency.dialogTitle': 'Báo cáo năng lực học sinh',
555
+ 'admin.reports.competency.dialogDesc': 'Phân tích điểm số theo từng kỹ năng',
556
+ 'admin.reports.competency.searchPlaceholder': 'Tìm theo tên hoặc email học sinh...',
557
+ 'admin.reports.competency.totalStudents': 'Tổng học sinh',
558
+ 'admin.reports.competency.avgScore': 'Điểm TB',
559
+ 'admin.reports.competency.passRate': 'Tỷ lệ đạt',
560
+ 'admin.reports.competency.bestSkill': 'Kỹ năng tốt nhất',
561
+ 'admin.reports.competency.skillDistribution': 'Phân bố điểm theo kỹ năng',
562
+ 'admin.reports.competency.avgScoreTooltip': 'Điểm TB',
563
+ 'admin.reports.competency.studentList': 'Danh sách học sinh ({count})',
564
+ 'admin.reports.competency.colName': 'Họ tên',
565
+ 'admin.reports.competency.colClass': 'Lớp',
566
+ 'admin.reports.competency.colReading': 'Đọc',
567
+ 'admin.reports.competency.colListening': 'Nghe',
568
+ 'admin.reports.competency.colWriting': 'Viết',
569
+ 'admin.reports.competency.colSpeaking': 'Nói',
570
+ 'admin.reports.competency.colTotal': 'Tổng',
571
+ 'admin.reports.competency.colExams': 'Bài thi',
572
+ 'admin.reports.competency.noData': 'Không có dữ liệu',
573
+ 'admin.reports.competency.page': 'Trang {page} / {totalPages}',
574
+ 'admin.reports.competency.prev': 'Trước',
575
+ 'admin.reports.competency.next': 'Sau',
576
+ 'admin.reports.competency.reading': 'Đọc',
577
+ 'admin.reports.competency.listening': 'Nghe',
578
+ 'admin.reports.competency.writing': 'Viết',
579
+ 'admin.reports.competency.speaking': 'Nói',
580
+ // Reports — Competency full page (new)
581
+ 'admin.reports.competency.pageTitle': 'Báo cáo năng lực học sinh',
582
+ 'admin.reports.competency.pageSubtitle': 'Phân tích điểm số theo từng kỹ năng',
583
+ 'admin.reports.competency.backToReports': 'Quay lại báo cáo',
584
+ 'admin.reports.competency.export': 'Xuất Excel',
585
+ 'admin.reports.competency.exporting': 'Đang xuất...',
586
+ 'admin.reports.competency.atRisk': 'Học sinh cần hỗ trợ',
587
+ 'admin.reports.competency.atRiskDesc': 'Dưới 5.0 điểm',
588
+ 'admin.reports.competency.radarTitle': 'Năng lực theo kỹ năng',
589
+ 'admin.reports.competency.radarClassAvg': 'Lớp này',
590
+ 'admin.reports.competency.radarSysAvg': 'Trung bình hệ thống',
591
+ 'admin.reports.competency.trendTitle': 'Xu hướng điểm theo thời gian',
592
+ 'admin.reports.competency.trend3m': '3 tháng',
593
+ 'admin.reports.competency.trend6m': '6 tháng',
594
+ 'admin.reports.competency.trend12m': '12 tháng',
595
+ 'admin.reports.competency.skillBreakdownTitle': 'Phân tích kỹ năng',
596
+ 'admin.reports.competency.strengthsTitle': 'Điểm mạnh',
597
+ 'admin.reports.competency.weaknessesTitle': 'Điểm yếu',
598
+ 'admin.reports.competency.noStrengths': 'Chưa có dữ liệu',
599
+ 'admin.reports.competency.noWeaknesses': 'Chưa có dữ liệu',
600
+ 'admin.reports.competency.bandExcellent': 'Giỏi',
601
+ 'admin.reports.competency.bandGood': 'Khá',
602
+ 'admin.reports.competency.bandAverage': 'TB',
603
+ 'admin.reports.competency.bandWeak': 'Yếu',
604
+ 'admin.reports.competency.colTrend': 'Xu hướng',
605
+ 'admin.reports.competency.colBand': 'Xếp loại',
606
+ 'admin.reports.competency.filterAll': 'Tất cả',
607
+ 'admin.reports.competency.filterWeak': 'Cần hỗ trợ',
608
+ 'admin.reports.competency.filterGood': 'Khá - Giỏi',
609
+ 'admin.reports.competency.searchPlaceholder2': 'Tìm học sinh...',
610
+ 'admin.reports.competency.examRoomFilter.placeholder': 'Tất cả phòng thi',
611
+ 'admin.reports.competency.examRoomFilter.searchPlaceholder': 'Tìm phòng thi...',
612
+ 'admin.reports.competency.examRoomFilter.noRooms': 'Không tìm thấy phòng thi',
613
+ 'admin.reports.competency.examRoomFilter.allRooms': 'Tất cả phòng thi',
614
+ // Reports — Period selector
615
+ 'admin.reports.period.week': 'Tuần này',
616
+ 'admin.reports.period.month': 'Tháng này',
617
+ 'admin.reports.period.quarter': 'Quý này',
618
+ 'admin.reports.period.year': 'Năm nay',
619
+ 'admin.reports.period.custom': 'Tùy chọn',
620
+ 'admin.reports.period.fromDate': 'Từ ngày',
621
+ 'admin.reports.period.toDate': 'Đến ngày',
622
+ // Dashboard
623
+ 'admin.dashboard.title': 'Admin Dashboard',
624
+ 'admin.dashboard.subtitle': 'Quản lý hệ thống thi trực tuyến Ocean Edu',
625
+ 'admin.dashboard.totalStudents': 'Tổng học sinh',
626
+ 'admin.dashboard.totalStudents.monthly': '+{count} học sinh mới tháng này',
627
+ 'admin.dashboard.totalStudents.growth': 'T{lastMonth} {action} {percent}% so với T{prevMonth}',
628
+ 'admin.dashboard.totalExams': 'Đề thi',
629
+ 'admin.dashboard.totalExams.weekly': '+{count} đề thi mới tuần này',
630
+ 'admin.dashboard.examRooms': 'Phòng thi',
631
+ 'admin.dashboard.examRooms.active': '{count} phòng đang hoạt động',
632
+ 'admin.dashboard.teachers': 'Giáo viên',
633
+ 'admin.dashboard.teachers.yearly': '+{count} giáo viên mới năm nay',
634
+ 'admin.dashboard.contests': 'Kỳ thi',
635
+ 'admin.dashboard.contests.ongoing': '{count} đang diễn ra',
636
+ 'admin.dashboard.inProgressRooms': 'Phòng đang thi',
637
+ 'admin.dashboard.inProgressRooms.status': 'Đang diễn ra',
638
+ 'admin.dashboard.studentsInExam': 'Học sinh đang thi',
639
+ 'admin.dashboard.studentsInExam.rooms': 'Trong {count} phòng thi',
640
+ 'admin.dashboard.pendingGrading': 'Chờ chấm điểm',
641
+ 'admin.dashboard.pendingGrading.action': 'Cần xử lý',
642
+ 'admin.dashboard.userGrowth.title': 'Tăng trưởng người dùng',
643
+ 'admin.dashboard.userGrowth.desc': 'Số lượng học sinh và giáo viên 6 tháng gần đây',
644
+ 'admin.dashboard.userGrowth.students': 'Học sinh',
645
+ 'admin.dashboard.userGrowth.teachers': 'Giáo viên',
646
+ 'admin.dashboard.examStats.title': 'Thống kê đề thi',
647
+ 'admin.dashboard.examStats.desc': 'Số lượng đề thi hoàn thành và đang chờ theo môn',
648
+ 'admin.dashboard.examStats.completed': 'Hoàn thành',
649
+ 'admin.dashboard.examStats.pending': 'Đang chờ',
650
+ 'admin.dashboard.recentActivity.title': 'Hoạt động gần đây',
651
+ 'admin.dashboard.recentActivity.desc': 'Các hoạt động mới nhất trong hệ thống',
652
+ 'admin.dashboard.recentActivity.colActivity': 'Hoạt động',
653
+ 'admin.dashboard.recentActivity.colUser': 'Người thực hiện',
654
+ 'admin.dashboard.recentActivity.colStatus': 'Trạng thái',
655
+ 'admin.dashboard.recentActivity.colTime': 'Thời gian',
656
+ 'admin.dashboard.recentActivity.empty': 'Chưa có hoạt động nào',
657
+ 'admin.dashboard.growth.increase': 'tăng',
658
+ 'admin.dashboard.growth.decrease': 'giảm',
659
+ 'admin.dashboard.growth.unchanged': 'không đổi',
660
+ 'admin.dashboard.time.justNow': 'vừa xong',
661
+ 'admin.dashboard.time.minutesAgo': '{count} phút trước',
662
+ 'admin.dashboard.time.hoursAgo': '{count} giờ trước',
663
+ 'admin.dashboard.time.daysAgo': '{count} ngày trước',
664
+ 'admin.dashboard.time.weeksAgo': '{count} tuần trước',
665
+ 'admin.dashboard.time.monthsAgo': '{count} tháng trước',
666
+ // Branch management — toast messages
667
+ 'admin.branch.create.success': 'Thêm chi nhánh thành công',
668
+ 'admin.branch.create.successDesc': 'Chi nhánh mới đã được tạo với {count} giáo viên. Phòng thi PLACEMENT TEST đã được tạo tự động cho chi nhánh.',
669
+ 'admin.branch.create.successDescNoTeacher': 'Chi nhánh mới đã được tạo. Phòng thi PLACEMENT TEST đã được tạo tự động cho chi nhánh.',
670
+ 'admin.branch.update.success': 'Cập nhật chi nhánh thành công',
671
+ 'admin.branch.update.successDesc': 'Thông tin chi nhánh đã được cập nhật ({count} thay đổi giáo viên)',
672
+ 'admin.branch.update.successDescNoChange': 'Thông tin chi nhánh đã được cập nhật',
673
+ 'admin.branch.delete.success': 'Xóa chi nhánh thành công',
674
+ 'admin.branch.delete.successDesc': 'Chi nhánh {code} - {name} đã được xóa',
675
+ 'admin.branch.activate.success': 'Kích hoạt chi nhánh thành công',
676
+ 'admin.branch.deactivate.success': 'Ngừng hoạt động chi nhánh thành công',
677
+ 'admin.branch.toggleStatus.successDesc': 'Chi nhánh {code} - {name} đã được {status}',
678
+ 'admin.branch.toggleStatus.activated': 'kích hoạt',
679
+ 'admin.branch.toggleStatus.deactivated': 'ngừng hoạt động',
680
+ // Branches page — page header & loading
681
+ 'admin.branches.title': 'Quản lý chi nhánh',
682
+ 'admin.branches.subtitle': 'Quản lý thông tin các chi nhánh trong hệ thống',
683
+ 'admin.branches.loading': 'Đang tải dữ liệu...',
684
+ // Branches page — stats cards
685
+ 'admin.branches.stats.total': 'Tổng chi nhánh',
686
+ 'admin.branches.stats.active': 'Đang hoạt động',
687
+ 'admin.branches.stats.inactive': 'Ngừng hoạt động',
688
+ 'admin.branches.stats.distribution': 'Phân bố quản lý',
689
+ 'admin.branches.stats.activeBranches': 'Đang hoạt động',
690
+ 'admin.branches.stats.inactiveBranches': 'Ngừng hoạt động',
691
+ 'admin.branches.stats.withManager': 'Có quản lý',
692
+ 'admin.branches.stats.withoutManager': 'Chưa có quản lý',
693
+ 'admin.branches.stats.branchUnit': 'chi nhánh',
694
+ // Branches page — table
695
+ 'admin.branches.table.title': 'Danh sách chi nhánh',
696
+ 'admin.branches.table.showing': 'Hiển thị {count} / {total} chi nhánh',
697
+ 'admin.branches.table.addBranch': 'Thêm chi nhánh',
698
+ 'admin.branches.table.loading': 'Đang tải...',
699
+ 'admin.branches.table.empty': 'Không tìm thấy chi nhánh nào',
700
+ 'admin.branches.table.notUpdated': 'Chưa cập nhật',
701
+ 'admin.branches.table.notAssigned': 'Chưa phân công',
702
+ // Branches page — columns
703
+ 'admin.branches.col.code': 'MÃ CHI NHÁNH',
704
+ 'admin.branches.col.name': 'TÊN CHI NHÁNH',
705
+ 'admin.branches.col.address': 'ĐỊA CHỈ',
706
+ 'admin.branches.col.contact': 'LIÊN HỆ',
707
+ 'admin.branches.col.manager': 'QUẢN LÝ',
708
+ 'admin.branches.col.status': 'TRẠNG THÁI',
709
+ 'admin.branches.col.actions': 'THAO TÁC',
710
+ // Branches page — filters
711
+ 'admin.branches.filter.searchPlaceholder': 'Tìm kiếm theo tên hoặc mã chi nhánh',
712
+ 'admin.branches.filter.statusPlaceholder': 'Trạng thái',
713
+ 'admin.branches.filter.allStatuses': 'Tất cả trạng thái',
714
+ 'admin.branches.filter.active': 'Đang hoạt động',
715
+ 'admin.branches.filter.inactive': 'Ngừng hoạt động',
716
+ 'admin.branches.filter.clearFilters': 'Xóa bộ lọc',
717
+ 'admin.branches.filter.searchLabel': 'Tìm kiếm:',
718
+ 'admin.branches.filter.statusLabel': 'Trạng thái:',
719
+ // Branches page — status badges
720
+ 'admin.branches.status.active': 'Hoạt động',
721
+ 'admin.branches.status.activeDetail': 'Đang hoạt động',
722
+ 'admin.branches.status.inactive': 'Ngừng hoạt động',
723
+ // Branches page — row actions
724
+ 'admin.branches.action.view': 'Xem chi tiết',
725
+ 'admin.branches.action.edit': 'Chỉnh sửa',
726
+ 'admin.branches.action.delete': 'Xóa',
727
+ // Branches page — form fields (shared between Add & Edit)
728
+ 'admin.branches.field.basicInfo': 'Thông tin cơ bản',
729
+ 'admin.branches.field.code': 'Mã chi nhánh',
730
+ 'admin.branches.field.codePlaceholder': 'VD: CN-HN-01',
731
+ 'admin.branches.field.name': 'Tên chi nhánh',
732
+ 'admin.branches.field.namePlaceholder': 'VD: Chi nhánh Hà Nội',
733
+ 'admin.branches.field.address': 'Địa chỉ',
734
+ 'admin.branches.field.addressPlaceholder': 'Nhập địa chỉ chi nhánh...',
735
+ 'admin.branches.field.contactInfo': 'Thông tin liên hệ',
736
+ 'admin.branches.field.phone': 'Số điện thoại',
737
+ 'admin.branches.field.phonePlaceholder': 'VD: 0912345678',
738
+ 'admin.branches.field.email': 'Email',
739
+ 'admin.branches.field.emailPlaceholder': 'VD: chinhanh@ocean.edu.vn',
740
+ 'admin.branches.field.managerSection': 'Người quản lý',
741
+ 'admin.branches.field.selectManager': 'Chọn người quản lý',
742
+ 'admin.branches.field.selectManagerPlaceholder': 'Chọn người quản lý...',
743
+ 'admin.branches.field.managerHint': 'Người quản lý sẽ có quyền quản trị chi nhánh này',
744
+ 'admin.branches.field.statusSection': 'Trạng thái',
745
+ // Branches page — teacher selection
746
+ 'admin.branches.teacher.title': 'Chọn giáo viên',
747
+ 'admin.branches.teacher.searchPlaceholder': 'Tìm kiếm giáo viên theo tên, email hoặc số điện thoại',
748
+ 'admin.branches.teacher.colName': 'Họ tên',
749
+ 'admin.branches.teacher.colEmail': 'Email',
750
+ 'admin.branches.teacher.colPhone': 'SĐT',
751
+ 'admin.branches.teacher.notFound': 'Không tìm thấy giáo viên nào',
752
+ 'admin.branches.teacher.empty': 'Chưa có giáo viên nào trong hệ thống',
753
+ 'admin.branches.teacher.selected': 'Đã chọn: {count} giáo viên',
754
+ 'admin.branches.teacher.clearAll': 'Xóa tất cả',
755
+ // Branches page — add dialog
756
+ 'admin.branches.add.title': 'Thêm chi nhánh mới',
757
+ 'admin.branches.add.desc': 'Nhập thông tin cho chi nhánh mới',
758
+ 'admin.branches.add.activateLabel': 'Kích hoạt chi nhánh',
759
+ 'admin.branches.add.activateDescActive': 'Chi nhánh sẽ hoạt động ngay sau khi tạo',
760
+ 'admin.branches.add.activateDescInactive': 'Chi nhánh sẽ ngừng hoạt động ngay sau khi tạo',
761
+ 'admin.branches.add.submitting': 'Đang xử lý...',
762
+ 'admin.branches.add.submit': 'Thêm chi nhánh',
763
+ // Branches page — edit dialog
764
+ 'admin.branches.edit.title': 'Chỉnh sửa chi nhánh',
765
+ 'admin.branches.edit.desc': 'Cập nhật thông tin cho chi nhánh: {name}',
766
+ 'admin.branches.edit.statusLabel': 'Trạng thái hoạt động',
767
+ 'admin.branches.edit.statusDescActive': 'Chi nhánh đang hoạt động',
768
+ 'admin.branches.edit.statusDescInactive': 'Chi nhánh đang ngừng hoạt động',
769
+ 'admin.branches.edit.submitting': 'Đang xử lý...',
770
+ 'admin.branches.edit.submit': 'Cập nhật',
771
+ // Branches page — delete dialog
772
+ 'admin.branches.delete.title': 'Xác nhận xóa chi nhánh',
773
+ 'admin.branches.delete.desc': 'Bạn có chắc chắn muốn xóa chi nhánh này?',
774
+ 'admin.branches.delete.warning': 'Hành động này không thể hoàn tác và sẽ xóa tất cả dữ liệu liên quan đến chi nhánh này.',
775
+ 'admin.branches.delete.submitting': 'Đang xử lý...',
776
+ 'admin.branches.delete.confirm': 'Xóa chi nhánh',
777
+ // Branches page — toggle status dialog
778
+ 'admin.branches.toggleStatus.activateTitle': 'Kích hoạt chi nhánh',
779
+ 'admin.branches.toggleStatus.deactivateTitle': 'Ngừng hoạt động chi nhánh',
780
+ 'admin.branches.toggleStatus.activateDesc': 'Bạn có chắc chắn muốn kích hoạt chi nhánh này?',
781
+ 'admin.branches.toggleStatus.deactivateDesc': 'Bạn có chắc chắn muốn ngừng hoạt động chi nhánh này?',
782
+ 'admin.branches.toggleStatus.activateInfo': 'Chi nhánh sẽ được kích hoạt và hoạt động bình thường.',
783
+ 'admin.branches.toggleStatus.deactivateInfo': 'Chi nhánh sẽ bị ngừng hoạt động nhưng dữ liệu vẫn được giữ lại.',
784
+ 'admin.branches.toggleStatus.submitting': 'Đang xử lý...',
785
+ 'admin.branches.toggleStatus.activate': 'Kích hoạt',
786
+ 'admin.branches.toggleStatus.deactivate': 'Ngừng hoạt động',
787
+ // Branches page — view dialog
788
+ 'admin.branches.view.title': 'Chi tiết chi nhánh: {name}',
789
+ 'admin.branches.view.desc': 'Xem thông tin chi tiết của chi nhánh',
790
+ 'admin.branches.view.basicInfo': 'Thông tin cơ bản',
791
+ 'admin.branches.view.codeLabel': 'Mã chi nhánh',
792
+ 'admin.branches.view.nameLabel': 'Tên chi nhánh',
793
+ 'admin.branches.view.statusLabel': 'Trạng thái',
794
+ 'admin.branches.view.contactInfo': 'Thông tin liên hệ',
795
+ 'admin.branches.view.addressLabel': 'Địa chỉ',
796
+ 'admin.branches.view.phoneLabel': 'Số điện thoại',
797
+ 'admin.branches.view.emailLabel': 'Email',
798
+ 'admin.branches.view.notUpdated': 'Chưa cập nhật',
799
+ 'admin.branches.view.managerSection': 'Người quản lý',
800
+ 'admin.branches.view.noManager': 'Chưa phân công người quản lý',
801
+ 'admin.branches.view.teacherSection': 'Giáo viên',
802
+ 'admin.branches.view.noTeachers': 'Chưa có giáo viên nào được phân công',
803
+ 'admin.branches.view.moreTeachers': 'và {count} giáo viên khác...',
804
+ 'admin.branches.view.changeHistory': 'Lịch sử thay đổi',
805
+ 'admin.branches.view.createdAt': 'Tạo mới',
806
+ 'admin.branches.view.createdBy': 'bởi',
807
+ 'admin.branches.view.noCreator': 'Không có thông tin người tạo',
808
+ 'admin.branches.view.updatedAt': 'Cập nhật lần cuối',
809
+ 'admin.branches.view.noUpdater': 'Không có thông tin người cập nhật',
810
+ 'admin.branches.view.branchId': 'ID chi nhánh',
811
+ // Class Rooms page — page header
812
+ // Class Rooms page — table
813
+ // Class Rooms page — filters
814
+ // Class Rooms page — columns
815
+ // Class Rooms page — status
816
+ // Class Rooms page — row actions
817
+ // Class Rooms page — add dialog
818
+ // Class Rooms page — edit dialog
819
+ // Class Rooms page — form fields
820
+ // Class Rooms page — view dialog
821
+ // Class Room — load errors
822
+ // Class Room — delete
823
+ // Class Room — students
824
+ // Class Room Exams dialog
825
+ // ─── Rooms page ──────────────────────────────────────────────────────────────
826
+ // Rooms page — page header
827
+ 'admin.rooms.title': 'Quản lý phòng thi',
828
+ 'admin.rooms.subtitle': 'Tạo và quản lý các phòng thi',
829
+ 'admin.rooms.loading': 'Đang tải dữ liệu...',
830
+ // Rooms page — stats cards
831
+ 'admin.rooms.stats.totalRooms': 'Tổng phòng thi',
832
+ 'admin.rooms.stats.activeRooms': '{count} phòng đang hoạt động',
833
+ 'admin.rooms.stats.students': 'Học sinh',
834
+ 'admin.rooms.stats.totalStudents': 'Tổng học sinh tham gia',
835
+ 'admin.rooms.stats.completed': 'Hoàn thành',
836
+ 'admin.rooms.stats.completedRooms': 'Phòng đã hoàn thành',
837
+ 'admin.rooms.stats.statusDistribution': 'Phân bố trạng thái',
838
+ 'admin.rooms.stats.ongoing': 'Đang diễn ra',
839
+ 'admin.rooms.stats.scheduled': 'Đã lên lịch',
840
+ 'admin.rooms.stats.roomUnit': 'phòng',
841
+ // Rooms page — table
842
+ 'admin.rooms.table.title': 'Danh sách phòng thi',
843
+ 'admin.rooms.table.showing': 'Hiển thị {count} / {total} phòng thi',
844
+ 'admin.rooms.table.addRoom': 'Tạo phòng thi',
845
+ 'admin.rooms.table.loading': 'Đang tải...',
846
+ 'admin.rooms.table.empty': 'Không tìm thấy phòng thi nào',
847
+ 'admin.rooms.table.notAssigned': 'Chưa gán',
848
+ 'admin.rooms.table.unlimited': 'Không giới hạn',
849
+ // Rooms page — columns
850
+ 'admin.rooms.col.name': 'TÊN PHÒNG',
851
+ 'admin.rooms.col.code': 'MÃ PHÒNG',
852
+ 'admin.rooms.col.branch': 'CHI NHÁNH',
853
+ 'admin.rooms.col.exam': 'ĐỀ THI & CÂU HỎI',
854
+ 'admin.rooms.col.time': 'THỜI GIAN',
855
+ 'admin.rooms.col.progress': 'TIẾN ĐỘ',
856
+ 'admin.rooms.col.lock': 'KHÓA',
857
+ 'admin.rooms.col.actions': 'THAO TÁC',
858
+ // Rooms page — filters
859
+ 'admin.rooms.filter.searchPlaceholder': 'Tìm kiếm theo tên phòng thi, mã phòng thi',
860
+ 'admin.rooms.filter.statusPlaceholder': 'Trạng thái',
861
+ 'admin.rooms.filter.allStatuses': 'Tất cả trạng thái',
862
+ 'admin.rooms.filter.branchPlaceholder': 'Chi nhánh',
863
+ 'admin.rooms.filter.allBranches': 'Tất cả chi nhánh',
864
+ 'admin.rooms.filter.clearFilters': 'Xóa bộ lọc',
865
+ // Rooms page — status labels (table)
866
+ 'admin.rooms.status.completed': 'Đã hoàn thành',
867
+ 'admin.rooms.status.inProgress': 'Đang diễn ra',
868
+ 'admin.rooms.status.scheduled': 'Đã lên lịch',
869
+ // Rooms page — exam cell actions
870
+ 'admin.rooms.exam.viewContent': 'Xem nội dung',
871
+ 'admin.rooms.exam.changeExam': 'Thay đổi đề',
872
+ 'admin.rooms.exam.selectExam': '+ Chọn đề thi',
873
+ // Rooms page — row action titles
874
+ 'admin.rooms.action.view': 'Xem chi tiết',
875
+ 'admin.rooms.action.edit': 'Chỉnh sửa',
876
+ 'admin.rooms.action.schedule': 'Chỉnh sửa lịch thi',
877
+ 'admin.rooms.action.delete': 'Xóa',
878
+ // Rooms page — toast messages (RoomsPageContainer)
879
+ 'admin.rooms.toast.loadError': 'Lỗi tải dữ liệu',
880
+ 'admin.rooms.toast.loadRoomsError': 'Không thể tải danh sách phòng thi. Vui lòng thử lại sau.',
881
+ 'admin.rooms.toast.loadTeachersError': 'Không thể tải danh sách giám thị. Vui lòng thử lại sau.',
882
+ 'admin.rooms.toast.loadStudentsError': 'Không thể tải danh sách học sinh. Vui lòng thử lại sau.',
883
+ 'admin.rooms.toast.loadExamsError': 'Không thể tải danh sách đề thi. Vui lòng thử lại sau.',
884
+ 'admin.rooms.toast.loadContestsError': 'Không thể tải danh sách kỳ thi. Vui lòng thử lại sau.',
885
+ 'admin.rooms.toast.loadClassesError': 'Không thể tải danh sách lớp học. Vui lòng thử lại sau.',
886
+ 'admin.rooms.toast.loadBranchesError': 'Không thể tải danh sách chi nhánh. Vui lòng thử lại sau.',
887
+ 'admin.rooms.toast.cannotChangeExam': 'Không thể thay đổi đề thi',
888
+ 'admin.rooms.toast.cannotChangeExamDesc': 'Phòng đã bắt đầu hoặc đã hoàn thành không thể thay đổi đề thi',
889
+ 'admin.rooms.toast.assignExamSuccess': 'Gán đề thi thành công',
890
+ 'admin.rooms.toast.assignExamSuccessDesc': 'Đề thi "{examName}" với {childCount} đề con đã được gán cho phòng {roomCode}',
891
+ 'admin.rooms.toast.cannotRemoveExam': 'Không thể xóa đề thi',
892
+ 'admin.rooms.toast.cannotRemoveExamDesc': 'Phòng đã bắt đầu hoặc đã hoàn thành không thể xóa đề thi',
893
+ 'admin.rooms.toast.removeExamSuccess': 'Xóa đề thi thành công',
894
+ 'admin.rooms.toast.removeExamSuccessDesc': 'Đề thi đã được xóa khỏi phòng {roomCode}',
895
+ 'admin.rooms.toast.saveSettingsSuccess': 'Lưu cài đặt thành công',
896
+ 'admin.rooms.toast.saveSettingsSuccessDesc': 'Cài đặt thi của bạn đã được lưu',
897
+ 'admin.rooms.toast.updateScheduleSuccess': 'Cập nhật lịch thi thành công',
898
+ 'admin.rooms.toast.updateScheduleSuccessDesc': 'Lịch thi cho phòng {roomCode} đã được cập nhật',
899
+ 'admin.rooms.toast.updateScheduleError': 'Cập nhật lịch thi thất bại',
900
+ 'admin.rooms.toast.updateScheduleErrorDesc': 'Lỗi khi cập nhật lịch thi cho phòng {roomCode}',
901
+ // Rooms page — AddRoomDialog
902
+ 'admin.rooms.add.title': 'Thêm phòng thi mới',
903
+ 'admin.rooms.add.description': 'Nhập thông tin cho phòng thi mới',
904
+ 'admin.rooms.add.cancel': 'Hủy',
905
+ 'admin.rooms.add.submit': 'Thêm phòng thi',
906
+ 'admin.rooms.add.success': 'Tạo phòng thi thành công',
907
+ 'admin.rooms.add.successDesc': 'Phòng thi {code} đã được tạo',
908
+ 'admin.rooms.add.error': 'Tạo phòng thi thất bại',
909
+ 'admin.rooms.add.errorDesc': 'Có lỗi xảy ra khi tạo phòng thi',
910
+ // Rooms page — EditRoomDialog
911
+ 'admin.rooms.edit.title': 'Chỉnh sửa phòng thi: {name}',
912
+ 'admin.rooms.edit.description': 'Cập nhật thông tin phòng thi',
913
+ 'admin.rooms.edit.cancel': 'Hủy',
914
+ 'admin.rooms.edit.saving': 'Đang lưu...',
915
+ 'admin.rooms.edit.submit': 'Lưu thay đổi',
916
+ 'admin.rooms.edit.success': 'Cập nhật phòng thi thành công',
917
+ 'admin.rooms.edit.successDesc': 'Phòng thi {code} đã được cập nhật',
918
+ 'admin.rooms.edit.error': 'Cập nhật phòng thi thất bại',
919
+ 'admin.rooms.edit.errorDesc': 'Có lỗi xảy ra khi cập nhật phòng thi',
920
+ // Rooms page — DeleteRoomDialog
921
+ 'admin.rooms.delete.title': 'Xác nhận xóa phòng thi',
922
+ 'admin.rooms.delete.description': 'Bạn có chắc chắn muốn xóa phòng thi',
923
+ 'admin.rooms.delete.warning': 'Hành động này không thể hoàn tác và sẽ xóa tất cả dữ liệu liên quan.',
924
+ 'admin.rooms.delete.cancel': 'Hủy',
925
+ 'admin.rooms.delete.processing': 'Đang xử lý...',
926
+ 'admin.rooms.delete.submit': 'Xóa phòng thi',
927
+ 'admin.rooms.delete.success': 'Xóa phòng thi thành công',
928
+ 'admin.rooms.delete.successDesc': 'Phòng thi {code} đã được xóa',
929
+ 'admin.rooms.delete.error': 'Lỗi xóa phòng thi',
930
+ 'admin.rooms.delete.errorDesc': 'Không thể xóa phòng thi. Vui lòng thử lại sau.',
931
+ // Rooms page — ViewRoomDialog
932
+ 'admin.rooms.view.title': 'Chi tiết phòng thi: {name}',
933
+ 'admin.rooms.view.close': 'Đóng',
934
+ 'admin.rooms.view.locked': 'Đã khóa',
935
+ 'admin.rooms.view.unlocked': 'Đang mở',
936
+ 'admin.rooms.view.undetermined': 'Chưa xác định',
937
+ 'admin.rooms.unlimitedTime': 'Không giới hạn thời gian',
938
+ 'admin.rooms.view.stats.candidates': 'Thí sinh',
939
+ 'admin.rooms.view.stats.supervisors': 'Giám thị',
940
+ 'admin.rooms.view.stats.submitted': 'Đã nộp',
941
+ 'admin.rooms.view.stats.submissionRate': 'Tỷ lệ nộp',
942
+ 'admin.rooms.view.section.basicInfo': 'Thông tin cơ bản',
943
+ 'admin.rooms.view.section.time': 'Thời gian',
944
+ 'admin.rooms.view.section.exams': 'Đề thi',
945
+ 'admin.rooms.view.section.supervisors': 'Giám thị',
946
+ 'admin.rooms.view.section.classes': 'Lớp học',
947
+ 'admin.rooms.view.section.assignedStudents': 'Học sinh được chỉ định',
948
+ 'admin.rooms.view.field.contest': 'Kỳ thi',
949
+ 'admin.rooms.view.field.location': 'Vị trí',
950
+ 'admin.rooms.view.field.branch': 'Chi nhánh',
951
+ 'admin.rooms.view.field.candidateSelection': 'Cách chọn thí sinh',
952
+ 'admin.rooms.view.field.description': 'Mô tả',
953
+ 'admin.rooms.view.field.start': 'Bắt đầu',
954
+ 'admin.rooms.view.field.end': 'Kết thúc',
955
+ 'admin.rooms.view.field.createdAt': 'Tạo lúc:',
956
+ 'admin.rooms.view.field.updatedAt': 'Cập nhật:',
957
+ 'admin.rooms.view.selectionType.all': 'Tất cả học sinh',
958
+ 'admin.rooms.view.selectionType.specific': 'Chỉ định cụ thể',
959
+ 'admin.rooms.view.locationNotSet': 'Chưa cập nhật',
960
+ 'admin.rooms.view.noSupervisors': 'Chưa có giám thị được phân công',
961
+ 'admin.rooms.view.examOriginal': 'Đề thi gốc',
962
+ 'admin.rooms.view.examVariants': 'Các phiên bản đề ({count})',
963
+ 'admin.rooms.view.status.scheduled': 'Đã lên lịch',
964
+ 'admin.rooms.view.status.inProgress': 'Đang diễn ra',
965
+ 'admin.rooms.view.status.completed': 'Đã hoàn thành',
966
+ 'admin.rooms.view.type.contest': 'Kỳ thi',
967
+ 'admin.rooms.view.type.practiceTest': 'Thi thử',
968
+ 'admin.rooms.view.classCode': 'Mã:',
969
+ 'admin.rooms.view.classGrade': 'Khối:',
970
+ 'admin.rooms.view.classStudents': '{count} học sinh',
971
+ // Rooms page — LockRoomDialog
972
+ 'admin.rooms.lock.titleLock': 'Khóa phòng thi?',
973
+ 'admin.rooms.lock.titleUnlock': 'Mở khóa phòng thi?',
974
+ 'admin.rooms.lock.statusLocked': 'Đang khóa',
975
+ 'admin.rooms.lock.statusUnlocked': 'Đang mở',
976
+ 'admin.rooms.lock.confirmUnlock': 'Bạn có chắc chắn muốn',
977
+ 'admin.rooms.lock.unlock': 'mở khóa',
978
+ 'admin.rooms.lock.lock': 'khóa',
979
+ 'admin.rooms.lock.confirmSuffix': 'phòng thi này?',
980
+ 'admin.rooms.lock.unlockEffect': 'Học sinh sẽ có thể truy cập và tham gia làm bài thi trong phòng thi này.',
981
+ 'admin.rooms.lock.lockEffect': 'Học sinh sẽ không thể truy cập hoặc tham gia làm bài thi trong phòng thi này cho đến khi được mở khóa.',
982
+ 'admin.rooms.lock.cancel': 'Hủy bỏ',
983
+ 'admin.rooms.lock.processing': 'Đang xử lý...',
984
+ 'admin.rooms.lock.submitLock': 'Khóa phòng',
985
+ 'admin.rooms.lock.submitUnlock': 'Mở khóa',
986
+ 'admin.rooms.lock.successLock': 'Khóa phòng thi thành công',
987
+ 'admin.rooms.lock.successUnlock': 'Mở khóa phòng thi thành công',
988
+ 'admin.rooms.lock.successDesc': 'Phòng thi {code} đã được {action}',
989
+ 'admin.rooms.lock.locked': 'khóa',
990
+ 'admin.rooms.lock.unlocked': 'mở khóa',
991
+ 'admin.rooms.lock.error': 'Lỗi thay đổi trạng thái',
992
+ 'admin.rooms.lock.errorDesc': 'Không thể thay đổi trạng thái khóa của phòng thi. Vui lòng thử lại sau.',
993
+ // Rooms page — RemoveExamDialog
994
+ 'admin.rooms.removeExam.title': 'Xóa đề thi khỏi phòng',
995
+ 'admin.rooms.removeExam.description': 'Bạn có chắc chắn muốn xóa đề thi',
996
+ 'admin.rooms.removeExam.fromRoom': 'khỏi phòng',
997
+ 'admin.rooms.removeExam.cannotRemove': 'Không thể xóa đề thi cho phòng đã bắt đầu hoặc đã hoàn thành!',
998
+ 'admin.rooms.removeExam.effect': 'Phòng thi sẽ không còn đề thi được gán. Bạn có thể chọn đề thi mới sau.',
999
+ 'admin.rooms.removeExam.cancel': 'Hủy',
1000
+ 'admin.rooms.removeExam.submit': 'Xóa đề thi',
1001
+ // Rooms page — ScheduleRoomDialog
1002
+ 'admin.rooms.schedule.title': 'Chỉnh sửa lịch thi: {name}',
1003
+ 'admin.rooms.schedule.description': 'Cập nhật thời gian thi cho phòng thi này',
1004
+ 'admin.rooms.schedule.contestInfo': 'Thông tin kỳ thi: {name}',
1005
+ 'admin.rooms.schedule.unlimitedContest': 'Kỳ thi không giới hạn thời gian.',
1006
+ 'admin.rooms.schedule.contestRange': 'Từ {start} đến {end}',
1007
+ 'admin.rooms.schedule.contestConstraint': 'Thời gian phòng thi phải nằm trong khoảng thời gian của kỳ thi',
1008
+ 'admin.rooms.schedule.unlimitedBadge': 'Không giới hạn',
1009
+ 'admin.rooms.schedule.unlimitedNote': 'Kỳ thi này không giới hạn thời gian. Bạn không cần đặt lịch cho phòng thi.',
1010
+ 'admin.rooms.schedule.startTime': 'Thời gian bắt đầu *',
1011
+ 'admin.rooms.schedule.endTime': 'Thời gian kết thúc *',
1012
+ 'admin.rooms.schedule.cancel': 'Hủy',
1013
+ 'admin.rooms.schedule.save': 'Lưu lịch thi',
1014
+ 'admin.rooms.schedule.validation.startRequired': 'Vui lòng chọn thời gian bắt đầu',
1015
+ 'admin.rooms.schedule.validation.endRequired': 'Vui lòng chọn thời gian kết thúc',
1016
+ 'admin.rooms.schedule.validation.endAfterStart': 'Thời gian kết thúc phải sau thời gian bắt đầu',
1017
+ // Rooms page — SelectExamDialog
1018
+ 'admin.rooms.selectExam.title': 'Chọn đề thi cho phòng: {name}',
1019
+ 'admin.rooms.selectExam.description': 'Chọn 1 đề thi cha và các đề thi con (biến thể) để gán cho phòng thi này',
1020
+ 'admin.rooms.selectExam.parentCount': 'Đề Thi Cha',
1021
+ 'admin.rooms.selectExam.childCount': 'Đề Thi Con',
1022
+ 'admin.rooms.selectExam.noParentSelected': 'Chưa chọn đề thi cha',
1023
+ 'admin.rooms.selectExam.noParentSelectedDesc': 'Vui lòng chọn một đề thi cha trước',
1024
+ 'admin.rooms.selectExam.childCode': 'Mã: {code} • Biến thể #{variant}',
1025
+ 'admin.rooms.selectExam.selectAll': 'Chọn tất cả',
1026
+ 'admin.rooms.selectExam.deselectAll': 'Bỏ chọn tất cả',
1027
+ 'admin.rooms.selectExam.noParentExams': 'Không có đề thi cha nào',
1028
+ 'admin.rooms.selectExam.selectedParent': 'Đề Thi Cha Đã Chọn',
1029
+ 'admin.rooms.selectExam.selectedChildren': 'Đề Thi Con Đã Chọn ({count})',
1030
+ 'admin.rooms.selectExam.cancel': 'Hủy',
1031
+ 'admin.rooms.selectExam.confirm': 'Xác Nhận',
1032
+ 'admin.rooms.selectExam.childExams': '{count} đề con',
1033
+ 'admin.rooms.selectExam.warning.title': 'Chưa đủ dữ liệu',
1034
+ 'admin.rooms.selectExam.warning.desc': 'Vui lòng chọn đề thi cha và ít nhất một đề thi con',
1035
+ 'admin.rooms.selectExam.clearTitle': 'Xóa Lựa Chọn?',
1036
+ 'admin.rooms.selectExam.clearDesc': 'Bạn có chắc muốn xóa đề thi cha và {count} đề thi con đã chọn?',
1037
+ 'admin.rooms.selectExam.clearCancel': 'Hủy',
1038
+ 'admin.rooms.selectExam.clearConfirm': 'Xóa',
1039
+ 'admin.rooms.selectExam.dialogTitle': 'Chọn Đề Thi',
1040
+ 'admin.rooms.selectExam.dialogDescription': 'Chọn một đề thi cha và các đề thi con tương ứng cho kỳ thi của bạn',
1041
+ 'admin.rooms.selectExam.searchPlaceholder': 'Tìm kiếm đề thi theo tên, mã đề, môn học...',
1042
+ 'admin.rooms.selectExam.noParentSelectedInfo': 'Vui lòng chọn một đề thi cha trước khi chọn đề thi con',
1043
+ 'admin.rooms.selectExam.examCode': 'Mã đề: {name}',
1044
+ 'admin.rooms.selectExam.original': 'Gốc',
1045
+ 'admin.rooms.selectExam.questions': '{count} câu',
1046
+ 'admin.rooms.selectExam.minutes': '{count} phút',
1047
+ 'admin.rooms.selectExam.difficulty.easy': 'Dễ',
1048
+ 'admin.rooms.selectExam.difficulty.medium': 'Trung Bình',
1049
+ 'admin.rooms.selectExam.difficulty.hard': 'Khó',
1050
+ 'admin.rooms.selectExam.emptySearch': 'Không tìm thấy đề thi phù hợp',
1051
+ 'admin.rooms.selectExam.emptyAll': 'Chưa có đề thi nào',
1052
+ 'admin.rooms.selectExam.emptySearchHint': 'Thử tìm kiếm với từ khóa khác',
1053
+ 'admin.rooms.selectExam.emptyAllHint': 'Hãy tạo đề thi mới để bắt đầu',
1054
+ 'admin.rooms.selectExam.clearSearch': 'Xóa tìm kiếm',
1055
+ 'admin.rooms.selectExam.selected': 'Đã chọn',
1056
+ 'admin.rooms.selectExam.selectedParentLabel': 'Đề Thi Cha',
1057
+ // Rooms page — ChangeExamDialog
1058
+ 'admin.rooms.changeExam.title': 'Thay đổi đề thi cho phòng: {name}',
1059
+ 'admin.rooms.changeExam.description': 'Chọn đề thi mới để thay thế đề thi hiện tại',
1060
+ 'admin.rooms.changeExam.currentExam': 'Đề thi hiện tại',
1061
+ 'admin.rooms.changeExam.currentExamHint': 'Chọn đề thi mới từ danh sách bên dưới để thay thế',
1062
+ 'admin.rooms.changeExam.childCount': '({count} đề con)',
1063
+ 'admin.rooms.changeExam.newParent': 'Đề Thi Cha Mới',
1064
+ 'admin.rooms.changeExam.newParentSelected': 'Đề Thi Cha Mới Đã Chọn',
1065
+ 'admin.rooms.changeExam.currentBadge': 'Hiện tại',
1066
+ 'admin.rooms.changeExam.cancel': 'Hủy',
1067
+ 'admin.rooms.changeExam.submit': 'Thay Đổi Đề Thi',
1068
+ 'admin.rooms.changeExam.confirmTitle': 'Xác nhận thay đổi đề thi?',
1069
+ 'admin.rooms.changeExam.confirmDesc': 'Bạn có chắc muốn thay đổi đề thi cho phòng {name}?',
1070
+ 'admin.rooms.changeExam.confirmEffect': 'Đề thi mới sẽ thay thế đề thi hiện tại với {count} đề thi con.',
1071
+ 'admin.rooms.changeExam.confirmCancel': 'Hủy',
1072
+ 'admin.rooms.changeExam.confirmSubmit': 'Xác Nhận Thay Đổi',
1073
+ // Rooms page — EditWarningDialog
1074
+ 'admin.rooms.editWarning.title': 'Cảnh báo chỉnh sửa phòng thi',
1075
+ 'admin.rooms.editWarning.description': 'đang trong trạng thái',
1076
+ 'admin.rooms.editWarning.status': 'Đang diễn ra',
1077
+ 'admin.rooms.editWarning.effect': 'Việc chỉnh sửa có thể ảnh hưởng đến học sinh đang làm bài thi.',
1078
+ 'admin.rooms.editWarning.confirm': 'Bạn có chắc chắn muốn tiếp tục chỉnh sửa?',
1079
+ 'admin.rooms.editWarning.cancel': 'Hủy',
1080
+ 'admin.rooms.editWarning.submit': 'Tiếp tục chỉnh sửa',
1081
+ // Rooms page — ExamChangeWarningDialog
1082
+ 'admin.rooms.examChangeWarning.title': 'Thay đổi đề thi ?',
1083
+ 'admin.rooms.examChangeWarning.description': 'Đề thi đã được tự động chọn từ kỳ thi đã chọn. Bạn có chắc chắn muốn thay đổi đề thi khác không?',
1084
+ 'admin.rooms.examChangeWarning.cancel': 'Hủy',
1085
+ 'admin.rooms.examChangeWarning.submit': 'Tiếp tục thay đổi',
1086
+ // Rooms page — ExamSettingsDialog
1087
+ 'admin.rooms.settings.title': 'Cài đặt phòng thi',
1088
+ 'admin.rooms.settings.description': 'Tham số mặc định cho các kỳ thi',
1089
+ 'admin.rooms.settings.maxStudents': 'Số học sinh tối đa/phòng',
1090
+ 'admin.rooms.settings.defaultDuration': 'Thời gian thi mặc định (phút)',
1091
+ 'admin.rooms.settings.edit': 'Chỉnh sửa',
1092
+ 'admin.rooms.settings.cancel': 'Hủy',
1093
+ 'admin.rooms.settings.save': 'Lưu thay đổi',
1094
+ // Rooms page — RoomFormFields
1095
+ 'admin.rooms.form.branch': 'Chi nhánh',
1096
+ 'admin.rooms.form.branchPlaceholder': 'Chọn chi nhánh...',
1097
+ 'admin.rooms.form.branchReload': 'Tải lại',
1098
+ 'admin.rooms.form.branchCreate': 'Tạo chi nhánh',
1099
+ 'admin.rooms.form.branchEmpty': 'Chưa có chi nhánh nào. Vui lòng tạo chi nhánh trước.',
1100
+ 'admin.rooms.form.contest': 'Chọn kỳ thi',
1101
+ 'admin.rooms.form.contestPlaceholder': 'Chọn kỳ thi...',
1102
+ 'admin.rooms.form.contestReload': 'Tải lại',
1103
+ 'admin.rooms.form.contestCreate': 'Tạo kỳ thi',
1104
+ 'admin.rooms.form.contestEmpty': 'Chưa có kỳ thi nào. Vui lòng tạo kỳ thi trước.',
1105
+ 'admin.rooms.form.contestUnlimitedInfo': 'Kỳ thi không giới hạn thời gian',
1106
+ 'admin.rooms.form.contestUnlimitedStart': 'Bắt đầu từ: {time}',
1107
+ 'admin.rooms.form.contestUnlimitedHint': 'Thời gian bắt đầu bắt buộc, thời gian kết thúc là tùy chọn',
1108
+ 'admin.rooms.form.contestLimitedInfo': 'Thời gian kỳ thi',
1109
+ 'admin.rooms.form.contestLimitedRange': 'Từ {start} đến {end}',
1110
+ 'admin.rooms.form.contestLimitedHint': 'Thời gian phòng thi phải nằm trong khoảng thời gian của kỳ thi',
1111
+ 'admin.rooms.form.startTime': 'Thời gian bắt đầu',
1112
+ 'admin.rooms.form.endTime': 'Thời gian kết thúc',
1113
+ 'admin.rooms.form.endTimeOptional': '(tùy chọn)',
1114
+ 'admin.rooms.form.endTimeUnlimitedHint': 'Nếu không nhập sẽ không giới hạn thời gian cho phòng thi.',
1115
+ 'admin.rooms.form.roomName': 'Tên phòng',
1116
+ 'admin.rooms.form.roomNamePlaceholder': 'Phòng A101',
1117
+ 'admin.rooms.form.roomCode': 'Mã phòng',
1118
+ 'admin.rooms.form.roomCodePlaceholder': 'ROOM-A101',
1119
+ 'admin.rooms.form.examSelection': 'Chọn đề thi',
1120
+ 'admin.rooms.form.examPlaceholder': 'Chọn đề thi...',
1121
+ 'admin.rooms.form.examDisabledHint': 'Vui lòng chọn kỳ thi trước để hiển thị đề thi phù hợp',
1122
+ 'admin.rooms.form.examSelectContestFirst': 'Vui lòng chọn kỳ thi trước',
1123
+ 'admin.rooms.form.examNoMatchClassification': 'Không có đề thi nào phù hợp với phân loại của kỳ thi đã chọn',
1124
+ 'admin.rooms.form.examSummaryParent': 'Đề Thi Cha ({count})',
1125
+ 'admin.rooms.form.examSummaryChild': 'Đề Thi Con ({count})',
1126
+ 'admin.rooms.form.examChildCode': 'Mã đề: {name}',
1127
+ 'admin.rooms.form.location': 'Vị trí',
1128
+ 'admin.rooms.form.locationPlaceholder': 'Tầng 1, Tòa A',
1129
+ 'admin.rooms.form.lockRoom': 'Khóa phòng thi',
1130
+ 'admin.rooms.form.lockHint': 'Thí sinh không thể vào phòng khi bị khóa',
1131
+ 'admin.rooms.form.supervisors': 'Chọn giám thị',
1132
+ 'admin.rooms.form.supervisorPlaceholder': 'Chọn giám thị...',
1133
+ 'admin.rooms.form.roomType': 'Loại phòng thi',
1134
+ 'admin.rooms.form.roomTypeContest': 'Kỳ thi',
1135
+ 'admin.rooms.form.roomTypePractice': 'Thi thử',
1136
+ 'admin.rooms.form.description': 'Mô tả',
1137
+ 'admin.rooms.form.descriptionPlaceholder': 'Mô tả chi tiết về phòng thi...',
1138
+ 'admin.rooms.form.validation.branchRequired': 'Vui lòng chọn chi nhánh',
1139
+ 'admin.rooms.form.validation.contestRequired': 'Vui lòng chọn kỳ thi',
1140
+ 'admin.rooms.form.validation.examRequired': 'Vui lòng chọn đề thi',
1141
+ 'admin.rooms.form.validation.startRequired': 'Vui lòng chọn thời gian bắt đầu',
1142
+ 'admin.rooms.form.validation.startFuture': 'Thời gian bắt đầu phải lớn hơn hoặc bằng thời gian hiện tại',
1143
+ 'admin.rooms.form.validation.endRequired': 'Vui lòng chọn thời gian kết thúc',
1144
+ 'admin.rooms.form.validation.endAfterStart': 'Thời gian kết thúc phải sau thời gian bắt đầu',
1145
+ 'admin.rooms.form.validation.classRequired': 'Vui lòng chọn ít nhất 1 lớp',
1146
+ 'admin.rooms.form.validation.studentRequired': 'Vui lòng chọn ít nhất 1 học sinh',
1147
+ // Rooms page — StudentSelectionSection
1148
+ 'admin.rooms.studentSelection.label': 'Đối tượng tham gia',
1149
+ 'admin.rooms.studentSelection.all': 'Tất cả mọi người tham gia',
1150
+ 'admin.rooms.studentSelection.byClass': 'Chỉ định theo lớp',
1151
+ 'admin.rooms.studentSelection.byStudent': 'Chỉ định học sinh',
1152
+ 'admin.rooms.studentSelection.selectClass': 'Chọn lớp học',
1153
+ 'admin.rooms.studentSelection.classSearchPlaceholder': 'Tìm kiếm lớp (tên, mã lớp)...',
1154
+ 'admin.rooms.studentSelection.gradeFilterPlaceholder': 'Lọc theo khối',
1155
+ 'admin.rooms.studentSelection.allGrades': 'Tất cả khối',
1156
+ 'admin.rooms.studentSelection.gradeItem': 'Khối {grade}',
1157
+ 'admin.rooms.studentSelection.colClassName': 'Tên lớp',
1158
+ 'admin.rooms.studentSelection.colClassCode': 'Mã lớp',
1159
+ 'admin.rooms.studentSelection.colGrade': 'Khối',
1160
+ 'admin.rooms.studentSelection.colStudentCount': 'Sĩ số',
1161
+ 'admin.rooms.studentSelection.noClasses': 'Không tìm thấy lớp học nào',
1162
+ 'admin.rooms.studentSelection.selectedClasses': 'Lớp đã chọn: {count}',
1163
+ 'admin.rooms.studentSelection.clearAll': 'Xóa tất cả',
1164
+ 'admin.rooms.studentSelection.selectStudent': 'Chọn học sinh',
1165
+ 'admin.rooms.studentSelection.studentSearchPlaceholder': 'Tìm kiếm học sinh (tên, username, email)...',
1166
+ 'admin.rooms.studentSelection.classFilterPlaceholder': 'Lọc theo lớp',
1167
+ 'admin.rooms.studentSelection.allClasses': 'Tất cả lớp',
1168
+ 'admin.rooms.studentSelection.colStudentId': 'Mã HS',
1169
+ 'admin.rooms.studentSelection.colName': 'Họ tên',
1170
+ 'admin.rooms.studentSelection.colEmail': 'Email',
1171
+ 'admin.rooms.studentSelection.colClass': 'Lớp',
1172
+ 'admin.rooms.studentSelection.noStudents': 'Không tìm thấy học sinh nào',
1173
+ 'admin.rooms.studentSelection.selectedStudents': 'Học sinh đã chọn: {count}',
1174
+ 'admin.rooms.studentSelection.noClass': 'Chưa có lớp',
1175
+ 'admin.rooms.studentSelection.allParticipate': 'Tất cả học sinh sẽ được tham gia phòng thi này.',
1176
+ 'admin.rooms.studentSelection.summaryClasses': 'Lớp đã chọn:',
1177
+ 'admin.rooms.studentSelection.noClassSelected': 'Chưa chọn lớp học nào',
1178
+ 'admin.rooms.studentSelection.summaryStudents': 'Học sinh đã chọn:',
1179
+ 'admin.rooms.studentSelection.noStudentSelected': 'Chưa chọn học sinh nào',
1180
+ 'admin.rooms.studentSelection.classUnit': '{count} HS',
1181
+ 'admin.rooms.studentSelection.studentUnit': '{count} HS',
1182
+ 'admin.rooms.studentSelection.zeroClass': '0 lớp',
1183
+ 'admin.rooms.studentSelection.zeroStudent': '0 học sinh',
1184
+ // Contests page — page header
1185
+ 'admin.contests.title': 'Quản lý kỳ thi',
1186
+ 'admin.contests.subtitle': 'Tạo và quản lý các kỳ thi, xem báo cáo và xếp hạng',
1187
+ 'admin.contests.teacher.subtitle': 'Xem và quản lý các kỳ thi, theo dõi xếp hạng học sinh',
1188
+ // Contests page — tabs
1189
+ 'admin.contests.tab.rankings': 'Xếp hạng & Thống kê',
1190
+ 'admin.contests.tab.management': 'Quản lý kỳ thi',
1191
+ // Contests page — stats cards
1192
+ 'admin.contests.stats.total': 'Tổng kỳ thi',
1193
+ 'admin.contests.stats.totalCompleted': '{count} đã hoàn thành',
1194
+ 'admin.contests.stats.upcoming': 'Kỳ thi sắp tới',
1195
+ 'admin.contests.stats.upcomingDays': 'ngày nữa',
1196
+ 'admin.contests.stats.totalParticipants': 'Tổng thí sinh',
1197
+ 'admin.contests.stats.participated': 'đã tham gia',
1198
+ 'admin.contests.stats.avgScore': 'Điểm TB hệ thống',
1199
+ 'admin.contests.stats.overContests': 'qua {count} kỳ thi',
1200
+ // Contests page — contest list (rankings tab)
1201
+ 'admin.contests.list.title': 'Danh sách kỳ thi',
1202
+ 'admin.contests.list.desc': 'Xem chi tiết thống kê từng kỳ thi',
1203
+ 'admin.contests.list.loading': 'Đang tải...',
1204
+ 'admin.contests.list.empty': 'Chưa có kỳ thi nào',
1205
+ 'admin.contests.list.participants': 'Thí sinh:',
1206
+ 'admin.contests.list.avgScore': 'Điểm TB:',
1207
+ 'admin.contests.list.highest': 'Cao nhất:',
1208
+ 'admin.contests.list.lowest': 'Thấp nhất:',
1209
+ 'admin.contests.list.completionRate': 'Tỷ lệ hoàn thành:',
1210
+ 'admin.contests.list.viewDetail': 'Xem chi tiết',
1211
+ // Contests page — leaderboards
1212
+ 'admin.contests.ranking.latestTitle': 'Top thí sinh kỳ thi gần nhất',
1213
+ 'admin.contests.ranking.latestNoContest': 'Chưa có kỳ thi',
1214
+ 'admin.contests.ranking.allTimeTitle': 'Top thí sinh có tổng điểm cao nhất',
1215
+ 'admin.contests.ranking.allTimeDesc': 'Top 3 thí sinh xuất sắc mọi thời đại',
1216
+ 'admin.contests.ranking.loading': 'Đang tải...',
1217
+ 'admin.contests.ranking.noData': 'Chưa có dữ liệu',
1218
+ 'admin.contests.ranking.scoreLabel': 'điểm',
1219
+ 'admin.contests.ranking.totalScoreLabel': 'tổng điểm',
1220
+ 'admin.contests.ranking.contestsAvg': '{count} kỳ thi • TB: {avg}',
1221
+ // Contests page — management tab
1222
+ 'admin.contests.management.title': 'Danh sách kỳ thi',
1223
+ 'admin.contests.management.showing': 'Hiển thị {count} / {total} kỳ thi',
1224
+ 'admin.contests.management.addNew': 'Thêm kỳ thi mới',
1225
+ 'admin.contests.management.loading': 'Đang tải dữ liệu...',
1226
+ 'admin.contests.management.emptyTitle': 'Chưa có kỳ thi nào',
1227
+ 'admin.contests.management.emptyDesc': 'Bấm "Thêm kỳ thi mới" để tạo kỳ thi đầu tiên',
1228
+ // Contests page — filters
1229
+ 'admin.contests.filter.title': 'Bộ lọc tìm kiếm',
1230
+ 'admin.contests.filter.desc': 'Lọc và tìm kiếm kỳ thi theo tiêu chí',
1231
+ 'admin.contests.filter.activeCount': '{count} bộ lọc đang áp dụng',
1232
+ 'admin.contests.filter.clearAll': 'Xóa tất cả',
1233
+ 'admin.contests.filter.activeLabel': 'Đang lọc:',
1234
+ 'admin.contests.filter.searchLabel': 'Tìm kiếm',
1235
+ 'admin.contests.filter.searchPlaceholder': 'Nhập tên kỳ thi',
1236
+ 'admin.contests.filter.statusLabel': 'Trạng thái',
1237
+ 'admin.contests.filter.statusPlaceholder': 'Chọn trạng thái',
1238
+ 'admin.contests.filter.timeTypeLabel': 'Mô hình kỳ thi',
1239
+ 'admin.contests.filter.timeTypePlaceholder': 'Chọn loại Mô hình kỳ thi',
1240
+ 'admin.contests.filter.allStatuses': 'Tất cả trạng thái',
1241
+ 'admin.contests.filter.allTimeTypes': 'Tất cả loại Mô hình kỳ thi',
1242
+ 'admin.contests.filter.visibilityLabel': 'Hiển thị',
1243
+ 'admin.contests.filter.visibilityPlaceholder': 'Chọn loại hiển thị',
1244
+ 'admin.contests.filter.allVisibilities': 'Tất cả loại hiển thị',
1245
+ 'admin.contests.filter.noEndDate': 'Không có kết thúc',
1246
+ // Contests page — table headers
1247
+ 'admin.contests.table.name': 'Tên kỳ thi',
1248
+ 'admin.contests.table.classification': 'Phân loại kỳ thi',
1249
+ 'admin.contests.table.timeType': 'Mô hình kỳ thi',
1250
+ 'admin.contests.table.time': 'Thời gian',
1251
+ 'admin.contests.table.status': 'Trạng thái',
1252
+ 'admin.contests.table.active': 'Hoạt động',
1253
+ 'admin.contests.table.actions': 'Thao tác',
1254
+ 'admin.contests.table.timeTo': 'đến',
1255
+ // Contests page — status badges
1256
+ 'admin.contests.status.upcoming': 'Sắp diễn ra',
1257
+ 'admin.contests.status.inProgress': 'Đang diễn ra',
1258
+ 'admin.contests.status.completed': 'Đã kết thúc',
1259
+ // Contests page — time type badges
1260
+ 'admin.contests.timeType.unlimited': 'Không giới hạn',
1261
+ 'admin.contests.timeType.limited': 'Giới hạn thời gian',
1262
+ // Contests page — active status badges
1263
+ 'admin.contests.active.active': 'Hoạt động',
1264
+ 'admin.contests.active.paused': 'Tạm dừng',
1265
+ // Contests page — visibility badges
1266
+ 'admin.contests.visibility.public': 'Công khai',
1267
+ 'admin.contests.visibility.internal': 'Nội bộ',
1268
+ 'admin.contests.visibility.private': 'Riêng tư',
1269
+ // Contests page — action buttons (title attributes)
1270
+ 'admin.contests.action.viewDetail': 'Xem chi tiết',
1271
+ 'admin.contests.action.edit': 'Chỉnh sửa',
1272
+ 'admin.contests.action.delete': 'Xóa',
1273
+ // Contests page — add dialog
1274
+ 'admin.contests.add.title': 'Thêm kỳ thi mới',
1275
+ 'admin.contests.add.desc': 'Nhập thông tin để tạo kỳ thi mới trong hệ thống',
1276
+ 'admin.contests.add.submitting': 'Đang thêm...',
1277
+ 'admin.contests.add.submit': 'Thêm kỳ thi',
1278
+ 'admin.contests.add.cancel': 'Hủy',
1279
+ // Contests page — edit dialog
1280
+ 'admin.contests.edit.title': 'Chỉnh sửa kỳ thi',
1281
+ 'admin.contests.edit.desc': 'Cập nhật thông tin kỳ thi: {name}',
1282
+ 'admin.contests.edit.submitting': 'Đang cập nhật...',
1283
+ 'admin.contests.edit.submit': 'Cập nhật',
1284
+ 'admin.contests.edit.cancel': 'Hủy',
1285
+ // Contests page — delete dialog
1286
+ 'admin.contests.delete.title': 'Xóa kỳ thi',
1287
+ 'admin.contests.delete.cannotUndo': 'Hành động này không thể hoàn tác',
1288
+ 'admin.contests.delete.participants': '{count} thí sinh',
1289
+ 'admin.contests.delete.rooms': '{count} phòng thi',
1290
+ 'admin.contests.delete.warningTitle': 'Cảnh báo quan trọng',
1291
+ 'admin.contests.delete.warningRooms': 'Tất cả phòng thi sẽ bị xóa',
1292
+ 'admin.contests.delete.warningData': 'Dữ liệu thí sinh sẽ bị xóa',
1293
+ 'admin.contests.delete.warningResults': 'Kết quả thi sẽ không thể khôi phục',
1294
+ 'admin.contests.delete.cancel': 'Hủy bỏ',
1295
+ 'admin.contests.delete.submitting': 'Đang xóa...',
1296
+ 'admin.contests.delete.confirm': 'Xác nhận xóa',
1297
+ // Contests page — class room selection dialog
1298
+ // Contests page — detail dialog
1299
+ 'admin.contests.detail.title': 'Chi tiết kỳ thi',
1300
+ 'admin.contests.detail.desc': 'Thống kê và phân tích chi tiết kết quả thi',
1301
+ 'admin.contests.detail.loading': 'Đang tải dữ liệu...',
1302
+ 'admin.contests.detail.statAvgScore': 'Điểm TB',
1303
+ 'admin.contests.detail.statParticipants': 'Thí sinh',
1304
+ 'admin.contests.detail.statCompletion': 'Hoàn thành',
1305
+ 'admin.contests.detail.statAvgTime': 'Phút TB',
1306
+ 'admin.contests.detail.top3Title': 'Top 3 Thí sinh xuất sắc',
1307
+ 'admin.contests.detail.noStudents': 'Chưa có dữ liệu thí sinh',
1308
+ 'admin.contests.detail.scoreDistTitle': 'Phân bố điểm',
1309
+ 'admin.contests.detail.noScoreDist': 'Chưa có dữ liệu phân bố điểm',
1310
+ 'admin.contests.detail.classAvgTitle': 'Điểm TB theo lớp',
1311
+ 'admin.contests.detail.noClassData': 'Chưa có dữ liệu theo lớp',
1312
+ 'admin.contests.detail.classStudentCount': '{count} HS',
1313
+ 'admin.contests.detail.avgTimeLabel': 'Thời gian làm bài TB',
1314
+ 'admin.contests.detail.fastestLabel': 'Nhanh nhất',
1315
+ 'admin.contests.detail.slowestLabel': 'Chậm nhất',
1316
+ 'admin.contests.detail.minuteUnit': 'phút',
1317
+ 'admin.contests.detail.contestLabel': 'Kỳ thi',
1318
+ 'admin.contests.detail.timeLabel': 'Thời gian',
1319
+ 'admin.contests.detail.unlimited': 'Không giới hạn',
1320
+ 'admin.contests.detail.loadError': 'Không thể tải dữ liệu thống kê. Vui lòng thử lại sau.',
1321
+ // Contests page — student detail dialog
1322
+ 'admin.contests.student.title': 'Hồ sơ thí sinh: {name}',
1323
+ 'admin.contests.student.desc': 'Lịch sử tham gia và thống kê chi tiết',
1324
+ 'admin.contests.student.loading': 'Đang tải dữ liệu...',
1325
+ 'admin.contests.student.noClass': 'Chưa có lớp',
1326
+ 'admin.contests.student.codeLabel': 'Mã: {code}',
1327
+ 'admin.contests.student.avgScoreLabel': 'Điểm TB',
1328
+ 'admin.contests.student.statTotalScore': 'Tổng điểm',
1329
+ 'admin.contests.student.statContests': 'Kỳ thi tham gia',
1330
+ 'admin.contests.student.statBestRank': 'Hạng cao nhất',
1331
+ 'admin.contests.student.statHighest': 'Điểm cao nhất',
1332
+ 'admin.contests.student.scoreRangeTitle': 'Khoảng điểm',
1333
+ 'admin.contests.student.scoreHighest': 'Điểm cao nhất',
1334
+ 'admin.contests.student.scoreAvg': 'Điểm trung bình',
1335
+ 'admin.contests.student.scoreLowest': 'Điểm thấp nhất',
1336
+ 'admin.contests.student.trendTitle': 'Xu hướng điểm số',
1337
+ 'admin.contests.student.noTrendData': 'Chưa có dữ liệu điểm số',
1338
+ 'admin.contests.student.skillsTitle': 'Phân tích năng lực',
1339
+ 'admin.contests.student.historyTitle': 'Lịch sử tham gia kỳ thi',
1340
+ 'admin.contests.student.historyScore': 'Điểm:',
1341
+ 'admin.contests.student.historyRank': 'Hạng:',
1342
+ 'admin.contests.student.historyEmpty': 'Chưa có lịch sử tham gia kỳ thi',
1343
+ 'admin.contests.student.awardsTitle': 'Giải thưởng & Thành tích',
1344
+ 'admin.contests.student.rank1': '🥇 Nhất',
1345
+ 'admin.contests.student.rank2': '🥈 Nhì',
1346
+ 'admin.contests.student.rank3': '🥉 Ba',
1347
+ 'admin.contests.student.rankN': '#{rank}',
1348
+ 'admin.contests.student.loadError': 'Không thể tải dữ liệu học sinh. Vui lòng thử lại sau.',
1349
+ 'admin.contests.student.scoreRadarName': 'Điểm số',
1350
+ // Contests page — toast messages
1351
+ 'admin.contests.toast.addSuccess': 'Thành công',
1352
+ 'admin.contests.toast.addSuccessDesc': 'Đã thêm kỳ thi mới!',
1353
+ 'admin.contests.toast.editSuccess': 'Thành công',
1354
+ 'admin.contests.toast.editSuccessDesc': 'Đã cập nhật kỳ thi!',
1355
+ 'admin.contests.toast.deleteSuccess': 'Thành công',
1356
+ 'admin.contests.toast.deleteSuccessDesc': 'Đã xóa kỳ thi "{name}"',
1357
+ // Contests page — shared form fields
1358
+ 'admin.contests.form.nameLabel': 'Tên kỳ thi',
1359
+ 'admin.contests.form.namePlaceholder': 'VD: Tài năng Tiếng Anh 2025',
1360
+ 'admin.contests.form.charCount': '{current}/{max} ký tự',
1361
+ 'admin.contests.form.classificationLabel': 'Phân loại kỳ thi',
1362
+ 'admin.contests.form.classificationPlaceholder': 'Chọn phân loại kỳ thi',
1363
+ 'admin.contests.form.roomCreationLabel': 'Phòng thi theo lớp',
1364
+ 'admin.contests.form.roomCreationAll': 'Tạo tất cả các lớp',
1365
+ 'admin.contests.form.roomCreationAllDesc': 'Tự động tạo phòng thi cho tất cả lớp học',
1366
+ 'admin.contests.form.roomCreationSelected': 'Chỉ định lớp',
1367
+ 'admin.contests.form.roomCreationSelectedDesc': 'Chọn các lớp cần tạo phòng thi',
1368
+ 'admin.contests.form.examLabel': 'Đề thi',
1369
+ 'admin.contests.form.examSelected': '{parentCount} đề cha, {childCount} đề con',
1370
+ 'admin.contests.form.examNone': 'Chưa chọn đề thi',
1371
+ 'admin.contests.form.examSelectBtn': 'Chọn đề thi',
1372
+ 'admin.contests.form.examHint': 'Chọn đề thi cho kỳ thi này',
1373
+ 'admin.contests.form.examError': 'Vui lòng chọn đề thi cho kỳ thi',
1374
+ 'admin.contests.form.examSelectClassificationFirst': 'Vui lòng chọn phân loại kỳ thi trước',
1375
+ 'admin.contests.form.examParentLabel': 'Đề Thi Cha ({count})',
1376
+ 'admin.contests.form.examChildLabel': 'Đề Thi Con ({count})',
1377
+ 'admin.contests.form.examChildCode': 'Mã đề: {name}',
1378
+ 'admin.contests.form.descriptionLabel': 'Mô tả',
1379
+ 'admin.contests.form.descriptionPlaceholder': 'Mô tả chi tiết về kỳ thi...',
1380
+ 'admin.contests.form.timeTypeLabel': 'Mô hình kỳ thi',
1381
+ 'admin.contests.form.timeTypeLimited': 'Giới hạn thời gian',
1382
+ 'admin.contests.form.timeTypeLimitedDesc': 'Có thời gian bắt đầu và kết thúc',
1383
+ 'admin.contests.form.timeTypeUnlimited': 'Không giới hạn',
1384
+ 'admin.contests.form.timeTypeUnlimitedDesc': 'Chỉ có thời gian bắt đầu, không có kết thúc',
1385
+ 'admin.contests.form.unlimitedInfo': 'Kỳ thi không giới hạn thời gian',
1386
+ 'admin.contests.form.unlimitedInfoDesc': 'Thí sinh có thể tham gia kỳ thi bất cứ lúc nào sau thời gian bắt đầu. Không có thời gian kết thúc.',
1387
+ 'admin.contests.form.contestDuration': 'Thời gian diễn ra kỳ thi',
1388
+ 'admin.contests.form.startTime': 'Thời gian bắt đầu kỳ thi',
1389
+ 'admin.contests.form.startDate': 'Ngày bắt đầu',
1390
+ 'admin.contests.form.startHour': 'Giờ bắt đầu',
1391
+ 'admin.contests.form.endDate': 'Ngày kết thúc',
1392
+ 'admin.contests.form.endHour': 'Giờ kết thúc',
1393
+ 'admin.contests.form.activeStatusLabel': 'Trạng thái hoạt động',
1394
+ 'admin.contests.form.activeStatusHintActive': 'Kỳ thi sẽ hoạt động ngay sau khi tạo',
1395
+ 'admin.contests.form.activeStatusHintPaused': 'Kỳ thi sẽ được tạm dừng, có thể kích hoạt sau',
1396
+ 'admin.contests.form.activeStatusDescActive': 'Kỳ thi đang hoạt động',
1397
+ 'admin.contests.form.activeStatusDescPaused': 'Kỳ thi đang tạm dừng',
1398
+ // Exams page (admin.exams.*)
1399
+ 'admin.exams.title': 'Quản lý đề thi',
1400
+ 'admin.exams.subtitle': 'Quản lý đề thi và tạo mới câu hỏi theo template',
1401
+ 'admin.exams.examFallbackName': 'Đề thi {id}',
1402
+ 'admin.exams.uncategorized': 'Chưa phân loại',
1403
+ // Toast messages
1404
+ 'admin.exams.toast.deleteSuccess': 'Xóa đề thi thành công !',
1405
+ 'admin.exams.toast.deleteSuccessDesc': 'Đã xóa đề thi "{name}"',
1406
+ 'admin.exams.toast.deleteFailed': 'Xóa thất bại',
1407
+ 'admin.exams.toast.deleteError': 'Có lỗi xảy ra khi xóa đề thi. Vui lòng thử lại.',
1408
+ 'admin.exams.toast.success': 'Thành công',
1409
+ 'admin.exams.toast.copySuccess': 'Đã copy đề thi {id}',
1410
+ 'admin.exams.toast.shuffleSuccess': 'Đã tạo {count} đề thi con từ đề thi {id}! Các đề thi con đã được xáo trộn thứ tự câu hỏi.',
1411
+ // Error state
1412
+ 'admin.exams.error.loadTitle': 'Không thể tải danh sách đề thi',
1413
+ 'admin.exams.error.loadMessage': 'Đã xảy ra lỗi khi tải dữ liệu. Vui lòng thử lại.',
1414
+ // Statistics
1415
+ 'admin.exams.stats.totalExams': 'Tổng đề thi',
1416
+ 'admin.exams.stats.activeExams': '{count} đề đang hoạt động',
1417
+ 'admin.exams.stats.rooms': 'Phòng thi',
1418
+ 'admin.exams.stats.totalAssigned': 'Tổng phòng thi đã phân công',
1419
+ 'admin.exams.stats.completed': 'Hoàn thành',
1420
+ 'admin.exams.stats.studentsSubmitted': 'Học sinh đã nộp bài',
1421
+ 'admin.exams.stats.statusDistribution': 'Phân bố trạng thái',
1422
+ 'admin.exams.stats.ready': 'Đã sẵn sàng',
1423
+ 'admin.exams.stats.notReady': 'Chưa sẵn sàng',
1424
+ 'admin.exams.stats.activated': 'Đã kích hoạt',
1425
+ 'admin.exams.stats.deactivated': 'Chưa kích hoạt',
1426
+ 'admin.exams.stats.examUnit': '{count} đề',
1427
+ // Table
1428
+ 'admin.exams.table.title': 'Danh sách đề thi',
1429
+ 'admin.exams.table.showing': 'Hiển thị {count} / {total} đề thi',
1430
+ 'admin.exams.table.createExam': 'Tạo đề thi',
1431
+ 'admin.exams.table.loading': 'Đang tải dữ liệu...',
1432
+ 'admin.exams.table.empty': 'Không tìm thấy đề thi nào',
1433
+ 'admin.exams.table.createdPrefix': 'Tạo:',
1434
+ 'admin.exams.table.minutes': '{count} phút',
1435
+ 'admin.exams.table.questionCount': '{count}/{total} câu',
1436
+ 'admin.exams.table.completed': 'Hoàn thành',
1437
+ 'admin.exams.table.ready': 'Đã hoàn thiện',
1438
+ 'admin.exams.table.notReady': 'Chưa hoàn thiện',
1439
+ 'admin.exams.table.activated': 'Đã kích hoạt',
1440
+ 'admin.exams.table.deactivated': 'Chưa kích hoạt',
1441
+ 'admin.exams.table.cannotActivate': 'Đề thi chưa sẵn sàng, không thể kích hoạt',
1442
+ 'admin.exams.table.editContent': 'Chỉnh sửa nội dung đề thi',
1443
+ // Filters
1444
+ 'admin.exams.filter.searchPlaceholder': 'Tìm kiếm theo tên, mã đề thi...',
1445
+ 'admin.exams.filter.level': 'Cấp độ',
1446
+ 'admin.exams.filter.allLevels': 'Tất cả cấp độ',
1447
+ 'admin.exams.filter.ready': 'Hoàn thiện',
1448
+ 'admin.exams.filter.allReady': 'Tất cả hoàn thiện',
1449
+ 'admin.exams.filter.isReady': 'Đã hoàn thiện',
1450
+ 'admin.exams.filter.notReady': 'Chưa hoàn thiện',
1451
+ 'admin.exams.filter.status': 'Trạng thái',
1452
+ 'admin.exams.filter.allStatuses': 'Tất cả trạng thái',
1453
+ 'admin.exams.filter.activated': 'Đã kích hoạt',
1454
+ 'admin.exams.filter.deactivated': 'Chưa kích hoạt',
1455
+ 'admin.exams.filter.clearFilters': 'Xóa bộ lọc',
1456
+ 'admin.exams.filter.searchLabel': 'Tìm kiếm:',
1457
+ 'admin.exams.filter.levelLabel': 'Cấp độ:',
1458
+ 'admin.exams.filter.readyLabel': 'Hoàn thiện:',
1459
+ 'admin.exams.filter.statusLabel': 'Trạng thái:',
1460
+ // Table columns
1461
+ 'admin.exams.col.code': 'Mã',
1462
+ 'admin.exams.col.name': 'Tiêu đề',
1463
+ 'admin.exams.col.level': 'Cấp độ',
1464
+ 'admin.exams.col.difficulty': 'Độ khó',
1465
+ 'admin.exams.col.duration': 'Thời gian',
1466
+ 'admin.exams.col.questions': 'Câu hỏi',
1467
+ 'admin.exams.col.assigned': 'Phân công',
1468
+ 'admin.exams.col.ready': 'Hoàn thiện',
1469
+ 'admin.exams.col.status': 'Trạng thái',
1470
+ 'admin.exams.col.actions': 'Hành động',
1471
+ 'admin.exams.col.classification': 'Loại đề thi',
1472
+ 'admin.exams.col.creator': 'Người tạo',
1473
+ 'admin.exams.col.createdAt': 'Ngày tạo',
1474
+ // Actions
1475
+ 'admin.exams.action.view': 'Xem chi tiết',
1476
+ 'admin.exams.action.preview': 'Xem trước đề thi',
1477
+ 'admin.exams.action.edit': 'Chỉnh sửa',
1478
+ 'admin.exams.action.copy': 'Copy',
1479
+ 'admin.exams.action.shuffle': 'Tạo đề thi xáo trộn',
1480
+ 'admin.exams.action.delete': 'Xóa',
1481
+ // Difficulty labels
1482
+ 'admin.exams.difficulty.easy': 'Dễ',
1483
+ 'admin.exams.difficulty.medium': 'Trung bình',
1484
+ 'admin.exams.difficulty.hard': 'Khó',
1485
+ // Delete dialog
1486
+ 'admin.exams.delete.title': 'Xác nhận xóa đề thi',
1487
+ 'admin.exams.delete.confirm': 'Bạn có chắc chắn muốn xóa đề thi',
1488
+ 'admin.exams.delete.warning': 'Hành động này không thể hoàn tác và sẽ xóa tất cả dữ liệu liên quan.',
1489
+ 'admin.exams.delete.cancel': 'Hủy',
1490
+ 'admin.exams.delete.submit': 'Xóa',
1491
+ // Duplicate dialog
1492
+ 'admin.exams.duplicate.title': 'Sao chép đề thi',
1493
+ 'admin.exams.duplicate.subtitle': 'Tạo bản sao hoàn chỉnh',
1494
+ 'admin.exams.duplicate.originalExam': 'Đề thi gốc',
1495
+ 'admin.exams.duplicate.copyIncludes': 'Bản sao sẽ bao gồm',
1496
+ 'admin.exams.duplicate.examInfo': 'Thông tin đề thi',
1497
+ 'admin.exams.duplicate.allSettings': 'Tất cả cấu hình và thiết lập',
1498
+ 'admin.exams.duplicate.questions': 'Câu hỏi',
1499
+ 'admin.exams.duplicate.questionCount': '{count} câu hỏi',
1500
+ 'admin.exams.duplicate.newName': 'Tên mới',
1501
+ 'admin.exams.duplicate.newCode': 'Mã mới',
1502
+ 'admin.exams.duplicate.draftNote': 'Bản sao sẽ được tạo ở trạng thái',
1503
+ 'admin.exams.duplicate.draft': 'Nháp',
1504
+ 'admin.exams.duplicate.editableNote': 'có thể chỉnh sửa ngay sau khi tạo.',
1505
+ 'admin.exams.duplicate.cancel': 'Hủy bỏ',
1506
+ 'admin.exams.duplicate.copying': 'Đang sao chép...',
1507
+ 'admin.exams.duplicate.submit': 'Tạo bản sao',
1508
+ // View dialog
1509
+ 'admin.exams.view.subject': 'Môn học',
1510
+ 'admin.exams.view.level': 'Cấp độ',
1511
+ 'admin.exams.view.duration': 'Thời gian',
1512
+ 'admin.exams.view.minutes': '{count} phút',
1513
+ 'admin.exams.view.questionCount': 'Số câu hỏi',
1514
+ 'admin.exams.view.questions': '{count} câu',
1515
+ 'admin.exams.view.totalPoints': 'Tổng điểm',
1516
+ 'admin.exams.view.points': '{count} điểm',
1517
+ 'admin.exams.view.difficulty': 'Độ khó',
1518
+ 'admin.exams.view.description': 'Mô tả',
1519
+ 'admin.exams.view.close': 'Đóng',
1520
+ // Shuffle dialog
1521
+ 'admin.exams.shuffle.title': 'Tạo Bộ đề thi Xáo trộn',
1522
+ 'admin.exams.shuffle.desc': 'Tạo nhiều phiên bản đề thi từ {code} với thứ tự câu hỏi được xáo trộn ngẫu nhiên',
1523
+ 'admin.exams.shuffle.questionCount': '{count} câu hỏi',
1524
+ 'admin.exams.shuffle.minutes': '{count} phút',
1525
+ 'admin.exams.shuffle.points': '{count} điểm',
1526
+ 'admin.exams.shuffle.howItWorks': 'Cách hoạt động',
1527
+ 'admin.exams.shuffle.info1': 'Mỗi đề thi con chứa đúng bộ câu hỏi của đề thi gốc',
1528
+ 'admin.exams.shuffle.info2': 'Thứ tự các Part được giữ nguyên',
1529
+ 'admin.exams.shuffle.info3': 'Các câu hỏi trong cùng 1 Part được xáo trộn ngẫu nhiên',
1530
+ 'admin.exams.shuffle.info4': 'Các đề thi con được liên kết với đề thi cha để quản lý',
1531
+ 'admin.exams.shuffle.countLabel': 'Số lượng đề thi con muốn tạo',
1532
+ 'admin.exams.shuffle.strategyLabel': 'Lựa chọn xử lý đề thi cũ',
1533
+ 'admin.exams.shuffle.keepOld': 'Giữ lại các đề thi cũ và thêm đề mới',
1534
+ 'admin.exams.shuffle.replaceAll': 'Tạo bộ đề mới hoàn toàn',
1535
+ 'admin.exams.shuffle.existingVariants': 'Đề thi đã có ({count})',
1536
+ 'admin.exams.shuffle.deleteAll': 'Xóa tất cả ({count})',
1537
+ 'admin.exams.shuffle.loading': 'Đang tải...',
1538
+ 'admin.exams.shuffle.noVariants': 'Chưa có đề thi xáo trộn nào',
1539
+ 'admin.exams.shuffle.variantCode': 'Mã đề: {name}',
1540
+ 'admin.exams.shuffle.originalBadge': '📌 Đề gốc',
1541
+ 'admin.exams.shuffle.originalNote': 'Đề thi theo thứ tự gốc, không thể xóa',
1542
+ 'admin.exams.shuffle.preview': 'Preview',
1543
+ 'admin.exams.shuffle.close': 'Đóng',
1544
+ 'admin.exams.shuffle.creating': 'Đang tạo...',
1545
+ 'admin.exams.shuffle.createButton': 'Tạo {count} đề thi xáo trộn',
1546
+ 'admin.exams.shuffle.confirmDeleteAllTitle': 'Xóa tất cả đề thi xáo trộn?',
1547
+ 'admin.exams.shuffle.confirmDeleteAllDesc': 'Bạn có chắc muốn xóa tất cả {count} đề thi xáo trộn? Đề gốc (Mã đề: 000) sẽ được giữ lại. Hành động này không thể hoàn tác.',
1548
+ 'admin.exams.shuffle.cancel': 'Hủy',
1549
+ 'admin.exams.shuffle.deleteAllBtn': 'Xóa tất cả',
1550
+ 'admin.exams.shuffle.confirmDeleteOneTitle': 'Xóa đề thi này?',
1551
+ 'admin.exams.shuffle.confirmDeleteOneDesc': 'Bạn có chắc muốn xóa đề thi này? Hành động này không thể hoàn tác.',
1552
+ 'admin.exams.shuffle.deleteBtn': 'Xóa',
1553
+ // Create exam page
1554
+ 'admin.exams.create.title': 'Tạo đề thi mới',
1555
+ 'admin.exams.create.step1': 'Bước 1: Nhập thông tin cơ bản của đề thi',
1556
+ 'admin.exams.create.success': 'Thành công',
1557
+ 'admin.exams.create.successDesc': 'Đã lưu đề thi "{name}". Đang chuyển đến trang chọn Template...',
1558
+ 'admin.exams.create.incompleteInfo': 'Thông tin không đầy đủ',
1559
+ 'admin.exams.create.incompleteInfoDesc': 'Vui lòng điền đầy đủ các trường bắt buộc và kiểm tra lại thông tin đã nhập',
1560
+ 'admin.exams.create.cancel': 'Hủy',
1561
+ 'admin.exams.create.saving': 'Đang lưu...',
1562
+ 'admin.exams.create.saveAndContinue': 'Tạo đề thi và bắt đầu soạn nội dung',
1563
+ 'admin.exams.create.loading': 'Đang tải...',
1564
+ // Shared form labels
1565
+ 'admin.exams.form.basicInfo': 'Thông tin cơ bản',
1566
+ 'admin.exams.form.requiredHint': 'Các thông tin bắt buộc được đánh dấu dấu (*)',
1567
+ 'admin.exams.form.codeLabel': 'Mã đề thi',
1568
+ 'admin.exams.form.codePlaceholder': 'Nhập mã đề thi...',
1569
+ 'admin.exams.form.charCount': '{count}/{max} ký tự',
1570
+ 'admin.exams.form.nameLabel': 'Tên đề thi',
1571
+ 'admin.exams.form.namePlaceholder': 'Nhập tên đề thi...',
1572
+ 'admin.exams.form.subject': 'Môn học',
1573
+ 'admin.exams.form.subjectPlaceholder': 'Chọn môn học',
1574
+ 'admin.exams.form.loading': 'Đang tải...',
1575
+ 'admin.exams.form.level': 'Cấp độ',
1576
+ 'admin.exams.form.levelPlaceholder': 'Chọn cấp độ',
1577
+ 'admin.exams.form.difficulty': 'Độ khó',
1578
+ 'admin.exams.form.difficultyPlaceholder': 'Chọn độ khó',
1579
+ 'admin.exams.form.easy': 'Dễ',
1580
+ 'admin.exams.form.medium': 'Trung bình',
1581
+ 'admin.exams.form.hard': 'Khó',
1582
+ 'admin.exams.form.duration': 'Thời gian thi (phút)',
1583
+ 'admin.exams.form.totalPoints': 'Thang điểm',
1584
+ 'admin.exams.form.description': 'Mô tả',
1585
+ 'admin.exams.form.descriptionPlaceholder': 'Mô tả chi tiết về đề thi, mục tiêu, đối tượng...',
1586
+ 'admin.exams.form.classification': 'Loại đề thi',
1587
+ 'admin.exams.form.classificationPlaceholder': 'Chọn loại đề thi',
1588
+ // Edit exam page
1589
+ 'admin.exams.edit.title': 'Chỉnh sửa đề thi',
1590
+ 'admin.exams.edit.subtitle': 'Cập nhật thông tin đề thi của bạn',
1591
+ 'admin.exams.edit.loading': 'Đang tải thông tin đề thi...',
1592
+ 'admin.exams.edit.loadError': 'Không thể tải thông tin đề thi',
1593
+ 'admin.exams.edit.loadErrorDesc': 'Đã xảy ra lỗi khi tải dữ liệu. Vui lòng thử lại.',
1594
+ 'admin.exams.edit.backToList': 'Quay lại danh sách',
1595
+ 'admin.exams.edit.success': 'Cập nhật đề thi {name} thành công !',
1596
+ 'admin.exams.edit.invalidInfo': 'Thông tin không hợp lệ',
1597
+ 'admin.exams.edit.invalidInfoDesc': 'Vui lòng kiểm tra lại các trường thông tin',
1598
+ 'admin.exams.edit.templateInfoTitle': 'Thông tin Template (Không thể thay đổi)',
1599
+ 'admin.exams.edit.templateInfoDesc': 'Template đề thi đã được chọn khi tạo đề thi và không thể thay đổi',
1600
+ 'admin.exams.edit.templateName': 'Tên Template:',
1601
+ 'admin.exams.edit.templateParts': 'Số Parts:',
1602
+ 'admin.exams.edit.templateQuestions': 'Số câu hỏi:',
1603
+ 'admin.exams.edit.noTemplate': 'Chưa chọn Template đề thi',
1604
+ 'admin.exams.edit.noTemplateDesc': 'Bạn cần chọn một Template để hoàn thành cấu trúc đề thi.',
1605
+ 'admin.exams.edit.editQuestions': 'Chỉnh sửa câu hỏi',
1606
+ 'admin.exams.edit.back': 'Quay lại',
1607
+ 'admin.exams.edit.saving': 'Đang lưu...',
1608
+ 'admin.exams.edit.saveChanges': 'Lưu thay đổi',
1609
+ 'admin.exams.edit.saveAndSelectTemplate': 'Lưu đề thi và tiếp tục chọn Template',
1610
+ 'admin.exams.edit.saved': 'Đã lưu đề thi',
1611
+ 'admin.exams.edit.redirectToTemplate': 'Đang chuyển đến trang chọn Template...',
1612
+ 'admin.exams.edit.loadingFallback': 'Đang tải...',
1613
+ // Select template page
1614
+ 'admin.exams.template.exam': 'Đề thi',
1615
+ 'admin.exams.template.examCode': 'Mã đề thi:',
1616
+ 'admin.exams.template.step2': 'Bước 2: Chọn Template đề thi',
1617
+ 'admin.exams.template.selectTemplate': 'Chọn Template đề thi',
1618
+ 'admin.exams.template.error': 'Lỗi',
1619
+ 'admin.exams.template.loadError': 'Không thể tải thông tin đề thi. Vui lòng thử lại.',
1620
+ 'admin.exams.template.loading': 'Đang tải thông tin đề thi...',
1621
+ 'admin.exams.template.loadingFallback': 'Đang tải...',
1622
+ // Preview dialog
1623
+ 'admin.exams.preview.title': 'Xem trước đề thi: {name}',
1624
+ 'admin.exams.preview.examInfo': 'Thông tin đề thi',
1625
+ 'admin.exams.preview.duration': 'Thời gian:',
1626
+ 'admin.exams.preview.questionCount': 'Số câu hỏi:',
1627
+ 'admin.exams.preview.totalPoints': 'Tổng điểm:',
1628
+ 'admin.exams.preview.progress': 'Tiến độ',
1629
+ 'admin.exams.preview.loading': 'Đang tải...',
1630
+ 'admin.exams.preview.questionNavigation': 'Điều hướng câu hỏi',
1631
+ 'admin.exams.preview.all': 'Tất cả',
1632
+ 'admin.exams.preview.allQuestions': 'Tất cả {count} câu hỏi',
1633
+ 'admin.exams.preview.partQuestions': 'Part {part}: {count} câu',
1634
+ 'admin.exams.preview.collapse': 'Thu gọn',
1635
+ 'admin.exams.preview.detail': 'Chi tiết',
1636
+ 'admin.exams.preview.questionIndex': 'Câu hỏi {index} / {total}',
1637
+ 'admin.exams.preview.noQuestions': 'Chưa có câu hỏi',
1638
+ 'admin.exams.preview.loadingQuestions': 'Đang tải câu hỏi...',
1639
+ 'admin.exams.preview.retry': 'Thử lại',
1640
+ 'admin.exams.preview.examNoQuestions': 'Đề thi này chưa có câu hỏi nào.',
1641
+ 'admin.exams.preview.prevQuestion': 'Câu trước',
1642
+ 'admin.exams.preview.prev': 'Trước',
1643
+ 'admin.exams.preview.nextQuestion': 'Câu tiếp theo',
1644
+ 'admin.exams.preview.next': 'Tiếp',
1645
+ 'admin.exams.preview.footerNote': 'Đây là chế độ xem trước để kiểm tra bố cục và nội dung đề thi.',
1646
+ 'admin.exams.preview.close': 'Đóng',
1647
+ 'admin.exams.preview.loadError': 'Không thể tải câu hỏi. Vui lòng thử lại.',
1648
+ 'admin.exams.preview.points': '{count} điểm',
1649
+ 'admin.exams.preview.questions': '{count} câu',
1650
+ 'admin.exams.preview.unsupportedType': 'Loại câu hỏi chưa được hỗ trợ preview:',
1651
+ 'admin.exams.preview.lookAndChoose': 'Nhìn tranh, chọn đáp án đúng',
1652
+ // Configure exam page
1653
+ 'admin.exams.configure.error': 'Lỗi',
1654
+ 'admin.exams.configure.loadError': 'Không thể tải thông tin đề thi. Vui lòng thử lại.',
1655
+ 'admin.exams.configure.missingInfo': 'Thiếu thông tin',
1656
+ 'admin.exams.configure.selectTemplateFirst': 'Vui lòng chọn template trước.',
1657
+ 'admin.exams.configure.templateNotFound': 'Không tìm thấy thông tin template.',
1658
+ 'admin.exams.configure.success': 'Thành công',
1659
+ 'admin.exams.configure.successDesc': 'Đã lưu cấu hình template. Đang chuyển đến trang tạo câu hỏi...',
1660
+ 'admin.exams.configure.loading': 'Đang tải thông tin...',
1661
+ 'admin.exams.configure.noTemplate': 'Không tìm thấy thông tin template',
1662
+ 'admin.exams.configure.backToTemplate': 'Quay lại chọn template',
1663
+ 'admin.exams.configure.saving': 'Đang lưu cấu hình...',
1664
+ 'admin.exams.configure.loadingFallback': 'Đang tải...',
1665
+ // Questions page
1666
+ 'admin.exams.questions.missingTemplate': 'Thiếu template',
1667
+ 'admin.exams.questions.missingTemplateDesc': 'Đề thi chưa được gán template. Vui lòng chọn template trước.',
1668
+ 'admin.exams.questions.error': 'Lỗi',
1669
+ 'admin.exams.questions.loadError': 'Không thể tải thông tin đề thi. Vui lòng thử lại.',
1670
+ 'admin.exams.questions.loading': 'Đang tải thông tin đề thi...',
1671
+ 'admin.exams.questions.noTemplate': 'Không tìm thấy template cho đề thi này',
1672
+ 'admin.exams.questions.noTemplateDesc': 'Vui lòng chọn template trước khi tạo câu hỏi',
1673
+ 'admin.exams.questions.back': 'Quay lại',
1674
+ 'admin.exams.questions.createQuestions': 'Tạo câu hỏi',
1675
+ 'admin.exams.questions.step4': 'Bước 4: Tạo và chỉnh sửa câu hỏi cho đề thi',
1676
+ 'admin.exams.questions.createAndEditQuestions': 'Tạo và chỉnh sửa câu hỏi cho đề thi',
1677
+ 'admin.exams.questions.loadingFallback': 'Đang tải...',
1678
+ 'admin.exams.questions.guide.title': 'Hướng dẫn tạo câu hỏi',
1679
+ 'admin.exams.questions.guide.subtitle': '4 bước đơn giản • Mẹo hữu ích • Tiết kiệm thời gian',
1680
+ 'admin.exams.questions.guide.step1Title': 'Làm theo thứ tự',
1681
+ 'admin.exams.questions.guide.step1Desc': 'Hoàn thành từng câu hỏi theo thứ tự trong mỗi Part',
1682
+ 'admin.exams.questions.guide.step1Tip': 'Chuyển sang Part tiếp theo sau khi hoàn thành tất cả câu hỏi trong Part hiện tại',
1683
+ 'admin.exams.questions.guide.step2Title': 'Template chuẩn hóa',
1684
+ 'admin.exams.questions.guide.step2Desc': 'Mỗi Part có loại câu hỏi được định sẵn theo chuẩn template',
1685
+ 'admin.exams.questions.guide.step2Tip': 'Không cần lo lắng về format - hệ thống sẽ tự động định dạng theo chuẩn',
1686
+ 'admin.exams.questions.guide.step3Title': 'Lưu trữ an toàn',
1687
+ 'admin.exams.questions.guide.step3Desc': 'Sử dụng "Lưu câu hỏi" để lưu từng câu',
1688
+ 'admin.exams.questions.guide.step3Tip': 'Nhấn "Lưu đề thi" khi hoàn thành để lưu toàn bộ và publish',
1689
+ 'admin.exams.questions.guide.step4Title': 'Ngân hàng câu hỏi',
1690
+ 'admin.exams.questions.guide.step4Desc': 'Tick "Thêm vào ngân hàng" để tái sử dụng',
1691
+ 'admin.exams.questions.guide.step4Tip': 'Câu hỏi sẽ được lưu vào kho chung, có thể dùng cho các đề thi khác',
1692
+ 'admin.exams.questions.guide.quickTips': 'Mẹo nhanh:',
1693
+ 'admin.exams.questions.guide.tip1': 'Ctrl+S để lưu nhanh câu hỏi hiện tại',
1694
+ 'admin.exams.questions.guide.tip2': 'Dữ liệu được tự động lưu local khi thay đổi',
1695
+ 'admin.exams.questions.guide.tip3': 'Xem trước câu hỏi bằng nút "Preview"',
1696
+ // Part question count editor
1697
+ 'admin.exams.partEditor.skillListening': 'Nghe',
1698
+ 'admin.exams.partEditor.skillSpeaking': 'Nói',
1699
+ 'admin.exams.partEditor.skillReading': 'Đọc',
1700
+ 'admin.exams.partEditor.skillWriting': 'Viết',
1701
+ 'admin.exams.partEditor.qtFillMissingWordsInGrid': 'Điền chữ cái còn thiếu',
1702
+ 'admin.exams.partEditor.qtLookPictureFillBlankChooseAnswer': 'Nhìn tranh, điền vào chỗ trống',
1703
+ 'admin.exams.partEditor.qtLookPictureChooseCorrectAnswer': 'Nhìn tranh, chọn đáp án đúng',
1704
+ 'admin.exams.partEditor.qtLookPictureFillWordHint': 'Nhìn tranh, điền từ (có gợi ý)',
1705
+ 'admin.exams.partEditor.qtLabelThePicture': 'Gắn nhãn cho tranh',
1706
+ 'admin.exams.partEditor.qtReadAndColorObjects': 'Đọc và tô màu',
1707
+ 'admin.exams.partEditor.qtMultipleChoice': 'Trắc nghiệm',
1708
+ 'admin.exams.partEditor.qtListening': 'Nghe hiểu',
1709
+ 'admin.exams.partEditor.qtReading': 'Đọc hiểu',
1710
+ 'admin.exams.partEditor.defaultBack': 'Quay lại',
1711
+ 'admin.exams.partEditor.defaultContinue': 'Lưu cấu hình và tiếp tục',
1712
+ 'admin.exams.partEditor.defaultExamName': 'Cấu hình đề thi',
1713
+ 'admin.exams.partEditor.step3': 'Bước 3: Cấu hình số lượng câu hỏi',
1714
+ 'admin.exams.partEditor.templateLabel': 'Template:',
1715
+ 'admin.exams.partEditor.totalQuestions': 'Tổng số câu hỏi',
1716
+ 'admin.exams.partEditor.changedFrom': 'Đã thay đổi từ {from} câu hỏi',
1717
+ 'admin.exams.partEditor.keepDefault': 'Giữ nguyên theo template mặc định',
1718
+ 'admin.exams.partEditor.questionsUnit': 'câu hỏi',
1719
+ 'admin.exams.partEditor.reset': 'Đặt lại',
1720
+ 'admin.exams.partEditor.defaultCount': 'Mặc định: {count}',
1721
+ 'admin.exams.partEditor.currentCount': 'Hiện tại: {count}',
1722
+ 'admin.exams.partEditor.configParts': 'Cấu hình từng Part',
1723
+ 'admin.exams.partEditor.configPartsDesc': 'Tùy chỉnh số lượng câu hỏi cho mỗi part. Nhóm câu hỏi có thể điều chỉnh số nhóm và số câu hỏi mỗi nhóm.',
1724
+ 'admin.exams.partEditor.groupBadge': 'Nhóm câu hỏi',
1725
+ 'admin.exams.partEditor.totalPartQuestions': 'Tổng câu hỏi',
1726
+ 'admin.exams.partEditor.skillLabel': 'Kĩ năng',
1727
+ 'admin.exams.partEditor.selectSkill': 'Chọn kĩ năng',
1728
+ 'admin.exams.partEditor.defaultSkill': '(mặc định: {skill})',
1729
+ 'admin.exams.partEditor.audioFile': 'File âm thanh',
1730
+ 'admin.exams.partEditor.audioPlaceholder': 'Chọn file audio cho part này...',
1731
+ 'admin.exams.partEditor.questionCount': 'Số câu hỏi',
1732
+ 'admin.exams.partEditor.groupCount': 'Số lượng nhóm',
1733
+ 'admin.exams.partEditor.addOrRemoveGroup': 'Thêm hoặc bớt nhóm câu hỏi',
1734
+ 'admin.exams.partEditor.questionsPerGroup': 'Số câu hỏi cho từng nhóm',
1735
+ 'admin.exams.partEditor.group': 'Nhóm {index}',
1736
+ 'admin.exams.partEditor.defaultValue': '(mặc định: {value})',
1737
+ 'admin.exams.partEditor.unsavedChanges': '• Có thay đổi chưa lưu',
1738
+ 'admin.exams.partEditor.readyToContinue': '✓ Sẵn sàng tiếp tục',
1739
+ 'admin.exams.partEditor.saving': 'Đang lưu...',
1740
+ // Settings
1741
+ 'admin.settings.title': 'Cài đặt hệ thống',
1742
+ 'admin.settings.subtitle': 'Quản lý cấu hình và tham số hệ thống',
1743
+ 'admin.settings.save.success': 'Đã lưu',
1744
+ 'admin.settings.save.successDesc': 'Cài đặt đã được lưu!',
1745
+ // Settings — System Information
1746
+ 'admin.settings.systemInfo.title': 'Thông tin hệ thống',
1747
+ 'admin.settings.systemInfo.desc': 'Cấu hình chung của hệ thống',
1748
+ 'admin.settings.systemInfo.edit': 'Chỉnh sửa',
1749
+ 'admin.settings.systemInfo.cancel': 'Hủy',
1750
+ 'admin.settings.systemInfo.save': 'Lưu thay đổi',
1751
+ 'admin.settings.systemInfo.systemName': 'Tên hệ thống',
1752
+ 'admin.settings.systemInfo.systemEmail': 'Email hệ thống',
1753
+ 'admin.settings.systemInfo.supportEmail': 'Email hỗ trợ',
1754
+ // Settings — Notification
1755
+ 'admin.settings.notification.title': 'Cài đặt thông báo',
1756
+ 'admin.settings.notification.desc': 'Quản lý các kênh thông báo',
1757
+ 'admin.settings.notification.email': 'Thông báo Email',
1758
+ 'admin.settings.notification.emailDesc': 'Gửi email thông báo cho học sinh và giáo viên',
1759
+ 'admin.settings.notification.sms': 'Thông báo SMS',
1760
+ 'admin.settings.notification.smsDesc': 'Gửi SMS thông báo quan trọng',
1761
+ // Settings — EBM Integration
1762
+ 'admin.settings.ebm.title': 'Tích hợp EBM',
1763
+ 'admin.settings.ebm.desc': 'Cấu hình kết nối với hệ thống EBM',
1764
+ 'admin.settings.ebm.testConnection': 'Test kết nối',
1765
+ 'admin.settings.ebm.syncNow': 'Đồng bộ ngay',
1766
+ // Settings — System Status
1767
+ 'admin.settings.status.title': 'Trạng thái hệ thống',
1768
+ 'admin.settings.status.desc': 'Thông tin về tình trạng hoạt động',
1769
+ 'admin.settings.status.operational': 'Hoạt động bình thường',
1770
+ 'admin.settings.status.connected': 'Kết nối OK',
1771
+ 'admin.settings.status.active': 'Hoạt động',
1772
+ 'admin.settings.status.paused': 'Tạm dừng',
1773
+ 'admin.settings.status.lastBackup': 'Hôm qua 23:00',
1774
+ // Test Participants (students/test-participants)
1775
+ 'admin.testParticipants.title': 'Học sinh dự thi',
1776
+ 'admin.testParticipants.subtitle': 'Theo dõi thông tin và kết quả thi của thí sinh trong hệ thống',
1777
+ 'admin.testParticipants.cardTitle': 'Danh sách học sinh dự thi',
1778
+ 'admin.testParticipants.cardDescription': 'Tổng cộng {totalItems} thí sinh được tìm thấy',
1779
+ 'admin.testParticipants.clearFilters': 'Xóa bộ lọc',
1780
+ 'admin.testParticipants.filterHeader': 'Bộ lọc tìm kiếm',
1781
+ 'admin.testParticipants.searchPlaceholder': 'Tìm kiếm theo họ tên, email hoặc số điện thoại...',
1782
+ 'admin.testParticipants.branchLabel': 'Chi nhánh',
1783
+ 'admin.testParticipants.allBranches': 'Tất cả chi nhánh',
1784
+ 'admin.testParticipants.contestLabel': 'Kỳ thi',
1785
+ 'admin.testParticipants.allContests': 'Tất cả kỳ thi',
1786
+ 'admin.testParticipants.fromDate': 'Từ ngày',
1787
+ 'admin.testParticipants.toDate': 'Đến ngày',
1788
+ 'admin.testParticipants.col.participant': 'Thí sinh',
1789
+ 'admin.testParticipants.col.phone': 'Số điện thoại',
1790
+ 'admin.testParticipants.col.dob': 'Ngày sinh',
1791
+ 'admin.testParticipants.col.branch': 'Chi nhánh',
1792
+ 'admin.testParticipants.col.contest': 'Kỳ thi',
1793
+ 'admin.testParticipants.col.exam': 'Bài thi',
1794
+ 'admin.testParticipants.col.bestScore': 'Điểm cao nhất',
1795
+ 'admin.testParticipants.col.maxScore': 'Thang điểm',
1796
+ 'admin.testParticipants.col.attemptCount': 'Số lần thi',
1797
+ 'admin.testParticipants.col.lastAttempt': 'Lần thi gần nhất',
1798
+ 'admin.testParticipants.col.actions': 'Thao tác',
1799
+ 'admin.testParticipants.loading': 'Đang tải dữ liệu...',
1800
+ 'admin.testParticipants.empty.title': 'Không tìm thấy dữ liệu',
1801
+ 'admin.testParticipants.empty.withFilters': 'Không có kết quả phù hợp với bộ lọc hiện tại. Vui lòng điều chỉnh tiêu chí tìm kiếm.',
1802
+ 'admin.testParticipants.empty.noData': 'Chưa có thí sinh nào tham gia kỳ thi.',
1803
+ 'admin.testParticipants.viewDetail': 'Xem chi tiết lịch sử thi',
1804
+ 'admin.testParticipants.detail': 'Chi tiết',
1805
+ // Test Participants - Dialog
1806
+ 'admin.testParticipants.dialog.title': 'Chi tiết lịch sử thi',
1807
+ 'admin.testParticipants.dialog.description': 'Thông tin chi tiết về kết quả và lịch sử các lần thi của thí sinh',
1808
+ 'admin.testParticipants.dialog.studentInfo': 'Thông tin thí sinh',
1809
+ 'admin.testParticipants.dialog.fullName': 'Họ và tên',
1810
+ 'admin.testParticipants.dialog.email': 'Địa chỉ email',
1811
+ 'admin.testParticipants.dialog.phone': 'Số điện thoại',
1812
+ 'admin.testParticipants.dialog.dob': 'Ngày sinh',
1813
+ 'admin.testParticipants.dialog.branch': 'Chi nhánh',
1814
+ 'admin.testParticipants.dialog.examInfo': 'Thông tin kỳ thi',
1815
+ 'admin.testParticipants.dialog.contest': 'Kỳ thi',
1816
+ 'admin.testParticipants.dialog.exam': 'Bài thi',
1817
+ 'admin.testParticipants.dialog.lastAttempt': 'Lần thi gần nhất',
1818
+ 'admin.testParticipants.dialog.bestScore': 'Điểm cao nhất',
1819
+ 'admin.testParticipants.dialog.passRate': 'Tỉ lệ đạt',
1820
+ 'admin.testParticipants.dialog.totalAttempts': 'Tổng số lần thi',
1821
+ 'admin.testParticipants.dialog.historyTitle': 'Lịch sử các lần thi',
1822
+ 'admin.testParticipants.dialog.col.attempt': 'Lần thi',
1823
+ 'admin.testParticipants.dialog.col.score': 'Điểm số',
1824
+ 'admin.testParticipants.dialog.col.rate': 'Tỉ lệ',
1825
+ 'admin.testParticipants.dialog.col.status': 'Trạng thái',
1826
+ 'admin.testParticipants.dialog.col.startTime': 'Thời gian bắt đầu',
1827
+ 'admin.testParticipants.dialog.col.submitTime': 'Thời gian nộp bài',
1828
+ 'admin.testParticipants.dialog.noAttempts': 'Chưa có dữ liệu lần thi nào.',
1829
+ // Test Participants - Status badges
1830
+ 'admin.testParticipants.status.inProgress': 'Đang làm bài',
1831
+ 'admin.testParticipants.status.submitted': 'Đã nộp bài',
1832
+ 'admin.testParticipants.status.graded': 'Đã chấm điểm',
1833
+ 'admin.testParticipants.status.published': 'Đã công bố',
1834
+ // Roles list page
1835
+ 'admin.roles.title': 'Quản lý Vai trò',
1836
+ 'admin.roles.subtitle': 'Quản lý vai trò và phân quyền trong hệ thống',
1837
+ 'admin.roles.table.title': 'Danh sách vai trò',
1838
+ 'admin.roles.table.showing': 'Hiển thị {count} vai trò',
1839
+ 'admin.roles.table.empty': 'Không có vai trò nào',
1840
+ 'admin.roles.table.loading': 'Đang tải...',
1841
+ 'admin.roles.table.addRole': 'Tạo vai trò mới',
1842
+ 'admin.roles.col.name': 'Tên vai trò',
1843
+ 'admin.roles.col.slug': 'Slug',
1844
+ 'admin.roles.col.level': 'Cấp độ',
1845
+ 'admin.roles.col.permCount': 'Số quyền',
1846
+ 'admin.roles.col.type': 'Loại',
1847
+ 'admin.roles.col.actions': 'Hành động',
1848
+ 'admin.roles.filter.searchPlaceholder': 'Tìm kiếm theo tên hoặc slug...',
1849
+ 'admin.roles.filter.allLevels': 'Tất cả cấp độ',
1850
+ 'admin.roles.level.system': 'Hệ thống',
1851
+ 'admin.roles.level.branch': 'Chi nhánh',
1852
+ 'admin.roles.type.system': 'Hệ thống',
1853
+ 'admin.roles.type.custom': 'Tùy chỉnh',
1854
+ // Create role
1855
+ 'admin.role.create.title': 'Tạo vai trò mới',
1856
+ 'admin.role.create.subtitle': 'Tạo vai trò tùy chỉnh cho hệ thống',
1857
+ 'admin.role.create.success': 'Tạo vai trò thành công',
1858
+ 'admin.role.create.submit': 'Tạo vai trò',
1859
+ 'admin.role.create.submitting': 'Đang tạo...',
1860
+ 'admin.role.field.name': 'Tên vai trò',
1861
+ 'admin.role.field.slug': 'Slug',
1862
+ 'admin.role.field.slugHint': 'Chỉ chứa chữ thường, số, gạch dưới và gạch nối',
1863
+ 'admin.role.field.level': 'Cấp độ',
1864
+ 'admin.role.field.description': 'Mô tả',
1865
+ 'admin.role.field.portalType': 'Thuộc portal',
1866
+ 'admin.role.field.portalTypeHint': 'Chọn portal mà vai trò này sẽ được sử dụng',
1867
+ 'admin.role.field.portal.admin': 'Portal Quản trị',
1868
+ 'admin.role.field.portal.adminDesc': 'Quản lý hệ thống, kỳ thi, người dùng',
1869
+ 'admin.role.field.portal.teacher': 'Portal Giáo viên',
1870
+ 'admin.role.field.portal.teacherDesc': 'Quản lý lớp học, chấm điểm',
1871
+ 'admin.role.field.portal.student': 'Portal Học sinh',
1872
+ 'admin.role.field.portal.studentDesc': 'Thi trực tuyến, xem kết quả',
1873
+ // Delete role
1874
+ 'admin.role.delete.title': 'Xóa vai trò',
1875
+ 'admin.role.delete.desc': 'Bạn có chắc chắn muốn xóa vai trò "{name}"? Hành động này không thể hoàn tác.',
1876
+ 'admin.role.delete.confirm': 'Xóa vai trò',
1877
+ 'admin.role.delete.success': 'Đã xóa vai trò "{name}"',
1878
+ 'admin.role.delete.cannotSystem': 'Không thể xóa vai trò hệ thống',
1879
+ // Role detail
1880
+ 'admin.role.backToList': 'Quay lại danh sách',
1881
+ 'admin.role.info.title': 'Thông tin vai trò',
1882
+ 'admin.role.info.edit': 'Chỉnh sửa',
1883
+ 'admin.role.info.save': 'Lưu',
1884
+ 'admin.role.info.cancel': 'Hủy',
1885
+ 'admin.role.update.success': 'Cập nhật vai trò thành công',
1886
+ // Permission editor
1887
+ 'admin.role.permissions.title': 'Phân quyền',
1888
+ 'admin.role.permissions.showing': '{selected}/{total} quyền được chọn',
1889
+ 'admin.role.permissions.save': 'Lưu thay đổi',
1890
+ 'admin.role.permissions.saving': 'Đang lưu...',
1891
+ 'admin.role.permissions.saveSuccess': 'Cập nhật quyền thành công',
1892
+ 'admin.role.permissions.systemWarning': 'Đây là vai trò hệ thống. Quyền không thể chỉnh sửa.',
1893
+ 'admin.role.permissions.selectAll': 'Chọn tất cả',
1894
+ 'admin.role.permissions.unsavedChanges': '{count} thay đổi chưa lưu',
1895
+ // User role assignment
1896
+ 'admin.user.roles.title': 'Vai trò được gán',
1897
+ 'admin.user.roles.assign': 'Gán vai trò',
1898
+ 'admin.user.roles.empty': 'Chưa có vai trò nào được gán',
1899
+ 'admin.user.roles.col.role': 'Vai trò',
1900
+ 'admin.user.roles.col.branch': 'Chi nhánh',
1901
+ 'admin.user.roles.col.assignedAt': 'Ngày gán',
1902
+ 'admin.user.roles.col.assignedBy': 'Được gán bởi',
1903
+ 'admin.user.roles.col.actions': 'Hành động',
1904
+ 'admin.user.roles.sessionCacheInfo': 'Thay đổi vai trò có hiệu lực sau khi người dùng đăng nhập lại.',
1905
+ 'admin.user.role.assign.title': 'Gán vai trò',
1906
+ 'admin.user.role.assign.desc': 'Chọn vai trò và chi nhánh để gán cho người dùng',
1907
+ 'admin.user.role.assign.roleLabel': 'Vai trò',
1908
+ 'admin.user.role.assign.rolePlaceholder': 'Chọn vai trò',
1909
+ 'admin.user.role.assign.branchLabel': 'Chi nhánh',
1910
+ 'admin.user.role.assign.branchPlaceholder': 'Chọn chi nhánh',
1911
+ 'admin.user.role.assign.submit': 'Gán vai trò',
1912
+ 'admin.user.role.assign.success': 'Đã gán vai trò "{role}" thành công',
1913
+ 'admin.user.role.remove.title': 'Gỡ vai trò',
1914
+ 'admin.user.role.remove.desc': 'Bạn có chắc chắn muốn gỡ vai trò "{role}" khỏi người dùng?',
1915
+ 'admin.user.role.remove.confirm': 'Gỡ vai trò',
1916
+ 'admin.user.role.remove.success': 'Đã gỡ vai trò "{role}" thành công',
1917
+ // Template management
1918
+ 'admin.templates.title': 'Quản lý Template đề thi',
1919
+ 'admin.templates.subtitle': 'Xem, import, export và xóa template đề thi',
1920
+ 'admin.templates.table.title': 'Danh sách Template',
1921
+ 'admin.templates.searchPlaceholder': 'Tìm template',
1922
+ 'admin.templates.table.empty': 'Không tìm thấy template nào',
1923
+ 'admin.templates.table.loading': 'Đang tải template...',
1924
+ 'admin.templates.table.showing': 'Hiển thị {count} template',
1925
+ 'admin.templates.col.title': 'Tiêu đề',
1926
+ 'admin.templates.col.subTitle': 'Phụ đề',
1927
+ 'admin.templates.col.examLevel': 'Cấp độ',
1928
+ 'admin.templates.col.theme': 'Giao diện',
1929
+ 'admin.templates.col.totalParts': 'Phần',
1930
+ 'admin.templates.col.totalQuestions': 'Câu hỏi',
1931
+ 'admin.templates.col.createdBy': 'Người tạo',
1932
+ 'admin.templates.col.createdAt': 'Ngày tạo',
1933
+ 'admin.templates.col.updatedAt': 'Cập nhật',
1934
+ 'admin.templates.col.examCount': 'Đề thi',
1935
+ 'admin.templates.col.actions': 'Hành động',
1936
+ 'admin.templates.filter.searchPlaceholder': 'Tìm kiếm theo tiêu đề...',
1937
+ 'admin.templates.action.view': 'Xem chi tiết',
1938
+ 'admin.templates.action.export': 'Xuất',
1939
+ 'admin.templates.action.delete': 'Xóa',
1940
+ 'admin.templates.action.import': 'Import Template',
1941
+ 'admin.templates.action.exporting': 'Đang xuất...',
1942
+ 'admin.templates.export.success': 'Xuất template thành công',
1943
+ 'admin.templates.export.error': 'Xuất template thất bại',
1944
+ 'admin.templates.import.success': 'Import template thành công',
1945
+ 'admin.templates.import.error': 'Import template thất bại',
1946
+ 'admin.templates.import.invalidJson': 'File JSON không hợp lệ. Vui lòng kiểm tra lại định dạng.',
1947
+ 'admin.templates.import.invalidFile': 'Vui lòng chọn file .json hợp lệ.',
1948
+ 'admin.templates.import.invalidFormat': 'Định dạng template không hợp lệ. File phải chứa các trường title và parts.',
1949
+ 'admin.templates.import.parseError': 'Không thể phân tích file JSON. Vui lòng kiểm tra nội dung file.',
1950
+ 'admin.templates.import.readError': 'Không thể đọc file. Vui lòng thử lại.',
1951
+ 'admin.templates.import.title': 'Import Template',
1952
+ 'admin.templates.import.desc': 'Chọn file JSON đã được xuất từ hệ thống. Nếu template với cùng ID đã tồn tại, nó sẽ được thay thế.',
1953
+ 'admin.templates.import.selectFile': 'Chọn file JSON',
1954
+ 'admin.templates.import.submit': 'Import',
1955
+ 'admin.templates.import.submitting': 'Đang import...',
1956
+ 'admin.templates.delete.title': 'Xóa Template',
1957
+ 'admin.templates.delete.desc': 'Bạn có chắc chắn muốn xóa template "{title}"? Hành động này không thể hoàn tác.',
1958
+ 'admin.templates.delete.confirm': 'Xóa template',
1959
+ 'admin.templates.delete.success': 'Đã xóa template "{title}" thành công',
1960
+ 'admin.templates.detail.title': 'Chi tiết Template',
1961
+ 'admin.templates.detail.back': 'Quay lại danh sách',
1962
+ 'admin.templates.detail.jsonView': 'Nội dung JSON',
1963
+ 'admin.templates.detail.info': 'Thông tin chung',
1964
+ 'admin.templates.detail.parts': 'Các phần ({count})',
1965
+ 'admin.templates.detail.copyJson': 'Sao chép JSON',
1966
+ 'admin.templates.detail.jsonCopied': 'Đã sao chép JSON',
1967
+ 'admin.templates.create.title': 'Tạo Template',
1968
+ 'admin.templates.create.desc': 'Điền thông tin template bên dưới. Chỉ trường Parts cần nhập JSON.',
1969
+ 'admin.templates.create.placeholder': 'Dán nội dung JSON tại đây...\n\n{\n "title": "...",\n "examLevel": "...",\n "parts": [...]\n}',
1970
+ 'admin.templates.create.submit': 'Tạo Template',
1971
+ 'admin.templates.create.creating': 'Đang tạo...',
1972
+ 'admin.templates.create.success': 'Tạo template thành công',
1973
+ 'admin.templates.create.emptyJson': 'Vui lòng dán nội dung JSON.',
1974
+ 'admin.templates.create.invalidFormat': 'Định dạng template không hợp lệ. JSON phải chứa các trường title, examLevel và parts.',
1975
+ 'admin.templates.create.parseError': 'JSON không hợp lệ. Vui lòng kiểm tra nội dung và thử lại.',
1976
+ 'admin.templates.create.validJson': 'JSON hợp lệ — sẵn sàng tạo',
1977
+ 'admin.templates.action.create': 'Tạo Template',
1978
+ 'admin.templates.action.edit': 'Sửa',
1979
+ // Template form fields
1980
+ 'admin.templates.form.titleLabel': 'Tiêu đề',
1981
+ 'admin.templates.form.titlePlaceholder': 'Nhập tiêu đề template...',
1982
+ 'admin.templates.form.titleRequired': 'Tiêu đề là bắt buộc.',
1983
+ 'admin.templates.form.subTitleLabel': 'Phụ đề',
1984
+ 'admin.templates.form.subTitlePlaceholder': 'Nhập phụ đề (tùy chọn)...',
1985
+ 'admin.templates.form.descriptionLabel': 'Mô tả',
1986
+ 'admin.templates.form.descriptionPlaceholder': 'Nhập mô tả (tùy chọn)...',
1987
+ 'admin.templates.form.examLevelLabel': 'Cấp độ (CEFR)',
1988
+ 'admin.templates.form.examLevelPlaceholder': 'Chọn cấp độ...',
1989
+ 'admin.templates.form.totalQuestionsLabel': 'Tổng số câu hỏi',
1990
+ 'admin.templates.form.totalPartsLabel': 'Tổng số phần',
1991
+ 'admin.templates.form.partsLabel': 'Parts (JSON)',
1992
+ 'admin.templates.form.partsPlaceholder': '[\n {\n "partNumber": 1,\n "title": "Part 1",\n "questionCount": 5,\n ...\n }\n]',
1993
+ 'admin.templates.form.partsRequired': 'Parts JSON là bắt buộc và phải là mảng không rỗng.',
1994
+ 'admin.templates.form.partsNotArray': 'Parts phải là mảng JSON.',
1995
+ 'admin.templates.form.partsParseError': 'JSON không hợp lệ. Vui lòng kiểm tra nội dung.',
1996
+ 'admin.templates.form.validJson': 'JSON hợp lệ',
1997
+ 'admin.templates.form.themeLabel': 'Giao diện',
1998
+ 'admin.templates.form.themePlaceholder': 'Chọn giao diện...',
1999
+ 'admin.templates.form.themeNone': 'Không có',
2000
+ // Template edit
2001
+ 'admin.templates.edit.title': 'Sửa Template',
2002
+ 'admin.templates.edit.desc': 'Chỉnh sửa thông tin template bên dưới. Chỉ trường Parts cần nhập JSON.',
2003
+ 'admin.templates.edit.submit': 'Lưu thay đổi',
2004
+ 'admin.templates.edit.saving': 'Đang lưu...',
2005
+ 'admin.templates.edit.success': 'Cập nhật template thành công',
2006
+ 'admin.templates.edit.loadError': 'Không thể tải dữ liệu template để chỉnh sửa',
2007
+ // ===== Bulk Exam Room Provisioning (System Admin) =====
2008
+ 'bulkRooms.sidebar.label': 'Tạo phòng thi hàng loạt',
2009
+ 'bulkRooms.page.title': 'Tạo phòng thi hàng loạt',
2010
+ 'bulkRooms.page.description': 'Tạo nhiều phòng thi cho một cuộc thi trên nhiều chi nhánh trong một thao tác.',
2011
+ 'bulkRooms.actions.next': 'Tiếp tục',
2012
+ 'bulkRooms.actions.back': 'Quay lại',
2013
+ 'bulkRooms.actions.preview': 'Xem trước',
2014
+ 'bulkRooms.actions.commit': 'Tạo phòng',
2015
+ 'bulkRooms.actions.confirm': 'Xác nhận',
2016
+ 'bulkRooms.actions.cancel': 'Hủy',
2017
+ 'bulkRooms.actions.reset': 'Bắt đầu lại',
2018
+ 'bulkRooms.actions.close': 'Đóng',
2019
+ 'bulkRooms.steps.contest': 'Chọn cuộc thi',
2020
+ 'bulkRooms.steps.branches': 'Chọn chi nhánh',
2021
+ 'bulkRooms.steps.config': 'Cấu hình',
2022
+ 'bulkRooms.steps.preview': 'Xem trước',
2023
+ 'bulkRooms.steps.commit': 'Tạo phòng',
2024
+ 'bulkRooms.steps.indicator': 'Bước {current}/{total}',
2025
+ 'bulkRooms.contest.title': 'Chọn cuộc thi',
2026
+ 'bulkRooms.contest.description': 'Chọn cuộc thi mà các phòng thi sẽ thuộc về.',
2027
+ 'bulkRooms.contest.placeholder': 'Tìm cuộc thi theo tên...',
2028
+ 'bulkRooms.contest.empty': 'Không tìm thấy cuộc thi nào.',
2029
+ 'bulkRooms.contest.selected': 'Đã chọn: {name}',
2030
+ 'bulkRooms.branches.title': 'Chọn chi nhánh',
2031
+ 'bulkRooms.branches.description': 'Chọn một hoặc nhiều chi nhánh để tạo phòng thi.',
2032
+ 'bulkRooms.branches.placeholder': 'Chọn chi nhánh...',
2033
+ 'bulkRooms.branches.empty': 'Không có chi nhánh nào.',
2034
+ 'bulkRooms.branches.selectedCount': 'Đã chọn {count} chi nhánh',
2035
+ 'bulkRooms.branches.sourceEbm': 'Danh sách chi nhánh được lấy từ hệ thống EBM.',
2036
+ 'bulkRooms.branches.selectAll': 'Chọn tất cả chi nhánh',
2037
+ 'bulkRooms.branches.selectedSummary': 'Đã chọn {selected}/{total} chi nhánh',
2038
+ 'bulkRooms.config.title': 'Cấu hình theo chi nhánh',
2039
+ 'bulkRooms.config.description': 'Cấu hình cách tạo phòng cho từng chi nhánh.',
2040
+ 'bulkRooms.config.mode.label': 'Chế độ tạo phòng',
2041
+ 'bulkRooms.config.mode.AUTO_CLASS': 'Tự động theo lớp',
2042
+ 'bulkRooms.config.mode.MANUAL': 'Thủ công',
2043
+ 'bulkRooms.config.mode.AUTO_CLASS.help': 'Tạo một phòng cho mỗi lớp đang hoạt động của chi nhánh.',
2044
+ 'bulkRooms.config.mode.MANUAL.help': 'Tự định nghĩa các phòng và danh sách học sinh.',
2045
+ 'bulkRooms.config.onlyTeacher.label': 'Thêm giáo viên chi nhánh vào phòng',
2046
+ 'bulkRooms.config.onlyTeacher.help': 'Nếu chọn, sẽ thêm toàn bộ giáo viên của chi nhánh vào phòng thi. Nếu bỏ chọn sẽ không thêm giáo viên nào.',
2047
+ 'bulkRooms.config.nameFormat.label': 'Định dạng tên phòng',
2048
+ 'bulkRooms.config.nameFormat.placeholder': '{branchCode} - {className}',
2049
+ 'bulkRooms.config.codeFormat.label': 'Định dạng mã phòng (tùy chọn)',
2050
+ 'bulkRooms.config.codeFormat.placeholder': '{branchCode}_ROOM_{index}',
2051
+ 'bulkRooms.config.tokens.help': 'Token hỗ trợ: {tokens}',
2052
+ 'bulkRooms.config.classEbmIds.label': 'Lớp được chọn (tùy chọn)',
2053
+ 'bulkRooms.config.classEbmIds.placeholder': 'Nhập id lớp, phân cách bởi dấu phẩy',
2054
+ 'bulkRooms.config.classEbmIds.help': 'Bỏ trống để dùng tất cả các lớp đang hoạt động của chi nhánh.',
2055
+ 'bulkRooms.config.rooms.title': 'Phòng (chế độ thủ công)',
2056
+ 'bulkRooms.config.rooms.add': 'Thêm phòng',
2057
+ 'bulkRooms.config.rooms.remove': 'Xóa',
2058
+ 'bulkRooms.config.rooms.empty': 'Chưa có phòng nào. Nhấn "Thêm phòng" để bắt đầu.',
2059
+ 'bulkRooms.config.studentCodes.label': 'Mã học sinh (tùy chọn, mỗi dòng một mã)',
2060
+ 'bulkRooms.config.studentCodes.placeholder': 'HS001\nHS002\n...',
2061
+ 'bulkRooms.config.studentCodes.help': 'Người dùng chưa tồn tại sẽ được tạo khi xác nhận (mật khẩu mặc định = mã học sinh).',
2062
+ 'bulkRooms.preview.title': 'Xem trước',
2063
+ 'bulkRooms.preview.description': 'Xem lại các phòng sẽ được tạo trước khi xác nhận.',
2064
+ 'bulkRooms.preview.loading': 'Đang xây dựng kế hoạch...',
2065
+ 'bulkRooms.preview.error': 'Không thể tạo bản xem trước.',
2066
+ 'bulkRooms.preview.requiresForm': 'Hãy chọn cuộc thi, chi nhánh và hoàn tất cấu hình để xem trước.',
2067
+ 'bulkRooms.preview.summary.totalRooms': 'Tổng số phòng',
2068
+ 'bulkRooms.preview.summary.totalStaff': 'Tổng nhân viên',
2069
+ 'bulkRooms.preview.summary.totalStudents': 'Tổng học sinh',
2070
+ 'bulkRooms.preview.summary.totalNewUsers': 'Người dùng mới sẽ được tạo',
2071
+ 'bulkRooms.preview.summary.totalNewStudents': 'Học sinh mới sẽ được tạo',
2072
+ 'bulkRooms.preview.summary.totalNewTeachers': 'Giáo viên mới sẽ được tạo',
2073
+ 'bulkRooms.preview.table.branch': 'Chi nhánh',
2074
+ 'bulkRooms.preview.table.room': 'Tên phòng',
2075
+ 'bulkRooms.preview.table.code': 'Mã phòng',
2076
+ 'bulkRooms.preview.table.staff': 'Nhân viên',
2077
+ 'bulkRooms.preview.table.students': 'Học sinh',
2078
+ 'bulkRooms.preview.table.newUsers': 'Người dùng mới',
2079
+ 'bulkRooms.preview.table.roomName': 'Tên phòng',
2080
+ 'bulkRooms.preview.table.roomCode': 'Mã phòng',
2081
+ 'bulkRooms.preview.table.staffCount': 'Nhân viên',
2082
+ 'bulkRooms.preview.table.studentCount': 'Học sinh',
2083
+ 'bulkRooms.preview.table.roomCount': '{count} phòng',
2084
+ 'bulkRooms.preview.table.noRooms': 'Không có phòng nào cho chi nhánh này.',
2085
+ 'bulkRooms.preview.table.showMore': 'Hiển thị thêm {count} phòng',
2086
+ 'bulkRooms.preview.table.collapse': 'Thu gọn',
2087
+ 'bulkRooms.preview.empty': 'Không có phòng nào trong kế hoạch.',
2088
+ 'bulkRooms.commit.dialog.title': 'Xác nhận tạo phòng',
2089
+ 'bulkRooms.commit.dialog.description': 'Bạn sắp tạo {rooms} phòng và {users} người dùng mới. Hành động này không thể hoàn tác.',
2090
+ 'bulkRooms.commit.dialog.warning': 'Hành động này sẽ tạo phòng thi và người dùng trong cơ sở dữ liệu và không thể hoàn tác.',
2091
+ 'bulkRooms.commit.dialog.confirmCheckbox': 'Tôi đã kiểm tra bản xem trước và xác nhận tạo các phòng này.',
2092
+ 'bulkRooms.commit.dialog.committing': 'Đang tạo...',
2093
+ 'bulkRooms.commit.success.title': 'Tạo phòng thành công',
2094
+ 'bulkRooms.commit.success.description': 'Đã tạo {rooms} phòng, {participants} người tham gia và {users} người dùng mới.',
2095
+ 'bulkRooms.commit.success.rooms': 'Phòng đã tạo',
2096
+ 'bulkRooms.commit.success.participants': 'Người tham gia',
2097
+ 'bulkRooms.commit.success.users': 'Người dùng mới',
2098
+ 'bulkRooms.commit.error.title': 'Tạo phòng thất bại',
2099
+ 'bulkRooms.commit.error.description': 'Một số chi nhánh không thể tạo phòng. Vui lòng xem chi tiết lỗi bên dưới.',
2100
+ 'bulkRooms.commit.error.list': 'Danh sách lỗi',
2101
+ 'bulkRooms.commit.error.partial': 'Có {count} chi nhánh gặp lỗi.',
2102
+ 'bulkRooms.commit.error.branch': 'Chi nhánh {branchId} (EBM #{ebmBranchId}): {reason}',
2103
+ };
2104
+ export default admin;
2105
+ //# sourceMappingURL=admin.js.map