@thanh01.pmt/interactive-quiz-kit 1.0.65 → 1.0.66

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.
@@ -73046,6 +73046,13 @@ var AIQuestionGeneratorModal = ({
73046
73046
  const [gradeBand, setGradeBand] = React95.useState("");
73047
73047
  const [bloomLevelCode, setBloomLevelCode] = React95.useState("");
73048
73048
  const [selectedQuestionType, setSelectedQuestionType] = React95.useState("multiple_choice");
73049
+ const [numberOfOptions, setNumberOfOptions] = React95.useState(4);
73050
+ const [minCorrectAnswers, setMinCorrectAnswers] = React95.useState(2);
73051
+ const [maxCorrectAnswers, setMaxCorrectAnswers] = React95.useState(3);
73052
+ const [isCaseSensitive, setIsCaseSensitive] = React95.useState(false);
73053
+ const [numberOfBlanks, setNumberOfBlanks] = React95.useState(2);
73054
+ const [numberOfSequenceItems, setNumberOfSequenceItems] = React95.useState(4);
73055
+ const [numberOfMatchingPairs, setNumberOfMatchingPairs] = React95.useState(4);
73049
73056
  const [isApiKeyManagerModalOpen, setIsApiKeyManagerModalOpen] = React95.useState(false);
73050
73057
  const [geminiApiKeyExists, setGeminiApiKeyExists] = React95.useState(false);
73051
73058
  const finalQuestionType = questionTypeProp || selectedQuestionType;
@@ -73103,9 +73110,26 @@ var AIQuestionGeneratorModal = ({
73103
73110
  generatedResult = await generateTrueFalseQuestion(baseClientInput, geminiKey);
73104
73111
  break;
73105
73112
  case "multiple_choice":
73106
- generatedResult = await generateMCQQuestion({ ...baseClientInput, numberOfOptions: 4 }, geminiKey);
73113
+ generatedResult = await generateMCQQuestion({ ...baseClientInput, numberOfOptions }, geminiKey);
73114
+ break;
73115
+ case "multiple_response":
73116
+ generatedResult = await generateMRQQuestion({ ...baseClientInput, numberOfOptions, minCorrectAnswers, maxCorrectAnswers }, geminiKey);
73117
+ break;
73118
+ case "short_answer":
73119
+ generatedResult = await generateShortAnswerQuestion({ ...baseClientInput, isCaseSensitive }, geminiKey);
73120
+ break;
73121
+ case "numeric":
73122
+ generatedResult = await generateNumericQuestion({ ...baseClientInput, allowDecimals: true, tolerance: 0 }, geminiKey);
73123
+ break;
73124
+ case "fill_in_the_blanks":
73125
+ generatedResult = await generateFillInTheBlanksQuestion({ ...baseClientInput, numberOfBlanks, isCaseSensitive }, geminiKey);
73126
+ break;
73127
+ case "sequence":
73128
+ generatedResult = await generateSequenceQuestion({ ...baseClientInput, numberOfItems: numberOfSequenceItems }, geminiKey);
73129
+ break;
73130
+ case "matching":
73131
+ generatedResult = await generateMatchingQuestion({ ...baseClientInput, numberOfPairs: numberOfMatchingPairs, shuffleOptions: true }, geminiKey);
73107
73132
  break;
73108
- // Add other cases as needed
73109
73133
  default:
73110
73134
  throw new Error(`AI generation for '${finalQuestionType}' is not implemented in this flow.`);
73111
73135
  }
@@ -73144,6 +73168,32 @@ var AIQuestionGeneratorModal = ({
73144
73168
  gradeLevels: gradeLevels.map((g) => ({ value: g.code, label: g.name })),
73145
73169
  bloomLevels: bloomLevels.map((b) => ({ value: b.code, label: b.name }))
73146
73170
  };
73171
+ const renderSpecificParams = () => {
73172
+ switch (finalQuestionType) {
73173
+ case "multiple_choice":
73174
+ case "multiple_response":
73175
+ return /* @__PURE__ */ React95__namespace.default.createElement("div", { className: "space-y-2 pt-4 border-t" }, /* @__PURE__ */ React95__namespace.default.createElement(Label2, { htmlFor: "ai-num-options" }, "Number of Options (2-8)"), /* @__PURE__ */ React95__namespace.default.createElement(
73176
+ Input,
73177
+ {
73178
+ id: "ai-num-options",
73179
+ type: "number",
73180
+ value: numberOfOptions,
73181
+ onChange: (e2) => setNumberOfOptions(parseInt(e2.target.value, 10)),
73182
+ min: 2,
73183
+ max: 8
73184
+ }
73185
+ ), finalQuestionType === "multiple_response" && /* @__PURE__ */ React95__namespace.default.createElement(React95__namespace.default.Fragment, null, /* @__PURE__ */ React95__namespace.default.createElement(Label2, { htmlFor: "ai-min-correct" }, "Min Correct Answers"), /* @__PURE__ */ React95__namespace.default.createElement(Input, { id: "ai-min-correct", type: "number", value: minCorrectAnswers, onChange: (e2) => setMinCorrectAnswers(parseInt(e2.target.value, 10)), min: 1, max: numberOfOptions }), /* @__PURE__ */ React95__namespace.default.createElement(Label2, { htmlFor: "ai-max-correct" }, "Max Correct Answers"), /* @__PURE__ */ React95__namespace.default.createElement(Input, { id: "ai-max-correct", type: "number", value: maxCorrectAnswers, onChange: (e2) => setMaxCorrectAnswers(parseInt(e2.target.value, 10)), min: minCorrectAnswers, max: numberOfOptions })));
73186
+ case "short_answer":
73187
+ case "fill_in_the_blanks":
73188
+ return /* @__PURE__ */ React95__namespace.default.createElement("div", { className: "flex items-center space-x-2 pt-4 border-t" }, /* @__PURE__ */ React95__namespace.default.createElement("input", { type: "checkbox", id: "ai-case-sensitive", checked: isCaseSensitive, onChange: (e2) => setIsCaseSensitive(e2.target.checked), className: "h-4 w-4 rounded border-gray-300 text-primary focus:ring-primary" }), /* @__PURE__ */ React95__namespace.default.createElement(Label2, { htmlFor: "ai-case-sensitive" }, "Case Sensitive Answers"), finalQuestionType === "fill_in_the_blanks" && /* @__PURE__ */ React95__namespace.default.createElement("div", { className: "space-y-1 ml-4" }, /* @__PURE__ */ React95__namespace.default.createElement(Label2, { htmlFor: "ai-num-blanks" }, "Number of Blanks (1-5)"), /* @__PURE__ */ React95__namespace.default.createElement(Input, { id: "ai-num-blanks", type: "number", value: numberOfBlanks, onChange: (e2) => setNumberOfBlanks(parseInt(e2.target.value, 10)), min: 1, max: 5 })));
73189
+ case "sequence":
73190
+ return /* @__PURE__ */ React95__namespace.default.createElement("div", { className: "space-y-2 pt-4 border-t" }, /* @__PURE__ */ React95__namespace.default.createElement(Label2, { htmlFor: "ai-num-seq-items" }, "Number of Items to Sequence (2-10)"), /* @__PURE__ */ React95__namespace.default.createElement(Input, { id: "ai-num-seq-items", type: "number", value: numberOfSequenceItems, onChange: (e2) => setNumberOfSequenceItems(parseInt(e2.target.value, 10)), min: 2, max: 10 }));
73191
+ case "matching":
73192
+ return /* @__PURE__ */ React95__namespace.default.createElement("div", { className: "space-y-2 pt-4 border-t" }, /* @__PURE__ */ React95__namespace.default.createElement(Label2, { htmlFor: "ai-num-match-pairs" }, "Number of Pairs to Match (2-8)"), /* @__PURE__ */ React95__namespace.default.createElement(Input, { id: "ai-num-match-pairs", type: "number", value: numberOfMatchingPairs, onChange: (e2) => setNumberOfMatchingPairs(parseInt(e2.target.value, 10)), min: 2, max: 8 }));
73193
+ default:
73194
+ return null;
73195
+ }
73196
+ };
73147
73197
  return /* @__PURE__ */ React95__namespace.default.createElement(React95__namespace.default.Fragment, null, /* @__PURE__ */ React95__namespace.default.createElement(Dialog2, { open: isOpen, onOpenChange: (open) => {
73148
73198
  if (!open) onClose();
73149
73199
  } }, /* @__PURE__ */ React95__namespace.default.createElement(DialogContent2, { className: "sm:max-w-[600px]" }, /* @__PURE__ */ React95__namespace.default.createElement(DialogHeader, null, /* @__PURE__ */ React95__namespace.default.createElement(DialogTitle2, { className: "flex items-center font-headline text-2xl" }, /* @__PURE__ */ React95__namespace.default.createElement(WandSparkles, { className: "mr-2 h-6 w-6 text-primary" }), " AI Question Generator"), /* @__PURE__ */ React95__namespace.default.createElement(DialogDescription2, null, "Provide a prompt and metadata to generate a '", finalQuestionType, "' question.")), /* @__PURE__ */ React95__namespace.default.createElement("div", { className: "space-y-4 py-4 max-h-[60vh] overflow-y-auto px-2" }, !geminiApiKeyExists && /* @__PURE__ */ React95__namespace.default.createElement("div", { className: "p-3 mb-4 border border-amber-500 bg-amber-50 rounded-md text-amber-700" }), !questionTypeProp && /* @__PURE__ */ React95__namespace.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React95__namespace.default.createElement(Label2, { htmlFor: "ai-q-type-select" }, "Question Type"), /* @__PURE__ */ React95__namespace.default.createElement(Select2, { value: selectedQuestionType, onValueChange: (v) => setSelectedQuestionType(v) }, /* @__PURE__ */ React95__namespace.default.createElement(SelectTrigger2, { id: "ai-q-type-select" }, /* @__PURE__ */ React95__namespace.default.createElement(SelectValue2, null)), /* @__PURE__ */ React95__namespace.default.createElement(SelectContent2, null, supportedQuestionTypesForAI.map((type) => /* @__PURE__ */ React95__namespace.default.createElement(SelectItem2, { key: type.value, value: type.value }, type.label))))), /* @__PURE__ */ React95__namespace.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React95__namespace.default.createElement(Label2, { htmlFor: "ai-prompt" }, "Prompt / Topic"), /* @__PURE__ */ React95__namespace.default.createElement(
@@ -73155,7 +73205,7 @@ var AIQuestionGeneratorModal = ({
73155
73205
  placeholder: "e.g., The process of photosynthesis, The causes of World War II, Basic Algebra Equations",
73156
73206
  className: "min-h-[100px]"
73157
73207
  }
73158
- )), /* @__PURE__ */ React95__namespace.default.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ React95__namespace.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React95__namespace.default.createElement(Label2, null, "Subject"), /* @__PURE__ */ React95__namespace.default.createElement(EditableCombobox, { options: comboboxOptions.subjects, value: subjectCode, onChange: setSubjectCode, placeholder: "Select or type a Subject..." })), /* @__PURE__ */ React95__namespace.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React95__namespace.default.createElement(Label2, null, "Topic"), /* @__PURE__ */ React95__namespace.default.createElement(EditableCombobox, { options: comboboxOptions.topics, value: topicCode, onChange: setTopicCode, placeholder: "Select or type a Topic...", disabled: !subjectCode })), /* @__PURE__ */ React95__namespace.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React95__namespace.default.createElement(Label2, null, "Grade Level"), /* @__PURE__ */ React95__namespace.default.createElement(EditableCombobox, { options: comboboxOptions.gradeLevels, value: gradeBand, onChange: setGradeBand, placeholder: "Select or type a Grade..." })), /* @__PURE__ */ React95__namespace.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React95__namespace.default.createElement(Label2, null, "Bloom's Level"), /* @__PURE__ */ React95__namespace.default.createElement(EditableCombobox, { options: comboboxOptions.bloomLevels, value: bloomLevelCode, onChange: setBloomLevelCode, placeholder: "Select a Bloom's Level..." }))), error && /* @__PURE__ */ React95__namespace.default.createElement("p", { className: "text-sm text-destructive flex items-center mt-2" }, /* @__PURE__ */ React95__namespace.default.createElement(TriangleAlert, { className: "mr-1 h-4 w-4" }), " ", error)), /* @__PURE__ */ React95__namespace.default.createElement(DialogFooter, null, /* @__PURE__ */ React95__namespace.default.createElement(DialogClose2, { asChild: true }, /* @__PURE__ */ React95__namespace.default.createElement(Button, { type: "button", variant: "outline" }, "Cancel")), /* @__PURE__ */ React95__namespace.default.createElement(Button, { type: "button", onClick: handleSubmit, disabled: isLoading || !prompt.trim() || !geminiApiKeyExists }, isLoading ? /* @__PURE__ */ React95__namespace.default.createElement(LoaderCircle, { className: "mr-2 h-4 w-4 animate-spin" }) : /* @__PURE__ */ React95__namespace.default.createElement(WandSparkles, { className: "mr-2 h-4 w-4" }), "Generate Question")))), /* @__PURE__ */ React95__namespace.default.createElement(APIKeyManagerModal, { isOpen: isApiKeyManagerModalOpen, onClose: handleApiKeyModalClose }));
73208
+ )), /* @__PURE__ */ React95__namespace.default.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ React95__namespace.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React95__namespace.default.createElement(Label2, null, "Subject"), /* @__PURE__ */ React95__namespace.default.createElement(EditableCombobox, { options: comboboxOptions.subjects, value: subjectCode, onChange: setSubjectCode, placeholder: "Select or type a Subject..." })), /* @__PURE__ */ React95__namespace.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React95__namespace.default.createElement(Label2, null, "Topic"), /* @__PURE__ */ React95__namespace.default.createElement(EditableCombobox, { options: comboboxOptions.topics, value: topicCode, onChange: setTopicCode, placeholder: "Select or type a Topic...", disabled: !subjectCode })), /* @__PURE__ */ React95__namespace.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React95__namespace.default.createElement(Label2, null, "Grade Level"), /* @__PURE__ */ React95__namespace.default.createElement(EditableCombobox, { options: comboboxOptions.gradeLevels, value: gradeBand, onChange: setGradeBand, placeholder: "Select or type a Grade..." })), /* @__PURE__ */ React95__namespace.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React95__namespace.default.createElement(Label2, null, "Bloom's Level"), /* @__PURE__ */ React95__namespace.default.createElement(EditableCombobox, { options: comboboxOptions.bloomLevels, value: bloomLevelCode, onChange: setBloomLevelCode, placeholder: "Select a Bloom's Level..." }))), renderSpecificParams(), error && /* @__PURE__ */ React95__namespace.default.createElement("p", { className: "text-sm text-destructive flex items-center mt-2" }, /* @__PURE__ */ React95__namespace.default.createElement(TriangleAlert, { className: "mr-1 h-4 w-4" }), " ", error)), /* @__PURE__ */ React95__namespace.default.createElement(DialogFooter, null, /* @__PURE__ */ React95__namespace.default.createElement(DialogClose2, { asChild: true }, /* @__PURE__ */ React95__namespace.default.createElement(Button, { type: "button", variant: "outline" }, "Cancel")), /* @__PURE__ */ React95__namespace.default.createElement(Button, { type: "button", onClick: handleSubmit, disabled: isLoading || !prompt.trim() || !geminiApiKeyExists }, isLoading ? /* @__PURE__ */ React95__namespace.default.createElement(LoaderCircle, { className: "mr-2 h-4 w-4 animate-spin" }) : /* @__PURE__ */ React95__namespace.default.createElement(WandSparkles, { className: "mr-2 h-4 w-4" }), "Generate Question")))), /* @__PURE__ */ React95__namespace.default.createElement(APIKeyManagerModal, { isOpen: isApiKeyManagerModalOpen, onClose: handleApiKeyModalClose }));
73159
73209
  };
