@burdenoff/microfe-mybodyshield 2026.511.1
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/README.md +12 -0
- package/dist/dev/main.d.ts +2 -0
- package/dist/dev/main.d.ts.map +1 -0
- package/dist/generated/global-operations.d.ts +2 -0
- package/dist/generated/global-operations.d.ts.map +1 -0
- package/dist/generated/global-types.d.ts +18199 -0
- package/dist/generated/global-types.d.ts.map +1 -0
- package/dist/generated/wspace-operations.d.ts +2 -0
- package/dist/generated/wspace-operations.d.ts.map +1 -0
- package/dist/generated/wspace-types.d.ts +43046 -0
- package/dist/generated/wspace-types.d.ts.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/mybodyshield/MyBodyShieldRoot.d.ts +5 -0
- package/dist/mybodyshield/MyBodyShieldRoot.d.ts.map +1 -0
- package/dist/mybodyshield/MyBodyShieldRoot.js +364 -0
- package/dist/mybodyshield/MyBodyShieldRoot.js.map +1 -0
- package/dist/mybodyshield/MyBodyShieldRoutes.d.ts +2 -0
- package/dist/mybodyshield/MyBodyShieldRoutes.d.ts.map +1 -0
- package/dist/mybodyshield/MyBodyShieldRoutes.js +199 -0
- package/dist/mybodyshield/MyBodyShieldRoutes.js.map +1 -0
- package/dist/mybodyshield/index.d.ts +5 -0
- package/dist/mybodyshield/index.d.ts.map +1 -0
- package/dist/mybodyshield/index.js +3 -0
- package/dist/mybodyshield/pages/AdminAiinsightsPage.d.ts +2 -0
- package/dist/mybodyshield/pages/AdminAiinsightsPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/AdminAiinsightsPage.js +161 -0
- package/dist/mybodyshield/pages/AdminAiinsightsPage.js.map +1 -0
- package/dist/mybodyshield/pages/AdminAnalyticsPage.d.ts +2 -0
- package/dist/mybodyshield/pages/AdminAnalyticsPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/AdminAnalyticsPage.js +193 -0
- package/dist/mybodyshield/pages/AdminAnalyticsPage.js.map +1 -0
- package/dist/mybodyshield/pages/AdminComplianceReportsPage.d.ts +2 -0
- package/dist/mybodyshield/pages/AdminComplianceReportsPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/AdminComplianceReportsPage.js +214 -0
- package/dist/mybodyshield/pages/AdminComplianceReportsPage.js.map +1 -0
- package/dist/mybodyshield/pages/AdminDashboardPage.d.ts +2 -0
- package/dist/mybodyshield/pages/AdminDashboardPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/AdminDashboardPage.js +186 -0
- package/dist/mybodyshield/pages/AdminDashboardPage.js.map +1 -0
- package/dist/mybodyshield/pages/AdminOrganizationManagementPage.d.ts +2 -0
- package/dist/mybodyshield/pages/AdminOrganizationManagementPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/AdminOrganizationManagementPage.js +252 -0
- package/dist/mybodyshield/pages/AdminOrganizationManagementPage.js.map +1 -0
- package/dist/mybodyshield/pages/AdminSystemSettingsPage.d.ts +2 -0
- package/dist/mybodyshield/pages/AdminSystemSettingsPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/AdminSystemSettingsPage.js +159 -0
- package/dist/mybodyshield/pages/AdminSystemSettingsPage.js.map +1 -0
- package/dist/mybodyshield/pages/AdminUserManagementPage.d.ts +2 -0
- package/dist/mybodyshield/pages/AdminUserManagementPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/AdminUserManagementPage.js +208 -0
- package/dist/mybodyshield/pages/AdminUserManagementPage.js.map +1 -0
- package/dist/mybodyshield/pages/FitnessAssessmentsPage.d.ts +2 -0
- package/dist/mybodyshield/pages/FitnessAssessmentsPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/FitnessAssessmentsPage.js +194 -0
- package/dist/mybodyshield/pages/FitnessAssessmentsPage.js.map +1 -0
- package/dist/mybodyshield/pages/FitnessClientDetailsPage.d.ts +2 -0
- package/dist/mybodyshield/pages/FitnessClientDetailsPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/FitnessClientDetailsPage.js +192 -0
- package/dist/mybodyshield/pages/FitnessClientDetailsPage.js.map +1 -0
- package/dist/mybodyshield/pages/FitnessClientManagementPage.d.ts +2 -0
- package/dist/mybodyshield/pages/FitnessClientManagementPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/FitnessClientManagementPage.js +128 -0
- package/dist/mybodyshield/pages/FitnessClientManagementPage.js.map +1 -0
- package/dist/mybodyshield/pages/FitnessDashboardPage.d.ts +2 -0
- package/dist/mybodyshield/pages/FitnessDashboardPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/FitnessDashboardPage.js +156 -0
- package/dist/mybodyshield/pages/FitnessDashboardPage.js.map +1 -0
- package/dist/mybodyshield/pages/FitnessReportsPage.d.ts +2 -0
- package/dist/mybodyshield/pages/FitnessReportsPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/FitnessReportsPage.js +138 -0
- package/dist/mybodyshield/pages/FitnessReportsPage.js.map +1 -0
- package/dist/mybodyshield/pages/FitnessWorkoutPlansPage.d.ts +2 -0
- package/dist/mybodyshield/pages/FitnessWorkoutPlansPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/FitnessWorkoutPlansPage.js +176 -0
- package/dist/mybodyshield/pages/FitnessWorkoutPlansPage.js.map +1 -0
- package/dist/mybodyshield/pages/PatientAppointmentsPage.d.ts +2 -0
- package/dist/mybodyshield/pages/PatientAppointmentsPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/PatientAppointmentsPage.js +132 -0
- package/dist/mybodyshield/pages/PatientAppointmentsPage.js.map +1 -0
- package/dist/mybodyshield/pages/PatientDashboardPage.d.ts +2 -0
- package/dist/mybodyshield/pages/PatientDashboardPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/PatientDashboardPage.js +190 -0
- package/dist/mybodyshield/pages/PatientDashboardPage.js.map +1 -0
- package/dist/mybodyshield/pages/PatientFitnessTrackingPage.d.ts +2 -0
- package/dist/mybodyshield/pages/PatientFitnessTrackingPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/PatientFitnessTrackingPage.js +137 -0
- package/dist/mybodyshield/pages/PatientFitnessTrackingPage.js.map +1 -0
- package/dist/mybodyshield/pages/PatientHealthGoalsPage.d.ts +2 -0
- package/dist/mybodyshield/pages/PatientHealthGoalsPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/PatientHealthGoalsPage.js +131 -0
- package/dist/mybodyshield/pages/PatientHealthGoalsPage.js.map +1 -0
- package/dist/mybodyshield/pages/PatientHealthOverviewPage.d.ts +2 -0
- package/dist/mybodyshield/pages/PatientHealthOverviewPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/PatientHealthOverviewPage.js +273 -0
- package/dist/mybodyshield/pages/PatientHealthOverviewPage.js.map +1 -0
- package/dist/mybodyshield/pages/PatientLabResultsPage.d.ts +2 -0
- package/dist/mybodyshield/pages/PatientLabResultsPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/PatientLabResultsPage.js +133 -0
- package/dist/mybodyshield/pages/PatientLabResultsPage.js.map +1 -0
- package/dist/mybodyshield/pages/PatientMedicationsPage.d.ts +2 -0
- package/dist/mybodyshield/pages/PatientMedicationsPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/PatientMedicationsPage.js +158 -0
- package/dist/mybodyshield/pages/PatientMedicationsPage.js.map +1 -0
- package/dist/mybodyshield/pages/PatientMentalHealthPage.d.ts +2 -0
- package/dist/mybodyshield/pages/PatientMentalHealthPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/PatientMentalHealthPage.js +152 -0
- package/dist/mybodyshield/pages/PatientMentalHealthPage.js.map +1 -0
- package/dist/mybodyshield/pages/PatientNutritionTrackingPage.d.ts +2 -0
- package/dist/mybodyshield/pages/PatientNutritionTrackingPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/PatientNutritionTrackingPage.js +141 -0
- package/dist/mybodyshield/pages/PatientNutritionTrackingPage.js.map +1 -0
- package/dist/mybodyshield/pages/PatientVitalSignsPage.d.ts +2 -0
- package/dist/mybodyshield/pages/PatientVitalSignsPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/PatientVitalSignsPage.js +160 -0
- package/dist/mybodyshield/pages/PatientVitalSignsPage.js.map +1 -0
- package/dist/mybodyshield/pages/ProviderCalendarPage.d.ts +2 -0
- package/dist/mybodyshield/pages/ProviderCalendarPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/ProviderCalendarPage.js +127 -0
- package/dist/mybodyshield/pages/ProviderCalendarPage.js.map +1 -0
- package/dist/mybodyshield/pages/ProviderCarePlansPage.d.ts +2 -0
- package/dist/mybodyshield/pages/ProviderCarePlansPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/ProviderCarePlansPage.js +153 -0
- package/dist/mybodyshield/pages/ProviderCarePlansPage.js.map +1 -0
- package/dist/mybodyshield/pages/ProviderClinicalToolsPage.d.ts +2 -0
- package/dist/mybodyshield/pages/ProviderClinicalToolsPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/ProviderClinicalToolsPage.js +174 -0
- package/dist/mybodyshield/pages/ProviderClinicalToolsPage.js.map +1 -0
- package/dist/mybodyshield/pages/ProviderDashboardPage.d.ts +2 -0
- package/dist/mybodyshield/pages/ProviderDashboardPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/ProviderDashboardPage.js +154 -0
- package/dist/mybodyshield/pages/ProviderDashboardPage.js.map +1 -0
- package/dist/mybodyshield/pages/ProviderPatientDetailsPage.d.ts +2 -0
- package/dist/mybodyshield/pages/ProviderPatientDetailsPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/ProviderPatientDetailsPage.js +295 -0
- package/dist/mybodyshield/pages/ProviderPatientDetailsPage.js.map +1 -0
- package/dist/mybodyshield/pages/ProviderPatientManagementPage.d.ts +2 -0
- package/dist/mybodyshield/pages/ProviderPatientManagementPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/ProviderPatientManagementPage.js +133 -0
- package/dist/mybodyshield/pages/ProviderPatientManagementPage.js.map +1 -0
- package/dist/mybodyshield/pages/ProviderPrescriptionsPage.d.ts +2 -0
- package/dist/mybodyshield/pages/ProviderPrescriptionsPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/ProviderPrescriptionsPage.js +138 -0
- package/dist/mybodyshield/pages/ProviderPrescriptionsPage.js.map +1 -0
- package/dist/mybodyshield/pages/ProviderReportsPage.d.ts +2 -0
- package/dist/mybodyshield/pages/ProviderReportsPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/ProviderReportsPage.js +149 -0
- package/dist/mybodyshield/pages/ProviderReportsPage.js.map +1 -0
- package/dist/mybodyshield/pages/SharedAppointmentsPage.d.ts +2 -0
- package/dist/mybodyshield/pages/SharedAppointmentsPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/SharedAppointmentsPage.js +129 -0
- package/dist/mybodyshield/pages/SharedAppointmentsPage.js.map +1 -0
- package/dist/mybodyshield/pages/SharedCommunityPage.d.ts +2 -0
- package/dist/mybodyshield/pages/SharedCommunityPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/SharedCommunityPage.js +152 -0
- package/dist/mybodyshield/pages/SharedCommunityPage.js.map +1 -0
- package/dist/mybodyshield/pages/SharedEmergencyAlertsPage.d.ts +2 -0
- package/dist/mybodyshield/pages/SharedEmergencyAlertsPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/SharedEmergencyAlertsPage.js +165 -0
- package/dist/mybodyshield/pages/SharedEmergencyAlertsPage.js.map +1 -0
- package/dist/mybodyshield/pages/SharedEmergencyPage.d.ts +2 -0
- package/dist/mybodyshield/pages/SharedEmergencyPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/SharedEmergencyPage.js +183 -0
- package/dist/mybodyshield/pages/SharedEmergencyPage.js.map +1 -0
- package/dist/mybodyshield/pages/SharedHealthAnalyticsPage.d.ts +2 -0
- package/dist/mybodyshield/pages/SharedHealthAnalyticsPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/SharedHealthAnalyticsPage.js +159 -0
- package/dist/mybodyshield/pages/SharedHealthAnalyticsPage.js.map +1 -0
- package/dist/mybodyshield/pages/SharedMarketplacePage.d.ts +2 -0
- package/dist/mybodyshield/pages/SharedMarketplacePage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/SharedMarketplacePage.js +193 -0
- package/dist/mybodyshield/pages/SharedMarketplacePage.js.map +1 -0
- package/dist/mybodyshield/pages/SharedMessagesPage.d.ts +2 -0
- package/dist/mybodyshield/pages/SharedMessagesPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/SharedMessagesPage.js +156 -0
- package/dist/mybodyshield/pages/SharedMessagesPage.js.map +1 -0
- package/dist/mybodyshield/pages/WellnessAssessmentsPage.d.ts +2 -0
- package/dist/mybodyshield/pages/WellnessAssessmentsPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/WellnessAssessmentsPage.js +147 -0
- package/dist/mybodyshield/pages/WellnessAssessmentsPage.js.map +1 -0
- package/dist/mybodyshield/pages/WellnessClientsPage.d.ts +2 -0
- package/dist/mybodyshield/pages/WellnessClientsPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/WellnessClientsPage.js +182 -0
- package/dist/mybodyshield/pages/WellnessClientsPage.js.map +1 -0
- package/dist/mybodyshield/pages/WellnessDashboardPage.d.ts +2 -0
- package/dist/mybodyshield/pages/WellnessDashboardPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/WellnessDashboardPage.js +136 -0
- package/dist/mybodyshield/pages/WellnessDashboardPage.js.map +1 -0
- package/dist/mybodyshield/pages/WellnessProgramsPage.d.ts +2 -0
- package/dist/mybodyshield/pages/WellnessProgramsPage.d.ts.map +1 -0
- package/dist/mybodyshield/pages/WellnessProgramsPage.js +140 -0
- package/dist/mybodyshield/pages/WellnessProgramsPage.js.map +1 -0
- package/dist/mybodyshield/providers/MyBodyShieldProvider.d.ts +6 -0
- package/dist/mybodyshield/providers/MyBodyShieldProvider.d.ts.map +1 -0
- package/dist/mybodyshield/providers/MyBodyShieldProvider.js +27 -0
- package/dist/mybodyshield/providers/MyBodyShieldProvider.js.map +1 -0
- package/dist/mybodyshield/store/mybodyshieldStore.d.ts +197 -0
- package/dist/mybodyshield/store/mybodyshieldStore.d.ts.map +1 -0
- package/dist/mybodyshield/store/mybodyshieldStore.js +710 -0
- package/dist/mybodyshield/store/mybodyshieldStore.js.map +1 -0
- package/dist/mybodyshield/types/index.d.ts +51 -0
- package/dist/mybodyshield/types/index.d.ts.map +1 -0
- package/dist/mybodyshield/utils/cn.d.ts +4 -0
- package/dist/mybodyshield/utils/cn.d.ts.map +1 -0
- package/dist/mybodyshield/utils/navigation.d.ts +2 -0
- package/dist/mybodyshield/utils/navigation.d.ts.map +1 -0
- package/dist/mybodyshield/utils/navigation.js +8 -0
- package/dist/mybodyshield/utils/navigation.js.map +1 -0
- package/package.json +107 -0
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { Heart as e, TrendingUp as t, UserPlus as n, Users as r } from "lucide-react";
|
|
2
|
+
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
3
|
+
import { Card as o, CardContent as s, CardHeader as c, CardTitle as l } from "@burdenoff/fe-libs/ui";
|
|
4
|
+
//#region src/mybodyshield/pages/WellnessClientsPage.tsx
|
|
5
|
+
var u = [
|
|
6
|
+
{
|
|
7
|
+
id: 1,
|
|
8
|
+
name: "Sarah Johnson",
|
|
9
|
+
program: "Mindful Living",
|
|
10
|
+
progress: 50,
|
|
11
|
+
wellnessScore: 72,
|
|
12
|
+
joinDate: "2025-12-01",
|
|
13
|
+
status: "Active"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
id: 2,
|
|
17
|
+
name: "Michael Chen",
|
|
18
|
+
program: "Heart-Healthy Lifestyle",
|
|
19
|
+
progress: 22,
|
|
20
|
+
wellnessScore: 65,
|
|
21
|
+
joinDate: "2026-01-05",
|
|
22
|
+
status: "Active"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
id: 3,
|
|
26
|
+
name: "Emily Davis",
|
|
27
|
+
program: "Mindful Living",
|
|
28
|
+
progress: 67,
|
|
29
|
+
wellnessScore: 81,
|
|
30
|
+
joinDate: "2025-11-15",
|
|
31
|
+
status: "Active"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
id: 4,
|
|
35
|
+
name: "Robert Wilson",
|
|
36
|
+
program: "Diabetes Prevention",
|
|
37
|
+
progress: 25,
|
|
38
|
+
wellnessScore: 58,
|
|
39
|
+
joinDate: "2026-01-20",
|
|
40
|
+
status: "At Risk"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
id: 5,
|
|
44
|
+
name: "Lisa Thompson",
|
|
45
|
+
program: "Mindful Living",
|
|
46
|
+
progress: 42,
|
|
47
|
+
wellnessScore: 76,
|
|
48
|
+
joinDate: "2025-12-10",
|
|
49
|
+
status: "Active"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
id: 6,
|
|
53
|
+
name: "David Park",
|
|
54
|
+
program: "Heart-Healthy Lifestyle",
|
|
55
|
+
progress: 33,
|
|
56
|
+
wellnessScore: 69,
|
|
57
|
+
joinDate: "2025-12-20",
|
|
58
|
+
status: "Active"
|
|
59
|
+
}
|
|
60
|
+
];
|
|
61
|
+
function d() {
|
|
62
|
+
return /* @__PURE__ */ a("div", {
|
|
63
|
+
className: "space-y-6 p-6",
|
|
64
|
+
children: [
|
|
65
|
+
/* @__PURE__ */ a("div", { children: [/* @__PURE__ */ i("h1", {
|
|
66
|
+
className: "text-2xl font-semibold",
|
|
67
|
+
children: "Wellness Clients"
|
|
68
|
+
}), /* @__PURE__ */ i("p", {
|
|
69
|
+
className: "text-sm text-muted-foreground",
|
|
70
|
+
children: "Manage wellness program participants and track engagement"
|
|
71
|
+
})] }),
|
|
72
|
+
/* @__PURE__ */ a("div", {
|
|
73
|
+
className: "grid gap-4 md:grid-cols-4",
|
|
74
|
+
children: [
|
|
75
|
+
/* @__PURE__ */ a(o, { children: [/* @__PURE__ */ a(c, {
|
|
76
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
77
|
+
children: [/* @__PURE__ */ i(l, {
|
|
78
|
+
className: "text-sm font-medium",
|
|
79
|
+
children: "Total Clients"
|
|
80
|
+
}), /* @__PURE__ */ i(r, { className: "h-4 w-4 text-blue-500" })]
|
|
81
|
+
}), /* @__PURE__ */ a(s, { children: [/* @__PURE__ */ i("div", {
|
|
82
|
+
className: "text-2xl font-bold",
|
|
83
|
+
children: u.length
|
|
84
|
+
}), /* @__PURE__ */ i("p", {
|
|
85
|
+
className: "text-xs text-muted-foreground",
|
|
86
|
+
children: "Enrolled in programs"
|
|
87
|
+
})] })] }),
|
|
88
|
+
/* @__PURE__ */ a(o, { children: [/* @__PURE__ */ a(c, {
|
|
89
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
90
|
+
children: [/* @__PURE__ */ i(l, {
|
|
91
|
+
className: "text-sm font-medium",
|
|
92
|
+
children: "New This Month"
|
|
93
|
+
}), /* @__PURE__ */ i(n, { className: "h-4 w-4 text-green-500" })]
|
|
94
|
+
}), /* @__PURE__ */ a(s, { children: [/* @__PURE__ */ i("div", {
|
|
95
|
+
className: "text-2xl font-bold",
|
|
96
|
+
children: "3"
|
|
97
|
+
}), /* @__PURE__ */ i("p", {
|
|
98
|
+
className: "text-xs text-muted-foreground",
|
|
99
|
+
children: "Recently joined"
|
|
100
|
+
})] })] }),
|
|
101
|
+
/* @__PURE__ */ a(o, { children: [/* @__PURE__ */ a(c, {
|
|
102
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
103
|
+
children: [/* @__PURE__ */ i(l, {
|
|
104
|
+
className: "text-sm font-medium",
|
|
105
|
+
children: "Avg Wellness Score"
|
|
106
|
+
}), /* @__PURE__ */ i(e, { className: "h-4 w-4 text-red-500" })]
|
|
107
|
+
}), /* @__PURE__ */ a(s, { children: [/* @__PURE__ */ i("div", {
|
|
108
|
+
className: "text-2xl font-bold",
|
|
109
|
+
children: "70"
|
|
110
|
+
}), /* @__PURE__ */ i("p", {
|
|
111
|
+
className: "text-xs text-muted-foreground",
|
|
112
|
+
children: "Out of 100"
|
|
113
|
+
})] })] }),
|
|
114
|
+
/* @__PURE__ */ a(o, { children: [/* @__PURE__ */ a(c, {
|
|
115
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
116
|
+
children: [/* @__PURE__ */ i(l, {
|
|
117
|
+
className: "text-sm font-medium",
|
|
118
|
+
children: "Engagement Rate"
|
|
119
|
+
}), /* @__PURE__ */ i(t, { className: "h-4 w-4 text-purple-500" })]
|
|
120
|
+
}), /* @__PURE__ */ a(s, { children: [/* @__PURE__ */ i("div", {
|
|
121
|
+
className: "text-2xl font-bold",
|
|
122
|
+
children: "88%"
|
|
123
|
+
}), /* @__PURE__ */ i("p", {
|
|
124
|
+
className: "text-xs text-muted-foreground",
|
|
125
|
+
children: "Active participation"
|
|
126
|
+
})] })] })
|
|
127
|
+
]
|
|
128
|
+
}),
|
|
129
|
+
/* @__PURE__ */ a(o, { children: [/* @__PURE__ */ i(c, { children: /* @__PURE__ */ i(l, { children: "Client List" }) }), /* @__PURE__ */ i(s, { children: /* @__PURE__ */ i("div", {
|
|
130
|
+
className: "space-y-3",
|
|
131
|
+
children: u.map((e) => /* @__PURE__ */ a("div", {
|
|
132
|
+
className: "flex items-center justify-between p-3 rounded-lg bg-muted/50",
|
|
133
|
+
children: [/* @__PURE__ */ a("div", {
|
|
134
|
+
className: "flex items-center gap-3",
|
|
135
|
+
children: [/* @__PURE__ */ i("div", {
|
|
136
|
+
className: "h-10 w-10 rounded-full bg-primary/10 flex items-center justify-center",
|
|
137
|
+
children: /* @__PURE__ */ i("span", {
|
|
138
|
+
className: "text-sm font-medium text-primary",
|
|
139
|
+
children: e.name.split(" ").map((e) => e[0]).join("")
|
|
140
|
+
})
|
|
141
|
+
}), /* @__PURE__ */ a("div", { children: [/* @__PURE__ */ i("p", {
|
|
142
|
+
className: "text-sm font-medium",
|
|
143
|
+
children: e.name
|
|
144
|
+
}), /* @__PURE__ */ a("p", {
|
|
145
|
+
className: "text-xs text-muted-foreground",
|
|
146
|
+
children: [
|
|
147
|
+
e.program,
|
|
148
|
+
" · Joined ",
|
|
149
|
+
e.joinDate
|
|
150
|
+
]
|
|
151
|
+
})] })]
|
|
152
|
+
}), /* @__PURE__ */ a("div", {
|
|
153
|
+
className: "flex items-center gap-3",
|
|
154
|
+
children: [/* @__PURE__ */ a("div", {
|
|
155
|
+
className: "w-24",
|
|
156
|
+
children: [/* @__PURE__ */ a("div", {
|
|
157
|
+
className: "flex justify-between text-xs mb-1",
|
|
158
|
+
children: [/* @__PURE__ */ i("span", {
|
|
159
|
+
className: "text-muted-foreground",
|
|
160
|
+
children: "Progress"
|
|
161
|
+
}), /* @__PURE__ */ a("span", { children: [e.progress, "%"] })]
|
|
162
|
+
}), /* @__PURE__ */ i("div", {
|
|
163
|
+
className: "h-1.5 bg-muted rounded-full overflow-hidden",
|
|
164
|
+
children: /* @__PURE__ */ i("div", {
|
|
165
|
+
className: "h-1.5 bg-primary rounded-full",
|
|
166
|
+
style: { width: `${e.progress}%` }
|
|
167
|
+
})
|
|
168
|
+
})]
|
|
169
|
+
}), /* @__PURE__ */ i("span", {
|
|
170
|
+
className: `text-xs font-medium px-2 py-0.5 rounded-full ${e.status === "Active" ? "bg-green-100 text-green-700" : "bg-orange-100 text-orange-700"}`,
|
|
171
|
+
children: e.status
|
|
172
|
+
})]
|
|
173
|
+
})]
|
|
174
|
+
}, e.id))
|
|
175
|
+
}) })] })
|
|
176
|
+
]
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
//#endregion
|
|
180
|
+
export { d as WellnessClientsPage };
|
|
181
|
+
|
|
182
|
+
//# sourceMappingURL=WellnessClientsPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WellnessClientsPage.js","names":[],"sources":["../../../src/mybodyshield/pages/WellnessClientsPage.tsx"],"sourcesContent":["import { Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { Users, UserPlus, Heart, TrendingUp } from 'lucide-react';\n\nconst wellnessClients = [\n {\n id: 1,\n name: 'Sarah Johnson',\n program: 'Mindful Living',\n progress: 50,\n wellnessScore: 72,\n joinDate: '2025-12-01',\n status: 'Active',\n },\n {\n id: 2,\n name: 'Michael Chen',\n program: 'Heart-Healthy Lifestyle',\n progress: 22,\n wellnessScore: 65,\n joinDate: '2026-01-05',\n status: 'Active',\n },\n {\n id: 3,\n name: 'Emily Davis',\n program: 'Mindful Living',\n progress: 67,\n wellnessScore: 81,\n joinDate: '2025-11-15',\n status: 'Active',\n },\n {\n id: 4,\n name: 'Robert Wilson',\n program: 'Diabetes Prevention',\n progress: 25,\n wellnessScore: 58,\n joinDate: '2026-01-20',\n status: 'At Risk',\n },\n {\n id: 5,\n name: 'Lisa Thompson',\n program: 'Mindful Living',\n progress: 42,\n wellnessScore: 76,\n joinDate: '2025-12-10',\n status: 'Active',\n },\n {\n id: 6,\n name: 'David Park',\n program: 'Heart-Healthy Lifestyle',\n progress: 33,\n wellnessScore: 69,\n joinDate: '2025-12-20',\n status: 'Active',\n },\n];\n\nexport function WellnessClientsPage() {\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Wellness Clients</h1>\n <p className=\"text-sm text-muted-foreground\">\n Manage wellness program participants and track engagement\n </p>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-4\">\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Total Clients</CardTitle>\n <Users className=\"h-4 w-4 text-blue-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{wellnessClients.length}</div>\n <p className=\"text-xs text-muted-foreground\">Enrolled in programs</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">New This Month</CardTitle>\n <UserPlus className=\"h-4 w-4 text-green-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">3</div>\n <p className=\"text-xs text-muted-foreground\">Recently joined</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Avg Wellness Score</CardTitle>\n <Heart className=\"h-4 w-4 text-red-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">70</div>\n <p className=\"text-xs text-muted-foreground\">Out of 100</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Engagement Rate</CardTitle>\n <TrendingUp className=\"h-4 w-4 text-purple-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">88%</div>\n <p className=\"text-xs text-muted-foreground\">Active participation</p>\n </CardContent>\n </Card>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>Client List</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-3\">\n {wellnessClients.map((client) => (\n <div\n key={client.id}\n className=\"flex items-center justify-between p-3 rounded-lg bg-muted/50\"\n >\n <div className=\"flex items-center gap-3\">\n <div className=\"h-10 w-10 rounded-full bg-primary/10 flex items-center justify-center\">\n <span className=\"text-sm font-medium text-primary\">\n {client.name\n .split(' ')\n .map((n) => n[0])\n .join('')}\n </span>\n </div>\n <div>\n <p className=\"text-sm font-medium\">{client.name}</p>\n <p className=\"text-xs text-muted-foreground\">\n {client.program} · Joined {client.joinDate}\n </p>\n </div>\n </div>\n <div className=\"flex items-center gap-3\">\n <div className=\"w-24\">\n <div className=\"flex justify-between text-xs mb-1\">\n <span className=\"text-muted-foreground\">Progress</span>\n <span>{client.progress}%</span>\n </div>\n <div className=\"h-1.5 bg-muted rounded-full overflow-hidden\">\n <div\n className=\"h-1.5 bg-primary rounded-full\"\n style={{ width: `${client.progress}%` }}\n />\n </div>\n </div>\n <span\n className={`text-xs font-medium px-2 py-0.5 rounded-full ${client.status === 'Active' ? 'bg-green-100 text-green-700' : 'bg-orange-100 text-orange-700'}`}\n >\n {client.status}\n </span>\n </div>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WellnessDashboardPage.d.ts","sourceRoot":"","sources":["../../../src/mybodyshield/pages/WellnessDashboardPage.tsx"],"names":[],"mappings":"AAIA,wBAAgB,qBAAqB,4CA4GpC"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { useMyBodyShieldStore as e } from "../store/mybodyshieldStore.js";
|
|
2
|
+
import { Award as t, BookOpen as n, Heart as r, Users as i } from "lucide-react";
|
|
3
|
+
import { jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
4
|
+
import { Card as s, CardContent as c, CardHeader as l, CardTitle as u } from "@burdenoff/fe-libs/ui";
|
|
5
|
+
//#region src/mybodyshield/pages/WellnessDashboardPage.tsx
|
|
6
|
+
function d() {
|
|
7
|
+
let { wellnessPrograms: d } = e(), f = d.filter((e) => e.status === "active").length, p = d.reduce((e, t) => e + t.enrolledCount, 0), m = d.length > 0 ? (d.reduce((e, t) => e + t.rating, 0) / d.length).toFixed(1) : "0";
|
|
8
|
+
return /* @__PURE__ */ o("div", {
|
|
9
|
+
className: "space-y-6 p-6",
|
|
10
|
+
children: [
|
|
11
|
+
/* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("h1", {
|
|
12
|
+
className: "text-2xl font-semibold",
|
|
13
|
+
children: "Wellness Dashboard"
|
|
14
|
+
}), /* @__PURE__ */ a("p", {
|
|
15
|
+
className: "text-sm text-muted-foreground",
|
|
16
|
+
children: "Overview of wellness programs, enrollment, and outcomes"
|
|
17
|
+
})] }),
|
|
18
|
+
/* @__PURE__ */ o("div", {
|
|
19
|
+
className: "grid gap-4 md:grid-cols-4",
|
|
20
|
+
children: [
|
|
21
|
+
/* @__PURE__ */ o(s, { children: [/* @__PURE__ */ o(l, {
|
|
22
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
23
|
+
children: [/* @__PURE__ */ a(u, {
|
|
24
|
+
className: "text-sm font-medium",
|
|
25
|
+
children: "Active Programs"
|
|
26
|
+
}), /* @__PURE__ */ a(r, { className: "h-4 w-4 text-red-500" })]
|
|
27
|
+
}), /* @__PURE__ */ o(c, { children: [/* @__PURE__ */ a("div", {
|
|
28
|
+
className: "text-2xl font-bold",
|
|
29
|
+
children: f
|
|
30
|
+
}), /* @__PURE__ */ a("p", {
|
|
31
|
+
className: "text-xs text-muted-foreground",
|
|
32
|
+
children: "Currently running"
|
|
33
|
+
})] })] }),
|
|
34
|
+
/* @__PURE__ */ o(s, { children: [/* @__PURE__ */ o(l, {
|
|
35
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
36
|
+
children: [/* @__PURE__ */ a(u, {
|
|
37
|
+
className: "text-sm font-medium",
|
|
38
|
+
children: "Total Enrolled"
|
|
39
|
+
}), /* @__PURE__ */ a(i, { className: "h-4 w-4 text-blue-500" })]
|
|
40
|
+
}), /* @__PURE__ */ o(c, { children: [/* @__PURE__ */ a("div", {
|
|
41
|
+
className: "text-2xl font-bold",
|
|
42
|
+
children: p
|
|
43
|
+
}), /* @__PURE__ */ a("p", {
|
|
44
|
+
className: "text-xs text-muted-foreground",
|
|
45
|
+
children: "Participants"
|
|
46
|
+
})] })] }),
|
|
47
|
+
/* @__PURE__ */ o(s, { children: [/* @__PURE__ */ o(l, {
|
|
48
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
49
|
+
children: [/* @__PURE__ */ a(u, {
|
|
50
|
+
className: "text-sm font-medium",
|
|
51
|
+
children: "Avg Rating"
|
|
52
|
+
}), /* @__PURE__ */ a(t, { className: "h-4 w-4 text-amber-500" })]
|
|
53
|
+
}), /* @__PURE__ */ o(c, { children: [/* @__PURE__ */ o("div", {
|
|
54
|
+
className: "text-2xl font-bold",
|
|
55
|
+
children: [m, "/5.0"]
|
|
56
|
+
}), /* @__PURE__ */ a("p", {
|
|
57
|
+
className: "text-xs text-muted-foreground",
|
|
58
|
+
children: "Program satisfaction"
|
|
59
|
+
})] })] }),
|
|
60
|
+
/* @__PURE__ */ o(s, { children: [/* @__PURE__ */ o(l, {
|
|
61
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
62
|
+
children: [/* @__PURE__ */ a(u, {
|
|
63
|
+
className: "text-sm font-medium",
|
|
64
|
+
children: "Total Sessions"
|
|
65
|
+
}), /* @__PURE__ */ a(n, { className: "h-4 w-4 text-green-500" })]
|
|
66
|
+
}), /* @__PURE__ */ o(c, { children: [/* @__PURE__ */ a("div", {
|
|
67
|
+
className: "text-2xl font-bold",
|
|
68
|
+
children: d.reduce((e, t) => e + t.sessions, 0)
|
|
69
|
+
}), /* @__PURE__ */ a("p", {
|
|
70
|
+
className: "text-xs text-muted-foreground",
|
|
71
|
+
children: "Across all programs"
|
|
72
|
+
})] })] })
|
|
73
|
+
]
|
|
74
|
+
}),
|
|
75
|
+
/* @__PURE__ */ o(s, { children: [/* @__PURE__ */ a(l, { children: /* @__PURE__ */ a(u, { children: "Program Overview" }) }), /* @__PURE__ */ a(c, { children: /* @__PURE__ */ a("div", {
|
|
76
|
+
className: "space-y-4",
|
|
77
|
+
children: d.map((e) => /* @__PURE__ */ o("div", {
|
|
78
|
+
className: "p-4 rounded-lg border",
|
|
79
|
+
children: [
|
|
80
|
+
/* @__PURE__ */ o("div", {
|
|
81
|
+
className: "flex items-center justify-between mb-2",
|
|
82
|
+
children: [/* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("p", {
|
|
83
|
+
className: "text-sm font-medium",
|
|
84
|
+
children: e.name
|
|
85
|
+
}), /* @__PURE__ */ o("p", {
|
|
86
|
+
className: "text-xs text-muted-foreground",
|
|
87
|
+
children: [
|
|
88
|
+
e.category,
|
|
89
|
+
" · ",
|
|
90
|
+
e.instructor
|
|
91
|
+
]
|
|
92
|
+
})] }), /* @__PURE__ */ a("span", {
|
|
93
|
+
className: `text-xs font-medium px-2 py-0.5 rounded-full ${e.status === "active" ? "bg-green-100 text-green-700" : e.status === "upcoming" ? "bg-blue-100 text-blue-700" : "bg-gray-100 text-gray-700"}`,
|
|
94
|
+
children: e.status
|
|
95
|
+
})]
|
|
96
|
+
}),
|
|
97
|
+
/* @__PURE__ */ a("p", {
|
|
98
|
+
className: "text-xs text-muted-foreground mb-2",
|
|
99
|
+
children: e.description
|
|
100
|
+
}),
|
|
101
|
+
/* @__PURE__ */ o("div", {
|
|
102
|
+
className: "flex items-center gap-3 mb-2",
|
|
103
|
+
children: [/* @__PURE__ */ a("div", {
|
|
104
|
+
className: "flex-1 h-2 bg-muted rounded-full overflow-hidden",
|
|
105
|
+
children: /* @__PURE__ */ a("div", {
|
|
106
|
+
className: "h-2 bg-primary rounded-full",
|
|
107
|
+
style: { width: `${e.completedSessions / e.sessions * 100}%` }
|
|
108
|
+
})
|
|
109
|
+
}), /* @__PURE__ */ o("span", {
|
|
110
|
+
className: "text-xs font-medium",
|
|
111
|
+
children: [
|
|
112
|
+
e.completedSessions,
|
|
113
|
+
"/",
|
|
114
|
+
e.sessions,
|
|
115
|
+
" sessions"
|
|
116
|
+
]
|
|
117
|
+
})]
|
|
118
|
+
}),
|
|
119
|
+
/* @__PURE__ */ o("div", {
|
|
120
|
+
className: "flex gap-4 text-xs text-muted-foreground",
|
|
121
|
+
children: [
|
|
122
|
+
/* @__PURE__ */ o("span", { children: [e.enrolledCount, " enrolled"] }),
|
|
123
|
+
/* @__PURE__ */ a("span", { children: e.duration }),
|
|
124
|
+
/* @__PURE__ */ o("span", { children: [e.rating, " ★"] })
|
|
125
|
+
]
|
|
126
|
+
})
|
|
127
|
+
]
|
|
128
|
+
}, e.id))
|
|
129
|
+
}) })] })
|
|
130
|
+
]
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
//#endregion
|
|
134
|
+
export { d as WellnessDashboardPage };
|
|
135
|
+
|
|
136
|
+
//# sourceMappingURL=WellnessDashboardPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WellnessDashboardPage.js","names":[],"sources":["../../../src/mybodyshield/pages/WellnessDashboardPage.tsx"],"sourcesContent":["import { Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { Heart, Users, Award, BookOpen } from 'lucide-react';\nimport { useMyBodyShieldStore } from '../store/mybodyshieldStore';\n\nexport function WellnessDashboardPage() {\n const { wellnessPrograms } = useMyBodyShieldStore();\n const activePrograms = wellnessPrograms.filter((w) => w.status === 'active').length;\n const totalEnrolled = wellnessPrograms.reduce((a, w) => a + w.enrolledCount, 0);\n const avgRating =\n wellnessPrograms.length > 0\n ? (wellnessPrograms.reduce((a, w) => a + w.rating, 0) / wellnessPrograms.length).toFixed(1)\n : '0';\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Wellness Dashboard</h1>\n <p className=\"text-sm text-muted-foreground\">\n Overview of wellness programs, enrollment, and outcomes\n </p>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-4\">\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Active Programs</CardTitle>\n <Heart className=\"h-4 w-4 text-red-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{activePrograms}</div>\n <p className=\"text-xs text-muted-foreground\">Currently running</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Total Enrolled</CardTitle>\n <Users className=\"h-4 w-4 text-blue-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{totalEnrolled}</div>\n <p className=\"text-xs text-muted-foreground\">Participants</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Avg Rating</CardTitle>\n <Award className=\"h-4 w-4 text-amber-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{avgRating}/5.0</div>\n <p className=\"text-xs text-muted-foreground\">Program satisfaction</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Total Sessions</CardTitle>\n <BookOpen className=\"h-4 w-4 text-green-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">\n {wellnessPrograms.reduce((a, w) => a + w.sessions, 0)}\n </div>\n <p className=\"text-xs text-muted-foreground\">Across all programs</p>\n </CardContent>\n </Card>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>Program Overview</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-4\">\n {wellnessPrograms.map((program) => (\n <div key={program.id} className=\"p-4 rounded-lg border\">\n <div className=\"flex items-center justify-between mb-2\">\n <div>\n <p className=\"text-sm font-medium\">{program.name}</p>\n <p className=\"text-xs text-muted-foreground\">\n {program.category} · {program.instructor}\n </p>\n </div>\n <span\n className={`text-xs font-medium px-2 py-0.5 rounded-full ${program.status === 'active' ? 'bg-green-100 text-green-700' : program.status === 'upcoming' ? 'bg-blue-100 text-blue-700' : 'bg-gray-100 text-gray-700'}`}\n >\n {program.status}\n </span>\n </div>\n <p className=\"text-xs text-muted-foreground mb-2\">{program.description}</p>\n <div className=\"flex items-center gap-3 mb-2\">\n <div className=\"flex-1 h-2 bg-muted rounded-full overflow-hidden\">\n <div\n className=\"h-2 bg-primary rounded-full\"\n style={{ width: `${(program.completedSessions / program.sessions) * 100}%` }}\n />\n </div>\n <span className=\"text-xs font-medium\">\n {program.completedSessions}/{program.sessions} sessions\n </span>\n </div>\n <div className=\"flex gap-4 text-xs text-muted-foreground\">\n <span>{program.enrolledCount} enrolled</span>\n <span>{program.duration}</span>\n <span>{program.rating} ★</span>\n </div>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WellnessProgramsPage.d.ts","sourceRoot":"","sources":["../../../src/mybodyshield/pages/WellnessProgramsPage.tsx"],"names":[],"mappings":"AAIA,wBAAgB,oBAAoB,4CA4GnC"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { useMyBodyShieldStore as e } from "../store/mybodyshieldStore.js";
|
|
2
|
+
import { Award as t, BookOpen as n, Calendar as r, Users as i } from "lucide-react";
|
|
3
|
+
import { jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
4
|
+
import { Card as s, CardContent as c, CardHeader as l, CardTitle as u } from "@burdenoff/fe-libs/ui";
|
|
5
|
+
//#region src/mybodyshield/pages/WellnessProgramsPage.tsx
|
|
6
|
+
function d() {
|
|
7
|
+
let { wellnessPrograms: d } = e();
|
|
8
|
+
return /* @__PURE__ */ o("div", {
|
|
9
|
+
className: "space-y-6 p-6",
|
|
10
|
+
children: [
|
|
11
|
+
/* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("h1", {
|
|
12
|
+
className: "text-2xl font-semibold",
|
|
13
|
+
children: "Wellness Programs"
|
|
14
|
+
}), /* @__PURE__ */ a("p", {
|
|
15
|
+
className: "text-sm text-muted-foreground",
|
|
16
|
+
children: "Browse and manage available wellness programs"
|
|
17
|
+
})] }),
|
|
18
|
+
/* @__PURE__ */ o("div", {
|
|
19
|
+
className: "grid gap-4 md:grid-cols-4",
|
|
20
|
+
children: [
|
|
21
|
+
/* @__PURE__ */ o(s, { children: [/* @__PURE__ */ o(l, {
|
|
22
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
23
|
+
children: [/* @__PURE__ */ a(u, {
|
|
24
|
+
className: "text-sm font-medium",
|
|
25
|
+
children: "Total Programs"
|
|
26
|
+
}), /* @__PURE__ */ a(n, { className: "h-4 w-4 text-blue-500" })]
|
|
27
|
+
}), /* @__PURE__ */ o(c, { children: [/* @__PURE__ */ a("div", {
|
|
28
|
+
className: "text-2xl font-bold",
|
|
29
|
+
children: d.length
|
|
30
|
+
}), /* @__PURE__ */ a("p", {
|
|
31
|
+
className: "text-xs text-muted-foreground",
|
|
32
|
+
children: "Available programs"
|
|
33
|
+
})] })] }),
|
|
34
|
+
/* @__PURE__ */ o(s, { children: [/* @__PURE__ */ o(l, {
|
|
35
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
36
|
+
children: [/* @__PURE__ */ a(u, {
|
|
37
|
+
className: "text-sm font-medium",
|
|
38
|
+
children: "Total Enrolled"
|
|
39
|
+
}), /* @__PURE__ */ a(i, { className: "h-4 w-4 text-green-500" })]
|
|
40
|
+
}), /* @__PURE__ */ o(c, { children: [/* @__PURE__ */ a("div", {
|
|
41
|
+
className: "text-2xl font-bold",
|
|
42
|
+
children: d.reduce((e, t) => e + t.enrolledCount, 0)
|
|
43
|
+
}), /* @__PURE__ */ a("p", {
|
|
44
|
+
className: "text-xs text-muted-foreground",
|
|
45
|
+
children: "Active participants"
|
|
46
|
+
})] })] }),
|
|
47
|
+
/* @__PURE__ */ o(s, { children: [/* @__PURE__ */ o(l, {
|
|
48
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
49
|
+
children: [/* @__PURE__ */ a(u, {
|
|
50
|
+
className: "text-sm font-medium",
|
|
51
|
+
children: "Avg Rating"
|
|
52
|
+
}), /* @__PURE__ */ a(t, { className: "h-4 w-4 text-amber-500" })]
|
|
53
|
+
}), /* @__PURE__ */ o(c, { children: [/* @__PURE__ */ a("div", {
|
|
54
|
+
className: "text-2xl font-bold",
|
|
55
|
+
children: (d.reduce((e, t) => e + t.rating, 0) / d.length).toFixed(1)
|
|
56
|
+
}), /* @__PURE__ */ a("p", {
|
|
57
|
+
className: "text-xs text-muted-foreground",
|
|
58
|
+
children: "Out of 5.0"
|
|
59
|
+
})] })] }),
|
|
60
|
+
/* @__PURE__ */ o(s, { children: [/* @__PURE__ */ o(l, {
|
|
61
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
62
|
+
children: [/* @__PURE__ */ a(u, {
|
|
63
|
+
className: "text-sm font-medium",
|
|
64
|
+
children: "Sessions Completed"
|
|
65
|
+
}), /* @__PURE__ */ a(r, { className: "h-4 w-4 text-purple-500" })]
|
|
66
|
+
}), /* @__PURE__ */ o(c, { children: [/* @__PURE__ */ a("div", {
|
|
67
|
+
className: "text-2xl font-bold",
|
|
68
|
+
children: d.reduce((e, t) => e + t.completedSessions, 0)
|
|
69
|
+
}), /* @__PURE__ */ a("p", {
|
|
70
|
+
className: "text-xs text-muted-foreground",
|
|
71
|
+
children: "Across all programs"
|
|
72
|
+
})] })] })
|
|
73
|
+
]
|
|
74
|
+
}),
|
|
75
|
+
/* @__PURE__ */ o(s, { children: [/* @__PURE__ */ a(l, { children: /* @__PURE__ */ a(u, { children: "Programs Catalog" }) }), /* @__PURE__ */ a(c, { children: /* @__PURE__ */ a("div", {
|
|
76
|
+
className: "grid gap-4 md:grid-cols-2 lg:grid-cols-3",
|
|
77
|
+
children: d.map((e) => /* @__PURE__ */ o("div", {
|
|
78
|
+
className: "p-4 rounded-lg border",
|
|
79
|
+
children: [
|
|
80
|
+
/* @__PURE__ */ o("div", {
|
|
81
|
+
className: "flex items-center justify-between mb-2",
|
|
82
|
+
children: [/* @__PURE__ */ a("span", {
|
|
83
|
+
className: "text-xs font-medium px-2 py-0.5 rounded-full bg-primary/10 text-primary",
|
|
84
|
+
children: e.category
|
|
85
|
+
}), /* @__PURE__ */ a("span", {
|
|
86
|
+
className: `text-xs font-medium px-2 py-0.5 rounded-full ${e.status === "active" ? "bg-green-100 text-green-700" : "bg-blue-100 text-blue-700"}`,
|
|
87
|
+
children: e.status
|
|
88
|
+
})]
|
|
89
|
+
}),
|
|
90
|
+
/* @__PURE__ */ a("p", {
|
|
91
|
+
className: "text-sm font-medium mb-1",
|
|
92
|
+
children: e.name
|
|
93
|
+
}),
|
|
94
|
+
/* @__PURE__ */ a("p", {
|
|
95
|
+
className: "text-xs text-muted-foreground mb-3",
|
|
96
|
+
children: e.description
|
|
97
|
+
}),
|
|
98
|
+
/* @__PURE__ */ o("div", {
|
|
99
|
+
className: "space-y-1 text-xs text-muted-foreground",
|
|
100
|
+
children: [
|
|
101
|
+
/* @__PURE__ */ o("div", {
|
|
102
|
+
className: "flex justify-between",
|
|
103
|
+
children: [/* @__PURE__ */ a("span", { children: "Instructor" }), /* @__PURE__ */ a("span", {
|
|
104
|
+
className: "font-medium",
|
|
105
|
+
children: e.instructor
|
|
106
|
+
})]
|
|
107
|
+
}),
|
|
108
|
+
/* @__PURE__ */ o("div", {
|
|
109
|
+
className: "flex justify-between",
|
|
110
|
+
children: [/* @__PURE__ */ a("span", { children: "Duration" }), /* @__PURE__ */ a("span", {
|
|
111
|
+
className: "font-medium",
|
|
112
|
+
children: e.duration
|
|
113
|
+
})]
|
|
114
|
+
}),
|
|
115
|
+
/* @__PURE__ */ o("div", {
|
|
116
|
+
className: "flex justify-between",
|
|
117
|
+
children: [/* @__PURE__ */ a("span", { children: "Enrolled" }), /* @__PURE__ */ a("span", {
|
|
118
|
+
className: "font-medium",
|
|
119
|
+
children: e.enrolledCount
|
|
120
|
+
})]
|
|
121
|
+
}),
|
|
122
|
+
/* @__PURE__ */ o("div", {
|
|
123
|
+
className: "flex justify-between",
|
|
124
|
+
children: [/* @__PURE__ */ a("span", { children: "Rating" }), /* @__PURE__ */ o("span", {
|
|
125
|
+
className: "font-medium",
|
|
126
|
+
children: [e.rating, " ★"]
|
|
127
|
+
})]
|
|
128
|
+
})
|
|
129
|
+
]
|
|
130
|
+
})
|
|
131
|
+
]
|
|
132
|
+
}, e.id))
|
|
133
|
+
}) })] })
|
|
134
|
+
]
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
//#endregion
|
|
138
|
+
export { d as WellnessProgramsPage };
|
|
139
|
+
|
|
140
|
+
//# sourceMappingURL=WellnessProgramsPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WellnessProgramsPage.js","names":[],"sources":["../../../src/mybodyshield/pages/WellnessProgramsPage.tsx"],"sourcesContent":["import { Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { BookOpen, Users, Award, Calendar } from 'lucide-react';\nimport { useMyBodyShieldStore } from '../store/mybodyshieldStore';\n\nexport function WellnessProgramsPage() {\n const { wellnessPrograms } = useMyBodyShieldStore();\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Wellness Programs</h1>\n <p className=\"text-sm text-muted-foreground\">\n Browse and manage available wellness programs\n </p>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-4\">\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Total Programs</CardTitle>\n <BookOpen className=\"h-4 w-4 text-blue-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{wellnessPrograms.length}</div>\n <p className=\"text-xs text-muted-foreground\">Available programs</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Total Enrolled</CardTitle>\n <Users className=\"h-4 w-4 text-green-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">\n {wellnessPrograms.reduce((a, w) => a + w.enrolledCount, 0)}\n </div>\n <p className=\"text-xs text-muted-foreground\">Active participants</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Avg Rating</CardTitle>\n <Award className=\"h-4 w-4 text-amber-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">\n {(\n wellnessPrograms.reduce((a, w) => a + w.rating, 0) / wellnessPrograms.length\n ).toFixed(1)}\n </div>\n <p className=\"text-xs text-muted-foreground\">Out of 5.0</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Sessions Completed</CardTitle>\n <Calendar className=\"h-4 w-4 text-purple-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">\n {wellnessPrograms.reduce((a, w) => a + w.completedSessions, 0)}\n </div>\n <p className=\"text-xs text-muted-foreground\">Across all programs</p>\n </CardContent>\n </Card>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>Programs Catalog</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {wellnessPrograms.map((program) => (\n <div key={program.id} className=\"p-4 rounded-lg border\">\n <div className=\"flex items-center justify-between mb-2\">\n <span className=\"text-xs font-medium px-2 py-0.5 rounded-full bg-primary/10 text-primary\">\n {program.category}\n </span>\n <span\n className={`text-xs font-medium px-2 py-0.5 rounded-full ${program.status === 'active' ? 'bg-green-100 text-green-700' : 'bg-blue-100 text-blue-700'}`}\n >\n {program.status}\n </span>\n </div>\n <p className=\"text-sm font-medium mb-1\">{program.name}</p>\n <p className=\"text-xs text-muted-foreground mb-3\">{program.description}</p>\n <div className=\"space-y-1 text-xs text-muted-foreground\">\n <div className=\"flex justify-between\">\n <span>Instructor</span>\n <span className=\"font-medium\">{program.instructor}</span>\n </div>\n <div className=\"flex justify-between\">\n <span>Duration</span>\n <span className=\"font-medium\">{program.duration}</span>\n </div>\n <div className=\"flex justify-between\">\n <span>Enrolled</span>\n <span className=\"font-medium\">{program.enrolledCount}</span>\n </div>\n <div className=\"flex justify-between\">\n <span>Rating</span>\n <span className=\"font-medium\">{program.rating} ★</span>\n </div>\n </div>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { FC, PropsWithChildren } from 'react';
|
|
2
|
+
import { MyBodyShieldRootProps } from '../types';
|
|
3
|
+
|
|
4
|
+
export declare const useMyBodyShield: () => MyBodyShieldRootProps;
|
|
5
|
+
export declare const MyBodyShieldProvider: FC<PropsWithChildren<MyBodyShieldRootProps>>;
|
|
6
|
+
//# sourceMappingURL=MyBodyShieldProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MyBodyShieldProvider.d.ts","sourceRoot":"","sources":["../../../src/mybodyshield/providers/MyBodyShieldProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAInD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAMtD,eAAO,MAAM,eAAe,6BAI3B,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,EAAE,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,CAsB7E,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { createContext as e, useContext as t, useMemo as n } from "react";
|
|
2
|
+
import { MemoryRouter as r } from "react-router-dom";
|
|
3
|
+
import { QueryClient as i, QueryClientProvider as a } from "@tanstack/react-query";
|
|
4
|
+
import { jsx as o } from "react/jsx-runtime";
|
|
5
|
+
//#region src/mybodyshield/providers/MyBodyShieldProvider.tsx
|
|
6
|
+
var s = e(null), c = () => {
|
|
7
|
+
let e = t(s);
|
|
8
|
+
if (!e) throw Error("useMyBodyShield must be used within MyBodyShieldProvider");
|
|
9
|
+
return e;
|
|
10
|
+
}, l = ({ children: e, ...t }) => {
|
|
11
|
+
let c = /* @__PURE__ */ o(a, {
|
|
12
|
+
client: n(() => new i({ defaultOptions: { queries: {
|
|
13
|
+
retry: 1,
|
|
14
|
+
refetchOnWindowFocus: !1,
|
|
15
|
+
staleTime: 300 * 1e3
|
|
16
|
+
} } }), []),
|
|
17
|
+
children: /* @__PURE__ */ o(s.Provider, {
|
|
18
|
+
value: t,
|
|
19
|
+
children: e
|
|
20
|
+
})
|
|
21
|
+
});
|
|
22
|
+
return t.basePath ? c : /* @__PURE__ */ o(r, { children: c });
|
|
23
|
+
};
|
|
24
|
+
//#endregion
|
|
25
|
+
export { l as MyBodyShieldProvider, c as useMyBodyShield };
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=MyBodyShieldProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MyBodyShieldProvider.js","names":[],"sources":["../../../src/mybodyshield/providers/MyBodyShieldProvider.tsx"],"sourcesContent":["import type { FC, PropsWithChildren } from 'react';\nimport { createContext, useContext, useMemo } from 'react';\nimport { MemoryRouter } from 'react-router-dom';\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport type { MyBodyShieldRootProps } from '../types';\n\ntype MyBodyShieldContextValue = MyBodyShieldRootProps;\n\nconst MyBodyShieldContext = createContext<MyBodyShieldContextValue | null>(null);\n\nexport const useMyBodyShield = () => {\n const context = useContext(MyBodyShieldContext);\n if (!context) throw new Error('useMyBodyShield must be used within MyBodyShieldProvider');\n return context;\n};\n\nexport const MyBodyShieldProvider: FC<PropsWithChildren<MyBodyShieldRootProps>> = ({\n children,\n ...props\n}) => {\n const queryClient = useMemo(\n () =>\n new QueryClient({\n defaultOptions: {\n queries: { retry: 1, refetchOnWindowFocus: false, staleTime: 5 * 60 * 1000 },\n },\n }),\n []\n );\n\n const content = (\n <QueryClientProvider client={queryClient}>\n <MyBodyShieldContext.Provider value={props}>{children}</MyBodyShieldContext.Provider>\n </QueryClientProvider>\n );\n\n if (props.basePath) return content;\n return <MemoryRouter>{content}</MemoryRouter>;\n};\n"],"mappings":";;;;;AAQA,IAAM,IAAsB,EAA+C,KAAK,EAEnE,UAAwB;CACnC,IAAM,IAAU,EAAW,EAAoB;AAC/C,KAAI,CAAC,EAAS,OAAU,MAAM,2DAA2D;AACzF,QAAO;GAGI,KAAsE,EACjF,aACA,GAAG,QACC;CAWJ,IAAM,IACJ,kBAAC,GAAD;EAAqB,QAXH,QAEhB,IAAI,EAAY,EACd,gBAAgB,EACd,SAAS;GAAE,OAAO;GAAG,sBAAsB;GAAO,WAAW,MAAS;GAAM,EAC7E,EACF,CAAC,EACJ,EAAE,CACH;YAIG,kBAAC,EAAoB,UAArB;GAA8B,OAAO;GAAQ;GAAwC,CAAA;EACjE,CAAA;AAIxB,QADI,EAAM,WAAiB,IACpB,kBAAC,GAAD,EAAA,UAAe,GAAuB,CAAA"}
|