@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 @@
1
+ {"version":3,"file":"WorkPatternsPage.js","names":[],"sources":["../../../../src/timecampus/pages/work-patterns/WorkPatternsPage.tsx"],"sourcesContent":["import { TrendingUp, Clock, Zap, Brain } from \"lucide-react\";\nimport { PageLayout } from \"../../components/PageLayout\";\nimport { StatCard } from \"../../components/StatCard\";\nimport { LoadingSkeleton } from \"../../components/LoadingSkeleton\";\nimport { useTimeCampus } from \"../../providers/TimeCampusProvider\";\nimport {\n useListWorkPatternsQuery,\n useGetWorkPatternSummaryQuery,\n} from \"@/generated/wspace-operations\";\n\nexport function WorkPatternsPage() {\n const { workspaceId = \"\" } = useTimeCampus();\n\n const {\n data: patternsData,\n loading: patternsLoading,\n error: patternsError,\n } = useListWorkPatternsQuery({\n variables: { limit: 30 },\n skip: !workspaceId,\n });\n\n const {\n data: summaryData,\n loading: summaryLoading,\n error: summaryError,\n } = useGetWorkPatternSummaryQuery({\n skip: !workspaceId,\n });\n\n const loading = patternsLoading || summaryLoading;\n const error = patternsError || summaryError;\n const summary = summaryData?.workPatternSummary;\n const patterns = patternsData?.workPatterns ?? [];\n\n // Derive stats from the latest pattern entry\n const latestPattern = patterns[0];\n const productivityScore =\n summary?.averageProductivity != null\n ? `${Math.round(summary.averageProductivity)}%`\n : \"--\";\n const focusHours =\n latestPattern?.focusHours != null\n ? `${latestPattern.focusHours.toFixed(1)}h`\n : \"--\";\n const totalHours = latestPattern\n ? (\n latestPattern.focusHours +\n latestPattern.meetingHours +\n latestPattern.breakHours\n ).toFixed(0)\n : \"8\";\n const deepWorkSessions =\n latestPattern?.deepWorkSessions != null\n ? String(latestPattern.deepWorkSessions)\n : \"--\";\n const mostProductiveDay = summary?.mostProductiveDay ?? \"--\";\n\n if (loading) {\n return (\n <PageLayout\n title=\"Work Patterns\"\n description=\"Analyze your work habits and productivity patterns\"\n >\n <LoadingSkeleton variant=\"card\" count={4} />\n </PageLayout>\n );\n }\n\n if (error) {\n return (\n <PageLayout\n title=\"Work Patterns\"\n description=\"Analyze your work habits and productivity patterns\"\n >\n <div className=\"rounded-xl border border-destructive/50 bg-destructive/10 p-4 text-sm text-destructive\">\n Failed to load work patterns. Please try again later.\n </div>\n </PageLayout>\n );\n }\n\n return (\n <PageLayout\n title=\"Work Patterns\"\n description=\"Analyze your work habits and productivity patterns\"\n >\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n <StatCard\n title=\"Productivity Score\"\n value={productivityScore}\n icon={<TrendingUp className=\"h-5 w-5\" />}\n trend={\n summary?.averageProductivity != null\n ? { value: 5, label: \"vs last week\" }\n : undefined\n }\n />\n <StatCard\n title=\"Focus Hours\"\n value={focusHours}\n icon={<Brain className=\"h-5 w-5\" />}\n description={`Out of ${totalHours}h total`}\n />\n <StatCard\n title=\"Peak Day\"\n value={mostProductiveDay}\n icon={<Zap className=\"h-5 w-5\" />}\n description=\"Most productive day\"\n />\n <StatCard\n title=\"Deep Work\"\n value={`${deepWorkSessions} sessions`}\n icon={<Clock className=\"h-5 w-5\" />}\n description=\"90+ min uninterrupted\"\n />\n </div>\n\n <div className=\"grid grid-cols-1 gap-6 lg:grid-cols-2\">\n <div className=\"rounded-xl border border-border bg-card p-6\">\n <h3 className=\"mb-4 text-sm font-semibold text-foreground\">\n Daily Work Pattern\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 Heatmap will render here\n </p>\n </div>\n </div>\n <div className=\"rounded-xl border border-border bg-card p-6\">\n <h3 className=\"mb-4 text-sm font-semibold text-foreground\">\n Energy Levels\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 Energy chart will render here\n </p>\n </div>\n </div>\n </div>\n </PageLayout>\n );\n}\n"],"mappings":";;;;;;;;AAUA,SAAgB,IAAmB;CACjC,IAAM,EAAE,iBAAc,OAAO,GAAe,EAEtC,EACJ,MAAM,GACN,SAAS,GACT,OAAO,MACL,EAAyB;EAC3B,WAAW,EAAE,OAAO,IAAI;EACxB,MAAM,CAAC;EACR,CAAC,EAEI,EACJ,MAAM,GACN,SAAS,GACT,OAAO,MACL,EAA8B,EAChC,MAAM,CAAC,GACR,CAAC,EAEI,IAAU,KAAmB,GAC7B,IAAQ,KAAiB,GACzB,IAAU,GAAa,oBAIvB,KAHW,GAAc,gBAAgB,EAAE,EAGlB,IACzB,IACJ,GAAS,uBAAuB,OAE5B,OADA,GAAG,KAAK,MAAM,EAAQ,oBAAoB,CAAC,IAE3C,IACJ,GAAe,cAAc,OAEzB,OADA,GAAG,EAAc,WAAW,QAAQ,EAAE,CAAC,IAEvC,IAAa,KAEb,EAAc,aACd,EAAc,eACd,EAAc,YACd,QAAQ,EAAE,GACZ,KACE,IACJ,GAAe,oBAAoB,OAE/B,OADA,OAAO,EAAc,iBAAiB,EAEtC,IAAoB,GAAS,qBAAqB;AA0BxD,QAxBI,IAEA,kBAAC,GAAD;EACE,OAAM;EACN,aAAY;YAEZ,kBAAC,GAAD;GAAiB,SAAQ;GAAO,OAAO;GAAK,CAAA;EACjC,CAAA,GAIb,IAEA,kBAAC,GAAD;EACE,OAAM;EACN,aAAY;YAEZ,kBAAC,OAAD;GAAK,WAAU;aAAyF;GAElG,CAAA;EACK,CAAA,GAKf,kBAAC,GAAD;EACE,OAAM;EACN,aAAY;YAFd,CAIE,kBAAC,OAAD;GAAK,WAAU;aAAf;IACE,kBAAC,GAAD;KACE,OAAM;KACN,OAAO;KACP,MAAM,kBAAC,GAAD,EAAY,WAAU,WAAY,CAAA;KACxC,OACE,GAAS,uBAAuB,OAE5B,KAAA,IADA;MAAE,OAAO;MAAG,OAAO;MAAgB;KAGzC,CAAA;IACF,kBAAC,GAAD;KACE,OAAM;KACN,OAAO;KACP,MAAM,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA;KACnC,aAAa,UAAU,EAAW;KAClC,CAAA;IACF,kBAAC,GAAD;KACE,OAAM;KACN,OAAO;KACP,MAAM,kBAAC,GAAD,EAAK,WAAU,WAAY,CAAA;KACjC,aAAY;KACZ,CAAA;IACF,kBAAC,GAAD;KACE,OAAM;KACN,OAAO,GAAG,EAAiB;KAC3B,MAAM,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA;KACnC,aAAY;KACZ,CAAA;IACE;MAEN,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,MAAD;KAAI,WAAU;eAA6C;KAEtD,CAAA,EACL,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,KAAD;MAAG,WAAU;gBAAgC;MAEzC,CAAA;KACA,CAAA,CACF;OACN,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,MAAD;KAAI,WAAU;eAA6C;KAEtD,CAAA,EACL,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,KAAD;MAAG,WAAU;gBAAgC;MAEzC,CAAA;KACA,CAAA,CACF;MACF;KACK"}
@@ -0,0 +1,2 @@
1
+ export declare function WorkPatternsSettingsPage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=WorkPatternsSettingsPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkPatternsSettingsPage.d.ts","sourceRoot":"","sources":["../../../../src/timecampus/pages/work-patterns/WorkPatternsSettingsPage.tsx"],"names":[],"mappings":"AAyBA,wBAAgB,wBAAwB,4CAwIvC"}
@@ -0,0 +1,129 @@
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 { useListConfigurationsQuery as r, useSetConfigurationMutation as i } from "../../../generated/wspace-operations.js";
5
+ import { useCallback as a, useEffect as o, useState as s } from "react";
6
+ import { Settings as c } from "lucide-react";
7
+ import { jsx as l, jsxs as u } from "react/jsx-runtime";
8
+ //#region src/timecampus/pages/work-patterns/WorkPatternsSettingsPage.tsx
9
+ var d = "timecampus.workpatterns.settings", f = {
10
+ trackEnergyLevels: !0,
11
+ trackMood: !0,
12
+ interruptionTracking: !0
13
+ };
14
+ function p() {
15
+ let { workspaceId: p = "" } = e(), { data: m, loading: h, error: g } = r({
16
+ variables: {
17
+ scope: "WORKSPACE",
18
+ limit: 100
19
+ },
20
+ skip: !p
21
+ }), [_, { loading: v }] = i(), [y, b] = s(f);
22
+ o(() => {
23
+ if (m?.configurations) {
24
+ let e = m.configurations.find((e) => e.key === d);
25
+ if (e?.value) {
26
+ let t = e.value;
27
+ b({
28
+ trackEnergyLevels: t.trackEnergyLevels ?? f.trackEnergyLevels,
29
+ trackMood: t.trackMood ?? f.trackMood,
30
+ interruptionTracking: t.interruptionTracking ?? f.interruptionTracking
31
+ });
32
+ }
33
+ }
34
+ }, [m]);
35
+ let x = a(async () => {
36
+ await _({ variables: { input: {
37
+ key: d,
38
+ value: y,
39
+ description: "Work patterns tracking settings",
40
+ scope: "WORKSPACE"
41
+ } } });
42
+ }, [_, y]);
43
+ return h ? /* @__PURE__ */ l(t, {
44
+ title: "Work Patterns Settings",
45
+ description: "Configure work pattern tracking",
46
+ children: /* @__PURE__ */ l(n, { variant: "detail" })
47
+ }) : g ? /* @__PURE__ */ l(t, {
48
+ title: "Work Patterns Settings",
49
+ description: "Configure work pattern tracking",
50
+ children: /* @__PURE__ */ l("div", {
51
+ className: "rounded-xl border border-destructive/50 bg-destructive/10 p-4 text-sm text-destructive",
52
+ children: "Failed to load settings. Please try again later."
53
+ })
54
+ }) : /* @__PURE__ */ l(t, {
55
+ title: "Work Patterns Settings",
56
+ description: "Configure work pattern tracking",
57
+ children: /* @__PURE__ */ u("div", {
58
+ className: "mx-auto max-w-2xl space-y-6",
59
+ children: [/* @__PURE__ */ u("div", {
60
+ className: "rounded-xl border border-border bg-card p-6",
61
+ children: [/* @__PURE__ */ u("h3", {
62
+ className: "mb-4 flex items-center gap-2 text-sm font-semibold text-foreground",
63
+ children: [/* @__PURE__ */ l(c, { className: "h-4 w-4" }), "Tracking Preferences"]
64
+ }), /* @__PURE__ */ u("div", {
65
+ className: "space-y-3",
66
+ children: [
67
+ /* @__PURE__ */ u("label", {
68
+ className: "flex items-center justify-between",
69
+ children: [/* @__PURE__ */ l("span", {
70
+ className: "text-sm text-foreground",
71
+ children: "Track energy levels"
72
+ }), /* @__PURE__ */ l("input", {
73
+ type: "checkbox",
74
+ checked: y.trackEnergyLevels,
75
+ onChange: (e) => b((t) => ({
76
+ ...t,
77
+ trackEnergyLevels: e.target.checked
78
+ })),
79
+ className: "h-4 w-4 rounded border-border"
80
+ })]
81
+ }),
82
+ /* @__PURE__ */ u("label", {
83
+ className: "flex items-center justify-between",
84
+ children: [/* @__PURE__ */ l("span", {
85
+ className: "text-sm text-foreground",
86
+ children: "Track mood"
87
+ }), /* @__PURE__ */ l("input", {
88
+ type: "checkbox",
89
+ checked: y.trackMood,
90
+ onChange: (e) => b((t) => ({
91
+ ...t,
92
+ trackMood: e.target.checked
93
+ })),
94
+ className: "h-4 w-4 rounded border-border"
95
+ })]
96
+ }),
97
+ /* @__PURE__ */ u("label", {
98
+ className: "flex items-center justify-between",
99
+ children: [/* @__PURE__ */ l("span", {
100
+ className: "text-sm text-foreground",
101
+ children: "Interruption tracking"
102
+ }), /* @__PURE__ */ l("input", {
103
+ type: "checkbox",
104
+ checked: y.interruptionTracking,
105
+ onChange: (e) => b((t) => ({
106
+ ...t,
107
+ interruptionTracking: e.target.checked
108
+ })),
109
+ className: "h-4 w-4 rounded border-border"
110
+ })]
111
+ })
112
+ ]
113
+ })]
114
+ }), /* @__PURE__ */ l("div", {
115
+ className: "flex justify-end",
116
+ children: /* @__PURE__ */ l("button", {
117
+ onClick: x,
118
+ disabled: v,
119
+ className: "rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50",
120
+ children: v ? "Saving..." : "Save Settings"
121
+ })
122
+ })]
123
+ })
124
+ });
125
+ }
126
+ //#endregion
127
+ export { p as WorkPatternsSettingsPage };
128
+
129
+ //# sourceMappingURL=WorkPatternsSettingsPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkPatternsSettingsPage.js","names":[],"sources":["../../../../src/timecampus/pages/work-patterns/WorkPatternsSettingsPage.tsx"],"sourcesContent":["import { useState, useEffect, useCallback } from \"react\";\nimport { Settings } from \"lucide-react\";\nimport { PageLayout } from \"../../components/PageLayout\";\nimport { LoadingSkeleton } from \"../../components/LoadingSkeleton\";\nimport { useTimeCampus } from \"../../providers/TimeCampusProvider\";\nimport {\n useListConfigurationsQuery,\n useSetConfigurationMutation,\n type ConfigurationFieldsFragment,\n} from \"@/generated/wspace-operations\";\n\nconst WORK_PATTERNS_SETTINGS_KEY = \"timecampus.workpatterns.settings\";\n\ninterface WorkPatternsSettings {\n trackEnergyLevels: boolean;\n trackMood: boolean;\n interruptionTracking: boolean;\n}\n\nconst DEFAULT_SETTINGS: WorkPatternsSettings = {\n trackEnergyLevels: true,\n trackMood: true,\n interruptionTracking: true,\n};\n\nexport function WorkPatternsSettingsPage() {\n const { workspaceId = \"\" } = useTimeCampus();\n const { data, loading, error } = useListConfigurationsQuery({\n variables: { scope: \"WORKSPACE\" as never, limit: 100 },\n skip: !workspaceId,\n });\n\n const [setConfiguration, { loading: saving }] = useSetConfigurationMutation();\n const [settings, setSettings] =\n useState<WorkPatternsSettings>(DEFAULT_SETTINGS);\n\n useEffect(() => {\n if (data?.configurations) {\n const config = data.configurations.find(\n (c: ConfigurationFieldsFragment) =>\n c.key === WORK_PATTERNS_SETTINGS_KEY,\n );\n if (config?.value) {\n const val = config.value as Partial<WorkPatternsSettings>;\n setSettings({\n trackEnergyLevels:\n val.trackEnergyLevels ?? DEFAULT_SETTINGS.trackEnergyLevels,\n trackMood: val.trackMood ?? DEFAULT_SETTINGS.trackMood,\n interruptionTracking:\n val.interruptionTracking ?? DEFAULT_SETTINGS.interruptionTracking,\n });\n }\n }\n }, [data]);\n\n const handleSave = useCallback(async () => {\n await setConfiguration({\n variables: {\n input: {\n key: WORK_PATTERNS_SETTINGS_KEY,\n value: settings as unknown as Record<string, unknown>,\n description: \"Work patterns tracking settings\",\n scope: \"WORKSPACE\" as never,\n },\n },\n });\n }, [setConfiguration, settings]);\n\n if (loading) {\n return (\n <PageLayout\n title=\"Work Patterns Settings\"\n description=\"Configure work pattern tracking\"\n >\n <LoadingSkeleton variant=\"detail\" />\n </PageLayout>\n );\n }\n\n if (error) {\n return (\n <PageLayout\n title=\"Work Patterns Settings\"\n description=\"Configure work pattern tracking\"\n >\n <div className=\"rounded-xl border border-destructive/50 bg-destructive/10 p-4 text-sm text-destructive\">\n Failed to load settings. Please try again later.\n </div>\n </PageLayout>\n );\n }\n\n return (\n <PageLayout\n title=\"Work Patterns Settings\"\n description=\"Configure work pattern tracking\"\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 <Settings className=\"h-4 w-4\" />\n Tracking Preferences\n </h3>\n <div className=\"space-y-3\">\n <label className=\"flex items-center justify-between\">\n <span className=\"text-sm text-foreground\">\n Track energy levels\n </span>\n <input\n type=\"checkbox\"\n checked={settings.trackEnergyLevels}\n onChange={(e) =>\n setSettings((s) => ({\n ...s,\n trackEnergyLevels: e.target.checked,\n }))\n }\n className=\"h-4 w-4 rounded border-border\"\n />\n </label>\n <label className=\"flex items-center justify-between\">\n <span className=\"text-sm text-foreground\">Track mood</span>\n <input\n type=\"checkbox\"\n checked={settings.trackMood}\n onChange={(e) =>\n setSettings((s) => ({ ...s, trackMood: e.target.checked }))\n }\n className=\"h-4 w-4 rounded border-border\"\n />\n </label>\n <label className=\"flex items-center justify-between\">\n <span className=\"text-sm text-foreground\">\n Interruption tracking\n </span>\n <input\n type=\"checkbox\"\n checked={settings.interruptionTracking}\n onChange={(e) =>\n setSettings((s) => ({\n ...s,\n interruptionTracking: e.target.checked,\n }))\n }\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":";;;;;;;;AAWA,IAAM,IAA6B,oCAQ7B,IAAyC;CAC7C,mBAAmB;CACnB,WAAW;CACX,sBAAsB;CACvB;AAED,SAAgB,IAA2B;CACzC,IAAM,EAAE,iBAAc,OAAO,GAAe,EACtC,EAAE,SAAM,YAAS,aAAU,EAA2B;EAC1D,WAAW;GAAE,OAAO;GAAsB,OAAO;GAAK;EACtD,MAAM,CAAC;EACR,CAAC,EAEI,CAAC,GAAkB,EAAE,SAAS,OAAY,GAA6B,EACvE,CAAC,GAAU,KACf,EAA+B,EAAiB;AAElD,SAAgB;AACd,MAAI,GAAM,gBAAgB;GACxB,IAAM,IAAS,EAAK,eAAe,MAChC,MACC,EAAE,QAAQ,EACb;AACD,OAAI,GAAQ,OAAO;IACjB,IAAM,IAAM,EAAO;AACnB,MAAY;KACV,mBACE,EAAI,qBAAqB,EAAiB;KAC5C,WAAW,EAAI,aAAa,EAAiB;KAC7C,sBACE,EAAI,wBAAwB,EAAiB;KAChD,CAAC;;;IAGL,CAAC,EAAK,CAAC;CAEV,IAAM,IAAa,EAAY,YAAY;AACzC,QAAM,EAAiB,EACrB,WAAW,EACT,OAAO;GACL,KAAK;GACL,OAAO;GACP,aAAa;GACb,OAAO;GACR,EACF,EACF,CAAC;IACD,CAAC,GAAkB,EAAS,CAAC;AA0BhC,QAxBI,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;aAAyF;GAElG,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,EAAU,WAAU,WAAY,CAAA,EAAA,uBAE7B;QACL,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,SAAD;OAAO,WAAU;iBAAjB,CACE,kBAAC,QAAD;QAAM,WAAU;kBAA0B;QAEnC,CAAA,EACP,kBAAC,SAAD;QACE,MAAK;QACL,SAAS,EAAS;QAClB,WAAW,MACT,GAAa,OAAO;SAClB,GAAG;SACH,mBAAmB,EAAE,OAAO;SAC7B,EAAE;QAEL,WAAU;QACV,CAAA,CACI;;MACR,kBAAC,SAAD;OAAO,WAAU;iBAAjB,CACE,kBAAC,QAAD;QAAM,WAAU;kBAA0B;QAAiB,CAAA,EAC3D,kBAAC,SAAD;QACE,MAAK;QACL,SAAS,EAAS;QAClB,WAAW,MACT,GAAa,OAAO;SAAE,GAAG;SAAG,WAAW,EAAE,OAAO;SAAS,EAAE;QAE7D,WAAU;QACV,CAAA,CACI;;MACR,kBAAC,SAAD;OAAO,WAAU;iBAAjB,CACE,kBAAC,QAAD;QAAM,WAAU;kBAA0B;QAEnC,CAAA,EACP,kBAAC,SAAD;QACE,MAAK;QACL,SAAS,EAAS;QAClB,WAAW,MACT,GAAa,OAAO;SAClB,GAAG;SACH,sBAAsB,EAAE,OAAO;SAChC,EAAE;QAEL,WAAU;QACV,CAAA,CACI;;MACJ;OACF;OACN,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,UAAD;KACE,SAAS;KACT,UAAU;KACV,WAAU;eAET,IAAS,cAAc;KACjB,CAAA;IACL,CAAA,CACF;;EACK,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare function WorkflowsPage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=WorkflowsPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkflowsPage.d.ts","sourceRoot":"","sources":["../../../../src/timecampus/pages/workflows/WorkflowsPage.tsx"],"names":[],"mappings":"AAUA,wBAAgB,aAAa,4CAmG5B"}
@@ -0,0 +1,80 @@
1
+ import { useTimeCampus as e } from "../../providers/TimeCampusProvider.js";
2
+ import { getStatusColor as t } from "../../utils/helpers.js";
3
+ import { PageLayout as n } from "../../components/PageLayout.js";
4
+ import { LoadingSkeleton as r } from "../../components/LoadingSkeleton.js";
5
+ import { useListConfigurationsQuery as i } from "../../../generated/wspace-operations.js";
6
+ import { GitBranch as a, Plus as o, Zap as s } from "lucide-react";
7
+ import { jsx as c, jsxs as l } from "react/jsx-runtime";
8
+ //#region src/timecampus/pages/workflows/WorkflowsPage.tsx
9
+ function u() {
10
+ let { workspaceId: u = "" } = e(), { data: d, loading: f, error: p } = i({ variables: { scope: "WORKSPACE" } }), m = (d?.configurations ?? []).filter((e) => e.key.startsWith("workflow."));
11
+ return f ? /* @__PURE__ */ c(n, {
12
+ title: "Workflows",
13
+ description: "Automate repetitive tasks",
14
+ children: /* @__PURE__ */ c(r, {
15
+ variant: "list",
16
+ count: 5
17
+ })
18
+ }) : p ? /* @__PURE__ */ c(n, {
19
+ title: "Workflows",
20
+ description: "Automate repetitive tasks",
21
+ children: /* @__PURE__ */ c("div", {
22
+ className: "rounded-lg border border-red-200 bg-red-50 p-4 text-sm text-red-700 dark:border-red-800 dark:bg-red-900/20 dark:text-red-400",
23
+ children: "Failed to load workflow configurations. Please try again later."
24
+ })
25
+ }) : /* @__PURE__ */ c(n, {
26
+ title: "Workflows",
27
+ description: "Automate repetitive tasks",
28
+ actions: /* @__PURE__ */ l("button", {
29
+ className: "inline-flex items-center gap-1.5 rounded-md bg-primary px-3 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90",
30
+ children: [/* @__PURE__ */ c(o, { className: "h-4 w-4" }), "Create Workflow"]
31
+ }),
32
+ children: /* @__PURE__ */ c("div", {
33
+ className: "rounded-xl border border-border bg-card",
34
+ children: /* @__PURE__ */ c("div", {
35
+ className: "divide-y divide-border",
36
+ children: m.length === 0 ? /* @__PURE__ */ c("div", {
37
+ className: "p-8 text-center text-sm text-muted-foreground",
38
+ children: "No workflows configured yet. Workflows are stored as workspace configurations with the \"workflow.\" key prefix."
39
+ }) : m.map((e) => {
40
+ let n = e.value, r = n.name ?? e.key.replace("workflow.", ""), i = n.status ?? "inactive", o = n.trigger ?? "Manual", u = n.lastRun ?? "Never", d = n.runCount ?? 0, f = n.successRate ?? 0;
41
+ return /* @__PURE__ */ l("div", {
42
+ className: "flex items-center justify-between p-4 hover:bg-muted/50 transition-colors cursor-pointer",
43
+ children: [/* @__PURE__ */ l("div", {
44
+ className: "flex items-center gap-3",
45
+ children: [/* @__PURE__ */ c("div", {
46
+ className: "flex h-9 w-9 items-center justify-center rounded-lg bg-primary/10",
47
+ children: /* @__PURE__ */ c(a, { className: "h-4 w-4 text-primary" })
48
+ }), /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("p", {
49
+ className: "text-sm font-medium text-foreground",
50
+ children: r
51
+ }), /* @__PURE__ */ l("p", {
52
+ className: "text-xs text-muted-foreground",
53
+ children: [
54
+ /* @__PURE__ */ c(s, { className: "inline h-3 w-3" }),
55
+ " ",
56
+ o,
57
+ " · Last run: ",
58
+ u
59
+ ]
60
+ })] })]
61
+ }), /* @__PURE__ */ l("div", {
62
+ className: "flex items-center gap-4",
63
+ children: [/* @__PURE__ */ l("div", {
64
+ className: "text-right text-xs text-muted-foreground",
65
+ children: [/* @__PURE__ */ l("p", { children: [d, " runs"] }), /* @__PURE__ */ l("p", { children: [f, "% success"] })]
66
+ }), /* @__PURE__ */ c("span", {
67
+ className: `inline-flex rounded-full px-2 py-0.5 text-xs font-medium ${t(i)}`,
68
+ children: i
69
+ })]
70
+ })]
71
+ }, e.id);
72
+ })
73
+ })
74
+ })
75
+ });
76
+ }
77
+ //#endregion
78
+ export { u as WorkflowsPage };
79
+
80
+ //# sourceMappingURL=WorkflowsPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkflowsPage.js","names":[],"sources":["../../../../src/timecampus/pages/workflows/WorkflowsPage.tsx"],"sourcesContent":["import { GitBranch, Plus, Zap } from \"lucide-react\";\nimport { PageLayout } from \"../../components/PageLayout\";\nimport { LoadingSkeleton } from \"../../components/LoadingSkeleton\";\nimport { getStatusColor } from \"../../utils/helpers\";\nimport { useTimeCampus } from \"../../providers/TimeCampusProvider\";\nimport {\n useListConfigurationsQuery,\n type ConfigurationFieldsFragment,\n} from \"@/generated/wspace-operations\";\n\nexport function WorkflowsPage() {\n const { workspaceId = \"\" } = useTimeCampus();\n\n const { data, loading, error } = useListConfigurationsQuery({\n variables: { scope: \"WORKSPACE\" as any },\n });\n\n const configurations = data?.configurations ?? [];\n\n // Filter configurations that represent workflows (key starts with 'workflow.')\n const workflows = configurations.filter((c: ConfigurationFieldsFragment) =>\n c.key.startsWith(\"workflow.\"),\n );\n\n if (loading) {\n return (\n <PageLayout title=\"Workflows\" description=\"Automate repetitive tasks\">\n <LoadingSkeleton variant=\"list\" count={5} />\n </PageLayout>\n );\n }\n\n if (error) {\n return (\n <PageLayout title=\"Workflows\" description=\"Automate repetitive tasks\">\n <div className=\"rounded-lg border border-red-200 bg-red-50 p-4 text-sm text-red-700 dark:border-red-800 dark:bg-red-900/20 dark:text-red-400\">\n Failed to load workflow configurations. Please try again later.\n </div>\n </PageLayout>\n );\n }\n\n return (\n <PageLayout\n title=\"Workflows\"\n description=\"Automate repetitive tasks\"\n actions={\n <button className=\"inline-flex items-center gap-1.5 rounded-md bg-primary px-3 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90\">\n <Plus className=\"h-4 w-4\" />\n Create Workflow\n </button>\n }\n >\n <div className=\"rounded-xl border border-border bg-card\">\n <div className=\"divide-y divide-border\">\n {workflows.length === 0 ? (\n <div className=\"p-8 text-center text-sm text-muted-foreground\">\n No workflows configured yet. Workflows are stored as workspace\n configurations with the \"workflow.\" key prefix.\n </div>\n ) : (\n workflows.map((wf: ConfigurationFieldsFragment) => {\n const val = wf.value as Record<string, unknown>;\n const name =\n (val.name as string) ?? wf.key.replace(\"workflow.\", \"\");\n const status = (val.status as string) ?? \"inactive\";\n const trigger = (val.trigger as string) ?? \"Manual\";\n const lastRun = (val.lastRun as string) ?? \"Never\";\n const runCount = (val.runCount as number) ?? 0;\n const successRate = (val.successRate as number) ?? 0;\n\n return (\n <div\n key={wf.id}\n className=\"flex items-center justify-between p-4 hover:bg-muted/50 transition-colors cursor-pointer\"\n >\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-9 w-9 items-center justify-center rounded-lg bg-primary/10\">\n <GitBranch className=\"h-4 w-4 text-primary\" />\n </div>\n <div>\n <p className=\"text-sm font-medium text-foreground\">\n {name}\n </p>\n <p className=\"text-xs text-muted-foreground\">\n <Zap className=\"inline h-3 w-3\" /> {trigger} &middot;\n Last run: {lastRun}\n </p>\n </div>\n </div>\n <div className=\"flex items-center gap-4\">\n <div className=\"text-right text-xs text-muted-foreground\">\n <p>{runCount} runs</p>\n <p>{successRate}% success</p>\n </div>\n <span\n className={`inline-flex rounded-full px-2 py-0.5 text-xs font-medium ${getStatusColor(status)}`}\n >\n {status}\n </span>\n </div>\n </div>\n );\n })\n )}\n </div>\n </div>\n </PageLayout>\n );\n}\n"],"mappings":";;;;;;;;AAUA,SAAgB,IAAgB;CAC9B,IAAM,EAAE,iBAAc,OAAO,GAAe,EAEtC,EAAE,SAAM,YAAS,aAAU,EAA2B,EAC1D,WAAW,EAAE,OAAO,aAAoB,EACzC,CAAC,EAKI,KAHiB,GAAM,kBAAkB,EAAE,EAGhB,QAAQ,MACvC,EAAE,IAAI,WAAW,YAAY,CAC9B;AAoBD,QAlBI,IAEA,kBAAC,GAAD;EAAY,OAAM;EAAY,aAAY;YACxC,kBAAC,GAAD;GAAiB,SAAQ;GAAO,OAAO;GAAK,CAAA;EACjC,CAAA,GAIb,IAEA,kBAAC,GAAD;EAAY,OAAM;EAAY,aAAY;YACxC,kBAAC,OAAD;GAAK,WAAU;aAA+H;GAExI,CAAA;EACK,CAAA,GAKf,kBAAC,GAAD;EACE,OAAM;EACN,aAAY;EACZ,SACE,kBAAC,UAAD;GAAQ,WAAU;aAAlB,CACE,kBAAC,GAAD,EAAM,WAAU,WAAY,CAAA,EAAA,kBAErB;;YAGX,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,OAAD;IAAK,WAAU;cACZ,EAAU,WAAW,IACpB,kBAAC,OAAD;KAAK,WAAU;eAAgD;KAGzD,CAAA,GAEN,EAAU,KAAK,MAAoC;KACjD,IAAM,IAAM,EAAG,OACT,IACH,EAAI,QAAmB,EAAG,IAAI,QAAQ,aAAa,GAAG,EACnD,IAAU,EAAI,UAAqB,YACnC,IAAW,EAAI,WAAsB,UACrC,IAAW,EAAI,WAAsB,SACrC,IAAY,EAAI,YAAuB,GACvC,IAAe,EAAI,eAA0B;AAEnD,YACE,kBAAC,OAAD;MAEE,WAAU;gBAFZ,CAIE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,OAAD;QAAK,WAAU;kBACb,kBAAC,GAAD,EAAW,WAAU,wBAAyB,CAAA;QAC1C,CAAA,EACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;QAAG,WAAU;kBACV;QACC,CAAA,EACJ,kBAAC,KAAD;QAAG,WAAU;kBAAb;SACE,kBAAC,GAAD,EAAK,WAAU,kBAAmB,CAAA;;SAAE;SAAQ;SACjC;SACT;UACA,EAAA,CAAA,CACF;UACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,KAAD,EAAA,UAAA,CAAI,GAAS,QAAS,EAAA,CAAA,EACtB,kBAAC,KAAD,EAAA,UAAA,CAAI,GAAY,YAAa,EAAA,CAAA,CACzB;WACN,kBAAC,QAAD;QACE,WAAW,4DAA4D,EAAe,EAAO;kBAE5F;QACI,CAAA,CACH;SACF;QA5BC,EAAG,GA4BJ;MAER;IAEA,CAAA;GACF,CAAA;EACK,CAAA"}
@@ -0,0 +1,29 @@
1
+ import { FC, PropsWithChildren } from 'react';
2
+ import { TimeCampusRootProps } from '../types';
3
+
4
+ /**
5
+ * Hook to access TimeCampus context
6
+ */
7
+ export declare const useTimeCampus: () => TimeCampusRootProps;
8
+ /**
9
+ * Hook for navigation within the TimeCampus microfrontend.
10
+ * Uses the shell's navigate function if available, falling back to
11
+ * React Router's useNavigate. Automatically prepends basePath.
12
+ *
13
+ * Usage:
14
+ * const navigate = useTimeCampusNavigate();
15
+ * navigate('/projects/123'); // navigates to /timecampus/projects/123
16
+ */
17
+ export declare const useTimeCampusNavigate: () => (path: string) => void;
18
+ /**
19
+ * Provider component for TimeCampus microfrontend
20
+ * Sets up routing, Apollo Client with auth error detection, and context.
21
+ *
22
+ * The Apollo Client is configured with:
23
+ * - An onError link that detects UNAUTHENTICATED / FORBIDDEN responses and
24
+ * invokes the `onAuthError` prop so the host shell can trigger logout.
25
+ * - A dynamic auth link that reads the token per-request (not baked in at
26
+ * client creation time), so token refreshes take effect immediately.
27
+ */
28
+ export declare const TimeCampusProvider: FC<PropsWithChildren<TimeCampusRootProps>>;
29
+ //# sourceMappingURL=TimeCampusProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimeCampusProvider.d.ts","sourceRoot":"","sources":["../../../src/timecampus/providers/TimeCampusProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAWnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AASpD;;GAEG;AACH,eAAO,MAAM,aAAa,2BAMzB,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,eAKvB,MAAM,SAWhB,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,EAAE,EAAE,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,CAuHzE,CAAC"}
@@ -0,0 +1,92 @@
1
+ import { CombinedGraphQLErrors as e } from "../../node_modules/@apollo/client/errors/CombinedGraphQLErrors.js";
2
+ import { createContext as t, useCallback as n, useContext as r, useMemo as i } from "react";
3
+ import { MemoryRouter as a, useNavigate as o } from "react-router-dom";
4
+ import { ApolloClient as s, HttpLink as c, InMemoryCache as l, from as u } from "@apollo/client";
5
+ import { onError as d } from "@apollo/client/link/error";
6
+ import { setContext as f } from "@apollo/client/link/context";
7
+ import { ApolloProvider as p } from "@apollo/client/react";
8
+ import { jsx as m } from "react/jsx-runtime";
9
+ //#region src/timecampus/providers/TimeCampusProvider.tsx
10
+ var h = t(null), g = () => {
11
+ let e = r(h);
12
+ if (!e) throw Error("useTimeCampus must be used within TimeCampusProvider");
13
+ return e;
14
+ }, _ = () => {
15
+ let { navigate: e, basePath: t } = g(), r = o();
16
+ return n((n) => {
17
+ let i = t && t !== "/" ? `${t}${n}` : n;
18
+ e ? e(i) : r(i);
19
+ }, [
20
+ e,
21
+ t,
22
+ r
23
+ ]);
24
+ }, v = ({ children: t, basePath: n, navigate: r, currentUser: o, workspaceId: g, tenantId: _, apiGatewayUrl: v, authToken: y, workspaceToken: b, registerNavItems: x, registerFooterItems: S, onAuthError: C }) => {
25
+ let w = i(() => new s({
26
+ link: u([
27
+ d(({ error: t }) => {
28
+ if (e.is(t)) for (let e of t.errors) {
29
+ let t = e.extensions?.code;
30
+ if (t === "UNAUTHENTICATED" || t === "FORBIDDEN") {
31
+ console.warn("[TimeCampus] Auth error detected — notifying host shell"), C?.();
32
+ return;
33
+ }
34
+ }
35
+ else if (t) {
36
+ let e = t.message ?? "";
37
+ (e.includes("401") || e.includes("403") || e.includes("Unauthorized")) && (console.warn("[TimeCampus] Auth network error — notifying host shell"), C?.());
38
+ }
39
+ }),
40
+ f((e, { headers: t }) => ({ headers: {
41
+ ...t,
42
+ ...y ? { Authorization: `Bearer ${y}` } : {},
43
+ ...b ? { "X-Workspace-Authorization": `Bearer ${b}` } : {},
44
+ ...g ? { "x-workspace-id": g } : {},
45
+ ..._ ? { "x-tenant-id": _ } : {},
46
+ ...o?.id ? { "x-actor-id": o.id } : {},
47
+ ...o?.id ? { "x-actor-type": "user" } : {}
48
+ } })),
49
+ new c({ uri: v ? v.endsWith("/graphql") ? v : `${v}/workspaces/graphql` : "/workspaces/graphql" })
50
+ ]),
51
+ cache: new l(),
52
+ defaultOptions: {
53
+ watchQuery: {
54
+ fetchPolicy: "cache-and-network",
55
+ errorPolicy: "all"
56
+ },
57
+ query: { errorPolicy: "all" },
58
+ mutate: { errorPolicy: "all" }
59
+ }
60
+ }), [
61
+ v,
62
+ y,
63
+ b,
64
+ o?.id,
65
+ C,
66
+ _,
67
+ g
68
+ ]), T = {
69
+ basePath: n,
70
+ navigate: r,
71
+ currentUser: o,
72
+ workspaceId: g,
73
+ tenantId: _,
74
+ apiGatewayUrl: v,
75
+ authToken: y,
76
+ workspaceToken: b,
77
+ registerNavItems: x,
78
+ registerFooterItems: S,
79
+ onAuthError: C
80
+ }, E = !!n, D = /* @__PURE__ */ m(h.Provider, {
81
+ value: T,
82
+ children: t
83
+ });
84
+ return E ? D : /* @__PURE__ */ m(p, {
85
+ client: w,
86
+ children: /* @__PURE__ */ m(a, { children: D })
87
+ });
88
+ };
89
+ //#endregion
90
+ export { v as TimeCampusProvider, g as useTimeCampus, _ as useTimeCampusNavigate };
91
+
92
+ //# sourceMappingURL=TimeCampusProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimeCampusProvider.js","names":[],"sources":["../../../src/timecampus/providers/TimeCampusProvider.tsx"],"sourcesContent":["import type { FC, PropsWithChildren } from \"react\";\nimport { createContext, useContext, useMemo, useCallback } from \"react\";\nimport {\n MemoryRouter,\n useNavigate as useRouterNavigate,\n} from \"react-router-dom\";\nimport { ApolloClient, InMemoryCache, HttpLink, from } from \"@apollo/client\";\nimport { onError } from \"@apollo/client/link/error\";\nimport { CombinedGraphQLErrors } from \"@apollo/client/errors\";\nimport { setContext } from \"@apollo/client/link/context\";\nimport { ApolloProvider } from \"@apollo/client/react\";\nimport type { TimeCampusRootProps } from \"../types\";\n\n/**\n * Context value for TimeCampus microfrontend\n */\ntype TimeCampusContextValue = TimeCampusRootProps;\n\nconst TimeCampusContext = createContext<TimeCampusContextValue | null>(null);\n\n/**\n * Hook to access TimeCampus context\n */\nexport const useTimeCampus = () => {\n const context = useContext(TimeCampusContext);\n if (!context) {\n throw new Error(\"useTimeCampus must be used within TimeCampusProvider\");\n }\n return context;\n};\n\n/**\n * Hook for navigation within the TimeCampus microfrontend.\n * Uses the shell's navigate function if available, falling back to\n * React Router's useNavigate. Automatically prepends basePath.\n *\n * Usage:\n * const navigate = useTimeCampusNavigate();\n * navigate('/projects/123'); // navigates to /timecampus/projects/123\n */\nexport const useTimeCampusNavigate = () => {\n const { navigate: shellNavigate, basePath } = useTimeCampus();\n const routerNavigate = useRouterNavigate();\n\n return useCallback(\n (path: string) => {\n const fullPath =\n basePath && basePath !== \"/\" ? `${basePath}${path}` : path;\n if (shellNavigate) {\n shellNavigate(fullPath);\n } else {\n routerNavigate(fullPath);\n }\n },\n [shellNavigate, basePath, routerNavigate],\n );\n};\n\n/**\n * Provider component for TimeCampus microfrontend\n * Sets up routing, Apollo Client with auth error detection, and context.\n *\n * The Apollo Client is configured with:\n * - An onError link that detects UNAUTHENTICATED / FORBIDDEN responses and\n * invokes the `onAuthError` prop so the host shell can trigger logout.\n * - A dynamic auth link that reads the token per-request (not baked in at\n * client creation time), so token refreshes take effect immediately.\n */\nexport const TimeCampusProvider: FC<PropsWithChildren<TimeCampusRootProps>> = ({\n children,\n basePath,\n navigate,\n currentUser,\n workspaceId,\n tenantId,\n apiGatewayUrl,\n authToken,\n workspaceToken,\n registerNavItems,\n registerFooterItems,\n onAuthError,\n}) => {\n // Build Apollo Client with error link + dynamic auth link\n const apolloClient = useMemo(() => {\n // Error link (Apollo v4 pattern): detect authentication failures\n const errorLink = onError(({ error }) => {\n if (CombinedGraphQLErrors.is(error)) {\n for (const graphQLError of error.errors) {\n const code = graphQLError.extensions?.code;\n if (code === \"UNAUTHENTICATED\" || code === \"FORBIDDEN\") {\n console.warn(\n \"[TimeCampus] Auth error detected — notifying host shell\",\n );\n onAuthError?.();\n return; // Only fire once per batch\n }\n }\n } else if (error) {\n // Network-level errors (e.g., gateway returning 401/403 as non-JSON)\n const msg = error.message ?? \"\";\n if (\n msg.includes(\"401\") ||\n msg.includes(\"403\") ||\n msg.includes(\"Unauthorized\")\n ) {\n console.warn(\n \"[TimeCampus] Auth network error — notifying host shell\",\n );\n onAuthError?.();\n }\n }\n });\n\n // Auth link: dynamically attach the Bearer token per-request\n const authLink = setContext((_, { headers }) => ({\n headers: {\n ...headers,\n ...(authToken ? { Authorization: `Bearer ${authToken}` } : {}),\n ...(workspaceToken\n ? { \"X-Workspace-Authorization\": `Bearer ${workspaceToken}` }\n : {}),\n ...(workspaceId ? { \"x-workspace-id\": workspaceId } : {}),\n ...(tenantId ? { \"x-tenant-id\": tenantId } : {}),\n ...(currentUser?.id ? { \"x-actor-id\": currentUser.id } : {}),\n ...(currentUser?.id ? { \"x-actor-type\": \"user\" } : {}),\n },\n }));\n\n const graphqlUri = apiGatewayUrl\n ? apiGatewayUrl.endsWith(\"/graphql\")\n ? apiGatewayUrl\n : `${apiGatewayUrl}/workspaces/graphql`\n : \"/workspaces/graphql\";\n\n const httpLink = new HttpLink({\n uri: graphqlUri,\n });\n\n return new ApolloClient({\n link: from([errorLink, authLink, httpLink]),\n cache: new InMemoryCache(),\n defaultOptions: {\n watchQuery: { fetchPolicy: \"cache-and-network\", errorPolicy: \"all\" },\n query: { errorPolicy: \"all\" },\n mutate: { errorPolicy: \"all\" },\n },\n });\n }, [\n apiGatewayUrl,\n authToken,\n workspaceToken,\n currentUser?.id,\n onAuthError,\n tenantId,\n workspaceId,\n ]);\n\n const contextValue: TimeCampusContextValue = {\n basePath,\n navigate,\n currentUser,\n workspaceId,\n tenantId,\n apiGatewayUrl,\n authToken,\n workspaceToken,\n registerNavItems,\n registerFooterItems,\n onAuthError,\n };\n\n const isIntegrated = !!basePath;\n const content = (\n <TimeCampusContext.Provider value={contextValue}>\n {children}\n </TimeCampusContext.Provider>\n );\n\n // When integrated into a shell (basePath provided), the shell already has a router and ApolloProvider\n // so we don't create another one. When standalone (no basePath), use MemoryRouter and ApolloProvider.\n return isIntegrated ? (\n content\n ) : (\n <ApolloProvider client={apolloClient}>\n <MemoryRouter>{content}</MemoryRouter>\n </ApolloProvider>\n );\n};\n"],"mappings":";;;;;;;;;AAkBA,IAAM,IAAoB,EAA6C,KAAK,EAK/D,UAAsB;CACjC,IAAM,IAAU,EAAW,EAAkB;AAC7C,KAAI,CAAC,EACH,OAAU,MAAM,uDAAuD;AAEzE,QAAO;GAYI,UAA8B;CACzC,IAAM,EAAE,UAAU,GAAe,gBAAa,GAAe,EACvD,IAAiB,GAAmB;AAE1C,QAAO,GACJ,MAAiB;EAChB,IAAM,IACJ,KAAY,MAAa,MAAM,GAAG,IAAW,MAAS;AACxD,EAAI,IACF,EAAc,EAAS,GAEvB,EAAe,EAAS;IAG5B;EAAC;EAAe;EAAU;EAAe,CAC1C;GAaU,KAAkE,EAC7E,aACA,aACA,aACA,gBACA,gBACA,aACA,kBACA,cACA,mBACA,qBACA,wBACA,qBACI;CAEJ,IAAM,IAAe,QAuDZ,IAAI,EAAa;EACtB,MAAM,EAAK;GAtDK,GAAS,EAAE,eAAY;AACvC,QAAI,EAAsB,GAAG,EAAM,CACjC,MAAK,IAAM,KAAgB,EAAM,QAAQ;KACvC,IAAM,IAAO,EAAa,YAAY;AACtC,SAAI,MAAS,qBAAqB,MAAS,aAAa;AAItD,MAHA,QAAQ,KACN,0DACD,EACD,KAAe;AACf;;;aAGK,GAAO;KAEhB,IAAM,IAAM,EAAM,WAAW;AAC7B,MACE,EAAI,SAAS,MAAM,IACnB,EAAI,SAAS,MAAM,IACnB,EAAI,SAAS,eAAe,MAE5B,QAAQ,KACN,yDACD,EACD,KAAe;;KAGnB;GAGe,GAAY,GAAG,EAAE,kBAAe,EAC/C,SAAS;IACP,GAAG;IACH,GAAI,IAAY,EAAE,eAAe,UAAU,KAAa,GAAG,EAAE;IAC7D,GAAI,IACA,EAAE,6BAA6B,UAAU,KAAkB,GAC3D,EAAE;IACN,GAAI,IAAc,EAAE,kBAAkB,GAAa,GAAG,EAAE;IACxD,GAAI,IAAW,EAAE,eAAe,GAAU,GAAG,EAAE;IAC/C,GAAI,GAAa,KAAK,EAAE,cAAc,EAAY,IAAI,GAAG,EAAE;IAC3D,GAAI,GAAa,KAAK,EAAE,gBAAgB,QAAQ,GAAG,EAAE;IACtD,EACF,EAAE;GAQc,IAAI,EAAS,EAC5B,KAPiB,IACf,EAAc,SAAS,WAAW,GAChC,IACA,GAAG,EAAc,uBACnB,uBAIH,CAAC;GAG0C,CAAC;EAC3C,OAAO,IAAI,GAAe;EAC1B,gBAAgB;GACd,YAAY;IAAE,aAAa;IAAqB,aAAa;IAAO;GACpE,OAAO,EAAE,aAAa,OAAO;GAC7B,QAAQ,EAAE,aAAa,OAAO;GAC/B;EACF,CAAC,EACD;EACD;EACA;EACA;EACA,GAAa;EACb;EACA;EACA;EACD,CAAC,EAEI,IAAuC;EAC3C;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,EAEK,IAAe,CAAC,CAAC,GACjB,IACJ,kBAAC,EAAkB,UAAnB;EAA4B,OAAO;EAChC;EAC0B,CAAA;AAK/B,QAAO,IACL,IAEA,kBAAC,GAAD;EAAgB,QAAQ;YACtB,kBAAC,GAAD,EAAA,UAAe,GAAuB,CAAA;EACvB,CAAA"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * TimeCampus Zustand Store
3
+ * UI state management for the TimeCampus microfrontend.
4
+ * @module timecampus
5
+ */
6
+ interface TimeCampusStore {
7
+ viewMode: "grid" | "list" | "table";
8
+ setViewMode: (mode: "grid" | "list" | "table") => void;
9
+ activeModule: string;
10
+ setActiveModule: (module: string) => void;
11
+ searchQuery: string;
12
+ setSearchQuery: (query: string) => void;
13
+ selectedItems: string[];
14
+ toggleSelection: (id: string) => void;
15
+ clearSelection: () => void;
16
+ activeTimer: {
17
+ isRunning: boolean;
18
+ seconds: number;
19
+ projectId?: string;
20
+ taskId?: string;
21
+ description?: string;
22
+ } | null;
23
+ startTimer: (config?: {
24
+ projectId?: string;
25
+ taskId?: string;
26
+ description?: string;
27
+ }) => void;
28
+ stopTimer: () => void;
29
+ tickTimer: () => void;
30
+ }
31
+ export declare const useTimeCampusStore: import('zustand').UseBoundStore<Omit<Omit<import('zustand').StoreApi<TimeCampusStore>, "setState" | "devtools"> & {
32
+ setState(partial: TimeCampusStore | Partial<TimeCampusStore> | ((state: TimeCampusStore) => TimeCampusStore | Partial<TimeCampusStore>), replace?: false | undefined, action?: (string | {
33
+ [x: string]: unknown;
34
+ [x: number]: unknown;
35
+ [x: symbol]: unknown;
36
+ type: string;
37
+ }) | undefined): void;
38
+ setState(state: TimeCampusStore | ((state: TimeCampusStore) => TimeCampusStore), replace: true, action?: (string | {
39
+ [x: string]: unknown;
40
+ [x: number]: unknown;
41
+ [x: symbol]: unknown;
42
+ type: string;
43
+ }) | undefined): void;
44
+ devtools: {
45
+ cleanup: () => void;
46
+ };
47
+ }, "setState" | "persist"> & {
48
+ setState(partial: TimeCampusStore | Partial<TimeCampusStore> | ((state: TimeCampusStore) => TimeCampusStore | Partial<TimeCampusStore>), replace?: false | undefined, action?: (string | {
49
+ [x: string]: unknown;
50
+ [x: number]: unknown;
51
+ [x: symbol]: unknown;
52
+ type: string;
53
+ }) | undefined): unknown;
54
+ setState(state: TimeCampusStore | ((state: TimeCampusStore) => TimeCampusStore), replace: true, action?: (string | {
55
+ [x: string]: unknown;
56
+ [x: number]: unknown;
57
+ [x: symbol]: unknown;
58
+ type: string;
59
+ }) | undefined): unknown;
60
+ persist: {
61
+ setOptions: (options: Partial<import('zustand/middleware').PersistOptions<TimeCampusStore, unknown, unknown>>) => void;
62
+ clearStorage: () => void;
63
+ rehydrate: () => Promise<void> | void;
64
+ hasHydrated: () => boolean;
65
+ onHydrate: (fn: (state: TimeCampusStore) => void) => () => void;
66
+ onFinishHydration: (fn: (state: TimeCampusStore) => void) => () => void;
67
+ getOptions: () => Partial<import('zustand/middleware').PersistOptions<TimeCampusStore, unknown, unknown>>;
68
+ };
69
+ }>;
70
+ export {};
71
+ //# sourceMappingURL=timecampusStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timecampusStore.d.ts","sourceRoot":"","sources":["../../../src/timecampus/store/timecampusStore.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,UAAU,eAAe;IAEvB,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IACpC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,KAAK,IAAI,CAAC;IAGvD,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAG1C,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAGxC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,cAAc,EAAE,MAAM,IAAI,CAAC;IAG3B,WAAW,EAAE;QACX,SAAS,EAAE,OAAO,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,GAAG,IAAI,CAAC;IACT,UAAU,EAAE,CAAC,MAAM,CAAC,EAAE;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,KAAK,IAAI,CAAC;IACX,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuC9B,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { create as e } from "zustand";
2
+ import { devtools as t, persist as n } from "zustand/middleware";
3
+ import { createProfileScopedStorage as r } from "@burdenoff/fe-libs/shared/utils";
4
+ //#region src/timecampus/store/timecampusStore.ts
5
+ var i = e()(t(n((e) => ({
6
+ viewMode: "grid",
7
+ setViewMode: (t) => e({ viewMode: t }),
8
+ activeModule: "dashboard",
9
+ setActiveModule: (t) => e({ activeModule: t }),
10
+ searchQuery: "",
11
+ setSearchQuery: (t) => e({ searchQuery: t }),
12
+ selectedItems: [],
13
+ toggleSelection: (t) => e((e) => ({ selectedItems: e.selectedItems.includes(t) ? e.selectedItems.filter((e) => e !== t) : [...e.selectedItems, t] })),
14
+ clearSelection: () => e({ selectedItems: [] }),
15
+ activeTimer: null,
16
+ startTimer: (t) => e({ activeTimer: {
17
+ isRunning: !0,
18
+ seconds: 0,
19
+ ...t
20
+ } }),
21
+ stopTimer: () => e({ activeTimer: null }),
22
+ tickTimer: () => e((e) => ({ activeTimer: e.activeTimer ? {
23
+ ...e.activeTimer,
24
+ seconds: e.activeTimer.seconds + 1
25
+ } : null }))
26
+ }), {
27
+ name: "timecampus-store",
28
+ storage: r()
29
+ }), { name: "timecampus-store" }));
30
+ //#endregion
31
+ export { i as useTimeCampusStore };
32
+
33
+ //# sourceMappingURL=timecampusStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timecampusStore.js","names":[],"sources":["../../../src/timecampus/store/timecampusStore.ts"],"sourcesContent":["/**\n * TimeCampus Zustand Store\n * UI state management for the TimeCampus microfrontend.\n * @module timecampus\n */\n\nimport { create } from \"zustand\";\nimport { devtools, persist } from \"zustand/middleware\";\nimport { createProfileScopedStorage } from \"@burdenoff/fe-libs/shared/utils\";\n\ninterface TimeCampusStore {\n // View\n viewMode: \"grid\" | \"list\" | \"table\";\n setViewMode: (mode: \"grid\" | \"list\" | \"table\") => void;\n\n // Active section\n activeModule: string;\n setActiveModule: (module: string) => void;\n\n // Search\n searchQuery: string;\n setSearchQuery: (query: string) => void;\n\n // Selection\n selectedItems: string[];\n toggleSelection: (id: string) => void;\n clearSelection: () => void;\n\n // Timer\n activeTimer: {\n isRunning: boolean;\n seconds: number;\n projectId?: string;\n taskId?: string;\n description?: string;\n } | null;\n startTimer: (config?: {\n projectId?: string;\n taskId?: string;\n description?: string;\n }) => void;\n stopTimer: () => void;\n tickTimer: () => void;\n}\n\nexport const useTimeCampusStore = create<TimeCampusStore>()(\n devtools(\n persist(\n (set) => ({\n viewMode: \"grid\",\n setViewMode: (mode) => set({ viewMode: mode }),\n\n activeModule: \"dashboard\",\n setActiveModule: (module) => set({ activeModule: module }),\n\n searchQuery: \"\",\n setSearchQuery: (query) => set({ searchQuery: query }),\n\n selectedItems: [],\n toggleSelection: (id) =>\n set((state) => ({\n selectedItems: state.selectedItems.includes(id)\n ? state.selectedItems.filter((i) => i !== id)\n : [...state.selectedItems, id],\n })),\n clearSelection: () => set({ selectedItems: [] }),\n\n activeTimer: null,\n startTimer: (config) =>\n set({\n activeTimer: { isRunning: true, seconds: 0, ...config },\n }),\n stopTimer: () => set({ activeTimer: null }),\n tickTimer: () =>\n set((state) => ({\n activeTimer: state.activeTimer\n ? { ...state.activeTimer, seconds: state.activeTimer.seconds + 1 }\n : null,\n })),\n }),\n { name: \"timecampus-store\", storage: createProfileScopedStorage() },\n ),\n { name: \"timecampus-store\" },\n ),\n);\n"],"mappings":";;;;AA6CA,IAAa,IAAqB,GAAyB,CACzD,EACE,GACG,OAAS;CACR,UAAU;CACV,cAAc,MAAS,EAAI,EAAE,UAAU,GAAM,CAAC;CAE9C,cAAc;CACd,kBAAkB,MAAW,EAAI,EAAE,cAAc,GAAQ,CAAC;CAE1D,aAAa;CACb,iBAAiB,MAAU,EAAI,EAAE,aAAa,GAAO,CAAC;CAEtD,eAAe,EAAE;CACjB,kBAAkB,MAChB,GAAK,OAAW,EACd,eAAe,EAAM,cAAc,SAAS,EAAG,GAC3C,EAAM,cAAc,QAAQ,MAAM,MAAM,EAAG,GAC3C,CAAC,GAAG,EAAM,eAAe,EAAG,EACjC,EAAE;CACL,sBAAsB,EAAI,EAAE,eAAe,EAAE,EAAE,CAAC;CAEhD,aAAa;CACb,aAAa,MACX,EAAI,EACF,aAAa;EAAE,WAAW;EAAM,SAAS;EAAG,GAAG;EAAQ,EACxD,CAAC;CACJ,iBAAiB,EAAI,EAAE,aAAa,MAAM,CAAC;CAC3C,iBACE,GAAK,OAAW,EACd,aAAa,EAAM,cACf;EAAE,GAAG,EAAM;EAAa,SAAS,EAAM,YAAY,UAAU;EAAG,GAChE,MACL,EAAE;CACN,GACD;CAAE,MAAM;CAAoB,SAAS,GAA4B;CAAE,CACpE,EACD,EAAE,MAAM,oBAAoB,CAC7B,CACF"}