@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.
- package/.turbo/turbo-build.log +6 -4
- package/CHANGELOG.md +12 -8
- package/dist/index.js +1 -1
- package/dist/ui/LearningMiniApp.js +1 -0
- package/dist/ui/index.js +1 -0
- package/package.json +15 -2
- package/src/index.ts +1 -0
- package/src/ui/LearningMiniApp.tsx +122 -0
- package/src/ui/index.ts +6 -0
- package/tsconfig.tsbuildinfo +1 -1
package/.turbo/turbo-build.log
CHANGED
|
@@ -2,16 +2,18 @@ $ bun build:bundle && bun build:types
|
|
|
2
2
|
$ tsdown
|
|
3
3
|
[34mℹ[39m tsdown [2mv0.17.0[22m powered by rolldown [2mv1.0.0-beta.53[22m
|
|
4
4
|
[34mℹ[39m config file: [4m/home/runner/work/contractspec/contractspec/packages/examples/learning-journey-registry/tsdown.config.js[24m
|
|
5
|
-
[34mℹ[39m entry: [34msrc/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[39m
|
|
5
|
+
[34mℹ[39m entry: [34msrc/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[39m
|
|
6
6
|
[34mℹ[39m target: [34mesnext[39m
|
|
7
7
|
[34mℹ[39m tsconfig: [34mtsconfig.json[39m
|
|
8
8
|
[34mℹ[39m Build start
|
|
9
9
|
[34mℹ[39m [2mdist/[22m[1mapi.js[22m [2m 3.28 kB[22m [2m│ gzip: 1.37 kB[22m
|
|
10
|
+
[34mℹ[39m [2mdist/[22m[1mui/LearningMiniApp.js[22m [2m 1.88 kB[22m [2m│ gzip: 0.70 kB[22m
|
|
10
11
|
[34mℹ[39m [2mdist/[22m[1mtracks.js[22m [2m 1.30 kB[22m [2m│ gzip: 0.50 kB[22m
|
|
11
12
|
[34mℹ[39m [2mdist/[22m[1mdocs/learning-journey-registry.docblock.js[22m [2m 1.21 kB[22m [2m│ gzip: 0.63 kB[22m
|
|
13
|
+
[34mℹ[39m [2mdist/[22m[1mindex.js[22m [2m 1.06 kB[22m [2m│ gzip: 0.37 kB[22m
|
|
12
14
|
[34mℹ[39m [2mdist/[22m[1mpresentations/index.js[22m [2m 0.99 kB[22m [2m│ gzip: 0.39 kB[22m
|
|
13
|
-
[34mℹ[39m [2mdist/[22m[1mindex.js[22m [2m 0.85 kB[22m [2m│ gzip: 0.31 kB[22m
|
|
14
15
|
[34mℹ[39m [2mdist/[22m[1mprogress-store.js[22m [2m 0.43 kB[22m [2m│ gzip: 0.29 kB[22m
|
|
16
|
+
[34mℹ[39m [2mdist/[22m[1mui/index.js[22m [2m 0.19 kB[22m [2m│ gzip: 0.11 kB[22m
|
|
15
17
|
[34mℹ[39m [2mdist/[22m[1mdocs/index.js[22m [2m 0.05 kB[22m [2m│ gzip: 0.07 kB[22m
|
|
16
18
|
[34mℹ[39m [2mdist/[22m[1mapi-types.js[22m [2m 0.00 kB[22m [2m│ gzip: 0.02 kB[22m
|
|
17
19
|
[34mℹ[39m [2mdist/[22mlibs/contracts/src/docs/accessibility_wcag_compliance_specs.docblock.js [2m16.53 kB[22m [2m│ gzip: 7.16 kB[22m
|
|
@@ -30,6 +32,6 @@ $ tsdown
|
|
|
30
32
|
[34mℹ[39m [2mdist/[22mlibs/contracts/src/docs/tech/mcp-endpoints.docblock.js [2m 1.07 kB[22m [2m│ gzip: 0.61 kB[22m
|
|
31
33
|
[34mℹ[39m [2mdist/[22mlibs/contracts/src/docs/index.js [2m 0.85 kB[22m [2m│ gzip: 0.35 kB[22m
|
|
32
34
|
[34mℹ[39m [2mdist/[22mlibs/contracts/src/docs/registry.js [2m 0.74 kB[22m [2m│ gzip: 0.42 kB[22m
|
|
33
|
-
[34mℹ[39m
|
|
34
|
-
[32m✔[39m Build complete in [
|
|
35
|
+
[34mℹ[39m 26 files, total: 93.60 kB
|
|
36
|
+
[32m✔[39m Build complete in [32m45ms[39m
|
|
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-
|
|
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-
|
|
8
|
-
- @lssm/example.learning-journey
|
|
9
|
-
- @lssm/example.learning-journey
|
|
10
|
-
- @lssm/example.learning-journey
|
|
11
|
-
- @lssm/example.learning-journey
|
|
12
|
-
- @lssm/example.learning-journey.
|
|
13
|
-
- @lssm/
|
|
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};
|
package/dist/ui/index.js
ADDED
|
@@ -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-
|
|
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/
|
|
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
|
@@ -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
|
+
|