@burdenoff/microfe-timecampus 2026.510.104

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 (282) hide show
  1. package/README.md +12 -0
  2. package/dist/generated/global-operations.d.ts +2 -0
  3. package/dist/generated/global-operations.d.ts.map +1 -0
  4. package/dist/generated/global-types.d.ts +20716 -0
  5. package/dist/generated/global-types.d.ts.map +1 -0
  6. package/dist/generated/wspace-operations.d.ts +8527 -0
  7. package/dist/generated/wspace-operations.d.ts.map +1 -0
  8. package/dist/generated/wspace-operations.js +3913 -0
  9. package/dist/generated/wspace-operations.js.map +1 -0
  10. package/dist/generated/wspace-types.d.ts +53363 -0
  11. package/dist/generated/wspace-types.d.ts.map +1 -0
  12. package/dist/index.d.ts +6 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +6 -0
  15. package/dist/node_modules/@apollo/client/errors/CombinedGraphQLErrors.js +24 -0
  16. package/dist/node_modules/@apollo/client/errors/CombinedGraphQLErrors.js.map +1 -0
  17. package/dist/node_modules/@apollo/client/errors/utils.js +16 -0
  18. package/dist/node_modules/@apollo/client/errors/utils.js.map +1 -0
  19. package/dist/node_modules/clsx/dist/clsx.js +18 -0
  20. package/dist/node_modules/clsx/dist/clsx.js.map +1 -0
  21. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +1674 -0
  22. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -0
  23. package/dist/timecampus/TimeCampusRoot.d.ts +5 -0
  24. package/dist/timecampus/TimeCampusRoot.d.ts.map +1 -0
  25. package/dist/timecampus/TimeCampusRoot.js +344 -0
  26. package/dist/timecampus/TimeCampusRoot.js.map +1 -0
  27. package/dist/timecampus/TimeCampusRoutes.d.ts +7 -0
  28. package/dist/timecampus/TimeCampusRoutes.d.ts.map +1 -0
  29. package/dist/timecampus/TimeCampusRoutes.js +227 -0
  30. package/dist/timecampus/TimeCampusRoutes.js.map +1 -0
  31. package/dist/timecampus/components/ChartCard.d.ts +19 -0
  32. package/dist/timecampus/components/ChartCard.d.ts.map +1 -0
  33. package/dist/timecampus/components/DataTable.d.ts +26 -0
  34. package/dist/timecampus/components/DataTable.d.ts.map +1 -0
  35. package/dist/timecampus/components/EmptyState.d.ts +12 -0
  36. package/dist/timecampus/components/EmptyState.d.ts.map +1 -0
  37. package/dist/timecampus/components/ErrorBoundary.d.ts +19 -0
  38. package/dist/timecampus/components/ErrorBoundary.d.ts.map +1 -0
  39. package/dist/timecampus/components/ErrorBoundary.js +52 -0
  40. package/dist/timecampus/components/ErrorBoundary.js.map +1 -0
  41. package/dist/timecampus/components/FilterBar.d.ts +26 -0
  42. package/dist/timecampus/components/FilterBar.d.ts.map +1 -0
  43. package/dist/timecampus/components/LoadingSkeleton.d.ts +10 -0
  44. package/dist/timecampus/components/LoadingSkeleton.d.ts.map +1 -0
  45. package/dist/timecampus/components/LoadingSkeleton.js +76 -0
  46. package/dist/timecampus/components/LoadingSkeleton.js.map +1 -0
  47. package/dist/timecampus/components/Modal.d.ts +14 -0
  48. package/dist/timecampus/components/Modal.d.ts.map +1 -0
  49. package/dist/timecampus/components/PageLayout.d.ts +12 -0
  50. package/dist/timecampus/components/PageLayout.d.ts.map +1 -0
  51. package/dist/timecampus/components/PageLayout.js +23 -0
  52. package/dist/timecampus/components/PageLayout.js.map +1 -0
  53. package/dist/timecampus/components/StatCard.d.ts +17 -0
  54. package/dist/timecampus/components/StatCard.d.ts.map +1 -0
  55. package/dist/timecampus/components/StatCard.js +48 -0
  56. package/dist/timecampus/components/StatCard.js.map +1 -0
  57. package/dist/timecampus/components/StatusBadge.d.ts +16 -0
  58. package/dist/timecampus/components/StatusBadge.d.ts.map +1 -0
  59. package/dist/timecampus/components/Toast.d.ts +28 -0
  60. package/dist/timecampus/components/Toast.d.ts.map +1 -0
  61. package/dist/timecampus/components/index.d.ts +14 -0
  62. package/dist/timecampus/components/index.d.ts.map +1 -0
  63. package/dist/timecampus/hooks/index.d.ts +7 -0
  64. package/dist/timecampus/hooks/index.d.ts.map +1 -0
  65. package/dist/timecampus/hooks/useToast.d.ts +17 -0
  66. package/dist/timecampus/hooks/useToast.d.ts.map +1 -0
  67. package/dist/timecampus/index.d.ts +10 -0
  68. package/dist/timecampus/index.d.ts.map +1 -0
  69. package/dist/timecampus/index.js +4 -0
  70. package/dist/timecampus/pages/HomePage.d.ts +4 -0
  71. package/dist/timecampus/pages/HomePage.d.ts.map +1 -0
  72. package/dist/timecampus/pages/HomePage.js +239 -0
  73. package/dist/timecampus/pages/HomePage.js.map +1 -0
  74. package/dist/timecampus/pages/applets/AppletStorePage.d.ts +2 -0
  75. package/dist/timecampus/pages/applets/AppletStorePage.d.ts.map +1 -0
  76. package/dist/timecampus/pages/applets/AppletStorePage.js +77 -0
  77. package/dist/timecampus/pages/applets/AppletStorePage.js.map +1 -0
  78. package/dist/timecampus/pages/applets/InstalledAppletsPage.d.ts +2 -0
  79. package/dist/timecampus/pages/applets/InstalledAppletsPage.d.ts.map +1 -0
  80. package/dist/timecampus/pages/applets/InstalledAppletsPage.js +83 -0
  81. package/dist/timecampus/pages/applets/InstalledAppletsPage.js.map +1 -0
  82. package/dist/timecampus/pages/application-usage/ApplicationUsagePage.d.ts +2 -0
  83. package/dist/timecampus/pages/application-usage/ApplicationUsagePage.d.ts.map +1 -0
  84. package/dist/timecampus/pages/application-usage/ApplicationUsagePage.js +118 -0
  85. package/dist/timecampus/pages/application-usage/ApplicationUsagePage.js.map +1 -0
  86. package/dist/timecampus/pages/application-usage/ApplicationUsageSettingsPage.d.ts +2 -0
  87. package/dist/timecampus/pages/application-usage/ApplicationUsageSettingsPage.d.ts.map +1 -0
  88. package/dist/timecampus/pages/application-usage/ApplicationUsageSettingsPage.js +129 -0
  89. package/dist/timecampus/pages/application-usage/ApplicationUsageSettingsPage.js.map +1 -0
  90. package/dist/timecampus/pages/channels/ChannelsPage.d.ts +2 -0
  91. package/dist/timecampus/pages/channels/ChannelsPage.d.ts.map +1 -0
  92. package/dist/timecampus/pages/channels/ChannelsPage.js +64 -0
  93. package/dist/timecampus/pages/channels/ChannelsPage.js.map +1 -0
  94. package/dist/timecampus/pages/client-portal/ClientPortalPage.d.ts +2 -0
  95. package/dist/timecampus/pages/client-portal/ClientPortalPage.d.ts.map +1 -0
  96. package/dist/timecampus/pages/client-portal/ClientPortalPage.js +108 -0
  97. package/dist/timecampus/pages/client-portal/ClientPortalPage.js.map +1 -0
  98. package/dist/timecampus/pages/dashboard/AnalyticsPage.d.ts +2 -0
  99. package/dist/timecampus/pages/dashboard/AnalyticsPage.d.ts.map +1 -0
  100. package/dist/timecampus/pages/dashboard/AnalyticsPage.js +91 -0
  101. package/dist/timecampus/pages/dashboard/AnalyticsPage.js.map +1 -0
  102. package/dist/timecampus/pages/dashboard/ReportsPage.d.ts +2 -0
  103. package/dist/timecampus/pages/dashboard/ReportsPage.d.ts.map +1 -0
  104. package/dist/timecampus/pages/dashboard/ReportsPage.js +102 -0
  105. package/dist/timecampus/pages/dashboard/ReportsPage.js.map +1 -0
  106. package/dist/timecampus/pages/email-tracking/EmailAnalyticsPage.d.ts +2 -0
  107. package/dist/timecampus/pages/email-tracking/EmailAnalyticsPage.d.ts.map +1 -0
  108. package/dist/timecampus/pages/email-tracking/EmailAnalyticsPage.js +73 -0
  109. package/dist/timecampus/pages/email-tracking/EmailAnalyticsPage.js.map +1 -0
  110. package/dist/timecampus/pages/email-tracking/EmailSettingsPage.d.ts +2 -0
  111. package/dist/timecampus/pages/email-tracking/EmailSettingsPage.d.ts.map +1 -0
  112. package/dist/timecampus/pages/email-tracking/EmailSettingsPage.js +138 -0
  113. package/dist/timecampus/pages/email-tracking/EmailSettingsPage.js.map +1 -0
  114. package/dist/timecampus/pages/email-tracking/EmailTrackingPage.d.ts +2 -0
  115. package/dist/timecampus/pages/email-tracking/EmailTrackingPage.d.ts.map +1 -0
  116. package/dist/timecampus/pages/email-tracking/EmailTrackingPage.js +71 -0
  117. package/dist/timecampus/pages/email-tracking/EmailTrackingPage.js.map +1 -0
  118. package/dist/timecampus/pages/expense-tracking/ExpenseTrackingPage.d.ts +2 -0
  119. package/dist/timecampus/pages/expense-tracking/ExpenseTrackingPage.d.ts.map +1 -0
  120. package/dist/timecampus/pages/expense-tracking/ExpenseTrackingPage.js +102 -0
  121. package/dist/timecampus/pages/expense-tracking/ExpenseTrackingPage.js.map +1 -0
  122. package/dist/timecampus/pages/focus-score/FocusScorePage.d.ts +2 -0
  123. package/dist/timecampus/pages/focus-score/FocusScorePage.d.ts.map +1 -0
  124. package/dist/timecampus/pages/focus-score/FocusScorePage.js +131 -0
  125. package/dist/timecampus/pages/focus-score/FocusScorePage.js.map +1 -0
  126. package/dist/timecampus/pages/focus-score/FocusScoreSettingsPage.d.ts +2 -0
  127. package/dist/timecampus/pages/focus-score/FocusScoreSettingsPage.d.ts.map +1 -0
  128. package/dist/timecampus/pages/focus-score/FocusScoreSettingsPage.js +115 -0
  129. package/dist/timecampus/pages/focus-score/FocusScoreSettingsPage.js.map +1 -0
  130. package/dist/timecampus/pages/geofencing/GeofencingPage.d.ts +2 -0
  131. package/dist/timecampus/pages/geofencing/GeofencingPage.d.ts.map +1 -0
  132. package/dist/timecampus/pages/geofencing/GeofencingPage.js +70 -0
  133. package/dist/timecampus/pages/geofencing/GeofencingPage.js.map +1 -0
  134. package/dist/timecampus/pages/geofencing/GeofencingSettingsPage.d.ts +2 -0
  135. package/dist/timecampus/pages/geofencing/GeofencingSettingsPage.d.ts.map +1 -0
  136. package/dist/timecampus/pages/geofencing/GeofencingSettingsPage.js +106 -0
  137. package/dist/timecampus/pages/geofencing/GeofencingSettingsPage.js.map +1 -0
  138. package/dist/timecampus/pages/industry-solutions/IndustrySolutionsPage.d.ts +2 -0
  139. package/dist/timecampus/pages/industry-solutions/IndustrySolutionsPage.d.ts.map +1 -0
  140. package/dist/timecampus/pages/industry-solutions/IndustrySolutionsPage.js +77 -0
  141. package/dist/timecampus/pages/industry-solutions/IndustrySolutionsPage.js.map +1 -0
  142. package/dist/timecampus/pages/location-tracking/LocationPrivacySettingsPage.d.ts +2 -0
  143. package/dist/timecampus/pages/location-tracking/LocationPrivacySettingsPage.d.ts.map +1 -0
  144. package/dist/timecampus/pages/location-tracking/LocationPrivacySettingsPage.js +115 -0
  145. package/dist/timecampus/pages/location-tracking/LocationPrivacySettingsPage.js.map +1 -0
  146. package/dist/timecampus/pages/location-tracking/LocationTrackingPage.d.ts +2 -0
  147. package/dist/timecampus/pages/location-tracking/LocationTrackingPage.d.ts.map +1 -0
  148. package/dist/timecampus/pages/location-tracking/LocationTrackingPage.js +97 -0
  149. package/dist/timecampus/pages/location-tracking/LocationTrackingPage.js.map +1 -0
  150. package/dist/timecampus/pages/meetings/MeetingAnalyticsPage.d.ts +2 -0
  151. package/dist/timecampus/pages/meetings/MeetingAnalyticsPage.d.ts.map +1 -0
  152. package/dist/timecampus/pages/meetings/MeetingAnalyticsPage.js +89 -0
  153. package/dist/timecampus/pages/meetings/MeetingAnalyticsPage.js.map +1 -0
  154. package/dist/timecampus/pages/meetings/MeetingCreatePage.d.ts +2 -0
  155. package/dist/timecampus/pages/meetings/MeetingCreatePage.d.ts.map +1 -0
  156. package/dist/timecampus/pages/meetings/MeetingCreatePage.js +101 -0
  157. package/dist/timecampus/pages/meetings/MeetingCreatePage.js.map +1 -0
  158. package/dist/timecampus/pages/meetings/MeetingDetailPage.d.ts +2 -0
  159. package/dist/timecampus/pages/meetings/MeetingDetailPage.d.ts.map +1 -0
  160. package/dist/timecampus/pages/meetings/MeetingDetailPage.js +123 -0
  161. package/dist/timecampus/pages/meetings/MeetingDetailPage.js.map +1 -0
  162. package/dist/timecampus/pages/meetings/MeetingsPage.d.ts +2 -0
  163. package/dist/timecampus/pages/meetings/MeetingsPage.d.ts.map +1 -0
  164. package/dist/timecampus/pages/meetings/MeetingsPage.js +90 -0
  165. package/dist/timecampus/pages/meetings/MeetingsPage.js.map +1 -0
  166. package/dist/timecampus/pages/pomodoro/PomodoroAnalyticsPage.d.ts +2 -0
  167. package/dist/timecampus/pages/pomodoro/PomodoroAnalyticsPage.d.ts.map +1 -0
  168. package/dist/timecampus/pages/pomodoro/PomodoroAnalyticsPage.js +113 -0
  169. package/dist/timecampus/pages/pomodoro/PomodoroAnalyticsPage.js.map +1 -0
  170. package/dist/timecampus/pages/pomodoro/PomodoroPage.d.ts +2 -0
  171. package/dist/timecampus/pages/pomodoro/PomodoroPage.d.ts.map +1 -0
  172. package/dist/timecampus/pages/pomodoro/PomodoroPage.js +160 -0
  173. package/dist/timecampus/pages/pomodoro/PomodoroPage.js.map +1 -0
  174. package/dist/timecampus/pages/pomodoro/PomodoroSettingsPage.d.ts +2 -0
  175. package/dist/timecampus/pages/pomodoro/PomodoroSettingsPage.d.ts.map +1 -0
  176. package/dist/timecampus/pages/pomodoro/PomodoroSettingsPage.js +176 -0
  177. package/dist/timecampus/pages/pomodoro/PomodoroSettingsPage.js.map +1 -0
  178. package/dist/timecampus/pages/projects/ProjectCreatePage.d.ts +2 -0
  179. package/dist/timecampus/pages/projects/ProjectCreatePage.d.ts.map +1 -0
  180. package/dist/timecampus/pages/projects/ProjectCreatePage.js +104 -0
  181. package/dist/timecampus/pages/projects/ProjectCreatePage.js.map +1 -0
  182. package/dist/timecampus/pages/projects/ProjectDetailPage.d.ts +2 -0
  183. package/dist/timecampus/pages/projects/ProjectDetailPage.d.ts.map +1 -0
  184. package/dist/timecampus/pages/projects/ProjectDetailPage.js +91 -0
  185. package/dist/timecampus/pages/projects/ProjectDetailPage.js.map +1 -0
  186. package/dist/timecampus/pages/projects/ProjectsPage.d.ts +2 -0
  187. package/dist/timecampus/pages/projects/ProjectsPage.d.ts.map +1 -0
  188. package/dist/timecampus/pages/projects/ProjectsPage.js +95 -0
  189. package/dist/timecampus/pages/projects/ProjectsPage.js.map +1 -0
  190. package/dist/timecampus/pages/projects/TasksPage.d.ts +2 -0
  191. package/dist/timecampus/pages/projects/TasksPage.d.ts.map +1 -0
  192. package/dist/timecampus/pages/projects/TasksPage.js +73 -0
  193. package/dist/timecampus/pages/projects/TasksPage.js.map +1 -0
  194. package/dist/timecampus/pages/resource-planning/ResourcePlanningPage.d.ts +2 -0
  195. package/dist/timecampus/pages/resource-planning/ResourcePlanningPage.d.ts.map +1 -0
  196. package/dist/timecampus/pages/resource-planning/ResourcePlanningPage.js +129 -0
  197. package/dist/timecampus/pages/resource-planning/ResourcePlanningPage.js.map +1 -0
  198. package/dist/timecampus/pages/team/TeamAnalyticsPage.d.ts +2 -0
  199. package/dist/timecampus/pages/team/TeamAnalyticsPage.d.ts.map +1 -0
  200. package/dist/timecampus/pages/team/TeamAnalyticsPage.js +78 -0
  201. package/dist/timecampus/pages/team/TeamAnalyticsPage.js.map +1 -0
  202. package/dist/timecampus/pages/team/TeamMembersPage.d.ts +2 -0
  203. package/dist/timecampus/pages/team/TeamMembersPage.d.ts.map +1 -0
  204. package/dist/timecampus/pages/team/TeamMembersPage.js +97 -0
  205. package/dist/timecampus/pages/team/TeamMembersPage.js.map +1 -0
  206. package/dist/timecampus/pages/team/TeamPage.d.ts +2 -0
  207. package/dist/timecampus/pages/team/TeamPage.d.ts.map +1 -0
  208. package/dist/timecampus/pages/team/TeamPage.js +82 -0
  209. package/dist/timecampus/pages/team/TeamPage.js.map +1 -0
  210. package/dist/timecampus/pages/team-activity/TeamActivityPage.d.ts +2 -0
  211. package/dist/timecampus/pages/team-activity/TeamActivityPage.d.ts.map +1 -0
  212. package/dist/timecampus/pages/team-activity/TeamActivityPage.js +107 -0
  213. package/dist/timecampus/pages/team-activity/TeamActivityPage.js.map +1 -0
  214. package/dist/timecampus/pages/team-activity/TeamActivitySettingsPage.d.ts +2 -0
  215. package/dist/timecampus/pages/team-activity/TeamActivitySettingsPage.d.ts.map +1 -0
  216. package/dist/timecampus/pages/team-activity/TeamActivitySettingsPage.js +120 -0
  217. package/dist/timecampus/pages/team-activity/TeamActivitySettingsPage.js.map +1 -0
  218. package/dist/timecampus/pages/templates/TemplateApplicationPage.d.ts +2 -0
  219. package/dist/timecampus/pages/templates/TemplateApplicationPage.d.ts.map +1 -0
  220. package/dist/timecampus/pages/templates/TemplateApplicationPage.js +84 -0
  221. package/dist/timecampus/pages/templates/TemplateApplicationPage.js.map +1 -0
  222. package/dist/timecampus/pages/templates/TemplateDetailPage.d.ts +2 -0
  223. package/dist/timecampus/pages/templates/TemplateDetailPage.d.ts.map +1 -0
  224. package/dist/timecampus/pages/templates/TemplateDetailPage.js +98 -0
  225. package/dist/timecampus/pages/templates/TemplateDetailPage.js.map +1 -0
  226. package/dist/timecampus/pages/templates/TemplatesPage.d.ts +2 -0
  227. package/dist/timecampus/pages/templates/TemplatesPage.d.ts.map +1 -0
  228. package/dist/timecampus/pages/templates/TemplatesPage.js +76 -0
  229. package/dist/timecampus/pages/templates/TemplatesPage.js.map +1 -0
  230. package/dist/timecampus/pages/time/TimeEntriesPage.d.ts +2 -0
  231. package/dist/timecampus/pages/time/TimeEntriesPage.d.ts.map +1 -0
  232. package/dist/timecampus/pages/time/TimeEntriesPage.js +117 -0
  233. package/dist/timecampus/pages/time/TimeEntriesPage.js.map +1 -0
  234. package/dist/timecampus/pages/time/TimeTrackingPage.d.ts +2 -0
  235. package/dist/timecampus/pages/time/TimeTrackingPage.d.ts.map +1 -0
  236. package/dist/timecampus/pages/time/TimeTrackingPage.js +112 -0
  237. package/dist/timecampus/pages/time/TimeTrackingPage.js.map +1 -0
  238. package/dist/timecampus/pages/time/TimerPage.d.ts +2 -0
  239. package/dist/timecampus/pages/time/TimerPage.d.ts.map +1 -0
  240. package/dist/timecampus/pages/time/TimerPage.js +80 -0
  241. package/dist/timecampus/pages/time/TimerPage.js.map +1 -0
  242. package/dist/timecampus/pages/time-approval/TimeApprovalPage.d.ts +2 -0
  243. package/dist/timecampus/pages/time-approval/TimeApprovalPage.d.ts.map +1 -0
  244. package/dist/timecampus/pages/time-approval/TimeApprovalPage.js +130 -0
  245. package/dist/timecampus/pages/time-approval/TimeApprovalPage.js.map +1 -0
  246. package/dist/timecampus/pages/widgets/WidgetDetailPage.d.ts +2 -0
  247. package/dist/timecampus/pages/widgets/WidgetDetailPage.d.ts.map +1 -0
  248. package/dist/timecampus/pages/widgets/WidgetDetailPage.js +96 -0
  249. package/dist/timecampus/pages/widgets/WidgetDetailPage.js.map +1 -0
  250. package/dist/timecampus/pages/widgets/WidgetsPage.d.ts +2 -0
  251. package/dist/timecampus/pages/widgets/WidgetsPage.d.ts.map +1 -0
  252. package/dist/timecampus/pages/widgets/WidgetsPage.js +77 -0
  253. package/dist/timecampus/pages/widgets/WidgetsPage.js.map +1 -0
  254. package/dist/timecampus/pages/work-patterns/WorkPatternsPage.d.ts +2 -0
  255. package/dist/timecampus/pages/work-patterns/WorkPatternsPage.d.ts.map +1 -0
  256. package/dist/timecampus/pages/work-patterns/WorkPatternsPage.js +95 -0
  257. package/dist/timecampus/pages/work-patterns/WorkPatternsPage.js.map +1 -0
  258. package/dist/timecampus/pages/work-patterns/WorkPatternsSettingsPage.d.ts +2 -0
  259. package/dist/timecampus/pages/work-patterns/WorkPatternsSettingsPage.d.ts.map +1 -0
  260. package/dist/timecampus/pages/work-patterns/WorkPatternsSettingsPage.js +129 -0
  261. package/dist/timecampus/pages/work-patterns/WorkPatternsSettingsPage.js.map +1 -0
  262. package/dist/timecampus/pages/workflows/WorkflowsPage.d.ts +2 -0
  263. package/dist/timecampus/pages/workflows/WorkflowsPage.d.ts.map +1 -0
  264. package/dist/timecampus/pages/workflows/WorkflowsPage.js +80 -0
  265. package/dist/timecampus/pages/workflows/WorkflowsPage.js.map +1 -0
  266. package/dist/timecampus/providers/TimeCampusProvider.d.ts +29 -0
  267. package/dist/timecampus/providers/TimeCampusProvider.d.ts.map +1 -0
  268. package/dist/timecampus/providers/TimeCampusProvider.js +92 -0
  269. package/dist/timecampus/providers/TimeCampusProvider.js.map +1 -0
  270. package/dist/timecampus/store/timecampusStore.d.ts +71 -0
  271. package/dist/timecampus/store/timecampusStore.d.ts.map +1 -0
  272. package/dist/timecampus/store/timecampusStore.js +33 -0
  273. package/dist/timecampus/store/timecampusStore.js.map +1 -0
  274. package/dist/timecampus/types/index.d.ts +615 -0
  275. package/dist/timecampus/types/index.d.ts.map +1 -0
  276. package/dist/timecampus/utils/helpers.d.ts +19 -0
  277. package/dist/timecampus/utils/helpers.d.ts.map +1 -0
  278. package/dist/timecampus/utils/helpers.js +73 -0
  279. package/dist/timecampus/utils/helpers.js.map +1 -0
  280. package/dist/timecampus/utils/index.d.ts +2 -0
  281. package/dist/timecampus/utils/index.d.ts.map +1 -0
  282. package/package.json +110 -0
