@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 @@
1
+ {"version":3,"file":"FitnessClientDetailsPage.js","names":[],"sources":["../../../src/mybodyshield/pages/FitnessClientDetailsPage.tsx"],"sourcesContent":["import { Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { Footprints, Flame, Timer, MapPin, User, Target } from 'lucide-react';\nimport { useMyBodyShieldStore } from '../store/mybodyshieldStore';\n\nexport function FitnessClientDetailsPage() {\n const { patients, fitnessMetrics, healthGoals } = useMyBodyShieldStore();\n const client = patients[0];\n const latest = fitnessMetrics[0];\n\n if (!client)\n return (\n <div className=\"p-6\">\n <p className=\"text-muted-foreground\">No client selected</p>\n </div>\n );\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Client Details</h1>\n <p className=\"text-sm text-muted-foreground\">\n {client.firstName} {client.lastName} — Fitness profile and metrics\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</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\">{latest.date}</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}</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\">min 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\">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\">today</p>\n </CardContent>\n </Card>\n </div>\n )}\n\n <div className=\"grid gap-4 md:grid-cols-2\">\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <User className=\"h-5 w-5\" />\n Client Profile\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-2 text-sm\">\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Name</span>\n <span className=\"font-medium\">\n {client.firstName} {client.lastName}\n </span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Age</span>\n <span className=\"font-medium\">\n {new Date().getFullYear() - new Date(client.dateOfBirth).getFullYear()}\n </span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Gender</span>\n <span className=\"font-medium\">{client.gender}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Conditions</span>\n <span className=\"font-medium\">{client.conditions.join(', ')}</span>\n </div>\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Target className=\"h-5 w-5\" />\n Health Goals\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-3\">\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}>\n <div className=\"flex justify-between text-sm mb-1\">\n <span>{goal.title}</span>\n <span className=\"font-medium\">{progress}%</span>\n </div>\n <div className=\"h-2 bg-muted rounded-full overflow-hidden\">\n <div\n className=\"h-2 bg-primary rounded-full\"\n style={{ width: `${progress}%` }}\n />\n </div>\n </div>\n );\n })}\n </div>\n </CardContent>\n </Card>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>Fitness Metrics History</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-3\">\n {fitnessMetrics.map((m) => (\n <div\n key={m.id}\n className=\"flex items-center justify-between p-3 rounded-lg bg-muted/50\"\n >\n <span className=\"text-sm font-medium\">{m.date}</span>\n <div className=\"flex gap-4 text-xs\">\n <span>{m.steps.toLocaleString()} steps</span>\n <span>{m.caloriesBurned} kcal</span>\n <span>{m.activeMinutes} min</span>\n <span>\n HR {m.heartRateAvg}/{m.heartRateMax}\n </span>\n <span>{m.sleepHours}h sleep</span>\n </div>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function FitnessClientManagementPage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=FitnessClientManagementPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FitnessClientManagementPage.d.ts","sourceRoot":"","sources":["../../../src/mybodyshield/pages/FitnessClientManagementPage.tsx"],"names":[],"mappings":"AAMA,wBAAgB,2BAA2B,4CAmG1C"}
@@ -0,0 +1,128 @@
1
+ import { useMyBodyShieldStore as e } from "../store/mybodyshieldStore.js";
2
+ import { AlertTriangle as t, Dumbbell as n, UserPlus as r, Users as i } from "lucide-react";
3
+ import { jsx as a, jsxs as o } from "react/jsx-runtime";
4
+ import { Card as s, CardContent as c, CardHeader as l, CardTitle as u } from "@burdenoff/fe-libs/ui";
5
+ //#region src/mybodyshield/pages/FitnessClientManagementPage.tsx
6
+ var d = [
7
+ "Active",
8
+ "Active",
9
+ "On Break",
10
+ "Active",
11
+ "New"
12
+ ];
13
+ function f() {
14
+ let { patients: f } = e();
15
+ return /* @__PURE__ */ o("div", {
16
+ className: "space-y-6 p-6",
17
+ children: [
18
+ /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("h1", {
19
+ className: "text-2xl font-semibold",
20
+ children: "Client Management"
21
+ }), /* @__PURE__ */ a("p", {
22
+ className: "text-sm text-muted-foreground",
23
+ children: "Manage your fitness coaching clients and programs"
24
+ })] }),
25
+ /* @__PURE__ */ o("div", {
26
+ className: "grid gap-4 md:grid-cols-4",
27
+ children: [
28
+ /* @__PURE__ */ o(s, { children: [/* @__PURE__ */ o(l, {
29
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
30
+ children: [/* @__PURE__ */ a(u, {
31
+ className: "text-sm font-medium",
32
+ children: "Total Clients"
33
+ }), /* @__PURE__ */ a(i, { className: "h-4 w-4 text-blue-500" })]
34
+ }), /* @__PURE__ */ o(c, { children: [/* @__PURE__ */ a("div", {
35
+ className: "text-2xl font-bold",
36
+ children: f.length + 19
37
+ }), /* @__PURE__ */ a("p", {
38
+ className: "text-xs text-muted-foreground",
39
+ children: "In your roster"
40
+ })] })] }),
41
+ /* @__PURE__ */ o(s, { children: [/* @__PURE__ */ o(l, {
42
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
43
+ children: [/* @__PURE__ */ a(u, {
44
+ className: "text-sm font-medium",
45
+ children: "Active Programs"
46
+ }), /* @__PURE__ */ a(n, { className: "h-4 w-4 text-green-500" })]
47
+ }), /* @__PURE__ */ o(c, { children: [/* @__PURE__ */ a("div", {
48
+ className: "text-2xl font-bold",
49
+ children: "18"
50
+ }), /* @__PURE__ */ a("p", {
51
+ className: "text-xs text-muted-foreground",
52
+ children: "Ongoing training plans"
53
+ })] })] }),
54
+ /* @__PURE__ */ o(s, { children: [/* @__PURE__ */ o(l, {
55
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
56
+ children: [/* @__PURE__ */ a(u, {
57
+ className: "text-sm font-medium",
58
+ children: "New This Month"
59
+ }), /* @__PURE__ */ a(r, { className: "h-4 w-4 text-purple-500" })]
60
+ }), /* @__PURE__ */ o(c, { children: [/* @__PURE__ */ a("div", {
61
+ className: "text-2xl font-bold",
62
+ children: "4"
63
+ }), /* @__PURE__ */ a("p", {
64
+ className: "text-xs text-muted-foreground",
65
+ children: "Recently enrolled"
66
+ })] })] }),
67
+ /* @__PURE__ */ o(s, { children: [/* @__PURE__ */ o(l, {
68
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
69
+ children: [/* @__PURE__ */ a(u, {
70
+ className: "text-sm font-medium",
71
+ children: "At Risk"
72
+ }), /* @__PURE__ */ a(t, { className: "h-4 w-4 text-orange-500" })]
73
+ }), /* @__PURE__ */ o(c, { children: [/* @__PURE__ */ a("div", {
74
+ className: "text-2xl font-bold",
75
+ children: "2"
76
+ }), /* @__PURE__ */ a("p", {
77
+ className: "text-xs text-muted-foreground",
78
+ children: "Low engagement"
79
+ })] })] })
80
+ ]
81
+ }),
82
+ /* @__PURE__ */ o(s, { children: [/* @__PURE__ */ a(l, { children: /* @__PURE__ */ a(u, { children: "Client Roster" }) }), /* @__PURE__ */ a(c, { children: /* @__PURE__ */ a("div", {
83
+ className: "space-y-3",
84
+ children: f.map((e, t) => {
85
+ let n = (/* @__PURE__ */ new Date()).getFullYear() - new Date(e.dateOfBirth).getFullYear(), r = d[t] ?? "Active";
86
+ return /* @__PURE__ */ o("div", {
87
+ className: "flex items-center justify-between p-3 rounded-lg bg-muted/50",
88
+ children: [/* @__PURE__ */ o("div", {
89
+ className: "flex items-center gap-3",
90
+ children: [/* @__PURE__ */ a("div", {
91
+ className: "h-10 w-10 rounded-full bg-primary/10 flex items-center justify-center",
92
+ children: /* @__PURE__ */ o("span", {
93
+ className: "text-sm font-medium text-primary",
94
+ children: [e.firstName[0], e.lastName[0]]
95
+ })
96
+ }), /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ o("p", {
97
+ className: "text-sm font-medium",
98
+ children: [
99
+ e.firstName,
100
+ " ",
101
+ e.lastName
102
+ ]
103
+ }), /* @__PURE__ */ o("p", {
104
+ className: "text-xs text-muted-foreground",
105
+ children: [
106
+ "Age ",
107
+ n,
108
+ " · ",
109
+ e.gender,
110
+ " ·",
111
+ " ",
112
+ e.conditions.length > 0 ? e.conditions[0] : "General fitness"
113
+ ]
114
+ })] })]
115
+ }), /* @__PURE__ */ a("span", {
116
+ className: `text-xs font-medium px-2 py-0.5 rounded-full ${r === "Active" ? "bg-green-100 text-green-700" : r === "New" ? "bg-blue-100 text-blue-700" : "bg-yellow-100 text-yellow-700"}`,
117
+ children: r
118
+ })]
119
+ }, e.id);
120
+ })
121
+ }) })] })
122
+ ]
123
+ });
124
+ }
125
+ //#endregion
126
+ export { f as FitnessClientManagementPage };
127
+
128
+ //# sourceMappingURL=FitnessClientManagementPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FitnessClientManagementPage.js","names":[],"sources":["../../../src/mybodyshield/pages/FitnessClientManagementPage.tsx"],"sourcesContent":["import { Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { Users, UserPlus, Dumbbell, AlertTriangle } from 'lucide-react';\nimport { useMyBodyShieldStore } from '../store/mybodyshieldStore';\n\nconst programStatuses = ['Active', 'Active', 'On Break', 'Active', 'New'];\n\nexport function FitnessClientManagementPage() {\n const { patients } = useMyBodyShieldStore();\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Client Management</h1>\n <p className=\"text-sm text-muted-foreground\">\n Manage your fitness coaching clients and programs\n </p>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-4\">\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Total Clients</CardTitle>\n <Users className=\"h-4 w-4 text-blue-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{patients.length + 19}</div>\n <p className=\"text-xs text-muted-foreground\">In your roster</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 Programs</CardTitle>\n <Dumbbell className=\"h-4 w-4 text-green-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">18</div>\n <p className=\"text-xs text-muted-foreground\">Ongoing training plans</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">New This Month</CardTitle>\n <UserPlus className=\"h-4 w-4 text-purple-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">4</div>\n <p className=\"text-xs text-muted-foreground\">Recently enrolled</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\">At Risk</CardTitle>\n <AlertTriangle className=\"h-4 w-4 text-orange-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">2</div>\n <p className=\"text-xs text-muted-foreground\">Low engagement</p>\n </CardContent>\n </Card>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>Client Roster</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-3\">\n {patients.map((patient, i) => {\n const age = new Date().getFullYear() - new Date(patient.dateOfBirth).getFullYear();\n const status = programStatuses[i] ?? 'Active';\n return (\n <div\n key={patient.id}\n className=\"flex items-center justify-between p-3 rounded-lg bg-muted/50\"\n >\n <div className=\"flex items-center gap-3\">\n <div className=\"h-10 w-10 rounded-full bg-primary/10 flex items-center justify-center\">\n <span className=\"text-sm font-medium text-primary\">\n {patient.firstName[0]}\n {patient.lastName[0]}\n </span>\n </div>\n <div>\n <p className=\"text-sm font-medium\">\n {patient.firstName} {patient.lastName}\n </p>\n <p className=\"text-xs text-muted-foreground\">\n Age {age} &middot; {patient.gender} &middot;{' '}\n {patient.conditions.length > 0 ? patient.conditions[0] : 'General fitness'}\n </p>\n </div>\n </div>\n <span\n className={`text-xs font-medium px-2 py-0.5 rounded-full ${status === 'Active' ? 'bg-green-100 text-green-700' : status === 'New' ? 'bg-blue-100 text-blue-700' : 'bg-yellow-100 text-yellow-700'}`}\n >\n {status}\n </span>\n </div>\n );\n })}\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":";;;;;AAIA,IAAM,IAAkB;CAAC;CAAU;CAAU;CAAY;CAAU;CAAM;AAEzE,SAAgB,IAA8B;CAC5C,IAAM,EAAE,gBAAa,GAAsB;AAE3C,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;IAAI,WAAU;cAAyB;IAAsB,CAAA,EAC7D,kBAAC,KAAD;IAAG,WAAU;cAAgC;IAEzC,CAAA,CACA,EAAA,CAAA;GAEN,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;MAAY,WAAU;gBAAtB,CACE,kBAAC,GAAD;OAAW,WAAU;iBAAsB;OAAyB,CAAA,EACpE,kBAAC,GAAD,EAAO,WAAU,yBAA0B,CAAA,CAChC;SACb,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,OAAD;MAAK,WAAU;gBAAsB,EAAS,SAAS;MAAS,CAAA,EAChE,kBAAC,KAAD;MAAG,WAAU;gBAAgC;MAAkB,CAAA,CACnD,EAAA,CAAA,CACT,EAAA,CAAA;KACP,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;MAAY,WAAU;gBAAtB,CACE,kBAAC,GAAD;OAAW,WAAU;iBAAsB;OAA2B,CAAA,EACtE,kBAAC,GAAD,EAAU,WAAU,0BAA2B,CAAA,CACpC;SACb,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,OAAD;MAAK,WAAU;gBAAqB;MAAQ,CAAA,EAC5C,kBAAC,KAAD;MAAG,WAAU;gBAAgC;MAA0B,CAAA,CAC3D,EAAA,CAAA,CACT,EAAA,CAAA;KACP,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;MAAY,WAAU;gBAAtB,CACE,kBAAC,GAAD;OAAW,WAAU;iBAAsB;OAA0B,CAAA,EACrE,kBAAC,GAAD,EAAU,WAAU,2BAA4B,CAAA,CACrC;SACb,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,OAAD;MAAK,WAAU;gBAAqB;MAAO,CAAA,EAC3C,kBAAC,KAAD;MAAG,WAAU;gBAAgC;MAAqB,CAAA,CACtD,EAAA,CAAA,CACT,EAAA,CAAA;KACP,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;MAAY,WAAU;gBAAtB,CACE,kBAAC,GAAD;OAAW,WAAU;iBAAsB;OAAmB,CAAA,EAC9D,kBAAC,GAAD,EAAe,WAAU,2BAA4B,CAAA,CAC1C;SACb,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,OAAD;MAAK,WAAU;gBAAqB;MAAO,CAAA,EAC3C,kBAAC,KAAD;MAAG,WAAU;gBAAgC;MAAkB,CAAA,CACnD,EAAA,CAAA,CACT,EAAA,CAAA;KACH;;GAEN,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAA,UAAW,iBAAyB,CAAA,EACzB,CAAA,EACb,kBAAC,GAAD,EAAA,UACE,kBAAC,OAAD;IAAK,WAAU;cACZ,EAAS,KAAK,GAAS,MAAM;KAC5B,IAAM,qBAAM,IAAI,MAAM,EAAC,aAAa,GAAG,IAAI,KAAK,EAAQ,YAAY,CAAC,aAAa,EAC5E,IAAS,EAAgB,MAAM;AACrC,YACE,kBAAC,OAAD;MAEE,WAAU;gBAFZ,CAIE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,OAAD;QAAK,WAAU;kBACb,kBAAC,QAAD;SAAM,WAAU;mBAAhB,CACG,EAAQ,UAAU,IAClB,EAAQ,SAAS,GACb;;QACH,CAAA,EACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;QAAG,WAAU;kBAAb;SACG,EAAQ;SAAU;SAAE,EAAQ;SAC3B;WACJ,kBAAC,KAAD;QAAG,WAAU;kBAAb;SAA6C;SACtC;SAAI;SAAW,EAAQ;SAAO;SAAU;SAC5C,EAAQ,WAAW,SAAS,IAAI,EAAQ,WAAW,KAAK;SACvD;UACA,EAAA,CAAA,CACF;UACN,kBAAC,QAAD;OACE,WAAW,gDAAgD,MAAW,WAAW,gCAAgC,MAAW,QAAQ,8BAA8B;iBAEjK;OACI,CAAA,CACH;QAzBC,EAAQ,GAyBT;MAER;IACE,CAAA,EACM,CAAA,CACT,EAAA,CAAA;GACH"}
@@ -0,0 +1,2 @@
1
+ export declare function FitnessDashboardPage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=FitnessDashboardPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FitnessDashboardPage.d.ts","sourceRoot":"","sources":["../../../src/mybodyshield/pages/FitnessDashboardPage.tsx"],"names":[],"mappings":"AAqDA,wBAAgB,oBAAoB,4CA4FnC"}
@@ -0,0 +1,156 @@
1
+ import { useMyBodyShieldStore as e } from "../store/mybodyshieldStore.js";
2
+ import { ClipboardCheck as t, Clock as n, Dumbbell as r, TrendingUp as i, Users as a } from "lucide-react";
3
+ import { jsx as o, jsxs as s } from "react/jsx-runtime";
4
+ import { Card as c, CardContent as l, CardHeader as u, CardTitle as d } from "@burdenoff/fe-libs/ui";
5
+ //#region src/mybodyshield/pages/FitnessDashboardPage.tsx
6
+ var f = [
7
+ {
8
+ id: 1,
9
+ client: "Sarah Johnson",
10
+ time: "08:00",
11
+ type: "Strength Training",
12
+ duration: "60 min",
13
+ status: "Completed"
14
+ },
15
+ {
16
+ id: 2,
17
+ client: "Michael Chen",
18
+ time: "09:30",
19
+ type: "Cardio Assessment",
20
+ duration: "45 min",
21
+ status: "Completed"
22
+ },
23
+ {
24
+ id: 3,
25
+ client: "Emily Davis",
26
+ time: "11:00",
27
+ type: "Yoga Session",
28
+ duration: "60 min",
29
+ status: "In Progress"
30
+ },
31
+ {
32
+ id: 4,
33
+ client: "Robert Wilson",
34
+ time: "14:00",
35
+ type: "Rehabilitation",
36
+ duration: "45 min",
37
+ status: "Upcoming"
38
+ },
39
+ {
40
+ id: 5,
41
+ client: "Lisa Thompson",
42
+ time: "16:00",
43
+ type: "HIIT Circuit",
44
+ duration: "30 min",
45
+ status: "Upcoming"
46
+ }
47
+ ], p = {
48
+ Completed: "bg-green-100 text-green-700",
49
+ "In Progress": "bg-blue-100 text-blue-700",
50
+ Upcoming: "bg-yellow-100 text-yellow-700"
51
+ };
52
+ function m() {
53
+ let { fitnessMetrics: m } = e();
54
+ return /* @__PURE__ */ s("div", {
55
+ className: "space-y-6 p-6",
56
+ children: [
57
+ /* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("h1", {
58
+ className: "text-2xl font-semibold",
59
+ children: "Fitness Dashboard"
60
+ }), /* @__PURE__ */ o("p", {
61
+ className: "text-sm text-muted-foreground",
62
+ children: "Coach overview — sessions, clients, and progress"
63
+ })] }),
64
+ /* @__PURE__ */ s("div", {
65
+ className: "grid gap-4 md:grid-cols-4",
66
+ children: [
67
+ /* @__PURE__ */ s(c, { children: [/* @__PURE__ */ s(u, {
68
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
69
+ children: [/* @__PURE__ */ o(d, {
70
+ className: "text-sm font-medium",
71
+ children: "Active Clients"
72
+ }), /* @__PURE__ */ o(a, { className: "h-4 w-4 text-blue-500" })]
73
+ }), /* @__PURE__ */ s(l, { children: [/* @__PURE__ */ o("div", {
74
+ className: "text-2xl font-bold",
75
+ children: "24"
76
+ }), /* @__PURE__ */ o("p", {
77
+ className: "text-xs text-muted-foreground",
78
+ children: "Enrolled in programs"
79
+ })] })] }),
80
+ /* @__PURE__ */ s(c, { children: [/* @__PURE__ */ s(u, {
81
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
82
+ children: [/* @__PURE__ */ o(d, {
83
+ className: "text-sm font-medium",
84
+ children: "Sessions Today"
85
+ }), /* @__PURE__ */ o(r, { className: "h-4 w-4 text-green-500" })]
86
+ }), /* @__PURE__ */ s(l, { children: [/* @__PURE__ */ o("div", {
87
+ className: "text-2xl font-bold",
88
+ children: f.length
89
+ }), /* @__PURE__ */ s("p", {
90
+ className: "text-xs text-muted-foreground",
91
+ children: [f.filter((e) => e.status === "Completed").length, " completed"]
92
+ })] })] }),
93
+ /* @__PURE__ */ s(c, { children: [/* @__PURE__ */ s(u, {
94
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
95
+ children: [/* @__PURE__ */ o(d, {
96
+ className: "text-sm font-medium",
97
+ children: "Avg Client Progress"
98
+ }), /* @__PURE__ */ o(i, { className: "h-4 w-4 text-purple-500" })]
99
+ }), /* @__PURE__ */ s(l, { children: [/* @__PURE__ */ o("div", {
100
+ className: "text-2xl font-bold",
101
+ children: "72%"
102
+ }), /* @__PURE__ */ o("p", {
103
+ className: "text-xs text-muted-foreground",
104
+ children: "Toward their goals"
105
+ })] })] }),
106
+ /* @__PURE__ */ s(c, { children: [/* @__PURE__ */ s(u, {
107
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
108
+ children: [/* @__PURE__ */ o(d, {
109
+ className: "text-sm font-medium",
110
+ children: "New Assessments"
111
+ }), /* @__PURE__ */ o(t, { className: "h-4 w-4 text-orange-500" })]
112
+ }), /* @__PURE__ */ s(l, { children: [/* @__PURE__ */ o("div", {
113
+ className: "text-2xl font-bold",
114
+ children: "5"
115
+ }), /* @__PURE__ */ o("p", {
116
+ className: "text-xs text-muted-foreground",
117
+ children: "This week"
118
+ })] })] })
119
+ ]
120
+ }),
121
+ /* @__PURE__ */ s(c, { children: [/* @__PURE__ */ o(u, { children: /* @__PURE__ */ s(d, {
122
+ className: "flex items-center gap-2",
123
+ children: [/* @__PURE__ */ o(n, { className: "h-5 w-5" }), "Today's Sessions"]
124
+ }) }), /* @__PURE__ */ o(l, { children: /* @__PURE__ */ o("div", {
125
+ className: "space-y-3",
126
+ children: f.map((e) => /* @__PURE__ */ s("div", {
127
+ className: "flex items-center justify-between p-3 rounded-lg bg-muted/50",
128
+ children: [/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("p", {
129
+ className: "text-sm font-medium",
130
+ children: e.client
131
+ }), /* @__PURE__ */ s("p", {
132
+ className: "text-xs text-muted-foreground",
133
+ children: [
134
+ e.type,
135
+ " · ",
136
+ e.duration
137
+ ]
138
+ })] }), /* @__PURE__ */ s("div", {
139
+ className: "flex items-center gap-3",
140
+ children: [/* @__PURE__ */ o("p", {
141
+ className: "text-sm font-medium",
142
+ children: e.time
143
+ }), /* @__PURE__ */ o("span", {
144
+ className: `text-xs font-medium px-2 py-0.5 rounded-full ${p[e.status]}`,
145
+ children: e.status
146
+ })]
147
+ })]
148
+ }, e.id))
149
+ }) })] })
150
+ ]
151
+ });
152
+ }
153
+ //#endregion
154
+ export { m as FitnessDashboardPage };
155
+
156
+ //# sourceMappingURL=FitnessDashboardPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FitnessDashboardPage.js","names":[],"sources":["../../../src/mybodyshield/pages/FitnessDashboardPage.tsx"],"sourcesContent":["import { Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { Users, Dumbbell, TrendingUp, ClipboardCheck, Clock } from 'lucide-react';\nimport { useMyBodyShieldStore } from '../store/mybodyshieldStore';\n\nconst todaySessions = [\n {\n id: 1,\n client: 'Sarah Johnson',\n time: '08:00',\n type: 'Strength Training',\n duration: '60 min',\n status: 'Completed',\n },\n {\n id: 2,\n client: 'Michael Chen',\n time: '09:30',\n type: 'Cardio Assessment',\n duration: '45 min',\n status: 'Completed',\n },\n {\n id: 3,\n client: 'Emily Davis',\n time: '11:00',\n type: 'Yoga Session',\n duration: '60 min',\n status: 'In Progress',\n },\n {\n id: 4,\n client: 'Robert Wilson',\n time: '14:00',\n type: 'Rehabilitation',\n duration: '45 min',\n status: 'Upcoming',\n },\n {\n id: 5,\n client: 'Lisa Thompson',\n time: '16:00',\n type: 'HIIT Circuit',\n duration: '30 min',\n status: 'Upcoming',\n },\n];\n\nconst statusColors: Record<string, string> = {\n Completed: 'bg-green-100 text-green-700',\n 'In Progress': 'bg-blue-100 text-blue-700',\n Upcoming: 'bg-yellow-100 text-yellow-700',\n};\n\nexport function FitnessDashboardPage() {\n const { fitnessMetrics } = useMyBodyShieldStore();\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Fitness Dashboard</h1>\n <p className=\"text-sm text-muted-foreground\">\n Coach overview — sessions, clients, and progress\n </p>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-4\">\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Active Clients</CardTitle>\n <Users className=\"h-4 w-4 text-blue-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">24</div>\n <p className=\"text-xs text-muted-foreground\">Enrolled in programs</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Sessions Today</CardTitle>\n <Dumbbell className=\"h-4 w-4 text-green-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{todaySessions.length}</div>\n <p className=\"text-xs text-muted-foreground\">\n {todaySessions.filter((s) => s.status === 'Completed').length} completed\n </p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Avg Client Progress</CardTitle>\n <TrendingUp className=\"h-4 w-4 text-purple-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">72%</div>\n <p className=\"text-xs text-muted-foreground\">Toward their goals</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">New Assessments</CardTitle>\n <ClipboardCheck className=\"h-4 w-4 text-orange-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">5</div>\n <p className=\"text-xs text-muted-foreground\">This week</p>\n </CardContent>\n </Card>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Clock className=\"h-5 w-5\" />\n Today&apos;s Sessions\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-3\">\n {todaySessions.map((session) => (\n <div\n key={session.id}\n className=\"flex items-center justify-between p-3 rounded-lg bg-muted/50\"\n >\n <div>\n <p className=\"text-sm font-medium\">{session.client}</p>\n <p className=\"text-xs text-muted-foreground\">\n {session.type} &middot; {session.duration}\n </p>\n </div>\n <div className=\"flex items-center gap-3\">\n <p className=\"text-sm font-medium\">{session.time}</p>\n <span\n className={`text-xs font-medium px-2 py-0.5 rounded-full ${statusColors[session.status]}`}\n >\n {session.status}\n </span>\n </div>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function FitnessReportsPage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=FitnessReportsPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FitnessReportsPage.d.ts","sourceRoot":"","sources":["../../../src/mybodyshield/pages/FitnessReportsPage.tsx"],"names":[],"mappings":"AAyCA,wBAAgB,kBAAkB,4CA+EjC"}
@@ -0,0 +1,138 @@
1
+ import { FileBarChart as e, Target as t, TrendingUp as n, Users as r } from "lucide-react";
2
+ import { jsx as i, jsxs as a } from "react/jsx-runtime";
3
+ import { Card as o, CardContent as s, CardHeader as c, CardTitle as l } from "@burdenoff/fe-libs/ui";
4
+ //#region src/mybodyshield/pages/FitnessReportsPage.tsx
5
+ var u = [
6
+ {
7
+ id: 1,
8
+ name: "Client Progress Report",
9
+ description: "Individual client milestone tracking and body composition",
10
+ lastGenerated: "2026-02-10",
11
+ count: 12
12
+ },
13
+ {
14
+ id: 2,
15
+ name: "Program Effectiveness",
16
+ description: "Workout plan outcomes vs baseline measurements",
17
+ lastGenerated: "2026-02-08",
18
+ count: 6
19
+ },
20
+ {
21
+ id: 3,
22
+ name: "Group Analysis",
23
+ description: "Aggregate performance data for group training sessions",
24
+ lastGenerated: "2026-02-05",
25
+ count: 4
26
+ },
27
+ {
28
+ id: 4,
29
+ name: "Quarterly Review",
30
+ description: "Quarterly client retention, satisfaction, and goal completion",
31
+ lastGenerated: "2026-01-31",
32
+ count: 3
33
+ },
34
+ {
35
+ id: 5,
36
+ name: "Body Composition Trends",
37
+ description: "Weight, BMI, body fat %, and lean mass tracking",
38
+ lastGenerated: "2026-02-09",
39
+ count: 7
40
+ }
41
+ ];
42
+ function d() {
43
+ return /* @__PURE__ */ a("div", {
44
+ className: "space-y-6 p-6",
45
+ children: [
46
+ /* @__PURE__ */ a("div", { children: [/* @__PURE__ */ i("h1", {
47
+ className: "text-2xl font-semibold",
48
+ children: "Fitness Reports"
49
+ }), /* @__PURE__ */ i("p", {
50
+ className: "text-sm text-muted-foreground",
51
+ children: "Program analytics and client performance reporting"
52
+ })] }),
53
+ /* @__PURE__ */ a("div", {
54
+ className: "grid gap-4 md:grid-cols-4",
55
+ children: [
56
+ /* @__PURE__ */ a(o, { children: [/* @__PURE__ */ a(c, {
57
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
58
+ children: [/* @__PURE__ */ i(l, {
59
+ className: "text-sm font-medium",
60
+ children: "Reports Generated"
61
+ }), /* @__PURE__ */ i(e, { className: "h-4 w-4 text-blue-500" })]
62
+ }), /* @__PURE__ */ a(s, { children: [/* @__PURE__ */ i("div", {
63
+ className: "text-2xl font-bold",
64
+ children: "32"
65
+ }), /* @__PURE__ */ i("p", {
66
+ className: "text-xs text-muted-foreground",
67
+ children: "This quarter"
68
+ })] })] }),
69
+ /* @__PURE__ */ a(o, { children: [/* @__PURE__ */ a(c, {
70
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
71
+ children: [/* @__PURE__ */ i(l, {
72
+ className: "text-sm font-medium",
73
+ children: "Client Retention"
74
+ }), /* @__PURE__ */ i(r, { className: "h-4 w-4 text-green-500" })]
75
+ }), /* @__PURE__ */ a(s, { children: [/* @__PURE__ */ i("div", {
76
+ className: "text-2xl font-bold",
77
+ children: "94%"
78
+ }), /* @__PURE__ */ i("p", {
79
+ className: "text-xs text-muted-foreground",
80
+ children: "6-month average"
81
+ })] })] }),
82
+ /* @__PURE__ */ a(o, { children: [/* @__PURE__ */ a(c, {
83
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
84
+ children: [/* @__PURE__ */ i(l, {
85
+ className: "text-sm font-medium",
86
+ children: "Avg Goal Completion"
87
+ }), /* @__PURE__ */ i(t, { className: "h-4 w-4 text-purple-500" })]
88
+ }), /* @__PURE__ */ a(s, { children: [/* @__PURE__ */ i("div", {
89
+ className: "text-2xl font-bold",
90
+ children: "68%"
91
+ }), /* @__PURE__ */ i("p", {
92
+ className: "text-xs text-muted-foreground",
93
+ children: "Across all clients"
94
+ })] })] }),
95
+ /* @__PURE__ */ a(o, { children: [/* @__PURE__ */ a(c, {
96
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
97
+ children: [/* @__PURE__ */ i(l, {
98
+ className: "text-sm font-medium",
99
+ children: "Program Effectiveness"
100
+ }), /* @__PURE__ */ i(n, { className: "h-4 w-4 text-orange-500" })]
101
+ }), /* @__PURE__ */ a(s, { children: [/* @__PURE__ */ i("div", {
102
+ className: "text-2xl font-bold",
103
+ children: "87%"
104
+ }), /* @__PURE__ */ i("p", {
105
+ className: "text-xs text-muted-foreground",
106
+ children: "Positive outcomes"
107
+ })] })] })
108
+ ]
109
+ }),
110
+ /* @__PURE__ */ a(o, { children: [/* @__PURE__ */ i(c, { children: /* @__PURE__ */ i(l, { children: "Available Reports" }) }), /* @__PURE__ */ i(s, { children: /* @__PURE__ */ i("div", {
111
+ className: "space-y-3",
112
+ children: u.map((e) => /* @__PURE__ */ a("div", {
113
+ className: "flex items-center justify-between p-3 rounded-lg bg-muted/50",
114
+ children: [/* @__PURE__ */ a("div", { children: [/* @__PURE__ */ i("p", {
115
+ className: "text-sm font-medium",
116
+ children: e.name
117
+ }), /* @__PURE__ */ i("p", {
118
+ className: "text-xs text-muted-foreground",
119
+ children: e.description
120
+ })] }), /* @__PURE__ */ a("div", {
121
+ className: "text-right",
122
+ children: [/* @__PURE__ */ a("p", {
123
+ className: "text-xs text-muted-foreground",
124
+ children: ["Last: ", e.lastGenerated]
125
+ }), /* @__PURE__ */ a("p", {
126
+ className: "text-xs text-muted-foreground",
127
+ children: [e.count, " reports"]
128
+ })]
129
+ })]
130
+ }, e.id))
131
+ }) })] })
132
+ ]
133
+ });
134
+ }
135
+ //#endregion
136
+ export { d as FitnessReportsPage };
137
+
138
+ //# sourceMappingURL=FitnessReportsPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FitnessReportsPage.js","names":[],"sources":["../../../src/mybodyshield/pages/FitnessReportsPage.tsx"],"sourcesContent":["import { Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { FileBarChart, Users, Target, TrendingUp } from 'lucide-react';\n\nconst reports = [\n {\n id: 1,\n name: 'Client Progress Report',\n description: 'Individual client milestone tracking and body composition',\n lastGenerated: '2026-02-10',\n count: 12,\n },\n {\n id: 2,\n name: 'Program Effectiveness',\n description: 'Workout plan outcomes vs baseline measurements',\n lastGenerated: '2026-02-08',\n count: 6,\n },\n {\n id: 3,\n name: 'Group Analysis',\n description: 'Aggregate performance data for group training sessions',\n lastGenerated: '2026-02-05',\n count: 4,\n },\n {\n id: 4,\n name: 'Quarterly Review',\n description: 'Quarterly client retention, satisfaction, and goal completion',\n lastGenerated: '2026-01-31',\n count: 3,\n },\n {\n id: 5,\n name: 'Body Composition Trends',\n description: 'Weight, BMI, body fat %, and lean mass tracking',\n lastGenerated: '2026-02-09',\n count: 7,\n },\n];\n\nexport function FitnessReportsPage() {\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Fitness Reports</h1>\n <p className=\"text-sm text-muted-foreground\">\n Program analytics and client performance reporting\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\">Reports Generated</CardTitle>\n <FileBarChart className=\"h-4 w-4 text-blue-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">32</div>\n <p className=\"text-xs text-muted-foreground\">This quarter</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\">Client Retention</CardTitle>\n <Users className=\"h-4 w-4 text-green-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">94%</div>\n <p className=\"text-xs text-muted-foreground\">6-month average</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Avg Goal Completion</CardTitle>\n <Target className=\"h-4 w-4 text-purple-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">68%</div>\n <p className=\"text-xs text-muted-foreground\">Across all clients</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\">Program Effectiveness</CardTitle>\n <TrendingUp className=\"h-4 w-4 text-orange-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">87%</div>\n <p className=\"text-xs text-muted-foreground\">Positive outcomes</p>\n </CardContent>\n </Card>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>Available Reports</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-3\">\n {reports.map((r) => (\n <div\n key={r.id}\n className=\"flex items-center justify-between p-3 rounded-lg bg-muted/50\"\n >\n <div>\n <p className=\"text-sm font-medium\">{r.name}</p>\n <p className=\"text-xs text-muted-foreground\">{r.description}</p>\n </div>\n <div className=\"text-right\">\n <p className=\"text-xs text-muted-foreground\">Last: {r.lastGenerated}</p>\n <p className=\"text-xs text-muted-foreground\">{r.count} reports</p>\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 FitnessWorkoutPlansPage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=FitnessWorkoutPlansPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FitnessWorkoutPlansPage.d.ts","sourceRoot":"","sources":["../../../src/mybodyshield/pages/FitnessWorkoutPlansPage.tsx"],"names":[],"mappings":"AAwEA,wBAAgB,uBAAuB,4CAoFtC"}