@lessonkit/react 0.1.0 → 0.1.1

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.cjs CHANGED
@@ -23,6 +23,7 @@ __export(index_exports, {
23
23
  Course: () => Course,
24
24
  KnowledgeCheck: () => KnowledgeCheck,
25
25
  Lesson: () => Lesson,
26
+ LessonkitProvider: () => LessonkitProvider,
26
27
  ProgressTracker: () => ProgressTracker,
27
28
  Quiz: () => Quiz,
28
29
  Reflection: () => Reflection,
@@ -52,20 +53,21 @@ function LessonkitProvider(props) {
52
53
  }, [config.tracking?.enabled, config.tracking?.sink]);
53
54
  const xapi = (0, import_react.useMemo)(() => {
54
55
  if (config.xapi?.enabled === false) return null;
55
- return config.xapi?.client ?? (0, import_xapi.createXAPIClient)();
56
- }, [config.xapi?.enabled, config.xapi?.client]);
56
+ const baseId = config.courseId ? `urn:lessonkit:course:${config.courseId}` : void 0;
57
+ return config.xapi?.client ?? (0, import_xapi.createXAPIClient)({ baseId });
58
+ }, [config.xapi?.enabled, config.xapi?.client, config.courseId]);
57
59
  const [completedLessonIds, setCompletedLessonIds] = (0, import_react.useState)(() => /* @__PURE__ */ new Set());
58
60
  const [activeLessonId, setActiveLessonId] = (0, import_react.useState)(void 0);
59
61
  const [courseCompleted, setCourseCompleted] = (0, import_react.useState)(false);
60
62
  const courseIdRef = (0, import_react.useRef)(config.courseId);
61
63
  courseIdRef.current = config.courseId;
