@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,65 +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-coaching/src/components/TipFeed.tsx
7
- const TIP_ICONS = {
8
- cash_buffer_too_high: "💰",
9
- no_savings_goal: "🎯",
10
- irregular_savings: "📅",
11
- noise_late_evening: "🔇",
12
- guest_frequency_high: "👥",
13
- shared_space_conflicts: "🏠",
14
- default: "💡"
15
- };
16
- function TipFeed({ items }) {
17
- if (items.length === 0) return /* @__PURE__ */ jsx("div", {
18
- className: "text-muted-foreground py-8 text-center",
19
- children: "No tips yet. Start engaging with coaching tips!"
20
- });
21
- return /* @__PURE__ */ jsxs("div", {
22
- className: "relative",
23
- children: [/* @__PURE__ */ jsx("div", { className: "bg-border absolute top-0 left-4 h-full w-0.5" }), /* @__PURE__ */ jsx("div", {
24
- className: "space-y-4",
25
- children: items.map((item, index) => {
26
- const icon = TIP_ICONS[item.step.metadata?.tipId ?? "default"] ?? TIP_ICONS.default;
27
- return /* @__PURE__ */ jsxs("div", {
28
- className: "relative flex gap-4 pl-2",
29
- children: [/* @__PURE__ */ jsx("div", {
30
- className: cn("relative z-10 flex h-8 w-8 shrink-0 items-center justify-center rounded-full text-sm", item.isCompleted ? "bg-green-500 text-white" : "bg-muted text-muted-foreground"),
31
- children: item.isCompleted ? "✓" : icon
32
- }), /* @__PURE__ */ jsxs("div", {
33
- className: "bg-card flex-1 rounded-lg border p-3",
34
- children: [/* @__PURE__ */ jsxs("div", {
35
- className: "flex items-start justify-between gap-2",
36
- children: [/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", {
37
- className: "font-medium",
38
- children: item.step.title
39
- }), /* @__PURE__ */ jsx("p", {
40
- className: "text-muted-foreground mt-0.5 text-sm",
41
- children: item.step.description
42
- })] }), item.step.xpReward && /* @__PURE__ */ jsxs("span", {
43
- className: cn("shrink-0 text-xs font-medium", item.isCompleted ? "text-green-500" : "text-muted-foreground"),
44
- children: [
45
- "+",
46
- item.step.xpReward,
47
- " XP"
48
- ]
49
- })]
50
- }), /* @__PURE__ */ jsx("div", {
51
- className: "text-muted-foreground mt-2 flex items-center gap-2 text-xs",
52
- children: item.isCompleted ? /* @__PURE__ */ jsxs("span", {
53
- className: "text-green-500",
54
- children: ["✓ Completed", item.completedAt && ` • ${item.completedAt}`]
55
- }) : /* @__PURE__ */ jsx("span", { children: "Pending action" })
56
- })]
57
- })]
58
- }, item.step.id);
59
- })
60
- })]
61
- });
62
- }
63
-
64
- //#endregion
65
- export { TipFeed };
@@ -1,3 +0,0 @@
1
- import { TipCard } from "./TipCard.js";
2
- import { EngagementMeter } from "./EngagementMeter.js";
3
- import { TipFeed } from "./TipFeed.js";
@@ -1 +0,0 @@
1
- import "./learning-journey-ui-coaching.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-coaching/src/docs/learning-journey-ui-coaching.docblock.ts
5
- registerDocBlocks([{
6
- id: "docs.examples.learning-journey-ui-coaching",
7
- title: "Learning Journey UI — Coaching",
8
- summary: "UI mini-app components for coaching: tips, engagement, progress.",
9
- kind: "reference",
10
- visibility: "public",
11
- route: "/docs/examples/learning-journey-ui-coaching",
12
- tags: [
13
- "learning",
14
- "ui",
15
- "coaching"
16
- ],
17
- body: `## Includes\n- Coaching mini-app shell\n- Views: overview, steps, progress, timeline\n- Components: tip card, engagement meter, tip feed\n\n## Notes\n- Compose using design system components.\n- Keep accessibility and mobile-friendly tap targets.`
18
- }]);
19
-
20
- //#endregion
@@ -1,11 +0,0 @@
1
- import { TipCard } from "./components/TipCard.js";
2
- import { Overview } from "./views/Overview.js";
3
- import { Steps } from "./views/Steps.js";
4
- import { EngagementMeter } from "./components/EngagementMeter.js";
5
- import { ProgressView } from "./views/Progress.js";
6
- import { TipFeed } from "./components/TipFeed.js";
7
- import { Timeline } from "./views/Timeline.js";
8
- import { CoachingMiniApp } from "./CoachingMiniApp.js";
9
- import "./views/index.js";
10
- import "./components/index.js";
11
- import "./docs/index.js";
@@ -1,152 +0,0 @@
1
- 'use client';
2
-
3
- import { Card, CardContent, CardHeader, CardTitle } from "../../../../libs/ui-kit-web/dist/ui/card.js";
4
- import { XpBar } from "../../../learning-journey-ui-shared/src/components/XpBar.js";
5
- import { StreakCounter } from "../../../learning-journey-ui-shared/src/components/StreakCounter.js";
6
- import { Button$1 } from "../../../../libs/design-system/dist/components/atoms/Button.js";
7
- import "../../../learning-journey-ui-shared/src/index.js";
8
- import { TipCard } from "../components/TipCard.js";
9
- import { jsx, jsxs } from "react/jsx-runtime";
10
-
11
- //#region ../learning-journey-ui-coaching/src/views/Overview.tsx
12
- function Overview({ track, progress, onStepComplete, onStart }) {
13
- const totalXp = track.totalXp ?? track.steps.reduce((sum, s) => sum + (s.xpReward ?? 0), 0);
14
- const completedSteps = progress.completedStepIds.length;
15
- const totalSteps = track.steps.length;
16
- const pendingSteps = totalSteps - completedSteps;
17
- const activeTips = track.steps.filter((s) => !progress.completedStepIds.includes(s.id)).slice(0, 3);
18
- return /* @__PURE__ */ jsxs("div", {
19
- className: "space-y-6",
20
- children: [
21
- /* @__PURE__ */ jsx(Card, {
22
- className: "overflow-hidden bg-gradient-to-br from-amber-500/10 via-orange-500/10 to-red-500/10",
23
- children: /* @__PURE__ */ jsx(CardContent, {
24
- className: "p-6",
25
- children: /* @__PURE__ */ jsxs("div", {
26
- className: "flex flex-col items-center gap-4 text-center md:flex-row md:text-left",
27
- children: [
28
- /* @__PURE__ */ jsx("div", {
29
- className: "flex h-16 w-16 items-center justify-center rounded-2xl bg-gradient-to-br from-amber-500 to-orange-600 text-3xl shadow-lg",
30
- children: "💡"
31
- }),
32
- /* @__PURE__ */ jsxs("div", {
33
- className: "flex-1",
34
- children: [/* @__PURE__ */ jsx("h1", {
35
- className: "text-2xl font-bold",
36
- children: track.name
37
- }), /* @__PURE__ */ jsx("p", {
38
- className: "text-muted-foreground mt-1",
39
- children: track.description
40
- })]
41
- }),
42
- /* @__PURE__ */ jsx("div", {
43
- className: "flex items-center gap-4",
44
- children: /* @__PURE__ */ jsx(StreakCounter, {
45
- days: progress.streakDays,
46
- size: "lg"
47
- })
48
- })
49
- ]
50
- })
51
- })
52
- }),
53
- /* @__PURE__ */ jsxs("div", {
54
- className: "grid gap-4 md:grid-cols-3",
55
- children: [
56
- /* @__PURE__ */ jsxs(Card, { children: [/* @__PURE__ */ jsx(CardHeader, {
57
- className: "pb-2",
58
- children: /* @__PURE__ */ jsx(CardTitle, {
59
- className: "text-muted-foreground text-sm font-medium",
60
- children: "Active Tips"
61
- })
62
- }), /* @__PURE__ */ jsxs(CardContent, { children: [/* @__PURE__ */ jsx("div", {
63
- className: "text-3xl font-bold text-amber-500",
64
- children: pendingSteps
65
- }), /* @__PURE__ */ jsx("p", {
66
- className: "text-muted-foreground text-sm",
67
- children: "tips for you today"
68
- })] })] }),
69
- /* @__PURE__ */ jsxs(Card, { children: [/* @__PURE__ */ jsx(CardHeader, {
70
- className: "pb-2",
71
- children: /* @__PURE__ */ jsx(CardTitle, {
72
- className: "text-muted-foreground text-sm font-medium",
73
- children: "Tips Actioned"
74
- })
75
- }), /* @__PURE__ */ jsxs(CardContent, { children: [/* @__PURE__ */ jsx("div", {
76
- className: "text-3xl font-bold text-green-500",
77
- children: completedSteps
78
- }), /* @__PURE__ */ jsxs("p", {
79
- className: "text-muted-foreground text-sm",
80
- children: [
81
- "out of ",
82
- totalSteps,
83
- " total"
84
- ]
85
- })] })] }),
86
- /* @__PURE__ */ jsxs(Card, { children: [/* @__PURE__ */ jsx(CardHeader, {
87
- className: "pb-2",
88
- children: /* @__PURE__ */ jsx(CardTitle, {
89
- className: "text-muted-foreground text-sm font-medium",
90
- children: "XP Earned"
91
- })
92
- }), /* @__PURE__ */ jsxs(CardContent, { children: [/* @__PURE__ */ jsx("div", {
93
- className: "text-3xl font-bold text-orange-500",
94
- children: progress.xpEarned
95
- }), /* @__PURE__ */ jsx(XpBar, {
96
- current: progress.xpEarned,
97
- max: totalXp,
98
- showLabel: false,
99
- size: "sm"
100
- })] })] })
101
- ]
102
- }),
103
- activeTips.length > 0 && /* @__PURE__ */ jsxs(Card, { children: [/* @__PURE__ */ jsxs(CardHeader, {
104
- className: "flex flex-row items-center justify-between",
105
- children: [/* @__PURE__ */ jsxs(CardTitle, {
106
- className: "flex items-center gap-2",
107
- children: [/* @__PURE__ */ jsx("span", { children: "💡" }), /* @__PURE__ */ jsx("span", { children: "Tips for You" })]
108
- }), activeTips.length < pendingSteps && /* @__PURE__ */ jsxs(Button$1, {
109
- variant: "outline",
110
- size: "sm",
111
- onClick: onStart,
112
- children: [
113
- "View All (",
114
- pendingSteps,
115
- ")"
116
- ]
117
- })]
118
- }), /* @__PURE__ */ jsx(CardContent, {
119
- className: "space-y-3",
120
- children: activeTips.map((step) => /* @__PURE__ */ jsx(TipCard, {
121
- step,
122
- isCompleted: false,
123
- isCurrent: step.id === activeTips[0]?.id,
124
- onComplete: () => onStepComplete?.(step.id)
125
- }, step.id))
126
- })] }),
127
- pendingSteps === 0 && /* @__PURE__ */ jsx(Card, {
128
- className: "border-green-500/50 bg-green-500/5",
129
- children: /* @__PURE__ */ jsxs(CardContent, {
130
- className: "flex items-center gap-4 p-6",
131
- children: [/* @__PURE__ */ jsx("div", {
132
- className: "text-4xl",
133
- children: "🎉"
134
- }), /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("h3", {
135
- className: "text-lg font-semibold text-green-500",
136
- children: "All Tips Actioned!"
137
- }), /* @__PURE__ */ jsxs("p", {
138
- className: "text-muted-foreground",
139
- children: [
140
- "Great job! You've addressed all ",
141
- totalSteps,
142
- " coaching tips."
143
- ]
144
- })] })]
145
- })
146
- })
147
- ]
148
- });
149
- }
150
-
151
- //#endregion
152
- export { Overview };
@@ -1,117 +0,0 @@
1
- 'use client';
2
-
3
- import { Card, CardContent, CardHeader, CardTitle } from "../../../../libs/ui-kit-web/dist/ui/card.js";
4
- import { XpBar } from "../../../learning-journey-ui-shared/src/components/XpBar.js";
5
- import { StreakCounter } from "../../../learning-journey-ui-shared/src/components/StreakCounter.js";
6
- import { BadgeDisplay } from "../../../learning-journey-ui-shared/src/components/BadgeDisplay.js";
7
- import "../../../learning-journey-ui-shared/src/index.js";
8
- import { EngagementMeter } from "../components/EngagementMeter.js";
9
- import { jsx, jsxs } from "react/jsx-runtime";
10
-
11
- //#region ../learning-journey-ui-coaching/src/views/Progress.tsx
12
- function ProgressView({ track, progress }) {
13
- const totalXp = track.totalXp ?? track.steps.reduce((sum, s) => sum + (s.xpReward ?? 0), 0);
14
- const completedSteps = progress.completedStepIds.length;
15
- const pendingSteps = track.steps.length - completedSteps;
16
- const actioned = Math.floor(completedSteps * .7);
17
- const acknowledged = completedSteps - actioned;
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: "Engagement Overview" })]
24
- }) }), /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx(EngagementMeter, {
25
- actioned,
26
- acknowledged,
27
- pending: pendingSteps,
28
- streak: progress.streakDays
29
- }) })] }),
30
- /* @__PURE__ */ jsxs("div", {
31
- className: "grid gap-4 md:grid-cols-2",
32
- children: [/* @__PURE__ */ jsxs(Card, { children: [/* @__PURE__ */ jsx(CardHeader, {
33
- className: "pb-2",
34
- children: /* @__PURE__ */ jsx(CardTitle, {
35
- className: "text-muted-foreground text-sm font-medium",
36
- children: "XP Earned"
37
- })
38
- }), /* @__PURE__ */ jsxs(CardContent, {
39
- className: "space-y-3",
40
- children: [/* @__PURE__ */ jsxs("div", {
41
- className: "flex items-baseline gap-2",
42
- children: [/* @__PURE__ */ jsx("span", {
43
- className: "text-3xl font-bold text-orange-500",
44
- children: progress.xpEarned
45
- }), /* @__PURE__ */ jsxs("span", {
46
- className: "text-muted-foreground",
47
- children: [
48
- "/ ",
49
- totalXp,
50
- " XP"
51
- ]
52
- })]
53
- }), /* @__PURE__ */ jsx(XpBar, {
54
- current: progress.xpEarned,
55
- max: totalXp,
56
- showLabel: false,
57
- size: "lg"
58
- })]
59
- })] }), /* @__PURE__ */ jsxs(Card, { children: [/* @__PURE__ */ jsx(CardHeader, {
60
- className: "pb-2",
61
- children: /* @__PURE__ */ jsx(CardTitle, {
62
- className: "text-muted-foreground text-sm font-medium",
63
- children: "Engagement Streak"
64
- })
65
- }), /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsxs("div", {
66
- className: "flex items-center gap-4",
67
- children: [/* @__PURE__ */ jsx(StreakCounter, {
68
- days: progress.streakDays,
69
- size: "lg"
70
- }), /* @__PURE__ */ jsx("div", {
71
- className: "text-muted-foreground text-sm",
72
- children: progress.streakDays > 0 ? "Keep going!" : "Start your streak today!"
73
- })]
74
- }) })] })]
75
- }),
76
- /* @__PURE__ */ jsxs(Card, { children: [/* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsxs(CardTitle, {
77
- className: "flex items-center gap-2",
78
- children: [/* @__PURE__ */ jsx("span", { children: "🏅" }), /* @__PURE__ */ jsx("span", { children: "Achievements" })]
79
- }) }), /* @__PURE__ */ jsxs(CardContent, { children: [/* @__PURE__ */ jsx(BadgeDisplay, {
80
- badges: progress.badges,
81
- size: "lg",
82
- maxVisible: 10
83
- }), progress.badges.length === 0 && /* @__PURE__ */ jsx("p", {
84
- className: "text-muted-foreground text-sm",
85
- children: "Action tips to unlock achievements!"
86
- })] })] }),
87
- /* @__PURE__ */ jsxs(Card, { children: [/* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsxs(CardTitle, {
88
- className: "flex items-center gap-2",
89
- children: [/* @__PURE__ */ jsx("span", { children: "💡" }), /* @__PURE__ */ jsx("span", { children: "Tip Status" })]
90
- }) }), /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx("div", {
91
- className: "space-y-3",
92
- children: track.steps.map((step) => {
93
- const isCompleted = progress.completedStepIds.includes(step.id);
94
- return /* @__PURE__ */ jsxs("div", {
95
- className: "flex items-center justify-between rounded-lg border p-3",
96
- children: [/* @__PURE__ */ jsxs("div", {
97
- className: "flex items-center gap-3",
98
- children: [/* @__PURE__ */ jsx("span", {
99
- className: isCompleted ? "text-green-500" : "text-amber-500",
100
- children: isCompleted ? "✓" : "○"
101
- }), /* @__PURE__ */ jsx("span", {
102
- className: isCompleted ? "text-muted-foreground" : "text-foreground",
103
- children: step.title
104
- })]
105
- }), /* @__PURE__ */ jsx("span", {
106
- className: `text-sm ${isCompleted ? "text-green-500" : "text-muted-foreground"}`,
107
- children: isCompleted ? "Actioned" : "Pending"
108
- })]
109
- }, step.id);
110
- })
111
- }) })] })
112
- ]
113
- });
114
- }
115
-
116
- //#endregion
117
- export { ProgressView };
@@ -1,68 +0,0 @@
1
- 'use client';
2
-
3
- import { TipCard } from "../components/TipCard.js";
4
- import { jsx, jsxs } from "react/jsx-runtime";
5
-
6
- //#region ../learning-journey-ui-coaching/src/views/Steps.tsx
7
- function Steps({ track, progress, onStepComplete }) {
8
- const completedSteps = progress.completedStepIds.length;
9
- const totalSteps = track.steps.length;
10
- const sortedSteps = [...track.steps].sort((a, b) => {
11
- const aCompleted = progress.completedStepIds.includes(a.id);
12
- if (aCompleted === progress.completedStepIds.includes(b.id)) return 0;
13
- return aCompleted ? 1 : -1;
14
- });
15
- const currentStepId = track.steps.find((s) => !progress.completedStepIds.includes(s.id))?.id;
16
- return /* @__PURE__ */ jsxs("div", {
17
- className: "space-y-6",
18
- children: [
19
- /* @__PURE__ */ jsxs("div", {
20
- className: "text-center",
21
- children: [
22
- /* @__PURE__ */ jsx("h2", {
23
- className: "text-xl font-bold",
24
- children: "Coaching Tips"
25
- }),
26
- /* @__PURE__ */ jsx("p", {
27
- className: "text-muted-foreground",
28
- children: "Review and take action on personalized tips"
29
- }),
30
- /* @__PURE__ */ jsxs("p", {
31
- className: "text-muted-foreground mt-2 text-sm",
32
- children: [
33
- completedSteps,
34
- " of ",
35
- totalSteps,
36
- " tips actioned"
37
- ]
38
- })
39
- ]
40
- }),
41
- /* @__PURE__ */ jsx("div", {
42
- className: "space-y-3",
43
- children: sortedSteps.map((step) => {
44
- return /* @__PURE__ */ jsx(TipCard, {
45
- step,
46
- isCompleted: progress.completedStepIds.includes(step.id),
47
- isCurrent: step.id === currentStepId,
48
- onComplete: () => onStepComplete?.(step.id),
49
- onDismiss: () => onStepComplete?.(step.id)
50
- }, step.id);
51
- })
52
- }),
53
- completedSteps === totalSteps && /* @__PURE__ */ jsxs("div", {
54
- className: "text-muted-foreground text-center",
55
- children: [/* @__PURE__ */ jsx("span", {
56
- className: "text-2xl",
57
- children: "✨"
58
- }), /* @__PURE__ */ jsx("p", {
59
- className: "mt-2",
60
- children: "All tips have been addressed!"
61
- })]
62
- })
63
- ]
64
- });
65
- }
66
-
67
- //#endregion
68
- export { Steps };
@@ -1,112 +0,0 @@
1
- 'use client';
2
-
3
- import { Card, CardContent, CardHeader, CardTitle } from "../../../../libs/ui-kit-web/dist/ui/card.js";
4
- import { TipFeed } from "../components/TipFeed.js";
5
- import { jsx, jsxs } from "react/jsx-runtime";
6
-
7
- //#region ../learning-journey-ui-coaching/src/views/Timeline.tsx
8
- function Timeline({ track, progress }) {
9
- const feedItems = track.steps.map((step) => ({
10
- step,
11
- isCompleted: progress.completedStepIds.includes(step.id),
12
- completedAt: progress.completedStepIds.includes(step.id) ? "Recently" : void 0
13
- })).sort((a, b) => {
14
- if (a.isCompleted && !b.isCompleted) return -1;
15
- if (!a.isCompleted && b.isCompleted) return 1;
16
- return 0;
17
- });
18
- const completedCount = feedItems.filter((f) => f.isCompleted).length;
19
- const pendingCount = feedItems.length - completedCount;
20
- return /* @__PURE__ */ jsxs("div", {
21
- className: "space-y-6",
22
- children: [
23
- /* @__PURE__ */ jsxs("div", {
24
- className: "text-center",
25
- children: [/* @__PURE__ */ jsx("h2", {
26
- className: "text-xl font-bold",
27
- children: "Activity Timeline"
28
- }), /* @__PURE__ */ jsx("p", {
29
- className: "text-muted-foreground",
30
- children: "Your coaching journey and tip history"
31
- })]
32
- }),
33
- /* @__PURE__ */ jsxs("div", {
34
- className: "grid grid-cols-2 gap-4",
35
- children: [/* @__PURE__ */ jsx(Card, { children: /* @__PURE__ */ jsxs(CardContent, {
36
- className: "p-4 text-center",
37
- children: [/* @__PURE__ */ jsx("div", {
38
- className: "text-2xl font-bold text-green-500",
39
- children: completedCount
40
- }), /* @__PURE__ */ jsx("div", {
41
- className: "text-muted-foreground text-sm",
42
- children: "Tips Actioned"
43
- })]
44
- }) }), /* @__PURE__ */ jsx(Card, { children: /* @__PURE__ */ jsxs(CardContent, {
45
- className: "p-4 text-center",
46
- children: [/* @__PURE__ */ jsx("div", {
47
- className: "text-2xl font-bold text-amber-500",
48
- children: pendingCount
49
- }), /* @__PURE__ */ jsx("div", {
50
- className: "text-muted-foreground text-sm",
51
- children: "Tips Pending"
52
- })]
53
- }) })]
54
- }),
55
- /* @__PURE__ */ jsxs(Card, { children: [/* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsxs(CardTitle, {
56
- className: "flex items-center gap-2",
57
- children: [/* @__PURE__ */ jsx("span", { children: "📝" }), /* @__PURE__ */ jsx("span", { children: "Coaching Feed" })]
58
- }) }), /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx(TipFeed, { items: feedItems }) })] }),
59
- /* @__PURE__ */ jsxs(Card, { children: [/* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsxs(CardTitle, {
60
- className: "flex items-center gap-2",
61
- children: [/* @__PURE__ */ jsx("span", { children: "📈" }), /* @__PURE__ */ jsx("span", { children: "Journey Stats" })]
62
- }) }), /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsxs("div", {
63
- className: "space-y-4",
64
- children: [
65
- /* @__PURE__ */ jsxs("div", {
66
- className: "flex items-center justify-between",
67
- children: [/* @__PURE__ */ jsx("span", {
68
- className: "text-muted-foreground",
69
- children: "Total Tips"
70
- }), /* @__PURE__ */ jsx("span", {
71
- className: "font-semibold",
72
- children: track.steps.length
73
- })]
74
- }),
75
- /* @__PURE__ */ jsxs("div", {
76
- className: "flex items-center justify-between",
77
- children: [/* @__PURE__ */ jsx("span", {
78
- className: "text-muted-foreground",
79
- children: "Completed"
80
- }), /* @__PURE__ */ jsx("span", {
81
- className: "font-semibold text-green-500",
82
- children: completedCount
83
- })]
84
- }),
85
- /* @__PURE__ */ jsxs("div", {
86
- className: "flex items-center justify-between",
87
- children: [/* @__PURE__ */ jsx("span", {
88
- className: "text-muted-foreground",
89
- children: "XP Earned"
90
- }), /* @__PURE__ */ jsx("span", {
91
- className: "font-semibold text-orange-500",
92
- children: progress.xpEarned
93
- })]
94
- }),
95
- /* @__PURE__ */ jsxs("div", {
96
- className: "flex items-center justify-between",
97
- children: [/* @__PURE__ */ jsx("span", {
98
- className: "text-muted-foreground",
99
- children: "Current Streak"
100
- }), /* @__PURE__ */ jsx("span", {
101
- className: "font-semibold",
102
- children: progress.streakDays > 0 ? `🔥 ${progress.streakDays} days` : "Start today!"
103
- })]
104
- })
105
- ]
106
- }) })] })
107
- ]
108
- });
109
- }
110
-
111
- //#endregion
112
- 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,64 +0,0 @@
1
- 'use client';
2
-
3
- import { Card, CardContent } from "../../../libs/ui-kit-web/dist/ui/card.js";
4
- import { useLearningProgress } from "../../learning-journey-ui-shared/src/hooks/useLearningProgress.js";
5
- import { ViewTabs } from "../../learning-journey-ui-shared/src/components/ViewTabs.js";
6
- import "../../learning-journey-ui-shared/src/index.js";
7
- import { Overview } from "./views/Overview.js";
8
- import { Steps } from "./views/Steps.js";
9
- import { Progress } from "./views/Progress.js";
10
- import { Timeline } from "./views/Timeline.js";
11
- import { useCallback, useState } from "react";
12
- import { jsx, jsxs } from "react/jsx-runtime";
13
-
14
- //#region ../learning-journey-ui-gamified/src/GamifiedMiniApp.tsx
15
- function GamifiedMiniApp({ track, progress: externalProgress, onStepComplete: externalOnStepComplete, onViewChange, initialView = "overview" }) {
16
- const [currentView, setCurrentView] = useState(initialView);
17
- const { progress: internalProgress, completeStep: internalCompleteStep } = useLearningProgress(track);
18
- const progress = externalProgress ?? internalProgress;
19
- const handleViewChange = useCallback((view) => {
20
- setCurrentView(view);
21
- onViewChange?.(view);
22
- }, [onViewChange]);
23
- const handleStepComplete = useCallback((stepId) => {
24
- if (externalOnStepComplete) externalOnStepComplete(stepId);
25
- else internalCompleteStep(stepId);
26
- }, [externalOnStepComplete, internalCompleteStep]);
27
- const handleStartFromOverview = useCallback(() => {
28
- setCurrentView("steps");
29
- onViewChange?.("steps");
30
- }, [onViewChange]);
31
- const renderView = () => {
32
- const viewProps = {
33
- track,
34
- progress,
35
- onStepComplete: handleStepComplete
36
- };
37
- switch (currentView) {
38
- case "overview": return /* @__PURE__ */ jsx(Overview, {
39
- ...viewProps,
40
- onStart: handleStartFromOverview
41
- });
42
- case "steps": return /* @__PURE__ */ jsx(Steps, { ...viewProps });
43
- case "progress": return /* @__PURE__ */ jsx(Progress, { ...viewProps });
44
- case "timeline": return /* @__PURE__ */ jsx(Timeline, { ...viewProps });
45
- default: return /* @__PURE__ */ jsx(Overview, {
46
- ...viewProps,
47
- onStart: handleStartFromOverview
48
- });
49
- }
50
- };
51
- return /* @__PURE__ */ jsxs("div", {
52
- className: "space-y-6",
53
- children: [/* @__PURE__ */ jsx(Card, { children: /* @__PURE__ */ jsx(CardContent, {
54
- className: "p-4",
55
- children: /* @__PURE__ */ jsx(ViewTabs, {
56
- currentView,
57
- onViewChange: handleViewChange
58
- })
59
- }) }), renderView()]
60
- });
61
- }
62
-
63
- //#endregion
64
- export { GamifiedMiniApp };
@@ -1,32 +0,0 @@
1
- 'use client';
2
-
3
- import { cn } from "../../../../libs/ui-kit-web/dist/ui/utils.js";
4
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
5
-
6
- //#region ../learning-journey-ui-gamified/src/components/DayCalendar.tsx
7
- function DayCalendar({ totalDays, currentDay, completedDays }) {
8
- return /* @__PURE__ */ jsx("div", {
9
- className: "grid grid-cols-7 gap-2",
10
- children: Array.from({ length: totalDays }, (_, i) => i + 1).map((day) => {
11
- const isCompleted = completedDays.includes(day);
12
- const isCurrent = day === currentDay;
13
- const isLocked = day > currentDay;
14
- return /* @__PURE__ */ jsx("div", {
15
- className: cn("flex h-12 w-12 flex-col items-center justify-center rounded-lg border text-sm font-medium transition-all", isCompleted && "border-green-500 bg-green-500/10 text-green-500", isCurrent && !isCompleted && "border-violet-500 bg-violet-500/10 text-violet-500 ring-2 ring-violet-500/50", isLocked && "border-muted bg-muted/50 text-muted-foreground", !isCompleted && !isCurrent && !isLocked && "border-border bg-card"),
16
- children: isCompleted ? /* @__PURE__ */ jsx("span", {
17
- className: "text-lg",
18
- children: "✓"
19
- }) : isLocked ? /* @__PURE__ */ jsx("span", {
20
- className: "text-lg",
21
- children: "🔒"
22
- }) : /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", {
23
- className: "text-muted-foreground text-xs",
24
- children: "Day"
25
- }), /* @__PURE__ */ jsx("span", { children: day })] })
26
- }, day);
27
- })
28
- });
29
- }
30
-
31
- //#endregion
32
- export { DayCalendar };