@lessonkit/react 1.3.0 → 1.4.0

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/index.d.cts CHANGED
@@ -1,11 +1,11 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import React$1 from 'react';
1
+ import React__default from 'react';
3
2
  import * as _lessonkit_core from '@lessonkit/core';
4
- import { TelemetryEvent, CourseId, TelemetryUser, TrackingClient, LessonkitPlugin, ProgressState, StoragePort, LessonId, TelemetryEventName, TelemetryDataFor, PluginHost, AssessmentHandle, BlockId, AssessmentBaseProps, AssessmentBehaviour, CompoundHandle, AssessmentAnsweredData, AssessmentCompletedData, CheckId } from '@lessonkit/core';
5
- export { AssessmentAnsweredData, AssessmentBaseProps, AssessmentBehaviour, AssessmentCompletedData, AssessmentHandle, AssessmentInteractionType, AssessmentScoreInput, AssessmentScoreResult, AssessmentXAPIData, CompoundBaseProps, CompoundHandle, CompoundResumeState, InteractionBlockRegistration, LessonkitPlugin, LessonkitPluginContext, LessonkitPluginKind, PluginHost, PluginRegistry, TelemetryPipelineSink, buildTelemetryEvent, createLessonkitRuntime, createPluginRegistry, createTelemetryPipeline, defineAssessmentPlugin, defineLifecyclePlugin, defineTelemetryPlugin } from '@lessonkit/core';
6
- import { McqAssessmentDescriptor } from '@lessonkit/lxpack';
3
+ import { TelemetryEvent, CourseId, TelemetryUser, TrackingClient, LmsBridgeMode, LessonkitPlugin, ProgressState, StoragePort, LessonId, TelemetryEventName, TelemetryDataFor, PluginHost, McqAssessmentProps, BlockId, AssessmentAnsweredData, AssessmentCompletedData, CheckId } from '@lessonkit/core';
4
+ export { AssessmentAnsweredData, AssessmentBaseProps, AssessmentBehaviour, AssessmentCompletedData, AssessmentHandle, AssessmentInteractionType, AssessmentScoreInput, AssessmentScoreResult, AssessmentXAPIData, CompoundBaseProps, CompoundHandle, CompoundResumeState, InteractionBlockRegistration, LessonkitPlugin, LessonkitPluginContext, LessonkitPluginKind, LmsBridgeMode, McqAssessmentProps, PluginHost, PluginRegistry, TelemetryPipelineSink, buildTelemetryEvent, createLessonkitRuntime, createPluginRegistry, createTelemetryPipeline, defineAssessmentPlugin, defineLifecyclePlugin, defineTelemetryPlugin } from '@lessonkit/core';
5
+ import * as _lessonkit_xapi from '@lessonkit/xapi';
7
6
  import { XAPITransport, XAPIClient } from '@lessonkit/xapi';
8
- import { LxpackBridgeMode } from '@lessonkit/lxpack/bridge';
7
+ export { Accordion, AccordionProps, AccordionSection, ArithmeticProblem, ArithmeticQuiz, ArithmeticQuizProps, AssessmentSequence, AssessmentSequenceProps, DialogCard, DialogCards, DialogCardsProps, DragAndDrop, DragAndDropProps, DragItem, DragTheWords, DragTheWordsProps, DropTarget, Essay, EssayProps, FillInBlankSpec, FillInTheBlanks, FillInTheBlanksProps, FindHotspot, FindHotspotProps, FindMultipleHotspots, FindMultipleHotspotsProps, Flashcard, Flashcards, FlashcardsProps, Heading, HeadingProps, HotspotSpec, HotspotTarget, Image, ImageHotspots, ImageHotspotsProps, ImagePair, ImagePairing, ImagePairingProps, ImageProps, ImageSequencing, ImageSequencingProps, ImageSlide, ImageSlider, ImageSliderProps, InformationPanel, InformationWall, InformationWallProps, InteractiveBook, InteractiveBookProps, InteractiveVideo, InteractiveVideoProps, MarkTheWords, MarkTheWordsProps, MemoryGame, MemoryGameProps, MemoryPair, Page, PageProps, ParallaxSlide, ParallaxSlideshow, ParallaxSlideshowProps, Questionnaire, QuestionnaireField, QuestionnaireProps, SequencingImage, Slide, SlideDeck, SlideDeckProps, SlideProps, Summary, SummaryProps, Text, TextProps, TimedCue, TimedCueProps, TrueFalse, TrueFalseProps, Video, VideoProps } from './blocks-entry.cjs';
8
+ export { K as KnowledgeCheck, Q as Quiz, a as QuizProps, r as resetAssessmentWarningsForTests, b as resetQuizWarningsForTests } from './AssessmentLessonGuard-D2Plzybb.cjs';
9
9
  import { LessonkitThemeV1, ThemePresetName, PartialLessonkitThemeV1 } from '@lessonkit/themes';
