@thanh01.pmt/interactive-quiz-kit 1.0.82 → 1.0.84
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 +1114 -1187
- package/dist/authoring.d.cts +1 -1
- package/dist/authoring.d.ts +1 -1
- package/dist/authoring.mjs +843 -916
- package/dist/index.d.cts +7 -5
- package/dist/index.d.ts +7 -5
- package/dist/react-ui.cjs +47 -120
- package/dist/react-ui.d.cts +1 -1
- package/dist/react-ui.d.ts +1 -1
- package/dist/react-ui.mjs +47 -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
|
@@ -138959,7 +138959,7 @@ function TopicManager({
|
|
|
138959
138959
|
setCurrentItem(topic);
|
|
138960
138960
|
setItemName(topic.name);
|
|
138961
138961
|
setItemCode(topic.code);
|
|
138962
|
-
setSelectedSubjectCode(topic.subjectCode);
|
|
138962
|
+
setSelectedSubjectCode(topic.subjectCode ?? "");
|
|
138963
138963
|
setIsDialogOpen(true);
|
|
138964
138964
|
};
|
|
138965
138965
|
const handleDeleteItem = (topic) => {
|
|
@@ -139037,7 +139037,7 @@ function TopicManager({
|
|
|
139037
139037
|
const getSubjectName = (subjectCode) => {
|
|
139038
139038
|
return subjects.find((s4) => s4.code === subjectCode)?.name || "N/A";
|
|
139039
139039
|
};
|
|
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"))))));
|
|
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"))))));
|
|
139041
139041
|
}
|
|
139042
139042
|
|
|
139043
139043
|
// src/react-ui/components/metadata/CategoryManager.tsx
|
|
@@ -139435,6 +139435,9 @@ init_react_shim();
|
|
|
139435
139435
|
function LearningObjectiveManager({
|
|
139436
139436
|
initialData,
|
|
139437
139437
|
subjects: subjectsProp,
|
|
139438
|
+
categories: categoriesProp,
|
|
139439
|
+
topics: topicsProp,
|
|
139440
|
+
gradeLevels: gradeLevelsProp,
|
|
139438
139441
|
isLoading: isLoadingProp,
|
|
139439
139442
|
onAdd,
|
|
139440
139443
|
onUpdate,
|
|
@@ -139443,6 +139446,9 @@ function LearningObjectiveManager({
|
|
|
139443
139446
|
}) {
|
|
139444
139447
|
const [items, setItems] = useState([]);
|
|
139445
139448
|
const [subjects, setSubjects] = useState([]);
|
|
139449
|
+
const [categories, setCategories] = useState([]);
|
|
139450
|
+
const [topics, setTopics] = useState([]);
|
|
139451
|
+
const [gradeLevels, setGradeLevels] = useState([]);
|
|
139446
139452
|
const [isLoading, setIsLoading] = useState(true);
|
|
139447
139453
|
const [isDialogOpen, setIsDialogOpen] = useState(false);
|
|
139448
139454
|
const [isAlertOpen, setIsAlertOpen] = useState(false);
|
|
@@ -139462,6 +139468,9 @@ function LearningObjectiveManager({
|
|
|
139462
139468
|
try {
|
|
139463
139469
|
setItems(MetadataService.getLearningObjectives());
|
|
139464
139470
|
setSubjects(MetadataService.getSubjects());
|
|
139471
|
+
setCategories(MetadataService.getCategories());
|
|
139472
|
+
setTopics(MetadataService.getTopics());
|
|
139473
|
+
setGradeLevels(MetadataService.getGradeLevels());
|
|
139465
139474
|
} catch (error) {
|
|
139466
139475
|
toast2({
|
|
139467
139476
|
title: "Error",
|
|
@@ -139477,13 +139486,34 @@ function LearningObjectiveManager({
|
|
|
139477
139486
|
if (isControlled) {
|
|
139478
139487
|
setItems(initialData || []);
|
|
139479
139488
|
setSubjects(subjectsProp || []);
|
|
139489
|
+
setCategories(categoriesProp || []);
|
|
139490
|
+
setTopics(topicsProp || []);
|
|
139491
|
+
setGradeLevels(gradeLevelsProp || []);
|
|
139480
139492
|
setIsLoading(isLoadingProp || false);
|
|
139481
139493
|
} else {
|
|
139482
139494
|
refreshData();
|
|
139483
139495
|
}
|
|
139484
|
-
}, [isControlled, initialData, subjectsProp, isLoadingProp]);
|
|
139496
|
+
}, [isControlled, initialData, subjectsProp, categoriesProp, topicsProp, gradeLevelsProp, isLoadingProp]);
|
|
139497
|
+
const filteredCategories = useMemo(() => {
|
|
139498
|
+
if (!formState.subjectCode) return [];
|
|
139499
|
+
return categories.filter((c4) => c4.subjectCode === formState.subjectCode);
|
|
139500
|
+
}, [formState.subjectCode, categories]);
|
|
139501
|
+
const filteredTopics = useMemo(() => {
|
|
139502
|
+
if (!formState.categoryCode) return [];
|
|
139503
|
+
return topics.filter((t4) => t4.categoryCode === formState.categoryCode);
|
|
139504
|
+
}, [formState.categoryCode, topics]);
|
|
139485
139505
|
const handleFormChange = (field, value) => {
|
|
139486
|
-
setFormState((prev) =>
|
|
139506
|
+
setFormState((prev) => {
|
|
139507
|
+
const newState = { ...prev, [field]: value };
|
|
139508
|
+
if (field === "subjectCode") {
|
|
139509
|
+
newState.categoryCode = "";
|
|
139510
|
+
newState.topicCode = "";
|
|
139511
|
+
}
|
|
139512
|
+
if (field === "categoryCode") {
|
|
139513
|
+
newState.topicCode = "";
|
|
139514
|
+
}
|
|
139515
|
+
return newState;
|
|
139516
|
+
});
|
|
139487
139517
|
};
|
|
139488
139518
|
const handleAddItem = () => {
|
|
139489
139519
|
setCurrentItem(null);
|
|
@@ -139494,11 +139524,7 @@ function LearningObjectiveManager({
|
|
|
139494
139524
|
};
|
|
139495
139525
|
const handleEditItem = (item) => {
|
|
139496
139526
|
setCurrentItem(item);
|
|
139497
|
-
|
|
139498
|
-
setFormState({
|
|
139499
|
-
...item,
|
|
139500
|
-
subject: subject ? subject.name : item.subject || ""
|
|
139501
|
-
});
|
|
139527
|
+
setFormState({ ...item });
|
|
139502
139528
|
setIsDialogOpen(true);
|
|
139503
139529
|
};
|
|
139504
139530
|
const handleDeleteItem = (item) => {
|
|
@@ -139600,7 +139626,6 @@ function LearningObjectiveManager({
|
|
|
139600
139626
|
acc.valid.push({
|
|
139601
139627
|
code: rec["LO ID"],
|
|
139602
139628
|
name: rec["LO Name"] || rec["LO Description"],
|
|
139603
|
-
// Use description if name is missing
|
|
139604
139629
|
description: rec["LO Description"],
|
|
139605
139630
|
subject: rec["Subject"] || "",
|
|
139606
139631
|
subjectCode: rec["Subject Code"] || rec["Subject"],
|
|
@@ -139668,141 +139693,43 @@ function LearningObjectiveManager({
|
|
|
139668
139693
|
className: "text-destructive hover:text-destructive"
|
|
139669
139694
|
},
|
|
139670
139695
|
/* @__PURE__ */ React169__default.createElement(Trash2, { className: "h-4 w-4" })
|
|
139671
|
-
))))))))), /* @__PURE__ */ React169__default.createElement(Dialog2, { open: isDialogOpen, onOpenChange: setIsDialogOpen }, /* @__PURE__ */ React169__default.createElement(DialogContent2, { className: "sm:max-w-2xl
|
|
139696
|
+
))))))))), /* @__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(
|
|
139672
139697
|
Input,
|
|
139673
139698
|
{
|
|
139674
139699
|
id: "code",
|
|
139675
139700
|
value: formState.code || "",
|
|
139676
|
-
onChange: (e3) => handleFormChange(
|
|
139677
|
-
"code",
|
|
139678
|
-
e3.target.value.toUpperCase()
|
|
139679
|
-
),
|
|
139701
|
+
onChange: (e3) => handleFormChange("code", e3.target.value.toUpperCase()),
|
|
139680
139702
|
disabled: !!currentItem
|
|
139681
139703
|
}
|
|
139682
|
-
)), /* @__PURE__ */ React169__default.createElement("div", null, /* @__PURE__ */ React169__default.createElement(Label2, { htmlFor: "name" }, "Name (Description)"), /* @__PURE__ */ React169__default.createElement(
|
|
139704
|
+
)), /* @__PURE__ */ React169__default.createElement("div", null, /* @__PURE__ */ React169__default.createElement(Label2, { htmlFor: "name" }, "LO Name (Description)"), /* @__PURE__ */ React169__default.createElement(
|
|
139683
139705
|
Input,
|
|
139684
139706
|
{
|
|
139685
139707
|
id: "name",
|
|
139686
139708
|
value: formState.name || "",
|
|
139687
|
-
onChange: (e3) => handleFormChange(
|
|
139688
|
-
"name",
|
|
139689
|
-
e3.target.value
|
|
139690
|
-
)
|
|
139709
|
+
onChange: (e3) => handleFormChange("name", e3.target.value)
|
|
139691
139710
|
}
|
|
139692
|
-
))), /* @__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: "
|
|
139693
|
-
Input,
|
|
139694
|
-
{
|
|
139695
|
-
id: "subject",
|
|
139696
|
-
value: formState.subject || "",
|
|
139697
|
-
onChange: (e3) => handleFormChange(
|
|
139698
|
-
"subject",
|
|
139699
|
-
e3.target.value
|
|
139700
|
-
)
|
|
139701
|
-
}
|
|
139702
|
-
)), /* @__PURE__ */ React169__default.createElement("div", null, /* @__PURE__ */ React169__default.createElement(Label2, { htmlFor: "subjectCode" }, "Subject Code"), /* @__PURE__ */ React169__default.createElement(
|
|
139703
|
-
EditableCombobox,
|
|
139704
|
-
{
|
|
139705
|
-
options: subjects.map((s4) => ({
|
|
139706
|
-
value: s4.code,
|
|
139707
|
-
label: s4.name
|
|
139708
|
-
})),
|
|
139709
|
-
value: formState.subjectCode || "",
|
|
139710
|
-
onChange: (val) => handleFormChange("subjectCode", val),
|
|
139711
|
-
placeholder: "Select a subject..."
|
|
139712
|
-
}
|
|
139713
|
-
))), /* @__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(
|
|
139714
|
-
Input,
|
|
139715
|
-
{
|
|
139716
|
-
id: "category",
|
|
139717
|
-
value: formState.category || "",
|
|
139718
|
-
onChange: (e3) => handleFormChange(
|
|
139719
|
-
"category",
|
|
139720
|
-
e3.target.value
|
|
139721
|
-
)
|
|
139722
|
-
}
|
|
139723
|
-
)), /* @__PURE__ */ React169__default.createElement("div", null, /* @__PURE__ */ React169__default.createElement(Label2, { htmlFor: "categoryCode" }, "Category Code"), /* @__PURE__ */ React169__default.createElement(
|
|
139724
|
-
Input,
|
|
139725
|
-
{
|
|
139726
|
-
id: "categoryCode",
|
|
139727
|
-
value: formState.categoryCode || "",
|
|
139728
|
-
onChange: (e3) => handleFormChange(
|
|
139729
|
-
"categoryCode",
|
|
139730
|
-
e3.target.value
|
|
139731
|
-
)
|
|
139732
|
-
}
|
|
139733
|
-
))), /* @__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(
|
|
139734
|
-
Input,
|
|
139735
|
-
{
|
|
139736
|
-
id: "topic",
|
|
139737
|
-
value: formState.topic || "",
|
|
139738
|
-
onChange: (e3) => handleFormChange(
|
|
139739
|
-
"topic",
|
|
139740
|
-
e3.target.value
|
|
139741
|
-
)
|
|
139742
|
-
}
|
|
139743
|
-
)), /* @__PURE__ */ React169__default.createElement("div", null, /* @__PURE__ */ React169__default.createElement(Label2, { htmlFor: "topicCode" }, "Topic Code"), /* @__PURE__ */ React169__default.createElement(
|
|
139744
|
-
Input,
|
|
139745
|
-
{
|
|
139746
|
-
id: "topicCode",
|
|
139747
|
-
value: formState.topicCode || "",
|
|
139748
|
-
onChange: (e3) => handleFormChange(
|
|
139749
|
-
"topicCode",
|
|
139750
|
-
e3.target.value
|
|
139751
|
-
)
|
|
139752
|
-
}
|
|
139753
|
-
))), /* @__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(
|
|
139754
|
-
Input,
|
|
139755
|
-
{
|
|
139756
|
-
id: "grade",
|
|
139757
|
-
value: formState.grade || "",
|
|
139758
|
-
onChange: (e3) => handleFormChange(
|
|
139759
|
-
"grade",
|
|
139760
|
-
e3.target.value
|
|
139761
|
-
)
|
|
139762
|
-
}
|
|
139763
|
-
)), /* @__PURE__ */ React169__default.createElement("div", null, /* @__PURE__ */ React169__default.createElement(Label2, { htmlFor: "gradeCode" }, "Grade Code"), /* @__PURE__ */ React169__default.createElement(
|
|
139764
|
-
Input,
|
|
139765
|
-
{
|
|
139766
|
-
id: "gradeCode",
|
|
139767
|
-
value: formState.gradeCode || "",
|
|
139768
|
-
onChange: (e3) => handleFormChange(
|
|
139769
|
-
"gradeCode",
|
|
139770
|
-
e3.target.value
|
|
139771
|
-
)
|
|
139772
|
-
}
|
|
139773
|
-
))), /* @__PURE__ */ React169__default.createElement("div", null, /* @__PURE__ */ React169__default.createElement(Label2, { htmlFor: "keywords" }, "Keywords (comma-separated)"), /* @__PURE__ */ React169__default.createElement(
|
|
139711
|
+
))), /* @__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 || filteredCategories.length === 0 }, /* @__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 || filteredTopics.length === 0 }, /* @__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(
|
|
139774
139712
|
Textarea,
|
|
139775
139713
|
{
|
|
139776
139714
|
id: "keywords",
|
|
139777
|
-
value: formState.keywords
|
|
139778
|
-
onChange: (e3) => handleFormChange(
|
|
139779
|
-
"keywords",
|
|
139780
|
-
e3.target.value.split(",").map((s4) => s4.trim())
|
|
139781
|
-
)
|
|
139715
|
+
value: Array.isArray(formState.keywords) ? formState.keywords.join(", ") : "",
|
|
139716
|
+
onChange: (e3) => handleFormChange("keywords", e3.target.value.split(",").map((s4) => s4.trim()))
|
|
139782
139717
|
}
|
|
139783
139718
|
)), /* @__PURE__ */ React169__default.createElement("div", null, /* @__PURE__ */ React169__default.createElement(Label2, { htmlFor: "stemElements" }, "STEM Elements (comma-separated)"), /* @__PURE__ */ React169__default.createElement(
|
|
139784
139719
|
Textarea,
|
|
139785
139720
|
{
|
|
139786
139721
|
id: "stemElements",
|
|
139787
|
-
value: formState.stemElements
|
|
139788
|
-
onChange: (e3) => handleFormChange(
|
|
139789
|
-
"stemElements",
|
|
139790
|
-
e3.target.value.split(",").map((s4) => s4.trim())
|
|
139791
|
-
)
|
|
139722
|
+
value: Array.isArray(formState.stemElements) ? formState.stemElements.join(", ") : "",
|
|
139723
|
+
onChange: (e3) => handleFormChange("stemElements", e3.target.value.split(",").map((s4) => s4.trim()))
|
|
139792
139724
|
}
|
|
139793
139725
|
)), /* @__PURE__ */ React169__default.createElement("div", null, /* @__PURE__ */ React169__default.createElement(Label2, { htmlFor: "bloomLevelsGuideline" }, "Bloom's Guideline (comma-separated)"), /* @__PURE__ */ React169__default.createElement(
|
|
139794
139726
|
Textarea,
|
|
139795
139727
|
{
|
|
139796
139728
|
id: "bloomLevelsGuideline",
|
|
139797
|
-
value: formState.bloomLevelsGuideline
|
|
139798
|
-
|
|
139799
|
-
) || "",
|
|
139800
|
-
onChange: (e3) => handleFormChange(
|
|
139801
|
-
"bloomLevelsGuideline",
|
|
139802
|
-
e3.target.value.split(",").map((s4) => s4.trim())
|
|
139803
|
-
)
|
|
139729
|
+
value: Array.isArray(formState.bloomLevelsGuideline) ? formState.bloomLevelsGuideline.join(", ") : "",
|
|
139730
|
+
onChange: (e3) => handleFormChange("bloomLevelsGuideline", e3.target.value.split(",").map((s4) => s4.trim()))
|
|
139804
139731
|
}
|
|
139805
|
-
))))
|
|
139732
|
+
)))), /* @__PURE__ */ React169__default.createElement(DialogFooter, { className: "p-6 pt-4 border-t" }, /* @__PURE__ */ React169__default.createElement(
|
|
139806
139733
|
Button,
|
|
139807
139734
|
{
|
|
139808
139735
|
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