62
64
  const track = (0, import_react.useCallback)(
63
- (name, data) => {
65
+ (name, data, opts) => {
64
66
  tracking.track({
65
67
  name,
66
68
  timestamp: (0, import_core.nowIso)(),
67
69
  courseId: courseIdRef.current,
68
- lessonId: activeLessonId,
70
+ lessonId: opts?.lessonId ?? activeLessonId,
69
71
  data
70
72
  });
71
73
  },
@@ -74,7 +76,7 @@ function LessonkitProvider(props) {
74
76
  const setActiveLesson = (0, import_react.useCallback)(
75
77
  (lessonId) => {
76
78
  setActiveLessonId(lessonId);
77
- track("lesson_started", { lessonId });
79
+ track("lesson_started", { lessonId }, { lessonId });
78
80
  xapi?.startedLesson({ lessonId });
79
81
  },
80
82
  [track, xapi]
@@ -82,7 +84,7 @@ function LessonkitProvider(props) {
82
84
  const completeLesson = (0, import_react.useCallback)(
83
85
  (lessonId) => {
84
86
  setCompletedLessonIds((prev) => new Set(prev).add(lessonId));
85
- track("lesson_completed", { lessonId });
87
+ track("lesson_completed", { lessonId }, { lessonId });
86
88
  xapi?.completeLesson({ lessonId });
87
89
  },
88
90
  [track, xapi]
@@ -236,6 +238,7 @@ function cryptoRandomId() {
236
238
  Course,
237
239
  KnowledgeCheck,
238
240
  Lesson,
241
+ LessonkitProvider,
239
242
  ProgressTracker,
240
243
  Quiz,
241
244
  Reflection,
package/dist/index.d.cts CHANGED
@@ -57,13 +57,21 @@ type LessonkitRuntime = {
57
57
  setActiveLesson: (lessonId: LessonId) => void;
58
58
  completeLesson: (lessonId: LessonId) => void;
59
59
  completeCourse: () => void;
60
- track: (name: TelemetryEvent["name"], data?: TelemetryEvent["data"]) => void;
60
+ track: (name: TelemetryEvent["name"], data?: TelemetryEvent["data"], opts?: {
61
+ lessonId?: LessonId;
62
+ }) => void;
61
63
  };
64
+ declare function LessonkitProvider(props: {
65
+ config?: LessonkitConfig;
66
+ children: React.ReactNode;
67
+ }): react_jsx_runtime.JSX.Element;
62
68
 
63
69
  declare function useLessonkit(): LessonkitRuntime;
64
70
  declare function useProgress(): ProgressState;
65
71
  declare function useTracking(): {
66
- track: (name: _lessonkit_core.TelemetryEvent["name"], data?: _lessonkit_core.TelemetryEvent["data"]) => void;
72
+ track: (name: _lessonkit_core.TelemetryEvent["name"], data?: _lessonkit_core.TelemetryEvent["data"], opts?: {
73
+ lessonId?: _lessonkit_core.LessonId;
74
+ }) => void;
67
75
  };
68
76
  declare function useCompletion(): {
69
77
  completeLesson: (lessonId: _lessonkit_core.LessonId) => void;
@@ -81,4 +89,4 @@ declare function useQuizState(): {
81
89
  }) => void;
82
90
  };
83
91
 
84
- export { Course, KnowledgeCheck, Lesson, ProgressTracker, Quiz, Reflection, Scenario, useCompletion, useLessonkit, useProgress, useQuizState, useTracking };
92
+ export { Course, KnowledgeCheck, Lesson, type LessonkitConfig, LessonkitProvider, type LessonkitRuntime, ProgressTracker, Quiz, Reflection, Scenario, useCompletion, useLessonkit, useProgress, useQuizState, useTracking };
package/dist/index.d.ts CHANGED
@@ -57,13 +57,21 @@ type LessonkitRuntime = {
57
57
  setActiveLesson: (lessonId: LessonId) => void;
58
58
  completeLesson: (lessonId: LessonId) => void;
59
59
  completeCourse: () => void;
60
- track: (name: TelemetryEvent["name"], data?: TelemetryEvent["data"]) => void;
60
+ track: (name: TelemetryEvent["name"], data?: TelemetryEvent["data"], opts?: {
61
+ lessonId?: LessonId;
62
+ }) => void;
61
63
  };
64
+ declare function LessonkitProvider(props: {
65
+ config?: LessonkitConfig;
66
+ children: React.ReactNode;
67
+ }): react_jsx_runtime.JSX.Element;
62
68
 
63
69
  declare function useLessonkit(): LessonkitRuntime;
64
70
  declare function useProgress(): ProgressState;
65
71
  declare function useTracking(): {
66
- track: (name: _lessonkit_core.TelemetryEvent["name"], data?: _lessonkit_core.TelemetryEvent["data"]) => void;
72
+ track: (name: _lessonkit_core.TelemetryEvent["name"], data?: _lessonkit_core.TelemetryEvent["data"], opts?: {
73
+ lessonId?: _lessonkit_core.LessonId;
74
+ }) => void;
67
75
  };
68
76
  declare function useCompletion(): {
69
77
  completeLesson: (lessonId: _lessonkit_core.LessonId) => void;
@@ -81,4 +89,4 @@ declare function useQuizState(): {
81
89
  }) => void;
82
90
  };
83
91
 
84
- export { Course, KnowledgeCheck, Lesson, ProgressTracker, Quiz, Reflection, Scenario, useCompletion, useLessonkit, useProgress, useQuizState, useTracking };
92
+ export { Course, KnowledgeCheck, Lesson, type LessonkitConfig, LessonkitProvider, type LessonkitRuntime, ProgressTracker, Quiz, Reflection, Scenario, useCompletion, useLessonkit, useProgress, useQuizState, useTracking };
package/dist/index.js CHANGED
@@ -15,20 +15,21 @@ function LessonkitProvider(props) {
15
15
  }, [config.tracking?.enabled, config.tracking?.sink]);
16
16
  const xapi = useMemo(() => {
17
17
  if (config.xapi?.enabled === false) return null;
18
- return config.xapi?.client ?? createXAPIClient();
19
- }, [config.xapi?.enabled, config.xapi?.client]);
18
+ const baseId = config.courseId ? `urn:lessonkit:course:${config.courseId}` : void 0;
19
+ return config.xapi?.client ?? createXAPIClient({ baseId });
20
+ }, [config.xapi?.enabled, config.xapi?.client, config.courseId]);
20
21
  const [completedLessonIds, setCompletedLessonIds] = useState(() => /* @__PURE__ */ new Set());
21
22
  const [activeLessonId, setActiveLessonId] = useState(void 0);
22
23
  const [courseCompleted, setCourseCompleted] = useState(false);
23
24
  const courseIdRef = useRef(config.courseId);
24
25
  courseIdRef.current = config.courseId;
25
26
  const track = useCallback(
26
- (name, data) => {
27
+ (name, data, opts) => {
27
28
  tracking.track({
28
29
  name,
29
30
  timestamp: nowIso(),
30
31
  courseId: courseIdRef.current,
31
- lessonId: activeLessonId,
32
+ lessonId: opts?.lessonId ?? activeLessonId,
32
33
  data
33
34
  });
34
35
  },
@@ -37,7 +38,7 @@ function LessonkitProvider(props) {
37
38
  const setActiveLesson = useCallback(
38
39
  (lessonId) => {
39
40
  setActiveLessonId(lessonId);
40
- track("lesson_started", { lessonId });
41
+ track("lesson_started", { lessonId }, { lessonId });
41
42
  xapi?.startedLesson({ lessonId });
42
43
  },
43
44
  [track, xapi]
@@ -45,7 +46,7 @@ function LessonkitProvider(props) {
45
46
  const completeLesson = useCallback(
46
47
  (lessonId) => {
47
48
  setCompletedLessonIds((prev) => new Set(prev).add(lessonId));
48
- track("lesson_completed", { lessonId });
49
+ track("lesson_completed", { lessonId }, { lessonId });
49
50
  xapi?.completeLesson({ lessonId });
50
51
  },
51
52
  [track, xapi]
@@ -198,6 +199,7 @@ export {
198
199
  Course,
199
200
  KnowledgeCheck,
200
201
  Lesson,
202
+ LessonkitProvider,
201
203
  ProgressTracker,
202
204
  Quiz,
203
205
  Reflection,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lessonkit/react",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "private": false,
5
5
  "description": "React components and hooks for building learning experiences with LessonKit.",
6
6
  "license": "Apache-2.0",
@@ -49,8 +49,8 @@
49
49
  "react-dom": ">=18"
50
50
  },
51
51
  "dependencies": {
52
- "@lessonkit/core": "0.1.0",
53
- "@lessonkit/xapi": "0.1.0"
52
+ "@lessonkit/core": "0.1.1",
53
+ "@lessonkit/xapi": "0.1.1"
54
54
  },
55
55
  "devDependencies": {
56
56
  "@testing-library/react": "^16.3.0",