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 checkId values listed in lessonkit.json.

  • Enable showSetScore for 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.

See also