@lssm/example.learning-journey-registry 0.0.0-canary-20251217080011 → 1.41.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.
Files changed (143) hide show
  1. package/.turbo/turbo-build.log +53 -55
  2. package/dist/api.js +1 -170
  3. package/dist/docs/index.js +1 -1
  4. package/dist/docs/learning-journey-registry.docblock.js +1 -38
  5. package/dist/example.js +1 -34
  6. package/dist/index.js +1 -13
  7. package/dist/learning-journey-registry.feature.js +1 -66
  8. package/dist/libs/contracts/src/docs/PUBLISHING.docblock.js +76 -0
  9. package/dist/libs/contracts/src/docs/accessibility_wcag_compliance_specs.docblock.js +350 -0
  10. package/dist/libs/contracts/src/docs/index.js +1 -0
  11. package/dist/libs/contracts/src/docs/presentations.js +1 -0
  12. package/dist/libs/contracts/src/docs/registry.js +1 -0
  13. package/dist/libs/contracts/src/docs/tech/PHASE_1_QUICKSTART.docblock.js +383 -0
  14. package/dist/libs/contracts/src/docs/tech/PHASE_2_AI_NATIVE_OPERATIONS.docblock.js +68 -0
  15. package/dist/libs/contracts/src/docs/tech/PHASE_3_AUTO_EVOLUTION.docblock.js +140 -0
  16. package/dist/libs/contracts/src/docs/tech/PHASE_4_PERSONALIZATION_ENGINE.docblock.js +86 -0
  17. package/dist/libs/contracts/src/docs/tech/PHASE_5_ZERO_TOUCH_OPERATIONS.docblock.js +1 -0
  18. package/dist/libs/contracts/{dist → src}/docs/tech/auth/better-auth-nextjs.docblock.js +2 -24
  19. package/dist/libs/contracts/{dist → src}/docs/tech/contracts/openapi-export.docblock.js +2 -21
  20. package/dist/libs/contracts/src/docs/tech/lifecycle-stage-system.docblock.js +213 -0
  21. package/dist/libs/contracts/{dist → src}/docs/tech/llm/llm-integration.docblock.js +5 -73
  22. package/dist/libs/contracts/src/docs/tech/mcp-endpoints.docblock.js +1 -0
  23. package/dist/libs/contracts/src/docs/tech/presentation-runtime.docblock.js +1 -0
  24. package/dist/libs/contracts/src/docs/tech/schema/README.docblock.js +262 -0
  25. package/dist/libs/contracts/src/docs/tech/studio/learning-events.docblock.js +1 -0
  26. package/dist/libs/contracts/{dist → src}/docs/tech/studio/learning-journeys.docblock.js +2 -24
  27. package/dist/libs/contracts/{dist → src}/docs/tech/studio/platform-admin-panel.docblock.js +2 -23
  28. package/dist/libs/contracts/src/docs/tech/studio/project-access-teams.docblock.js +36 -0
  29. package/dist/libs/contracts/src/docs/tech/studio/project-routing.docblock.js +1 -0
  30. package/dist/libs/contracts/src/docs/tech/studio/sandbox-unlogged.docblock.js +20 -0
  31. package/dist/libs/contracts/{dist → src}/docs/tech/studio/team-invitations.docblock.js +36 -40
  32. package/dist/libs/contracts/src/docs/tech/studio/workspace-ops.docblock.js +1 -0
  33. package/dist/libs/contracts/{dist → src}/docs/tech/studio/workspaces.docblock.js +2 -23
  34. package/dist/libs/contracts/{dist → src}/docs/tech/telemetry-ingest.docblock.js +3 -36
  35. package/dist/libs/contracts/src/docs/tech/templates/runtime.docblock.js +1 -0
  36. package/dist/libs/contracts/{dist → src}/docs/tech/vscode-extension.docblock.js +3 -36
  37. package/dist/libs/contracts/src/docs/tech/workflows/overview.docblock.js +1 -0
  38. package/dist/presentations/index.js +1 -64
  39. package/dist/progress-store.js +1 -30
  40. package/dist/tracks.js +1 -47
  41. package/dist/ui/LearningMiniApp.js +1 -82
  42. package/dist/ui/index.js +1 -3
  43. package/package.json +26 -30
  44. package/tsconfig.tsbuildinfo +1 -1
  45. package/.turbo/turbo-build$colon$bundle.log +0 -410
  46. package/CHANGELOG.md +0 -24
  47. package/dist/api-types.d.ts +0 -40
  48. package/dist/api.d.ts +0 -12
  49. package/dist/docs/index.d.ts +0 -1
  50. package/dist/docs/learning-journey-registry.docblock.d.ts +0 -1
  51. package/dist/example.d.ts +0 -32
  52. package/dist/examples/learning-journey-ambient-coach/src/track.js +0 -41
  53. package/dist/examples/learning-journey-crm-onboarding/dist/track.js +0 -98
  54. package/dist/examples/learning-journey-duo-drills/src/track.js +0 -65
  55. package/dist/examples/learning-journey-platform-tour/dist/track.js +0 -105
  56. package/dist/examples/learning-journey-quest-challenges/src/track.js +0 -35
  57. package/dist/examples/learning-journey-studio-onboarding/dist/track.js +0 -90
  58. package/dist/examples/learning-journey-ui-coaching/src/CoachingMiniApp.js +0 -64
  59. package/dist/examples/learning-journey-ui-coaching/src/components/EngagementMeter.js +0 -107
  60. package/dist/examples/learning-journey-ui-coaching/src/components/TipCard.js +0 -75
  61. package/dist/examples/learning-journey-ui-coaching/src/components/TipFeed.js +0 -65
  62. package/dist/examples/learning-journey-ui-coaching/src/components/index.js +0 -3
  63. package/dist/examples/learning-journey-ui-coaching/src/docs/index.js +0 -1
  64. package/dist/examples/learning-journey-ui-coaching/src/docs/learning-journey-ui-coaching.docblock.js +0 -20
  65. package/dist/examples/learning-journey-ui-coaching/src/index.js +0 -11
  66. package/dist/examples/learning-journey-ui-coaching/src/views/Overview.js +0 -152
  67. package/dist/examples/learning-journey-ui-coaching/src/views/Progress.js +0 -117
  68. package/dist/examples/learning-journey-ui-coaching/src/views/Steps.js +0 -68
  69. package/dist/examples/learning-journey-ui-coaching/src/views/Timeline.js +0 -112
  70. package/dist/examples/learning-journey-ui-coaching/src/views/index.js +0 -4
  71. package/dist/examples/learning-journey-ui-gamified/src/GamifiedMiniApp.js +0 -64
  72. package/dist/examples/learning-journey-ui-gamified/src/components/DayCalendar.js +0 -32
  73. package/dist/examples/learning-journey-ui-gamified/src/components/FlashCard.js +0 -79
  74. package/dist/examples/learning-journey-ui-gamified/src/components/MasteryRing.js +0 -81
  75. package/dist/examples/learning-journey-ui-gamified/src/components/index.js +0 -3
  76. package/dist/examples/learning-journey-ui-gamified/src/docs/index.js +0 -1
  77. package/dist/examples/learning-journey-ui-gamified/src/docs/learning-journey-ui-gamified.docblock.js +0 -20
  78. package/dist/examples/learning-journey-ui-gamified/src/index.js +0 -11
  79. package/dist/examples/learning-journey-ui-gamified/src/views/Overview.js +0 -163
  80. package/dist/examples/learning-journey-ui-gamified/src/views/Progress.js +0 -144
  81. package/dist/examples/learning-journey-ui-gamified/src/views/Steps.js +0 -55
  82. package/dist/examples/learning-journey-ui-gamified/src/views/Timeline.js +0 -132
  83. package/dist/examples/learning-journey-ui-gamified/src/views/index.js +0 -4
  84. package/dist/examples/learning-journey-ui-onboarding/src/OnboardingMiniApp.js +0 -64
  85. package/dist/examples/learning-journey-ui-onboarding/src/components/CodeSnippet.js +0 -4
  86. package/dist/examples/learning-journey-ui-onboarding/src/components/JourneyMap.js +0 -48
  87. package/dist/examples/learning-journey-ui-onboarding/src/components/StepChecklist.js +0 -79
  88. package/dist/examples/learning-journey-ui-onboarding/src/components/index.js +0 -3
  89. package/dist/examples/learning-journey-ui-onboarding/src/docs/index.js +0 -1
  90. package/dist/examples/learning-journey-ui-onboarding/src/docs/learning-journey-ui-onboarding.docblock.js +0 -20
  91. package/dist/examples/learning-journey-ui-onboarding/src/index.js +0 -10
  92. package/dist/examples/learning-journey-ui-onboarding/src/views/Overview.js +0 -180
  93. package/dist/examples/learning-journey-ui-onboarding/src/views/Progress.js +0 -162
  94. package/dist/examples/learning-journey-ui-onboarding/src/views/Steps.js +0 -91
  95. package/dist/examples/learning-journey-ui-onboarding/src/views/Timeline.js +0 -97
  96. package/dist/examples/learning-journey-ui-onboarding/src/views/index.js +0 -4
  97. package/dist/examples/learning-journey-ui-shared/src/components/BadgeDisplay.js +0 -44
  98. package/dist/examples/learning-journey-ui-shared/src/components/StreakCounter.js +0 -45
  99. package/dist/examples/learning-journey-ui-shared/src/components/ViewTabs.js +0 -48
  100. package/dist/examples/learning-journey-ui-shared/src/components/XpBar.js +0 -46
  101. package/dist/examples/learning-journey-ui-shared/src/components/index.js +0 -4
  102. package/dist/examples/learning-journey-ui-shared/src/docs/index.js +0 -1
  103. package/dist/examples/learning-journey-ui-shared/src/docs/learning-journey-ui-shared.docblock.js +0 -20
  104. package/dist/examples/learning-journey-ui-shared/src/hooks/index.js +0 -1
  105. package/dist/examples/learning-journey-ui-shared/src/hooks/useLearningProgress.js +0 -73
  106. package/dist/examples/learning-journey-ui-shared/src/index.js +0 -8
  107. package/dist/index.d.ts +0 -8
  108. package/dist/learning-journey-registry.feature.d.ts +0 -11
  109. package/dist/libs/contracts/dist/docs/PUBLISHING.docblock.js +0 -16
  110. package/dist/libs/contracts/dist/docs/accessibility_wcag_compliance_specs.docblock.js +0 -16
  111. package/dist/libs/contracts/dist/docs/index.js +0 -29
  112. package/dist/libs/contracts/dist/docs/presentations.js +0 -71
  113. package/dist/libs/contracts/dist/docs/registry.js +0 -44
  114. package/dist/libs/contracts/dist/docs/tech/PHASE_1_QUICKSTART.docblock.js +0 -16
  115. package/dist/libs/contracts/dist/docs/tech/PHASE_2_AI_NATIVE_OPERATIONS.docblock.js +0 -16
  116. package/dist/libs/contracts/dist/docs/tech/PHASE_3_AUTO_EVOLUTION.docblock.js +0 -16
  117. package/dist/libs/contracts/dist/docs/tech/PHASE_4_PERSONALIZATION_ENGINE.docblock.js +0 -16
  118. package/dist/libs/contracts/dist/docs/tech/PHASE_5_ZERO_TOUCH_OPERATIONS.docblock.js +0 -16
  119. package/dist/libs/contracts/dist/docs/tech/lifecycle-stage-system.docblock.js +0 -16
  120. package/dist/libs/contracts/dist/docs/tech/mcp-endpoints.docblock.js +0 -37
  121. package/dist/libs/contracts/dist/docs/tech/presentation-runtime.docblock.js +0 -16
  122. package/dist/libs/contracts/dist/docs/tech/schema/README.docblock.js +0 -20
  123. package/dist/libs/contracts/dist/docs/tech/studio/learning-events.docblock.js +0 -48
  124. package/dist/libs/contracts/dist/docs/tech/studio/project-access-teams.docblock.js +0 -45
  125. package/dist/libs/contracts/dist/docs/tech/studio/project-routing.docblock.js +0 -67
  126. package/dist/libs/contracts/dist/docs/tech/studio/sandbox-unlogged.docblock.js +0 -40
  127. package/dist/libs/contracts/dist/docs/tech/studio/workspace-ops.docblock.js +0 -47
  128. package/dist/libs/contracts/dist/docs/tech/templates/runtime.docblock.js +0 -20
  129. package/dist/libs/contracts/dist/docs/tech/workflows/overview.docblock.js +0 -20
  130. package/dist/libs/design-system/dist/_virtual/rolldown_runtime.js +0 -5
  131. package/dist/libs/design-system/dist/components/atoms/Button.js +0 -33
  132. package/dist/libs/design-system/dist/ui-kit-web/dist/ui/button.js +0 -55
  133. package/dist/libs/design-system/dist/ui-kit-web/dist/ui-kit-core/dist/utils.js +0 -13
  134. package/dist/libs/ui-kit-core/dist/utils.js +0 -10
  135. package/dist/libs/ui-kit-web/dist/ui/card.js +0 -36
  136. package/dist/libs/ui-kit-web/dist/ui/progress.js +0 -23
  137. package/dist/libs/ui-kit-web/dist/ui/utils.js +0 -10
  138. package/dist/libs/ui-kit-web/dist/ui-kit-core/dist/utils.js +0 -10
  139. package/dist/presentations/index.d.ts +0 -9
  140. package/dist/progress-store.d.ts +0 -10
  141. package/dist/tracks.d.ts +0 -39
  142. package/dist/ui/LearningMiniApp.d.ts +0 -22
  143. package/dist/ui/index.d.ts +0 -2
