SingleChoiceSet¶
H5P equivalent
H5P Single Choice Set
When to use¶
Use SingleChoiceSet for sequential multiple-choice slides with aggregated scoring — each step is a child Quiz or KnowledgeCheck.
Requirements¶
Child assessments need stable
checkIdvalues listed inlessonkit.json.Enable
showSetScorefor aggregate feedback across steps.Props and nesting: block catalog — SingleChoiceSet.
Try it¶
Documentation demo
Use the Live demo, React, AI prompt, and Packaging / Manifest tabs below. Embedded demos disable telemetry, xAPI, and the LMS bridge. For production delivery, use the CLI template src/courseConfig.ts and LMS Go-Live.
<SingleChoiceSet blockId="scs-demo" title="Security basics" showSetScore>
<Quiz checkId="scs-q1" question="Report phishing to security?" choices={["Yes", "No"]} answer="Yes" />
<Quiz
checkId="scs-q2"
question="Share passwords with colleagues?"
choices={["Yes", "No"]}
answer="No"
/>
</SingleChoiceSet>
Copy into Cursor, Copilot, or ChatGPT after the vibe coding starter context:
Read lessonkit.json and src/App.tsx before editing.
Add a SingleChoiceSet block (H5P-style: Single Choice Set) like this example inside the active <Lesson>:
<SingleChoiceSet blockId="scs-demo" title="Security basics" showSetScore>
<Quiz checkId="scs-q1" question="Report phishing to security?" choices={["Yes", "No"]} answer="Yes" />
<Quiz
checkId="scs-q2"
question="Share passwords with colleagues?"
choices={["Yes", "No"]}
answer="No"
/>
</SingleChoiceSet>
Requirements:
- Import only from @lessonkit/react; use block types from block-catalog.v3.json.
- Keep existing courseId, lessonId, and navigation stable unless I ask to add a lesson.
Sync lessonkit.json — add under course.assessments[]:
[
{
"checkId": "scs-q1",
"kind": "mcq",
"question": "Report phishing to security?",
"choices": ["Yes", "No"],
"answer": "Yes"
},
{
"checkId": "scs-q2",
"kind": "mcq",
"question": "Share passwords with colleagues?",
"choices": ["Yes", "No"],
"answer": "No"
}
]
- After edits, list changed files and what to verify in the browser (lessonkit dev).
Workflow tips: https://lessonkit.readthedocs.io/en/latest/guides/vibe-coding/prompting-and-workflows.html
No separate descriptor kind — declare each child Quiz in course.assessments[] with its own checkId.
[
{
"checkId": "scs-q1",
"kind": "mcq",
"question": "Report phishing to security?",
"choices": ["Yes", "No"],
"answer": "Yes"
},
{
"checkId": "scs-q2",
"kind": "mcq",
"question": "Share passwords with colleagues?",
"choices": ["Yes", "No"],
"answer": "No"
}
]
Manifest for child quizzes¶
SingleChoiceSet has no separate descriptor kind. List each nested checkId under course.assessments[]:
[
{
"checkId": "scs-q1",
"kind": "mcq",
"question": "Report phishing to security?",
"choices": ["Yes", "No"],
"answer": "Yes"
},
{
"checkId": "scs-q2",
"kind": "mcq",
"question": "Share passwords with colleagues?",
"choices": ["Yes", "No"],
"answer": "No"
}
]
Touch behavior¶
Previous / Next footer controls use lk-button minimum height. Each step delegates to child Quiz touch rows.