@tinyweb_dev/oe-exam-sdk 0.1.26 → 0.1.28

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 (146) hide show
  1. package/README.md +79 -5
  2. package/dist/components/exams/ExamPreviewDialog.d.ts +7 -6
  3. package/dist/components/exams/ExamPreviewDialog.js +1 -1
  4. package/dist/components/exams/index.d.ts +0 -1
  5. package/dist/components/exams/take/components/QuestionRenderer.js +1 -1
  6. package/dist/components/exams/take/components/question-renderers/MoversListenAndWriteRenderer.js +1 -1
  7. package/dist/components/exams/take/components/question-renderers/MoversWordFillStructuredFormRenderer.js +1 -1
  8. package/dist/components/exams/take/exam-taking.utils.d.ts +0 -13
  9. package/dist/components/exams/take/exam-taking.utils.js +1 -1
  10. package/dist/components/exams/take/utils/answer-transformers.js +1 -1
  11. package/dist/components/exams/take/utils/question-transformers.d.ts +7 -17
  12. package/dist/components/exams/take/utils/question-transformers.js +1 -1
  13. package/dist/components/questions/_shared/config/question-types.config.js +1 -1
  14. package/dist/components/questions/_shared/types/choose-the-correct-answer-group.type.d.ts +36 -0
  15. package/dist/components/questions/_shared/types/cross-out-word-group.type.d.ts +40 -0
  16. package/dist/components/questions/_shared/types/index.d.ts +1 -0
  17. package/dist/components/questions/_shared/types/index.js +1 -1
  18. package/dist/components/questions/_shared/types/true-false-group.type.d.ts +31 -0
  19. package/dist/components/questions/_shared/types/true-false-group.type.js +1 -0
  20. package/dist/components/questions/_shared/types/word-fill-structured-form.type.d.ts +11 -17
  21. package/dist/components/questions/creator/question-type-registry.js +1 -1
  22. package/dist/components/questions/index.d.ts +0 -1
  23. package/dist/components/questions/index.js +1 -1
  24. package/dist/components/questions/types/choose-the-correct-answer-group/ChooseTheCorrectAnswerGroupClient.d.ts +2 -0
  25. package/dist/components/questions/types/choose-the-correct-answer-group/ChooseTheCorrectAnswerGroupClient.js +1 -0
  26. package/dist/components/questions/types/choose-the-correct-answer-group/ChooseTheCorrectAnswerGroupCreator.d.ts +2 -0
  27. package/dist/components/questions/types/choose-the-correct-answer-group/ChooseTheCorrectAnswerGroupCreator.js +1 -0
  28. package/dist/components/questions/types/choose-the-correct-answer-group/index.d.ts +3 -0
  29. package/dist/components/questions/types/choose-the-correct-answer-group/index.js +1 -0
  30. package/dist/components/questions/types/choose-the-correct-answer-group/map-choose-the-correct-answer-group-data.d.ts +4 -0
  31. package/dist/components/questions/types/choose-the-correct-answer-group/map-choose-the-correct-answer-group-data.js +1 -0
  32. package/dist/components/questions/types/choose-the-correct-answer-group/register.d.ts +2 -0
  33. package/dist/components/questions/types/choose-the-correct-answer-group/register.js +1 -0
  34. package/dist/components/questions/types/choose-the-correct-answer-group/transform.d.ts +2 -0
  35. package/dist/components/questions/types/choose-the-correct-answer-group/transform.js +1 -0
  36. package/dist/components/questions/types/cross-out-word-group/CrossOutWordGroupClient.d.ts +2 -0
  37. package/dist/components/questions/types/cross-out-word-group/CrossOutWordGroupClient.js +1 -0
  38. package/dist/components/questions/types/cross-out-word-group/CrossOutWordGroupCreator.d.ts +2 -0
  39. package/dist/components/questions/types/cross-out-word-group/CrossOutWordGroupCreator.js +1 -0
  40. package/dist/components/questions/types/cross-out-word-group/index.d.ts +5 -0
  41. package/dist/components/questions/types/cross-out-word-group/index.js +1 -0
  42. package/dist/components/questions/types/cross-out-word-group/map-cross-out-word-group-data.d.ts +6 -0
  43. package/dist/components/questions/types/cross-out-word-group/map-cross-out-word-group-data.js +1 -0
  44. package/dist/components/questions/types/cross-out-word-group/register.d.ts +2 -0
  45. package/dist/components/questions/types/cross-out-word-group/register.js +1 -0
  46. package/dist/components/questions/types/cross-out-word-group/transform.d.ts +2 -0
  47. package/dist/components/questions/types/cross-out-word-group/transform.js +1 -0
  48. package/dist/components/questions/types/true-false-group/TrueFalseGroupClient.d.ts +2 -0
  49. package/dist/components/questions/types/true-false-group/TrueFalseGroupClient.js +1 -0
  50. package/dist/components/questions/types/true-false-group/TrueFalseGroupCreator.d.ts +2 -0
  51. package/dist/components/questions/types/true-false-group/TrueFalseGroupCreator.js +1 -0
  52. package/dist/components/questions/types/true-false-group/index.d.ts +5 -0
  53. package/dist/components/questions/types/true-false-group/index.js +1 -0
  54. package/dist/components/questions/types/true-false-group/map-true-false-group-data.d.ts +4 -0
  55. package/dist/components/questions/types/true-false-group/map-true-false-group-data.js +1 -0
  56. package/dist/components/questions/types/true-false-group/register.d.ts +2 -0
  57. package/dist/components/questions/types/true-false-group/register.js +1 -0
  58. package/dist/components/questions/types/true-false-group/transform.d.ts +2 -0
  59. package/dist/components/questions/types/true-false-group/transform.js +1 -0
  60. package/dist/components/questions/types/word-fill-structured-form/index.d.ts +1 -0
  61. package/dist/components/questions/types/word-fill-structured-form/index.js +1 -1
  62. package/dist/components/questions/types/word-fill-structured-form/map-wfsf-question-data.d.ts +7 -0
  63. package/dist/components/questions/types/word-fill-structured-form/map-wfsf-question-data.js +1 -0
  64. package/dist/components/questions/types/word-fill-structured-form/register.js +1 -1
  65. package/dist/components/questions/types/word-fill-structured-form/transform.js +1 -1
  66. package/dist/components/questions/viewer/ChooseTheCorrectAnswerGroupViewer.d.ts +8 -0
  67. package/dist/components/questions/viewer/ChooseTheCorrectAnswerGroupViewer.js +1 -0
  68. package/dist/components/questions/viewer/CrossOutWordGroupViewer.d.ts +7 -0
  69. package/dist/components/questions/viewer/CrossOutWordGroupViewer.js +1 -0
  70. package/dist/components/questions/viewer/QuestionViewer.js +1 -1
  71. package/dist/components/questions/viewer/SpontaneousQaGroupViewer.d.ts +4 -0
  72. package/dist/components/questions/viewer/SpontaneousQaGroupViewer.js +1 -0
  73. package/dist/components/questions/viewer/TrueFalseGroupViewer.d.ts +8 -0
  74. package/dist/components/questions/viewer/TrueFalseGroupViewer.js +1 -0
  75. package/dist/components/questions/viewer/WordFillStructuredFormViewer.d.ts +9 -0
  76. package/dist/components/questions/viewer/WordFillStructuredFormViewer.js +1 -0
  77. package/dist/components/questions/viewer/WordOrderAndMatchGroupViewer.d.ts +4 -0
  78. package/dist/components/questions/viewer/WordOrderAndMatchGroupViewer.js +1 -0
  79. package/dist/components/questions/viewer/index.d.ts +6 -0
  80. package/dist/components/questions/viewer/index.js +1 -1
  81. package/dist/components/results/renderers/review-question-body-dedicated.js +1 -1
  82. package/dist/components/results/review-data.js +1 -1
  83. package/dist/components/themes/english-certification/EcWordFillStructuredForm.js +1 -1
  84. package/dist/index.d.ts +0 -2
  85. package/dist/index.js +1 -1
  86. package/dist/mcp/config.d.ts +12 -0
  87. package/dist/mcp/config.js +1 -0
  88. package/dist/mcp/http-client.d.ts +6 -0
  89. package/dist/mcp/http-client.js +1 -0
  90. package/dist/mcp/index.d.ts +6 -0
  91. package/dist/mcp/index.js +2 -0
  92. package/dist/mcp/tools/_helpers.d.ts +4 -0
  93. package/dist/mcp/tools/_helpers.js +1 -0
  94. package/dist/mcp/tools/exams.d.ts +2 -0
  95. package/dist/mcp/tools/exams.js +1 -0
  96. package/dist/mcp/tools/index.d.ts +2 -0
  97. package/dist/mcp/tools/index.js +1 -0
  98. package/dist/mcp/tools/results.d.ts +2 -0
  99. package/dist/mcp/tools/results.js +1 -0
  100. package/dist/shared/constants/question-skills.js +1 -1
  101. package/dist/shared/lib/i18n/messages/en/admin.d.ts +4 -11
  102. package/dist/shared/lib/i18n/messages/en/admin.js +1 -1
  103. package/dist/shared/lib/i18n/messages/en.d.ts +4 -11
  104. package/dist/shared/lib/i18n/messages/vi/admin.d.ts +4 -11
  105. package/dist/shared/lib/i18n/messages/vi/admin.js +1 -1
  106. package/dist/shared/lib/i18n/messages/vi.d.ts +4 -11
  107. package/dist/shared/lib/utils/question-reverse-transform.js +1 -1
  108. package/dist/shared/lib/utils/question-transform.js +1 -1
  109. package/dist/shared/types/common.types.d.ts +1 -1
  110. package/dist/shared/types/questions/choose-the-correct-answer-group.d.ts +41 -0
  111. package/dist/shared/types/questions/choose-the-correct-answer-group.js +1 -0
  112. package/dist/shared/types/questions/cross-out-word-group.d.ts +41 -0
  113. package/dist/shared/types/questions/cross-out-word-group.js +1 -0
  114. package/dist/shared/types/questions/index.d.ts +2 -0
  115. package/dist/shared/types/questions/index.js +1 -1
  116. package/package.json +166 -169
  117. package/dist/components/exams/ExamPreviewPartContent.d.ts +0 -18
  118. package/dist/components/exams/ExamPreviewPartContent.js +0 -1
  119. package/dist/components/exams/ExamPreviewSidebar.d.ts +0 -17
  120. package/dist/components/exams/ExamPreviewSidebar.js +0 -1
  121. package/dist/components/exams/exam-preview.types.d.ts +0 -34
  122. package/dist/components/exams/exam-preview.types.js +0 -1
  123. package/dist/components/questions/_shared/utils/parseFillBlankStem.d.ts +0 -30
  124. package/dist/components/questions/_shared/utils/parseFillBlankStem.js +0 -1
  125. package/dist/components/questions/question-bank/EditQuestionBankDialog.d.ts +0 -2
  126. package/dist/components/questions/question-bank/EditQuestionBankDialog.js +0 -1
  127. package/dist/components/questions/question-bank/QuestionEditorRenderer.d.ts +0 -23
  128. package/dist/components/questions/question-bank/QuestionEditorRenderer.js +0 -1
  129. package/dist/components/questions/question-bank/difficulty.d.ts +0 -15
  130. package/dist/components/questions/question-bank/difficulty.js +0 -1
  131. package/dist/components/questions/question-bank/editor-adapters/choice-adapters.d.ts +0 -5
  132. package/dist/components/questions/question-bank/editor-adapters/choice-adapters.js +0 -1
  133. package/dist/components/questions/question-bank/editor-adapters/index.d.ts +0 -5
  134. package/dist/components/questions/question-bank/editor-adapters/index.js +0 -1
  135. package/dist/components/questions/question-bank/editor-adapters/media-adapters.d.ts +0 -6
  136. package/dist/components/questions/question-bank/editor-adapters/media-adapters.js +0 -1
  137. package/dist/components/questions/question-bank/editor-adapters/types.d.ts +0 -1
  138. package/dist/components/questions/question-bank/editor-adapters/unsupported-fallback.d.ts +0 -8
  139. package/dist/components/questions/question-bank/editor-adapters/unsupported-fallback.js +0 -1
  140. package/dist/components/questions/question-bank/editor-adapters/writing-adapters.d.ts +0 -5
  141. package/dist/components/questions/question-bank/editor-adapters/writing-adapters.js +0 -1
  142. package/dist/components/questions/question-bank/index.d.ts +0 -4
  143. package/dist/components/questions/question-bank/index.js +0 -1
  144. package/dist/components/questions/question-bank/types.d.ts +0 -59
  145. /package/dist/components/questions/{question-bank/editor-adapters/types.js → _shared/types/choose-the-correct-answer-group.type.js} +0 -0
  146. /package/dist/components/questions/{question-bank/types.js → _shared/types/cross-out-word-group.type.js} +0 -0
