@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.
Files changed (210) hide show
  1. package/README.md +12 -0
  2. package/dist/dev/main.d.ts +2 -0
  3. package/dist/dev/main.d.ts.map +1 -0
  4. package/dist/generated/global-operations.d.ts +2 -0
  5. package/dist/generated/global-operations.d.ts.map +1 -0
  6. package/dist/generated/global-types.d.ts +18199 -0
  7. package/dist/generated/global-types.d.ts.map +1 -0
  8. package/dist/generated/wspace-operations.d.ts +2 -0
  9. package/dist/generated/wspace-operations.d.ts.map +1 -0
  10. package/dist/generated/wspace-types.d.ts +43046 -0
  11. package/dist/generated/wspace-types.d.ts.map +1 -0
  12. package/dist/index.d.ts +2 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +5 -0
  15. package/dist/mybodyshield/MyBodyShieldRoot.d.ts +5 -0
  16. package/dist/mybodyshield/MyBodyShieldRoot.d.ts.map +1 -0
  17. package/dist/mybodyshield/MyBodyShieldRoot.js +364 -0
  18. package/dist/mybodyshield/MyBodyShieldRoot.js.map +1 -0
  19. package/dist/mybodyshield/MyBodyShieldRoutes.d.ts +2 -0
  20. package/dist/mybodyshield/MyBodyShieldRoutes.d.ts.map +1 -0
  21. package/dist/mybodyshield/MyBodyShieldRoutes.js +199 -0
  22. package/dist/mybodyshield/MyBodyShieldRoutes.js.map +1 -0
  23. package/dist/mybodyshield/index.d.ts +5 -0
  24. package/dist/mybodyshield/index.d.ts.map +1 -0
  25. package/dist/mybodyshield/index.js +3 -0
  26. package/dist/mybodyshield/pages/AdminAiinsightsPage.d.ts +2 -0
  27. package/dist/mybodyshield/pages/AdminAiinsightsPage.d.ts.map +1 -0
  28. package/dist/mybodyshield/pages/AdminAiinsightsPage.js +161 -0
  29. package/dist/mybodyshield/pages/AdminAiinsightsPage.js.map +1 -0
  30. package/dist/mybodyshield/pages/AdminAnalyticsPage.d.ts +2 -0
  31. package/dist/mybodyshield/pages/AdminAnalyticsPage.d.ts.map +1 -0
  32. package/dist/mybodyshield/pages/AdminAnalyticsPage.js +193 -0
  33. package/dist/mybodyshield/pages/AdminAnalyticsPage.js.map +1 -0
  34. package/dist/mybodyshield/pages/AdminComplianceReportsPage.d.ts +2 -0
  35. package/dist/mybodyshield/pages/AdminComplianceReportsPage.d.ts.map +1 -0
  36. package/dist/mybodyshield/pages/AdminComplianceReportsPage.js +214 -0
  37. package/dist/mybodyshield/pages/AdminComplianceReportsPage.js.map +1 -0
  38. package/dist/mybodyshield/pages/AdminDashboardPage.d.ts +2 -0
  39. package/dist/mybodyshield/pages/AdminDashboardPage.d.ts.map +1 -0
  40. package/dist/mybodyshield/pages/AdminDashboardPage.js +186 -0
  41. package/dist/mybodyshield/pages/AdminDashboardPage.js.map +1 -0
  42. package/dist/mybodyshield/pages/AdminOrganizationManagementPage.d.ts +2 -0
  43. package/dist/mybodyshield/pages/AdminOrganizationManagementPage.d.ts.map +1 -0
  44. package/dist/mybodyshield/pages/AdminOrganizationManagementPage.js +252 -0
  45. package/dist/mybodyshield/pages/AdminOrganizationManagementPage.js.map +1 -0
  46. package/dist/mybodyshield/pages/AdminSystemSettingsPage.d.ts +2 -0
  47. package/dist/mybodyshield/pages/AdminSystemSettingsPage.d.ts.map +1 -0
  48. package/dist/mybodyshield/pages/AdminSystemSettingsPage.js +159 -0
  49. package/dist/mybodyshield/pages/AdminSystemSettingsPage.js.map +1 -0
  50. package/dist/mybodyshield/pages/AdminUserManagementPage.d.ts +2 -0
  51. package/dist/mybodyshield/pages/AdminUserManagementPage.d.ts.map +1 -0
  52. package/dist/mybodyshield/pages/AdminUserManagementPage.js +208 -0
  53. package/dist/mybodyshield/pages/AdminUserManagementPage.js.map +1 -0
  54. package/dist/mybodyshield/pages/FitnessAssessmentsPage.d.ts +2 -0
  55. package/dist/mybodyshield/pages/FitnessAssessmentsPage.d.ts.map +1 -0
  56. package/dist/mybodyshield/pages/FitnessAssessmentsPage.js +194 -0
  57. package/dist/mybodyshield/pages/FitnessAssessmentsPage.js.map +1 -0
  58. package/dist/mybodyshield/pages/FitnessClientDetailsPage.d.ts +2 -0
  59. package/dist/mybodyshield/pages/FitnessClientDetailsPage.d.ts.map +1 -0
  60. package/dist/mybodyshield/pages/FitnessClientDetailsPage.js +192 -0
  61. package/dist/mybodyshield/pages/FitnessClientDetailsPage.js.map +1 -0
  62. package/dist/mybodyshield/pages/FitnessClientManagementPage.d.ts +2 -0
  63. package/dist/mybodyshield/pages/FitnessClientManagementPage.d.ts.map +1 -0
  64. package/dist/mybodyshield/pages/FitnessClientManagementPage.js +128 -0
  65. package/dist/mybodyshield/pages/FitnessClientManagementPage.js.map +1 -0
  66. package/dist/mybodyshield/pages/FitnessDashboardPage.d.ts +2 -0
  67. package/dist/mybodyshield/pages/FitnessDashboardPage.d.ts.map +1 -0
  68. package/dist/mybodyshield/pages/FitnessDashboardPage.js +156 -0
  69. package/dist/mybodyshield/pages/FitnessDashboardPage.js.map +1 -0
  70. package/dist/mybodyshield/pages/FitnessReportsPage.d.ts +2 -0
  71. package/dist/mybodyshield/pages/FitnessReportsPage.d.ts.map +1 -0
  72. package/dist/mybodyshield/pages/FitnessReportsPage.js +138 -0
  73. package/dist/mybodyshield/pages/FitnessReportsPage.js.map +1 -0
  74. package/dist/mybodyshield/pages/FitnessWorkoutPlansPage.d.ts +2 -0
  75. package/dist/mybodyshield/pages/FitnessWorkoutPlansPage.d.ts.map +1 -0
  76. package/dist/mybodyshield/pages/FitnessWorkoutPlansPage.js +176 -0
  77. package/dist/mybodyshield/pages/FitnessWorkoutPlansPage.js.map +1 -0
  78. package/dist/mybodyshield/pages/PatientAppointmentsPage.d.ts +2 -0
  79. package/dist/mybodyshield/pages/PatientAppointmentsPage.d.ts.map +1 -0
  80. package/dist/mybodyshield/pages/PatientAppointmentsPage.js +132 -0
  81. package/dist/mybodyshield/pages/PatientAppointmentsPage.js.map +1 -0
  82. package/dist/mybodyshield/pages/PatientDashboardPage.d.ts +2 -0
  83. package/dist/mybodyshield/pages/PatientDashboardPage.d.ts.map +1 -0
  84. package/dist/mybodyshield/pages/PatientDashboardPage.js +190 -0
  85. package/dist/mybodyshield/pages/PatientDashboardPage.js.map +1 -0
  86. package/dist/mybodyshield/pages/PatientFitnessTrackingPage.d.ts +2 -0
  87. package/dist/mybodyshield/pages/PatientFitnessTrackingPage.d.ts.map +1 -0
  88. package/dist/mybodyshield/pages/PatientFitnessTrackingPage.js +137 -0
  89. package/dist/mybodyshield/pages/PatientFitnessTrackingPage.js.map +1 -0
  90. package/dist/mybodyshield/pages/PatientHealthGoalsPage.d.ts +2 -0
  91. package/dist/mybodyshield/pages/PatientHealthGoalsPage.d.ts.map +1 -0
  92. package/dist/mybodyshield/pages/PatientHealthGoalsPage.js +131 -0
  93. package/dist/mybodyshield/pages/PatientHealthGoalsPage.js.map +1 -0
  94. package/dist/mybodyshield/pages/PatientHealthOverviewPage.d.ts +2 -0
  95. package/dist/mybodyshield/pages/PatientHealthOverviewPage.d.ts.map +1 -0
  96. package/dist/mybodyshield/pages/PatientHealthOverviewPage.js +273 -0
  97. package/dist/mybodyshield/pages/PatientHealthOverviewPage.js.map +1 -0
  98. package/dist/mybodyshield/pages/PatientLabResultsPage.d.ts +2 -0
  99. package/dist/mybodyshield/pages/PatientLabResultsPage.d.ts.map +1 -0
  100. package/dist/mybodyshield/pages/PatientLabResultsPage.js +133 -0
  101. package/dist/mybodyshield/pages/PatientLabResultsPage.js.map +1 -0
  102. package/dist/mybodyshield/pages/PatientMedicationsPage.d.ts +2 -0
  103. package/dist/mybodyshield/pages/PatientMedicationsPage.d.ts.map +1 -0
  104. package/dist/mybodyshield/pages/PatientMedicationsPage.js +158 -0
  105. package/dist/mybodyshield/pages/PatientMedicationsPage.js.map +1 -0
  106. package/dist/mybodyshield/pages/PatientMentalHealthPage.d.ts +2 -0
  107. package/dist/mybodyshield/pages/PatientMentalHealthPage.d.ts.map +1 -0
  108. package/dist/mybodyshield/pages/PatientMentalHealthPage.js +152 -0
  109. package/dist/mybodyshield/pages/PatientMentalHealthPage.js.map +1 -0
  110. package/dist/mybodyshield/pages/PatientNutritionTrackingPage.d.ts +2 -0
  111. package/dist/mybodyshield/pages/PatientNutritionTrackingPage.d.ts.map +1 -0
  112. package/dist/mybodyshield/pages/PatientNutritionTrackingPage.js +141 -0
  113. package/dist/mybodyshield/pages/PatientNutritionTrackingPage.js.map +1 -0
  114. package/dist/mybodyshield/pages/PatientVitalSignsPage.d.ts +2 -0
  115. package/dist/mybodyshield/pages/PatientVitalSignsPage.d.ts.map +1 -0
  116. package/dist/mybodyshield/pages/PatientVitalSignsPage.js +160 -0
  117. package/dist/mybodyshield/pages/PatientVitalSignsPage.js.map +1 -0
  118. package/dist/mybodyshield/pages/ProviderCalendarPage.d.ts +2 -0
  119. package/dist/mybodyshield/pages/ProviderCalendarPage.d.ts.map +1 -0
  120. package/dist/mybodyshield/pages/ProviderCalendarPage.js +127 -0
  121. package/dist/mybodyshield/pages/ProviderCalendarPage.js.map +1 -0
  122. package/dist/mybodyshield/pages/ProviderCarePlansPage.d.ts +2 -0
  123. package/dist/mybodyshield/pages/ProviderCarePlansPage.d.ts.map +1 -0
  124. package/dist/mybodyshield/pages/ProviderCarePlansPage.js +153 -0
  125. package/dist/mybodyshield/pages/ProviderCarePlansPage.js.map +1 -0
  126. package/dist/mybodyshield/pages/ProviderClinicalToolsPage.d.ts +2 -0
  127. package/dist/mybodyshield/pages/ProviderClinicalToolsPage.d.ts.map +1 -0
  128. package/dist/mybodyshield/pages/ProviderClinicalToolsPage.js +174 -0
  129. package/dist/mybodyshield/pages/ProviderClinicalToolsPage.js.map +1 -0
  130. package/dist/mybodyshield/pages/ProviderDashboardPage.d.ts +2 -0
  131. package/dist/mybodyshield/pages/ProviderDashboardPage.d.ts.map +1 -0
  132. package/dist/mybodyshield/pages/ProviderDashboardPage.js +154 -0
  133. package/dist/mybodyshield/pages/ProviderDashboardPage.js.map +1 -0
  134. package/dist/mybodyshield/pages/ProviderPatientDetailsPage.d.ts +2 -0
  135. package/dist/mybodyshield/pages/ProviderPatientDetailsPage.d.ts.map +1 -0
  136. package/dist/mybodyshield/pages/ProviderPatientDetailsPage.js +295 -0
  137. package/dist/mybodyshield/pages/ProviderPatientDetailsPage.js.map +1 -0
  138. package/dist/mybodyshield/pages/ProviderPatientManagementPage.d.ts +2 -0
  139. package/dist/mybodyshield/pages/ProviderPatientManagementPage.d.ts.map +1 -0
  140. package/dist/mybodyshield/pages/ProviderPatientManagementPage.js +133 -0
  141. package/dist/mybodyshield/pages/ProviderPatientManagementPage.js.map +1 -0
  142. package/dist/mybodyshield/pages/ProviderPrescriptionsPage.d.ts +2 -0
  143. package/dist/mybodyshield/pages/ProviderPrescriptionsPage.d.ts.map +1 -0
  144. package/dist/mybodyshield/pages/ProviderPrescriptionsPage.js +138 -0
  145. package/dist/mybodyshield/pages/ProviderPrescriptionsPage.js.map +1 -0
  146. package/dist/mybodyshield/pages/ProviderReportsPage.d.ts +2 -0
  147. package/dist/mybodyshield/pages/ProviderReportsPage.d.ts.map +1 -0
  148. package/dist/mybodyshield/pages/ProviderReportsPage.js +149 -0
  149. package/dist/mybodyshield/pages/ProviderReportsPage.js.map +1 -0
  150. package/dist/mybodyshield/pages/SharedAppointmentsPage.d.ts +2 -0
  151. package/dist/mybodyshield/pages/SharedAppointmentsPage.d.ts.map +1 -0
  152. package/dist/mybodyshield/pages/SharedAppointmentsPage.js +129 -0
  153. package/dist/mybodyshield/pages/SharedAppointmentsPage.js.map +1 -0
  154. package/dist/mybodyshield/pages/SharedCommunityPage.d.ts +2 -0
  155. package/dist/mybodyshield/pages/SharedCommunityPage.d.ts.map +1 -0
  156. package/dist/mybodyshield/pages/SharedCommunityPage.js +152 -0
  157. package/dist/mybodyshield/pages/SharedCommunityPage.js.map +1 -0
  158. package/dist/mybodyshield/pages/SharedEmergencyAlertsPage.d.ts +2 -0
  159. package/dist/mybodyshield/pages/SharedEmergencyAlertsPage.d.ts.map +1 -0
  160. package/dist/mybodyshield/pages/SharedEmergencyAlertsPage.js +165 -0
  161. package/dist/mybodyshield/pages/SharedEmergencyAlertsPage.js.map +1 -0
  162. package/dist/mybodyshield/pages/SharedEmergencyPage.d.ts +2 -0
  163. package/dist/mybodyshield/pages/SharedEmergencyPage.d.ts.map +1 -0
  164. package/dist/mybodyshield/pages/SharedEmergencyPage.js +183 -0
  165. package/dist/mybodyshield/pages/SharedEmergencyPage.js.map +1 -0
  166. package/dist/mybodyshield/pages/SharedHealthAnalyticsPage.d.ts +2 -0
  167. package/dist/mybodyshield/pages/SharedHealthAnalyticsPage.d.ts.map +1 -0
  168. package/dist/mybodyshield/pages/SharedHealthAnalyticsPage.js +159 -0
  169. package/dist/mybodyshield/pages/SharedHealthAnalyticsPage.js.map +1 -0
  170. package/dist/mybodyshield/pages/SharedMarketplacePage.d.ts +2 -0
  171. package/dist/mybodyshield/pages/SharedMarketplacePage.d.ts.map +1 -0
  172. package/dist/mybodyshield/pages/SharedMarketplacePage.js +193 -0
  173. package/dist/mybodyshield/pages/SharedMarketplacePage.js.map +1 -0
  174. package/dist/mybodyshield/pages/SharedMessagesPage.d.ts +2 -0
  175. package/dist/mybodyshield/pages/SharedMessagesPage.d.ts.map +1 -0
  176. package/dist/mybodyshield/pages/SharedMessagesPage.js +156 -0
  177. package/dist/mybodyshield/pages/SharedMessagesPage.js.map +1 -0
  178. package/dist/mybodyshield/pages/WellnessAssessmentsPage.d.ts +2 -0
  179. package/dist/mybodyshield/pages/WellnessAssessmentsPage.d.ts.map +1 -0
  180. package/dist/mybodyshield/pages/WellnessAssessmentsPage.js +147 -0
  181. package/dist/mybodyshield/pages/WellnessAssessmentsPage.js.map +1 -0
  182. package/dist/mybodyshield/pages/WellnessClientsPage.d.ts +2 -0
  183. package/dist/mybodyshield/pages/WellnessClientsPage.d.ts.map +1 -0
  184. package/dist/mybodyshield/pages/WellnessClientsPage.js +182 -0
  185. package/dist/mybodyshield/pages/WellnessClientsPage.js.map +1 -0
  186. package/dist/mybodyshield/pages/WellnessDashboardPage.d.ts +2 -0
  187. package/dist/mybodyshield/pages/WellnessDashboardPage.d.ts.map +1 -0
  188. package/dist/mybodyshield/pages/WellnessDashboardPage.js +136 -0
  189. package/dist/mybodyshield/pages/WellnessDashboardPage.js.map +1 -0
  190. package/dist/mybodyshield/pages/WellnessProgramsPage.d.ts +2 -0
  191. package/dist/mybodyshield/pages/WellnessProgramsPage.d.ts.map +1 -0
  192. package/dist/mybodyshield/pages/WellnessProgramsPage.js +140 -0
  193. package/dist/mybodyshield/pages/WellnessProgramsPage.js.map +1 -0
  194. package/dist/mybodyshield/providers/MyBodyShieldProvider.d.ts +6 -0
  195. package/dist/mybodyshield/providers/MyBodyShieldProvider.d.ts.map +1 -0
  196. package/dist/mybodyshield/providers/MyBodyShieldProvider.js +27 -0
  197. package/dist/mybodyshield/providers/MyBodyShieldProvider.js.map +1 -0
  198. package/dist/mybodyshield/store/mybodyshieldStore.d.ts +197 -0
  199. package/dist/mybodyshield/store/mybodyshieldStore.d.ts.map +1 -0
  200. package/dist/mybodyshield/store/mybodyshieldStore.js +710 -0
  201. package/dist/mybodyshield/store/mybodyshieldStore.js.map +1 -0
  202. package/dist/mybodyshield/types/index.d.ts +51 -0
  203. package/dist/mybodyshield/types/index.d.ts.map +1 -0
  204. package/dist/mybodyshield/utils/cn.d.ts +4 -0
  205. package/dist/mybodyshield/utils/cn.d.ts.map +1 -0
  206. package/dist/mybodyshield/utils/navigation.d.ts +2 -0
  207. package/dist/mybodyshield/utils/navigation.d.ts.map +1 -0
  208. package/dist/mybodyshield/utils/navigation.js +8 -0
  209. package/dist/mybodyshield/utils/navigation.js.map +1 -0
  210. 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,2 @@
1
+ export declare function PatientHealthGoalsPage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=PatientHealthGoalsPage.d.ts.map
@@ -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} &middot; 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,2 @@
1
+ export declare function PatientHealthOverviewPage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=PatientHealthOverviewPage.d.ts.map
@@ -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,2 @@
1
+ export declare function PatientLabResultsPage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=PatientLabResultsPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PatientLabResultsPage.d.ts","sourceRoot":"","sources":["../../../src/mybodyshield/pages/PatientLabResultsPage.tsx"],"names":[],"mappings":"AAWA,wBAAgB,qBAAqB,4CAkGpC"}