@thanh01.pmt/interactive-quiz-kit 1.0.38 → 1.0.40

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.
package/dist/react-ui.mjs CHANGED
@@ -121614,7 +121614,9 @@ var EditQuestionModal = ({
121614
121614
  questionData,
121615
121615
  onSave
121616
121616
  }) => {
121617
- const [editedQuestion, setEditedQuestion] = useState(null);
121617
+ const [editedQuestion, setEditedQuestion] = useState(
121618
+ null
121619
+ );
121618
121620
  useEffect(() => {
121619
121621
  if (questionData) {
121620
121622
  setEditedQuestion(JSON.parse(JSON.stringify(questionData)));
@@ -121624,7 +121626,9 @@ var EditQuestionModal = ({
121624
121626
  return null;
121625
121627
  }
121626
121628
  const handleBaseFieldChange = (field, value) => {
121627
- setEditedQuestion((prev) => prev ? { ...prev, [field]: value } : null);
121629
+ setEditedQuestion(
121630
+ (prev) => prev ? { ...prev, [field]: value } : null
121631
+ );
121628
121632
  };
121629
121633
  const handleSpecificFieldChange = (updates) => {
121630
121634
  setEditedQuestion((prev) => {
@@ -121647,83 +121651,267 @@ var EditQuestionModal = ({
121647
121651
  if (!editedQuestion) return /* @__PURE__ */ React162__default.createElement("p", null, "Loading question data...");
121648
121652
  switch (editedQuestion.questionType) {
121649
121653
  case "true_false":
121650
- return /* @__PURE__ */ React162__default.createElement(TrueFalseQuestionForm, { question: editedQuestion, onFormChange: handleSpecificFieldChange });
121654
+ return /* @__PURE__ */ React162__default.createElement(
121655
+ TrueFalseQuestionForm,
121656
+ {
121657
+ question: editedQuestion,
121658
+ onFormChange: handleSpecificFieldChange
121659
+ }
121660
+ );
121651
121661
  case "multiple_choice":
121652
- return /* @__PURE__ */ React162__default.createElement(MultipleChoiceQuestionForm, { question: editedQuestion, onFormChange: handleSpecificFieldChange });
121662
+ return /* @__PURE__ */ React162__default.createElement(
121663
+ MultipleChoiceQuestionForm,
121664
+ {
121665
+ question: editedQuestion,
121666
+ onFormChange: handleSpecificFieldChange
121667
+ }
121668
+ );
121653
121669
  case "multiple_response":
121654
- return /* @__PURE__ */ React162__default.createElement(MultipleResponseQuestionForm, { question: editedQuestion, onFormChange: handleSpecificFieldChange });
121670
+ return /* @__PURE__ */ React162__default.createElement(
121671
+ MultipleResponseQuestionForm,
121672
+ {
121673
+ question: editedQuestion,
121674
+ onFormChange: handleSpecificFieldChange
121675
+ }
121676
+ );
121655
121677
  case "short_answer":
121656
- return /* @__PURE__ */ React162__default.createElement(ShortAnswerQuestionForm, { question: editedQuestion, onFormChange: handleSpecificFieldChange });
121678
+ return /* @__PURE__ */ React162__default.createElement(
121679
+ ShortAnswerQuestionForm,
121680
+ {
121681
+ question: editedQuestion,
121682
+ onFormChange: handleSpecificFieldChange
121683
+ }
121684
+ );
121657
121685
  case "numeric":
121658
- return /* @__PURE__ */ React162__default.createElement(NumericQuestionForm, { question: editedQuestion, onFormChange: handleSpecificFieldChange });
121686
+ return /* @__PURE__ */ React162__default.createElement(
121687
+ NumericQuestionForm,
121688
+ {
121689
+ question: editedQuestion,
121690
+ onFormChange: handleSpecificFieldChange
121691
+ }
121692
+ );
121659
121693
  case "fill_in_the_blanks":
121660
- return /* @__PURE__ */ React162__default.createElement(FillInTheBlanksQuestionForm, { question: editedQuestion, onFormChange: handleSpecificFieldChange });
121694
+ return /* @__PURE__ */ React162__default.createElement(
121695
+ FillInTheBlanksQuestionForm,
121696
+ {
121697
+ question: editedQuestion,
121698
+ onFormChange: handleSpecificFieldChange
121699
+ }
121700
+ );
121661
121701
  case "sequence":
121662
- return /* @__PURE__ */ React162__default.createElement(SequenceQuestionForm, { question: editedQuestion, onFormChange: handleSpecificFieldChange });
121702
+ return /* @__PURE__ */ React162__default.createElement(
121703
+ SequenceQuestionForm,
121704
+ {
121705
+ question: editedQuestion,
121706
+ onFormChange: handleSpecificFieldChange
121707
+ }
121708
+ );
121663
121709
  case "matching":
121664
- return /* @__PURE__ */ React162__default.createElement(MatchingQuestionForm, { question: editedQuestion, onFormChange: handleSpecificFieldChange });
121710
+ return /* @__PURE__ */ React162__default.createElement(
121711
+ MatchingQuestionForm,
121712
+ {
121713
+ question: editedQuestion,
121714
+ onFormChange: handleSpecificFieldChange
121715
+ }
121716
+ );
121665
121717
  case "drag_and_drop":
121666
- return /* @__PURE__ */ React162__default.createElement(DragAndDropQuestionForm, { question: editedQuestion, onFormChange: handleSpecificFieldChange });
121718
+ return /* @__PURE__ */ React162__default.createElement(
121719
+ DragAndDropQuestionForm,
121720
+ {
121721
+ question: editedQuestion,
121722
+ onFormChange: handleSpecificFieldChange
121723
+ }
121724
+ );
121667
121725
  case "hotspot":
121668
- return /* @__PURE__ */ React162__default.createElement(HotspotQuestionForm, { question: editedQuestion, onFormChange: handleSpecificFieldChange });
121726
+ return /* @__PURE__ */ React162__default.createElement(
121727
+ HotspotQuestionForm,
121728
+ {
121729
+ question: editedQuestion,
121730
+ onFormChange: handleSpecificFieldChange
121731
+ }
121732
+ );
121669
121733
  case "blockly_programming":
121670
- return /* @__PURE__ */ React162__default.createElement(BlocklyProgrammingQuestionForm, { question: editedQuestion, onFormChange: handleSpecificFieldChange });
121734
+ return /* @__PURE__ */ React162__default.createElement(
121735
+ BlocklyProgrammingQuestionForm,
121736
+ {
121737
+ question: editedQuestion,
121738
+ onFormChange: handleSpecificFieldChange
121739
+ }
121740
+ );
121671
121741
  case "scratch_programming":
121672
- return /* @__PURE__ */ React162__default.createElement(ScratchProgrammingQuestionForm, { question: editedQuestion, onFormChange: handleSpecificFieldChange });
121742
+ return /* @__PURE__ */ React162__default.createElement(
121743
+ ScratchProgrammingQuestionForm,
121744
+ {
121745
+ question: editedQuestion,
121746
+ onFormChange: handleSpecificFieldChange
121747
+ }
121748
+ );
121673
121749
  case "coding":
121674
- return /* @__PURE__ */ React162__default.createElement(CodingQuestionForm, { question: editedQuestion, onFormChange: handleSpecificFieldChange });
121750
+ return /* @__PURE__ */ React162__default.createElement(
121751
+ CodingQuestionForm,
121752
+ {
121753
+ question: editedQuestion,
121754
+ onFormChange: handleSpecificFieldChange
121755
+ }
121756
+ );
121675
121757
  default:
121676
121758
  return /* @__PURE__ */ React162__default.createElement("p", { className: "text-destructive" }, "Unsupported question type for editing");
121677
121759
  }
121678
121760
  };
121679
- return /* @__PURE__ */ React162__default.createElement(Dialog2, { open: isOpen, onOpenChange: (open2) => {
121680
- if (!open2) onClose();
121681
- } }, /* @__PURE__ */ React162__default.createElement(DialogContent2, { className: "sm:max-w-[600px] md:max-w-[800px] lg:max-w-[1000px] max-h-[90vh]" }, /* @__PURE__ */ React162__default.createElement(DialogHeader, null, /* @__PURE__ */ React162__default.createElement(DialogTitle2, { className: "font-headline text-2xl" }, questionData?.id && !questionData.id.startsWith("new_") && !questionData.id.startsWith("temp_") ? "Edit Question" : "Add New Question"), /* @__PURE__ */ React162__default.createElement(DialogDescription2, null, "Configure the details for this question. Current type: ", /* @__PURE__ */ React162__default.createElement("span", { className: "font-semibold" }, editedQuestion.questionType))), /* @__PURE__ */ React162__default.createElement(ScrollArea2, { className: "max-h-[calc(80vh-150px)] p-1 pr-6" }, /* @__PURE__ */ React162__default.createElement("div", { className: "space-y-6 p-4" }, /* @__PURE__ */ React162__default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React162__default.createElement(Label2, { htmlFor: "prompt", className: "font-semibold" }, "Question Prompt"), /* @__PURE__ */ React162__default.createElement(
121682
- SimpleMarkdownEditor,
121683
- {
121684
- value: editedQuestion.prompt,
121685
- onChange: (htmlContent) => handleBaseFieldChange("prompt", htmlContent)
121686
- }
121687
- )), renderSpecificForm(), /* @__PURE__ */ React162__default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4 pt-4 border-t" }, /* @__PURE__ */ React162__default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React162__default.createElement(Label2, { htmlFor: "points" }, "Points"), /* @__PURE__ */ React162__default.createElement(
121688
- Input,
121689
- {
121690
- id: "points",
121691
- type: "number",
121692
- value: editedQuestion.points || 0,
121693
- onChange: (e3) => handleBaseFieldChange("points", parseInt(e3.target.value, 10) || 0),
121694
- min: "0"
121695
- }
121696
- )), /* @__PURE__ */ React162__default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React162__default.createElement(Label2, { htmlFor: "difficulty" }, "Difficulty"), /* @__PURE__ */ React162__default.createElement(
121697
- Select2,
121698
- {
121699
- value: editedQuestion.difficulty || "medium",
121700
- onValueChange: (value) => handleBaseFieldChange("difficulty", value)
121701
- },
121702
- /* @__PURE__ */ React162__default.createElement(SelectTrigger2, null, /* @__PURE__ */ React162__default.createElement(SelectValue2, null)),
121703
- /* @__PURE__ */ React162__default.createElement(SelectContent2, null, /* @__PURE__ */ React162__default.createElement(SelectItem2, { value: "easy" }, "Easy"), /* @__PURE__ */ React162__default.createElement(SelectItem2, { value: "medium" }, "Medium"), /* @__PURE__ */ React162__default.createElement(SelectItem2, { value: "hard" }, "Hard"))
121704
- ))), /* @__PURE__ */ React162__default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React162__default.createElement(Label2, { htmlFor: "explanation" }, "Explanation (Optional)"), /* @__PURE__ */ React162__default.createElement(
121705
- SimpleMarkdownEditor,
121706
- {
121707
- value: editedQuestion.explanation || "",
121708
- onChange: (htmlContent) => handleBaseFieldChange("explanation", htmlContent),
121709
- minHeight: "100px"
121710
- }
121711
- )), /* @__PURE__ */ React162__default.createElement("details", { className: "group" }, /* @__PURE__ */ React162__default.createElement("summary", { className: "cursor-pointer font-semibold text-primary hover:underline" }, "Advanced Metadata (Optional)"), /* @__PURE__ */ React162__default.createElement("div", { className: "mt-4 space-y-4 p-4 border rounded-md group-open:animate-accordion-down" }, /* @__PURE__ */ React162__default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4" }, /* @__PURE__ */ React162__default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React162__default.createElement(Label2, { htmlFor: "learningObjective" }, "Learning Objective"), /* @__PURE__ */ React162__default.createElement(Input, { id: "learningObjective", value: editedQuestion.learningObjective || "", onChange: (e3) => handleBaseFieldChange("learningObjective", e3.target.value) })), /* @__PURE__ */ React162__default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React162__default.createElement(Label2, { htmlFor: "category" }, "Category"), /* @__PURE__ */ React162__default.createElement(Input, { id: "category", value: editedQuestion.category || "", onChange: (e3) => handleBaseFieldChange("category", e3.target.value) })), /* @__PURE__ */ React162__default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React162__default.createElement(Label2, { htmlFor: "topic" }, "Topic"), /* @__PURE__ */ React162__default.createElement(Input, { id: "topic", value: editedQuestion.topic || "", onChange: (e3) => handleBaseFieldChange("topic", e3.target.value) })), /* @__PURE__ */ React162__default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React162__default.createElement(Label2, { htmlFor: "bloomLevel" }, "Bloom's Level"), /* @__PURE__ */ React162__default.createElement(
121712
- Select2,
121761
+ return /* @__PURE__ */ React162__default.createElement(
121762
+ Dialog2,
121713
121763
  {
121714
- value: editedQuestion.bloomLevel || "__none__",
121715
- onValueChange: (value) => handleBaseFieldChange("bloomLevel", value === "__none__" ? void 0 : value)
121764
+ open: isOpen,
121765
+ onOpenChange: (open2) => {
121766
+ if (!open2) onClose();
121767
+ }
121716
121768
  },
121717
- /* @__PURE__ */ React162__default.createElement(SelectTrigger2, { id: "bloomLevel" }, /* @__PURE__ */ React162__default.createElement(SelectValue2, { placeholder: "Select Bloom Level..." })),
121718
- /* @__PURE__ */ React162__default.createElement(SelectContent2, null, bloomLevelOptionsForEdit.map((opt) => /* @__PURE__ */ React162__default.createElement(SelectItem2, { key: opt.value, value: opt.value }, opt.label)))
121719
- )), /* @__PURE__ */ React162__default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React162__default.createElement(Label2, { htmlFor: "gradeBand" }, "Grade Band"), /* @__PURE__ */ React162__default.createElement(Input, { id: "gradeBand", value: editedQuestion.gradeBand || "", onChange: (e3) => handleBaseFieldChange("gradeBand", e3.target.value) })), /* @__PURE__ */ React162__default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React162__default.createElement(Label2, { htmlFor: "contextCode" }, "Context Code"), /* @__PURE__ */ React162__default.createElement(Input, { id: "contextCode", value: editedQuestion.contextCode || "", onChange: (e3) => handleBaseFieldChange("contextCode", e3.target.value) })), /* @__PURE__ */ React162__default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React162__default.createElement(Label2, { htmlFor: "course" }, "Course"), /* @__PURE__ */ React162__default.createElement(Input, { id: "course", value: editedQuestion.course || "", onChange: (e3) => handleBaseFieldChange("course", e3.target.value) })), /* @__PURE__ */ React162__default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React162__default.createElement(Label2, { htmlFor: "glossary" }, "Glossary Terms (comma-separated)"), /* @__PURE__ */ React162__default.createElement(
121720
- Input,
121721
- {
121722
- id: "glossary",
121723
- value: Array.isArray(editedQuestion.glossary) ? editedQuestion.glossary.join(", ") : "",
121724
- onChange: (e3) => handleBaseFieldChange("glossary", e3.target.value.split(",").map((s4) => s4.trim()).filter((s4) => s4))
121725
- }
121726
- ))))))), /* @__PURE__ */ React162__default.createElement(DialogFooter, { className: "pt-4 border-t" }, /* @__PURE__ */ React162__default.createElement(DialogClose2, { asChild: true }, /* @__PURE__ */ React162__default.createElement(Button, { type: "button", variant: "outline" }, "Cancel")), /* @__PURE__ */ React162__default.createElement(Button, { type: "button", onClick: handleSaveClick }, /* @__PURE__ */ React162__default.createElement(Save, { className: "mr-2 h-4 w-4" }), " Save Question"))));
121769
+ /* @__PURE__ */ React162__default.createElement(DialogContent2, { className: "sm:max-w-[600px] md:max-w-[800px] lg:max-w-[1000px] max-h-[90vh]" }, /* @__PURE__ */ React162__default.createElement(DialogHeader, null, /* @__PURE__ */ React162__default.createElement(DialogTitle2, { className: "font-headline text-2xl" }, questionData?.id && !questionData.id.startsWith("new_") && !questionData.id.startsWith("temp_") ? "Edit Question" : "Add New Question"), /* @__PURE__ */ React162__default.createElement(DialogDescription2, null, "Configure the details for this question. Current type:", " ", /* @__PURE__ */ React162__default.createElement("span", { className: "font-semibold" }, editedQuestion.questionType))), /* @__PURE__ */ React162__default.createElement(ScrollArea2, { className: "max-h-[calc(80vh-150px)] p-1 pr-6" }, /* @__PURE__ */ React162__default.createElement("div", { className: "space-y-6 p-4" }, /* @__PURE__ */ React162__default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React162__default.createElement(Label2, { htmlFor: "prompt", className: "font-semibold" }, "Question Prompt"), /* @__PURE__ */ React162__default.createElement(
121770
+ SimpleMarkdownEditor,
121771
+ {
121772
+ value: editedQuestion.prompt,
121773
+ onChange: (htmlContent) => handleBaseFieldChange("prompt", htmlContent)
121774
+ }
121775
+ )), renderSpecificForm(), /* @__PURE__ */ React162__default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4 pt-4 border-t" }, /* @__PURE__ */ React162__default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React162__default.createElement(Label2, { htmlFor: "points" }, "Points"), /* @__PURE__ */ React162__default.createElement(
121776
+ Input,
121777
+ {
121778
+ id: "points",
121779
+ type: "number",
121780
+ value: editedQuestion.points || 0,
121781
+ onChange: (e3) => handleBaseFieldChange(
121782
+ "points",
121783
+ parseInt(e3.target.value, 10) || 0
121784
+ ),
121785
+ min: "0"
121786
+ }
121787
+ )), /* @__PURE__ */ React162__default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React162__default.createElement(Label2, { htmlFor: "difficulty" }, "Difficulty"), /* @__PURE__ */ React162__default.createElement(
121788
+ Select2,
121789
+ {
121790
+ value: editedQuestion.difficulty || "medium",
121791
+ onValueChange: (value) => handleBaseFieldChange(
121792
+ "difficulty",
121793
+ value
121794
+ )
121795
+ },
121796
+ /* @__PURE__ */ React162__default.createElement(SelectTrigger2, null, /* @__PURE__ */ React162__default.createElement(SelectValue2, null)),
121797
+ /* @__PURE__ */ React162__default.createElement(SelectContent2, null, /* @__PURE__ */ React162__default.createElement(SelectItem2, { value: "easy" }, "Easy"), /* @__PURE__ */ React162__default.createElement(SelectItem2, { value: "medium" }, "Medium"), /* @__PURE__ */ React162__default.createElement(SelectItem2, { value: "hard" }, "Hard"))
121798
+ ))), /* @__PURE__ */ React162__default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React162__default.createElement(Label2, { htmlFor: "explanation" }, "Explanation (Optional)"), /* @__PURE__ */ React162__default.createElement(
121799
+ SimpleMarkdownEditor,
121800
+ {
121801
+ value: editedQuestion.explanation || "",
121802
+ onChange: (htmlContent) => handleBaseFieldChange(
121803
+ "explanation",
121804
+ htmlContent
121805
+ ),
121806
+ minHeight: "100px"
121807
+ }
121808
+ )), /* @__PURE__ */ React162__default.createElement("details", { className: "group" }, /* @__PURE__ */ React162__default.createElement("summary", { className: "cursor-pointer font-semibold text-primary hover:underline" }, "Advanced Metadata (Optional)"), /* @__PURE__ */ React162__default.createElement("div", { className: "mt-4 space-y-4 p-4 border rounded-md group-open:animate-accordion-down" }, /* @__PURE__ */ React162__default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4" }, /* @__PURE__ */ React162__default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React162__default.createElement(Label2, { htmlFor: "questionCode" }, "Question Code (Business ID)"), /* @__PURE__ */ React162__default.createElement(
121809
+ Input,
121810
+ {
121811
+ id: "questionCode",
121812
+ value: editedQuestion.code || "",
121813
+ onChange: (e3) => handleBaseFieldChange(
121814
+ "code",
121815
+ e3.target.value.toUpperCase()
121816
+ ),
121817
+ placeholder: "e.g., MATH-ALG-001"
121818
+ }
121819
+ )), /* @__PURE__ */ React162__default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React162__default.createElement(Label2, { htmlFor: "learningObjective" }, "Learning Objective"), /* @__PURE__ */ React162__default.createElement(
121820
+ Input,
121821
+ {
121822
+ id: "learningObjective",
121823
+ value: editedQuestion.learningObjective || "",
121824
+ onChange: (e3) => handleBaseFieldChange(
121825
+ "learningObjective",
121826
+ e3.target.value
121827
+ )
121828
+ }
121829
+ )), /* @__PURE__ */ React162__default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React162__default.createElement(Label2, { htmlFor: "category" }, "Category"), /* @__PURE__ */ React162__default.createElement(
121830
+ Input,
121831
+ {
121832
+ id: "category",
121833
+ value: editedQuestion.category || "",
121834
+ onChange: (e3) => handleBaseFieldChange(
121835
+ "category",
121836
+ e3.target.value
121837
+ )
121838
+ }
121839
+ )), /* @__PURE__ */ React162__default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React162__default.createElement(Label2, { htmlFor: "topic" }, "Topic"), /* @__PURE__ */ React162__default.createElement(
121840
+ Input,
121841
+ {
121842
+ id: "topic",
121843
+ value: editedQuestion.topic || "",
121844
+ onChange: (e3) => handleBaseFieldChange(
121845
+ "topic",
121846
+ e3.target.value
121847
+ )
121848
+ }
121849
+ )), /* @__PURE__ */ React162__default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React162__default.createElement(Label2, { htmlFor: "bloomLevel" }, "Bloom's Level"), /* @__PURE__ */ React162__default.createElement(
121850
+ Select2,
121851
+ {
121852
+ value: editedQuestion.bloomLevel || "__none__",
121853
+ onValueChange: (value) => handleBaseFieldChange(
121854
+ "bloomLevel",
121855
+ value === "__none__" ? void 0 : value
121856
+ )
121857
+ },
121858
+ /* @__PURE__ */ React162__default.createElement(SelectTrigger2, { id: "bloomLevel" }, /* @__PURE__ */ React162__default.createElement(SelectValue2, { placeholder: "Select Bloom Level..." })),
121859
+ /* @__PURE__ */ React162__default.createElement(SelectContent2, null, bloomLevelOptionsForEdit.map(
121860
+ (opt) => /* @__PURE__ */ React162__default.createElement(
121861
+ SelectItem2,
121862
+ {
121863
+ key: opt.value,
121864
+ value: opt.value
121865
+ },
121866
+ opt.label
121867
+ )
121868
+ ))
121869
+ )), /* @__PURE__ */ React162__default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React162__default.createElement(Label2, { htmlFor: "gradeBand" }, "Grade Band"), /* @__PURE__ */ React162__default.createElement(
121870
+ Input,
121871
+ {
121872
+ id: "gradeBand",
121873
+ value: editedQuestion.gradeBand || "",
121874
+ onChange: (e3) => handleBaseFieldChange(
121875
+ "gradeBand",
121876
+ e3.target.value
121877
+ )
121878
+ }
121879
+ )), /* @__PURE__ */ React162__default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React162__default.createElement(Label2, { htmlFor: "contextCode" }, "Context Code"), /* @__PURE__ */ React162__default.createElement(
121880
+ Input,
121881
+ {
121882
+ id: "contextCode",
121883
+ value: editedQuestion.contextCode || "",
121884
+ onChange: (e3) => handleBaseFieldChange(
121885
+ "contextCode",
121886
+ e3.target.value
121887
+ )
121888
+ }
121889
+ )), /* @__PURE__ */ React162__default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React162__default.createElement(Label2, { htmlFor: "course" }, "Course"), /* @__PURE__ */ React162__default.createElement(
121890
+ Input,
121891
+ {
121892
+ id: "course",
121893
+ value: editedQuestion.course || "",
121894
+ onChange: (e3) => handleBaseFieldChange(
121895
+ "course",
121896
+ e3.target.value
121897
+ )
121898
+ }
121899
+ )), /* @__PURE__ */ React162__default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React162__default.createElement(Label2, { htmlFor: "glossary" }, "Glossary Terms (comma-separated)"), /* @__PURE__ */ React162__default.createElement(
121900
+ Input,
121901
+ {
121902
+ id: "glossary",
121903
+ value: Array.isArray(
121904
+ editedQuestion.glossary
121905
+ ) ? editedQuestion.glossary.join(
121906
+ ", "
121907
+ ) : "",
121908
+ onChange: (e3) => handleBaseFieldChange(
121909
+ "glossary",
121910
+ e3.target.value.split(",").map((s4) => s4.trim()).filter((s4) => s4)
121911
+ )
121912
+ }
121913
+ ))))))), /* @__PURE__ */ React162__default.createElement(DialogFooter, { className: "pt-4 border-t" }, /* @__PURE__ */ React162__default.createElement(DialogClose2, { asChild: true }, /* @__PURE__ */ React162__default.createElement(Button, { type: "button", variant: "outline" }, "Cancel")), /* @__PURE__ */ React162__default.createElement(Button, { type: "button", onClick: handleSaveClick }, /* @__PURE__ */ React162__default.createElement(Save, { className: "mr-2 h-4 w-4" }), " Save Question")))
121914
+ );
121727
121915
  };