10
10
  export { ThemePresetName } from '@lessonkit/themes';
11
11
 
@@ -22,6 +22,8 @@ type LessonkitObservabilityConfig = {
22
22
  onTelemetryBufferDrop?: () => void;
23
23
  /** LMS bridge missing for a completion-related telemetry event (`bridge: auto`). */
24
24
  onLxpackBridgeMiss?: (event: TelemetryEvent) => void;
25
+ /** xAPI transport failure after retries (statement re-queued). */
26
+ onXapiTransportError?: (err: unknown) => void;
25
27
  };
26
28
 
27
29
  type LessonkitConfig = {
@@ -37,6 +39,8 @@ type LessonkitConfig = {
37
39
  enabled?: boolean;
38
40
  sink?: (event: Parameters<TrackingClient["track"]>[0]) => void | Promise<void>;
39
41
  batchSink?: (events: Parameters<TrackingClient["track"]>[0][]) => void | Promise<void>;
42
+ /** Keepalive batch delivery for pagehide (e.g. from createFetchBatchSink). */
43
+ exitBatchSink?: (events: Parameters<TrackingClient["track"]>[0][]) => void | Promise<void>;
40
44
  batch?: {
41
45
  enabled?: boolean;
42
46
  flushIntervalMs?: number;
@@ -46,11 +50,15 @@ type LessonkitConfig = {
46
50
  xapi?: {
47
51
  enabled?: boolean;
48
52
  transport?: XAPITransport;
53
+ /** Keepalive transport for pagehide (e.g. from createFetchTransport). */
54
+ exitTransport?: _lessonkit_xapi.XAPIExitTransport;
55
+ /** Abort in-flight transport by statement id (e.g. from createFetchTransport). */
56
+ abortInFlight?: (statementId: string) => void;
49
57
  client?: XAPIClient;
50
58
  };
51
59
  lxpack?: {
52
60
  /** Forward completion events to `window.parent.lxpackBridge.v1` when embedded (default `auto`). */
53
- bridge?: LxpackBridgeMode;
61
+ bridge?: LmsBridgeMode;
54
62
  };
55
63
  /** Framework plugins (analytics, LMS, assessment, interaction, AI). */
56
64
  plugins?: LessonkitPlugin[];
@@ -64,7 +72,7 @@ type LessonkitConfig = {
64
72
 
65
73
  type LessonkitProviderProps = {
66
74
  config: LessonkitConfig;
67
- children: React$1.ReactNode;
75
+ children: React__default.ReactNode;
68
76
  };
69
77
  type LessonkitRuntime = {
70
78
  config: LessonkitConfig;
@@ -87,30 +95,24 @@ type LessonkitRuntime = {
87
95
  }) => void;
88
96
  plugins: PluginHost | null;
89
97
  };
90
- declare function LessonkitProvider(props: LessonkitProviderProps): react_jsx_runtime.JSX.Element;
91
-
92
- type QuizProps = McqAssessmentDescriptor;
93
- declare const Quiz: React$1.ForwardRefExoticComponent<McqAssessmentDescriptor & React$1.RefAttributes<AssessmentHandle>>;
94
- declare function KnowledgeCheck(props: QuizProps): react_jsx_runtime.JSX.Element;
95
- /** @internal Reset module warnings between tests. */
96
- declare function resetQuizWarningsForTests(): void;
98
+ declare function LessonkitProvider(props: LessonkitProviderProps): React__default.JSX.Element;
97
99
 
98
100
  type CourseProps = {
99
101
  title: string;
100
102
  courseId: CourseId;
101
103
  config?: Omit<LessonkitConfig, "courseId">;
102
- children: React$1.ReactNode;
104
+ children: React__default.ReactNode;
103
105
  };
104
106
  type LessonProps = {
105
107
  title: string;
106
108
  lessonId: LessonId;
107
109
  /** When false, unmount does not emit lesson_completed (for routed multi-pane layouts). Default true. */
108
110
  autoCompleteOnUnmount?: boolean;
109
- children: React$1.ReactNode;
111
+ children: React__default.ReactNode;
110
112
  };
111
113
  type ScenarioProps = {
112
114
  blockId?: BlockId;
113
- children: React$1.ReactNode;
115
+ children: React__default.ReactNode;
114
116
  };
115
117
  type ReflectionProps = {
116
118
  blockId?: BlockId;
@@ -118,270 +120,17 @@ type ReflectionProps = {
118
120
  hint?: string;
119
121
  value?: string;
120
122
  onChange?: (value: string) => void;
121
- children?: React$1.ReactNode;
123
+ children?: React__default.ReactNode;
122
124
  };
123
- type KnowledgeCheckProps = McqAssessmentDescriptor;
125
+ type KnowledgeCheckProps = McqAssessmentProps;
124
126
  type ProgressTrackerProps = {
125
127
  totalLessons?: number;
126
128
  };
127
- declare function Course(props: CourseProps): react_jsx_runtime.JSX.Element;
128
- declare function Lesson(props: LessonProps): react_jsx_runtime.JSX.Element;
129
- declare function Scenario(props: ScenarioProps): react_jsx_runtime.JSX.Element;
130
- declare function Reflection(props: ReflectionProps): react_jsx_runtime.JSX.Element;
131
- declare function ProgressTracker(props: ProgressTrackerProps): react_jsx_runtime.JSX.Element;
132
-
133
- type TrueFalseProps = AssessmentBaseProps & {
134
- question: string;
135
- answer: boolean;
136
- };
137
- declare const TrueFalse: React$1.ForwardRefExoticComponent<_lessonkit_core.AssessmentBehaviour & {
138
- checkId: _lessonkit_core.CheckId;
139
- passingScore?: number;
140
- } & {
141
- question: string;
142
- answer: boolean;
143
- } & React$1.RefAttributes<AssessmentHandle>>;
144
-
145
- type MarkTheWordsProps = AssessmentBaseProps & {
146
- /** Plain text; words listed in `correctWords` are selectable targets. */
147
- text: string;
148
- correctWords: string[];
149
- };
150
- declare const MarkTheWords: React$1.ForwardRefExoticComponent<_lessonkit_core.AssessmentBehaviour & {
151
- checkId: _lessonkit_core.CheckId;
152
- passingScore?: number;
153
- } & {
154
- /** Plain text; words listed in `correctWords` are selectable targets. */
155
- text: string;
156
- correctWords: string[];
157
- } & React$1.RefAttributes<AssessmentHandle>>;
158
-
159
- type FillInBlankSpec = {
160
- id: string;
161
- answer: string;
162
- };
163
- type FillInTheBlanksProps = AssessmentBaseProps & {
164
- /** Text with `*` wrapping each blank answer, e.g. "The *capital* of France is *Paris*." */
165
- template: string;
166
- /** Optional explicit blanks (overrides parsing from template). */
167
- blanks?: FillInBlankSpec[];
168
- };
169
- declare const FillInTheBlanks: React$1.ForwardRefExoticComponent<_lessonkit_core.AssessmentBehaviour & {
170
- checkId: _lessonkit_core.CheckId;
171
- passingScore?: number;
172
- } & {
173
- /** Text with `*` wrapping each blank answer, e.g. "The *capital* of France is *Paris*." */
174
- template: string;
175
- /** Optional explicit blanks (overrides parsing from template). */
176
- blanks?: FillInBlankSpec[];
177
- } & React$1.RefAttributes<AssessmentHandle>>;
178
-
179
- type DragTheWordsProps = AssessmentBaseProps & {
180
- /** Sentence with `*` around drop zones; `words` are draggable options. */
181
- template: string;
182
- words: string[];
183
- };
184
- declare const DragTheWords: React$1.ForwardRefExoticComponent<_lessonkit_core.AssessmentBehaviour & {
185
- checkId: _lessonkit_core.CheckId;
186
- passingScore?: number;
187
- } & {
188
- /** Sentence with `*` around drop zones; `words` are draggable options. */
189
- template: string;
190
- words: string[];
191
- } & React$1.RefAttributes<AssessmentHandle>>;
192
-
193
- type DragItem = {
194
- id: string;
195
- label: string;
196
- };
197
- type DropTarget = {
198
- id: string;
199
- label: string;
200
- accepts: string;
201
- };
202
- type DragAndDropProps = AssessmentBaseProps & {
203
- items: DragItem[];
204
- targets: DropTarget[];
205
- };
206
- declare const DragAndDrop: React$1.ForwardRefExoticComponent<_lessonkit_core.AssessmentBehaviour & {
207
- checkId: _lessonkit_core.CheckId;
208
- passingScore?: number;
209
- } & {
210
- items: DragItem[];
211
- targets: DropTarget[];
212
- } & React$1.RefAttributes<AssessmentHandle>>;
213
-
214
- type AssessmentSequenceProps = AssessmentBehaviour & {
215
- children: React$1.ReactNode;
216
- /** Show one child assessment at a time (Question Set). */
217
- sequential?: boolean;
218
- blockId?: BlockId;
219
- };
220
- declare const AssessmentSequence: React$1.ForwardRefExoticComponent<AssessmentBehaviour & {
221
- children: React$1.ReactNode;
222
- /** Show one child assessment at a time (Question Set). */
223
- sequential?: boolean;
224
- blockId?: BlockId;
225
- } & React$1.RefAttributes<CompoundHandle>>;
226
-
227
- type TextProps = {
228
- blockId?: BlockId;
229
- children: React$1.ReactNode;
230
- };
231
- declare function Text(props: TextProps): react_jsx_runtime.JSX.Element;
232
-
233
- type HeadingProps = {
234
- blockId?: BlockId;
235
- level: 1 | 2 | 3;
236
- children: React.ReactNode;
237
- };
238
- declare function Heading(props: HeadingProps): react_jsx_runtime.JSX.Element;
239
-
240
- type ImageProps = {
241
- blockId?: BlockId;
242
- src: string;
243
- alt: string;
244
- };
245
- declare function Image(props: ImageProps): react_jsx_runtime.JSX.Element;
246
-
247
- type PageProps = {
248
- blockId: BlockId;
249
- title?: string;
250
- /** When true, page is used as a book chapter but hidden until navigated (InteractiveBook). */
251
- hidden?: boolean;
252
- /** Index within a compound parent (set by InteractiveBook). */
253
- pageIndex?: number;
254
- /** Compound parent type for telemetry (e.g. InteractiveBook). */
255
- parentType?: string;
256
- children: React$1.ReactNode;
257
- };
258
- declare function Page(props: PageProps): react_jsx_runtime.JSX.Element;
259
-
260
- type InteractiveBookProps = {
261
- blockId: BlockId;
262
- title: string;
263
- showBookScore?: boolean;
264
- children: React$1.ReactElement<PageProps> | React$1.ReactElement<PageProps>[];
265
- };
266
- declare const InteractiveBook: React$1.ForwardRefExoticComponent<InteractiveBookProps & React$1.RefAttributes<CompoundHandle>>;
267
-
268
- type SlideProps = {
269
- blockId: BlockId;
270
- title?: string;
271
- /** When true, slide is used in a deck but hidden until navigated (SlideDeck). */
272
- hidden?: boolean;
273
- /** Index within a compound parent (set by SlideDeck). */
274
- slideIndex?: number;
275
- /** Compound parent type for telemetry (e.g. SlideDeck). */
276
- parentType?: string;
277
- children: React$1.ReactNode;
278
- };
279
- declare function Slide(props: SlideProps): react_jsx_runtime.JSX.Element;
280
-
281
- type SlideDeckProps = {
282
- blockId: BlockId;
283
- title: string;
284
- showDeckScore?: boolean;
285
- children: React$1.ReactElement<SlideProps> | React$1.ReactElement<SlideProps>[];
286
- };
287
- declare const SlideDeck: React$1.ForwardRefExoticComponent<SlideDeckProps & React$1.RefAttributes<CompoundHandle>>;
288
-
289
- type AccordionSection = {
290
- id: string;
291
- title: string;
292
- content: React$1.ReactNode;
293
- };
294
- type AccordionProps = {
295
- blockId: BlockId;
296
- sections: AccordionSection[];
297
- };
298
- declare function Accordion(props: AccordionProps): react_jsx_runtime.JSX.Element;
299
-
300
- type DialogCard = {
301
- front: string;
302
- back: string;
303
- };
304
- type DialogCardsProps = {
305
- blockId: BlockId;
306
- cards: DialogCard[];
307
- };
308
- declare function DialogCards(props: DialogCardsProps): react_jsx_runtime.JSX.Element | null;
309
-
310
- type Flashcard = {
311
- front: string;
312
- back: string;
313
- };
314
- type FlashcardsProps = {
315
- blockId: BlockId;
316
- cards: Flashcard[];
317
- /** Optional self-score mode (not LMS-scored). */
318
- selfScore?: boolean;
319
- };
320
- declare function Flashcards(props: FlashcardsProps): react_jsx_runtime.JSX.Element | null;
321
-
322
- type HotspotSpec = {
323
- id: string;
324
- label: string;
325
- x: number;
326
- y: number;
327
- content: React$1.ReactNode;
328
- };
329
- type ImageHotspotsProps = {
330
- blockId: BlockId;
331
- src: string;
332
- alt: string;
333
- hotspots: HotspotSpec[];
334
- };
335
- declare function ImageHotspots(props: ImageHotspotsProps): react_jsx_runtime.JSX.Element;
336
-
337
- type ImageSlide = {
338
- src: string;
339
- alt: string;
340
- caption?: string;
341
- };
342
- type ImageSliderProps = {
343
- blockId: BlockId;
344
- slides: ImageSlide[];
345
- };
346
- declare function ImageSlider(props: ImageSliderProps): react_jsx_runtime.JSX.Element | null;
347
-
348
- type HotspotTarget = {
349
- id: string;
350
- label: string;
351
- x: number;
352
- y: number;
353
- };
354
- type FindHotspotProps = AssessmentBaseProps & {
355
- src: string;
356
- alt: string;
357
- targets: HotspotTarget[];
358
- correctTargetId: string;
359
- };
360
- declare const FindHotspot: React$1.ForwardRefExoticComponent<_lessonkit_core.AssessmentBehaviour & {
361
- checkId: _lessonkit_core.CheckId;
362
- passingScore?: number;
363
- } & {
364
- src: string;
365
- alt: string;
366
- targets: HotspotTarget[];
367
- correctTargetId: string;
368
- } & React$1.RefAttributes<AssessmentHandle>>;
369
-
370
- type FindMultipleHotspotsProps = AssessmentBaseProps & {
371
- src: string;
372
- alt: string;
373
- targets: HotspotTarget[];
374
- correctTargetIds: string[];
375
- };
376
- declare const FindMultipleHotspots: React$1.ForwardRefExoticComponent<_lessonkit_core.AssessmentBehaviour & {
377
- checkId: _lessonkit_core.CheckId;
378
- passingScore?: number;
379
- } & {
380
- src: string;
381
- alt: string;
382
- targets: HotspotTarget[];
383
- correctTargetIds: string[];
384
- } & React$1.RefAttributes<AssessmentHandle>>;
129
+ declare function Course(props: CourseProps): React__default.JSX.Element;
130
+ declare function Lesson(props: LessonProps): React__default.JSX.Element;
131
+ declare function Scenario(props: ScenarioProps): React__default.JSX.Element;
132
+ declare function Reflection(props: ReflectionProps): React__default.JSX.Element;
133
+ declare function ProgressTracker(props: ProgressTrackerProps): React__default.JSX.Element;
385
134
 
386
135
  declare function useAssessmentState(enclosingLessonId?: LessonId): {
387
136
  answer: (data: AssessmentAnsweredData) => void;
@@ -417,12 +166,17 @@ declare function useQuizState(enclosingLessonId?: LessonId): {
417
166
  }) => void;
418
167
  };
419
168
 
420
- declare function resetAssessmentWarningsForTests(): void;
169
+ declare function shouldEnforceProductionGuard(): boolean;
170
+ /**
171
+ * Throws in production when course config still uses dev-only console sinks or
172
+ * omits observability hooks while telemetry/xAPI are enabled.
173
+ */
174
+ declare function assertProductionCourseConfig(config: Pick<LessonkitConfig, "tracking" | "xapi" | "observability" | "lxpack">): void;
421
175
 
422
176
  type ThemeMode = "light" | "dark" | "system";
423
177
  type ThemeResolvedMode = "light" | "dark";
424
178
  type ThemeProviderProps = {
425
- children: React$1.ReactNode;
179
+ children: React__default.ReactNode;
426
180
  /** Partial theme merged on top of the resolved preset (last writer wins). */
427
181
  theme?: PartialLessonkitThemeV1;
428
182
  preset?: ThemePresetName;
@@ -436,7 +190,7 @@ type ThemeContextValue = {
436
190
  mode: ThemeMode;
437
191
  resolvedMode: ThemeResolvedMode;
438
192
  };
439
- declare function ThemeProvider(props: ThemeProviderProps): react_jsx_runtime.JSX.Element;
193
+ declare function ThemeProvider(props: ThemeProviderProps): React__default.JSX.Element;
440
194
  declare function useTheme(): ThemeContextValue;
441
195
 
442
196
  declare const blockCatalogVersion: 1;
@@ -700,4 +454,4 @@ type BuildBlockCatalogOptions = {
700
454
  declare function buildBlockCatalog(opts?: BuildBlockCatalogOptions): BlockCatalogEntry[] | BlockCatalogEntryV2[] | BlockCatalogEntryV3[];
701
455
  declare function getBlockCatalogEntry(type: string, opts?: BuildBlockCatalogOptions): BlockCatalogEntry | BlockCatalogEntryV2 | BlockCatalogEntryV3 | undefined;
702
456
 
703
- export { Accordion, type AccordionProps, type AccordionSection, AssessmentSequence, type AssessmentSequenceProps, BLOCK_CATALOG, BLOCK_CATALOG_V2, BLOCK_CATALOG_V3, type BlockCatalogEntry, type BlockCatalogEntryV2, type BlockCatalogEntryV3, type BlockPropSpec, Course, type CourseProps, type DialogCard, DialogCards, type DialogCardsProps, DragAndDrop, type DragAndDropProps, type DragItem, DragTheWords, type DragTheWordsProps, type DropTarget, type FillInBlankSpec, FillInTheBlanks, type FillInTheBlanksProps, FindHotspot, type FindHotspotProps, FindMultipleHotspots, type FindMultipleHotspotsProps, type Flashcard, Flashcards, type FlashcardsProps, Heading, type HeadingProps, type HotspotSpec, type HotspotTarget, Image, ImageHotspots, type ImageHotspotsProps, type ImageProps, type ImageSlide, ImageSlider, type ImageSliderProps, InteractiveBook, type InteractiveBookProps, KnowledgeCheck, type KnowledgeCheckProps, Lesson, type LessonProps, type LessonkitConfig, type LessonkitObservabilityConfig, LessonkitProvider, type LessonkitProviderProps, type LessonkitRuntime, MarkTheWords, type MarkTheWordsProps, Page, type PageProps, ProgressTracker, type ProgressTrackerProps, Quiz, type QuizProps, Reflection, type ReflectionProps, Scenario, type ScenarioProps, Slide, SlideDeck, type SlideDeckProps, type SlideProps, Text, type TextProps, type ThemeContextValue, type ThemeMode, ThemeProvider, type ThemeProviderProps, type ThemeResolvedMode, TrueFalse, type TrueFalseProps, blockCatalogV2Version, blockCatalogV3Version, blockCatalogVersion, buildBlockCatalog, getBlockCatalogEntry, resetAssessmentWarningsForTests, resetQuizWarningsForTests, useAssessmentState, useCompletion, useLessonkit, useProgress, useQuizState, useTheme, useTracking };
457
+ export { BLOCK_CATALOG, BLOCK_CATALOG_V2, BLOCK_CATALOG_V3, type BlockCatalogEntry, type BlockCatalogEntryV2, type BlockCatalogEntryV3, type BlockPropSpec, Course, type CourseProps, type KnowledgeCheckProps, Lesson, type LessonProps, type LessonkitConfig, type LessonkitObservabilityConfig, LessonkitProvider, type LessonkitProviderProps, type LessonkitRuntime, ProgressTracker, type ProgressTrackerProps, Reflection, type ReflectionProps, Scenario, type ScenarioProps, type ThemeContextValue, type ThemeMode, ThemeProvider, type ThemeProviderProps, type ThemeResolvedMode, assertProductionCourseConfig, blockCatalogV2Version, blockCatalogV3Version, blockCatalogVersion, buildBlockCatalog, getBlockCatalogEntry, shouldEnforceProductionGuard, useAssessmentState, useCompletion, useLessonkit, useProgress, useQuizState, useTheme, useTracking };