@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,176 @@
|
|
|
1
|
+
import { CheckCircle as e, Dumbbell as t, FileText 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/FitnessWorkoutPlansPage.tsx
|
|
5
|
+
var u = [
|
|
6
|
+
{
|
|
7
|
+
id: 1,
|
|
8
|
+
name: "Beginner Full Body",
|
|
9
|
+
type: "Strength",
|
|
10
|
+
duration: "45 min",
|
|
11
|
+
difficulty: "Beginner",
|
|
12
|
+
clients: 8,
|
|
13
|
+
sessions: 3
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
id: 2,
|
|
17
|
+
name: "HIIT Circuit",
|
|
18
|
+
type: "Cardio",
|
|
19
|
+
duration: "30 min",
|
|
20
|
+
difficulty: "Intermediate",
|
|
21
|
+
clients: 6,
|
|
22
|
+
sessions: 4
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
id: 3,
|
|
26
|
+
name: "Strength Training",
|
|
27
|
+
type: "Strength",
|
|
28
|
+
duration: "60 min",
|
|
29
|
+
difficulty: "Advanced",
|
|
30
|
+
clients: 4,
|
|
31
|
+
sessions: 5
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
id: 4,
|
|
35
|
+
name: "Cardio Endurance",
|
|
36
|
+
type: "Cardio",
|
|
37
|
+
duration: "45 min",
|
|
38
|
+
difficulty: "Intermediate",
|
|
39
|
+
clients: 5,
|
|
40
|
+
sessions: 4
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
id: 5,
|
|
44
|
+
name: "Flexibility & Recovery",
|
|
45
|
+
type: "Mobility",
|
|
46
|
+
duration: "30 min",
|
|
47
|
+
difficulty: "Beginner",
|
|
48
|
+
clients: 10,
|
|
49
|
+
sessions: 2
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
id: 6,
|
|
53
|
+
name: "Prenatal Fitness",
|
|
54
|
+
type: "Specialized",
|
|
55
|
+
duration: "40 min",
|
|
56
|
+
difficulty: "Beginner",
|
|
57
|
+
clients: 3,
|
|
58
|
+
sessions: 3
|
|
59
|
+
}
|
|
60
|
+
], d = {
|
|
61
|
+
Beginner: "bg-green-100 text-green-700",
|
|
62
|
+
Intermediate: "bg-blue-100 text-blue-700",
|
|
63
|
+
Advanced: "bg-red-100 text-red-700"
|
|
64
|
+
}, f = {
|
|
65
|
+
Strength: "bg-orange-100 text-orange-700",
|
|
66
|
+
Cardio: "bg-pink-100 text-pink-700",
|
|
67
|
+
Mobility: "bg-purple-100 text-purple-700",
|
|
68
|
+
Specialized: "bg-cyan-100 text-cyan-700"
|
|
69
|
+
};
|
|
70
|
+
function p() {
|
|
71
|
+
return /* @__PURE__ */ a("div", {
|
|
72
|
+
className: "space-y-6 p-6",
|
|
73
|
+
children: [
|
|
74
|
+
/* @__PURE__ */ a("div", { children: [/* @__PURE__ */ i("h1", {
|
|
75
|
+
className: "text-2xl font-semibold",
|
|
76
|
+
children: "Workout Plans"
|
|
77
|
+
}), /* @__PURE__ */ i("p", {
|
|
78
|
+
className: "text-sm text-muted-foreground",
|
|
79
|
+
children: "Create and manage client workout programs"
|
|
80
|
+
})] }),
|
|
81
|
+
/* @__PURE__ */ a("div", {
|
|
82
|
+
className: "grid gap-4 md:grid-cols-4",
|
|
83
|
+
children: [
|
|
84
|
+
/* @__PURE__ */ a(o, { children: [/* @__PURE__ */ a(c, {
|
|
85
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
86
|
+
children: [/* @__PURE__ */ i(l, {
|
|
87
|
+
className: "text-sm font-medium",
|
|
88
|
+
children: "Active Plans"
|
|
89
|
+
}), /* @__PURE__ */ i(t, { className: "h-4 w-4 text-blue-500" })]
|
|
90
|
+
}), /* @__PURE__ */ a(s, { children: [/* @__PURE__ */ i("div", {
|
|
91
|
+
className: "text-2xl font-bold",
|
|
92
|
+
children: "15"
|
|
93
|
+
}), /* @__PURE__ */ i("p", {
|
|
94
|
+
className: "text-xs text-muted-foreground",
|
|
95
|
+
children: "Currently in use"
|
|
96
|
+
})] })] }),
|
|
97
|
+
/* @__PURE__ */ a(o, { children: [/* @__PURE__ */ a(c, {
|
|
98
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
99
|
+
children: [/* @__PURE__ */ i(l, {
|
|
100
|
+
className: "text-sm font-medium",
|
|
101
|
+
children: "Templates"
|
|
102
|
+
}), /* @__PURE__ */ i(n, { className: "h-4 w-4 text-green-500" })]
|
|
103
|
+
}), /* @__PURE__ */ a(s, { children: [/* @__PURE__ */ i("div", {
|
|
104
|
+
className: "text-2xl font-bold",
|
|
105
|
+
children: "28"
|
|
106
|
+
}), /* @__PURE__ */ i("p", {
|
|
107
|
+
className: "text-xs text-muted-foreground",
|
|
108
|
+
children: "Reusable templates"
|
|
109
|
+
})] })] }),
|
|
110
|
+
/* @__PURE__ */ a(o, { children: [/* @__PURE__ */ a(c, {
|
|
111
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
112
|
+
children: [/* @__PURE__ */ i(l, {
|
|
113
|
+
className: "text-sm font-medium",
|
|
114
|
+
children: "Clients Assigned"
|
|
115
|
+
}), /* @__PURE__ */ i(r, { className: "h-4 w-4 text-purple-500" })]
|
|
116
|
+
}), /* @__PURE__ */ a(s, { children: [/* @__PURE__ */ i("div", {
|
|
117
|
+
className: "text-2xl font-bold",
|
|
118
|
+
children: "22"
|
|
119
|
+
}), /* @__PURE__ */ i("p", {
|
|
120
|
+
className: "text-xs text-muted-foreground",
|
|
121
|
+
children: "With active plans"
|
|
122
|
+
})] })] }),
|
|
123
|
+
/* @__PURE__ */ a(o, { children: [/* @__PURE__ */ a(c, {
|
|
124
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
125
|
+
children: [/* @__PURE__ */ i(l, {
|
|
126
|
+
className: "text-sm font-medium",
|
|
127
|
+
children: "Completed This Week"
|
|
128
|
+
}), /* @__PURE__ */ i(e, { className: "h-4 w-4 text-orange-500" })]
|
|
129
|
+
}), /* @__PURE__ */ a(s, { children: [/* @__PURE__ */ i("div", {
|
|
130
|
+
className: "text-2xl font-bold",
|
|
131
|
+
children: "8"
|
|
132
|
+
}), /* @__PURE__ */ i("p", {
|
|
133
|
+
className: "text-xs text-muted-foreground",
|
|
134
|
+
children: "Workout completions"
|
|
135
|
+
})] })] })
|
|
136
|
+
]
|
|
137
|
+
}),
|
|
138
|
+
/* @__PURE__ */ a(o, { children: [/* @__PURE__ */ i(c, { children: /* @__PURE__ */ i(l, { children: "Workout Plans" }) }), /* @__PURE__ */ i(s, { children: /* @__PURE__ */ i("div", {
|
|
139
|
+
className: "grid gap-3 md:grid-cols-2",
|
|
140
|
+
children: u.map((e) => /* @__PURE__ */ a("div", {
|
|
141
|
+
className: "p-4 rounded-lg border",
|
|
142
|
+
children: [
|
|
143
|
+
/* @__PURE__ */ a("div", {
|
|
144
|
+
className: "flex items-center justify-between mb-2",
|
|
145
|
+
children: [/* @__PURE__ */ i("p", {
|
|
146
|
+
className: "text-sm font-medium",
|
|
147
|
+
children: e.name
|
|
148
|
+
}), /* @__PURE__ */ i("span", {
|
|
149
|
+
className: `text-xs font-medium px-2 py-0.5 rounded-full ${d[e.difficulty]}`,
|
|
150
|
+
children: e.difficulty
|
|
151
|
+
})]
|
|
152
|
+
}),
|
|
153
|
+
/* @__PURE__ */ a("div", {
|
|
154
|
+
className: "flex gap-2 mb-2",
|
|
155
|
+
children: [/* @__PURE__ */ i("span", {
|
|
156
|
+
className: `text-xs px-2 py-0.5 rounded-full ${f[e.type]}`,
|
|
157
|
+
children: e.type
|
|
158
|
+
}), /* @__PURE__ */ i("span", {
|
|
159
|
+
className: "text-xs text-muted-foreground",
|
|
160
|
+
children: e.duration
|
|
161
|
+
})]
|
|
162
|
+
}),
|
|
163
|
+
/* @__PURE__ */ a("div", {
|
|
164
|
+
className: "flex justify-between text-xs text-muted-foreground",
|
|
165
|
+
children: [/* @__PURE__ */ a("span", { children: [e.clients, " clients"] }), /* @__PURE__ */ a("span", { children: [e.sessions, "x/week"] })]
|
|
166
|
+
})
|
|
167
|
+
]
|
|
168
|
+
}, e.id))
|
|
169
|
+
}) })] })
|
|
170
|
+
]
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
//#endregion
|
|
174
|
+
export { p as FitnessWorkoutPlansPage };
|
|
175
|
+
|
|
176
|
+
//# sourceMappingURL=FitnessWorkoutPlansPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FitnessWorkoutPlansPage.js","names":[],"sources":["../../../src/mybodyshield/pages/FitnessWorkoutPlansPage.tsx"],"sourcesContent":["import { Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { Dumbbell, FileText, Users, CheckCircle } from 'lucide-react';\n\nconst workoutPlans = [\n {\n id: 1,\n name: 'Beginner Full Body',\n type: 'Strength',\n duration: '45 min',\n difficulty: 'Beginner',\n clients: 8,\n sessions: 3,\n },\n {\n id: 2,\n name: 'HIIT Circuit',\n type: 'Cardio',\n duration: '30 min',\n difficulty: 'Intermediate',\n clients: 6,\n sessions: 4,\n },\n {\n id: 3,\n name: 'Strength Training',\n type: 'Strength',\n duration: '60 min',\n difficulty: 'Advanced',\n clients: 4,\n sessions: 5,\n },\n {\n id: 4,\n name: 'Cardio Endurance',\n type: 'Cardio',\n duration: '45 min',\n difficulty: 'Intermediate',\n clients: 5,\n sessions: 4,\n },\n {\n id: 5,\n name: 'Flexibility & Recovery',\n type: 'Mobility',\n duration: '30 min',\n difficulty: 'Beginner',\n clients: 10,\n sessions: 2,\n },\n {\n id: 6,\n name: 'Prenatal Fitness',\n type: 'Specialized',\n duration: '40 min',\n difficulty: 'Beginner',\n clients: 3,\n sessions: 3,\n },\n];\n\nconst difficultyColors: Record<string, string> = {\n Beginner: 'bg-green-100 text-green-700',\n Intermediate: 'bg-blue-100 text-blue-700',\n Advanced: 'bg-red-100 text-red-700',\n};\nconst typeColors: Record<string, string> = {\n Strength: 'bg-orange-100 text-orange-700',\n Cardio: 'bg-pink-100 text-pink-700',\n Mobility: 'bg-purple-100 text-purple-700',\n Specialized: 'bg-cyan-100 text-cyan-700',\n};\n\nexport function FitnessWorkoutPlansPage() {\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Workout Plans</h1>\n <p className=\"text-sm text-muted-foreground\">Create and manage client workout programs</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 Plans</CardTitle>\n <Dumbbell className=\"h-4 w-4 text-blue-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">15</div>\n <p className=\"text-xs text-muted-foreground\">Currently in use</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\">Templates</CardTitle>\n <FileText className=\"h-4 w-4 text-green-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">28</div>\n <p className=\"text-xs text-muted-foreground\">Reusable templates</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\">Clients Assigned</CardTitle>\n <Users className=\"h-4 w-4 text-purple-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">22</div>\n <p className=\"text-xs text-muted-foreground\">With active plans</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\">Completed This Week</CardTitle>\n <CheckCircle className=\"h-4 w-4 text-orange-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">8</div>\n <p className=\"text-xs text-muted-foreground\">Workout completions</p>\n </CardContent>\n </Card>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>Workout Plans</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"grid gap-3 md:grid-cols-2\">\n {workoutPlans.map((plan) => (\n <div key={plan.id} className=\"p-4 rounded-lg border\">\n <div className=\"flex items-center justify-between mb-2\">\n <p className=\"text-sm font-medium\">{plan.name}</p>\n <span\n className={`text-xs font-medium px-2 py-0.5 rounded-full ${difficultyColors[plan.difficulty]}`}\n >\n {plan.difficulty}\n </span>\n </div>\n <div className=\"flex gap-2 mb-2\">\n <span className={`text-xs px-2 py-0.5 rounded-full ${typeColors[plan.type]}`}>\n {plan.type}\n </span>\n <span className=\"text-xs text-muted-foreground\">{plan.duration}</span>\n </div>\n <div className=\"flex justify-between text-xs text-muted-foreground\">\n <span>{plan.clients} clients</span>\n <span>{plan.sessions}x/week</span>\n </div>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":";;;;AAGA,IAAM,IAAe;CACnB;EACE,IAAI;EACJ,MAAM;EACN,MAAM;EACN,UAAU;EACV,YAAY;EACZ,SAAS;EACT,UAAU;EACX;CACD;EACE,IAAI;EACJ,MAAM;EACN,MAAM;EACN,UAAU;EACV,YAAY;EACZ,SAAS;EACT,UAAU;EACX;CACD;EACE,IAAI;EACJ,MAAM;EACN,MAAM;EACN,UAAU;EACV,YAAY;EACZ,SAAS;EACT,UAAU;EACX;CACD;EACE,IAAI;EACJ,MAAM;EACN,MAAM;EACN,UAAU;EACV,YAAY;EACZ,SAAS;EACT,UAAU;EACX;CACD;EACE,IAAI;EACJ,MAAM;EACN,MAAM;EACN,UAAU;EACV,YAAY;EACZ,SAAS;EACT,UAAU;EACX;CACD;EACE,IAAI;EACJ,MAAM;EACN,MAAM;EACN,UAAU;EACV,YAAY;EACZ,SAAS;EACT,UAAU;EACX;CACF,EAEK,IAA2C;CAC/C,UAAU;CACV,cAAc;CACd,UAAU;CACX,EACK,IAAqC;CACzC,UAAU;CACV,QAAQ;CACR,UAAU;CACV,aAAa;CACd;AAED,SAAgB,IAA0B;AACxC,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;IAAI,WAAU;cAAyB;IAAkB,CAAA,EACzD,kBAAC,KAAD;IAAG,WAAU;cAAgC;IAA6C,CAAA,CACtF,EAAA,CAAA;GAEN,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;MAAY,WAAU;gBAAtB,CACE,kBAAC,GAAD;OAAW,WAAU;iBAAsB;OAAwB,CAAA,EACnE,kBAAC,GAAD,EAAU,WAAU,yBAA0B,CAAA,CACnC;SACb,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,OAAD;MAAK,WAAU;gBAAqB;MAAQ,CAAA,EAC5C,kBAAC,KAAD;MAAG,WAAU;gBAAgC;MAAoB,CAAA,CACrD,EAAA,CAAA,CACT,EAAA,CAAA;KACP,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;MAAY,WAAU;gBAAtB,CACE,kBAAC,GAAD;OAAW,WAAU;iBAAsB;OAAqB,CAAA,EAChE,kBAAC,GAAD,EAAU,WAAU,0BAA2B,CAAA,CACpC;SACb,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,OAAD;MAAK,WAAU;gBAAqB;MAAQ,CAAA,EAC5C,kBAAC,KAAD;MAAG,WAAU;gBAAgC;MAAsB,CAAA,CACvD,EAAA,CAAA,CACT,EAAA,CAAA;KACP,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;MAAY,WAAU;gBAAtB,CACE,kBAAC,GAAD;OAAW,WAAU;iBAAsB;OAA4B,CAAA,EACvE,kBAAC,GAAD,EAAO,WAAU,2BAA4B,CAAA,CAClC;SACb,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,OAAD;MAAK,WAAU;gBAAqB;MAAQ,CAAA,EAC5C,kBAAC,KAAD;MAAG,WAAU;gBAAgC;MAAqB,CAAA,CACtD,EAAA,CAAA,CACT,EAAA,CAAA;KACP,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;MAAY,WAAU;gBAAtB,CACE,kBAAC,GAAD;OAAW,WAAU;iBAAsB;OAA+B,CAAA,EAC1E,kBAAC,GAAD,EAAa,WAAU,2BAA4B,CAAA,CACxC;SACb,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,OAAD;MAAK,WAAU;gBAAqB;MAAO,CAAA,EAC3C,kBAAC,KAAD;MAAG,WAAU;gBAAgC;MAAuB,CAAA,CACxD,EAAA,CAAA,CACT,EAAA,CAAA;KACH;;GAEN,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAA,UAAW,iBAAyB,CAAA,EACzB,CAAA,EACb,kBAAC,GAAD,EAAA,UACE,kBAAC,OAAD;IAAK,WAAU;cACZ,EAAa,KAAK,MACjB,kBAAC,OAAD;KAAmB,WAAU;eAA7B;MACE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,KAAD;QAAG,WAAU;kBAAuB,EAAK;QAAS,CAAA,EAClD,kBAAC,QAAD;QACE,WAAW,gDAAgD,EAAiB,EAAK;kBAEhF,EAAK;QACD,CAAA,CACH;;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD;QAAM,WAAW,oCAAoC,EAAW,EAAK;kBAClE,EAAK;QACD,CAAA,EACP,kBAAC,QAAD;QAAM,WAAU;kBAAiC,EAAK;QAAgB,CAAA,CAClE;;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD,EAAA,UAAA,CAAO,EAAK,SAAQ,WAAe,EAAA,CAAA,EACnC,kBAAC,QAAD,EAAA,UAAA,CAAO,EAAK,UAAS,SAAa,EAAA,CAAA,CAC9B;;MACF;OAnBI,EAAK,GAmBT,CACN;IACE,CAAA,EACM,CAAA,CACT,EAAA,CAAA;GACH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PatientAppointmentsPage.d.ts","sourceRoot":"","sources":["../../../src/mybodyshield/pages/PatientAppointmentsPage.tsx"],"names":[],"mappings":"AAWA,wBAAgB,uBAAuB,4CAuGtC"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { useMyBodyShieldStore as e } from "../store/mybodyshieldStore.js";
|
|
2
|
+
import { Calendar as t, CheckCircle as n, Clock as r, MapPin as i, Video as a } from "lucide-react";
|
|
3
|
+
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
4
|
+
import { Card as c, CardContent as l, CardHeader as u, CardTitle as d } from "@burdenoff/fe-libs/ui";
|
|
5
|
+
//#region src/mybodyshield/pages/PatientAppointmentsPage.tsx
|
|
6
|
+
var f = {
|
|
7
|
+
confirmed: "bg-green-100 text-green-700",
|
|
8
|
+
pending: "bg-yellow-100 text-yellow-700",
|
|
9
|
+
completed: "bg-blue-100 text-blue-700",
|
|
10
|
+
cancelled: "bg-red-100 text-red-700"
|
|
11
|
+
};
|
|
12
|
+
function p() {
|
|
13
|
+
let { appointments: p } = e(), m = p.filter((e) => e.status === "confirmed").length, h = p.filter((e) => e.status === "completed").length, g = p.filter((e) => e.type === "telemedicine").length;
|
|
14
|
+
return /* @__PURE__ */ s("div", {
|
|
15
|
+
className: "space-y-6 p-6",
|
|
16
|
+
children: [
|
|
17
|
+
/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("h1", {
|
|
18
|
+
className: "text-2xl font-semibold",
|
|
19
|
+
children: "My Appointments"
|
|
20
|
+
}), /* @__PURE__ */ o("p", {
|
|
21
|
+
className: "text-sm text-muted-foreground",
|
|
22
|
+
children: "View and manage your healthcare appointments"
|
|
23
|
+
})] }),
|
|
24
|
+
/* @__PURE__ */ s("div", {
|
|
25
|
+
className: "grid gap-4 md:grid-cols-4",
|
|
26
|
+
children: [
|
|
27
|
+
/* @__PURE__ */ s(c, { children: [/* @__PURE__ */ s(u, {
|
|
28
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
29
|
+
children: [/* @__PURE__ */ o(d, {
|
|
30
|
+
className: "text-sm font-medium",
|
|
31
|
+
children: "Total Appointments"
|
|
32
|
+
}), /* @__PURE__ */ o(t, { className: "h-4 w-4 text-blue-500" })]
|
|
33
|
+
}), /* @__PURE__ */ s(l, { children: [/* @__PURE__ */ o("div", {
|
|
34
|
+
className: "text-2xl font-bold",
|
|
35
|
+
children: p.length
|
|
36
|
+
}), /* @__PURE__ */ o("p", {
|
|
37
|
+
className: "text-xs text-muted-foreground",
|
|
38
|
+
children: "All scheduled visits"
|
|
39
|
+
})] })] }),
|
|
40
|
+
/* @__PURE__ */ s(c, { children: [/* @__PURE__ */ s(u, {
|
|
41
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
42
|
+
children: [/* @__PURE__ */ o(d, {
|
|
43
|
+
className: "text-sm font-medium",
|
|
44
|
+
children: "Upcoming"
|
|
45
|
+
}), /* @__PURE__ */ o(r, { className: "h-4 w-4 text-green-500" })]
|
|
46
|
+
}), /* @__PURE__ */ s(l, { children: [/* @__PURE__ */ o("div", {
|
|
47
|
+
className: "text-2xl font-bold",
|
|
48
|
+
children: m
|
|
49
|
+
}), /* @__PURE__ */ o("p", {
|
|
50
|
+
className: "text-xs text-muted-foreground",
|
|
51
|
+
children: "Confirmed appointments"
|
|
52
|
+
})] })] }),
|
|
53
|
+
/* @__PURE__ */ s(c, { children: [/* @__PURE__ */ s(u, {
|
|
54
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
55
|
+
children: [/* @__PURE__ */ o(d, {
|
|
56
|
+
className: "text-sm font-medium",
|
|
57
|
+
children: "Completed"
|
|
58
|
+
}), /* @__PURE__ */ o(n, { className: "h-4 w-4 text-purple-500" })]
|
|
59
|
+
}), /* @__PURE__ */ s(l, { children: [/* @__PURE__ */ o("div", {
|
|
60
|
+
className: "text-2xl font-bold",
|
|
61
|
+
children: h
|
|
62
|
+
}), /* @__PURE__ */ o("p", {
|
|
63
|
+
className: "text-xs text-muted-foreground",
|
|
64
|
+
children: "Past visits"
|
|
65
|
+
})] })] }),
|
|
66
|
+
/* @__PURE__ */ s(c, { children: [/* @__PURE__ */ s(u, {
|
|
67
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
68
|
+
children: [/* @__PURE__ */ o(d, {
|
|
69
|
+
className: "text-sm font-medium",
|
|
70
|
+
children: "Telemedicine"
|
|
71
|
+
}), /* @__PURE__ */ o(a, { className: "h-4 w-4 text-cyan-500" })]
|
|
72
|
+
}), /* @__PURE__ */ s(l, { children: [/* @__PURE__ */ o("div", {
|
|
73
|
+
className: "text-2xl font-bold",
|
|
74
|
+
children: g
|
|
75
|
+
}), /* @__PURE__ */ o("p", {
|
|
76
|
+
className: "text-xs text-muted-foreground",
|
|
77
|
+
children: "Virtual appointments"
|
|
78
|
+
})] })] })
|
|
79
|
+
]
|
|
80
|
+
}),
|
|
81
|
+
/* @__PURE__ */ s(c, { children: [/* @__PURE__ */ o(u, { children: /* @__PURE__ */ o(d, { children: "All Appointments" }) }), /* @__PURE__ */ o(l, { children: /* @__PURE__ */ o("div", {
|
|
82
|
+
className: "space-y-3",
|
|
83
|
+
children: p.map((e) => /* @__PURE__ */ s("div", {
|
|
84
|
+
className: "flex items-center justify-between p-3 rounded-lg bg-muted/50",
|
|
85
|
+
children: [/* @__PURE__ */ s("div", {
|
|
86
|
+
className: "flex items-center gap-3",
|
|
87
|
+
children: [/* @__PURE__ */ o("div", {
|
|
88
|
+
className: "p-2 rounded-full bg-primary/10",
|
|
89
|
+
children: e.type === "telemedicine" ? /* @__PURE__ */ o(a, { className: "h-4 w-4 text-primary" }) : /* @__PURE__ */ o(i, { className: "h-4 w-4 text-primary" })
|
|
90
|
+
}), /* @__PURE__ */ s("div", { children: [
|
|
91
|
+
/* @__PURE__ */ o("p", {
|
|
92
|
+
className: "text-sm font-medium",
|
|
93
|
+
children: e.providerName
|
|
94
|
+
}),
|
|
95
|
+
/* @__PURE__ */ s("p", {
|
|
96
|
+
className: "text-xs text-muted-foreground",
|
|
97
|
+
children: [
|
|
98
|
+
e.specialty,
|
|
99
|
+
" · ",
|
|
100
|
+
e.reason
|
|
101
|
+
]
|
|
102
|
+
}),
|
|
103
|
+
/* @__PURE__ */ o("p", {
|
|
104
|
+
className: "text-xs text-muted-foreground",
|
|
105
|
+
children: e.location
|
|
106
|
+
})
|
|
107
|
+
] })]
|
|
108
|
+
}), /* @__PURE__ */ s("div", {
|
|
109
|
+
className: "flex items-center gap-3",
|
|
110
|
+
children: [/* @__PURE__ */ s("div", {
|
|
111
|
+
className: "text-right",
|
|
112
|
+
children: [/* @__PURE__ */ o("p", {
|
|
113
|
+
className: "text-sm font-medium",
|
|
114
|
+
children: e.date
|
|
115
|
+
}), /* @__PURE__ */ o("p", {
|
|
116
|
+
className: "text-xs text-muted-foreground",
|
|
117
|
+
children: e.time
|
|
118
|
+
})]
|
|
119
|
+
}), /* @__PURE__ */ o("span", {
|
|
120
|
+
className: `text-xs font-medium px-2 py-0.5 rounded-full ${f[e.status]}`,
|
|
121
|
+
children: e.status
|
|
122
|
+
})]
|
|
123
|
+
})]
|
|
124
|
+
}, e.id))
|
|
125
|
+
}) })] })
|
|
126
|
+
]
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
//#endregion
|
|
130
|
+
export { p as PatientAppointmentsPage };
|
|
131
|
+
|
|
132
|
+
//# sourceMappingURL=PatientAppointmentsPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PatientAppointmentsPage.js","names":[],"sources":["../../../src/mybodyshield/pages/PatientAppointmentsPage.tsx"],"sourcesContent":["import { Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { Calendar, CheckCircle, Clock, Video, MapPin } from 'lucide-react';\nimport { useMyBodyShieldStore } from '../store/mybodyshieldStore';\n\nconst statusColors: Record<string, string> = {\n confirmed: 'bg-green-100 text-green-700',\n pending: 'bg-yellow-100 text-yellow-700',\n completed: 'bg-blue-100 text-blue-700',\n cancelled: 'bg-red-100 text-red-700',\n};\n\nexport function PatientAppointmentsPage() {\n const { appointments } = useMyBodyShieldStore();\n const confirmed = appointments.filter((a) => a.status === 'confirmed').length;\n const completed = appointments.filter((a) => a.status === 'completed').length;\n const telemedicine = appointments.filter((a) => a.type === 'telemedicine').length;\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">My Appointments</h1>\n <p className=\"text-sm text-muted-foreground\">\n View and manage your healthcare appointments\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 Appointments</CardTitle>\n <Calendar className=\"h-4 w-4 text-blue-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{appointments.length}</div>\n <p className=\"text-xs text-muted-foreground\">All scheduled visits</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\">Upcoming</CardTitle>\n <Clock className=\"h-4 w-4 text-green-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{confirmed}</div>\n <p className=\"text-xs text-muted-foreground\">Confirmed appointments</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\">Completed</CardTitle>\n <CheckCircle className=\"h-4 w-4 text-purple-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{completed}</div>\n <p className=\"text-xs text-muted-foreground\">Past visits</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\">Telemedicine</CardTitle>\n <Video className=\"h-4 w-4 text-cyan-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{telemedicine}</div>\n <p className=\"text-xs text-muted-foreground\">Virtual appointments</p>\n </CardContent>\n </Card>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>All Appointments</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-3\">\n {appointments.map((appt) => (\n <div\n key={appt.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=\"p-2 rounded-full bg-primary/10\">\n {appt.type === 'telemedicine' ? (\n <Video className=\"h-4 w-4 text-primary\" />\n ) : (\n <MapPin className=\"h-4 w-4 text-primary\" />\n )}\n </div>\n <div>\n <p className=\"text-sm font-medium\">{appt.providerName}</p>\n <p className=\"text-xs text-muted-foreground\">\n {appt.specialty} · {appt.reason}\n </p>\n <p className=\"text-xs text-muted-foreground\">{appt.location}</p>\n </div>\n </div>\n <div className=\"flex items-center gap-3\">\n <div className=\"text-right\">\n <p className=\"text-sm font-medium\">{appt.date}</p>\n <p className=\"text-xs text-muted-foreground\">{appt.time}</p>\n </div>\n <span\n className={`text-xs font-medium px-2 py-0.5 rounded-full ${statusColors[appt.status]}`}\n >\n {appt.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":"PatientDashboardPage.d.ts","sourceRoot":"","sources":["../../../src/mybodyshield/pages/PatientDashboardPage.tsx"],"names":[],"mappings":"AAKA,wBAAgB,oBAAoB,4CAkMnC"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { useMyBodyShieldStore as e } from "../store/mybodyshieldStore.js";
|
|
2
|
+
import { useI18n as t } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
3
|
+
import { Calendar as n, Clock as r, Heart as i, Pill as a, Stethoscope as o, Target as s } from "lucide-react";
|
|
4
|
+
import { jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
5
|
+
import { Card as u, CardContent as d, CardHeader as f, CardTitle as p } from "@burdenoff/fe-libs/ui";
|
|
6
|
+
//#region src/mybodyshield/pages/PatientDashboardPage.tsx
|
|
7
|
+
function m() {
|
|
8
|
+
let { t: m } = t(), h = (e, t) => {
|
|
9
|
+
let n = m(e);
|
|
10
|
+
return n === e ? t : n;
|
|
11
|
+
}, { appointments: g, medications: _, healthGoals: v, vitalSigns: y } = e(), b = _.filter((e) => e.isActive).length, x = g.filter((e) => e.status === "confirmed" || e.status === "pending").length, S = v.filter((e) => e.status !== "completed").length, C = y[0];
|
|
12
|
+
return /* @__PURE__ */ l("div", {
|
|
13
|
+
className: "space-y-6 p-6",
|
|
14
|
+
children: [
|
|
15
|
+
/* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("h1", {
|
|
16
|
+
className: "text-2xl font-semibold",
|
|
17
|
+
children: h("mybodyshield.patientDashboard.title", "Patient Dashboard")
|
|
18
|
+
}), /* @__PURE__ */ c("p", {
|
|
19
|
+
className: "text-sm text-muted-foreground",
|
|
20
|
+
children: h("mybodyshield.patientDashboard.description", "Your health overview and upcoming activities")
|
|
21
|
+
})] }),
|
|
22
|
+
/* @__PURE__ */ l("div", {
|
|
23
|
+
className: "grid gap-4 md:grid-cols-4",
|
|
24
|
+
children: [
|
|
25
|
+
/* @__PURE__ */ l(u, { children: [/* @__PURE__ */ l(f, {
|
|
26
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
27
|
+
children: [/* @__PURE__ */ c(p, {
|
|
28
|
+
className: "text-sm font-medium",
|
|
29
|
+
children: h("mybodyshield.patientDashboard.stats.activeMedications", "Active Medications")
|
|
30
|
+
}), /* @__PURE__ */ c(a, { className: "h-4 w-4 text-blue-500" })]
|
|
31
|
+
}), /* @__PURE__ */ l(d, { children: [/* @__PURE__ */ c("div", {
|
|
32
|
+
className: "text-2xl font-bold",
|
|
33
|
+
children: b
|
|
34
|
+
}), /* @__PURE__ */ c("p", {
|
|
35
|
+
className: "text-xs text-muted-foreground",
|
|
36
|
+
children: h("mybodyshield.patientDashboard.stats.activeMedicationsHint", "Currently prescribed")
|
|
37
|
+
})] })] }),
|
|
38
|
+
/* @__PURE__ */ l(u, { children: [/* @__PURE__ */ l(f, {
|
|
39
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
40
|
+
children: [/* @__PURE__ */ c(p, {
|
|
41
|
+
className: "text-sm font-medium",
|
|
42
|
+
children: h("mybodyshield.patientDashboard.stats.upcomingAppointments", "Upcoming Appointments")
|
|
43
|
+
}), /* @__PURE__ */ c(n, { className: "h-4 w-4 text-green-500" })]
|
|
44
|
+
}), /* @__PURE__ */ l(d, { children: [/* @__PURE__ */ c("div", {
|
|
45
|
+
className: "text-2xl font-bold",
|
|
46
|
+
children: x
|
|
47
|
+
}), /* @__PURE__ */ c("p", {
|
|
48
|
+
className: "text-xs text-muted-foreground",
|
|
49
|
+
children: h("mybodyshield.patientDashboard.stats.upcomingAppointmentsHint", "Confirmed & pending")
|
|
50
|
+
})] })] }),
|
|
51
|
+
/* @__PURE__ */ l(u, { children: [/* @__PURE__ */ l(f, {
|
|
52
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
53
|
+
children: [/* @__PURE__ */ c(p, {
|
|
54
|
+
className: "text-sm font-medium",
|
|
55
|
+
children: h("mybodyshield.patientDashboard.stats.healthScore", "Health Score")
|
|
56
|
+
}), /* @__PURE__ */ c(i, { className: "h-4 w-4 text-red-500" })]
|
|
57
|
+
}), /* @__PURE__ */ l(d, { children: [/* @__PURE__ */ c("div", {
|
|
58
|
+
className: "text-2xl font-bold",
|
|
59
|
+
children: "82/100"
|
|
60
|
+
}), /* @__PURE__ */ c("p", {
|
|
61
|
+
className: "text-xs text-muted-foreground",
|
|
62
|
+
children: h("mybodyshield.patientDashboard.stats.healthScoreHint", "+3 from last month")
|
|
63
|
+
})] })] }),
|
|
64
|
+
/* @__PURE__ */ l(u, { children: [/* @__PURE__ */ l(f, {
|
|
65
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
66
|
+
children: [/* @__PURE__ */ c(p, {
|
|
67
|
+
className: "text-sm font-medium",
|
|
68
|
+
children: h("mybodyshield.patientDashboard.stats.activeGoals", "Active Goals")
|
|
69
|
+
}), /* @__PURE__ */ c(s, { className: "h-4 w-4 text-purple-500" })]
|
|
70
|
+
}), /* @__PURE__ */ l(d, { children: [/* @__PURE__ */ c("div", {
|
|
71
|
+
className: "text-2xl font-bold",
|
|
72
|
+
children: S
|
|
73
|
+
}), /* @__PURE__ */ c("p", {
|
|
74
|
+
className: "text-xs text-muted-foreground",
|
|
75
|
+
children: h("mybodyshield.patientDashboard.stats.activeGoalsHint", "In progress")
|
|
76
|
+
})] })] })
|
|
77
|
+
]
|
|
78
|
+
}),
|
|
79
|
+
/* @__PURE__ */ l("div", {
|
|
80
|
+
className: "grid gap-4 md:grid-cols-2",
|
|
81
|
+
children: [/* @__PURE__ */ l(u, { children: [/* @__PURE__ */ c(f, { children: /* @__PURE__ */ l(p, {
|
|
82
|
+
className: "flex items-center gap-2",
|
|
83
|
+
children: [/* @__PURE__ */ c(n, { className: "h-5 w-5" }), h("mybodyshield.patientDashboard.sections.upcomingAppointments", "Upcoming Appointments")]
|
|
84
|
+
}) }), /* @__PURE__ */ c(d, { children: /* @__PURE__ */ c("div", {
|
|
85
|
+
className: "space-y-3",
|
|
86
|
+
children: g.filter((e) => e.status !== "cancelled").map((e) => /* @__PURE__ */ l("div", {
|
|
87
|
+
className: "flex items-center justify-between p-3 rounded-lg bg-muted/50",
|
|
88
|
+
children: [/* @__PURE__ */ l("div", {
|
|
89
|
+
className: "flex items-center gap-3",
|
|
90
|
+
children: [/* @__PURE__ */ c("div", {
|
|
91
|
+
className: "p-2 rounded-full bg-primary/10",
|
|
92
|
+
children: /* @__PURE__ */ c(o, { className: "h-4 w-4 text-primary" })
|
|
93
|
+
}), /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("p", {
|
|
94
|
+
className: "text-sm font-medium",
|
|
95
|
+
children: e.providerName
|
|
96
|
+
}), /* @__PURE__ */ l("p", {
|
|
97
|
+
className: "text-xs text-muted-foreground",
|
|
98
|
+
children: [
|
|
99
|
+
e.specialty,
|
|
100
|
+
" · ",
|
|
101
|
+
e.reason
|
|
102
|
+
]
|
|
103
|
+
})] })]
|
|
104
|
+
}), /* @__PURE__ */ l("div", {
|
|
105
|
+
className: "text-right",
|
|
106
|
+
children: [/* @__PURE__ */ c("p", {
|
|
107
|
+
className: "text-sm font-medium",
|
|
108
|
+
children: e.date
|
|
109
|
+
}), /* @__PURE__ */ l("p", {
|
|
110
|
+
className: "text-xs text-muted-foreground flex items-center justify-end gap-1",
|
|
111
|
+
children: [/* @__PURE__ */ c(r, { className: "h-3 w-3" }), e.time]
|
|
112
|
+
})]
|
|
113
|
+
})]
|
|
114
|
+
}, e.id))
|
|
115
|
+
}) })] }), /* @__PURE__ */ l(u, { children: [/* @__PURE__ */ c(f, { children: /* @__PURE__ */ l(p, {
|
|
116
|
+
className: "flex items-center gap-2",
|
|
117
|
+
children: [/* @__PURE__ */ c(a, { className: "h-5 w-5" }), h("mybodyshield.patientDashboard.sections.currentMedications", "Current Medications")]
|
|
118
|
+
}) }), /* @__PURE__ */ c(d, { children: /* @__PURE__ */ l("div", {
|
|
119
|
+
className: "space-y-3",
|
|
120
|
+
children: [_.filter((e) => e.isActive).map((e) => /* @__PURE__ */ l("div", {
|
|
121
|
+
className: "p-3 rounded-lg border",
|
|
122
|
+
children: [
|
|
123
|
+
/* @__PURE__ */ l("div", {
|
|
124
|
+
className: "flex items-center justify-between mb-1",
|
|
125
|
+
children: [/* @__PURE__ */ c("p", {
|
|
126
|
+
className: "text-sm font-medium",
|
|
127
|
+
children: e.name
|
|
128
|
+
}), /* @__PURE__ */ c("span", {
|
|
129
|
+
className: "text-xs px-2 py-0.5 rounded-full bg-blue-100 text-blue-700",
|
|
130
|
+
children: e.dosage
|
|
131
|
+
})]
|
|
132
|
+
}),
|
|
133
|
+
/* @__PURE__ */ l("p", {
|
|
134
|
+
className: "text-xs text-muted-foreground",
|
|
135
|
+
children: [
|
|
136
|
+
e.frequency,
|
|
137
|
+
" · ",
|
|
138
|
+
e.prescribedBy
|
|
139
|
+
]
|
|
140
|
+
}),
|
|
141
|
+
/* @__PURE__ */ l("p", {
|
|
142
|
+
className: "text-xs text-muted-foreground mt-1",
|
|
143
|
+
children: [
|
|
144
|
+
e.refillsRemaining,
|
|
145
|
+
" ",
|
|
146
|
+
h("mybodyshield.patientDashboard.medications.refillsRemaining", "refills remaining")
|
|
147
|
+
]
|
|
148
|
+
})
|
|
149
|
+
]
|
|
150
|
+
}, e.id)), C && /* @__PURE__ */ l("div", {
|
|
151
|
+
className: "p-3 rounded-lg bg-green-50 border border-green-200 mt-2",
|
|
152
|
+
children: [/* @__PURE__ */ c("p", {
|
|
153
|
+
className: "text-xs font-medium text-green-700",
|
|
154
|
+
children: h("mybodyshield.patientDashboard.sections.latestVitals", "Latest Vitals")
|
|
155
|
+
}), /* @__PURE__ */ l("p", {
|
|
156
|
+
className: "text-xs text-green-600",
|
|
157
|
+
children: [
|
|
158
|
+
h("mybodyshield.patientDashboard.vitals.bp", "BP"),
|
|
159
|
+
":",
|
|
160
|
+
" ",
|
|
161
|
+
C.bloodPressureSystolic,
|
|
162
|
+
"/",
|
|
163
|
+
C.bloodPressureDiastolic,
|
|
164
|
+
" ",
|
|
165
|
+
"· ",
|
|
166
|
+
h("mybodyshield.patientDashboard.vitals.hr", "HR"),
|
|
167
|
+
":",
|
|
168
|
+
" ",
|
|
169
|
+
C.heartRate,
|
|
170
|
+
" ",
|
|
171
|
+
h("mybodyshield.patientDashboard.vitals.bpm", "bpm"),
|
|
172
|
+
" ",
|
|
173
|
+
"· ",
|
|
174
|
+
h("mybodyshield.patientDashboard.vitals.spo2", "SpO2"),
|
|
175
|
+
":",
|
|
176
|
+
" ",
|
|
177
|
+
C.oxygenSaturation,
|
|
178
|
+
"%"
|
|
179
|
+
]
|
|
180
|
+
})]
|
|
181
|
+
})]
|
|
182
|
+
}) })] })]
|
|
183
|
+
})
|
|
184
|
+
]
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
//#endregion
|
|
188
|
+
export { m as PatientDashboardPage };
|
|
189
|
+
|
|
190
|
+
//# sourceMappingURL=PatientDashboardPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PatientDashboardPage.js","names":[],"sources":["../../../src/mybodyshield/pages/PatientDashboardPage.tsx"],"sourcesContent":["import { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { Pill, Calendar, Heart, Target, Clock, Stethoscope } from 'lucide-react';\nimport { useMyBodyShieldStore } from '../store/mybodyshieldStore';\n\nexport function PatientDashboardPage() {\n const { t: translate } = useI18n();\n const t = (key: string, fallback: string): string => {\n const value = translate(key);\n return value === key ? fallback : value;\n };\n const { appointments, medications, healthGoals, vitalSigns } = useMyBodyShieldStore();\n const activeMeds = medications.filter((m) => m.isActive).length;\n const upcomingAppts = appointments.filter(\n (a) => a.status === 'confirmed' || a.status === 'pending'\n ).length;\n const activeGoals = healthGoals.filter((g) => g.status !== 'completed').length;\n const latestVital = vitalSigns[0];\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n {t('mybodyshield.patientDashboard.title', 'Patient Dashboard')}\n </h1>\n <p className=\"text-sm text-muted-foreground\">\n {t(\n 'mybodyshield.patientDashboard.description',\n 'Your health overview and upcoming activities'\n )}\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\">\n {t('mybodyshield.patientDashboard.stats.activeMedications', 'Active Medications')}\n </CardTitle>\n <Pill className=\"h-4 w-4 text-blue-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{activeMeds}</div>\n <p className=\"text-xs text-muted-foreground\">\n {t(\n 'mybodyshield.patientDashboard.stats.activeMedicationsHint',\n 'Currently prescribed'\n )}\n </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\">\n {t(\n 'mybodyshield.patientDashboard.stats.upcomingAppointments',\n 'Upcoming Appointments'\n )}\n </CardTitle>\n <Calendar className=\"h-4 w-4 text-green-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{upcomingAppts}</div>\n <p className=\"text-xs text-muted-foreground\">\n {t(\n 'mybodyshield.patientDashboard.stats.upcomingAppointmentsHint',\n 'Confirmed & pending'\n )}\n </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\">\n {t('mybodyshield.patientDashboard.stats.healthScore', 'Health Score')}\n </CardTitle>\n <Heart className=\"h-4 w-4 text-red-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">82/100</div>\n <p className=\"text-xs text-muted-foreground\">\n {t('mybodyshield.patientDashboard.stats.healthScoreHint', '+3 from last month')}\n </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\">\n {t('mybodyshield.patientDashboard.stats.activeGoals', 'Active Goals')}\n </CardTitle>\n <Target className=\"h-4 w-4 text-purple-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{activeGoals}</div>\n <p className=\"text-xs text-muted-foreground\">\n {t('mybodyshield.patientDashboard.stats.activeGoalsHint', 'In progress')}\n </p>\n </CardContent>\n </Card>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-2\">\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Calendar className=\"h-5 w-5\" />\n {t(\n 'mybodyshield.patientDashboard.sections.upcomingAppointments',\n 'Upcoming Appointments'\n )}\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-3\">\n {appointments\n .filter((a) => a.status !== 'cancelled')\n .map((appt) => (\n <div\n key={appt.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=\"p-2 rounded-full bg-primary/10\">\n <Stethoscope className=\"h-4 w-4 text-primary\" />\n </div>\n <div>\n <p className=\"text-sm font-medium\">{appt.providerName}</p>\n <p className=\"text-xs text-muted-foreground\">\n {appt.specialty} · {appt.reason}\n </p>\n </div>\n </div>\n <div className=\"text-right\">\n <p className=\"text-sm font-medium\">{appt.date}</p>\n <p className=\"text-xs text-muted-foreground flex items-center justify-end gap-1\">\n <Clock className=\"h-3 w-3\" />\n {appt.time}\n </p>\n </div>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Pill className=\"h-5 w-5\" />\n {t(\n 'mybodyshield.patientDashboard.sections.currentMedications',\n 'Current Medications'\n )}\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-3\">\n {medications\n .filter((m) => m.isActive)\n .map((med) => (\n <div key={med.id} className=\"p-3 rounded-lg border\">\n <div className=\"flex items-center justify-between mb-1\">\n <p className=\"text-sm font-medium\">{med.name}</p>\n <span className=\"text-xs px-2 py-0.5 rounded-full bg-blue-100 text-blue-700\">\n {med.dosage}\n </span>\n </div>\n <p className=\"text-xs text-muted-foreground\">\n {med.frequency} · {med.prescribedBy}\n </p>\n <p className=\"text-xs text-muted-foreground mt-1\">\n {med.refillsRemaining}{' '}\n {t(\n 'mybodyshield.patientDashboard.medications.refillsRemaining',\n 'refills remaining'\n )}\n </p>\n </div>\n ))}\n {latestVital && (\n <div className=\"p-3 rounded-lg bg-green-50 border border-green-200 mt-2\">\n <p className=\"text-xs font-medium text-green-700\">\n {t('mybodyshield.patientDashboard.sections.latestVitals', 'Latest Vitals')}\n </p>\n <p className=\"text-xs text-green-600\">\n {t('mybodyshield.patientDashboard.vitals.bp', 'BP')}:{' '}\n {latestVital.bloodPressureSystolic}/{latestVital.bloodPressureDiastolic}{' '}\n · {t('mybodyshield.patientDashboard.vitals.hr', 'HR')}:{' '}\n {latestVital.heartRate} {t('mybodyshield.patientDashboard.vitals.bpm', 'bpm')}{' '}\n · {t('mybodyshield.patientDashboard.vitals.spo2', 'SpO2')}:{' '}\n {latestVital.oxygenSaturation}%\n </p>\n </div>\n )}\n </div>\n </CardContent>\n </Card>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PatientFitnessTrackingPage.d.ts","sourceRoot":"","sources":["../../../src/mybodyshield/pages/PatientFitnessTrackingPage.tsx"],"names":[],"mappings":"AAIA,wBAAgB,0BAA0B,4CAoGzC"}
|