@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.
- package/.turbo/turbo-build.log +53 -55
- package/dist/api.js +1 -170
- package/dist/docs/index.js +1 -1
- package/dist/docs/learning-journey-registry.docblock.js +1 -38
- package/dist/example.js +1 -34
- package/dist/index.js +1 -13
- package/dist/learning-journey-registry.feature.js +1 -66
- package/dist/libs/contracts/src/docs/PUBLISHING.docblock.js +76 -0
- package/dist/libs/contracts/src/docs/accessibility_wcag_compliance_specs.docblock.js +350 -0
- package/dist/libs/contracts/src/docs/index.js +1 -0
- package/dist/libs/contracts/src/docs/presentations.js +1 -0
- package/dist/libs/contracts/src/docs/registry.js +1 -0
- package/dist/libs/contracts/src/docs/tech/PHASE_1_QUICKSTART.docblock.js +383 -0
- package/dist/libs/contracts/src/docs/tech/PHASE_2_AI_NATIVE_OPERATIONS.docblock.js +68 -0
- package/dist/libs/contracts/src/docs/tech/PHASE_3_AUTO_EVOLUTION.docblock.js +140 -0
- package/dist/libs/contracts/src/docs/tech/PHASE_4_PERSONALIZATION_ENGINE.docblock.js +86 -0
- package/dist/libs/contracts/src/docs/tech/PHASE_5_ZERO_TOUCH_OPERATIONS.docblock.js +1 -0
- package/dist/libs/contracts/{dist → src}/docs/tech/auth/better-auth-nextjs.docblock.js +2 -24
- package/dist/libs/contracts/{dist → src}/docs/tech/contracts/openapi-export.docblock.js +2 -21
- package/dist/libs/contracts/src/docs/tech/lifecycle-stage-system.docblock.js +213 -0
- package/dist/libs/contracts/{dist → src}/docs/tech/llm/llm-integration.docblock.js +5 -73
- package/dist/libs/contracts/src/docs/tech/mcp-endpoints.docblock.js +1 -0
- package/dist/libs/contracts/src/docs/tech/presentation-runtime.docblock.js +1 -0
- package/dist/libs/contracts/src/docs/tech/schema/README.docblock.js +262 -0
- package/dist/libs/contracts/src/docs/tech/studio/learning-events.docblock.js +1 -0
- package/dist/libs/contracts/{dist → src}/docs/tech/studio/learning-journeys.docblock.js +2 -24
- package/dist/libs/contracts/{dist → src}/docs/tech/studio/platform-admin-panel.docblock.js +2 -23
- package/dist/libs/contracts/src/docs/tech/studio/project-access-teams.docblock.js +36 -0
- package/dist/libs/contracts/src/docs/tech/studio/project-routing.docblock.js +1 -0
- package/dist/libs/contracts/src/docs/tech/studio/sandbox-unlogged.docblock.js +20 -0
- package/dist/libs/contracts/{dist → src}/docs/tech/studio/team-invitations.docblock.js +36 -40
- package/dist/libs/contracts/src/docs/tech/studio/workspace-ops.docblock.js +1 -0
- package/dist/libs/contracts/{dist → src}/docs/tech/studio/workspaces.docblock.js +2 -23
- package/dist/libs/contracts/{dist → src}/docs/tech/telemetry-ingest.docblock.js +3 -36
- package/dist/libs/contracts/src/docs/tech/templates/runtime.docblock.js +1 -0
- package/dist/libs/contracts/{dist → src}/docs/tech/vscode-extension.docblock.js +3 -36
- package/dist/libs/contracts/src/docs/tech/workflows/overview.docblock.js +1 -0
- package/dist/presentations/index.js +1 -64
- package/dist/progress-store.js +1 -30
- package/dist/tracks.js +1 -47
- package/dist/ui/LearningMiniApp.js +1 -82
- package/dist/ui/index.js +1 -3
- package/package.json +26 -30
- package/tsconfig.tsbuildinfo +1 -1
- package/.turbo/turbo-build$colon$bundle.log +0 -410
- package/CHANGELOG.md +0 -24
- package/dist/api-types.d.ts +0 -40
- package/dist/api.d.ts +0 -12
- package/dist/docs/index.d.ts +0 -1
- package/dist/docs/learning-journey-registry.docblock.d.ts +0 -1
- package/dist/example.d.ts +0 -32
- package/dist/examples/learning-journey-ambient-coach/src/track.js +0 -41
- package/dist/examples/learning-journey-crm-onboarding/dist/track.js +0 -98
- package/dist/examples/learning-journey-duo-drills/src/track.js +0 -65
- package/dist/examples/learning-journey-platform-tour/dist/track.js +0 -105
- package/dist/examples/learning-journey-quest-challenges/src/track.js +0 -35
- package/dist/examples/learning-journey-studio-onboarding/dist/track.js +0 -90
- package/dist/examples/learning-journey-ui-coaching/src/CoachingMiniApp.js +0 -64
- package/dist/examples/learning-journey-ui-coaching/src/components/EngagementMeter.js +0 -107
- package/dist/examples/learning-journey-ui-coaching/src/components/TipCard.js +0 -75
- package/dist/examples/learning-journey-ui-coaching/src/components/TipFeed.js +0 -65
- package/dist/examples/learning-journey-ui-coaching/src/components/index.js +0 -3
- package/dist/examples/learning-journey-ui-coaching/src/docs/index.js +0 -1
- package/dist/examples/learning-journey-ui-coaching/src/docs/learning-journey-ui-coaching.docblock.js +0 -20
- package/dist/examples/learning-journey-ui-coaching/src/index.js +0 -11
- package/dist/examples/learning-journey-ui-coaching/src/views/Overview.js +0 -152
- package/dist/examples/learning-journey-ui-coaching/src/views/Progress.js +0 -117
- package/dist/examples/learning-journey-ui-coaching/src/views/Steps.js +0 -68
- package/dist/examples/learning-journey-ui-coaching/src/views/Timeline.js +0 -112
- package/dist/examples/learning-journey-ui-coaching/src/views/index.js +0 -4
- package/dist/examples/learning-journey-ui-gamified/src/GamifiedMiniApp.js +0 -64
- package/dist/examples/learning-journey-ui-gamified/src/components/DayCalendar.js +0 -32
- package/dist/examples/learning-journey-ui-gamified/src/components/FlashCard.js +0 -79
- package/dist/examples/learning-journey-ui-gamified/src/components/MasteryRing.js +0 -81
- package/dist/examples/learning-journey-ui-gamified/src/components/index.js +0 -3
- package/dist/examples/learning-journey-ui-gamified/src/docs/index.js +0 -1
- package/dist/examples/learning-journey-ui-gamified/src/docs/learning-journey-ui-gamified.docblock.js +0 -20
- package/dist/examples/learning-journey-ui-gamified/src/index.js +0 -11
- package/dist/examples/learning-journey-ui-gamified/src/views/Overview.js +0 -163
- package/dist/examples/learning-journey-ui-gamified/src/views/Progress.js +0 -144
- package/dist/examples/learning-journey-ui-gamified/src/views/Steps.js +0 -55
- package/dist/examples/learning-journey-ui-gamified/src/views/Timeline.js +0 -132
- package/dist/examples/learning-journey-ui-gamified/src/views/index.js +0 -4
- package/dist/examples/learning-journey-ui-onboarding/src/OnboardingMiniApp.js +0 -64
- package/dist/examples/learning-journey-ui-onboarding/src/components/CodeSnippet.js +0 -4
- package/dist/examples/learning-journey-ui-onboarding/src/components/JourneyMap.js +0 -48
- package/dist/examples/learning-journey-ui-onboarding/src/components/StepChecklist.js +0 -79
- package/dist/examples/learning-journey-ui-onboarding/src/components/index.js +0 -3
- package/dist/examples/learning-journey-ui-onboarding/src/docs/index.js +0 -1
- package/dist/examples/learning-journey-ui-onboarding/src/docs/learning-journey-ui-onboarding.docblock.js +0 -20
- package/dist/examples/learning-journey-ui-onboarding/src/index.js +0 -10
- package/dist/examples/learning-journey-ui-onboarding/src/views/Overview.js +0 -180
- package/dist/examples/learning-journey-ui-onboarding/src/views/Progress.js +0 -162
- package/dist/examples/learning-journey-ui-onboarding/src/views/Steps.js +0 -91
- package/dist/examples/learning-journey-ui-onboarding/src/views/Timeline.js +0 -97
- package/dist/examples/learning-journey-ui-onboarding/src/views/index.js +0 -4
- package/dist/examples/learning-journey-ui-shared/src/components/BadgeDisplay.js +0 -44
- package/dist/examples/learning-journey-ui-shared/src/components/StreakCounter.js +0 -45
- package/dist/examples/learning-journey-ui-shared/src/components/ViewTabs.js +0 -48
- package/dist/examples/learning-journey-ui-shared/src/components/XpBar.js +0 -46
- package/dist/examples/learning-journey-ui-shared/src/components/index.js +0 -4
- package/dist/examples/learning-journey-ui-shared/src/docs/index.js +0 -1
- package/dist/examples/learning-journey-ui-shared/src/docs/learning-journey-ui-shared.docblock.js +0 -20
- package/dist/examples/learning-journey-ui-shared/src/hooks/index.js +0 -1
- package/dist/examples/learning-journey-ui-shared/src/hooks/useLearningProgress.js +0 -73
- package/dist/examples/learning-journey-ui-shared/src/index.js +0 -8
- package/dist/index.d.ts +0 -8
- package/dist/learning-journey-registry.feature.d.ts +0 -11
- package/dist/libs/contracts/dist/docs/PUBLISHING.docblock.js +0 -16
- package/dist/libs/contracts/dist/docs/accessibility_wcag_compliance_specs.docblock.js +0 -16
- package/dist/libs/contracts/dist/docs/index.js +0 -29
- package/dist/libs/contracts/dist/docs/presentations.js +0 -71
- package/dist/libs/contracts/dist/docs/registry.js +0 -44
- package/dist/libs/contracts/dist/docs/tech/PHASE_1_QUICKSTART.docblock.js +0 -16
- package/dist/libs/contracts/dist/docs/tech/PHASE_2_AI_NATIVE_OPERATIONS.docblock.js +0 -16
- package/dist/libs/contracts/dist/docs/tech/PHASE_3_AUTO_EVOLUTION.docblock.js +0 -16
- package/dist/libs/contracts/dist/docs/tech/PHASE_4_PERSONALIZATION_ENGINE.docblock.js +0 -16
- package/dist/libs/contracts/dist/docs/tech/PHASE_5_ZERO_TOUCH_OPERATIONS.docblock.js +0 -16
- package/dist/libs/contracts/dist/docs/tech/lifecycle-stage-system.docblock.js +0 -16
- package/dist/libs/contracts/dist/docs/tech/mcp-endpoints.docblock.js +0 -37
- package/dist/libs/contracts/dist/docs/tech/presentation-runtime.docblock.js +0 -16
- package/dist/libs/contracts/dist/docs/tech/schema/README.docblock.js +0 -20
- package/dist/libs/contracts/dist/docs/tech/studio/learning-events.docblock.js +0 -48
- package/dist/libs/contracts/dist/docs/tech/studio/project-access-teams.docblock.js +0 -45
- package/dist/libs/contracts/dist/docs/tech/studio/project-routing.docblock.js +0 -67
- package/dist/libs/contracts/dist/docs/tech/studio/sandbox-unlogged.docblock.js +0 -40
- package/dist/libs/contracts/dist/docs/tech/studio/workspace-ops.docblock.js +0 -47
- package/dist/libs/contracts/dist/docs/tech/templates/runtime.docblock.js +0 -20
- package/dist/libs/contracts/dist/docs/tech/workflows/overview.docblock.js +0 -20
- package/dist/libs/design-system/dist/_virtual/rolldown_runtime.js +0 -5
- package/dist/libs/design-system/dist/components/atoms/Button.js +0 -33
- package/dist/libs/design-system/dist/ui-kit-web/dist/ui/button.js +0 -55
- package/dist/libs/design-system/dist/ui-kit-web/dist/ui-kit-core/dist/utils.js +0 -13
- package/dist/libs/ui-kit-core/dist/utils.js +0 -10
- package/dist/libs/ui-kit-web/dist/ui/card.js +0 -36
- package/dist/libs/ui-kit-web/dist/ui/progress.js +0 -23
- package/dist/libs/ui-kit-web/dist/ui/utils.js +0 -10
- package/dist/libs/ui-kit-web/dist/ui-kit-core/dist/utils.js +0 -10
- package/dist/presentations/index.d.ts +0 -9
- package/dist/progress-store.d.ts +0 -10
- package/dist/tracks.d.ts +0 -39
- package/dist/ui/LearningMiniApp.d.ts +0 -22
- package/dist/ui/index.d.ts +0 -2
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
//#region ../learning-journey-ambient-coach/src/track.ts
|
|
2
|
-
const makeTipStep = (id, tipId, description) => ({
|
|
3
|
-
id,
|
|
4
|
-
title: `Resolve tip: ${tipId}`,
|
|
5
|
-
description,
|
|
6
|
-
completion: {
|
|
7
|
-
kind: "event",
|
|
8
|
-
eventName: "coach.tip.follow_up_action_taken",
|
|
9
|
-
payloadFilter: { tipId }
|
|
10
|
-
},
|
|
11
|
-
xpReward: 20,
|
|
12
|
-
metadata: { tipId }
|
|
13
|
-
});
|
|
14
|
-
const moneyAmbientCoachTrack = {
|
|
15
|
-
id: "money_ambient_coach",
|
|
16
|
-
name: "Ambient Coach — Money",
|
|
17
|
-
description: "Subtle coaching for money patterns (cash buffer, goals, saving rhythm).",
|
|
18
|
-
targetUserSegment: "money_user",
|
|
19
|
-
totalXp: 60,
|
|
20
|
-
steps: [
|
|
21
|
-
makeTipStep("cash_buffer_too_high", "cash_buffer_too_high", "Suggest sweeping excess cash into goals."),
|
|
22
|
-
makeTipStep("no_savings_goal", "no_savings_goal", "Prompt setting a first savings goal."),
|
|
23
|
-
makeTipStep("irregular_savings", "irregular_savings", "Recommend recurring saves after irregular deposits.")
|
|
24
|
-
]
|
|
25
|
-
};
|
|
26
|
-
const colivingAmbientCoachTrack = {
|
|
27
|
-
id: "coliving_ambient_coach",
|
|
28
|
-
name: "Ambient Coach — Coliving",
|
|
29
|
-
description: "Contextual tips for healthy coliving habits.",
|
|
30
|
-
targetUserSegment: "coliving",
|
|
31
|
-
totalXp: 60,
|
|
32
|
-
steps: [
|
|
33
|
-
makeTipStep("noise_late_evening", "noise_late_evening", "Suggest updating quiet hours to reduce evening noise."),
|
|
34
|
-
makeTipStep("guest_frequency_high", "guest_frequency_high", "Set guest frequency expectations for the house."),
|
|
35
|
-
makeTipStep("shared_space_conflicts", "shared_space_conflicts", "Offer a shared-space checklist to reduce conflicts.")
|
|
36
|
-
]
|
|
37
|
-
};
|
|
38
|
-
const ambientCoachTracks = [moneyAmbientCoachTrack, colivingAmbientCoachTrack];
|
|
39
|
-
|
|
40
|
-
//#endregion
|
|
41
|
-
export { ambientCoachTracks };
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
//#region ../learning-journey-crm-onboarding/dist/track.js
|
|
2
|
-
const crmFirstWinTrack = {
|
|
3
|
-
id: "crm_first_win",
|
|
4
|
-
productId: "crm-pipeline",
|
|
5
|
-
name: "CRM First Win",
|
|
6
|
-
description: "Guide a new CRM user from empty pipeline to first closed-won deal.",
|
|
7
|
-
targetUserSegment: "crm_adopter",
|
|
8
|
-
targetRole: "sales",
|
|
9
|
-
totalXp: 135,
|
|
10
|
-
streakRule: {
|
|
11
|
-
hoursWindow: 72,
|
|
12
|
-
bonusXp: 25
|
|
13
|
-
},
|
|
14
|
-
completionRewards: {
|
|
15
|
-
xpBonus: 25,
|
|
16
|
-
badgeKey: "crm_first_win"
|
|
17
|
-
},
|
|
18
|
-
steps: [
|
|
19
|
-
{
|
|
20
|
-
id: "create_pipeline",
|
|
21
|
-
title: "Create pipeline & stages",
|
|
22
|
-
description: "Create a pipeline with baseline stages.",
|
|
23
|
-
order: 1,
|
|
24
|
-
completion: {
|
|
25
|
-
eventName: "pipeline.created",
|
|
26
|
-
sourceModule: "@lssm/example.crm-pipeline"
|
|
27
|
-
},
|
|
28
|
-
xpReward: 15,
|
|
29
|
-
metadata: { surface: "pipeline" }
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
id: "create_contact_and_company",
|
|
33
|
-
title: "Create contact and company",
|
|
34
|
-
description: "Add your first contact and associated company.",
|
|
35
|
-
order: 2,
|
|
36
|
-
completion: {
|
|
37
|
-
eventName: "contact.created",
|
|
38
|
-
sourceModule: "@lssm/example.crm-pipeline"
|
|
39
|
-
},
|
|
40
|
-
xpReward: 20,
|
|
41
|
-
metadata: { surface: "contacts" }
|
|
42
|
-
},
|
|
43
|
-
{
|
|
44
|
-
id: "create_first_deal",
|
|
45
|
-
title: "Log first deal",
|
|
46
|
-
description: "Create your first deal in the pipeline.",
|
|
47
|
-
order: 3,
|
|
48
|
-
completion: {
|
|
49
|
-
eventName: "deal.created",
|
|
50
|
-
sourceModule: "@lssm/example.crm-pipeline"
|
|
51
|
-
},
|
|
52
|
-
xpReward: 20,
|
|
53
|
-
metadata: { surface: "deals" }
|
|
54
|
-
},
|
|
55
|
-
{
|
|
56
|
-
id: "move_deal_in_pipeline",
|
|
57
|
-
title: "Move a deal across stages",
|
|
58
|
-
description: "Move a deal across at least three stages.",
|
|
59
|
-
order: 4,
|
|
60
|
-
completion: {
|
|
61
|
-
eventName: "deal.moved",
|
|
62
|
-
sourceModule: "@lssm/example.crm-pipeline"
|
|
63
|
-
},
|
|
64
|
-
xpReward: 20,
|
|
65
|
-
metadata: { surface: "deals" }
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
id: "close_deal_won",
|
|
69
|
-
title: "Close a deal as won",
|
|
70
|
-
description: "Close a deal as won to hit first revenue.",
|
|
71
|
-
order: 5,
|
|
72
|
-
completion: {
|
|
73
|
-
eventName: "deal.won",
|
|
74
|
-
sourceModule: "@lssm/example.crm-pipeline"
|
|
75
|
-
},
|
|
76
|
-
xpReward: 30,
|
|
77
|
-
metadata: { surface: "deals" }
|
|
78
|
-
},
|
|
79
|
-
{
|
|
80
|
-
id: "setup_follow_up",
|
|
81
|
-
title: "Create follow-up task",
|
|
82
|
-
description: "Create a follow-up task and notification for a contact or deal.",
|
|
83
|
-
order: 6,
|
|
84
|
-
completion: {
|
|
85
|
-
eventName: "task.completed",
|
|
86
|
-
sourceModule: "@lssm/example.crm-pipeline",
|
|
87
|
-
payloadFilter: { type: "follow_up" }
|
|
88
|
-
},
|
|
89
|
-
xpReward: 30,
|
|
90
|
-
metadata: { surface: "tasks" }
|
|
91
|
-
}
|
|
92
|
-
],
|
|
93
|
-
metadata: { surfacedIn: ["crm/dashboard", "crm/pipeline"] }
|
|
94
|
-
};
|
|
95
|
-
const crmLearningTracks = [crmFirstWinTrack];
|
|
96
|
-
|
|
97
|
-
//#endregion
|
|
98
|
-
export { crmLearningTracks };
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
//#region ../learning-journey-duo-drills/src/track.ts
|
|
2
|
-
const drillsLanguageBasicsTrack = {
|
|
3
|
-
id: "drills_language_basics",
|
|
4
|
-
name: "Language Basics Drills",
|
|
5
|
-
description: "Short SRS-driven drills to master a first skill, modeled after Duolingo-style sessions.",
|
|
6
|
-
targetUserSegment: "learner",
|
|
7
|
-
targetRole: "individual",
|
|
8
|
-
totalXp: 50,
|
|
9
|
-
completionRewards: { xpBonus: 25 },
|
|
10
|
-
steps: [
|
|
11
|
-
{
|
|
12
|
-
id: "complete_first_session",
|
|
13
|
-
title: "Complete first drill session",
|
|
14
|
-
description: "Finish a drill session to get started.",
|
|
15
|
-
order: 1,
|
|
16
|
-
completion: {
|
|
17
|
-
kind: "event",
|
|
18
|
-
eventName: "drill.session.completed"
|
|
19
|
-
},
|
|
20
|
-
xpReward: 20,
|
|
21
|
-
metadata: { surface: "drills" }
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
id: "reach_accuracy_threshold",
|
|
25
|
-
title: "Hit high accuracy in sessions",
|
|
26
|
-
description: "Achieve three high-accuracy sessions to build confidence.",
|
|
27
|
-
order: 2,
|
|
28
|
-
completion: {
|
|
29
|
-
kind: "count",
|
|
30
|
-
eventName: "drill.session.completed",
|
|
31
|
-
atLeast: 3,
|
|
32
|
-
payloadFilter: { accuracyBucket: "high" }
|
|
33
|
-
},
|
|
34
|
-
xpReward: 30,
|
|
35
|
-
metadata: {
|
|
36
|
-
metric: "accuracy",
|
|
37
|
-
target: ">=85%"
|
|
38
|
-
}
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
id: "unlock_new_skill",
|
|
42
|
-
title: "Master core cards in first skill",
|
|
43
|
-
description: "Reach mastery on at least five cards in the first skill to unlock the next one.",
|
|
44
|
-
order: 3,
|
|
45
|
-
completion: {
|
|
46
|
-
kind: "srs_mastery",
|
|
47
|
-
eventName: "drill.card.mastered",
|
|
48
|
-
minimumMastery: .8,
|
|
49
|
-
requiredCount: 5,
|
|
50
|
-
skillIdField: "skillId",
|
|
51
|
-
masteryField: "mastery",
|
|
52
|
-
payloadFilter: { skillId: "language_basics" }
|
|
53
|
-
},
|
|
54
|
-
xpReward: 40,
|
|
55
|
-
metadata: {
|
|
56
|
-
surface: "srs",
|
|
57
|
-
skill: "language_basics"
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
]
|
|
61
|
-
};
|
|
62
|
-
const drillTracks = [drillsLanguageBasicsTrack];
|
|
63
|
-
|
|
64
|
-
//#endregion
|
|
65
|
-
export { drillTracks };
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
//#region ../learning-journey-platform-tour/dist/track.js
|
|
2
|
-
const platformPrimitivesTourTrack = {
|
|
3
|
-
id: "platform_primitives_tour",
|
|
4
|
-
productId: "contractspec-platform",
|
|
5
|
-
name: "Platform Primitives Tour",
|
|
6
|
-
description: "Hands-on tour across identity, audit, notifications, jobs, flags, files, and metering.",
|
|
7
|
-
targetUserSegment: "platform_developer",
|
|
8
|
-
targetRole: "developer",
|
|
9
|
-
totalXp: 140,
|
|
10
|
-
completionRewards: {
|
|
11
|
-
xpBonus: 20,
|
|
12
|
-
badgeKey: "platform_primitives"
|
|
13
|
-
},
|
|
14
|
-
steps: [
|
|
15
|
-
{
|
|
16
|
-
id: "identity_rbac",
|
|
17
|
-
title: "Create org and member",
|
|
18
|
-
description: "Create an org and add at least one member.",
|
|
19
|
-
order: 1,
|
|
20
|
-
completion: {
|
|
21
|
-
eventName: "org.member.added",
|
|
22
|
-
sourceModule: "@lssm/lib.identity-rbac"
|
|
23
|
-
},
|
|
24
|
-
xpReward: 20,
|
|
25
|
-
metadata: { surface: "identity" }
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
id: "event_bus_audit",
|
|
29
|
-
title: "Emit an auditable event",
|
|
30
|
-
description: "Emit an event that lands in the audit log.",
|
|
31
|
-
order: 2,
|
|
32
|
-
completion: {
|
|
33
|
-
eventName: "audit_log.created",
|
|
34
|
-
sourceModule: "@lssm/module.audit-trail"
|
|
35
|
-
},
|
|
36
|
-
xpReward: 20,
|
|
37
|
-
metadata: { surface: "bus+audit" }
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
id: "notifications",
|
|
41
|
-
title: "Send a notification",
|
|
42
|
-
description: "Send yourself a notification and verify delivery.",
|
|
43
|
-
order: 3,
|
|
44
|
-
completion: {
|
|
45
|
-
eventName: "notification.sent",
|
|
46
|
-
sourceModule: "@lssm/module.notifications"
|
|
47
|
-
},
|
|
48
|
-
xpReward: 20,
|
|
49
|
-
metadata: { surface: "notifications" }
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
id: "jobs_scheduler",
|
|
53
|
-
title: "Schedule and run a job",
|
|
54
|
-
description: "Schedule a background job and let it run once.",
|
|
55
|
-
order: 4,
|
|
56
|
-
completion: {
|
|
57
|
-
eventName: "job.completed",
|
|
58
|
-
sourceModule: "@lssm/lib.jobs"
|
|
59
|
-
},
|
|
60
|
-
xpReward: 20,
|
|
61
|
-
metadata: { surface: "jobs" }
|
|
62
|
-
},
|
|
63
|
-
{
|
|
64
|
-
id: "feature_flags",
|
|
65
|
-
title: "Create and toggle a feature flag",
|
|
66
|
-
description: "Create a feature flag and toggle it at least once.",
|
|
67
|
-
order: 5,
|
|
68
|
-
completion: {
|
|
69
|
-
eventName: "flag.toggled",
|
|
70
|
-
sourceModule: "@lssm/lib.feature-flags"
|
|
71
|
-
},
|
|
72
|
-
xpReward: 20,
|
|
73
|
-
metadata: { surface: "feature-flags" }
|
|
74
|
-
},
|
|
75
|
-
{
|
|
76
|
-
id: "files_attachments",
|
|
77
|
-
title: "Attach a file",
|
|
78
|
-
description: "Upload and attach a file to any entity.",
|
|
79
|
-
order: 6,
|
|
80
|
-
completion: {
|
|
81
|
-
eventName: "attachment.attached",
|
|
82
|
-
sourceModule: "@lssm/lib.files"
|
|
83
|
-
},
|
|
84
|
-
xpReward: 20,
|
|
85
|
-
metadata: { surface: "files" }
|
|
86
|
-
},
|
|
87
|
-
{
|
|
88
|
-
id: "usage_metering",
|
|
89
|
-
title: "Record usage",
|
|
90
|
-
description: "Emit a usage metric (regeneration, agent run, or similar).",
|
|
91
|
-
order: 7,
|
|
92
|
-
completion: {
|
|
93
|
-
eventName: "usage.recorded",
|
|
94
|
-
sourceModule: "@lssm/lib.metering"
|
|
95
|
-
},
|
|
96
|
-
xpReward: 20,
|
|
97
|
-
metadata: { surface: "metering" }
|
|
98
|
-
}
|
|
99
|
-
],
|
|
100
|
-
metadata: { surfacedIn: ["studio/learning", "platform/dev-center"] }
|
|
101
|
-
};
|
|
102
|
-
const platformLearningTracks = [platformPrimitivesTourTrack];
|
|
103
|
-
|
|
104
|
-
//#endregion
|
|
105
|
-
export { platformLearningTracks };
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
//#region ../learning-journey-quest-challenges/src/track.ts
|
|
2
|
-
const dayStep = (id, day, eventName, description) => ({
|
|
3
|
-
id,
|
|
4
|
-
title: `Day ${day}`,
|
|
5
|
-
description,
|
|
6
|
-
availability: { unlockOnDay: day },
|
|
7
|
-
completion: {
|
|
8
|
-
kind: "time_window",
|
|
9
|
-
eventName,
|
|
10
|
-
withinHoursOfStart: (day + 1) * 24
|
|
11
|
-
},
|
|
12
|
-
xpReward: 15,
|
|
13
|
-
metadata: { day }
|
|
14
|
-
});
|
|
15
|
-
const moneyResetQuestTrack = {
|
|
16
|
-
id: "money_reset_7day",
|
|
17
|
-
name: "7-day Money Reset",
|
|
18
|
-
description: "Time-bound quest to reset personal finances over a focused week.",
|
|
19
|
-
targetUserSegment: "money_user",
|
|
20
|
-
totalXp: 105,
|
|
21
|
-
completionRewards: { xpBonus: 30 },
|
|
22
|
-
steps: [
|
|
23
|
-
dayStep("day1_map_accounts", 1, "accounts.mapped", "Map bank and card accounts."),
|
|
24
|
-
dayStep("day2_categorize_transactions", 2, "transactions.categorized", "Categorize recent transactions."),
|
|
25
|
-
dayStep("day3_define_goals", 3, "goals.created", "Define at least one savings goal."),
|
|
26
|
-
dayStep("day4_setup_recurring_savings", 4, "recurring_rule.created", "Set a recurring savings rule."),
|
|
27
|
-
dayStep("day5_review_subscriptions", 5, "subscription.flagged_or_cancelled", "Review subscriptions and flag or cancel wasteful ones."),
|
|
28
|
-
dayStep("day6_plan_emergency", 6, "emergency_plan.completed", "Draft an emergency plan and target buffer."),
|
|
29
|
-
dayStep("day7_review_commit", 7, "quest.review.completed", "Review week outcomes and commit to the next month.")
|
|
30
|
-
]
|
|
31
|
-
};
|
|
32
|
-
const questTracks = [moneyResetQuestTrack];
|
|
33
|
-
|
|
34
|
-
//#endregion
|
|
35
|
-
export { questTracks };
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
//#region ../learning-journey-studio-onboarding/dist/track.js
|
|
2
|
-
const studioGettingStartedTrack = {
|
|
3
|
-
id: "studio_getting_started",
|
|
4
|
-
productId: "contractspec-studio",
|
|
5
|
-
name: "Studio Getting Started",
|
|
6
|
-
description: "First 30 minutes in Studio: create a project, edit the spec, deploy/regenerate, and try key modules.",
|
|
7
|
-
targetUserSegment: "new_studio_user",
|
|
8
|
-
targetRole: "developer",
|
|
9
|
-
totalXp: 110,
|
|
10
|
-
streakRule: {
|
|
11
|
-
hoursWindow: 48,
|
|
12
|
-
bonusXp: 25
|
|
13
|
-
},
|
|
14
|
-
completionRewards: {
|
|
15
|
-
xpBonus: 25,
|
|
16
|
-
badgeKey: "studio_first_30m"
|
|
17
|
-
},
|
|
18
|
-
steps: [
|
|
19
|
-
{
|
|
20
|
-
id: "choose_template",
|
|
21
|
-
title: "Choose a template",
|
|
22
|
-
description: "Create your first Studio project (starter template).",
|
|
23
|
-
order: 1,
|
|
24
|
-
completion: {
|
|
25
|
-
eventName: "studio.template.instantiated",
|
|
26
|
-
sourceModule: "@lssm/bundle.contractspec-studio"
|
|
27
|
-
},
|
|
28
|
-
xpReward: 20,
|
|
29
|
-
metadata: { surface: "projects" }
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
id: "edit_spec",
|
|
33
|
-
title: "Edit the spec",
|
|
34
|
-
description: "Change the spec (not generated code) and save.",
|
|
35
|
-
instructions: "Open spec editor, tweak a contract or presentation, save.",
|
|
36
|
-
order: 2,
|
|
37
|
-
completion: {
|
|
38
|
-
eventName: "spec.changed",
|
|
39
|
-
sourceModule: "@lssm/bundle.contractspec-studio"
|
|
40
|
-
},
|
|
41
|
-
xpReward: 20,
|
|
42
|
-
metadata: { surface: "spec-editor" }
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
id: "regenerate_app",
|
|
46
|
-
title: "Regenerate the app",
|
|
47
|
-
description: "Regenerate artifacts from the updated spec.",
|
|
48
|
-
order: 3,
|
|
49
|
-
completion: {
|
|
50
|
-
eventName: "regeneration.completed",
|
|
51
|
-
sourceModule: "@lssm/lib.contracts/regenerator"
|
|
52
|
-
},
|
|
53
|
-
xpReward: 20,
|
|
54
|
-
metadata: { surface: "regenerator" }
|
|
55
|
-
},
|
|
56
|
-
{
|
|
57
|
-
id: "open_canvas",
|
|
58
|
-
title: "Open the canvas",
|
|
59
|
-
description: "Visit the canvas module for your project.",
|
|
60
|
-
order: 4,
|
|
61
|
-
completion: {
|
|
62
|
-
eventName: "module.navigated",
|
|
63
|
-
sourceModule: "@lssm/bundle.contractspec-studio",
|
|
64
|
-
payloadFilter: { moduleId: "canvas" }
|
|
65
|
-
},
|
|
66
|
-
xpReward: 20,
|
|
67
|
-
metadata: { surface: "canvas" }
|
|
68
|
-
},
|
|
69
|
-
{
|
|
70
|
-
id: "try_evolution_mode",
|
|
71
|
-
title: "Try evolution mode",
|
|
72
|
-
description: "Request a change via Evolution, then regenerate.",
|
|
73
|
-
order: 5,
|
|
74
|
-
completion: {
|
|
75
|
-
eventName: "studio.evolution.applied",
|
|
76
|
-
sourceModule: "@lssm/lib.evolution"
|
|
77
|
-
},
|
|
78
|
-
xpReward: 30,
|
|
79
|
-
metadata: { surface: "evolution" }
|
|
80
|
-
}
|
|
81
|
-
],
|
|
82
|
-
metadata: {
|
|
83
|
-
persona: "first_run",
|
|
84
|
-
surfacedIn: ["studio/home", "studio/sidebar/learning"]
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
const studioLearningTracks = [studioGettingStartedTrack];
|
|
88
|
-
|
|
89
|
-
//#endregion
|
|
90
|
-
export { studioLearningTracks };
|
|
@@ -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 { ProgressView } 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-coaching/src/CoachingMiniApp.tsx
|
|
15
|
-
function CoachingMiniApp({ 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(ProgressView, { ...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 { CoachingMiniApp };
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
-
|
|
5
|
-
//#region ../learning-journey-ui-coaching/src/components/EngagementMeter.tsx
|
|
6
|
-
function EngagementMeter({ acknowledged, actioned, pending, streak = 0 }) {
|
|
7
|
-
const total = acknowledged + actioned + pending;
|
|
8
|
-
const actionedPercent = total > 0 ? actioned / total * 100 : 0;
|
|
9
|
-
const acknowledgedPercent = total > 0 ? acknowledged / total * 100 : 0;
|
|
10
|
-
return /* @__PURE__ */ jsxs("div", {
|
|
11
|
-
className: "space-y-4",
|
|
12
|
-
children: [
|
|
13
|
-
/* @__PURE__ */ jsx("div", {
|
|
14
|
-
className: "flex items-center justify-center",
|
|
15
|
-
children: /* @__PURE__ */ jsxs("div", {
|
|
16
|
-
className: "relative h-32 w-32",
|
|
17
|
-
children: [/* @__PURE__ */ jsxs("svg", {
|
|
18
|
-
className: "h-full w-full -rotate-90",
|
|
19
|
-
viewBox: "0 0 100 100",
|
|
20
|
-
children: [
|
|
21
|
-
/* @__PURE__ */ jsx("circle", {
|
|
22
|
-
cx: "50",
|
|
23
|
-
cy: "50",
|
|
24
|
-
r: "40",
|
|
25
|
-
fill: "none",
|
|
26
|
-
strokeWidth: "12",
|
|
27
|
-
className: "stroke-muted"
|
|
28
|
-
}),
|
|
29
|
-
/* @__PURE__ */ jsx("circle", {
|
|
30
|
-
cx: "50",
|
|
31
|
-
cy: "50",
|
|
32
|
-
r: "40",
|
|
33
|
-
fill: "none",
|
|
34
|
-
strokeWidth: "12",
|
|
35
|
-
strokeLinecap: "round",
|
|
36
|
-
strokeDasharray: `${actionedPercent * 2.51} 251`,
|
|
37
|
-
className: "stroke-green-500 transition-all duration-500"
|
|
38
|
-
}),
|
|
39
|
-
/* @__PURE__ */ jsx("circle", {
|
|
40
|
-
cx: "50",
|
|
41
|
-
cy: "50",
|
|
42
|
-
r: "40",
|
|
43
|
-
fill: "none",
|
|
44
|
-
strokeWidth: "12",
|
|
45
|
-
strokeLinecap: "round",
|
|
46
|
-
strokeDasharray: `${acknowledgedPercent * 2.51} 251`,
|
|
47
|
-
strokeDashoffset: `${-actionedPercent * 2.51}`,
|
|
48
|
-
className: "stroke-amber-500 transition-all duration-500"
|
|
49
|
-
})
|
|
50
|
-
]
|
|
51
|
-
}), /* @__PURE__ */ jsxs("div", {
|
|
52
|
-
className: "absolute inset-0 flex flex-col items-center justify-center",
|
|
53
|
-
children: [/* @__PURE__ */ jsx("span", {
|
|
54
|
-
className: "text-2xl font-bold",
|
|
55
|
-
children: total
|
|
56
|
-
}), /* @__PURE__ */ jsx("span", {
|
|
57
|
-
className: "text-muted-foreground text-xs",
|
|
58
|
-
children: "tips"
|
|
59
|
-
})]
|
|
60
|
-
})]
|
|
61
|
-
})
|
|
62
|
-
}),
|
|
63
|
-
/* @__PURE__ */ jsxs("div", {
|
|
64
|
-
className: "flex justify-center gap-4 text-sm",
|
|
65
|
-
children: [
|
|
66
|
-
/* @__PURE__ */ jsxs("div", {
|
|
67
|
-
className: "flex items-center gap-1.5",
|
|
68
|
-
children: [/* @__PURE__ */ jsx("div", { className: "h-3 w-3 rounded-full bg-green-500" }), /* @__PURE__ */ jsxs("span", { children: [
|
|
69
|
-
"Actioned (",
|
|
70
|
-
actioned,
|
|
71
|
-
")"
|
|
72
|
-
] })]
|
|
73
|
-
}),
|
|
74
|
-
/* @__PURE__ */ jsxs("div", {
|
|
75
|
-
className: "flex items-center gap-1.5",
|
|
76
|
-
children: [/* @__PURE__ */ jsx("div", { className: "h-3 w-3 rounded-full bg-amber-500" }), /* @__PURE__ */ jsxs("span", { children: [
|
|
77
|
-
"Acknowledged (",
|
|
78
|
-
acknowledged,
|
|
79
|
-
")"
|
|
80
|
-
] })]
|
|
81
|
-
}),
|
|
82
|
-
/* @__PURE__ */ jsxs("div", {
|
|
83
|
-
className: "flex items-center gap-1.5",
|
|
84
|
-
children: [/* @__PURE__ */ jsx("div", { className: "bg-muted h-3 w-3 rounded-full" }), /* @__PURE__ */ jsxs("span", { children: [
|
|
85
|
-
"Pending (",
|
|
86
|
-
pending,
|
|
87
|
-
")"
|
|
88
|
-
] })]
|
|
89
|
-
})
|
|
90
|
-
]
|
|
91
|
-
}),
|
|
92
|
-
streak > 0 && /* @__PURE__ */ jsxs("div", {
|
|
93
|
-
className: "flex items-center justify-center gap-2 rounded-lg bg-orange-500/10 px-4 py-2",
|
|
94
|
-
children: [/* @__PURE__ */ jsx("span", {
|
|
95
|
-
className: "text-xl",
|
|
96
|
-
children: "🔥"
|
|
97
|
-
}), /* @__PURE__ */ jsxs("span", {
|
|
98
|
-
className: "font-semibold text-orange-500",
|
|
99
|
-
children: [streak, " day engagement streak!"]
|
|
100
|
-
})]
|
|
101
|
-
})
|
|
102
|
-
]
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
//#endregion
|
|
107
|
-
export { EngagementMeter };
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import { Card, CardContent } from "../../../../libs/ui-kit-web/dist/ui/card.js";
|
|
4
|
-
import { cn } from "../../../../libs/ui-kit-web/dist/ui/utils.js";
|
|
5
|
-
import { Button$1 } from "../../../../libs/design-system/dist/components/atoms/Button.js";
|
|
6
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
-
|
|
8
|
-
//#region ../learning-journey-ui-coaching/src/components/TipCard.tsx
|
|
9
|
-
const TIP_ICONS = {
|
|
10
|
-
cash_buffer_too_high: "💰",
|
|
11
|
-
no_savings_goal: "🎯",
|
|
12
|
-
irregular_savings: "📅",
|
|
13
|
-
noise_late_evening: "🔇",
|
|
14
|
-
guest_frequency_high: "👥",
|
|
15
|
-
shared_space_conflicts: "🏠",
|
|
16
|
-
default: "💡"
|
|
17
|
-
};
|
|
18
|
-
function TipCard({ step, isCompleted, isCurrent, onComplete, onDismiss }) {
|
|
19
|
-
const icon = TIP_ICONS[step.metadata?.tipId ?? "default"] ?? TIP_ICONS.default;
|
|
20
|
-
return /* @__PURE__ */ jsx(Card, {
|
|
21
|
-
className: cn("transition-all", isCompleted && "opacity-60", isCurrent && "ring-2 ring-amber-500"),
|
|
22
|
-
children: /* @__PURE__ */ jsx(CardContent, {
|
|
23
|
-
className: "p-4",
|
|
24
|
-
children: /* @__PURE__ */ jsxs("div", {
|
|
25
|
-
className: "flex gap-4",
|
|
26
|
-
children: [/* @__PURE__ */ jsx("div", {
|
|
27
|
-
className: cn("flex h-12 w-12 shrink-0 items-center justify-center rounded-xl text-2xl", isCompleted ? "bg-green-500/10" : isCurrent ? "bg-amber-500/10" : "bg-muted"),
|
|
28
|
-
children: isCompleted ? "✓" : icon
|
|
29
|
-
}), /* @__PURE__ */ jsxs("div", {
|
|
30
|
-
className: "min-w-0 flex-1",
|
|
31
|
-
children: [
|
|
32
|
-
/* @__PURE__ */ jsxs("div", {
|
|
33
|
-
className: "flex items-start justify-between gap-2",
|
|
34
|
-
children: [/* @__PURE__ */ jsx("h4", {
|
|
35
|
-
className: "font-semibold",
|
|
36
|
-
children: step.title
|
|
37
|
-
}), step.xpReward && /* @__PURE__ */ jsxs("span", {
|
|
38
|
-
className: cn("shrink-0 rounded-full px-2 py-0.5 text-xs font-semibold", isCompleted ? "bg-green-500/10 text-green-500" : "bg-amber-500/10 text-amber-500"),
|
|
39
|
-
children: [
|
|
40
|
-
"+",
|
|
41
|
-
step.xpReward,
|
|
42
|
-
" XP"
|
|
43
|
-
]
|
|
44
|
-
})]
|
|
45
|
-
}),
|
|
46
|
-
/* @__PURE__ */ jsx("p", {
|
|
47
|
-
className: "text-muted-foreground mt-1 text-sm",
|
|
48
|
-
children: step.description
|
|
49
|
-
}),
|
|
50
|
-
!isCompleted && /* @__PURE__ */ jsxs("div", {
|
|
51
|
-
className: "mt-3 flex flex-wrap gap-2",
|
|
52
|
-
children: [/* @__PURE__ */ jsx(Button$1, {
|
|
53
|
-
size: "sm",
|
|
54
|
-
onClick: onComplete,
|
|
55
|
-
children: "Take Action"
|
|
56
|
-
}), /* @__PURE__ */ jsx(Button$1, {
|
|
57
|
-
variant: "outline",
|
|
58
|
-
size: "sm",
|
|
59
|
-
onClick: onDismiss,
|
|
60
|
-
children: "Dismiss"
|
|
61
|
-
})]
|
|
62
|
-
}),
|
|
63
|
-
isCompleted && /* @__PURE__ */ jsx("p", {
|
|
64
|
-
className: "mt-2 text-sm text-green-500",
|
|
65
|
-
children: "✓ Tip acknowledged"
|
|
66
|
-
})
|
|
67
|
-
]
|
|
68
|
-
})]
|
|
69
|
-
})
|
|
70
|
-
})
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
//#endregion
|
|
75
|
-
export { TipCard };
|