Runtime block catalog (v3 default)¶
H5P equivalents
Many LessonKit blocks mirror H5P content types as native React components (not embedded H5P; no .h5p import). Quiz = H5P Multiple Choice; Tier B P0 question types ship in Catalog v2 (framework 1.1.0). Full mapping: H5P capability map · guide: Coming from H5P?.
The block catalog describes every framework-owned learning primitive in @lessonkit/react. Use it to validate generated code, document supported props, and align AI/codegen workflows with the same runtime components authors use today.
H5P names for v1 blocks¶
LessonKit block |
H5P display name |
H5P machine name (typical) |
|---|---|---|
|
Multiple Choice |
|
|
(scenario / content area) |
— |
|
(open text / reflection) |
— |
|
(course structure) |
— |
|
(progress UI) |
— |
Catalog artifacts¶
Artifact |
Path |
|---|---|
Version |
|
JSON |
|
JSON Schema |
|
Programmatic API |
|
Import in Node or bundlers:
import catalog from "@lessonkit/react/block-catalog.v1.json" assert { type: "json" };
// catalog.schemaVersion === 1
// catalog.entries — one object per block type
Block types (v1)¶
Type |
Category |
Required IDs |
Telemetry |
|---|---|---|---|
|
container |
|
|
|
container |
|
|
|
content |
optional |
manual |
|
content |
optional |
manual |
|
assessment |
|
|
|
assessment |
(alias of |
same as |
|
chrome |
— |
none |
Composition rules¶
ThemeProvider
└── Course (courseId)
├── ProgressTracker
└── Lesson (lessonId)
├── Scenario (blockId?)
├── Reflection (blockId?)
├── Quiz / KnowledgeCheck (checkId)
└── custom UI + useTracking()
Quiz/KnowledgeCheckmust be inside an activeLessonfor quiz telemetry (lessonIdrequired).Scenario/Reflection: setblockIdwhen you want block-level URNs oninteractionevents (see Telemetry reference).ProgressTrackerreads runtime progress; place insideCourse.
Per-block contracts¶
Course¶
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
string |
yes |
Course title (h1) |
|
CourseId |
yes |
Stable course id |
|
LessonkitConfig (minus courseId) |
no |
Tracking, xAPI, session |
|
ReactNode |
yes |
Lessons and chrome |
A11y: <section aria-label={title}>, <h1>.
Theming: Inherits --lk-* from ThemeProvider.
Telemetry: Provider emits course_started on mount; completeCourse() emits course_completed.
Lesson¶
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
string |
yes |
Lesson title (h2) |
|
LessonId |
yes |
Stable lesson id |
|
ReactNode |
yes |
Blocks and content |
A11y: <article aria-label={title}>, <h2>.
Theming: Inherits global tokens.
Telemetry: lesson_started on mount; lesson_completed + lesson_time_on_task on unmount or lesson switch.
Scenario¶
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
BlockId |
no |
Block URN segment for interactions |
|
ReactNode |
yes |
Narrative and custom UI |
A11y: <section aria-label="Scenario">.
Theming: data-lk-block-id when blockId set.
Telemetry: No automatic events; use useTracking().track("interaction", …).
Reflection¶
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
BlockId |
no |
Block URN segment |
|
string |
no |
Question above textarea |
|
ReactNode |
no |
Optional content above textarea |
A11y: <section aria-label="Reflection">; textarea uses aria-labelledby or aria-label.
Theming: data-lk-block-id when blockId set.
Telemetry: Manual interaction events (e.g. on submit).
Quiz / KnowledgeCheck¶
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
CheckId |
yes |
Assessment id (sync with |
|
string |
yes |
Question text |
|
string[] |
yes |
Radio options |
|
string |
yes |
Correct choice (must match one option) |
A11y: Fieldset + radios; role="status" aria-live="polite" for feedback; visually hidden legend.
Theming: data-lk-check-id from checkId.
Telemetry: quiz_answered on each choice; quiz_completed on first correct answer.
ProgressTracker¶
No props.
A11y: <aside aria-label="Progress">.
Theming: Inherits global tokens.
Telemetry: None (display-only).
Catalog v2 (framework 1.1.0 — shipped)¶
H5P question types (1.1.0)
These LessonKit blocks are React implementations of common H5P question content types. Each implements the shared Assessment contract (scores, retry, solutions, xAPI)—see SPEC.md.
blockCatalogVersion = 2 adds H5P-aligned assessments under a shared Assessment contract. Full traceability: H5P capability map.
LessonKit block |
H5P display name |
|---|---|
|
True/False |
|
Fill in the Blanks |
|
Drag and Drop |
|
Drag the Words |
|
Mark the Words |
|
Question Set |
Block |
Category |
|
1.1.x tranche |
|---|---|---|---|
|
assessment |
required |
P0 |
|
assessment |
required |
P0 |
|
assessment |
required |
P0 |
|
assessment |
required |
P0 |
|
assessment |
required |
P0 |
|
container |
per child |
P0 |
|
assessment |
required |
existing (contract alignment) |
Shipped block criteria: catalog JSON entry, unit tests, telemetry mapping, export parity where applicable. Storybook coverage is expanding—see the Component gallery.
Import @lessonkit/react/block-catalog.v2.json or buildBlockCatalog({ version: 2 }). Use { version: 1 } for legacy generators.
Catalog v3 (framework 1.2.0 — shipped)¶
Default in 1.2.0: buildBlockCatalog() and buildBlockCatalog({ version: 3 }).
Adds content primitives (Text, Heading, Image), compound containers (Page, InteractiveBook), Tier C/D blocks (Accordion, DialogCards, Flashcards, ImageHotspots, ImageSlider, FindHotspot, FindMultipleHotspots), and allowedChildTypes / compoundContract on compound entries.
Block |
H5P display name (typical) |
|---|---|
|
Column / page (Interactive Book chapter) |
|
Interactive Book |
|
Accordion |
|
Dialog Cards |
|
Flashcards |
|
Image Hotspots |
|
Image Slider |
|
Find the Hotspot |
|
Find Multiple Hotspots |
Catalog v3 additions (framework 1.3.0)¶
Block |
H5P display name |
Notes |
|---|---|---|
|
Course Presentation (slide row) |
|
|
Course Presentation |
|
SlideDeck props: blockId (required), title, showDeckScore, Slide children. Implements CompoundHandle with session resume (persistCompoundState default true).
Catalog v3 additions (framework 1.4.0)¶
Block |
H5P display name |
Notes |
|---|---|---|
|
— |
Self-hosted |
|
Interactive Video (cue) |
Single child at |
|
Interactive Video |
|
|
Summary |
Statement-bank construct task |
|
Image Pairing |
Match image pairs |
|
Image Sequencing |
Order images |
|
Arithmetic Quiz |
Timed math prompts |
|
Essay |
Open text; plugin grading via |
|
Questionnaire |
Unscored multi-field survey |
|
Memory Game |
Card flip pairs |
|
Information Wall |
Searchable panel grid |
|
Slideshow (parallax) |
Static fallback under |
InteractiveVideo props: blockId (required), title, src, showVideoScore?, TimedCue children. Implements CompoundHandle with session resume (video time + cue index + child assessment state).
Slide / Page allowlist: includes Video, Summary, and all 1.4.0 content blocks above.
Import @lessonkit/react/block-catalog.v3.json or pin { version: 2 } until generators are updated.
Catalog v3 additions (framework 1.5.0)¶
Block |
Role |
Notes |
|---|---|---|
|
Compound |
Graph navigation with |
|
Compound child |
Page-like content container; |
|
Navigation |
Emits |
|
Content |
Sandboxed iframe ( |
|
Content |
|
Chart note: type="pie" renders segment labels as a list (not geometric slices). Use bar or the table for precise comparisons.
Branching resume: Sessions without __lk_bs__ meta restart at startNodeId (legacy saves before 1.5.0).
Catalog v3 additions (framework 1.6.0)¶
Block |
Role |
Notes |
|---|---|---|
|
Content |
Accessible data table with optional caption |
|
Content |
Before/after image slider |
|
Content |
Event list with focus tracking |
|
Content |
Stepped image frames |
|
Content |
Multi-image layout |
|
Content |
Browser audio capture |
|
Assessment |
Digit entry; |
|
Content |
QR payload with hidden reveal |
|
Assessment |
Grid fill assessment |
|
Assessment |
Letter grid word find |
|
Content |
Door-based reveal calendar |
|
Compound |
Stage graph with |
Import @lessonkit/react/block-catalog.v3.json or buildBlockCatalog({ version: 3 }) (default). Use { version: 1 } only for legacy generators.
Catalog v3 additions (framework 1.7.0)¶
Block |
Role |
Notes |
|---|---|---|
|
Assessment |
Reorder paragraphs; |
|
Assessment |
Scored text guess or reveal-only ( |
|
Assessment |
MCQ with image/audio choices; every option needs |
|
Compound |
Sequential child |
Quiz / KnowledgeCheck variants (1.7.0): answers (multi-select), shuffleChoices / shuffleSeed, choiceFeedback. With LXPack 0.7.0+, multi-select and shuffle inject into LMS shell quizzes; feedback text remains SPA-only.
See Migration 1.6 → 1.7.
Generated prop reference (catalog v3)¶
Full prop tables for blocks beyond the v1 manual section above (auto-generated from block-catalog.v3.json):
docs/scripts/generate-block-props-doc.mjs — do not edit –>
Generated block prop reference (catalog v3)¶
Auto-generated from @lessonkit/react/block-catalog.v3.json. Regenerate: node docs/scripts/generate-block-props-doc.mjs.
TrueFalse¶
Binary true/false question with assessment contract.
Component page: TrueFalse demo (live embed + when to use)
Storybook: TrueFalse demo
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
CheckId |
yes |
Stable check id. |
|
string |
yes |
Question text. |
|
boolean |
yes |
Correct answer. |
|
boolean |
no |
Allow retry after completion. |
|
boolean |
no |
Show solution control. |
|
boolean |
no |
Check answers automatically when possible. |
|
number |
no |
Minimum score to pass. |
Required IDs: checkId
Telemetry: assessment_answered, assessment_completed
FillInTheBlanks¶
Fill-in-the-blank text with answer markers in template.
Component page: FillInTheBlanks demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
CheckId |
yes |
Stable check id. |
|
string |
yes |
Text with blank markers. |
|
FillInBlankSpec[] |
no |
Explicit blank specs. |
|
boolean |
no |
Allow retry after completion. |
|
boolean |
no |
Show solution control. |
|
boolean |
no |
Check answers automatically when possible. |
|
number |
no |
Minimum score to pass. |
Required IDs: checkId
Telemetry: assessment_answered, assessment_completed
DragAndDrop¶
Drag items onto labeled targets.
Component page: DragAndDrop demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
CheckId |
yes |
Stable check id. |
|
DragItem[] |
yes |
Draggable items. |
|
DropTarget[] |
yes |
Drop targets. |
|
boolean |
no |
Allow retry after completion. |
|
boolean |
no |
Show solution control. |
|
boolean |
no |
Check answers automatically when possible. |
|
number |
no |
Minimum score to pass. |
Required IDs: checkId
Telemetry: assessment_answered, assessment_completed
DragTheWords¶
Drag words into inline blanks.
Component page: DragTheWords demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
CheckId |
yes |
Stable check id. |
|
string |
yes |
Sentence with blank zones. |
|
string[] |
yes |
Draggable word bank. |
|
boolean |
no |
Allow retry after completion. |
|
boolean |
no |
Show solution control. |
|
boolean |
no |
Check answers automatically when possible. |
|
number |
no |
Minimum score to pass. |
Required IDs: checkId
Telemetry: assessment_answered, assessment_completed
MarkTheWords¶
Select correct words in a sentence.
Component page: MarkTheWords demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
CheckId |
yes |
Stable check id. |
|
string |
yes |
Source text. |
|
string[] |
yes |
Words to mark. |
|
boolean |
no |
Allow retry after completion. |
|
boolean |
no |
Show solution control. |
|
boolean |
no |
Check answers automatically when possible. |
|
number |
no |
Minimum score to pass. |
Required IDs: checkId
Telemetry: assessment_answered, assessment_completed
AssessmentSequence¶
Ordered sequence of contract-compliant assessments.
Component page: AssessmentSequence demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
ReactNode |
yes |
Assessment blocks. |
|
boolean |
no |
One question at a time. |
|
boolean |
no |
Allow retry after completion. |
|
boolean |
no |
Show solution control. |
|
boolean |
no |
Check answers automatically when possible. |
Compound: Implements session resume when config.session.persistCompoundState is true. See Core reference — compound state.
Summary¶
Construct a summary from a statement bank in correct order.
Component page: Summary demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
CheckId |
yes |
Stable check id. |
|
string[] |
yes |
Available statements. |
|
string[] |
yes |
Correct ordered summary. |
|
string |
no |
Learner-facing prompt; defaults to a multi-select instruction. |
|
boolean |
no |
Allow retry after completion. |
|
boolean |
no |
Show solution control. |
|
boolean |
no |
Check answers automatically when possible. |
|
number |
no |
Minimum score to pass. |
Required IDs: checkId
Telemetry: assessment_answered, assessment_completed
ImagePairing¶
Match image pairs in a memory-style task.
Component page: ImagePairing demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
CheckId |
yes |
Stable check id. |
|
ImagePair[] |
yes |
Image pairs to match. |
|
boolean |
no |
Allow retry after completion. |
|
boolean |
no |
Show solution control. |
|
boolean |
no |
Check answers automatically when possible. |
|
number |
no |
Minimum score to pass. |
Required IDs: checkId
Telemetry: assessment_answered, assessment_completed
ImageSequencing¶
Order images in the correct sequence.
Component page: ImageSequencing demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
CheckId |
yes |
Stable check id. |
|
SequencingImage[] |
yes |
Images to order. |
|
string[] |
yes |
Correct id order. |
|
boolean |
no |
Allow retry after completion. |
|
boolean |
no |
Show solution control. |
|
boolean |
no |
Check answers automatically when possible. |
|
number |
no |
Minimum score to pass. |
Required IDs: checkId
Telemetry: assessment_answered, assessment_completed
ArithmeticQuiz¶
Timed arithmetic problems with optional timer.
Component page: ArithmeticQuiz demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
CheckId |
yes |
Stable check id. |
|
ArithmeticProblem[] |
yes |
Math problems. |
|
number |
no |
Optional time limit. |
|
boolean |
no |
Allow retry after completion. |
|
boolean |
no |
Show solution control. |
|
boolean |
no |
Check answers automatically when possible. |
|
number |
no |
Minimum score to pass. |
Required IDs: checkId
Telemetry: assessment_answered, assessment_completed
Essay¶
Open text response; manual or plugin grading.
Component page: Essay demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
CheckId |
yes |
Stable check id. |
|
string |
yes |
Essay prompt. |
|
number |
no |
Minimum character length. |
|
boolean |
no |
Allow retry after completion. |
|
boolean |
no |
Show solution control. |
|
boolean |
no |
Check answers automatically when possible. |
|
number |
no |
Minimum score to pass. |
Required IDs: checkId
Telemetry: assessment_answered, assessment_completed
SortParagraphs¶
Order paragraphs into the correct sequence.
Component page: SortParagraphs demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
CheckId |
yes |
Stable check id. |
|
string[] |
yes |
Paragraph texts. |
|
number[] |
yes |
Correct index order. |
|
boolean |
no |
Allow retry after completion. |
|
boolean |
no |
Show solution control. |
|
boolean |
no |
Check answers automatically when possible. |
|
number |
no |
Minimum score to pass. |
Required IDs: checkId
Telemetry: assessment_answered, assessment_completed
GuessTheAnswer¶
Reveal or score a hidden answer.
Component page: GuessTheAnswer demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
CheckId |
no |
Required when scored (default). |
|
string |
yes |
Prompt text. |
|
string |
yes |
Hidden answer. |
|
boolean |
no |
Score learner guess (default true). |
|
boolean |
no |
Allow retry after completion. |
|
boolean |
no |
Show solution control. |
|
boolean |
no |
Check answers automatically when possible. |
|
number |
no |
Minimum score to pass. |
Telemetry: assessment_answered, assessment_completed
MultimediaChoice¶
Multiple choice with image or audio options.
Component page: MultimediaChoice demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
CheckId |
yes |
Stable check id. |
|
string |
yes |
Question text. |
|
MultimediaChoiceOption[] |
yes |
Media choices. |
|
string |
yes |
Correct choice label. |
|
boolean |
no |
Allow retry after completion. |
|
boolean |
no |
Show solution control. |
|
boolean |
no |
Check answers automatically when possible. |
|
number |
no |
Minimum score to pass. |
Required IDs: checkId
Telemetry: assessment_answered, assessment_completed
SingleChoiceSet¶
Sequential MCQ slides with aggregated scoring.
Component page: SingleChoiceSet demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
BlockId |
no |
Stable block id. |
|
string |
no |
Set title. |
|
boolean |
no |
Show aggregated score. |
|
ReactNode |
yes |
Quiz or KnowledgeCheck steps. |
|
boolean |
no |
Allow retry after completion. |
|
boolean |
no |
Show solution control. |
|
boolean |
no |
Check answers automatically when possible. |
Text¶
Paragraph text content.
Component page: Text demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
BlockId |
no |
Stable block id. |
|
ReactNode |
yes |
Text body. |
Heading¶
Heading levels 1–3.
Component page: Heading demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
BlockId |
no |
Stable block id. |
|
1 | 2 | 3 |
yes |
Heading level. |
|
ReactNode |
yes |
Heading text. |
Image¶
Image with required alt text.
Component page: Image demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
BlockId |
no |
Stable block id. |
|
string |
yes |
Image URL. |
|
string |
yes |
Alt text. |
Video¶
Self-hosted video with native controls and optional captions.
Component page: Video demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
BlockId |
yes |
Stable block id. |
|
string |
yes |
Video URL. |
|
string |
no |
Poster image URL. |
|
string |
no |
WebVTT captions URL. |
|
string |
no |
Accessible title. |
Required IDs: blockId
Page¶
Column layout container (H5P Column / Page).
Component page: Page demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
BlockId |
yes |
Stable block id. |
|
string |
no |
Page title. |
|
ReactNode |
yes |
Page content. |
Telemetry: compound_page_viewed
Compound: Implements session resume when config.session.persistCompoundState is true. See Core reference — compound state.
InteractiveBook¶
Multi-page book with chapter navigation.
Component page: InteractiveBook demo (live embed + when to use)
Storybook: InteractiveBook demo
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
BlockId |
yes |
Stable block id. |
|
string |
yes |
Book title. |
|
boolean |
no |
Show aggregate score. |
|
Page[] |
yes |
Page chapters. |
Required IDs: blockId
Telemetry: book_page_viewed
Compound: Implements session resume when config.session.persistCompoundState is true. See Core reference — compound state.
Slide¶
Single slide row in a SlideDeck. Supports Video, Summary, and 1.4 blocks.
Component page: Slide demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
BlockId |
yes |
Stable block id. |
|
string |
no |
Slide title. |
|
ReactNode |
yes |
Slide content. |
Telemetry: compound_page_viewed
Compound: Implements session resume when config.session.persistCompoundState is true. See Core reference — compound state.
SlideDeck¶
Multi-slide presentation with keyboard navigation.
Component page: SlideDeck demo (live embed + when to use)
Storybook: SlideDeck demo
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
BlockId |
yes |
Stable block id. |
|
string |
yes |
Deck title. |
|
boolean |
no |
Show aggregate score. |
|
Slide[] |
yes |
Slides. |
Required IDs: blockId
Telemetry: slide_viewed
Compound: Implements session resume when config.session.persistCompoundState is true. See Core reference — compound state.
TimedCue¶
Timed overlay cue within InteractiveVideo.
Component page: TimedCue demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
number |
yes |
Cue time in seconds. |
|
string |
no |
Cue label. |
|
boolean |
no |
Block seek until completed. |
|
ReactNode |
yes |
Single allowed child block. |
Compound: Implements session resume when config.session.persistCompoundState is true. See Core reference — compound state.
InteractiveVideo¶
Video with timed interaction overlays.
Component page: InteractiveVideo demo (live embed + when to use)
Storybook: InteractiveVideo demo
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
BlockId |
yes |
Stable block id. |
|
string |
yes |
Video title. |
|
string |
yes |
Video URL. |
|
string |
no |
Poster image. |
|
string |
no |
WebVTT captions. |
|
boolean |
no |
Show aggregate score. |
|
TimedCue[] |
yes |
Timed cues. |
Required IDs: blockId
Telemetry: video_cue_reached, video_segment_completed
Compound: Implements session resume when config.session.persistCompoundState is true. See Core reference — compound state.
BranchNode¶
Graph node in a BranchingScenario with content and choices.
Component page: BranchNode demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
string |
yes |
Unique node id within the scenario. |
|
string |
no |
Node title. |
|
boolean |
no |
End state node. |
|
ReactNode |
yes |
Content and BranchChoice controls. |
Telemetry: branch_node_viewed
Compound: Implements session resume when config.session.persistCompoundState is true. See Core reference — compound state.
BranchChoice¶
Transition control linking to a target BranchNode.
Component page: BranchChoice demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
string |
yes |
Choice label. |
|
string |
yes |
Target node id. |
|
number |
no |
Optional choice score weight. |
|
boolean |
no |
Disable choice. |
Telemetry: branch_selected
Compound: Implements session resume when config.session.persistCompoundState is true. See Core reference — compound state.
BranchingScenario¶
Graph-based branching narrative with scored paths.
Component page: BranchingScenario demo (live embed + when to use)
Storybook: BranchingScenario demo
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
BlockId |
yes |
Stable block id. |
|
string |
yes |
Scenario title. |
|
string |
yes |
Entry node id. |
|
boolean |
no |
Show visited-path score. |
|
boolean |
no |
Show path recap on terminal nodes. |
|
BranchNode[] |
yes |
Branch nodes. |
Required IDs: blockId
Telemetry: branch_node_viewed, branch_selected
Compound: Implements session resume when config.session.persistCompoundState is true. See Core reference — compound state.
Embed¶
Sandboxed iframe embed with restrictive defaults.
Component page: Embed demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
BlockId |
yes |
Stable block id. |
|
string |
yes |
Embed URL. |
|
string |
yes |
Accessible title. |
|
string |
no |
Extra sandbox allow tokens. |
|
string |
no |
CSS aspect-ratio. |
Required IDs: blockId
Telemetry: interaction
Chart¶
Simple bar or pie chart with accessible data table.
Component page: Chart demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
BlockId |
yes |
Stable block id. |
|
bar | pie |
yes |
Chart type. |
|
ChartDatum[] |
yes |
Chart data. |
|
string |
no |
Chart title. |
Required IDs: blockId
Telemetry: interaction
Questionnaire¶
Unscored multi-field survey.
Component page: Questionnaire demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
BlockId |
yes |
Stable block id. |
|
QuestionnaireField[] |
yes |
Form fields. |
Required IDs: blockId
Telemetry: questionnaire_submitted
MemoryGame¶
Card flip memory matching game.
Component page: MemoryGame demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
BlockId |
yes |
Stable block id. |
|
MemoryPair[] |
yes |
Card pairs. |
|
boolean |
no |
Optional self-score mode. |
Required IDs: blockId
Telemetry: memory_card_flipped
InformationWall¶
Searchable information panels.
Component page: InformationWall demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
BlockId |
yes |
Stable block id. |
|
InformationPanel[] |
yes |
Content panels. |
Required IDs: blockId
Telemetry: information_wall_search
ParallaxSlideshow¶
Slideshow with parallax; static fallback when reduced motion.
Component page: ParallaxSlideshow demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
BlockId |
yes |
Stable block id. |
|
ParallaxSlide[] |
yes |
Slides. |
Required IDs: blockId
Telemetry: parallax_slide_viewed
Accordion¶
Expandable sections.
Component page: Accordion demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
BlockId |
yes |
Stable block id. |
|
AccordionSection[] |
yes |
Sections. |
Required IDs: blockId
Telemetry: accordion_section_toggled
DialogCards¶
Flip cards with front/back text.
Component page: DialogCards demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
BlockId |
yes |
Stable block id. |
|
DialogCard[] |
yes |
Cards. |
Required IDs: blockId
Flashcards¶
Study flashcards with optional self-score.
Component page: Flashcards demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
BlockId |
yes |
Stable block id. |
|
Flashcard[] |
yes |
Cards. |
|
boolean |
no |
Self-score mode. |
Required IDs: blockId
Telemetry: flashcard_flipped
ImageHotspots¶
Image with clickable hotspot popovers.
Component page: ImageHotspots demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
BlockId |
yes |
Stable block id. |
|
string |
yes |
Image URL. |
|
string |
yes |
Alt text. |
|
HotspotSpec[] |
yes |
Hotspots. |
Required IDs: blockId
Telemetry: hotspot_opened
ImageSlider¶
Carousel of images.
Component page: ImageSlider demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
BlockId |
yes |
Stable block id. |
|
ImageSlide[] |
yes |
Slides. |
Required IDs: blockId
Telemetry: image_slider_changed
FindHotspot¶
Select the correct region on an image.
Component page: FindHotspot demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
CheckId |
yes |
Stable check id. |
|
string |
yes |
Image URL. |
|
string |
yes |
Alt text. |
|
HotspotTarget[] |
yes |
Targets. |
|
string |
yes |
Correct target id. |
|
boolean |
no |
Allow retry after completion. |
|
boolean |
no |
Show solution control. |
|
boolean |
no |
Check answers automatically when possible. |
|
number |
no |
Minimum score to pass. |
Required IDs: checkId
Telemetry: assessment_answered, assessment_completed
FindMultipleHotspots¶
Select all correct regions on an image.
Component page: FindMultipleHotspots demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
CheckId |
yes |
Stable check id. |
|
string |
yes |
Image URL. |
|
string |
yes |
Alt text. |
|
HotspotTarget[] |
yes |
Targets. |
|
string[] |
yes |
Correct target ids. |
|
boolean |
no |
Allow retry after completion. |
|
boolean |
no |
Show solution control. |
|
boolean |
no |
Check answers automatically when possible. |
|
number |
no |
Minimum score to pass. |
Required IDs: checkId
Telemetry: assessment_answered, assessment_completed
Table¶
Rich text table with caption.
Component page: Table demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
BlockId |
yes |
Stable block id. |
|
string |
no |
Table caption. |
|
string[] |
yes |
Column headers. |
|
string[][] |
yes |
Table rows. |
Required IDs: blockId
ImageJuxtaposition¶
Before/after image comparison slider.
Component page: ImageJuxtaposition demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
BlockId |
yes |
Stable block id. |
|
string |
yes |
Before image URL. |
|
string |
yes |
After image URL. |
|
string |
yes |
Before alt text. |
|
string |
yes |
After alt text. |
Required IDs: blockId
Telemetry: image_juxtaposition_changed
Timeline¶
Vertical timeline of events.
Component page: Timeline demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
BlockId |
yes |
Stable block id. |
|
TimelineEvent[] |
yes |
Timeline events. |
Required IDs: blockId
Telemetry: timeline_event_viewed
ImageSequence¶
Progressive image sequence blend.
Component page: ImageSequence demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
BlockId |
yes |
Stable block id. |
|
SequenceFrame[] |
yes |
Sequence frames. |
Required IDs: blockId
Telemetry: image_sequence_changed
Collage¶
Multi-image grid collage.
Component page: Collage demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
BlockId |
yes |
Stable block id. |
|
number |
no |
Grid columns. |
|
CollageCell[] |
yes |
Collage cells. |
Required IDs: blockId
AudioRecorder¶
Learner audio recording (client-only storage).
Component page: AudioRecorder demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
BlockId |
yes |
Stable block id. |
|
number |
no |
Max recording length. |
|
string |
no |
Consent checkbox label. |
Required IDs: blockId
Telemetry: audio_recording_started, audio_recording_completed
CombinationLock¶
Enter a digit combination to unlock.
Component page: CombinationLock demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
CheckId |
yes |
Stable check id. |
|
string |
yes |
Correct combination. |
|
string |
no |
Prompt label. |
|
boolean |
no |
Allow retry after completion. |
|
boolean |
no |
Show solution control. |
|
boolean |
no |
Check answers automatically when possible. |
|
number |
no |
Minimum score to pass. |
Required IDs: checkId
Telemetry: assessment_answered, assessment_completed
QrContent¶
QR code with revealable hidden content.
Component page: QrContent demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
BlockId |
yes |
Stable block id. |
|
string |
yes |
QR payload URL or text. |
|
string |
no |
Block title. |
|
string |
no |
Revealed title. |
|
string |
no |
Revealed body. |
Required IDs: blockId
Telemetry: qr_content_revealed
Crossword¶
Crossword puzzle grid.
Component page: Crossword demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
CheckId |
yes |
Stable check id. |
|
number |
yes |
Grid rows. |
|
number |
yes |
Grid columns. |
|
CrosswordEntry[] |
yes |
Clues and answers. |
|
boolean |
no |
Allow retry after completion. |
|
boolean |
no |
Show solution control. |
|
boolean |
no |
Check answers automatically when possible. |
|
number |
no |
Minimum score to pass. |
Required IDs: checkId
Telemetry: assessment_answered, assessment_completed
WordSearch¶
Word search puzzle (page-level only; excluded from compounds).
Component page: WordSearch demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
CheckId |
yes |
Stable check id. |
|
string[] |
yes |
Words to find. |
|
number |
no |
Grid size. |
|
boolean |
no |
Allow retry after completion. |
|
boolean |
no |
Show solution control. |
|
boolean |
no |
Check answers automatically when possible. |
|
number |
no |
Minimum score to pass. |
Required IDs: checkId
Telemetry: assessment_answered, assessment_completed
AdventCalendar¶
Calendar with openable doors.
Component page: AdventCalendar demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
BlockId |
yes |
Stable block id. |
|
AdventDoor[] |
yes |
Calendar doors. |
|
string |
no |
ISO date to unlock doors. |
Required IDs: blockId
Telemetry: advent_door_opened
MapStage¶
Spatial stage in a GameMap with content and exits.
Component page: MapStage demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
string |
yes |
Unique stage id. |
|
number |
yes |
X position percent on map. |
|
number |
yes |
Y position percent on map. |
|
string |
no |
Stage label. |
|
ReactNode |
yes |
Content and MapExit controls. |
Telemetry: map_stage_viewed
MapExit¶
Transition control linking to a target MapStage.
Component page: MapExit demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
string |
yes |
Exit label. |
|
string |
yes |
Target stage id. |
|
number |
no |
Optional exit score weight. |
Telemetry: map_exit_selected
GameMap¶
Spatial map branching with scored stages.
Component page: GameMap demo (live embed + when to use)
Prop |
Type |
Required |
Description |
|---|---|---|---|
|
BlockId |
yes |
Stable block id. |
|
string |
yes |
Map title. |
|
string |
yes |
Background image URL. |
|
string |
yes |
Entry stage id. |
|
boolean |
no |
Show visited-path score. |
|
MapStage[] |
yes |
Map stages. |
Required IDs: blockId
Telemetry: map_stage_viewed, map_exit_selected
Regenerate after catalog changes: node docs/scripts/generate-block-props-doc.mjs.
Component pages (live demos)¶
Focused Read the Docs pages render the real component, explain when to use it, and show copy-paste examples: Component pages (59 pages — full catalog coverage).
Generated prop tables below link to the matching component page when one exists. Storybook remains useful for visual state matrices.
Storybook examples¶
Visual states and props for shipped blocks live in the monorepo Storybook gallery:
Gallery: Storybook on GitHub Pages
Local:
npm run storybookfrom the repo root (afternpm run build:packages)
Story group |
Blocks demonstrated |
|---|---|
|
|
|
|
|
|
|
|
|
For blocks without a dedicated story yet, see framework-12-showcase and components guide.
Cross-references¶
H5P mapping: H5P capability map
Identity: Identity reference — id format and URNs (
@lessonkit/core/identity-contract.v1.json)Telemetry events: Telemetry reference — event catalog (
@lessonkit/core/telemetry-catalog.v3.json)Theming: Theming reference — token catalog (
@lessonkit/themes/theme-catalog.v1.json)Accessibility: Accessibility reference
Reference example¶
examples/lxpack-golden smoke-renders core catalog blocks (Course, Lesson, Scenario, Quiz, KnowledgeCheck, Reflection, ProgressTracker) and is the packaging golden path for CI.
Generator checklist¶
Import
@lessonkit/react/block-catalog.v3.json(orbuildBlockCatalog({ version: 3 })) and reject unknown block types.Validate required props and IDs per entry (
requiredIds,props).Keep
courseIdand everycheckIdin sync withlessonkit.json. Forsingle-spalayouts, manifestlessons[].idlists LMS shell lesson(s) only; additional in-applessonIds may exist only in React (see Identity).Nest blocks per
parentConstraints(Quiz inside Lesson, etc.).Do not invent non-catalog blocks in framework codegen until they ship in a future runtime catalog version (see H5P capability map).
For new assessments, see catalog v2 and implement
checkIdbefore shipping.When shipping an H5P-parity block, complete the H5P documentation checklist (capability map ✅, H5P names here, authors guide, Storybook).