@lssm/example.learning-journey-registry 0.0.0-canary-20251212004227 → 0.0.0-canary-20251212210835

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.
@@ -2,16 +2,18 @@ $ bun build:bundle && bun build:types
2
2
  $ tsdown
3
3
  ℹ tsdown v0.17.0 powered by rolldown v1.0.0-beta.53
4
4
  ℹ config file: /home/runner/work/contractspec/contractspec/packages/examples/learning-journey-registry/tsdown.config.js
5
- ℹ entry: src/api-types.ts, src/api.ts, src/index.ts, src/progress-store.ts, src/tracks.ts, src/docs/index.ts, src/docs/learning-journey-registry.docblock.ts, src/presentations/index.ts
5
+ ℹ entry: src/api-types.ts, src/api.ts, src/index.ts, src/progress-store.ts, src/tracks.ts, src/docs/index.ts, src/docs/learning-journey-registry.docblock.ts, src/presentations/index.ts, src/ui/LearningMiniApp.tsx, src/ui/index.ts
6
6
  ℹ target: esnext
7
7
  ℹ tsconfig: tsconfig.json
8
8
  ℹ Build start
9
9
  ℹ dist/api.js  3.28 kB │ gzip: 1.37 kB
10
+ ℹ dist/ui/LearningMiniApp.js  1.88 kB │ gzip: 0.70 kB
10
11
  ℹ dist/tracks.js  1.30 kB │ gzip: 0.50 kB
11
12
  ℹ dist/docs/learning-journey-registry.docblock.js  1.21 kB │ gzip: 0.63 kB
13
+ ℹ dist/index.js  1.06 kB │ gzip: 0.37 kB
12
14
  ℹ dist/presentations/index.js  0.99 kB │ gzip: 0.39 kB
13
- ℹ dist/index.js  0.85 kB │ gzip: 0.31 kB
14
15
  ℹ dist/progress-store.js  0.43 kB │ gzip: 0.29 kB
16
+ ℹ dist/ui/index.js  0.19 kB │ gzip: 0.11 kB
15
17
  ℹ dist/docs/index.js  0.05 kB │ gzip: 0.07 kB
16
18
  ℹ dist/api-types.js  0.00 kB │ gzip: 0.02 kB
17
19
  ℹ dist/libs/contracts/src/docs/accessibility_wcag_compliance_specs.docblock.js 16.53 kB │ gzip: 7.16 kB
@@ -30,6 +32,6 @@ $ tsdown
30
32
  ℹ dist/libs/contracts/src/docs/tech/mcp-endpoints.docblock.js  1.07 kB │ gzip: 0.61 kB
31
33
  ℹ dist/libs/contracts/src/docs/index.js  0.85 kB │ gzip: 0.35 kB
32
34
  ℹ dist/libs/contracts/src/docs/registry.js  0.74 kB │ gzip: 0.42 kB
33
- ℹ 24 files, total: 91.33 kB
34
- ✔ Build complete in 43ms
35
+ ℹ 26 files, total: 93.60 kB
36
+ ✔ Build complete in 45ms
35
37
  $ tsc --noEmit
package/CHANGELOG.md CHANGED
@@ -1,13 +1,17 @@
1
1
  # @lssm/example.learning-journey-registry
2
2
 
3
- ## 0.0.0-canary-20251212004227
3
+ ## 0.0.0-canary-20251212210835
4
4
 
5
5
  ### Patch Changes
6
6
 
