{/* Batch selection */}
{form.assign_mode === "batch" && (
)}
{/* Individual student selection */}
{form.assign_mode === "individual" && (
{form.student_ids.size} selected · {students.length} total
{/* Search box — needed because QA reported long student lists
made bottom entries unreachable inside the inner scroll
container. Filtering keeps the list short and predictable. */}
setStudentQuery(e.target.value)}
className="h-8 text-xs"
/>
{filteredStudents.map((s) => (
))}
{filteredStudents.length === 0 && students.length > 0 && (
No students match “{studentQuery}”.
)}
{students.length === 0 &&
No students available
}