73160
73210
 
73161
73211
  // src/react-ui/components/authoring/AIFullQuizGeneratorModal.tsx
@@ -72981,6 +72981,13 @@ var AIQuestionGeneratorModal = ({
72981
72981
  const [gradeBand, setGradeBand] = useState("");
72982
72982
  const [bloomLevelCode, setBloomLevelCode] = useState("");
72983
72983
  const [selectedQuestionType, setSelectedQuestionType] = useState("multiple_choice");
72984
+ const [numberOfOptions, setNumberOfOptions] = useState(4);
72985
+ const [minCorrectAnswers, setMinCorrectAnswers] = useState(2);
72986
+ const [maxCorrectAnswers, setMaxCorrectAnswers] = useState(3);
72987
+ const [isCaseSensitive, setIsCaseSensitive] = useState(false);
72988
+ const [numberOfBlanks, setNumberOfBlanks] = useState(2);
72989
+ const [numberOfSequenceItems, setNumberOfSequenceItems] = useState(4);
72990
+ const [numberOfMatchingPairs, setNumberOfMatchingPairs] = useState(4);
72984
72991
  const [isApiKeyManagerModalOpen, setIsApiKeyManagerModalOpen] = useState(false);
72985
72992
  const [geminiApiKeyExists, setGeminiApiKeyExists] = useState(false);
72986
72993
  const finalQuestionType = questionTypeProp || selectedQuestionType;
@@ -73038,9 +73045,26 @@ var AIQuestionGeneratorModal = ({
73038
73045
  generatedResult = await generateTrueFalseQuestion(baseClientInput, geminiKey);
73039
73046
  break;
73040
73047
  case "multiple_choice":
73041
- generatedResult = await generateMCQQuestion({ ...baseClientInput, numberOfOptions: 4 }, geminiKey);
73048
+ generatedResult = await generateMCQQuestion({ ...baseClientInput, numberOfOptions }, geminiKey);
73049
+ break;
73050
+ case "multiple_response":
73051
+ generatedResult = await generateMRQQuestion({ ...baseClientInput, numberOfOptions, minCorrectAnswers, maxCorrectAnswers }, geminiKey);
73052
+ break;
73053
+ case "short_answer":
73054
+ generatedResult = await generateShortAnswerQuestion({ ...baseClientInput, isCaseSensitive }, geminiKey);
73055
+ break;
73056
+ case "numeric":
73057
+ generatedResult = await generateNumericQuestion({ ...baseClientInput, allowDecimals: true, tolerance: 0 }, geminiKey);
73058
+ break;
73059
+ case "fill_in_the_blanks":
73060
+ generatedResult = await generateFillInTheBlanksQuestion({ ...baseClientInput, numberOfBlanks, isCaseSensitive }, geminiKey);
73061
+ break;
73062
+ case "sequence":
73063
+ generatedResult = await generateSequenceQuestion({ ...baseClientInput, numberOfItems: numberOfSequenceItems }, geminiKey);
73064
+ break;
73065
+ case "matching":
73066
+ generatedResult = await generateMatchingQuestion({ ...baseClientInput, numberOfPairs: numberOfMatchingPairs, shuffleOptions: true }, geminiKey);
73042
73067
  break;
73043
- // Add other cases as needed
73044
73068
  default:
73045
73069
  throw new Error(`AI generation for '${finalQuestionType}' is not implemented in this flow.`);
73046
73070
  }
@@ -73079,6 +73103,32 @@ var AIQuestionGeneratorModal = ({
73079
73103
  gradeLevels: gradeLevels.map((g) => ({ value: g.code, label: g.name })),
73080
73104
  bloomLevels: bloomLevels.map((b) => ({ value: b.code, label: b.name }))
73081
73105
  };
73106
+ const renderSpecificParams = () => {
73107
+ switch (finalQuestionType) {
73108
+ case "multiple_choice":
73109
+ case "multiple_response":
73110
+ return /* @__PURE__ */ React95__default.createElement("div", { className: "space-y-2 pt-4 border-t" }, /* @__PURE__ */ React95__default.createElement(Label2, { htmlFor: "ai-num-options" }, "Number of Options (2-8)"), /* @__PURE__ */ React95__default.createElement(
73111
+ Input,
73112
+ {
73113
+ id: "ai-num-options",
73114
+ type: "number",
73115
+ value: numberOfOptions,
73116
+ onChange: (e2) => setNumberOfOptions(parseInt(e2.target.value, 10)),
73117
+ min: 2,
73118
+ max: 8
73119
+ }
73120
+ ), finalQuestionType === "multiple_response" && /* @__PURE__ */ React95__default.createElement(React95__default.Fragment, null, /* @__PURE__ */ React95__default.createElement(Label2, { htmlFor: "ai-min-correct" }, "Min Correct Answers"), /* @__PURE__ */ React95__default.createElement(Input, { id: "ai-min-correct", type: "number", value: minCorrectAnswers, onChange: (e2) => setMinCorrectAnswers(parseInt(e2.target.value, 10)), min: 1, max: numberOfOptions }), /* @__PURE__ */ React95__default.createElement(Label2, { htmlFor: "ai-max-correct" }, "Max Correct Answers"), /* @__PURE__ */ React95__default.createElement(Input, { id: "ai-max-correct", type: "number", value: maxCorrectAnswers, onChange: (e2) => setMaxCorrectAnswers(parseInt(e2.target.value, 10)), min: minCorrectAnswers, max: numberOfOptions })));
73121
+ case "short_answer":
73122
+ case "fill_in_the_blanks":
73123
+ return /* @__PURE__ */ React95__default.createElement("div", { className: "flex items-center space-x-2 pt-4 border-t" }, /* @__PURE__ */ React95__default.createElement("input", { type: "checkbox", id: "ai-case-sensitive", checked: isCaseSensitive, onChange: (e2) => setIsCaseSensitive(e2.target.checked), className: "h-4 w-4 rounded border-gray-300 text-primary focus:ring-primary" }), /* @__PURE__ */ React95__default.createElement(Label2, { htmlFor: "ai-case-sensitive" }, "Case Sensitive Answers"), finalQuestionType === "fill_in_the_blanks" && /* @__PURE__ */ React95__default.createElement("div", { className: "space-y-1 ml-4" }, /* @__PURE__ */ React95__default.createElement(Label2, { htmlFor: "ai-num-blanks" }, "Number of Blanks (1-5)"), /* @__PURE__ */ React95__default.createElement(Input, { id: "ai-num-blanks", type: "number", value: numberOfBlanks, onChange: (e2) => setNumberOfBlanks(parseInt(e2.target.value, 10)), min: 1, max: 5 })));
73124
+ case "sequence":
73125
+ return /* @__PURE__ */ React95__default.createElement("div", { className: "space-y-2 pt-4 border-t" }, /* @__PURE__ */ React95__default.createElement(Label2, { htmlFor: "ai-num-seq-items" }, "Number of Items to Sequence (2-10)"), /* @__PURE__ */ React95__default.createElement(Input, { id: "ai-num-seq-items", type: "number", value: numberOfSequenceItems, onChange: (e2) => setNumberOfSequenceItems(parseInt(e2.target.value, 10)), min: 2, max: 10 }));
73126
+ case "matching":
73127
+ return /* @__PURE__ */ React95__default.createElement("div", { className: "space-y-2 pt-4 border-t" }, /* @__PURE__ */ React95__default.createElement(Label2, { htmlFor: "ai-num-match-pairs" }, "Number of Pairs to Match (2-8)"), /* @__PURE__ */ React95__default.createElement(Input, { id: "ai-num-match-pairs", type: "number", value: numberOfMatchingPairs, onChange: (e2) => setNumberOfMatchingPairs(parseInt(e2.target.value, 10)), min: 2, max: 8 }));
73128
+ default:
73129
+ return null;
73130
+ }
73131
+ };
73082
73132
  return /* @__PURE__ */ React95__default.createElement(React95__default.Fragment, null, /* @__PURE__ */ React95__default.createElement(Dialog2, { open: isOpen, onOpenChange: (open) => {
73083
73133
  if (!open) onClose();
73084
73134
  } }, /* @__PURE__ */ React95__default.createElement(DialogContent2, { className: "sm:max-w-[600px]" }, /* @__PURE__ */ React95__default.createElement(DialogHeader, null, /* @__PURE__ */ React95__default.createElement(DialogTitle2, { className: "flex items-center font-headline text-2xl" }, /* @__PURE__ */ React95__default.createElement(WandSparkles, { className: "mr-2 h-6 w-6 text-primary" }), " AI Question Generator"), /* @__PURE__ */ React95__default.createElement(DialogDescription2, null, "Provide a prompt and metadata to generate a '", finalQuestionType, "' question.")), /* @__PURE__ */ React95__default.createElement("div", { className: "space-y-4 py-4 max-h-[60vh] overflow-y-auto px-2" }, !geminiApiKeyExists && /* @__PURE__ */ React95__default.createElement("div", { className: "p-3 mb-4 border border-amber-500 bg-amber-50 rounded-md text-amber-700" }), !questionTypeProp && /* @__PURE__ */ React95__default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React95__default.createElement(Label2, { htmlFor: "ai-q-type-select" }, "Question Type"), /* @__PURE__ */ React95__default.createElement(Select2, { value: selectedQuestionType, onValueChange: (v) => setSelectedQuestionType(v) }, /* @__PURE__ */ React95__default.createElement(SelectTrigger2, { id: "ai-q-type-select" }, /* @__PURE__ */ React95__default.createElement(SelectValue2, null)), /* @__PURE__ */ React95__default.createElement(SelectContent2, null, supportedQuestionTypesForAI.map((type) => /* @__PURE__ */ React95__default.createElement(SelectItem2, { key: type.value, value: type.value }, type.label))))), /* @__PURE__ */ React95__default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React95__default.createElement(Label2, { htmlFor: "ai-prompt" }, "Prompt / Topic"), /* @__PURE__ */ React95__default.createElement(
@@ -73090,7 +73140,7 @@ var AIQuestionGeneratorModal = ({
73090
73140
  placeholder: "e.g., The process of photosynthesis, The causes of World War II, Basic Algebra Equations",
73091
73141
  className: "min-h-[100px]"
73092
73142
  }
73093
- )), /* @__PURE__ */ React95__default.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ React95__default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React95__default.createElement(Label2, null, "Subject"), /* @__PURE__ */ React95__default.createElement(EditableCombobox, { options: comboboxOptions.subjects, value: subjectCode, onChange: setSubjectCode, placeholder: "Select or type a Subject..." })), /* @__PURE__ */ React95__default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React95__default.createElement(Label2, null, "Topic"), /* @__PURE__ */ React95__default.createElement(EditableCombobox, { options: comboboxOptions.topics, value: topicCode, onChange: setTopicCode, placeholder: "Select or type a Topic...", disabled: !subjectCode })), /* @__PURE__ */ React95__default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React95__default.createElement(Label2, null, "Grade Level"), /* @__PURE__ */ React95__default.createElement(EditableCombobox, { options: comboboxOptions.gradeLevels, value: gradeBand, onChange: setGradeBand, placeholder: "Select or type a Grade..." })), /* @__PURE__ */ React95__default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React95__default.createElement(Label2, null, "Bloom's Level"), /* @__PURE__ */ React95__default.createElement(EditableCombobox, { options: comboboxOptions.bloomLevels, value: bloomLevelCode, onChange: setBloomLevelCode, placeholder: "Select a Bloom's Level..." }))), error && /* @__PURE__ */ React95__default.createElement("p", { className: "text-sm text-destructive flex items-center mt-2" }, /* @__PURE__ */ React95__default.createElement(TriangleAlert, { className: "mr-1 h-4 w-4" }), " ", error)), /* @__PURE__ */ React95__default.createElement(DialogFooter, null, /* @__PURE__ */ React95__default.createElement(DialogClose2, { asChild: true }, /* @__PURE__ */ React95__default.createElement(Button, { type: "button", variant: "outline" }, "Cancel")), /* @__PURE__ */ React95__default.createElement(Button, { type: "button", onClick: handleSubmit, disabled: isLoading || !prompt.trim() || !geminiApiKeyExists }, isLoading ? /* @__PURE__ */ React95__default.createElement(LoaderCircle, { className: "mr-2 h-4 w-4 animate-spin" }) : /* @__PURE__ */ React95__default.createElement(WandSparkles, { className: "mr-2 h-4 w-4" }), "Generate Question")))), /* @__PURE__ */ React95__default.createElement(APIKeyManagerModal, { isOpen: isApiKeyManagerModalOpen, onClose: handleApiKeyModalClose }));
73143
+ )), /* @__PURE__ */ React95__default.createElement("div", { className: "grid grid-cols-2 gap-4" }, /* @__PURE__ */ React95__default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React95__default.createElement(Label2, null, "Subject"), /* @__PURE__ */ React95__default.createElement(EditableCombobox, { options: comboboxOptions.subjects, value: subjectCode, onChange: setSubjectCode, placeholder: "Select or type a Subject..." })), /* @__PURE__ */ React95__default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React95__default.createElement(Label2, null, "Topic"), /* @__PURE__ */ React95__default.createElement(EditableCombobox, { options: comboboxOptions.topics, value: topicCode, onChange: setTopicCode, placeholder: "Select or type a Topic...", disabled: !subjectCode })), /* @__PURE__ */ React95__default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React95__default.createElement(Label2, null, "Grade Level"), /* @__PURE__ */ React95__default.createElement(EditableCombobox, { options: comboboxOptions.gradeLevels, value: gradeBand, onChange: setGradeBand, placeholder: "Select or type a Grade..." })), /* @__PURE__ */ React95__default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React95__default.createElement(Label2, null, "Bloom's Level"), /* @__PURE__ */ React95__default.createElement(EditableCombobox, { options: comboboxOptions.bloomLevels, value: bloomLevelCode, onChange: setBloomLevelCode, placeholder: "Select a Bloom's Level..." }))), renderSpecificParams(), error && /* @__PURE__ */ React95__default.createElement("p", { className: "text-sm text-destructive flex items-center mt-2" }, /* @__PURE__ */ React95__default.createElement(TriangleAlert, { className: "mr-1 h-4 w-4" }), " ", error)), /* @__PURE__ */ React95__default.createElement(DialogFooter, null, /* @__PURE__ */ React95__default.createElement(DialogClose2, { asChild: true }, /* @__PURE__ */ React95__default.createElement(Button, { type: "button", variant: "outline" }, "Cancel")), /* @__PURE__ */ React95__default.createElement(Button, { type: "button", onClick: handleSubmit, disabled: isLoading || !prompt.trim() || !geminiApiKeyExists }, isLoading ? /* @__PURE__ */ React95__default.createElement(LoaderCircle, { className: "mr-2 h-4 w-4 animate-spin" }) : /* @__PURE__ */ React95__default.createElement(WandSparkles, { className: "mr-2 h-4 w-4" }), "Generate Question")))), /* @__PURE__ */ React95__default.createElement(APIKeyManagerModal, { isOpen: isApiKeyManagerModalOpen, onClose: handleApiKeyModalClose }));
73094
73144
  };
73095
73145
 
73096
73146
  // src/react-ui/components/authoring/AIFullQuizGeneratorModal.tsx