7
- - @lssm/example.learning-journey.crm-onboarding@0.0.0-canary-20251212004227
8
- - @lssm/example.learning-journey.ambient-coach@0.0.0-canary-20251212004227
9
- - @lssm/example.learning-journey.duo-drills@0.0.0-canary-20251212004227
10
- - @lssm/example.learning-journey.platform-tour@0.0.0-canary-20251212004227
11
- - @lssm/example.learning-journey.quest-challenges@0.0.0-canary-20251212004227
12
- - @lssm/example.learning-journey.studio-onboarding@0.0.0-canary-20251212004227
13
- - @lssm/module.learning-journey@0.0.0-canary-20251212004227
7
+ - @lssm/example.learning-journey.crm-onboarding@0.0.0-canary-20251212210835
8
+ - @lssm/example.learning-journey-ui-coaching@0.0.0-canary-20251212210835
9
+ - @lssm/example.learning-journey-ui-gamified@0.0.0-canary-20251212210835
10
+ - @lssm/example.learning-journey-ui-onboarding@0.0.0-canary-20251212210835
11
+ - @lssm/example.learning-journey-ui-shared@0.0.0-canary-20251212210835
12
+ - @lssm/example.learning-journey.ambient-coach@0.0.0-canary-20251212210835
13
+ - @lssm/example.learning-journey.duo-drills@0.0.0-canary-20251212210835
14
+ - @lssm/example.learning-journey.platform-tour@0.0.0-canary-20251212210835
15
+ - @lssm/example.learning-journey.quest-challenges@0.0.0-canary-20251212210835
16
+ - @lssm/example.learning-journey.studio-onboarding@0.0.0-canary-20251212210835
17
+ - @lssm/module.learning-journey@0.0.0-canary-20251212210835
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{crmLearningTracks as e,learningJourneyTracks as t,mapStep as n,mapTrackSpecToDto as r,onboardingTrackCatalog as i,platformLearningTracks as a,studioLearningTracks as o}from"./tracks.js";import{getProgress as s,listTracks as c,recordEvent as l}from"./api.js";import"./docs/index.js";import{LearningTrackDetailPresentation as u,LearningTrackListPresentation as d,LearningTrackProgressWidgetPresentation as f,learningJourneyPresentations as p}from"./presentations/index.js";export{u as LearningTrackDetailPresentation,d as LearningTrackListPresentation,f as LearningTrackProgressWidgetPresentation,e as crmLearningTracks,s as getProgress,p as learningJourneyPresentations,t as learningJourneyTracks,c as listTracks,n as mapStep,r as mapTrackSpecToDto,i as onboardingTrackCatalog,a as platformLearningTracks,l as recordEvent,o as studioLearningTracks};
1
+ import{crmLearningTracks as e,learningJourneyTracks as t,mapStep as n,mapTrackSpecToDto as r,onboardingTrackCatalog as i,platformLearningTracks as a,studioLearningTracks as o}from"./tracks.js";import{getProgress as s,listTracks as c,recordEvent as l}from"./api.js";import"./docs/index.js";import{LearningTrackDetailPresentation as u,LearningTrackListPresentation as d,LearningTrackProgressWidgetPresentation as f,learningJourneyPresentations as p}from"./presentations/index.js";import{LearningMiniApp as m,getLearningTemplateIds as h,isLearningTemplate as g}from"./ui/LearningMiniApp.js";import"./ui/index.js";export{m as LearningMiniApp,u as LearningTrackDetailPresentation,d as LearningTrackListPresentation,f as LearningTrackProgressWidgetPresentation,e as crmLearningTracks,h as getLearningTemplateIds,s as getProgress,g as isLearningTemplate,p as learningJourneyPresentations,t as learningJourneyTracks,c as listTracks,n as mapStep,r as mapTrackSpecToDto,i as onboardingTrackCatalog,a as platformLearningTracks,l as recordEvent,o as studioLearningTracks};
@@ -0,0 +1 @@
1
+ "use client";import{learningJourneyTracks as e}from"../tracks.js";import{useMemo as t}from"react";import{GamifiedMiniApp as n}from"@lssm/example.learning-journey-ui-gamified";import{OnboardingMiniApp as r}from"@lssm/example.learning-journey-ui-onboarding";import{CoachingMiniApp as i}from"@lssm/example.learning-journey-ui-coaching";import{jsx as a,jsxs as o}from"react/jsx-runtime";const s={"learning-journey-duo-drills":`drills_language_basics`,"learning-journey-quest-challenges":`money_reset_7day`,"learning-journey-studio-onboarding":`studio_getting_started`,"learning-journey-platform-tour":`platform_tour`,"learning-journey-ambient-coach":`money_ambient_coach`,"learning-journey-crm-onboarding":`crm_first_win`},c={"learning-journey-duo-drills":`gamified`,"learning-journey-quest-challenges":`gamified`,"learning-journey-studio-onboarding":`onboarding`,"learning-journey-platform-tour":`onboarding`,"learning-journey-ambient-coach":`coaching`,"learning-journey-crm-onboarding":`coaching`};function l({templateId:l,initialView:u=`overview`,onViewChange:d}){let f=t(()=>{let t=s[l];return t?e.find(e=>e.id===t):null},[l]),p=c[l];if(!f)return a(`div`,{className:`rounded-lg border border-amber-500/50 bg-amber-500/10 p-6 text-center`,children:o(`p`,{className:`text-amber-500`,children:[`Unknown learning template: `,l]})});switch(p){case`gamified`:return a(n,{track:f,initialView:u,onViewChange:d});case`onboarding`:return a(r,{track:f,initialView:u,onViewChange:d});case`coaching`:return a(i,{track:f,initialView:u,onViewChange:d});default:return a(`div`,{className:`rounded-lg border border-red-500/50 bg-red-500/10 p-6 text-center`,children:o(`p`,{className:`text-red-500`,children:[`Unknown app type for template: `,l]})})}}function u(e){return e in s}function d(){return Object.keys(s)}export{l as LearningMiniApp,d as getLearningTemplateIds,u as isLearningTemplate};
@@ -0,0 +1 @@
1
+ import{LearningMiniApp as e,getLearningTemplateIds as t,isLearningTemplate as n}from"./LearningMiniApp.js";export{e as LearningMiniApp,t as getLearningTemplateIds,n as isLearningTemplate};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lssm/example.learning-journey-registry",
3
- "version": "0.0.0-canary-20251212004227",
3
+ "version": "0.0.0-canary-20251212210835",
4
4
  "description": "Registry that aggregates learning journey example tracks.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -14,6 +14,8 @@