@@ -1,6 +0,0 @@
1
- import type { QuestionEditorAdapterProps } from './types';
2
- export declare function renderFillMissingWordsInGridEditor({ content, correctAnswer, onChange, }: QuestionEditorAdapterProps): import("react").JSX.Element;
3
- export declare function renderLabelThePictureEditor({ content, explanation, points, onChange, validationRef, }: QuestionEditorAdapterProps): import("react").JSX.Element;
4
- export declare function renderLookPictureFillWordHintEditor({ content, correctAnswer, explanation, points, onChange, validationRef, }: QuestionEditorAdapterProps): import("react").JSX.Element;
5
- export declare function renderReadAndColorObjectsEditor({ content, correctAnswer, explanation, points, onChange, validationRef, }: QuestionEditorAdapterProps): import("react").JSX.Element;
6
- export declare function renderImageObjectMatchingEditor({ content, correctAnswer, explanation, points, onChange, validationRef, }: QuestionEditorAdapterProps): import("react").JSX.Element;
@@ -1 +0,0 @@
1
- "use client";import{jsx as n}from"react/jsx-runtime";import{FillMissingWordsInGridCreator as e}from"../../types/fill-missing-words-in-grid/FillMissingWordsInGridCreator";import{LabelThePictureCreator as o}from"../../types/label-the-picture/LabelThePictureCreator";import{LookPictureFillWordHintCreator as r}from"../../types/look-picture-fill-word-hint/LookPictureFillWordHintCreator";import{ReadAndColorObjectsCreator as t}from"../../types/read-and-color-objects/ReadAndColorObjectsCreator";import{ImageObjectMatchingCreator as i}from"../../types/image-object-matching/ImageObjectMatchingCreator";export function renderFillMissingWordsInGridEditor({content:o,correctAnswer:r,onChange:t}){const i={content:{grid:o.grid||[],rows:o.rows||5,columns:o.columns||5,disabledCells:o.disabledCells||[]},answer:{answers:r?.answers||{},caseSensitive:r?.caseSensitive??!1}};return n(e,{initialData:i,onChange:n=>{t?.({content:{grid:n?.content?.grid,rows:n?.content?.rows,columns:n?.content?.columns,disabledCells:n?.content?.disabledCells},answer:{answers:n?.answer?.answers,caseSensitive:n?.answer?.caseSensitive},explanation:n?.explanation,points:n?.points})}})}export function renderLabelThePictureEditor({content:e,explanation:r,points:t,onChange:i,validationRef:a}){const s={imageUrl:e.imageUrl||"",wordBank:e.wordBank||[],labels:e.labels||[],explanation:r||"",points:t||1};return n(o,{initialData:s,validationRef:a,onChange:n=>{const e={};(n?.labels||[]).forEach(n=>{!n.isPreFilled&&n.correctAnswer&&(e[n.id]=n.correctAnswer)}),i?.({content:{imageUrl:n?.imageUrl,wordBank:n?.wordBank,labels:n?.labels},answer:{labels:e},explanation:n?.explanation,points:n?.points})}})}export function renderLookPictureFillWordHintEditor({content:e,correctAnswer:o,explanation:t,points:i,onChange:a,validationRef:s}){const l={subQuestions:[{id:"edit-1",imageUrl:e.imageUrl||"",word:e.word||"",correctAnswer:o?.correctAnswer||""}],hintLetters:[],explanation:t||"",points:i||1};return n(r,{initialData:l,validationRef:s,onChange:n=>{const e=n?.subQuestions?.[0]||{};a?.({content:{imageUrl:e.imageUrl,word:e.word},answer:{correctAnswer:e.correctAnswer},explanation:n?.explanation,points:n?.points})}})}export function renderReadAndColorObjectsEditor({content:e,correctAnswer:o,explanation:r,points:i,onChange:a,validationRef:s}){const l={backgroundImageUrl:e.backgroundImageUrl||"",colorNodes:e.colorNodes||[],regionNodes:e.regionNodes||[],instructions:e.instructions||[],regions:o?.regions||{},explanation:r||"",points:i||1};return n(t,{initialData:l,validationRef:s,onChange:n=>{a?.({content:{backgroundImageUrl:n?.backgroundImageUrl,colorNodes:n?.colorNodes,regionNodes:n?.regionNodes,instructions:n?.instructions},answer:{regions:n?.regions},explanation:n?.explanation,points:n?.points})}})}export function renderImageObjectMatchingEditor({content:e,correctAnswer:o,explanation:r,points:t,onChange:a,validationRef:s}){const l={backgroundImageUrl:e.backgroundImageUrl||"",colorNodes:e.colorNodes||[],regionNodes:e.regionNodes||[],instructions:e.instructions||[],regions:o?.regions||{},explanation:r||"",points:t||1};return n(i,{initialData:l,validationRef:s,onChange:n=>{a?.({content:{backgroundImageUrl:n?.backgroundImageUrl,colorNodes:n?.colorNodes,regionNodes:n?.regionNodes,instructions:n?.instructions},answer:{regions:n?.regions},explanation:n?.explanation,points:n?.points})}})}
@@ -1 +0,0 @@
1
- export type { QuestionEditorAdapterProps, QuestionEditorChangeData } from '../types';
@@ -1,8 +0,0 @@
1
- interface UnsupportedEditorFallbackProps {
2
- questionType: string;
3
- content: Record<string, unknown>;
4
- correctAnswer: Record<string, unknown> | null;
5
- explanation?: string | null;
6
- }
7
- export declare function UnsupportedEditorFallback({ questionType, content, correctAnswer, explanation, }: UnsupportedEditorFallbackProps): import("react").JSX.Element;
8
- export {};
@@ -1 +0,0 @@
1
- "use client";import{jsx as e,jsxs as r}from"react/jsx-runtime";import{t}from"../../../../shared/lib/i18n";export function UnsupportedEditorFallback({questionType:a,content:d,correctAnswer:i,explanation:n}){return r("div",{className:"space-y-6",children:[e("div",{className:"bg-yellow-50 border border-yellow-200 rounded-lg p-4",children:r("p",{className:"text-yellow-800 text-sm",children:[e("strong",{children:t("admin.questionBank.dialog.edit.unsupportedNote")})," ",t("admin.questionBank.dialog.edit.unsupportedType",{type:a})]})}),r("div",{className:"grid gap-4 md:grid-cols-2",children:[r("div",{children:[e("p",{className:"text-sm font-medium text-gray-700 mb-2",children:t("admin.questionBank.dialog.edit.contentLabel")}),e("pre",{className:"max-h-60 overflow-auto rounded-lg bg-gray-50 p-3 text-xs text-gray-900 border border-gray-200",children:JSON.stringify(d,null,2)})]}),i&&r("div",{children:[e("p",{className:"text-sm font-medium text-gray-700 mb-2",children:t("admin.questionBank.dialog.edit.answerLabel")}),e("pre",{className:"max-h-60 overflow-auto rounded-lg bg-gray-50 p-3 text-xs text-gray-900 border border-gray-200",children:JSON.stringify(i,null,2)})]})]}),n&&r("div",{children:[e("p",{className:"text-sm font-medium text-gray-700 mb-2",children:t("admin.questionBank.dialog.edit.explanationLabel")}),e("div",{className:"bg-blue-50 border border-blue-200 rounded-lg p-3 text-sm text-gray-900",children:n})]})]})}
@@ -1,5 +0,0 @@
1
- import type { QuestionEditorAdapterProps } from './types';
2
- export declare function renderReadPassageAndAnswerQuestionsEditor({ content, correctAnswer, explanation, points, onChange, validationRef, }: QuestionEditorAdapterProps): import("react").JSX.Element;
3
- export declare function renderWriteAShortLetterEditor({ content, explanation, points, onChange, validationRef, }: QuestionEditorAdapterProps): import("react").JSX.Element;
4
- export declare function renderWriteCorrectVerbFormEditor({ content, correctAnswer, explanation, points, onChange, validationRef, }: QuestionEditorAdapterProps): import("react").JSX.Element;
5
- export declare function renderFillInBlankEditor({ content, correctAnswer, explanation, points, onChange, validationRef, }: QuestionEditorAdapterProps): import("react").JSX.Element;
@@ -1 +0,0 @@
1
- "use client";import{jsx as n}from"react/jsx-runtime";import{ReadPassageAndAnswerQuestionsCreator as t}from"../../types/read-passage-and-answer-questions/ReadPassageAndAnswerQuestionsCreator";import{WriteAShortLetterCreator as e}from"../../types/write-a-short-letter/WriteAShortLetterCreator";import{WriteCorrectVerbFormCreator as i}from"../../types/write-correct-verb-form/WriteCorrectVerbFormCreator";import{FillInBlankCreator as o}from"../../types/fill-in-blank/FillInBlankCreator";export function renderReadPassageAndAnswerQuestionsEditor({content:e,correctAnswer:i,explanation:o,points:s,onChange:r,validationRef:a}){const c={passageTitle:"",passage:"",instructions:"",singleQuestion:{id:"edit-1",question:e.question||"",options:e.options||["","","",""],correctAnswer:i?.correctAnswer??-1,points:s||1},explanation:o||"",points:s||1};return n(t,{initialData:c,validationRef:a,onChange:n=>{const t=n?.singleQuestion||{};r?.({content:{question:t.question,options:t.options},answer:{correctAnswer:t.correctAnswer},explanation:n?.explanation,points:n?.points||t.points})}})}export function renderWriteAShortLetterEditor({content:t,explanation:i,points:o,onChange:s,validationRef:r}){const a={informations:t.informations||[],minWords:t.minWords||25,maxWords:t.maxWords||50,instruction:t.instructions?.mainInstruction||"",explanation:i||"",points:o||1};return n(e,{initialData:a,validationRef:r,onChange:n=>{s?.({content:{informations:n?.informations,minWords:n?.minWords,maxWords:n?.maxWords,instructions:{mainInstruction:n?.instruction}},answer:null,explanation:n?.explanation,points:n?.points})}})}export function renderWriteCorrectVerbFormEditor({content:t,correctAnswer:e,explanation:o,points:s,onChange:r,validationRef:a}){const c={sentence:t.sentence||"",verbHint:t.verbHint||"",correctAnswer:e?.correctAnswer||"",caseSensitive:e?.caseSensitive??!1,instruction:t.instruction||"Write the correct form of the verb in parentheses to complete each sentence. Pay attention to the tense.",explanation:o||"",points:s||1};return n(i,{initialData:c,validationRef:a,onChange:n=>{r?.({content:{sentence:n?.sentence,verbHint:n?.verbHint},answer:{correctAnswer:n?.correctAnswer,caseSensitive:n?.caseSensitive},explanation:n?.explanation,points:n?.points})}})}export function renderFillInBlankEditor({content:t,correctAnswer:e,explanation:i,points:s,onChange:r,validationRef:a}){const c={question:t.question||"",answers:e?.answers||[],caseSensitive:e?.caseSensitive??!1,showHints:t.showHints??!1,hints:t.hints||[],audioUrl:t.audioUrl||"",explanation:i||"",points:s||1};return n(o,{initialData:c,validationRef:a,onChange:n=>{r?.({content:{question:n?.question,showHints:n?.showHints??!1,hints:n?.showHints&&n?.hints||[],audioUrl:n?.audioUrl||""},answer:{answers:n?.answers,caseSensitive:n?.caseSensitive},explanation:n?.explanation,points:n?.points})}})}
@@ -1,4 +0,0 @@
1
- export { EditQuestionBankDialog } from './EditQuestionBankDialog';
2
- export { QuestionEditorRenderer, QuestionBankEditorType } from './QuestionEditorRenderer';
3
- export { DifficultyLevel, DIFFICULTY_LEVELS, parseDifficultyLevel } from './difficulty';
4
- export type { EditQuestionBankDialogProps, QuestionBankEditItem, QuestionEditorChangeData, QuestionEditorRendererProps, SkillType, UpdateQuestionBankDto, } from './types';
@@ -1 +0,0 @@
1
- export{EditQuestionBankDialog}from"./EditQuestionBankDialog";export{QuestionEditorRenderer,QuestionBankEditorType}from"./QuestionEditorRenderer";export{DifficultyLevel,DIFFICULTY_LEVELS,parseDifficultyLevel}from"./difficulty";
@@ -1,59 +0,0 @@
1
- import type { MutableRefObject } from 'react';
2
- import type { ValidationRef } from '../creator/dedicated-component-router';
3
- import type { DifficultyLevel } from './difficulty';
4
- export type SkillType = 'READING' | 'WRITING' | 'LISTENING' | 'SPEAKING';
5
- /** Minimal question bank item required by the edit dialog. */
6
- export interface QuestionBankEditItem {
7
- id: string;
8
- code: string;
9
- title: string | null;
10
- content: Record<string, unknown>;
11
- correctAnswer: Record<string, unknown> | null;
12
- questionType: string;
13
- difficulty: DifficultyLevel | string;
14
- skill: SkillType | string | null;
15
- points: string | number;
16
- explanation: string | null;
17
- }
18
- /** Payload host apps pass to their update API. */
19
- export interface UpdateQuestionBankDto {
20
- code?: string;
21
- title?: string;
22
- content?: Record<string, unknown>;
23
- correctAnswer?: Record<string, unknown>;
24
- difficulty?: DifficultyLevel;
25
- skill?: SkillType;
26
- points?: number;
27
- explanation?: string;
28
- }
29
- export interface EditQuestionBankDialogProps {
30
- open: boolean;
31
- onOpenChange: (open: boolean) => void;
32
- question: QuestionBankEditItem | null;
33
- onSave: (data: UpdateQuestionBankDto) => void;
34
- saving: boolean;
35
- }
36
- export interface QuestionEditorChangeData {
37
- content: Record<string, unknown>;
38
- answer: Record<string, unknown> | null;
39
- explanation?: string;
40
- points?: number;
41
- }
42
- export interface QuestionEditorRendererProps {
43
- questionType: string;
44
- content: Record<string, unknown>;
45
- correctAnswer: Record<string, unknown> | null;
46
- explanation?: string | null;
47
- points?: number;
48
- onChange?: (data: QuestionEditorChangeData) => void;
49
- onSave?: (data: unknown) => void;
50
- validationRef?: MutableRefObject<ValidationRef | null>;
51
- }
52
- export interface QuestionEditorAdapterProps {
53
- content: Record<string, unknown>;
54
- correctAnswer: Record<string, unknown> | null;
55
- explanation?: string | null;
56
- points?: number;
57
- onChange?: (data: QuestionEditorChangeData) => void;
58
- validationRef: MutableRefObject<ValidationRef | null>;
59
- }