@@ -1,162 +0,0 @@
1
- 'use client';
2
-
3
- import { Card, CardContent, CardHeader, CardTitle } from "../../../../libs/ui-kit-web/dist/ui/card.js";
4
- import { Progress } from "../../../../libs/ui-kit-web/dist/ui/progress.js";
5
- import { XpBar } from "../../../learning-journey-ui-shared/src/components/XpBar.js";
6
- import { BadgeDisplay } from "../../../learning-journey-ui-shared/src/components/BadgeDisplay.js";
7
- import "../../../learning-journey-ui-shared/src/index.js";
8
- import { jsx, jsxs } from "react/jsx-runtime";
9
-
10
- //#region ../learning-journey-ui-onboarding/src/views/Progress.tsx
11
- function ProgressView({ track, progress }) {
12
- const totalSteps = track.steps.length;
13
- const completedSteps = progress.completedStepIds.length;
14
- const percentComplete = totalSteps > 0 ? completedSteps / totalSteps * 100 : 0;
15
- const totalXp = track.totalXp ?? track.steps.reduce((sum, s) => sum + (s.xpReward ?? 0), 0) + (track.completionRewards?.xpBonus ?? 0);
16
- const remainingSteps = totalSteps - completedSteps;
17
- const estimatedMinutes = remainingSteps * 5;
18
- return /* @__PURE__ */ jsxs("div", {
19
- className: "space-y-6",
20
- children: [
21
- /* @__PURE__ */ jsxs(Card, { children: [/* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsxs(CardTitle, {
22
- className: "flex items-center gap-2",
23
- children: [/* @__PURE__ */ jsx("span", { children: "📈" }), /* @__PURE__ */ jsx("span", { children: "Your Progress" })]
24
- }) }), /* @__PURE__ */ jsxs(CardContent, {
25
- className: "space-y-6",
26
- children: [/* @__PURE__ */ jsx("div", {
27
- className: "flex items-center justify-center",
28
- children: /* @__PURE__ */ jsxs("div", {
29
- className: "relative flex h-40 w-40 items-center justify-center",
30
- children: [/* @__PURE__ */ jsxs("svg", {
31
- className: "absolute h-full w-full -rotate-90",
32
- viewBox: "0 0 100 100",
33
- children: [/* @__PURE__ */ jsx("circle", {
34
- cx: "50",
35
- cy: "50",
36
- r: "45",
37
- fill: "none",
38
- strokeWidth: "8",
39
- className: "stroke-muted"
40
- }), /* @__PURE__ */ jsx("circle", {
41
- cx: "50",
42
- cy: "50",
43
- r: "45",
44
- fill: "none",
45
- strokeWidth: "8",
46
- strokeLinecap: "round",
47
- strokeDasharray: `${percentComplete * 2.83} 283`,
48
- className: "stroke-blue-500 transition-all duration-500"
49
- })]
50
- }), /* @__PURE__ */ jsxs("div", {
51
- className: "text-center",
52
- children: [/* @__PURE__ */ jsxs("div", {
53
- className: "text-3xl font-bold",
54
- children: [Math.round(percentComplete), "%"]
55
- }), /* @__PURE__ */ jsx("div", {
56
- className: "text-muted-foreground text-sm",
57
- children: "Complete"
58
- })]
59
- })]
60
- })
61
- }), /* @__PURE__ */ jsxs("div", {
62
- className: "grid grid-cols-3 gap-4 text-center",
63
- children: [
64
- /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
65
- className: "text-2xl font-bold text-green-500",
66
- children: completedSteps
67
- }), /* @__PURE__ */ jsx("div", {
68
- className: "text-muted-foreground text-sm",
69
- children: "Completed"
70
- })] }),
71
- /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
72
- className: "text-2xl font-bold text-orange-500",
73
- children: remainingSteps
74
- }), /* @__PURE__ */ jsx("div", {
75
- className: "text-muted-foreground text-sm",
76
- children: "Remaining"
77
- })] }),
78
- /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsxs("div", {
79
- className: "text-2xl font-bold",
80
- children: [estimatedMinutes, "m"]
81
- }), /* @__PURE__ */ jsx("div", {
82
- className: "text-muted-foreground text-sm",
83
- children: "Est. Time"
84
- })] })
85
- ]
86
- })]
87
- })] }),
88
- /* @__PURE__ */ jsxs(Card, { children: [/* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsxs(CardTitle, {
89
- className: "flex items-center gap-2",
90
- children: [/* @__PURE__ */ jsx("span", { children: "⚡" }), /* @__PURE__ */ jsx("span", { children: "Experience Points" })]
91
- }) }), /* @__PURE__ */ jsxs(CardContent, {
92
- className: "space-y-4",
93
- children: [/* @__PURE__ */ jsxs("div", {
94
- className: "flex items-baseline gap-2",
95
- children: [/* @__PURE__ */ jsx("span", {
96
- className: "text-3xl font-bold text-blue-500",
97
- children: progress.xpEarned
98
- }), /* @__PURE__ */ jsxs("span", {
99
- className: "text-muted-foreground",
100
- children: [
101
- "/ ",
102
- totalXp,
103
- " XP"
104
- ]
105
- })]
106
- }), /* @__PURE__ */ jsx(XpBar, {
107
- current: progress.xpEarned,
108
- max: totalXp,
109
- showLabel: false,
110
- size: "lg"
111
- })]
112
- })] }),
113
- /* @__PURE__ */ jsxs(Card, { children: [/* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsxs(CardTitle, {
114
- className: "flex items-center gap-2",
115
- children: [/* @__PURE__ */ jsx("span", { children: "🏅" }), /* @__PURE__ */ jsx("span", { children: "Achievements" })]
116
- }) }), /* @__PURE__ */ jsxs(CardContent, { children: [/* @__PURE__ */ jsx(BadgeDisplay, {
117
- badges: progress.badges,
118
- size: "lg"
119
- }), progress.badges.length === 0 && track.completionRewards?.badgeKey && /* @__PURE__ */ jsxs("p", {
120
- className: "text-muted-foreground text-sm",
121
- children: [
122
- "Complete all steps to earn the \"",
123
- track.completionRewards.badgeKey,
124
- "\" badge!"
125
- ]
126
- })] })] }),
127
- /* @__PURE__ */ jsxs(Card, { children: [/* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsxs(CardTitle, {
128
- className: "flex items-center gap-2",
129
- children: [/* @__PURE__ */ jsx("span", { children: "📋" }), /* @__PURE__ */ jsx("span", { children: "Step Details" })]
130
- }) }), /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx("div", {
131
- className: "space-y-3",
132
- children: track.steps.map((step, index) => {
133
- const isCompleted = progress.completedStepIds.includes(step.id);
134
- const stepProgress = isCompleted ? 100 : 0;
135
- return /* @__PURE__ */ jsxs("div", {
136
- className: "space-y-1",
137
- children: [/* @__PURE__ */ jsxs("div", {
138
- className: "flex items-center justify-between text-sm",
139
- children: [/* @__PURE__ */ jsxs("span", {
140
- className: isCompleted ? "text-green-500" : "text-foreground",
141
- children: [
142
- index + 1,
143
- ". ",
144
- step.title
145
- ]
146
- }), /* @__PURE__ */ jsx("span", {
147
- className: isCompleted ? "text-green-500" : "text-muted-foreground",
148
- children: isCompleted ? "✓" : "Pending"
149
- })]
150
- }), /* @__PURE__ */ jsx(Progress, {
151
- value: stepProgress,
152
- className: "h-1"
153
- })]
154
- }, step.id);
155
- })
156
- }) })] })
157
- ]
158
- });
159
- }
160
-
161
- //#endregion
162
- export { ProgressView };
@@ -1,91 +0,0 @@
1
- 'use client';
2
-
3
- import { Progress } from "../../../../libs/ui-kit-web/dist/ui/progress.js";
4
- import { StepChecklist } from "../components/StepChecklist.js";
5
- import { useState } from "react";
6
- import { jsx, jsxs } from "react/jsx-runtime";
7
-
8
- //#region ../learning-journey-ui-onboarding/src/views/Steps.tsx
9
- function Steps({ track, progress, onStepComplete }) {
10
- const [expandedStepId, setExpandedStepId] = useState(() => {
11
- return track.steps.find((s) => !progress.completedStepIds.includes(s.id))?.id ?? null;
12
- });
13
- const completedSteps = progress.completedStepIds.length;
14
- const totalSteps = track.steps.length;
15
- const percentComplete = totalSteps > 0 ? completedSteps / totalSteps * 100 : 0;
16
- const currentStepIndex = track.steps.findIndex((s) => !progress.completedStepIds.includes(s.id));
17
- return /* @__PURE__ */ jsxs("div", {
18
- className: "space-y-6",
19
- children: [
20
- /* @__PURE__ */ jsxs("div", {
21
- className: "space-y-2",
22
- children: [/* @__PURE__ */ jsxs("div", {
23
- className: "flex items-center justify-between",
24
- children: [/* @__PURE__ */ jsx("h2", {
25
- className: "text-xl font-bold",
26
- children: "Complete Each Step"
27
- }), /* @__PURE__ */ jsxs("span", {
28
- className: "text-muted-foreground text-sm",
29
- children: [
30
- completedSteps,
31
- " / ",
32
- totalSteps,
33
- " completed"
34
- ]
35
- })]
36
- }), /* @__PURE__ */ jsx(Progress, {
37
- value: percentComplete,
38
- className: "h-2"
39
- })]
40
- }),
41
- /* @__PURE__ */ jsx("div", {
42
- className: "space-y-3",
43
- children: track.steps.map((step, index) => {
44
- const isCompleted = progress.completedStepIds.includes(step.id);
45
- const isCurrent = index === currentStepIndex;
46
- return /* @__PURE__ */ jsx(StepChecklist, {
47
- step,
48
- stepNumber: index + 1,
49
- isCompleted,
50
- isCurrent,
51
- isExpanded: expandedStepId === step.id,
52
- onToggle: () => setExpandedStepId(expandedStepId === step.id ? null : step.id),
53
- onComplete: () => {
54
- onStepComplete?.(step.id);
55
- const nextStep = track.steps[index + 1];
56
- if (nextStep && !progress.completedStepIds.includes(nextStep.id)) setExpandedStepId(nextStep.id);
57
- }
58
- }, step.id);
59
- })
60
- }),
61
- track.completionRewards && percentComplete < 100 && /* @__PURE__ */ jsx("div", {
62
- className: "rounded-lg border border-blue-500/30 bg-blue-500/5 p-4",
63
- children: /* @__PURE__ */ jsxs("p", {
64
- className: "text-sm",
65
- children: [
66
- "🎁 Complete all steps to unlock:",
67
- track.completionRewards.xpBonus && /* @__PURE__ */ jsxs("span", {
68
- className: "ml-2 font-semibold text-blue-500",
69
- children: [
70
- "+",
71
- track.completionRewards.xpBonus,
72
- " XP bonus"
73
- ]
74
- }),
75
- track.completionRewards.badgeKey && /* @__PURE__ */ jsxs("span", {
76
- className: "ml-2 font-semibold text-amber-500",
77
- children: [
78
- "+ \"",
79
- track.completionRewards.badgeKey,
80
- "\" badge"
81
- ]
82
- })
83
- ]
84
- })
85
- })
86
- ]
87
- });
88
- }
89
-
90
- //#endregion
91
- export { Steps };
@@ -1,97 +0,0 @@
1
- 'use client';
2
-
3
- import { Card, CardContent, CardHeader, CardTitle } from "../../../../libs/ui-kit-web/dist/ui/card.js";
4
- import { JourneyMap } from "../components/JourneyMap.js";
5
- import { jsx, jsxs } from "react/jsx-runtime";
6
-
7
- //#region ../learning-journey-ui-onboarding/src/views/Timeline.tsx
8
- function Timeline({ track, progress }) {
9
- const currentStepId = track.steps.find((s) => !progress.completedStepIds.includes(s.id))?.id ?? null;
10
- return /* @__PURE__ */ jsxs("div", {
11
- className: "space-y-6",
12
- children: [
13
- /* @__PURE__ */ jsxs("div", {
14
- className: "text-center",
15
- children: [/* @__PURE__ */ jsx("h2", {
16
- className: "text-xl font-bold",
17
- children: "Your Learning Journey"
18
- }), /* @__PURE__ */ jsx("p", {
19
- className: "text-muted-foreground",
20
- children: "Follow the path through each surface and feature"
21
- })]
22
- }),
23
- /* @__PURE__ */ jsxs(Card, { children: [/* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsxs(CardTitle, {
24
- className: "flex items-center gap-2",
25
- children: [/* @__PURE__ */ jsx("span", { children: "🗺️" }), /* @__PURE__ */ jsx("span", { children: "Journey Map" })]
26
- }) }), /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx(JourneyMap, {
27
- steps: track.steps,
28
- completedStepIds: progress.completedStepIds,
29
- currentStepId
30
- }) })] }),
31
- /* @__PURE__ */ jsxs(Card, { children: [/* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsxs(CardTitle, {
32
- className: "flex items-center gap-2",
33
- children: [/* @__PURE__ */ jsx("span", { children: "📍" }), /* @__PURE__ */ jsx("span", { children: "Step by Step" })]
34
- }) }), /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsxs("div", {
35
- className: "relative",
36
- children: [/* @__PURE__ */ jsx("div", { className: "bg-border absolute top-0 left-4 h-full w-0.5" }), /* @__PURE__ */ jsx("div", {
37
- className: "space-y-6",
38
- children: track.steps.map((step, index) => {
39
- const isCompleted = progress.completedStepIds.includes(step.id);
40
- const isCurrent = step.id === currentStepId;
41
- const surface = step.metadata?.surface ?? "general";
42
- return /* @__PURE__ */ jsxs("div", {
43
- className: "relative flex gap-4 pl-2",
44
- children: [/* @__PURE__ */ jsx("div", {
45
- className: `relative z-10 flex h-8 w-8 shrink-0 items-center justify-center rounded-full border-2 transition-all ${isCompleted ? "border-green-500 bg-green-500 text-white" : isCurrent ? "border-blue-500 bg-blue-500 text-white ring-4 ring-blue-500/20" : "border-border bg-background text-muted-foreground"}`,
46
- children: isCompleted ? "✓" : index + 1
47
- }), /* @__PURE__ */ jsx("div", {
48
- className: "flex-1 pb-2",
49
- children: /* @__PURE__ */ jsxs("div", {
50
- className: "rounded-lg border p-4",
51
- children: [/* @__PURE__ */ jsxs("div", {
52
- className: "flex items-start justify-between gap-2",
53
- children: [/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsxs("div", {
54
- className: "flex items-center gap-2",
55
- children: [/* @__PURE__ */ jsx("h4", {
56
- className: `font-semibold ${isCompleted ? "text-green-500" : isCurrent ? "text-blue-500" : "text-foreground"}`,
57
- children: step.title
58
- }), /* @__PURE__ */ jsx("span", {
59
- className: "bg-muted text-muted-foreground rounded px-2 py-0.5 text-xs",
60
- children: surface
61
- })]
62
- }), /* @__PURE__ */ jsx("p", {
63
- className: "text-muted-foreground mt-1 text-sm",
64
- children: step.description
65
- })] }), step.xpReward && /* @__PURE__ */ jsxs("span", {
66
- className: `shrink-0 rounded-full px-2 py-1 text-xs font-semibold ${isCompleted ? "bg-green-500/10 text-green-500" : "bg-muted text-muted-foreground"}`,
67
- children: [
68
- "+",
69
- step.xpReward,
70
- " XP"
71
- ]
72
- })]
73
- }), /* @__PURE__ */ jsx("div", {
74
- className: "mt-3 text-xs",
75
- children: isCompleted ? /* @__PURE__ */ jsx("span", {
76
- className: "text-green-500",
77
- children: "✓ Completed"
78
- }) : isCurrent ? /* @__PURE__ */ jsx("span", {
79
- className: "text-blue-500",
80
- children: "→ In Progress"
81
- }) : /* @__PURE__ */ jsx("span", {
82
- className: "text-muted-foreground",
83
- children: "○ Not Started"
84
- })
85
- })]
86
- })
87
- })]
88
- }, step.id);
89
- })
90
- })]
91
- }) })] })
92
- ]
93
- });
94
- }
95
-
96
- //#endregion
97
- export { Timeline };
@@ -1,4 +0,0 @@
1
- import { Overview } from "./Overview.js";
2
- import { Steps } from "./Steps.js";
3
- import { ProgressView } from "./Progress.js";
4
- import { Timeline } from "./Timeline.js";
@@ -1,44 +0,0 @@
1
- 'use client';
2
-
3
- import { cn } from "../../../../libs/ui-kit-web/dist/ui/utils.js";
4
- import { jsx, jsxs } from "react/jsx-runtime";
5
-
6
- //#region ../learning-journey-ui-shared/src/components/BadgeDisplay.tsx
7
- const BADGE_ICONS = {
8
- studio_first_30m: "🎯",
9
- platform_tour: "🗺️",
10
- crm_first_win: "🏆",
11
- drill_master: "🧠",
12
- coach_listener: "👂",
13
- quest_complete: "⭐",
14
- streak_7: "🔥",
15
- streak_30: "💎",
16
- default: "🏅"
17
- };
18
- const sizeStyles = {
19
- sm: "h-6 w-6 text-sm",
20
- md: "h-8 w-8 text-base",
21
- lg: "h-10 w-10 text-lg"
22
- };
23
- function BadgeDisplay({ badges, maxVisible = 5, size = "md" }) {
24
- const visibleBadges = badges.slice(0, maxVisible);
25
- const hiddenCount = badges.length - maxVisible;
26
- if (badges.length === 0) return /* @__PURE__ */ jsx("div", {
27
- className: "text-muted-foreground text-sm",
28
- children: "No badges earned yet"
29
- });
30
- return /* @__PURE__ */ jsxs("div", {
31
- className: "flex items-center gap-1",
32
- children: [visibleBadges.map((badge) => /* @__PURE__ */ jsx("div", {
33
- className: cn("flex items-center justify-center rounded-full bg-gradient-to-br from-amber-400/20 to-amber-600/20", sizeStyles[size]),
34
- title: badge.replace(/_/g, " "),
35
- children: BADGE_ICONS[badge] ?? BADGE_ICONS.default
36
- }, badge)), hiddenCount > 0 && /* @__PURE__ */ jsxs("div", {
37
- className: cn("text-muted-foreground bg-muted flex items-center justify-center rounded-full", sizeStyles[size], "text-xs font-medium"),
38
- children: ["+", hiddenCount]
39
- })]
40
- });
41
- }
42
-
43
- //#endregion
44
- export { BadgeDisplay };
@@ -1,45 +0,0 @@
1
- 'use client';
2
-
3
- import { cn } from "../../../../libs/ui-kit-web/dist/ui/utils.js";
4
- import { jsx, jsxs } from "react/jsx-runtime";
5
-
6
- //#region ../learning-journey-ui-shared/src/components/StreakCounter.tsx
7
- const sizeStyles = {
8
- sm: {
9
- container: "gap-1 px-2 py-1",
10
- icon: "text-base",
11
- text: "text-xs"
12
- },
13
- md: {
14
- container: "gap-1.5 px-3 py-1.5",
15
- icon: "text-lg",
16
- text: "text-sm"
17
- },
18
- lg: {
19
- container: "gap-2 px-4 py-2",
20
- icon: "text-xl",
21
- text: "text-base"
22
- }
23
- };
24
- function StreakCounter({ days, isActive = true, size = "md" }) {
25
- const styles = sizeStyles[size];
26
- return /* @__PURE__ */ jsxs("div", {
27
- className: cn("inline-flex items-center rounded-full font-semibold", styles.container, isActive ? "bg-orange-500/10 text-orange-500" : "bg-muted text-muted-foreground"),
28
- children: [/* @__PURE__ */ jsx("span", {
29
- className: styles.icon,
30
- role: "img",
31
- "aria-label": "streak",
32
- children: "🔥"
33
- }), /* @__PURE__ */ jsxs("span", {
34
- className: styles.text,
35
- children: [
36
- days,
37
- " ",
38
- days === 1 ? "day" : "days"
39
- ]
40
- })]
41
- });
42
- }
43
-
44
- //#endregion
45
- export { StreakCounter };
@@ -1,48 +0,0 @@
1
- 'use client';
2
-
3
- import { Button$1 } from "../../../../libs/design-system/dist/components/atoms/Button.js";
4
- import { jsx, jsxs } from "react/jsx-runtime";
5
-
6
- //#region ../learning-journey-ui-shared/src/components/ViewTabs.tsx
7
- const VIEW_LABELS = {
8
- overview: {
9
- label: "Overview",
10
- icon: "📊"
11
- },
12
- steps: {
13
- label: "Steps",
14
- icon: "📝"
15
- },
16
- progress: {
17
- label: "Progress",
18
- icon: "📈"
19
- },
20
- timeline: {
21
- label: "Timeline",
22
- icon: "📅"
23
- }
24
- };
25
- const DEFAULT_VIEWS = [
26
- "overview",
27
- "steps",
28
- "progress",
29
- "timeline"
30
- ];
31
- function ViewTabs({ currentView, onViewChange, availableViews = DEFAULT_VIEWS }) {
32
- return /* @__PURE__ */ jsx("div", {
33
- className: "flex flex-wrap gap-2",
34
- children: availableViews.map((view) => {
35
- const { label, icon } = VIEW_LABELS[view];
36
- return /* @__PURE__ */ jsxs(Button$1, {
37
- variant: currentView === view ? "default" : "outline",
38
- size: "sm",
39
- onClick: () => onViewChange(view),
40
- className: "gap-1.5",
41
- children: [/* @__PURE__ */ jsx("span", { children: icon }), /* @__PURE__ */ jsx("span", { children: label })]
42
- }, view);
43
- })
44
- });
45
- }
46
-
47
- //#endregion
48
- export { ViewTabs };
@@ -1,46 +0,0 @@
1
- 'use client';
2
-
3
- import { Progress } from "../../../../libs/ui-kit-web/dist/ui/progress.js";
4
- import { cn } from "../../../../libs/ui-kit-web/dist/ui/utils.js";
5
- import { jsx, jsxs } from "react/jsx-runtime";
6
-
7
- //#region ../learning-journey-ui-shared/src/components/XpBar.tsx
8
- const sizeStyles = {
9
- sm: "h-2",
10
- md: "h-3",
11
- lg: "h-4"
12
- };
13
- const labelSizeStyles = {
14
- sm: "text-xs",
15
- md: "text-sm",
16
- lg: "text-base"
17
- };
18
- function XpBar({ current, max, level, showLabel = true, size = "md" }) {
19
- const percentage = max > 0 ? Math.min(current / max * 100, 100) : 0;
20
- return /* @__PURE__ */ jsxs("div", {
21
- className: "w-full space-y-1",
22
- children: [showLabel && /* @__PURE__ */ jsxs("div", {
23
- className: cn("flex items-center justify-between", labelSizeStyles[size]),
24
- children: [/* @__PURE__ */ jsxs("span", {
25
- className: "text-muted-foreground font-medium",
26
- children: [level !== void 0 && /* @__PURE__ */ jsxs("span", {
27
- className: "text-primary mr-1",
28
- children: ["Lvl ", level]
29
- }), "XP"]
30
- }), /* @__PURE__ */ jsxs("span", {
31
- className: "font-semibold",
32
- children: [
33
- current.toLocaleString(),
34
- " / ",
35
- max.toLocaleString()
36
- ]
37
- })]
38
- }), /* @__PURE__ */ jsx(Progress, {
39
- value: percentage,
40
- className: cn("bg-muted", sizeStyles[size])
41
- })]
42
- });
43
- }
44
-
45
- //#endregion
46
- export { XpBar };
@@ -1,4 +0,0 @@
1
- import { XpBar } from "./XpBar.js";
2
- import { StreakCounter } from "./StreakCounter.js";
3
- import { BadgeDisplay } from "./BadgeDisplay.js";
4
- import { ViewTabs } from "./ViewTabs.js";
@@ -1 +0,0 @@
1
- import "./learning-journey-ui-shared.docblock.js";
@@ -1,20 +0,0 @@
1
- import { registerDocBlocks } from "../../../../libs/contracts/dist/docs/registry.js";
2
- import "../../../../libs/contracts/dist/docs/index.js";
3
-
4
- //#region ../learning-journey-ui-shared/src/docs/learning-journey-ui-shared.docblock.ts
5
- registerDocBlocks([{
6
- id: "docs.examples.learning-journey-ui-shared",
7
- title: "Learning Journey UI — Shared",
8
- summary: "Shared UI components and hooks for learning journey mini-apps.",
9
- kind: "reference",
10
- visibility: "public",
11
- route: "/docs/examples/learning-journey-ui-shared",
12
- tags: [
13
- "learning",
14
- "ui",
15
- "shared"
16
- ],
17
- body: `## Includes\n- Hooks: useLearningProgress\n- Components: XpBar, StreakCounter, BadgeDisplay, ViewTabs\n\n## Notes\n- Keep components accessible (labels, focus, contrast).\n- Prefer design-system tokens and components.`
18
- }]);
19
-
20
- //#endregion
@@ -1 +0,0 @@
1
- import { useLearningProgress } from "./useLearningProgress.js";
@@ -1,73 +0,0 @@
1
- 'use client';
2
-
3
- import { useCallback, useMemo, useState } from "react";
4
-
5
- //#region ../learning-journey-ui-shared/src/hooks/useLearningProgress.ts
6
- /** Default progress state for a new track */
7
- function createDefaultProgress(trackId) {
8
- return {
9
- trackId,
10
- completedStepIds: [],
11
- currentStepId: null,
12
- xpEarned: 0,
13
- streakDays: 0,
14
- lastActivityDate: null,
15
- badges: []
16
- };
17
- }
18
- /** Hook for managing learning progress state */
19
- function useLearningProgress(track) {
20
- const [progress, setProgress] = useState(() => createDefaultProgress(track.id));
21
- const completeStep = useCallback((stepId) => {
22
- const step = track.steps.find((s) => s.id === stepId);
23
- if (!step || progress.completedStepIds.includes(stepId)) return;
24
- setProgress((prev) => {
25
- const newCompletedIds = [...prev.completedStepIds, stepId];
26
- const xpReward = step.xpReward ?? 0;
27
- const nextStep = track.steps.find((s) => !newCompletedIds.includes(s.id));
28
- const isTrackComplete = newCompletedIds.length === track.steps.length;
29
- const completionBonus = isTrackComplete ? track.completionRewards?.xpBonus ?? 0 : 0;
30
- return {
31
- ...prev,
32
- completedStepIds: newCompletedIds,
33
- currentStepId: nextStep?.id ?? null,
34
- xpEarned: prev.xpEarned + xpReward + completionBonus,
35
- lastActivityDate: (/* @__PURE__ */ new Date()).toISOString(),
36
- badges: isTrackComplete && track.completionRewards?.badgeKey ? [...prev.badges, track.completionRewards.badgeKey] : prev.badges
37
- };
38
- });
39
- }, [track, progress.completedStepIds]);
40
- const resetProgress = useCallback(() => {
41
- setProgress(createDefaultProgress(track.id));
42
- }, [track.id]);
43
- const incrementStreak = useCallback(() => {
44
- setProgress((prev) => ({
45
- ...prev,
46
- streakDays: prev.streakDays + 1,
47
- lastActivityDate: (/* @__PURE__ */ new Date()).toISOString()
48
- }));
49
- }, []);
50
- return {
51
- progress,
52
- stats: useMemo(() => {
53
- const totalSteps = track.steps.length;
54
- const completedSteps = progress.completedStepIds.length;
55
- const percentComplete = totalSteps > 0 ? Math.round(completedSteps / totalSteps * 100) : 0;
56
- const totalXp = track.totalXp ?? track.steps.reduce((sum, s) => sum + (s.xpReward ?? 0), 0) + (track.completionRewards?.xpBonus ?? 0);
57
- return {
58
- totalSteps,
59
- completedSteps,
60
- remainingSteps: totalSteps - completedSteps,
61
- percentComplete,
62
- totalXp,
63
- isComplete: completedSteps === totalSteps
64
- };
65
- }, [track, progress.completedStepIds]),
66
- completeStep,
67
- resetProgress,
68
- incrementStreak
69
- };
70
- }
71
-
72
- //#endregion
73
- export { useLearningProgress };
@@ -1,8 +0,0 @@
1
- import { useLearningProgress } from "./hooks/useLearningProgress.js";
2
- import "./hooks/index.js";
3
- import { XpBar } from "./components/XpBar.js";
4
- import { StreakCounter } from "./components/StreakCounter.js";
5
- import { BadgeDisplay } from "./components/BadgeDisplay.js";
6
- import { ViewTabs } from "./components/ViewTabs.js";
7
- import "./components/index.js";
8
- import "./docs/index.js";
package/dist/index.d.ts DELETED
@@ -1,8 +0,0 @@
1
- import { getProgress, listTracks, recordEvent } from "./api.js";
2
- import example from "./example.js";
3
- import { OnboardingStepDto, OnboardingTrackDto, crmLearningTracks, learningJourneyTracks, mapStep, mapTrackSpecToDto, onboardingTrackCatalog, platformLearningTracks, studioLearningTracks } from "./tracks.js";
4
- import { LearningTrackDetailPresentation, LearningTrackListPresentation, LearningTrackProgressWidgetPresentation, learningJourneyPresentations } from "./presentations/index.js";
5
- import { LearningJourneyRegistryFeature } from "./learning-journey-registry.feature.js";
6
- import { LearningMiniApp, getLearningTemplateIds, isLearningTemplate } from "./ui/LearningMiniApp.js";
7
- import "./ui/index.js";
8
- export { LearningJourneyRegistryFeature, LearningMiniApp, LearningTrackDetailPresentation, LearningTrackListPresentation, LearningTrackProgressWidgetPresentation, OnboardingStepDto, OnboardingTrackDto, crmLearningTracks, example, getLearningTemplateIds, getProgress, isLearningTemplate, learningJourneyPresentations, learningJourneyTracks, listTracks, mapStep, mapTrackSpecToDto, onboardingTrackCatalog, platformLearningTracks, recordEvent, studioLearningTracks };