121728
121916
  var APIKeyManagerModal = ({ isOpen, onClose }) => {
121729
121917
  const [geminiApiKey, setGeminiApiKey] = useState("");
@@ -125701,6 +125889,8 @@ var QuizEditorService = class {
125701
125889
  static createNewQuestionTemplate(type) {
125702
125890
  const baseNewQuestion = {
125703
125891
  id: generateUniqueId(`new_${type}_`),
125892
+ // NEW: Initialize the code property
125893
+ code: "",
125704
125894
  questionType: type,
125705
125895
  prompt: "",
125706
125896
  points: 10,
@@ -125766,7 +125956,6 @@ var QuizEditorService = class {
125766
125956
  testCases: [],
125767
125957
  functionSignature: "",
125768
125958
  points: 25
125769
- // Coding questions are worth more by default
125770
125959
  };
125771
125960
  default:
125772
125961
  const _exhaustiveCheck = type;
@@ -163478,9 +163667,9 @@ var ClientTranslation = ({ tKey, options, fallback: fallback2 }) => {
163478
163667
  setIsMounted(true);
163479
163668
  }, []);
163480
163669
  if (!isMounted) {
163481
- return /* @__PURE__ */ React.createElement(React.Fragment, null, fallback2);
163670
+ return /* @__PURE__ */ React162__default.createElement(React162__default.Fragment, null, fallback2);
163482
163671
  }
163483
- return /* @__PURE__ */ React.createElement(React.Fragment, null, t4(tKey, options));
163672
+ return /* @__PURE__ */ React162__default.createElement(React162__default.Fragment, null, t4(tKey, options));
163484
163673
  };
163485
163674
 
163486
163675
  // src/react-ui/components/app/PersonalPracticeDashboard.tsx
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import React__default from 'react';
3
- import { s as QuizConfig, g as QuizQuestion } from './quiz-config-Df_89hFx.js';
3
+ import { s as QuizConfig, g as QuizQuestion } from './quiz-config-o4j2dfsu.js';
4
4
  import { QuestionInBank, QuestionFilters as QuestionFilters$1 } from './index.js';
5
5
  import * as class_variance_authority_types from 'class-variance-authority/types';
6
6
  import * as ToastPrimitives from '@radix-ui/react-toast';
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import React__default from 'react';
3
- import { s as QuizConfig, g as QuizQuestion } from './quiz-config-Df_89hFx.cjs';
3
+ import { s as QuizConfig, g as QuizQuestion } from './quiz-config-o4j2dfsu.cjs';
4
4
  import { QuestionInBank, QuestionFilters as QuestionFilters$1 } from './index.cjs';
5
5
  import * as class_variance_authority_types from 'class-variance-authority/types';
6
6
  import * as ToastPrimitives from '@radix-ui/react-toast';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thanh01.pmt/interactive-quiz-kit",
3
- "version": "1.0.38",
3
+ "version": "1.0.40",
4
4
  "description": "A comprehensive library for creating, managing, and playing interactive quizzes, with AI generation and SCORM support.",
5
5
  "keywords": [
6
6
  "react",