14
14
  "./presentations": "./src/presentations/index.ts",
15
15
  "./progress-store": "./src/progress-store.ts",
16
16
  "./tracks": "./src/tracks.ts",
17
+ "./ui": "./src/ui/index.ts",
18
+ "./ui/LearningMiniApp": "./src/ui/LearningMiniApp.tsx",
17
19
  "./*": "./*"
18
20
  },
19
21
  "scripts": {
@@ -34,14 +36,23 @@
34
36
  "@lssm/example.learning-journey.platform-tour": "workspace:*",
35
37
  "@lssm/example.learning-journey.quest-challenges": "workspace:*",
36
38
  "@lssm/example.learning-journey.studio-onboarding": "workspace:*",
37
- "@lssm/module.learning-journey": "workspace:*"
39
+ "@lssm/example.learning-journey-ui-shared": "workspace:*",
40
+ "@lssm/example.learning-journey-ui-gamified": "workspace:*",
41
+ "@lssm/example.learning-journey-ui-onboarding": "workspace:*",
42
+ "@lssm/example.learning-journey-ui-coaching": "workspace:*",
43
+ "@lssm/module.learning-journey": "workspace:*",
44
+ "react": "^19.1.0"
38
45
  },
39
46
  "devDependencies": {
40
47
  "@lssm/tool.tsdown": "workspace:*",
41
48
  "@lssm/tool.typescript": "workspace:*",
49
+ "@types/react": "^19.1.6",
42
50
  "tsdown": "^0.17.0",
43
51
  "typescript": "^5.9.3"
44
52
  },
53
+ "peerDependencies": {
54
+ "react": "^18.0.0 || ^19.0.0"
55
+ },
45
56
  "module": "./dist/index.js",
46
57
  "publishConfig": {
47
58
  "exports": {
@@ -53,6 +64,8 @@
53
64
  "./presentations": "./dist/presentations/index.js",
54
65
  "./progress-store": "./dist/progress-store.js",
55
66
  "./tracks": "./dist/tracks.js",
67
+ "./ui": "./dist/ui/index.js",
68
+ "./ui/LearningMiniApp": "./dist/ui/LearningMiniApp.js",
56
69
  "./*": "./*"
57
70
  }
58
71
  }
package/src/index.ts CHANGED
@@ -3,3 +3,4 @@ import './docs';
3
3
  export * from './tracks';
4
4
  export * from './api';
5
5
  export * from './presentations';
