@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,137 @@
|
|
|
1
|
+
import { useMyBodyShieldStore as e } from "../store/mybodyshieldStore.js";
|
|
2
|
+
import { Flame as t, Footprints as n, MapPin as r, Timer 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/PatientFitnessTrackingPage.tsx
|
|
6
|
+
function d() {
|
|
7
|
+
let { fitnessMetrics: d } = e(), f = d[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: "Fitness Tracking"
|
|
14
|
+
}), /* @__PURE__ */ a("p", {
|
|
15
|
+
className: "text-sm text-muted-foreground",
|
|
16
|
+
children: "Daily activity metrics and exercise tracking"
|
|
17
|
+
})] }),
|
|
18
|
+
f && /* @__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: "Steps Today"
|
|
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: f.steps.toLocaleString()
|
|
30
|
+
}), /* @__PURE__ */ a("p", {
|
|
31
|
+
className: "text-xs text-muted-foreground",
|
|
32
|
+
children: "Goal: 10,000 steps"
|
|
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: "Calories Burned"
|
|
39
|
+
}), /* @__PURE__ */ a(t, { className: "h-4 w-4 text-orange-500" })]
|
|
40
|
+
}), /* @__PURE__ */ o(c, { children: [/* @__PURE__ */ a("div", {
|
|
41
|
+
className: "text-2xl font-bold",
|
|
42
|
+
children: f.caloriesBurned.toLocaleString()
|
|
43
|
+
}), /* @__PURE__ */ a("p", {
|
|
44
|
+
className: "text-xs text-muted-foreground",
|
|
45
|
+
children: "kcal today"
|
|
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: "Active Minutes"
|
|
52
|
+
}), /* @__PURE__ */ a(i, { className: "h-4 w-4 text-green-500" })]
|
|
53
|
+
}), /* @__PURE__ */ o(c, { children: [/* @__PURE__ */ a("div", {
|
|
54
|
+
className: "text-2xl font-bold",
|
|
55
|
+
children: f.activeMinutes
|
|
56
|
+
}), /* @__PURE__ */ a("p", {
|
|
57
|
+
className: "text-xs text-muted-foreground",
|
|
58
|
+
children: "Goal: 60 min/day"
|
|
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: "Distance"
|
|
65
|
+
}), /* @__PURE__ */ a(r, { className: "h-4 w-4 text-purple-500" })]
|
|
66
|
+
}), /* @__PURE__ */ o(c, { children: [/* @__PURE__ */ o("div", {
|
|
67
|
+
className: "text-2xl font-bold",
|
|
68
|
+
children: [f.distanceKm, " km"]
|
|
69
|
+
}), /* @__PURE__ */ a("p", {
|
|
70
|
+
className: "text-xs text-muted-foreground",
|
|
71
|
+
children: "Walking & running"
|
|
72
|
+
})] })] })
|
|
73
|
+
]
|
|
74
|
+
}),
|
|
75
|
+
/* @__PURE__ */ o(s, { children: [/* @__PURE__ */ a(l, { children: /* @__PURE__ */ a(u, { children: "Daily Fitness Log" }) }), /* @__PURE__ */ a(c, { children: /* @__PURE__ */ a("div", {
|
|
76
|
+
className: "space-y-3",
|
|
77
|
+
children: d.map((e) => /* @__PURE__ */ o("div", {
|
|
78
|
+
className: "p-3 rounded-lg bg-muted/50",
|
|
79
|
+
children: [/* @__PURE__ */ a("p", {
|
|
80
|
+
className: "text-xs font-medium text-muted-foreground mb-2",
|
|
81
|
+
children: e.date
|
|
82
|
+
}), /* @__PURE__ */ o("div", {
|
|
83
|
+
className: "grid grid-cols-2 md:grid-cols-4 gap-3",
|
|
84
|
+
children: [
|
|
85
|
+
/* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("p", {
|
|
86
|
+
className: "text-xs text-muted-foreground",
|
|
87
|
+
children: "Steps"
|
|
88
|
+
}), /* @__PURE__ */ a("p", {
|
|
89
|
+
className: "text-sm font-medium",
|
|
90
|
+
children: e.steps.toLocaleString()
|
|
91
|
+
})] }),
|
|
92
|
+
/* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("p", {
|
|
93
|
+
className: "text-xs text-muted-foreground",
|
|
94
|
+
children: "Calories"
|
|
95
|
+
}), /* @__PURE__ */ o("p", {
|
|
96
|
+
className: "text-sm font-medium",
|
|
97
|
+
children: [e.caloriesBurned, " kcal"]
|
|
98
|
+
})] }),
|
|
99
|
+
/* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("p", {
|
|
100
|
+
className: "text-xs text-muted-foreground",
|
|
101
|
+
children: "Active Min"
|
|
102
|
+
}), /* @__PURE__ */ o("p", {
|
|
103
|
+
className: "text-sm font-medium",
|
|
104
|
+
children: [e.activeMinutes, " min"]
|
|
105
|
+
})] }),
|
|
106
|
+
/* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("p", {
|
|
107
|
+
className: "text-xs text-muted-foreground",
|
|
108
|
+
children: "Avg HR"
|
|
109
|
+
}), /* @__PURE__ */ o("p", {
|
|
110
|
+
className: "text-sm font-medium",
|
|
111
|
+
children: [e.heartRateAvg, " bpm"]
|
|
112
|
+
})] }),
|
|
113
|
+
/* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("p", {
|
|
114
|
+
className: "text-xs text-muted-foreground",
|
|
115
|
+
children: "Sleep"
|
|
116
|
+
}), /* @__PURE__ */ o("p", {
|
|
117
|
+
className: "text-sm font-medium",
|
|
118
|
+
children: [e.sleepHours, " hrs"]
|
|
119
|
+
})] }),
|
|
120
|
+
/* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("p", {
|
|
121
|
+
className: "text-xs text-muted-foreground",
|
|
122
|
+
children: "Water"
|
|
123
|
+
}), /* @__PURE__ */ o("p", {
|
|
124
|
+
className: "text-sm font-medium",
|
|
125
|
+
children: [e.waterIntakeMl, " ml"]
|
|
126
|
+
})] })
|
|
127
|
+
]
|
|
128
|
+
})]
|
|
129
|
+
}, e.id))
|
|
130
|
+
}) })] })
|
|
131
|
+
]
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
//#endregion
|
|
135
|
+
export { d as PatientFitnessTrackingPage };
|
|
136
|
+
|
|
137
|
+
//# sourceMappingURL=PatientFitnessTrackingPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PatientFitnessTrackingPage.js","names":[],"sources":["../../../src/mybodyshield/pages/PatientFitnessTrackingPage.tsx"],"sourcesContent":["import { Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { Footprints, Flame, Timer, MapPin } from 'lucide-react';\nimport { useMyBodyShieldStore } from '../store/mybodyshieldStore';\n\nexport function PatientFitnessTrackingPage() {\n const { fitnessMetrics } = useMyBodyShieldStore();\n const latest = fitnessMetrics[0];\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Fitness Tracking</h1>\n <p className=\"text-sm text-muted-foreground\">\n Daily activity metrics and exercise tracking\n </p>\n </div>\n\n {latest && (\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\">Steps Today</CardTitle>\n <Footprints className=\"h-4 w-4 text-blue-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{latest.steps.toLocaleString()}</div>\n <p className=\"text-xs text-muted-foreground\">Goal: 10,000 steps</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\">Calories Burned</CardTitle>\n <Flame className=\"h-4 w-4 text-orange-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{latest.caloriesBurned.toLocaleString()}</div>\n <p className=\"text-xs text-muted-foreground\">kcal today</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\">Active Minutes</CardTitle>\n <Timer className=\"h-4 w-4 text-green-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{latest.activeMinutes}</div>\n <p className=\"text-xs text-muted-foreground\">Goal: 60 min/day</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\">Distance</CardTitle>\n <MapPin className=\"h-4 w-4 text-purple-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{latest.distanceKm} km</div>\n <p className=\"text-xs text-muted-foreground\">Walking & running</p>\n </CardContent>\n </Card>\n </div>\n )}\n\n <Card>\n <CardHeader>\n <CardTitle>Daily Fitness Log</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-3\">\n {fitnessMetrics.map((metric) => (\n <div key={metric.id} className=\"p-3 rounded-lg bg-muted/50\">\n <p className=\"text-xs font-medium text-muted-foreground mb-2\">{metric.date}</p>\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-3\">\n <div>\n <p className=\"text-xs text-muted-foreground\">Steps</p>\n <p className=\"text-sm font-medium\">{metric.steps.toLocaleString()}</p>\n </div>\n <div>\n <p className=\"text-xs text-muted-foreground\">Calories</p>\n <p className=\"text-sm font-medium\">{metric.caloriesBurned} kcal</p>\n </div>\n <div>\n <p className=\"text-xs text-muted-foreground\">Active Min</p>\n <p className=\"text-sm font-medium\">{metric.activeMinutes} min</p>\n </div>\n <div>\n <p className=\"text-xs text-muted-foreground\">Avg HR</p>\n <p className=\"text-sm font-medium\">{metric.heartRateAvg} bpm</p>\n </div>\n <div>\n <p className=\"text-xs text-muted-foreground\">Sleep</p>\n <p className=\"text-sm font-medium\">{metric.sleepHours} hrs</p>\n </div>\n <div>\n <p className=\"text-xs text-muted-foreground\">Water</p>\n <p className=\"text-sm font-medium\">{metric.waterIntakeMl} ml</p>\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 @@
|
|
|
1
|
+
{"version":3,"file":"PatientHealthGoalsPage.d.ts","sourceRoot":"","sources":["../../../src/mybodyshield/pages/PatientHealthGoalsPage.tsx"],"names":[],"mappings":"AAWA,wBAAgB,sBAAsB,4CAuGrC"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { useMyBodyShieldStore as e } from "../store/mybodyshieldStore.js";
|
|
2
|
+
import { AlertCircle as t, CheckCircle as n, Target as r, TrendingUp 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/PatientHealthGoalsPage.tsx
|
|
6
|
+
var d = {
|
|
7
|
+
"on-track": "bg-green-100 text-green-700",
|
|
8
|
+
behind: "bg-orange-100 text-orange-700",
|
|
9
|
+
completed: "bg-blue-100 text-blue-700",
|
|
10
|
+
"not-started": "bg-gray-100 text-gray-700"
|
|
11
|
+
};
|
|
12
|
+
function f() {
|
|
13
|
+
let { healthGoals: f } = e(), p = f.filter((e) => e.status === "on-track").length, m = f.filter((e) => e.status === "behind").length, h = f.filter((e) => e.status === "completed").length;
|
|
14
|
+
return /* @__PURE__ */ o("div", {
|
|
15
|
+
className: "space-y-6 p-6",
|
|
16
|
+
children: [
|
|
17
|
+
/* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("h1", {
|
|
18
|
+
className: "text-2xl font-semibold",
|
|
19
|
+
children: "Health Goals"
|
|
20
|
+
}), /* @__PURE__ */ a("p", {
|
|
21
|
+
className: "text-sm text-muted-foreground",
|
|
22
|
+
children: "Track your progress towards better health outcomes"
|
|
23
|
+
})] }),
|
|
24
|
+
/* @__PURE__ */ o("div", {
|
|
25
|
+
className: "grid gap-4 md:grid-cols-4",
|
|
26
|
+
children: [
|
|
27
|
+
/* @__PURE__ */ o(s, { children: [/* @__PURE__ */ o(l, {
|
|
28
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
29
|
+
children: [/* @__PURE__ */ a(u, {
|
|
30
|
+
className: "text-sm font-medium",
|
|
31
|
+
children: "Total Goals"
|
|
32
|
+
}), /* @__PURE__ */ a(r, { className: "h-4 w-4 text-blue-500" })]
|
|
33
|
+
}), /* @__PURE__ */ o(c, { children: [/* @__PURE__ */ a("div", {
|
|
34
|
+
className: "text-2xl font-bold",
|
|
35
|
+
children: f.length
|
|
36
|
+
}), /* @__PURE__ */ a("p", {
|
|
37
|
+
className: "text-xs text-muted-foreground",
|
|
38
|
+
children: "Active health targets"
|
|
39
|
+
})] })] }),
|
|
40
|
+
/* @__PURE__ */ o(s, { children: [/* @__PURE__ */ o(l, {
|
|
41
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
42
|
+
children: [/* @__PURE__ */ a(u, {
|
|
43
|
+
className: "text-sm font-medium",
|
|
44
|
+
children: "On Track"
|
|
45
|
+
}), /* @__PURE__ */ a(i, { className: "h-4 w-4 text-green-500" })]
|
|
46
|
+
}), /* @__PURE__ */ o(c, { children: [/* @__PURE__ */ a("div", {
|
|
47
|
+
className: "text-2xl font-bold",
|
|
48
|
+
children: p
|
|
49
|
+
}), /* @__PURE__ */ a("p", {
|
|
50
|
+
className: "text-xs text-muted-foreground",
|
|
51
|
+
children: "Making good progress"
|
|
52
|
+
})] })] }),
|
|
53
|
+
/* @__PURE__ */ o(s, { children: [/* @__PURE__ */ o(l, {
|
|
54
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
55
|
+
children: [/* @__PURE__ */ a(u, {
|
|
56
|
+
className: "text-sm font-medium",
|
|
57
|
+
children: "Behind Schedule"
|
|
58
|
+
}), /* @__PURE__ */ a(t, { className: "h-4 w-4 text-orange-500" })]
|
|
59
|
+
}), /* @__PURE__ */ o(c, { children: [/* @__PURE__ */ a("div", {
|
|
60
|
+
className: "text-2xl font-bold",
|
|
61
|
+
children: m
|
|
62
|
+
}), /* @__PURE__ */ a("p", {
|
|
63
|
+
className: "text-xs text-muted-foreground",
|
|
64
|
+
children: "Needs attention"
|
|
65
|
+
})] })] }),
|
|
66
|
+
/* @__PURE__ */ o(s, { children: [/* @__PURE__ */ o(l, {
|
|
67
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
68
|
+
children: [/* @__PURE__ */ a(u, {
|
|
69
|
+
className: "text-sm font-medium",
|
|
70
|
+
children: "Completed"
|
|
71
|
+
}), /* @__PURE__ */ a(n, { className: "h-4 w-4 text-purple-500" })]
|
|
72
|
+
}), /* @__PURE__ */ o(c, { children: [/* @__PURE__ */ a("div", {
|
|
73
|
+
className: "text-2xl font-bold",
|
|
74
|
+
children: h
|
|
75
|
+
}), /* @__PURE__ */ a("p", {
|
|
76
|
+
className: "text-xs text-muted-foreground",
|
|
77
|
+
children: "Goals achieved"
|
|
78
|
+
})] })] })
|
|
79
|
+
]
|
|
80
|
+
}),
|
|
81
|
+
/* @__PURE__ */ o(s, { children: [/* @__PURE__ */ a(l, { children: /* @__PURE__ */ a(u, { children: "Your Health Goals" }) }), /* @__PURE__ */ a(c, { children: /* @__PURE__ */ a("div", {
|
|
82
|
+
className: "space-y-4",
|
|
83
|
+
children: f.map((e) => {
|
|
84
|
+
let t = Math.min(100, Math.round(e.currentValue / e.targetValue * 100));
|
|
85
|
+
return /* @__PURE__ */ o("div", {
|
|
86
|
+
className: "p-4 rounded-lg border",
|
|
87
|
+
children: [/* @__PURE__ */ o("div", {
|
|
88
|
+
className: "flex items-center justify-between mb-2",
|
|
89
|
+
children: [/* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("p", {
|
|
90
|
+
className: "text-sm font-medium",
|
|
91
|
+
children: e.title
|
|
92
|
+
}), /* @__PURE__ */ o("p", {
|
|
93
|
+
className: "text-xs text-muted-foreground",
|
|
94
|
+
children: [
|
|
95
|
+
e.category,
|
|
96
|
+
" · Deadline: ",
|
|
97
|
+
e.deadline
|
|
98
|
+
]
|
|
99
|
+
})] }), /* @__PURE__ */ a("span", {
|
|
100
|
+
className: `text-xs font-medium px-2 py-0.5 rounded-full ${d[e.status]}`,
|
|
101
|
+
children: e.status
|
|
102
|
+
})]
|
|
103
|
+
}), /* @__PURE__ */ o("div", {
|
|
104
|
+
className: "flex items-center gap-3",
|
|
105
|
+
children: [/* @__PURE__ */ a("div", {
|
|
106
|
+
className: "flex-1 h-2 bg-muted rounded-full overflow-hidden",
|
|
107
|
+
children: /* @__PURE__ */ a("div", {
|
|
108
|
+
className: `h-2 rounded-full ${e.status === "behind" ? "bg-orange-500" : "bg-primary"}`,
|
|
109
|
+
style: { width: `${t}%` }
|
|
110
|
+
})
|
|
111
|
+
}), /* @__PURE__ */ o("span", {
|
|
112
|
+
className: "text-xs font-medium w-20 text-right",
|
|
113
|
+
children: [
|
|
114
|
+
e.currentValue,
|
|
115
|
+
" / ",
|
|
116
|
+
e.targetValue,
|
|
117
|
+
" ",
|
|
118
|
+
e.unit
|
|
119
|
+
]
|
|
120
|
+
})]
|
|
121
|
+
})]
|
|
122
|
+
}, e.id);
|
|
123
|
+
})
|
|
124
|
+
}) })] })
|
|
125
|
+
]
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
//#endregion
|
|
129
|
+
export { f as PatientHealthGoalsPage };
|
|
130
|
+
|
|
131
|
+
//# sourceMappingURL=PatientHealthGoalsPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PatientHealthGoalsPage.js","names":[],"sources":["../../../src/mybodyshield/pages/PatientHealthGoalsPage.tsx"],"sourcesContent":["import { Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { Target, TrendingUp, AlertCircle, CheckCircle } from 'lucide-react';\nimport { useMyBodyShieldStore } from '../store/mybodyshieldStore';\n\nconst statusColors: Record<string, string> = {\n 'on-track': 'bg-green-100 text-green-700',\n behind: 'bg-orange-100 text-orange-700',\n completed: 'bg-blue-100 text-blue-700',\n 'not-started': 'bg-gray-100 text-gray-700',\n};\n\nexport function PatientHealthGoalsPage() {\n const { healthGoals } = useMyBodyShieldStore();\n const onTrack = healthGoals.filter((g) => g.status === 'on-track').length;\n const behind = healthGoals.filter((g) => g.status === 'behind').length;\n const completed = healthGoals.filter((g) => g.status === 'completed').length;\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Health Goals</h1>\n <p className=\"text-sm text-muted-foreground\">\n Track your progress towards better health 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\">Total Goals</CardTitle>\n <Target className=\"h-4 w-4 text-blue-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{healthGoals.length}</div>\n <p className=\"text-xs text-muted-foreground\">Active health targets</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\">On Track</CardTitle>\n <TrendingUp className=\"h-4 w-4 text-green-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{onTrack}</div>\n <p className=\"text-xs text-muted-foreground\">Making good progress</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\">Behind Schedule</CardTitle>\n <AlertCircle className=\"h-4 w-4 text-orange-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{behind}</div>\n <p className=\"text-xs text-muted-foreground\">Needs attention</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\">Goals achieved</p>\n </CardContent>\n </Card>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>Your Health Goals</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-4\">\n {healthGoals.map((goal) => {\n const progress = Math.min(\n 100,\n Math.round((goal.currentValue / goal.targetValue) * 100)\n );\n return (\n <div key={goal.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\">{goal.title}</p>\n <p className=\"text-xs text-muted-foreground\">\n {goal.category} · Deadline: {goal.deadline}\n </p>\n </div>\n <span\n className={`text-xs font-medium px-2 py-0.5 rounded-full ${statusColors[goal.status]}`}\n >\n {goal.status}\n </span>\n </div>\n <div className=\"flex items-center gap-3\">\n <div className=\"flex-1 h-2 bg-muted rounded-full overflow-hidden\">\n <div\n className={`h-2 rounded-full ${goal.status === 'behind' ? 'bg-orange-500' : 'bg-primary'}`}\n style={{ width: `${progress}%` }}\n />\n </div>\n <span className=\"text-xs font-medium w-20 text-right\">\n {goal.currentValue} / {goal.targetValue} {goal.unit}\n </span>\n </div>\n </div>\n );\n })}\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PatientHealthOverviewPage.d.ts","sourceRoot":"","sources":["../../../src/mybodyshield/pages/PatientHealthOverviewPage.tsx"],"names":[],"mappings":"AAIA,wBAAgB,yBAAyB,4CAuMxC"}
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import { useMyBodyShieldStore as e } from "../store/mybodyshieldStore.js";
|
|
2
|
+
import { Activity as t, Calendar as n, FlaskConical as r, Heart as i, Pill as a, User as o } from "lucide-react";
|
|
3
|
+
import { jsx as s, jsxs as c } from "react/jsx-runtime";
|
|
4
|
+
import { Card as l, CardContent as u, CardHeader as d, CardTitle as f } from "@burdenoff/fe-libs/ui";
|
|
5
|
+
//#region src/mybodyshield/pages/PatientHealthOverviewPage.tsx
|
|
6
|
+
function p() {
|
|
7
|
+
let { patients: p, medications: m, appointments: h, vitalSigns: g, labResults: _ } = e(), v = p[0], y = g[0], b = m.filter((e) => e.isActive);
|
|
8
|
+
return /* @__PURE__ */ c("div", {
|
|
9
|
+
className: "space-y-6 p-6",
|
|
10
|
+
children: [
|
|
11
|
+
/* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("h1", {
|
|
12
|
+
className: "text-2xl font-semibold",
|
|
13
|
+
children: "Health Overview"
|
|
14
|
+
}), /* @__PURE__ */ s("p", {
|
|
15
|
+
className: "text-sm text-muted-foreground",
|
|
16
|
+
children: "Comprehensive view of your health profile"
|
|
17
|
+
})] }),
|
|
18
|
+
/* @__PURE__ */ c("div", {
|
|
19
|
+
className: "grid gap-4 md:grid-cols-4",
|
|
20
|
+
children: [
|
|
21
|
+
/* @__PURE__ */ c(l, { children: [/* @__PURE__ */ c(d, {
|
|
22
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
23
|
+
children: [/* @__PURE__ */ s(f, {
|
|
24
|
+
className: "text-sm font-medium",
|
|
25
|
+
children: "Health Score"
|
|
26
|
+
}), /* @__PURE__ */ s(i, { className: "h-4 w-4 text-red-500" })]
|
|
27
|
+
}), /* @__PURE__ */ c(u, { children: [/* @__PURE__ */ s("div", {
|
|
28
|
+
className: "text-2xl font-bold",
|
|
29
|
+
children: "82/100"
|
|
30
|
+
}), /* @__PURE__ */ s("p", {
|
|
31
|
+
className: "text-xs text-muted-foreground",
|
|
32
|
+
children: "Good overall health"
|
|
33
|
+
})] })] }),
|
|
34
|
+
/* @__PURE__ */ c(l, { children: [/* @__PURE__ */ c(d, {
|
|
35
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
36
|
+
children: [/* @__PURE__ */ s(f, {
|
|
37
|
+
className: "text-sm font-medium",
|
|
38
|
+
children: "Active Conditions"
|
|
39
|
+
}), /* @__PURE__ */ s(t, { className: "h-4 w-4 text-orange-500" })]
|
|
40
|
+
}), /* @__PURE__ */ c(u, { children: [/* @__PURE__ */ s("div", {
|
|
41
|
+
className: "text-2xl font-bold",
|
|
42
|
+
children: v?.conditions.length ?? 0
|
|
43
|
+
}), /* @__PURE__ */ s("p", {
|
|
44
|
+
className: "text-xs text-muted-foreground",
|
|
45
|
+
children: "Being managed"
|
|
46
|
+
})] })] }),
|
|
47
|
+
/* @__PURE__ */ c(l, { children: [/* @__PURE__ */ c(d, {
|
|
48
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
49
|
+
children: [/* @__PURE__ */ s(f, {
|
|
50
|
+
className: "text-sm font-medium",
|
|
51
|
+
children: "Medications"
|
|
52
|
+
}), /* @__PURE__ */ s(a, { className: "h-4 w-4 text-blue-500" })]
|
|
53
|
+
}), /* @__PURE__ */ c(u, { children: [/* @__PURE__ */ s("div", {
|
|
54
|
+
className: "text-2xl font-bold",
|
|
55
|
+
children: b.length
|
|
56
|
+
}), /* @__PURE__ */ s("p", {
|
|
57
|
+
className: "text-xs text-muted-foreground",
|
|
58
|
+
children: "Currently active"
|
|
59
|
+
})] })] }),
|
|
60
|
+
/* @__PURE__ */ c(l, { children: [/* @__PURE__ */ c(d, {
|
|
61
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
62
|
+
children: [/* @__PURE__ */ s(f, {
|
|
63
|
+
className: "text-sm font-medium",
|
|
64
|
+
children: "Appointments"
|
|
65
|
+
}), /* @__PURE__ */ s(n, { className: "h-4 w-4 text-green-500" })]
|
|
66
|
+
}), /* @__PURE__ */ c(u, { children: [/* @__PURE__ */ s("div", {
|
|
67
|
+
className: "text-2xl font-bold",
|
|
68
|
+
children: h.length
|
|
69
|
+
}), /* @__PURE__ */ s("p", {
|
|
70
|
+
className: "text-xs text-muted-foreground",
|
|
71
|
+
children: "Scheduled visits"
|
|
72
|
+
})] })] })
|
|
73
|
+
]
|
|
74
|
+
}),
|
|
75
|
+
/* @__PURE__ */ c("div", {
|
|
76
|
+
className: "grid gap-4 md:grid-cols-2",
|
|
77
|
+
children: [v && /* @__PURE__ */ c(l, { children: [/* @__PURE__ */ s(d, { children: /* @__PURE__ */ c(f, {
|
|
78
|
+
className: "flex items-center gap-2",
|
|
79
|
+
children: [/* @__PURE__ */ s(o, { className: "h-5 w-5" }), "Patient Profile"]
|
|
80
|
+
}) }), /* @__PURE__ */ s(u, { children: /* @__PURE__ */ c("div", {
|
|
81
|
+
className: "space-y-3",
|
|
82
|
+
children: [
|
|
83
|
+
/* @__PURE__ */ c("div", {
|
|
84
|
+
className: "grid grid-cols-2 gap-2 text-sm",
|
|
85
|
+
children: [
|
|
86
|
+
/* @__PURE__ */ c("div", { children: [
|
|
87
|
+
/* @__PURE__ */ s("span", {
|
|
88
|
+
className: "text-muted-foreground",
|
|
89
|
+
children: "Name:"
|
|
90
|
+
}),
|
|
91
|
+
" ",
|
|
92
|
+
/* @__PURE__ */ c("span", {
|
|
93
|
+
className: "font-medium",
|
|
94
|
+
children: [
|
|
95
|
+
v.firstName,
|
|
96
|
+
" ",
|
|
97
|
+
v.lastName
|
|
98
|
+
]
|
|
99
|
+
})
|
|
100
|
+
] }),
|
|
101
|
+
/* @__PURE__ */ c("div", { children: [
|
|
102
|
+
/* @__PURE__ */ s("span", {
|
|
103
|
+
className: "text-muted-foreground",
|
|
104
|
+
children: "DOB:"
|
|
105
|
+
}),
|
|
106
|
+
" ",
|
|
107
|
+
/* @__PURE__ */ s("span", {
|
|
108
|
+
className: "font-medium",
|
|
109
|
+
children: v.dateOfBirth
|
|
110
|
+
})
|
|
111
|
+
] }),
|
|
112
|
+
/* @__PURE__ */ c("div", { children: [
|
|
113
|
+
/* @__PURE__ */ s("span", {
|
|
114
|
+
className: "text-muted-foreground",
|
|
115
|
+
children: "Gender:"
|
|
116
|
+
}),
|
|
117
|
+
" ",
|
|
118
|
+
/* @__PURE__ */ s("span", {
|
|
119
|
+
className: "font-medium",
|
|
120
|
+
children: v.gender
|
|
121
|
+
})
|
|
122
|
+
] }),
|
|
123
|
+
/* @__PURE__ */ c("div", { children: [
|
|
124
|
+
/* @__PURE__ */ s("span", {
|
|
125
|
+
className: "text-muted-foreground",
|
|
126
|
+
children: "Blood Type:"
|
|
127
|
+
}),
|
|
128
|
+
" ",
|
|
129
|
+
/* @__PURE__ */ s("span", {
|
|
130
|
+
className: "font-medium",
|
|
131
|
+
children: v.bloodType
|
|
132
|
+
})
|
|
133
|
+
] }),
|
|
134
|
+
/* @__PURE__ */ c("div", { children: [
|
|
135
|
+
/* @__PURE__ */ s("span", {
|
|
136
|
+
className: "text-muted-foreground",
|
|
137
|
+
children: "Insurance:"
|
|
138
|
+
}),
|
|
139
|
+
" ",
|
|
140
|
+
/* @__PURE__ */ s("span", {
|
|
141
|
+
className: "font-medium",
|
|
142
|
+
children: v.insuranceProvider
|
|
143
|
+
})
|
|
144
|
+
] }),
|
|
145
|
+
/* @__PURE__ */ c("div", { children: [
|
|
146
|
+
/* @__PURE__ */ s("span", {
|
|
147
|
+
className: "text-muted-foreground",
|
|
148
|
+
children: "Last Visit:"
|
|
149
|
+
}),
|
|
150
|
+
" ",
|
|
151
|
+
/* @__PURE__ */ s("span", {
|
|
152
|
+
className: "font-medium",
|
|
153
|
+
children: v.lastVisit
|
|
154
|
+
})
|
|
155
|
+
] })
|
|
156
|
+
]
|
|
157
|
+
}),
|
|
158
|
+
/* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("p", {
|
|
159
|
+
className: "text-xs text-muted-foreground mb-1",
|
|
160
|
+
children: "Conditions"
|
|
161
|
+
}), /* @__PURE__ */ s("div", {
|
|
162
|
+
className: "flex gap-1 flex-wrap",
|
|
163
|
+
children: v.conditions.map((e, t) => /* @__PURE__ */ s("span", {
|
|
164
|
+
className: "text-xs px-2 py-0.5 rounded-full bg-orange-100 text-orange-700",
|
|
165
|
+
children: e
|
|
166
|
+
}, t))
|
|
167
|
+
})] }),
|
|
168
|
+
/* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("p", {
|
|
169
|
+
className: "text-xs text-muted-foreground mb-1",
|
|
170
|
+
children: "Allergies"
|
|
171
|
+
}), /* @__PURE__ */ s("div", {
|
|
172
|
+
className: "flex gap-1 flex-wrap",
|
|
173
|
+
children: v.allergies.length > 0 ? v.allergies.map((e, t) => /* @__PURE__ */ s("span", {
|
|
174
|
+
className: "text-xs px-2 py-0.5 rounded-full bg-red-100 text-red-700",
|
|
175
|
+
children: e
|
|
176
|
+
}, t)) : /* @__PURE__ */ s("span", {
|
|
177
|
+
className: "text-xs text-muted-foreground",
|
|
178
|
+
children: "None reported"
|
|
179
|
+
})
|
|
180
|
+
})] })
|
|
181
|
+
]
|
|
182
|
+
}) })] }), /* @__PURE__ */ c("div", {
|
|
183
|
+
className: "space-y-4",
|
|
184
|
+
children: [y && /* @__PURE__ */ c(l, { children: [/* @__PURE__ */ s(d, { children: /* @__PURE__ */ c(f, {
|
|
185
|
+
className: "flex items-center gap-2",
|
|
186
|
+
children: [/* @__PURE__ */ s(t, { className: "h-5 w-5" }), "Latest Vitals"]
|
|
187
|
+
}) }), /* @__PURE__ */ s(u, { children: /* @__PURE__ */ c("div", {
|
|
188
|
+
className: "grid grid-cols-2 gap-3",
|
|
189
|
+
children: [
|
|
190
|
+
/* @__PURE__ */ c("div", {
|
|
191
|
+
className: "p-2 rounded bg-muted/50",
|
|
192
|
+
children: [/* @__PURE__ */ s("p", {
|
|
193
|
+
className: "text-xs text-muted-foreground",
|
|
194
|
+
children: "Blood Pressure"
|
|
195
|
+
}), /* @__PURE__ */ c("p", {
|
|
196
|
+
className: "text-sm font-medium",
|
|
197
|
+
children: [
|
|
198
|
+
y.bloodPressureSystolic,
|
|
199
|
+
"/",
|
|
200
|
+
y.bloodPressureDiastolic,
|
|
201
|
+
" mmHg"
|
|
202
|
+
]
|
|
203
|
+
})]
|
|
204
|
+
}),
|
|
205
|
+
/* @__PURE__ */ c("div", {
|
|
206
|
+
className: "p-2 rounded bg-muted/50",
|
|
207
|
+
children: [/* @__PURE__ */ s("p", {
|
|
208
|
+
className: "text-xs text-muted-foreground",
|
|
209
|
+
children: "Heart Rate"
|
|
210
|
+
}), /* @__PURE__ */ c("p", {
|
|
211
|
+
className: "text-sm font-medium",
|
|
212
|
+
children: [y.heartRate, " bpm"]
|
|
213
|
+
})]
|
|
214
|
+
}),
|
|
215
|
+
/* @__PURE__ */ c("div", {
|
|
216
|
+
className: "p-2 rounded bg-muted/50",
|
|
217
|
+
children: [/* @__PURE__ */ s("p", {
|
|
218
|
+
className: "text-xs text-muted-foreground",
|
|
219
|
+
children: "SpO2"
|
|
220
|
+
}), /* @__PURE__ */ c("p", {
|
|
221
|
+
className: "text-sm font-medium",
|
|
222
|
+
children: [y.oxygenSaturation, "%"]
|
|
223
|
+
})]
|
|
224
|
+
}),
|
|
225
|
+
/* @__PURE__ */ c("div", {
|
|
226
|
+
className: "p-2 rounded bg-muted/50",
|
|
227
|
+
children: [/* @__PURE__ */ s("p", {
|
|
228
|
+
className: "text-xs text-muted-foreground",
|
|
229
|
+
children: "BMI"
|
|
230
|
+
}), /* @__PURE__ */ s("p", {
|
|
231
|
+
className: "text-sm font-medium",
|
|
232
|
+
children: y.bmi
|
|
233
|
+
})]
|
|
234
|
+
})
|
|
235
|
+
]
|
|
236
|
+
}) })] }), /* @__PURE__ */ c(l, { children: [/* @__PURE__ */ s(d, { children: /* @__PURE__ */ c(f, {
|
|
237
|
+
className: "flex items-center gap-2",
|
|
238
|
+
children: [/* @__PURE__ */ s(r, { className: "h-5 w-5" }), "Recent Lab Results"]
|
|
239
|
+
}) }), /* @__PURE__ */ s(u, { children: /* @__PURE__ */ s("div", {
|
|
240
|
+
className: "space-y-2",
|
|
241
|
+
children: _.slice(0, 3).map((e) => /* @__PURE__ */ c("div", {
|
|
242
|
+
className: "flex items-center justify-between p-2 rounded bg-muted/50",
|
|
243
|
+
children: [/* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("p", {
|
|
244
|
+
className: "text-sm font-medium",
|
|
245
|
+
children: e.testName
|
|
246
|
+
}), /* @__PURE__ */ s("p", {
|
|
247
|
+
className: "text-xs text-muted-foreground",
|
|
248
|
+
children: e.resultDate
|
|
249
|
+
})] }), /* @__PURE__ */ c("div", {
|
|
250
|
+
className: "text-right",
|
|
251
|
+
children: [/* @__PURE__ */ c("p", {
|
|
252
|
+
className: "text-sm font-medium",
|
|
253
|
+
children: [
|
|
254
|
+
e.value,
|
|
255
|
+
" ",
|
|
256
|
+
e.unit
|
|
257
|
+
]
|
|
258
|
+
}), /* @__PURE__ */ s("span", {
|
|
259
|
+
className: `text-xs px-1.5 py-0.5 rounded-full ${e.status === "normal" ? "bg-green-100 text-green-700" : "bg-orange-100 text-orange-700"}`,
|
|
260
|
+
children: e.status
|
|
261
|
+
})]
|
|
262
|
+
})]
|
|
263
|
+
}, e.id))
|
|
264
|
+
}) })] })]
|
|
265
|
+
})]
|
|
266
|
+
})
|
|
267
|
+
]
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
//#endregion
|
|
271
|
+
export { p as PatientHealthOverviewPage };
|
|
272
|
+
|
|
273
|
+
//# sourceMappingURL=PatientHealthOverviewPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PatientHealthOverviewPage.js","names":[],"sources":["../../../src/mybodyshield/pages/PatientHealthOverviewPage.tsx"],"sourcesContent":["import { Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { Heart, Activity, Pill, Calendar, User, FlaskConical } from 'lucide-react';\nimport { useMyBodyShieldStore } from '../store/mybodyshieldStore';\n\nexport function PatientHealthOverviewPage() {\n const { patients, medications, appointments, vitalSigns, labResults } = useMyBodyShieldStore();\n const patient = patients[0];\n const latestVital = vitalSigns[0];\n const activeMeds = medications.filter((m) => m.isActive);\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Health Overview</h1>\n <p className=\"text-sm text-muted-foreground\">Comprehensive view of your health profile</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\">Health Score</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\">Good overall health</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\">Active Conditions</CardTitle>\n <Activity className=\"h-4 w-4 text-orange-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{patient?.conditions.length ?? 0}</div>\n <p className=\"text-xs text-muted-foreground\">Being managed</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\">Medications</CardTitle>\n <Pill className=\"h-4 w-4 text-blue-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{activeMeds.length}</div>\n <p className=\"text-xs text-muted-foreground\">Currently active</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\">Appointments</CardTitle>\n <Calendar className=\"h-4 w-4 text-green-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{appointments.length}</div>\n <p className=\"text-xs text-muted-foreground\">Scheduled visits</p>\n </CardContent>\n </Card>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-2\">\n {patient && (\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <User className=\"h-5 w-5\" />\n Patient Profile\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-3\">\n <div className=\"grid grid-cols-2 gap-2 text-sm\">\n <div>\n <span className=\"text-muted-foreground\">Name:</span>{' '}\n <span className=\"font-medium\">\n {patient.firstName} {patient.lastName}\n </span>\n </div>\n <div>\n <span className=\"text-muted-foreground\">DOB:</span>{' '}\n <span className=\"font-medium\">{patient.dateOfBirth}</span>\n </div>\n <div>\n <span className=\"text-muted-foreground\">Gender:</span>{' '}\n <span className=\"font-medium\">{patient.gender}</span>\n </div>\n <div>\n <span className=\"text-muted-foreground\">Blood Type:</span>{' '}\n <span className=\"font-medium\">{patient.bloodType}</span>\n </div>\n <div>\n <span className=\"text-muted-foreground\">Insurance:</span>{' '}\n <span className=\"font-medium\">{patient.insuranceProvider}</span>\n </div>\n <div>\n <span className=\"text-muted-foreground\">Last Visit:</span>{' '}\n <span className=\"font-medium\">{patient.lastVisit}</span>\n </div>\n </div>\n <div>\n <p className=\"text-xs text-muted-foreground mb-1\">Conditions</p>\n <div className=\"flex gap-1 flex-wrap\">\n {patient.conditions.map((c, i) => (\n <span\n key={i}\n className=\"text-xs px-2 py-0.5 rounded-full bg-orange-100 text-orange-700\"\n >\n {c}\n </span>\n ))}\n </div>\n </div>\n <div>\n <p className=\"text-xs text-muted-foreground mb-1\">Allergies</p>\n <div className=\"flex gap-1 flex-wrap\">\n {patient.allergies.length > 0 ? (\n patient.allergies.map((a, i) => (\n <span\n key={i}\n className=\"text-xs px-2 py-0.5 rounded-full bg-red-100 text-red-700\"\n >\n {a}\n </span>\n ))\n ) : (\n <span className=\"text-xs text-muted-foreground\">None reported</span>\n )}\n </div>\n </div>\n </div>\n </CardContent>\n </Card>\n )}\n <div className=\"space-y-4\">\n {latestVital && (\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Activity className=\"h-5 w-5\" />\n Latest Vitals\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"grid grid-cols-2 gap-3\">\n <div className=\"p-2 rounded bg-muted/50\">\n <p className=\"text-xs text-muted-foreground\">Blood Pressure</p>\n <p className=\"text-sm font-medium\">\n {latestVital.bloodPressureSystolic}/{latestVital.bloodPressureDiastolic} mmHg\n </p>\n </div>\n <div className=\"p-2 rounded bg-muted/50\">\n <p className=\"text-xs text-muted-foreground\">Heart Rate</p>\n <p className=\"text-sm font-medium\">{latestVital.heartRate} bpm</p>\n </div>\n <div className=\"p-2 rounded bg-muted/50\">\n <p className=\"text-xs text-muted-foreground\">SpO2</p>\n <p className=\"text-sm font-medium\">{latestVital.oxygenSaturation}%</p>\n </div>\n <div className=\"p-2 rounded bg-muted/50\">\n <p className=\"text-xs text-muted-foreground\">BMI</p>\n <p className=\"text-sm font-medium\">{latestVital.bmi}</p>\n </div>\n </div>\n </CardContent>\n </Card>\n )}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <FlaskConical className=\"h-5 w-5\" />\n Recent Lab Results\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-2\">\n {labResults.slice(0, 3).map((lab) => (\n <div\n key={lab.id}\n className=\"flex items-center justify-between p-2 rounded bg-muted/50\"\n >\n <div>\n <p className=\"text-sm font-medium\">{lab.testName}</p>\n <p className=\"text-xs text-muted-foreground\">{lab.resultDate}</p>\n </div>\n <div className=\"text-right\">\n <p className=\"text-sm font-medium\">\n {lab.value} {lab.unit}\n </p>\n <span\n className={`text-xs px-1.5 py-0.5 rounded-full ${lab.status === 'normal' ? 'bg-green-100 text-green-700' : 'bg-orange-100 text-orange-700'}`}\n >\n {lab.status}\n </span>\n </div>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PatientLabResultsPage.d.ts","sourceRoot":"","sources":["../../../src/mybodyshield/pages/PatientLabResultsPage.tsx"],"names":[],"mappings":"AAWA,wBAAgB,qBAAqB,4CAkGpC"}
|