@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.
- package/README.md +12 -0
- package/dist/generated/global-operations.d.ts +2 -0
- package/dist/generated/global-operations.d.ts.map +1 -0
- package/dist/generated/global-types.d.ts +20716 -0
- package/dist/generated/global-types.d.ts.map +1 -0
- package/dist/generated/wspace-operations.d.ts +8527 -0
- package/dist/generated/wspace-operations.d.ts.map +1 -0
- package/dist/generated/wspace-operations.js +3913 -0
- package/dist/generated/wspace-operations.js.map +1 -0
- package/dist/generated/wspace-types.d.ts +53363 -0
- package/dist/generated/wspace-types.d.ts.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/node_modules/@apollo/client/errors/CombinedGraphQLErrors.js +24 -0
- package/dist/node_modules/@apollo/client/errors/CombinedGraphQLErrors.js.map +1 -0
- package/dist/node_modules/@apollo/client/errors/utils.js +16 -0
- package/dist/node_modules/@apollo/client/errors/utils.js.map +1 -0
- package/dist/node_modules/clsx/dist/clsx.js +18 -0
- package/dist/node_modules/clsx/dist/clsx.js.map +1 -0
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +1674 -0
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -0
- package/dist/timecampus/TimeCampusRoot.d.ts +5 -0
- package/dist/timecampus/TimeCampusRoot.d.ts.map +1 -0
- package/dist/timecampus/TimeCampusRoot.js +344 -0
- package/dist/timecampus/TimeCampusRoot.js.map +1 -0
- package/dist/timecampus/TimeCampusRoutes.d.ts +7 -0
- package/dist/timecampus/TimeCampusRoutes.d.ts.map +1 -0
- package/dist/timecampus/TimeCampusRoutes.js +227 -0
- package/dist/timecampus/TimeCampusRoutes.js.map +1 -0
- package/dist/timecampus/components/ChartCard.d.ts +19 -0
- package/dist/timecampus/components/ChartCard.d.ts.map +1 -0
- package/dist/timecampus/components/DataTable.d.ts +26 -0
- package/dist/timecampus/components/DataTable.d.ts.map +1 -0
- package/dist/timecampus/components/EmptyState.d.ts +12 -0
- package/dist/timecampus/components/EmptyState.d.ts.map +1 -0
- package/dist/timecampus/components/ErrorBoundary.d.ts +19 -0
- package/dist/timecampus/components/ErrorBoundary.d.ts.map +1 -0
- package/dist/timecampus/components/ErrorBoundary.js +52 -0
- package/dist/timecampus/components/ErrorBoundary.js.map +1 -0
- package/dist/timecampus/components/FilterBar.d.ts +26 -0
- package/dist/timecampus/components/FilterBar.d.ts.map +1 -0
- package/dist/timecampus/components/LoadingSkeleton.d.ts +10 -0
- package/dist/timecampus/components/LoadingSkeleton.d.ts.map +1 -0
- package/dist/timecampus/components/LoadingSkeleton.js +76 -0
- package/dist/timecampus/components/LoadingSkeleton.js.map +1 -0
- package/dist/timecampus/components/Modal.d.ts +14 -0
- package/dist/timecampus/components/Modal.d.ts.map +1 -0
- package/dist/timecampus/components/PageLayout.d.ts +12 -0
- package/dist/timecampus/components/PageLayout.d.ts.map +1 -0
- package/dist/timecampus/components/PageLayout.js +23 -0
- package/dist/timecampus/components/PageLayout.js.map +1 -0
- package/dist/timecampus/components/StatCard.d.ts +17 -0
- package/dist/timecampus/components/StatCard.d.ts.map +1 -0
- package/dist/timecampus/components/StatCard.js +48 -0
- package/dist/timecampus/components/StatCard.js.map +1 -0
- package/dist/timecampus/components/StatusBadge.d.ts +16 -0
- package/dist/timecampus/components/StatusBadge.d.ts.map +1 -0
- package/dist/timecampus/components/Toast.d.ts +28 -0
- package/dist/timecampus/components/Toast.d.ts.map +1 -0
- package/dist/timecampus/components/index.d.ts +14 -0
- package/dist/timecampus/components/index.d.ts.map +1 -0
- package/dist/timecampus/hooks/index.d.ts +7 -0
- package/dist/timecampus/hooks/index.d.ts.map +1 -0
- package/dist/timecampus/hooks/useToast.d.ts +17 -0
- package/dist/timecampus/hooks/useToast.d.ts.map +1 -0
- package/dist/timecampus/index.d.ts +10 -0
- package/dist/timecampus/index.d.ts.map +1 -0
- package/dist/timecampus/index.js +4 -0
- package/dist/timecampus/pages/HomePage.d.ts +4 -0
- package/dist/timecampus/pages/HomePage.d.ts.map +1 -0
- package/dist/timecampus/pages/HomePage.js +239 -0
- package/dist/timecampus/pages/HomePage.js.map +1 -0
- package/dist/timecampus/pages/applets/AppletStorePage.d.ts +2 -0
- package/dist/timecampus/pages/applets/AppletStorePage.d.ts.map +1 -0
- package/dist/timecampus/pages/applets/AppletStorePage.js +77 -0
- package/dist/timecampus/pages/applets/AppletStorePage.js.map +1 -0
- package/dist/timecampus/pages/applets/InstalledAppletsPage.d.ts +2 -0
- package/dist/timecampus/pages/applets/InstalledAppletsPage.d.ts.map +1 -0
- package/dist/timecampus/pages/applets/InstalledAppletsPage.js +83 -0
- package/dist/timecampus/pages/applets/InstalledAppletsPage.js.map +1 -0
- package/dist/timecampus/pages/application-usage/ApplicationUsagePage.d.ts +2 -0
- package/dist/timecampus/pages/application-usage/ApplicationUsagePage.d.ts.map +1 -0
- package/dist/timecampus/pages/application-usage/ApplicationUsagePage.js +118 -0
- package/dist/timecampus/pages/application-usage/ApplicationUsagePage.js.map +1 -0
- package/dist/timecampus/pages/application-usage/ApplicationUsageSettingsPage.d.ts +2 -0
- package/dist/timecampus/pages/application-usage/ApplicationUsageSettingsPage.d.ts.map +1 -0
- package/dist/timecampus/pages/application-usage/ApplicationUsageSettingsPage.js +129 -0
- package/dist/timecampus/pages/application-usage/ApplicationUsageSettingsPage.js.map +1 -0
- package/dist/timecampus/pages/channels/ChannelsPage.d.ts +2 -0
- package/dist/timecampus/pages/channels/ChannelsPage.d.ts.map +1 -0
- package/dist/timecampus/pages/channels/ChannelsPage.js +64 -0
- package/dist/timecampus/pages/channels/ChannelsPage.js.map +1 -0
- package/dist/timecampus/pages/client-portal/ClientPortalPage.d.ts +2 -0
- package/dist/timecampus/pages/client-portal/ClientPortalPage.d.ts.map +1 -0
- package/dist/timecampus/pages/client-portal/ClientPortalPage.js +108 -0
- package/dist/timecampus/pages/client-portal/ClientPortalPage.js.map +1 -0
- package/dist/timecampus/pages/dashboard/AnalyticsPage.d.ts +2 -0
- package/dist/timecampus/pages/dashboard/AnalyticsPage.d.ts.map +1 -0
- package/dist/timecampus/pages/dashboard/AnalyticsPage.js +91 -0
- package/dist/timecampus/pages/dashboard/AnalyticsPage.js.map +1 -0
- package/dist/timecampus/pages/dashboard/ReportsPage.d.ts +2 -0
- package/dist/timecampus/pages/dashboard/ReportsPage.d.ts.map +1 -0
- package/dist/timecampus/pages/dashboard/ReportsPage.js +102 -0
- package/dist/timecampus/pages/dashboard/ReportsPage.js.map +1 -0
- package/dist/timecampus/pages/email-tracking/EmailAnalyticsPage.d.ts +2 -0
- package/dist/timecampus/pages/email-tracking/EmailAnalyticsPage.d.ts.map +1 -0
- package/dist/timecampus/pages/email-tracking/EmailAnalyticsPage.js +73 -0
- package/dist/timecampus/pages/email-tracking/EmailAnalyticsPage.js.map +1 -0
- package/dist/timecampus/pages/email-tracking/EmailSettingsPage.d.ts +2 -0
- package/dist/timecampus/pages/email-tracking/EmailSettingsPage.d.ts.map +1 -0
- package/dist/timecampus/pages/email-tracking/EmailSettingsPage.js +138 -0
- package/dist/timecampus/pages/email-tracking/EmailSettingsPage.js.map +1 -0
- package/dist/timecampus/pages/email-tracking/EmailTrackingPage.d.ts +2 -0
- package/dist/timecampus/pages/email-tracking/EmailTrackingPage.d.ts.map +1 -0
- package/dist/timecampus/pages/email-tracking/EmailTrackingPage.js +71 -0
- package/dist/timecampus/pages/email-tracking/EmailTrackingPage.js.map +1 -0
- package/dist/timecampus/pages/expense-tracking/ExpenseTrackingPage.d.ts +2 -0
- package/dist/timecampus/pages/expense-tracking/ExpenseTrackingPage.d.ts.map +1 -0
- package/dist/timecampus/pages/expense-tracking/ExpenseTrackingPage.js +102 -0
- package/dist/timecampus/pages/expense-tracking/ExpenseTrackingPage.js.map +1 -0
- package/dist/timecampus/pages/focus-score/FocusScorePage.d.ts +2 -0
- package/dist/timecampus/pages/focus-score/FocusScorePage.d.ts.map +1 -0
- package/dist/timecampus/pages/focus-score/FocusScorePage.js +131 -0
- package/dist/timecampus/pages/focus-score/FocusScorePage.js.map +1 -0
- package/dist/timecampus/pages/focus-score/FocusScoreSettingsPage.d.ts +2 -0
- package/dist/timecampus/pages/focus-score/FocusScoreSettingsPage.d.ts.map +1 -0
- package/dist/timecampus/pages/focus-score/FocusScoreSettingsPage.js +115 -0
- package/dist/timecampus/pages/focus-score/FocusScoreSettingsPage.js.map +1 -0
- package/dist/timecampus/pages/geofencing/GeofencingPage.d.ts +2 -0
- package/dist/timecampus/pages/geofencing/GeofencingPage.d.ts.map +1 -0
- package/dist/timecampus/pages/geofencing/GeofencingPage.js +70 -0
- package/dist/timecampus/pages/geofencing/GeofencingPage.js.map +1 -0
- package/dist/timecampus/pages/geofencing/GeofencingSettingsPage.d.ts +2 -0
- package/dist/timecampus/pages/geofencing/GeofencingSettingsPage.d.ts.map +1 -0
- package/dist/timecampus/pages/geofencing/GeofencingSettingsPage.js +106 -0
- package/dist/timecampus/pages/geofencing/GeofencingSettingsPage.js.map +1 -0
- package/dist/timecampus/pages/industry-solutions/IndustrySolutionsPage.d.ts +2 -0
- package/dist/timecampus/pages/industry-solutions/IndustrySolutionsPage.d.ts.map +1 -0
- package/dist/timecampus/pages/industry-solutions/IndustrySolutionsPage.js +77 -0
- package/dist/timecampus/pages/industry-solutions/IndustrySolutionsPage.js.map +1 -0
- package/dist/timecampus/pages/location-tracking/LocationPrivacySettingsPage.d.ts +2 -0
- package/dist/timecampus/pages/location-tracking/LocationPrivacySettingsPage.d.ts.map +1 -0
- package/dist/timecampus/pages/location-tracking/LocationPrivacySettingsPage.js +115 -0
- package/dist/timecampus/pages/location-tracking/LocationPrivacySettingsPage.js.map +1 -0
- package/dist/timecampus/pages/location-tracking/LocationTrackingPage.d.ts +2 -0
- package/dist/timecampus/pages/location-tracking/LocationTrackingPage.d.ts.map +1 -0
- package/dist/timecampus/pages/location-tracking/LocationTrackingPage.js +97 -0
- package/dist/timecampus/pages/location-tracking/LocationTrackingPage.js.map +1 -0
- package/dist/timecampus/pages/meetings/MeetingAnalyticsPage.d.ts +2 -0
- package/dist/timecampus/pages/meetings/MeetingAnalyticsPage.d.ts.map +1 -0
- package/dist/timecampus/pages/meetings/MeetingAnalyticsPage.js +89 -0
- package/dist/timecampus/pages/meetings/MeetingAnalyticsPage.js.map +1 -0
- package/dist/timecampus/pages/meetings/MeetingCreatePage.d.ts +2 -0
- package/dist/timecampus/pages/meetings/MeetingCreatePage.d.ts.map +1 -0
- package/dist/timecampus/pages/meetings/MeetingCreatePage.js +101 -0
- package/dist/timecampus/pages/meetings/MeetingCreatePage.js.map +1 -0
- package/dist/timecampus/pages/meetings/MeetingDetailPage.d.ts +2 -0
- package/dist/timecampus/pages/meetings/MeetingDetailPage.d.ts.map +1 -0
- package/dist/timecampus/pages/meetings/MeetingDetailPage.js +123 -0
- package/dist/timecampus/pages/meetings/MeetingDetailPage.js.map +1 -0
- package/dist/timecampus/pages/meetings/MeetingsPage.d.ts +2 -0
- package/dist/timecampus/pages/meetings/MeetingsPage.d.ts.map +1 -0
- package/dist/timecampus/pages/meetings/MeetingsPage.js +90 -0
- package/dist/timecampus/pages/meetings/MeetingsPage.js.map +1 -0
- package/dist/timecampus/pages/pomodoro/PomodoroAnalyticsPage.d.ts +2 -0
- package/dist/timecampus/pages/pomodoro/PomodoroAnalyticsPage.d.ts.map +1 -0
- package/dist/timecampus/pages/pomodoro/PomodoroAnalyticsPage.js +113 -0
- package/dist/timecampus/pages/pomodoro/PomodoroAnalyticsPage.js.map +1 -0
- package/dist/timecampus/pages/pomodoro/PomodoroPage.d.ts +2 -0
- package/dist/timecampus/pages/pomodoro/PomodoroPage.d.ts.map +1 -0
- package/dist/timecampus/pages/pomodoro/PomodoroPage.js +160 -0
- package/dist/timecampus/pages/pomodoro/PomodoroPage.js.map +1 -0
- package/dist/timecampus/pages/pomodoro/PomodoroSettingsPage.d.ts +2 -0
- package/dist/timecampus/pages/pomodoro/PomodoroSettingsPage.d.ts.map +1 -0
- package/dist/timecampus/pages/pomodoro/PomodoroSettingsPage.js +176 -0
- package/dist/timecampus/pages/pomodoro/PomodoroSettingsPage.js.map +1 -0
- package/dist/timecampus/pages/projects/ProjectCreatePage.d.ts +2 -0
- package/dist/timecampus/pages/projects/ProjectCreatePage.d.ts.map +1 -0
- package/dist/timecampus/pages/projects/ProjectCreatePage.js +104 -0
- package/dist/timecampus/pages/projects/ProjectCreatePage.js.map +1 -0
- package/dist/timecampus/pages/projects/ProjectDetailPage.d.ts +2 -0
- package/dist/timecampus/pages/projects/ProjectDetailPage.d.ts.map +1 -0
- package/dist/timecampus/pages/projects/ProjectDetailPage.js +91 -0
- package/dist/timecampus/pages/projects/ProjectDetailPage.js.map +1 -0
- package/dist/timecampus/pages/projects/ProjectsPage.d.ts +2 -0
- package/dist/timecampus/pages/projects/ProjectsPage.d.ts.map +1 -0
- package/dist/timecampus/pages/projects/ProjectsPage.js +95 -0
- package/dist/timecampus/pages/projects/ProjectsPage.js.map +1 -0
- package/dist/timecampus/pages/projects/TasksPage.d.ts +2 -0
- package/dist/timecampus/pages/projects/TasksPage.d.ts.map +1 -0
- package/dist/timecampus/pages/projects/TasksPage.js +73 -0
- package/dist/timecampus/pages/projects/TasksPage.js.map +1 -0
- package/dist/timecampus/pages/resource-planning/ResourcePlanningPage.d.ts +2 -0
- package/dist/timecampus/pages/resource-planning/ResourcePlanningPage.d.ts.map +1 -0
- package/dist/timecampus/pages/resource-planning/ResourcePlanningPage.js +129 -0
- package/dist/timecampus/pages/resource-planning/ResourcePlanningPage.js.map +1 -0
- package/dist/timecampus/pages/team/TeamAnalyticsPage.d.ts +2 -0
- package/dist/timecampus/pages/team/TeamAnalyticsPage.d.ts.map +1 -0
- package/dist/timecampus/pages/team/TeamAnalyticsPage.js +78 -0
- package/dist/timecampus/pages/team/TeamAnalyticsPage.js.map +1 -0
- package/dist/timecampus/pages/team/TeamMembersPage.d.ts +2 -0
- package/dist/timecampus/pages/team/TeamMembersPage.d.ts.map +1 -0
- package/dist/timecampus/pages/team/TeamMembersPage.js +97 -0
- package/dist/timecampus/pages/team/TeamMembersPage.js.map +1 -0
- package/dist/timecampus/pages/team/TeamPage.d.ts +2 -0
- package/dist/timecampus/pages/team/TeamPage.d.ts.map +1 -0
- package/dist/timecampus/pages/team/TeamPage.js +82 -0
- package/dist/timecampus/pages/team/TeamPage.js.map +1 -0
- package/dist/timecampus/pages/team-activity/TeamActivityPage.d.ts +2 -0
- package/dist/timecampus/pages/team-activity/TeamActivityPage.d.ts.map +1 -0
- package/dist/timecampus/pages/team-activity/TeamActivityPage.js +107 -0
- package/dist/timecampus/pages/team-activity/TeamActivityPage.js.map +1 -0
- package/dist/timecampus/pages/team-activity/TeamActivitySettingsPage.d.ts +2 -0
- package/dist/timecampus/pages/team-activity/TeamActivitySettingsPage.d.ts.map +1 -0
- package/dist/timecampus/pages/team-activity/TeamActivitySettingsPage.js +120 -0
- package/dist/timecampus/pages/team-activity/TeamActivitySettingsPage.js.map +1 -0
- package/dist/timecampus/pages/templates/TemplateApplicationPage.d.ts +2 -0
- package/dist/timecampus/pages/templates/TemplateApplicationPage.d.ts.map +1 -0
- package/dist/timecampus/pages/templates/TemplateApplicationPage.js +84 -0
- package/dist/timecampus/pages/templates/TemplateApplicationPage.js.map +1 -0
- package/dist/timecampus/pages/templates/TemplateDetailPage.d.ts +2 -0
- package/dist/timecampus/pages/templates/TemplateDetailPage.d.ts.map +1 -0
- package/dist/timecampus/pages/templates/TemplateDetailPage.js +98 -0
- package/dist/timecampus/pages/templates/TemplateDetailPage.js.map +1 -0
- package/dist/timecampus/pages/templates/TemplatesPage.d.ts +2 -0
- package/dist/timecampus/pages/templates/TemplatesPage.d.ts.map +1 -0
- package/dist/timecampus/pages/templates/TemplatesPage.js +76 -0
- package/dist/timecampus/pages/templates/TemplatesPage.js.map +1 -0
- package/dist/timecampus/pages/time/TimeEntriesPage.d.ts +2 -0
- package/dist/timecampus/pages/time/TimeEntriesPage.d.ts.map +1 -0
- package/dist/timecampus/pages/time/TimeEntriesPage.js +117 -0
- package/dist/timecampus/pages/time/TimeEntriesPage.js.map +1 -0
- package/dist/timecampus/pages/time/TimeTrackingPage.d.ts +2 -0
- package/dist/timecampus/pages/time/TimeTrackingPage.d.ts.map +1 -0
- package/dist/timecampus/pages/time/TimeTrackingPage.js +112 -0
- package/dist/timecampus/pages/time/TimeTrackingPage.js.map +1 -0
- package/dist/timecampus/pages/time/TimerPage.d.ts +2 -0
- package/dist/timecampus/pages/time/TimerPage.d.ts.map +1 -0
- package/dist/timecampus/pages/time/TimerPage.js +80 -0
- package/dist/timecampus/pages/time/TimerPage.js.map +1 -0
- package/dist/timecampus/pages/time-approval/TimeApprovalPage.d.ts +2 -0
- package/dist/timecampus/pages/time-approval/TimeApprovalPage.d.ts.map +1 -0
- package/dist/timecampus/pages/time-approval/TimeApprovalPage.js +130 -0
- package/dist/timecampus/pages/time-approval/TimeApprovalPage.js.map +1 -0
- package/dist/timecampus/pages/widgets/WidgetDetailPage.d.ts +2 -0
- package/dist/timecampus/pages/widgets/WidgetDetailPage.d.ts.map +1 -0
- package/dist/timecampus/pages/widgets/WidgetDetailPage.js +96 -0
- package/dist/timecampus/pages/widgets/WidgetDetailPage.js.map +1 -0
- package/dist/timecampus/pages/widgets/WidgetsPage.d.ts +2 -0
- package/dist/timecampus/pages/widgets/WidgetsPage.d.ts.map +1 -0
- package/dist/timecampus/pages/widgets/WidgetsPage.js +77 -0
- package/dist/timecampus/pages/widgets/WidgetsPage.js.map +1 -0
- package/dist/timecampus/pages/work-patterns/WorkPatternsPage.d.ts +2 -0
- package/dist/timecampus/pages/work-patterns/WorkPatternsPage.d.ts.map +1 -0
- package/dist/timecampus/pages/work-patterns/WorkPatternsPage.js +95 -0
- package/dist/timecampus/pages/work-patterns/WorkPatternsPage.js.map +1 -0
- package/dist/timecampus/pages/work-patterns/WorkPatternsSettingsPage.d.ts +2 -0
- package/dist/timecampus/pages/work-patterns/WorkPatternsSettingsPage.d.ts.map +1 -0
- package/dist/timecampus/pages/work-patterns/WorkPatternsSettingsPage.js +129 -0
- package/dist/timecampus/pages/work-patterns/WorkPatternsSettingsPage.js.map +1 -0
- package/dist/timecampus/pages/workflows/WorkflowsPage.d.ts +2 -0
- package/dist/timecampus/pages/workflows/WorkflowsPage.d.ts.map +1 -0
- package/dist/timecampus/pages/workflows/WorkflowsPage.js +80 -0
- package/dist/timecampus/pages/workflows/WorkflowsPage.js.map +1 -0
- package/dist/timecampus/providers/TimeCampusProvider.d.ts +29 -0
- package/dist/timecampus/providers/TimeCampusProvider.d.ts.map +1 -0
- package/dist/timecampus/providers/TimeCampusProvider.js +92 -0
- package/dist/timecampus/providers/TimeCampusProvider.js.map +1 -0
- package/dist/timecampus/store/timecampusStore.d.ts +71 -0
- package/dist/timecampus/store/timecampusStore.d.ts.map +1 -0
- package/dist/timecampus/store/timecampusStore.js +33 -0
- package/dist/timecampus/store/timecampusStore.js.map +1 -0
- package/dist/timecampus/types/index.d.ts +615 -0
- package/dist/timecampus/types/index.d.ts.map +1 -0
- package/dist/timecampus/utils/helpers.d.ts +19 -0
- package/dist/timecampus/utils/helpers.d.ts.map +1 -0
- package/dist/timecampus/utils/helpers.js +73 -0
- package/dist/timecampus/utils/helpers.js.map +1 -0
- package/dist/timecampus/utils/index.d.ts +2 -0
- package/dist/timecampus/utils/index.d.ts.map +1 -0
- package/package.json +110 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useToast.d.ts","sourceRoot":"","sources":["../../../src/timecampus/hooks/useToast.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,QAAQ;;sBAGe,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;sBAUjB,MAAM;qBAKjC,MAAM,YAAY,MAAM;mBAKxB,MAAM,YAAY,MAAM;qBAKxB,MAAM,YAAY,MAAM;kBAKxB,MAAM,YAAY,MAAM;EAMnC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TimeCampus Microfrontend - Module Entry Point
|
|
3
|
+
* @module @burdenoff/microfe-timecampus
|
|
4
|
+
*/
|
|
5
|
+
export { TimeCampusRoot } from './TimeCampusRoot';
|
|
6
|
+
export type { TimeCampusRootProps, NavItem, FooterItem } from './types';
|
|
7
|
+
export { useTimeCampus, useTimeCampusNavigate, } from './providers/TimeCampusProvider';
|
|
8
|
+
export { useTimeCampusStore } from './store/timecampusStore';
|
|
9
|
+
export * from '../generated/wspace-operations';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/timecampus/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,YAAY,EAAE,mBAAmB,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGxE,OAAO,EACL,aAAa,EACb,qBAAqB,GACtB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAG7D,cAAc,gCAAgC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HomePage.d.ts","sourceRoot":"","sources":["../../../src/timecampus/pages/HomePage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAwBhC,eAAO,MAAM,QAAQ,EAAE,EAyUtB,CAAC"}
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
import { cn as e, formatHours as t, formatTimerDuration as n } from "../utils/helpers.js";
|
|
2
|
+
import { PageLayout as r } from "../components/PageLayout.js";
|
|
3
|
+
import { StatCard as i } from "../components/StatCard.js";
|
|
4
|
+
import { LoadingSkeleton as a } from "../components/LoadingSkeleton.js";
|
|
5
|
+
import { useTimeCampusStore as o } from "../store/timecampusStore.js";
|
|
6
|
+
import { useGetTimeEntryStatsQuery as s, useListTimeEntriesQuery as c } from "../../generated/wspace-operations.js";
|
|
7
|
+
import { ArrowRight as l, BarChart3 as u, CheckCircle as d, Clock as f, FolderOpen as p, Play as m, Timer as h, TrendingUp as g, Users as _ } from "lucide-react";
|
|
8
|
+
import { Fragment as v, jsx as y, jsxs as b } from "react/jsx-runtime";
|
|
9
|
+
import { useI18n as x } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
10
|
+
//#region src/timecampus/pages/HomePage.tsx
|
|
11
|
+
var S = () => {
|
|
12
|
+
let { t: S } = x(), C = (e, t) => {
|
|
13
|
+
let n = S(e);
|
|
14
|
+
return n === e ? t : n;
|
|
15
|
+
}, { activeTimer: w, startTimer: T, stopTimer: E } = o(), { data: D, loading: O } = s(), { data: k, loading: A } = c({ variables: { limit: 4 } }), j = D?.timeEntryStats, M = k?.timeEntries?.items ?? [];
|
|
16
|
+
return O && A ? /* @__PURE__ */ y(r, {
|
|
17
|
+
title: C("timecampus.home.title", "Dashboard"),
|
|
18
|
+
description: C("timecampus.home.description", "Overview of your time tracking and productivity"),
|
|
19
|
+
children: /* @__PURE__ */ y(a, {
|
|
20
|
+
variant: "card",
|
|
21
|
+
count: 4
|
|
22
|
+
})
|
|
23
|
+
}) : /* @__PURE__ */ b(r, {
|
|
24
|
+
title: C("timecampus.home.title", "Dashboard"),
|
|
25
|
+
description: C("timecampus.home.description", "Overview of your time tracking and productivity"),
|
|
26
|
+
actions: /* @__PURE__ */ y("button", {
|
|
27
|
+
onClick: () => w ? E() : T(),
|
|
28
|
+
className: e("inline-flex items-center gap-2 rounded-md px-4 py-2 text-sm font-medium transition-colors", w ? "bg-red-500 text-white hover:bg-red-600" : "bg-primary text-primary-foreground hover:bg-primary/90"),
|
|
29
|
+
children: w ? /* @__PURE__ */ b(v, { children: [
|
|
30
|
+
/* @__PURE__ */ y(h, { className: "h-4 w-4" }),
|
|
31
|
+
n(w.seconds),
|
|
32
|
+
" -",
|
|
33
|
+
" ",
|
|
34
|
+
C("timecampus.home.actions.stop", "Stop")
|
|
35
|
+
] }) : /* @__PURE__ */ b(v, { children: [/* @__PURE__ */ y(m, { className: "h-4 w-4" }), C("timecampus.home.actions.startTimer", "Start Timer")] })
|
|
36
|
+
}),
|
|
37
|
+
children: [
|
|
38
|
+
/* @__PURE__ */ b("div", {
|
|
39
|
+
className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4",
|
|
40
|
+
children: [
|
|
41
|
+
/* @__PURE__ */ y(i, {
|
|
42
|
+
title: C("timecampus.home.stats.today", "Today"),
|
|
43
|
+
value: t(j?.totalHours ?? 0),
|
|
44
|
+
icon: /* @__PURE__ */ y(f, { className: "h-5 w-5" }),
|
|
45
|
+
trend: {
|
|
46
|
+
value: 12.5,
|
|
47
|
+
label: C("timecampus.home.stats.vsYesterday", "vs yesterday")
|
|
48
|
+
}
|
|
49
|
+
}),
|
|
50
|
+
/* @__PURE__ */ y(i, {
|
|
51
|
+
title: C("timecampus.home.stats.billable", "Billable"),
|
|
52
|
+
value: t(j?.billableHours ?? 0),
|
|
53
|
+
icon: /* @__PURE__ */ y(g, { className: "h-5 w-5" }),
|
|
54
|
+
description: `${j?.totalEntries ?? 0} ${C("timecampus.home.stats.entries", "entries")}`
|
|
55
|
+
}),
|
|
56
|
+
/* @__PURE__ */ y(i, {
|
|
57
|
+
title: C("timecampus.home.stats.activeTimers", "Active Timers"),
|
|
58
|
+
value: j?.activeTimers ?? 0,
|
|
59
|
+
icon: /* @__PURE__ */ y(p, { className: "h-5 w-5" }),
|
|
60
|
+
description: C("timecampus.home.stats.currentlyRunning", "Currently running")
|
|
61
|
+
}),
|
|
62
|
+
/* @__PURE__ */ y(i, {
|
|
63
|
+
title: C("timecampus.home.stats.totalEntries", "Entries"),
|
|
64
|
+
value: j?.totalEntries ?? 0,
|
|
65
|
+
icon: /* @__PURE__ */ y(u, { className: "h-5 w-5" }),
|
|
66
|
+
description: C("timecampus.home.stats.totalEntriesDescription", "Total time entries"),
|
|
67
|
+
iconBgColor: "bg-emerald-100 text-emerald-600 dark:bg-emerald-900/30 dark:text-emerald-400"
|
|
68
|
+
})
|
|
69
|
+
]
|
|
70
|
+
}),
|
|
71
|
+
/* @__PURE__ */ b("div", {
|
|
72
|
+
className: "grid grid-cols-1 gap-6 lg:grid-cols-3",
|
|
73
|
+
children: [/* @__PURE__ */ b("div", {
|
|
74
|
+
className: "lg:col-span-2 rounded-xl border border-border bg-card p-6",
|
|
75
|
+
children: [/* @__PURE__ */ b("div", {
|
|
76
|
+
className: "mb-4 flex items-center justify-between",
|
|
77
|
+
children: [/* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("h3", {
|
|
78
|
+
className: "text-sm font-semibold text-foreground",
|
|
79
|
+
children: C("timecampus.home.recentEntries.title", "Recent Time Entries")
|
|
80
|
+
}), /* @__PURE__ */ y("p", {
|
|
81
|
+
className: "text-xs text-muted-foreground",
|
|
82
|
+
children: C("timecampus.home.recentEntries.description", "Your latest tracked activities")
|
|
83
|
+
})] }), /* @__PURE__ */ b("button", {
|
|
84
|
+
className: "flex items-center gap-1 text-xs text-primary hover:underline",
|
|
85
|
+
children: [
|
|
86
|
+
C("timecampus.home.recentEntries.viewAll", "View all"),
|
|
87
|
+
" ",
|
|
88
|
+
/* @__PURE__ */ y(l, { className: "h-3 w-3" })
|
|
89
|
+
]
|
|
90
|
+
})]
|
|
91
|
+
}), A ? /* @__PURE__ */ y(a, {
|
|
92
|
+
variant: "list",
|
|
93
|
+
count: 4
|
|
94
|
+
}) : /* @__PURE__ */ b("div", {
|
|
95
|
+
className: "flex flex-col gap-3",
|
|
96
|
+
children: [M.map((e) => /* @__PURE__ */ b("div", {
|
|
97
|
+
className: "flex items-center justify-between rounded-lg border border-border p-3 transition-colors hover:bg-muted/50",
|
|
98
|
+
children: [/* @__PURE__ */ b("div", {
|
|
99
|
+
className: "min-w-0 flex-1",
|
|
100
|
+
children: [/* @__PURE__ */ y("p", {
|
|
101
|
+
className: "text-sm font-medium text-foreground",
|
|
102
|
+
children: e.project?.name ?? C("timecampus.home.recentEntries.noProject", "No Project")
|
|
103
|
+
}), /* @__PURE__ */ y("p", {
|
|
104
|
+
className: "text-xs text-muted-foreground",
|
|
105
|
+
children: e.description ?? C("timecampus.home.recentEntries.noDescription", "No description")
|
|
106
|
+
})]
|
|
107
|
+
}), /* @__PURE__ */ b("div", {
|
|
108
|
+
className: "ml-4 text-right",
|
|
109
|
+
children: [/* @__PURE__ */ y("p", {
|
|
110
|
+
className: "text-sm font-mono font-medium text-foreground",
|
|
111
|
+
children: t((e.duration ?? 0) / 3600)
|
|
112
|
+
}), /* @__PURE__ */ y("span", {
|
|
113
|
+
className: "inline-flex items-center rounded-full bg-emerald-100 px-2 py-0.5 text-xs font-medium text-emerald-800 dark:bg-emerald-900/30 dark:text-emerald-400",
|
|
114
|
+
children: e.isRunning ? C("timecampus.home.recentEntries.status.running", "running") : C("timecampus.home.recentEntries.status.completed", "completed")
|
|
115
|
+
})]
|
|
116
|
+
})]
|
|
117
|
+
}, e.id)), M.length === 0 && /* @__PURE__ */ y("p", {
|
|
118
|
+
className: "text-center text-sm text-muted-foreground py-4",
|
|
119
|
+
children: C("timecampus.home.recentEntries.empty", "No time entries yet")
|
|
120
|
+
})]
|
|
121
|
+
})]
|
|
122
|
+
}), /* @__PURE__ */ b("div", {
|
|
123
|
+
className: "rounded-xl border border-border bg-card p-6",
|
|
124
|
+
children: [/* @__PURE__ */ b("div", {
|
|
125
|
+
className: "mb-4",
|
|
126
|
+
children: [/* @__PURE__ */ y("h3", {
|
|
127
|
+
className: "text-sm font-semibold text-foreground",
|
|
128
|
+
children: C("timecampus.home.summary.title", "Quick Summary")
|
|
129
|
+
}), /* @__PURE__ */ y("p", {
|
|
130
|
+
className: "text-xs text-muted-foreground",
|
|
131
|
+
children: C("timecampus.home.summary.description", "Time tracking overview")
|
|
132
|
+
})]
|
|
133
|
+
}), /* @__PURE__ */ b("div", {
|
|
134
|
+
className: "flex flex-col gap-4",
|
|
135
|
+
children: [
|
|
136
|
+
/* @__PURE__ */ b("div", {
|
|
137
|
+
className: "flex items-center justify-between rounded-lg border border-border p-3",
|
|
138
|
+
children: [/* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("p", {
|
|
139
|
+
className: "text-xs font-medium text-muted-foreground",
|
|
140
|
+
children: C("timecampus.home.summary.totalHours", "Total Hours")
|
|
141
|
+
}), /* @__PURE__ */ y("p", {
|
|
142
|
+
className: "mt-1 text-xl font-bold text-foreground",
|
|
143
|
+
children: t(j?.totalHours ?? 0)
|
|
144
|
+
})] }), /* @__PURE__ */ y(f, { className: "h-5 w-5 text-muted-foreground" })]
|
|
145
|
+
}),
|
|
146
|
+
/* @__PURE__ */ b("div", {
|
|
147
|
+
className: "flex items-center justify-between rounded-lg border border-border p-3",
|
|
148
|
+
children: [/* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("p", {
|
|
149
|
+
className: "text-xs font-medium text-muted-foreground",
|
|
150
|
+
children: C("timecampus.home.summary.billableHours", "Billable Hours")
|
|
151
|
+
}), /* @__PURE__ */ y("p", {
|
|
152
|
+
className: "mt-1 text-xl font-bold text-foreground",
|
|
153
|
+
children: t(j?.billableHours ?? 0)
|
|
154
|
+
})] }), /* @__PURE__ */ y(g, { className: "h-5 w-5 text-muted-foreground" })]
|
|
155
|
+
}),
|
|
156
|
+
/* @__PURE__ */ b("div", {
|
|
157
|
+
className: "flex items-center justify-between rounded-lg border border-border p-3",
|
|
158
|
+
children: [/* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("p", {
|
|
159
|
+
className: "text-xs font-medium text-muted-foreground",
|
|
160
|
+
children: C("timecampus.home.summary.activeTimers", "Active Timers")
|
|
161
|
+
}), /* @__PURE__ */ y("p", {
|
|
162
|
+
className: "mt-1 text-xl font-bold text-foreground",
|
|
163
|
+
children: j?.activeTimers ?? 0
|
|
164
|
+
})] }), /* @__PURE__ */ y(_, { className: "h-5 w-5 text-muted-foreground" })]
|
|
165
|
+
})
|
|
166
|
+
]
|
|
167
|
+
})]
|
|
168
|
+
})]
|
|
169
|
+
}),
|
|
170
|
+
/* @__PURE__ */ b("div", {
|
|
171
|
+
className: "rounded-xl border border-border bg-card p-6",
|
|
172
|
+
children: [/* @__PURE__ */ b("div", {
|
|
173
|
+
className: "mb-4",
|
|
174
|
+
children: [/* @__PURE__ */ y("h3", {
|
|
175
|
+
className: "text-sm font-semibold text-foreground",
|
|
176
|
+
children: C("timecampus.home.quickActions.title", "Quick Actions")
|
|
177
|
+
}), /* @__PURE__ */ y("p", {
|
|
178
|
+
className: "text-xs text-muted-foreground",
|
|
179
|
+
children: C("timecampus.home.quickActions.description", "Frequently used features")
|
|
180
|
+
})]
|
|
181
|
+
}), /* @__PURE__ */ y("div", {
|
|
182
|
+
className: "grid grid-cols-2 gap-3 sm:grid-cols-3 lg:grid-cols-6",
|
|
183
|
+
children: [
|
|
184
|
+
{
|
|
185
|
+
label: C("timecampus.home.quickActions.startTimer.label", "Start Timer"),
|
|
186
|
+
icon: m,
|
|
187
|
+
description: C("timecampus.home.quickActions.startTimer.description", "Track your time")
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
label: C("timecampus.home.quickActions.viewProjects.label", "View Projects"),
|
|
191
|
+
icon: p,
|
|
192
|
+
description: C("timecampus.home.quickActions.viewProjects.description", "Manage projects")
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
label: C("timecampus.home.quickActions.timeEntries.label", "Time Entries"),
|
|
196
|
+
icon: f,
|
|
197
|
+
description: C("timecampus.home.quickActions.timeEntries.description", "View all entries")
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
label: C("timecampus.home.quickActions.teamActivity.label", "Team Activity"),
|
|
201
|
+
icon: _,
|
|
202
|
+
description: C("timecampus.home.quickActions.teamActivity.description", "See team status")
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
label: C("timecampus.home.quickActions.reports.label", "Reports"),
|
|
206
|
+
icon: u,
|
|
207
|
+
description: C("timecampus.home.quickActions.reports.description", "Generate reports")
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
label: C("timecampus.home.quickActions.approvals.label", "Approvals"),
|
|
211
|
+
icon: d,
|
|
212
|
+
description: C("timecampus.home.quickActions.approvals.description", "Review timesheets")
|
|
213
|
+
}
|
|
214
|
+
].map(({ label: e, icon: t, description: n }) => /* @__PURE__ */ b("button", {
|
|
215
|
+
className: "flex flex-col items-center gap-2 rounded-lg border border-border bg-background p-4 text-center transition-colors hover:bg-muted/50",
|
|
216
|
+
children: [
|
|
217
|
+
/* @__PURE__ */ y("div", {
|
|
218
|
+
className: "rounded-full bg-primary/10 p-3",
|
|
219
|
+
children: /* @__PURE__ */ y(t, { className: "h-5 w-5 text-primary" })
|
|
220
|
+
}),
|
|
221
|
+
/* @__PURE__ */ y("span", {
|
|
222
|
+
className: "text-sm font-medium text-foreground",
|
|
223
|
+
children: e
|
|
224
|
+
}),
|
|
225
|
+
/* @__PURE__ */ y("span", {
|
|
226
|
+
className: "text-xs text-muted-foreground",
|
|
227
|
+
children: n
|
|
228
|
+
})
|
|
229
|
+
]
|
|
230
|
+
}, e))
|
|
231
|
+
})]
|
|
232
|
+
})
|
|
233
|
+
]
|
|
234
|
+
});
|
|
235
|
+
};
|
|
236
|
+
//#endregion
|
|
237
|
+
export { S as HomePage };
|
|
238
|
+
|
|
239
|
+
//# sourceMappingURL=HomePage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HomePage.js","names":[],"sources":["../../../src/timecampus/pages/HomePage.tsx"],"sourcesContent":["import type { FC } from \"react\";\nimport {\n Clock,\n FolderOpen,\n Users,\n TrendingUp,\n Timer,\n CheckCircle,\n BarChart3,\n Play,\n ArrowRight,\n} from \"lucide-react\";\nimport { PageLayout } from \"../components/PageLayout\";\nimport { StatCard } from \"../components/StatCard\";\nimport { LoadingSkeleton } from \"../components/LoadingSkeleton\";\nimport { cn, formatHours, formatTimerDuration } from \"../utils/helpers\";\nimport { useTimeCampusStore } from \"../store/timecampusStore\";\nimport {\n useGetTimeEntryStatsQuery,\n useListTimeEntriesQuery,\n type TimeEntryFieldsFragment,\n} from \"@/generated/wspace-operations\";\nimport { useI18n } from \"@burdenoff/fe-libs/shared/providers/shell/I18nProvider\";\n\nexport const HomePage: FC = () => {\n const { t: translate } = useI18n();\n const t = (key: string, fallback: string): string => {\n const value = translate(key);\n return value === key ? fallback : value;\n };\n const { activeTimer, startTimer, stopTimer } = useTimeCampusStore();\n\n const { data: statsData, loading: statsLoading } =\n useGetTimeEntryStatsQuery();\n const { data: entriesData, loading: entriesLoading } =\n useListTimeEntriesQuery({\n variables: { limit: 4 },\n });\n\n const stats = statsData?.timeEntryStats;\n const recentEntries = entriesData?.timeEntries?.items ?? [];\n\n if (statsLoading && entriesLoading) {\n return (\n <PageLayout\n title={t(\"timecampus.home.title\", \"Dashboard\")}\n description={t(\n \"timecampus.home.description\",\n \"Overview of your time tracking and productivity\",\n )}\n >\n <LoadingSkeleton variant=\"card\" count={4} />\n </PageLayout>\n );\n }\n\n return (\n <PageLayout\n title={t(\"timecampus.home.title\", \"Dashboard\")}\n description={t(\n \"timecampus.home.description\",\n \"Overview of your time tracking and productivity\",\n )}\n actions={\n <button\n onClick={() => (activeTimer ? stopTimer() : startTimer())}\n className={cn(\n \"inline-flex items-center gap-2 rounded-md px-4 py-2 text-sm font-medium transition-colors\",\n activeTimer\n ? \"bg-red-500 text-white hover:bg-red-600\"\n : \"bg-primary text-primary-foreground hover:bg-primary/90\",\n )}\n >\n {activeTimer ? (\n <>\n <Timer className=\"h-4 w-4\" />\n {formatTimerDuration(activeTimer.seconds)} -{\" \"}\n {t(\"timecampus.home.actions.stop\", \"Stop\")}\n </>\n ) : (\n <>\n <Play className=\"h-4 w-4\" />\n {t(\"timecampus.home.actions.startTimer\", \"Start Timer\")}\n </>\n )}\n </button>\n }\n >\n {/* Stat Cards */}\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\">\n <StatCard\n title={t(\"timecampus.home.stats.today\", \"Today\")}\n value={formatHours(stats?.totalHours ?? 0)}\n icon={<Clock className=\"h-5 w-5\" />}\n trend={{\n value: 12.5,\n label: t(\"timecampus.home.stats.vsYesterday\", \"vs yesterday\"),\n }}\n />\n <StatCard\n title={t(\"timecampus.home.stats.billable\", \"Billable\")}\n value={formatHours(stats?.billableHours ?? 0)}\n icon={<TrendingUp className=\"h-5 w-5\" />}\n description={`${stats?.totalEntries ?? 0} ${t(\"timecampus.home.stats.entries\", \"entries\")}`}\n />\n <StatCard\n title={t(\"timecampus.home.stats.activeTimers\", \"Active Timers\")}\n value={stats?.activeTimers ?? 0}\n icon={<FolderOpen className=\"h-5 w-5\" />}\n description={t(\n \"timecampus.home.stats.currentlyRunning\",\n \"Currently running\",\n )}\n />\n <StatCard\n title={t(\"timecampus.home.stats.totalEntries\", \"Entries\")}\n value={stats?.totalEntries ?? 0}\n icon={<BarChart3 className=\"h-5 w-5\" />}\n description={t(\n \"timecampus.home.stats.totalEntriesDescription\",\n \"Total time entries\",\n )}\n iconBgColor=\"bg-emerald-100 text-emerald-600 dark:bg-emerald-900/30 dark:text-emerald-400\"\n />\n </div>\n\n <div className=\"grid grid-cols-1 gap-6 lg:grid-cols-3\">\n {/* Recent Time Entries */}\n <div className=\"lg:col-span-2 rounded-xl border border-border bg-card p-6\">\n <div className=\"mb-4 flex items-center justify-between\">\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">\n {t(\n \"timecampus.home.recentEntries.title\",\n \"Recent Time Entries\",\n )}\n </h3>\n <p className=\"text-xs text-muted-foreground\">\n {t(\n \"timecampus.home.recentEntries.description\",\n \"Your latest tracked activities\",\n )}\n </p>\n </div>\n <button className=\"flex items-center gap-1 text-xs text-primary hover:underline\">\n {t(\"timecampus.home.recentEntries.viewAll\", \"View all\")}{\" \"}\n <ArrowRight className=\"h-3 w-3\" />\n </button>\n </div>\n {entriesLoading ? (\n <LoadingSkeleton variant=\"list\" count={4} />\n ) : (\n <div className=\"flex flex-col gap-3\">\n {recentEntries.map((entry: TimeEntryFieldsFragment) => (\n <div\n key={entry.id}\n className=\"flex items-center justify-between rounded-lg border border-border p-3 transition-colors hover:bg-muted/50\"\n >\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm font-medium text-foreground\">\n {entry.project?.name ??\n t(\n \"timecampus.home.recentEntries.noProject\",\n \"No Project\",\n )}\n </p>\n <p className=\"text-xs text-muted-foreground\">\n {entry.description ??\n t(\n \"timecampus.home.recentEntries.noDescription\",\n \"No description\",\n )}\n </p>\n </div>\n <div className=\"ml-4 text-right\">\n <p className=\"text-sm font-mono font-medium text-foreground\">\n {formatHours((entry.duration ?? 0) / 3600)}\n </p>\n <span className=\"inline-flex items-center rounded-full bg-emerald-100 px-2 py-0.5 text-xs font-medium text-emerald-800 dark:bg-emerald-900/30 dark:text-emerald-400\">\n {entry.isRunning\n ? t(\n \"timecampus.home.recentEntries.status.running\",\n \"running\",\n )\n : t(\n \"timecampus.home.recentEntries.status.completed\",\n \"completed\",\n )}\n </span>\n </div>\n </div>\n ))}\n {recentEntries.length === 0 && (\n <p className=\"text-center text-sm text-muted-foreground py-4\">\n {t(\n \"timecampus.home.recentEntries.empty\",\n \"No time entries yet\",\n )}\n </p>\n )}\n </div>\n )}\n </div>\n\n {/* Quick Summary */}\n <div className=\"rounded-xl border border-border bg-card p-6\">\n <div className=\"mb-4\">\n <h3 className=\"text-sm font-semibold text-foreground\">\n {t(\"timecampus.home.summary.title\", \"Quick Summary\")}\n </h3>\n <p className=\"text-xs text-muted-foreground\">\n {t(\n \"timecampus.home.summary.description\",\n \"Time tracking overview\",\n )}\n </p>\n </div>\n <div className=\"flex flex-col gap-4\">\n <div className=\"flex items-center justify-between rounded-lg border border-border p-3\">\n <div>\n <p className=\"text-xs font-medium text-muted-foreground\">\n {t(\"timecampus.home.summary.totalHours\", \"Total Hours\")}\n </p>\n <p className=\"mt-1 text-xl font-bold text-foreground\">\n {formatHours(stats?.totalHours ?? 0)}\n </p>\n </div>\n <Clock className=\"h-5 w-5 text-muted-foreground\" />\n </div>\n <div className=\"flex items-center justify-between rounded-lg border border-border p-3\">\n <div>\n <p className=\"text-xs font-medium text-muted-foreground\">\n {t(\"timecampus.home.summary.billableHours\", \"Billable Hours\")}\n </p>\n <p className=\"mt-1 text-xl font-bold text-foreground\">\n {formatHours(stats?.billableHours ?? 0)}\n </p>\n </div>\n <TrendingUp className=\"h-5 w-5 text-muted-foreground\" />\n </div>\n <div className=\"flex items-center justify-between rounded-lg border border-border p-3\">\n <div>\n <p className=\"text-xs font-medium text-muted-foreground\">\n {t(\"timecampus.home.summary.activeTimers\", \"Active Timers\")}\n </p>\n <p className=\"mt-1 text-xl font-bold text-foreground\">\n {stats?.activeTimers ?? 0}\n </p>\n </div>\n <Users className=\"h-5 w-5 text-muted-foreground\" />\n </div>\n </div>\n </div>\n </div>\n\n {/* Quick Actions */}\n <div className=\"rounded-xl border border-border bg-card p-6\">\n <div className=\"mb-4\">\n <h3 className=\"text-sm font-semibold text-foreground\">\n {t(\"timecampus.home.quickActions.title\", \"Quick Actions\")}\n </h3>\n <p className=\"text-xs text-muted-foreground\">\n {t(\n \"timecampus.home.quickActions.description\",\n \"Frequently used features\",\n )}\n </p>\n </div>\n <div className=\"grid grid-cols-2 gap-3 sm:grid-cols-3 lg:grid-cols-6\">\n {[\n {\n label: t(\n \"timecampus.home.quickActions.startTimer.label\",\n \"Start Timer\",\n ),\n icon: Play,\n description: t(\n \"timecampus.home.quickActions.startTimer.description\",\n \"Track your time\",\n ),\n },\n {\n label: t(\n \"timecampus.home.quickActions.viewProjects.label\",\n \"View Projects\",\n ),\n icon: FolderOpen,\n description: t(\n \"timecampus.home.quickActions.viewProjects.description\",\n \"Manage projects\",\n ),\n },\n {\n label: t(\n \"timecampus.home.quickActions.timeEntries.label\",\n \"Time Entries\",\n ),\n icon: Clock,\n description: t(\n \"timecampus.home.quickActions.timeEntries.description\",\n \"View all entries\",\n ),\n },\n {\n label: t(\n \"timecampus.home.quickActions.teamActivity.label\",\n \"Team Activity\",\n ),\n icon: Users,\n description: t(\n \"timecampus.home.quickActions.teamActivity.description\",\n \"See team status\",\n ),\n },\n {\n label: t(\"timecampus.home.quickActions.reports.label\", \"Reports\"),\n icon: BarChart3,\n description: t(\n \"timecampus.home.quickActions.reports.description\",\n \"Generate reports\",\n ),\n },\n {\n label: t(\n \"timecampus.home.quickActions.approvals.label\",\n \"Approvals\",\n ),\n icon: CheckCircle,\n description: t(\n \"timecampus.home.quickActions.approvals.description\",\n \"Review timesheets\",\n ),\n },\n ].map(({ label, icon: Icon, description }) => (\n <button\n key={label}\n className=\"flex flex-col items-center gap-2 rounded-lg border border-border bg-background p-4 text-center transition-colors hover:bg-muted/50\"\n >\n <div className=\"rounded-full bg-primary/10 p-3\">\n <Icon className=\"h-5 w-5 text-primary\" />\n </div>\n <span className=\"text-sm font-medium text-foreground\">\n {label}\n </span>\n <span className=\"text-xs text-muted-foreground\">\n {description}\n </span>\n </button>\n ))}\n </div>\n </div>\n </PageLayout>\n );\n};\n"],"mappings":"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E,kBAAC,MAAD;MAAI,WAAU;gBACX,EAAE,sCAAsC,gBAAgB;MACtD,CAAA,EACL,kBAAC,KAAD;MAAG,WAAU;gBACV,EACC,4CACA,2BACD;MACC,CAAA,CACA;QACN,kBAAC,OAAD;KAAK,WAAU;eACZ;MACC;OACE,OAAO,EACL,iDACA,cACD;OACD,MAAM;OACN,aAAa,EACX,uDACA,kBACD;OACF;MACD;OACE,OAAO,EACL,mDACA,gBACD;OACD,MAAM;OACN,aAAa,EACX,yDACA,kBACD;OACF;MACD;OACE,OAAO,EACL,kDACA,eACD;OACD,MAAM;OACN,aAAa,EACX,wDACA,mBACD;OACF;MACD;OACE,OAAO,EACL,mDACA,gBACD;OACD,MAAM;OACN,aAAa,EACX,yDACA,kBACD;OACF;MACD;OACE,OAAO,EAAE,8CAA8C,UAAU;OACjE,MAAM;OACN,aAAa,EACX,oDACA,mBACD;OACF;MACD;OACE,OAAO,EACL,gDACA,YACD;OACD,MAAM;OACN,aAAa,EACX,sDACA,oBACD;OACF;MACF,CAAC,KAAK,EAAE,UAAO,MAAM,GAAM,qBAC1B,kBAAC,UAAD;MAEE,WAAU;gBAFZ;OAIE,kBAAC,OAAD;QAAK,WAAU;kBACb,kBAAC,GAAD,EAAM,WAAU,wBAAyB,CAAA;QACrC,CAAA;OACN,kBAAC,QAAD;QAAM,WAAU;kBACb;QACI,CAAA;OACP,kBAAC,QAAD;QAAM,WAAU;kBACb;QACI,CAAA;OACA;QAZF,EAYE,CACT;KACE,CAAA,CACF;;GACK"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AppletStorePage.d.ts","sourceRoot":"","sources":["../../../../src/timecampus/pages/applets/AppletStorePage.tsx"],"names":[],"mappings":"AASA,wBAAgB,eAAe,4CAoG9B"}
|
|
@@ -0,0 +1,77 @@
|
|
|
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 } from "../../../generated/wspace-operations.js";
|
|
5
|
+
import { Download as i, Puzzle as a, Star as o } from "lucide-react";
|
|
6
|
+
import { jsx as s, jsxs as c } from "react/jsx-runtime";
|
|
7
|
+
//#region src/timecampus/pages/applets/AppletStorePage.tsx
|
|
8
|
+
function l() {
|
|
9
|
+
let { workspaceId: l = "" } = e(), { data: u, loading: d, error: f } = r({ variables: { scope: "WORKSPACE" } }), p = (u?.configurations ?? []).filter((e) => e.key.startsWith("applet.store."));
|
|
10
|
+
return d ? /* @__PURE__ */ s(t, {
|
|
11
|
+
title: "Applet Store",
|
|
12
|
+
description: "Browse and install applets to extend TimeCampus",
|
|
13
|
+
children: /* @__PURE__ */ s(n, {
|
|
14
|
+
variant: "card",
|
|
15
|
+
count: 6
|
|
16
|
+
})
|
|
17
|
+
}) : f ? /* @__PURE__ */ s(t, {
|
|
18
|
+
title: "Applet Store",
|
|
19
|
+
description: "Browse and install applets to extend TimeCampus",
|
|
20
|
+
children: /* @__PURE__ */ s("div", {
|
|
21
|
+
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",
|
|
22
|
+
children: "Failed to load applet store data. Please try again later."
|
|
23
|
+
})
|
|
24
|
+
}) : /* @__PURE__ */ s(t, {
|
|
25
|
+
title: "Applet Store",
|
|
26
|
+
description: "Browse and install applets to extend TimeCampus",
|
|
27
|
+
children: /* @__PURE__ */ s("div", {
|
|
28
|
+
className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3",
|
|
29
|
+
children: p.length === 0 ? /* @__PURE__ */ s("div", {
|
|
30
|
+
className: "col-span-full p-8 text-center text-sm text-muted-foreground",
|
|
31
|
+
children: "No applets available in the store yet. Store applets are managed as workspace configurations with the \"applet.store.\" key prefix."
|
|
32
|
+
}) : p.map((e) => {
|
|
33
|
+
let t = e.value, n = t.name ?? e.key.replace("applet.store.", ""), r = e.description ?? t.description ?? "";
|
|
34
|
+
t.category;
|
|
35
|
+
let l = t.rating ?? 0, u = t.downloads ?? 0;
|
|
36
|
+
return /* @__PURE__ */ c("div", {
|
|
37
|
+
className: "rounded-xl border border-border bg-card p-5 transition-colors hover:bg-muted/50 cursor-pointer",
|
|
38
|
+
children: [/* @__PURE__ */ c("div", {
|
|
39
|
+
className: "flex items-start gap-3",
|
|
40
|
+
children: [/* @__PURE__ */ s("div", {
|
|
41
|
+
className: "flex h-12 w-12 items-center justify-center rounded-xl bg-primary/10",
|
|
42
|
+
children: /* @__PURE__ */ s(a, { className: "h-6 w-6 text-primary" })
|
|
43
|
+
}), /* @__PURE__ */ c("div", {
|
|
44
|
+
className: "flex-1",
|
|
45
|
+
children: [/* @__PURE__ */ s("p", {
|
|
46
|
+
className: "text-sm font-semibold text-foreground",
|
|
47
|
+
children: n
|
|
48
|
+
}), /* @__PURE__ */ s("p", {
|
|
49
|
+
className: "text-xs text-muted-foreground",
|
|
50
|
+
children: r
|
|
51
|
+
})]
|
|
52
|
+
})]
|
|
53
|
+
}), /* @__PURE__ */ c("div", {
|
|
54
|
+
className: "mt-3 flex items-center justify-between",
|
|
55
|
+
children: [/* @__PURE__ */ c("div", {
|
|
56
|
+
className: "flex items-center gap-3 text-xs text-muted-foreground",
|
|
57
|
+
children: [/* @__PURE__ */ c("div", {
|
|
58
|
+
className: "flex items-center gap-1",
|
|
59
|
+
children: [/* @__PURE__ */ s(o, { className: "h-3 w-3 fill-amber-400 text-amber-400" }), /* @__PURE__ */ s("span", { children: l })]
|
|
60
|
+
}), /* @__PURE__ */ c("div", {
|
|
61
|
+
className: "flex items-center gap-1",
|
|
62
|
+
children: [/* @__PURE__ */ s(i, { className: "h-3 w-3" }), /* @__PURE__ */ s("span", { children: u })]
|
|
63
|
+
})]
|
|
64
|
+
}), /* @__PURE__ */ s("button", {
|
|
65
|
+
className: "rounded-md bg-primary px-3 py-1 text-xs font-medium text-primary-foreground hover:bg-primary/90",
|
|
66
|
+
children: "Install"
|
|
67
|
+
})]
|
|
68
|
+
})]
|
|
69
|
+
}, e.id);
|
|
70
|
+
})
|
|
71
|
+
})
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
//#endregion
|
|
75
|
+
export { l as AppletStorePage };
|
|
76
|
+
|
|
77
|
+
//# sourceMappingURL=AppletStorePage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AppletStorePage.js","names":[],"sources":["../../../../src/timecampus/pages/applets/AppletStorePage.tsx"],"sourcesContent":["import { Puzzle, Star, Download } from \"lucide-react\";\nimport { PageLayout } from \"../../components/PageLayout\";\nimport { LoadingSkeleton } from \"../../components/LoadingSkeleton\";\nimport { useTimeCampus } from \"../../providers/TimeCampusProvider\";\nimport {\n useListConfigurationsQuery,\n type ConfigurationFieldsFragment,\n} from \"@/generated/wspace-operations\";\n\nexport function AppletStorePage() {\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 store/available applets (key starts with 'applet.store.')\n const storeApplets = configurations.filter((c: ConfigurationFieldsFragment) =>\n c.key.startsWith(\"applet.store.\"),\n );\n\n if (loading) {\n return (\n <PageLayout\n title=\"Applet Store\"\n description=\"Browse and install applets to extend TimeCampus\"\n >\n <LoadingSkeleton variant=\"card\" count={6} />\n </PageLayout>\n );\n }\n\n if (error) {\n return (\n <PageLayout\n title=\"Applet Store\"\n description=\"Browse and install applets to extend TimeCampus\"\n >\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 applet store data. Please try again later.\n </div>\n </PageLayout>\n );\n }\n\n return (\n <PageLayout\n title=\"Applet Store\"\n description=\"Browse and install applets to extend TimeCampus\"\n >\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {storeApplets.length === 0 ? (\n <div className=\"col-span-full p-8 text-center text-sm text-muted-foreground\">\n No applets available in the store yet. Store applets are managed as\n workspace configurations with the \"applet.store.\" key prefix.\n </div>\n ) : (\n storeApplets.map((applet: ConfigurationFieldsFragment) => {\n const val = applet.value as Record<string, unknown>;\n const name =\n (val.name as string) ?? applet.key.replace(\"applet.store.\", \"\");\n const description =\n applet.description ?? (val.description as string) ?? \"\";\n const category = (val.category as string) ?? \"general\";\n const rating = (val.rating as number) ?? 0;\n const downloads = (val.downloads as number) ?? 0;\n\n return (\n <div\n key={applet.id}\n className=\"rounded-xl border border-border bg-card p-5 transition-colors hover:bg-muted/50 cursor-pointer\"\n >\n <div className=\"flex items-start gap-3\">\n <div className=\"flex h-12 w-12 items-center justify-center rounded-xl bg-primary/10\">\n <Puzzle className=\"h-6 w-6 text-primary\" />\n </div>\n <div className=\"flex-1\">\n <p className=\"text-sm font-semibold text-foreground\">\n {name}\n </p>\n <p className=\"text-xs text-muted-foreground\">\n {description}\n </p>\n </div>\n </div>\n <div className=\"mt-3 flex items-center justify-between\">\n <div className=\"flex items-center gap-3 text-xs text-muted-foreground\">\n <div className=\"flex items-center gap-1\">\n <Star className=\"h-3 w-3 fill-amber-400 text-amber-400\" />\n <span>{rating}</span>\n </div>\n <div className=\"flex items-center gap-1\">\n <Download className=\"h-3 w-3\" />\n <span>{downloads}</span>\n </div>\n </div>\n <button className=\"rounded-md bg-primary px-3 py-1 text-xs font-medium text-primary-foreground hover:bg-primary/90\">\n Install\n </button>\n </div>\n </div>\n );\n })\n )}\n </div>\n </PageLayout>\n );\n}\n"],"mappings":";;;;;;;AASA,SAAgB,IAAkB;CAChC,IAAM,EAAE,iBAAc,OAAO,GAAe,EAEtC,EAAE,SAAM,YAAS,aAAU,EAA2B,EAC1D,WAAW,EAAE,OAAO,aAAoB,EACzC,CAAC,EAKI,KAHiB,GAAM,kBAAkB,EAAE,EAGb,QAAQ,MAC1C,EAAE,IAAI,WAAW,gBAAgB,CAClC;AA0BD,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;aAA+H;GAExI,CAAA;EACK,CAAA,GAKf,kBAAC,GAAD;EACE,OAAM;EACN,aAAY;YAEZ,kBAAC,OAAD;GAAK,WAAU;aACZ,EAAa,WAAW,IACvB,kBAAC,OAAD;IAAK,WAAU;cAA8D;IAGvE,CAAA,GAEN,EAAa,KAAK,MAAwC;IACxD,IAAM,IAAM,EAAO,OACb,IACH,EAAI,QAAmB,EAAO,IAAI,QAAQ,iBAAiB,GAAG,EAC3D,IACJ,EAAO,eAAgB,EAAI,eAA0B;AACrC,MAAI;IACtB,IAAM,IAAU,EAAI,UAAqB,GACnC,IAAa,EAAI,aAAwB;AAE/C,WACE,kBAAC,OAAD;KAEE,WAAU;eAFZ,CAIE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,OAAD;OAAK,WAAU;iBACb,kBAAC,GAAD,EAAQ,WAAU,wBAAyB,CAAA;OACvC,CAAA,EACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,KAAD;QAAG,WAAU;kBACV;QACC,CAAA,EACJ,kBAAC,KAAD;QAAG,WAAU;kBACV;QACC,CAAA,CACA;SACF;SACN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,GAAD,EAAM,WAAU,yCAA0C,CAAA,EAC1D,kBAAC,QAAD,EAAA,UAAO,GAAc,CAAA,CACjB;WACN,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,GAAD,EAAU,WAAU,WAAY,CAAA,EAChC,kBAAC,QAAD,EAAA,UAAO,GAAiB,CAAA,CACpB;UACF;UACN,kBAAC,UAAD;OAAQ,WAAU;iBAAkG;OAE3G,CAAA,CACL;QACF;OA/BC,EAAO,GA+BR;KAER;GAEA,CAAA;EACK,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InstalledAppletsPage.d.ts","sourceRoot":"","sources":["../../../../src/timecampus/pages/applets/InstalledAppletsPage.tsx"],"names":[],"mappings":"AAUA,wBAAgB,oBAAoB,4CAyGnC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
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 { Puzzle as a, Settings as o } from "lucide-react";
|
|
7
|
+
import { jsx as s, jsxs as c } from "react/jsx-runtime";
|
|
8
|
+
//#region src/timecampus/pages/applets/InstalledAppletsPage.tsx
|
|
9
|
+
function l() {
|
|
10
|
+
let { workspaceId: l = "" } = e(), { data: u, loading: d, error: f } = i({ variables: { scope: "WORKSPACE" } }), p = (u?.configurations ?? []).filter((e) => e.key.startsWith("applet.installed."));
|
|
11
|
+
return d ? /* @__PURE__ */ s(n, {
|
|
12
|
+
title: "Installed Applets",
|
|
13
|
+
description: "Manage your installed applets and integrations",
|
|
14
|
+
children: /* @__PURE__ */ s(r, {
|
|
15
|
+
variant: "list",
|
|
16
|
+
count: 5
|
|
17
|
+
})
|
|
18
|
+
}) : f ? /* @__PURE__ */ s(n, {
|
|
19
|
+
title: "Installed Applets",
|
|
20
|
+
description: "Manage your installed applets and integrations",
|
|
21
|
+
children: /* @__PURE__ */ s("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 installed applets. Please try again later."
|
|
24
|
+
})
|
|
25
|
+
}) : /* @__PURE__ */ s(n, {
|
|
26
|
+
title: "Installed Applets",
|
|
27
|
+
description: "Manage your installed applets and integrations",
|
|
28
|
+
children: /* @__PURE__ */ s("div", {
|
|
29
|
+
className: "rounded-xl border border-border bg-card",
|
|
30
|
+
children: /* @__PURE__ */ s("div", {
|
|
31
|
+
className: "divide-y divide-border",
|
|
32
|
+
children: p.length === 0 ? /* @__PURE__ */ s("div", {
|
|
33
|
+
className: "p-8 text-center text-sm text-muted-foreground",
|
|
34
|
+
children: "No applets installed yet. Installed applets are stored as workspace configurations with the \"applet.installed.\" key prefix."
|
|
35
|
+
}) : p.map((e) => {
|
|
36
|
+
let n = e.value, r = n.name ?? e.key.replace("applet.installed.", ""), i = n.category ?? "general", l = n.version ?? "1.0.0", u = n.author ?? "Unknown", d = n.isActive ?? !0, f = n.updateAvailable ?? !1;
|
|
37
|
+
return /* @__PURE__ */ c("div", {
|
|
38
|
+
className: "flex items-center justify-between p-4 hover:bg-muted/50 transition-colors",
|
|
39
|
+
children: [/* @__PURE__ */ c("div", {
|
|
40
|
+
className: "flex items-center gap-3",
|
|
41
|
+
children: [/* @__PURE__ */ s("div", {
|
|
42
|
+
className: "flex h-10 w-10 items-center justify-center rounded-lg bg-primary/10",
|
|
43
|
+
children: /* @__PURE__ */ s(a, { className: "h-5 w-5 text-primary" })
|
|
44
|
+
}), /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ c("div", {
|
|
45
|
+
className: "flex items-center gap-2",
|
|
46
|
+
children: [/* @__PURE__ */ s("p", {
|
|
47
|
+
className: "text-sm font-medium text-foreground",
|
|
48
|
+
children: r
|
|
49
|
+
}), f && /* @__PURE__ */ s("span", {
|
|
50
|
+
className: "inline-flex rounded-full bg-blue-100 px-2 py-0.5 text-xs font-medium text-blue-800 dark:bg-blue-900/30 dark:text-blue-400",
|
|
51
|
+
children: "Update"
|
|
52
|
+
})]
|
|
53
|
+
}), /* @__PURE__ */ c("p", {
|
|
54
|
+
className: "text-xs text-muted-foreground",
|
|
55
|
+
children: [
|
|
56
|
+
"v",
|
|
57
|
+
l,
|
|
58
|
+
" · by ",
|
|
59
|
+
u,
|
|
60
|
+
" · ",
|
|
61
|
+
i
|
|
62
|
+
]
|
|
63
|
+
})] })]
|
|
64
|
+
}), /* @__PURE__ */ c("div", {
|
|
65
|
+
className: "flex items-center gap-2",
|
|
66
|
+
children: [/* @__PURE__ */ s("span", {
|
|
67
|
+
className: `inline-flex rounded-full px-2 py-0.5 text-xs font-medium ${t(d ? "active" : "inactive")}`,
|
|
68
|
+
children: d ? "Active" : "Disabled"
|
|
69
|
+
}), /* @__PURE__ */ s("button", {
|
|
70
|
+
className: "rounded-md p-1.5 hover:bg-muted",
|
|
71
|
+
children: /* @__PURE__ */ s(o, { className: "h-4 w-4 text-muted-foreground" })
|
|
72
|
+
})]
|
|
73
|
+
})]
|
|
74
|
+
}, e.id);
|
|
75
|
+
})
|
|
76
|
+
})
|
|
77
|
+
})
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
//#endregion
|
|
81
|
+
export { l as InstalledAppletsPage };
|
|
82
|
+
|
|
83
|
+
//# sourceMappingURL=InstalledAppletsPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InstalledAppletsPage.js","names":[],"sources":["../../../../src/timecampus/pages/applets/InstalledAppletsPage.tsx"],"sourcesContent":["import { Puzzle, Settings, ExternalLink } 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 InstalledAppletsPage() {\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 installed applets (key starts with 'applet.installed.')\n const applets = configurations.filter((c: ConfigurationFieldsFragment) =>\n c.key.startsWith(\"applet.installed.\"),\n );\n\n if (loading) {\n return (\n <PageLayout\n title=\"Installed Applets\"\n description=\"Manage your installed applets and integrations\"\n >\n <LoadingSkeleton variant=\"list\" count={5} />\n </PageLayout>\n );\n }\n\n if (error) {\n return (\n <PageLayout\n title=\"Installed Applets\"\n description=\"Manage your installed applets and integrations\"\n >\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 installed applets. Please try again later.\n </div>\n </PageLayout>\n );\n }\n\n return (\n <PageLayout\n title=\"Installed Applets\"\n description=\"Manage your installed applets and integrations\"\n >\n <div className=\"rounded-xl border border-border bg-card\">\n <div className=\"divide-y divide-border\">\n {applets.length === 0 ? (\n <div className=\"p-8 text-center text-sm text-muted-foreground\">\n No applets installed yet. Installed applets are stored as\n workspace configurations with the \"applet.installed.\" key prefix.\n </div>\n ) : (\n applets.map((applet: ConfigurationFieldsFragment) => {\n const val = applet.value as Record<string, unknown>;\n const name =\n (val.name as string) ??\n applet.key.replace(\"applet.installed.\", \"\");\n const category = (val.category as string) ?? \"general\";\n const version = (val.version as string) ?? \"1.0.0\";\n const author = (val.author as string) ?? \"Unknown\";\n const isActive = (val.isActive as boolean) ?? true;\n const hasUpdate = (val.updateAvailable as boolean) ?? false;\n\n return (\n <div\n key={applet.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 <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-primary/10\">\n <Puzzle className=\"h-5 w-5 text-primary\" />\n </div>\n <div>\n <div className=\"flex items-center gap-2\">\n <p className=\"text-sm font-medium text-foreground\">\n {name}\n </p>\n {hasUpdate && (\n <span className=\"inline-flex rounded-full bg-blue-100 px-2 py-0.5 text-xs font-medium text-blue-800 dark:bg-blue-900/30 dark:text-blue-400\">\n Update\n </span>\n )}\n </div>\n <p className=\"text-xs text-muted-foreground\">\n v{version} · by {author} · {category}\n </p>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <span\n className={`inline-flex rounded-full px-2 py-0.5 text-xs font-medium ${getStatusColor(isActive ? \"active\" : \"inactive\")}`}\n >\n {isActive ? \"Active\" : \"Disabled\"}\n </span>\n <button className=\"rounded-md p-1.5 hover:bg-muted\">\n <Settings className=\"h-4 w-4 text-muted-foreground\" />\n </button>\n </div>\n </div>\n );\n })\n )}\n </div>\n </div>\n </PageLayout>\n );\n}\n"],"mappings":";;;;;;;;AAUA,SAAgB,IAAuB;CACrC,IAAM,EAAE,iBAAc,OAAO,GAAe,EAEtC,EAAE,SAAM,YAAS,aAAU,EAA2B,EAC1D,WAAW,EAAE,OAAO,aAAoB,EACzC,CAAC,EAKI,KAHiB,GAAM,kBAAkB,EAAE,EAGlB,QAAQ,MACrC,EAAE,IAAI,WAAW,oBAAoB,CACtC;AA0BD,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;aAA+H;GAExI,CAAA;EACK,CAAA,GAKf,kBAAC,GAAD;EACE,OAAM;EACN,aAAY;YAEZ,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,OAAD;IAAK,WAAU;cACZ,EAAQ,WAAW,IAClB,kBAAC,OAAD;KAAK,WAAU;eAAgD;KAGzD,CAAA,GAEN,EAAQ,KAAK,MAAwC;KACnD,IAAM,IAAM,EAAO,OACb,IACH,EAAI,QACL,EAAO,IAAI,QAAQ,qBAAqB,GAAG,EACvC,IAAY,EAAI,YAAuB,WACvC,IAAW,EAAI,WAAsB,SACrC,IAAU,EAAI,UAAqB,WACnC,IAAY,EAAI,YAAwB,IACxC,IAAa,EAAI,mBAA+B;AAEtD,YACE,kBAAC,OAAD;MAEE,WAAU;gBAFZ,CAIE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,OAAD;QAAK,WAAU;kBACb,kBAAC,GAAD,EAAQ,WAAU,wBAAyB,CAAA;QACvC,CAAA,EACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,KAAD;SAAG,WAAU;mBACV;SACC,CAAA,EACH,KACC,kBAAC,QAAD;SAAM,WAAU;mBAA4H;SAErI,CAAA,CAEL;WACN,kBAAC,KAAD;QAAG,WAAU;kBAAb;SAA6C;SACzC;SAAQ;SAAc;SAAO;SAAW;SACxC;UACA,EAAA,CAAA,CACF;UACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD;QACE,WAAW,4DAA4D,EAAe,IAAW,WAAW,WAAW;kBAEtH,IAAW,WAAW;QAClB,CAAA,EACP,kBAAC,UAAD;QAAQ,WAAU;kBAChB,kBAAC,GAAD,EAAU,WAAU,iCAAkC,CAAA;QAC/C,CAAA,CACL;SACF;QAjCC,EAAO,GAiCR;MAER;IAEA,CAAA;GACF,CAAA;EACK,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApplicationUsagePage.d.ts","sourceRoot":"","sources":["../../../../src/timecampus/pages/application-usage/ApplicationUsagePage.tsx"],"names":[],"mappings":"AAqBA,wBAAgB,oBAAoB,4CAwJnC"}
|