@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.
- package/dist/authoring.cjs +53 -3
- package/dist/authoring.mjs +53 -3
- package/dist/react-ui.cjs +1503 -1453
- package/dist/react-ui.mjs +1503 -1453
- package/package.json +1 -1
package/dist/authoring.cjs
CHANGED
|
@@ -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
|
|
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
|
package/dist/authoring.mjs
CHANGED
|
@@ -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
|
|
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
|