6
+ export * from './ui';
@@ -0,0 +1,122 @@
1
+ 'use client';
2
+
3
+ import { useMemo } from 'react';
4
+ import { GamifiedMiniApp } from '@lssm/example.learning-journey-ui-gamified';
5
+ import { OnboardingMiniApp } from '@lssm/example.learning-journey-ui-onboarding';
6
+ import { CoachingMiniApp } from '@lssm/example.learning-journey-ui-coaching';
7
+ import type { LearningView } from '@lssm/example.learning-journey-ui-shared';
8
+ import { learningJourneyTracks } from '../tracks';
9
+
10
+ /** Template IDs that map to learning journey tracks */
11
+ type LearningTemplateId =
12
+ | 'learning-journey-duo-drills'
13
+ | 'learning-journey-quest-challenges'
14
+ | 'learning-journey-studio-onboarding'
15
+ | 'learning-journey-platform-tour'
16
+ | 'learning-journey-ambient-coach'
17
+ | 'learning-journey-crm-onboarding';
18
+
19
+ /** Map template IDs to track IDs */
20
+ const TEMPLATE_TO_TRACK: Record<LearningTemplateId, string> = {
21
+ 'learning-journey-duo-drills': 'drills_language_basics',
22
+ 'learning-journey-quest-challenges': 'money_reset_7day',
23
+ 'learning-journey-studio-onboarding': 'studio_getting_started',
24
+ 'learning-journey-platform-tour': 'platform_tour',
25
+ 'learning-journey-ambient-coach': 'money_ambient_coach',
26
+ 'learning-journey-crm-onboarding': 'crm_first_win',
27
+ };
28
+
29
+ /** Map template IDs to mini-app type */
30
+ const TEMPLATE_TO_APP_TYPE: Record<
31
+ LearningTemplateId,
32
+ 'gamified' | 'onboarding' | 'coaching'
33
+ > = {
34
+ 'learning-journey-duo-drills': 'gamified',
35
+ 'learning-journey-quest-challenges': 'gamified',
36
+ 'learning-journey-studio-onboarding': 'onboarding',
37
+ 'learning-journey-platform-tour': 'onboarding',
38
+ 'learning-journey-ambient-coach': 'coaching',
39
+ 'learning-journey-crm-onboarding': 'coaching',
40
+ };
41
+
42
+ interface LearningMiniAppProps {
43
+ templateId: string;
44
+ initialView?: LearningView;
45
+ onViewChange?: (view: LearningView) => void;
46
+ }
47
+
48
+ /** Router component that picks the correct mini-app based on template ID */
49
+ export function LearningMiniApp({
50
+ templateId,
51
+ initialView = 'overview',
52
+ onViewChange,
53
+ }: LearningMiniAppProps) {
54
+ // Find the track for this template
55
+ const track = useMemo(() => {
56
+ const trackId = TEMPLATE_TO_TRACK[templateId as LearningTemplateId];
57
+ if (!trackId) return null;
58
+ return learningJourneyTracks.find((t) => t.id === trackId);
59
+ }, [templateId]);
60
+
61
+ // Determine app type
62
+ const appType = TEMPLATE_TO_APP_TYPE[templateId as LearningTemplateId];
63
+
64
+ if (!track) {
65
+ return (
66
+ <div className="rounded-lg border border-amber-500/50 bg-amber-500/10 p-6 text-center">
67
+ <p className="text-amber-500">
68
+ Unknown learning template: {templateId}
69
+ </p>
70
+ </div>
71
+ );
72
+ }
73
+
74
+ // Render the appropriate mini-app
75
+ switch (appType) {
76
+ case 'gamified':
77
+ return (
78
+ <GamifiedMiniApp
79
+ track={track}
80
+ initialView={initialView}
81
+ onViewChange={onViewChange}
82
+ />
83
+ );
84
+ case 'onboarding':
85
+ return (
86
+ <OnboardingMiniApp
87
+ track={track}
88
+ initialView={initialView}
89
+ onViewChange={onViewChange}
90
+ />
91
+ );
92
+ case 'coaching':
93
+ return (
94
+ <CoachingMiniApp
95
+ track={track}
96
+ initialView={initialView}
97
+ onViewChange={onViewChange}
98
+ />
99
+ );
100
+ default:
101
+ return (
102
+ <div className="rounded-lg border border-red-500/50 bg-red-500/10 p-6 text-center">
103
+ <p className="text-red-500">
104
+ Unknown app type for template: {templateId}
105
+ </p>
106
+ </div>
107
+ );
108
+ }
109
+ }
110
+
111
+ /** Check if a template ID is a learning journey template */
112
+ export function isLearningTemplate(
113
+ templateId: string
114
+ ): templateId is LearningTemplateId {
115
+ return templateId in TEMPLATE_TO_TRACK;
116
+ }
117
+
118
+ /** Get all learning template IDs */
119
+ export function getLearningTemplateIds(): LearningTemplateId[] {
120
+ return Object.keys(TEMPLATE_TO_TRACK) as LearningTemplateId[];
121
+ }
122
+
@@ -0,0 +1,6 @@
1
+ export {
2
+ LearningMiniApp,
3
+ isLearningTemplate,
4
+ getLearningTemplateIds,
5
+ } from './LearningMiniApp';
6
+