@thanh01.pmt/interactive-quiz-kit 1.0.81 → 1.0.83
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/ai.cjs +0 -4
- package/dist/ai.mjs +0 -4
- package/dist/authoring.cjs +1112 -1187
- package/dist/authoring.d.cts +1 -1
- package/dist/authoring.d.ts +1 -1
- package/dist/authoring.mjs +841 -916
- package/dist/index.d.cts +7 -5
- package/dist/index.d.ts +7 -5
- package/dist/react-ui.cjs +45 -120
- package/dist/react-ui.d.cts +1 -1
- package/dist/react-ui.d.ts +1 -1
- package/dist/react-ui.mjs +45 -120
- package/dist/{toaster-Bj78wmSz.d.ts → toaster-DZskgIbn.d.ts} +4 -1
- package/dist/{toaster-CexT11VU.d.cts → toaster-DrUkr-h7.d.cts} +4 -1
- package/package.json +1 -1
package/dist/react-ui.mjs
CHANGED
|
@@ -101960,17 +101960,13 @@ TopicDataService.HEADER_MAP = {
|
|
|
101960
101960
|
"LO Description": "description",
|
|
101961
101961
|
"Subject": "subject",
|
|
101962
101962
|
"Subject Code": "subjectCode",
|
|
101963
|
-
// New
|
|
101964
101963
|
"Category": "category",
|
|
101965
101964
|
"Category Code": "categoryCode",
|
|
101966
|
-
// New
|
|
101967
101965
|
"Topic": "topic",
|
|
101968
101966
|
"Topic Code": "topicCode",
|
|
101969
|
-
// New
|
|
101970
101967
|
"Keywords": "keywords",
|
|
101971
101968
|
"Grade": "grade",
|
|
101972
101969
|
"Grade Code": "gradeCode",
|
|
101973
|
-
// New
|
|
101974
101970
|
"STEM Element(s)": "stemElements",
|
|
101975
101971
|
"Bloom\u2019s Level(s) Guideline": "bloomLevelsGuideline"
|
|
101976
101972
|
};
|
|
@@ -138963,7 +138959,7 @@ function TopicManager({
|
|
|
138963
138959
|
setCurrentItem(topic);
|
|
138964
138960
|
setItemName(topic.name);
|
|
138965
138961
|
setItemCode(topic.code);
|
|
138966
|
-
setSelectedSubjectCode(topic.subjectCode);
|
|
138962
|
+
setSelectedSubjectCode(topic.subjectCode ?? "");
|
|
138967
138963
|
setIsDialogOpen(true);
|
|
138968
138964
|
};
|
|
138969
138965
|
const handleDeleteItem = (topic) => {
|
|
@@ -139041,7 +139037,7 @@ function TopicManager({
|
|
|
139041
139037
|
const getSubjectName = (subjectCode) => {
|
|
139042
139038
|
return subjects.find((s4) => s4.code === subjectCode)?.name || "N/A";
|
|
139043
139039
|
};
|
|
139044
|
-
return /* @__PURE__ */ React169__default.createElement(Card, null, /* @__PURE__ */ React169__default.createElement(CardHeader, null, /* @__PURE__ */ React169__default.createElement(CardTitle, { className: "flex justify-between items-center" }, /* @__PURE__ */ React169__default.createElement("span", { className: "flex items-center" }, /* @__PURE__ */ React169__default.createElement(Tag, { className: "mr-2 h-5 w-5 text-primary" }), " Manage Topics"), /* @__PURE__ */ React169__default.createElement("div", { className: "flex items-center gap-2" }, onBulkAdd && /* @__PURE__ */ React169__default.createElement(MetadataImportControls, { metadataName: "Topics", onImport: handleImport }), /* @__PURE__ */ React169__default.createElement(Button, { onClick: handleAddItem, size: "sm", disabled: subjects.length === 0 }, /* @__PURE__ */ React169__default.createElement(CirclePlus, { className: "mr-2 h-4 w-4" }), " Add Topic"))), subjects.length === 0 && !isLoading && /* @__PURE__ */ React169__default.createElement("p", { className: "text-sm text-destructive" }, "Please add subjects before adding topics.")), /* @__PURE__ */ React169__default.createElement(CardContent, null, isLoading ? /* @__PURE__ */ React169__default.createElement("div", { className: "flex justify-center items-center h-32" }, /* @__PURE__ */ React169__default.createElement(LoaderCircle, { className: "h-8 w-8 animate-spin text-primary" })) : topics.length === 0 ? /* @__PURE__ */ React169__default.createElement("p", { className: "text-center text-muted-foreground py-4" }, "No topics found. Add one to get started!") : /* @__PURE__ */ React169__default.createElement("div", { className: "overflow-x-auto" }, /* @__PURE__ */ React169__default.createElement(Table3, null, /* @__PURE__ */ React169__default.createElement(TableHeader, null, /* @__PURE__ */ React169__default.createElement(TableRow, null, /* @__PURE__ */ React169__default.createElement(TableHead, null, "Code"), /* @__PURE__ */ React169__default.createElement(TableHead, null, "Name"), /* @__PURE__ */ React169__default.createElement(TableHead, null, "Subject"), /* @__PURE__ */ React169__default.createElement(TableHead, { className: "text-right w-[120px]" }, "Actions"))), /* @__PURE__ */ React169__default.createElement(TableBody, null, topics.map((topic) => /* @__PURE__ */ React169__default.createElement(TableRow, { key: topic.id }, /* @__PURE__ */ React169__default.createElement(TableCell, { className: "font-mono text-xs" }, topic.code), /* @__PURE__ */ React169__default.createElement(TableCell, { className: "font-Medium" }, topic.name), /* @__PURE__ */ React169__default.createElement(TableCell, null, getSubjectName(topic.subjectCode), " (", topic.subjectCode, ")"), /* @__PURE__ */ React169__default.createElement(TableCell, { className: "text-right" }, /* @__PURE__ */ React169__default.createElement(Button, { variant: "ghost", size: "icon", onClick: () => handleEditItem(topic), className: "mr-2" }, /* @__PURE__ */ React169__default.createElement(PenLine, { className: "h-4 w-4" })), /* @__PURE__ */ React169__default.createElement(Button, { variant: "ghost", size: "icon", onClick: () => handleDeleteItem(topic), className: "text-destructive hover:text-destructive" }, /* @__PURE__ */ React169__default.createElement(Trash2, { className: "h-4 w-4" })))))))), /* @__PURE__ */ React169__default.createElement(Dialog2, { open: isDialogOpen, onOpenChange: setIsDialogOpen }, /* @__PURE__ */ React169__default.createElement(DialogContent2, { className: "sm:max-w-md" }, /* @__PURE__ */ React169__default.createElement(DialogHeader, null, /* @__PURE__ */ React169__default.createElement(DialogTitle2, null, currentItem ? "Edit Topic" : "Add New Topic")), /* @__PURE__ */ React169__default.createElement("div", { className: "grid gap-4 py-4" }, /* @__PURE__ */ React169__default.createElement("div", { className: "grid gap-2" }, /* @__PURE__ */ React169__default.createElement(Label2, { htmlFor: "itemCode" }, "Topic Code"), /* @__PURE__ */ React169__default.createElement(Input, { id: "itemCode", value: itemCode, onChange: (e3) => setItemCode(e3.target.value.toUpperCase()), placeholder: "e.g., ALG-BASICS", disabled: !!currentItem })), /* @__PURE__ */ React169__default.createElement("div", { className: "grid gap-2" }, /* @__PURE__ */ React169__default.createElement(Label2, { htmlFor: "itemName" }, "Topic Name"), /* @__PURE__ */ React169__default.createElement(Input, { id: "itemName", value: itemName, onChange: (e3) => setItemName(e3.target.value), placeholder: "e.g., Algebra Basics" })), /* @__PURE__ */ React169__default.createElement("div", { className: "grid gap-2" }, /* @__PURE__ */ React169__default.createElement(Label2, { htmlFor: "subjectCode" }, "Subject"), /* @__PURE__ */ React169__default.createElement(Select2, { value: selectedSubjectCode, onValueChange: setSelectedSubjectCode, disabled: subjects.length === 0 }, /* @__PURE__ */ React169__default.createElement(SelectTrigger2, { id: "subjectCode" }, /* @__PURE__ */ React169__default.createElement(SelectValue2, { placeholder: "Select a subject" })), /* @__PURE__ */ React169__default.createElement(SelectContent2, null, subjects.map((subject) => /* @__PURE__ */ React169__default.createElement(SelectItem2, { key: subject.code, value: subject.code }, subject.name, " (", subject.code, ")")))))), /* @__PURE__ */ React169__default.createElement(DialogFooter, null, /* @__PURE__ */ React169__default.createElement(Button, { type: "button", variant: "outline", onClick: () => setIsDialogOpen(false), disabled: isPending }, "Cancel"), /* @__PURE__ */ React169__default.createElement(Button, { type: "submit", onClick: handleSubmit, disabled: isPending || !itemName.trim() || !itemCode.trim() || !selectedSubjectCode }, isPending && /* @__PURE__ */ React169__default.createElement(LoaderCircle, { className: "mr-2 h-4 w-4 animate-spin" }), " Save")))), /* @__PURE__ */ React169__default.createElement(AlertDialog2, { open: isAlertOpen, onOpenChange: setIsAlertOpen }, /* @__PURE__ */ React169__default.createElement(AlertDialogContent2, null, /* @__PURE__ */ React169__default.createElement(AlertDialogHeader, null, /* @__PURE__ */ React169__default.createElement(AlertDialogTitle2, null, "Are you sure?"), /* @__PURE__ */ React169__default.createElement(AlertDialogDescription2, null, 'This will permanently delete topic "', itemToDelete?.name, '".')), /* @__PURE__ */ React169__default.createElement(AlertDialogFooter, null, /* @__PURE__ */ React169__default.createElement(AlertDialogCancel2, { disabled: isPending }, "Cancel"), /* @__PURE__ */ React169__default.createElement(AlertDialogAction2, { onClick: confirmDelete, disabled: isPending, className: "bg-destructive hover:bg-destructive/90" }, isPending && /* @__PURE__ */ React169__default.createElement(LoaderCircle, { className: "mr-2 h-4 w-4 animate-spin" }), " Delete"))))));
|
|
139040
|
+
return /* @__PURE__ */ React169__default.createElement(Card, null, /* @__PURE__ */ React169__default.createElement(CardHeader, null, /* @__PURE__ */ React169__default.createElement(CardTitle, { className: "flex justify-between items-center" }, /* @__PURE__ */ React169__default.createElement("span", { className: "flex items-center" }, /* @__PURE__ */ React169__default.createElement(Tag, { className: "mr-2 h-5 w-5 text-primary" }), " Manage Topics"), /* @__PURE__ */ React169__default.createElement("div", { className: "flex items-center gap-2" }, onBulkAdd && /* @__PURE__ */ React169__default.createElement(MetadataImportControls, { metadataName: "Topics", onImport: handleImport }), /* @__PURE__ */ React169__default.createElement(Button, { onClick: handleAddItem, size: "sm", disabled: subjects.length === 0 }, /* @__PURE__ */ React169__default.createElement(CirclePlus, { className: "mr-2 h-4 w-4" }), " Add Topic"))), subjects.length === 0 && !isLoading && /* @__PURE__ */ React169__default.createElement("p", { className: "text-sm text-destructive" }, "Please add subjects before adding topics.")), /* @__PURE__ */ React169__default.createElement(CardContent, null, isLoading ? /* @__PURE__ */ React169__default.createElement("div", { className: "flex justify-center items-center h-32" }, /* @__PURE__ */ React169__default.createElement(LoaderCircle, { className: "h-8 w-8 animate-spin text-primary" })) : topics.length === 0 ? /* @__PURE__ */ React169__default.createElement("p", { className: "text-center text-muted-foreground py-4" }, "No topics found. Add one to get started!") : /* @__PURE__ */ React169__default.createElement("div", { className: "overflow-x-auto" }, /* @__PURE__ */ React169__default.createElement(Table3, null, /* @__PURE__ */ React169__default.createElement(TableHeader, null, /* @__PURE__ */ React169__default.createElement(TableRow, null, /* @__PURE__ */ React169__default.createElement(TableHead, null, "Code"), /* @__PURE__ */ React169__default.createElement(TableHead, null, "Name"), /* @__PURE__ */ React169__default.createElement(TableHead, null, "Subject"), /* @__PURE__ */ React169__default.createElement(TableHead, { className: "text-right w-[120px]" }, "Actions"))), /* @__PURE__ */ React169__default.createElement(TableBody, null, topics.map((topic) => /* @__PURE__ */ React169__default.createElement(TableRow, { key: topic.id }, /* @__PURE__ */ React169__default.createElement(TableCell, { className: "font-mono text-xs" }, topic.code), /* @__PURE__ */ React169__default.createElement(TableCell, { className: "font-Medium" }, topic.name), /* @__PURE__ */ React169__default.createElement(TableCell, null, getSubjectName(topic.subjectCode ?? ""), " (", topic.subjectCode, ")"), /* @__PURE__ */ React169__default.createElement(TableCell, { className: "text-right" }, /* @__PURE__ */ React169__default.createElement(Button, { variant: "ghost", size: "icon", onClick: () => handleEditItem(topic), className: "mr-2" }, /* @__PURE__ */ React169__default.createElement(PenLine, { className: "h-4 w-4" })), /* @__PURE__ */ React169__default.createElement(Button, { variant: "ghost", size: "icon", onClick: () => handleDeleteItem(topic), className: "text-destructive hover:text-destructive" }, /* @__PURE__ */ React169__default.createElement(Trash2, { className: "h-4 w-4" })))))))), /* @__PURE__ */ React169__default.createElement(Dialog2, { open: isDialogOpen, onOpenChange: setIsDialogOpen }, /* @__PURE__ */ React169__default.createElement(DialogContent2, { className: "sm:max-w-md" }, /* @__PURE__ */ React169__default.createElement(DialogHeader, null, /* @__PURE__ */ React169__default.createElement(DialogTitle2, null, currentItem ? "Edit Topic" : "Add New Topic")), /* @__PURE__ */ React169__default.createElement("div", { className: "grid gap-4 py-4" }, /* @__PURE__ */ React169__default.createElement("div", { className: "grid gap-2" }, /* @__PURE__ */ React169__default.createElement(Label2, { htmlFor: "itemCode" }, "Topic Code"), /* @__PURE__ */ React169__default.createElement(Input, { id: "itemCode", value: itemCode, onChange: (e3) => setItemCode(e3.target.value.toUpperCase()), placeholder: "e.g., ALG-BASICS", disabled: !!currentItem })), /* @__PURE__ */ React169__default.createElement("div", { className: "grid gap-2" }, /* @__PURE__ */ React169__default.createElement(Label2, { htmlFor: "itemName" }, "Topic Name"), /* @__PURE__ */ React169__default.createElement(Input, { id: "itemName", value: itemName, onChange: (e3) => setItemName(e3.target.value), placeholder: "e.g., Algebra Basics" })), /* @__PURE__ */ React169__default.createElement("div", { className: "grid gap-2" }, /* @__PURE__ */ React169__default.createElement(Label2, { htmlFor: "subjectCode" }, "Subject"), /* @__PURE__ */ React169__default.createElement(Select2, { value: selectedSubjectCode, onValueChange: setSelectedSubjectCode, disabled: subjects.length === 0 }, /* @__PURE__ */ React169__default.createElement(SelectTrigger2, { id: "subjectCode" }, /* @__PURE__ */ React169__default.createElement(SelectValue2, { placeholder: "Select a subject" })), /* @__PURE__ */ React169__default.createElement(SelectContent2, null, subjects.map((subject) => /* @__PURE__ */ React169__default.createElement(SelectItem2, { key: subject.code, value: subject.code }, subject.name, " (", subject.code, ")")))))), /* @__PURE__ */ React169__default.createElement(DialogFooter, null, /* @__PURE__ */ React169__default.createElement(Button, { type: "button", variant: "outline", onClick: () => setIsDialogOpen(false), disabled: isPending }, "Cancel"), /* @__PURE__ */ React169__default.createElement(Button, { type: "submit", onClick: handleSubmit, disabled: isPending || !itemName.trim() || !itemCode.trim() || !selectedSubjectCode }, isPending && /* @__PURE__ */ React169__default.createElement(LoaderCircle, { className: "mr-2 h-4 w-4 animate-spin" }), " Save")))), /* @__PURE__ */ React169__default.createElement(AlertDialog2, { open: isAlertOpen, onOpenChange: setIsAlertOpen }, /* @__PURE__ */ React169__default.createElement(AlertDialogContent2, null, /* @__PURE__ */ React169__default.createElement(AlertDialogHeader, null, /* @__PURE__ */ React169__default.createElement(AlertDialogTitle2, null, "Are you sure?"), /* @__PURE__ */ React169__default.createElement(AlertDialogDescription2, null, 'This will permanently delete topic "', itemToDelete?.name, '".')), /* @__PURE__ */ React169__default.createElement(AlertDialogFooter, null, /* @__PURE__ */ React169__default.createElement(AlertDialogCancel2, { disabled: isPending }, "Cancel"), /* @__PURE__ */ React169__default.createElement(AlertDialogAction2, { onClick: confirmDelete, disabled: isPending, className: "bg-destructive hover:bg-destructive/90" }, isPending && /* @__PURE__ */ React169__default.createElement(LoaderCircle, { className: "mr-2 h-4 w-4 animate-spin" }), " Delete"))))));
|
|
139045
139041
|
}
|
|
139046
139042
|
|
|
139047
139043
|
// src/react-ui/components/metadata/CategoryManager.tsx
|
|
@@ -139439,6 +139435,9 @@ init_react_shim();
|
|
|
139439
139435
|
function LearningObjectiveManager({
|
|
139440
139436
|
initialData,
|
|
139441
139437
|
subjects: subjectsProp,
|
|
139438
|
+
categories: categoriesProp,
|
|
139439
|
+
topics: topicsProp,
|
|
139440
|
+
gradeLevels: gradeLevelsProp,
|
|
139442
139441
|
isLoading: isLoadingProp,
|
|
139443
139442
|
onAdd,
|
|
139444
139443
|
onUpdate,
|
|
@@ -139447,6 +139446,9 @@ function LearningObjectiveManager({
|
|
|
139447
139446
|
}) {
|
|
139448
139447
|
const [items, setItems] = useState([]);
|
|
139449
139448
|
const [subjects, setSubjects] = useState([]);
|
|
139449
|
+
const [categories, setCategories] = useState([]);
|
|
139450
|
+
const [topics, setTopics] = useState([]);
|
|
139451
|
+
const [gradeLevels, setGradeLevels] = useState([]);
|
|
139450
139452
|
const [isLoading, setIsLoading] = useState(true);
|
|
139451
139453
|
const [isDialogOpen, setIsDialogOpen] = useState(false);
|
|
139452
139454
|
const [isAlertOpen, setIsAlertOpen] = useState(false);
|
|
@@ -139481,13 +139483,34 @@ function LearningObjectiveManager({
|
|
|
139481
139483
|
if (isControlled) {
|
|
139482
139484
|
setItems(initialData || []);
|
|
139483
139485
|
setSubjects(subjectsProp || []);
|
|
139486
|
+
setCategories(categoriesProp || []);
|
|
139487
|
+
setTopics(topicsProp || []);
|
|
139488
|
+
setGradeLevels(gradeLevelsProp || []);
|
|
139484
139489
|
setIsLoading(isLoadingProp || false);
|
|
139485
139490
|
} else {
|
|
139486
139491
|
refreshData();
|
|
139487
139492
|
}
|
|
139488
|
-
}, [isControlled, initialData, subjectsProp, isLoadingProp]);
|
|
139493
|
+
}, [isControlled, initialData, subjectsProp, categoriesProp, topicsProp, gradeLevelsProp, isLoadingProp]);
|
|
139494
|
+
const filteredCategories = useMemo(() => {
|
|
139495
|
+
if (!formState.subjectCode) return [];
|
|
139496
|
+
return categories.filter((c4) => c4.subjectCode === formState.subjectCode);
|
|
139497
|
+
}, [formState.subjectCode, categories]);
|
|
139498
|
+
const filteredTopics = useMemo(() => {
|
|
139499
|
+
if (!formState.categoryCode) return [];
|
|
139500
|
+
return topics.filter((t4) => t4.categoryCode === formState.categoryCode);
|
|
139501
|
+
}, [formState.categoryCode, topics]);
|
|
139489
139502
|
const handleFormChange = (field, value) => {
|
|
139490
|
-
setFormState((prev) =>
|
|
139503
|
+
setFormState((prev) => {
|
|
139504
|
+
const newState = { ...prev, [field]: value };
|
|
139505
|
+
if (field === "subjectCode") {
|
|
139506
|
+
newState.categoryCode = "";
|
|
139507
|
+
newState.topicCode = "";
|
|
139508
|
+
}
|
|
139509
|
+
if (field === "categoryCode") {
|
|
139510
|
+
newState.topicCode = "";
|
|
139511
|
+
}
|
|
139512
|
+
return newState;
|
|
139513
|
+
});
|
|
139491
139514
|
};
|
|
139492
139515
|
const handleAddItem = () => {
|
|
139493
139516
|
setCurrentItem(null);
|
|
@@ -139498,7 +139521,7 @@ function LearningObjectiveManager({
|
|
|
139498
139521
|
};
|
|
139499
139522
|
const handleEditItem = (item) => {
|
|
139500
139523
|
setCurrentItem(item);
|
|
139501
|
-
setFormState(item);
|
|
139524
|
+
setFormState({ ...item });
|
|
139502
139525
|
setIsDialogOpen(true);
|
|
139503
139526
|
};
|
|
139504
139527
|
const handleDeleteItem = (item) => {
|
|
@@ -139599,7 +139622,7 @@ function LearningObjectiveManager({
|
|
|
139599
139622
|
if (typeof rec["LO ID"] === "string" && rec["LO ID"].trim() && typeof rec["LO Description"] === "string" && rec["LO Description"].trim()) {
|
|
139600
139623
|
acc.valid.push({
|
|
139601
139624
|
code: rec["LO ID"],
|
|
139602
|
-
name: rec["LO Name"],
|
|
139625
|
+
name: rec["LO Name"] || rec["LO Description"],
|
|
139603
139626
|
description: rec["LO Description"],
|
|
139604
139627
|
subject: rec["Subject"] || "",
|
|
139605
139628
|
subjectCode: rec["Subject Code"] || rec["Subject"],
|
|
@@ -139667,141 +139690,43 @@ function LearningObjectiveManager({
|
|
|
139667
139690
|
className: "text-destructive hover:text-destructive"
|
|
139668
139691
|
},
|
|
139669
139692
|
/* @__PURE__ */ React169__default.createElement(Trash2, { className: "h-4 w-4" })
|
|
139670
|
-
))))))))), /* @__PURE__ */ React169__default.createElement(Dialog2, { open: isDialogOpen, onOpenChange: setIsDialogOpen }, /* @__PURE__ */ React169__default.createElement(DialogContent2, { className: "sm:max-w-2xl
|
|
139693
|
+
))))))))), /* @__PURE__ */ React169__default.createElement(Dialog2, { open: isDialogOpen, onOpenChange: setIsDialogOpen }, /* @__PURE__ */ React169__default.createElement(DialogContent2, { className: "sm:max-w-2xl max-h-[90vh] flex flex-col" }, /* @__PURE__ */ React169__default.createElement(DialogHeader, { className: "p-6 pb-0" }, /* @__PURE__ */ React169__default.createElement(DialogTitle2, null, currentItem ? "Edit Learning Objective" : "Add New Learning Objective")), /* @__PURE__ */ React169__default.createElement(ScrollArea2, { className: "flex-1 pr-1" }, /* @__PURE__ */ React169__default.createElement("div", { className: "px-6 py-4 grid gap-4" }, /* @__PURE__ */ React169__default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4" }, /* @__PURE__ */ React169__default.createElement("div", null, /* @__PURE__ */ React169__default.createElement(Label2, { htmlFor: "code" }, "LO Code"), /* @__PURE__ */ React169__default.createElement(
|
|
139671
139694
|
Input,
|
|
139672
139695
|
{
|
|
139673
139696
|
id: "code",
|
|
139674
139697
|
value: formState.code || "",
|
|
139675
|
-
onChange: (e3) => handleFormChange(
|
|
139676
|
-
"code",
|
|
139677
|
-
e3.target.value.toUpperCase()
|
|
139678
|
-
),
|
|
139698
|
+
onChange: (e3) => handleFormChange("code", e3.target.value.toUpperCase()),
|
|
139679
139699
|
disabled: !!currentItem
|
|
139680
139700
|
}
|
|
139681
|
-
)), /* @__PURE__ */ React169__default.createElement("div", null, /* @__PURE__ */ React169__default.createElement(Label2, { htmlFor: "name" }, "Name (Description)"), /* @__PURE__ */ React169__default.createElement(
|
|
139701
|
+
)), /* @__PURE__ */ React169__default.createElement("div", null, /* @__PURE__ */ React169__default.createElement(Label2, { htmlFor: "name" }, "LO Name (Description)"), /* @__PURE__ */ React169__default.createElement(
|
|
139682
139702
|
Input,
|
|
139683
139703
|
{
|
|
139684
139704
|
id: "name",
|
|
139685
139705
|
value: formState.name || "",
|
|
139686
|
-
onChange: (e3) => handleFormChange(
|
|
139687
|
-
"name",
|
|
139688
|
-
e3.target.value
|
|
139689
|
-
)
|
|
139690
|
-
}
|
|
139691
|
-
))), /* @__PURE__ */ React169__default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4" }, /* @__PURE__ */ React169__default.createElement("div", null, /* @__PURE__ */ React169__default.createElement(Label2, { htmlFor: "subject" }, "Subject Name"), /* @__PURE__ */ React169__default.createElement(
|
|
139692
|
-
Input,
|
|
139693
|
-
{
|
|
139694
|
-
id: "subject",
|
|
139695
|
-
value: formState.subject || "",
|
|
139696
|
-
onChange: (e3) => handleFormChange(
|
|
139697
|
-
"subject",
|
|
139698
|
-
e3.target.value
|
|
139699
|
-
)
|
|
139700
|
-
}
|
|
139701
|
-
)), /* @__PURE__ */ React169__default.createElement("div", null, /* @__PURE__ */ React169__default.createElement(Label2, { htmlFor: "subjectCode" }, "Subject Code"), /* @__PURE__ */ React169__default.createElement(
|
|
139702
|
-
EditableCombobox,
|
|
139703
|
-
{
|
|
139704
|
-
options: subjects.map((s4) => ({
|
|
139705
|
-
value: s4.code,
|
|
139706
|
-
label: s4.name
|
|
139707
|
-
})),
|
|
139708
|
-
value: formState.subjectCode || "",
|
|
139709
|
-
onChange: (val) => handleFormChange("subjectCode", val),
|
|
139710
|
-
placeholder: "Select a subject..."
|
|
139711
|
-
}
|
|
139712
|
-
))), /* @__PURE__ */ React169__default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4" }, /* @__PURE__ */ React169__default.createElement("div", null, /* @__PURE__ */ React169__default.createElement(Label2, { htmlFor: "category" }, "Category Name"), /* @__PURE__ */ React169__default.createElement(
|
|
139713
|
-
Input,
|
|
139714
|
-
{
|
|
139715
|
-
id: "category",
|
|
139716
|
-
value: formState.category || "",
|
|
139717
|
-
onChange: (e3) => handleFormChange(
|
|
139718
|
-
"category",
|
|
139719
|
-
e3.target.value
|
|
139720
|
-
)
|
|
139706
|
+
onChange: (e3) => handleFormChange("name", e3.target.value)
|
|
139721
139707
|
}
|
|
139722
|
-
)), /* @__PURE__ */ React169__default.createElement("div", null, /* @__PURE__ */ React169__default.createElement(Label2, { htmlFor: "categoryCode" }, "Category
|
|
139723
|
-
Input,
|
|
139724
|
-
{
|
|
139725
|
-
id: "categoryCode",
|
|
139726
|
-
value: formState.categoryCode || "",
|
|
139727
|
-
onChange: (e3) => handleFormChange(
|
|
139728
|
-
"categoryCode",
|
|
139729
|
-
e3.target.value
|
|
139730
|
-
)
|
|
139731
|
-
}
|
|
139732
|
-
))), /* @__PURE__ */ React169__default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4" }, /* @__PURE__ */ React169__default.createElement("div", null, /* @__PURE__ */ React169__default.createElement(Label2, { htmlFor: "topic" }, "Topic Name"), /* @__PURE__ */ React169__default.createElement(
|
|
139733
|
-
Input,
|
|
139734
|
-
{
|
|
139735
|
-
id: "topic",
|
|
139736
|
-
value: formState.topic || "",
|
|
139737
|
-
onChange: (e3) => handleFormChange(
|
|
139738
|
-
"topic",
|
|
139739
|
-
e3.target.value
|
|
139740
|
-
)
|
|
139741
|
-
}
|
|
139742
|
-
)), /* @__PURE__ */ React169__default.createElement("div", null, /* @__PURE__ */ React169__default.createElement(Label2, { htmlFor: "topicCode" }, "Topic Code"), /* @__PURE__ */ React169__default.createElement(
|
|
139743
|
-
Input,
|
|
139744
|
-
{
|
|
139745
|
-
id: "topicCode",
|
|
139746
|
-
value: formState.topicCode || "",
|
|
139747
|
-
onChange: (e3) => handleFormChange(
|
|
139748
|
-
"topicCode",
|
|
139749
|
-
e3.target.value
|
|
139750
|
-
)
|
|
139751
|
-
}
|
|
139752
|
-
))), /* @__PURE__ */ React169__default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4" }, /* @__PURE__ */ React169__default.createElement("div", null, /* @__PURE__ */ React169__default.createElement(Label2, { htmlFor: "grade" }, "Grade Name"), /* @__PURE__ */ React169__default.createElement(
|
|
139753
|
-
Input,
|
|
139754
|
-
{
|
|
139755
|
-
id: "grade",
|
|
139756
|
-
value: formState.grade || "",
|
|
139757
|
-
onChange: (e3) => handleFormChange(
|
|
139758
|
-
"grade",
|
|
139759
|
-
e3.target.value
|
|
139760
|
-
)
|
|
139761
|
-
}
|
|
139762
|
-
)), /* @__PURE__ */ React169__default.createElement("div", null, /* @__PURE__ */ React169__default.createElement(Label2, { htmlFor: "gradeCode" }, "Grade Code"), /* @__PURE__ */ React169__default.createElement(
|
|
139763
|
-
Input,
|
|
139764
|
-
{
|
|
139765
|
-
id: "gradeCode",
|
|
139766
|
-
value: formState.gradeCode || "",
|
|
139767
|
-
onChange: (e3) => handleFormChange(
|
|
139768
|
-
"gradeCode",
|
|
139769
|
-
e3.target.value
|
|
139770
|
-
)
|
|
139771
|
-
}
|
|
139772
|
-
))), /* @__PURE__ */ React169__default.createElement("div", null, /* @__PURE__ */ React169__default.createElement(Label2, { htmlFor: "keywords" }, "Keywords (comma-separated)"), /* @__PURE__ */ React169__default.createElement(
|
|
139708
|
+
))), /* @__PURE__ */ React169__default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4" }, /* @__PURE__ */ React169__default.createElement("div", null, /* @__PURE__ */ React169__default.createElement(Label2, { htmlFor: "subjectCode" }, "Subject"), /* @__PURE__ */ React169__default.createElement(Select2, { value: formState.subjectCode || "", onValueChange: (val) => handleFormChange("subjectCode", val) }, /* @__PURE__ */ React169__default.createElement(SelectTrigger2, null, /* @__PURE__ */ React169__default.createElement(SelectValue2, { placeholder: "Select a subject..." })), /* @__PURE__ */ React169__default.createElement(SelectContent2, null, subjects.map((s4) => /* @__PURE__ */ React169__default.createElement(SelectItem2, { key: s4.code, value: s4.code }, s4.name))))), /* @__PURE__ */ React169__default.createElement("div", null, /* @__PURE__ */ React169__default.createElement(Label2, { htmlFor: "categoryCode" }, "Category"), /* @__PURE__ */ React169__default.createElement(Select2, { value: formState.categoryCode || "", onValueChange: (val) => handleFormChange("categoryCode", val), disabled: !formState.subjectCode }, /* @__PURE__ */ React169__default.createElement(SelectTrigger2, null, /* @__PURE__ */ React169__default.createElement(SelectValue2, { placeholder: "Select a category..." })), /* @__PURE__ */ React169__default.createElement(SelectContent2, null, filteredCategories.map((c4) => /* @__PURE__ */ React169__default.createElement(SelectItem2, { key: c4.code, value: c4.code }, c4.name)))))), /* @__PURE__ */ React169__default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4" }, /* @__PURE__ */ React169__default.createElement("div", null, /* @__PURE__ */ React169__default.createElement(Label2, { htmlFor: "topicCode" }, "Topic"), /* @__PURE__ */ React169__default.createElement(Select2, { value: formState.topicCode || "", onValueChange: (val) => handleFormChange("topicCode", val), disabled: !formState.categoryCode }, /* @__PURE__ */ React169__default.createElement(SelectTrigger2, null, /* @__PURE__ */ React169__default.createElement(SelectValue2, { placeholder: "Select a topic..." })), /* @__PURE__ */ React169__default.createElement(SelectContent2, null, filteredTopics.map((t4) => /* @__PURE__ */ React169__default.createElement(SelectItem2, { key: t4.code, value: t4.code }, t4.name))))), /* @__PURE__ */ React169__default.createElement("div", null, /* @__PURE__ */ React169__default.createElement(Label2, { htmlFor: "gradeCode" }, "Grade Level"), /* @__PURE__ */ React169__default.createElement(Select2, { value: formState.gradeCode || "", onValueChange: (val) => handleFormChange("gradeCode", val) }, /* @__PURE__ */ React169__default.createElement(SelectTrigger2, null, /* @__PURE__ */ React169__default.createElement(SelectValue2, { placeholder: "Select a grade level..." })), /* @__PURE__ */ React169__default.createElement(SelectContent2, null, gradeLevels.map((g) => /* @__PURE__ */ React169__default.createElement(SelectItem2, { key: g.code, value: g.code }, g.name)))))), /* @__PURE__ */ React169__default.createElement("div", null, /* @__PURE__ */ React169__default.createElement(Label2, { htmlFor: "keywords" }, "Keywords (comma-separated)"), /* @__PURE__ */ React169__default.createElement(
|
|
139773
139709
|
Textarea,
|
|
139774
139710
|
{
|
|
139775
139711
|
id: "keywords",
|
|
139776
|
-
value: formState.keywords
|
|
139777
|
-
onChange: (e3) => handleFormChange(
|
|
139778
|
-
"keywords",
|
|
139779
|
-
e3.target.value.split(",").map((s4) => s4.trim())
|
|
139780
|
-
)
|
|
139712
|
+
value: Array.isArray(formState.keywords) ? formState.keywords.join(", ") : "",
|
|
139713
|
+
onChange: (e3) => handleFormChange("keywords", e3.target.value.split(",").map((s4) => s4.trim()))
|
|
139781
139714
|
}
|
|
139782
139715
|
)), /* @__PURE__ */ React169__default.createElement("div", null, /* @__PURE__ */ React169__default.createElement(Label2, { htmlFor: "stemElements" }, "STEM Elements (comma-separated)"), /* @__PURE__ */ React169__default.createElement(
|
|
139783
139716
|
Textarea,
|
|
139784
139717
|
{
|
|
139785
139718
|
id: "stemElements",
|
|
139786
|
-
value: formState.stemElements
|
|
139787
|
-
onChange: (e3) => handleFormChange(
|
|
139788
|
-
"stemElements",
|
|
139789
|
-
e3.target.value.split(",").map((s4) => s4.trim())
|
|
139790
|
-
)
|
|
139719
|
+
value: Array.isArray(formState.stemElements) ? formState.stemElements.join(", ") : "",
|
|
139720
|
+
onChange: (e3) => handleFormChange("stemElements", e3.target.value.split(",").map((s4) => s4.trim()))
|
|
139791
139721
|
}
|
|
139792
139722
|
)), /* @__PURE__ */ React169__default.createElement("div", null, /* @__PURE__ */ React169__default.createElement(Label2, { htmlFor: "bloomLevelsGuideline" }, "Bloom's Guideline (comma-separated)"), /* @__PURE__ */ React169__default.createElement(
|
|
139793
139723
|
Textarea,
|
|
139794
139724
|
{
|
|
139795
139725
|
id: "bloomLevelsGuideline",
|
|
139796
|
-
value: formState.bloomLevelsGuideline
|
|
139797
|
-
|
|
139798
|
-
) || "",
|
|
139799
|
-
onChange: (e3) => handleFormChange(
|
|
139800
|
-
"bloomLevelsGuideline",
|
|
139801
|
-
e3.target.value.split(",").map((s4) => s4.trim())
|
|
139802
|
-
)
|
|
139726
|
+
value: Array.isArray(formState.bloomLevelsGuideline) ? formState.bloomLevelsGuideline.join(", ") : "",
|
|
139727
|
+
onChange: (e3) => handleFormChange("bloomLevelsGuideline", e3.target.value.split(",").map((s4) => s4.trim()))
|
|
139803
139728
|
}
|
|
139804
|
-
))))
|
|
139729
|
+
)))), /* @__PURE__ */ React169__default.createElement(DialogFooter, { className: "p-6 pt-4 border-t" }, /* @__PURE__ */ React169__default.createElement(
|
|
139805
139730
|
Button,
|
|
139806
139731
|
{
|
|
139807
139732
|
type: "button",
|
|
@@ -267,13 +267,16 @@ declare function QuestionTypeManager({ initialData, isLoading: isLoadingProp, on
|
|
|
267
267
|
interface LearningObjectiveManagerProps {
|
|
268
268
|
initialData?: LearningObjective[];
|
|
269
269
|
subjects?: Subject[];
|
|
270
|
+
categories?: Category[];
|
|
271
|
+
topics?: Topic[];
|
|
272
|
+
gradeLevels?: GradeLevel[];
|
|
270
273
|
isLoading?: boolean;
|
|
271
274
|
onAdd?: (item: Omit<LearningObjective, "id">) => Promise<void>;
|
|
272
275
|
onUpdate?: (item: LearningObjective) => Promise<void>;
|
|
273
276
|
onDelete?: (item: LearningObjective) => Promise<void>;
|
|
274
277
|
onBulkAdd?: (items: Omit<LearningObjective, "id">[]) => Promise<void>;
|
|
275
278
|
}
|
|
276
|
-
declare function LearningObjectiveManager({ initialData, subjects: subjectsProp, isLoading: isLoadingProp, onAdd, onUpdate, onDelete, onBulkAdd, }: LearningObjectiveManagerProps): React__default.JSX.Element;
|
|
279
|
+
declare function LearningObjectiveManager({ initialData, subjects: subjectsProp, categories: categoriesProp, topics: topicsProp, gradeLevels: gradeLevelsProp, isLoading: isLoadingProp, onAdd, onUpdate, onDelete, onBulkAdd, }: LearningObjectiveManagerProps): React__default.JSX.Element;
|
|
277
280
|
|
|
278
281
|
interface ContextManagerProps {
|
|
279
282
|
initialData?: Context[];
|
|
@@ -267,13 +267,16 @@ declare function QuestionTypeManager({ initialData, isLoading: isLoadingProp, on
|
|
|
267
267
|
interface LearningObjectiveManagerProps {
|
|
268
268
|
initialData?: LearningObjective[];
|
|
269
269
|
subjects?: Subject[];
|
|
270
|
+
categories?: Category[];
|
|
271
|
+
topics?: Topic[];
|
|
272
|
+
gradeLevels?: GradeLevel[];
|
|
270
273
|
isLoading?: boolean;
|
|
271
274
|
onAdd?: (item: Omit<LearningObjective, "id">) => Promise<void>;
|
|
272
275
|
onUpdate?: (item: LearningObjective) => Promise<void>;
|
|
273
276
|
onDelete?: (item: LearningObjective) => Promise<void>;
|
|
274
277
|
onBulkAdd?: (items: Omit<LearningObjective, "id">[]) => Promise<void>;
|
|
275
278
|
}
|
|
276
|
-
declare function LearningObjectiveManager({ initialData, subjects: subjectsProp, isLoading: isLoadingProp, onAdd, onUpdate, onDelete, onBulkAdd, }: LearningObjectiveManagerProps): React__default.JSX.Element;
|
|
279
|
+
declare function LearningObjectiveManager({ initialData, subjects: subjectsProp, categories: categoriesProp, topics: topicsProp, gradeLevels: gradeLevelsProp, isLoading: isLoadingProp, onAdd, onUpdate, onDelete, onBulkAdd, }: LearningObjectiveManagerProps): React__default.JSX.Element;
|
|
277
280
|
|
|
278
281
|
interface ContextManagerProps {
|
|
279
282
|
initialData?: Context[];
|
package/package.json
CHANGED