import { QuestionFeedback, QuestionType } from './types'; export type QuestionContent = string | { text?: string; markdown?: string; imageUrl?: string; imageAlt?: string; }; export interface QuestionOptionJson { id: string; label: QuestionContent; disabled?: boolean; } export interface QuestionJsonBase { id: string; stem: QuestionContent; hint?: QuestionContent; number?: number | string; } export interface SingleChoiceQuestionJson extends QuestionJsonBase { type: "single-choice"; options: QuestionOptionJson[]; correctAnswer?: string; explanation?: QuestionContent; } export interface MultipleSelectQuestionJson extends QuestionJsonBase { type: "multiple-select"; options: QuestionOptionJson[]; correctAnswers?: string[]; explanation?: QuestionContent; } export interface TrueFalseLabelsJson { true?: QuestionContent; false?: QuestionContent; } export interface TrueFalseQuestionJson extends QuestionJsonBase { type: "true-false"; correctAnswer?: boolean; labels?: TrueFalseLabelsJson; explanation?: QuestionContent; } export interface MatchingQuestionJson extends QuestionJsonBase { type: "matching"; left: QuestionOptionJson[]; right: QuestionOptionJson[]; leftTitle?: QuestionContent; rightTitle?: QuestionContent; correctPairs?: Record; explanation?: QuestionContent; } export interface SentenceOrderQuestionJson extends QuestionJsonBase { type: "sentence-order"; items: QuestionOptionJson[]; initialOrder?: string[]; correctOrder?: string[]; explanation?: QuestionContent; } export type QuestionJson = SingleChoiceQuestionJson | MultipleSelectQuestionJson | TrueFalseQuestionJson | MatchingQuestionJson | SentenceOrderQuestionJson; export type QuestionAnswerValue = string | string[] | boolean | Record | null; export type QuestionAnswers = Record; export interface QuestionResult { id: string; type: QuestionType; correct: boolean | null; feedback?: QuestionFeedback; }