@@ -0,0 +1,115 @@
1
+ import { useTimeCampus as e } from "../../providers/TimeCampusProvider.js";
2
+ import { PageLayout as t } from "../../components/PageLayout.js";
3
+ import { LoadingSkeleton as n } from "../../components/LoadingSkeleton.js";
4
+ import { useGetConfigurationByKeyQuery as r, useSetConfigurationMutation as i } from "../../../generated/wspace-operations.js";
5
+ import { useEffect as a, useState as o } from "react";
6
+ import { Shield as s } from "lucide-react";
7
+ import { jsx as c, jsxs as l } from "react/jsx-runtime";
8
+ //#region src/timecampus/pages/location-tracking/LocationPrivacySettingsPage.tsx
9
+ var u = "location.privacy";
10
+ function d() {
11
+ let { workspaceId: d = "" } = e(), { data: f, loading: p, error: m } = r({ variables: { key: u } }), [h, { loading: g }] = i(), _ = f?.configurationByKey?.value ?? {}, [v, y] = o(!0), [b, x] = o(!1), [S, C] = o(!1);
12
+ return a(() => {
13
+ _ && (y(_.trackingEnabled ?? !0), x(_.shareWithTeam ?? !1), C(_.preciseLocation ?? !1));
14
+ }, [
15
+ _.trackingEnabled,
16
+ _.shareWithTeam,
17
+ _.preciseLocation
18
+ ]), p ? /* @__PURE__ */ c(t, {
19
+ title: "Location Privacy Settings",
20
+ description: "Control location tracking and data sharing",
21
+ children: /* @__PURE__ */ c(n, { variant: "detail" })
22
+ }) : m ? /* @__PURE__ */ c(t, {
23
+ title: "Location Privacy Settings",
24
+ description: "Control location tracking and data sharing",
25
+ children: /* @__PURE__ */ c("div", {
26
+ className: "rounded-lg border border-red-200 bg-red-50 p-4 text-sm text-red-600 dark:border-red-800 dark:bg-red-900/20 dark:text-red-400",
27
+ children: "Failed to load privacy settings. Please try again later."
28
+ })
29
+ }) : /* @__PURE__ */ c(t, {
30
+ title: "Location Privacy Settings",
31
+ description: "Control location tracking and data sharing",
32
+ children: /* @__PURE__ */ l("div", {
33
+ className: "mx-auto max-w-2xl space-y-6",
34
+ children: [/* @__PURE__ */ l("div", {
35
+ className: "rounded-xl border border-border bg-card p-6",
36
+ children: [/* @__PURE__ */ l("h3", {
37
+ className: "mb-4 flex items-center gap-2 text-sm font-semibold text-foreground",
38
+ children: [/* @__PURE__ */ c(s, { className: "h-4 w-4" }), "Privacy Controls"]
39
+ }), /* @__PURE__ */ l("div", {
40
+ className: "space-y-3",
41
+ children: [
42
+ /* @__PURE__ */ l("label", {
43
+ className: "flex items-center justify-between",
44
+ children: [/* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("span", {
45
+ className: "text-sm font-medium text-foreground",
46
+ children: "Enable location tracking"
47
+ }), /* @__PURE__ */ c("p", {
48
+ className: "text-xs text-muted-foreground",
49
+ children: "Allow the app to track your work location"
50
+ })] }), /* @__PURE__ */ c("input", {
51
+ type: "checkbox",
52
+ checked: v,
53
+ onChange: (e) => y(e.target.checked),
54
+ className: "h-4 w-4 rounded border-border"
55
+ })]
56
+ }),
57
+ /* @__PURE__ */ l("label", {
58
+ className: "flex items-center justify-between",
59
+ children: [/* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("span", {
60
+ className: "text-sm font-medium text-foreground",
61
+ children: "Share with team"
62
+ }), /* @__PURE__ */ c("p", {
63
+ className: "text-xs text-muted-foreground",
64
+ children: "Let team members see your current location"
65
+ })] }), /* @__PURE__ */ c("input", {
66
+ type: "checkbox",
67
+ checked: b,
68
+ onChange: (e) => x(e.target.checked),
69
+ className: "h-4 w-4 rounded border-border"
70
+ })]
71
+ }),
72
+ /* @__PURE__ */ l("label", {
73
+ className: "flex items-center justify-between",
74
+ children: [/* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("span", {
75
+ className: "text-sm font-medium text-foreground",
76
+ children: "Precise location"
77
+ }), /* @__PURE__ */ c("p", {
78
+ className: "text-xs text-muted-foreground",
79
+ children: "Use precise GPS vs approximate location"
80
+ })] }), /* @__PURE__ */ c("input", {
81
+ type: "checkbox",
82
+ checked: S,
83
+ onChange: (e) => C(e.target.checked),
84
+ className: "h-4 w-4 rounded border-border"
85
+ })]
86
+ })
87
+ ]
88
+ })]
89
+ }), /* @__PURE__ */ c("div", {
90
+ className: "flex justify-end",
91
+ children: /* @__PURE__ */ c("button", {
92
+ onClick: async () => {
93
+ await h({ variables: { input: {
94
+ key: u,
95
+ value: {
96
+ trackingEnabled: v,
97
+ shareWithTeam: b,
98
+ preciseLocation: S
99
+ },
100
+ description: "Location privacy settings",
101
+ scope: "USER"
102
+ } } });
103
+ },
104
+ disabled: g,
105
+ className: "rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50",
106
+ children: g ? "Saving..." : "Save Settings"
107
+ })
108
+ })]
109
+ })
110
+ });
111
+ }
112
+ //#endregion
113
+ export { d as LocationPrivacySettingsPage };
114
+
115
+ //# sourceMappingURL=LocationPrivacySettingsPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocationPrivacySettingsPage.js","names":[],"sources":["../../../../src/timecampus/pages/location-tracking/LocationPrivacySettingsPage.tsx"],"sourcesContent":["import { useState, useEffect } from \"react\";\nimport { Shield } from \"lucide-react\";\nimport { PageLayout } from \"../../components/PageLayout\";\nimport { LoadingSkeleton } from \"../../components/LoadingSkeleton\";\nimport { useTimeCampus } from \"../../providers/TimeCampusProvider\";\nimport {\n useGetConfigurationByKeyQuery,\n useSetConfigurationMutation,\n} from \"@/generated/wspace-operations\";\n\nconst CONFIG_KEY = \"location.privacy\";\n\nexport function LocationPrivacySettingsPage() {\n const { workspaceId = \"\" } = useTimeCampus();\n\n const { data, loading, error } = useGetConfigurationByKeyQuery({\n variables: { key: CONFIG_KEY },\n });\n\n const [setConfiguration, { loading: saving }] = useSetConfigurationMutation();\n\n const configValue = (data?.configurationByKey?.value ?? {}) as Record<\n string,\n boolean\n >;\n\n const [trackingEnabled, setTrackingEnabled] = useState(true);\n const [shareWithTeam, setShareWithTeam] = useState(false);\n const [preciseLocation, setPreciseLocation] = useState(false);\n\n useEffect(() => {\n if (configValue) {\n setTrackingEnabled(configValue.trackingEnabled ?? true);\n setShareWithTeam(configValue.shareWithTeam ?? false);\n setPreciseLocation(configValue.preciseLocation ?? false);\n }\n }, [\n configValue.trackingEnabled,\n configValue.shareWithTeam,\n configValue.preciseLocation,\n ]);\n\n const handleSave = async () => {\n await setConfiguration({\n variables: {\n input: {\n key: CONFIG_KEY,\n value: { trackingEnabled, shareWithTeam, preciseLocation },\n description: \"Location privacy settings\",\n scope: \"USER\" as never,\n },\n },\n });\n };\n\n if (loading) {\n return (\n <PageLayout\n title=\"Location Privacy Settings\"\n description=\"Control location tracking and data sharing\"\n >\n <LoadingSkeleton variant=\"detail\" />\n </PageLayout>\n );\n }\n\n if (error) {\n return (\n <PageLayout\n title=\"Location Privacy Settings\"\n description=\"Control location tracking and data sharing\"\n >\n <div className=\"rounded-lg border border-red-200 bg-red-50 p-4 text-sm text-red-600 dark:border-red-800 dark:bg-red-900/20 dark:text-red-400\">\n Failed to load privacy settings. Please try again later.\n </div>\n </PageLayout>\n );\n }\n\n return (\n <PageLayout\n title=\"Location Privacy Settings\"\n description=\"Control location tracking and data sharing\"\n >\n <div className=\"mx-auto max-w-2xl space-y-6\">\n <div className=\"rounded-xl border border-border bg-card p-6\">\n <h3 className=\"mb-4 flex items-center gap-2 text-sm font-semibold text-foreground\">\n <Shield className=\"h-4 w-4\" />\n Privacy Controls\n </h3>\n <div className=\"space-y-3\">\n <label className=\"flex items-center justify-between\">\n <div>\n <span className=\"text-sm font-medium text-foreground\">\n Enable location tracking\n </span>\n <p className=\"text-xs text-muted-foreground\">\n Allow the app to track your work location\n </p>\n </div>\n <input\n type=\"checkbox\"\n checked={trackingEnabled}\n onChange={(e) => setTrackingEnabled(e.target.checked)}\n className=\"h-4 w-4 rounded border-border\"\n />\n </label>\n <label className=\"flex items-center justify-between\">\n <div>\n <span className=\"text-sm font-medium text-foreground\">\n Share with team\n </span>\n <p className=\"text-xs text-muted-foreground\">\n Let team members see your current location\n </p>\n </div>\n <input\n type=\"checkbox\"\n checked={shareWithTeam}\n onChange={(e) => setShareWithTeam(e.target.checked)}\n className=\"h-4 w-4 rounded border-border\"\n />\n </label>\n <label className=\"flex items-center justify-between\">\n <div>\n <span className=\"text-sm font-medium text-foreground\">\n Precise location\n </span>\n <p className=\"text-xs text-muted-foreground\">\n Use precise GPS vs approximate location\n </p>\n </div>\n <input\n type=\"checkbox\"\n checked={preciseLocation}\n onChange={(e) => setPreciseLocation(e.target.checked)}\n className=\"h-4 w-4 rounded border-border\"\n />\n </label>\n </div>\n </div>\n <div className=\"flex justify-end\">\n <button\n onClick={handleSave}\n disabled={saving}\n className=\"rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50\"\n >\n {saving ? \"Saving...\" : \"Save Settings\"}\n </button>\n </div>\n </div>\n </PageLayout>\n );\n}\n"],"mappings":";;;;;;;;AAUA,IAAM,IAAa;AAEnB,SAAgB,IAA8B;CAC5C,IAAM,EAAE,iBAAc,OAAO,GAAe,EAEtC,EAAE,SAAM,YAAS,aAAU,EAA8B,EAC7D,WAAW,EAAE,KAAK,GAAY,EAC/B,CAAC,EAEI,CAAC,GAAkB,EAAE,SAAS,OAAY,GAA6B,EAEvE,IAAe,GAAM,oBAAoB,SAAS,EAAE,EAKpD,CAAC,GAAiB,KAAsB,EAAS,GAAK,EACtD,CAAC,GAAe,KAAoB,EAAS,GAAM,EACnD,CAAC,GAAiB,KAAsB,EAAS,GAAM;AAmD7D,QAjDA,QAAgB;AACd,EAAI,MACF,EAAmB,EAAY,mBAAmB,GAAK,EACvD,EAAiB,EAAY,iBAAiB,GAAM,EACpD,EAAmB,EAAY,mBAAmB,GAAM;IAEzD;EACD,EAAY;EACZ,EAAY;EACZ,EAAY;EACb,CAAC,EAeE,IAEA,kBAAC,GAAD;EACE,OAAM;EACN,aAAY;YAEZ,kBAAC,GAAD,EAAiB,SAAQ,UAAW,CAAA;EACzB,CAAA,GAIb,IAEA,kBAAC,GAAD;EACE,OAAM;EACN,aAAY;YAEZ,kBAAC,OAAD;GAAK,WAAU;aAA+H;GAExI,CAAA;EACK,CAAA,GAKf,kBAAC,GAAD;EACE,OAAM;EACN,aAAY;YAEZ,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,MAAD;KAAI,WAAU;eAAd,CACE,kBAAC,GAAD,EAAQ,WAAU,WAAY,CAAA,EAAA,mBAE3B;QACL,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,SAAD;OAAO,WAAU;iBAAjB,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,QAAD;QAAM,WAAU;kBAAsC;QAE/C,CAAA,EACP,kBAAC,KAAD;QAAG,WAAU;kBAAgC;QAEzC,CAAA,CACA,EAAA,CAAA,EACN,kBAAC,SAAD;QACE,MAAK;QACL,SAAS;QACT,WAAW,MAAM,EAAmB,EAAE,OAAO,QAAQ;QACrD,WAAU;QACV,CAAA,CACI;;MACR,kBAAC,SAAD;OAAO,WAAU;iBAAjB,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,QAAD;QAAM,WAAU;kBAAsC;QAE/C,CAAA,EACP,kBAAC,KAAD;QAAG,WAAU;kBAAgC;QAEzC,CAAA,CACA,EAAA,CAAA,EACN,kBAAC,SAAD;QACE,MAAK;QACL,SAAS;QACT,WAAW,MAAM,EAAiB,EAAE,OAAO,QAAQ;QACnD,WAAU;QACV,CAAA,CACI;;MACR,kBAAC,SAAD;OAAO,WAAU;iBAAjB,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,QAAD;QAAM,WAAU;kBAAsC;QAE/C,CAAA,EACP,kBAAC,KAAD;QAAG,WAAU;kBAAgC;QAEzC,CAAA,CACA,EAAA,CAAA,EACN,kBAAC,SAAD;QACE,MAAK;QACL,SAAS;QACT,WAAW,MAAM,EAAmB,EAAE,OAAO,QAAQ;QACrD,WAAU;QACV,CAAA,CACI;;MACJ;OACF;OACN,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,UAAD;KACE,SArGS,YAAY;AAC7B,YAAM,EAAiB,EACrB,WAAW,EACT,OAAO;OACL,KAAK;OACL,OAAO;QAAE;QAAiB;QAAe;QAAiB;OAC1D,aAAa;OACb,OAAO;OACR,EACF,EACF,CAAC;;KA4FM,UAAU;KACV,WAAU;eAET,IAAS,cAAc;KACjB,CAAA;IACL,CAAA,CACF;;EACK,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare function LocationTrackingPage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=LocationTrackingPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocationTrackingPage.d.ts","sourceRoot":"","sources":["../../../../src/timecampus/pages/location-tracking/LocationTrackingPage.tsx"],"names":[],"mappings":"AAYA,wBAAgB,oBAAoB,4CA6GnC"}
@@ -0,0 +1,97 @@
1
+ import { useTimeCampus as e } from "../../providers/TimeCampusProvider.js";
2
+ import { formatHours as t } from "../../utils/helpers.js";
3
+ import { PageLayout as n } from "../../components/PageLayout.js";
4
+ import { StatCard as r } from "../../components/StatCard.js";
5
+ import { LoadingSkeleton as i } from "../../components/LoadingSkeleton.js";
6
+ import { useGetLocationStatsQuery as a, useListLocationEntriesQuery as o } from "../../../generated/wspace-operations.js";
7
+ import { Clock as s, MapPin as c } from "lucide-react";
8
+ import { jsx as l, jsxs as u } from "react/jsx-runtime";
9
+ //#region src/timecampus/pages/location-tracking/LocationTrackingPage.tsx
10
+ function d() {
11
+ let { workspaceId: d = "" } = e(), { data: f, loading: p, error: m } = o(), { data: h, loading: g, error: _ } = a(), v = f?.locationEntries?.items ?? [], y = h?.locationStats;
12
+ return p && g ? /* @__PURE__ */ l(n, {
13
+ title: "Location Tracking",
14
+ description: "Track work locations and productivity",
15
+ children: /* @__PURE__ */ l(i, {
16
+ variant: "list",
17
+ count: 4
18
+ })
19
+ }) : m && _ ? /* @__PURE__ */ l(n, {
20
+ title: "Location Tracking",
21
+ description: "Track work locations and productivity",
22
+ children: /* @__PURE__ */ l("div", {
23
+ className: "rounded-lg border border-red-200 bg-red-50 p-4 text-sm text-red-600 dark:border-red-800 dark:bg-red-900/20 dark:text-red-400",
24
+ children: "Failed to load location data. Please try again later."
25
+ })
26
+ }) : /* @__PURE__ */ u(n, {
27
+ title: "Location Tracking",
28
+ description: "Track work locations and productivity",
29
+ children: [/* @__PURE__ */ u("div", {
30
+ className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4",
31
+ children: [
32
+ /* @__PURE__ */ l(r, {
33
+ title: "Total Locations",
34
+ value: String(y?.totalLocations ?? 0),
35
+ icon: /* @__PURE__ */ l(c, { className: "h-5 w-5" })
36
+ }),
37
+ /* @__PURE__ */ l(r, {
38
+ title: "Unique Addresses",
39
+ value: String(y?.uniqueAddresses ?? 0),
40
+ icon: /* @__PURE__ */ l(c, { className: "h-5 w-5" })
41
+ }),
42
+ /* @__PURE__ */ l(r, {
43
+ title: "Most Frequent",
44
+ value: y?.mostFrequentLocation ?? "N/A"
45
+ }),
46
+ /* @__PURE__ */ l(r, {
47
+ title: "Total Duration",
48
+ value: t((y?.totalDuration ?? 0) / 3600),
49
+ icon: /* @__PURE__ */ l(s, { className: "h-5 w-5" }),
50
+ description: "Tracked time"
51
+ })
52
+ ]
53
+ }), /* @__PURE__ */ l("div", {
54
+ className: "rounded-xl border border-border bg-card",
55
+ children: /* @__PURE__ */ u("div", {
56
+ className: "divide-y divide-border",
57
+ children: [v.length === 0 && !p && /* @__PURE__ */ l("div", {
58
+ className: "p-4 text-center text-sm text-muted-foreground",
59
+ children: "No location entries found."
60
+ }), v.map((e) => /* @__PURE__ */ u("div", {
61
+ className: "flex items-center justify-between p-4 hover:bg-muted/50 transition-colors",
62
+ children: [/* @__PURE__ */ u("div", {
63
+ className: "flex items-center gap-3",
64
+ children: [/* @__PURE__ */ l(c, { className: "h-5 w-5 text-muted-foreground" }), /* @__PURE__ */ u("div", { children: [/* @__PURE__ */ l("p", {
65
+ className: "text-sm font-medium text-foreground",
66
+ children: e.address ?? "Unknown Location"
67
+ }), /* @__PURE__ */ u("p", {
68
+ className: "text-xs text-muted-foreground",
69
+ children: [
70
+ e.geofenceId ? "Geofenced" : "Manual",
71
+ " ·",
72
+ " ",
73
+ new Date(e.startTime).toLocaleDateString()
74
+ ]
75
+ })] })]
76
+ }), /* @__PURE__ */ l("div", {
77
+ className: "flex items-center gap-4",
78
+ children: /* @__PURE__ */ u("div", {
79
+ className: "text-right",
80
+ children: [/* @__PURE__ */ l("p", {
81
+ className: "text-sm font-medium text-foreground",
82
+ children: e.duration ? t(e.duration / 3600) : "Active"
83
+ }), /* @__PURE__ */ l("p", {
84
+ className: "text-xs text-muted-foreground",
85
+ children: "duration"
86
+ })]
87
+ })
88
+ })]
89
+ }, e.id))]
90
+ })
91
+ })]
92
+ });
93
+ }
94
+ //#endregion
95
+ export { d as LocationTrackingPage };
96
+
97
+ //# sourceMappingURL=LocationTrackingPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocationTrackingPage.js","names":[],"sources":["../../../../src/timecampus/pages/location-tracking/LocationTrackingPage.tsx"],"sourcesContent":["import { MapPin, Clock } from \"lucide-react\";\nimport { PageLayout } from \"../../components/PageLayout\";\nimport { StatCard } from \"../../components/StatCard\";\nimport { LoadingSkeleton } from \"../../components/LoadingSkeleton\";\nimport { formatHours } from \"../../utils/helpers\";\nimport { useTimeCampus } from \"../../providers/TimeCampusProvider\";\nimport {\n useListLocationEntriesQuery,\n useGetLocationStatsQuery,\n type LocationEntryFieldsFragment,\n} from \"@/generated/wspace-operations\";\n\nexport function LocationTrackingPage() {\n const { workspaceId = \"\" } = useTimeCampus();\n\n const {\n data: entriesData,\n loading: entriesLoading,\n error: entriesError,\n } = useListLocationEntriesQuery();\n const {\n data: statsData,\n loading: statsLoading,\n error: statsError,\n } = useGetLocationStatsQuery();\n\n const locations = entriesData?.locationEntries?.items ?? [];\n const stats = statsData?.locationStats;\n\n if (entriesLoading && statsLoading) {\n return (\n <PageLayout\n title=\"Location Tracking\"\n description=\"Track work locations and productivity\"\n >\n <LoadingSkeleton variant=\"list\" count={4} />\n </PageLayout>\n );\n }\n\n if (entriesError && statsError) {\n return (\n <PageLayout\n title=\"Location Tracking\"\n description=\"Track work locations and productivity\"\n >\n <div className=\"rounded-lg border border-red-200 bg-red-50 p-4 text-sm text-red-600 dark:border-red-800 dark:bg-red-900/20 dark:text-red-400\">\n Failed to load location data. Please try again later.\n </div>\n </PageLayout>\n );\n }\n\n return (\n <PageLayout\n title=\"Location Tracking\"\n description=\"Track work locations and productivity\"\n >\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n <StatCard\n title=\"Total Locations\"\n value={String(stats?.totalLocations ?? 0)}\n icon={<MapPin className=\"h-5 w-5\" />}\n />\n <StatCard\n title=\"Unique Addresses\"\n value={String(stats?.uniqueAddresses ?? 0)}\n icon={<MapPin className=\"h-5 w-5\" />}\n />\n <StatCard\n title=\"Most Frequent\"\n value={stats?.mostFrequentLocation ?? \"N/A\"}\n />\n <StatCard\n title=\"Total Duration\"\n value={formatHours((stats?.totalDuration ?? 0) / 3600)}\n icon={<Clock className=\"h-5 w-5\" />}\n description=\"Tracked time\"\n />\n </div>\n\n <div className=\"rounded-xl border border-border bg-card\">\n <div className=\"divide-y divide-border\">\n {locations.length === 0 && !entriesLoading && (\n <div className=\"p-4 text-center text-sm text-muted-foreground\">\n No location entries found.\n </div>\n )}\n {locations.map((location: LocationEntryFieldsFragment) => (\n <div\n key={location.id}\n className=\"flex items-center justify-between p-4 hover:bg-muted/50 transition-colors\"\n >\n <div className=\"flex items-center gap-3\">\n <MapPin className=\"h-5 w-5 text-muted-foreground\" />\n <div>\n <p className=\"text-sm font-medium text-foreground\">\n {location.address ?? \"Unknown Location\"}\n </p>\n <p className=\"text-xs text-muted-foreground\">\n {location.geofenceId ? \"Geofenced\" : \"Manual\"} &middot;{\" \"}\n {new Date(location.startTime).toLocaleDateString()}\n </p>\n </div>\n </div>\n <div className=\"flex items-center gap-4\">\n <div className=\"text-right\">\n <p className=\"text-sm font-medium text-foreground\">\n {location.duration\n ? formatHours(location.duration / 3600)\n : \"Active\"}\n </p>\n <p className=\"text-xs text-muted-foreground\">duration</p>\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n </PageLayout>\n );\n}\n"],"mappings":";;;;;;;;;AAYA,SAAgB,IAAuB;CACrC,IAAM,EAAE,iBAAc,OAAO,GAAe,EAEtC,EACJ,MAAM,GACN,SAAS,GACT,OAAO,MACL,GAA6B,EAC3B,EACJ,MAAM,GACN,SAAS,GACT,OAAO,MACL,GAA0B,EAExB,IAAY,GAAa,iBAAiB,SAAS,EAAE,EACrD,IAAQ,GAAW;AA0BzB,QAxBI,KAAkB,IAElB,kBAAC,GAAD;EACE,OAAM;EACN,aAAY;YAEZ,kBAAC,GAAD;GAAiB,SAAQ;GAAO,OAAO;GAAK,CAAA;EACjC,CAAA,GAIb,KAAgB,IAEhB,kBAAC,GAAD;EACE,OAAM;EACN,aAAY;YAEZ,kBAAC,OAAD;GAAK,WAAU;aAA+H;GAExI,CAAA;EACK,CAAA,GAKf,kBAAC,GAAD;EACE,OAAM;EACN,aAAY;YAFd,CAIE,kBAAC,OAAD;GAAK,WAAU;aAAf;IACE,kBAAC,GAAD;KACE,OAAM;KACN,OAAO,OAAO,GAAO,kBAAkB,EAAE;KACzC,MAAM,kBAAC,GAAD,EAAQ,WAAU,WAAY,CAAA;KACpC,CAAA;IACF,kBAAC,GAAD;KACE,OAAM;KACN,OAAO,OAAO,GAAO,mBAAmB,EAAE;KAC1C,MAAM,kBAAC,GAAD,EAAQ,WAAU,WAAY,CAAA;KACpC,CAAA;IACF,kBAAC,GAAD;KACE,OAAM;KACN,OAAO,GAAO,wBAAwB;KACtC,CAAA;IACF,kBAAC,GAAD;KACE,OAAM;KACN,OAAO,GAAa,GAAO,iBAAiB,KAAK,KAAK;KACtD,MAAM,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA;KACnC,aAAY;KACZ,CAAA;IACE;MAEN,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,OAAD;IAAK,WAAU;cAAf,CACG,EAAU,WAAW,KAAK,CAAC,KAC1B,kBAAC,OAAD;KAAK,WAAU;eAAgD;KAEzD,CAAA,EAEP,EAAU,KAAK,MACd,kBAAC,OAAD;KAEE,WAAU;eAFZ,CAIE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,GAAD,EAAQ,WAAU,iCAAkC,CAAA,EACpD,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;OAAG,WAAU;iBACV,EAAS,WAAW;OACnB,CAAA,EACJ,kBAAC,KAAD;OAAG,WAAU;iBAAb;QACG,EAAS,aAAa,cAAc;QAAS;QAAU;QACvD,IAAI,KAAK,EAAS,UAAU,CAAC,oBAAoB;QAChD;SACA,EAAA,CAAA,CACF;SACN,kBAAC,OAAD;MAAK,WAAU;gBACb,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,KAAD;QAAG,WAAU;kBACV,EAAS,WACN,EAAY,EAAS,WAAW,KAAK,GACrC;QACF,CAAA,EACJ,kBAAC,KAAD;QAAG,WAAU;kBAAgC;QAAY,CAAA,CACrD;;MACF,CAAA,CACF;OAzBC,EAAS,GAyBV,CACN,CACE;;GACF,CAAA,CACK"}
@@ -0,0 +1,2 @@
1
+ export declare function MeetingAnalyticsPage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=MeetingAnalyticsPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MeetingAnalyticsPage.d.ts","sourceRoot":"","sources":["../../../../src/timecampus/pages/meetings/MeetingAnalyticsPage.tsx"],"names":[],"mappings":"AAQA,wBAAgB,oBAAoB,4CAqFnC"}
@@ -0,0 +1,89 @@
1
+ import { useTimeCampus as e } from "../../providers/TimeCampusProvider.js";
2
+ import { formatCurrency as t } from "../../utils/helpers.js";
3
+ import { PageLayout as n } from "../../components/PageLayout.js";
4
+ import { StatCard as r } from "../../components/StatCard.js";
5
+ import { LoadingSkeleton as i } from "../../components/LoadingSkeleton.js";
6
+ import { useGetMeetingStatsQuery as a } from "../../../generated/wspace-operations.js";
7
+ import { BarChart3 as o, CalendarDays as s, Clock as c, DollarSign as l } from "lucide-react";
8
+ import { jsx as u, jsxs as d } from "react/jsx-runtime";
9
+ //#region src/timecampus/pages/meetings/MeetingAnalyticsPage.tsx
10
+ function f() {
11
+ let { workspaceId: f = "" } = e(), { data: p, loading: m, error: h } = a({
12
+ variables: { workspaceId: f },
13
+ skip: !f
14
+ }), g = p?.meetingStats;
15
+ if (m) return /* @__PURE__ */ u(n, {
16
+ title: "Meeting Analytics",
17
+ description: "Insights into meeting time and cost",
18
+ children: /* @__PURE__ */ u(i, {
19
+ variant: "card",
20
+ count: 4
21
+ })
22
+ });
23
+ if (h) return /* @__PURE__ */ u(n, {
24
+ title: "Meeting Analytics",
25
+ description: "Insights into meeting time and cost",
26
+ children: /* @__PURE__ */ u("div", {
27
+ className: "rounded-lg border border-red-200 bg-red-50 p-4 text-sm text-red-600 dark:border-red-800 dark:bg-red-900/20 dark:text-red-400",
28
+ children: "Failed to load meeting analytics. Please try again later."
29
+ })
30
+ });
31
+ let _ = Math.round((g?.totalDuration ?? 0) / 60), v = Math.round(g?.averageDuration ?? 0);
32
+ return /* @__PURE__ */ d(n, {
33
+ title: "Meeting Analytics",
34
+ description: "Insights into meeting time and cost",
35
+ children: [/* @__PURE__ */ d("div", {
36
+ className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4",
37
+ children: [
38
+ /* @__PURE__ */ u(r, {
39
+ title: "Total Meetings",
40
+ value: String(g?.totalMeetings ?? 0),
41
+ icon: /* @__PURE__ */ u(s, { className: "h-5 w-5" }),
42
+ trend: {
43
+ value: g?.actionItemsCompleted ?? 0,
44
+ label: "actions completed"
45
+ }
46
+ }),
47
+ /* @__PURE__ */ u(r, {
48
+ title: "Meeting Hours",
49
+ value: `${_}h`,
50
+ icon: /* @__PURE__ */ u(c, { className: "h-5 w-5" }),
51
+ trend: {
52
+ value: g?.totalDuration ?? 0,
53
+ label: "total minutes"
54
+ }
55
+ }),
56
+ /* @__PURE__ */ u(r, {
57
+ title: "Meeting Cost",
58
+ value: t(g?.totalCost ?? 0),
59
+ icon: /* @__PURE__ */ u(l, { className: "h-5 w-5" })
60
+ }),
61
+ /* @__PURE__ */ u(r, {
62
+ title: "Avg. Duration",
63
+ value: `${v} min`,
64
+ icon: /* @__PURE__ */ u(o, { className: "h-5 w-5" }),
65
+ trend: {
66
+ value: g?.averageRating ?? 0,
67
+ label: "avg rating"
68
+ }
69
+ })
70
+ ]
71
+ }), /* @__PURE__ */ d("div", {
72
+ className: "rounded-xl border border-border bg-card p-6",
73
+ children: [/* @__PURE__ */ u("h3", {
74
+ className: "mb-4 text-sm font-semibold text-foreground",
75
+ children: "Meeting Time Distribution"
76
+ }), /* @__PURE__ */ u("div", {
77
+ className: "flex h-48 items-center justify-center rounded-lg border border-dashed border-border",
78
+ children: /* @__PURE__ */ u("p", {
79
+ className: "text-sm text-muted-foreground",
80
+ children: g ? `${g.totalMeetings} meetings · ${g.actionItemsTotal} action items (${g.actionItemsCompleted} completed)` : "Chart will render here"
81
+ })
82
+ })]
83
+ })]
84
+ });
85
+ }
86
+ //#endregion
87
+ export { f as MeetingAnalyticsPage };
88
+
89
+ //# sourceMappingURL=MeetingAnalyticsPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MeetingAnalyticsPage.js","names":[],"sources":["../../../../src/timecampus/pages/meetings/MeetingAnalyticsPage.tsx"],"sourcesContent":["import { BarChart3, CalendarDays, Clock, DollarSign } from \"lucide-react\";\nimport { PageLayout } from \"../../components/PageLayout\";\nimport { StatCard } from \"../../components/StatCard\";\nimport { LoadingSkeleton } from \"../../components/LoadingSkeleton\";\nimport { useTimeCampus } from \"../../providers/TimeCampusProvider\";\nimport { useGetMeetingStatsQuery } from \"@/generated/wspace-operations\";\nimport { formatCurrency } from \"../../utils/helpers\";\n\nexport function MeetingAnalyticsPage() {\n const { workspaceId = \"\" } = useTimeCampus();\n\n const { data, loading, error } = useGetMeetingStatsQuery({\n variables: { workspaceId },\n skip: !workspaceId,\n });\n\n const stats = data?.meetingStats;\n\n if (loading) {\n return (\n <PageLayout\n title=\"Meeting Analytics\"\n description=\"Insights into meeting time and cost\"\n >\n <LoadingSkeleton variant=\"card\" count={4} />\n </PageLayout>\n );\n }\n\n if (error) {\n return (\n <PageLayout\n title=\"Meeting Analytics\"\n description=\"Insights into meeting time and cost\"\n >\n <div className=\"rounded-lg border border-red-200 bg-red-50 p-4 text-sm text-red-600 dark:border-red-800 dark:bg-red-900/20 dark:text-red-400\">\n Failed to load meeting analytics. Please try again later.\n </div>\n </PageLayout>\n );\n }\n\n const totalHours = Math.round((stats?.totalDuration ?? 0) / 60);\n const avgDuration = Math.round(stats?.averageDuration ?? 0);\n\n return (\n <PageLayout\n title=\"Meeting Analytics\"\n description=\"Insights into meeting time and cost\"\n >\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n <StatCard\n title=\"Total Meetings\"\n value={String(stats?.totalMeetings ?? 0)}\n icon={<CalendarDays className=\"h-5 w-5\" />}\n trend={{\n value: stats?.actionItemsCompleted ?? 0,\n label: \"actions completed\",\n }}\n />\n <StatCard\n title=\"Meeting Hours\"\n value={`${totalHours}h`}\n icon={<Clock className=\"h-5 w-5\" />}\n trend={{ value: stats?.totalDuration ?? 0, label: \"total minutes\" }}\n />\n <StatCard\n title=\"Meeting Cost\"\n value={formatCurrency(stats?.totalCost ?? 0)}\n icon={<DollarSign className=\"h-5 w-5\" />}\n />\n <StatCard\n title=\"Avg. Duration\"\n value={`${avgDuration} min`}\n icon={<BarChart3 className=\"h-5 w-5\" />}\n trend={{ value: stats?.averageRating ?? 0, label: \"avg rating\" }}\n />\n </div>\n\n <div className=\"rounded-xl border border-border bg-card p-6\">\n <h3 className=\"mb-4 text-sm font-semibold text-foreground\">\n Meeting Time Distribution\n </h3>\n <div className=\"flex h-48 items-center justify-center rounded-lg border border-dashed border-border\">\n <p className=\"text-sm text-muted-foreground\">\n {stats\n ? `${stats.totalMeetings} meetings · ${stats.actionItemsTotal} action items (${stats.actionItemsCompleted} completed)`\n : \"Chart will render here\"}\n </p>\n </div>\n </div>\n </PageLayout>\n );\n}\n"],"mappings":";;;;;;;;;AAQA,SAAgB,IAAuB;CACrC,IAAM,EAAE,iBAAc,OAAO,GAAe,EAEtC,EAAE,SAAM,YAAS,aAAU,EAAwB;EACvD,WAAW,EAAE,gBAAa;EAC1B,MAAM,CAAC;EACR,CAAC,EAEI,IAAQ,GAAM;AAEpB,KAAI,EACF,QACE,kBAAC,GAAD;EACE,OAAM;EACN,aAAY;YAEZ,kBAAC,GAAD;GAAiB,SAAQ;GAAO,OAAO;GAAK,CAAA;EACjC,CAAA;AAIjB,KAAI,EACF,QACE,kBAAC,GAAD;EACE,OAAM;EACN,aAAY;YAEZ,kBAAC,OAAD;GAAK,WAAU;aAA+H;GAExI,CAAA;EACK,CAAA;CAIjB,IAAM,IAAa,KAAK,OAAO,GAAO,iBAAiB,KAAK,GAAG,EACzD,IAAc,KAAK,MAAM,GAAO,mBAAmB,EAAE;AAE3D,QACE,kBAAC,GAAD;EACE,OAAM;EACN,aAAY;YAFd,CAIE,kBAAC,OAAD;GAAK,WAAU;aAAf;IACE,kBAAC,GAAD;KACE,OAAM;KACN,OAAO,OAAO,GAAO,iBAAiB,EAAE;KACxC,MAAM,kBAAC,GAAD,EAAc,WAAU,WAAY,CAAA;KAC1C,OAAO;MACL,OAAO,GAAO,wBAAwB;MACtC,OAAO;MACR;KACD,CAAA;IACF,kBAAC,GAAD;KACE,OAAM;KACN,OAAO,GAAG,EAAW;KACrB,MAAM,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA;KACnC,OAAO;MAAE,OAAO,GAAO,iBAAiB;MAAG,OAAO;MAAiB;KACnE,CAAA;IACF,kBAAC,GAAD;KACE,OAAM;KACN,OAAO,EAAe,GAAO,aAAa,EAAE;KAC5C,MAAM,kBAAC,GAAD,EAAY,WAAU,WAAY,CAAA;KACxC,CAAA;IACF,kBAAC,GAAD;KACE,OAAM;KACN,OAAO,GAAG,EAAY;KACtB,MAAM,kBAAC,GAAD,EAAW,WAAU,WAAY,CAAA;KACvC,OAAO;MAAE,OAAO,GAAO,iBAAiB;MAAG,OAAO;MAAc;KAChE,CAAA;IACE;MAEN,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,MAAD;IAAI,WAAU;cAA6C;IAEtD,CAAA,EACL,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,KAAD;KAAG,WAAU;eACV,IACG,GAAG,EAAM,cAAc,cAAc,EAAM,iBAAiB,iBAAiB,EAAM,qBAAqB,eACxG;KACF,CAAA;IACA,CAAA,CACF;KACK"}
@@ -0,0 +1,2 @@
1
+ export declare function MeetingCreatePage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=MeetingCreatePage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MeetingCreatePage.d.ts","sourceRoot":"","sources":["../../../../src/timecampus/pages/meetings/MeetingCreatePage.tsx"],"names":[],"mappings":"AAMA,wBAAgB,iBAAiB,4CA4GhC"}
@@ -0,0 +1,101 @@
1
+ import { useTimeCampus as e } from "../../providers/TimeCampusProvider.js";
2
+ import { PageLayout as t } from "../../components/PageLayout.js";
3
+ import { useCreateMeetingMutation as n } from "../../../generated/wspace-operations.js";
4
+ import { useCallback as r, useState as i } from "react";
5
+ import { ArrowLeft as a } from "lucide-react";
6
+ import { jsx as o, jsxs as s } from "react/jsx-runtime";
7
+ //#region src/timecampus/pages/meetings/MeetingCreatePage.tsx
8
+ function c() {
9
+ let { workspaceId: c = "" } = e(), [l, { loading: u }] = n(), [d, f] = i(""), [p, m] = i(""), [h, g] = i(30), [_, v] = i(""), y = r(async () => {
10
+ !c || !d || !p || (await l({
11
+ variables: { input: {
12
+ workspaceId: c,
13
+ title: d,
14
+ meetingType: "TEAM",
15
+ startTime: new Date(p).toISOString(),
16
+ duration: h,
17
+ notes: _ || void 0
18
+ } },
19
+ refetchQueries: ["ListMeetings"]
20
+ }), f(""), m(""), g(30), v(""));
21
+ }, [
22
+ c,
23
+ d,
24
+ p,
25
+ h,
26
+ _,
27
+ l
28
+ ]);
29
+ return /* @__PURE__ */ o(t, {
30
+ title: "Schedule Meeting",
31
+ description: "Create a new meeting",
32
+ actions: /* @__PURE__ */ s("button", {
33
+ className: "inline-flex items-center gap-1.5 rounded-md border border-border px-3 py-2 text-sm font-medium text-foreground hover:bg-muted/50",
34
+ children: [/* @__PURE__ */ o(a, { className: "h-4 w-4" }), "Back"]
35
+ }),
36
+ children: /* @__PURE__ */ o("div", {
37
+ className: "mx-auto max-w-2xl rounded-xl border border-border bg-card p-6",
38
+ children: /* @__PURE__ */ s("div", {
39
+ className: "space-y-4",
40
+ children: [
41
+ /* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("label", {
42
+ className: "block text-sm font-medium text-foreground",
43
+ children: "Meeting Title"
44
+ }), /* @__PURE__ */ o("input", {
45
+ type: "text",
46
+ placeholder: "Enter meeting title",
47
+ value: d,
48
+ onChange: (e) => f(e.target.value),
49
+ className: "mt-1 w-full rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground"
50
+ })] }),
51
+ /* @__PURE__ */ s("div", {
52
+ className: "grid grid-cols-2 gap-4",
53
+ children: [/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("label", {
54
+ className: "block text-sm font-medium text-foreground",
55
+ children: "Date"
56
+ }), /* @__PURE__ */ o("input", {
57
+ type: "date",
58
+ value: p,
59
+ onChange: (e) => m(e.target.value),
60
+ className: "mt-1 w-full rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground"
61
+ })] }), /* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("label", {
62
+ className: "block text-sm font-medium text-foreground",
63
+ children: "Duration (minutes)"
64
+ }), /* @__PURE__ */ o("input", {
65
+ type: "number",
66
+ value: h,
67
+ onChange: (e) => g(Number(e.target.value)),
68
+ className: "mt-1 w-full rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground"
69
+ })] })]
70
+ }),
71
+ /* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("label", {
72
+ className: "block text-sm font-medium text-foreground",
73
+ children: "Description"
74
+ }), /* @__PURE__ */ o("textarea", {
75
+ placeholder: "Meeting agenda...",
76
+ rows: 3,
77
+ value: _,
78
+ onChange: (e) => v(e.target.value),
79
+ className: "mt-1 w-full rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground"
80
+ })] }),
81
+ /* @__PURE__ */ s("div", {
82
+ className: "flex justify-end gap-2 pt-4",
83
+ children: [/* @__PURE__ */ o("button", {
84
+ className: "rounded-md border border-border px-4 py-2 text-sm font-medium text-foreground hover:bg-muted/50",
85
+ children: "Cancel"
86
+ }), /* @__PURE__ */ o("button", {
87
+ onClick: y,
88
+ disabled: u || !d || !p,
89
+ className: "rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50",
90
+ children: u ? "Scheduling..." : "Schedule"
91
+ })]
92
+ })
93
+ ]
94
+ })
95
+ })
96
+ });
97
+ }
98
+ //#endregion
99
+ export { c as MeetingCreatePage };
100
+
101
+ //# sourceMappingURL=MeetingCreatePage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MeetingCreatePage.js","names":[],"sources":["../../../../src/timecampus/pages/meetings/MeetingCreatePage.tsx"],"sourcesContent":["import { useState, useCallback } from \"react\";\nimport { ArrowLeft } from \"lucide-react\";\nimport { PageLayout } from \"../../components/PageLayout\";\nimport { useTimeCampus } from \"../../providers/TimeCampusProvider\";\nimport { useCreateMeetingMutation } from \"@/generated/wspace-operations\";\n\nexport function MeetingCreatePage() {\n const { workspaceId = \"\" } = useTimeCampus();\n const [createMeeting, { loading: creating }] = useCreateMeetingMutation();\n\n const [title, setTitle] = useState(\"\");\n const [date, setDate] = useState(\"\");\n const [duration, setDuration] = useState(30);\n const [description, setDescription] = useState(\"\");\n\n const handleSubmit = useCallback(async () => {\n if (!workspaceId || !title || !date) return;\n const startTime = new Date(date).toISOString();\n await createMeeting({\n variables: {\n input: {\n workspaceId,\n title,\n meetingType: \"TEAM\" as never,\n startTime,\n duration,\n notes: description || undefined,\n },\n },\n refetchQueries: [\"ListMeetings\"],\n });\n setTitle(\"\");\n setDate(\"\");\n setDuration(30);\n setDescription(\"\");\n }, [workspaceId, title, date, duration, description, createMeeting]);\n\n return (\n <PageLayout\n title=\"Schedule Meeting\"\n description=\"Create a new meeting\"\n actions={\n <button className=\"inline-flex items-center gap-1.5 rounded-md border border-border px-3 py-2 text-sm font-medium text-foreground hover:bg-muted/50\">\n <ArrowLeft className=\"h-4 w-4\" />\n Back\n </button>\n }\n >\n <div className=\"mx-auto max-w-2xl rounded-xl border border-border bg-card p-6\">\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-sm font-medium text-foreground\">\n Meeting Title\n </label>\n <input\n type=\"text\"\n placeholder=\"Enter meeting title\"\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n className=\"mt-1 w-full rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground\"\n />\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className=\"block text-sm font-medium text-foreground\">\n Date\n </label>\n <input\n type=\"date\"\n value={date}\n onChange={(e) => setDate(e.target.value)}\n className=\"mt-1 w-full rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground\"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-foreground\">\n Duration (minutes)\n </label>\n <input\n type=\"number\"\n value={duration}\n onChange={(e) => setDuration(Number(e.target.value))}\n className=\"mt-1 w-full rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground\"\n />\n </div>\n </div>\n <div>\n <label className=\"block text-sm font-medium text-foreground\">\n Description\n </label>\n <textarea\n placeholder=\"Meeting agenda...\"\n rows={3}\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n className=\"mt-1 w-full rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground\"\n />\n </div>\n <div className=\"flex justify-end gap-2 pt-4\">\n <button className=\"rounded-md border border-border px-4 py-2 text-sm font-medium text-foreground hover:bg-muted/50\">\n Cancel\n </button>\n <button\n onClick={handleSubmit}\n disabled={creating || !title || !date}\n className=\"rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50\"\n >\n {creating ? \"Scheduling...\" : \"Schedule\"}\n </button>\n </div>\n </div>\n </div>\n </PageLayout>\n );\n}\n"],"mappings":";;;;;;;AAMA,SAAgB,IAAoB;CAClC,IAAM,EAAE,iBAAc,OAAO,GAAe,EACtC,CAAC,GAAe,EAAE,SAAS,OAAc,GAA0B,EAEnE,CAAC,GAAO,KAAY,EAAS,GAAG,EAChC,CAAC,GAAM,KAAW,EAAS,GAAG,EAC9B,CAAC,GAAU,KAAe,EAAS,GAAG,EACtC,CAAC,GAAa,KAAkB,EAAS,GAAG,EAE5C,IAAe,EAAY,YAAY;AACvC,GAAC,KAAe,CAAC,KAAS,CAAC,MAE/B,MAAM,EAAc;GAClB,WAAW,EACT,OAAO;IACL;IACA;IACA,aAAa;IACb,WAPY,IAAI,KAAK,EAAK,CAAC,aAAa;IAQxC;IACA,OAAO,KAAe,KAAA;IACvB,EACF;GACD,gBAAgB,CAAC,eAAe;GACjC,CAAC,EACF,EAAS,GAAG,EACZ,EAAQ,GAAG,EACX,EAAY,GAAG,EACf,EAAe,GAAG;IACjB;EAAC;EAAa;EAAO;EAAM;EAAU;EAAa;EAAc,CAAC;AAEpE,QACE,kBAAC,GAAD;EACE,OAAM;EACN,aAAY;EACZ,SACE,kBAAC,UAAD;GAAQ,WAAU;aAAlB,CACE,kBAAC,GAAD,EAAW,WAAU,WAAY,CAAA,EAAA,OAE1B;;YAGX,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;MAAO,WAAU;gBAA4C;MAErD,CAAA,EACR,kBAAC,SAAD;MACE,MAAK;MACL,aAAY;MACZ,OAAO;MACP,WAAW,MAAM,EAAS,EAAE,OAAO,MAAM;MACzC,WAAU;MACV,CAAA,CACE,EAAA,CAAA;KACN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;OAAO,WAAU;iBAA4C;OAErD,CAAA,EACR,kBAAC,SAAD;OACE,MAAK;OACL,OAAO;OACP,WAAW,MAAM,EAAQ,EAAE,OAAO,MAAM;OACxC,WAAU;OACV,CAAA,CACE,EAAA,CAAA,EACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;OAAO,WAAU;iBAA4C;OAErD,CAAA,EACR,kBAAC,SAAD;OACE,MAAK;OACL,OAAO;OACP,WAAW,MAAM,EAAY,OAAO,EAAE,OAAO,MAAM,CAAC;OACpD,WAAU;OACV,CAAA,CACE,EAAA,CAAA,CACF;;KACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;MAAO,WAAU;gBAA4C;MAErD,CAAA,EACR,kBAAC,YAAD;MACE,aAAY;MACZ,MAAM;MACN,OAAO;MACP,WAAW,MAAM,EAAe,EAAE,OAAO,MAAM;MAC/C,WAAU;MACV,CAAA,CACE,EAAA,CAAA;KACN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,UAAD;OAAQ,WAAU;iBAAkG;OAE3G,CAAA,EACT,kBAAC,UAAD;OACE,SAAS;OACT,UAAU,KAAY,CAAC,KAAS,CAAC;OACjC,WAAU;iBAET,IAAW,kBAAkB;OACvB,CAAA,CACL;;KACF;;GACF,CAAA;EACK,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare function MeetingDetailPage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=MeetingDetailPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MeetingDetailPage.d.ts","sourceRoot":"","sources":["../../../../src/timecampus/pages/meetings/MeetingDetailPage.tsx"],"names":[],"mappings":"AAaA,wBAAgB,iBAAiB,4CA6HhC"}
@@ -0,0 +1,123 @@
1
+ import { useTimeCampus as e } from "../../providers/TimeCampusProvider.js";
2
+ import { formatCurrency as t } from "../../utils/helpers.js";
3
+ import { PageLayout as n } from "../../components/PageLayout.js";
4
+ import { StatCard as r } from "../../components/StatCard.js";
5
+ import { LoadingSkeleton as i } from "../../components/LoadingSkeleton.js";
6
+ import { useGetMeetingQuery as a } from "../../../generated/wspace-operations.js";
7
+ import { Clock as o, Users as s } from "lucide-react";
8
+ import { useParams as c } from "react-router-dom";
9
+ import { jsx as l, jsxs as u } from "react/jsx-runtime";
10
+ //#region src/timecampus/pages/meetings/MeetingDetailPage.tsx
11
+ function d() {
12
+ let { id: d } = c(), { workspaceId: f = "" } = e(), { data: p, loading: m, error: h } = a({
13
+ variables: {
14
+ id: d ?? "",
15
+ workspaceId: f
16
+ },
17
+ skip: !f || !d
18
+ }), g = p?.meeting;
19
+ if (m) return /* @__PURE__ */ l(n, {
20
+ title: "Meeting Details",
21
+ description: `Meeting ID: ${d}`,
22
+ children: /* @__PURE__ */ l(i, { variant: "detail" })
23
+ });
24
+ if (h || !g) return /* @__PURE__ */ l(n, {
25
+ title: "Meeting Details",
26
+ description: `Meeting ID: ${d}`,
27
+ children: /* @__PURE__ */ l("div", {
28
+ className: "rounded-lg border border-red-200 bg-red-50 p-4 text-sm text-red-600 dark:border-red-800 dark:bg-red-900/20 dark:text-red-400",
29
+ children: h ? "Failed to load meeting details. Please try again later." : "Meeting not found."
30
+ })
31
+ });
32
+ let _ = g.actionItems.filter((e) => e.status !== "COMPLETED").length;
33
+ return /* @__PURE__ */ u(n, {
34
+ title: "Meeting Details",
35
+ description: g.title,
36
+ children: [/* @__PURE__ */ u("div", {
37
+ className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4",
38
+ children: [
39
+ /* @__PURE__ */ l(r, {
40
+ title: "Duration",
41
+ value: `${g.duration ?? 0} min`,
42
+ icon: /* @__PURE__ */ l(o, { className: "h-5 w-5" })
43
+ }),
44
+ /* @__PURE__ */ l(r, {
45
+ title: "Participants",
46
+ value: String(g.participants.length),
47
+ icon: /* @__PURE__ */ l(s, { className: "h-5 w-5" })
48
+ }),
49
+ /* @__PURE__ */ l(r, {
50
+ title: "Cost",
51
+ value: g.cost == null ? "N/A" : t(g.cost),
52
+ description: "Based on participant rates"
53
+ }),
54
+ /* @__PURE__ */ l(r, {
55
+ title: "Action Items",
56
+ value: String(g.actionItems.length),
57
+ description: `${_} pending`
58
+ })
59
+ ]
60
+ }), /* @__PURE__ */ u("div", {
61
+ className: "grid grid-cols-1 gap-6 lg:grid-cols-2",
62
+ children: [/* @__PURE__ */ u("div", {
63
+ className: "rounded-xl border border-border bg-card p-6",
64
+ children: [/* @__PURE__ */ l("h3", {
65
+ className: "mb-4 text-sm font-semibold text-foreground",
66
+ children: "Participants"
67
+ }), g.participants.length > 0 ? /* @__PURE__ */ l("div", {
68
+ className: "space-y-2",
69
+ children: g.participants.map((e) => /* @__PURE__ */ u("div", {
70
+ className: "flex items-center justify-between rounded-lg border border-border px-3 py-2",
71
+ children: [/* @__PURE__ */ l("span", {
72
+ className: "text-sm text-foreground",
73
+ children: e.userId
74
+ }), /* @__PURE__ */ u("div", {
75
+ className: "flex items-center gap-2",
76
+ children: [/* @__PURE__ */ l("span", {
77
+ className: "text-xs text-muted-foreground",
78
+ children: e.role
79
+ }), /* @__PURE__ */ l("span", {
80
+ className: "inline-flex rounded-full bg-muted px-2 py-0.5 text-xs font-medium text-muted-foreground",
81
+ children: e.status
82
+ })]
83
+ })]
84
+ }, e.id))
85
+ }) : /* @__PURE__ */ l("div", {
86
+ className: "flex h-32 items-center justify-center rounded-lg border border-dashed border-border",
87
+ children: /* @__PURE__ */ l("p", {
88
+ className: "text-sm text-muted-foreground",
89
+ children: "No participants added"
90
+ })
91
+ })]
92
+ }), /* @__PURE__ */ u("div", {
93
+ className: "rounded-xl border border-border bg-card p-6",
94
+ children: [/* @__PURE__ */ l("h3", {
95
+ className: "mb-4 text-sm font-semibold text-foreground",
96
+ children: "Action Items"
97
+ }), g.actionItems.length > 0 ? /* @__PURE__ */ l("div", {
98
+ className: "space-y-2",
99
+ children: g.actionItems.map((e) => /* @__PURE__ */ u("div", {
100
+ className: "flex items-center justify-between rounded-lg border border-border px-3 py-2",
101
+ children: [/* @__PURE__ */ l("span", {
102
+ className: "text-sm text-foreground",
103
+ children: e.title
104
+ }), /* @__PURE__ */ l("span", {
105
+ className: "inline-flex rounded-full bg-muted px-2 py-0.5 text-xs font-medium text-muted-foreground",
106
+ children: e.status
107
+ })]
108
+ }, e.id))
109
+ }) : /* @__PURE__ */ l("div", {
110
+ className: "flex h-32 items-center justify-center rounded-lg border border-dashed border-border",
111
+ children: /* @__PURE__ */ l("p", {
112
+ className: "text-sm text-muted-foreground",
113
+ children: "No action items"
114
+ })
115
+ })]
116
+ })]
117
+ })]
118
+ });
119
+ }
120
+ //#endregion
121
+ export { d as MeetingDetailPage };
122
+
123
+ //# sourceMappingURL=MeetingDetailPage.js.map